@konce-pt/angular 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE +21 -0
  2. package/dist/fesm2022/konce-pt-angular-icons.mjs +5166 -0
  3. package/dist/fesm2022/konce-pt-angular-icons.mjs.map +1 -0
  4. package/dist/fesm2022/konce-pt-angular.mjs +5863 -0
  5. package/dist/fesm2022/konce-pt-angular.mjs.map +1 -0
  6. package/dist/package.json +47 -0
  7. package/dist/src/lib/accordion/llms.txt +18 -0
  8. package/dist/src/lib/alert/llms.txt +19 -0
  9. package/dist/src/lib/app-shell/llms.txt +29 -0
  10. package/dist/src/lib/autocomplete/llms.txt +16 -0
  11. package/dist/src/lib/avatar/llms.txt +15 -0
  12. package/dist/src/lib/avatar-group/llms.txt +15 -0
  13. package/dist/src/lib/badge/llms.txt +16 -0
  14. package/dist/src/lib/bottom-sheet/llms.txt +16 -0
  15. package/dist/src/lib/breadcrumb/llms.txt +12 -0
  16. package/dist/src/lib/button/llms.txt +35 -0
  17. package/dist/src/lib/button-group/llms.txt +14 -0
  18. package/dist/src/lib/card/llms.txt +24 -0
  19. package/dist/src/lib/carousel/llms.txt +24 -0
  20. package/dist/src/lib/checkbox/llms.txt +15 -0
  21. package/dist/src/lib/chip/llms.txt +14 -0
  22. package/dist/src/lib/chips-input/llms.txt +18 -0
  23. package/dist/src/lib/color-picker/llms.txt +18 -0
  24. package/dist/src/lib/confirm/llms.txt +21 -0
  25. package/dist/src/lib/context-menu/llms.txt +17 -0
  26. package/dist/src/lib/data-table/llms.txt +62 -0
  27. package/dist/src/lib/data-view/llms.txt +18 -0
  28. package/dist/src/lib/date-range/llms.txt +24 -0
  29. package/dist/src/lib/datepicker/llms.txt +17 -0
  30. package/dist/src/lib/dialog/llms.txt +27 -0
  31. package/dist/src/lib/divider/llms.txt +19 -0
  32. package/dist/src/lib/drawer/llms.txt +17 -0
  33. package/dist/src/lib/empty/llms.txt +17 -0
  34. package/dist/src/lib/fab/llms.txt +18 -0
  35. package/dist/src/lib/fieldset/llms.txt +15 -0
  36. package/dist/src/lib/file-upload/llms.txt +23 -0
  37. package/dist/src/lib/form-field/llms.txt +37 -0
  38. package/dist/src/lib/galleria/llms.txt +15 -0
  39. package/dist/src/lib/icon/llms.txt +34 -0
  40. package/dist/src/lib/icon-button/llms.txt +15 -0
  41. package/dist/src/lib/image/llms.txt +15 -0
  42. package/dist/src/lib/input/llms.txt +38 -0
  43. package/dist/src/lib/input-mask/llms.txt +20 -0
  44. package/dist/src/lib/input-number/llms.txt +17 -0
  45. package/dist/src/lib/input-otp/llms.txt +19 -0
  46. package/dist/src/lib/knob/llms.txt +20 -0
  47. package/dist/src/lib/listbox/llms.txt +17 -0
  48. package/dist/src/lib/megamenu/llms.txt +21 -0
  49. package/dist/src/lib/menu/llms.txt +17 -0
  50. package/dist/src/lib/menubar/llms.txt +19 -0
  51. package/dist/src/lib/meter-group/llms.txt +15 -0
  52. package/dist/src/lib/order-list/llms.txt +17 -0
  53. package/dist/src/lib/paginator/llms.txt +18 -0
  54. package/dist/src/lib/panel/llms.txt +18 -0
  55. package/dist/src/lib/password/llms.txt +20 -0
  56. package/dist/src/lib/pick-list/llms.txt +17 -0
  57. package/dist/src/lib/popover/llms.txt +17 -0
  58. package/dist/src/lib/progress/llms.txt +16 -0
  59. package/dist/src/lib/radio-group/llms.txt +15 -0
  60. package/dist/src/lib/rating/llms.txt +14 -0
  61. package/dist/src/lib/rich-text/llms.txt +16 -0
  62. package/dist/src/lib/scroll-top/llms.txt +15 -0
  63. package/dist/src/lib/select/llms.txt +22 -0
  64. package/dist/src/lib/sidenav/llms.txt +20 -0
  65. package/dist/src/lib/skeleton/llms.txt +14 -0
  66. package/dist/src/lib/slider/llms.txt +13 -0
  67. package/dist/src/lib/speed-dial/llms.txt +16 -0
  68. package/dist/src/lib/spinner/llms.txt +10 -0
  69. package/dist/src/lib/split-button/llms.txt +26 -0
  70. package/dist/src/lib/splitter/llms.txt +21 -0
  71. package/dist/src/lib/stepper/llms.txt +19 -0
  72. package/dist/src/lib/switch/llms.txt +13 -0
  73. package/dist/src/lib/tabs/llms.txt +19 -0
  74. package/dist/src/lib/textarea/llms.txt +14 -0
  75. package/dist/src/lib/timeline/llms.txt +22 -0
  76. package/dist/src/lib/toast/llms.txt +22 -0
  77. package/dist/src/lib/toolbar/llms.txt +23 -0
  78. package/dist/src/lib/tooltip/llms.txt +19 -0
  79. package/dist/src/lib/tree/llms.txt +17 -0
  80. package/dist/types/konce-pt-angular-icons.d.ts +18 -0
  81. package/dist/types/konce-pt-angular.d.ts +1858 -0
  82. package/package.json +61 -0
@@ -0,0 +1,18 @@
1
+ # KptFab (kpt-fab)
2
+
3
+ Floating Action Button — okrągły, wyniesiony przycisk akcji. Import: `import { KptFab } from '@konce-pt/angular';`
4
+
5
+ ## Wejścia
6
+ - `variant`: 'filled' | 'tonal' (domyślnie 'filled')
7
+ - `size`: 'md' | 'mini' (domyślnie 'md')
8
+ - `extended`: boolean (pigułka z tekstem)
9
+ - `disabled`: boolean; `type`: 'button' | 'submit' | 'reset'
10
+ - `ariaLabel`: string (wymagane dla wariantu okrągłego, bez tekstu)
11
+
12
+ ## Przykład
13
+ <kpt-fab ariaLabel="Dodaj"><kpt-icon name="plus" /></kpt-fab>
14
+ <kpt-fab extended><kpt-icon name="plus" /> Nowy</kpt-fab>
15
+ <kpt-fab variant="tonal" size="mini" ariaLabel="Edytuj"><kpt-icon name="copy" /></kpt-fab>
16
+
17
+ ## Tokeny
18
+ Tło `--kpt-color-primary` / `--kpt-color-primary-container` (tonal); cień `--kpt-elevation-3`.
@@ -0,0 +1,15 @@
1
+ # KptFieldset (kpt-fieldset)
2
+
3
+ Grupa pól z legendą (`<fieldset>`+`<legend>`), opcjonalnie zwijana.
4
+ Import: `import { KptFieldset } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `legend`: string
8
+ - `toggleable`: boolean; `collapsed`: model<boolean>
9
+ - Treść: `<ng-content>`.
10
+
11
+ ## Przykład
12
+ <kpt-fieldset legend="Dane osobowe" toggleable>…</kpt-fieldset>
13
+
14
+ ## Tokeny
15
+ Ramka `--kpt-color-border`; radius `--kpt-radius-md`.
@@ -0,0 +1,23 @@
1
+ # KptFileUpload (kpt-file-upload)
2
+
3
+ Wgrywanie plików (drag-drop + wybór) na Signal Forms. Wartość = File[].
4
+ Import: `import { KptFileUpload } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `value`: model<File[]> (lub `formField`)
8
+ - `accept`: string (np. 'image/*')
9
+ - `multiple`: boolean
10
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
11
+
12
+ ## Przykład
13
+ <kpt-file-upload [formField]="f.files" accept="image/*" multiple />
14
+ <kpt-file-upload [(value)]="files" />
15
+
16
+ files = signal<File[]>([]);
17
+
18
+ ## Zachowanie
19
+ Strefa reaguje na klik i na przeciągnięcie plików. Przy `multiple=false` przechowuje tylko pierwszy plik.
20
+ Lista plików pokazuje nazwę, rozmiar i przycisk usuwania.
21
+
22
+ ## Tokeny
23
+ Strefa `--kpt-form-field-border` (przerywana), stan dragover `--kpt-color-primary`.
@@ -0,0 +1,37 @@
1
+ # KptFormField (kpt-form-field)
2
+
3
+ Wrapper pola formularza: etykieta, podpowiedź i komunikat błędu wokół dowolnej kontrolki
4
+ (np. `kpt-input`). Prezentacyjny — stan błędu przekazuje się przez `error`.
5
+ Import: `import { KptFormField } from '@konce-pt/angular';`
6
+
7
+ ## Selektor
8
+ `kpt-form-field`
9
+
10
+ ## Wejścia (input signals)
11
+ - `label`: string — tekst etykiety
12
+ - `hint`: string — podpowiedź (ukrywana, gdy jest błąd)
13
+ - `error`: string | null — komunikat błędu; gdy niepusty, pole jest oznaczone jako nieprawidłowe
14
+ - `required`: boolean — gwiazdka przy etykiecie
15
+ - `controlId`: string — id kontrolki dla powiązania `label[for]`
16
+
17
+ ## Projekcja
18
+ Kontrolkę umieszcza się w treści (ng-content):
19
+
20
+ <kpt-form-field label="E-mail" [error]="emailError()" hint="Adres firmowy" required controlId="f-email">
21
+ <kpt-input [formField]="loginForm.email" type="email" id="f-email" />
22
+ </kpt-form-field>
23
+
24
+ ## Integracja z Signal Forms
25
+ `error` zwykle pochodzi z pola formularza, np.:
26
+
27
+ emailError = computed(() => {
28
+ const s = loginForm.email();
29
+ return s.touched() && s.invalid() ? s.errors()[0]?.message ?? null : null;
30
+ });
31
+
32
+ ## Tokeny
33
+ `--kpt-form-field-label`, `--kpt-form-field-hint`, `--kpt-form-field-error`, `--kpt-color-danger`.
34
+
35
+ ## Dostępność
36
+ - Komunikat błędu ma `role="alert"`.
37
+ - Powiąż `controlId` z `id` kontrolki, aby etykieta była klikalna (`label[for]`).
@@ -0,0 +1,15 @@
1
+ # KptGalleria (kpt-galleria)
2
+
3
+ Duży podgląd obrazu z paskiem miniatur i nawigacją.
4
+ Import: `import { KptGalleria } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `items`: KptGalleriaItem[] — { src, thumbnail?, alt? }
8
+ - `activeIndex`: model<number> (dwukierunkowe)
9
+ - `showThumbnails`: boolean (domyślnie true)
10
+
11
+ ## Przykład
12
+ <kpt-galleria [items]="photos" [(activeIndex)]="idx" />
13
+
14
+ ## Tokeny
15
+ Scena `--kpt-color-muted`; aktywna miniatura `--kpt-color-primary`.
@@ -0,0 +1,34 @@
1
+ # KptIcon (kpt-icon)
2
+
3
+ Ikona inline SVG (zestaw Tabler Icons — MIT). Rozmiar dziedziczy z `font-size` (1em),
4
+ kolor z `currentColor`. Import: `import { KptIcon } from '@konce-pt/angular';`
5
+
6
+ ## Selektor
7
+ `kpt-icon`
8
+
9
+ ## Wejścia
10
+ - `name`: KptIconName (wymagane) — nazwa ikony z rejestru
11
+ - `size`: string (opcjonalnie, np. '1.25rem') — inaczej dziedziczy z font-size
12
+
13
+ ## Dostępne nazwy (wbudowane)
14
+ menu, x, chevron-up, chevron-down, chevron-left, chevron-right, check, search,
15
+ grip-vertical, info, alert-triangle, circle-check, circle-x, calendar, copy, link, code.
16
+
17
+ ## Pełny zestaw (5130 ikon Tabler)
18
+ Opcjonalny entry point `@konce-pt/angular/icons` (pobierany tylko przy imporcie):
19
+
20
+ import { provideKptTablerIcons } from '@konce-pt/angular/icons';
21
+ bootstrapApplication(App, { providers: [provideKptTablerIcons()] });
22
+ // potem: <kpt-icon name="rocket" />, <kpt-icon name="arrow-left" /> …
23
+
24
+ Można też rejestrować własne przez `KptIconRegistry.register({ nazwa: 'inner svg' })`.
25
+ `kpt-icon` reaguje na późną rejestrację (sygnał `version`).
26
+
27
+ ## Przykład
28
+ <kpt-icon name="check" />
29
+ <kpt-icon name="chevron-down" size="1.25rem" />
30
+ <button><kpt-icon name="x" /></button>
31
+
32
+ ## Licencja ikon
33
+ Tabler Icons (MIT). Ikony wyodrębnione inline do `icons.ts`. Zob. ICONS-LICENSE w root.
34
+ Dodanie ikony: dołóż wpis do `KPT_ICONS`/`KptIconName` (siatka 24×24, stroke 2px).
@@ -0,0 +1,15 @@
1
+ # KptIconButton (kpt-icon-button)
2
+
3
+ Przycisk ikonowy (tylko ikona). Wymaga `ariaLabel`.
4
+ Import: `import { KptIconButton } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia
7
+ - `variant`: 'filled'|'tonal'|'outline'|'text'|'danger'; `size`: 'sm'|'md'|'lg'; `shape`: 'round'|'square'
8
+ - `type`, `disabled`, `loading`, `ariaLabel` (wymagane)
9
+
10
+ ## Przykłady
11
+ <kpt-icon-button ariaLabel="Ustawienia"><kpt-icon name="menu" /></kpt-icon-button>
12
+ <kpt-icon-button variant="danger" shape="square" ariaLabel="Usuń"><kpt-icon name="x" /></kpt-icon-button>
13
+
14
+ ## Tokeny
15
+ Współdzieli z kpt-button (`--kpt-color-primary`, `--kpt-color-muted`, …).
@@ -0,0 +1,15 @@
1
+ # KptImage (kpt-image)
2
+
3
+ Obraz z opcjonalnym podglądem pełnoekranowym (zoom).
4
+ Import: `import { KptImage } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia
7
+ - `src`: string (wymagane); `alt`: string
8
+ - `width`: string | null (np. '240px')
9
+ - `preview`: boolean — klik otwiera overlay z powiększeniem
10
+
11
+ ## Przykład
12
+ <kpt-image src="/foto.jpg" alt="Zdjęcie" preview width="240px" />
13
+
14
+ ## Tokeny
15
+ Maska podglądu półprzezroczysta; ikona `zoom-in`; overlay ciemny.
@@ -0,0 +1,38 @@
1
+ # KptInput (kpt-input)
2
+
3
+ Pole tekstowe Koncept UI zintegrowane z Angular Signal Forms. Implementuje
4
+ `FormValueControl<string>` — wiąż dyrektywą `FormField` (`@angular/forms/signals`).
5
+ Bez `ControlValueAccessor`. Import: `import { KptInput } from '@konce-pt/angular';`
6
+
7
+ ## Selektor
8
+ `kpt-input`
9
+
10
+ ## Użycie z Signal Forms
11
+
12
+ import { form, FormField, required, email } from '@angular/forms/signals';
13
+
14
+ model = signal({ email: '' });
15
+ loginForm = form(this.model, (p) => {
16
+ required(p.email, { message: 'E-mail jest wymagany' });
17
+ email(p.email, { message: 'Podaj poprawny adres e-mail' });
18
+ });
19
+
20
+ // szablon (imports: [KptInput, FormField])
21
+ <kpt-input [formField]="loginForm.email" type="email" id="f-email" />
22
+
23
+ ## Wejścia prezentacyjne
24
+ - `type`: 'text'|'email'|'password'|'number'|'search'|'tel'|'url' (domyślnie 'text')
25
+ - `placeholder`: string
26
+ - `id`: string — trafia na wewnętrzny `<input>` (do `label[for]`); host go nie nosi
27
+ - `ariaLabel`: string | null
28
+
29
+ ## Stan wiązany automatycznie przez FormField
30
+ `value` (model, wymagane), `disabled`, `readonly`, `required`, `invalid`, `errors`,
31
+ `touched`; output `touch` (emitowany na blur). Nie ustawiaj ich ręcznie przy użyciu z formularzem.
32
+
33
+ ## Tokeny
34
+ `--kpt-form-field-{bg,text,placeholder,border,border-hover,border-focus,border-error,radius}`.
35
+
36
+ ## Dostępność
37
+ - `aria-invalid="true"` przy nieprawidłowym stanie; `blur` oznacza pole jako dotknięte.
38
+ - Komunikaty błędów wyświetla zwykle `kpt-form-field` (`role="alert"`).
@@ -0,0 +1,20 @@
1
+ # KptInputMask (kpt-input-mask)
2
+
3
+ Pole z maską znakową na Signal Forms. Wartość = string.
4
+ Import: `import { KptInputMask } from '@konce-pt/angular';`
5
+
6
+ ## Tokeny maski
7
+ - `9` = cyfra, `a` = litera, `*` = alfanumeryczny. Pozostałe znaki maski to literały (spacje, nawiasy, myślniki).
8
+
9
+ ## Wejścia / model
10
+ - `value`: model<string> (lub `formField`)
11
+ - `mask`: string (np. `(999) 999-99-99`)
12
+ - `placeholder`: string (domyślnie = maska)
13
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
14
+
15
+ ## Przykład
16
+ <kpt-input-mask [formField]="f.phone" mask="(999) 999-99-99" />
17
+ <kpt-input-mask [(value)]="zip" mask="99-999" />
18
+
19
+ ## Tokeny
20
+ Pole `--kpt-form-field-*`.
@@ -0,0 +1,17 @@
1
+ # KptInputNumber (kpt-input-number)
2
+
3
+ Pole liczbowe ze strzałkami krokowania na Signal Forms. Wartość = number | null.
4
+ Import: `import { KptInputNumber } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `value`: model<number | null> (lub `formField`)
8
+ - `min`/`max`: number | undefined; `step`: number (domyślnie 1)
9
+ - `suffix`: string (np. ' %'); `placeholder`: string
10
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
11
+
12
+ ## Przykład
13
+ <kpt-input-number [formField]="f.qty" [min]="0" [max]="99" [step]="1" />
14
+ <kpt-input-number [(value)]="qty" suffix=" szt." />
15
+
16
+ ## Tokeny
17
+ Pole `--kpt-form-field-*`; przyciski `--kpt-color-muted`.
@@ -0,0 +1,19 @@
1
+ # KptInputOtp (kpt-input-otp)
2
+
3
+ Pole kodu jednorazowego (OTP/PIN) — N osobnych pól z autofocusem i wklejaniem. Signal Forms.
4
+ Wartość = string (sklejone znaki). Import: `import { KptInputOtp } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `value`: model<string> (lub `formField`)
8
+ - `length`: number (domyślnie 6)
9
+ - `integerOnly`: boolean — tylko cyfry
10
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
11
+
12
+ ## Zachowanie
13
+ Wpisanie znaku przechodzi do następnego pola; Backspace cofa; wklejenie rozkłada kod na pola.
14
+
15
+ ## Przykład
16
+ <kpt-input-otp [formField]="f.code" [length]="6" integerOnly />
17
+
18
+ ## Tokeny
19
+ Komórki `--kpt-form-field-*`.
@@ -0,0 +1,20 @@
1
+ # KptKnob (kpt-knob)
2
+
3
+ Pokrętło (knob) — wybór wartości po łuku SVG, myszką (drag) lub klawiszami strzałek. Signal Forms.
4
+ Import: `import { KptKnob } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `value`: model<number> (lub `formField`)
8
+ - `min`/`max`: number | undefined (0/100); `step`: number
9
+ - `size`: px (domyślnie 96); `stroke`: px (10); `suffix`: string
10
+ - `showValue`: boolean (domyślnie true)
11
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
12
+
13
+ ## Dostępność
14
+ `role="slider"` + aria-valuemin/max/now; strzałki, Home/End.
15
+
16
+ ## Przykład
17
+ <kpt-knob [formField]="f.level" [min]="0" [max]="100" [step]="5" />
18
+
19
+ ## Tokeny
20
+ Łuk tła `--kpt-color-border`; wartość `--kpt-color-primary`; tekst `--kpt-color-on-surface`.
@@ -0,0 +1,17 @@
1
+ # KptListbox (kpt-listbox)
2
+
3
+ Lista wyboru (listbox) na Signal Forms. Pojedynczy lub wielokrotny wybór, opcjonalny filtr.
4
+ Wartość: `T` (single) lub `T[]` (multiple). Import: `import { KptListbox } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `value`: model<T | T[] | null> (lub `formField`)
8
+ - `options`: KptOption<T>[] — { label, value, disabled? }
9
+ - `multiple`: boolean; `filter`: boolean (pole wyszukiwania)
10
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
11
+
12
+ ## Przykład
13
+ <kpt-listbox [formField]="f.role" [options]="roles" filter />
14
+ <kpt-listbox [(value)]="tags" [options]="tagOptions" multiple />
15
+
16
+ ## Tokeny
17
+ Ramka `--kpt-form-field-*`; zaznaczenie `--kpt-color-primary`.
@@ -0,0 +1,21 @@
1
+ # KptMegamenu (kpt-megamenu)
2
+
3
+ Mega-menu — pozioma belka z szerokim, wielokolumnowym panelem.
4
+ Struktura: pozycja górna → `items` (kolumny) → każda kolumna `items` (odnośniki).
5
+ Import: `import { KptMegamenu } from '@konce-pt/angular';`
6
+
7
+ ## Wejścia / wyjścia
8
+ - `items`: KptMenuItem<T>[] (3 poziomy: top → kolumny → linki)
9
+ - `select`: KptMenuItem<T> (kliknięty odnośnik)
10
+
11
+ ## Przykład
12
+ items = [{
13
+ label: 'Produkty',
14
+ items: [
15
+ { label: 'Komponenty', items: [{ label: 'Formularze' }, { label: 'Tabele' }] },
16
+ { label: 'Szablony', items: [{ label: 'Dashboard' }] },
17
+ ],
18
+ }];
19
+
20
+ ## Tokeny
21
+ Panel `--kpt-color-surface-raised`, `--kpt-elevation-3`.
@@ -0,0 +1,17 @@
1
+ # KptMenu (kpt-menu)
2
+
3
+ Menu rozwijane (dropdown) na CDK Overlay. Trigger przez projekcję, pozycje przez `items`.
4
+ Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
5
+ Import: `import { KptMenu, KptMenuItem } from '@konce-pt/angular';`
6
+
7
+ ## Wejścia / wyjścia
8
+ - `items`: KptMenuItem[] `{ label?, value?, icon?, disabled?, danger?, separator? }`
9
+ - `select`: output<KptMenuItem>
10
+
11
+ ## Przykład
12
+ <kpt-menu [items]="items" (select)="onSelect($event)">
13
+ <kpt-button variant="outline">Opcje</kpt-button>
14
+ </kpt-menu>
15
+
16
+ ## Tokeny
17
+ Panel `--kpt-color-surface-raised`, `--kpt-elevation-3`; pozycja danger `--kpt-color-danger`.
@@ -0,0 +1,19 @@
1
+ # KptMenubar (kpt-menubar)
2
+
3
+ Pozioma belka menu z rozwijanymi pod-menu. Pozycje bez `items` działają jak akcje.
4
+ Import: `import { KptMenubar } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / wyjścia
7
+ - `items`: KptMenuItem<T>[] — pozycje górne; pod-menu w `items?` każdej pozycji
8
+ - `select`: KptMenuItem<T>
9
+
10
+ ## Przykład
11
+ <kpt-menubar [items]="items" (select)="onSelect($event)" />
12
+
13
+ items: KptMenuItem[] = [
14
+ { label: 'Plik', items: [{ label: 'Nowy' }, { separator: true }, { label: 'Zamknij', danger: true }] },
15
+ { label: 'Pomoc' },
16
+ ];
17
+
18
+ ## Tokeny
19
+ Belka `--kpt-color-surface-raised`; dropdown `--kpt-elevation-3`.
@@ -0,0 +1,15 @@
1
+ # KptMeterGroup (kpt-meter-group)
2
+
3
+ Wielosegmentowy miernik (meter group) z opcjonalną legendą.
4
+ Import: `import { KptMeterGroup } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia
7
+ - `values`: KptMeterItem[] — { label, value, color? }
8
+ - `max`: number | undefined — suma odniesienia (domyślnie suma wartości = 100%)
9
+ - `showLegend`: boolean (domyślnie true)
10
+
11
+ ## Przykład
12
+ <kpt-meter-group [values]="[{label:'Użyte', value:70}, {label:'Wolne', value:30}]" />
13
+
14
+ ## Tokeny
15
+ Segmenty: paleta `--kpt-color-{primary,info,success,warning,danger}` lub własny `color`.
@@ -0,0 +1,17 @@
1
+ # KptOrderList (kpt-order-list)
2
+
3
+ Lista z ręcznym porządkowaniem elementów (w górę/dół). Zaznacz element i przesuń przyciskami.
4
+ Szablon elementu przez projekcję `<ng-template let-item>`.
5
+ Import: `import { KptOrderList } from '@konce-pt/angular';`
6
+
7
+ ## Wejścia / model
8
+ - `items`: model<T[]> (dwukierunkowe — zwraca nową kolejność)
9
+ - `header`: string
10
+
11
+ ## Przykład
12
+ <kpt-order-list [(items)]="tasks" header="Kolejność">
13
+ <ng-template let-item>{{ item.name }}</ng-template>
14
+ </kpt-order-list>
15
+
16
+ ## Tokeny
17
+ Zaznaczenie `--kpt-color-primary`; przyciski `--kpt-color-surface-raised`.
@@ -0,0 +1,18 @@
1
+ # KptPaginator (kpt-paginator)
2
+
3
+ Paginator sterowany sygnałami. Import: `import { KptPaginator } from '@konce-pt/angular';`
4
+
5
+ ## Selektor
6
+ `kpt-paginator`
7
+
8
+ ## Wejścia / modele
9
+ - `length`: number (wymagane) — łączna liczba elementów
10
+ - `pageSize`: model<number> (domyślnie 10) — dwukierunkowe
11
+ - `pageIndex`: model<number> od 0 (domyślnie 0) — dwukierunkowe
12
+ - `pageSizeOptions`: number[] (domyślnie [5,10,20,50])
13
+
14
+ ## Przykład
15
+ <kpt-paginator [length]="total()" [(pageIndex)]="page" [(pageSize)]="size" />
16
+
17
+ Pokazuje „X–Y z Z", wybór rozmiaru strony oraz przyciski poprzednia/następna.
18
+ Przy zmianie długości/rozmiaru samoczynnie koryguje `pageIndex` (effect).
@@ -0,0 +1,18 @@
1
+ # KptPanel (kpt-panel)
2
+
3
+ Panel z nagłówkiem i opcjonalnym zwijaniem. Import: `import { KptPanel } from '@konce-pt/angular';`
4
+
5
+ ## Wejścia / model
6
+ - `header`: string
7
+ - `toggleable`: boolean — pokazuje przycisk zwijania
8
+ - `collapsed`: model<boolean> (dwukierunkowe)
9
+ - Akcje nagłówka: projekcja `[kptPanelActions]`. Treść: `<ng-content>`.
10
+
11
+ ## Przykład
12
+ <kpt-panel header="Ustawienia" toggleable>
13
+ <button kptPanelActions>…</button>
14
+ Treść…
15
+ </kpt-panel>
16
+
17
+ ## Tokeny
18
+ Nagłówek `--kpt-color-surface-variant`; ramka `--kpt-color-border`.
@@ -0,0 +1,20 @@
1
+ # KptPassword (kpt-password)
2
+
3
+ Pole hasła z przełącznikiem widoczności i opcjonalnym miernikiem siły. Signal Forms.
4
+ Import: `import { KptPassword } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia / model
7
+ - `value`: model<string> (lub `formField`)
8
+ - `feedback`: boolean — pokazuje miernik siły (4 paski + etykieta)
9
+ - `placeholder`: string
10
+ - `disabled`/`invalid`/`touched`: boolean; `touch`: output
11
+
12
+ ## Siła hasła
13
+ Punktacja 0–4: długość ≥8, małe+wielkie litery, cyfra, znak specjalny. Kolory: danger→warning→info→success.
14
+
15
+ ## Przykład
16
+ <kpt-password [formField]="f.password" feedback />
17
+ <kpt-password [(value)]="pass" />
18
+
19
+ ## Tokeny
20
+ Pole `--kpt-form-field-*`; paski miernika `--kpt-color-{danger,warning,info,success}`.
@@ -0,0 +1,17 @@
1
+ # KptPickList (kpt-pick-list)
2
+
3
+ Transfer elementów między dwiema listami (źródło ↔ cel). Zaznacz i przenieś (pojedynczo/wszystko).
4
+ Szablon elementu przez projekcję `<ng-template let-item>`.
5
+ Import: `import { KptPickList } from '@konce-pt/angular';`
6
+
7
+ ## Wejścia / model
8
+ - `source`: model<T[]>; `target`: model<T[]> (oba dwukierunkowe)
9
+ - `sourceHeader`/`targetHeader`: string
10
+
11
+ ## Przykład
12
+ <kpt-pick-list [(source)]="available" [(target)]="selected" sourceHeader="Dostępne" targetHeader="Wybrane">
13
+ <ng-template let-item>{{ item.name }}</ng-template>
14
+ </kpt-pick-list>
15
+
16
+ ## Tokeny
17
+ Zaznaczenie `--kpt-color-primary`; nagłówki `--kpt-color-surface-variant`.
@@ -0,0 +1,17 @@
1
+ # KptPopover (kpt-popover)
2
+
3
+ Popover — dowolna treść w dymku na CDK Overlay (bogatszy niż tooltip).
4
+ Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
5
+ Import: `import { KptPopover } from '@konce-pt/angular';`
6
+
7
+ ## Sloty
8
+ - element z atrybutem `kptPopoverTrigger` = wyzwalacz; reszta treści = panel
9
+
10
+ ## Przykład
11
+ <kpt-popover>
12
+ <kpt-button kptPopoverTrigger variant="outline">Szczegóły</kpt-button>
13
+ <div>Bogata treść popovera…</div>
14
+ </kpt-popover>
15
+
16
+ ## Tokeny
17
+ `--kpt-color-surface-raised`, `--kpt-elevation-3`.
@@ -0,0 +1,16 @@
1
+ # KptProgress (kpt-progress)
2
+
3
+ Wskaźnik postępu — liniowy lub kołowy, określony (0–100) lub nieokreślony (`value`=null).
4
+ Import: `import { KptProgress } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia
7
+ - `value`: number|null (null = indeterminate); `type`: 'linear'|'circular'
8
+ - `variant`: 'primary'|'success'|'danger'|'warning'|'info'; `diameter`: number (kołowy)
9
+
10
+ ## Przykłady
11
+ <kpt-progress [value]="60" />
12
+ <kpt-progress type="circular" [value]="75" variant="success" />
13
+ <kpt-progress [value]="null" />
14
+
15
+ ## Tokeny
16
+ `--kpt-color-{primary,success,danger,warning,info}`, tło `--kpt-color-surface-variant`.
@@ -0,0 +1,15 @@
1
+ # KptRadioGroup (kpt-radio-group)
2
+
3
+ Grupa przycisków opcji na Signal Forms (`FormValueControl<T>`). Opcje przez `options`.
4
+ Import: `import { KptRadioGroup, KptOption } from '@konce-pt/angular';`
5
+
6
+ ## Użycie
7
+ plans: KptOption<string>[] = [{label:'Free',value:'free'},{label:'Pro',value:'pro'}];
8
+ <kpt-radio-group [formField]="f.plan" [options]="plans" />
9
+
10
+ ## Wejścia
11
+ - `value`: model<T>; `options`: KptOption<T>[] `{ label, value, disabled? }`
12
+ - `disabled`/`invalid`/`touched`: boolean; `name`: string (auto); output `touch`.
13
+
14
+ ## Tokeny
15
+ `--kpt-color-primary`, `--kpt-form-field-border`.
@@ -0,0 +1,14 @@
1
+ # KptRating (kpt-rating)
2
+
3
+ Ocena gwiazdkami na Signal Forms. Import: `import { KptRating } from '@konce-pt/angular';`
4
+
5
+ ## Wejścia
6
+ - `value`: model<number>; `count`: number (liczba gwiazdek, domyślnie 5)
7
+ - `readonly`/`disabled`/`touched`: boolean; `touch`: output
8
+
9
+ ## Przykład
10
+ <kpt-rating [formField]="f.score" [count]="5" />
11
+ <kpt-rating [value]="4" readonly />
12
+
13
+ ## Tokeny
14
+ Wypełnione gwiazdki `--kpt-color-warning`; puste `--kpt-color-border-strong`.
@@ -0,0 +1,16 @@
1
+ # KptRichText (kpt-rich-text)
2
+
3
+ Lekki edytor tekstu sformatowanego (contenteditable) z konfigurowalnym paskiem.
4
+ Wartość = HTML. Bez zależności zewnętrznych. Signal Forms.
5
+ Import: `import { KptRichText, KptRichTool } from '@konce-pt/angular';`
6
+
7
+ ## Wejścia
8
+ - `value`: model<string> (HTML)
9
+ - `toolbar`: KptRichTool[] = 'bold'|'italic'|'underline'|'strike'|'ul'|'ol'|'link'|'clear'
10
+ - `placeholder`: string; `disabled`/`invalid`/`touched`: boolean; `touch`: output
11
+
12
+ ## Przykład
13
+ <kpt-rich-text [formField]="f.body" [toolbar]="['bold','italic','ul','link']" />
14
+
15
+ ## Uwagi
16
+ Formatowanie przez document.execCommand (przeglądarkowe). Ikony paska z wbudowanego rejestru.
@@ -0,0 +1,15 @@
1
+ # KptScrollTop (kpt-scroll-top)
2
+
3
+ Przycisk „do góry" — pojawia się po przewinięciu ponad `threshold` px.
4
+ Import: `import { KptScrollTop } from '@konce-pt/angular';`
5
+
6
+ ## Wejścia
7
+ - `threshold`: number (px, domyślnie 300)
8
+ - `target`: string | null — selektor przewijanego elementu; domyślnie okno
9
+
10
+ ## Przykład
11
+ <kpt-scroll-top [threshold]="300" />
12
+ <kpt-scroll-top target="#panel" />
13
+
14
+ ## Tokeny
15
+ Przycisk `--kpt-color-primary` / `--kpt-color-on-primary`, `--kpt-elevation-3`.
@@ -0,0 +1,22 @@
1
+ # KptSelect (kpt-select)
2
+
3
+ Lista wyboru na własnym panelu (CDK Overlay), Signal Forms. Warianty: pojedynczy,
4
+ z wyszukiwarką (`filter`) i wielokrotny (`multiple`, chipy; wartość `T[]`).
5
+ Import: `import { KptSelect, KptOption } from '@konce-pt/angular';`
6
+
7
+ Wymaga stylów overlay CDK w aplikacji: `import '@angular/cdk/overlay-prebuilt.css';`
8
+
9
+ ## Użycie
10
+ roles: KptOption<string>[] = [{label:'Admin',value:'admin'}, ...];
11
+ <kpt-select [formField]="f.role" [options]="roles" placeholder="Wybierz…" />
12
+ <kpt-select [formField]="f.city" [options]="cities" filter placeholder="Szukaj…" />
13
+ <kpt-select [formField]="f.tags" [options]="tags" multiple filter /> <!-- value: string[] -->
14
+
15
+ ## Wejścia
16
+ - `value`: model (T lub T[] przy multiple); `options`: KptOption<T>[]; `placeholder`: string
17
+ - `filter`: boolean — pole wyszukiwania; `multiple`: boolean — wybór wielu (chipy)
18
+ - `disabled`/`invalid`/`touched`: boolean; output `touch`.
19
+ - Klawiatura: Enter/↓ otwiera, ↑/↓ nawigacja, Enter wybiera, Esc zamyka.
20
+
21
+ ## Tokeny
22
+ `--kpt-form-field-{bg,text,border,border-hover,border-focus,border-error,radius}`.
@@ -0,0 +1,20 @@
1
+ # KptSidenav (kpt-sidenav)
2
+
3
+ Panel boczny — stylowany kontener nawigacji, zwykle w slocie `kptShellSidenav`
4
+ komponentu `kpt-app-shell`. Import: `import { KptSidenav } from '@konce-pt/angular';`
5
+
6
+ ## Selektor
7
+ `kpt-sidenav`
8
+
9
+ ## Treść
10
+ Dowolna zawartość (ng-content). Elementy `<a>` mają wbudowane style pozycji nawigacji
11
+ (hover z `--kpt-color-muted`).
12
+
13
+ ## Przykład
14
+ <kpt-sidenav kptShellSidenav>
15
+ <a href="#">Pulpit</a>
16
+ <a href="#">Ustawienia</a>
17
+ </kpt-sidenav>
18
+
19
+ ## Tokeny
20
+ `--kpt-sidenav-{bg,fg,border,width}` (szerokość ustawia `kpt-app-shell`).