Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
b7f35fd
add components tokens
AxyIX Jan 23, 2026
2e5947f
example of button component
AxyIX Mar 20, 2026
97d2422
style: add space before closing brace in `ButtonSizesComponent`
Mar 23, 2026
630c163
button: пропс badge
Mar 26, 2026
c70bdb2
пропсы fluid, ariaLabel, autofocus, tabindex
Mar 26, 2026
1e7db4f
удаление логов от mcp
Mar 26, 2026
18e19a7
игнор файла documentation.json
Mar 26, 2026
cc6f074
cr fixes
AxyIX Apr 2, 2026
4810cab
Merge pull request #11 from cdek-it/feature/button-example
AxyIX Apr 2, 2026
25ce063
фон для сторисов; стилизация сторисов; фикс работы пропсов
Apr 3, 2026
eef8918
изменение маппера токенов на единый файл tokens.json
Apr 6, 2026
70b9478
badge: стилизация, сторисы, обёртка
Apr 6, 2026
8b8db32
группировка компонента badge; удаление файла с контекстом
Apr 6, 2026
005534c
avatar: стилизация, сторисы, обёртки
Apr 7, 2026
1b7c38a
checkbox: стилизация, сторисы, обёртки
Apr 7, 2026
90ba985
radiobutton: стилизация, сторисы, обёртки
Apr 7, 2026
3f1f619
rating: сторисы, обёртки
Apr 7, 2026
89350c2
tag: стилизация, сторисы, обёртки
Apr 7, 2026
b88df7a
breadcrumb: стилизация, сторисы, обёртки
Apr 7, 2026
0aa7a30
metergroup: стилизация, сторисы
Apr 7, 2026
d138810
редактирование группы компонента
Apr 7, 2026
dae19e6
редактирование группы компонента
Apr 7, 2026
e1b38ea
редактирование группы компонента
Apr 7, 2026
5b4b033
редактирование группы компонента
Apr 7, 2026
1556c4c
редактирование группы компонента
Apr 7, 2026
5301321
редактирование группы компонента
Apr 7, 2026
f53eb96
редактирование группы компонента Button
Apr 7, 2026
f12a0b5
progressbar: стилизация, сторисы, обёртки
Apr 7, 2026
a18a7b6
tooltip: стилизация, сторисы, обёртки
Apr 7, 2026
5dea3c1
progressspinner: стилизация, сторисы, обёртки
Apr 7, 2026
be03373
divider: стилизация, сторисы, обёртки
Apr 8, 2026
4a20675
chip: стилизация, сторисы, обёртки
Apr 8, 2026
35a01e4
slider: сторисы, обёртки
Apr 8, 2026
af25e73
фикс работы пропсов для компонента
Apr 8, 2026
a4804e8
skeleton: стилизация, сторисы, обёртки
Apr 8, 2026
5c83192
Merge pull request #16 from cdek-it/form.radiobutton
MoskvaVoronezh Apr 10, 2026
9f3a30a
Merge pull request #17 from cdek-it/form.rating
andreytsygankov Apr 10, 2026
80b1c3b
единый источник данных; убраны локальные константы
Apr 13, 2026
1dcf23a
убраны 'secondary', 'contrast' и null; добавлен [size]="size"
Apr 13, 2026
1a14d8e
фикс применения и отображения размера компонента
Apr 13, 2026
6357b3a
Merge branch 'feature/styles-debug' into misc.badge
khaliulin Apr 13, 2026
b863bc9
фикс стилизации варианта Group
Apr 13, 2026
57720dd
сторисы Icon-with-badge и image-with-badge со значением
Apr 13, 2026
9744d2f
фикс имопрта primeng/metergroup
Apr 13, 2026
72b8892
фикс дублирования value
Apr 13, 2026
66a9666
добавление source в код-сниппеты
Apr 13, 2026
4d8f730
Merge branch 'feature/styles-debug' into misc.metergroup
khaliulin Apr 13, 2026
7d354b5
фикс исморта из primeng/progressbar
Apr 13, 2026
fc9f129
Merge branch 'feature/styles-debug' into misc.progressbar
khaliulin Apr 13, 2026
9f93a2c
фикс импорта и лишнего правила
Apr 13, 2026
b553daa
Merge branch 'feature/styles-debug' into misc.chip
khaliulin Apr 13, 2026
5f19f15
исправлен импорт в description, убран onChange из argTypes, source.co…
Apr 13, 2026
40f9f5a
Merge branch 'feature/styles-debug' into form.slider
khaliulin Apr 13, 2026
136e41d
фикс импорта primeng/skeleton
Apr 13, 2026
dbe2242
Merge branch 'feature/styles-debug' into misc.skeleton
khaliulin Apr 13, 2026
76c883d
Merge branch 'feature/styles-debug' into overlay.tooltip
khaliulin Apr 13, 2026
cf2a31f
Merge branch 'feature/styles-debug' into misc.ProgressSpinner
khaliulin Apr 13, 2026
4e526be
Merge branch 'feature/styles-debug' into panel.divider
khaliulin Apr 13, 2026
ebc27be
Merge pull request #13 from cdek-it/misc.badge
ichiesov Apr 13, 2026
82d659d
Merge pull request #14 from cdek-it/misc.avatar
ichiesov Apr 13, 2026
63f5ea8
Merge branch 'feature/styles-debug' into overlay.tooltip
khaliulin Apr 14, 2026
2433d8b
Merge branch 'feature/styles-debug' into misc.tag
khaliulin Apr 14, 2026
ae4a4c7
Merge pull request #23 from cdek-it/overlay.tooltip
andreytsygankov Apr 14, 2026
93ae8fa
Merge branch 'feature/styles-debug' into misc.tag
khaliulin Apr 14, 2026
613606f
Merge branch 'feature/styles-debug' into form.checkbox
khaliulin Apr 14, 2026
844d238
checkbox: добавить story с label через inputId
Apr 14, 2026
776421d
checkbox: стили label, story CustomLabel (label + caption + состояния)
Apr 14, 2026
9c7d240
checkbox: типографика label через токены, stories с рабочими Controls
Apr 14, 2026
c115f33
Merge branch 'feature/styles-debug' into misc.progressbar
khaliulin Apr 14, 2026
7f3e512
Merge branch 'feature/styles-debug' into misc.chip
khaliulin Apr 14, 2026
a602bd0
Merge pull request #22 from cdek-it/misc.progressbar
AxyIX Apr 14, 2026
c7c5ada
Merge pull request #27 from cdek-it/misc.chip
AxyIX Apr 14, 2026
870653e
Merge branch 'feature/styles-debug' into form.slider
khaliulin Apr 14, 2026
dc281d6
добавлен экспорт StoryObj с render; inline-сторисы вариаций заменены …
Apr 14, 2026
ec25e24
Merge branch 'feature/styles-debug' into misc.skeleton
khaliulin Apr 14, 2026
fd540e8
добавлен экспорт StoryObj; убраны дублирующие inline-сторисы и добавл…
Apr 14, 2026
1597ee2
Merge pull request #28 from cdek-it/form.slider
AxyIX Apr 14, 2026
15b7132
удалён файл Claude.md
Apr 14, 2026
ca30ae6
Merge branch 'feature/styles-debug' into misc.metergroup
khaliulin Apr 14, 2026
b00d195
Merge pull request #29 from cdek-it/misc.skeleton
AxyIX Apr 14, 2026
3283798
Merge branch 'feature/styles-debug' into form.breadcrumb
khaliulin Apr 14, 2026
c3f4baf
убрал inline-сторисы Basic и IconsOnly; ре-экспорты из example-файлов
Apr 14, 2026
cf50f1a
Merge pull request #20 from cdek-it/form.breadcrumb
AxyIX Apr 14, 2026
fbe28f4
StoryObj-экспорты; убраны inline-сторисы
Apr 14, 2026
b22b896
Merge pull request #21 from cdek-it/misc.metergroup
AxyIX Apr 14, 2026
032cdd7
Merge pull request #15 from cdek-it/form.checkbox
khaliulin Apr 15, 2026
2930d1a
Merge branch 'feature/styles-debug' into misc.tag
khaliulin Apr 15, 2026
6e1cae9
Merge pull request #18 from cdek-it/misc.tag
ichiesov Apr 15, 2026
f8d03e7
Merge branch 'feature/styles-debug' into panel.divider
khaliulin Apr 15, 2026
699e092
фикс fonts.fontWeight.regular
Apr 15, 2026
bc43fa3
Merge pull request #26 from cdek-it/panel.divider
andreytsygankov Apr 15, 2026
9a9a776
Merge branch 'feature/styles-debug' into misc.ProgressSpinner
khaliulin Apr 15, 2026
d2b737a
map-tokens.ts восстановлен и дополнен
Apr 15, 2026
c26553d
Merge pull request #24 from cdek-it/misc.ProgressSpinner
andreytsygankov Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
751 changes: 751 additions & 0 deletions .claude/CLAUDE-v1.6.md

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@ api-generator/typedoc.json
# файлы в этим папках компилятся и должны создаваться при сборке
src/assets/components/themes

./storybook-static
./debug-storybook.log
./documentation.json
/storybook-static
/debug-storybook.log
/documentation.json
3 changes: 3 additions & 0 deletions angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -117,5 +117,8 @@
}
}
}
},
"cli": {
"analytics": false
}
}
Binary file added public/assets/images/avatar/avatar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
51 changes: 51 additions & 0 deletions src/lib/components/avatar/avatar.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { Component, HostBinding, Input } from '@angular/core';
import { Avatar } from 'primeng/avatar';
import { AvatarGroup } from 'primeng/avatargroup';

export type AvatarSize = 'normal' | 'large' | 'xlarge';
export type AvatarShape = 'square' | 'circle';

@Component({
selector: 'avatar',
standalone: true,
imports: [Avatar],
template: `
<p-avatar
[label]="label || undefined"
[icon]="icon || undefined"
[image]="image || undefined"
[size]="primeSize"
[shape]="shape"
></p-avatar>
`,
})
export class AvatarComponent {
@Input() label = '';
@Input() icon = '';
@Input() image = '';
@Input() size: AvatarSize = 'normal';
@Input() shape: AvatarShape = 'square';

@HostBinding('class') get hostClass(): string {
const classes = ['ui-avatar'];
if (this.size === 'large') classes.push('ui-avatar-lg');
if (this.size === 'xlarge') classes.push('ui-avatar-xl');
return classes.join(' ');
}

get primeSize(): 'normal' | 'large' | 'xlarge' | undefined {
return this.size === 'normal' ? undefined : this.size;
}
}

@Component({
selector: 'avatar-group',
standalone: true,
imports: [AvatarGroup],
template: `
<p-avatar-group>
<ng-content></ng-content>
</p-avatar-group>
`,
})
export class AvatarGroupComponent { }
37 changes: 37 additions & 0 deletions src/lib/components/badge/badge.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Component, Input } from '@angular/core';
import { Badge } from 'primeng/badge';

export type BadgeSeverity = 'primary' | 'success' | 'info' | 'warning' | 'danger';
export type BadgeSize = 'base' | 'large' | 'xlarge';

type PrimeBadgeSeverity = ReturnType<Badge['severity']>;
type PrimeBadgeSize = ReturnType<Badge['size']>;

@Component({
selector: 'badge',
standalone: true,
imports: [Badge],
template: `
<p-badge
[value]="value"
[severity]="primeSeverity"
[size]="primeSize"
></p-badge>
`
})
export class BadgeComponent {
@Input() value: string | number = '';
@Input() severity: BadgeSeverity = 'primary';
@Input() size: BadgeSize = 'base';

get primeSeverity(): PrimeBadgeSeverity {
if (this.severity === 'primary') return null;
if (this.severity === 'warning') return 'warn';
return this.severity as Exclude<PrimeBadgeSeverity, null>;
}

get primeSize(): PrimeBadgeSize {
if (this.size === 'base') return null;
return this.size as PrimeBadgeSize;
}
}
19 changes: 19 additions & 0 deletions src/lib/components/breadcrumb/breadcrumb.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Component, Input } from '@angular/core';
import { Breadcrumb } from 'primeng/breadcrumb';
import { MenuItem } from 'primeng/api';

@Component({
selector: 'breadcrumb',
standalone: true,
imports: [Breadcrumb],
template: `
<p-breadcrumb
[model]="model"
[home]="home"
></p-breadcrumb>
`,
})
export class BreadcrumbComponent {
@Input() model: MenuItem[] = [];
@Input() home: MenuItem | undefined = undefined;
}
78 changes: 78 additions & 0 deletions src/lib/components/button/button.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { Component, Input } from '@angular/core';
import { Button, ButtonSeverity as PrimeButtonSeverity } from 'primeng/button';

export type ButtonVariant = 'primary' | 'secondary' | 'outlined' | 'text' | 'link';
export type ButtonSeverity = 'success' | 'warning' | 'danger' | 'info' | null;
export type ButtonSize = 'small' | 'base' | 'large' | 'xlarge';
export type ButtonIconPos = 'prefix' | 'postfix' | null;
export type BadgeSeverity = 'success' | 'info' | 'warning' | 'danger' | 'secondary' | 'contrast' | null;
type PrimeBadgeSeverity = Extract<Button['badgeSeverity'], string | null>;

@Component({
selector: 'button',
standalone: true,
imports: [Button],
template: `
<p-button
[label]="iconOnly ? '' : label"
[disabled]="disabled"
[loading]="loading"
[size]="primeSize"
[styleClass]="size === 'xlarge' ? 'p-button-xlg' : ''"
[rounded]="rounded"
[outlined]="variant === 'outlined'"
[text]="variant === 'text' || text"
[link]="variant === 'link'"
[icon]="icon"
[iconPos]="primeIconPos"
[severity]="primeSeverity"
[badge]="showBadge ? badge || ' ' : undefined"
[badgeSeverity]="primeBadgeSeverity"
[fluid]="fluid"
[ariaLabel]="ariaLabel"
[autofocus]="autofocus"
[tabindex]="tabindex"
></p-button>
`
})
export class ButtonComponent {
@Input() label = 'Button';
@Input() variant: ButtonVariant = 'primary';
@Input() severity: ButtonSeverity = null;
@Input() size: ButtonSize = 'base';
@Input() rounded = false;
@Input() iconPos: ButtonIconPos = null;
@Input() iconOnly = false;
@Input() icon = '';
@Input() disabled = false;
@Input() loading = false;
@Input() badge = '';
@Input() badgeSeverity: BadgeSeverity = null;
@Input() showBadge = false;
@Input() fluid = false;
@Input() ariaLabel: string | undefined = undefined;
@Input() autofocus = false;
@Input() tabindex: number | undefined = undefined;
@Input() text = false;

get primeSize(): 'small' | 'large' | undefined {
if (this.size === 'small') return 'small';
if (this.size === 'large') return 'large';
return undefined;
}

get primeIconPos(): 'left' | 'right' {
return this.iconPos === 'postfix' ? 'right' : 'left';
}

get primeSeverity(): PrimeButtonSeverity | null {
if (this.variant === 'secondary') return 'secondary';
if (this.severity === 'warning') return 'warn';
return this.severity;
}

get primeBadgeSeverity(): PrimeBadgeSeverity {
if (this.badgeSeverity === 'warning') return 'warn';
return this.badgeSeverity;
}
}
106 changes: 106 additions & 0 deletions src/lib/components/checkbox/checkbox.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { Checkbox, CheckboxChangeEvent } from 'primeng/checkbox';

export type CheckboxSize = 'small' | 'base' | 'large';
export type CheckboxVariant = 'outlined' | 'filled';

@Component({
selector: 'checkbox',
standalone: true,
imports: [Checkbox],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CheckboxComponent),
multi: true,
},
],
template: `
<p-checkbox
[value]="value"
[binary]="binary"
[(ngModel)]="modelValue"
[disabled]="disabled"
[readonly]="readonly"
[indeterminate]="indeterminate"
[styleClass]="indeterminate ? 'p-checkbox-indeterminate' : ''"
[invalid]="invalid"
[size]="primeSize"
[variant]="primeVariant"
[checkboxIcon]="checkboxIcon"
[ariaLabel]="ariaLabel"
[ariaLabelledBy]="ariaLabelledBy"
[tabindex]="tabindex"
[inputId]="inputId"
[trueValue]="trueValue"
[falseValue]="falseValue"
[autofocus]="autofocus"
(onChange)="onChangeHandler($event)"
(onFocus)="onFocus.emit($event)"
(onBlur)="onBlur.emit($event)"
></p-checkbox>
`,
})
export class CheckboxComponent implements ControlValueAccessor {
@Input() value: any = null;
@Input() binary = false;
@Input() disabled = false;
@Input() readonly = false;
@Input() indeterminate = false;
@Input() invalid = false;
@Input() size: CheckboxSize = 'base';
@Input() variant: CheckboxVariant = 'outlined';
@Input() checkboxIcon: string | undefined = undefined;
@Input() ariaLabel: string | undefined = undefined;
@Input() ariaLabelledBy: string | undefined = undefined;
@Input() tabindex: number | undefined = undefined;
@Input() inputId: string | undefined = undefined;
@Input() trueValue: any = true;
@Input() falseValue: any = false;
@Input() autofocus = false;

@Output() onChange = new EventEmitter<CheckboxChangeEvent>();
@Output() onFocus = new EventEmitter<Event>();
@Output() onBlur = new EventEmitter<Event>();

modelValue: any = false;

private _onChange: (value: any) => void = () => {};
private _onTouched: () => void = () => {};

// Геттеры — маппинг в PrimeNG API
get primeSize(): 'small' | 'large' | undefined {
if (this.size === 'small') return 'small';
if (this.size === 'large') return 'large';
return undefined;
}

get primeVariant(): 'filled' | 'outlined' | undefined {
if (this.variant === 'filled') return 'filled';
return undefined;
}

onChangeHandler(event: CheckboxChangeEvent): void {
this._onChange(event.checked);
this._onTouched();
this.onChange.emit(event);
}

// ControlValueAccessor
writeValue(value: any): void {
this.modelValue = value;
}

registerOnChange(fn: (value: any) => void): void {
this._onChange = fn;
}

registerOnTouched(fn: () => void): void {
this._onTouched = fn;
}

setDisabledState(isDisabled: boolean): void {
this.disabled = isDisabled;
}
}
24 changes: 24 additions & 0 deletions src/lib/components/chip/chip.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { Chip } from 'primeng/chip';

@Component({
selector: 'chip',
standalone: true,
imports: [Chip],
template: `
<p-chip
[label]="label"
[icon]="icon"
[removable]="removable"
[disabled]="disabled"
(onRemove)="onRemove.emit($event)"
></p-chip>
`,
})
export class ChipComponent {
@Input() label = '';
@Input() icon = '';
@Input() removable = false;
@Input() disabled = false;
@Output() onRemove = new EventEmitter<MouseEvent>();
}
26 changes: 26 additions & 0 deletions src/lib/components/divider/divider.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Component, Input } from '@angular/core';
import { Divider } from 'primeng/divider';

export type DividerLayout = 'horizontal' | 'vertical';
export type DividerType = 'solid' | 'dashed' | 'dotted';
export type DividerAlign = 'left' | 'center' | 'right' | 'top' | 'bottom';

@Component({
selector: 'divider',
standalone: true,
imports: [Divider],
template: `
<p-divider
[layout]="layout"
[type]="type"
[align]="align"
>
<ng-content></ng-content>
</p-divider>
`,
})
export class DividerComponent {
@Input() layout: DividerLayout = 'horizontal';
@Input() type: DividerType = 'solid';
@Input() align: DividerAlign = 'center';
}
Loading
Loading