@konce-pt/angular 0.8.3 → 0.9.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 { EnvironmentProviders, Signal, InjectionToken, TemplateRef, OnDestroy } from '@angular/core';
2
+ import { EnvironmentProviders, Signal, InjectionToken, TemplateRef, ModelSignal, WritableSignal, OnDestroy, ElementRef } 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';
@@ -9,36 +9,58 @@ import { KptIconInput, KptIconName } from '@konce-pt/icons';
9
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
+ import { KptMentionItem, KptMentionSegment } from '@konce-pt/mention';
13
+ export { KPT_MENTION_LIMIT, KptMentionItem, KptMentionQuery, KptMentionSegment, applyMention, collectMentions, filterMentions, foldMentionText, mentionQuery, mentionToken, parseMentionText } from '@konce-pt/mention';
14
+ import { KptBackdropEffect, KptBackdropAnchor, KptBackdropInk } from '@konce-pt/backdrop';
15
+ export { KPT_SIGNAL_GRID_CELL, KPT_SIGNAL_GRID_DENSITY, KPT_SIGNAL_GRID_FALLOFF, KPT_SIGNAL_GRID_GAP, KPT_WAVE_AMPLITUDE, KPT_WAVE_BAND, KPT_WAVE_RESOLUTION, KPT_WAVE_ROTATION, KptBackdropAnchor, KptBackdropEffect, KptBackdropRenderOptions, KptBackdropRenderer, KptOklab, KptRgb, KptSignalGridCell, KptSignalGridFrame, KptSignalGridOptions, KptWaveOptions, KptWaveSettings, buildSignalGrid, createBackdropRenderer, mixOklch, readCssColor, resolveWave, shiftHue, signalGridAlpha, signalGridDensity, waveIntensity, waveRamp } from '@konce-pt/backdrop';
12
16
  import { KptColumnFilter, KptColumnSummary } from '@konce-pt/table';
13
17
  export { KptColumnFilter, KptColumnFilterType, KptColumnSummary, KptSummaryFn } from '@konce-pt/table';
14
18
  import * as _konce_pt_angular from '@konce-pt/angular';
15
19
 
16
- type KptButtonVariant = 'filled' | 'tonal' | 'outline' | 'text' | 'danger';
17
- type KptButtonSize = 'sm' | 'md' | 'lg';
20
+ type KptButtonVariant = 'filled' | 'elevated' | 'tonal' | 'outline' | 'text' | 'link' | 'danger' | 'success' | 'warning' | 'info';
21
+ type KptButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
22
  /**
19
- * Przycisk Koncept UI. Renderuje natywny `<button>` (zachowana semantyka i submit
20
- * formularza). Wygląd sterowany tokenami `--kpt-button-*`.
23
+ * Przycisk Koncept UI. Renderuje natywny `<button>` (semantyka + submit formularza)
24
+ * albo `<a>`, gdy podasz `href`.
25
+ *
26
+ * Ikonę można podać nazwą (`icon`/`iconEnd`) albo wstawić do slotu — oba sposoby dostają
27
+ * ten sam odstęp i tę samą skalę. Przy `loading` spinner zajmuje miejsce ikony wiodącej.
21
28
  *
22
29
  * @example
23
- * <kpt-button variant="filled" (click)="save()">Zapisz</kpt-button>
24
- * <kpt-button variant="outline" size="sm" [disabled]="busy()">Anuluj</kpt-button>
30
+ * <kpt-button (click)="save()">Zapisz</kpt-button>
31
+ * <kpt-button icon="device-floppy" (click)="save()">Zapisz</kpt-button>
32
+ * <kpt-button iconEnd="chevron-right" variant="outline">Dalej</kpt-button>
33
+ * <kpt-button variant="link" href="/docs">Dokumentacja</kpt-button>
34
+ * <kpt-button variant="danger" [loading]="deleting()">Usuń</kpt-button>
25
35
  */
26
36
  declare class KptButton {
27
- /** Wariant wizualny. */
28
37
  readonly variant: _angular_core.InputSignal<KptButtonVariant>;
29
- /** Rozmiar. */
30
38
  readonly size: _angular_core.InputSignal<KptButtonSize>;
31
- /** Typ natywnego przycisku (istotne w formularzach). */
32
39
  readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
33
- /** Wyłączony. */
34
40
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
35
- /** Stan ładowania — pokazuje spinner i blokuje interakcję. */
36
41
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
37
- /** Rozciągnięcie na całą szerokość kontenera. */
38
42
  readonly fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
43
+ /** Nazwa ikony wiodącej z rejestru (`KptIconRegistry`). */
44
+ readonly icon: _angular_core.InputSignal<string | undefined>;
45
+ /** Nazwa ikony zamykającej — zwykle znacznik kierunku, nie akcja. */
46
+ readonly iconEnd: _angular_core.InputSignal<string | undefined>;
47
+ /** Klasa dokładana do ikony wiodącej; obok stałego haka `.kpt-button__icon`. */
48
+ readonly iconClass: _angular_core.InputSignal<string | undefined>;
49
+ readonly iconEndClass: _angular_core.InputSignal<string | undefined>;
50
+ /** Podany adres zamienia `<button>` na `<a>`. */
51
+ readonly href: _angular_core.InputSignal<string | undefined>;
52
+ readonly target: _angular_core.InputSignal<string | undefined>;
53
+ readonly rel: _angular_core.InputSignal<string | undefined>;
39
54
  protected readonly isDisabled: _angular_core.Signal<boolean>;
55
+ /** Spinner zajmuje miejsce ikony wiodącej, więc przy ładowaniu jej nie renderujemy. */
56
+ protected readonly showLeadingIcon: _angular_core.Signal<boolean>;
57
+ protected readonly leadingIconClass: _angular_core.Signal<string>;
58
+ protected readonly trailingIconClass: _angular_core.Signal<string>;
59
+ /** `target="_blank"` bez `rel` to wektor na `window.opener` — dokładamy domyślne. */
60
+ protected readonly effectiveRel: _angular_core.Signal<string | null>;
61
+ private iconClasses;
40
62
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptButton, never>;
41
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptButton, "kpt-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
63
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptButton, "kpt-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "iconClass": { "alias": "iconClass"; "required": false; "isSignal": true; }; "iconEndClass": { "alias": "iconEndClass"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "rel": { "alias": "rel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
42
64
  }
43
65
 
44
66
  /**
@@ -64,9 +86,15 @@ declare class KptIconButton {
64
86
  * wtedy czego ogłosić. `null` (domyślnie) nie wypisuje atrybutu w ogóle.
65
87
  */
66
88
  readonly ariaPressed: _angular_core.InputSignal<boolean | null>;
89
+ /**
90
+ * Stan rozwinięcia dla przycisku otwierającego panel (wybierak, menu). Z tego samego powodu
91
+ * co `ariaPressed` musi zjechać na wewnętrzny `<button>` — host nie ma roli przycisku, więc
92
+ * atrybut postawiony na nim nie znaczy dla czytnika nic. `null` (domyślnie) go nie wypisuje.
93
+ */
94
+ readonly ariaExpanded: _angular_core.InputSignal<boolean | null>;
67
95
  protected readonly isDisabled: _angular_core.Signal<boolean>;
68
96
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptIconButton, never>;
69
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptIconButton, "kpt-icon-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "ariaPressed": { "alias": "ariaPressed"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
97
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptIconButton, "kpt-icon-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "ariaPressed": { "alias": "ariaPressed"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
70
98
  }
71
99
 
72
100
  /** Opcja wyboru dla kontrolek typu select / radio-group. */
@@ -74,13 +102,19 @@ interface KptOption<T = unknown> {
74
102
  label: string;
75
103
  value: T;
76
104
  disabled?: boolean;
105
+ /** Nazwa ikony z rejestru. Renderuje ją dziś wyłącznie `kpt-button-group`. */
106
+ icon?: string;
77
107
  }
78
108
 
79
109
  /**
80
110
  * Segmentowana grupa przycisków (toggle) — pojedynczy wybór z opcji. Signal Forms.
81
111
  *
112
+ * Pozycja może mieć ikonę (`KptOption.icon`); `iconOnly` chowa etykietę, ale zostawia ją
113
+ * w nazwie dostępnej, więc czytnik ekranu dalej wie, co wybiera.
114
+ *
82
115
  * @example
83
116
  * <kpt-button-group [(value)]="view" [options]="[{label:'Lista',value:'list'},{label:'Siatka',value:'grid'}]" />
117
+ * <kpt-button-group [(value)]="view" [options]="[{icon:'list',label:'Lista',value:'list'}]" iconOnly />
84
118
  * <kpt-button-group [formField]="f.period" [options]="periods" />
85
119
  */
86
120
  declare class KptButtonGroup<T = unknown> implements FormValueControl<T> {
@@ -90,10 +124,12 @@ declare class KptButtonGroup<T = unknown> implements FormValueControl<T> {
90
124
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
91
125
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
92
126
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
127
+ /** Chowa etykiety — zostaje sama ikona, a `label` zasila `aria-label` i `title`. */
128
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
93
129
  readonly touch: _angular_core.OutputEmitterRef<void>;
94
130
  protected select(opt: KptOption<T>): void;
95
131
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptButtonGroup<any>, never>;
96
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptButtonGroup<any>, "kpt-button-group", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "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>;
132
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptButtonGroup<any>, "kpt-button-group", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "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; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
97
133
  }
98
134
 
99
135
  /**
@@ -389,21 +425,30 @@ declare const KPT_I18N_CONFIG: InjectionToken<KptI18nConfig>;
389
425
  declare function provideKptI18n(config?: KptI18nConfig): EnvironmentProviders;
390
426
 
391
427
  type KptChipVariant = 'neutral' | 'primary' | 'success' | 'danger' | 'warning' | 'info';
428
+ /** Wielkość liter etykiety. */
429
+ type KptChipTextTransform = 'none' | 'capitalize' | 'uppercase' | 'lowercase';
392
430
  /**
393
431
  * Chip / tag — etykieta, opcjonalnie usuwalna.
394
432
  *
395
433
  * @example
396
434
  * <kpt-chip>Angular</kpt-chip>
397
435
  * <kpt-chip variant="success" removable (removed)="onRemove()">UI</kpt-chip>
436
+ * <kpt-chip textTransform="capitalize">nowość · zestaw startowy</kpt-chip>
398
437
  */
399
438
  declare class KptChip {
400
439
  readonly variant: _angular_core.InputSignal<KptChipVariant>;
440
+ /**
441
+ * Wielkość liter etykiety. `capitalize` podnosi pierwszą literę każdego słowa — także po
442
+ * dywizie („Agent-Ready"), bo CSS nie wie, gdzie kończy się wyraz złożony; przy takich
443
+ * napisach pewniejszy jest zapis wprost w treści.
444
+ */
445
+ readonly textTransform: _angular_core.InputSignal<KptChipTextTransform>;
401
446
  readonly removable: _angular_core.InputSignalWithTransform<boolean, unknown>;
402
447
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
403
448
  readonly removed: _angular_core.OutputEmitterRef<void>;
404
449
  protected readonly i18n: KptI18n;
405
450
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChip, never>;
406
- 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>;
451
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChip, "kpt-chip", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "textTransform": { "alias": "textTransform"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
407
452
  }
408
453
 
409
454
  type KptAvatarSize = 'sm' | 'md' | 'lg' | 'xl';
@@ -450,24 +495,66 @@ declare class KptSpinner {
450
495
  }
451
496
 
452
497
  type KptProgressVariant = 'primary' | 'success' | 'danger' | 'warning' | 'info';
498
+ type KptProgressType = 'linear' | 'circular';
499
+ type KptProgressSize = 'sm' | 'md' | 'lg';
500
+ /** Postać etykiety wartości: procent, „ile z ilu" albo brak. */
501
+ type KptProgressValueFormat = 'percent' | 'fraction' | 'none';
502
+ /** Gdzie siada wiersz etykiety względem paska (tylko `type="linear"`). */
503
+ type KptProgressLabelPosition = 'top' | 'bottom' | 'end';
453
504
  /**
454
- * Wskaźnik postępu — liniowy lub kołowy, określony (0–100) lub nieokreślony (`value` = null).
505
+ * Wskaźnik postępu — liniowy lub kołowy, określony (`min`–`max`) lub nieokreślony (`value` = null).
506
+ *
507
+ * Etykietę wartości włącza `showValue`; rzutowana treść zastępuje sformatowaną wartość,
508
+ * więc w środku koła można pokazać cokolwiek.
455
509
  *
456
510
  * @example
457
511
  * <kpt-progress [value]="60" />
458
- * <kpt-progress type="circular" [value]="75" variant="success" />
512
+ * <kpt-progress [value]="80" label="Ładowanie…" showValue />
513
+ * <kpt-progress [value]="152" [max]="160" showValue valueFormat="fraction" labelPosition="bottom" />
514
+ * <kpt-progress [value]="38" [bufferValue]="62" />
515
+ * <kpt-progress type="circular" [value]="75" variant="success" showValue />
459
516
  * <kpt-progress [value]="null" /> <!-- indeterminate -->
460
517
  */
461
518
  declare class KptProgress {
462
- /** 0–100 lub null = nieokreślony. */
519
+ /** Wartość w skali `min`–`max` albo null = postęp nieokreślony. */
463
520
  readonly value: _angular_core.InputSignal<number | null>;
521
+ readonly min: _angular_core.InputSignal<number>;
522
+ readonly max: _angular_core.InputSignal<number>;
464
523
  readonly variant: _angular_core.InputSignal<KptProgressVariant>;
465
- readonly type: _angular_core.InputSignal<"linear" | "circular">;
524
+ readonly type: _angular_core.InputSignal<KptProgressType>;
525
+ /** Grubość toru: `sm` 0.25rem, `md` 0.5rem, `lg` 0.75rem. */
526
+ readonly size: _angular_core.InputSignal<KptProgressSize>;
527
+ /** Średnica wariantu kołowego w pikselach. */
466
528
  readonly diameter: _angular_core.InputSignal<number>;
529
+ /** Postęp buforowania — drugi, przygaszony pasek pod głównym (tylko liniowy). */
530
+ readonly bufferValue: _angular_core.InputSignal<number | null>;
531
+ /** Włącza obszar etykiety wartości — razem z nim renderuje się rzutowana treść. */
532
+ readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
533
+ readonly valueFormat: _angular_core.InputSignal<KptProgressValueFormat>;
534
+ /** Tekst opisowy obok paska; służy też za `aria-label`. */
535
+ readonly label: _angular_core.InputSignal<string | undefined>;
536
+ readonly labelPosition: _angular_core.InputSignal<KptProgressLabelPosition>;
537
+ private readonly i18n;
467
538
  protected readonly circumference: number;
539
+ protected readonly indeterminate: _angular_core.Signal<boolean>;
540
+ /** Ułamek 0–1. Odporny na `max` ≤ `min` i na wartości spoza zakresu. */
541
+ protected readonly ratio: _angular_core.Signal<number>;
542
+ protected readonly percent: _angular_core.Signal<number>;
543
+ /** Bufor nigdy nie cofa się za pasek główny — inaczej wyglądałby jak błąd renderowania. */
544
+ protected readonly bufferRatio: _angular_core.Signal<number>;
468
545
  protected readonly offset: _angular_core.Signal<number>;
546
+ /** Tekst widoczny w etykiecie; pusty dla postępu nieokreślonego i `valueFormat="none"`. */
547
+ protected readonly valueText: _angular_core.Signal<string>;
548
+ /**
549
+ * Czytnik ekranu domyślnie odczytuje `aria-valuenow` jako procent, więc przy formacie „ile z ilu"
550
+ * podajemy mu ten sam napis, który widzi użytkownik.
551
+ */
552
+ protected readonly ariaValueText: _angular_core.Signal<string | null>;
553
+ protected readonly ariaLabel: _angular_core.Signal<string>;
554
+ private toRatio;
555
+ private fractionText;
469
556
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptProgress, never>;
470
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptProgress, "kpt-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "diameter": { "alias": "diameter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
557
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptProgress, "kpt-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "diameter": { "alias": "diameter"; "required": false; "isSignal": true; }; "bufferValue": { "alias": "bufferValue"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
471
558
  }
472
559
 
473
560
  type KptSkeletonVariant = 'text' | 'circle' | 'rect';
@@ -972,11 +1059,30 @@ declare class KptRichText implements FormValueControl<string> {
972
1059
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
973
1060
  /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
974
1061
  protected readonly showInvalid: _angular_core.Signal<boolean>;
1062
+ /**
1063
+ * Pozycje do podpowiedzi wzmianek. Pusta lista wyłącza mechanizm: `@` zostaje wtedy zwykłym
1064
+ * znakiem, bo nie ma czego podpowiadać.
1065
+ */
1066
+ readonly mentions: _angular_core.InputSignal<readonly KptMentionItem<unknown>[]>;
1067
+ /** Ile podpowiedzi naraz. */
1068
+ readonly mentionLimit: _angular_core.InputSignalWithTransform<number, unknown>;
975
1069
  readonly touch: _angular_core.OutputEmitterRef<void>;
1070
+ /** Wstawiona wzmianka — moment na powiadomienie osoby albo dopięcie powiązania. */
1071
+ readonly mentioned: _angular_core.OutputEmitterRef<KptMentionItem<unknown>>;
976
1072
  protected readonly i18n: KptI18n;
977
1073
  protected readonly swatches: string[];
978
1074
  private readonly editor;
979
1075
  private savedRange;
1076
+ protected readonly mentionOpen: _angular_core.WritableSignal<boolean>;
1077
+ protected readonly mentionMatches: _angular_core.WritableSignal<readonly KptMentionItem<unknown>[]>;
1078
+ protected readonly mentionActive: _angular_core.WritableSignal<number>;
1079
+ /** Zaczepienie listy w miejscu kursora — punkt, nie element, bo `@` nie ma własnego elementu. */
1080
+ protected readonly mentionPoint: _angular_core.WritableSignal<{
1081
+ x: number;
1082
+ y: number;
1083
+ }>;
1084
+ /** Węzeł tekstowy i zakres zapytania `@…`, który podmieni wybrana pozycja. */
1085
+ private mentionRange;
980
1086
  protected readonly colorOpen: _angular_core.WritableSignal<boolean>;
981
1087
  protected readonly colorKind: _angular_core.WritableSignal<"foreColor" | "backColor" | "cellBg">;
982
1088
  protected readonly sourceView: _angular_core.WritableSignal<boolean>;
@@ -1130,6 +1236,29 @@ declare class KptRichText implements FormValueControl<string> {
1130
1236
  * Brak schematu → dopisz `https://` (spójne z zachowaniem `normalizeUrl` w mapie); `#`/`/`
1131
1237
  * przechodzą bez zmian; schemat spoza `SAFE_URL_SCHEME` → `null` (link nie zostaje wstawiony).
1132
1238
  */
1239
+ /**
1240
+ * Sprawdza, czy kursor stoi w zapytaniu `@…`, i ustawia listę podpowiedzi.
1241
+ *
1242
+ * Zapytanie liczymy z **węzła tekstowego**, nie z całego HTML-a: w treści siedzą tagi, a `@`
1243
+ * ma widzieć tylko to, co użytkownik naprawdę napisał w tym miejscu. Rozpoznanie zostawiamy
1244
+ * `mentionQuery()` z `@konce-pt/mention` — te same reguły działają w obu portach i w zwykłym
1245
+ * polu tekstowym.
1246
+ */
1247
+ private syncMention;
1248
+ /** Punkt pod kursorem — lista podpowiedzi zaczepia się o niego, bo `@` nie ma swojego elementu. */
1249
+ private caretPoint;
1250
+ /** Klawiatura listy podpowiedzi; `true` = zdarzenie obsłużone i edytor go już nie zobaczy. */
1251
+ private onMentionKeydown;
1252
+ /**
1253
+ * Wstawia wzmiankę w miejsce zapytania `@…`.
1254
+ *
1255
+ * Wzmianka jest elementem, nie samym tekstem: `data-mention` niesie identyfikator, który
1256
+ * przeżyje zmianę nazwy, a `contenteditable="false"` trzyma ją w jednym kawałku — bez tego
1257
+ * kursor wchodziłby w środek nazwiska i psuł zapis. Spacja po wzmiance daje gdzie postawić
1258
+ * kursor: bez niej nie da się wyjść poza element, który nie jest edytowalny.
1259
+ */
1260
+ protected insertMention(item: KptMentionItem): void;
1261
+ protected closeMention(): void;
1133
1262
  private sanitizeUrl;
1134
1263
  private sanitizeHtml;
1135
1264
  /** Tag spoza allowlisty rozwijamy do dzieci; atrybuty czyścimy po kolei. */
@@ -1138,7 +1267,7 @@ declare class KptRichText implements FormValueControl<string> {
1138
1267
  /** Deklaracje `style` z allowlisty; `null`, gdy nie zostaje nic. */
1139
1268
  private sanitizeStyleAttr;
1140
1269
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptRichText, never>;
1141
- 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; }; "maxListLevel": { "alias": "maxListLevel"; "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>;
1270
+ 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; }; "maxListLevel": { "alias": "maxListLevel"; "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; }; "mentions": { "alias": "mentions"; "required": false; "isSignal": true; }; "mentionLimit": { "alias": "mentionLimit"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; "mentioned": "mentioned"; }, never, never, true, never>;
1142
1271
  }
1143
1272
 
1144
1273
  /** Wartość suwaka: pojedyncza liczba lub para `[min, max]` w trybie `range`. */
@@ -1739,6 +1868,154 @@ declare class KptShellNavToggle {
1739
1868
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptShellNavToggle, "[kptShellNavToggle]", never, { "label": { "alias": "kptShellNavToggle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1740
1869
  }
1741
1870
 
1871
+ /**
1872
+ * Dekoracyjna warstwa tła dla sekcji: komponent obejmuje treść i maluje pod nią animowany canvas.
1873
+ * Sięga się po niego tam, gdzie płaska powierzchnia wygląda na niedokończoną, a wideo albo duży
1874
+ * obraz kosztowałyby transfer i nie poszłyby za motywem.
1875
+ *
1876
+ * Komponent jest opakowaniem: canvas leży pod spodem, a treść z `ng-content` idzie warstwę wyżej
1877
+ * i zachowuje się zwyczajnie. Rysowanie stoi, gdy nie ma czego oglądać — sekcja poza ekranem,
1878
+ * karta w tle, `paused`, `speed` równe zeru albo ograniczony ruch w systemie; wtedy zostaje jedna
1879
+ * statyczna klatka zamiast pustki, bo efekt jest częścią kompozycji, nie ozdobą.
1880
+ *
1881
+ * Dwa efekty: `signal-grid` (drobna siatka migoczących kwadratów, gęsta przy jednej krawędzi)
1882
+ * i `wave` (jedna miękka wstęga światła z barwami przesuwającymi się wzdłuż niej). Każdy czyta
1883
+ * własny zestaw wejść — pozostałe po prostu go nie dotyczą.
1884
+ *
1885
+ * Sam komponent to cykl życia; rysowanie i cała matematyka siedzą w `@konce-pt/backdrop`,
1886
+ * wspólnym z portem Reacta.
1887
+ *
1888
+ * @example
1889
+ * <kpt-backdrop effect="wave" [rotation]="18" [colors]="['#5b8af2', '#a86df2', '#f25b9e']">
1890
+ * <h1>Zbuduj aplikację od pierwszego promptu</h1>
1891
+ * <kpt-button>Zacznij</kpt-button>
1892
+ * </kpt-backdrop>
1893
+ */
1894
+ declare class KptBackdrop {
1895
+ /** Rysowany efekt. */
1896
+ readonly effect: _angular_core.InputSignal<KptBackdropEffect>;
1897
+ /** Tło sekcji. Puste bierze `--kpt-color-surface`. */
1898
+ readonly background: _angular_core.InputSignal<string>;
1899
+ /** Tempo; 1 to spokojne tempo obu efektów, 0 zatrzymuje obraz. */
1900
+ readonly speed: _angular_core.InputSignalWithTransform<number, unknown>;
1901
+ /** Ziarno losowania — ta sama wartość daje ten sam układ kwadratów i ten sam przebieg wstęgi. */
1902
+ readonly seed: _angular_core.InputSignalWithTransform<number, unknown>;
1903
+ /** Zatrzymuje animację, zostawiając ostatnią klatkę. */
1904
+ readonly paused: _angular_core.InputSignalWithTransform<boolean, unknown>;
1905
+ /**
1906
+ * Przenosi barwy wpisane na sztywno na powierzchnię bieżącego motywu: czerń dobrana do białego
1907
+ * tła staje się bielą, gdy tło jest ciemne. Rusza wyłącznie jasność — odcień i nasycenie
1908
+ * zostają, więc barwa marki nie zmienia się w inną barwę.
1909
+ *
1910
+ * Dotyczy `color`, `colors` i `background`, ale tylko wtedy, gdy podano je literałem. Wejście
1911
+ * puste bierze token, a zapis z `var()` sam po token sięga — jedno i drugie już idzie za motywem
1912
+ * i adaptacja odwróciłaby je drugi raz.
1913
+ */
1914
+ readonly adaptive: _angular_core.InputSignalWithTransform<boolean, unknown>;
1915
+ /**
1916
+ * `signal-grid`: kolor kwadratów — dowolny zapis CSS, także sięgający po tokeny, np.
1917
+ * `color-mix(in oklab, #5b8af2, var(--kpt-color-surface) 30%)`. Taki zapis przelicza się przy
1918
+ * zmianie motywu; literał zostaje literałem. Puste bierze `--kpt-color-primary`.
1919
+ */
1920
+ readonly color: _angular_core.InputSignal<string>;
1921
+ /** `signal-grid`: przy której krawędzi siatka jest najgęstsza. */
1922
+ readonly anchor: _angular_core.InputSignal<KptBackdropAnchor>;
1923
+ /** `signal-grid`: bok kwadratu (px). */
1924
+ readonly cell: _angular_core.InputSignalWithTransform<number, unknown>;
1925
+ /** `signal-grid`: odstęp między kwadratami (px). */
1926
+ readonly gap: _angular_core.InputSignalWithTransform<number, unknown>;
1927
+ /** `signal-grid`: udział zapalonych komórek przy kotwicy, 0–1. */
1928
+ readonly density: _angular_core.InputSignalWithTransform<number, unknown>;
1929
+ /** `signal-grid`: jak szybko siatka gaśnie ku przeciwnej krawędzi. */
1930
+ readonly falloff: _angular_core.InputSignalWithTransform<number, unknown>;
1931
+ /**
1932
+ * `wave`: rampa barw, po której przesuwa się wstęga — każdy przystanek dowolnym zapisem CSS.
1933
+ * Zamknięta w pętlę, więc ostatnia barwa wraca do pierwszej. Pusta bierze `--kpt-color-primary`
1934
+ * i dwie barwy wyprowadzone z niego obrotem odcienia — paleta biblioteki jest neutralna, więc
1935
+ * domyślna wstęga jest jednobarwna i przygaszona. Po kolory sięga się tu, nie do tokenów
1936
+ * statusowych. Zapis może sięgać po tokeny i wtedy idzie za motywem. Przystanek, którego
1937
+ * przeglądarka nie uznaje za kolor, wypada z rampy; gdy wypadną wszystkie, zostaje rampa
1938
+ * domyślna.
1939
+ */
1940
+ readonly colors: _angular_core.InputSignal<readonly string[]>;
1941
+ /** `wave`: kąt, pod jakim prąd przecina kadr (stopnie); 0 to poziomo w prawo. */
1942
+ readonly rotation: _angular_core.InputSignalWithTransform<number, unknown>;
1943
+ /** `wave`: szerokość wstęgi jako ułamek wysokości kadru. */
1944
+ readonly band: _angular_core.InputSignalWithTransform<number, unknown>;
1945
+ /** `wave`: jak mocno faluje linia środkowa. Zero zatrzymuje falowanie, nie barwy. */
1946
+ readonly amplitude: _angular_core.InputSignalWithTransform<number, unknown>;
1947
+ private readonly canvas;
1948
+ private readonly host;
1949
+ private context;
1950
+ private renderer;
1951
+ private width;
1952
+ private height;
1953
+ /**
1954
+ * Czas animacji w sekundach. Rośnie o krok przemnożony przez `speed`, więc ruch suwaka
1955
+ * prędkości przyspiesza obraz zamiast go przeskakiwać.
1956
+ */
1957
+ private clock;
1958
+ private last;
1959
+ private raf;
1960
+ private onScreen;
1961
+ private reduced;
1962
+ private ready;
1963
+ /** Kolor wiodący, z którym zbudowany jest bieżący renderer — punkt odniesienia dla zmiany motywu. */
1964
+ private lead;
1965
+ /** Ostatnio zgłoszony zestaw odrzuconych barw — żeby nie powtarzać tego samego ostrzeżenia. */
1966
+ private reported;
1967
+ /** Tło po adaptacji. Puste znaczy „nie ma czego podmieniać" i wtedy liczy się samo `background`. */
1968
+ private readonly adapted;
1969
+ /** Tło malowane na hoście: po adaptacji, jeśli jest, inaczej to, co podano. */
1970
+ protected readonly surface: _angular_core.Signal<string | null>;
1971
+ /**
1972
+ * Ton i kolor treści dobrane do malowanego tła. Puste znaczy „sekcja nie ma własnego tła"
1973
+ * i wtedy treść zostaje przy `--kpt-color-on-surface` ze stylu.
1974
+ */
1975
+ protected readonly ink: _angular_core.WritableSignal<KptBackdropInk>;
1976
+ private resize?;
1977
+ private intersect?;
1978
+ private unwatchTheme?;
1979
+ private motion?;
1980
+ constructor();
1981
+ /** Nowy przebieg efektu przy tym samym rozmiarze i tych samych wejściach. */
1982
+ reseed(): void;
1983
+ private readonly tick;
1984
+ private paint;
1985
+ private build;
1986
+ /**
1987
+ * Ostrzeżenie o przystankach rampy, których przeglądarka nie uznała za kolor.
1988
+ *
1989
+ * `build()` chodzi przy każdej zmianie wejść, więc ciągnięcie suwaka nad wadliwą rampą zasypałoby
1990
+ * konsolę tym samym zdaniem — zgłaszamy dopiero zestaw inny niż poprzednio.
1991
+ */
1992
+ private reportInvalid;
1993
+ private measure;
1994
+ private sync;
1995
+ private watchSize;
1996
+ /** Sekcja poza ekranem i karta w tle to ten sam przypadek: nie ma czego oglądać. */
1997
+ private watchVisibility;
1998
+ private readonly onTabSwitch;
1999
+ private watchMotion;
2000
+ private readonly onMotionChange;
2001
+ private watchTheme;
2002
+ /**
2003
+ * Zmiana motywu przestawia tokeny, a kolory renderera są już wyliczone — trzeba je odczytać
2004
+ * na nowo. Nasłuch trafia też w zmiany niezwiązane z barwą (klasa nakładki na `<html>`, dowolne
2005
+ * nadpisanie inline u przodka), więc renderer przebudowuje się dopiero wtedy, gdy odczyt
2006
+ * naprawdę dał inny kolor.
2007
+ */
2008
+ /**
2009
+ * Kolor wiodący liczony dokładnie tak, jak liczy go `build()` — inaczej strażnik porównywałby
2010
+ * wartość sprzed adaptacji z zapamiętaną po adaptacji i przebudowywałby renderer bez przerwy.
2011
+ */
2012
+ private leadNow;
2013
+ private readonly refreshColors;
2014
+ private teardown;
2015
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptBackdrop, never>;
2016
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptBackdrop, "kpt-backdrop", never, { "effect": { "alias": "effect"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "speed": { "alias": "speed"; "required": false; "isSignal": true; }; "seed": { "alias": "seed"; "required": false; "isSignal": true; }; "paused": { "alias": "paused"; "required": false; "isSignal": true; }; "adaptive": { "alias": "adaptive"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "cell": { "alias": "cell"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "falloff": { "alias": "falloff"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "rotation": { "alias": "rotation"; "required": false; "isSignal": true; }; "band": { "alias": "band"; "required": false; "isSignal": true; }; "amplitude": { "alias": "amplitude"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2017
+ }
2018
+
1742
2019
  /** Tryb ekranu — logowanie, rejestracja, odzyskiwanie hasła. */
1743
2020
  type KptAuthMode = 'signIn' | 'signUp' | 'forgot';
1744
2021
  /**
@@ -2677,63 +2954,135 @@ declare class KptCarousel<T = unknown> {
2677
2954
  declare class KptDataView<T = unknown> {
2678
2955
  readonly items: _angular_core.InputSignal<readonly T[]>;
2679
2956
  readonly layout: _angular_core.ModelSignal<"list" | "grid">;
2680
- readonly pageSize: _angular_core.InputSignal<number>;
2957
+ /** Rozmiar strony (dwukierunkowy — select paginatora go zmienia); 0 wyłącza stronicowanie. */
2958
+ readonly pageSize: _angular_core.ModelSignal<number>;
2959
+ /** Rozmiary do wyboru w paginatorze. Pusta lista = select z jedną, bieżącą wartością. */
2960
+ readonly pageSizeOptions: _angular_core.InputSignal<readonly number[]>;
2961
+ /**
2962
+ * Liczba kolumn siatki jako SUFIT, nie sztywna liczba; 0 = tyle, ile się zmieści.
2963
+ * Dwukierunkowa, bo pasek gęstości w toolbarze ją zmienia.
2964
+ */
2965
+ readonly gridColumns: _angular_core.ModelSignal<number>;
2966
+ /** Wartości w pasku gęstości. Mniej niż dwie = paska nie ma po co pokazywać. */
2967
+ readonly gridColumnsOptions: _angular_core.InputSignal<readonly number[]>;
2968
+ /** Najwęższa sensowna karta — poniżej tego siatka zdejmuje kolumnę, zamiast ściskać. */
2969
+ readonly gridMinWidth: _angular_core.InputSignal<string>;
2681
2970
  readonly paginated: _angular_core.InputSignalWithTransform<boolean, unknown>;
2682
2971
  protected readonly i18n: KptI18n;
2683
2972
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2684
2973
  protected readonly pageIndex: _angular_core.ModelSignal<number>;
2974
+ /** Pasek gęstości ma sens tylko w siatce i tylko wtedy, gdy jest w czym wybierać. */
2975
+ protected readonly showColumns: _angular_core.Signal<boolean>;
2976
+ /** Opcje selecta: własna lista albo — gdy pusta — sam bieżący rozmiar. */
2977
+ protected readonly pagerSizeOptions: _angular_core.Signal<readonly number[]>;
2978
+ /**
2979
+ * Pager zostaje na ekranie także wtedy, gdy wszystko mieści się na jednej stronie, o ile jest
2980
+ * w czym wybierać. Bez tego wybranie największego rozmiaru chowa select, którym użytkownik
2981
+ * właśnie się posłużył — i nie ma jak wrócić do mniejszego.
2982
+ */
2685
2983
  protected readonly showPager: _angular_core.Signal<boolean>;
2686
2984
  protected readonly pageItems: _angular_core.Signal<readonly T[]>;
2687
2985
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDataView<any>, never>;
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>;
2986
+ 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; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "gridColumns": { "alias": "gridColumns"; "required": false; "isSignal": true; }; "gridColumnsOptions": { "alias": "gridColumnsOptions"; "required": false; "isSignal": true; }; "gridMinWidth": { "alias": "gridMinWidth"; "required": false; "isSignal": true; }; "paginated": { "alias": "paginated"; "required": false; "isSignal": true; }; "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; }, { "layout": "layoutChange"; "pageSize": "pageSizeChange"; "gridColumns": "gridColumnsChange"; "pageIndex": "pageIndexChange"; }, ["itemTpl"], never, true, never>;
2689
2987
  }
2690
2988
 
2989
+ /** Strona listy — źródłowa (lewa) albo docelowa (prawa). */
2990
+ type KptPickListSide = 'source' | 'target';
2691
2991
  /**
2692
2992
  * PickList — transfer elementów między dwiema listami (źródło ↔ cel).
2693
2993
  * Szablon elementu przez projekcję `<ng-template let-item>`.
2994
+ * Dwuklik przerzuca pojedynczy element na drugą stronę; z `dragdrop` dochodzi przeciąganie
2995
+ * (porządkowanie wewnątrz panelu i przenoszenie na konkretną pozycję drugiego panelu).
2694
2996
  *
2695
2997
  * @example
2696
- * <kpt-pick-list [(source)]="available" [(target)]="selected" sourceHeader="Dostępne" targetHeader="Wybrane">
2998
+ * <kpt-pick-list [(source)]="available" [(target)]="selected" sourceHeader="Dostępne" targetHeader="Wybrane" dragdrop>
2697
2999
  * <ng-template let-item>{{ item.name }}</ng-template>
2698
3000
  * </kpt-pick-list>
2699
3001
  */
2700
3002
  declare class KptPickList<T = unknown> {
2701
- readonly source: _angular_core.ModelSignal<T[]>;
2702
- readonly target: _angular_core.ModelSignal<T[]>;
3003
+ readonly source: ModelSignal<T[]>;
3004
+ readonly target: ModelSignal<T[]>;
2703
3005
  /** Nagłówek listy źródłowej; bez wartości używa i18n (`pickList.available`). */
2704
3006
  readonly sourceHeader: _angular_core.InputSignal<string | undefined>;
2705
3007
  /** Nagłówek listy docelowej; bez wartości używa i18n (`pickList.selected`). */
2706
3008
  readonly targetHeader: _angular_core.InputSignal<string | undefined>;
3009
+ /** Umożliwia porządkowanie i przenoszenie elementów metodą przeciągnij-i-upuść. */
3010
+ readonly dragdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2707
3011
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2708
3012
  protected readonly i18n: KptI18n;
2709
3013
  protected readonly effectiveSourceHeader: _angular_core.Signal<string>;
2710
3014
  protected readonly effectiveTargetHeader: _angular_core.Signal<string>;
2711
- protected readonly selSource: _angular_core.WritableSignal<Set<T>>;
2712
- protected readonly selTarget: _angular_core.WritableSignal<Set<T>>;
2713
- protected toggle(side: 'source' | 'target', item: T): void;
2714
- protected move(from: 'source' | 'target', all: boolean): void;
3015
+ protected readonly selSource: WritableSignal<Set<T>>;
3016
+ protected readonly selTarget: WritableSignal<Set<T>>;
3017
+ /** Przeciągany element — strona i pozycja w jej tablicy. */
3018
+ protected readonly drag: WritableSignal<{
3019
+ side: KptPickListSide;
3020
+ index: number;
3021
+ } | null>;
3022
+ /** Element pod kursorem — rysuje wskaźnik miejsca upuszczenia. */
3023
+ protected readonly over: WritableSignal<{
3024
+ side: KptPickListSide;
3025
+ index: number;
3026
+ } | null>;
3027
+ /** Panel, nad którego pustym obszarem jest kursor — upuszczenie tam dopina na koniec. */
3028
+ protected readonly listOver: WritableSignal<KptPickListSide | null>;
3029
+ protected listOf(side: KptPickListSide): T[];
3030
+ protected selectionOf(side: KptPickListSide): Set<T>;
3031
+ protected headerOf(side: KptPickListSide): string;
3032
+ protected isDragging(side: KptPickListSide, index: number): boolean;
3033
+ protected isOver(side: KptPickListSide, index: number): boolean;
3034
+ private modelOf;
3035
+ private selectionSignal;
3036
+ private other;
3037
+ protected toggle(side: KptPickListSide, item: T): void;
3038
+ protected move(from: KptPickListSide, all: boolean): void;
3039
+ /** Dwuklik: przenosi wyłącznie klikniętą pozycję, niezależnie od zaznaczenia. */
3040
+ protected moveOne(from: KptPickListSide, item: T): void;
3041
+ protected onDragStart(side: KptPickListSide, index: number, event: DragEvent): void;
3042
+ protected onDragOver(side: KptPickListSide, index: number, event: DragEvent): void;
3043
+ protected onDrop(side: KptPickListSide, index: number, event: DragEvent): void;
3044
+ protected onListDragOver(side: KptPickListSide, event: DragEvent): void;
3045
+ protected onListDrop(side: KptPickListSide, event: DragEvent): void;
3046
+ protected clearDrag(): void;
3047
+ /** Przenosi jeden element między panelami, wstawiając go pod wskazanym indeksem. */
3048
+ private transfer;
2715
3049
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPickList<any>, never>;
2716
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPickList<any>, "kpt-pick-list", never, { "source": { "alias": "source"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "sourceHeader": { "alias": "sourceHeader"; "required": false; "isSignal": true; }; "targetHeader": { "alias": "targetHeader"; "required": false; "isSignal": true; }; }, { "source": "sourceChange"; "target": "targetChange"; }, ["itemTpl"], never, true, never>;
3050
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPickList<any>, "kpt-pick-list", never, { "source": { "alias": "source"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "sourceHeader": { "alias": "sourceHeader"; "required": false; "isSignal": true; }; "targetHeader": { "alias": "targetHeader"; "required": false; "isSignal": true; }; "dragdrop": { "alias": "dragdrop"; "required": false; "isSignal": true; }; }, { "source": "sourceChange"; "target": "targetChange"; }, ["itemTpl"], never, true, never>;
2717
3051
  }
2718
3052
 
2719
3053
  /**
2720
3054
  * OrderList — lista z ręcznym porządkowaniem elementów (w górę/dół).
2721
3055
  * Szablon elementu przez projekcję `<ng-template let-item>`.
3056
+ * Z `dragdrop` pozycje przestawia się także przeciąganiem.
2722
3057
  *
2723
3058
  * @example
2724
- * <kpt-order-list [(items)]="tasks" header="Kolejność">
3059
+ * <kpt-order-list [(items)]="tasks" header="Kolejność" dragdrop>
2725
3060
  * <ng-template let-item>{{ item.name }}</ng-template>
2726
3061
  * </kpt-order-list>
2727
3062
  */
2728
3063
  declare class KptOrderList<T = unknown> {
2729
3064
  readonly items: _angular_core.ModelSignal<T[]>;
2730
3065
  readonly header: _angular_core.InputSignal<string>;
3066
+ /** Umożliwia przestawianie pozycji metodą przeciągnij-i-upuść. */
3067
+ readonly dragdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2731
3068
  protected readonly i18n: KptI18n;
2732
3069
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2733
3070
  protected readonly selected: _angular_core.WritableSignal<number | null>;
3071
+ /** Indeks przeciąganej pozycji; `null` gdy nic nie jest przeciągane. */
3072
+ protected readonly dragIndex: _angular_core.WritableSignal<number | null>;
3073
+ /** Indeks pozycji pod kursorem — rysuje wskaźnik miejsca upuszczenia. */
3074
+ protected readonly overIndex: _angular_core.WritableSignal<number | null>;
3075
+ /** Kursor nad pustym obszarem listy — upuszczenie tam dopina na koniec. */
3076
+ protected readonly listOver: _angular_core.WritableSignal<boolean>;
2734
3077
  protected moveSelected(dir: -1 | 1): void;
3078
+ protected onDragStart(index: number, event: DragEvent): void;
3079
+ protected onDragOver(index: number, event: DragEvent): void;
3080
+ protected onDrop(index: number, event: DragEvent): void;
3081
+ protected onListDragOver(event: DragEvent): void;
3082
+ protected onListDrop(event: DragEvent): void;
3083
+ protected clearDrag(): void;
2735
3084
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptOrderList<any>, never>;
2736
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptOrderList<any>, "kpt-order-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; }, ["itemTpl"], never, true, never>;
3085
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptOrderList<any>, "kpt-order-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "dragdrop": { "alias": "dragdrop"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; }, ["itemTpl"], never, true, never>;
2737
3086
  }
2738
3087
 
2739
3088
  interface KptGalleriaItem {
@@ -2779,6 +3128,8 @@ declare class KptAlert {
2779
3128
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptAlert, "kpt-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
2780
3129
  }
2781
3130
 
3131
+ /** Szerokość okna. `md` to wartość domyślna i zarazem jedyna, jaką okno miało wcześniej. */
3132
+ type KptDialogSize = 'sm' | 'md' | 'lg';
2782
3133
  /**
2783
3134
  * Okno modalne na natywnym `<dialog>` (focus trap, ESC, backdrop w standardzie).
2784
3135
  * Sterowane sygnałem `open` (dwukierunkowe). Stopkę wstaw z atrybutem `kptDialogFooter`.
@@ -2796,6 +3147,12 @@ declare class KptDialog {
2796
3147
  /** Otwarcie okna (dwukierunkowe). */
2797
3148
  readonly open: _angular_core.ModelSignal<boolean>;
2798
3149
  readonly header: _angular_core.InputSignal<string>;
3150
+ /**
3151
+ * Szerokość okna: `sm` 24rem, `md` 32rem (domyślna), `lg` 48rem — zawsze przycięta do szerokości
3152
+ * okna przeglądarki. `lg` jest dla treści, której nie da się sensownie zwęzić: kodu, tabeli,
3153
+ * porównania dwóch kolumn.
3154
+ */
3155
+ readonly size: _angular_core.InputSignal<KptDialogSize>;
2799
3156
  /** Pozwala zamknąć klawiszem Esc / przyciskiem ×. */
2800
3157
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
2801
3158
  protected readonly i18n: KptI18n;
@@ -2816,7 +3173,7 @@ declare class KptDialog {
2816
3173
  private releaseOverlayContainer;
2817
3174
  protected onCancel(event: Event): void;
2818
3175
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDialog, never>;
2819
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDialog, "kpt-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*", "[kptDialogFooter]"], true, never>;
3176
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDialog, "kpt-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*", "[kptDialogFooter]"], true, never>;
2820
3177
  }
2821
3178
 
2822
3179
  interface KptToast {
@@ -2920,6 +3277,161 @@ declare class KptPopover {
2920
3277
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPopover, "kpt-popover", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, {}, never, ["[kptPopoverTrigger]", "*"], true, never>;
2921
3278
  }
2922
3279
 
3280
+ /** Z której strony triggera wychodzi karta. */
3281
+ type KptPeekPlacement = 'top' | 'bottom';
3282
+ /**
3283
+ * Trigger karty podglądu. Kładzie się na tym, co ma być zaczepieniem — najczęściej na wzmiance
3284
+ * w tekście, ale równie dobrze na awatarze, chipie czy zwykłym linku.
3285
+ *
3286
+ * Nasłuch siedzi tutaj, a nie na hoście `kpt-peek`: host obejmuje po otwarciu także panel,
3287
+ * więc opóźnienia liczyłyby się od złego elementu.
3288
+ */
3289
+ declare class KptPeekTrigger {
3290
+ readonly element: ElementRef<HTMLElement>;
3291
+ protected readonly peek: KptPeek;
3292
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPeekTrigger, never>;
3293
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptPeekTrigger, "[kptPeekTrigger]", never, {}, {}, never, never, true, never>;
3294
+ }
3295
+ /**
3296
+ * Karta podglądu pod kursorem — treść powiązana z tym, na co się patrzy, bez opuszczania tekstu.
3297
+ * Tym różni się od sąsiadów: `kptTooltip` niesie sam tekst i nie da się w nim kliknąć,
3298
+ * a `kpt-popover` otwiera dopiero klik i zasłania stronę backdropem.
3299
+ *
3300
+ * Hover pokazuje kartę po `openDelay`, zjazd kursora chowa ją po `closeDelay` — kursor musi mieć
3301
+ * czas przejechać z triggera na kartę, więc najazd na kartę anuluje zamknięcie. Fokus otwiera
3302
+ * kartę od razu (klawiatura nie przejeżdża po elementach przypadkiem), a klik, Enter albo dotyk
3303
+ * **przypina** ją: karta zostaje mimo zjazdu kursora, a fokus wchodzi do środka. To jedyna droga
3304
+ * do treści karty tam, gdzie hovera nie ma w ogóle.
3305
+ *
3306
+ * Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
3307
+ *
3308
+ * @example
3309
+ * <kpt-peek>
3310
+ * <a kptPeekTrigger href="/ludzie/anna">@Anna Kowalska</a>
3311
+ * <kpt-card>Profil, projekty, kontakt…</kpt-card>
3312
+ * </kpt-peek>
3313
+ */
3314
+ declare class KptPeek {
3315
+ /** Z której strony wychodzi karta; przy braku miejsca CDK i tak ją odwróci. */
3316
+ readonly placement: _angular_core.InputSignal<KptPeekPlacement>;
3317
+ /** Zwłoka otwarcia po najechaniu (ms) — bez niej karty mrugają przy przejeżdżaniu przez tekst. */
3318
+ readonly openDelay: _angular_core.InputSignalWithTransform<number, unknown>;
3319
+ /** Zwłoka zamknięcia po zjeździe kursora (ms) — tyle jest na przejazd z triggera na kartę. */
3320
+ readonly closeDelay: _angular_core.InputSignalWithTransform<number, unknown>;
3321
+ /** Wyłączona karta nie otwiera się wcale; trigger zostaje zwykłym linkiem czy przyciskiem. */
3322
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
3323
+ /** Nazwa karty dla czytnika ekranu; bez niej bierze się tekst triggera. */
3324
+ readonly label: _angular_core.InputSignal<string>;
3325
+ /** Otwarcie i zamknięcie karty — na `opened` aplikacja może dociągnąć dane. */
3326
+ readonly opened: _angular_core.OutputEmitterRef<void>;
3327
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3328
+ readonly panelId: string;
3329
+ private readonly panel;
3330
+ private readonly host;
3331
+ private readonly open;
3332
+ /** Przypięta karta zostaje po zjeździe kursora — przypina ją klik, Enter albo dotyk. */
3333
+ private readonly pinnedState;
3334
+ private timer?;
3335
+ readonly isOpen: _angular_core.Signal<boolean>;
3336
+ readonly pinned: _angular_core.Signal<boolean>;
3337
+ protected readonly positions: _angular_core.Signal<ConnectedPosition[]>;
3338
+ constructor();
3339
+ /** Najazd kursora — na trigger albo na samą kartę. */
3340
+ hoverIn(): void;
3341
+ /** Zjazd kursora; przypiętej karty nie rusza, bo tę zamyka dopiero Escape albo klik obok. */
3342
+ hoverOut(): void;
3343
+ /** Fokus otwiera bez zwłoki — klawiatura nie przejeżdża po elementach przypadkiem. */
3344
+ focusIn(): void;
3345
+ /** Wyjście fokusu poza kartę i trigger zamyka ją także wtedy, gdy była przypięta. */
3346
+ focusOut(): void;
3347
+ /** Klik, Enter albo dotyk: karta zostaje i przyjmuje fokus. */
3348
+ pin(): void;
3349
+ /** Escape: zamyka i oddaje fokus tam, skąd karta wyszła. */
3350
+ dismiss(): void;
3351
+ close(): void;
3352
+ /** Tekst triggera jako nazwa karty — `role="dialog"` bez nazwy nic czytnikowi nie mówi. */
3353
+ protected triggerText(): string;
3354
+ private show;
3355
+ private schedule;
3356
+ private stopTimer;
3357
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPeek, never>;
3358
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPeek, "kpt-peek", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, ["[kptPeekTrigger]", "*"], true, never>;
3359
+ }
3360
+
3361
+ /**
3362
+ * Wzmianka w tekście — `@ktoś` albo `@coś` jako element, na który da się najechać i zobaczyć
3363
+ * kartę podglądu z resztą powiązań. Treść karty daje aplikacja przez projekcję: biblioteka
3364
+ * nie wie, czym jest wzmiankowana rzecz, a osoba, zadanie i dokument wyglądają inaczej.
3365
+ *
3366
+ * Bez rzutowanej treści wzmianka zostaje samym napisem z podkreśleniem: nie ma czego pokazać,
3367
+ * więc trigger nie udaje, że coś się pod nim kryje.
3368
+ *
3369
+ * Trigger jest `<button>`, a nie `<span>`: karta otwiera się też z klawiatury i dotyku
3370
+ * (przypięcie), a to wymaga elementu, na który da się wejść Tabem. Z `href` staje się linkiem,
3371
+ * bo wtedy klik prowadzi gdzieś naprawdę.
3372
+ *
3373
+ * @example
3374
+ * <kpt-mention id="anna.k" label="Anna Kowalska">
3375
+ * <kpt-card>Profil, projekty, kontakt…</kpt-card>
3376
+ * </kpt-mention>
3377
+ */
3378
+ declare class KptMention {
3379
+ /** Cała pozycja naraz. Pojedyncze inputy poniżej mają nad nią priorytet. */
3380
+ readonly item: _angular_core.InputSignal<KptMentionItem<unknown> | null>;
3381
+ /** Identyfikator zapisany w treści — nie zmienia się przy zmianie nazwy. */
3382
+ readonly id: _angular_core.InputSignal<string>;
3383
+ /** Nazwa do pokazania; bez niej bierze się ją z `item`, a w ostateczności z `id`. */
3384
+ readonly label: _angular_core.InputSignal<string>;
3385
+ /** Rodzaj (osoba, zadanie, dokument) — ląduje w `data-kind`, więc da się go ostylować. */
3386
+ readonly kind: _angular_core.InputSignal<string>;
3387
+ /** Znak przed nazwą. Pusty łańcuch zostawia samą nazwę. */
3388
+ readonly prefix: _angular_core.InputSignal<string>;
3389
+ /** Adres, pod który prowadzi klik. Bez niego wzmianka jest przyciskiem otwierającym kartę. */
3390
+ readonly href: _angular_core.InputSignal<string | null>;
3391
+ readonly placement: _angular_core.InputSignal<KptPeekPlacement>;
3392
+ readonly openDelay: _angular_core.InputSignal<number>;
3393
+ /** Wyłączona wzmianka nie otwiera karty — zostaje samym napisem. */
3394
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
3395
+ protected readonly resolvedKind: _angular_core.Signal<string>;
3396
+ protected readonly display: _angular_core.Signal<string>;
3397
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptMention, never>;
3398
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptMention, "kpt-mention", never, { "item": { "alias": "item"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3399
+ }
3400
+
3401
+ /**
3402
+ * Akapit ze wzmiankami — tekst wchodzi jako zwykły napis, a `@wzmianki` wychodzą z niego jako
3403
+ * elementy z kartą podglądu. Rozbiciem zajmuje się `parseMentionText()` z `@konce-pt/mention`
3404
+ * (czysty TS z testami), więc oba porty czytają tę samą treść tak samo.
3405
+ *
3406
+ * Wzmianek nie renderujemy z HTML-a: treść zostaje tekstem, a wzmianka jest elementem, który
3407
+ * biblioteka sama zbudowała. Aplikacja nie musi więc przepuszczać przez sanitizer czegoś,
3408
+ * co i tak pochodzi od jej użytkowników.
3409
+ *
3410
+ * Kartę daje szablon w środku — kontekst dostaje pozycję jako `$implicit` oraz `id` i `label`,
3411
+ * bo wzmianka do czegoś, czego nie ma już na liście, też musi się wyrenderować.
3412
+ *
3413
+ * @example
3414
+ * <kpt-mentions [text]="note" [items]="people">
3415
+ * <ng-template let-item let-label="label">
3416
+ * <kpt-card>{{ item?.data?.role ?? label }}</kpt-card>
3417
+ * </ng-template>
3418
+ * </kpt-mentions>
3419
+ */
3420
+ declare class KptMentions<T = unknown> {
3421
+ /** Treść z wzmiankami: `@id` albo `@[Nazwa ze spacją](id)`. */
3422
+ readonly text: _angular_core.InputSignal<string>;
3423
+ /** Pozycje, po których rozwiązują się identyfikatory. Nieznane `id` zostaje etykietą. */
3424
+ readonly items: _angular_core.InputSignal<readonly KptMentionItem<T>[]>;
3425
+ /** Znak przed nazwą we wzmiance. */
3426
+ readonly prefix: _angular_core.InputSignal<string>;
3427
+ readonly placement: _angular_core.InputSignal<KptPeekPlacement>;
3428
+ /** Szablon karty; bez niego wzmianki są samym napisem, bo nie ma czego pokazać. */
3429
+ protected readonly cardTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
3430
+ protected readonly segments: _angular_core.Signal<KptMentionSegment<T>[]>;
3431
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptMentions<any>, never>;
3432
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptMentions<any>, "kpt-mentions", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, {}, ["cardTpl"], never, true, never>;
3433
+ }
3434
+
2923
3435
  /**
2924
3436
  * Pole z podpowiedziami (autocomplete) na CDK Overlay, Signal Forms. Wartość = wpisany tekst.
2925
3437
  * Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
@@ -3125,6 +3637,6 @@ declare class KptSpeedDial<T = unknown> {
3125
3637
  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>;
3126
3638
  }
3127
3639
 
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 };
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 };
3640
+ export { KPT_BREAKPOINTS, KPT_FORM_FIELD_CONTROL, KPT_I18N_CONFIG, KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAuth, KptAuthProviderDef, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBackdrop, 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, KptMention, KptMentions, KptMenu, KptMenubar, KptMeterGroup, KptOrderList, KptPaginator, KptPanel, KptPassword, KptPeek, KptPeekTrigger, 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 };
3641
+ export type { KptAlertVariant, KptAuthLayout, KptAuthMode, KptAuthProvider, KptAuthProviderLayout, KptAuthResetValue, KptAuthSignInValue, KptAuthSignUpValue, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeSize, KptBadgeVariant, KptBreadcrumbItem, KptBreakpoint, KptButtonSize, KptButtonVariant, KptCardVariant, KptCellEditEvent, KptChipTextTransform, KptChipVariant, KptColumn, KptColumnEdit, KptColumnEditType, KptConfirmOptions, KptConfirmRequest, KptDatepickerMode, KptDatepickerView, KptDialogSize, KptDividerOrientation, KptDrawerPosition, KptFormFieldControl, KptGalleriaItem, KptInputType, KptMenuItem, KptMeterItem, KptOption, KptPeekPlacement, KptProgressLabelPosition, KptProgressSize, KptProgressType, KptProgressValueFormat, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
3130
3642
  //# sourceMappingURL=konce-pt-angular.d.ts.map