@konce-pt/angular 0.9.0 → 0.10.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 (73) hide show
  1. package/CHANGELOG.md +338 -0
  2. package/fesm2022/konce-pt-angular.mjs +5445 -1755
  3. package/fesm2022/konce-pt-angular.mjs.map +1 -1
  4. package/package.json +11 -11
  5. package/src/lib/accordion/llms.txt +6 -0
  6. package/src/lib/alert/llms.txt +7 -0
  7. package/src/lib/app-shell/llms.txt +4 -3
  8. package/src/lib/autocomplete/llms.txt +13 -0
  9. package/src/lib/avatar/llms.txt +6 -3
  10. package/src/lib/avatar-group/llms.txt +6 -0
  11. package/src/lib/badge/llms.txt +11 -2
  12. package/src/lib/bottom-sheet/llms.txt +8 -1
  13. package/src/lib/breadcrumb/llms.txt +5 -0
  14. package/src/lib/button/llms.txt +3 -0
  15. package/src/lib/card/llms.txt +8 -0
  16. package/src/lib/carousel/llms.txt +13 -1
  17. package/src/lib/checkbox/llms.txt +10 -0
  18. package/src/lib/chip/llms.txt +6 -0
  19. package/src/lib/chips-input/llms.txt +12 -0
  20. package/src/lib/color-picker/llms.txt +14 -0
  21. package/src/lib/confirm/llms.txt +5 -0
  22. package/src/lib/context-menu/llms.txt +8 -0
  23. package/src/lib/data-table/llms.txt +5 -4
  24. package/src/lib/date-range/llms.txt +24 -2
  25. package/src/lib/datepicker/llms.txt +25 -5
  26. package/src/lib/dialog/llms.txt +18 -0
  27. package/src/lib/drawer/llms.txt +7 -1
  28. package/src/lib/empty/llms.txt +6 -0
  29. package/src/lib/fab/llms.txt +5 -2
  30. package/src/lib/file-upload/llms.txt +12 -1
  31. package/src/lib/form-field/llms.txt +24 -4
  32. package/src/lib/galleria/llms.txt +13 -1
  33. package/src/lib/i18n/llms.txt +2 -2
  34. package/src/lib/icon/llms.txt +9 -1
  35. package/src/lib/icon-button/llms.txt +3 -1
  36. package/src/lib/image/llms.txt +10 -1
  37. package/src/lib/input/llms.txt +6 -0
  38. package/src/lib/input-mask/llms.txt +11 -0
  39. package/src/lib/input-number/llms.txt +18 -0
  40. package/src/lib/input-otp/llms.txt +14 -0
  41. package/src/lib/knob/llms.txt +8 -0
  42. package/src/lib/listbox/llms.txt +16 -1
  43. package/src/lib/megamenu/llms.txt +21 -1
  44. package/src/lib/menu/llms.txt +14 -4
  45. package/src/lib/menubar/llms.txt +21 -0
  46. package/src/lib/meter-group/llms.txt +10 -0
  47. package/src/lib/order-list/llms.txt +11 -2
  48. package/src/lib/panel/llms.txt +7 -0
  49. package/src/lib/password/llms.txt +9 -1
  50. package/src/lib/pick-list/llms.txt +12 -2
  51. package/src/lib/popover/llms.txt +11 -0
  52. package/src/lib/radio-group/llms.txt +11 -0
  53. package/src/lib/rating/llms.txt +18 -4
  54. package/src/lib/rich-text/llms.txt +18 -0
  55. package/src/lib/scroll-top/llms.txt +12 -0
  56. package/src/lib/select/llms.txt +23 -5
  57. package/src/lib/sidenav/llms.txt +6 -0
  58. package/src/lib/skeleton/llms.txt +2 -1
  59. package/src/lib/slider/llms.txt +13 -0
  60. package/src/lib/speed-dial/llms.txt +8 -0
  61. package/src/lib/spinner/llms.txt +10 -1
  62. package/src/lib/split-button/llms.txt +11 -2
  63. package/src/lib/splitter/llms.txt +10 -1
  64. package/src/lib/stepper/llms.txt +8 -0
  65. package/src/lib/switch/llms.txt +11 -0
  66. package/src/lib/switch-group/llms.txt +11 -0
  67. package/src/lib/tabs/llms.txt +7 -0
  68. package/src/lib/textarea/llms.txt +12 -0
  69. package/src/lib/toast/llms.txt +19 -1
  70. package/src/lib/tooltip/llms.txt +12 -0
  71. package/src/lib/tree/llms.txt +21 -0
  72. package/types/konce-pt-angular.d.ts +1047 -73
  73. package/types/konce-pt-angular.d.ts.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,343 @@
1
1
  # @konce-pt/angular
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 0930165: Nazwy, relacje i fokus w dziesięciu komponentach; pole `url` w menubarze i megamenu wreszcie działa.
8
+
9
+ - `kpt-dialog`: okno z `header` bierze z niego nazwę (`aria-labelledby`). Angular dostał inputy
10
+ `ariaLabel` (okno bez nagłówka), `ariaDescribedby` i `alert` (`role="alertdialog"`); w React te same
11
+ atrybuty przechodzą wprost jako propsy `<dialog>`.
12
+ - `kpt-confirm-container`: okno to `alertdialog` z treścią pytania w `aria-describedby`, a fokus
13
+ startuje na przycisku odmowy zamiast na „×”.
14
+ - `kpt-splitter`: uchwyt ma nazwę (input/prop `ariaLabel`, domyślnie nowy klucz `splitter.resize`),
15
+ `aria-valuemin`/`aria-valuemax`, `aria-controls`, obsługę `Home`/`End` i poprawne
16
+ `aria-orientation` (linia uchwytu, nie układ). Host ma `height: 100%`, więc wysokość rodzica
17
+ dociera do paneli — **splitter w rodzicu o ustalonej wysokości wypełni ją teraz w całości**.
18
+ - `kpt-stepper`: znaczniki mają nazwy z nowych kluczy `stepper.step` / `stepper.stepDone`
19
+ („Krok 2: Dostawa, ukończony”) zamiast samego numeru.
20
+ - `kpt-panel`: przełącznik z `header` mówi, który panel zwija (nowy klucz `panel.toggleNamed`),
21
+ i wskazuje treść przez `aria-controls`.
22
+ - `kpt-accordion`: nagłówek ma `aria-controls`, treść to `region` nazwany nagłówkiem.
23
+ - `kpt-card`: nowy input/prop `headingLevel` robi z `header` nagłówek strony.
24
+ - `kpt-breadcrumb`: pozycje są listą `<ol>`/`<li>` w `<nav>`, więc czytnik ogłasza liczbę poziomów.
25
+ - `kpt-sidenav`: linki to rząd flex z odstępem (ikona i etykieta się nie sklejają), a link
26
+ z `aria-current="page"` jest podświetlony.
27
+ - `kpt-app-shell`: otwarcie nakładki przenosi fokus do panelu, zamknięcie oddaje go na przycisk menu.
28
+ - `kpt-menubar`, `kpt-megamenu`: pozycja z `url` (bez dzieci, niewyłączona) renderuje się jako
29
+ `<a href>` — wcześniej pole było opisane, ale pomijane.
30
+
31
+ - a7525af: `kpt-file-upload` i `kptTooltip` działają z klawiatury i czytnika ekranu.
32
+
33
+ `kpt-file-upload` (oba porty): strefa upuszczania była `<div>` reagującym wyłącznie na kliknięcie,
34
+ a natywne pole pliku jest ukryte — z klawiatury nie dało się wybrać pliku w ogóle. Strefa jest teraz
35
+ `role="button"` z przystankiem Tab, a `Enter` i spacja otwierają okno wyboru. W Angularze `disabled`
36
+ zmieniał tylko wygląd i kliknięcie nadal otwierało okno — teraz blokuje wybór i wyjmuje strefę
37
+ z kolejności Tab (`aria-disabled`). Stan `invalid` dostał wygląd (ramka `--kpt-color-danger`,
38
+ `aria-invalid`), widoczny po dotknięciu pola. Pozycje listy mają ikonę według typu (`photo` dla
39
+ obrazów, `paperclip` dla reszty) zamiast zawsze ikony zdjęcia, a lista nie gubi już plików o tej
40
+ samej nazwie.
41
+
42
+ `kptTooltip` (Angular): nasłuchiwał `focus`/`blur` na hoście, a te zdarzenia nie bąbelkują — na
43
+ `kpt-button` i `kpt-icon-button` fokus dostaje wewnętrzny `<button>`, więc podpowiedź nie pojawiała
44
+ się z klawiatury. Teraz `focusin`/`focusout`. W obu portach: tekst trafia do czytników przez trwały,
45
+ ukryty opis powiązany `aria-describedby` z elementem przyjmującym fokus (pomijany, gdy powtarzałby
46
+ jego nazwę, i przy `onlyWhenTruncated`), `Escape` zamyka dymek, a wskaźnik może na niego przejść bez
47
+ zniknięcia — wymagania WCAG 1.4.13.
48
+
49
+ - 094a654: Drobne poprawki dostępności i wygody w kontrolkach formularzy.
50
+
51
+ - `kpt-input-otp`: `autocomplete="one-time-code"` na pierwszej komórce (telefon podpowiada kod z SMS);
52
+ kod wpisany do jednej komórki naraz rozkłada się jak wklejenie; `touch` przy wyjściu z grupy.
53
+ - `kpt-input-mask`: `inputmode` z maski (same `9` → klawiatura numeryczna), nowe `inputMode`
54
+ i `autocomplete`.
55
+ - `kpt-autocomplete`: `aria-autocomplete`, `aria-controls`, `aria-activedescendant`, liczba podpowiedzi
56
+ w regionie `polite`, dopasowanie bez diakrytyków, `Escape` zamyka, a drugi czyści pole.
57
+ - `kpt-checkbox`: stan pośredni `indeterminate`.
58
+ - `kpt-switch`: tekst stanu (`onLabel`/`offLabel`) poza nazwą; `kpt-switch-group`: stan błędu na
59
+ przełącznikach zamiast na `role="group"`.
60
+ - `kpt-radio-group`: `orientation` (`aria-orientation`).
61
+ - `kpt-chips-input`: tagi jako lista, komunikaty dodania/usunięcia/duplikatu, duplikat zostaje w polu,
62
+ fokus wraca do pola po usunięciu tagu.
63
+ - `kpt-textarea`: `maxLength` i licznik `counter` powiązany przez `aria-describedby`.
64
+ - `kpt-slider`: `suffix` w wartości i `aria-valuetext`, `aria-invalid`.
65
+ - `kpt-color-picker`: nazwane gotowe kolory (`{ value, label }`, typ `KptColorPreset`, domyślna paleta
66
+ z i18n), `aria-pressed`, pole hex przyjmuje tylko pełny kod i oznacza niepełny `aria-invalid`.
67
+ - `kpt-input-number`: wartość w zapisie aktywnego języka (PL `12,5`).
68
+ - `kpt-rating`: połówki gwiazdek (`allowHalf`) — każda połówka to osobne `radio`, strzałki co 0,5;
69
+ tylko do odczytu gwiazdki pokazują wartość zaokrągloną do połówki, a nazwa dokładną („4,3 z 5”).
70
+ - `kpt-rich-text`: okienko adresu linku zamiast `window.prompt()`, menu kontekstowe tabeli jako
71
+ `role="menu"` z klawiaturą (klawisz menu / `Shift+F10`, strzałki, `Escape`, powrót fokusu), nazwy
72
+ próbek kolorów z i18n.
73
+ - `@konce-pt/i18n`: przestrzenie `autocomplete`, nowe klucze `chipsInput.*`, `colorPicker.*`
74
+ (nazwy kolorów), `richText.linkApply`, `richText.swatches.*`.
75
+
76
+ - 094a654: Kontrolki formularzy same wiążą się z `kpt-form-field` — etykieta, podpowiedź i błąd docierają
77
+ do czytnika bez ręcznego `controlId`.
78
+
79
+ - `kpt-form-field` daje zawartości kontekst (Angular: token `KPT_FORM_FIELD` i pomocnik
80
+ `kptFieldA11y`; React: `useKptFieldA11y`). Kontrolka zgłasza swoje `id`, więc `label[for]` na nie
81
+ wskazuje; kontrolki na `div` z rolą (select, pola dat, pokrętło, grupy, edytor, OTP) dostają
82
+ `aria-labelledby` na etykietę, bo `label[for]` ich nie nazywa. Widoczna podpowiedź albo błąd ma `id`
83
+ i trafia do `aria-describedby` kontrolki. Jawny `controlId` nadal wygrywa.
84
+ - `id` i `ariaLabel` we wszystkich kontrolkach formularzy (`id` zawsze na elemencie fokusowalnym,
85
+ nigdy na hoście); `required` → `aria-required` tam, gdzie go brakowało (textarea, password, select,
86
+ chips-input, checkbox, input-number, radio-group, rich-text).
87
+ - `kpt-password`: `id` nie zostaje już na hoście — wcześniej strona miała dwa elementy o tym samym id,
88
+ a etykieta wskazywała `kpt-password` zamiast pola. Doszły `aria-invalid`, `aria-required`,
89
+ `readonly`, a ocena siły jest w `aria-describedby`.
90
+ - `kpt-slider`: nazwy uchwytów zakresu z i18n (`slider.min`/`slider.max`) zamiast zaszytych
91
+ „Minimum”/„Maksimum”, łączone z etykietą pola.
92
+ - `kpt-knob`: `aria-valuetext` z `suffix`, wyłączone pokrętło wypada z kolejności Tab.
93
+ - `kpt-input-otp`: komórki w nazwanej grupie, każda z nazwą „Znak 2 z 6” (`inputOtp.cell`).
94
+ - `kpt-color-picker`: nazwy próbnika i pola z kodem (`colorPicker.picker`/`colorPicker.hex`).
95
+ - React: `id` kontrolek na hoście `div` (datepicker, date-range, color-picker, chips-input,
96
+ input-number, input-otp, slider, knob, grupy, rich-text) trafia teraz na element fokusowalny,
97
+ nie na hosta — jak w porcie Angulara.
98
+
99
+ - 094a654: Klawiatura w kontrolkach formularzy z panelem: `kpt-select`, `kpt-datepicker` i `kpt-date-range`
100
+ dało się dotąd w praktyce obsłużyć tylko myszą.
101
+
102
+ - `kpt-select`: wzorzec combobox bez wpisywania — fokus zostaje na wyzwalaczu, aktywną opcję ogłasza
103
+ `aria-activedescendant` (z `aria-controls` i `aria-haspopup="listbox"`). Strzałki, `Home`/`End`,
104
+ `PageUp`/`PageDown` z pominięciem wyłączonych opcji, wyszukiwanie po literach bez względu na
105
+ diakrytyki, `Enter`/`Spacja` wybiera, `Escape`/`Tab` zamyka, a pojedynczy wybór oddaje fokus
106
+ wyzwalaczowi. Z `filter` fokus przechodzi do pola wyszukiwania. W trybie `multiple`
107
+ `Backspace`/`Delete` usuwa ostatni chip, a przyciski chipów mają nazwę opcji. Nowy input `ariaLabel`.
108
+ - `kpt-datepicker`: wzorzec „date picker dialog” — pole ma `aria-haspopup="dialog"`/`aria-expanded`
109
+ i otwiera się też `Spacją` i `↓`; panel to nazwany dialog z fokusem na wybranym albo dzisiejszym dniu.
110
+ Strzałki o dzień i tydzień, `Home`/`End` tydzień, `PageUp`/`PageDown` miesiąc (z `Shift` rok),
111
+ strzałki w siatkach miesięcy, lat i dekad; `Tab` krąży w panelu, `Escape` i wybór oddają fokus polu,
112
+ `Delete`/`Backspace` czyści. Dni mają pełną nazwę daty z `Intl` i `aria-current="date"`.
113
+ - `kpt-date-range`: ta sama klawiatura przez wszystkie panele, nazwy dni z rolą w zakresie
114
+ („…, początek zakresu”) zamiast samego koloru i komunikat `polite` po wyborze początku. Nowe inputy
115
+ `minDate`/`maxDate` i `ariaLabel`.
116
+ - We wszystkich trzech `touch` nie leci już z blur pola, gdy fokus przechodzi do otwartego panelu —
117
+ wcześniej błąd wymaganego pola pokazywał się w trakcie wybierania. Zamknięcie panelu nadal go wysyła.
118
+ - `@konce-pt/datetime`: `moveFocusDate`, `moveCellIndex`, `initialFocusDate`, `clampIso`
119
+ i `KPT_DAY_GRID_KEYS` (klawiatura siatek kalendarza) oraz `minDate`/`maxDate` w `buildRangeGrid`.
120
+ - `@konce-pt/i18n`: klucze `datepicker.dialog` i `dateRange.{dialog,rangeStart,rangeEnd,inRange,pickEnd,picked}`.
121
+
122
+ - a7525af: Listy wyboru, drzewo i paginator dają się obsłużyć z klawiatury i czytnika ekranu.
123
+
124
+ `kpt-pick-list` i `kpt-order-list` (w obu portach) miały pozycje zaznaczane wyłącznie kliknięciem —
125
+ wiersze nie przyjmowały fokusu, więc z klawiatury działały tylko przyciski „przenieś wszystko”,
126
+ a listy kolejności nie dało się przestawić wcale. `llms.txt` twierdził przy tym, że przyciski są
127
+ pełną ścieżką klawiaturową. Teraz każda lista to `listbox` z jednym przystankiem Tab:
128
+ strzałki, `Home` i `End` chodzą po pozycjach, w PickList spacja zaznacza, a `Enter` przenosi
129
+ pozycję na drugą stronę (jak dwuklik); w OrderList zaznaczenie idzie za fokusem, a `Alt`+↑/↓
130
+ przestawia pozycję. Pozycje niosą `role="option"` i `aria-selected`, listy nazwę z nagłówka.
131
+
132
+ `kpt-tree` (w obu portach) ma klawiaturę według wzorca WAI-ARIA „tree view”: jeden przystanek Tab,
133
+ strzałki po widocznych wierszach, → / ← rozwijają, zwijają i chodzą między rodzicem a dzieckiem,
134
+ `Enter` / spacja działają jak kliknięcie. Wiersze dostały `aria-selected`, `aria-level`
135
+ i `aria-disabled`, a pierścień fokusa rysuje się na wierszu. Strzałka rozwijania jest teraz tylko dla
136
+ myszy (`aria-hidden`) — przycisk w środku `treeitem` był zagnieżdżoną kontrolką i drugim przystankiem
137
+ Tab na wiersz. Port Angulara przestał też pisać `expanded` do obiektów węzłów aplikacji: stan
138
+ rozwinięcia trzyma komponent (jak w React), więc dwa drzewa na tych samych węzłach nie rozwijają
139
+ się już razem. `expanded` w danych to — jak było opisane — stan początkowy.
140
+
141
+ `kpt-button` (Angular) ma wejście `ariaLabel`, które trafia na wewnętrzny `<button>`/`<a>`.
142
+ `kpt-paginator` stawiał `[attr.aria-label]` na hoście `<kpt-button>`, który nie ma roli przycisku,
143
+ więc przyciski „poprzednia / następna strona” były dla czytnika ekranu bez nazwy. Port React był
144
+ tu poprawny — `aria-label` przechodzi tam na wewnętrzny element.
145
+
146
+ - 094a654: Wzorce klawiatury w czterech kontrolkach formularzy.
147
+
148
+ - `kpt-listbox`: wzorzec WAI-ARIA „listbox” — lista to jeden przystanek Tab z `aria-activedescendant`
149
+ (wcześniej każda opcja była osobnym przyciskiem i przystankiem). Strzałki, `Home`/`End`,
150
+ `PageUp`/`PageDown` z pominięciem wyłączonych, wyszukiwanie po literach, `Spacja`/`Enter` wybiera,
151
+ `Ctrl`/`⌘`+`A` zaznacza wszystkie widoczne w trybie `multiple`. Pole filtra stoi przed listą (nie
152
+ w `listbox`), ma nazwę, `↓` przenosi z niego do listy i pomija diakrytyki. Nowe: `id`, `ariaLabel`,
153
+ `required`; `touch` leci na blur listy. Opcje to `div[role=option]` zamiast `button`.
154
+ - `kpt-rating`: grupa radiowa zamiast `role="slider"` z przyciskami w środku — jeden przystanek Tab,
155
+ gwiazdki z `aria-checked`, strzałki zmieniają ocenę (w RTL odwrócone), `Home`/`End`,
156
+ `Delete`/`Backspace` zeruje. `readonly` to `role="img"` z nazwą „4 z 5” zamiast wyłączonych
157
+ przycisków. Nowe: `id`, `ariaLabel`, `required`, `invalid`; `touch` leci, gdy fokus opuszcza grupę.
158
+ - `kpt-input-number`: `role="spinbutton"` z `aria-valuemin/max/now` i `aria-valuetext` (z sufiksem),
159
+ `↑`/`↓` krok, `PageUp`/`PageDown` dziesięć kroków, krok zaokrąglany do precyzji `step`. Wpisywana
160
+ liczba nie jest już przycinana w trakcie pisania („150” przy `max` 99 stawało się „99”) — granice
161
+ działają przy krokowaniu i na blur. Przyciski `−`/`+` poza kolejnością Tab nie zabierają fokusu polu.
162
+ - `kpt-rich-text`: pasek narzędzi ma nazwę (`richText.toolbar`) i jeden przystanek Tab — strzałki
163
+ i `Home`/`End` chodzą po narzędziach, a Tab z paska idzie od razu do edytora.
164
+
165
+ - dcdb1b4: Nazwy i etykiety dla czytników ekranu w dziewięciu komponentach.
166
+
167
+ - `kpt-alert`: rola idzie za wagą — `info`/`success` to `role="status"`, `warning`/`danger` to
168
+ `role="alert"` (wcześniej zawsze `alert`). Nowy model `visible` (Angular `[(visible)]`, React
169
+ `visible`/`onVisibleChange`) pozwala pokazać zamknięty alert ponownie.
170
+ - `kpt-badge`: nowy `label` („3 nieprzeczytane”, „dostępny”) czytany zamiast samej liczby albo
171
+ kropki, i `hideZero`, który chowa plakietkę przy `0`/`null`.
172
+ - `kpt-chip`: przycisk usuwania ma nazwę „Usuń <etykieta>” (`aria-labelledby`), a `Backspace`/`Delete`
173
+ działają jak kliknięcie. Etykieta siedzi teraz w `.kpt-chip__label`. Dotyczy też `kpt-chips-input`.
174
+ - `kpt-meter-group`: nazwa (`label`, domyślnie nowy klucz `meterGroup.label`), `aria-valuemin`,
175
+ poprawne `aria-valuemax` także bez `max` i `aria-valuetext` z podziałem. Legenda może pokazywać
176
+ wartości z jednostką (`legendValue="value"`, `unit`).
177
+ - `kpt-avatar`: zdjęcie, które się nie wczyta, ustępuje inicjałom; nowy `decorative` ukrywa awatar
178
+ przed czytnikiem, gdy imię stoi obok.
179
+ - `kpt-avatar-group`: nowy `label` robi z rzędu nazwaną grupę, licznik „+N” jest czytany jako
180
+ „i 2 więcej” (nowy klucz `avatarGroup.more`) i pokazuje ukryte imiona w podpowiedzi. Nakładanie
181
+ idzie przez `margin-inline-start` (RTL), licznik przy `xl` ma 4rem jak awatar.
182
+ - `kpt-spinner`: pierścień jest `aria-hidden`, a etykieta trafia do osobnego, ukrytego regionu
183
+ `role="status"` klatkę po pojawieniu się — dzięki temu czytniki ją ogłaszają.
184
+ - `kpt-icon`: nowy `label` nadaje ikonie `role="img"` z nazwą; nieznana nazwa w trybie
185
+ deweloperskim daje jedno ostrzeżenie w konsoli.
186
+ - `kpt-empty`: nowy `headingLevel` robi z tytułu nagłówek strony.
187
+
188
+ - dcdb1b4: `kpt-image`, `kpt-carousel`, `kpt-galleria` i toasty działają z klawiaturą i czytnikiem ekranu.
189
+
190
+ - `kpt-image`: z `preview` miniatura jest przyciskiem („Pokaż w pełnym rozmiarze: …”), a podgląd
191
+ otwiera się na natywnym `<dialog>` przez `showModal()` — pułapka fokusu, `Escape`, bezwładna strona,
192
+ blokada przewijania i powrót fokusu na miniaturę. Podgląd leży w górnej warstwie, więc przodek
193
+ z `transform` go nie przesuwa. Tło idzie za `--kpt-color-overlay-scrim`, przycisk × za tokenami
194
+ powierzchni i właściwościami logicznymi. **Zmienia się DOM**: wyzwalacz to `<button>`, podgląd
195
+ to `<dialog class="kpt-image__overlay">` zamiast `<div>`.
196
+ - `kpt-carousel`: region z `aria-roledescription="karuzela"` i nowym inputem/propem `label`, slajdy
197
+ jako grupy „Slajd 2 z 4”, niewidoczne slajdy `inert`, zmiana ogłaszana uprzejmie. Aktywna kropka
198
+ ma `aria-current`, a pole kliknięcia kropki 24 px. Strzałki na końcach dostają `aria-disabled`
199
+ zamiast `disabled`, więc nie gubią fokusu. Przejście wyłącza się przy `prefers-reduced-motion`,
200
+ a w RTL tor i chevrony idą za kierunkiem czytania.
201
+ - `kpt-galleria`: miniatury mają nazwę z `alt` i `aria-current`, strzałki/`Home`/`End` przełączają
202
+ obraz (fokus idzie za miniaturą), zmiana jest ogłaszana („Obraz 2 z 4: …”), przyciski nawigacji
203
+ nie gubią fokusu i używają właściwości logicznych.
204
+ - Toasty: ogłaszanie przez dwa stałe regiony na żywo — uprzejmy i natychmiastowy dla `danger` —
205
+ zamiast zagnieżdżonych `aria-live` + `role="status"`. Wskaźnik albo fokus na stosie wstrzymuje
206
+ liczniki (nowe `pause()`/`resume()`), a wznowienie odlicza pozostały czas. Nowa opcja
207
+ `action: { label, run }` dodaje przycisk, np. „Cofnij”.
208
+ - i18n: nowe klucze `carousel.{label,slideOf,roleCarousel,roleSlide}`, `galleria.position`,
209
+ `image.{preview,previewOf}`, `toast.region`.
210
+
211
+ - a7525af: Menu, przycisk dzielony i speed dial dają się obsłużyć z klawiatury i poprawnie ogłaszają swój stan.
212
+
213
+ `kpt-menu` i `kpt-split-button` (w obu portach) działają według wzorca „menu button”. Strzałka
214
+ w dół lub w górę na wyzwalaczu otwiera menu z fokusem na pierwszej albo ostatniej pozycji,
215
+ w środku strzałki przechodzą między pozycjami z zawijaniem, `Home`/`End` skaczą na końce,
216
+ a `Escape` i `Tab` zamykają menu. Po zamknięciu i po wyborze fokus wraca na wyzwalacz — wcześniej
217
+ spadał na `<body>`, więc użytkownik klawiatury lądował na początku strony. Pozycje mają
218
+ `tabindex="-1"`, więc otwarte menu to jeden przystanek Tab. Wyzwalacz dostaje `aria-controls`
219
+ obok `aria-expanded`; rozwijacz przycisku dzielonego wcześniej nie miał ani jednego, ani drugiego.
220
+
221
+ `kpt-split-button` ma styl wariantów `outline` i `text` (tokeny `--kpt-button-outline-*`
222
+ i `--kpt-button-text-*`, jak w `kpt-button`). Wcześniej każdy wariant poza `tonal` wyglądał jak
223
+ `filled`, choć typ przyjmował cały `KptButtonVariant`. Typ wejścia to teraz
224
+ `KptSplitButtonVariant` (`'filled' | 'tonal' | 'outline' | 'text'`), eksportowany w obu portach.
225
+
226
+ `kpt-speed-dial`: zamknięte akcje były tylko przezroczyste, więc zostawały w kolejności Tab
227
+ i w drzewie dostępności — teraz dostają `visibility: hidden` po zgaśnięciu. Główny przycisk niesie
228
+ `aria-expanded` i `aria-controls`, a `Escape` zamyka wachlarz i zwraca fokus na przycisk.
229
+ Żeby to było możliwe w Angularze, `kpt-fab` ma nowe wejścia `ariaExpanded` i `ariaControls`
230
+ (trafiają na wewnętrzny `<button>`, wzorem `kpt-icon-button`).
231
+
232
+ Poprawione też `llms.txt`: domyślny wariant `kpt-icon-button` to `text`, a `kpt-fab` w wariancie
233
+ `tonal` używa `--kpt-color-muted` (nie `--kpt-color-primary-container`) i ma kształt
234
+ zaokrąglonego kwadratu (`--kpt-radius-lg`), nie koła.
235
+
236
+ - 0930165: `kpt-drawer`, `kpt-bottom-sheet`, `kpt-popover` i `kpt-context-menu` prowadzą fokus i reagują na `Escape`.
237
+
238
+ `kpt-drawer` i `kpt-bottom-sheet` (oba porty): ogłaszały `aria-modal="true"`, ale fokus zostawał
239
+ na stronie pod tłem. Otwarcie przenosi go teraz do panelu, `Tab` i `Shift+Tab` zawijają się
240
+ w środku, a zamknięcie oddaje fokus elementowi, który panel otworzył. Panel dostaje nazwę z `header`
241
+ (`aria-labelledby`). W `kpt-drawer` `Escape` respektuje `dismissible` — wcześniej zamykał też panel,
242
+ którego nie dało się zamknąć przyciskiem. Tło obu paneli idzie teraz za `--kpt-color-overlay-scrim`,
243
+ jak w `kpt-dialog`, zamiast stałych 45% czerni.
244
+
245
+ `kpt-popover` (oba porty): `placement` był zadeklarowany, ale pomijany — teraz wybiera preferowaną
246
+ stronę. Angular dostał model `[(open)]` (React miał już `open`/`onOpenChange`), więc dymek da się
247
+ zamknąć z kodu. Kontrolka wyzwalacza ogłasza `aria-haspopup="dialog"`, `aria-expanded` i `aria-controls`,
248
+ otwarcie przenosi fokus do pierwszego interaktywnego elementu dymka, a zamknięcie oddaje go
249
+ wyzwalaczowi.
250
+
251
+ `kpt-context-menu` (oba porty): menu nie miało klawiatury. Teraz fokus przechodzi na pierwszą
252
+ pozycję, strzałki, `Home` i `End` chodzą po pozycjach, `Escape` i `Tab` zamykają, a fokus wraca
253
+ tam, gdzie był. `Shift+F10` i klawisz menu kontekstowego otwierają menu przy skupionym elemencie,
254
+ a panel nie wychodzi poza okno.
255
+
256
+ - 0930165: `kpt-tabs`, `kpt-menubar` i `kpt-megamenu` obsługują strzałki według wzorców WAI-ARIA.
257
+
258
+ `kpt-tabs` (oba porty): każda zakładka była osobnym przystankiem Tab, a panel nie miał nazwy. Rząd
259
+ zakładek to teraz jeden przystanek (roving `tabindex`), strzałki w lewo/prawo i `Home`/`End`
260
+ przechodzą po zakładkach z pominięciem wyłączonych i od razu je aktywują, a panel dostał
261
+ `aria-labelledby` (z aktywnej zakładki), `aria-controls` i własny przystanek Tab.
262
+
263
+ `kpt-menubar` (oba porty): belka nie miała klawiatury. Teraz to jeden przystanek Tab, strzałki
264
+ w lewo/prawo chodzą po pozycjach górnych, strzałka w dół (i `Enter`/spacja) otwiera pod-menu
265
+ z fokusem na pierwszej pozycji, w górę — na ostatniej, a w otwartym pod-menu strzałki w bok
266
+ przechodzą do sąsiedniego. `Escape` oddaje fokus belce. Pozycje górne ogłaszają `aria-haspopup`,
267
+ `aria-expanded` i `aria-controls`. `role="menubar"` przeniósł się z `<nav>` na `<div>` — wcześniej
268
+ nadpisywał rolę punktu orientacyjnego. Nowy input/prop `ariaLabel` nazywa belkę.
269
+
270
+ `kpt-megamenu` (oba porty): ta sama klawiatura co w `kpt-menubar`. Odnośniki w panelu dostały
271
+ `role="menuitem"`, kolumny są grupami nazwanymi tytułem, a panel ma nazwę otwartej pozycji.
272
+ Pozycja górna bez kolumn działa jak akcja — emituje `selected` zamiast otwierać pusty panel —
273
+ i nie pokazuje strzałki. Nowy input/prop `ariaLabel`.
274
+
275
+ - dcdb1b4: Kontrast, kierunek pisania i porządki w sześciu komponentach.
276
+
277
+ - `kpt-scroll-top` (Angular): nasłuch przewijania jest zdejmowany przy zniszczeniu komponentu
278
+ (wcześniej zostawał podpięty do okna) i podpinany od nowa po zmianie `target`/`threshold`.
279
+ W obu portach: przycisk stoi w rogu po stronie końca (`inset-inline-end`), więc w RTL przenosi się
280
+ na lewo, a przy `prefers-reduced-motion` przewijanie to skok, a pojawienie się — bez przejścia.
281
+ - `kpt-skeleton`: baza `--kpt-color-muted` zamiast `--kpt-color-surface-variant`, który w jasnym
282
+ motywie był prawie niewidoczny na powierzchni. Pojedyncza linia (`lines=1`) ma pełną szerokość.
283
+ - `kpt-badge`: tekst wariantów `success`/`warning`/`info`/`danger` idzie za tokenami `*-contrast`,
284
+ tymi samymi co w `kpt-button` — wcześniej `--kpt-color-surface`, ciemny w ciemnym motywie.
285
+ - `kpt-spinner`: grubość pierścienia rośnie z rozmiarem (8%, co najmniej 2px).
286
+ - `kpt-galleria`: strzałki na tokenach powierzchni zamiast stałej czerni z bielą.
287
+ - `kpt-image`: maska po najechaniu na `--kpt-color-overlay-scrim`, lupa na krążku w kolorach
288
+ powierzchni — czytelna w obu motywach.
289
+ - llms: pełna lista 95 wbudowanych ikon, poprawny opis koloru spinnera (domyślnie primary,
290
+ `color: inherit` dla koloru otoczenia), domyślny wariant plakietki.
291
+
292
+ - Updated dependencies [0930165]
293
+ - Updated dependencies [094a654]
294
+ - Updated dependencies [094a654]
295
+ - Updated dependencies [094a654]
296
+ - Updated dependencies [094a654]
297
+ - Updated dependencies [dcdb1b4]
298
+ - Updated dependencies [dcdb1b4]
299
+ - @konce-pt/i18n@0.10.0
300
+ - @konce-pt/datetime@0.10.0
301
+ - @konce-pt/backdrop@0.10.0
302
+ - @konce-pt/chart@0.10.0
303
+ - @konce-pt/chat@0.10.0
304
+ - @konce-pt/icons@0.10.0
305
+ - @konce-pt/map@0.10.0
306
+ - @konce-pt/mention@0.10.0
307
+ - @konce-pt/roadmap@0.10.0
308
+ - @konce-pt/table@0.10.0
309
+
310
+ ## 0.9.1
311
+
312
+ ### Patch Changes
313
+
314
+ - f6999a7: `KptBackdrop` nie wywraca już renderowania po stronie serwera.
315
+
316
+ Komponent buduje się w `afterNextRender`, więc na serwerze nie powstawało nic — ale niszczenie
317
+ wykonuje się i tam, bo Angular tworzy komponent, zbiera z niego HTML i od razu go niszczy.
318
+ Sprzątanie zdejmowało nasłuch `visibilitychange` bezwarunkowo, a `document` nie istnieje wtedy
319
+ jako zmienna globalna: platforma serwerowa podaje go przez wstrzykiwanie zależności.
320
+
321
+ Skutek był mylący: prerendering przewracał się `ReferenceError: document is not defined` już
322
+ **po** wyprodukowaniu strony, więc objaw wskazywał na generator, a nie na komponent. Każda
323
+ aplikacja renderowana na serwerze i używająca `kpt-backdrop` trafiała na to samo.
324
+
325
+ Drugą rzeczą z tej samej rodziny jest `getContext('2d')`. Wbrew nazwie `afterNextRender`
326
+ wykonuje się przy prerenderingu, a tamtejsza atrapa DOM canvasu nie implementuje i **rzuca**,
327
+ zamiast zwrócić `null` — więc stojąca tuż niżej bramka na brak kontekstu sama nie wystarczała.
328
+ Wyjątek lądował w logu jako gołe „NotYetImplemented" i nie wskazywał na nic. Płótno, na którym
329
+ nie da się rysować, jest teraz traktowane jak brak płótna: nie ma czego budować.
330
+ - @konce-pt/backdrop@0.9.1
331
+ - @konce-pt/chart@0.9.1
332
+ - @konce-pt/chat@0.9.1
333
+ - @konce-pt/datetime@0.9.1
334
+ - @konce-pt/i18n@0.9.1
335
+ - @konce-pt/icons@0.9.1
336
+ - @konce-pt/map@0.9.1
337
+ - @konce-pt/mention@0.9.1
338
+ - @konce-pt/roadmap@0.9.1
339
+ - @konce-pt/table@0.9.1
340
+
3
341
  ## 0.9.0
4
342
 
5
343
  ### Minor Changes