@konce-pt/angular 0.2.0 → 0.4.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.
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, OnDestroy } from '@angular/core';
2
+ import { InjectionToken, 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';
@@ -99,6 +99,259 @@ declare class KptFab {
99
99
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptFab, "kpt-fab", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "extended": { "alias": "extended"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
100
100
  }
101
101
 
102
+ /** Kod języka. Otwarty string — EN/PL mają podpowiedzi, ale dozwolony dowolny. */
103
+ type KptLocale = 'en' | 'pl' | (string & {});
104
+ /** Pełny słownik etykiet UI używanych przez komponenty biblioteki. */
105
+ interface KptMessages {
106
+ /** Etykiety współdzielone przez wiele komponentów (przyciski ikonowe itp.). */
107
+ common: {
108
+ close: string;
109
+ remove: string;
110
+ previous: string;
111
+ next: string;
112
+ clear: string;
113
+ done: string;
114
+ all: string;
115
+ };
116
+ paginator: {
117
+ rowsPerPage: string;
118
+ /** Interpolacja: {start}, {end}, {total}. */
119
+ range: string;
120
+ prevPage: string;
121
+ nextPage: string;
122
+ };
123
+ select: {
124
+ search: string;
125
+ noResults: string;
126
+ removeChip: string;
127
+ };
128
+ listbox: {
129
+ search: string;
130
+ empty: string;
131
+ };
132
+ dataView: {
133
+ list: string;
134
+ grid: string;
135
+ empty: string;
136
+ /** Interpolacja: {count}. */
137
+ count: string;
138
+ };
139
+ dataTable: {
140
+ search: string;
141
+ exportCsv: string;
142
+ loading: string;
143
+ empty: string;
144
+ selectAll: string;
145
+ selectRow: string;
146
+ expandRow: string;
147
+ /** Interpolacja: {column}. */
148
+ filter: string;
149
+ /** Interpolacja: {column}. */
150
+ filterMin: string;
151
+ /** Interpolacja: {column}. */
152
+ filterMax: string;
153
+ all: string;
154
+ dateRange: string;
155
+ min: string;
156
+ max: string;
157
+ };
158
+ confirm: {
159
+ header: string;
160
+ accept: string;
161
+ reject: string;
162
+ };
163
+ fileUpload: {
164
+ /** Może zawierać `<strong>…</strong>`. */
165
+ hint: string;
166
+ remove: string;
167
+ };
168
+ chipsInput: {
169
+ placeholder: string;
170
+ };
171
+ dateRange: {
172
+ placeholder: string;
173
+ from: string;
174
+ to: string;
175
+ fromTime: string;
176
+ toTime: string;
177
+ };
178
+ datepicker: {
179
+ prevMonth: string;
180
+ nextMonth: string;
181
+ prevYear: string;
182
+ nextYear: string;
183
+ prevYears: string;
184
+ nextYears: string;
185
+ calendar: string;
186
+ month: string;
187
+ time: string;
188
+ };
189
+ pickList: {
190
+ available: string;
191
+ selected: string;
192
+ moveAllRight: string;
193
+ moveRight: string;
194
+ moveLeft: string;
195
+ moveAllLeft: string;
196
+ };
197
+ orderList: {
198
+ up: string;
199
+ down: string;
200
+ };
201
+ inputNumber: {
202
+ decrement: string;
203
+ increment: string;
204
+ };
205
+ password: {
206
+ show: string;
207
+ hide: string;
208
+ /** Etykiety miernika siły (indeksy 0–4). */
209
+ strength: [string, string, string, string, string];
210
+ };
211
+ spinner: {
212
+ label: string;
213
+ };
214
+ speedDial: {
215
+ actions: string;
216
+ };
217
+ scrollTop: {
218
+ label: string;
219
+ };
220
+ splitButton: {
221
+ more: string;
222
+ };
223
+ panel: {
224
+ toggle: string;
225
+ };
226
+ breadcrumb: {
227
+ label: string;
228
+ };
229
+ galleria: {
230
+ /** Interpolacja: {index}. */
231
+ image: string;
232
+ };
233
+ carousel: {
234
+ /** Interpolacja: {index}. */
235
+ slide: string;
236
+ };
237
+ richText: {
238
+ copy: string;
239
+ paste: string;
240
+ pasteText: string;
241
+ heading: string;
242
+ bold: string;
243
+ italic: string;
244
+ underline: string;
245
+ strike: string;
246
+ ul: string;
247
+ ol: string;
248
+ foreColor: string;
249
+ backColor: string;
250
+ alignLeft: string;
251
+ alignCenter: string;
252
+ alignRight: string;
253
+ alignJustify: string;
254
+ link: string;
255
+ table: string;
256
+ clear: string;
257
+ html: string;
258
+ /** Styl bloku „Normalny" (select). */
259
+ styleNormal: string;
260
+ /** Interpolacja: {level}. */
261
+ styleHeading: string;
262
+ linkPrompt: string;
263
+ htmlSource: string;
264
+ /** Etykieta „Własny…" przy pickerze koloru. */
265
+ paletteCustom: string;
266
+ /** Menu kontekstowe tabeli. */
267
+ menu: {
268
+ column: string;
269
+ row: string;
270
+ cell: string;
271
+ insertLeft: string;
272
+ insertRight: string;
273
+ headerColumn: string;
274
+ deleteColumn: string;
275
+ insertAbove: string;
276
+ insertBelow: string;
277
+ headerRow: string;
278
+ deleteRow: string;
279
+ cellBackground: string;
280
+ alignLeft: string;
281
+ alignCenter: string;
282
+ alignRight: string;
283
+ mergeCells: string;
284
+ splitCell: string;
285
+ border: string;
286
+ deleteTable: string;
287
+ };
288
+ /** Popover obramowania. */
289
+ border: {
290
+ table: string;
291
+ cell: string;
292
+ none: string;
293
+ thin: string;
294
+ medium: string;
295
+ thick: string;
296
+ customColor: string;
297
+ };
298
+ };
299
+ }
300
+ declare const KPT_MESSAGES_EN: KptMessages;
301
+ declare const KPT_MESSAGES_PL: KptMessages;
302
+
303
+ /** Głęboko-opcjonalna wersja typu — dla nadpisań/częściowych słowników. */
304
+ type DeepPartial<T> = {
305
+ [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
306
+ };
307
+ /** Konfiguracja i18n przekazywana do `provideKptI18n`. */
308
+ interface KptI18nConfig {
309
+ /** Język początkowy (domyślnie 'en'). */
310
+ locale?: KptLocale;
311
+ /**
312
+ * Słowniki do zarejestrowania lub nadpisania, kluczowane kodem języka.
313
+ * Może dodać nowy język (`{ de: {...} }`) lub nadpisać istniejący
314
+ * (`{ en: { paginator: { rowsPerPage: 'Rows:' } } }`). Deep-merge z bazą EN/PL.
315
+ */
316
+ messages?: Record<string, DeepPartial<KptMessages>>;
317
+ }
318
+ /** Token konfiguracji i18n. Konsumowany przez `KptI18n`. */
319
+ declare const KPT_I18N_CONFIG: InjectionToken<KptI18nConfig>;
320
+
321
+ /**
322
+ * Serwis tłumaczeń Koncept UI. Trzyma rejestr słowników per język, bieżący locale
323
+ * (sygnał) i funkcję `t()` z interpolacją. Skonfiguruj przez `provideKptI18n(...)`.
324
+ *
325
+ * Domyślnie EN. Języki bazowe: EN, PL. Dowolny inny język dodaje się jednym
326
+ * słownikiem (`registerMessages` lub `provideKptI18n({ messages: { de } })`);
327
+ * brakujące klucze spadają na EN.
328
+ */
329
+ declare class KptI18n {
330
+ /** Rejestr słowników: język → pełny `KptMessages`. */
331
+ private readonly registry;
332
+ private readonly _locale;
333
+ /** Bieżący język (tylko do odczytu). */
334
+ readonly locale: _angular_core.Signal<KptLocale>;
335
+ /** Aktywny słownik (z fallbackiem na EN, gdy język nieznany). */
336
+ readonly messages: _angular_core.Signal<KptMessages>;
337
+ constructor();
338
+ /** Ustawia bieżący język. Zmiana jest reaktywna dla wszystkich komponentów. */
339
+ setLocale(locale: KptLocale): void;
340
+ /**
341
+ * Rejestruje lub nadpisuje słownik języka. Częściowy słownik deep-merge'uje się
342
+ * na istniejący (lub EN dla nowego języka) → brakujące klucze mają wartość EN.
343
+ */
344
+ registerMessages(locale: KptLocale, patch: DeepPartial<KptMessages>): void;
345
+ /**
346
+ * Tłumaczy klucz w notacji kropkowej (np. `'paginator.range'`), z opcjonalną
347
+ * interpolacją `{name}`. Brakujący klucz spada na EN, a w ostateczności zwraca sam klucz.
348
+ */
349
+ t(key: string, params?: Record<string, string | number>): string;
350
+ private lookup;
351
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptI18n, never>;
352
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<KptI18n>;
353
+ }
354
+
102
355
  interface KptMenuItem<T = unknown> {
103
356
  label?: string;
104
357
  value?: T;
@@ -145,6 +398,7 @@ declare class KptSplitButton<T = unknown> {
145
398
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
146
399
  readonly primaryClick: _angular_core.OutputEmitterRef<void>;
147
400
  readonly select: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
401
+ protected readonly i18n: KptI18n;
148
402
  protected readonly open: _angular_core.WritableSignal<boolean>;
149
403
  protected readonly positions: ConnectedPosition[];
150
404
  protected pick(item: KptMenuItem<T>): void;
@@ -193,7 +447,28 @@ declare class KptIconRegistry {
193
447
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<KptIconRegistry>;
194
448
  }
195
449
 
196
- 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';
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';
451
+
452
+ /**
453
+ * Konfiguruje i18n Koncept UI. Ustawia język początkowy i rejestruje/nadpisuje
454
+ * słowniki. Języki bazowe (EN, PL) są dostępne bez konfiguracji.
455
+ *
456
+ * @example
457
+ * // main.ts — polski interfejs
458
+ * bootstrapApplication(App, {
459
+ * providers: [provideKptI18n({ locale: 'pl' })],
460
+ * });
461
+ *
462
+ * @example
463
+ * // Własny język jednym plikiem JSON (brakujące klucze → EN)
464
+ * import de from './i18n/de.json';
465
+ * provideKptI18n({ locale: 'de', messages: { de } });
466
+ *
467
+ * @example
468
+ * // Nadpisanie pojedynczych etykiet istniejącego języka
469
+ * provideKptI18n({ messages: { en: { paginator: { rowsPerPage: 'Rows per page:' } } } });
470
+ */
471
+ declare function provideKptI18n(config?: KptI18nConfig): EnvironmentProviders;
197
472
 
198
473
  type KptBadgeVariant = 'neutral' | 'primary' | 'success' | 'danger' | 'warning' | 'info';
199
474
  /**
@@ -228,6 +503,7 @@ declare class KptChip {
228
503
  readonly removable: _angular_core.InputSignalWithTransform<boolean, unknown>;
229
504
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
230
505
  readonly removed: _angular_core.OutputEmitterRef<void>;
506
+ protected readonly i18n: KptI18n;
231
507
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChip, never>;
232
508
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChip, "kpt-chip", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
233
509
  }
@@ -262,7 +538,10 @@ declare class KptAvatar {
262
538
  */
263
539
  declare class KptSpinner {
264
540
  readonly size: _angular_core.InputSignal<string>;
265
- readonly label: _angular_core.InputSignal<string>;
541
+ /** Etykieta a11y; bez wartości używa i18n (`spinner.label`). */
542
+ readonly label: _angular_core.InputSignal<string | undefined>;
543
+ private readonly i18n;
544
+ protected readonly effectiveLabel: _angular_core.Signal<string>;
266
545
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptSpinner, never>;
267
546
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSpinner, "kpt-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
268
547
  }
@@ -312,10 +591,21 @@ declare class KptSkeleton {
312
591
  * kontrolki (np. `kpt-input`). Prezentacyjny — stan błędu przekazuje się przez `error`
313
592
  * (zwykle z pola Signal Forms). Wygląd sterowany tokenami `--kpt-form-field-*`.
314
593
  *
594
+ * Etykieta ma 4 warianty (`labelType`): `fixed` (domyślny, nad kontrolką) oraz trzy warianty
595
+ * unoszącej się etykiety (Float Label) z animowanym przejściem: `over` (nad obramowaniem),
596
+ * `in` (u góry wewnątrz pola) i `on` (na obramowaniu, notch). Uniesienie następuje przy focusie
597
+ * (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.
599
+ *
315
600
  * @example
316
601
  * <kpt-form-field label="E-mail" [error]="emailError()" hint="Firmowy adres">
317
602
  * <kpt-input [control]="f.email" type="email" />
318
603
  * </kpt-form-field>
604
+ *
605
+ * @example
606
+ * <kpt-form-field label="E-mail" labelType="over">
607
+ * <kpt-input />
608
+ * </kpt-form-field>
319
609
  */
320
610
  declare class KptFormField {
321
611
  /** Tekst etykiety. */
@@ -328,8 +618,20 @@ declare class KptFormField {
328
618
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
329
619
  /** Id kontrolki dla powiązania `label[for]`. */
330
620
  readonly controlId: _angular_core.InputSignal<string>;
621
+ /**
622
+ * Wariant etykiety: `fixed` (domyślnie, statyczna nad kontrolką) lub Float Label —
623
+ * `over` (nad obramowaniem), `in` (u góry wewnątrz pola), `on` (na obramowaniu, notch).
624
+ * Uniesienie następuje przy focusie lub wypełnieniu pola.
625
+ */
626
+ readonly labelType: _angular_core.InputSignal<"fixed" | "over" | "in" | "on">;
627
+ private readonly host;
628
+ /** Czy projektowana kontrolka ma wartość — steruje uniesieniem etykiety w wariantach float. */
629
+ protected readonly filled: _angular_core.WritableSignal<boolean>;
630
+ constructor();
631
+ /** Odczytuje wartość projektowanego `input`/`textarea` i aktualizuje stan `filled`. */
632
+ protected updateFilled(): void;
331
633
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptFormField, never>;
332
- 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; }; }, {}, never, ["*"], true, 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>;
333
635
  }
334
636
 
335
637
  type KptInputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';
@@ -382,6 +684,10 @@ declare class KptCheckbox implements FormCheckboxControl {
382
684
  /**
383
685
  * Przełącznik (switch/toggle) zintegrowany z Signal Forms (`FormCheckboxControl`).
384
686
  * `<kpt-switch [formField]="f.notifications" label="Powiadomienia" />`
687
+ *
688
+ * Wariant z tekstem stanu: `onLabel`/`offLabel` — wyświetlany tekst zmienia się
689
+ * przy przełączaniu (np. „Włączony”/„Wyłączony”).
690
+ * `<kpt-switch [(checked)]="on" onLabel="Włączony" offLabel="Wyłączony" />`
385
691
  */
386
692
  declare class KptSwitch implements FormCheckboxControl {
387
693
  readonly checked: _angular_core.ModelSignal<boolean>;
@@ -390,8 +696,51 @@ declare class KptSwitch implements FormCheckboxControl {
390
696
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
391
697
  readonly touch: _angular_core.OutputEmitterRef<void>;
392
698
  readonly label: _angular_core.InputSignal<string>;
699
+ /** Pozycja etykiety `label` względem przełącznika: 'end' (prawo, domyślnie) lub 'start' (lewo). */
700
+ readonly labelPosition: _angular_core.InputSignal<"start" | "end">;
701
+ /** Tekst stanu włączonego (wyświetlany, gdy `checked`). */
702
+ readonly onLabel: _angular_core.InputSignal<string>;
703
+ /** Tekst stanu wyłączonego (wyświetlany, gdy nie `checked`). */
704
+ readonly offLabel: _angular_core.InputSignal<string>;
705
+ protected readonly hasStateLabels: _angular_core.Signal<boolean>;
706
+ /** Tekst zależny od stanu przełącznika. */
707
+ protected readonly stateLabel: _angular_core.Signal<string>;
393
708
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptSwitch, never>;
394
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSwitch, "kpt-switch", never, { "checked": { "alias": "checked"; "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; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
709
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSwitch, "kpt-switch", never, { "checked": { "alias": "checked"; "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; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "onLabel": { "alias": "onLabel"; "required": false; "isSignal": true; }; "offLabel": { "alias": "offLabel"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
710
+ }
711
+
712
+ /**
713
+ * Grupa przełączników. Domyślnie pojedynczy wybór (wzajemnie wykluczające się) —
714
+ * włączenie jednego wyłącza pozostałe, a wartość to `value` wybranej opcji (lub `null`).
715
+ * Z `multiple` przechodzi w tryb wielokrotny — wartość to tablica `T[]` zaznaczonych opcji.
716
+ * Zintegrowana z Signal Forms (`FormValueControl<T | T[] | null>`).
717
+ *
718
+ * @example
719
+ * <kpt-switch-group [(value)]="plan" [options]="plans" />
720
+ * <kpt-switch-group multiple [(value)]="tags" [options]="tagOptions" />
721
+ */
722
+ declare class KptSwitchGroup<T = unknown> implements FormValueControl<unknown> {
723
+ readonly value: _angular_core.ModelSignal<unknown>;
724
+ readonly options: _angular_core.InputSignal<KptOption<T>[]>;
725
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
726
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
727
+ readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
728
+ readonly touch: _angular_core.OutputEmitterRef<void>;
729
+ /** Układ: 'vertical' (domyślnie) lub 'horizontal'. */
730
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
731
+ /** Tryb wielokrotnego wyboru — wartość to tablica `T[]` zaznaczonych opcji. Domyślnie false (pojedynczy wybór). */
732
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
733
+ /**
734
+ * Czy ponowne kliknięcie aktywnej opcji ją odznacza (value = null). Dotyczy tylko trybu pojedynczego —
735
+ * w trybie `multiple` odznaczanie jest zawsze dozwolone. Domyślnie tak.
736
+ */
737
+ readonly allowDeselect: _angular_core.InputSignalWithTransform<boolean, unknown>;
738
+ /** Aktualna wartość jako tablica (tryb multiple) — normalizuje `null`/pojedynczą wartość. */
739
+ private readonly selectedValues;
740
+ protected isChecked(optValue: T): boolean;
741
+ protected onToggle(opt: KptOption<T>, checked: boolean): void;
742
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptSwitchGroup<any>, never>;
743
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSwitchGroup<any>, "kpt-switch-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "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; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "allowDeselect": { "alias": "allowDeselect"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
395
744
  }
396
745
 
397
746
  /**
@@ -430,6 +779,7 @@ declare class KptSelect<T = unknown> implements FormValueControl<unknown> {
430
779
  /** Wartość: pojedyncza (T) lub tablica (T[]) w trybie multiple. */
431
780
  readonly value: _angular_core.ModelSignal<unknown>;
432
781
  readonly touch: _angular_core.OutputEmitterRef<void>;
782
+ protected readonly i18n: KptI18n;
433
783
  protected readonly open: _angular_core.WritableSignal<boolean>;
434
784
  protected readonly filterText: _angular_core.WritableSignal<string>;
435
785
  protected readonly activeIndex: _angular_core.WritableSignal<number>;
@@ -459,12 +809,26 @@ interface DayCell$1 {
459
809
  selected: boolean;
460
810
  disabled: boolean;
461
811
  }
812
+ interface GridCell {
813
+ label: string;
814
+ value: string;
815
+ selected: boolean;
816
+ disabled: boolean;
817
+ }
818
+ /** Granulacja wyboru. */
819
+ type KptDatepickerMode = 'date' | 'monthYear' | 'year' | 'month' | 'datetime' | 'time';
462
820
  /**
463
- * Wybór daty z własnym kalendarzem (CDK Overlay), Signal Forms. Wartość ISO 'RRRR-MM-DD'.
821
+ * Wybór daty/godziny z własnym kalendarzem (CDK Overlay), Signal Forms.
822
+ * Granulacja przez `selectionMode`: data, miesiąc+rok, rok, miesiąc, data+godzina, sama godzina.
823
+ * Godzina na tarczy zegara (dwa etapy: godziny → minuty), format 12/24h przez `hourFormat`.
824
+ * Format wartości zależy od trybu: 'RRRR-MM-DD' / 'RRRR-MM' / 'RRRR' / 'MM'
825
+ * / 'RRRR-MM-DDTHH:mm' (datetime) / 'HH:mm' (time). Czas przechowywany zawsze 24h.
464
826
  * Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
465
827
  *
466
828
  * @example
467
829
  * <kpt-datepicker [formField]="f.birthDate" minDate="1900-01-01" />
830
+ * <kpt-datepicker selectionMode="datetime" [hourFormat]="12" [(value)]="meetingAt" />
831
+ * <kpt-datepicker selectionMode="time" [(value)]="alarm" />
468
832
  */
469
833
  declare class KptDatepicker implements FormValueControl<string> {
470
834
  readonly value: _angular_core.ModelSignal<string>;
@@ -473,25 +837,108 @@ declare class KptDatepicker implements FormValueControl<string> {
473
837
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
474
838
  readonly touch: _angular_core.OutputEmitterRef<void>;
475
839
  readonly placeholder: _angular_core.InputSignal<string>;
840
+ readonly displayFormat: _angular_core.InputSignal<"pl" | "iso">;
841
+ /** Granulacja wyboru. */
842
+ readonly selectionMode: _angular_core.InputSignal<KptDatepickerMode>;
843
+ /** Prezentacja miesiąca w trybie 'month': słownie ('long') lub liczbą ('number'). */
844
+ readonly monthDisplay: _angular_core.InputSignal<"number" | "long">;
845
+ /** Format godziny: 24 lub 12 (z AM/PM). */
846
+ readonly hourFormat: _angular_core.InputSignalWithTransform<number, unknown>;
847
+ /** Krok minut (snap na tarczy). */
848
+ readonly minuteStep: _angular_core.InputSignalWithTransform<number, unknown>;
476
849
  readonly minDate: _angular_core.InputSignal<string | null>;
477
850
  readonly maxDate: _angular_core.InputSignal<string | null>;
478
- protected readonly weekdays: string[];
851
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
852
+ protected readonly i18n: KptI18n;
853
+ protected readonly weekdays: _angular_core.Signal<string[]>;
854
+ private readonly months;
479
855
  protected readonly open: _angular_core.WritableSignal<boolean>;
480
856
  private readonly today;
481
857
  private readonly view;
858
+ protected readonly timeStr: _angular_core.WritableSignal<string>;
859
+ protected readonly dtView: _angular_core.WritableSignal<"calendar" | "clock">;
860
+ private readonly pendingDate;
482
861
  protected readonly positions: ConnectedPosition[];
862
+ protected readonly viewYear: _angular_core.Signal<number>;
483
863
  protected readonly monthLabel: _angular_core.Signal<string>;
864
+ protected readonly yearPageStart: _angular_core.Signal<number>;
865
+ protected readonly yearRangeLabel: _angular_core.Signal<string>;
866
+ private formatTime;
867
+ /** Etykieta czasu na pasku trybu datetime (uwzględnia AM/PM). */
868
+ protected readonly timeBarLabel: _angular_core.Signal<string>;
484
869
  protected readonly display: _angular_core.Signal<string>;
870
+ private readonly selectedDateIso;
485
871
  protected readonly weeks: _angular_core.Signal<DayCell$1[][]>;
486
- private parse;
872
+ protected readonly monthCells: _angular_core.Signal<GridCell[]>;
873
+ protected readonly yearCells: _angular_core.Signal<GridCell[]>;
874
+ private parseDate;
875
+ private parseTime;
876
+ private parseDateTime;
877
+ private isYearDisabled;
878
+ private isMonthYearDisabled;
879
+ private initialView;
880
+ private syncTimeFromValue;
487
881
  protected toggleOpen(): void;
488
882
  protected close(): void;
489
883
  protected selectDay(cell: DayCell$1): void;
884
+ protected selectCell(cell: GridCell): void;
885
+ protected openClock(): void;
886
+ protected backToCalendar(): void;
887
+ protected commit(): void;
490
888
  protected prevMonth(): void;
491
889
  protected nextMonth(): void;
890
+ protected prevYear(): void;
891
+ protected nextYear(): void;
892
+ protected prevYearPage(): void;
893
+ protected nextYearPage(): void;
492
894
  protected clear(event: Event): void;
493
895
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDatepicker, never>;
494
- 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; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, 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>;
897
+ }
898
+
899
+ interface ClockMark {
900
+ label: string;
901
+ hour24: number;
902
+ x: number;
903
+ y: number;
904
+ inner: boolean;
905
+ selected: boolean;
906
+ }
907
+ /**
908
+ * Tarcza zegara (wybór godziny) — dwa etapy: godziny → minuty, klik lub przeciąganie.
909
+ * Format 12/24h (`hourFormat`); w 24h dodatkowy wewnętrzny pierścień 13–00, w 12h AM/PM.
910
+ * Wartość `HH:mm` (zawsze 24h). Używana przez `kpt-datepicker` i `kpt-date-range`.
911
+ *
912
+ * @example
913
+ * <kpt-clock [(value)]="time" [hourFormat]="12" [minuteStep]="5" />
914
+ */
915
+ declare class KptClock {
916
+ readonly value: _angular_core.ModelSignal<string>;
917
+ readonly hourFormat: _angular_core.InputSignalWithTransform<number, unknown>;
918
+ readonly minuteStep: _angular_core.InputSignalWithTransform<number, unknown>;
919
+ protected readonly hour: _angular_core.WritableSignal<number>;
920
+ protected readonly minute: _angular_core.WritableSignal<number>;
921
+ protected readonly clockPhase: _angular_core.WritableSignal<"hours" | "minutes">;
922
+ constructor();
923
+ private parse;
924
+ private emit;
925
+ protected readonly ampm: _angular_core.Signal<"AM" | "PM">;
926
+ protected readonly hour12: _angular_core.Signal<number>;
927
+ protected readonly hourLabel: _angular_core.Signal<string>;
928
+ protected readonly minuteLabel: _angular_core.Signal<string>;
929
+ private from12h;
930
+ protected readonly hourMarks: _angular_core.Signal<ClockMark[]>;
931
+ protected readonly minuteMarks: _angular_core.Signal<ClockMark[]>;
932
+ protected readonly handAngle: _angular_core.Signal<number>;
933
+ protected readonly handInner: _angular_core.Signal<boolean>;
934
+ protected setPhase(phase: 'hours' | 'minutes'): void;
935
+ protected setAmpm(target: 'AM' | 'PM'): void;
936
+ protected pickHour(mark: ClockMark): void;
937
+ protected pickMinute(mark: ClockMark): void;
938
+ protected onDialPointer(event: PointerEvent, face: HTMLElement): void;
939
+ protected onDialUp(): void;
940
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptClock, never>;
941
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptClock, "kpt-clock", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
495
942
  }
496
943
 
497
944
  /**
@@ -518,50 +965,171 @@ declare class KptTextarea implements FormValueControl<string> {
518
965
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptTextarea, "kpt-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "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>;
519
966
  }
520
967
 
521
- type KptRichTool = 'bold' | 'italic' | 'underline' | 'strike' | 'ul' | 'ol' | 'link' | 'clear';
968
+ type KptRichTool = 'copy' | 'paste' | 'pasteText' | 'heading' | 'bold' | 'italic' | 'underline' | 'strike' | 'ul' | 'ol' | 'foreColor' | 'backColor' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify' | 'link' | 'table' | 'clear' | 'html';
969
+ /** Pasek: płaska lista narzędzi lub grupy (sekcje rozdzielone separatorem). */
970
+ type KptRichToolbar = KptRichTool[] | KptRichTool[][];
522
971
  /**
523
- * Lekki edytor tekstu sformatowanego (contenteditable) z konfigurowalnym paskiem przycisków.
524
- * Wartość = HTML. Bez zależności zewnętrznych. Signal Forms.
972
+ * Lekki edytor tekstu sformatowanego (contenteditable) z konfigurowalnym paskiem sekcji.
973
+ * Narzędzia: schowek (kopiuj / wklej / wklej bez formatowania), styl (nagłówki H1–H6 / paragraf),
974
+ * bold/italic/underline/strike/ul/ol, kolor tekstu i tła (popover), wyrównania, link, czyszczenie.
975
+ * `toolbar` przyjmuje płaską listę lub grupy (sekcje). Wartość = HTML. Signal Forms.
976
+ * Wymaga stylów overlay CDK (popover kolorów): `import '@angular/cdk/overlay-prebuilt.css';`
525
977
  *
526
978
  * @example
527
- * <kpt-rich-text [formField]="f.body" [toolbar]="['bold','italic','ul','link']" />
979
+ * <kpt-rich-text [formField]="f.body" />
980
+ * <kpt-rich-text [(value)]="v" [toolbar]="[['bold','italic'],['ul','ol'],['link']]" />
528
981
  */
529
982
  declare class KptRichText implements FormValueControl<string> {
530
983
  readonly value: _angular_core.ModelSignal<string>;
531
- readonly toolbar: _angular_core.InputSignal<KptRichTool[]>;
984
+ readonly toolbar: _angular_core.InputSignal<KptRichToolbar>;
532
985
  readonly placeholder: _angular_core.InputSignal<string>;
533
986
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
534
987
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
535
988
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
536
989
  readonly touch: _angular_core.OutputEmitterRef<void>;
990
+ protected readonly i18n: KptI18n;
991
+ protected readonly swatches: string[];
537
992
  private readonly editor;
993
+ private savedRange;
994
+ protected readonly colorOpen: _angular_core.WritableSignal<boolean>;
995
+ protected readonly colorKind: _angular_core.WritableSignal<"foreColor" | "backColor" | "cellBg">;
996
+ protected readonly sourceView: _angular_core.WritableSignal<boolean>;
997
+ protected readonly styleOpen: _angular_core.WritableSignal<boolean>;
998
+ protected readonly tableOpen: _angular_core.WritableSignal<boolean>;
999
+ protected readonly gridR: _angular_core.WritableSignal<number>;
1000
+ protected readonly gridC: _angular_core.WritableSignal<number>;
1001
+ protected readonly gridRows: number[];
1002
+ protected readonly gridCols: number[];
1003
+ protected readonly menuOpen: _angular_core.WritableSignal<boolean>;
1004
+ protected readonly menuPoint: _angular_core.WritableSignal<{
1005
+ x: number;
1006
+ y: number;
1007
+ }>;
1008
+ protected readonly borderOpen: _angular_core.WritableSignal<boolean>;
1009
+ protected readonly borderTarget: _angular_core.WritableSignal<"table" | "cell">;
1010
+ private ctxCell;
1011
+ private resize;
1012
+ protected readonly selCount: _angular_core.WritableSignal<number>;
1013
+ private selCells;
1014
+ private selAnchor;
1015
+ private selecting;
1016
+ private canSplitCtx;
1017
+ protected readonly styleOptions: _angular_core.Signal<{
1018
+ tag: string;
1019
+ label: string;
1020
+ }[]>;
1021
+ protected readonly styleLabel: _angular_core.Signal<string>;
1022
+ protected readonly activeCmds: _angular_core.WritableSignal<Set<string>>;
1023
+ protected readonly currentBlock: _angular_core.WritableSignal<string>;
1024
+ protected readonly positions: ConnectedPosition[];
1025
+ /** Sekcje paska (normalizacja płaskiej listy do jednej grupy). */
1026
+ protected readonly sections: _angular_core.Signal<KptRichTool[][]>;
538
1027
  constructor();
539
1028
  protected icon(item: KptRichTool): KptIconName;
1029
+ protected aria(item: KptRichTool): string;
1030
+ protected isActive(item: KptRichTool): boolean;
1031
+ private inEditor;
1032
+ private refreshState;
540
1033
  protected onInput(): void;
1034
+ protected onSource(event: Event): void;
1035
+ private focusEditor;
1036
+ private saveSelection;
1037
+ private restoreSelection;
541
1038
  protected exec(item: KptRichTool): void;
1039
+ protected openStyle(): void;
1040
+ protected closeStyle(): void;
1041
+ protected pickStyle(tag: string): void;
1042
+ protected openColor(kind: 'foreColor' | 'backColor'): void;
1043
+ protected closeColor(): void;
1044
+ protected applyColor(color: string): void;
1045
+ protected onColorInput(event: Event): void;
1046
+ private pasteRich;
1047
+ private pastePlain;
1048
+ /** Natywne wklejanie — oczyść (bez śmieci z Worda/WWW). */
1049
+ protected onPaste(event: ClipboardEvent): void;
1050
+ protected closeTable(): void;
1051
+ protected gridHover(r: number, c: number): void;
1052
+ protected insertTable(rows: number, cols: number): void;
1053
+ protected onContextMenu(event: MouseEvent): void;
1054
+ protected closeMenu(): void;
1055
+ private ctxTable;
1056
+ private afterTableOp;
1057
+ protected insertColumn(dir: 'left' | 'right'): void;
1058
+ protected deleteColumn(): void;
1059
+ protected insertRow(dir: 'above' | 'below'): void;
1060
+ protected deleteRow(): void;
1061
+ /** Zamień komórki wiersza między `<td>` a `<th>` (wiersz nagłówka). */
1062
+ protected toggleHeaderRow(): void;
1063
+ /** Zamień komórki kolumny między `<td>` a `<th>` (kolumna nagłówka). */
1064
+ protected toggleHeaderColumn(): void;
1065
+ private swapCellTag;
1066
+ protected deleteTable(): void;
1067
+ protected alignCell(a: 'left' | 'center' | 'right'): void;
1068
+ /** Komórki objęte operacją: zaznaczenie (jeśli jest) lub bieżąca komórka menu. */
1069
+ private activeCells;
1070
+ protected openCellBg(): void;
1071
+ protected openBorder(): void;
1072
+ protected closeBorder(): void;
1073
+ private borderCells;
1074
+ protected setBorderWidth(w: 'none' | 'thin' | 'medium' | 'thick'): void;
1075
+ protected setBorderColor(color: string): void;
1076
+ protected onBorderColorInput(event: Event): void;
1077
+ private normalizeColWidths;
1078
+ protected onEditorMouseDown(event: MouseEvent): void;
1079
+ protected onEditorMouseMove(event: MouseEvent): void;
1080
+ private onResizeMove;
1081
+ private onResizeEnd;
1082
+ private buildGrid;
1083
+ private selectRegion;
1084
+ private clearSelection;
1085
+ protected mergeCells(): void;
1086
+ protected splitCell(): void;
1087
+ /** Komórka w wierszu, przed którą wstawić (pierwsza o origin-col > gridCol), lub null (na koniec). */
1088
+ private cellBeforeGridCol;
1089
+ protected canMerge(): boolean;
1090
+ protected canSplit(): boolean;
1091
+ private sanitizeHtml;
542
1092
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptRichText, never>;
543
1093
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptRichText, "kpt-rich-text", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "toolbar": { "alias": "toolbar"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "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>;
544
1094
  }
545
1095
 
1096
+ /** Wartość suwaka: pojedyncza liczba lub para `[min, max]` w trybie `range`. */
1097
+ type KptSliderValue = number | [number, number];
546
1098
  /**
547
1099
  * Suwak wartości (slider) na Signal Forms.
1100
+ * W trybie `range` udostępnia dwa uchwyty, a wartość jest parą `[min, max]`.
548
1101
  *
549
1102
  * @example
550
1103
  * <kpt-slider [formField]="f.volume" [min]="0" [max]="100" [step]="5" showValue />
551
- */
552
- declare class KptSlider implements FormValueControl<number> {
553
- readonly value: _angular_core.ModelSignal<number>;
554
- readonly min: _angular_core.InputSignal<number | undefined>;
555
- readonly max: _angular_core.InputSignal<number | undefined>;
1104
+ * <kpt-slider range [(value)]="zakres" [min]="0" [max]="100" showValue />
1105
+ */
1106
+ declare class KptSlider implements FormValueControl<KptSliderValue> {
1107
+ readonly value: _angular_core.ModelSignal<KptSliderValue>;
1108
+ /** Tryb zakresu: dwa uchwyty; wartość jako para `[min, max]`. */
1109
+ readonly range: _angular_core.InputSignalWithTransform<boolean, unknown>;
1110
+ readonly min: _angular_core.InputSignal<KptSliderValue | undefined>;
1111
+ readonly max: _angular_core.InputSignal<KptSliderValue | undefined>;
556
1112
  readonly step: _angular_core.InputSignal<number>;
557
1113
  readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
558
1114
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
559
1115
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
560
1116
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
561
1117
  readonly touch: _angular_core.OutputEmitterRef<void>;
562
- protected readonly percent: _angular_core.Signal<number>;
1118
+ private toNum;
1119
+ protected readonly minN: _angular_core.Signal<number>;
1120
+ protected readonly maxN: _angular_core.Signal<number>;
1121
+ /** Bieżąca para `[low, high]` — również dla trybu pojedynczego (low = min). */
1122
+ private readonly pair;
1123
+ protected readonly single: _angular_core.Signal<number>;
1124
+ protected readonly low: _angular_core.Signal<number>;
1125
+ protected readonly high: _angular_core.Signal<number>;
1126
+ protected setLow(v: number): void;
1127
+ protected setHigh(v: number): void;
1128
+ private pct;
1129
+ protected readonly lowPct: _angular_core.Signal<number>;
1130
+ protected readonly highPct: _angular_core.Signal<number>;
563
1131
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptSlider, never>;
564
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSlider, "kpt-slider", 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; }; "showValue": { "alias": "showValue"; "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>;
1132
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptSlider, "kpt-slider", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "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; }; "showValue": { "alias": "showValue"; "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>;
565
1133
  }
566
1134
 
567
1135
  /**
@@ -600,6 +1168,7 @@ declare class KptFileUpload implements FormValueControl<File[]> {
600
1168
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
601
1169
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
602
1170
  readonly touch: _angular_core.OutputEmitterRef<void>;
1171
+ protected readonly i18n: KptI18n;
603
1172
  protected readonly dragover: _angular_core.WritableSignal<boolean>;
604
1173
  protected onSelect(event: Event): void;
605
1174
  protected onDragOver(event: DragEvent): void;
@@ -633,6 +1202,8 @@ interface KptDateRangeValue {
633
1202
  start: string;
634
1203
  end: string;
635
1204
  }
1205
+ /** Granulacja zakresu: same daty, daty z godziną, same godziny. */
1206
+ type KptDateRangeMode = 'date' | 'datetime' | 'time';
636
1207
  interface DayCell {
637
1208
  day: number;
638
1209
  iso: string;
@@ -644,11 +1215,14 @@ interface DayCell {
644
1215
  }
645
1216
  /**
646
1217
  * Wybór zakresu dat z kalendarzem (CDK Overlay), Signal Forms.
647
- * Wartość: `{ start: 'RRRR-MM-DD', end: 'RRRR-MM-DD' }`.
1218
+ * `mode`: 'date' (domyślnie), 'datetime' (data+godzina, tarcza zegara), 'time' (sama godzina).
1219
+ * Wartość: `{ start, end }` — daty 'RRRR-MM-DD', datetime 'RRRR-MM-DDTHH:mm', godziny 'HH:mm'.
648
1220
  * Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
649
1221
  *
650
1222
  * @example
651
1223
  * <kpt-date-range [formField]="f.period" />
1224
+ * <kpt-date-range mode="datetime" [hourFormat]="12" [(value)]="span" />
1225
+ * <kpt-date-range mode="time" [(value)]="hours" />
652
1226
  */
653
1227
  declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
654
1228
  readonly value: _angular_core.ModelSignal<KptDateRangeValue>;
@@ -656,23 +1230,41 @@ declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
656
1230
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
657
1231
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
658
1232
  readonly touch: _angular_core.OutputEmitterRef<void>;
659
- readonly placeholder: _angular_core.InputSignal<string>;
660
- protected readonly weekdays: string[];
1233
+ /** Placeholder; bez wartości używa i18n (`dateRange.placeholder`). */
1234
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
1235
+ readonly displayFormat: _angular_core.InputSignal<"pl" | "iso">;
1236
+ readonly mode: _angular_core.InputSignal<KptDateRangeMode>;
1237
+ readonly hourFormat: _angular_core.InputSignalWithTransform<number, unknown>;
1238
+ readonly minuteStep: _angular_core.InputSignalWithTransform<number, unknown>;
1239
+ protected readonly i18n: KptI18n;
1240
+ protected readonly weekdays: _angular_core.Signal<string[]>;
1241
+ private readonly months;
1242
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
661
1243
  protected readonly open: _angular_core.WritableSignal<boolean>;
662
1244
  private readonly today;
663
1245
  private readonly view;
1246
+ protected readonly startTime: _angular_core.WritableSignal<string>;
1247
+ protected readonly endTime: _angular_core.WritableSignal<string>;
1248
+ protected readonly timeEnd: _angular_core.WritableSignal<"start" | "end">;
1249
+ private readonly startDate;
1250
+ private readonly endDate;
664
1251
  protected readonly positions: ConnectedPosition[];
665
1252
  protected readonly monthLabel: _angular_core.Signal<string>;
1253
+ private datePart;
1254
+ private timePart;
1255
+ private fmtDate;
1256
+ private fmtTime;
666
1257
  protected readonly display: _angular_core.Signal<string>;
667
1258
  protected readonly weeks: _angular_core.Signal<DayCell[][]>;
668
1259
  protected toggleOpen(): void;
669
1260
  protected close(): void;
670
1261
  protected selectDay(cell: DayCell): void;
1262
+ protected commit(): void;
671
1263
  protected prevMonth(): void;
672
1264
  protected nextMonth(): void;
673
1265
  protected clear(event: Event): void;
674
1266
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDateRange, never>;
675
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDateRange, "kpt-date-range", 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; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
1267
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDateRange, "kpt-date-range", 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; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
676
1268
  }
677
1269
 
678
1270
  /**
@@ -692,6 +1284,7 @@ declare class KptInputNumber implements FormValueControl<number | null> {
692
1284
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
693
1285
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
694
1286
  readonly touch: _angular_core.OutputEmitterRef<void>;
1287
+ protected readonly i18n: KptI18n;
695
1288
  protected readonly display: _angular_core.Signal<string>;
696
1289
  protected readonly canInc: _angular_core.Signal<boolean>;
697
1290
  protected readonly canDec: _angular_core.Signal<boolean>;
@@ -720,6 +1313,7 @@ declare class KptPassword implements FormValueControl<string> {
720
1313
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
721
1314
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
722
1315
  readonly touch: _angular_core.OutputEmitterRef<void>;
1316
+ protected readonly i18n: KptI18n;
723
1317
  protected readonly visible: _angular_core.WritableSignal<boolean>;
724
1318
  protected readonly strength: _angular_core.Signal<Strength>;
725
1319
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPassword, never>;
@@ -761,12 +1355,15 @@ declare class KptInputOtp implements FormValueControl<string> {
761
1355
  */
762
1356
  declare class KptChipsInput implements FormValueControl<string[]> {
763
1357
  readonly value: _angular_core.ModelSignal<string[]>;
764
- readonly placeholder: _angular_core.InputSignal<string>;
1358
+ /** Placeholder; bez wartości używa i18n (`chipsInput.placeholder`). */
1359
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
765
1360
  readonly allowDuplicates: _angular_core.InputSignalWithTransform<boolean, unknown>;
766
1361
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
767
1362
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
768
1363
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
769
1364
  readonly touch: _angular_core.OutputEmitterRef<void>;
1365
+ protected readonly i18n: KptI18n;
1366
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
770
1367
  protected onKeydown(event: KeyboardEvent): void;
771
1368
  protected commit(el: HTMLInputElement): void;
772
1369
  protected removeAt(index: number): void;
@@ -812,6 +1409,7 @@ declare class KptListbox<T = unknown> implements FormValueControl<T | T[] | null
812
1409
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
813
1410
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
814
1411
  readonly touch: _angular_core.OutputEmitterRef<void>;
1412
+ protected readonly i18n: KptI18n;
815
1413
  protected readonly query: _angular_core.WritableSignal<string>;
816
1414
  protected readonly visible: _angular_core.Signal<KptOption<T>[]>;
817
1415
  protected isSelected(v: T): boolean;
@@ -858,7 +1456,9 @@ type KptCardVariant = 'elevated' | 'outlined';
858
1456
  /**
859
1457
  * Karta Koncept UI — powierzchnia z wyniesieniem (elevated) lub obramowaniem (outlined).
860
1458
  * Opcjonalny nagłówek przez `header`; treść przez projekcję. Stopkę wstaw z atrybutem
861
- * `kptCardFooter`.
1459
+ * `kptCardFooter`. Dla bogatych układów (media/profil) ustaw `flush` (body bez paddingu)
1460
+ * i użyj reużywalnych klas: `kpt-card__media`, `__lead`, `__title`, `__subtitle`,
1461
+ * `__section`, `__tags`, `__meta`, `__avatar`, `__actions`.
862
1462
  *
863
1463
  * @example
864
1464
  * <kpt-card header="Ustawienia">
@@ -871,8 +1471,10 @@ declare class KptCard {
871
1471
  readonly variant: _angular_core.InputSignal<KptCardVariant>;
872
1472
  /** Opcjonalny tekst nagłówka. */
873
1473
  readonly header: _angular_core.InputSignal<string>;
1474
+ /** Body bez wewnętrznego paddingu — dla układów zarządzających własnymi sekcjami. */
1475
+ readonly flush: _angular_core.InputSignalWithTransform<boolean, unknown>;
874
1476
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptCard, never>;
875
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptCard, "kpt-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[kptCardFooter]"], true, never>;
1477
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptCard, "kpt-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "flush": { "alias": "flush"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[kptCardFooter]"], true, never>;
876
1478
  }
877
1479
 
878
1480
  type KptDividerOrientation = 'horizontal' | 'vertical';
@@ -958,8 +1560,11 @@ declare class KptPanel {
958
1560
  readonly header: _angular_core.InputSignal<string>;
959
1561
  readonly toggleable: _angular_core.InputSignalWithTransform<boolean, unknown>;
960
1562
  readonly collapsed: _angular_core.ModelSignal<boolean>;
1563
+ readonly animated: _angular_core.InputSignalWithTransform<boolean, unknown>;
1564
+ readonly animationDuration: _angular_core.InputSignal<number>;
1565
+ protected readonly i18n: KptI18n;
961
1566
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPanel, never>;
962
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPanel, "kpt-panel", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["[kptPanelActions]", "*"], true, never>;
1567
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPanel, "kpt-panel", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["[kptPanelActions]", "*"], true, never>;
963
1568
  }
964
1569
 
965
1570
  /**
@@ -972,8 +1577,10 @@ declare class KptFieldset {
972
1577
  readonly legend: _angular_core.InputSignal<string>;
973
1578
  readonly toggleable: _angular_core.InputSignalWithTransform<boolean, unknown>;
974
1579
  readonly collapsed: _angular_core.ModelSignal<boolean>;
1580
+ readonly animated: _angular_core.InputSignalWithTransform<boolean, unknown>;
1581
+ readonly animationDuration: _angular_core.InputSignal<number>;
975
1582
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptFieldset, never>;
976
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptFieldset, "kpt-fieldset", never, { "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["*"], true, never>;
1583
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptFieldset, "kpt-fieldset", never, { "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["*"], true, never>;
977
1584
  }
978
1585
 
979
1586
  type KptSplitterOrientation = 'horizontal' | 'vertical';
@@ -1011,6 +1618,7 @@ declare class KptSplitter {
1011
1618
  declare class KptScrollTop {
1012
1619
  readonly threshold: _angular_core.InputSignal<number>;
1013
1620
  readonly target: _angular_core.InputSignal<string | null>;
1621
+ protected readonly i18n: KptI18n;
1014
1622
  protected readonly visible: _angular_core.WritableSignal<boolean>;
1015
1623
  private scroller;
1016
1624
  constructor();
@@ -1031,6 +1639,7 @@ declare class KptImage {
1031
1639
  readonly alt: _angular_core.InputSignal<string>;
1032
1640
  readonly width: _angular_core.InputSignal<string | null>;
1033
1641
  readonly preview: _angular_core.InputSignalWithTransform<boolean, unknown>;
1642
+ protected readonly i18n: KptI18n;
1034
1643
  protected readonly open: _angular_core.WritableSignal<boolean>;
1035
1644
  protected openPreview(): void;
1036
1645
  protected close(): void;
@@ -1127,10 +1736,19 @@ declare class KptTab {
1127
1736
  declare class KptTabs {
1128
1737
  protected readonly tabs: _angular_core.Signal<readonly KptTab[]>;
1129
1738
  readonly activeIndex: _angular_core.ModelSignal<number>;
1739
+ readonly animated: _angular_core.InputSignalWithTransform<boolean, unknown>;
1740
+ readonly animationDuration: _angular_core.InputSignal<number>;
1741
+ private readonly tabBtns;
1742
+ protected readonly inkX: _angular_core.WritableSignal<number>;
1743
+ protected readonly inkW: _angular_core.WritableSignal<number>;
1744
+ protected readonly direction: _angular_core.WritableSignal<number>;
1130
1745
  protected readonly activeTab: _angular_core.Signal<KptTab>;
1746
+ protected readonly activePanels: _angular_core.Signal<KptTab[]>;
1747
+ constructor();
1748
+ protected measureInk(): void;
1131
1749
  protected select(index: number): void;
1132
1750
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptTabs, never>;
1133
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptTabs, "kpt-tabs", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; }, ["tabs"], never, true, never>;
1751
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptTabs, "kpt-tabs", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; }, ["tabs"], never, true, never>;
1134
1752
  }
1135
1753
 
1136
1754
  /**
@@ -1141,6 +1759,7 @@ declare class KptAccordionPanel {
1141
1759
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1142
1760
  readonly expanded: _angular_core.ModelSignal<boolean>;
1143
1761
  private readonly accordion;
1762
+ protected readonly animMs: _angular_core.Signal<string>;
1144
1763
  protected toggle(): void;
1145
1764
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptAccordionPanel, never>;
1146
1765
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptAccordionPanel, "kpt-accordion-panel", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*"], true, never>;
@@ -1157,11 +1776,13 @@ declare class KptAccordionPanel {
1157
1776
  */
1158
1777
  declare class KptAccordion {
1159
1778
  readonly multi: _angular_core.InputSignalWithTransform<boolean, unknown>;
1779
+ readonly animated: _angular_core.InputSignalWithTransform<boolean, unknown>;
1780
+ readonly animationDuration: _angular_core.InputSignal<number>;
1160
1781
  private readonly panels;
1161
1782
  /** Wywoływane przez panel przy otwarciu — zamyka pozostałe, gdy nie `multi`. */
1162
1783
  onOpen(opened: KptAccordionPanel): void;
1163
1784
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptAccordion, never>;
1164
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptAccordion, "kpt-accordion", never, { "multi": { "alias": "multi"; "required": false; "isSignal": true; }; }, {}, ["panels"], ["*"], true, never>;
1785
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptAccordion, "kpt-accordion", never, { "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; }, {}, ["panels"], ["*"], true, never>;
1165
1786
  }
1166
1787
 
1167
1788
  interface KptBreadcrumbItem {
@@ -1176,6 +1797,7 @@ interface KptBreadcrumbItem {
1176
1797
  */
1177
1798
  declare class KptBreadcrumb {
1178
1799
  readonly items: _angular_core.InputSignal<KptBreadcrumbItem[]>;
1800
+ protected readonly i18n: KptI18n;
1179
1801
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptBreadcrumb, never>;
1180
1802
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptBreadcrumb, "kpt-breadcrumb", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1181
1803
  }
@@ -1206,12 +1828,16 @@ declare class KptStep {
1206
1828
  declare class KptStepper {
1207
1829
  protected readonly steps: _angular_core.Signal<readonly KptStep[]>;
1208
1830
  readonly activeIndex: _angular_core.ModelSignal<number>;
1831
+ readonly animated: _angular_core.InputSignalWithTransform<boolean, unknown>;
1832
+ readonly animationDuration: _angular_core.InputSignal<number>;
1833
+ protected readonly direction: _angular_core.WritableSignal<number>;
1209
1834
  protected readonly activeStep: _angular_core.Signal<KptStep>;
1835
+ protected readonly activePanels: _angular_core.Signal<KptStep[]>;
1210
1836
  goTo(index: number): void;
1211
1837
  next(): void;
1212
1838
  prev(): void;
1213
1839
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptStepper, never>;
1214
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptStepper, "kpt-stepper", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; }, ["steps"], never, true, never>;
1840
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptStepper, "kpt-stepper", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; }, ["steps"], never, true, never>;
1215
1841
  }
1216
1842
 
1217
1843
  /**
@@ -1229,9 +1855,11 @@ declare class KptPaginator {
1229
1855
  readonly pageIndex: _angular_core.ModelSignal<number>;
1230
1856
  /** Dostępne rozmiary strony. */
1231
1857
  readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
1858
+ protected readonly i18n: KptI18n;
1232
1859
  readonly totalPages: _angular_core.Signal<number>;
1233
1860
  readonly rangeStart: _angular_core.Signal<number>;
1234
1861
  readonly rangeEnd: _angular_core.Signal<number>;
1862
+ protected readonly rangeLabel: _angular_core.Signal<string>;
1235
1863
  readonly canPrev: _angular_core.Signal<boolean>;
1236
1864
  readonly canNext: _angular_core.Signal<boolean>;
1237
1865
  constructor();
@@ -1242,6 +1870,23 @@ declare class KptPaginator {
1242
1870
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPaginator, "kpt-paginator", never, { "length": { "alias": "length"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; }, { "pageSize": "pageSizeChange"; "pageIndex": "pageIndexChange"; }, never, never, true, never>;
1243
1871
  }
1244
1872
 
1873
+ /** Rodzaj kontrolki filtra w nagłówku kolumny. */
1874
+ type KptColumnFilterType = 'text' | 'number' | 'select' | 'dateRange' | 'numberRange' | 'slider';
1875
+ interface KptColumnFilter {
1876
+ type: KptColumnFilterType;
1877
+ /** Opcje dla `type: 'select'`. */
1878
+ options?: KptOption<unknown>[];
1879
+ /** Wielokrotny wybór dla `type: 'select'`. */
1880
+ multiple?: boolean;
1881
+ /** Placeholder kontrolki. */
1882
+ placeholder?: string;
1883
+ /** Dolna granica dla `type: 'slider'` (domyślnie 0). */
1884
+ min?: number;
1885
+ /** Górna granica dla `type: 'slider'` (domyślnie 100). */
1886
+ max?: number;
1887
+ /** Krok dla `type: 'slider'` (domyślnie 1). */
1888
+ step?: number;
1889
+ }
1245
1890
  interface KptColumn {
1246
1891
  /** Nazwa pola w wierszu. */
1247
1892
  field: string;
@@ -1255,6 +1900,8 @@ interface KptColumn {
1255
1900
  width?: string;
1256
1901
  /** Zamrożenie (sticky) — obsługiwane dla wiodących, sąsiadujących kolumn. */
1257
1902
  frozen?: boolean;
1903
+ /** Filtr kolumny w wierszu nagłówka (input/number/select/zakres dat). */
1904
+ filter?: KptColumnFilter;
1258
1905
  }
1259
1906
  type SortDir = 'asc' | 'desc' | null;
1260
1907
  /** Stan przekazywany w trybie lazy przy każdej zmianie sortowania/filtra/strony. */
@@ -1264,6 +1911,8 @@ interface KptTableLazyState {
1264
1911
  sortField: string | null;
1265
1912
  sortDir: SortDir;
1266
1913
  filter: string;
1914
+ /** Wartości filtrów per kolumna (pole → wartość kontrolki). */
1915
+ columnFilters: Record<string, unknown>;
1267
1916
  }
1268
1917
  /**
1269
1918
  * Flagowa tabela danych Koncept UI: kolumny konfiguracją, sortowanie,
@@ -1282,12 +1931,15 @@ declare class KptDataTable<T = Record<string, unknown>> {
1282
1931
  readonly columns: _angular_core.InputSignal<readonly KptColumn[]>;
1283
1932
  readonly data: _angular_core.InputSignal<readonly T[]>;
1284
1933
  readonly filterable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1934
+ /** Pozycja wiersza filtrów kolumn względem etykiet: nad ('top') lub pod ('bottom'). */
1935
+ readonly filterRowPosition: _angular_core.InputSignal<"bottom" | "top">;
1285
1936
  /** Rozmiar strony; 0 wyłącza paginację. */
1286
1937
  readonly pageSize: _angular_core.InputSignal<number>;
1287
1938
  readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
1288
1939
  readonly selectable: _angular_core.InputSignal<"none" | "single" | "multiple">;
1289
1940
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1290
- readonly emptyMessage: _angular_core.InputSignal<string>;
1941
+ /** Komunikat pustej tabeli; bez wartości używa i18n (`dataTable.empty`). */
1942
+ readonly emptyMessage: _angular_core.InputSignal<string | undefined>;
1291
1943
  /** Pole identyfikujące wiersz (dla zaznaczania). Bez niego — porównanie po referencji. */
1292
1944
  readonly rowKey: _angular_core.InputSignal<string | null>;
1293
1945
  /** Wysokość przewijalnego obszaru (np. '400px'); sticky header pozostaje widoczny. */
@@ -1306,16 +1958,27 @@ declare class KptDataTable<T = Record<string, unknown>> {
1306
1958
  readonly lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
1307
1959
  /** Łączna liczba rekordów (wymagane w trybie lazy dla paginacji). */
1308
1960
  readonly totalRecords: _angular_core.InputSignal<number | null>;
1961
+ /** Rozwijane wiersze: dodaje kolumnę z przełącznikiem i renderuje szablon `kptRowDetail`. */
1962
+ readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1963
+ /** Zezwala na rozwinięcie wielu wierszy naraz (domyślnie tak). */
1964
+ readonly multiExpand: _angular_core.InputSignalWithTransform<boolean, unknown>;
1309
1965
  readonly selection: _angular_core.ModelSignal<T[]>;
1966
+ /** Rozwinięte wiersze (dwukierunkowo). */
1967
+ readonly expandedRows: _angular_core.ModelSignal<T[]>;
1310
1968
  readonly rowClick: _angular_core.OutputEmitterRef<T>;
1311
1969
  /** Emitowane w trybie lazy przy zmianie sortowania/filtra/strony. */
1312
1970
  readonly lazyLoad: _angular_core.OutputEmitterRef<KptTableLazyState>;
1971
+ protected readonly i18n: KptI18n;
1972
+ /** Komunikat pustej tabeli (input albo domyślny z i18n). */
1973
+ protected readonly emptyText: _angular_core.Signal<string>;
1313
1974
  /** Kolumny w bieżącej kolejności (po ewentualnym przestawieniu). */
1314
1975
  protected readonly orderedColumns: _angular_core.WritableSignal<readonly KptColumn[]>;
1315
1976
  private readonly scrollEl;
1316
1977
  protected readonly scrollTop: _angular_core.WritableSignal<number>;
1317
1978
  protected readonly viewportHeight: _angular_core.WritableSignal<number>;
1318
1979
  private readonly buffer;
1980
+ private readonly theadEl;
1981
+ protected readonly theadOffset: _angular_core.WritableSignal<number>;
1319
1982
  constructor();
1320
1983
  protected onScroll(event: Event): void;
1321
1984
  protected readonly virtualStart: _angular_core.Signal<number>;
@@ -1324,19 +1987,45 @@ declare class KptDataTable<T = Record<string, unknown>> {
1324
1987
  protected readonly topPad: _angular_core.Signal<number>;
1325
1988
  protected readonly bottomPad: _angular_core.Signal<number>;
1326
1989
  protected readonly dragIndex: _angular_core.WritableSignal<number | null>;
1990
+ /** Kolumna przeciągalna tylko gdy `reorderable` i nie jest zamrożona (frozen musi zostać wiodąca). */
1991
+ protected isColDraggable(col: KptColumn): boolean;
1992
+ /** Liczba wiodących kolumn zamrożonych — poza nie wolno upuszczać ani ich przesuwać. */
1993
+ private frozenLeadCount;
1327
1994
  protected onColDragStart(index: number, event: DragEvent): void;
1328
- protected onColDragOver(event: DragEvent): void;
1995
+ protected onColDragOver(index: number, event: DragEvent): void;
1329
1996
  protected onColDrop(index: number, event: DragEvent): void;
1330
1997
  protected onColDragEnd(): void;
1331
1998
  exportCsv(): void;
1332
1999
  private readonly cellDefs;
1333
2000
  private readonly cellMap;
1334
2001
  protected cellTemplate(field: string): TemplateRef<unknown> | null;
2002
+ private readonly rowDetailDef;
2003
+ protected readonly rowDetailTpl: _angular_core.Signal<TemplateRef<any> | null>;
2004
+ /** Kolumna z przełącznikiem widoczna, gdy włączono `expandable` i podano szablon `kptRowDetail`. */
2005
+ protected readonly hasRowDetail: _angular_core.Signal<boolean>;
2006
+ protected isExpanded(row: T): boolean;
2007
+ protected toggleExpand(row: T): void;
1335
2008
  protected readonly filterText: _angular_core.WritableSignal<string>;
2009
+ protected readonly columnFilters: _angular_core.WritableSignal<Record<string, unknown>>;
1336
2010
  protected readonly sortField: _angular_core.WritableSignal<string | null>;
1337
2011
  protected readonly sortDir: _angular_core.WritableSignal<SortDir>;
1338
2012
  protected readonly pageIndex: _angular_core.WritableSignal<number>;
1339
2013
  protected readonly pageSizeState: _angular_core.WritableSignal<number>;
2014
+ protected readonly hasColumnFilters: _angular_core.Signal<boolean>;
2015
+ protected setColumnFilter(field: string, value: unknown): void;
2016
+ /** Input liczbowy — pozostaw tylko cyfry i zsynchronizuj DOM z wartością. */
2017
+ protected onNumberFilter(field: string, event: Event): void;
2018
+ /** Bieżąca wartość filtra zakresu liczbowego (min/max) dla kolumny. */
2019
+ protected rangeVal(field: string): {
2020
+ min: string;
2021
+ max: string;
2022
+ };
2023
+ /** Aktualizuj jedną granicę zakresu (min/max), pozostawiając tylko cyfry. */
2024
+ protected setRangeFilter(field: string, bound: 'min' | 'max', event: Event): void;
2025
+ /** Bieżąca para `[lo, hi]` filtra suwakowego dla kolumny (domyślnie pełen zakres). */
2026
+ protected sliderVal(col: KptColumn): [number, number];
2027
+ private static toIso;
2028
+ private matchesColumnFilters;
1340
2029
  private readonly filtered;
1341
2030
  private readonly sorted;
1342
2031
  protected readonly filteredCount: _angular_core.Signal<number>;
@@ -1345,8 +2034,14 @@ declare class KptDataTable<T = Record<string, unknown>> {
1345
2034
  protected readonly displayCount: _angular_core.Signal<number>;
1346
2035
  private parseWidthPx;
1347
2036
  /** Mapa pole → przesunięcie left (px) dla wiodących zamrożonych kolumn. */
2037
+ /** Suma szerokości wiodących kolumn systemowych (rozwijanie + zaznaczanie) w px. */
2038
+ private readonly leadingStickyWidth;
1348
2039
  private readonly frozenOffsets;
1349
2040
  protected readonly hasFrozen: _angular_core.Signal<boolean>;
2041
+ /** Sticky-left kolumny rozwijania (px) — 0, gdy tabela ma kolumny zamrożone. */
2042
+ protected readonly expanderStickyLeft: _angular_core.Signal<0 | null>;
2043
+ /** Sticky-left kolumny zaznaczania (px) — za kolumną rozwijania, jeśli obecna. */
2044
+ protected readonly checkboxStickyLeft: _angular_core.Signal<number | null>;
1350
2045
  protected frozenLeft(field: string): number | null;
1351
2046
  protected isFrozen(field: string): boolean;
1352
2047
  protected toggleSort(col: KptColumn): void;
@@ -1357,12 +2052,13 @@ declare class KptDataTable<T = Record<string, unknown>> {
1357
2052
  protected isSelected(row: T): boolean;
1358
2053
  protected toggleRow(row: T): void;
1359
2054
  protected readonly pageAllSelected: _angular_core.Signal<boolean>;
2055
+ protected readonly pageSomeSelected: _angular_core.Signal<boolean>;
1360
2056
  protected toggleAllOnPage(): void;
1361
2057
  protected onRowClick(row: T): void;
1362
2058
  protected getValue(row: T, field: string): unknown;
1363
2059
  protected trackRow: (row: T) => unknown;
1364
2060
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDataTable<any>, never>;
1365
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDataTable<any>, "kpt-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "rowClick": "rowClick"; "lazyLoad": "lazyLoad"; }, ["cellDefs"], never, true, never>;
2061
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDataTable<any>, "kpt-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterRowPosition": { "alias": "filterRowPosition"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "multiExpand": { "alias": "multiExpand"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "expandedRows": { "alias": "expandedRows"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "expandedRows": "expandedRowsChange"; "rowClick": "rowClick"; "lazyLoad": "lazyLoad"; }, ["cellDefs", "rowDetailDef"], never, true, never>;
1366
2062
  }
1367
2063
 
1368
2064
  /**
@@ -1384,6 +2080,23 @@ declare class KptCellDef {
1384
2080
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptCellDef, "ng-template[kptCell]", never, { "kptCell": { "alias": "kptCell"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1385
2081
  }
1386
2082
 
2083
+ /**
2084
+ * Szablon rozwijanego wiersza (row detail) dla `kpt-data-table`. Renderowany pod
2085
+ * wierszem po rozwinięciu. Kontekst: `$implicit` = wiersz. Wymaga `expandable`.
2086
+ *
2087
+ * @example
2088
+ * <kpt-data-table [columns]="cols" [data]="rows" expandable>
2089
+ * <ng-template kptRowDetail let-row>
2090
+ * <div class="szczegoly">{{ row.opis }}</div>
2091
+ * </ng-template>
2092
+ * </kpt-data-table>
2093
+ */
2094
+ declare class KptRowDetailDef {
2095
+ readonly template: TemplateRef<any>;
2096
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptRowDetailDef, never>;
2097
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptRowDetailDef, "ng-template[kptRowDetail]", never, {}, {}, never, never, true, never>;
2098
+ }
2099
+
1387
2100
  interface KptTreeNode<T = unknown> {
1388
2101
  label: string;
1389
2102
  value?: T;
@@ -1443,6 +2156,7 @@ declare class KptTimeline {
1443
2156
  declare class KptCarousel<T = unknown> {
1444
2157
  readonly items: _angular_core.InputSignal<T[]>;
1445
2158
  readonly activeIndex: _angular_core.ModelSignal<number>;
2159
+ protected readonly i18n: KptI18n;
1446
2160
  protected readonly slideTpl: _angular_core.Signal<TemplateRef<any>>;
1447
2161
  next(): void;
1448
2162
  prev(): void;
@@ -1465,6 +2179,7 @@ declare class KptDataView<T = unknown> {
1465
2179
  readonly layout: _angular_core.ModelSignal<"list" | "grid">;
1466
2180
  readonly pageSize: _angular_core.InputSignal<number>;
1467
2181
  readonly paginated: _angular_core.InputSignalWithTransform<boolean, unknown>;
2182
+ protected readonly i18n: KptI18n;
1468
2183
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
1469
2184
  protected readonly pageIndex: _angular_core.ModelSignal<number>;
1470
2185
  protected readonly showPager: _angular_core.Signal<boolean>;
@@ -1485,9 +2200,14 @@ declare class KptDataView<T = unknown> {
1485
2200
  declare class KptPickList<T = unknown> {
1486
2201
  readonly source: _angular_core.ModelSignal<T[]>;
1487
2202
  readonly target: _angular_core.ModelSignal<T[]>;
1488
- readonly sourceHeader: _angular_core.InputSignal<string>;
1489
- readonly targetHeader: _angular_core.InputSignal<string>;
2203
+ /** Nagłówek listy źródłowej; bez wartości używa i18n (`pickList.available`). */
2204
+ readonly sourceHeader: _angular_core.InputSignal<string | undefined>;
2205
+ /** Nagłówek listy docelowej; bez wartości używa i18n (`pickList.selected`). */
2206
+ readonly targetHeader: _angular_core.InputSignal<string | undefined>;
1490
2207
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2208
+ protected readonly i18n: KptI18n;
2209
+ protected readonly effectiveSourceHeader: _angular_core.Signal<string>;
2210
+ protected readonly effectiveTargetHeader: _angular_core.Signal<string>;
1491
2211
  protected readonly selSource: _angular_core.WritableSignal<Set<T>>;
1492
2212
  protected readonly selTarget: _angular_core.WritableSignal<Set<T>>;
1493
2213
  protected toggle(side: 'source' | 'target', item: T): void;
@@ -1508,6 +2228,7 @@ declare class KptPickList<T = unknown> {
1508
2228
  declare class KptOrderList<T = unknown> {
1509
2229
  readonly items: _angular_core.ModelSignal<T[]>;
1510
2230
  readonly header: _angular_core.InputSignal<string>;
2231
+ protected readonly i18n: KptI18n;
1511
2232
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
1512
2233
  protected readonly selected: _angular_core.WritableSignal<number | null>;
1513
2234
  protected moveSelected(dir: -1 | 1): void;
@@ -1530,6 +2251,7 @@ declare class KptGalleria {
1530
2251
  readonly items: _angular_core.InputSignal<KptGalleriaItem[]>;
1531
2252
  readonly activeIndex: _angular_core.ModelSignal<number>;
1532
2253
  readonly showThumbnails: _angular_core.InputSignalWithTransform<boolean, unknown>;
2254
+ protected readonly i18n: KptI18n;
1533
2255
  protected readonly current: _angular_core.Signal<KptGalleriaItem>;
1534
2256
  protected next(): void;
1535
2257
  protected prev(): void;
@@ -1549,6 +2271,7 @@ declare class KptAlert {
1549
2271
  readonly title: _angular_core.InputSignal<string>;
1550
2272
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1551
2273
  readonly closed: _angular_core.OutputEmitterRef<void>;
2274
+ protected readonly i18n: KptI18n;
1552
2275
  protected readonly visible: _angular_core.WritableSignal<boolean>;
1553
2276
  protected iconName(): KptIconName;
1554
2277
  protected dismiss(): void;
@@ -1575,6 +2298,7 @@ declare class KptDialog {
1575
2298
  readonly header: _angular_core.InputSignal<string>;
1576
2299
  /** Pozwala zamknąć klawiszem Esc / przyciskiem ×. */
1577
2300
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
2301
+ protected readonly i18n: KptI18n;
1578
2302
  private readonly dialogRef;
1579
2303
  constructor();
1580
2304
  protected onCancel(event: Event): void;
@@ -1616,6 +2340,7 @@ declare class KptToastService {
1616
2340
  */
1617
2341
  declare class KptToastContainer {
1618
2342
  private readonly service;
2343
+ protected readonly i18n: KptI18n;
1619
2344
  protected readonly toasts: _angular_core.Signal<_konce_pt_angular.KptToast[]>;
1620
2345
  protected dismiss(id: number): void;
1621
2346
  protected icon(variant: KptAlertVariant): KptIconName;
@@ -1708,6 +2433,7 @@ declare class KptDrawer {
1708
2433
  readonly header: _angular_core.InputSignal<string>;
1709
2434
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1710
2435
  readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2436
+ protected readonly i18n: KptI18n;
1711
2437
  protected onBackdrop(): void;
1712
2438
  protected close(): void;
1713
2439
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDrawer, never>;
@@ -1737,6 +2463,9 @@ declare class KptContextMenu<T = unknown> {
1737
2463
 
1738
2464
  /**
1739
2465
  * Pozioma belka menu z rozwijanymi pod-menu. Pozycje bez `items` działają jak akcje/linki.
2466
+ * Pod-menu renderowane przez CDK Overlay (doczepiane do `body`), więc nie są przycinane
2467
+ * przez rodzica z `overflow: hidden`. Wymaga stylów overlay CDK:
2468
+ * `import '@angular/cdk/overlay-prebuilt.css';`
1740
2469
  *
1741
2470
  * @example
1742
2471
  * <kpt-menubar [items]="items" (select)="onSelect($event)" />
@@ -1745,6 +2474,7 @@ declare class KptMenubar<T = unknown> {
1745
2474
  readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
1746
2475
  readonly select: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
1747
2476
  protected readonly openIndex: _angular_core.WritableSignal<number | null>;
2477
+ protected readonly positions: ConnectedPosition[];
1748
2478
  protected toggle(i: number, item: KptMenuItem<T>): void;
1749
2479
  protected pick(item: KptMenuItem<T>): void;
1750
2480
  protected closeAll(): void;
@@ -1755,6 +2485,9 @@ declare class KptMenubar<T = unknown> {
1755
2485
  /**
1756
2486
  * Mega-menu — pozioma belka z szerokim, wielokolumnowym panelem.
1757
2487
  * Struktura: pozycja górna → `items` (kolumny) → każda kolumna `items` (odnośniki).
2488
+ * Panel renderowany przez CDK Overlay (doczepiony do `body`), więc nie jest przycinany
2489
+ * przez rodzica z `overflow: hidden`. Wymaga stylów overlay CDK:
2490
+ * `import '@angular/cdk/overlay-prebuilt.css';`
1758
2491
  *
1759
2492
  * @example
1760
2493
  * <kpt-megamenu [items]="items" (select)="onSelect($event)" />
@@ -1763,6 +2496,7 @@ declare class KptMegamenu<T = unknown> {
1763
2496
  readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
1764
2497
  readonly select: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
1765
2498
  protected readonly openIndex: _angular_core.WritableSignal<number | null>;
2499
+ protected readonly positions: ConnectedPosition[];
1766
2500
  protected activeColumns(): KptMenuItem<T>[];
1767
2501
  protected toggle(i: number): void;
1768
2502
  protected pick(link: KptMenuItem<T>): void;
@@ -1807,6 +2541,7 @@ declare class KptConfirmService {
1807
2541
  * Umieść raz w aplikacji (np. obok `<kpt-toast-container />`).
1808
2542
  */
1809
2543
  declare class KptConfirmContainer {
2544
+ protected readonly i18n: KptI18n;
1810
2545
  protected readonly service: KptConfirmService;
1811
2546
  protected readonly req: _angular_core.Signal<_konce_pt_angular.KptConfirmRequest | null>;
1812
2547
  protected readonly isOpen: _angular_core.Signal<boolean>;
@@ -1827,6 +2562,7 @@ declare class KptBottomSheet {
1827
2562
  readonly open: _angular_core.ModelSignal<boolean>;
1828
2563
  readonly header: _angular_core.InputSignal<string>;
1829
2564
  readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2565
+ protected readonly i18n: KptI18n;
1830
2566
  protected onBackdrop(): void;
1831
2567
  protected close(): void;
1832
2568
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptBottomSheet, never>;
@@ -1844,8 +2580,11 @@ declare class KptSpeedDial<T = unknown> {
1844
2580
  readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
1845
2581
  readonly direction: _angular_core.InputSignal<KptSpeedDialDirection>;
1846
2582
  readonly icon: _angular_core.InputSignal<string>;
1847
- readonly ariaLabel: _angular_core.InputSignal<string>;
2583
+ /** Etykieta a11y FAB (stan zamknięty); bez wartości używa i18n (`speedDial.actions`). */
2584
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1848
2585
  readonly select: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
2586
+ protected readonly i18n: KptI18n;
2587
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
1849
2588
  protected readonly open: _angular_core.WritableSignal<boolean>;
1850
2589
  protected toggle(): void;
1851
2590
  protected close(): void;
@@ -1854,5 +2593,5 @@ declare class KptSpeedDial<T = unknown> {
1854
2593
  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>;
1855
2594
  }
1856
2595
 
1857
- export { KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBadge, KptBottomSheet, KptBreadcrumb, KptButton, KptButtonGroup, KptCard, KptCarousel, KptCellDef, KptCheckbox, KptChip, KptChipsInput, KptColorPicker, KptConfirmContainer, KptConfirmService, KptContextMenu, KptDataTable, KptDataView, KptDateRange, KptDatepicker, KptDialog, KptDivider, KptDrawer, KptEmpty, KptFab, KptFieldset, KptFileUpload, KptFormField, KptGalleria, KptIcon, KptIconButton, KptIconRegistry, KptImage, KptInput, KptInputMask, KptInputNumber, KptInputOtp, KptKnob, KptListbox, KptMegamenu, KptMenu, KptMenubar, KptMeterGroup, KptOrderList, KptPaginator, KptPanel, KptPassword, KptPickList, KptPopover, KptProgress, KptRadioGroup, KptRating, KptRichText, KptScrollTop, KptSelect, KptSidenav, KptSkeleton, KptSlider, KptSpeedDial, KptSpinner, KptSplitButton, KptSplitter, KptStep, KptStepper, KptSwitch, KptTab, KptTabs, KptTextarea, KptTimeline, KptToastContainer, KptToastService, KptToolbar, KptTooltip, KptTree };
1858
- export type { KptAlertVariant, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeVariant, KptBreadcrumbItem, KptButtonSize, KptButtonVariant, KptCardVariant, KptChipVariant, KptColumn, KptConfirmOptions, KptConfirmRequest, KptDateRangeValue, KptDividerOrientation, KptDrawerPosition, KptGalleriaItem, KptIconName, KptInputType, KptMenuItem, KptMeterItem, KptOption, KptProgressVariant, KptRichTool, KptSidenavMode, KptSkeletonVariant, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
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 };