@konce-pt/angular 0.7.11 → 0.8.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 (103) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/charts/src/lib/llms.txt +31 -30
  3. package/fesm2022/konce-pt-angular-charts.mjs +7 -498
  4. package/fesm2022/konce-pt-angular-charts.mjs.map +1 -1
  5. package/fesm2022/konce-pt-angular-icons.mjs +7 -5136
  6. package/fesm2022/konce-pt-angular-icons.mjs.map +1 -1
  7. package/fesm2022/konce-pt-angular-map.mjs +14 -1298
  8. package/fesm2022/konce-pt-angular-map.mjs.map +1 -1
  9. package/fesm2022/konce-pt-angular-roadmap.mjs +8 -1269
  10. package/fesm2022/konce-pt-angular-roadmap.mjs.map +1 -1
  11. package/fesm2022/konce-pt-angular.mjs +179 -1455
  12. package/fesm2022/konce-pt-angular.mjs.map +1 -1
  13. package/grid/src/lib/llms.txt +48 -48
  14. package/map/src/lib/llms.txt +447 -446
  15. package/package.json +9 -2
  16. package/roadmap/src/lib/llms.txt +75 -74
  17. package/src/lib/accordion/llms.txt +9 -9
  18. package/src/lib/alert/llms.txt +10 -10
  19. package/src/lib/app-shell/llms.txt +59 -59
  20. package/src/lib/auth/llms.txt +58 -58
  21. package/src/lib/autocomplete/llms.txt +8 -8
  22. package/src/lib/avatar/llms.txt +9 -9
  23. package/src/lib/avatar-group/llms.txt +8 -8
  24. package/src/lib/badge/llms.txt +9 -9
  25. package/src/lib/bottom-sheet/llms.txt +14 -14
  26. package/src/lib/breadcrumb/llms.txt +7 -7
  27. package/src/lib/breakpoint/llms.txt +21 -21
  28. package/src/lib/button/llms.txt +34 -34
  29. package/src/lib/button-group/llms.txt +5 -5
  30. package/src/lib/card/llms.txt +27 -27
  31. package/src/lib/carousel/llms.txt +11 -11
  32. package/src/lib/checkbox/llms.txt +7 -7
  33. package/src/lib/chip/llms.txt +6 -6
  34. package/src/lib/chips-input/llms.txt +9 -9
  35. package/src/lib/color-picker/llms.txt +7 -7
  36. package/src/lib/confirm/llms.txt +11 -11
  37. package/src/lib/context-menu/llms.txt +10 -10
  38. package/src/lib/data-table/llms.txt +170 -170
  39. package/src/lib/data-view/llms.txt +8 -8
  40. package/src/lib/date-range/llms.txt +25 -25
  41. package/src/lib/datepicker/llms.txt +52 -48
  42. package/src/lib/dialog/llms.txt +62 -62
  43. package/src/lib/divider/llms.txt +9 -9
  44. package/src/lib/drawer/llms.txt +18 -18
  45. package/src/lib/empty/llms.txt +9 -9
  46. package/src/lib/fab/llms.txt +12 -12
  47. package/src/lib/fieldset/llms.txt +9 -9
  48. package/src/lib/file-upload/llms.txt +10 -10
  49. package/src/lib/form-field/llms.txt +45 -45
  50. package/src/lib/galleria/llms.txt +7 -7
  51. package/src/lib/i18n/llms.txt +28 -22
  52. package/src/lib/icon/llms.txt +20 -20
  53. package/src/lib/icon-button/llms.txt +9 -8
  54. package/src/lib/image/llms.txt +9 -9
  55. package/src/lib/input/llms.txt +27 -27
  56. package/src/lib/input-mask/llms.txt +10 -10
  57. package/src/lib/input-number/llms.txt +34 -34
  58. package/src/lib/input-otp/llms.txt +11 -11
  59. package/src/lib/knob/llms.txt +14 -14
  60. package/src/lib/listbox/llms.txt +8 -8
  61. package/src/lib/megamenu/llms.txt +13 -13
  62. package/src/lib/menu/llms.txt +26 -26
  63. package/src/lib/menubar/llms.txt +10 -10
  64. package/src/lib/meter-group/llms.txt +8 -8
  65. package/src/lib/order-list/llms.txt +8 -8
  66. package/src/lib/paginator/llms.txt +12 -12
  67. package/src/lib/panel/llms.txt +12 -12
  68. package/src/lib/password/llms.txt +12 -12
  69. package/src/lib/pick-list/llms.txt +8 -8
  70. package/src/lib/popover/llms.txt +8 -8
  71. package/src/lib/progress/llms.txt +6 -6
  72. package/src/lib/radio-group/llms.txt +5 -5
  73. package/src/lib/rating/llms.txt +10 -6
  74. package/src/lib/rich-text/llms.txt +50 -50
  75. package/src/lib/scroll-top/llms.txt +7 -7
  76. package/src/lib/select/llms.txt +26 -26
  77. package/src/lib/sidenav/llms.txt +24 -24
  78. package/src/lib/skeleton/llms.txt +6 -6
  79. package/src/lib/slider/llms.txt +17 -17
  80. package/src/lib/speed-dial/llms.txt +7 -7
  81. package/src/lib/spinner/llms.txt +5 -5
  82. package/src/lib/split-button/llms.txt +15 -15
  83. package/src/lib/splitter/llms.txt +11 -11
  84. package/src/lib/stepper/llms.txt +10 -10
  85. package/src/lib/switch/llms.txt +10 -10
  86. package/src/lib/switch-group/llms.txt +16 -16
  87. package/src/lib/tabs/llms.txt +10 -10
  88. package/src/lib/textarea/llms.txt +5 -5
  89. package/src/lib/timeline/llms.txt +10 -10
  90. package/src/lib/toast/llms.txt +10 -10
  91. package/src/lib/toolbar/llms.txt +31 -31
  92. package/src/lib/tooltip/llms.txt +21 -21
  93. package/src/lib/tree/llms.txt +6 -6
  94. package/types/konce-pt-angular-charts.d.ts +10 -199
  95. package/types/konce-pt-angular-charts.d.ts.map +1 -1
  96. package/types/konce-pt-angular-icons.d.ts +2 -4
  97. package/types/konce-pt-angular-icons.d.ts.map +1 -1
  98. package/types/konce-pt-angular-map.d.ts +4 -609
  99. package/types/konce-pt-angular-map.d.ts.map +1 -1
  100. package/types/konce-pt-angular-roadmap.d.ts +6 -541
  101. package/types/konce-pt-angular-roadmap.d.ts.map +1 -1
  102. package/types/konce-pt-angular.d.ts +57 -529
  103. package/types/konce-pt-angular.d.ts.map +1 -1
@@ -1,78 +1,78 @@
1
1
  # KptAuth (kpt-auth)
2
2
 
3
- Ekran uwierzytelniania: logowanie, rejestracja i odzyskiwanie hasła w jednym komponencie,
4
- z panelem promocyjnym i listą dostawców zewnętrznych (OAuth/SSO). Signal Forms.
5
- Komponent jest **prezentacyjny** — nie woła API i nie nawiguje; robi to aplikacja w handlerach.
3
+ An authentication screen: sign in, sign up and password recovery in one component,
4
+ with a promo panel and a list of external providers (OAuth/SSO). Signal Forms.
5
+ The component is **presentational** — it does not call an API and does not navigate; the app does that in the handlers.
6
6
  Import: `import { KptAuth, KptAuthProviderDef } from '@konce-pt/angular';`
7
7
 
8
- ## Selektor
8
+ ## Selector
9
9
  `kpt-auth`
10
10
 
11
- ## Wejścia
12
- - `mode`: model<'signIn' | 'signUp' | 'forgot'> = 'signIn' — dwukierunkowy (aplikacja może wymusić tryb)
13
- - `layout`: 'slider' | 'split' = 'slider' — panel promocyjny przejeżdża na drugą stronę / stoi w miejscu
11
+ ## Inputs
12
+ - `mode`: model<'signIn' | 'signUp' | 'forgot'> = 'signIn' — two-way (the app can force a mode)
13
+ - `layout`: 'slider' | 'split' = 'slider' — the promo panel slides to the other side / stays put
14
14
  - `providers`: KptAuthProvider[] = [] — `{ id, label, icon?, iconUrl?, description? }`
15
- - `providerLayout`: 'list' | 'grid' = 'list' — lista pełnej szerokości / siatka ikon z podpisami
16
- - `showName`, `requireTerms`, `showRemember`: boolean = true — obecność pól
17
- - `busy`: boolean — przyciski w stanie ładowania, dostawcy zablokowani
18
- - `error` / `notice`: string | null — komunikat serwera (kpt-alert `danger` / `success`)
19
- - `promoTitle` / `promoText`: string | null — `null` = tekst z i18n zależny od trybu,
20
- `''` = ukryj (miejsce na slot `[kptAuthPromo]`)
15
+ - `providerLayout`: 'list' | 'grid' = 'list' — a full-width list / a grid of icons with captions
16
+ - `showName`, `requireTerms`, `showRemember`: boolean = true — whether the fields are present
17
+ - `busy`: boolean — the buttons go into a loading state, the providers are blocked
18
+ - `error` / `notice`: string | null — a server message (a `danger` / `success` kpt-alert)
19
+ - `promoTitle` / `promoText`: string | null — `null` = mode-dependent text from i18n,
20
+ `''` = hide it (making room for the `[kptAuthPromo]` slot)
21
21
  - `animated`: boolean = true; `animationDuration`: number = 320 (ms)
22
22
 
23
- ## Wyjścia
23
+ ## Outputs
24
24
  - `signIn`: { email, password, remember }
25
25
  - `signUp`: { name, email, password, terms }
26
26
  - `resetPassword`: { email }
27
- - `providerSelect`: KptAuthProvider — wybrany dostawca (pełny obiekt, nie samo `id`)
28
- - `modeChange` — z `model` `mode`
27
+ - `providerSelect`: KptAuthProvider — the chosen provider (the whole object, not just the `id`)
28
+ - `modeChange` — from the `mode` model
29
29
 
30
- ## Projekcja
31
- - `[kptAuthBrand]` — logo/nazwa nad nagłówkiem
32
- - `[kptAuthPromo]` — treść panelu promocyjnego (pod tytułem/tekstem, nad CTA)
33
- - `[kptAuthSso]` — przycisk logowania firmowego **nad** separatorem dostawców
34
- - `[kptAuthFields]` — dodatkowe pola wewnątrz `<form>` (logowanie i rejestracja)
35
- - `[kptAuthFooter]` — stopka (regulamin, prawa autorskie)
36
- - `ng-template[kptAuthProvider]="id"` (`KptAuthProviderDef`) — własny markup jednego dostawcy;
37
- kontekst: `$implicit` = dostawca, `select` = funkcja zgłaszająca wybór
30
+ ## Content projection
31
+ - `[kptAuthBrand]` — a logo/name above the heading
32
+ - `[kptAuthPromo]` — the promo panel's content (below the title/text, above the CTA)
33
+ - `[kptAuthSso]` — an enterprise sign-in button **above** the provider separator
34
+ - `[kptAuthFields]` — extra fields inside the `<form>` (sign in and sign up)
35
+ - `[kptAuthFooter]` — the footer (terms, copyright)
36
+ - `ng-template[kptAuthProvider]="id"` (`KptAuthProviderDef`) — custom markup for a single provider;
37
+ context: `$implicit` = the provider, `select` = the function that reports the choice
38
38
 
39
- **Pola ze slotu `[kptAuthFields]` nie wchodzą do modelu komponentu.** Konsument wiąże je do
40
- własnego formularza i czyta w handlerze `signIn`/`signUp` — w emitowanej wartości ich nie ma.
39
+ **Fields from the `[kptAuthFields]` slot do not enter the component's model.** The consumer binds them to
40
+ their own form and reads them in the `signIn`/`signUp` handler — they are not part of the emitted value.
41
41
 
42
- ## Walidacja
43
- Trzy niezależne formularze (po jednym na tryb), walidatory bezwarunkowe: e-mail wymagany
44
- i poprawny, hasło wymagane (rejestracja: min. 8 znaków), zgodność hasła i powtórzenia
45
- (`validateTree`), zgoda wymagana gdy `requireTerms`. Komunikaty składane są z `kind` błędu
46
- w czasie renderowania, więc **zmiana języka w runtime przerysowuje je** (walidatory tworzą się raz).
47
- Błąd pokazuje się dopiero po dotknięciu pola; `submit()` sam oznacza całe drzewo jako dotknięte.
42
+ ## Validation
43
+ Three independent forms (one per mode), with unconditional validators: e-mail required
44
+ and valid, password required (sign up: at least 8 characters), the password and its confirmation matching
45
+ (`validateTree`), consent required when `requireTerms`. Messages are composed from the error's `kind`
46
+ at render time, so **changing the language at runtime repaints them** (the validators are created once).
47
+ An error appears only once the field has been touched; `submit()` marks the whole tree as touched itself.
48
48
 
49
- ## Ikony dostawców
50
- Rdzeń nie zawiera ikon marek. Trzy drogi:
51
- 1. `provideKptTablerIcons()` z `@konce-pt/angular/icons` → `icon: 'brand-google'`,
49
+ ## Provider icons
50
+ The core carries no brand icons. Three ways around it:
51
+ 1. `provideKptTablerIcons()` from `@konce-pt/angular/icons` → `icon: 'brand-google'`,
52
52
  `'brand-facebook'`, `'brand-linkedin'`, `'brand-windows'`, `'brand-apple'`, `'brand-github'`, `'key'`.
53
- 2. `KptIconRegistry.register({ google: '<path …/>' })` — uwaga: sanityzator przepuszcza
54
- `fill`/`stroke`/`opacity`, ale wycina `defs`/gradienty i `fill-rule`, a `viewBox` jest ustalony
55
- na `0 0 24 24`. Wielokolorowe logo wymaga jawnego `fill` na każdej ścieżce.
56
- 3. `iconUrl` (zwykły `<img alt="">`) albo szablon `kptAuthProvider` — dla logo z gradientem.
53
+ 2. `KptIconRegistry.register({ google: '<path …/>' })` — note: the sanitizer lets
54
+ `fill`/`stroke`/`opacity` through, but strips `defs`/gradients and `fill-rule`, and the `viewBox` is fixed
55
+ at `0 0 24 24`. A multi-color logo needs an explicit `fill` on every path.
56
+ 3. `iconUrl` (a plain `<img alt="">`) or the `kptAuthProvider` template — for a logo with a gradient.
57
57
 
58
- Ikona jest dekoracyjna (`kpt-icon` ma `aria-hidden`), więc nazwa dostępna przycisku zawsze
59
- pochodzi z `label`.
58
+ The icon is decorative (`kpt-icon` carries `aria-hidden`), so the button's accessible name always
59
+ comes from `label`.
60
60
 
61
- ## Dostępność
62
- - W drzewie żyje **wyłącznie formularz aktywnego trybu** — nie ma elementów niewidocznych,
63
- ale wciąż fokusowalnych.
64
- - Nagłówek panelu ma `tabindex="-1"` i dostaje fokus po zmianie trybu (inaczej zmiana nie
65
- zostaje ogłoszona, a fokus zostaje na przycisku, który zjechał z ekranu).
66
- - Etykiety przez `kpt-form-field` + `controlId`; `autocomplete`: `email`, `current-password`,
61
+ ## Accessibility
62
+ - Only the **active mode's form** lives in the DOM — there are no invisible but still
63
+ focusable elements.
64
+ - The panel heading carries `tabindex="-1"` and takes focus after a mode change (otherwise the change is not
65
+ announced, and focus stays on a button that has slid off screen).
66
+ - Labels through `kpt-form-field` + `controlId`; `autocomplete`: `email`, `current-password`,
67
67
  `new-password`, `name`.
68
- - Przełączniki trybu to `<button>` z tekstem, nie `<a href="#">`.
69
- - `prefers-reduced-motion` wyłącza przejazdy i wjazd treści.
68
+ - The mode switches are `<button>` elements with text, not `<a href="#">`.
69
+ - `prefers-reduced-motion` disables the slide and the content's entrance.
70
70
 
71
- ## Stylowanie
72
- Publiczne zmienne: `--kpt-auth-width` (64rem), `--kpt-auth-card-height` (34rem),
73
- `--kpt-auth-min-height` (100dvh), `--kpt-auth-promo-bg` (własny gradient marki),
71
+ ## Styling
72
+ Public variables: `--kpt-auth-width` (64rem), `--kpt-auth-card-height` (34rem),
73
+ `--kpt-auth-min-height` (100dvh), `--kpt-auth-promo-bg` (your own brand gradient),
74
74
  `--kpt-auth-padding`, `--kpt-auth-card-radius` / `--kpt-auth-card-border` / `--kpt-auth-card-shadow`.
75
- Wariant na całe okno (karta bez ramki, od krawędzi do krawędzi):
75
+ The full-window variant (a borderless card, edge to edge):
76
76
 
77
77
  kpt-auth {
78
78
  --kpt-auth-padding: 0;
@@ -82,9 +82,9 @@ Wariant na całe okno (karta bez ramki, od krawędzi do krawędzi):
82
82
  --kpt-auth-card-border: 0;
83
83
  --kpt-auth-card-shadow: none;
84
84
  }
85
- Poniżej breakpointu `md` układ schodzi do jednej kolumny (promo nad formularzem, bez przejazdu).
85
+ Below the `md` breakpoint the layout drops to a single column (promo above the form, no sliding).
86
86
 
87
- ## Przykład
87
+ ## Example
88
88
  <kpt-auth
89
89
  [providers]="[{ id: 'google', label: 'Google', icon: 'brand-google' }]"
90
90
  [busy]="loading()"
@@ -99,6 +99,6 @@ Poniżej breakpointu `md` układ schodzi do jednej kolumny (promo nad formularze
99
99
  </kpt-auth>
100
100
 
101
101
  ## i18n
102
- Wszystkie napisy pochodzą z namespace `auth` (EN/PL), w tym `auth.promo.*` i interpolacje
103
- `auth.continueWith` ({provider}), `auth.passwordHint` / `auth.errorMinLength` ({min}).
104
- Patrz `i18n/llms.txt`.
102
+ Every string comes from the `auth` namespace (EN/PL), including `auth.promo.*` and the
103
+ `auth.continueWith` ({provider}), `auth.passwordHint` / `auth.errorMinLength` ({min}) interpolations.
104
+ See `i18n/llms.txt`.
@@ -1,16 +1,16 @@
1
1
  # KptAutocomplete (kpt-autocomplete)
2
2
 
3
- Pole z podpowiedziami na CDK Overlay, Signal Forms. Wartość = wpisany tekst.
4
- Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
3
+ A field with suggestions on CDK Overlay, Signal Forms. The value is the typed text.
4
+ Requires `import '@angular/cdk/overlay-prebuilt.css';`
5
5
  Import: `import { KptAutocomplete } from '@konce-pt/angular';`
6
6
 
7
- ## Wejścia
7
+ ## Inputs
8
8
  - `value`: model<string>; `options`: string[]; `placeholder`: string
9
9
  - `disabled`/`invalid`/`touched`: boolean; `touch`: output
10
- - Klawiatura: ↑/↓ nawigacja, Enter wybiera, Esc zamyka.
10
+ - Keyboard: ↑/↓ to navigate, Enter selects, Esc closes.
11
11
 
12
- ## Przykład
13
- <kpt-autocomplete [formField]="f.city" [options]="cities" placeholder="Miasto…" />
12
+ ## Example
13
+ <kpt-autocomplete [formField]="f.city" [options]="cities" placeholder="City…" />
14
14
 
15
- ## Tokeny
16
- `--kpt-form-field-*`, panel `--kpt-color-surface-raised`.
15
+ ## Tokens
16
+ `--kpt-form-field-*`, the panel `--kpt-color-surface-raised`.
@@ -1,20 +1,20 @@
1
1
  # KptAvatar (kpt-avatar)
2
2
 
3
- Awatar — obraz, inicjały (z `name`) lub ikona. Import: `import { KptAvatar } from '@konce-pt/angular';`
3
+ An avatar — an image, initials (from `name`) or an icon. Import: `import { KptAvatar } from '@konce-pt/angular';`
4
4
 
5
- ## Wejścia
6
- - `src`: string|null (obraz); `name`: string (inicjały, do 2 liter); `icon`: string|null
5
+ ## Inputs
6
+ - `src`: string|null (an image); `name`: string (initials, up to 2 letters); `icon`: string|null
7
7
  - `size`: 'sm'|'md'|'lg'|'xl'; `shape`: 'circle'|'square'
8
8
 
9
- ## Przykłady
9
+ ## Examples
10
10
  <kpt-avatar src="/u/anna.jpg" />
11
11
  <kpt-avatar name="Anna Kowalska" size="lg" />
12
12
  <kpt-avatar icon="user" shape="square" />
13
13
 
14
- ## Dostępność
15
- `name` trafia do natywnego `title` (podpowiedź z pełną nazwą — inicjały same nic nie mówią).
16
- Bez `src`: `role="img"` + `aria-label="name"`, a inicjały są `aria-hidden`. Ze `src` etykietę
17
- niesie `alt` obrazu — nie dubluje się z `aria-label`.
14
+ ## Accessibility
15
+ `name` goes into the native `title` (a tooltip with the full name — initials on their own say nothing).
16
+ Without `src`: `role="img"` + `aria-label="name"`, and the initials are `aria-hidden`. With `src` the label
17
+ is carried by the image's `alt` — it is not duplicated in `aria-label`.
18
18
 
19
- ## Tokeny
19
+ ## Tokens
20
20
  `--kpt-color-muted`, `--kpt-color-on-muted`, `--kpt-radius-full`/`--kpt-radius-md`.
@@ -1,18 +1,18 @@
1
1
  # KptAvatarGroup (kpt-avatar-group)
2
2
 
3
- Grupa nakładających się awatarów z licznikiem „+N". Buduje na `kpt-avatar`.
3
+ A group of overlapping avatars with a "+N" counter. Built on `kpt-avatar`.
4
4
  Import: `import { KptAvatarGroup } from '@konce-pt/angular';`
5
5
 
6
- ## Wejścia
6
+ ## Inputs
7
7
  - `avatars`: KptAvatarItem[] — { name?, src?, icon? }
8
- - `max`: number (domyślnie 4) — ile pokazać przed „+N"
8
+ - `max`: number (default 4) — how many to show before "+N"
9
9
  - `size`: 'sm' | 'md' | 'lg' | 'xl'
10
10
 
11
- Każdy awatar w grupie pokazuje swoje `name` w tooltipie (`title` z `kpt-avatar`), więc
12
- inicjały pozostają czytelne także przy `size="sm"`.
11
+ Every avatar in the group shows its `name` in a tooltip (the `title` from `kpt-avatar`), so
12
+ the initials stay readable even at `size="sm"`.
13
13
 
14
- ## Przykład
14
+ ## Example
15
15
  <kpt-avatar-group [avatars]="team" [max]="4" />
16
16
 
17
- ## Tokeny
18
- Nakładka z obwódką `--kpt-color-surface`; „+N" `--kpt-color-muted`.
17
+ ## Tokens
18
+ The overlap uses a `--kpt-color-surface` ring; "+N" uses `--kpt-color-muted`.
@@ -1,20 +1,20 @@
1
1
  # KptBadge (kpt-badge)
2
2
 
3
- Znacznik — licznik lub kropka statusu; standalone lub nałożony na treść (`overlay`).
3
+ A badge — a counter or a status dot; standalone or overlaid on content (`overlay`).
4
4
  Import: `import { KptBadge } from '@konce-pt/angular';`
5
5
 
6
- ## Wejścia
6
+ ## Inputs
7
7
  - `value`: string|number|null; `variant`: 'neutral'|'primary'|'success'|'danger'|'warning'|'info'
8
- - `size`: 'sm'|'md'|'lg' (domyślnie 'md') — wysokość 1rem / 1.25rem / 1.5rem. Krój, wcięcie boczne
9
- i średnica kropki liczą się z wysokości, więc proporcje trzymają się na każdym rozmiarze.
10
- `sm` służy do wstawiania odznaki w wiersz tekstu (pozycja menu, etykieta, komórka tabeli).
11
- - `dot`: boolean (kropka bez liczby); `overlay`: boolean (róg treści); `max`: number (domyślnie 99 → '99+')
8
+ - `size`: 'sm'|'md'|'lg' (default 'md') — height 1rem / 1.25rem / 1.5rem. The type size, the side inset
9
+ and the dot diameter are derived from the height, so the proportions hold at every size.
10
+ `sm` is meant for a badge sitting inside a line of text (a menu entry, a label, a table cell).
11
+ - `dot`: boolean (a dot with no number); `overlay`: boolean (the corner of the content); `max`: number (default 99 → '99+')
12
12
 
13
- ## Przykłady
13
+ ## Examples
14
14
  <kpt-badge [value]="3" variant="danger" />
15
15
  <kpt-badge [value]="4" size="sm" variant="success" />
16
16
  <kpt-badge [value]="128" overlay><kpt-icon name="menu" /></kpt-badge>
17
17
  <kpt-badge dot variant="success" overlay><kpt-avatar name="AK" /></kpt-badge>
18
18
 
19
- ## Tokeny
20
- `--kpt-color-{primary,muted,success,danger,warning,info}`, obwódka overlay z `--kpt-color-surface`.
19
+ ## Tokens
20
+ `--kpt-color-{primary,muted,success,danger,warning,info}`, the overlay ring from `--kpt-color-surface`.
@@ -1,22 +1,22 @@
1
1
  # KptBottomSheet (kpt-bottom-sheet)
2
2
 
3
- Arkusz wysuwany z dołu ekranu. Sterowany sygnałem `open`, z uchwytem i backdrop.
3
+ A sheet that slides up from the bottom of the screen. Driven by the `open` signal, with a handle and a backdrop.
4
4
  Import: `import { KptBottomSheet } from '@konce-pt/angular';`
5
5
 
6
- ## Wejścia / model
7
- - `open`: model<boolean> (dwukierunkowe)
6
+ ## Inputs / model
7
+ - `open`: model<boolean> (two-way)
8
8
  - `header`: string; `closeOnBackdrop`: boolean
9
- - Treść przez projekcję.
9
+ - Content through projection.
10
10
 
11
- ## Przykład
12
- <kpt-button (click)="sheetOpen.set(true)">Udostępnij</kpt-button>
13
- <kpt-bottom-sheet [(open)]="sheetOpen" header="Udostępnij">…</kpt-bottom-sheet>
11
+ ## Example
12
+ <kpt-button (click)="sheetOpen.set(true)">Share</kpt-button>
13
+ <kpt-bottom-sheet [(open)]="sheetOpen" header="Share">…</kpt-bottom-sheet>
14
14
 
15
- ## Stan zamknięty / a11y
16
- Arkusz jest zawsze w DOM (bez `@if`), chowany `transform` **i** `visibility: hidden` — bez
17
- `display: none`, żeby zachować animację wjazdu i zjazdu. `visibility` wyjmuje zamknięty arkusz
18
- z kolejki Tab i z drzewa dostępności bez `inert`, i to już na pierwszej klatce, bez czekania
19
- na JavaScript. `prefers-reduced-motion: reduce` zdejmuje przejścia.
15
+ ## The closed state / a11y
16
+ The sheet is always in the DOM (no `@if`), hidden with `transform` **and** `visibility: hidden` — never
17
+ `display: none`, so that the slide-in and slide-out animations survive. `visibility` takes the closed sheet
18
+ out of the tab order and out of the accessibility tree without `inert`, and it does so on the very first frame,
19
+ without waiting for JavaScript. `prefers-reduced-motion: reduce` drops the transitions.
20
20
 
21
- ## Tokeny
22
- Panel `--kpt-color-surface-raised`, zaokrąglenie górne `--kpt-radius-lg`, `--kpt-elevation-4`.
21
+ ## Tokens
22
+ The panel `--kpt-color-surface-raised`, the top radius `--kpt-radius-lg`, `--kpt-elevation-4`.
@@ -1,12 +1,12 @@
1
1
  # KptBreadcrumb (kpt-breadcrumb)
2
2
 
3
- Ścieżka nawigacji. Import: `import { KptBreadcrumb, KptBreadcrumbItem } from '@konce-pt/angular';`
3
+ A navigation trail. Import: `import { KptBreadcrumb, KptBreadcrumbItem } from '@konce-pt/angular';`
4
4
 
5
- ## Wejścia
6
- - `items`: KptBreadcrumbItem[] `{ label: string; url?: string }` (element bez `url` lub ostatni = bieżąca strona)
5
+ ## Inputs
6
+ - `items`: KptBreadcrumbItem[] `{ label: string; url?: string }` (an item without `url`, or the last one, = the current page)
7
7
 
8
- ## Przykład
9
- <kpt-breadcrumb [items]="[{label:'Start',url:'/'},{label:'Ustawienia',url:'/s'},{label:'Profil'}]" />
8
+ ## Example
9
+ <kpt-breadcrumb [items]="[{label:'Home',url:'/'},{label:'Settings',url:'/s'},{label:'Profile'}]" />
10
10
 
11
- ## Tokeny
12
- Separator ikoną `chevron-right`; linki `--kpt-color-on-surface-muted` → hover `--kpt-color-primary`.
11
+ ## Tokens
12
+ The separator is a `chevron-right` icon; links `--kpt-color-on-surface-muted` → hover `--kpt-color-primary`.
@@ -1,35 +1,35 @@
1
1
  # KptBreakpointObserver
2
2
 
3
- Serwis (root) zamieniający media query na sygnały. Jedyny w bibliotece sposób na zapytanie
4
- „jak szerokie jest okno" z poziomu TypeScriptu.
3
+ A root service that turns media queries into signals. The only way in the library to ask
4
+ "how wide is the window" from TypeScript.
5
5
 
6
6
  ## API
7
7
 
8
8
  inject(KptBreakpointObserver)
9
9
 
10
- - `up(bp: KptBreakpoint): Signal<boolean>` — `(min-width: <próg>px)`, mobile-first.
11
- - `down(bp: KptBreakpoint): Signal<boolean>` — `(max-width: <próg - 0.02>px)`; odjęcie 0.02px
12
- sprawia, że pasma `up`/`down` nie nakładają się na ułamkowych szerokościach (zoom, DPI).
13
- - `matches(query: string): Signal<boolean>` — dowolne media query.
10
+ - `up(bp: KptBreakpoint): Signal<boolean>` — `(min-width: <threshold>px)`, mobile-first.
11
+ - `down(bp: KptBreakpoint): Signal<boolean>` — `(max-width: <threshold - 0.02>px)`; subtracting 0.02px
12
+ keeps the `up`/`down` bands from overlapping at fractional widths (zoom, DPI).
13
+ - `matches(query: string): Signal<boolean>` — any media query.
14
14
 
15
- `KptBreakpoint` = `'sm' | 'md' | 'lg' | 'xl' | '2xl'`; progi w `KPT_BREAKPOINTS`
15
+ `KptBreakpoint` = `'sm' | 'md' | 'lg' | 'xl' | '2xl'`; the thresholds live in `KPT_BREAKPOINTS`
16
16
  (640 / 768 / 1024 / 1280 / 1536 px).
17
17
 
18
- ## Skąd biorą się wartości
18
+ ## Where the values come from
19
19
 
20
- Z tokenów: `packages/tokens/tokens/primitives/breakpoint.json` → `scripts/gen-tokens.mjs`
21
- generuje `breakpoint/breakpoints.generated.ts` (dla JS) i `styles/_breakpoints.generated.scss`
22
- (dla `@media` w SCSS komponentów). Oba pliki są commitowane i **nie edytuje się ich ręcznie** —
23
- zmiana progu idzie przez token i `pnpm nx build angular`. Dzięki jednemu źródłu CSS biblioteki
24
- i jej JavaScript nie mogą rozjechać się cicho.
20
+ From tokens: `packages/tokens/tokens/primitives/breakpoint.json` → `scripts/gen-tokens.mjs`
21
+ generates `breakpoint/breakpoints.generated.ts` (for JS) and `styles/_breakpoints.generated.scss`
22
+ (for `@media` in component SCSS). Both files are committed and **must not be edited by hand** —
23
+ a threshold change goes through the token plus `pnpm nx build angular`. With a single source, the library's
24
+ CSS and its JavaScript cannot drift apart silently.
25
25
 
26
26
  ## SSR
27
27
 
28
- Poza przeglądarką każdy sygnał to stałe `false`. Nie buduj na nim układu strony — od tego jest
29
- CSS (`@media`), inaczej dostaniesz migotanie przed hydracją. Serwis służy do zachowań:
30
- w którą stronę ma zadziałać przycisk, czy zamykać panel po nawigacji, co odłożyć na później.
28
+ Outside the browser every signal is a constant `false`. Do not build page layout on it — that is what
29
+ CSS (`@media`) is for, otherwise you get flicker before hydration. The service is for behavior:
30
+ which way a button should act, whether to close a panel after navigation, what to defer.
31
31
 
32
- ## Przykład
32
+ ## Example
33
33
 
34
34
  @Component({ /* … */ })
35
35
  export class Header {
@@ -38,8 +38,8 @@ w którą stronę ma zadziałać przycisk, czy zamykać panel po nawigacji, co o
38
38
  readonly isCompact = this.breakpoints.down('md');
39
39
  }
40
40
 
41
- ## Uwagi
41
+ ## Notes
42
42
 
43
- - Zapytania są memoizowane per string — `up('lg')` w dziesięciu komponentach to jeden
44
- `MediaQueryList` i jeden nasłuch; nie trzeba tego cache'ować u siebie.
45
- - Sprzątanie idzie przez `DestroyRef` root injectora, więc nie ma czego odsubskrybować.
43
+ - Queries are memoized per string — `up('lg')` across ten components is one
44
+ `MediaQueryList` and one listener; there is no need to cache it yourself.
45
+ - Cleanup goes through the root injector's `DestroyRef`, so there is nothing to unsubscribe.
@@ -1,46 +1,46 @@
1
1
  # KptButton (kpt-button)
2
2
 
3
- Przycisk Koncept UI. Renderuje natywny `<button>` (semantyka + submit formularza).
4
- Standalone, OnPush, sygnały. Import: `import { KptButton } from '@konce-pt/angular';`
3
+ The Koncept UI button. It renders a native `<button>` (semantics + form submit).
4
+ Standalone, OnPush, signals. Import: `import { KptButton } from '@konce-pt/angular';`
5
5
 
6
- ## Selektor
6
+ ## Selector
7
7
  `kpt-button`
8
8
 
9
- ## Wejścia (input signals)
10
- - `variant`: 'filled' | 'tonal' | 'outline' | 'text' | 'danger' (domyślnie 'filled')
11
- - `size`: 'sm' | 'md' | 'lg' (domyślnie 'md')
12
- - `type`: 'button' | 'submit' | 'reset' (domyślnie 'button')
9
+ ## Inputs (input signals)
10
+ - `variant`: 'filled' | 'tonal' | 'outline' | 'text' | 'danger' (default 'filled')
11
+ - `size`: 'sm' | 'md' | 'lg' (default 'md')
12
+ - `type`: 'button' | 'submit' | 'reset' (default 'button')
13
13
  - `disabled`: boolean (booleanAttribute)
14
- - `loading`: boolean — spinner + blokada interakcji, ustawia aria-busy
15
- - `fullWidth`: boolean — pełna szerokość kontenera
14
+ - `loading`: boolean — a spinner + blocked interaction, sets aria-busy
15
+ - `fullWidth`: boolean — the full width of the container
16
16
 
17
- ## Zdarzenia
18
- Brak własnych — natywny `click` bąbelkuje z wewnętrznego `<button>`; wiąż `(click)` na `<kpt-button>`.
17
+ ## Events
18
+ None of its own — the native `click` bubbles out of the inner `<button>`; bind `(click)` on `<kpt-button>`.
19
19
 
20
- ## Przykłady
21
- <kpt-button (click)="save()">Zapisz</kpt-button>
22
- <kpt-button variant="outline" size="sm">Anuluj</kpt-button>
23
- <kpt-button variant="danger" [loading]="deleting()">Usuń</kpt-button>
24
- <form (submit)="onSubmit()"><kpt-button type="submit">Wyślij</kpt-button></form>
20
+ ## Examples
21
+ <kpt-button (click)="save()">Save</kpt-button>
22
+ <kpt-button variant="outline" size="sm">Cancel</kpt-button>
23
+ <kpt-button variant="danger" [loading]="deleting()">Delete</kpt-button>
24
+ <form (submit)="onSubmit()"><kpt-button type="submit">Send</kpt-button></form>
25
25
 
26
- ## Tokeny (stylowanie)
26
+ ## Tokens (styling)
27
27
  `--kpt-button-radius`, `--kpt-button-font-weight`, `--kpt-button-gap`,
28
28
  `--kpt-button-filled-{bg,fg,bg-hover,bg-active}`, `--kpt-button-tonal-{bg,fg,bg-hover}`,
29
29
  `--kpt-button-outline-{border,fg,bg-hover}`, `--kpt-button-text-{fg,bg-hover}`.
30
- Wariant 'danger' korzysta z `--kpt-color-danger` / `--kpt-color-on-danger`.
31
-
32
- ## Warstwa stanu (hover / active)
33
- Sprzężenie zwrotne hovera i aktywności niesie pseudoelement `::after` (`opacity` 0 → 1),
34
- a nie animowany `background-color` samego przycisku. Powód: kolory wariantu (`--_bg`,
35
- `--_border`) przyjeżdżają z `[attr.data-variant]`, które Angular ustawia dopiero
36
- w przebiegu aktualizacji — animowane przejście pokazywało przez moment wariant bazowy
37
- (`filled`) i przefarbowywało go na docelowy, co dawało migotanie przy starcie aplikacji.
38
- Warstwa startuje z `opacity: 0`, więc zmiana jej koloru przy pierwszym renderze jest
39
- niewidoczna. Przycisk ma przez to `position: relative` i `isolation: isolate`
40
- (kontekst układania, żeby `z-index: -1` warstwy trafił nad tło, a pod treść).
41
- Ten sam wzorzec mają `kpt-icon-button`, `kpt-fab` i `kpt-split-button`.
42
-
43
- ## Dostępność
44
- - Natywny `<button>` — pełna obsługa klawiatury i czytników.
45
- - `loading` ustawia `aria-busy="true"` i blokuje przycisk (`disabled`).
46
- - Pierścień fokusa z `@konce-pt/styles` (`--kpt-color-focus-ring`).
30
+ The 'danger' variant uses `--kpt-color-danger` / `--kpt-color-on-danger`.
31
+
32
+ ## The state layer (hover / active)
33
+ Hover and active feedback is carried by an `::after` pseudo-element (`opacity` 0 → 1),
34
+ not by animating the button's own `background-color`. The reason: the variant colors (`--_bg`,
35
+ `--_border`) arrive through `[attr.data-variant]`, which Angular only sets
36
+ during the update pass — an animated transition briefly showed the base variant
37
+ (`filled`) and then repainted it into the target one, which produced flicker at application start.
38
+ The layer starts at `opacity: 0`, so changing its color on the first render is
39
+ invisible. That is why the button carries `position: relative` and `isolation: isolate`
40
+ (a stacking context, so that the layer's `z-index: -1` lands above the background but below the content).
41
+ `kpt-icon-button`, `kpt-fab` and `kpt-split-button` follow the same pattern.
42
+
43
+ ## Accessibility
44
+ - A native `<button>` — full keyboard and screen reader support.
45
+ - `loading` sets `aria-busy="true"` and disables the button (`disabled`).
46
+ - The focus ring comes from `@konce-pt/styles` (`--kpt-color-focus-ring`).
@@ -1,14 +1,14 @@
1
1
  # KptButtonGroup (kpt-button-group)
2
2
 
3
- Segmentowana grupa przycisków (toggle, pojedynczy wybór). Signal Forms.
3
+ A segmented button group (toggle, single choice). Signal Forms.
4
4
  Import: `import { KptButtonGroup, KptOption } from '@konce-pt/angular';`
5
5
 
6
- ## Wejścia
6
+ ## Inputs
7
7
  - `options`: KptOption<T>[]; `value`: model<T>; `size`: 'sm'|'md'|'lg'; `disabled`/`invalid`/`touched`; `touch`
8
8
 
9
- ## Przykłady
10
- <kpt-button-group [(value)]="view" [options]="[{label:'Lista',value:'list'},{label:'Siatka',value:'grid'}]" />
9
+ ## Examples
10
+ <kpt-button-group [(value)]="view" [options]="[{label:'List',value:'list'},{label:'Grid',value:'grid'}]" />
11
11
  <kpt-button-group [formField]="f.period" [options]="periods" />
12
12
 
13
- ## Tokeny
13
+ ## Tokens
14
14
  `--kpt-color-primary`, `--kpt-color-border-strong`, `--kpt-color-muted`.
@@ -1,33 +1,33 @@
1
1
  # KptCard (kpt-card)
2
2
 
3
- Karta — powierzchnia z wyniesieniem (elevated) lub obramowaniem (outlined).
3
+ A card — a surface with elevation (elevated) or a border (outlined).
4
4
  Import: `import { KptCard } from '@konce-pt/angular';`
5
5
 
6
- ## Selektor
6
+ ## Selector
7
7
  `kpt-card`
8
8
 
9
- ## Wejścia
10
- - `variant`: 'elevated' | 'outlined' (domyślnie 'elevated')
11
- - `header`: string — opcjonalny tekst nagłówka
12
- - `flush`: boolean — body bez paddingu (dla bogatych układów zarządzających sekcjami)
13
-
14
- ## Projekcja
15
- - treść domyślna → body karty
16
- - element z atrybutem `kptCardFooter` (bezpośrednie dziecko `kpt-card`) → stopka
17
-
18
- ## Reużywalne klasy układu (media / profil)
19
- - `kpt-card__media` — obraz na całą szerokość (przycięty do promienia; ustaw `aspect-ratio`/`height` inline)
20
- - `kpt-card__lead` — wiersz nagłówka (awatar + tytuły), padding
21
- - `kpt-card__title`, `kpt-card__subtitle` — typografia tytułu/podtytułu
22
- - `kpt-card__section` — sekcja z paddingiem (kolumna z odstępami)
23
- - `kpt-card__tags` — wiersz chipów; `kpt-card__meta` — wiersz ikona+tekst (ocena/lokalizacja)
24
- - `kpt-card__avatar` — nachodzący awatar z ringiem (na okładce)
25
- - `kpt-card__actions` — wiersz przycisków (równe szerokości)
26
-
27
- ## Przykład
28
- <kpt-card header="Ustawienia" variant="outlined">
29
- <p>Treść…</p>
30
- <div kptCardFooter><kpt-button>Zapisz</kpt-button></div>
9
+ ## Inputs
10
+ - `variant`: 'elevated' | 'outlined' (default 'elevated')
11
+ - `header`: string — optional header text
12
+ - `flush`: boolean — a body with no padding (for rich layouts that manage their own sections)
13
+
14
+ ## Content projection
15
+ - the default content → the card body
16
+ - an element carrying the `kptCardFooter` attribute (a direct child of `kpt-card`) → the footer
17
+
18
+ ## Reusable layout classes (media / profile)
19
+ - `kpt-card__media` — a full-width image (clipped to the radius; set `aspect-ratio`/`height` inline)
20
+ - `kpt-card__lead` — the header row (avatar + titles), with padding
21
+ - `kpt-card__title`, `kpt-card__subtitle` — title/subtitle typography
22
+ - `kpt-card__section` — a padded section (a column with gaps)
23
+ - `kpt-card__tags` — a row of chips; `kpt-card__meta` — an icon+text row (rating/location)
24
+ - `kpt-card__avatar` — an overlapping avatar with a ring (on the cover)
25
+ - `kpt-card__actions` — a row of buttons (equal widths)
26
+
27
+ ## Example
28
+ <kpt-card header="Settings" variant="outlined">
29
+ <p>Content…</p>
30
+ <div kptCardFooter><kpt-button>Save</kpt-button></div>
31
31
  </kpt-card>
32
32
 
33
33
  <!-- media card -->
@@ -36,10 +36,10 @@ Import: `import { KptCard } from '@konce-pt/angular';`
36
36
  <kpt-avatar src="/u.jpg" />
37
37
  <div><div class="kpt-card__title">Shiba Inu</div><div class="kpt-card__subtitle">Dog Breed</div></div>
38
38
  </div>
39
- <img class="kpt-card__media" src="/foto.jpg" alt="" style="aspect-ratio: 4/3" />
40
- <div class="kpt-card__section">Opis…</div>
39
+ <img class="kpt-card__media" src="/photo.jpg" alt="" style="aspect-ratio: 4/3" />
40
+ <div class="kpt-card__section">Description…</div>
41
41
  <div kptCardFooter><kpt-button variant="text" size="sm">LIKE</kpt-button></div>
42
42
  </kpt-card>
43
43
 
44
- ## Tokeny
44
+ ## Tokens
45
45
  `--kpt-card-{bg,fg,border,radius,padding,shadow}`.