@konce-pt/angular 0.8.1 → 0.8.2

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@konce-pt/angular",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "description": "Open-source Angular 22 component library on Signals & Signal Forms — 70+ components, rich data table, zoneless, fully tokenized. Selektory kpt-*, klasy Kpt*.",
5
5
  "license": "MIT",
6
6
  "author": "konce.pt",
@@ -46,13 +46,13 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "tslib": "^2.3.0",
49
- "@konce-pt/chart": "0.8.1",
50
- "@konce-pt/i18n": "0.8.1",
51
- "@konce-pt/datetime": "0.8.1",
52
- "@konce-pt/map": "0.8.1",
53
- "@konce-pt/table": "0.8.1",
54
- "@konce-pt/roadmap": "0.8.1",
55
- "@konce-pt/icons": "0.8.1"
49
+ "@konce-pt/i18n": "0.8.2",
50
+ "@konce-pt/table": "0.8.2",
51
+ "@konce-pt/chart": "0.8.2",
52
+ "@konce-pt/datetime": "0.8.2",
53
+ "@konce-pt/map": "0.8.2",
54
+ "@konce-pt/icons": "0.8.2",
55
+ "@konce-pt/roadmap": "0.8.2"
56
56
  },
57
57
  "module": "fesm2022/konce-pt-angular.mjs",
58
58
  "typings": "types/konce-pt-angular.d.ts",
@@ -54,6 +54,12 @@ Keeping them apart means the desktop intent survives narrowing and widening the
54
54
  The `kptShellNavToggle` button hits the right state on its own — do not write `navOpen.set(...)` by hand,
55
55
  because on a narrow screen you would be setting the wrong model.
56
56
 
57
+ It also supplies `aria-expanded`, `aria-controls` and `aria-label`, and it puts them where a screen
58
+ reader can use them. On a native `<button>`/`<a>` host that is the host itself. On a wrapping
59
+ component such as `kpt-icon-button` the attributes go down to the inner `<button>` instead — placing
60
+ state attributes on a roleless wrapper would violate `aria-allowed-attr`. In that case the label
61
+ stays with the component (`ariaLabel`), which the directive does not overwrite.
62
+
57
63
  ## The menu content convention (needed only for the rail)
58
64
  - `[kptNavLabel]` — the entry's text; in the rail it is hidden with the "visually hidden" technique, so the entry
59
65
  keeps an accessible name for a screen reader.
@@ -15,6 +15,12 @@ Import: `import { KptCard } from '@konce-pt/angular';`
15
15
  - the default content → the card body
16
16
  - an element carrying the `kptCardFooter` attribute (a direct child of `kpt-card`) → the footer
17
17
 
18
+ `kptCardFooter` must be a DIRECT child. Angular's content projection matches direct children only,
19
+ so a footer nested inside a `<form>` (or any other wrapper) inside the card is never projected into
20
+ the footer slot — it falls into the body instead, picking up the body's padding. Nothing warns about
21
+ it, and the footer's own styling still applies, which makes the symptom read as a spacing bug rather
22
+ than a placement one. Put the wrapper inside the footer, not the footer inside the wrapper.
23
+
18
24
  ## Reusable layout classes (media / profile)
19
25
  - `kpt-card__media` — a full-width image (clipped to the radius; set `aspect-ratio`/`height` inline)
20
26
  - `kpt-card__lead` — the header row (avatar + titles), with padding
@@ -7,22 +7,50 @@ the color from `currentColor`. Import: `import { KptIcon } from '@konce-pt/angul
7
7
  `kpt-icon`
8
8
 
9
9
  ## Inputs
10
- - `name`: KptIconName (required) — an icon name from the registry
10
+ - `name`: string (required) — an icon name from the registry. Deliberately not a union of the
11
+ built-in names: once the Tabler set is registered there are 5130 legal names, so a closed
12
+ union would reject icons that work at runtime.
11
13
  - `size`: string (optional, e.g. '1.25rem') — otherwise inherited from font-size
12
14
 
13
- ## Available names (built in)
14
- menu, x, chevron-up, chevron-down, chevron-left, chevron-right, check, search,
15
- grip-vertical, info, alert-triangle, circle-check, circle-x, calendar, copy, link, code,
16
- star, phone, map-pin, world, clock, align-left, align-center, align-right, align-justified,
17
- palette, highlight, clipboard, clipboard-text, table, mail, share, external-link, crosshair
18
- (the full list lives in `icons.ts`).
15
+ ## Available names (built in, no configuration)
16
+ menu, x, chevron-up, chevron-down, chevron-left, chevron-right, check, search
17
+ grip-vertical, info, alert-triangle, circle-check, circle-x, calendar, copy, link, code
18
+ bold, italic, underline, strikethrough, list, list-numbers, indent-increase
19
+ indent-decrease, clear-formatting, star, plus, upload, dots-vertical, photo, trash, pencil
20
+ eye, eye-off, minus, arrow-up, arrow-down, zoom-in, info-circle, phone, map-pin, world
21
+ clock, align-left, align-center, align-right, align-justified, palette, highlight
22
+ clipboard, clipboard-text, table, mail, share, external-link, crosshair
23
+ adjustments-horizontal, sun, moon, bell, settings, users, user-circle, logout, login
24
+ layout-dashboard, home, activity, cube, shopping-cart, currency-dollar, arrow-left
25
+ arrow-right, arrow-up-right, arrow-down-right, chart-bar, chart-line, filter, download
26
+ refresh, dots, brand-github, brand-google
27
+
28
+ These cover both what the components themselves draw and the staples of an application shell
29
+ (theme, notifications, account, navigation, KPI). A typical admin panel needs nothing else.
19
30
 
20
31
  ## The full set (5130 Tabler icons)
21
- An optional entry point `@konce-pt/angular/icons` (downloaded only when imported):
32
+ Two paths, and the difference is the bundle. `@konce-pt/angular/icons` exposes every icon as its own export,
33
+ so importing by name lets the bundler keep only what you used:
34
+
35
+ // Production: two icons reach the bundle.
36
+ import { LayoutDashboard, Rocket } from '@konce-pt/angular/icons';
37
+ import { provideKptIcons } from '@konce-pt/angular';
38
+
39
+ bootstrapApplication(App, { providers: [provideKptIcons([LayoutDashboard, Rocket])] });
22
40
 
41
+ // Prototype: every icon, about 1.2 MB.
23
42
  import { provideKptTablerIcons } from '@konce-pt/angular/icons';
43
+
24
44
  bootstrapApplication(App, { providers: [provideKptTablerIcons()] });
25
- // then: <kpt-icon name="rocket" />, <kpt-icon name="arrow-left" /> …
45
+
46
+ `provideKptIcons` lives in the core entry point on purpose: `@konce-pt/angular/icons` imports the whole set
47
+ statically, so a subset parameter there could not shrink anything. Passing the namespace object
48
+ (`import * as tabler`) also registers everything — a namespace handed to a function blocks static
49
+ analysis, so it is the explicit form of the prototype path, not a smaller one.
50
+
51
+ Export names are PascalCase because `kebab-case` is not a legal identifier and camelCase would
52
+ collide with keywords (`function`, `package`, `switch`). Each icon carries its own registry name,
53
+ so `BrandHtml5` registers as `brand-html5`.
26
54
 
27
55
  You can also register your own through `KptIconRegistry.register({ name: 'inner svg' })` — the content is
28
56
  sanitized down to an allowlist of SVG geometry (`path`/`circle`/`rect`/`g`/`line`/`polygon`/`polyline`/
@@ -5,7 +5,10 @@ Requires `import '@angular/cdk/overlay-prebuilt.css';`
5
5
  Import: `import { KptMenu, KptMenuItem } from '@konce-pt/angular';`
6
6
 
7
7
  ## Inputs / outputs
8
- - `items`: KptMenuItem[]
8
+ - `items`: readonly KptMenuItem[]
9
+ - `open`: model<boolean> (default false) — two-way; the panel's open state. Public so the
10
+ application can own it: closing the menu after navigation, or opening it from a keyboard
11
+ shortcut, cannot be expressed through `(selected)` alone.
9
12
  - `selected`: output<KptMenuItem> — emitted only for regular entries (not for headers)
10
13
 
11
14
  ## KptMenuItem
@@ -44,3 +47,8 @@ descriptions and icons `--kpt-color-on-surface-muted`, `--kpt-font-size-xs`.
44
47
  The panel is `role="menu"`, entries are `role="menuitem"` (native `<button>` elements — keyboard support with no
45
48
  extra code). The header sits outside keyboard navigation. The badge value becomes part of the entry's accessible
46
49
  name ("Notifications 4").
50
+
51
+ The trigger gets `aria-haspopup="menu"` and a live `aria-expanded`. They are placed on the
52
+ interactive control INSIDE the slot (the projected `<button>`/`<a>`), never on the
53
+ `.kpt-menu__trigger` wrapper — giving that wrapper a role would create a nested control and a second
54
+ tab stop, and state attributes on a roleless element violate `aria-allowed-attr`.
@@ -9,7 +9,11 @@ A paginator driven by signals. Import: `import { KptPaginator } from '@konce-pt/
9
9
  - `length`: number (required) — the total number of items
10
10
  - `pageSize`: model<number> (default 10) — two-way
11
11
  - `pageIndex`: model<number> from 0 (default 0) — two-way
12
- - `pageSizeOptions`: number[] (default [5,10,20,50])
12
+ - `pageSizeOptions`: readonly number[] (default [5,10,20,50])
13
+
14
+ The select always offers the current `pageSize` even when it is absent from this list: without
15
+ that, `pageSize={8}` against the defaults left no matching option, so the control displayed the
16
+ first entry while the table paged by eight.
13
17
 
14
18
  ## Example
15
19
  <kpt-paginator [length]="total()" [(pageIndex)]="page" [(pageSize)]="size" />
@@ -1,15 +1,28 @@
1
- export { KPT_TABLER_ICONS, KPT_TABLER_ICON_NAMES } from '@konce-pt/icons/tabler';
1
+ export * from '@konce-pt/icons/tabler';
2
2
  import { EnvironmentProviders } from '@angular/core';
3
3
 
4
4
  /**
5
5
  * Rejestruje pełny zestaw Tabler Icons (5130) w `KptIconRegistry`, dzięki czemu
6
6
  * `kpt-icon` może użyć dowolnej ikony po nazwie.
7
7
  *
8
+ * Wciąga komplet (~1,2 MB), więc to ścieżka prototypowa. W produkcji zaimportuj ikony
9
+ * po nazwie i podaj je do `provideKptIcons([...])` z rdzenia `@konce-pt/angular` — tamta
10
+ * funkcja nie importuje pełnego zestawu, więc bundler zostawia wyłącznie użyte ikony.
11
+ *
8
12
  * @example
9
- * // main.ts
13
+ * // main.ts — prototyp: wszystkie ikony
10
14
  * bootstrapApplication(App, {
11
15
  * providers: [provideKptTablerIcons()],
12
16
  * });
17
+ *
18
+ * @example
19
+ * // main.ts — produkcja: tylko to, czego używasz
20
+ * import { LayoutDashboard, Rocket } from '@konce-pt/angular/icons';
21
+ * import { provideKptIcons } from '@konce-pt/angular';
22
+ *
23
+ * bootstrapApplication(App, {
24
+ * providers: [provideKptIcons([LayoutDashboard, Rocket])],
25
+ * });
13
26
  */
14
27
  declare function provideKptTablerIcons(): EnvironmentProviders;
15
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"konce-pt-angular-icons.d.ts","sources":["../../icons/src/provider.ts"],"mappings":";;;AAIA;;;;;;;;;AASG;AACH,iBAAgB,qBAAqB,IAAI,oBAAoB;;;;","names":[]}
1
+ {"version":3,"file":"konce-pt-angular-icons.d.ts","sources":["../../icons/src/provider.ts"],"mappings":";;;AAIA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACH,iBAAgB,qBAAqB,IAAI,oBAAoB;;;;","names":[]}
@@ -1,12 +1,12 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken, EnvironmentProviders, TemplateRef, OnDestroy } from '@angular/core';
2
+ import { EnvironmentProviders, Signal, InjectionToken, TemplateRef, OnDestroy } from '@angular/core';
3
3
  import * as _angular_forms_signals from '@angular/forms/signals';
4
4
  import { FormValueControl, WithOptionalFieldTree, ValidationError, FormCheckboxControl } from '@angular/forms/signals';
5
5
  import { ConnectedPosition } from '@angular/cdk/overlay';
6
6
  import { KptLocale, KptMessages, DeepPartial, KptI18nConfig } from '@konce-pt/i18n';
7
7
  export { DeepPartial, KPT_MESSAGES_EN, KPT_MESSAGES_PL, KptI18nConfig, KptLocale, KptMessages } from '@konce-pt/i18n';
8
- import { KptIconName } from '@konce-pt/icons';
9
- export { KptIconName, renderKptIconSvg } from '@konce-pt/icons';
8
+ import { KptIconInput, KptIconName } from '@konce-pt/icons';
9
+ export { KptIconDef, KptIconInput, KptIconName, renderKptIconSvg } from '@konce-pt/icons';
10
10
  import { KptDateSelectionMode, KptCalendarView, KptDayCell, KptGridCell, KptClockMark, KptDateRangeValue, KptDateRangeMode, KptMonthPanel, KptRangeDayCell } from '@konce-pt/datetime';
11
11
  export { KptDateRangeValue } from '@konce-pt/datetime';
12
12
  import { KptColumnFilter, KptColumnSummary } from '@konce-pt/table';
@@ -84,7 +84,7 @@ interface KptOption<T = unknown> {
84
84
  * <kpt-button-group [formField]="f.period" [options]="periods" />
85
85
  */
86
86
  declare class KptButtonGroup<T = unknown> implements FormValueControl<T> {
87
- readonly options: _angular_core.InputSignal<KptOption<T>[]>;
87
+ readonly options: _angular_core.InputSignal<readonly KptOption<T>[]>;
88
88
  readonly value: _angular_core.ModelSignal<T>;
89
89
  readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
90
90
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -202,7 +202,7 @@ interface KptMenuItem<T = unknown> {
202
202
  danger?: boolean;
203
203
  separator?: boolean;
204
204
  /** Pozycje podrzędne (menubar / megamenu). */
205
- items?: KptMenuItem<T>[];
205
+ items?: readonly KptMenuItem<T>[];
206
206
  /** Adres odnośnika (menubar / megamenu). */
207
207
  url?: string;
208
208
  }
@@ -216,15 +216,22 @@ interface KptMenuItem<T = unknown> {
216
216
  * </kpt-menu>
217
217
  */
218
218
  declare class KptMenu<T = unknown> {
219
- readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
219
+ readonly items: _angular_core.InputSignal<readonly KptMenuItem<T>[]>;
220
220
  readonly selected: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
221
- protected readonly open: _angular_core.WritableSignal<boolean>;
221
+ /**
222
+ * Czy panel jest otwarty (dwukierunkowe). Publiczne, bo aplikacja bywa właścicielem tego
223
+ * stanu — zamknięcie menu po nawigacji albo otwarcie go skrótem klawiaturowym nie da się
224
+ * wyrazić przez samo `(selected)`. Port React ma tu `open`/`defaultOpen`/`onOpenChange`.
225
+ */
226
+ readonly open: _angular_core.ModelSignal<boolean>;
227
+ private readonly host;
222
228
  protected readonly positions: ConnectedPosition[];
229
+ constructor();
223
230
  protected toggle(): void;
224
231
  protected close(): void;
225
232
  protected pick(item: KptMenuItem<T>): void;
226
233
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptMenu<any>, never>;
227
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptMenu<any>, "kpt-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, ["*"], true, never>;
234
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptMenu<any>, "kpt-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "selected": "selected"; "open": "openChange"; }, never, ["*"], true, never>;
228
235
  }
229
236
 
230
237
  /**
@@ -236,7 +243,7 @@ declare class KptMenu<T = unknown> {
236
243
  */
237
244
  declare class KptSplitButton<T = unknown> {
238
245
  readonly variant: _angular_core.InputSignal<KptButtonVariant>;
239
- readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
246
+ readonly items: _angular_core.InputSignal<readonly KptMenuItem<T>[]>;
240
247
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
241
248
  readonly primaryClick: _angular_core.OutputEmitterRef<void>;
242
249
  readonly selected: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
@@ -281,14 +288,16 @@ declare class KptIconRegistry {
281
288
  /** Rośnie po każdej rejestracji — pozwala `kpt-icon` reagować na późne dodanie ikon. */
282
289
  readonly version: _angular_core.Signal<number>;
283
290
  /**
284
- * Rejestruje (lub nadpisuje) ikony: `{ nazwa: 'inner svg' }`.
291
+ * Rejestruje (lub nadpisuje) ikony. Przyjmuje listę definicji z subpathu Tablera
292
+ * (`[Rocket, LayoutDashboard]`), obiekt definicji (np. `import * as tabler`) albo
293
+ * mapę `{ nazwa: 'inner svg' }` — patrz [[KptIconInput]].
285
294
  *
286
295
  * Treść jest sanityzowana do allowlisty geometrii SVG (`path`/`circle`/`rect`/`g`/`line`/
287
296
  * `polygon`/`polyline`/`ellipse` i ich atrybutów kształtu/stylu) — mimo to `register()` wolno
288
297
  * wołać wyłącznie z treścią kontrolowaną przez developera (build-time), nigdy bezpośrednio
289
298
  * z danych runtime/CMS/uploadu bez własnej walidacji domenowej wyżej w stosie.
290
299
  */
291
- register(icons: Record<string, string>): void;
300
+ register(icons: KptIconInput): void;
292
301
  /** Zwraca wewnętrzny SVG ikony lub undefined. */
293
302
  get(name: string): string | undefined;
294
303
  has(name: string): boolean;
@@ -296,6 +305,26 @@ declare class KptIconRegistry {
296
305
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<KptIconRegistry>;
297
306
  }
298
307
 
308
+ /**
309
+ * Rejestruje wskazane ikony w [[KptIconRegistry]] — jedno wywołanie, jeden parametr.
310
+ *
311
+ * Stoi w rdzeniu, a nie w subpathu `@konce-pt/angular/icons`, i to jest cała różnica:
312
+ * tamten moduł importuje `KPT_TABLER_ICONS` statycznie, więc każde jego użycie wciąga
313
+ * komplet 5130 ikon (~1,2 MB). Tutaj dane przychodzą argumentem, czyli o zawartości bundla
314
+ * decyduje `import` w aplikacji — a ikony Tablera są osobnymi eksportami, więc bundler
315
+ * zostawia dokładnie te, po które sięgnięto.
316
+ *
317
+ * @example
318
+ * // Produkcja: do bundla wchodzą dwie ikony.
319
+ * import { LayoutDashboard, Rocket } from '@konce-pt/icons/tabler';
320
+ * bootstrapApplication(App, { providers: [provideKptIcons([LayoutDashboard, Rocket])] });
321
+ *
322
+ * @example
323
+ * // Własne ikony aplikacji, dotychczasowy kształt mapy.
324
+ * provideKptIcons({ logo: '<path d="…" />' });
325
+ */
326
+ declare function provideKptIcons(icons: KptIconInput): EnvironmentProviders;
327
+
299
328
  /** Nazwa breakpointa z tokenów `--kpt-breakpoint-*` (mobile-first). */
300
329
  type KptBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
301
330
  /** Progi breakpointów w pikselach — te same wartości, z których korzystają `@media` biblioteki. */
@@ -318,7 +347,7 @@ declare const KPT_BREAKPOINTS: Record<KptBreakpoint, number>;
318
347
  * readonly isDesktop = this.breakpoints.up('lg');
319
348
  */
320
349
  declare class KptBreakpointObserver {
321
- private readonly isBrowser;
350
+ private readonly canObserve;
322
351
  private readonly destroyRef;
323
352
  private readonly cache;
324
353
  /** Dowolne media query jako sygnał. */
@@ -630,7 +659,7 @@ declare class KptSwitch implements FormCheckboxControl {
630
659
  */
631
660
  declare class KptSwitchGroup<T = unknown> implements FormValueControl<unknown> {
632
661
  readonly value: _angular_core.ModelSignal<unknown>;
633
- readonly options: _angular_core.InputSignal<KptOption<T>[]>;
662
+ readonly options: _angular_core.InputSignal<readonly KptOption<T>[]>;
634
663
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
635
664
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
636
665
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -660,7 +689,7 @@ declare class KptSwitchGroup<T = unknown> implements FormValueControl<unknown> {
660
689
  */
661
690
  declare class KptRadioGroup<T = unknown> implements FormValueControl<T> {
662
691
  readonly value: _angular_core.ModelSignal<T>;
663
- readonly options: _angular_core.InputSignal<KptOption<T>[]>;
692
+ readonly options: _angular_core.InputSignal<readonly KptOption<T>[]>;
664
693
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
665
694
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
666
695
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -682,7 +711,7 @@ declare class KptRadioGroup<T = unknown> implements FormValueControl<T> {
682
711
  * <kpt-select [formField]="f.tags" [options]="tags" multiple filter placeholder="Tagi…" />
683
712
  */
684
713
  declare class KptSelect<T = unknown> implements FormValueControl<unknown>, KptFormFieldControl {
685
- readonly options: _angular_core.InputSignal<KptOption<T>[]>;
714
+ readonly options: _angular_core.InputSignal<readonly KptOption<T>[]>;
686
715
  readonly placeholder: _angular_core.InputSignal<string>;
687
716
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
688
717
  readonly filter: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -706,7 +735,7 @@ declare class KptSelect<T = unknown> implements FormValueControl<unknown>, KptFo
706
735
  constructor();
707
736
  private readonly selectedValues;
708
737
  protected readonly selectedOptions: _angular_core.Signal<KptOption<T>[]>;
709
- protected readonly filteredOptions: _angular_core.Signal<KptOption<T>[]>;
738
+ protected readonly filteredOptions: _angular_core.Signal<readonly KptOption<T>[]>;
710
739
  protected readonly singleLabel: _angular_core.Signal<string>;
711
740
  /**
712
741
  * Czy wybrano jakąkolwiek opcję. Publiczne — `kpt-form-field` czyta to przez
@@ -920,7 +949,7 @@ declare class KptTextarea implements FormValueControl<string> {
920
949
 
921
950
  type KptRichTool = 'copy' | 'paste' | 'pasteText' | 'heading' | 'bold' | 'italic' | 'underline' | 'strike' | 'ul' | 'ol' | 'indent' | 'outdent' | 'foreColor' | 'backColor' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify' | 'link' | 'table' | 'clear' | 'html';
922
951
  /** Pasek: płaska lista narzędzi lub grupy (sekcje rozdzielone separatorem). */
923
- type KptRichToolbar = KptRichTool[] | KptRichTool[][];
952
+ type KptRichToolbar = readonly KptRichTool[] | readonly (readonly KptRichTool[])[];
924
953
  /**
925
954
  * Lekki edytor tekstu sformatowanego (contenteditable) z konfigurowalnym paskiem sekcji.
926
955
  * Narzędzia: schowek (kopiuj / wklej / wklej bez formatowania), styl (nagłówki H1–H6 / paragraf),
@@ -1213,7 +1242,7 @@ declare class KptFileUpload implements FormValueControl<File[]> {
1213
1242
  */
1214
1243
  declare class KptColorPicker implements FormValueControl<string> {
1215
1244
  readonly value: _angular_core.ModelSignal<string>;
1216
- readonly presets: _angular_core.InputSignal<string[]>;
1245
+ readonly presets: _angular_core.InputSignal<readonly string[]>;
1217
1246
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1218
1247
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1219
1248
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1450,7 +1479,7 @@ declare class KptInputMask implements FormValueControl<string> {
1450
1479
  */
1451
1480
  declare class KptListbox<T = unknown> implements FormValueControl<T | T[] | null> {
1452
1481
  readonly value: _angular_core.ModelSignal<T | T[] | null>;
1453
- readonly options: _angular_core.InputSignal<KptOption<T>[]>;
1482
+ readonly options: _angular_core.InputSignal<readonly KptOption<T>[]>;
1454
1483
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
1455
1484
  readonly filter: _angular_core.InputSignalWithTransform<boolean, unknown>;
1456
1485
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1461,7 +1490,7 @@ declare class KptListbox<T = unknown> implements FormValueControl<T | T[] | null
1461
1490
  readonly touch: _angular_core.OutputEmitterRef<void>;
1462
1491
  protected readonly i18n: KptI18n;
1463
1492
  protected readonly query: _angular_core.WritableSignal<string>;
1464
- protected readonly visible: _angular_core.Signal<KptOption<T>[]>;
1493
+ protected readonly visible: _angular_core.Signal<readonly KptOption<T>[]>;
1465
1494
  protected isSelected(v: T): boolean;
1466
1495
  protected toggle(v: T): void;
1467
1496
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptListbox<any>, never>;
@@ -1685,9 +1714,11 @@ declare class KptAppShell {
1685
1714
  * przycisk obsługuje desktop i wąski ekran. Bez tej dyrektywy aplikacja musiałaby sama
1686
1715
  * wstrzyknąć `KptBreakpointObserver` i rozstrzygnąć, który z dwóch modeli przełączyć.
1687
1716
  *
1688
- * Atrybuty ARIA nakłada wyłącznie na natywny `<button>`/`<a>`. Na komponencie opakowującym
1689
- * (np. `kpt-icon-button`) trafiłyby na zewnętrzny element bez roli, co jest naruszeniem
1690
- * `aria-allowed-attr` — tam etykietę podaj samemu komponentowi.
1717
+ * Atrybuty ARIA nigdy nie lądują na hoście komponentu opakowującego — na elemencie bez roli
1718
+ * naruszałyby `aria-allowed-attr`. Na natywnym `<button>`/`<a>` nakłada je wiązanie hosta;
1719
+ * gdy hostem jest komponent (np. `kpt-icon-button`), dyrektywa schodzi z nimi na jego
1720
+ * wewnętrzną kontrolkę. Etykietę w tym drugim przypadku podaje sam komponent (`ariaLabel`),
1721
+ * więc jej tutaj nie ruszamy, żeby nie nadpisać wyboru aplikacji.
1691
1722
  *
1692
1723
  * @example
1693
1724
  * <button kptShellNavToggle type="button"><kpt-icon name="menu" /></button>
@@ -1698,10 +1729,12 @@ declare class KptShellNavToggle {
1698
1729
  readonly label: _angular_core.InputSignal<string>;
1699
1730
  protected readonly shell: KptAppShell;
1700
1731
  private readonly i18n;
1732
+ private readonly host;
1701
1733
  private readonly isNativeControl;
1702
1734
  protected readonly ariaExpanded: _angular_core.Signal<string | null>;
1703
1735
  protected readonly ariaControls: _angular_core.Signal<string | null>;
1704
1736
  protected readonly ariaLabel: _angular_core.Signal<string | null>;
1737
+ constructor();
1705
1738
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptShellNavToggle, never>;
1706
1739
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptShellNavToggle, "[kptShellNavToggle]", never, { "label": { "alias": "kptShellNavToggle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1707
1740
  }
@@ -1777,7 +1810,7 @@ declare class KptAuth {
1777
1810
  /** Układ: przesuwany panel promocyjny albo nieruchomy split-screen. */
1778
1811
  readonly layout: _angular_core.InputSignal<KptAuthLayout>;
1779
1812
  /** Dostawcy logowania zewnętrznego. */
1780
- readonly providers: _angular_core.InputSignal<KptAuthProvider[]>;
1813
+ readonly providers: _angular_core.InputSignal<readonly KptAuthProvider[]>;
1781
1814
  /** Układ przycisków dostawców: lista pełnej szerokości albo siatka ikon. */
1782
1815
  readonly providerLayout: _angular_core.InputSignal<KptAuthProviderLayout>;
1783
1816
  /** Pole „imię i nazwisko" w rejestracji. */
@@ -2011,7 +2044,7 @@ interface KptMeterItem {
2011
2044
  * <kpt-meter-group [values]="[{label:'Użyte', value:70}, {label:'Wolne', value:30}]" />
2012
2045
  */
2013
2046
  declare class KptMeterGroup {
2014
- readonly values: _angular_core.InputSignal<KptMeterItem[]>;
2047
+ readonly values: _angular_core.InputSignal<readonly KptMeterItem[]>;
2015
2048
  /** Suma odniesienia; domyślnie suma wartości (100%). */
2016
2049
  readonly max: _angular_core.InputSignal<number | undefined>;
2017
2050
  readonly showLegend: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -2037,7 +2070,7 @@ interface KptAvatarItem {
2037
2070
  * <kpt-avatar-group [avatars]="team" [max]="4" />
2038
2071
  */
2039
2072
  declare class KptAvatarGroup {
2040
- readonly avatars: _angular_core.InputSignal<KptAvatarItem[]>;
2073
+ readonly avatars: _angular_core.InputSignal<readonly KptAvatarItem[]>;
2041
2074
  readonly max: _angular_core.InputSignal<number>;
2042
2075
  readonly size: _angular_core.InputSignal<KptAvatarSize>;
2043
2076
  protected readonly shown: _angular_core.Signal<KptAvatarItem[]>;
@@ -2148,7 +2181,7 @@ interface KptBreadcrumbItem {
2148
2181
  * <kpt-breadcrumb [items]="[{label:'Start',url:'/'},{label:'Ustawienia'}]" />
2149
2182
  */
2150
2183
  declare class KptBreadcrumb {
2151
- readonly items: _angular_core.InputSignal<KptBreadcrumbItem[]>;
2184
+ readonly items: _angular_core.InputSignal<readonly KptBreadcrumbItem[]>;
2152
2185
  protected readonly i18n: KptI18n;
2153
2186
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptBreadcrumb, never>;
2154
2187
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptBreadcrumb, "kpt-breadcrumb", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -2206,8 +2239,14 @@ declare class KptPaginator {
2206
2239
  /** Indeks strony od 0 (dwukierunkowe). */
2207
2240
  readonly pageIndex: _angular_core.ModelSignal<number>;
2208
2241
  /** Dostępne rozmiary strony. */
2209
- readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
2242
+ readonly pageSizeOptions: _angular_core.InputSignal<readonly number[]>;
2210
2243
  protected readonly i18n: KptI18n;
2244
+ /**
2245
+ * Opcje selecta: `pageSizeOptions` uzupełnione o bieżący `pageSize`. Bez tego rozmiar spoza
2246
+ * listy (np. `[pageSize]="8"` przy domyślnych opcjach) nie ma odpowiadającej opcji — select
2247
+ * pokazuje pierwszą pozycję i cicho kłamie o stanie, po którym tabela naprawdę stronicuje.
2248
+ */
2249
+ protected readonly sizeOptions: _angular_core.Signal<readonly number[]>;
2211
2250
  readonly totalPages: _angular_core.Signal<number>;
2212
2251
  readonly rangeStart: _angular_core.Signal<number>;
2213
2252
  readonly rangeEnd: _angular_core.Signal<number>;
@@ -2227,7 +2266,7 @@ type KptColumnEditType = 'text' | 'number' | 'date' | 'select' | 'multiselect';
2227
2266
  interface KptColumnEdit {
2228
2267
  type: KptColumnEditType;
2229
2268
  /** Opcje dla `type: 'select'` / `'multiselect'`. */
2230
- options?: KptOption<unknown>[];
2269
+ options?: readonly KptOption<unknown>[];
2231
2270
  placeholder?: string;
2232
2271
  /** Dla `type: 'number'`. */
2233
2272
  min?: number;
@@ -2283,8 +2322,9 @@ interface KptTableLazyState {
2283
2322
  * @example
2284
2323
  * <kpt-data-table [columns]="cols" [data]="rows" filterable [pageSize]="10"
2285
2324
  * selectable="multiple" rowKey="id" [(selection)]="picked">
2286
- * <ng-template kptCell="status" let-value="value">
2287
- * <span class="badge">{{ value }}</span>
2325
+ * <!-- Kontekst szablonu komórki: $implicit = wiersz, value = wartość pola. -->
2326
+ * <ng-template kptCell="status" let-row let-value="value">
2327
+ * <span class="badge" [title]="row.name">{{ value }}</span>
2288
2328
  * </ng-template>
2289
2329
  * </kpt-data-table>
2290
2330
  */
@@ -2296,7 +2336,7 @@ declare class KptDataTable<T = Record<string, unknown>> {
2296
2336
  readonly filterRowPosition: _angular_core.InputSignal<"bottom" | "top">;
2297
2337
  /** Rozmiar strony; 0 wyłącza paginację. */
2298
2338
  readonly pageSize: _angular_core.InputSignal<number>;
2299
- readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
2339
+ readonly pageSizeOptions: _angular_core.InputSignal<readonly number[]>;
2300
2340
  readonly selectable: _angular_core.InputSignal<"none" | "single" | "multiple">;
2301
2341
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
2302
2342
  /** Komunikat pustej tabeli; bez wartości używa i18n (`dataTable.empty`). */
@@ -2560,7 +2600,7 @@ interface KptTreeNode<T = unknown> {
2560
2600
  label: string;
2561
2601
  value?: T;
2562
2602
  icon?: string;
2563
- children?: KptTreeNode<T>[];
2603
+ children?: readonly KptTreeNode<T>[];
2564
2604
  expanded?: boolean;
2565
2605
  disabled?: boolean;
2566
2606
  }
@@ -2571,7 +2611,7 @@ interface KptTreeNode<T = unknown> {
2571
2611
  * <kpt-tree [nodes]="tree" selectable [(selected)]="node" (nodeClick)="open($event)" />
2572
2612
  */
2573
2613
  declare class KptTree<T = unknown> {
2574
- readonly nodes: _angular_core.InputSignal<KptTreeNode<T>[]>;
2614
+ readonly nodes: _angular_core.InputSignal<readonly KptTreeNode<T>[]>;
2575
2615
  readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2576
2616
  readonly selected: _angular_core.ModelSignal<KptTreeNode<T> | null>;
2577
2617
  readonly nodeClick: _angular_core.OutputEmitterRef<KptTreeNode<T>>;
@@ -2600,7 +2640,7 @@ interface KptTimelineItem {
2600
2640
  * <kpt-timeline [items]="[{title:'Utworzono', time:'10:00', variant:'success', icon:'check'}]" />
2601
2641
  */
2602
2642
  declare class KptTimeline {
2603
- readonly items: _angular_core.InputSignal<KptTimelineItem[]>;
2643
+ readonly items: _angular_core.InputSignal<readonly KptTimelineItem[]>;
2604
2644
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptTimeline, never>;
2605
2645
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptTimeline, "kpt-timeline", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2606
2646
  }
@@ -2614,7 +2654,7 @@ declare class KptTimeline {
2614
2654
  * </kpt-carousel>
2615
2655
  */
2616
2656
  declare class KptCarousel<T = unknown> {
2617
- readonly items: _angular_core.InputSignal<T[]>;
2657
+ readonly items: _angular_core.InputSignal<readonly T[]>;
2618
2658
  readonly activeIndex: _angular_core.ModelSignal<number>;
2619
2659
  protected readonly i18n: KptI18n;
2620
2660
  protected readonly slideTpl: _angular_core.Signal<TemplateRef<any>>;
@@ -2635,7 +2675,7 @@ declare class KptCarousel<T = unknown> {
2635
2675
  * </kpt-data-view>
2636
2676
  */
2637
2677
  declare class KptDataView<T = unknown> {
2638
- readonly items: _angular_core.InputSignal<T[]>;
2678
+ readonly items: _angular_core.InputSignal<readonly T[]>;
2639
2679
  readonly layout: _angular_core.ModelSignal<"list" | "grid">;
2640
2680
  readonly pageSize: _angular_core.InputSignal<number>;
2641
2681
  readonly paginated: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -2643,7 +2683,7 @@ declare class KptDataView<T = unknown> {
2643
2683
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2644
2684
  protected readonly pageIndex: _angular_core.ModelSignal<number>;
2645
2685
  protected readonly showPager: _angular_core.Signal<boolean>;
2646
- protected readonly pageItems: _angular_core.Signal<T[]>;
2686
+ protected readonly pageItems: _angular_core.Signal<readonly T[]>;
2647
2687
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDataView<any>, never>;
2648
2688
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDataView<any>, "kpt-data-view", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "paginated": { "alias": "paginated"; "required": false; "isSignal": true; }; "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; }, { "layout": "layoutChange"; "pageIndex": "pageIndexChange"; }, ["itemTpl"], never, true, never>;
2649
2689
  }
@@ -2708,7 +2748,7 @@ interface KptGalleriaItem {
2708
2748
  * <kpt-galleria [items]="photos" [(activeIndex)]="idx" />
2709
2749
  */
2710
2750
  declare class KptGalleria {
2711
- readonly items: _angular_core.InputSignal<KptGalleriaItem[]>;
2751
+ readonly items: _angular_core.InputSignal<readonly KptGalleriaItem[]>;
2712
2752
  readonly activeIndex: _angular_core.ModelSignal<number>;
2713
2753
  readonly showThumbnails: _angular_core.InputSignalWithTransform<boolean, unknown>;
2714
2754
  protected readonly i18n: KptI18n;
@@ -2889,7 +2929,7 @@ declare class KptPopover {
2889
2929
  */
2890
2930
  declare class KptAutocomplete implements FormValueControl<string> {
2891
2931
  readonly value: _angular_core.ModelSignal<string>;
2892
- readonly options: _angular_core.InputSignal<string[]>;
2932
+ readonly options: _angular_core.InputSignal<readonly string[]>;
2893
2933
  readonly placeholder: _angular_core.InputSignal<string>;
2894
2934
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2895
2935
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -2900,7 +2940,7 @@ declare class KptAutocomplete implements FormValueControl<string> {
2900
2940
  protected readonly open: _angular_core.WritableSignal<boolean>;
2901
2941
  protected readonly activeIndex: _angular_core.WritableSignal<number>;
2902
2942
  protected readonly positions: ConnectedPosition[];
2903
- protected readonly filtered: _angular_core.Signal<string[]>;
2943
+ protected readonly filtered: _angular_core.Signal<readonly string[]>;
2904
2944
  protected onInput(event: Event): void;
2905
2945
  protected onFocus(): void;
2906
2946
  protected onBlur(): void;
@@ -2941,7 +2981,7 @@ declare class KptDrawer {
2941
2981
  * </kpt-context-menu>
2942
2982
  */
2943
2983
  declare class KptContextMenu<T = unknown> {
2944
- readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
2984
+ readonly items: _angular_core.InputSignal<readonly KptMenuItem<T>[]>;
2945
2985
  readonly selected: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
2946
2986
  protected readonly open: _angular_core.WritableSignal<boolean>;
2947
2987
  protected readonly x: _angular_core.WritableSignal<number>;
@@ -2963,7 +3003,7 @@ declare class KptContextMenu<T = unknown> {
2963
3003
  * <kpt-menubar [items]="items" (selected)="onSelect($event)" />
2964
3004
  */
2965
3005
  declare class KptMenubar<T = unknown> {
2966
- readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
3006
+ readonly items: _angular_core.InputSignal<readonly KptMenuItem<T>[]>;
2967
3007
  readonly selected: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
2968
3008
  protected readonly openIndex: _angular_core.WritableSignal<number | null>;
2969
3009
  protected readonly positions: ConnectedPosition[];
@@ -2985,11 +3025,11 @@ declare class KptMenubar<T = unknown> {
2985
3025
  * <kpt-megamenu [items]="items" (selected)="onSelect($event)" />
2986
3026
  */
2987
3027
  declare class KptMegamenu<T = unknown> {
2988
- readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
3028
+ readonly items: _angular_core.InputSignal<readonly KptMenuItem<T>[]>;
2989
3029
  readonly selected: _angular_core.OutputEmitterRef<KptMenuItem<T>>;
2990
3030
  protected readonly openIndex: _angular_core.WritableSignal<number | null>;
2991
3031
  protected readonly positions: ConnectedPosition[];
2992
- protected activeColumns(): KptMenuItem<T>[];
3032
+ protected activeColumns(): readonly KptMenuItem<T>[];
2993
3033
  protected toggle(i: number): void;
2994
3034
  protected pick(link: KptMenuItem<T>): void;
2995
3035
  protected closeAll(): void;
@@ -3069,7 +3109,7 @@ type KptSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
3069
3109
  * <kpt-speed-dial [items]="actions" direction="up" (selected)="onAction($event)" />
3070
3110
  */
3071
3111
  declare class KptSpeedDial<T = unknown> {
3072
- readonly items: _angular_core.InputSignal<KptMenuItem<T>[]>;
3112
+ readonly items: _angular_core.InputSignal<readonly KptMenuItem<T>[]>;
3073
3113
  readonly direction: _angular_core.InputSignal<KptSpeedDialDirection>;
3074
3114
  readonly icon: _angular_core.InputSignal<string>;
3075
3115
  /** Etykieta a11y FAB (stan zamknięty); bez wartości używa i18n (`speedDial.actions`). */
@@ -3085,6 +3125,6 @@ declare class KptSpeedDial<T = unknown> {
3085
3125
  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; }; }, { "selected": "selected"; }, never, never, true, never>;
3086
3126
  }
3087
3127
 
3088
- export { KPT_BREAKPOINTS, KPT_FORM_FIELD_CONTROL, KPT_I18N_CONFIG, KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAuth, KptAuthProviderDef, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBadge, KptBottomSheet, KptBreadcrumb, KptBreakpointObserver, KptButton, KptButtonGroup, KptCard, KptCarousel, KptCellDef, KptCellEditDef, KptCheckbox, KptChip, KptChipsInput, KptClock, KptColorPicker, KptConfirmContainer, KptConfirmService, KptContextMenu, KptDataTable, KptDataView, KptDateRange, KptDatepicker, KptDialog, KptDivider, KptDrawer, KptEmpty, KptFab, KptFieldset, KptFileUpload, KptFormField, KptGalleria, KptI18n, KptIcon, KptIconButton, KptIconRegistry, KptImage, KptInput, KptInputMask, KptInputNumber, KptInputOtp, KptKnob, KptListbox, KptMegamenu, KptMenu, KptMenubar, KptMeterGroup, KptOrderList, KptPaginator, KptPanel, KptPassword, KptPickList, KptPopover, KptProgress, KptRadioGroup, KptRating, KptRichText, KptRowDetailDef, KptScrollTop, KptSelect, KptShellNavToggle, KptSidenav, KptSkeleton, KptSlider, KptSpeedDial, KptSpinner, KptSplitButton, KptSplitter, KptStep, KptStepper, KptSwitch, KptSwitchGroup, KptTab, KptTabs, KptTextarea, KptTimeline, KptToastContainer, KptToastService, KptToolbar, KptTooltip, KptTree, provideKptI18n };
3128
+ export { KPT_BREAKPOINTS, KPT_FORM_FIELD_CONTROL, KPT_I18N_CONFIG, KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAuth, KptAuthProviderDef, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBadge, KptBottomSheet, KptBreadcrumb, KptBreakpointObserver, KptButton, KptButtonGroup, KptCard, KptCarousel, KptCellDef, KptCellEditDef, KptCheckbox, KptChip, KptChipsInput, KptClock, KptColorPicker, KptConfirmContainer, KptConfirmService, KptContextMenu, KptDataTable, KptDataView, KptDateRange, KptDatepicker, KptDialog, KptDivider, KptDrawer, KptEmpty, KptFab, KptFieldset, KptFileUpload, KptFormField, KptGalleria, KptI18n, KptIcon, KptIconButton, KptIconRegistry, KptImage, KptInput, KptInputMask, KptInputNumber, KptInputOtp, KptKnob, KptListbox, KptMegamenu, KptMenu, KptMenubar, KptMeterGroup, KptOrderList, KptPaginator, KptPanel, KptPassword, KptPickList, KptPopover, KptProgress, KptRadioGroup, KptRating, KptRichText, KptRowDetailDef, KptScrollTop, KptSelect, KptShellNavToggle, KptSidenav, KptSkeleton, KptSlider, KptSpeedDial, KptSpinner, KptSplitButton, KptSplitter, KptStep, KptStepper, KptSwitch, KptSwitchGroup, KptTab, KptTabs, KptTextarea, KptTimeline, KptToastContainer, KptToastService, KptToolbar, KptTooltip, KptTree, provideKptI18n, provideKptIcons };
3089
3129
  export type { KptAlertVariant, KptAuthLayout, KptAuthMode, KptAuthProvider, KptAuthProviderLayout, KptAuthResetValue, KptAuthSignInValue, KptAuthSignUpValue, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeSize, KptBadgeVariant, KptBreadcrumbItem, KptBreakpoint, KptButtonSize, KptButtonVariant, KptCardVariant, KptCellEditEvent, KptChipVariant, KptColumn, KptColumnEdit, KptColumnEditType, KptConfirmOptions, KptConfirmRequest, KptDatepickerMode, KptDatepickerView, KptDividerOrientation, KptDrawerPosition, KptFormFieldControl, KptGalleriaItem, KptInputType, KptMenuItem, KptMeterItem, KptOption, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
3090
3130
  //# sourceMappingURL=konce-pt-angular.d.ts.map