@konce-pt/angular 0.8.2 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,6 +9,10 @@ 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';
@@ -64,9 +68,15 @@ declare class KptIconButton {
64
68
  * wtedy czego ogłosić. `null` (domyślnie) nie wypisuje atrybutu w ogóle.
65
69
  */
66
70
  readonly ariaPressed: _angular_core.InputSignal<boolean | null>;
71
+ /**
72
+ * Stan rozwinięcia dla przycisku otwierającego panel (wybierak, menu). Z tego samego powodu
73
+ * co `ariaPressed` musi zjechać na wewnętrzny `<button>` — host nie ma roli przycisku, więc
74
+ * atrybut postawiony na nim nie znaczy dla czytnika nic. `null` (domyślnie) go nie wypisuje.
75
+ */
76
+ readonly ariaExpanded: _angular_core.InputSignal<boolean | null>;
67
77
  protected readonly isDisabled: _angular_core.Signal<boolean>;
68
78
  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>;
79
+ 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
80
  }
71
81
 
72
82
  /** Opcja wyboru dla kontrolek typu select / radio-group. */
@@ -389,21 +399,30 @@ declare const KPT_I18N_CONFIG: InjectionToken<KptI18nConfig>;
389
399
  declare function provideKptI18n(config?: KptI18nConfig): EnvironmentProviders;
390
400
 
391
401
  type KptChipVariant = 'neutral' | 'primary' | 'success' | 'danger' | 'warning' | 'info';
402
+ /** Wielkość liter etykiety. */
403
+ type KptChipTextTransform = 'none' | 'capitalize' | 'uppercase' | 'lowercase';
392
404
  /**
393
405
  * Chip / tag — etykieta, opcjonalnie usuwalna.
394
406
  *
395
407
  * @example
396
408
  * <kpt-chip>Angular</kpt-chip>
397
409
  * <kpt-chip variant="success" removable (removed)="onRemove()">UI</kpt-chip>
410
+ * <kpt-chip textTransform="capitalize">nowość · zestaw startowy</kpt-chip>
398
411
  */
399
412
  declare class KptChip {
400
413
  readonly variant: _angular_core.InputSignal<KptChipVariant>;
414
+ /**
415
+ * Wielkość liter etykiety. `capitalize` podnosi pierwszą literę każdego słowa — także po
416
+ * dywizie („Agent-Ready"), bo CSS nie wie, gdzie kończy się wyraz złożony; przy takich
417
+ * napisach pewniejszy jest zapis wprost w treści.
418
+ */
419
+ readonly textTransform: _angular_core.InputSignal<KptChipTextTransform>;
401
420
  readonly removable: _angular_core.InputSignalWithTransform<boolean, unknown>;
402
421
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
403
422
  readonly removed: _angular_core.OutputEmitterRef<void>;
404
423
  protected readonly i18n: KptI18n;
405
424
  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>;
425
+ 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
426
  }
408
427
 
409
428
  type KptAvatarSize = 'sm' | 'md' | 'lg' | 'xl';
@@ -972,11 +991,30 @@ declare class KptRichText implements FormValueControl<string> {
972
991
  readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
973
992
  /** Stan nieprawidłowy pokazujemy dopiero po dotknięciu pola — jak natywne `:user-invalid`. */
974
993
  protected readonly showInvalid: _angular_core.Signal<boolean>;
994
+ /**
995
+ * Pozycje do podpowiedzi wzmianek. Pusta lista wyłącza mechanizm: `@` zostaje wtedy zwykłym
996
+ * znakiem, bo nie ma czego podpowiadać.
997
+ */
998
+ readonly mentions: _angular_core.InputSignal<readonly KptMentionItem<unknown>[]>;
999
+ /** Ile podpowiedzi naraz. */
1000
+ readonly mentionLimit: _angular_core.InputSignalWithTransform<number, unknown>;
975
1001
  readonly touch: _angular_core.OutputEmitterRef<void>;
1002
+ /** Wstawiona wzmianka — moment na powiadomienie osoby albo dopięcie powiązania. */
1003
+ readonly mentioned: _angular_core.OutputEmitterRef<KptMentionItem<unknown>>;
976
1004
  protected readonly i18n: KptI18n;
977
1005
  protected readonly swatches: string[];
978
1006
  private readonly editor;
979
1007
  private savedRange;
1008
+ protected readonly mentionOpen: _angular_core.WritableSignal<boolean>;
1009
+ protected readonly mentionMatches: _angular_core.WritableSignal<readonly KptMentionItem<unknown>[]>;
1010
+ protected readonly mentionActive: _angular_core.WritableSignal<number>;
1011
+ /** Zaczepienie listy w miejscu kursora — punkt, nie element, bo `@` nie ma własnego elementu. */
1012
+ protected readonly mentionPoint: _angular_core.WritableSignal<{
1013
+ x: number;
1014
+ y: number;
1015
+ }>;
1016
+ /** Węzeł tekstowy i zakres zapytania `@…`, który podmieni wybrana pozycja. */
1017
+ private mentionRange;
980
1018
  protected readonly colorOpen: _angular_core.WritableSignal<boolean>;
981
1019
  protected readonly colorKind: _angular_core.WritableSignal<"foreColor" | "backColor" | "cellBg">;
982
1020
  protected readonly sourceView: _angular_core.WritableSignal<boolean>;
@@ -1130,6 +1168,29 @@ declare class KptRichText implements FormValueControl<string> {
1130
1168
  * Brak schematu → dopisz `https://` (spójne z zachowaniem `normalizeUrl` w mapie); `#`/`/`
1131
1169
  * przechodzą bez zmian; schemat spoza `SAFE_URL_SCHEME` → `null` (link nie zostaje wstawiony).
1132
1170
  */
1171
+ /**
1172
+ * Sprawdza, czy kursor stoi w zapytaniu `@…`, i ustawia listę podpowiedzi.
1173
+ *
1174
+ * Zapytanie liczymy z **węzła tekstowego**, nie z całego HTML-a: w treści siedzą tagi, a `@`
1175
+ * ma widzieć tylko to, co użytkownik naprawdę napisał w tym miejscu. Rozpoznanie zostawiamy
1176
+ * `mentionQuery()` z `@konce-pt/mention` — te same reguły działają w obu portach i w zwykłym
1177
+ * polu tekstowym.
1178
+ */
1179
+ private syncMention;
1180
+ /** Punkt pod kursorem — lista podpowiedzi zaczepia się o niego, bo `@` nie ma swojego elementu. */
1181
+ private caretPoint;
1182
+ /** Klawiatura listy podpowiedzi; `true` = zdarzenie obsłużone i edytor go już nie zobaczy. */
1183
+ private onMentionKeydown;
1184
+ /**
1185
+ * Wstawia wzmiankę w miejsce zapytania `@…`.
1186
+ *
1187
+ * Wzmianka jest elementem, nie samym tekstem: `data-mention` niesie identyfikator, który
1188
+ * przeżyje zmianę nazwy, a `contenteditable="false"` trzyma ją w jednym kawałku — bez tego
1189
+ * kursor wchodziłby w środek nazwiska i psuł zapis. Spacja po wzmiance daje gdzie postawić
1190
+ * kursor: bez niej nie da się wyjść poza element, który nie jest edytowalny.
1191
+ */
1192
+ protected insertMention(item: KptMentionItem): void;
1193
+ protected closeMention(): void;
1133
1194
  private sanitizeUrl;
1134
1195
  private sanitizeHtml;
1135
1196
  /** Tag spoza allowlisty rozwijamy do dzieci; atrybuty czyścimy po kolei. */
@@ -1138,7 +1199,7 @@ declare class KptRichText implements FormValueControl<string> {
1138
1199
  /** Deklaracje `style` z allowlisty; `null`, gdy nie zostaje nic. */
1139
1200
  private sanitizeStyleAttr;
1140
1201
  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>;
1202
+ 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
1203
  }
1143
1204
 
1144
1205
  /** Wartość suwaka: pojedyncza liczba lub para `[min, max]` w trybie `range`. */
@@ -1739,6 +1800,154 @@ declare class KptShellNavToggle {
1739
1800
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptShellNavToggle, "[kptShellNavToggle]", never, { "label": { "alias": "kptShellNavToggle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1740
1801
  }
1741
1802
 
1803
+ /**
1804
+ * Dekoracyjna warstwa tła dla sekcji: komponent obejmuje treść i maluje pod nią animowany canvas.
1805
+ * Sięga się po niego tam, gdzie płaska powierzchnia wygląda na niedokończoną, a wideo albo duży
1806
+ * obraz kosztowałyby transfer i nie poszłyby za motywem.
1807
+ *
1808
+ * Komponent jest opakowaniem: canvas leży pod spodem, a treść z `ng-content` idzie warstwę wyżej
1809
+ * i zachowuje się zwyczajnie. Rysowanie stoi, gdy nie ma czego oglądać — sekcja poza ekranem,
1810
+ * karta w tle, `paused`, `speed` równe zeru albo ograniczony ruch w systemie; wtedy zostaje jedna
1811
+ * statyczna klatka zamiast pustki, bo efekt jest częścią kompozycji, nie ozdobą.
1812
+ *
1813
+ * Dwa efekty: `signal-grid` (drobna siatka migoczących kwadratów, gęsta przy jednej krawędzi)
1814
+ * i `wave` (jedna miękka wstęga światła z barwami przesuwającymi się wzdłuż niej). Każdy czyta
1815
+ * własny zestaw wejść — pozostałe po prostu go nie dotyczą.
1816
+ *
1817
+ * Sam komponent to cykl życia; rysowanie i cała matematyka siedzą w `@konce-pt/backdrop`,
1818
+ * wspólnym z portem Reacta.
1819
+ *
1820
+ * @example
1821
+ * <kpt-backdrop effect="wave" [rotation]="18" [colors]="['#5b8af2', '#a86df2', '#f25b9e']">
1822
+ * <h1>Zbuduj aplikację od pierwszego promptu</h1>
1823
+ * <kpt-button>Zacznij</kpt-button>
1824
+ * </kpt-backdrop>
1825
+ */
1826
+ declare class KptBackdrop {
1827
+ /** Rysowany efekt. */
1828
+ readonly effect: _angular_core.InputSignal<KptBackdropEffect>;
1829
+ /** Tło sekcji. Puste bierze `--kpt-color-surface`. */
1830
+ readonly background: _angular_core.InputSignal<string>;
1831
+ /** Tempo; 1 to spokojne tempo obu efektów, 0 zatrzymuje obraz. */
1832
+ readonly speed: _angular_core.InputSignalWithTransform<number, unknown>;
1833
+ /** Ziarno losowania — ta sama wartość daje ten sam układ kwadratów i ten sam przebieg wstęgi. */
1834
+ readonly seed: _angular_core.InputSignalWithTransform<number, unknown>;
1835
+ /** Zatrzymuje animację, zostawiając ostatnią klatkę. */
1836
+ readonly paused: _angular_core.InputSignalWithTransform<boolean, unknown>;
1837
+ /**
1838
+ * Przenosi barwy wpisane na sztywno na powierzchnię bieżącego motywu: czerń dobrana do białego
1839
+ * tła staje się bielą, gdy tło jest ciemne. Rusza wyłącznie jasność — odcień i nasycenie
1840
+ * zostają, więc barwa marki nie zmienia się w inną barwę.
1841
+ *
1842
+ * Dotyczy `color`, `colors` i `background`, ale tylko wtedy, gdy podano je literałem. Wejście
1843
+ * puste bierze token, a zapis z `var()` sam po token sięga — jedno i drugie już idzie za motywem
1844
+ * i adaptacja odwróciłaby je drugi raz.
1845
+ */
1846
+ readonly adaptive: _angular_core.InputSignalWithTransform<boolean, unknown>;
1847
+ /**
1848
+ * `signal-grid`: kolor kwadratów — dowolny zapis CSS, także sięgający po tokeny, np.
1849
+ * `color-mix(in oklab, #5b8af2, var(--kpt-color-surface) 30%)`. Taki zapis przelicza się przy
1850
+ * zmianie motywu; literał zostaje literałem. Puste bierze `--kpt-color-primary`.
1851
+ */
1852
+ readonly color: _angular_core.InputSignal<string>;
1853
+ /** `signal-grid`: przy której krawędzi siatka jest najgęstsza. */
1854
+ readonly anchor: _angular_core.InputSignal<KptBackdropAnchor>;
1855
+ /** `signal-grid`: bok kwadratu (px). */
1856
+ readonly cell: _angular_core.InputSignalWithTransform<number, unknown>;
1857
+ /** `signal-grid`: odstęp między kwadratami (px). */
1858
+ readonly gap: _angular_core.InputSignalWithTransform<number, unknown>;
1859
+ /** `signal-grid`: udział zapalonych komórek przy kotwicy, 0–1. */
1860
+ readonly density: _angular_core.InputSignalWithTransform<number, unknown>;
1861
+ /** `signal-grid`: jak szybko siatka gaśnie ku przeciwnej krawędzi. */
1862
+ readonly falloff: _angular_core.InputSignalWithTransform<number, unknown>;
1863
+ /**
1864
+ * `wave`: rampa barw, po której przesuwa się wstęga — każdy przystanek dowolnym zapisem CSS.
1865
+ * Zamknięta w pętlę, więc ostatnia barwa wraca do pierwszej. Pusta bierze `--kpt-color-primary`
1866
+ * i dwie barwy wyprowadzone z niego obrotem odcienia — paleta biblioteki jest neutralna, więc
1867
+ * domyślna wstęga jest jednobarwna i przygaszona. Po kolory sięga się tu, nie do tokenów
1868
+ * statusowych. Zapis może sięgać po tokeny i wtedy idzie za motywem. Przystanek, którego
1869
+ * przeglądarka nie uznaje za kolor, wypada z rampy; gdy wypadną wszystkie, zostaje rampa
1870
+ * domyślna.
1871
+ */
1872
+ readonly colors: _angular_core.InputSignal<readonly string[]>;
1873
+ /** `wave`: kąt, pod jakim prąd przecina kadr (stopnie); 0 to poziomo w prawo. */
1874
+ readonly rotation: _angular_core.InputSignalWithTransform<number, unknown>;
1875
+ /** `wave`: szerokość wstęgi jako ułamek wysokości kadru. */
1876
+ readonly band: _angular_core.InputSignalWithTransform<number, unknown>;
1877
+ /** `wave`: jak mocno faluje linia środkowa. Zero zatrzymuje falowanie, nie barwy. */
1878
+ readonly amplitude: _angular_core.InputSignalWithTransform<number, unknown>;
1879
+ private readonly canvas;
1880
+ private readonly host;
1881
+ private context;
1882
+ private renderer;
1883
+ private width;
1884
+ private height;
1885
+ /**
1886
+ * Czas animacji w sekundach. Rośnie o krok przemnożony przez `speed`, więc ruch suwaka
1887
+ * prędkości przyspiesza obraz zamiast go przeskakiwać.
1888
+ */
1889
+ private clock;
1890
+ private last;
1891
+ private raf;
1892
+ private onScreen;
1893
+ private reduced;
1894
+ private ready;
1895
+ /** Kolor wiodący, z którym zbudowany jest bieżący renderer — punkt odniesienia dla zmiany motywu. */
1896
+ private lead;
1897
+ /** Ostatnio zgłoszony zestaw odrzuconych barw — żeby nie powtarzać tego samego ostrzeżenia. */
1898
+ private reported;
1899
+ /** Tło po adaptacji. Puste znaczy „nie ma czego podmieniać" i wtedy liczy się samo `background`. */
1900
+ private readonly adapted;
1901
+ /** Tło malowane na hoście: po adaptacji, jeśli jest, inaczej to, co podano. */
1902
+ protected readonly surface: _angular_core.Signal<string | null>;
1903
+ /**
1904
+ * Ton i kolor treści dobrane do malowanego tła. Puste znaczy „sekcja nie ma własnego tła"
1905
+ * i wtedy treść zostaje przy `--kpt-color-on-surface` ze stylu.
1906
+ */
1907
+ protected readonly ink: _angular_core.WritableSignal<KptBackdropInk>;
1908
+ private resize?;
1909
+ private intersect?;
1910
+ private unwatchTheme?;
1911
+ private motion?;
1912
+ constructor();
1913
+ /** Nowy przebieg efektu przy tym samym rozmiarze i tych samych wejściach. */
1914
+ reseed(): void;
1915
+ private readonly tick;
1916
+ private paint;
1917
+ private build;
1918
+ /**
1919
+ * Ostrzeżenie o przystankach rampy, których przeglądarka nie uznała za kolor.
1920
+ *
1921
+ * `build()` chodzi przy każdej zmianie wejść, więc ciągnięcie suwaka nad wadliwą rampą zasypałoby
1922
+ * konsolę tym samym zdaniem — zgłaszamy dopiero zestaw inny niż poprzednio.
1923
+ */
1924
+ private reportInvalid;
1925
+ private measure;
1926
+ private sync;
1927
+ private watchSize;
1928
+ /** Sekcja poza ekranem i karta w tle to ten sam przypadek: nie ma czego oglądać. */
1929
+ private watchVisibility;
1930
+ private readonly onTabSwitch;
1931
+ private watchMotion;
1932
+ private readonly onMotionChange;
1933
+ private watchTheme;
1934
+ /**
1935
+ * Zmiana motywu przestawia tokeny, a kolory renderera są już wyliczone — trzeba je odczytać
1936
+ * na nowo. Nasłuch trafia też w zmiany niezwiązane z barwą (klasa nakładki na `<html>`, dowolne
1937
+ * nadpisanie inline u przodka), więc renderer przebudowuje się dopiero wtedy, gdy odczyt
1938
+ * naprawdę dał inny kolor.
1939
+ */
1940
+ /**
1941
+ * Kolor wiodący liczony dokładnie tak, jak liczy go `build()` — inaczej strażnik porównywałby
1942
+ * wartość sprzed adaptacji z zapamiętaną po adaptacji i przebudowywałby renderer bez przerwy.
1943
+ */
1944
+ private leadNow;
1945
+ private readonly refreshColors;
1946
+ private teardown;
1947
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptBackdrop, never>;
1948
+ 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>;
1949
+ }
1950
+
1742
1951
  /** Tryb ekranu — logowanie, rejestracja, odzyskiwanie hasła. */
1743
1952
  type KptAuthMode = 'signIn' | 'signUp' | 'forgot';
1744
1953
  /**
@@ -2677,63 +2886,135 @@ declare class KptCarousel<T = unknown> {
2677
2886
  declare class KptDataView<T = unknown> {
2678
2887
  readonly items: _angular_core.InputSignal<readonly T[]>;
2679
2888
  readonly layout: _angular_core.ModelSignal<"list" | "grid">;
2680
- readonly pageSize: _angular_core.InputSignal<number>;
2889
+ /** Rozmiar strony (dwukierunkowy — select paginatora go zmienia); 0 wyłącza stronicowanie. */
2890
+ readonly pageSize: _angular_core.ModelSignal<number>;
2891
+ /** Rozmiary do wyboru w paginatorze. Pusta lista = select z jedną, bieżącą wartością. */
2892
+ readonly pageSizeOptions: _angular_core.InputSignal<readonly number[]>;
2893
+ /**
2894
+ * Liczba kolumn siatki jako SUFIT, nie sztywna liczba; 0 = tyle, ile się zmieści.
2895
+ * Dwukierunkowa, bo pasek gęstości w toolbarze ją zmienia.
2896
+ */
2897
+ readonly gridColumns: _angular_core.ModelSignal<number>;
2898
+ /** Wartości w pasku gęstości. Mniej niż dwie = paska nie ma po co pokazywać. */
2899
+ readonly gridColumnsOptions: _angular_core.InputSignal<readonly number[]>;
2900
+ /** Najwęższa sensowna karta — poniżej tego siatka zdejmuje kolumnę, zamiast ściskać. */
2901
+ readonly gridMinWidth: _angular_core.InputSignal<string>;
2681
2902
  readonly paginated: _angular_core.InputSignalWithTransform<boolean, unknown>;
2682
2903
  protected readonly i18n: KptI18n;
2683
2904
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2684
2905
  protected readonly pageIndex: _angular_core.ModelSignal<number>;
2906
+ /** Pasek gęstości ma sens tylko w siatce i tylko wtedy, gdy jest w czym wybierać. */
2907
+ protected readonly showColumns: _angular_core.Signal<boolean>;
2908
+ /** Opcje selecta: własna lista albo — gdy pusta — sam bieżący rozmiar. */
2909
+ protected readonly pagerSizeOptions: _angular_core.Signal<readonly number[]>;
2910
+ /**
2911
+ * Pager zostaje na ekranie także wtedy, gdy wszystko mieści się na jednej stronie, o ile jest
2912
+ * w czym wybierać. Bez tego wybranie największego rozmiaru chowa select, którym użytkownik
2913
+ * właśnie się posłużył — i nie ma jak wrócić do mniejszego.
2914
+ */
2685
2915
  protected readonly showPager: _angular_core.Signal<boolean>;
2686
2916
  protected readonly pageItems: _angular_core.Signal<readonly T[]>;
2687
2917
  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>;
2918
+ 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
2919
  }
2690
2920
 
2921
+ /** Strona listy — źródłowa (lewa) albo docelowa (prawa). */
2922
+ type KptPickListSide = 'source' | 'target';
2691
2923
  /**
2692
2924
  * PickList — transfer elementów między dwiema listami (źródło ↔ cel).
2693
2925
  * Szablon elementu przez projekcję `<ng-template let-item>`.
2926
+ * Dwuklik przerzuca pojedynczy element na drugą stronę; z `dragdrop` dochodzi przeciąganie
2927
+ * (porządkowanie wewnątrz panelu i przenoszenie na konkretną pozycję drugiego panelu).
2694
2928
  *
2695
2929
  * @example
2696
- * <kpt-pick-list [(source)]="available" [(target)]="selected" sourceHeader="Dostępne" targetHeader="Wybrane">
2930
+ * <kpt-pick-list [(source)]="available" [(target)]="selected" sourceHeader="Dostępne" targetHeader="Wybrane" dragdrop>
2697
2931
  * <ng-template let-item>{{ item.name }}</ng-template>
2698
2932
  * </kpt-pick-list>
2699
2933
  */
2700
2934
  declare class KptPickList<T = unknown> {
2701
- readonly source: _angular_core.ModelSignal<T[]>;
2702
- readonly target: _angular_core.ModelSignal<T[]>;
2935
+ readonly source: ModelSignal<T[]>;
2936
+ readonly target: ModelSignal<T[]>;
2703
2937
  /** Nagłówek listy źródłowej; bez wartości używa i18n (`pickList.available`). */
2704
2938
  readonly sourceHeader: _angular_core.InputSignal<string | undefined>;
2705
2939
  /** Nagłówek listy docelowej; bez wartości używa i18n (`pickList.selected`). */
2706
2940
  readonly targetHeader: _angular_core.InputSignal<string | undefined>;
2941
+ /** Umożliwia porządkowanie i przenoszenie elementów metodą przeciągnij-i-upuść. */
2942
+ readonly dragdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2707
2943
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2708
2944
  protected readonly i18n: KptI18n;
2709
2945
  protected readonly effectiveSourceHeader: _angular_core.Signal<string>;
2710
2946
  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;
2947
+ protected readonly selSource: WritableSignal<Set<T>>;
2948
+ protected readonly selTarget: WritableSignal<Set<T>>;
2949
+ /** Przeciągany element — strona i pozycja w jej tablicy. */
2950
+ protected readonly drag: WritableSignal<{
2951
+ side: KptPickListSide;
2952
+ index: number;
2953
+ } | null>;
2954
+ /** Element pod kursorem — rysuje wskaźnik miejsca upuszczenia. */
2955
+ protected readonly over: WritableSignal<{
2956
+ side: KptPickListSide;
2957
+ index: number;
2958
+ } | null>;
2959
+ /** Panel, nad którego pustym obszarem jest kursor — upuszczenie tam dopina na koniec. */
2960
+ protected readonly listOver: WritableSignal<KptPickListSide | null>;
2961
+ protected listOf(side: KptPickListSide): T[];
2962
+ protected selectionOf(side: KptPickListSide): Set<T>;
2963
+ protected headerOf(side: KptPickListSide): string;
2964
+ protected isDragging(side: KptPickListSide, index: number): boolean;
2965
+ protected isOver(side: KptPickListSide, index: number): boolean;
2966
+ private modelOf;
2967
+ private selectionSignal;
2968
+ private other;
2969
+ protected toggle(side: KptPickListSide, item: T): void;
2970
+ protected move(from: KptPickListSide, all: boolean): void;
2971
+ /** Dwuklik: przenosi wyłącznie klikniętą pozycję, niezależnie od zaznaczenia. */
2972
+ protected moveOne(from: KptPickListSide, item: T): void;
2973
+ protected onDragStart(side: KptPickListSide, index: number, event: DragEvent): void;
2974
+ protected onDragOver(side: KptPickListSide, index: number, event: DragEvent): void;
2975
+ protected onDrop(side: KptPickListSide, index: number, event: DragEvent): void;
2976
+ protected onListDragOver(side: KptPickListSide, event: DragEvent): void;
2977
+ protected onListDrop(side: KptPickListSide, event: DragEvent): void;
2978
+ protected clearDrag(): void;
2979
+ /** Przenosi jeden element między panelami, wstawiając go pod wskazanym indeksem. */
2980
+ private transfer;
2715
2981
  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>;
2982
+ 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
2983
  }
2718
2984
 
2719
2985
  /**
2720
2986
  * OrderList — lista z ręcznym porządkowaniem elementów (w górę/dół).
2721
2987
  * Szablon elementu przez projekcję `<ng-template let-item>`.
2988
+ * Z `dragdrop` pozycje przestawia się także przeciąganiem.
2722
2989
  *
2723
2990
  * @example
2724
- * <kpt-order-list [(items)]="tasks" header="Kolejność">
2991
+ * <kpt-order-list [(items)]="tasks" header="Kolejność" dragdrop>
2725
2992
  * <ng-template let-item>{{ item.name }}</ng-template>
2726
2993
  * </kpt-order-list>
2727
2994
  */
2728
2995
  declare class KptOrderList<T = unknown> {
2729
2996
  readonly items: _angular_core.ModelSignal<T[]>;
2730
2997
  readonly header: _angular_core.InputSignal<string>;
2998
+ /** Umożliwia przestawianie pozycji metodą przeciągnij-i-upuść. */
2999
+ readonly dragdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2731
3000
  protected readonly i18n: KptI18n;
2732
3001
  protected readonly itemTpl: _angular_core.Signal<TemplateRef<any>>;
2733
3002
  protected readonly selected: _angular_core.WritableSignal<number | null>;
3003
+ /** Indeks przeciąganej pozycji; `null` gdy nic nie jest przeciągane. */
3004
+ protected readonly dragIndex: _angular_core.WritableSignal<number | null>;
3005
+ /** Indeks pozycji pod kursorem — rysuje wskaźnik miejsca upuszczenia. */
3006
+ protected readonly overIndex: _angular_core.WritableSignal<number | null>;
3007
+ /** Kursor nad pustym obszarem listy — upuszczenie tam dopina na koniec. */
3008
+ protected readonly listOver: _angular_core.WritableSignal<boolean>;
2734
3009
  protected moveSelected(dir: -1 | 1): void;
3010
+ protected onDragStart(index: number, event: DragEvent): void;
3011
+ protected onDragOver(index: number, event: DragEvent): void;
3012
+ protected onDrop(index: number, event: DragEvent): void;
3013
+ protected onListDragOver(event: DragEvent): void;
3014
+ protected onListDrop(event: DragEvent): void;
3015
+ protected clearDrag(): void;
2735
3016
  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>;
3017
+ 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
3018
  }
2738
3019
 
2739
3020
  interface KptGalleriaItem {
@@ -2920,6 +3201,161 @@ declare class KptPopover {
2920
3201
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPopover, "kpt-popover", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, {}, never, ["[kptPopoverTrigger]", "*"], true, never>;
2921
3202
  }
2922
3203
 
3204
+ /** Z której strony triggera wychodzi karta. */
3205
+ type KptPeekPlacement = 'top' | 'bottom';
3206
+ /**
3207
+ * Trigger karty podglądu. Kładzie się na tym, co ma być zaczepieniem — najczęściej na wzmiance
3208
+ * w tekście, ale równie dobrze na awatarze, chipie czy zwykłym linku.
3209
+ *
3210
+ * Nasłuch siedzi tutaj, a nie na hoście `kpt-peek`: host obejmuje po otwarciu także panel,
3211
+ * więc opóźnienia liczyłyby się od złego elementu.
3212
+ */
3213
+ declare class KptPeekTrigger {
3214
+ readonly element: ElementRef<HTMLElement>;
3215
+ protected readonly peek: KptPeek;
3216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPeekTrigger, never>;
3217
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KptPeekTrigger, "[kptPeekTrigger]", never, {}, {}, never, never, true, never>;
3218
+ }
3219
+ /**
3220
+ * Karta podglądu pod kursorem — treść powiązana z tym, na co się patrzy, bez opuszczania tekstu.
3221
+ * Tym różni się od sąsiadów: `kptTooltip` niesie sam tekst i nie da się w nim kliknąć,
3222
+ * a `kpt-popover` otwiera dopiero klik i zasłania stronę backdropem.
3223
+ *
3224
+ * Hover pokazuje kartę po `openDelay`, zjazd kursora chowa ją po `closeDelay` — kursor musi mieć
3225
+ * czas przejechać z triggera na kartę, więc najazd na kartę anuluje zamknięcie. Fokus otwiera
3226
+ * kartę od razu (klawiatura nie przejeżdża po elementach przypadkiem), a klik, Enter albo dotyk
3227
+ * **przypina** ją: karta zostaje mimo zjazdu kursora, a fokus wchodzi do środka. To jedyna droga
3228
+ * do treści karty tam, gdzie hovera nie ma w ogóle.
3229
+ *
3230
+ * Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
3231
+ *
3232
+ * @example
3233
+ * <kpt-peek>
3234
+ * <a kptPeekTrigger href="/ludzie/anna">@Anna Kowalska</a>
3235
+ * <kpt-card>Profil, projekty, kontakt…</kpt-card>
3236
+ * </kpt-peek>
3237
+ */
3238
+ declare class KptPeek {
3239
+ /** Z której strony wychodzi karta; przy braku miejsca CDK i tak ją odwróci. */
3240
+ readonly placement: _angular_core.InputSignal<KptPeekPlacement>;
3241
+ /** Zwłoka otwarcia po najechaniu (ms) — bez niej karty mrugają przy przejeżdżaniu przez tekst. */
3242
+ readonly openDelay: _angular_core.InputSignalWithTransform<number, unknown>;
3243
+ /** Zwłoka zamknięcia po zjeździe kursora (ms) — tyle jest na przejazd z triggera na kartę. */
3244
+ readonly closeDelay: _angular_core.InputSignalWithTransform<number, unknown>;
3245
+ /** Wyłączona karta nie otwiera się wcale; trigger zostaje zwykłym linkiem czy przyciskiem. */
3246
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
3247
+ /** Nazwa karty dla czytnika ekranu; bez niej bierze się tekst triggera. */
3248
+ readonly label: _angular_core.InputSignal<string>;
3249
+ /** Otwarcie i zamknięcie karty — na `opened` aplikacja może dociągnąć dane. */
3250
+ readonly opened: _angular_core.OutputEmitterRef<void>;
3251
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3252
+ readonly panelId: string;
3253
+ private readonly panel;
3254
+ private readonly host;
3255
+ private readonly open;
3256
+ /** Przypięta karta zostaje po zjeździe kursora — przypina ją klik, Enter albo dotyk. */
3257
+ private readonly pinnedState;
3258
+ private timer?;
3259
+ readonly isOpen: _angular_core.Signal<boolean>;
3260
+ readonly pinned: _angular_core.Signal<boolean>;
3261
+ protected readonly positions: _angular_core.Signal<ConnectedPosition[]>;
3262
+ constructor();
3263
+ /** Najazd kursora — na trigger albo na samą kartę. */
3264
+ hoverIn(): void;
3265
+ /** Zjazd kursora; przypiętej karty nie rusza, bo tę zamyka dopiero Escape albo klik obok. */
3266
+ hoverOut(): void;
3267
+ /** Fokus otwiera bez zwłoki — klawiatura nie przejeżdża po elementach przypadkiem. */
3268
+ focusIn(): void;
3269
+ /** Wyjście fokusu poza kartę i trigger zamyka ją także wtedy, gdy była przypięta. */
3270
+ focusOut(): void;
3271
+ /** Klik, Enter albo dotyk: karta zostaje i przyjmuje fokus. */
3272
+ pin(): void;
3273
+ /** Escape: zamyka i oddaje fokus tam, skąd karta wyszła. */
3274
+ dismiss(): void;
3275
+ close(): void;
3276
+ /** Tekst triggera jako nazwa karty — `role="dialog"` bez nazwy nic czytnikowi nie mówi. */
3277
+ protected triggerText(): string;
3278
+ private show;
3279
+ private schedule;
3280
+ private stopTimer;
3281
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptPeek, never>;
3282
+ 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>;
3283
+ }
3284
+
3285
+ /**
3286
+ * Wzmianka w tekście — `@ktoś` albo `@coś` jako element, na który da się najechać i zobaczyć
3287
+ * kartę podglądu z resztą powiązań. Treść karty daje aplikacja przez projekcję: biblioteka
3288
+ * nie wie, czym jest wzmiankowana rzecz, a osoba, zadanie i dokument wyglądają inaczej.
3289
+ *
3290
+ * Bez rzutowanej treści wzmianka zostaje samym napisem z podkreśleniem: nie ma czego pokazać,
3291
+ * więc trigger nie udaje, że coś się pod nim kryje.
3292
+ *
3293
+ * Trigger jest `<button>`, a nie `<span>`: karta otwiera się też z klawiatury i dotyku
3294
+ * (przypięcie), a to wymaga elementu, na który da się wejść Tabem. Z `href` staje się linkiem,
3295
+ * bo wtedy klik prowadzi gdzieś naprawdę.
3296
+ *
3297
+ * @example
3298
+ * <kpt-mention id="anna.k" label="Anna Kowalska">
3299
+ * <kpt-card>Profil, projekty, kontakt…</kpt-card>
3300
+ * </kpt-mention>
3301
+ */
3302
+ declare class KptMention {
3303
+ /** Cała pozycja naraz. Pojedyncze inputy poniżej mają nad nią priorytet. */
3304
+ readonly item: _angular_core.InputSignal<KptMentionItem<unknown> | null>;
3305
+ /** Identyfikator zapisany w treści — nie zmienia się przy zmianie nazwy. */
3306
+ readonly id: _angular_core.InputSignal<string>;
3307
+ /** Nazwa do pokazania; bez niej bierze się ją z `item`, a w ostateczności z `id`. */
3308
+ readonly label: _angular_core.InputSignal<string>;
3309
+ /** Rodzaj (osoba, zadanie, dokument) — ląduje w `data-kind`, więc da się go ostylować. */
3310
+ readonly kind: _angular_core.InputSignal<string>;
3311
+ /** Znak przed nazwą. Pusty łańcuch zostawia samą nazwę. */
3312
+ readonly prefix: _angular_core.InputSignal<string>;
3313
+ /** Adres, pod który prowadzi klik. Bez niego wzmianka jest przyciskiem otwierającym kartę. */
3314
+ readonly href: _angular_core.InputSignal<string | null>;
3315
+ readonly placement: _angular_core.InputSignal<KptPeekPlacement>;
3316
+ readonly openDelay: _angular_core.InputSignal<number>;
3317
+ /** Wyłączona wzmianka nie otwiera karty — zostaje samym napisem. */
3318
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
3319
+ protected readonly resolvedKind: _angular_core.Signal<string>;
3320
+ protected readonly display: _angular_core.Signal<string>;
3321
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptMention, never>;
3322
+ 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>;
3323
+ }
3324
+
3325
+ /**
3326
+ * Akapit ze wzmiankami — tekst wchodzi jako zwykły napis, a `@wzmianki` wychodzą z niego jako
3327
+ * elementy z kartą podglądu. Rozbiciem zajmuje się `parseMentionText()` z `@konce-pt/mention`
3328
+ * (czysty TS z testami), więc oba porty czytają tę samą treść tak samo.
3329
+ *
3330
+ * Wzmianek nie renderujemy z HTML-a: treść zostaje tekstem, a wzmianka jest elementem, który
3331
+ * biblioteka sama zbudowała. Aplikacja nie musi więc przepuszczać przez sanitizer czegoś,
3332
+ * co i tak pochodzi od jej użytkowników.
3333
+ *
3334
+ * Kartę daje szablon w środku — kontekst dostaje pozycję jako `$implicit` oraz `id` i `label`,
3335
+ * bo wzmianka do czegoś, czego nie ma już na liście, też musi się wyrenderować.
3336
+ *
3337
+ * @example
3338
+ * <kpt-mentions [text]="note" [items]="people">
3339
+ * <ng-template let-item let-label="label">
3340
+ * <kpt-card>{{ item?.data?.role ?? label }}</kpt-card>
3341
+ * </ng-template>
3342
+ * </kpt-mentions>
3343
+ */
3344
+ declare class KptMentions<T = unknown> {
3345
+ /** Treść z wzmiankami: `@id` albo `@[Nazwa ze spacją](id)`. */
3346
+ readonly text: _angular_core.InputSignal<string>;
3347
+ /** Pozycje, po których rozwiązują się identyfikatory. Nieznane `id` zostaje etykietą. */
3348
+ readonly items: _angular_core.InputSignal<readonly KptMentionItem<T>[]>;
3349
+ /** Znak przed nazwą we wzmiance. */
3350
+ readonly prefix: _angular_core.InputSignal<string>;
3351
+ readonly placement: _angular_core.InputSignal<KptPeekPlacement>;
3352
+ /** Szablon karty; bez niego wzmianki są samym napisem, bo nie ma czego pokazać. */
3353
+ protected readonly cardTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
3354
+ protected readonly segments: _angular_core.Signal<KptMentionSegment<T>[]>;
3355
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptMentions<any>, never>;
3356
+ 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>;
3357
+ }
3358
+
2923
3359
  /**
2924
3360
  * Pole z podpowiedziami (autocomplete) na CDK Overlay, Signal Forms. Wartość = wpisany tekst.
2925
3361
  * Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
@@ -3125,6 +3561,6 @@ declare class KptSpeedDial<T = unknown> {
3125
3561
  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
3562
  }
3127
3563
 
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 };
3564
+ 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 };
3565
+ 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, KptDividerOrientation, KptDrawerPosition, KptFormFieldControl, KptGalleriaItem, KptInputType, KptMenuItem, KptMeterItem, KptOption, KptPeekPlacement, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
3130
3566
  //# sourceMappingURL=konce-pt-angular.d.ts.map