@konce-pt/angular 0.6.1 → 0.7.5

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 (121) hide show
  1. package/CHANGELOG.md +384 -0
  2. package/README.md +38 -19
  3. package/fesm2022/konce-pt-angular-charts.mjs +1409 -0
  4. package/fesm2022/konce-pt-angular-charts.mjs.map +1 -0
  5. package/fesm2022/konce-pt-angular-grid.mjs +232 -0
  6. package/{dist/fesm2022 → fesm2022}/konce-pt-angular-grid.mjs.map +1 -1
  7. package/fesm2022/konce-pt-angular-map.mjs +4568 -0
  8. package/fesm2022/konce-pt-angular-map.mjs.map +1 -0
  9. package/fesm2022/konce-pt-angular-roadmap.mjs +1919 -0
  10. package/fesm2022/konce-pt-angular-roadmap.mjs.map +1 -0
  11. package/fesm2022/konce-pt-angular.mjs +12307 -0
  12. package/fesm2022/konce-pt-angular.mjs.map +1 -0
  13. package/map/src/lib/llms.txt +741 -0
  14. package/package.json +44 -54
  15. package/roadmap/src/lib/llms.txt +112 -0
  16. package/src/lib/app-shell/llms.txt +89 -0
  17. package/src/lib/breakpoint/llms.txt +45 -0
  18. package/{dist/src → src}/lib/datepicker/llms.txt +3 -0
  19. package/src/lib/dialog/llms.txt +68 -0
  20. package/{dist/src → src}/lib/form-field/llms.txt +24 -1
  21. package/{dist/src → src}/lib/icon/llms.txt +2 -1
  22. package/{dist/src → src}/lib/input/llms.txt +14 -4
  23. package/src/lib/input-number/llms.txt +61 -0
  24. package/{dist/src → src}/lib/select/llms.txt +9 -0
  25. package/src/lib/sidenav/llms.txt +29 -0
  26. package/src/lib/toolbar/llms.txt +31 -0
  27. package/src/lib/tooltip/llms.txt +33 -0
  28. package/{dist/types → types}/konce-pt-angular-charts.d.ts +1 -0
  29. package/types/konce-pt-angular-charts.d.ts.map +1 -0
  30. package/{dist/types → types}/konce-pt-angular-grid.d.ts +1 -0
  31. package/types/konce-pt-angular-grid.d.ts.map +1 -0
  32. package/{dist/types → types}/konce-pt-angular-icons.d.ts +1 -0
  33. package/types/konce-pt-angular-icons.d.ts.map +1 -0
  34. package/types/konce-pt-angular-map.d.ts +1585 -0
  35. package/types/konce-pt-angular-map.d.ts.map +1 -0
  36. package/types/konce-pt-angular-roadmap.d.ts +649 -0
  37. package/types/konce-pt-angular-roadmap.d.ts.map +1 -0
  38. package/{dist/types → types}/konce-pt-angular.d.ts +373 -23
  39. package/types/konce-pt-angular.d.ts.map +1 -0
  40. package/dist/LICENSE +0 -21
  41. package/dist/README.md +0 -316
  42. package/dist/fesm2022/konce-pt-angular-charts.mjs +0 -957
  43. package/dist/fesm2022/konce-pt-angular-charts.mjs.map +0 -1
  44. package/dist/fesm2022/konce-pt-angular-grid.mjs +0 -218
  45. package/dist/fesm2022/konce-pt-angular.mjs +0 -8462
  46. package/dist/fesm2022/konce-pt-angular.mjs.map +0 -1
  47. package/dist/package.json +0 -79
  48. package/dist/src/lib/app-shell/llms.txt +0 -29
  49. package/dist/src/lib/dialog/llms.txt +0 -27
  50. package/dist/src/lib/input-number/llms.txt +0 -17
  51. package/dist/src/lib/sidenav/llms.txt +0 -20
  52. package/dist/src/lib/toolbar/llms.txt +0 -23
  53. package/dist/src/lib/tooltip/llms.txt +0 -19
  54. /package/{dist/charts → charts}/src/lib/llms.txt +0 -0
  55. /package/{dist/fesm2022 → fesm2022}/konce-pt-angular-icons.mjs +0 -0
  56. /package/{dist/fesm2022 → fesm2022}/konce-pt-angular-icons.mjs.map +0 -0
  57. /package/{dist/grid → grid}/src/lib/llms.txt +0 -0
  58. /package/{dist/src → src}/lib/accordion/llms.txt +0 -0
  59. /package/{dist/src → src}/lib/alert/llms.txt +0 -0
  60. /package/{dist/src → src}/lib/autocomplete/llms.txt +0 -0
  61. /package/{dist/src → src}/lib/avatar/llms.txt +0 -0
  62. /package/{dist/src → src}/lib/avatar-group/llms.txt +0 -0
  63. /package/{dist/src → src}/lib/badge/llms.txt +0 -0
  64. /package/{dist/src → src}/lib/bottom-sheet/llms.txt +0 -0
  65. /package/{dist/src → src}/lib/breadcrumb/llms.txt +0 -0
  66. /package/{dist/src → src}/lib/button/llms.txt +0 -0
  67. /package/{dist/src → src}/lib/button-group/llms.txt +0 -0
  68. /package/{dist/src → src}/lib/card/llms.txt +0 -0
  69. /package/{dist/src → src}/lib/carousel/llms.txt +0 -0
  70. /package/{dist/src → src}/lib/checkbox/llms.txt +0 -0
  71. /package/{dist/src → src}/lib/chip/llms.txt +0 -0
  72. /package/{dist/src → src}/lib/chips-input/llms.txt +0 -0
  73. /package/{dist/src → src}/lib/color-picker/llms.txt +0 -0
  74. /package/{dist/src → src}/lib/confirm/llms.txt +0 -0
  75. /package/{dist/src → src}/lib/context-menu/llms.txt +0 -0
  76. /package/{dist/src → src}/lib/data-table/llms.txt +0 -0
  77. /package/{dist/src → src}/lib/data-view/llms.txt +0 -0
  78. /package/{dist/src → src}/lib/date-range/llms.txt +0 -0
  79. /package/{dist/src → src}/lib/divider/llms.txt +0 -0
  80. /package/{dist/src → src}/lib/drawer/llms.txt +0 -0
  81. /package/{dist/src → src}/lib/empty/llms.txt +0 -0
  82. /package/{dist/src → src}/lib/fab/llms.txt +0 -0
  83. /package/{dist/src → src}/lib/fieldset/llms.txt +0 -0
  84. /package/{dist/src → src}/lib/file-upload/llms.txt +0 -0
  85. /package/{dist/src → src}/lib/galleria/llms.txt +0 -0
  86. /package/{dist/src → src}/lib/i18n/llms.txt +0 -0
  87. /package/{dist/src → src}/lib/icon-button/llms.txt +0 -0
  88. /package/{dist/src → src}/lib/image/llms.txt +0 -0
  89. /package/{dist/src → src}/lib/input-mask/llms.txt +0 -0
  90. /package/{dist/src → src}/lib/input-otp/llms.txt +0 -0
  91. /package/{dist/src → src}/lib/knob/llms.txt +0 -0
  92. /package/{dist/src → src}/lib/listbox/llms.txt +0 -0
  93. /package/{dist/src → src}/lib/megamenu/llms.txt +0 -0
  94. /package/{dist/src → src}/lib/menu/llms.txt +0 -0
  95. /package/{dist/src → src}/lib/menubar/llms.txt +0 -0
  96. /package/{dist/src → src}/lib/meter-group/llms.txt +0 -0
  97. /package/{dist/src → src}/lib/order-list/llms.txt +0 -0
  98. /package/{dist/src → src}/lib/paginator/llms.txt +0 -0
  99. /package/{dist/src → src}/lib/panel/llms.txt +0 -0
  100. /package/{dist/src → src}/lib/password/llms.txt +0 -0
  101. /package/{dist/src → src}/lib/pick-list/llms.txt +0 -0
  102. /package/{dist/src → src}/lib/popover/llms.txt +0 -0
  103. /package/{dist/src → src}/lib/progress/llms.txt +0 -0
  104. /package/{dist/src → src}/lib/radio-group/llms.txt +0 -0
  105. /package/{dist/src → src}/lib/rating/llms.txt +0 -0
  106. /package/{dist/src → src}/lib/rich-text/llms.txt +0 -0
  107. /package/{dist/src → src}/lib/scroll-top/llms.txt +0 -0
  108. /package/{dist/src → src}/lib/skeleton/llms.txt +0 -0
  109. /package/{dist/src → src}/lib/slider/llms.txt +0 -0
  110. /package/{dist/src → src}/lib/speed-dial/llms.txt +0 -0
  111. /package/{dist/src → src}/lib/spinner/llms.txt +0 -0
  112. /package/{dist/src → src}/lib/split-button/llms.txt +0 -0
  113. /package/{dist/src → src}/lib/splitter/llms.txt +0 -0
  114. /package/{dist/src → src}/lib/stepper/llms.txt +0 -0
  115. /package/{dist/src → src}/lib/switch/llms.txt +0 -0
  116. /package/{dist/src → src}/lib/switch-group/llms.txt +0 -0
  117. /package/{dist/src → src}/lib/tabs/llms.txt +0 -0
  118. /package/{dist/src → src}/lib/textarea/llms.txt +0 -0
  119. /package/{dist/src → src}/lib/timeline/llms.txt +0 -0
  120. /package/{dist/src → src}/lib/toast/llms.txt +0 -0
  121. /package/{dist/src → src}/lib/tree/llms.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, EnvironmentProviders, TemplateRef, OnDestroy } from '@angular/core';
2
+ import { InjectionToken, Signal, EnvironmentProviders, TemplateRef, OnDestroy } from '@angular/core';
3
3
  import { FormValueControl, WithOptionalFieldTree, ValidationError, FormCheckboxControl } from '@angular/forms/signals';
4
4
  import { ConnectedPosition } from '@angular/cdk/overlay';
5
5
  import * as _konce_pt_angular from '@konce-pt/angular';
@@ -136,6 +136,105 @@ interface KptMessages {
136
136
  /** Interpolacja: {count}. */
137
137
  count: string;
138
138
  };
139
+ roadmap: {
140
+ empty: string;
141
+ /** Prefiks numeru tygodnia na osi, np. „W" w „W35". */
142
+ week: string;
143
+ today: string;
144
+ milestone: string;
145
+ expandGroup: string;
146
+ collapseGroup: string;
147
+ };
148
+ map: {
149
+ /** Pozycja menu po kliknięciu mapy prawym przyciskiem. */
150
+ addLocation: string;
151
+ chooseCategory: string;
152
+ myLocation: string;
153
+ locateMe: string;
154
+ locationDenied: string;
155
+ locationUnavailable: string;
156
+ zoomIn: string;
157
+ zoomOut: string;
158
+ legend: string;
159
+ /** Interpolacja: {category}. */
160
+ showCategory: string;
161
+ /** Interpolacja: {category}. */
162
+ hideCategory: string;
163
+ /** Etykieta grupy znaczników dla czytnika ekranu. Interpolacja: {count}. */
164
+ cluster: string;
165
+ /** Nagłówek listy pokazywanej, gdy grupy nie da się rozbić zoomem. */
166
+ clusterItems: string;
167
+ /** Interpolacja: {label}. */
168
+ fieldRequired: string;
169
+ /** Notka w formularzu, gdy trwa geokodowanie wsteczne. */
170
+ lookingUpAddress: string;
171
+ /** Notka, gdy geokoder nie ustalił adresu dla klikniętego punktu. */
172
+ addressNotFound: string;
173
+ latitude: string;
174
+ longitude: string;
175
+ empty: string;
176
+ save: string;
177
+ cancel: string;
178
+ /** Karta miejsca (`kpt-map-poi-card`). */
179
+ poi: {
180
+ /** Interpolacja: {distance}. */
181
+ distanceAway: string;
182
+ openNow: string;
183
+ closedNow: string;
184
+ /** Interpolacja: {time}. */
185
+ opensAt: string;
186
+ /** Interpolacja: {time}. */
187
+ closesAt: string;
188
+ alwaysOpen: string;
189
+ openingHours: string;
190
+ closedDay: string;
191
+ call: string;
192
+ sendEmail: string;
193
+ openWebsite: string;
194
+ coordinates: string;
195
+ copy: string;
196
+ copied: string;
197
+ share: string;
198
+ addFavourite: string;
199
+ removeFavourite: string;
200
+ noPhoto: string;
201
+ };
202
+ /** Wyszukiwarka adresów (`kpt-map-search`). */
203
+ search: {
204
+ /** Podpowiedź w pustym polu. */
205
+ placeholder: string;
206
+ /** Nazwa dostępna pola — nie ma przy nim widocznej etykiety. */
207
+ label: string;
208
+ /** Etykieta listy podpowiedzi dla czytnika ekranu. */
209
+ results: string;
210
+ clear: string;
211
+ noResults: string;
212
+ /** Fraza za krótka. Interpolacja: {count}. */
213
+ minLength: string;
214
+ searching: string;
215
+ /** Liczba znalezionych podpowiedzi dla czytnika. Interpolacja: {count}. */
216
+ found: string;
217
+ };
218
+ /** Pola formularza „dodaj lokalizację" poza wspólnymi komunikatami. */
219
+ field: {
220
+ invalidEmail: string;
221
+ invalidUrl: string;
222
+ /** Interpolacja: {max}. */
223
+ imageTooLarge: string;
224
+ pickImage: string;
225
+ orPasteUrl: string;
226
+ removeImage: string;
227
+ imagePreview: string;
228
+ hoursClosed: string;
229
+ hoursFrom: string;
230
+ hoursTo: string;
231
+ hoursSameAllWeek: string;
232
+ hoursAddRange: string;
233
+ hoursRemoveRange: string;
234
+ /** Interpolacja: {day}. */
235
+ hoursIncomplete: string;
236
+ };
237
+ };
139
238
  dataTable: {
140
239
  search: string;
141
240
  exportCsv: string;
@@ -223,6 +322,12 @@ interface KptMessages {
223
322
  panel: {
224
323
  toggle: string;
225
324
  };
325
+ appShell: {
326
+ /** Etykieta przycisku otwierającego i zamykającego panel boczny. */
327
+ toggleNavigation: string;
328
+ /** Etykieta dostępności panelu bocznego. */
329
+ navigation: string;
330
+ };
226
331
  breadcrumb: {
227
332
  label: string;
228
333
  };
@@ -446,8 +551,55 @@ declare class KptIconRegistry {
446
551
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptIconRegistry, never>;
447
552
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<KptIconRegistry>;
448
553
  }
554
+ /**
555
+ * Składa pełny znacznik `<svg>` z wewnętrznego SVG z rejestru.
556
+ *
557
+ * Wydzielone z `kpt-icon`, bo tego samego stringa potrzebują znaczniki mapy —
558
+ * ich HTML powstaje poza Angularem, w DOM zarządzanym przez silnik mapy.
559
+ * Pusty `inner` daje pusty string, żeby wołający nie musiał tego sprawdzać.
560
+ */
561
+ declare function renderKptIconSvg(inner: string | undefined, cssClass?: string): string;
562
+
563
+ type KptIconName = 'menu' | 'x' | 'chevron-up' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'check' | 'search' | 'grip-vertical' | 'info' | 'alert-triangle' | 'circle-check' | 'circle-x' | 'calendar' | 'copy' | 'link' | 'code' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'list' | 'list-numbers' | 'clear-formatting' | 'star' | 'plus' | 'upload' | 'dots-vertical' | 'photo' | 'trash' | 'eye' | 'eye-off' | 'minus' | 'arrow-up' | 'arrow-down' | 'zoom-in' | 'info-circle' | 'phone' | 'map-pin' | 'world' | 'clock' | 'align-left' | 'align-center' | 'align-right' | 'align-justified' | 'palette' | 'highlight' | 'clipboard' | 'clipboard-text' | 'table' | 'pencil' | 'mail' | 'share' | 'external-link' | 'crosshair';
449
564
 
450
- type KptIconName = 'menu' | 'x' | 'chevron-up' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'check' | 'search' | 'grip-vertical' | 'info' | 'alert-triangle' | 'circle-check' | 'circle-x' | 'calendar' | 'copy' | 'link' | 'code' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'list' | 'list-numbers' | 'clear-formatting' | 'star' | 'plus' | 'upload' | 'dots-vertical' | 'photo' | 'trash' | 'eye' | 'eye-off' | 'minus' | 'arrow-up' | 'arrow-down' | 'zoom-in' | 'info-circle' | 'phone' | 'map-pin' | 'world' | 'clock' | 'align-left' | 'align-center' | 'align-right' | 'align-justified' | 'palette' | 'highlight' | 'clipboard' | 'clipboard-text' | 'table' | 'pencil';
565
+ /** Nazwa breakpointa z tokenów `--kpt-breakpoint-*` (mobile-first). */
566
+ type KptBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
567
+ /** Progi breakpointów w pikselach — te same wartości, z których korzystają `@media` biblioteki. */
568
+ declare const KPT_BREAKPOINTS: Record<KptBreakpoint, number>;
569
+
570
+ /**
571
+ * Obserwator breakpointów oparty na `matchMedia`, spięty z tokenami `--kpt-breakpoint-*`.
572
+ * Zwraca sygnały, więc czyta się go tak samo w `computed`, w szablonie i w `effect`.
573
+ *
574
+ * Zapytania są memoizowane per string: `up('lg')` wywołane w wielu komponentach dzieli
575
+ * jeden `MediaQueryList` i jeden nasłuch.
576
+ *
577
+ * Poza przeglądarką (SSR, prerender) każdy sygnał to stałe `false`. Dlatego **układ**
578
+ * komponentów biblioteki nigdy nie zależy od tego serwisu — o tym, jak wygląda strona,
579
+ * decyduje CSS, żeby nic nie migotało przed hydracją. Serwis odpowiada za zachowania,
580
+ * których CSS nie wyrazi (np. w którą stronę ma zadziałać przycisk).
581
+ *
582
+ * @example
583
+ * private readonly breakpoints = inject(KptBreakpointObserver);
584
+ * readonly isDesktop = this.breakpoints.up('lg');
585
+ */
586
+ declare class KptBreakpointObserver {
587
+ private readonly isBrowser;
588
+ private readonly destroyRef;
589
+ private readonly cache;
590
+ /** Dowolne media query jako sygnał. */
591
+ matches(query: string): Signal<boolean>;
592
+ /** Czy viewport ma szerokość co najmniej danego breakpointa (mobile-first). */
593
+ up(breakpoint: KptBreakpoint): Signal<boolean>;
594
+ /**
595
+ * Czy viewport jest węższy niż dany breakpoint. Próg schodzi o 0.02px, żeby pasma
596
+ * `up`/`down` nie nakładały się na ułamkowych szerokościach okna (zoom, DPI).
597
+ */
598
+ down(breakpoint: KptBreakpoint): Signal<boolean>;
599
+ private observe;
600
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptBreakpointObserver, never>;
601
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<KptBreakpointObserver>;
602
+ }
451
603
 
452
604
  /**
453
605
  * Konfiguruje i18n Koncept UI. Ustawia język początkowy i rejestruje/nadpisuje
@@ -595,11 +747,12 @@ declare class KptSkeleton {
595
747
  * unoszącej się etykiety (Float Label) z animowanym przejściem: `over` (nad obramowaniem),
596
748
  * `in` (u góry wewnątrz pola) i `on` (na obramowaniu, notch). Uniesienie następuje przy focusie
597
749
  * (CSS `:focus-within`) lub gdy pole jest wypełnione (wykrywane po zdarzeniach `input`/`change`
598
- * oraz wartości początkowej) — bez wymogu placeholdera na kontrolce.
750
+ * oraz wartości początkowej) — bez wymogu placeholdera na kontrolce. Kontrolki bez natywnego
751
+ * `input`/`textarea` (np. `kpt-select`) zgłaszają wypełnienie tokenem `KPT_FORM_FIELD_CONTROL`.
599
752
  *
600
753
  * @example
601
754
  * <kpt-form-field label="E-mail" [error]="emailError()" hint="Firmowy adres">
602
- * <kpt-input [control]="f.email" type="email" />
755
+ * <kpt-input [formField]="f.email" type="email" />
603
756
  * </kpt-form-field>
604
757
  *
605
758
  * @example
@@ -625,16 +778,42 @@ declare class KptFormField {
625
778
  */
626
779
  readonly labelType: _angular_core.InputSignal<"fixed" | "over" | "in" | "on">;
627
780
  private readonly host;
781
+ /**
782
+ * Kontrolka bez natywnego `input`/`textarea` (np. `kpt-select`) zgłasza wypełnienie sama,
783
+ * przez token `KPT_FORM_FIELD_CONTROL` — jej wartość nie da się odczytać z DOM.
784
+ */
785
+ private readonly control;
786
+ /** Wypełnienie odczytane z natywnej kontrolki (zdarzenia `input`/`change` + wartość początkowa). */
787
+ private readonly nativeFilled;
628
788
  /** Czy projektowana kontrolka ma wartość — steruje uniesieniem etykiety w wariantach float. */
629
- protected readonly filled: _angular_core.WritableSignal<boolean>;
789
+ protected readonly filled: _angular_core.Signal<boolean>;
630
790
  constructor();
631
791
  /** Odczytuje wartość projektowanego `input`/`textarea` i aktualizuje stan `filled`. */
632
792
  protected updateFilled(): void;
633
793
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptFormField, never>;
634
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptFormField, "kpt-form-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
794
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptFormField, "kpt-form-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; }, {}, ["control"], ["*"], true, never>;
635
795
  }
636
796
 
637
- type KptInputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';
797
+ /**
798
+ * Kontrakt kontrolki dla `kpt-form-field`. Wypełnienie pola (`filled`) steruje uniesieniem
799
+ * etykiety w wariantach Float Label (`over`/`in`/`on`).
800
+ *
801
+ * Kontrolki oparte na natywnym `input`/`textarea` nie muszą nic dostarczać — `kpt-form-field`
802
+ * odczytuje ich `value` bezpośrednio z DOM. Kontrolki bez natywnego pola (np. `kpt-select`,
803
+ * którego panel żyje w overlayu) muszą dostarczyć ten token, inaczej etykieta zostanie
804
+ * na wartości zamiast unieść się nad nią.
805
+ *
806
+ * @example
807
+ * providers: [{ provide: KPT_FORM_FIELD_CONTROL, useExisting: forwardRef(() => KptSelect) }]
808
+ */
809
+ interface KptFormFieldControl {
810
+ /** Czy kontrolka ma wartość. Sygnał — `kpt-form-field` reaguje na zmiany bez zdarzeń DOM. */
811
+ readonly filled: Signal<boolean>;
812
+ }
813
+ /** Token DI, przez który kontrolka zgłasza `kpt-form-field` swój stan wypełnienia. */
814
+ declare const KPT_FORM_FIELD_CONTROL: InjectionToken<KptFormFieldControl>;
815
+
816
+ type KptInputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'time';
638
817
  /**
639
818
  * Pole tekstowe Koncept UI zintegrowane z Angular Signal Forms.
640
819
  * Implementuje `FormValueControl<string>` — wiąż je dyrektywą `FormField`:
@@ -653,6 +832,8 @@ declare class KptInput implements FormValueControl<string> {
653
832
  readonly invalid: _angular_core.InputSignal<boolean>;
654
833
  readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
655
834
  readonly touched: _angular_core.InputSignal<boolean>;
835
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
836
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
656
837
  /** Emitowane na `blur` — oznacza pole jako dotknięte. */
657
838
  readonly touch: _angular_core.OutputEmitterRef<void>;
658
839
  readonly type: _angular_core.InputSignal<KptInputType>;
@@ -674,6 +855,8 @@ declare class KptCheckbox implements FormCheckboxControl {
674
855
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
675
856
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
676
857
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
858
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
859
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
677
860
  readonly touch: _angular_core.OutputEmitterRef<void>;
678
861
  /** Etykieta obok pola. */
679
862
  readonly label: _angular_core.InputSignal<string>;
@@ -694,6 +877,8 @@ declare class KptSwitch implements FormCheckboxControl {
694
877
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
695
878
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
696
879
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
880
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
881
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
697
882
  readonly touch: _angular_core.OutputEmitterRef<void>;
698
883
  readonly label: _angular_core.InputSignal<string>;
699
884
  /** Pozycja etykiety `label` względem przełącznika: 'end' (prawo, domyślnie) lub 'start' (lewo). */
@@ -725,6 +910,8 @@ declare class KptSwitchGroup<T = unknown> implements FormValueControl<unknown> {
725
910
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
726
911
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
727
912
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
913
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
914
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
728
915
  readonly touch: _angular_core.OutputEmitterRef<void>;
729
916
  /** Układ: 'vertical' (domyślnie) lub 'horizontal'. */
730
917
  readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
@@ -753,6 +940,8 @@ declare class KptRadioGroup<T = unknown> implements FormValueControl<T> {
753
940
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
754
941
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
755
942
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
943
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
944
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
756
945
  readonly touch: _angular_core.OutputEmitterRef<void>;
757
946
  readonly name: _angular_core.InputSignal<string>;
758
947
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptRadioGroup<any>, never>;
@@ -768,7 +957,7 @@ declare class KptRadioGroup<T = unknown> implements FormValueControl<T> {
768
957
  * <kpt-select [formField]="f.city" [options]="cities" filter placeholder="Szukaj miasta…" />
769
958
  * <kpt-select [formField]="f.tags" [options]="tags" multiple filter placeholder="Tagi…" />
770
959
  */
771
- declare class KptSelect<T = unknown> implements FormValueControl<unknown> {
960
+ declare class KptSelect<T = unknown> implements FormValueControl<unknown>, KptFormFieldControl {
772
961
  readonly options: _angular_core.InputSignal<KptOption<T>[]>;
773
962
  readonly placeholder: _angular_core.InputSignal<string>;
774
963
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -776,6 +965,8 @@ declare class KptSelect<T = unknown> implements FormValueControl<unknown> {
776
965
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
777
966
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
778
967
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
968
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
969
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
779
970
  /** Wartość: pojedyncza (T) lub tablica (T[]) w trybie multiple. */
780
971
  readonly value: _angular_core.ModelSignal<unknown>;
781
972
  readonly touch: _angular_core.OutputEmitterRef<void>;
@@ -788,7 +979,11 @@ declare class KptSelect<T = unknown> implements FormValueControl<unknown> {
788
979
  protected readonly selectedOptions: _angular_core.Signal<KptOption<T>[]>;
789
980
  protected readonly filteredOptions: _angular_core.Signal<KptOption<T>[]>;
790
981
  protected readonly singleLabel: _angular_core.Signal<string>;
791
- protected readonly hasValue: _angular_core.Signal<boolean>;
982
+ /**
983
+ * Czy wybrano jakąkolwiek opcję. Publiczne — `kpt-form-field` czyta to przez
984
+ * `KPT_FORM_FIELD_CONTROL`, żeby unieść etykietę Float Label nad wybraną wartość.
985
+ */
986
+ readonly filled: _angular_core.Signal<boolean>;
792
987
  protected isSelected(opt: KptOption<T>): boolean;
793
988
  protected toggleOpen(): void;
794
989
  protected close(): void;
@@ -835,8 +1030,12 @@ declare class KptDatepicker implements FormValueControl<string> {
835
1030
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
836
1031
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
837
1032
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1033
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1034
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
838
1035
  readonly touch: _angular_core.OutputEmitterRef<void>;
839
1036
  readonly placeholder: _angular_core.InputSignal<string>;
1037
+ /** Nazwa dostępna, gdy pola nie opisuje `<label for>` (np. dwa pola w jednym wierszu). */
1038
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
840
1039
  readonly displayFormat: _angular_core.InputSignal<"pl" | "iso">;
841
1040
  /** Granulacja wyboru. */
842
1041
  readonly selectionMode: _angular_core.InputSignal<KptDatepickerMode>;
@@ -893,7 +1092,7 @@ declare class KptDatepicker implements FormValueControl<string> {
893
1092
  protected nextYearPage(): void;
894
1093
  protected clear(event: Event): void;
895
1094
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDatepicker, never>;
896
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDatepicker, "kpt-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "monthDisplay": { "alias": "monthDisplay"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
1095
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDatepicker, "kpt-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "monthDisplay": { "alias": "monthDisplay"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
897
1096
  }
898
1097
 
899
1098
  interface ClockMark {
@@ -956,6 +1155,8 @@ declare class KptTextarea implements FormValueControl<string> {
956
1155
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
957
1156
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
958
1157
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1158
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1159
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
959
1160
  readonly touch: _angular_core.OutputEmitterRef<void>;
960
1161
  private readonly ta;
961
1162
  constructor();
@@ -986,6 +1187,8 @@ declare class KptRichText implements FormValueControl<string> {
986
1187
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
987
1188
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
988
1189
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1190
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1191
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
989
1192
  readonly touch: _angular_core.OutputEmitterRef<void>;
990
1193
  protected readonly i18n: KptI18n;
991
1194
  protected readonly swatches: string[];
@@ -1229,6 +1432,8 @@ declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
1229
1432
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1230
1433
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1231
1434
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1435
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1436
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1232
1437
  readonly touch: _angular_core.OutputEmitterRef<void>;
1233
1438
  /** Placeholder; bez wartości używa i18n (`dateRange.placeholder`). */
1234
1439
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
@@ -1269,9 +1474,12 @@ declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
1269
1474
 
1270
1475
  /**
1271
1476
  * Pole liczbowe ze strzałkami krokowania na Signal Forms. Wartość = number | null.
1477
+ * `showButtons="false"` chowa strzałki — wariant do zakresów „od–do", gdzie krokowanie
1478
+ * nie ma sensu, a pole ma wyglądać jak zwykłe `kpt-input` obok.
1272
1479
  *
1273
1480
  * @example
1274
1481
  * <kpt-input-number [formField]="f.qty" [min]="0" [max]="99" [step]="1" />
1482
+ * <kpt-input-number [formField]="f.priceFrom" [showButtons]="false" suffix=" zł" />
1275
1483
  */
1276
1484
  declare class KptInputNumber implements FormValueControl<number | null> {
1277
1485
  readonly value: _angular_core.ModelSignal<number | null>;
@@ -1280,9 +1488,13 @@ declare class KptInputNumber implements FormValueControl<number | null> {
1280
1488
  readonly step: _angular_core.InputSignal<number>;
1281
1489
  readonly placeholder: _angular_core.InputSignal<string>;
1282
1490
  readonly suffix: _angular_core.InputSignal<string>;
1491
+ /** Pokaż przyciski krokowania. `false` daje samo pole — wariant do zakresów „od–do". */
1492
+ readonly showButtons: _angular_core.InputSignalWithTransform<boolean, unknown>;
1283
1493
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1284
1494
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1285
1495
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1496
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1497
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1286
1498
  readonly touch: _angular_core.OutputEmitterRef<void>;
1287
1499
  protected readonly i18n: KptI18n;
1288
1500
  protected readonly display: _angular_core.Signal<string>;
@@ -1292,7 +1504,7 @@ declare class KptInputNumber implements FormValueControl<number | null> {
1292
1504
  protected step_(dir: 1 | -1): void;
1293
1505
  private clamp;
1294
1506
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptInputNumber, never>;
1295
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptInputNumber, "kpt-input-number", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
1507
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptInputNumber, "kpt-input-number", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "showButtons": { "alias": "showButtons"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
1296
1508
  }
1297
1509
 
1298
1510
  interface Strength {
@@ -1312,6 +1524,8 @@ declare class KptPassword implements FormValueControl<string> {
1312
1524
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1313
1525
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1314
1526
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1527
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1528
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1315
1529
  readonly touch: _angular_core.OutputEmitterRef<void>;
1316
1530
  protected readonly i18n: KptI18n;
1317
1531
  protected readonly visible: _angular_core.WritableSignal<boolean>;
@@ -1334,6 +1548,8 @@ declare class KptInputOtp implements FormValueControl<string> {
1334
1548
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1335
1549
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1336
1550
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1551
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1552
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1337
1553
  readonly touch: _angular_core.OutputEmitterRef<void>;
1338
1554
  protected readonly slots: _angular_core.Signal<number[]>;
1339
1555
  protected charAt(i: number): string;
@@ -1361,6 +1577,8 @@ declare class KptChipsInput implements FormValueControl<string[]> {
1361
1577
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1362
1578
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1363
1579
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1580
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1581
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1364
1582
  readonly touch: _angular_core.OutputEmitterRef<void>;
1365
1583
  protected readonly i18n: KptI18n;
1366
1584
  protected readonly effectivePlaceholder: _angular_core.Signal<string>;
@@ -1385,6 +1603,8 @@ declare class KptInputMask implements FormValueControl<string> {
1385
1603
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1386
1604
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1387
1605
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1606
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1607
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1388
1608
  readonly touch: _angular_core.OutputEmitterRef<void>;
1389
1609
  protected onInput(event: Event): void;
1390
1610
  private applyMask;
@@ -1408,6 +1628,8 @@ declare class KptListbox<T = unknown> implements FormValueControl<T | T[] | null
1408
1628
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1409
1629
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1410
1630
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
1631
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
1632
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
1411
1633
  readonly touch: _angular_core.OutputEmitterRef<void>;
1412
1634
  protected readonly i18n: KptI18n;
1413
1635
  protected readonly query: _angular_core.WritableSignal<string>;
@@ -1498,6 +1720,7 @@ declare class KptDivider {
1498
1720
  /**
1499
1721
  * Górny pasek (toolbar) — pozioma belka na treść aplikacji (logo, akcje).
1500
1722
  * Elementowi z atrybutem `kptToolbarSpacer` nadaj elastyczny odstęp, aby rozepchnąć zawartość.
1723
+ * Poniżej breakpointa `sm` pasek sam zbiega się do niższej wysokości i węższych marginesów.
1501
1724
  *
1502
1725
  * @example
1503
1726
  * <kpt-toolbar elevated>
@@ -1509,8 +1732,14 @@ declare class KptDivider {
1509
1732
  declare class KptToolbar {
1510
1733
  /** Dodaje cień (wyniesienie) pod paskiem. */
1511
1734
  readonly elevated: _angular_core.InputSignalWithTransform<boolean, unknown>;
1735
+ /**
1736
+ * Pozwala zawartości paska zawinąć się do kolejnych wierszy, gdy zabraknie miejsca.
1737
+ * Opcjonalne, bo zawijanie zmienia zachowanie `kptToolbarSpacer` — w jednowierszowym
1738
+ * pasku rozpycha on treść, a w zawijanym potrafi zepchnąć resztę do nowego wiersza.
1739
+ */
1740
+ readonly wrap: _angular_core.InputSignalWithTransform<boolean, unknown>;
1512
1741
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptToolbar, never>;
1513
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptToolbar, "kpt-toolbar", never, { "elevated": { "alias": "elevated"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1742
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptToolbar, "kpt-toolbar", never, { "elevated": { "alias": "elevated"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1514
1743
  }
1515
1744
 
1516
1745
  /**
@@ -1528,26 +1757,114 @@ declare class KptSidenav {
1528
1757
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSidenav, "kpt-sidenav", never, {}, {}, never, ["*"], true, never>;
1529
1758
  }
1530
1759
 
1531
- type KptSidenavMode = 'side' | 'over';
1532
1760
  /**
1533
- * Szkielet aplikacji (app shell) w stylu Material: toolbar u góry, panel boczny i treść.
1534
- * Sloty projekcji: `[kptShellToolbar]`, `[kptShellSidenav]`, oraz treść domyślna.
1761
+ * Zachowanie panelu bocznego:
1762
+ * - `auto` — zależne od szerokości okna (domyślne),
1763
+ * - `side` — zawsze zadokowany, rozpycha treść,
1764
+ * - `over` — zawsze nakładka nad treścią.
1765
+ */
1766
+ type KptSidenavMode = 'side' | 'over' | 'auto';
1767
+ /**
1768
+ * Szkielet aplikacji: pasek u góry, panel boczny i treść. Sloty projekcji:
1769
+ * `[kptShellToolbar]`, `[kptShellSidenav]` oraz treść domyślna.
1770
+ *
1771
+ * Domyślny tryb `auto` jest responsywny bez konfiguracji: od `sidenavBreakpoint` w górę
1772
+ * panel jest zadokowany, poniżej zachowuje się jak nakładka ze scrimem i startuje zamknięty.
1773
+ * Opcjonalny `sidenavRailBreakpoint` wstawia między te pasma szynę ikon.
1774
+ *
1775
+ * O układzie decyduje wyłącznie CSS — nic nie migocze przed hydracją i nic nie zależy od
1776
+ * `matchMedia`. JavaScript odpowiada tylko za to, KTÓRY stan przełącza przycisk.
1777
+ *
1778
+ * Panel ma dwa niezależne stany otwarcia (`sidenavOpen` dla układu zadokowanego,
1779
+ * `sidenavCompactOpen` dla nakładki), więc intencja z desktopu przeżywa zwężenie
1780
+ * i ponowne rozszerzenie okna.
1535
1781
  *
1536
1782
  * @example
1537
- * <kpt-app-shell [(sidenavOpen)]="navOpen" sidenavMode="side">
1538
- * <kpt-toolbar kptShellToolbar>…</kpt-toolbar>
1783
+ * <kpt-app-shell [(sidenavOpen)]="navOpen">
1784
+ * <kpt-toolbar kptShellToolbar>
1785
+ * <button kptShellNavToggle type="button"><kpt-icon name="menu" /></button>
1786
+ * </kpt-toolbar>
1539
1787
  * <kpt-sidenav kptShellSidenav>…</kpt-sidenav>
1540
1788
  * <router-outlet />
1541
1789
  * </kpt-app-shell>
1542
1790
  */
1543
1791
  declare class KptAppShell {
1544
- /** Czy panel boczny jest otwarty (dwukierunkowe). */
1792
+ private static nextId;
1793
+ private readonly breakpoints;
1794
+ private readonly i18n;
1795
+ /** Czy panel jest otwarty w układzie zadokowanym (oraz w wymuszonym trybie `over`). */
1545
1796
  readonly sidenavOpen: _angular_core.ModelSignal<boolean>;
1546
- /** Tryb panelu: 'side' rozpycha treść, 'over' nakłada się ze scrimem. */
1797
+ /**
1798
+ * Czy nakładka jest wysunięta w trybie `auto` poniżej `sidenavBreakpoint`.
1799
+ *
1800
+ * Celowo osobny od `sidenavOpen`: gdyby oba układy dzieliły jeden model, wejście na wąski
1801
+ * ekran musiałoby nadpisać stan konsumenta, a powrót na szeroki nie miałby czego przywrócić.
1802
+ */
1803
+ readonly sidenavCompactOpen: _angular_core.ModelSignal<boolean>;
1804
+ /** `auto` przełącza układ na breakpoincie; `side`/`over` wymuszają go niezależnie od szerokości. */
1547
1805
  readonly sidenavMode: _angular_core.InputSignal<KptSidenavMode>;
1806
+ /** Od tego breakpointa w górę tryb `auto` dokuje panel; poniżej robi z niego nakładkę. */
1807
+ readonly sidenavBreakpoint: _angular_core.InputSignal<KptBreakpoint>;
1808
+ /**
1809
+ * Włącza szynę ikon w paśmie od `sidenavBreakpoint` do tego breakpointa: zamknięty panel
1810
+ * nie chowa się wtedy całkowicie, tylko zwęża do `--kpt-sidenav-rail-width`. Powyżej tego
1811
+ * progu zamknięcie znów chowa panel w całości. Wartość musi być wyższa niż `sidenavBreakpoint`.
1812
+ * `null` (domyślnie) wyłącza szynę.
1813
+ */
1814
+ readonly sidenavRailBreakpoint: _angular_core.InputSignal<KptBreakpoint | null>;
1815
+ /** Etykieta dostępności panelu; puste = `appShell.navigation` ze słownika. */
1816
+ readonly sidenavLabel: _angular_core.InputSignal<string>;
1817
+ /** Identyfikator panelu dla `aria-controls` przycisku przełączającego. */
1818
+ readonly sidenavId: string;
1819
+ /** Czy panel zachowuje się TERAZ jak nakładka nad treścią. */
1820
+ readonly isOverlay: _angular_core.Signal<boolean>;
1821
+ /** Efektywny stan otwarcia — ten, który obowiązuje w bieżącym układzie. */
1822
+ readonly isSidenavOpen: _angular_core.Signal<boolean>;
1823
+ protected readonly navLabel: _angular_core.Signal<string>;
1824
+ /** Scrim blokuje wskaźnik, ale nie klawiaturę — treść pod nakładką nie może łapać fokusu. */
1825
+ protected readonly contentInert: _angular_core.Signal<boolean>;
1826
+ constructor();
1827
+ /** Przełącza panel — trafia w stan właściwy dla bieżącego układu. */
1828
+ toggleSidenav(): void;
1829
+ /** Otwiera panel w bieżącym układzie. */
1830
+ openSidenav(): void;
1831
+ /** Zamyka panel w bieżącym układzie. */
1832
+ closeSidenav(): void;
1548
1833
  protected onScrimClick(): void;
1834
+ protected onEscape(): void;
1835
+ private usesCompactState;
1836
+ private setSidenavOpen;
1549
1837
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptAppShell, never>;
1550
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptAppShell, "kpt-app-shell", never, { "sidenavOpen": { "alias": "sidenavOpen"; "required": false; "isSignal": true; }; "sidenavMode": { "alias": "sidenavMode"; "required": false; "isSignal": true; }; }, { "sidenavOpen": "sidenavOpenChange"; }, never, ["[kptShellToolbar]", "[kptShellSidenav]", "*"], true, never>;
1838
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptAppShell, "kpt-app-shell", never, { "sidenavOpen": { "alias": "sidenavOpen"; "required": false; "isSignal": true; }; "sidenavCompactOpen": { "alias": "sidenavCompactOpen"; "required": false; "isSignal": true; }; "sidenavMode": { "alias": "sidenavMode"; "required": false; "isSignal": true; }; "sidenavBreakpoint": { "alias": "sidenavBreakpoint"; "required": false; "isSignal": true; }; "sidenavRailBreakpoint": { "alias": "sidenavRailBreakpoint"; "required": false; "isSignal": true; }; "sidenavLabel": { "alias": "sidenavLabel"; "required": false; "isSignal": true; }; }, { "sidenavOpen": "sidenavOpenChange"; "sidenavCompactOpen": "sidenavCompactOpenChange"; }, never, ["[kptShellToolbar]", "[kptShellSidenav]", "*"], true, never>;
1839
+ }
1840
+
1841
+ /**
1842
+ * Przycisk przełączający panel boczny `kpt-app-shell`. Umieść go w slocie
1843
+ * `[kptShellToolbar]` — dyrektywa sama odnajdzie shell w drzewie deklaracji.
1844
+ *
1845
+ * Trafia w stan właściwy dla bieżącego układu (zadokowany albo nakładka), więc jeden
1846
+ * przycisk obsługuje desktop i wąski ekran. Bez tej dyrektywy aplikacja musiałaby sama
1847
+ * wstrzyknąć `KptBreakpointObserver` i rozstrzygnąć, który z dwóch modeli przełączyć.
1848
+ *
1849
+ * Atrybuty ARIA nakłada wyłącznie na natywny `<button>`/`<a>`. Na komponencie opakowującym
1850
+ * (np. `kpt-icon-button`) trafiłyby na zewnętrzny element bez roli, co jest naruszeniem
1851
+ * `aria-allowed-attr` — tam etykietę podaj samemu komponentowi.
1852
+ *
1853
+ * @example
1854
+ * <button kptShellNavToggle type="button"><kpt-icon name="menu" /></button>
1855
+ * <kpt-icon-button kptShellNavToggle ariaLabel="Menu"><kpt-icon name="menu" /></kpt-icon-button>
1856
+ */
1857
+ declare class KptShellNavToggle {
1858
+ /** Własna etykieta przycisku; puste = `appShell.toggleNavigation` ze słownika. */
1859
+ readonly label: _angular_core.InputSignal<string>;
1860
+ protected readonly shell: KptAppShell;
1861
+ private readonly i18n;
1862
+ private readonly isNativeControl;
1863
+ protected readonly ariaExpanded: _angular_core.Signal<string | null>;
1864
+ protected readonly ariaControls: _angular_core.Signal<string | null>;
1865
+ protected readonly ariaLabel: _angular_core.Signal<string | null>;
1866
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptShellNavToggle, never>;
1867
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptShellNavToggle, "[kptShellNavToggle]", never, { "label": { "alias": "kptShellNavToggle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1551
1868
  }
1552
1869
 
1553
1870
  /**
@@ -2300,7 +2617,20 @@ declare class KptDialog {
2300
2617
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
2301
2618
  protected readonly i18n: KptI18n;
2302
2619
  private readonly dialogRef;
2620
+ private readonly overlayContainer;
2621
+ /** Miejsce, z którego zabraliśmy kontener overlayów — żeby go tam oddać. */
2622
+ private overlayHome;
2303
2623
  constructor();
2624
+ /**
2625
+ * Przenosi kontener CDK Overlay do wnętrza `<dialog>` na czas, gdy okno jest otwarte.
2626
+ *
2627
+ * `showModal()` wynosi okno do **warstwy szczytowej** przeglądarki, a ta jest ponad
2628
+ * całym drzewem dokumentu — żaden `z-index` tego nie przebije. Kontener overlayów
2629
+ * wisi na `<body>`, więc panele `kpt-select`, `kpt-datepicker`, `kpt-autocomplete`
2630
+ * czy `kpt-menu` otwierałyby się NIEWIDOCZNE, schowane za tłem okna.
2631
+ */
2632
+ private adoptOverlayContainer;
2633
+ private releaseOverlayContainer;
2304
2634
  protected onCancel(event: Event): void;
2305
2635
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDialog, never>;
2306
2636
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDialog, "kpt-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*", "[kptDialogFooter]"], true, never>;
@@ -2355,18 +2685,35 @@ type KptTooltipPosition = 'top' | 'bottom' | 'left' | 'right';
2355
2685
  *
2356
2686
  * @example
2357
2687
  * <kpt-button kptTooltip="Zapisz zmiany" kptTooltipPosition="bottom">Zapisz</kpt-button>
2688
+ *
2689
+ * @example Dymek tylko wtedy, gdy tekst nie mieści się w elemencie:
2690
+ * <span class="ellipsis" [kptTooltip]="name" kptTooltipOnlyWhenTruncated>{{ name }}</span>
2358
2691
  */
2359
2692
  declare class KptTooltip implements OnDestroy {
2360
2693
  readonly text: _angular_core.InputSignal<string>;
2361
2694
  readonly position: _angular_core.InputSignal<KptTooltipPosition>;
2695
+ /**
2696
+ * Pokazuj dymek tylko wtedy, gdy treść nie mieści się w elemencie (jest ucięta
2697
+ * wielokropkiem). Dzięki temu podpowiedź nie powtarza tekstu, który i tak widać.
2698
+ */
2699
+ readonly onlyWhenTruncated: _angular_core.InputSignalWithTransform<boolean, unknown>;
2362
2700
  private readonly host;
2363
2701
  private tip?;
2702
+ /** Dymek żyje w `body`, więc przy przewinięciu hosta trzeba go przeliczyć. */
2703
+ private readonly follow;
2364
2704
  protected show(): void;
2365
2705
  protected hide(): void;
2706
+ /**
2707
+ * Czy treść jest przycięta? Sprawdzamy hosta oraz jego bezpośrednie dzieci, bo
2708
+ * `text-overflow: ellipsis` siedzi zwykle na wewnętrznym elemencie — a taki element
2709
+ * kurczy się do dostępnej szerokości i nie rozpycha rodzica, więc pomiar samego
2710
+ * hosta nie wykryłby niczego.
2711
+ */
2712
+ private isTruncated;
2366
2713
  private reposition;
2367
2714
  ngOnDestroy(): void;
2368
2715
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptTooltip, never>;
2369
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptTooltip, "[kptTooltip]", never, { "text": { "alias": "kptTooltip"; "required": true; "isSignal": true; }; "position": { "alias": "kptTooltipPosition"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2716
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptTooltip, "[kptTooltip]", never, { "text": { "alias": "kptTooltip"; "required": true; "isSignal": true; }; "position": { "alias": "kptTooltipPosition"; "required": false; "isSignal": true; }; "onlyWhenTruncated": { "alias": "kptTooltipOnlyWhenTruncated"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2370
2717
  }
2371
2718
 
2372
2719
  /**
@@ -2404,6 +2751,8 @@ declare class KptAutocomplete implements FormValueControl<string> {
2404
2751
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2405
2752
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
2406
2753
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
2754
+ /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
2755
+ protected readonly showInvalid: _angular_core.Signal<boolean>;
2407
2756
  readonly touch: _angular_core.OutputEmitterRef<void>;
2408
2757
  protected readonly open: _angular_core.WritableSignal<boolean>;
2409
2758
  protected readonly activeIndex: _angular_core.WritableSignal<number>;
@@ -2593,5 +2942,6 @@ declare class KptSpeedDial<T = unknown> {
2593
2942
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSpeedDial<any>, "kpt-speed-dial", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
2594
2943
  }
2595
2944
 
2596
- export { KPT_I18N_CONFIG, KPT_MESSAGES_EN, KPT_MESSAGES_PL, KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBadge, KptBottomSheet, KptBreadcrumb, KptButton, KptButtonGroup, KptCard, KptCarousel, KptCellDef, KptCheckbox, KptChip, KptChipsInput, KptClock, KptColorPicker, KptConfirmContainer, KptConfirmService, KptContextMenu, KptDataTable, KptDataView, KptDateRange, KptDatepicker, KptDialog, KptDivider, KptDrawer, KptEmpty, KptFab, KptFieldset, KptFileUpload, KptFormField, KptGalleria, KptI18n, KptIcon, KptIconButton, KptIconRegistry, KptImage, KptInput, KptInputMask, KptInputNumber, KptInputOtp, KptKnob, KptListbox, KptMegamenu, KptMenu, KptMenubar, KptMeterGroup, KptOrderList, KptPaginator, KptPanel, KptPassword, KptPickList, KptPopover, KptProgress, KptRadioGroup, KptRating, KptRichText, KptRowDetailDef, KptScrollTop, KptSelect, KptSidenav, KptSkeleton, KptSlider, KptSpeedDial, KptSpinner, KptSplitButton, KptSplitter, KptStep, KptStepper, KptSwitch, KptSwitchGroup, KptTab, KptTabs, KptTextarea, KptTimeline, KptToastContainer, KptToastService, KptToolbar, KptTooltip, KptTree, provideKptI18n };
2597
- export type { DeepPartial, KptAlertVariant, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeVariant, KptBreadcrumbItem, KptButtonSize, KptButtonVariant, KptCardVariant, KptChipVariant, KptColumn, KptConfirmOptions, KptConfirmRequest, KptDateRangeValue, KptDividerOrientation, KptDrawerPosition, KptGalleriaItem, KptI18nConfig, KptIconName, KptInputType, KptLocale, KptMenuItem, KptMessages, KptMeterItem, KptOption, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
2945
+ export { KPT_BREAKPOINTS, KPT_FORM_FIELD_CONTROL, KPT_I18N_CONFIG, KPT_MESSAGES_EN, KPT_MESSAGES_PL, KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBadge, KptBottomSheet, KptBreadcrumb, KptBreakpointObserver, KptButton, KptButtonGroup, KptCard, KptCarousel, KptCellDef, KptCheckbox, KptChip, KptChipsInput, KptClock, KptColorPicker, KptConfirmContainer, KptConfirmService, KptContextMenu, KptDataTable, KptDataView, KptDateRange, KptDatepicker, KptDialog, KptDivider, KptDrawer, KptEmpty, KptFab, KptFieldset, KptFileUpload, KptFormField, KptGalleria, KptI18n, KptIcon, KptIconButton, KptIconRegistry, KptImage, KptInput, KptInputMask, KptInputNumber, KptInputOtp, KptKnob, KptListbox, KptMegamenu, KptMenu, KptMenubar, KptMeterGroup, KptOrderList, KptPaginator, KptPanel, KptPassword, KptPickList, KptPopover, KptProgress, KptRadioGroup, KptRating, KptRichText, KptRowDetailDef, KptScrollTop, KptSelect, KptShellNavToggle, KptSidenav, KptSkeleton, KptSlider, KptSpeedDial, KptSpinner, KptSplitButton, KptSplitter, KptStep, KptStepper, KptSwitch, KptSwitchGroup, KptTab, KptTabs, KptTextarea, KptTimeline, KptToastContainer, KptToastService, KptToolbar, KptTooltip, KptTree, provideKptI18n, renderKptIconSvg };
2946
+ export type { DeepPartial, KptAlertVariant, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeVariant, KptBreadcrumbItem, KptBreakpoint, KptButtonSize, KptButtonVariant, KptCardVariant, KptChipVariant, KptColumn, KptConfirmOptions, KptConfirmRequest, KptDateRangeValue, KptDividerOrientation, KptDrawerPosition, KptFormFieldControl, KptGalleriaItem, KptI18nConfig, KptIconName, KptInputType, KptLocale, KptMenuItem, KptMessages, KptMeterItem, KptOption, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
2947
+ //# sourceMappingURL=konce-pt-angular.d.ts.map