Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
378 commits
Select commit Hold shift + click to select a range
699e092
фикс fonts.fontWeight.regular
Apr 15, 2026
bc43fa3
Merge pull request #26 from cdek-it/panel.divider
andreytsygankov Apr 15, 2026
c8dd393
Merge branch 'feature/styles-debug' into panel.card
khaliulin Apr 15, 2026
9a9a776
Merge branch 'feature/styles-debug' into misc.ProgressSpinner
khaliulin Apr 15, 2026
e22c44f
Merge branch 'feature/styles-debug' into overlay.dialog
khaliulin Apr 15, 2026
d199df9
toast: стилизация, сторисы, обёртки
Apr 15, 2026
97e61d7
фикс стилизации и сторисов согласно паттернов проектирования
Apr 15, 2026
d2b737a
map-tokens.ts восстановлен и дополнен
Apr 15, 2026
c26553d
Merge pull request #24 from cdek-it/misc.ProgressSpinner
andreytsygankov Apr 15, 2026
384c825
tabs: стилизация
Apr 15, 2026
67c51f2
фикс применения пропсов
Apr 15, 2026
92a5e21
timeline: стилизация
Apr 16, 2026
47df8e4
доработка вида 'vertical' и 'horizontal'
Apr 16, 2026
85949ef
feat(inputtext): компонент, стилизация, сторисы
Apr 16, 2026
cbe6ed8
стилизация размеров компонента
Apr 16, 2026
99c19ff
фикс padding для float label
Apr 16, 2026
8526b89
экспорт StoryObj с render: (args) => ({ props: { ...args, value }, te…
Apr 16, 2026
de70553
inputnumber: стилизация, сторисы, обёртка
Apr 16, 2026
3cdc5ea
фикс размера кнопок
Apr 17, 2026
f1f83f9
фикс границ для сторис Buttons
Apr 17, 2026
92e91fc
inputotp: стилизация, сторисы, обёртки
Apr 17, 2026
763bb6d
фикс размера xlarge
Apr 17, 2026
0f93319
заменил p-button на ButtonComponent
Apr 17, 2026
ef0716b
regular для fontWeight
Apr 17, 2026
b729d9e
dialog: оборачиваем footerTemplate в @if, аналогично headerTemplate
Apr 17, 2026
4421117
dialog сторис: убираем @ViewChild('footer'), переменная #footer досту…
Apr 17, 2026
0bc52f5
dialog сторис: заменяем p-button на ButtonComponent, (onClick) → (click)
Apr 17, 2026
175a7e4
dialog: UiDialogService.providers() инкапсулирует DialogService, прай…
Apr 17, 2026
58640e1
удаление файла claude.md
Apr 17, 2026
892dd28
метод open() принимает injector: Injector вторым аргументом
Apr 17, 2026
d2925f2
input-group: стилизация
Apr 17, 2026
99bfd5f
cr fixes
AxyIX Apr 18, 2026
35dddcd
Merge pull request #31 from cdek-it/overlay.dialog
AxyIX Apr 18, 2026
946783b
cr fixes
AxyIX Apr 18, 2026
f1cb0f5
обновлён .gitignore
Apr 20, 2026
90e6391
Merge branch 'feature/styles-debug' into messages.message
khaliulin Apr 20, 2026
369ede4
Merge branch 'feature/styles-debug' into messages.toast
khaliulin Apr 20, 2026
e04c0f2
refactor(toast): создать UiToastService как обёртку над MessageService
Apr 20, 2026
0f944e8
refactor(toast): сторисы используют ToastComponent и UiToastService в…
Apr 20, 2026
9dae52d
refactor(toast): обновить документацию stories на UiToastService
Apr 20, 2026
0bf96ef
обновлён .gitignore
Apr 20, 2026
36fff85
refactor(tabs): заменить *ngFor на @for в шаблоне
Apr 20, 2026
ee57574
refactor(tabs): заменить *ngIf на @if, убрать NgIf импорт
Apr 20, 2026
f92632d
refactor(tabs): единообразный экспорт сторисов через export { ... }
Apr 20, 2026
33e69ba
обновлён .gitignore
Apr 20, 2026
dc980d1
modified .gitignore
Apr 20, 2026
4706a04
textarea: стилизация
Apr 20, 2026
0f358a7
фикс размеров; добавлена сторис float label
Apr 20, 2026
4bae493
inputmask: стилизация
Apr 20, 2026
7fef133
добавление пропса размеров
Apr 20, 2026
d725e98
фикс сторисов для применения пропса size; стилизация компонента согла…
Apr 20, 2026
c92fb5a
добавлен tabindex=0 и обработчики клавиатуры на кнопку очистки
Apr 20, 2026
20a0331
удалён параметр variant — не актуален
Apr 20, 2026
9370287
добавлена поддержка тёмной темы для disabled/readonly background и color
Apr 20, 2026
798df8b
border и box-shadow остаются красными при focus+invalid
Apr 20, 2026
28036b9
добавлен box-shadow при фокусе
Apr 20, 2026
a9fab15
добавлен ngClass !w-full на iconfield при fluid
Apr 20, 2026
e3dea3d
удалены disabled/invalid из @Input, используются через formControl
Apr 21, 2026
3216b4d
удалены disabled/invalid/ngModel из stories, используются через formC…
Apr 21, 2026
28735e7
добавлен story FloatLabel + Invalid
Apr 21, 2026
aeed563
modified .gitignore
Apr 21, 2026
10d763f
аддон для поддержки тёмной темы
Apr 21, 2026
e1cb48d
Merge branch 'feature/styles-debug' into form.inputtext
Apr 21, 2026
885170f
цвет и ширина для focusRing для состояния focus
Apr 21, 2026
d69122d
inputtext: disabled/invalid в stories через FormControl + NgControl в…
Apr 21, 2026
0d78e17
раскомментирован source.code в stories Disabled/Invalid
Apr 21, 2026
0acd486
макрер обязательного поля для FloatLabel
Apr 21, 2026
efee79f
в Controls чекбокс required для переключения маркера required
Apr 21, 2026
6550075
focusRing для invalid при focus
Apr 21, 2026
b3be4c7
удалён пропс variant из TextareaComponent
Apr 21, 2026
eac3d77
добавлен showClear + NgControl для invalid в TextareaComponent
Apr 21, 2026
91907ea
stories Textarea переведены на FormControl + NgControl в компоненте
Apr 21, 2026
4a810b4
textarea: box-shadow при фокусе, исправлен disabled/readonly CSS, inv…
Apr 21, 2026
4664087
padding-right когда активен showClear
Apr 21, 2026
c9c90f4
доабвлены пропсы для FloatLabel
Apr 21, 2026
48ba27a
inputnumber: box-shadow при фокусе, invalid border при focus, NgControl
Apr 21, 2026
4b749f6
inputnumber stories Buttons/Disabled/FloatLabel: formControl, source.…
Apr 21, 2026
bdbe29a
inputnumber story Currency: mode=currency → suffix=' ₽' (баг PrimeNG …
Apr 21, 2026
397206c
inputnumber stories: minFractionDigits/maxFractionDigits в argTypes, …
Apr 21, 2026
d59162d
обновлён .gitignore
Apr 21, 2026
2c226f2
Merge remote-tracking branch 'origin/feature/styles-debug' into menu.…
Apr 21, 2026
c883830
Merge branch 'feature/styles-debug' into form.inputnumber
Apr 21, 2026
626821c
сорс для сниппетов
Apr 21, 2026
c980261
Merge pull request #51 from cdek-it/form.inputtext
Tenkoru Apr 21, 2026
ac38181
Merge pull request #57 from cdek-it/form.TextArea
Tenkoru Apr 21, 2026
16dec20
Merge pull request #36 from cdek-it/menu.megamenu
persi14 Apr 22, 2026
ef11dec
Merge branch 'feature/styles-debug' into panel.tabs
khaliulin Apr 22, 2026
9e9deca
Merge branch 'feature/styles-debug' into form.listbox
khaliulin Apr 22, 2026
5822503
MegaMenuModel.items -> MegaMenuModel[][] | MegaMenuModel[]
Apr 22, 2026
1581763
paginator: стилизация
Apr 22, 2026
a6f00ca
select: стилизация
Apr 22, 2026
f606588
фикс пропса size для filter, grouped, custom, editable; showClear для…
Apr 22, 2026
5ad5ca4
Grouped, Custom и Editable добавлен @Input() showClear
Apr 22, 2026
37dcfee
Merge pull request #61 from cdek-it/menu.megamenu
persi14 Apr 22, 2026
9abe164
Merge branch 'feature/styles-debug' into menu.tieredmenu
khaliulin Apr 22, 2026
cb240d0
Merge branch 'feature/styles-debug' into menu.panelmenu
khaliulin Apr 22, 2026
3f6c6ec
TieredMenu: удалён сторис Default
Apr 22, 2026
9a51687
Merge pull request #38 from cdek-it/menu.tieredmenu
persi14 Apr 22, 2026
8096b7f
добавил файл map-tokens.ts
Apr 22, 2026
86da477
добавил cardCss map-tokens.ts
Apr 22, 2026
ab83b5e
Merge branch 'feature/styles-debug' into panel.card
khaliulin Apr 22, 2026
2c252c7
Merge branch 'form.inputtext' into form.inputnumber
khaliulin Apr 22, 2026
3071ae3
Merge pull request #52 from cdek-it/form.inputnumber
Tenkoru Apr 22, 2026
1dbdb81
cardCss добавлен в map-tokens.ts
Apr 22, 2026
454f722
Merge pull request #25 from cdek-it/panel.card
andreytsygankov Apr 22, 2026
7104feb
подключение файла стилей
Apr 22, 2026
d6c3acd
timeline: реализация пропса showCaption
Apr 23, 2026
42f4853
timeline: реализация пропса line (solid/dashed/dotted/none)
Apr 23, 2026
5f8d1bc
timeline: реализация пропса icon для кастомной иконки
Apr 23, 2026
32e97ce
timeline: поддержка тёмной темы (цвет текста и маркеров)
Apr 23, 2026
771fab6
timeline: реализация пропса markerColor для кастомного цвета
Apr 23, 2026
70fa4f2
storybook: тоггл светлой/тёмной темы в тулбаре
Apr 23, 2026
8ebf03f
storybook: фон превью меняется при переключении на тёмную тему
Apr 23, 2026
94b32de
storybook: отключён аддон change background
Apr 23, 2026
df29276
timeline: storybook-пример для пропса line
Apr 23, 2026
f3f5cdf
timeline: storybook-пример для пропса icon
Apr 23, 2026
056c3e5
timeline: storybook-пример для пропса markerColor
Apr 23, 2026
dea2803
отключение theme addon для страниц docs
Apr 23, 2026
f53926b
пропс layout показывает валидные значения align; добавление иконок дл…
Apr 23, 2026
1a585ae
select: добавлен пропс floatLabel с реализацией и стори
Apr 23, 2026
323a61a
select: добавлен пропс dropdownIcon с реализацией и стори
Apr 23, 2026
d824a71
fix: добавлен dropdownIcon в SelectArgs для типизации стори
Apr 23, 2026
d78e702
fix: control type в argTypes для dropdownIcon стори
Apr 23, 2026
3f1a27a
fix: литеральный тип для control в dropdownIcon argTypes
Apr 23, 2026
3a04377
select stories: добавлены пропсы readonly, disabled, invalid во все п…
Apr 23, 2026
7127d50
select: стили .p-floatlabel label привязаны к dt() токенам шрифтов
Apr 23, 2026
2d6b4cb
select: font-family токен для .p-select-label.p-placeholder
Apr 23, 2026
902414a
select: font-family токен для .p-floatlabel-in .p-select-label
Apr 23, 2026
18e6b4f
select: font-family токен для .p-select-label
Apr 23, 2026
ed958e1
select: font-family токен для .p-select-option
Apr 23, 2026
ed2983d
inputtext, textarea, inputnumber: font-family токен для полей, placeh…
Apr 23, 2026
47099dd
listbox: OnPush strategy, protected modelValue
Apr 24, 2026
687c7e9
Merge branch 'feature/styles-debug' into panel.timeline
khaliulin Apr 24, 2026
47dd9f4
Merge pull request #50 from cdek-it/panel.timeline
Tenkoru Apr 24, 2026
151c768
select: заменён dropdownIcon на checkmark
Apr 24, 2026
7212b8b
DS-559
AxyIX Apr 26, 2026
f255303
chore(release): sync src/lib package version to v0.0.3-test
github-actions[bot] Apr 26, 2026
9290bdc
DS-559
AxyIX Apr 26, 2026
bccda63
Merge remote-tracking branch 'origin/feature/DS-559' into feature/DS-559
AxyIX Apr 26, 2026
aeeba3a
chore(release): sync src/lib package version to v0.0.4-test
github-actions[bot] Apr 26, 2026
72c9e62
DS-559
AxyIX Apr 26, 2026
a6517b7
chore(release): sync src/lib package version to v0.2.0-test
github-actions[bot] Apr 26, 2026
4b5c322
Merge remote-tracking branch 'origin/feature/DS-559' into feature/DS-559
AxyIX Apr 26, 2026
9cdb25a
Merge remote-tracking branch 'origin/feature/DS-559' into feature/DS-559
AxyIX Apr 26, 2026
28c8637
DS-559
AxyIX Apr 26, 2026
c954f15
DS-559
AxyIX Apr 26, 2026
ad73c72
chore(release): sync src/lib package version to v0.2.2-test
github-actions[bot] Apr 26, 2026
43ebf4f
DS-559
AxyIX Apr 26, 2026
536bba3
Merge remote-tracking branch 'origin/feature/DS-559' into feature/DS-559
AxyIX Apr 26, 2026
2319fa4
chore(release): sync src/lib package version to v0.2.3-test
github-actions[bot] Apr 26, 2026
dc5fc70
DS-559
AxyIX Apr 26, 2026
379f254
Merge remote-tracking branch 'origin/feature/DS-559' into feature/DS-559
AxyIX Apr 26, 2026
5c84768
chore(release): sync src/lib package version to v0.2.4-test
github-actions[bot] Apr 26, 2026
417d822
DS-559
AxyIX Apr 26, 2026
bd3da5d
Merge remote-tracking branch 'origin/feature/DS-559' into feature/DS-559
AxyIX Apr 26, 2026
39ddb8c
DS-559
AxyIX Apr 26, 2026
2b4f1de
DS-559
AxyIX Apr 26, 2026
c2cc33c
Merge pull request #30 from cdek-it/panel.scrollpanel
Tenkoru Apr 27, 2026
24833ff
select: checkmark иконка ti-check вместо пустого SVG + параметр check…
Apr 27, 2026
2766472
password: стилизация, сторисы, обёртик
Apr 20, 2026
6256c6d
добавление размеров для компонента
Apr 20, 2026
25a7cfe
Merge branch 'form.inputtext' into form.password
khaliulin Apr 27, 2026
7591ddb
password: цвет meter-text на text.mutedColor, focus box-shadow, inval…
Apr 27, 2026
2707e74
password: floatLabel и label props с p-floatlabel обёрткой
Apr 27, 2026
ec63673
password: стори FloatLabel через обёртку, argTypes floatLabel и label
Apr 27, 2026
21de785
подключение файла стилей для компонентом password
Apr 27, 2026
084113a
paginator: пропсы showCurrentPageReport и showJumpToPageInput в сторис
Apr 27, 2026
decba74
DS-559
AxyIX Apr 27, 2026
e1ea9fe
Merge branch 'form.inputtext' into form.inputotp
khaliulin Apr 28, 2026
0f64a0b
Merge branch 'form.inputtext' into form.inputgroup
khaliulin Apr 28, 2026
90bc747
Merge branch 'feature/styles-debug' into messages.message
khaliulin Apr 28, 2026
bea1ea5
Merge pull request #60 from cdek-it/data.paginator
Tenkoru Apr 28, 2026
251af5a
фикс отображения иконки в option компонента
Apr 28, 2026
6a6f41b
фикс стилей иконки чекмарк в селекте
Apr 28, 2026
fcf206a
фикс превью сторисов; доработка template
Apr 28, 2026
a571d3c
фикс применения пропса floatLabel
Apr 28, 2026
0c969a4
Merge pull request #62 from cdek-it/form.select
Tenkoru Apr 29, 2026
a7567ea
~fix(toggleswitch): fix ng control inject.
ichiesov Apr 30, 2026
6d37af6
~cleanup
ichiesov Apr 30, 2026
e6c590e
Merge pull request #19 from cdek-it/form.inputswitch
ichiesov Apr 30, 2026
45ebfe4
Merge pull request #40 from cdek-it/messages.message
ichiesov Apr 30, 2026
db74d50
Merge branch 'feature/styles-debug' into form.inputtext
khaliulin Apr 30, 2026
4317e14
рефакторрирнг: formControls
Apr 30, 2026
3742676
~fix(inputgroup): add missing import.
ichiesov Apr 30, 2026
134f59c
Merge branch 'form.inputtext' into form.inputgroup
ichiesov Apr 30, 2026
f81dcbb
formControl
Apr 30, 2026
b106dc1
Merge branch 'form.inputtext' into form.InputMask
khaliulin Apr 30, 2026
12b2d22
stories: замена ngModel на formControl
Apr 30, 2026
28aacbb
~fix(input-mask): fix import map tokens.
ichiesov May 4, 2026
852146c
фикс рендера компонентов для disabled, invalid, readonly
May 4, 2026
c804cb6
setDisabledState(true) вызывается при disabled FormControl
May 4, 2026
fb23815
сниппет для Sizes оформлен как @Component пример
May 4, 2026
2fa8f81
Удалены:
May 4, 2026
458bb99
Merge pull request #58 from cdek-it/form.InputMask
ichiesov May 4, 2026
83afd47
Merge branch 'form.inputtext' into form.inputotp
khaliulin May 4, 2026
7f09939
ngModel заменён на formControl; Code snippets — оформлены как полный …
May 4, 2026
2925824
~fix(input-otp): add missing import.
ichiesov May 4, 2026
c3c0931
argTypes: readonly, tabindex, autofocus отображаются на странице Docs
May 4, 2026
65ddc76
Merge pull request #53 from cdek-it/form.inputotp
ichiesov May 4, 2026
bf7242d
Merge branch 'form.inputtext' into form.password
khaliulin May 4, 2026
1af7894
Merge pull request #37 from cdek-it/menu.panelmenu
persi14 May 4, 2026
142dae4
Merge pull request #55 from cdek-it/form.password
Tenkoru May 4, 2026
30fe83d
Merge branch 'form.inputtext' into form.inputgroup
khaliulin May 5, 2026
f7c0550
Merge branch 'feature/styles-debug' into messages.toast
khaliulin May 5, 2026
3f6e7ff
Merge branch 'feature/styles-debug' of github.com:cdek-it/angular-ui-…
ichiesov May 6, 2026
b5c34ca
Merge branch 'feature/styles-debug' of github.com:cdek-it/angular-ui-…
ichiesov May 6, 2026
4773b65
Merge pull request #73 from cdek-it/form.InputMask
ichiesov May 6, 2026
3d8799f
Merge pull request #74 from cdek-it/form.password
ichiesov May 6, 2026
2743098
~fix: add password to map tokens.
ichiesov May 6, 2026
29caca3
Merge branch 'feature/styles-debug' of github.com:cdek-it/angular-ui-…
ichiesov May 6, 2026
bfaac41
~update branch.
ichiesov May 6, 2026
ed89391
Merge branch 'feature/styles-debug' of github.com:cdek-it/angular-ui-…
ichiesov May 6, 2026
00873ed
рефакторинг на @Component с formControl; FloatLabel stories оставлены…
May 6, 2026
5b38ebd
FloatLabel stories на input-text; showClear поддерживает атрибут без …
May 6, 2026
5d5800e
FloatLabel: нативный pInputText с formControl для корректной работы p…
May 6, 2026
749e491
fix: FloatLabel с input-text — display:contents + placeholder условный
May 6, 2026
6d87a57
Merge pull request #68 from cdek-it/form.inputtext
ichiesov May 6, 2026
e20cb73
Merge branch 'feature/styles-debug' of github.com:cdek-it/angular-ui-…
ichiesov May 6, 2026
2af660e
подключение стилей для компонента InputGroup
May 6, 2026
c8752c0
Merge pull request #72 from cdek-it/form.inputgroup
ichiesov May 6, 2026
d847b73
Merge branch 'feature/styles-debug' into feature/DS-559
AxyIX May 14, 2026
6c75f20
DS-559
AxyIX May 17, 2026
0a11622
Merge pull request #70 from cdek-it/feature/DS-559
AxyIX May 17, 2026
c113e6f
Merge branch 'feature/styles-debug' into panel.tabs
AxyIX May 18, 2026
9277af5
DS-502
AxyIX May 18, 2026
8d68c69
Merge pull request #46 from cdek-it/panel.tabs
AxyIX May 18, 2026
b78b028
Merge branch 'feature/styles-debug' into form.listbox
AxyIX May 19, 2026
28926a8
DS-502
AxyIX May 19, 2026
91405b5
DS-513
AxyIX May 19, 2026
b19cd66
Merge pull request #39 from cdek-it/form.listbox
AxyIX May 19, 2026
a5ac52b
Merge branch 'feature/styles-debug' into menu.menu
AxyIX May 19, 2026
0dc7706
DS-513
AxyIX May 19, 2026
d35df90
DS-513
AxyIX May 22, 2026
c51fc8d
Merge pull request #34 from cdek-it/menu.menu
AxyIX May 22, 2026
48f876e
Merge branch 'feature/styles-debug' into messages.toast
AxyIX May 22, 2026
daf8812
DS-513
AxyIX May 22, 2026
e46f4c8
DS-516
AxyIX May 22, 2026
971c49d
DS-516
AxyIX May 22, 2026
76ceddd
DS-516
AxyIX May 22, 2026
48dcfdd
Merge pull request #41 from cdek-it/messages.toast
AxyIX May 22, 2026
ef31f60
DS-516
AxyIX May 22, 2026
41e9504
Merge pull request #76 from cdek-it/messages.toast
AxyIX May 22, 2026
007084e
galleria: стилизация
Apr 22, 2026
d395b01
замена и подключение изображений на локальные
Apr 22, 2026
c35e5a4
galleria: fix ButtonComponent import after rename
May 25, 2026
041cc52
Merge pull request #64 from cdek-it/media.gallery
andreytsygankov May 25, 2026
1497b2b
carousel: стилизация, сторисы, обёртки
Apr 22, 2026
5bbd7ca
патч прототипа в preview.ts: после вызова оригинального сеттера, если…
May 25, 2026
eb7f979
Merge pull request #77 from cdek-it/media.gallery
andreytsygankov May 25, 2026
af33ef7
Merge pull request #59 from cdek-it/media.carousel
andreytsygankov May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .github/workflows/deploy-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main
- feature/styles-debug
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

Expand Down
62 changes: 58 additions & 4 deletions .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,76 @@ on:

permissions:
id-token: write
contents: read
contents: write

jobs:
publish-npm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org/
- name: Update npm
run: npm install -g npm@latest
- run: npm ci --production
- run: npm ci
- uses: reedyuk/npm-version@1.1.1
with:
version: ${{github.ref_name}}
- run: npm run copy:dist
- run: npm publish
- name: Sync src/lib/package.json version with root package.json
run: |
node -e "const fs=require('fs'); const path='src/lib/package.json'; const root=JSON.parse(fs.readFileSync('package.json')); const lib=JSON.parse(fs.readFileSync(path)); if(lib.version!==root.version){ lib.version=root.version; fs.writeFileSync(path, JSON.stringify(lib,null,2)+'\n'); }"
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add src/lib/package.json
# commit only if there are staged changes
git diff --cached --quiet || (git commit -m "chore(release): sync src/lib package version to ${{github.ref_name}}" && git push origin HEAD:refs/heads/${{ github.event.release.target_commitish }})
- run: npm run build:lib
- name: Prepare dist/package.json
run: |
set -euo pipefail
# Ensure dist exists and has its own package.json generated by the build
if [ ! -d dist ]; then echo "dist directory not found"; exit 1; fi
if [ ! -f dist/package.json ]; then echo "dist/package.json not found — expected build to generate it"; exit 1; fi
# Sync version in dist/package.json with root package.json (silent)
node -e "const fs=require('fs'); const root=JSON.parse(fs.readFileSync('package.json')); const p='dist/package.json'; const d=JSON.parse(fs.readFileSync(p)); if(d.version!==root.version){ d.version=root.version; fs.writeFileSync(p, JSON.stringify(d,null,2)+'\n'); }"
- name: Fix package.json issues inside dist (optional)
run: |
npm --prefix ./dist pkg fix || true
- name: Normalize dist/package.json (ensure correct name, version and repository)
run: |
node -e "const fs=require('fs'); const root=require('./package.json'); const srcExists=fs.existsSync('src/lib/package.json'); const src=srcExists? require('./src/lib/package.json'): null; const p='dist/package.json'; const d=JSON.parse(fs.readFileSync(p)); const wantedName= src? src.name : root.name; const wantedVersion=root.version; let changed=false; if(d.name!==wantedName){ d.name=wantedName; changed=true;} if(d.version!==wantedVersion){ d.version=wantedVersion; changed=true;} const normalizeRepo=(r)=>{ if(!r) return null; if(typeof r==='string') return r.replace(/^git\+/, '').replace(/\.git$/,''); if(r.url) return r.url.replace(/^git\+/, '').replace(/\.git$/,''); return null; }; const wantedRepo = normalizeRepo(root.repository) || (process.env.GITHUB_REPOSITORY? 'https://github.com/'+process.env.GITHUB_REPOSITORY : null); if(wantedRepo){ if(!d.repository){ d.repository = { type: 'git', url: wantedRepo }; changed=true; } else { const currentRepo=normalizeRepo(d.repository); if(currentRepo!==wantedRepo){ d.repository = { type: 'git', url: wantedRepo }; changed=true; } } } if(changed){ fs.writeFileSync(p, JSON.stringify(d,null,2)+'\n'); }"
- name: Pack dist and verify package.json inside tarball
run: |
set -euo pipefail
PACKAGE_DIR=dist
VERSION=$(node -e "console.log(require('./${PACKAGE_DIR}/package.json').version)")
# create tarball in workspace (pack local folder)
TARFILE=$(npm pack "./$PACKAGE_DIR")
mkdir -p verify_unpack
tar -xzf "$TARFILE" -C verify_unpack
# read version from inside tarball
INNER_VERSION=$(node -e "console.log(JSON.parse(require('fs').readFileSync('verify_unpack/package/package.json')).version)")
if [ "$INNER_VERSION" != "$VERSION" ]; then
echo "Error: version inside tarball ($INNER_VERSION) does not match dist/package.json ($VERSION)" >&2
exit 1
fi
# make TARFILE available to next step
echo "TARFILE=$TARFILE" >> $GITHUB_ENV
- name: Publish verified tarball to npm (use tag for prerelease versions)
run: |
set -euo pipefail
PACKAGE_DIR=dist
VERSION=$(node -e "console.log(require('./${PACKAGE_DIR}/package.json').version)")
TARFILE=${{ env.TARFILE }}
NAME=$(node -e "console.log(require('./${PACKAGE_DIR}/package.json').name)")
if [[ "$VERSION" == *-* ]]; then
TAG=$(echo "$VERSION" | sed -E 's/^[0-9]+\.[0-9]+\.[0-9]+-([^\.]+).*/\1/')
npm publish "$TARFILE" --tag "$TAG"
else
npm publish "$TARFILE"
fi
echo "Published ${NAME}@${VERSION}"
10 changes: 7 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ api-generator/typedoc.json
# файлы в этим папках компилятся и должны создаваться при сборке
src/assets/components/themes

./storybook-static
./debug-storybook.log
./documentation.json
/storybook-static
/debug-storybook.log
/documentation.json

.claude/*

.playwright-mcp/*
2 changes: 1 addition & 1 deletion .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { StorybookConfig } from '@storybook/angular';

const config: StorybookConfig = {
stories: ['../src/stories/**/*.mdx', '../src/stories/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: ['@storybook/addon-a11y', '@storybook/addon-docs'],
addons: ['@storybook/addon-a11y', '@storybook/addon-docs', '@storybook/addon-themes'],
framework: '@storybook/angular'
};
export default config;
12 changes: 12 additions & 0 deletions .storybook/manager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { addons } from 'storybook/manager-api';

addons.setConfig({
layoutCustomisations: {
showToolbar(state, defaultValue) {
if (state.viewMode === 'docs') {
return false;
}
return defaultValue;
},
},
});
37 changes: 35 additions & 2 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,37 @@
import { applicationConfig, Preview } from '@storybook/angular';
import { setCompodocJson } from '@storybook/addon-docs/angular';
import { withThemeByClassName } from '@storybook/addon-themes';
import docJson from '../documentation.json';
import { providePrimeNG } from 'primeng/config';
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
import { GalleriaItemSlot } from 'primeng/galleria';

import Preset from '../src/prime-preset/theme.preset';
// Fix PrimeNG bug: GalleriaItemSlot's main item slot has no `type` attribute,
// so the `item` setter's forEach loop never matches and context stays stale on updates.
(function patchGalleriaItemSlot() {
const desc = Object.getOwnPropertyDescriptor(GalleriaItemSlot.prototype, 'item');
if (desc?.set) {
const orig = desc.set;
Object.defineProperty(GalleriaItemSlot.prototype, 'item', {
...desc,
set(value: unknown) {
orig.call(this, value);
if ((this as any).context?.$implicit !== value) {
(this as any).context = { $implicit: value };
}
}
});
}
}());

import Preset from '../src/lib/providers/prime-preset/theme.preset';

import '!style-loader!css-loader!postcss-loader!sass-loader!../src/styles.scss';

setCompodocJson(docJson);

const DARK_MODE_SELECTOR = '.dark-mode';

const preview: Preview = {
decorators: [
applicationConfig({
Expand All @@ -19,15 +41,26 @@ const preview: Preview = {
theme: {
preset: Preset,
options: {
darkModeSelector: false,
darkModeSelector: '.dark',
cssLayer: false
}
}
})
]
}),
withThemeByClassName({
themes: {
light: '',
dark: 'dark'
},
defaultTheme: 'light'
})
],
parameters: {
backgrounds: { disable: true },
docs: {
globals: { theme: 'light' },
},
controls: {
matchers: {
color: /(background|color)$/i,
Expand Down
4 changes: 3 additions & 1 deletion .storybook/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true
},
"include": ["../src/stories/**/*.stories.*", "./preview.ts", "../src/prime-preset/**/*"],
"include": ["../src/stories/**/*.stories.*", "./preview.ts",
"../src/lib/providers/prime-preset/**/*"
],
"files": ["./typings.d.ts"]
}
3 changes: 3 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Project Rules

Основные правила и запреты — в `.claude/skills/generate-component/references/red-lines.md`.
104 changes: 57 additions & 47 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,75 @@
# angular-ui-kit

angular-ui-kit - это пресет темы для primeng, а также storybook с демонстрацией и документацией используемых компонентов.
Он позволяет быстро и легко строить новые интерфейсы в фирменном стиле CDEK.
`angular-ui-kit` — это полноценная библиотека UI-компонентов и сервисов для Angular с готовыми стилями, storybook для демонстрации и документацией.
Библиотека позволяет быстро и удобно добавлять готовые фирменные компоненты CDEK в приложения.

## Использование

1. Установите пакет @cdek-it/angular-ui-kit
1. Установите пакет `@cdek-it/angular-ui-kit`

```shell
npm install @cdek-it/angular-ui-kit
```

2. Импортируйте пресет темы в ваш angular-проект
2. Подключите провайдеры в ваш angular-проект. Важно: для корректной работы стилей необходимо использовать `provideExtraThemes()` в списке провайдеров, например:

```ts
import Preset from '@cdek-it/angular-ui-kit/dist/theme.preset.ts';
import { provideExtraThemes } from '@cdek-it/angular-ui-kit';
import { provideBrowserGlobalErrorListeners } from '@angular/platform-browser';
import { importProvidersFrom } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

export const appConfig: ApplicationConfig = {
providers: [
...,
provideAnimations(),
providePrimeNG({
theme: {
preset: Preset,
options: {
darkModeSelector: false,
cssLayer: false
}
}
})
provideBrowserGlobalErrorListeners(),
importProvidersFrom(BrowserModule),
provideExtraThemes(),
]
};
```

`provideExtraThemes()` необходим для правильной интеграции стилей библиотеки в приложение.

## Пример использования компонентов

Ниже простой пример использования входящих в библиотеку компонентов (вариант — `extra-button` и `extra-tag`). Вставьте в шаблон компонента или story:

```html
<div style="display: flex; flex-direction: column; gap: 16px; padding: 16px">
<extra-button label="hello"></extra-button>
<extra-button label="hello" [rounded]="true"></extra-button>
<extra-button label="hello" [text]="true"></extra-button>
<extra-tag [value]="'tag content'"></extra-tag>
</div>
```

Примечание: Нужно добавить импорт соответствующего модуля/компонентов библиотеки в ваш модуль или компонент. Пример для standalone-компонента (используется `imports` в декораторе):

```ts
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ExtraButtonComponent, ExtraTagComponent } from '@cdek-it/angular-ui-kit';

@Component({
selector: 'app-example',
standalone: true,
imports: [
ExtraButtonComponent,
CommonModule,
ExtraTagComponent,
],
template: `
<div style="display: flex; flex-direction: column; gap: 16px; padding: 16px">
<extra-button label="hello"></extra-button>
<extra-button label="hello" [rounded]="true"></extra-button>
<extra-button label="hello" [text]="true"></extra-button>
<extra-tag [value]="'tag content'"></extra-tag>
</div>
`
})
export class AppExample {}
```

## Используемые технологии и связанные зависимости

---
Expand All @@ -48,11 +85,14 @@ export const appConfig: ApplicationConfig = {

- Storybook 10

Важно: на данный момент компоненты библиотеки не работают без Zone.js. Убедитесь, что ваше приложение использует zone (Zone.js должен быть подключён). В большинстве стандартных Angular-приложений Zone.js подключён по умолчанию.

## Структура проекта

- `src/app` - базовое angular-приложение. Может использоваться как плейграунд для разработки и отладки.
- `src/stories` - набор story с компонентами для storybook.
- `src/prime-preset` - пресет темы для primeng, а также токены.
- `src/prime-preset` - пресет темы и токены (используется библиотекой для совместимости с PrimeNG).
- `src/lib` - исходники компонентов и сервисов библиотеки (компоненты, сервисы, модули и публичный API).

## Запуск storybook

Expand All @@ -77,33 +117,3 @@ npm run storybook
3. Убедитесь, что все состояния компонента выглядят верно. Если нет - смотрите раздел "[Правила доработки компонентов](#Правила доработки компонентов)" ниже.
4. Создать pull request в `main`, прикрепить его в задачу. Задачу отдать на ревью разработчикам и дизайнерам.
В случае замечаний ориентируемся на пункт `3` выше.

## Правила доработки компонентов

### Компоненты primeng

Если компонент несоответствует дизайну в figma, то:

1. Проверяем верность токенов. Если есть ошибки - сообщаем мейнтейнеру.
2. Если токены верны, и проблему можно решить кастомизацией css - согласуем доработки с мейнтейнером.
3. Если кастомизации css недостаточно, но можно решить проблему через шаблоны - согласуем доработки с мейнтейнером. Пример ниже.
Например, для `inputtext` нужен крестик с очисткой. Непосредственно такой опции в primeng нет, но можно использовать `p-inputIcon` с иконкой крестика, и следующим `source`-кодом в story:

```
// template
<p-inputIcon>
<input pInputText [(ngModel)]="value" placeholder="Input with clear icon" />
<i class="ti ti-cross" (click)="onClearClick()"></i>
</p-inputIcon>

// ts
onClearClick() {
this.value = '';
}
```
Важно, что бы в story был верный `source`-код, что бы разработчики могли просто его копировать и с минимальными доработками использовать у себя.
4. Если вариантов решения проблемы через способы выше нет - сообщаем мейнтейнеру. Далее будет подниматься вопрос о необходимости написания своего компонента.

### Кастомные компоненты

*todo будут разработаны при необходимости*
Loading
Loading