@konce-pt/angular 0.7.7 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@konce-pt/angular",
3
- "version": "0.7.7",
3
+ "version": "0.7.9",
4
4
  "description": "Open-source Angular 22 component library on Signals & Signal Forms — 70+ components, rich data table, zoneless, fully tokenized. Selektory kpt-*, klasy Kpt*.",
5
5
  "license": "MIT",
6
6
  "author": "konce.pt",
@@ -8,7 +8,7 @@ Import: `import { KptDataTable, KptColumn, KptCellDef, KptCellEditDef, KptRowDet
8
8
  `kpt-data-table`
9
9
 
10
10
  ## Model kolumny (KptColumn)
11
- `{ field: string; header: string; sortable?: boolean; align?: 'start'|'center'|'end'; width?: string; frozen?: boolean; filter?: KptColumnFilter; edit?: KptColumnEdit }`
11
+ `{ field: string; header: string; sortable?: boolean; align?: 'start'|'center'|'end'; width?: string; frozen?: boolean; filter?: KptColumnFilter; edit?: KptColumnEdit; summary?: KptColumnSummary }`
12
12
  Kolumny `frozen` (wiodące, sąsiadujące) przyklejają się przy poziomym przewijaniu — wymagają `width`.
13
13
 
14
14
  ### Filtr kolumny (KptColumnFilter)
@@ -29,6 +29,10 @@ Gdy kolumna ma `edit`, jej komórki są klikalne — klik (albo Enter na sfokuso
29
29
  wartość na kontrolkę: `text` → `kpt-input`, `number` → `kpt-input-number`, `date` → `kpt-datepicker`,
30
30
  `select` → `kpt-select`, `multiselect` → `kpt-select multiple filter`. Patrz sekcja „Edycja inline” niżej.
31
31
 
32
+ ### Podsumowanie kolumny (KptColumnSummary)
33
+ `{ fn: 'sum'|'avg'|'min'|'max'|'count' | ((rows) => unknown); format?: (value) => string }`
34
+ Kolumna z `summary` jest agregowana w wierszu podsumowania — patrz sekcja „Wiersz podsumowania” niżej.
35
+
32
36
  ## Wejścia
33
37
  - `columns`: KptColumn[] (wymagane)
34
38
  - `data`: T[] (domyślnie [])
@@ -50,6 +54,9 @@ wartość na kontrolkę: `text` → `kpt-input`, `number` → `kpt-input-number`
50
54
  - `rowHeight`: number — stała wysokość wiersza w px (domyślnie 41), potrzebna przy virtualScroll
51
55
  - `expandable`: boolean — kolumna z przełącznikiem rozwijającym wiersz (renderuje szablon `kptRowDetail`)
52
56
  - `multiExpand`: boolean (domyślnie true) — pozwala rozwinąć wiele wierszy naraz; false = tylko jeden
57
+ - `summaryLabel`: string — etykieta wiersza podsumowania; bez wartości używa i18n (`dataTable.total`)
58
+ - `summaryValues`: Record<string, unknown> | null — gotowe wartości podsumowania (pole → wartość);
59
+ nadpisują wyliczenia, przy `lazy` są jedynym źródłem
53
60
 
54
61
  ## Model / zdarzenia
55
62
  - `selection`: model<T[]> — dwukierunkowe `[(selection)]`
@@ -136,6 +143,45 @@ Gdy 5 wbudowanych typów nie wystarcza, dyrektywa `kptCellEdit` daje pełny, wł
136
143
  </ng-template>
137
144
  </kpt-data-table>
138
145
 
146
+ ## Wiersz podsumowania (column.summary)
147
+ Kolumny z `summary` renderują `<tfoot>` — ostatni wiersz tabeli, **nad paginatorem**, przyklejony
148
+ do dołu obszaru przewijania (`position: sticky; bottom: 0`, jak sticky header).
149
+
150
+ - **Etykieta** (`summaryLabel`, domyślnie i18n `dataTable.total` → „Total”/„Razem”) renderuje się
151
+ w jednej komórce scalonej (`colspan`) od początku wiersza do pierwszej liczonej kolumny,
152
+ wyrównana do prawej. Colspan obejmuje też kolumny systemowe (rozwijanie, zaznaczanie).
153
+ Przykład: `summary` na 3. kolumnie → scalone kolumny 1–2. Gdy liczona jest **pierwsza** widoczna
154
+ kolumna (i nie ma kolumn systemowych), etykieta nie ma się gdzie zmieścić i nie renderuje się.
155
+ - **Zakres**: agregacja obejmuje **wszystkie wiersze po filtrach** — całą stronę 1 i każdą następną,
156
+ nie tylko widoczną. Filtr globalny i filtry kolumn zawężają zbiór (zgodnie z licznikiem paginatora),
157
+ sortowanie i strona nie zmieniają wyniku.
158
+ - **Na żywo przy edycji inline**: `data` jest zwykłym inputem, więc gdy konsument po `cellEdit`
159
+ podmieni tablicę w sygnale, podsumowanie przelicza się samo (zwykły `computed`).
160
+ - **Agregacje**: `sum`, `avg`, `min`, `max`, `count`. `count` liczy wiersze; pozostałe pomijają
161
+ wartości nieliczbowe (string z liczbą jest parsowany). Pusty zbiór: `sum` = 0, reszta — pusta
162
+ komórka. `sum`/`avg` przycinają ogony zmiennoprzecinkowe (bez tego `0.1+0.2` = `0.30000000000000004`).
163
+ Własna funkcja `fn: (rows) => unknown` dostaje ten sam zbiór (np. suma ważona).
164
+ - **Formatowanie**: `format: (value) => string` (np. `Intl.NumberFormat`); bez niego wartość leci
165
+ surowa. Komórki podsumowania są domyślnie do prawej — jawne `align` kolumny ma priorytet.
166
+ Etykieta wiersza („Razem”) jest jedna na cały wiersz, więc kolumnę liczoną inaczej niż sumą
167
+ (`avg`, `min`, `max`) nazwij w `format` (np. `ø 662,57 zł`) — inaczej czyta się jak suma.
168
+ - **Ukryte kolumny** (`hiddenFields`) wypadają też z podsumowania; kolejność po `reorderable`
169
+ jest respektowana (etykieta scala się do aktualnie pierwszej liczonej kolumny).
170
+ - **Tryb `lazy`**: tabela ma tylko bieżącą stronę, więc nie liczy nic sama — podaj `summaryValues`
171
+ (pole → gotowa wartość z serwera). `summaryValues` działa też poza `lazy`, nadpisując wyliczenia.
172
+ Kolumna wymieniona wyłącznie w `summaryValues` (bez `summary`) też pokazuje wartość.
173
+ - Wiersz nie renderuje się przy `loading` ani gdy tabela jest pusta (nie dublujemy komunikatu stanu).
174
+ - Eksport CSV **nie zawiera** wiersza podsumowania — `exportCsv()` eksportuje same dane.
175
+
176
+ cols = [
177
+ { field: 'product', header: 'Produkt' },
178
+ { field: 'qty', header: 'Ilość', align: 'end', summary: { fn: 'sum' } },
179
+ { field: 'net', header: 'Netto', align: 'end', summary: { fn: 'sum', format: pln } },
180
+ ];
181
+
182
+ <kpt-data-table [columns]="cols" [data]="rows()" [pageSize]="5" rowKey="id"
183
+ summaryLabel="Razem" (cellEdit)="onCellEdit($event)" />
184
+
139
185
  ## Zachowanie
140
186
  - Sortowanie: klik w nagłówek sortowalnej kolumny cyklicznie asc → desc → brak.
141
187
  - Filtr: dopasowanie tekstu we wszystkich polach kolumn; reset strony do 0.
@@ -164,6 +210,7 @@ patrz `hiddenFields` wyżej i przykład `pg-column-toggle` w playground.
164
210
  ## Tokeny
165
211
  `--kpt-table-{bg,fg,border,radius,header-bg,header-fg,row-hover,row-selected,cell-padding}`.
166
212
  Rozwijany wiersz: `--kpt-table-detail-bg` (fallback: surface-variant → row-hover).
213
+ Wiersz podsumowania: `--kpt-table-summary-bg` (fallback: header-bg).
167
214
  Paginacja: komponent `kpt-paginator`.
168
215
 
169
216
  ## Do zrobienia (roadmap)
@@ -174,3 +221,6 @@ i przykład `pg-column-toggle` w playground).
174
221
 
175
222
  Edycja komórek inline: gotowe (`column.edit` + `cellEdit` + `kptCellEdit`; zapis do API —
176
223
  patrz przykład w playground, `pg-fake-users-api.ts`).
224
+
225
+ Wiersz podsumowania: gotowe (`column.summary` + `summaryLabel` + `summaryValues` — patrz sekcja
226
+ „Wiersz podsumowania” i przykład „Inline editing + summary row” w playground).
@@ -9,6 +9,10 @@ Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
9
9
  ## Wejścia / model
10
10
  - `value`: model<KptDateRangeValue> (lub `formField`)
11
11
  - `mode`: 'date' | 'datetime' | 'time' (domyślnie 'date')
12
+ - `visibleMonths`: number (domyślnie 1, przycinane do 1–3) — liczba miesięcy obok siebie.
13
+ Strzałki ‹ › stoją na skrajnych panelach i przesuwają całość o jeden miesiąc.
14
+ Ignorowane w trybie 'time'. Przy >1 dni sąsiednich miesięcy są ukrywane (puste sloty) —
15
+ inaczej ta sama data byłaby klikalna w dwóch panelach naraz.
12
16
  - `hourFormat`: 12 | 24 (domyślnie 24) — tarcza z AM/PM lub 24h; czas zawsze 24h w wartości
13
17
  - `minuteStep`: number (domyślnie 1) — snap minut na tarczy
14
18
  - `placeholder`: string — bez wartości używa i18n (`dateRange.placeholder`); input ma priorytet
@@ -16,12 +20,15 @@ Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
16
20
  - `disabled`/`invalid`/`touched`: boolean; `touch`: output
17
21
 
18
22
  ## Zachowanie
19
- Pierwszy klik ustawia `start`, drugi `end` (kolejność normalizowana). Zakres podświetlany; „×" czyści.
23
+ Pierwszy klik ustawia `start`, drugi `end` (kolejność normalizowana). „×" czyści.
24
+ Zakres podświetla ciągłe pasmo biegnące przez wszystkie panele: dni skrajne mają plamę
25
+ zaznaczenia, a pasmo wychodzi z ich środka, zaokrąglając się na krańcach wiersza siatki.
20
26
  Tryby datetime/time: przełącznik „Od / Koniec" + tarcza zegara, zatwierdzenie przyciskiem „Gotowe".
21
27
 
22
28
  ## Przykład
23
29
  <kpt-date-range [formField]="f.period" />
24
30
  <kpt-date-range [(value)]="period" />
31
+ <kpt-date-range [visibleMonths]="2" [(value)]="period" />
25
32
 
26
33
  period = signal<KptDateRangeValue>({ start: '', end: '' });
27
34
 
@@ -2,13 +2,17 @@
2
2
 
3
3
  Wybór daty/godziny z własnym kalendarzem (CDK Overlay), Signal Forms. Granulacja przez
4
4
  `selectionMode`: data (domyślnie), miesiąc+rok, rok, miesiąc, data+godzina, sama godzina.
5
+ Panel jest stosem widoków **dekady → lata → miesiące → dni**: klik w komórkę schodzi poziom niżej,
6
+ klik w tytuł wchodzi poziom wyżej. Poziom startowy ustawia `startView` — do daty urodzenia
7
+ `startView="decade"` (dekada → rok → miesiąc → dzień, cztery kliknięcia zamiast setek strzałek).
5
8
  Godzina na tarczy zegara (dwa etapy: godziny → minuty, klik lub przeciąganie), format 12/24h.
6
9
  Wyświetlanie wg `displayFormat` ('pl'/'iso'). Tydzień od poniedziałku, dziś zaznaczone, zakres min/max.
7
10
  Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
8
11
  Import: `import { KptDatepicker } from '@konce-pt/angular';`
9
12
 
10
13
  ## Użycie
11
- <kpt-datepicker [formField]="f.birthDate" minDate="1900-01-01" maxDate="2030-12-31" />
14
+ <kpt-datepicker [formField]="f.birthDate" startView="decade" minDate="1920-01-01" />
15
+ <kpt-datepicker [formField]="f.date" minDate="1900-01-01" maxDate="2030-12-31" />
12
16
  <kpt-datepicker selectionMode="monthYear" [(value)]="period" />
13
17
  <kpt-datepicker selectionMode="month" monthDisplay="long" [(value)]="month" />
14
18
  <kpt-datepicker selectionMode="datetime" [hourFormat]="12" [(value)]="meetingAt" />
@@ -18,6 +22,11 @@ Import: `import { KptDatepicker } from '@konce-pt/angular';`
18
22
  - `value`: model<string>; `minDate`/`maxDate`: string|null; `placeholder`: string
19
23
  - `selectionMode`: 'date' | 'monthYear' | 'year' | 'month' | 'datetime' | 'time' (domyślnie 'date').
20
24
  Format wartości zależny od trybu: 'RRRR-MM-DD' / 'RRRR-MM' / 'RRRR' / 'MM' / 'RRRR-MM-DDTHH:mm' (datetime) / 'HH:mm' (time).
25
+ - `startView`: 'day' | 'month' | 'year' | 'decade' | null (domyślnie null) — poziom, od którego
26
+ otwiera się panel. `null` = poziom, na którym tryb zatwierdza wartość: 'day' dla 'date'/'datetime',
27
+ 'month' dla 'monthYear'/'month', 'year' dla 'year'. Poniżej tego poziomu nie zejdzie —
28
+ `startView="day"` w trybie 'year' jest podnoszony do 'year'. Tryb 'month' zostaje na 'month'
29
+ (wartość to samo 'MM', nie ma po czym nawigować), tryb 'time' ignoruje input.
21
30
  - `hourFormat`: 12 | 24 (domyślnie 24) — tarcza z AM/PM (12) lub pierścieniem 13–00 (24); wartość zawsze 24h.
22
31
  - `minuteStep`: number (domyślnie 1) — snap minut na tarczy.
23
32
  - `monthDisplay`: 'long' | 'number' (domyślnie 'long') — w trybie 'month' i etykietach miesięcy: słownie (styczeń) lub liczbą (01)
@@ -31,11 +40,26 @@ Import: `import { KptDatepicker } from '@konce-pt/angular';`
31
40
  - `ariaLabel`: string|null — nazwa dostępna, gdy pola nie opisuje `<label for>`
32
41
  (np. dwie godziny w jednym wierszu edytora). Bez niej czytnik ekranu ogłasza samą wartość.
33
42
  - Ikona w polu: kalendarz, a w trybie 'time' zegar.
34
- - Panel: nawigacja (‹ ›) miesięcy/lat/dekad wg trybu; tarcza zegara z „Gotowe"; przycisk czyszczenia (×).
43
+ - Panel: przycisk czyszczenia (×), tarcza zegara z „Gotowe".
44
+
45
+ ## Zachowanie (stos widoków)
46
+ Nagłówek panelu ma zawsze kształt `‹ tytuł ›`; strzałki przesuwają stronę bieżącego poziomu,
47
+ a tytuł jest przyciskiem wchodzącym poziom wyżej:
48
+
49
+ dzień ‹ [czerwiec] [1979] › strzałki ±1 miesiąc; chipy → miesiące / lata
50
+ miesiąc ‹ [1979] › strzałki ±1 rok; chip → lata
51
+ rok ‹ [1970 – 1979] › strzałki ±10 lat; chip → dekady
52
+ dekada ‹ 1920 – 2039 › strzałki ±120 lat; szczyt stosu, tytuł nieklikalny
53
+
54
+ Strona lat to **pełna dekada** (10 komórek, 1970–1979), strona dekad to 12 dekad (1920–2039).
55
+ Klik w komórkę powyżej poziomu zatwierdzania schodzi niżej; na poziomie zatwierdzania ustawia
56
+ wartość i zamyka panel. Komórka obejmująca dziś dostaje obrys (jak „dziś" w siatce dni).
57
+ Strzałka gaśnie (`disabled`), gdy cała sąsiednia strona wypada poza `minDate`/`maxDate`.
35
58
 
36
59
  ## i18n
37
60
  Nazwy dni tygodnia i miesięcy są wyliczane z `Intl` wg aktywnego locale i18n (nie ze słownika).
38
- Etykiety nawigacji/aria i „Gotowe" z i18n (namespace `datepicker` + `common`). Domyślnie EN;
61
+ Etykiety nawigacji/aria („poprzednie dekady", „wybierz rok"…) i „Gotowe" z i18n
62
+ (namespace `datepicker` + `common`). Domyślnie EN;
39
63
  konfiguracja przez `provideKptI18n` — patrz `i18n/llms.txt`. Uwaga: `displayFormat` ('pl'/'iso')
40
64
  steruje wyłącznie formatem daty i jest niezależny od języka etykiet.
41
65
 
@@ -255,6 +255,8 @@ interface KptMessages {
255
255
  max: string;
256
256
  /** Interpolacja: {column}. Aria-label edytowalnej komórki. */
257
257
  editCell: string;
258
+ /** Domyślna etykieta wiersza podsumowania (input `summaryLabel` ma priorytet). */
259
+ total: string;
258
260
  };
259
261
  confirm: {
260
262
  header: string;
@@ -283,6 +285,11 @@ interface KptMessages {
283
285
  nextYear: string;
284
286
  prevYears: string;
285
287
  nextYears: string;
288
+ prevDecades: string;
289
+ nextDecades: string;
290
+ chooseMonth: string;
291
+ chooseYear: string;
292
+ chooseDecade: string;
286
293
  calendar: string;
287
294
  month: string;
288
295
  time: string;
@@ -1046,24 +1053,33 @@ interface DayCell$1 {
1046
1053
  selected: boolean;
1047
1054
  disabled: boolean;
1048
1055
  }
1056
+ /** Komórka siatki miesięcy/lat/dekad — niesie cel nawigacji (rok + ewentualny miesiąc). */
1049
1057
  interface GridCell {
1050
1058
  label: string;
1051
- value: string;
1059
+ y: number;
1060
+ m: number;
1052
1061
  selected: boolean;
1062
+ /** Zawiera dzisiejszą datę — obrys jak „dziś" w siatce dni. */
1063
+ current: boolean;
1053
1064
  disabled: boolean;
1054
1065
  }
1055
1066
  /** Granulacja wyboru. */
1056
1067
  type KptDatepickerMode = 'date' | 'monthYear' | 'year' | 'month' | 'datetime' | 'time';
1068
+ /** Poziom panelu: dni → miesiące → lata → dekady. */
1069
+ type KptDatepickerView = 'day' | 'month' | 'year' | 'decade';
1057
1070
  /**
1058
1071
  * Wybór daty/godziny z własnym kalendarzem (CDK Overlay), Signal Forms.
1059
1072
  * Granulacja przez `selectionMode`: data, miesiąc+rok, rok, miesiąc, data+godzina, sama godzina.
1073
+ * Panel jest stosem widoków dekady → lata → miesiące → dni: klik w komórkę schodzi poziom niżej,
1074
+ * klik w tytuł wchodzi poziom wyżej. Poziom startowy ustawia `startView` (data urodzenia:
1075
+ * `startView="decade"`); domyślnie startuje na poziomie, na którym tryb zatwierdza wartość.
1060
1076
  * Godzina na tarczy zegara (dwa etapy: godziny → minuty), format 12/24h przez `hourFormat`.
1061
1077
  * Format wartości zależy od trybu: 'RRRR-MM-DD' / 'RRRR-MM' / 'RRRR' / 'MM'
1062
1078
  * / 'RRRR-MM-DDTHH:mm' (datetime) / 'HH:mm' (time). Czas przechowywany zawsze 24h.
1063
1079
  * Wymaga stylów overlay CDK: `import '@angular/cdk/overlay-prebuilt.css';`
1064
1080
  *
1065
1081
  * @example
1066
- * <kpt-datepicker [formField]="f.birthDate" minDate="1900-01-01" />
1082
+ * <kpt-datepicker [formField]="f.birthDate" startView="decade" minDate="1900-01-01" />
1067
1083
  * <kpt-datepicker selectionMode="datetime" [hourFormat]="12" [(value)]="meetingAt" />
1068
1084
  * <kpt-datepicker selectionMode="time" [(value)]="alarm" />
1069
1085
  */
@@ -1081,6 +1097,12 @@ declare class KptDatepicker implements FormValueControl<string> {
1081
1097
  readonly displayFormat: _angular_core.InputSignal<"pl" | "iso">;
1082
1098
  /** Granulacja wyboru. */
1083
1099
  readonly selectionMode: _angular_core.InputSignal<KptDatepickerMode>;
1100
+ /**
1101
+ * Poziom, od którego otwiera się panel. `null` = poziom zatwierdzania danego trybu
1102
+ * (dni dla 'date'). Nie schodzi poniżej tego poziomu — `startView="day"` w trybie 'year'
1103
+ * nie ma sensu i jest podnoszony do 'year'.
1104
+ */
1105
+ readonly startView: _angular_core.InputSignal<KptDatepickerView | null>;
1084
1106
  /** Prezentacja miesiąca w trybie 'month': słownie ('long') lub liczbą ('number'). */
1085
1107
  readonly monthDisplay: _angular_core.InputSignal<"number" | "long">;
1086
1108
  /** Format godziny: 24 lub 12 (z AM/PM). */
@@ -1100,23 +1122,49 @@ declare class KptDatepicker implements FormValueControl<string> {
1100
1122
  readonly open: _angular_core.ModelSignal<boolean>;
1101
1123
  private readonly today;
1102
1124
  private readonly view;
1125
+ /** Aktualny poziom stosu widoków panelu. */
1126
+ protected readonly panelView: _angular_core.WritableSignal<KptDatepickerView>;
1127
+ /** Poziom, na którym klik w komórkę zatwierdza wartość zamiast schodzić niżej. */
1128
+ protected readonly commitLevel: _angular_core.Signal<KptDatepickerView>;
1129
+ /** Tryb 'month' nie ma roku ani dekady — wartością jest samo 'MM'. */
1130
+ private readonly topLevel;
1131
+ private effectiveStartView;
1103
1132
  protected readonly timeStr: _angular_core.WritableSignal<string>;
1104
1133
  protected readonly dtView: _angular_core.WritableSignal<"calendar" | "clock">;
1105
1134
  private readonly pendingDate;
1135
+ /** Tarcza zamiast siatek: tryb 'time' zawsze, 'datetime' po wejściu w pasek czasu. */
1136
+ protected readonly showClock: _angular_core.Signal<boolean>;
1137
+ protected readonly hasFooter: _angular_core.Signal<boolean>;
1106
1138
  protected readonly positions: ConnectedPosition[];
1107
1139
  constructor();
1108
1140
  protected readonly viewYear: _angular_core.Signal<number>;
1109
- protected readonly monthLabel: _angular_core.Signal<string>;
1110
- protected readonly yearPageStart: _angular_core.Signal<number>;
1141
+ protected readonly monthName: _angular_core.Signal<string>;
1142
+ /** Początek dekady widocznej w siatce lat (1979 → 1970). */
1143
+ private readonly decadeStart;
1144
+ /** Początek strony dekad: 12 dekad, czyli 120 lat (1979 → 1920, strona 1920–2039). */
1145
+ private readonly centuryStart;
1111
1146
  protected readonly yearRangeLabel: _angular_core.Signal<string>;
1147
+ protected readonly decadeRangeLabel: _angular_core.Signal<string>;
1148
+ /** Tryb 'month' nie ma po czym nawigować — siatka miesięcy jest kompletna. */
1149
+ protected readonly hasNav: _angular_core.Signal<boolean>;
1150
+ protected readonly navPrevLabel: _angular_core.Signal<string>;
1151
+ protected readonly navNextLabel: _angular_core.Signal<string>;
1152
+ /** Strzałka wstecz gasnie, gdy cała poprzednia strona wypada przed `minDate`. */
1153
+ protected readonly canPageBack: _angular_core.Signal<boolean>;
1154
+ protected readonly canPageForward: _angular_core.Signal<boolean>;
1112
1155
  private formatTime;
1113
1156
  /** Etykieta czasu na pasku trybu datetime (uwzględnia AM/PM). */
1114
1157
  protected readonly timeBarLabel: _angular_core.Signal<string>;
1115
1158
  protected readonly display: _angular_core.Signal<string>;
1116
1159
  private readonly selectedDateIso;
1117
1160
  protected readonly weeks: _angular_core.Signal<DayCell$1[][]>;
1161
+ /** Rok/miesiąc bieżącej wartości — zaznaczenie w siatkach wyższych poziomów. */
1162
+ private readonly selectedYM;
1118
1163
  protected readonly monthCells: _angular_core.Signal<GridCell[]>;
1119
1164
  protected readonly yearCells: _angular_core.Signal<GridCell[]>;
1165
+ protected readonly decadeCells: _angular_core.Signal<GridCell[]>;
1166
+ /** Komórki bieżącego poziomu — siatka miesięcy/lat/dekad ma jeden wspólny markup. */
1167
+ protected readonly levelCells: _angular_core.Signal<GridCell[]>;
1120
1168
  private parseDate;
1121
1169
  private parseTime;
1122
1170
  private parseDateTime;
@@ -1127,19 +1175,24 @@ declare class KptDatepicker implements FormValueControl<string> {
1127
1175
  protected toggleOpen(): void;
1128
1176
  protected close(): void;
1129
1177
  protected selectDay(cell: DayCell$1): void;
1178
+ /**
1179
+ * Klik w komórkę siatki: na poziomie zatwierdzania ustawia wartość i zamyka panel,
1180
+ * wyżej — przestawia widok i schodzi poziom niżej.
1181
+ */
1130
1182
  protected selectCell(cell: GridCell): void;
1183
+ private monthValue;
1184
+ /** Klik w tytuł — wejście poziom wyżej w stosie widoków. */
1185
+ protected goTo(level: KptDatepickerView): void;
1131
1186
  protected openClock(): void;
1132
1187
  protected backToCalendar(): void;
1133
1188
  protected commit(): void;
1134
- protected prevMonth(): void;
1135
- protected nextMonth(): void;
1136
- protected prevYear(): void;
1137
- protected nextYear(): void;
1138
- protected prevYearPage(): void;
1139
- protected nextYearPage(): void;
1189
+ /** Strzałki ‹ › — krok zależny od poziomu: miesiąc, rok, dekada, strona dekad. */
1190
+ private page;
1191
+ protected pagePrev(): void;
1192
+ protected pageNext(): void;
1140
1193
  protected clear(event: Event): void;
1141
1194
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDatepicker, never>;
1142
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDatepicker, "kpt-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "monthDisplay": { "alias": "monthDisplay"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; "open": "openChange"; }, never, never, true, never>;
1195
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDatepicker, "kpt-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "monthDisplay": { "alias": "monthDisplay"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; "open": "openChange"; }, never, never, true, never>;
1143
1196
  }
1144
1197
 
1145
1198
  interface ClockMark {
@@ -1469,19 +1522,34 @@ interface DayCell {
1469
1522
  day: number;
1470
1523
  iso: string;
1471
1524
  inMonth: boolean;
1525
+ today: boolean;
1472
1526
  isStart: boolean;
1473
1527
  isEnd: boolean;
1474
1528
  inRange: boolean;
1529
+ /** Pasmo zakresu wychodzi z tej komórki w prawo / dochodzi z lewej — do zaokrągleń kapsuły. */
1530
+ rangeStart: boolean;
1531
+ rangeEnd: boolean;
1532
+ /** Pusty slot siatki: dni sąsiednich miesięcy przy wielu panelach (patrz `panels`). */
1533
+ blank: boolean;
1475
1534
  disabled: boolean;
1476
1535
  }
1536
+ /** Jeden miesiąc panelu kalendarza. */
1537
+ interface MonthPanel {
1538
+ key: string;
1539
+ label: string;
1540
+ weeks: DayCell[][];
1541
+ }
1477
1542
  /**
1478
1543
  * Wybór zakresu dat z kalendarzem (CDK Overlay), Signal Forms.
1479
1544
  * `mode`: 'date' (domyślnie), 'datetime' (data+godzina, tarcza zegara), 'time' (sama godzina).
1545
+ * `visibleMonths` pokazuje kilka miesięcy obok siebie (typowo 2) — zakres podświetla się
1546
+ * ciągłym pasmem przez wszystkie panele.
1480
1547
  * Wartość: `{ start, end }` — daty 'RRRR-MM-DD', datetime 'RRRR-MM-DDTHH:mm', godziny 'HH:mm'.
1481
1548
  * Wymaga `import '@angular/cdk/overlay-prebuilt.css';`
1482
1549
  *
1483
1550
  * @example
1484
1551
  * <kpt-date-range [formField]="f.period" />
1552
+ * <kpt-date-range [visibleMonths]="2" [(value)]="period" />
1485
1553
  * <kpt-date-range mode="datetime" [hourFormat]="12" [(value)]="span" />
1486
1554
  * <kpt-date-range mode="time" [(value)]="hours" />
1487
1555
  */
@@ -1497,6 +1565,8 @@ declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
1497
1565
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
1498
1566
  readonly displayFormat: _angular_core.InputSignal<"pl" | "iso">;
1499
1567
  readonly mode: _angular_core.InputSignal<KptDateRangeMode>;
1568
+ /** Liczba miesięcy obok siebie (1–3; domyślnie 1). Ignorowana w trybie 'time'. */
1569
+ readonly visibleMonths: _angular_core.InputSignalWithTransform<number, unknown>;
1500
1570
  readonly hourFormat: _angular_core.InputSignalWithTransform<number, unknown>;
1501
1571
  readonly minuteStep: _angular_core.InputSignalWithTransform<number, unknown>;
1502
1572
  protected readonly i18n: KptI18n;
@@ -1512,13 +1582,20 @@ declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
1512
1582
  private readonly startDate;
1513
1583
  private readonly endDate;
1514
1584
  protected readonly positions: ConnectedPosition[];
1515
- protected readonly monthLabel: _angular_core.Signal<string>;
1585
+ protected readonly panelCount: _angular_core.Signal<number>;
1586
+ protected readonly multi: _angular_core.Signal<boolean>;
1516
1587
  private datePart;
1517
1588
  private timePart;
1518
1589
  private fmtDate;
1519
1590
  private fmtTime;
1520
1591
  protected readonly display: _angular_core.Signal<string>;
1521
- protected readonly weeks: _angular_core.Signal<DayCell[][]>;
1592
+ /**
1593
+ * Panele miesięcy. Przy kilku panelach dni sąsiednich miesięcy są wygaszane do pustych slotów:
1594
+ * inaczej ta sama data byłaby klikalna dwa razy (jako „wyszarzona" w jednym panelu i właściwa
1595
+ * w drugim) i pasmo zakresu malowałoby się w obu miejscach.
1596
+ */
1597
+ protected readonly panels: _angular_core.Signal<MonthPanel[]>;
1598
+ private buildWeeks;
1522
1599
  protected toggleOpen(): void;
1523
1600
  protected close(): void;
1524
1601
  protected selectDay(cell: DayCell): void;
@@ -1527,7 +1604,7 @@ declare class KptDateRange implements FormValueControl<KptDateRangeValue> {
1527
1604
  protected nextMonth(): void;
1528
1605
  protected clear(event: Event): void;
1529
1606
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDateRange, never>;
1530
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDateRange, "kpt-date-range", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
1607
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDateRange, "kpt-date-range", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "visibleMonths": { "alias": "visibleMonths"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
1531
1608
  }
1532
1609
 
1533
1610
  /**
@@ -2261,6 +2338,18 @@ declare class KptPaginator {
2261
2338
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptPaginator, "kpt-paginator", never, { "length": { "alias": "length"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; }, { "pageSize": "pageSizeChange"; "pageIndex": "pageIndexChange"; }, never, never, true, never>;
2262
2339
  }
2263
2340
 
2341
+ /** Wbudowana agregacja kolumny w wierszu podsumowania. */
2342
+ type KptSummaryFn = 'sum' | 'avg' | 'min' | 'max' | 'count';
2343
+ interface KptColumnSummary {
2344
+ /**
2345
+ * Agregacja wbudowana albo własna funkcja liczona na całym zbiorze wierszy
2346
+ * (po filtrach, ze wszystkich stron).
2347
+ */
2348
+ fn: KptSummaryFn | ((rows: readonly Record<string, unknown>[]) => unknown);
2349
+ /** Formatowanie wyniku (np. waluta). Bez niego wartość renderowana jest surowo. */
2350
+ format?: (value: unknown) => string;
2351
+ }
2352
+
2264
2353
  /** Rodzaj kontrolki filtra w nagłówku kolumny. */
2265
2354
  type KptColumnFilterType = 'text' | 'number' | 'select' | 'dateRange' | 'numberRange' | 'slider';
2266
2355
  interface KptColumnFilter {
@@ -2307,6 +2396,8 @@ interface KptColumn {
2307
2396
  filter?: KptColumnFilter;
2308
2397
  /** Włącza edycję inline (klik w komórkę zamienia wartość na kontrolkę tego typu). */
2309
2398
  edit?: KptColumnEdit;
2399
+ /** Włącza agregację tej kolumny w wierszu podsumowania (`<tfoot>`, nad paginatorem). */
2400
+ summary?: KptColumnSummary;
2310
2401
  }
2311
2402
  /** Zdarzenie po zatwierdzeniu edycji komórki. */
2312
2403
  interface KptCellEditEvent<T> {
@@ -2377,6 +2468,13 @@ declare class KptDataTable<T = Record<string, unknown>> {
2377
2468
  readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2378
2469
  /** Zezwala na rozwinięcie wielu wierszy naraz (domyślnie tak). */
2379
2470
  readonly multiExpand: _angular_core.InputSignalWithTransform<boolean, unknown>;
2471
+ /** Etykieta wiersza podsumowania; bez wartości używa i18n (`dataTable.total`). */
2472
+ readonly summaryLabel: _angular_core.InputSignal<string | undefined>;
2473
+ /**
2474
+ * Gotowe wartości podsumowania (pole → wartość). Nadpisują wyliczenia po stronie klienta,
2475
+ * a w trybie `lazy` są ich jedynym źródłem (tabela ma wtedy tylko bieżącą stronę).
2476
+ */
2477
+ readonly summaryValues: _angular_core.InputSignal<Record<string, unknown> | null>;
2380
2478
  readonly selection: _angular_core.ModelSignal<T[]>;
2381
2479
  /** Rozwinięte wiersze (dwukierunkowo). */
2382
2480
  readonly expandedRows: _angular_core.ModelSignal<T[]>;
@@ -2491,8 +2589,32 @@ declare class KptDataTable<T = Record<string, unknown>> {
2491
2589
  private readonly sorted;
2492
2590
  protected readonly filteredCount: _angular_core.Signal<number>;
2493
2591
  protected readonly paged: _angular_core.Signal<readonly T[]>;
2592
+ /** Wiodące kolumny systemowe (rozwijanie + zaznaczanie) — poza `visibleOrderedColumns()`. */
2593
+ private readonly leadingCells;
2494
2594
  protected readonly colspan: _angular_core.Signal<number>;
2495
2595
  protected readonly displayCount: _angular_core.Signal<number>;
2596
+ /** Etykieta wiersza podsumowania (input albo domyślna z i18n). */
2597
+ protected readonly summaryLabelText: _angular_core.Signal<string>;
2598
+ /**
2599
+ * Zbiór do agregacji: wszystkie wiersze po filtrach (a więc ze wszystkich stron — `paged()`
2600
+ * tnie dopiero po tym kroku). Przy `lazy` tabela ma tylko bieżącą stronę, więc nie liczy nic
2601
+ * sama — jedynym źródłem jest wtedy `summaryValues`.
2602
+ */
2603
+ private readonly summarySource;
2604
+ /** Pola z podsumowaniem: kolumny z `summary` (tylko widoczne) + klucze podane w `summaryValues`. */
2605
+ private readonly summaryFields;
2606
+ protected readonly hasSummary: _angular_core.Signal<boolean>;
2607
+ /** Indeks pierwszej podsumowywanej kolumny — do niej scala się etykieta. */
2608
+ protected readonly summaryStartIndex: _angular_core.Signal<number>;
2609
+ /**
2610
+ * Colspan komórki z etykietą: kolumny systemowe + kolumny przed pierwszą podsumowywaną.
2611
+ * Zero (pierwsza widoczna kolumna jest liczona) = etykieta nie ma się gdzie zmieścić i nie
2612
+ * renderuje się wcale.
2613
+ */
2614
+ protected readonly summaryLabelSpan: _angular_core.Signal<number>;
2615
+ /** Gotowe teksty komórek podsumowania (pole → tekst); pusty string dla braku wartości. */
2616
+ private readonly summaryTexts;
2617
+ protected summaryText(field: string): string;
2496
2618
  private parseWidthPx;
2497
2619
  /** Mapa pole → przesunięcie left (px) dla wiodących zamrożonych kolumn. */
2498
2620
  /** Suma szerokości wiodących kolumn systemowych (rozwijanie + zaznaczanie) w px. */
@@ -2519,7 +2641,7 @@ declare class KptDataTable<T = Record<string, unknown>> {
2519
2641
  protected getValue(row: T, field: string): unknown;
2520
2642
  protected trackRow: (row: T) => unknown;
2521
2643
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptDataTable<any>, never>;
2522
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDataTable<any>, "kpt-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterRowPosition": { "alias": "filterRowPosition"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "multiExpand": { "alias": "multiExpand"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "expandedRows": { "alias": "expandedRows"; "required": false; "isSignal": true; }; "hiddenFields": { "alias": "hiddenFields"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "expandedRows": "expandedRowsChange"; "hiddenFields": "hiddenFieldsChange"; "rowClick": "rowClick"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["cellDefs", "cellEditDefs", "rowDetailDef"], ["[kptPaginatorActions]"], true, never>;
2644
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptDataTable<any>, "kpt-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterRowPosition": { "alias": "filterRowPosition"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "multiExpand": { "alias": "multiExpand"; "required": false; "isSignal": true; }; "summaryLabel": { "alias": "summaryLabel"; "required": false; "isSignal": true; }; "summaryValues": { "alias": "summaryValues"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "expandedRows": { "alias": "expandedRows"; "required": false; "isSignal": true; }; "hiddenFields": { "alias": "hiddenFields"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "expandedRows": "expandedRowsChange"; "hiddenFields": "hiddenFieldsChange"; "rowClick": "rowClick"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["cellDefs", "cellEditDefs", "rowDetailDef"], ["[kptPaginatorActions]"], true, never>;
2523
2645
  }
2524
2646
 
2525
2647
  /**
@@ -3107,5 +3229,5 @@ declare class KptSpeedDial<T = unknown> {
3107
3229
  }
3108
3230
 
3109
3231
  export { KPT_BREAKPOINTS, KPT_FORM_FIELD_CONTROL, KPT_I18N_CONFIG, KPT_MESSAGES_EN, KPT_MESSAGES_PL, KptAccordion, KptAccordionPanel, KptAlert, KptAppShell, KptAutocomplete, KptAvatar, KptAvatarGroup, KptBadge, KptBottomSheet, KptBreadcrumb, KptBreakpointObserver, KptButton, KptButtonGroup, KptCard, KptCarousel, KptCellDef, 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, renderKptIconSvg };
3110
- export type { DeepPartial, KptAlertVariant, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeSize, KptBadgeVariant, KptBreadcrumbItem, KptBreakpoint, KptButtonSize, KptButtonVariant, KptCardVariant, KptCellEditEvent, KptChipVariant, KptColumn, KptColumnEdit, KptColumnEditType, KptConfirmOptions, KptConfirmRequest, KptDateRangeValue, KptDividerOrientation, KptDrawerPosition, KptFormFieldControl, KptGalleriaItem, KptI18nConfig, KptIconName, KptInputType, KptLocale, KptMenuItem, KptMessages, KptMeterItem, KptOption, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
3232
+ export type { DeepPartial, KptAlertVariant, KptAvatarItem, KptAvatarShape, KptAvatarSize, KptBadgeSize, KptBadgeVariant, KptBreadcrumbItem, KptBreakpoint, KptButtonSize, KptButtonVariant, KptCardVariant, KptCellEditEvent, KptChipVariant, KptColumn, KptColumnEdit, KptColumnEditType, KptColumnSummary, KptConfirmOptions, KptConfirmRequest, KptDateRangeValue, KptDatepickerMode, KptDatepickerView, KptDividerOrientation, KptDrawerPosition, KptFormFieldControl, KptGalleriaItem, KptI18nConfig, KptIconName, KptInputType, KptLocale, KptMenuItem, KptMessages, KptMeterItem, KptOption, KptProgressVariant, KptRichTool, KptRichToolbar, KptSidenavMode, KptSkeletonVariant, KptSliderValue, KptSpeedDialDirection, KptSplitterOrientation, KptSummaryFn, KptTableLazyState, KptTimelineItem, KptToast, KptToastOptions, KptTooltipPosition, KptTreeNode };
3111
3233
  //# sourceMappingURL=konce-pt-angular.d.ts.map