@wemake4u/form-controls 2.0.0 → 2.0.1

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,9 +1,10 @@
1
1
  import * as i0 from "@angular/core";
2
- import { AfterContentInit, ComponentRef, DoCheck, InjectionToken, Injector, OnDestroy, Provider, Signal, TemplateRef, Type } from "@angular/core";
3
- import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from "@angular/forms";
2
+ import { AfterContentInit, ComponentRef, DoCheck, EnvironmentProviders, InjectionToken, Injector, OnDestroy, Provider, Signal, TemplateRef, Type } from "@angular/core";
3
+ import { AbstractControl, ControlValueAccessor, FormArray, FormGroup, ValidationErrors, Validator } from "@angular/forms";
4
4
  import { Options, Splide } from "@splidejs/splide";
5
- import { Params, QueryParamsHandling } from "@angular/router";
6
5
  import { Observable } from "rxjs";
6
+ import { Row } from "@tanstack/angular-table";
7
+ import { Params, QueryParamsHandling } from "@angular/router";
7
8
  /** Placements of the kit tooltip (`data-sirio-placement`), default `top`. */
8
9
  export type SirioTooltipPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';
9
10
  /**
@@ -205,6 +206,20 @@ export declare const SIRIO_VALIDATION_DISPLAY: InjectionToken<SirioValidationDis
205
206
  * Usage: `providers: [provideSirioValidationDisplay('touched')]`
206
207
  */
207
208
  export declare function provideSirioValidationDisplay(display: SirioValidationDisplay): Provider;
209
+ /**
210
+ * Look of a read-only data entry field:
211
+ * - `filled`: Sirio kit style, grey background and border (`.sirio-form-control[readonly]`, the same look as disabled);
212
+ * - `outline`: white background with the kit light border, so a read-only field (focusable, its text can be selected
213
+ * and copied) is told apart from a disabled one. Disabled fields keep the kit grey fill in both cases.
214
+ */
215
+ export type SirioReadonlyAppearance = 'filled' | 'outline';
216
+ /** Default `readonlyAppearance` of every Sirio data entry control. */
217
+ export declare const SIRIO_READONLY_APPEARANCE: InjectionToken<SirioReadonlyAppearance>;
218
+ /**
219
+ * Sets the default `readonlyAppearance` of the Sirio controls (each control can override it).
220
+ * Usage: `providers: [provideSirioReadonlyAppearance('outline')]` (application or component providers).
221
+ */
222
+ export declare function provideSirioReadonlyAppearance(appearance: SirioReadonlyAppearance): Provider;
208
223
  /**
209
224
  * How an invalid control is presented:
210
225
  * - `invalid`: error state (kit `sirio-is-invalid`) with `message` (or the resolved error message);
@@ -290,6 +305,12 @@ export declare abstract class SirioControlBase<T> implements ControlValueAccesso
290
305
  readonly inputId: import("@angular/core").InputSignal<string>;
291
306
  readonly name: import("@angular/core").InputSignal<string | null>;
292
307
  readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
308
+ /**
309
+ * Look of the field when `readonly`: `filled` (kit grey fill, as disabled) or `outline` (white background with the
310
+ * kit light border). null = application default (`provideSirioReadonlyAppearance()`, `filled` otherwise).
311
+ * Disabled fields always keep the kit grey fill.
312
+ */
313
+ readonly readonlyAppearance: import("@angular/core").InputSignal<SirioReadonlyAppearance | null>;
293
314
  /** Visual "required" marker. It is also inferred from Validators.required on the bound control. */
294
315
  readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
295
316
  /** Disabled state when the component is used without Angular forms. */
@@ -375,6 +396,12 @@ export declare abstract class SirioControlBase<T> implements ControlValueAccesso
375
396
  readonly pendingVisible: import("@angular/core").WritableSignal<boolean>;
376
397
  private readonly defaultValidationDisplay;
377
398
  private readonly defaultValueSync;
399
+ private readonly defaultReadonlyAppearance;
400
+ /**
401
+ * `readonlyAppearance` or the application default. With `outline` the host gets the class
402
+ * `wm-sirio-readonly-outline`, used by the control styles (core/_sirio-readonly.scss).
403
+ */
404
+ readonly resolvedReadonlyAppearance: import("@angular/core").Signal<SirioReadonlyAppearance>;
378
405
  /** The validation state can be shown, according to `validationDisplay`. */
379
406
  readonly stateShown: import("@angular/core").Signal<boolean>;
380
407
  private readonly presenter;
@@ -482,6 +509,11 @@ export declare abstract class SirioControlBase<T> implements ControlValueAccesso
482
509
  "required": false;
483
510
  "isSignal": true;
484
511
  };
512
+ "readonlyAppearance": {
513
+ "alias": "readonlyAppearance";
514
+ "required": false;
515
+ "isSignal": true;
516
+ };
485
517
  "required": {
486
518
  "alias": "required";
487
519
  "required": false;
@@ -1466,7 +1498,8 @@ export declare const SIRIO_CAROUSEL_I18N: Record<string, string>;
1466
1498
  /**
1467
1499
  * Carousel of the Sirio web kit ("Carousel"), based on Splide as the kit (same version, the kit
1468
1500
  * `splide.min.css` and the `.sirio-carousel` styles): `div.splide.sirio-carousel.splide-N` >
1469
- * `.splide__track` > `ul.splide__list` > `li.splide__slide`, initialised with the options of the
1501
+ * `.splide__track` > `.splide__list` > `.splide__slide` (div elements: the slide roles set by Splide
1502
+ * are not allowed on list items), initialised with the options of the
1470
1503
  * kit script (breakpoints for 1, 2 or 3 cards, kit arrow buttons, Italian labels).
1471
1504
  *
1472
1505
  * ```html
@@ -1539,13 +1572,22 @@ export declare class SirioCarousel {
1539
1572
  }
1540
1573
  /** Carousel components, for `imports: [SIRIO_CAROUSEL]`. */
1541
1574
  export declare const SIRIO_CAROUSEL: readonly [typeof SirioCarousel, typeof SirioCarouselSlide];
1542
- /** An item of the breadcrumb. The last item is the current page (never a link). */
1575
+ /**
1576
+ * An item of the breadcrumb. The last item is the current page (never a link); the other items are
1577
+ * links when they have an `href` (or `clickable: true`), otherwise plain text.
1578
+ */
1543
1579
  export interface SirioBreadcrumbItem {
1544
1580
  label: string;
1545
- /** Link of the item; without it the item emits `(itemClick)` (e.g. for router navigation). */
1581
+ /** Link of the item; without it the item is plain text (unless `clickable: true`). */
1546
1582
  href?: string;
1547
1583
  /** Font Awesome icon before the label (kit: `fa-home`). */
1548
1584
  icon?: string;
1585
+ /**
1586
+ * Overrides the default (clickable only with an `href`): `true` renders a link without `href`
1587
+ * that only emits `(itemClick)` (e.g. for router navigation), `false` renders plain text even
1588
+ * with an `href`.
1589
+ */
1590
+ clickable?: boolean;
1549
1591
  }
1550
1592
  /** Payload of `(itemClick)`. */
1551
1593
  export interface SirioBreadcrumbClick {
@@ -1573,7 +1615,8 @@ export interface SirioBreadcrumbClick {
1573
1615
  * ]" />
1574
1616
  * ```
1575
1617
  *
1576
- * For router navigation leave `href` empty (or prevent it) and navigate in `(itemClick)`.
1618
+ * Items without `href` are plain text. For router navigation set the `href` and call
1619
+ * `event.preventDefault()` in `(itemClick)`, or use `clickable: true` without `href`.
1577
1620
  */
1578
1621
  export declare class SirioBreadcrumb {
1579
1622
  readonly items: import("@angular/core").InputSignal<SirioBreadcrumbItem[]>;
@@ -1601,6 +1644,8 @@ export declare class SirioBreadcrumb {
1601
1644
  constructor();
1602
1645
  /** Shows the whole path (kit "..." button) and moves the focus to the first restored link. */
1603
1646
  expand(): void;
1647
+ /** Clickable item: explicit `clickable`, otherwise only when it has an `href`. */
1648
+ protected isLink(item: SirioBreadcrumbItem): boolean;
1604
1649
  protected onClick(item: SirioBreadcrumbItem, index: number, event: MouseEvent): void;
1605
1650
  protected iconClasses(icon: string): string;
1606
1651
  /** Kit: expand, then truncate again if the full path wraps. */
@@ -1804,9 +1849,11 @@ export declare class SirioPendingIndicator {
1804
1849
  * Layouts of the Sirio pagination:
1805
1850
  * - `full`: kit "Paginazione con alto numero di pagine" (elements per page, range, page select,
1806
1851
  * previous/next);
1807
- * - `numbers`: page numbers with ellipsis (kit `.sirio-pagination-center` > `.sirio-pagination-list`).
1852
+ * - `numbers`: page numbers with ellipsis (kit `.sirio-pagination-center` > `.sirio-pagination-list`);
1853
+ * - `compact`: the `full` row in a single thin bar for tables (smaller fields and buttons, "Pagina 1
1854
+ * di 6" as text, first / previous / next / last).
1808
1855
  */
1809
- export type SirioPaginationVariant = 'full' | 'numbers';
1856
+ export type SirioPaginationVariant = 'full' | 'numbers' | 'compact';
1810
1857
  /** Payload of `(paged)`. */
1811
1858
  export interface SirioPageEvent {
1812
1859
  /** Current page (1-based). */
@@ -1849,6 +1896,12 @@ export declare class SirioPagination {
1849
1896
  readonly variant: import("@angular/core").InputSignal<SirioPaginationVariant>;
1850
1897
  /** Total number of items. */
1851
1898
  readonly total: import("@angular/core").InputSignalWithTransform<number, unknown>;
1899
+ /**
1900
+ * The real total is not known yet: there are more items after `total` (the items known so far,
1901
+ * e.g. a server without a count). "Successiva" stays active on the last known page and the totals
1902
+ * are shown as "30+" ("oltre 30" for screen readers).
1903
+ */
1904
+ readonly hasMore: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1852
1905
  /** Current page, 1-based (two-way: `[(page)]`). */
1853
1906
  readonly page: import("@angular/core").ModelSignal<number>;
1854
1907
  /** Items per page (two-way: `[(pageSize)]`). */
@@ -1876,18 +1929,28 @@ export declare class SirioPagination {
1876
1929
  readonly pageLabel: import("@angular/core").InputSignal<string>;
1877
1930
  readonly previousLabel: import("@angular/core").InputSignal<string>;
1878
1931
  readonly nextLabel: import("@angular/core").InputSignal<string>;
1932
+ /** First / last page buttons of the `compact` variant. */
1933
+ readonly firstLabel: import("@angular/core").InputSignal<string>;
1934
+ readonly lastLabel: import("@angular/core").InputSignal<string>;
1935
+ /** Read before an open total (`hasMore`): "di oltre 30 elementi". */
1936
+ readonly moreLabel: import("@angular/core").InputSignal<string>;
1879
1937
  /** Emitted when the user changes page or page size. */
1880
1938
  readonly paged: import("@angular/core").OutputEmitterRef<SirioPageEvent>;
1881
1939
  private readonly baseId;
1882
1940
  protected readonly sizeId: string;
1883
1941
  protected readonly pageId: string;
1942
+ /** Pages known (with `hasMore` the next one can also be reached). */
1884
1943
  readonly pageCount: import("@angular/core").Signal<number>;
1944
+ /** Last page that can be reached: one more than the known ones with `hasMore`. */
1945
+ private readonly lastPage;
1885
1946
  protected readonly pages: import("@angular/core").Signal<number[]>;
1886
1947
  protected readonly rangeStart: import("@angular/core").Signal<number>;
1887
1948
  protected readonly rangeEnd: import("@angular/core").Signal<number>;
1888
1949
  /** Page select and previous/next of `full`: hidden when there is nothing to navigate without the items block. */
1889
1950
  protected readonly showPages: import("@angular/core").Signal<boolean>;
1890
1951
  protected readonly status: import("@angular/core").Signal<string>;
1952
+ /** Previous / next disabled at the ends (next stays active while more items exist). */
1953
+ protected readonly atEnd: import("@angular/core").Signal<boolean>;
1891
1954
  /** Numbered list: first, last, current ± siblings, ellipsis for the gaps. */
1892
1955
  protected readonly entries: import("@angular/core").Signal<PageEntry[]>;
1893
1956
  constructor();
@@ -1911,6 +1974,11 @@ export declare class SirioPagination {
1911
1974
  "required": false;
1912
1975
  "isSignal": true;
1913
1976
  };
1977
+ "hasMore": {
1978
+ "alias": "hasMore";
1979
+ "required": false;
1980
+ "isSignal": true;
1981
+ };
1914
1982
  "page": {
1915
1983
  "alias": "page";
1916
1984
  "required": false;
@@ -1991,21 +2059,2567 @@ export declare class SirioPagination {
1991
2059
  "required": false;
1992
2060
  "isSignal": true;
1993
2061
  };
1994
- "previousLabel": {
1995
- "alias": "previousLabel";
2062
+ "previousLabel": {
2063
+ "alias": "previousLabel";
2064
+ "required": false;
2065
+ "isSignal": true;
2066
+ };
2067
+ "nextLabel": {
2068
+ "alias": "nextLabel";
2069
+ "required": false;
2070
+ "isSignal": true;
2071
+ };
2072
+ "firstLabel": {
2073
+ "alias": "firstLabel";
2074
+ "required": false;
2075
+ "isSignal": true;
2076
+ };
2077
+ "lastLabel": {
2078
+ "alias": "lastLabel";
2079
+ "required": false;
2080
+ "isSignal": true;
2081
+ };
2082
+ "moreLabel": {
2083
+ "alias": "moreLabel";
2084
+ "required": false;
2085
+ "isSignal": true;
2086
+ };
2087
+ }, {
2088
+ "page": "pageChange";
2089
+ "pageSize": "pageSizeChange";
2090
+ "paged": "paged";
2091
+ }, never, ["*"], true, never>;
2092
+ }
2093
+ /** Sort direction of a column. */
2094
+ export type SirioSortDirection = 'asc' | 'desc';
2095
+ /** A sort criterion of the grid (`[(sort)]` is the list of criteria in priority order). */
2096
+ export interface SirioGridSort {
2097
+ /** Sort key of the column (`sortKey`, or its `field`). */
2098
+ field: string;
2099
+ direction: SirioSortDirection;
2100
+ }
2101
+ /** Request sent to a server side data source. */
2102
+ export interface SirioGridQuery {
2103
+ /** Current page, 1-based. */
2104
+ page: number;
2105
+ pageSize: number;
2106
+ /** Index of the first row of the page (0-based), e.g. for `$skip` / `OFFSET`. */
2107
+ offset: number;
2108
+ /** Sort criteria in priority order; empty = no sort. */
2109
+ sort: SirioGridSort[];
2110
+ /** Active column filters by filter key (see `SirioGridFilters`); empty object = no filter. */
2111
+ filters: SirioGridFilters;
2112
+ }
2113
+ /**
2114
+ * Filter of a column (`wm-sirio-grid-column [filter]`), edited with the controls of the library:
2115
+ * - `text`: `wm-sirio-textbox`, rows whose cell text contains the value (case and accent insensitive);
2116
+ * - `number`: two `wm-sirio-number` (from / to), value `SirioGridRange<number>`;
2117
+ * - `date`: two `wm-sirio-date` (from / to), value `SirioGridRange<string>` with 'yyyy-MM-dd';
2118
+ * - `select`: `wm-sirio-select` with `filterOptions` (one value, or an array with `filterMultiple`);
2119
+ * - `boolean`: `wm-sirio-select` Sì / No, value `true` / `false`.
2120
+ */
2121
+ export type SirioGridFilterType = 'text' | 'number' | 'date' | 'select' | 'boolean';
2122
+ /** Value of a range filter (`number`, `date`); a missing bound is open. */
2123
+ export interface SirioGridRange<T = number | string> {
2124
+ from?: T | null;
2125
+ to?: T | null;
2126
+ }
2127
+ /**
2128
+ * Operator of a filter condition (`filterOperators`):
2129
+ * - text: `contains`, `notContains`, `equals`, `notEquals`, `startsWith`, `endsWith`;
2130
+ * - number: `equals`, `notEquals`, `greaterThan`, `greaterThanOrEqual`, `lessThan`,
2131
+ * `lessThanOrEqual`, `between` (`value` and `to` included);
2132
+ * - date ('yyyy-MM-dd'): `equals`, `notEquals`, `before`, `after`, `between`;
2133
+ * - select: `in`, `notIn` (one value or an array);
2134
+ * - boolean: `equals`;
2135
+ * - every type: `blank`, `notBlank` (no value).
2136
+ */
2137
+ export type SirioGridFilterOperator = 'contains' | 'notContains' | 'equals' | 'notEquals' | 'startsWith' | 'endsWith' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'between' | 'before' | 'after' | 'in' | 'notIn' | 'blank' | 'notBlank';
2138
+ /**
2139
+ * Filter value of a column with operators: `{ operator: 'greaterThan', value: 1000 }`,
2140
+ * `{ operator: 'between', value: '2026-01-01', to: '2026-03-31' }`, `{ operator: 'blank' }`.
2141
+ */
2142
+ export interface SirioGridFilterCondition<V = unknown> {
2143
+ operator: SirioGridFilterOperator;
2144
+ value?: V | null;
2145
+ /** Upper bound of `between`. */
2146
+ to?: V | null;
2147
+ }
2148
+ /** Operators of each filter type, in the order of the choice; the first one is the default. */
2149
+ export declare const SIRIO_GRID_FILTER_OPERATORS: Readonly<Record<SirioGridFilterType, readonly SirioGridFilterOperator[]>>;
2150
+ /** The value is a filter condition (`{ operator, value?, to? }`). */
2151
+ export declare function sirioIsFilterCondition(value: unknown): value is SirioGridFilterCondition;
2152
+ /** Column filters by filter key (`filterKey` of the column, default its sort key / field). */
2153
+ export type SirioGridFilters = Record<string, unknown>;
2154
+ /** True when a filter value restricts the rows (not empty, not an empty range or list). */
2155
+ export declare function sirioGridFilterActive(value: unknown): boolean;
2156
+ /** Only the active filters (the object sent to a server data source). */
2157
+ export declare function sirioActiveGridFilters(filters: SirioGridFilters | null | undefined): SirioGridFilters;
2158
+ /** Response of a server side data source: the rows of the page and the total number of rows. */
2159
+ export interface SirioGridResult<T> {
2160
+ rows: readonly T[];
2161
+ /**
2162
+ * Rows that pass the filters on the server. Without it (null / undefined) the total is open: a
2163
+ * full page means there are more rows ("Successiva" active, totals as "30+"), a shorter page is
2164
+ * the last one.
2165
+ */
2166
+ total?: number | null;
2167
+ }
2168
+ /**
2169
+ * Server side data source: receives the query (page, page size, sort, filters) and returns the page.
2170
+ * Called again whenever the query changes and on `reload()`; responses of outdated queries are
2171
+ * ignored.
2172
+ *
2173
+ * ```ts
2174
+ * readonly load: SirioGridDataSource<Pratica> = (q) =>
2175
+ * this.http.get<SirioGridResult<Pratica>>('/api/pratiche', { params: { ... } });
2176
+ * ```
2177
+ */
2178
+ export type SirioGridDataSource<T> = (query: SirioGridQuery) => Observable<SirioGridResult<T>> | Promise<SirioGridResult<T>> | SirioGridResult<T>;
2179
+ /** Sort on one column at a time (`single`) or on more columns with Shift+click (`multiple`). */
2180
+ export type SirioGridSortMode = 'single' | 'multiple';
2181
+ /** Aggregation of a column in the group rows (`wm-sirio-grid-column [aggregate]`). */
2182
+ export type SirioGridAggregate = 'sum' | 'mean' | 'min' | 'max' | 'count';
2183
+ /**
2184
+ * Expanded rows by row id (the `rowId` value as text; group rows: `<column>:<value>`), or `true`
2185
+ * for every row (two-way: `[(expanded)]`).
2186
+ */
2187
+ export type SirioGridExpanded = Record<string, boolean> | true;
2188
+ /** Sub-rows of a row for tree data: the name of a property or a function. */
2189
+ export type SirioGridSubRows<T> = string | ((row: T) => readonly T[] | null | undefined);
2190
+ /**
2191
+ * State of a grid chosen by the user, to save it and restore it when the page opens again
2192
+ * (`getState()` / `setState()` / `(stateChange)`); plain JSON.
2193
+ */
2194
+ export interface SirioGridState {
2195
+ /** Version of the format, for future migrations. */
2196
+ version: 1;
2197
+ sort: SirioGridSort[];
2198
+ filters: SirioGridFilters;
2199
+ page: number;
2200
+ pageSize: number;
2201
+ /** Column keys in display order (empty = declaration order). */
2202
+ columnOrder: string[];
2203
+ /** Widths (px) of the resized columns by key. */
2204
+ columnWidths: Record<string, number>;
2205
+ grouping: string[];
2206
+ expanded: SirioGridExpanded;
2207
+ /** `rowId` of the selected rows (only with a `rowId` giving texts or numbers). */
2208
+ selected?: (string | number)[];
2209
+ }
2210
+ /** Row selection mode. */
2211
+ export type SirioGridSelection = 'none' | 'single' | 'multiple';
2212
+ /** Look of the table (kit classes `sirio-table-dark` / `sirio-table-light`). */
2213
+ export type SirioGridVariant = 'default' | 'dark' | 'striped';
2214
+ /** Density of the cells (kit classes `sirio-table-xs` / `-sm` / `-lg`). */
2215
+ export type SirioGridSize = 'xs' | 'sm' | 'md' | 'lg';
2216
+ /**
2217
+ * Rows taken by "seleziona tutto" (header checkbox of the multiple selection): `page` the rows of the
2218
+ * current page, `filtered` every row that passes the filters (all the pages), `all` every row, also
2219
+ * the ones excluded by the filters. With a server data source only the loaded page is available.
2220
+ */
2221
+ export type SirioGridSelectAll = 'page' | 'filtered' | 'all';
2222
+ /** Horizontal alignment of a column (header and cells). */
2223
+ export type SirioGridAlign = 'start' | 'center' | 'end';
2224
+ /**
2225
+ * Side where a column stays fixed during the horizontal scroll (`wm-sirio-grid-column fixed`).
2226
+ * More columns can be fixed on both sides; the fixed columns are shown at that side of the table.
2227
+ */
2228
+ export type SirioGridFixed = 'left' | 'right';
2229
+ /** Identity of a row: the name of a property or a function. null = the row object itself. */
2230
+ export type SirioGridRowId<T> = string | ((row: T) => unknown) | null;
2231
+ /** Payload of `(rowClick)`. */
2232
+ export interface SirioGridRowEvent<T> {
2233
+ row: T;
2234
+ /** Index of the row in the current page (0-based). */
2235
+ index: number;
2236
+ event: MouseEvent | KeyboardEvent;
2237
+ }
2238
+ /**
2239
+ * Reads a property by path (`'indirizzo.citta'`); undefined when a step is missing.
2240
+ * @internal
2241
+ */
2242
+ export declare function sirioReadPath(row: unknown, path: string): unknown;
2243
+ /**
2244
+ * Text normalized for the `text` filter: lower case, without accents and repeated spaces.
2245
+ * @internal
2246
+ */
2247
+ export declare function sirioNormalizeText(value: unknown): string;
2248
+ /**
2249
+ * 'yyyy-MM-dd' of a cell value for the `date` filter: a Date (local day) or the start of an ISO
2250
+ * string; null when the value is not a date.
2251
+ * @internal
2252
+ */
2253
+ export declare function sirioIsoDay(value: unknown): string | null;
2254
+ /**
2255
+ * Default comparison of two cell values: null/undefined last, numbers and dates by value,
2256
+ * booleans false before true, the rest as text with the collation of `locale` (numeric aware;
2257
+ * the grid passes its `LOCALE_ID`, default the browser language).
2258
+ */
2259
+ export declare function sirioDefaultGridCompare(a: unknown, b: unknown, locale?: string): number;
2260
+ /**
2261
+ * Classes of rows, cells and headers, as with `ngClass`: a text (`'a b'`), a list (`['a', 'b']`)
2262
+ * or an object `{ classe: condizione }` (classes with a true condition).
2263
+ */
2264
+ export type SirioGridClass = string | readonly string[] | Readonly<Record<string, unknown>> | null | undefined;
2265
+ /**
2266
+ * Inline styles of rows, cells and headers, as with `ngStyle`: CSS text (`'color: red'`) or an
2267
+ * object `{ proprietà: valore }` (camelCase or kebab-case names, unit in the key: `'width.px': 80`).
2268
+ */
2269
+ export type SirioGridStyle = string | Readonly<Record<string, string | number | null | undefined>> | null | undefined;
2270
+ /** Classes or styles of a row: fixed, or a function of the row and its index in the page. */
2271
+ export type SirioGridRowClass<T> = SirioGridClass | ((row: T, index: number) => SirioGridClass);
2272
+ export type SirioGridRowStyle<T> = SirioGridStyle | ((row: T, index: number) => SirioGridStyle);
2273
+ /** Classes or styles of the cells of a column: fixed, or a function of the row and of the cell value. */
2274
+ export type SirioGridCellClass<T> = SirioGridClass | ((row: T, value: unknown) => SirioGridClass);
2275
+ export type SirioGridCellStyle<T> = SirioGridStyle | ((row: T, value: unknown) => SirioGridStyle);
2276
+ /**
2277
+ * Class names of a `SirioGridClass`, separated by spaces ('' when none).
2278
+ * @internal
2279
+ */
2280
+ export declare function sirioGridClassText(value: SirioGridClass): string;
2281
+ /**
2282
+ * Style object of a `SirioGridStyle` (kebab-case names, units applied; empty values dropped),
2283
+ * null when there are no styles.
2284
+ * @internal
2285
+ */
2286
+ export declare function sirioGridStyleObject(value: SirioGridStyle): Record<string, string> | null;
2287
+ /**
2288
+ * Predefined formats of `wm-sirio-grid-column [format]` (all in the format of `LOCALE_ID`):
2289
+ * - `number`: 1.234,5 (decimals / grouping options);
2290
+ * - `currency`: 1.234,50 € (`currency`, default EUR);
2291
+ * - `percentage`: 15 % from 0.15 (`scale: 'percent'` when the value is already 15);
2292
+ * - `date`: 31/01/2026 (`precision`: `day`, `month` → 01/2026, `year` → 2026);
2293
+ * - `dateTime`: 31/01/2026 14:30 (`seconds`);
2294
+ * - `time`: 14:30 (`seconds`);
2295
+ * - `boolean`: Sì / No (`trueLabel`, `falseLabel`);
2296
+ * - `map`: a code shown with its label (`values`: object or `SirioOption[]`).
2297
+ */
2298
+ export type SirioGridFormatName = 'number' | 'currency' | 'percentage' | 'date' | 'dateTime' | 'time' | 'boolean' | 'map';
2299
+ /** Options of the predefined formats (`wm-sirio-grid-column [formatOptions]`). */
2300
+ export interface SirioGridFormatOptions {
2301
+ /** Text of an empty value (null, undefined, ''); default ''. */
2302
+ empty?: string;
2303
+ /** Number of decimals (fixed) of `number`, `currency`, `percentage`. */
2304
+ decimals?: number;
2305
+ /** Minimum / maximum decimals of `number`, `currency`, `percentage` (instead of `decimals`). */
2306
+ minDecimals?: number;
2307
+ maxDecimals?: number;
2308
+ /** Thousands separator of `number`, `currency` (rule of the locale); false = none. */
2309
+ grouping?: boolean;
2310
+ /** ISO 4217 code of `currency`; default 'EUR'. */
2311
+ currency?: string;
2312
+ /** Unit of the `percentage` value: `fraction` (0.15 = 15 %, default) or `percent` (15 = 15 %). */
2313
+ scale?: 'fraction' | 'percent';
2314
+ /** What `date` shows: the day (default), the month or the year. */
2315
+ precision?: 'day' | 'month' | 'year';
2316
+ /** Seconds in `dateTime` and `time`. */
2317
+ seconds?: boolean;
2318
+ /** Labels of `boolean`; default "Sì" / "No". */
2319
+ trueLabel?: string;
2320
+ falseLabel?: string;
2321
+ /** Labels of `map`: `{ A: 'Aperta' }` or `[{ value: 'A', label: 'Aperta' }]`. */
2322
+ values?: Readonly<Record<string, string>> | readonly SirioOption[];
2323
+ /** Options of the formats registered with `provideSirioGridFormats`. */
2324
+ [option: string]: unknown;
2325
+ }
2326
+ /** A named format: the text of a value (row undefined for group rows and filter values). */
2327
+ export type SirioGridFormatFn = (value: unknown, row: unknown, options: SirioGridFormatOptions, locale: string) => string;
2328
+ /** Configuration of `provideSirioGridFormats`. */
2329
+ export interface SirioGridFormatsConfig {
2330
+ /** Options of every format (e.g. `{ empty: '—', currency: 'EUR' }`). */
2331
+ defaults?: SirioGridFormatOptions;
2332
+ /** Options of a single format, over `defaults` (e.g. `{ percentage: { decimals: 1 } }`). */
2333
+ formatDefaults?: Partial<Record<string, SirioGridFormatOptions>>;
2334
+ /** Formats added (or predefined ones replaced) by name. */
2335
+ formats?: Record<string, SirioGridFormatFn>;
2336
+ }
2337
+ /** @internal */
2338
+ export declare const SIRIO_GRID_FORMATS: InjectionToken<SirioGridFormatsConfig>;
2339
+ /**
2340
+ * Formats of the grid columns for the whole application (or part of it): default options and
2341
+ * formats by name, used as `format="nome"` on the columns.
2342
+ *
2343
+ * ```ts
2344
+ * providers: [
2345
+ * provideSirioGridFormats({
2346
+ * defaults: { empty: '—' },
2347
+ * formatDefaults: { currency: { currency: 'EUR', decimals: 2 } },
2348
+ * formats: { codiceFiscale: (v) => String(v ?? '').toUpperCase() },
2349
+ * }),
2350
+ * ]
2351
+ * ```
2352
+ */
2353
+ export declare function provideSirioGridFormats(config: SirioGridFormatsConfig): EnvironmentProviders;
2354
+ /** Kind of a predefined format: numbers and dates are aligned / sorted / shown as such. */
2355
+ export type SirioGridFormatKind = 'number' | 'date' | null;
2356
+ /** @internal */
2357
+ export declare function sirioGridFormatKind(name: string | null): SirioGridFormatKind;
2358
+ /**
2359
+ * Number of a cell value: numbers, bigints and numeric texts ('1234.5'); NaN otherwise.
2360
+ * @internal
2361
+ */
2362
+ export declare function sirioGridToNumber(value: unknown): number;
2363
+ /**
2364
+ * Date of a cell value: `Date`, milliseconds, ISO texts ('2026-01-31' as a local day,
2365
+ * '2026-01-31T14:30' local, with an offset as given) and times ('14:30', today); null otherwise.
2366
+ * @internal
2367
+ */
2368
+ export declare function sirioGridToDate(value: unknown): Date | null;
2369
+ /**
2370
+ * Text function of a named format with its options (registered formats first, then the
2371
+ * predefined ones); null for an unknown name. Empty values give `options.empty`.
2372
+ * @internal
2373
+ */
2374
+ export declare function sirioGridNamedFormat(name: string, options: SirioGridFormatOptions | null, config: SirioGridFormatsConfig | null, locale: string): ((value: unknown, row: unknown) => string) | null;
2375
+ /**
2376
+ * Choices of a `map` format for a select filter: every code of `values` with its label.
2377
+ * @internal
2378
+ */
2379
+ export declare function sirioGridMapOptions(values: SirioGridFormatOptions['values']): SirioOption[];
2380
+ /** Context of a `wmSirioGridCell` template. */
2381
+ export interface SirioGridCellContext<T = any> {
2382
+ /** The row. */
2383
+ $implicit: T;
2384
+ row: T;
2385
+ /** Value of the column for the row (`value` function or `field`). */
2386
+ value: unknown;
2387
+ /** Index of the row in the current page (0-based). */
2388
+ index: number;
2389
+ }
2390
+ /** Context of a `wmSirioGridHeader` template. */
2391
+ export interface SirioGridHeaderContext {
2392
+ /** The column. */
2393
+ $implicit: SirioGridColumn;
2394
+ }
2395
+ /**
2396
+ * Custom cell of a column:
2397
+ * `<ng-template wmSirioGridCell let-row let-value="value">{{ value | currency: 'EUR' }}</ng-template>`.
2398
+ */
2399
+ export declare class SirioGridCell {
2400
+ static ngTemplateContextGuard(_dir: SirioGridCell, ctx: unknown): ctx is SirioGridCellContext;
2401
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridCell, never>;
2402
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridCell, "ng-template[wmSirioGridCell]", never, {}, {}, never, never, true, never>;
2403
+ }
2404
+ /** Custom header of a column (rich content instead of the `header` text). */
2405
+ export declare class SirioGridHeader {
2406
+ static ngTemplateContextGuard(_dir: SirioGridHeader, ctx: unknown): ctx is SirioGridHeaderContext;
2407
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridHeader, never>;
2408
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridHeader, "ng-template[wmSirioGridHeader]", never, {}, {}, never, never, true, never>;
2409
+ }
2410
+ /** Context of a `wmSirioGridDetail` template. */
2411
+ export interface SirioGridDetailContext<T = any> {
2412
+ /** The row. */
2413
+ $implicit: T;
2414
+ row: T;
2415
+ }
2416
+ /**
2417
+ * Detail panel of an expandable row, shown below it when expanded (the grid adds the expand
2418
+ * column): `<ng-template wmSirioGridDetail let-row>...</ng-template>` inside `wm-sirio-data-grid`.
2419
+ */
2420
+ export declare class SirioGridDetail {
2421
+ static ngTemplateContextGuard(_dir: SirioGridDetail, ctx: unknown): ctx is SirioGridDetailContext;
2422
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridDetail, never>;
2423
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridDetail, "ng-template[wmSirioGridDetail]", never, {}, {}, never, never, true, never>;
2424
+ }
2425
+ /** Content of the grid when there are no rows (instead of the `emptyText` text). */
2426
+ export declare class SirioGridEmpty {
2427
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridEmpty, never>;
2428
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridEmpty, "ng-template[wmSirioGridEmpty]", never, {}, {}, never, never, true, never>;
2429
+ }
2430
+ /** Context of a `wmSirioGridError` template. */
2431
+ export interface SirioGridErrorContext {
2432
+ /** Error of the data source. */
2433
+ $implicit: unknown;
2434
+ error: unknown;
2435
+ /** Calls the data source again (as `reload()`). */
2436
+ retry: () => void;
2437
+ }
2438
+ /**
2439
+ * Content of the grid when the server data source fails (instead of the `loadErrorText` message
2440
+ * with "Riprova"): `<ng-template wmSirioGridError let-error let-retry="retry">...</ng-template>`.
2441
+ */
2442
+ export declare class SirioGridError {
2443
+ static ngTemplateContextGuard(_dir: SirioGridError, ctx: unknown): ctx is SirioGridErrorContext;
2444
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridError, never>;
2445
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridError, "ng-template[wmSirioGridError]", never, {}, {}, never, never, true, never>;
2446
+ }
2447
+ /**
2448
+ * Column of `wm-sirio-data-grid`. Renders nothing by itself: it describes the column (value,
2449
+ * header, sorting, alignment, width) and holds its optional cell/header templates.
2450
+ *
2451
+ * ```html
2452
+ * <wm-sirio-grid-column field="nome" header="Nome" sortable />
2453
+ * <wm-sirio-grid-column field="importo" header="Importo" align="end" [format]="euro" filter="number" />
2454
+ * <wm-sirio-grid-column field="stato" header="Stato" filter="select" [filterOptions]="stati" />
2455
+ * ```
2456
+ */
2457
+ export declare class SirioGridColumn<T = any> {
2458
+ /** Property of the row shown in the column; dotted paths are allowed (`indirizzo.citta`). */
2459
+ readonly field: import("@angular/core").InputSignal<string>;
2460
+ /** Header text (also the label of the cell in the card layout). */
2461
+ readonly header: import("@angular/core").InputSignal<string>;
2462
+ /** Click on the header sorts by this column (asc → desc → none). */
2463
+ readonly sortable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2464
+ /** Key of the sort (`SirioGridSort.field`, sent to a server data source); default `field`. */
2465
+ readonly sortKey: import("@angular/core").InputSignal<string | null>;
2466
+ /** Alignment of header and cells; default `end` for the number formats, `start` otherwise. */
2467
+ readonly align: import("@angular/core").InputSignal<SirioGridAlign | null>;
2468
+ /** CSS width of the column (`120px`, `20%`); null = automatic. */
2469
+ readonly width: import("@angular/core").InputSignal<string | null>;
2470
+ /**
2471
+ * Share of the free width of the grid taken by the column, as `flex` in CSS / ag-grid: the
2472
+ * columns with `flex` fill the width left by the others in proportion (`flex="2"` takes twice
2473
+ * `flex="1"`), within `minWidth` / `maxWidth`. `flex` without a value = 1. The other columns keep
2474
+ * their `width`, or their content width.
2475
+ */
2476
+ readonly flex: import("@angular/core").InputSignalWithTransform<number | null, unknown>;
2477
+ readonly hidden: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2478
+ /**
2479
+ * Long texts wrap on more lines (default). With `false` the cell text stays on one line: the
2480
+ * column widens, or the text is cut with an ellipsis when the column has a width.
2481
+ */
2482
+ readonly wrap: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2483
+ /**
2484
+ * The column is as wide as its content (as the actions column): it does not take a share of the
2485
+ * free room of the table, and its cells stay on one line (e.g. a row of buttons).
2486
+ */
2487
+ readonly fit: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2488
+ /**
2489
+ * Group of the column in the grouped headers: the group names from the top level down, separated
2490
+ * by `/` (or `\`), e.g. `"Pratica"` or `"Dati/Richiedente"`. Adjacent columns with the same groups
2491
+ * share the group header cells; null = no group.
2492
+ */
2493
+ readonly group: import("@angular/core").InputSignal<string | null>;
2494
+ /**
2495
+ * The column stays fixed at the left or right side during the horizontal scroll of the kit
2496
+ * responsive container (more columns can be fixed on both sides); null = it scrolls.
2497
+ */
2498
+ readonly fixed: import("@angular/core").InputSignalWithTransform<SirioGridFixed | null, "" | SirioGridFixed | null | undefined>;
2499
+ /** Value of the cell computed from the row (instead of `field`); also used for sorting. */
2500
+ readonly value: import("@angular/core").InputSignal<((row: T) => unknown) | null>;
2501
+ /**
2502
+ * Text of the cell from its value: a function `(value, row) => string`, or the name of a
2503
+ * predefined format (`number`, `currency`, `percentage`, `date`, `dateTime`, `time`, `boolean`,
2504
+ * `map`, see `SirioGridFormatName`, options in `formatOptions`) or of a format registered with
2505
+ * `provideSirioGridFormats`. Default: numbers with the decimal separator of `LOCALE_ID` (no
2506
+ * thousands grouping, so codes and years stay as they are), `Date` values as a date of
2507
+ * `LOCALE_ID`, the rest as `String(value)`.
2508
+ */
2509
+ readonly format: import("@angular/core").InputSignal<SirioGridFormatName | (string & {}) | ((value: unknown, row: T) => string) | null>;
2510
+ /** Options of a named `format` (see `SirioGridFormatOptions`), over the `provideSirioGridFormats` defaults. */
2511
+ readonly formatOptions: import("@angular/core").InputSignal<SirioGridFormatOptions | null>;
2512
+ /** Comparison used by the client side sort; default `sirioDefaultGridCompare`. */
2513
+ readonly compare: import("@angular/core").InputSignal<((a: unknown, b: unknown) => number) | null>;
2514
+ /** The rows can be grouped by this column ("Raggruppa per" of the grid, `[(grouping)]`). */
2515
+ readonly groupable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2516
+ /** Value of the column in the group rows: sum, mean, min, max or count of the grouped rows. */
2517
+ readonly aggregate: import("@angular/core").InputSignal<SirioGridAggregate | null>;
2518
+ /** With a `resizable` grid: false keeps the width of this column fixed. */
2519
+ readonly resizable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2520
+ /** Minimum width in pixels when resized. */
2521
+ readonly minWidth: import("@angular/core").InputSignalWithTransform<number, unknown>;
2522
+ /** Maximum width in pixels when resized; null = none. */
2523
+ readonly maxWidth: import("@angular/core").InputSignalWithTransform<number | null, unknown>;
2524
+ /**
2525
+ * Classes of the cells: text, list or object `{ classe: condizione }`, or a function of the row
2526
+ * and of the cell value (e.g. `(row, value) => ({ 'sirio-text-danger': value < 0 })`).
2527
+ */
2528
+ readonly cellClass: import("@angular/core").InputSignal<SirioGridCellClass<T>>;
2529
+ /** Inline styles of the cells: CSS text or object, or a function of the row and of the cell value. */
2530
+ readonly cellStyle: import("@angular/core").InputSignal<SirioGridCellStyle<T>>;
2531
+ /** Classes of the header cell (text, list or object). */
2532
+ readonly headerClass: import("@angular/core").InputSignal<SirioGridClass>;
2533
+ /** Inline styles of the header cell (CSS text or object). */
2534
+ readonly headerStyle: import("@angular/core").InputSignal<SirioGridStyle>;
2535
+ /** Filter of the column, edited in the popover of its header (see `SirioGridFilterType`); null = none. */
2536
+ readonly filter: import("@angular/core").InputSignal<SirioGridFilterType | null>;
2537
+ /** Key of the filter (`SirioGridFilters`, sent to a server data source); default the sort key. */
2538
+ readonly filterKey: import("@angular/core").InputSignal<string | null>;
2539
+ /** Options of a `select` filter. */
2540
+ readonly filterOptions: import("@angular/core").InputSignal<SirioOption<unknown>[]>;
2541
+ /** `select` filter with more values (rows matching any of them). */
2542
+ readonly filterMultiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2543
+ /** Placeholder of a `text` filter. */
2544
+ readonly filterPlaceholder: import("@angular/core").InputSignal<string>;
2545
+ /** Client side match of a row (instead of the default one of the filter type). */
2546
+ readonly filterPredicate: import("@angular/core").InputSignal<((value: unknown, filter: unknown, row: T) => boolean) | null>;
2547
+ /**
2548
+ * Operators of the filter (a "Condizione" choice above the value, the value becomes a
2549
+ * `SirioGridFilterCondition`): true = every operator of the filter type, a list = those
2550
+ * operators (see `SIRIO_GRID_FILTER_OPERATORS`), false = none; null (default) = the grid
2551
+ * `filterOperators`.
2552
+ */
2553
+ readonly filterOperators: import("@angular/core").InputSignalWithTransform<boolean | readonly SirioGridFilterOperator[] | null, unknown>;
2554
+ /** Operators offered for the filter (empty = simple filter without operators). @internal */
2555
+ operatorsFor(gridDefault: boolean): readonly SirioGridFilterOperator[];
2556
+ /** @internal */
2557
+ readonly cellTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
2558
+ /** @internal */
2559
+ readonly headerTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
2560
+ /** Key used in `SirioGridSort.field`. */
2561
+ readonly key: import("@angular/core").Signal<string>;
2562
+ /** Group names of `group`, top level first (empty = no group). */
2563
+ readonly groupPath: import("@angular/core").Signal<string[]>;
2564
+ /**
2565
+ * Key used in `SirioGridFilters` for a column alone on its field; the grid makes it unique for
2566
+ * columns on the same field (see `SirioDataGrid.filterIdOf`).
2567
+ */
2568
+ readonly filterId: import("@angular/core").Signal<string>;
2569
+ /** Value of the column for a row. */
2570
+ valueOf(row: T): unknown;
2571
+ /** Initial width in pixels from `width` (`'160px'`); null when it is not a pixel value. */
2572
+ readonly widthPx: import("@angular/core").Signal<number | null>;
2573
+ private readonly locale;
2574
+ private readonly formats;
2575
+ /** Name of the `format` when it is a predefined / registered format. */
2576
+ readonly formatName: import("@angular/core").Signal<SirioGridFormatName | (string & {}) | null>;
2577
+ /** Numbers or dates by their predefined format (alignment, font, sort). */
2578
+ readonly formatKind: import("@angular/core").Signal<import("@wemake4u/form-controls").SirioGridFormatKind>;
2579
+ /** Effective alignment: `align`, or `end` for the number formats. */
2580
+ readonly alignment: import("@angular/core").Signal<SirioGridAlign>;
2581
+ /** Text function of `format` (a function or a named format); null = default text. */
2582
+ private readonly formatter;
2583
+ private readonly numberText;
2584
+ private readonly dateText;
2585
+ /** Default text of a value without `format`: numbers and dates of `LOCALE_ID`. */
2586
+ private defaultText;
2587
+ /** Text of a value of the column without a row (group rows, filter values). */
2588
+ formatValue(value: unknown): string;
2589
+ /** Text of the cell for a row (cells without a template). */
2590
+ textOf(row: T): string;
2591
+ /**
2592
+ * Default comparison of the client side sort: by number / date for the number and date formats
2593
+ * (also when the values are texts), otherwise `sirioDefaultGridCompare` with the locale.
2594
+ * @internal
2595
+ */
2596
+ compareValues(a: unknown, b: unknown): number;
2597
+ /** True when the row passes the filter value of this column (client side filtering). */
2598
+ matches(row: T, filter: unknown): boolean;
2599
+ /** Client side match of a filter condition. */
2600
+ private matchesCondition;
2601
+ /**
2602
+ * Numbers in the kit font (`font-mono`, Roboto Mono, as the kit numeric fields, dates and
2603
+ * pagination): true / false forces it; null (default) = numeric and date cells, i.e. columns
2604
+ * with a `number` / `date` filter or with a number / `Date` value.
2605
+ */
2606
+ readonly mono: import("@angular/core").InputSignalWithTransform<boolean | null, unknown>;
2607
+ /** The cell of a row is shown in the kit numbers font (see `mono`). @internal */
2608
+ isMono(row: T): boolean;
2609
+ /** @internal */
2610
+ /** Class names of a cell (`cellClass`), '' when none. */
2611
+ classOf(row: T): string;
2612
+ /** Inline styles of a cell (`cellStyle`), null when none. */
2613
+ styleOf(row: T): Record<string, string> | null;
2614
+ /** Class names of the header cell (`headerClass`). */
2615
+ readonly headerClassText: import("@angular/core").Signal<string>;
2616
+ /** Inline styles of the header cell (`headerStyle`). */
2617
+ readonly headerStyleObject: import("@angular/core").Signal<Record<string, string> | null>;
2618
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridColumn<any>, never>;
2619
+ static ɵcmp: i0.ɵɵComponentDeclaration<SirioGridColumn<any>, "wm-sirio-grid-column", never, {
2620
+ "field": {
2621
+ "alias": "field";
2622
+ "required": false;
2623
+ "isSignal": true;
2624
+ };
2625
+ "header": {
2626
+ "alias": "header";
2627
+ "required": false;
2628
+ "isSignal": true;
2629
+ };
2630
+ "sortable": {
2631
+ "alias": "sortable";
2632
+ "required": false;
2633
+ "isSignal": true;
2634
+ };
2635
+ "sortKey": {
2636
+ "alias": "sortKey";
2637
+ "required": false;
2638
+ "isSignal": true;
2639
+ };
2640
+ "align": {
2641
+ "alias": "align";
2642
+ "required": false;
2643
+ "isSignal": true;
2644
+ };
2645
+ "width": {
2646
+ "alias": "width";
2647
+ "required": false;
2648
+ "isSignal": true;
2649
+ };
2650
+ "flex": {
2651
+ "alias": "flex";
2652
+ "required": false;
2653
+ "isSignal": true;
2654
+ };
2655
+ "hidden": {
2656
+ "alias": "hidden";
2657
+ "required": false;
2658
+ "isSignal": true;
2659
+ };
2660
+ "wrap": {
2661
+ "alias": "wrap";
2662
+ "required": false;
2663
+ "isSignal": true;
2664
+ };
2665
+ "fit": {
2666
+ "alias": "fit";
2667
+ "required": false;
2668
+ "isSignal": true;
2669
+ };
2670
+ "group": {
2671
+ "alias": "group";
2672
+ "required": false;
2673
+ "isSignal": true;
2674
+ };
2675
+ "fixed": {
2676
+ "alias": "fixed";
2677
+ "required": false;
2678
+ "isSignal": true;
2679
+ };
2680
+ "value": {
2681
+ "alias": "value";
2682
+ "required": false;
2683
+ "isSignal": true;
2684
+ };
2685
+ "format": {
2686
+ "alias": "format";
2687
+ "required": false;
2688
+ "isSignal": true;
2689
+ };
2690
+ "formatOptions": {
2691
+ "alias": "formatOptions";
2692
+ "required": false;
2693
+ "isSignal": true;
2694
+ };
2695
+ "compare": {
2696
+ "alias": "compare";
2697
+ "required": false;
2698
+ "isSignal": true;
2699
+ };
2700
+ "groupable": {
2701
+ "alias": "groupable";
2702
+ "required": false;
2703
+ "isSignal": true;
2704
+ };
2705
+ "aggregate": {
2706
+ "alias": "aggregate";
2707
+ "required": false;
2708
+ "isSignal": true;
2709
+ };
2710
+ "resizable": {
2711
+ "alias": "resizable";
2712
+ "required": false;
2713
+ "isSignal": true;
2714
+ };
2715
+ "minWidth": {
2716
+ "alias": "minWidth";
2717
+ "required": false;
2718
+ "isSignal": true;
2719
+ };
2720
+ "maxWidth": {
2721
+ "alias": "maxWidth";
2722
+ "required": false;
2723
+ "isSignal": true;
2724
+ };
2725
+ "cellClass": {
2726
+ "alias": "cellClass";
2727
+ "required": false;
2728
+ "isSignal": true;
2729
+ };
2730
+ "cellStyle": {
2731
+ "alias": "cellStyle";
2732
+ "required": false;
2733
+ "isSignal": true;
2734
+ };
2735
+ "headerClass": {
2736
+ "alias": "headerClass";
2737
+ "required": false;
2738
+ "isSignal": true;
2739
+ };
2740
+ "headerStyle": {
2741
+ "alias": "headerStyle";
2742
+ "required": false;
2743
+ "isSignal": true;
2744
+ };
2745
+ "filter": {
2746
+ "alias": "filter";
2747
+ "required": false;
2748
+ "isSignal": true;
2749
+ };
2750
+ "filterKey": {
2751
+ "alias": "filterKey";
2752
+ "required": false;
2753
+ "isSignal": true;
2754
+ };
2755
+ "filterOptions": {
2756
+ "alias": "filterOptions";
2757
+ "required": false;
2758
+ "isSignal": true;
2759
+ };
2760
+ "filterMultiple": {
2761
+ "alias": "filterMultiple";
2762
+ "required": false;
2763
+ "isSignal": true;
2764
+ };
2765
+ "filterPlaceholder": {
2766
+ "alias": "filterPlaceholder";
2767
+ "required": false;
2768
+ "isSignal": true;
2769
+ };
2770
+ "filterPredicate": {
2771
+ "alias": "filterPredicate";
2772
+ "required": false;
2773
+ "isSignal": true;
2774
+ };
2775
+ "filterOperators": {
2776
+ "alias": "filterOperators";
2777
+ "required": false;
2778
+ "isSignal": true;
2779
+ };
2780
+ "mono": {
2781
+ "alias": "mono";
2782
+ "required": false;
2783
+ "isSignal": true;
2784
+ };
2785
+ }, {}, ["cellTemplate", "headerTemplate"], never, true, never>;
2786
+ }
2787
+ /**
2788
+ * Builds the form group of a row of a `[formArray]` grid, with its validators: from the value of an
2789
+ * existing row (copy edited in the dialog) or from null / the initial values of a new row.
2790
+ */
2791
+ export type SirioGridRowFactory<T extends object = any> = (value: T | null) => FormGroup;
2792
+ /** Context of the `wmSirioGridEditor` template (form of the edit dialog). */
2793
+ export interface SirioGridEditorContext<T extends object = any> {
2794
+ /** Form group to bind (`[formGroup]="group"`): a copy of the row, applied by "Salva". */
2795
+ $implicit: FormGroup;
2796
+ group: FormGroup;
2797
+ /** Value of the row being edited; null for a new row. */
2798
+ row: T | null;
2799
+ /** New row ("Aggiungi"). */
2800
+ isNew: boolean;
2801
+ /** Dialog opened to view the row (form array or row disabled, `rowEditable` false). */
2802
+ readonly: boolean;
2803
+ }
2804
+ /** `(rowSave)` and `saveHandler`: a row saved from the edit dialog. */
2805
+ export interface SirioGridRowSaveEvent<T extends object = any> {
2806
+ /** New value of the row. */
2807
+ row: T;
2808
+ /** Value before the change; null for a new row. */
2809
+ previous: T | null;
2810
+ /**
2811
+ * Form group of the row: for `saveHandler` the edited copy (not applied yet), for `(rowSave)` the
2812
+ * group of the form array (the copy itself for a new row).
2813
+ */
2814
+ group: FormGroup;
2815
+ isNew: boolean;
2816
+ /** Position in the form array (for a new row: the position it takes, at the end). */
2817
+ index: number;
2818
+ }
2819
+ /** `(rowDelete)` and `deleteHandler`: a row removed from the form array. */
2820
+ export interface SirioGridRowDeleteEvent<T extends object = any> {
2821
+ row: T;
2822
+ group: FormGroup;
2823
+ index: number;
2824
+ }
2825
+ /**
2826
+ * Check before applying a change (e.g. a call to the server): false, an exception or a rejected
2827
+ * promise / observable keep the change from happening (the edit dialog stays open with the error).
2828
+ */
2829
+ export type SirioGridChangeHandler<E> = (event: E) => boolean | void | Promise<boolean | void> | Observable<boolean | void>;
2830
+ /**
2831
+ * Form of the edit dialog of a `[formArray]` grid, bound to the copy of the row:
2832
+ *
2833
+ * ```html
2834
+ * <ng-template wmSirioGridEditor let-group let-isNew="isNew">
2835
+ * <div [formGroup]="group">
2836
+ * <wm-sirio-textbox formControlName="descrizione" label="Descrizione" />
2837
+ * </div>
2838
+ * </ng-template>
2839
+ * ```
2840
+ */
2841
+ export declare class SirioGridEditor<T extends object = any> {
2842
+ static ngTemplateContextGuard<T extends object>(_dir: SirioGridEditor<T>, ctx: unknown): ctx is SirioGridEditorContext<T>;
2843
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridEditor<any>, never>;
2844
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridEditor<any>, "ng-template[wmSirioGridEditor]", never, {}, {}, never, never, true, never>;
2845
+ }
2846
+ /** Default messages of the form array errors (the global ones talk about characters). */
2847
+ export declare const SIRIO_GRID_ARRAY_MESSAGES: SirioErrorMessages;
2848
+ /**
2849
+ * Copy of a control with the same structure, values, disabled state, validators (the composed
2850
+ * validator functions) and `updateOn`: the form edited in the dialog when there is no `rowFactory`.
2851
+ * @internal
2852
+ */
2853
+ export declare function sirioCloneControl<C extends AbstractControl>(control: C): C;
2854
+ /**
2855
+ * Writes the values of `source` into `target` (same structure): nested form arrays get the rows
2856
+ * added / removed in the dialog (copies of the source controls). Returns true when something changed.
2857
+ * @internal
2858
+ */
2859
+ export declare function sirioSyncControl(target: AbstractControl, source: AbstractControl): boolean;
2860
+ /** Sizes of the kit dialog (`.sirio-dialog-wrapper` modifiers); default 600px. */
2861
+ export type SirioDialogSize = 'sm' | 'default' | 'lg' | 'xl';
2862
+ /** Color of the title icon (kit examples: default blue, "Avvertimento", "Pericolo"). */
2863
+ export type SirioDialogTone = 'default' | 'warning' | 'danger';
2864
+ /**
2865
+ * Footer of a dialog (kit `.sirio-dialog-footer`), with the action buttons:
2866
+ * `<div wmSirioDialogFooter>...</div>`.
2867
+ */
2868
+ export declare class SirioDialogFooter {
2869
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioDialogFooter, never>;
2870
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioDialogFooter, "[wmSirioDialogFooter]", never, {}, {}, never, never, true, never>;
2871
+ }
2872
+ /**
2873
+ * Closes the enclosing dialog when clicked (kit `data-sirio-dismiss="dialog"`):
2874
+ * `<button wmSirioButton="secondary" wmSirioDialogClose>Annulla</button>`.
2875
+ * With a value (`[wmSirioDialogClose]="true"`) the value is emitted by the dialog `(closed)`.
2876
+ */
2877
+ export declare class SirioDialogClose {
2878
+ /** Result reported by the dialog `(closed)` output. */
2879
+ readonly result: import("@angular/core").InputSignal<unknown>;
2880
+ private readonly dialog;
2881
+ protected close(): void;
2882
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioDialogClose, never>;
2883
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioDialogClose, "[wmSirioDialogClose]", never, {
2884
+ "result": {
2885
+ "alias": "wmSirioDialogClose";
2886
+ "required": false;
2887
+ "isSignal": true;
2888
+ };
2889
+ }, {}, never, never, true, never>;
2890
+ }
2891
+ /**
2892
+ * Dialog of the Sirio web kit ("Dialog"): `.sirio-dialog` (backdrop) > `.sirio-dialog-wrapper`
2893
+ * (size `sm` / `lg` / `xl`, `dialog-centered`) > `.sirio-dialog-content` with header
2894
+ * (`h2.sirio-dialog-title` with the icon, close button `.sirio-btn-close`), body and footer.
2895
+ *
2896
+ * Behaviour of the kit script (SirioDialog) reproduced in Angular: `aria-modal`, focus moved into
2897
+ * the dialog when it opens and back to the previously focused element when it closes, Esc and a
2898
+ * click on the backdrop close it. In addition: `role="dialog"` (`alertdialog` with `alert`), focus kept
2899
+ * inside the dialog (Tab / Shift+Tab), page scroll locked while open.
2900
+ *
2901
+ * With `drawer` it is the kit drawer (`.sirio-drawer`): a panel opening from the right. Inside a component
2902
+ * opened by `SirioDialogService.open()` the dialog opens by itself and closes the `SirioDialogRef`.
2903
+ *
2904
+ * ```html
2905
+ * <wm-sirio-dialog [(open)]="confirmOpen" title="Vuoi eliminare il tuo account?" tone="danger" alert
2906
+ * (closed)="onClosed($event)">
2907
+ * <p>L'operazione non è reversibile.</p>
2908
+ * <div wmSirioDialogFooter>
2909
+ * <button wmSirioButton="ghost" type="button" wmSirioDialogClose>Annulla</button>
2910
+ * <button wmSirioButton="danger" type="button" [wmSirioDialogClose]="true">Elimina</button>
2911
+ * </div>
2912
+ * </wm-sirio-dialog>
2913
+ * ```
2914
+ */
2915
+ export declare class SirioDialog {
2916
+ /** Visibility (two-way: `[(open)]`). */
2917
+ readonly open: import("@angular/core").ModelSignal<boolean>;
2918
+ readonly title: import("@angular/core").InputSignal<string>;
2919
+ /** Accessible name when there is no title. */
2920
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
2921
+ /** Font Awesome icon of the title (kit: `fa-exclamation-circle`); null = no icon. */
2922
+ readonly icon: import("@angular/core").InputSignal<string | null>;
2923
+ /** Color of the icon: default (blue), warning (`sirio-text-warning`), danger (`sirio-text-danger`). */
2924
+ readonly tone: import("@angular/core").InputSignal<SirioDialogTone>;
2925
+ readonly size: import("@angular/core").InputSignal<SirioDialogSize>;
2926
+ /** Vertically centered (kit `dialog-centered`). */
2927
+ readonly centered: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2928
+ /** Close button in the header (kit). */
2929
+ readonly dismissible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2930
+ readonly closeLabel: import("@angular/core").InputSignal<string>;
2931
+ /** Esc and a click on the backdrop close the dialog (kit behaviour). */
2932
+ readonly closeOnEscape: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2933
+ readonly closeOnBackdrop: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2934
+ /** `role="alertdialog"` for confirmations that interrupt the user (e.g. destructive actions). */
2935
+ readonly alert: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2936
+ /** Kit drawer: panel opening from the right (`.sirio-drawer`). */
2937
+ readonly drawer: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2938
+ /** Extra classes of the `.sirio-dialog` element (e.g. kit drawer / side panel classes). */
2939
+ readonly panelClass: import("@angular/core").InputSignal<string>;
2940
+ /**
2941
+ * The panel is also shown in the page while closed (kit side filters: `d-lg-flex` on desktop):
2942
+ * it is a dialog (`role`, focus trap) only when open.
2943
+ */
2944
+ readonly inline: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2945
+ /** Emitted after the dialog opens. */
2946
+ readonly opened: import("@angular/core").OutputEmitterRef<void>;
2947
+ /** Emitted when the dialog closes, with the result of `wmSirioDialogClose` (undefined otherwise). */
2948
+ readonly closed: import("@angular/core").OutputEmitterRef<unknown>;
2949
+ protected readonly footer: import("@angular/core").Signal<SirioDialogFooter | undefined>;
2950
+ private readonly dialogRef;
2951
+ private readonly document;
2952
+ private readonly injector;
2953
+ /** Reference of a dialog opened from code, when this is its dialog (see SirioDialogService.open). */
2954
+ private readonly openedRef;
2955
+ private readonly baseId;
2956
+ protected readonly dialogId: string;
2957
+ protected readonly titleId: string;
2958
+ protected readonly iconClasses: import("@angular/core").Signal<string>;
2959
+ /** Element focused before opening (focus returns there on close). */
2960
+ private returnFocus;
2961
+ private pendingResult;
2962
+ private backdropPressed;
2963
+ /** The opening steps ran (focus saved, scroll locked) and the closing ones did not yet. */
2964
+ private shown;
2965
+ constructor();
2966
+ /** Opens the dialog (kit SirioDialog.show()). */
2967
+ show(): void;
2968
+ /** Closes the dialog (kit SirioDialog.hide()); `result` is emitted by `(closed)`. */
2969
+ close(result?: unknown): void;
2970
+ toggle(): void;
2971
+ protected onKeydown(event: KeyboardEvent): void;
2972
+ /** Backdrop click: the press and the release must both happen on the backdrop. */
2973
+ protected onBackdropMousedown(event: MouseEvent): void;
2974
+ protected onBackdropClick(event: MouseEvent): void;
2975
+ private isBackdrop;
2976
+ private onOpen;
2977
+ private onClose;
2978
+ private trapFocus;
2979
+ private lockScroll;
2980
+ private unlockScroll;
2981
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioDialog, never>;
2982
+ static ɵcmp: i0.ɵɵComponentDeclaration<SirioDialog, "wm-sirio-dialog", never, {
2983
+ "open": {
2984
+ "alias": "open";
2985
+ "required": false;
2986
+ "isSignal": true;
2987
+ };
2988
+ "title": {
2989
+ "alias": "title";
2990
+ "required": false;
2991
+ "isSignal": true;
2992
+ };
2993
+ "ariaLabel": {
2994
+ "alias": "ariaLabel";
2995
+ "required": false;
2996
+ "isSignal": true;
2997
+ };
2998
+ "icon": {
2999
+ "alias": "icon";
3000
+ "required": false;
3001
+ "isSignal": true;
3002
+ };
3003
+ "tone": {
3004
+ "alias": "tone";
3005
+ "required": false;
3006
+ "isSignal": true;
3007
+ };
3008
+ "size": {
3009
+ "alias": "size";
3010
+ "required": false;
3011
+ "isSignal": true;
3012
+ };
3013
+ "centered": {
3014
+ "alias": "centered";
3015
+ "required": false;
3016
+ "isSignal": true;
3017
+ };
3018
+ "dismissible": {
3019
+ "alias": "dismissible";
3020
+ "required": false;
3021
+ "isSignal": true;
3022
+ };
3023
+ "closeLabel": {
3024
+ "alias": "closeLabel";
3025
+ "required": false;
3026
+ "isSignal": true;
3027
+ };
3028
+ "closeOnEscape": {
3029
+ "alias": "closeOnEscape";
3030
+ "required": false;
3031
+ "isSignal": true;
3032
+ };
3033
+ "closeOnBackdrop": {
3034
+ "alias": "closeOnBackdrop";
3035
+ "required": false;
3036
+ "isSignal": true;
3037
+ };
3038
+ "alert": {
3039
+ "alias": "alert";
3040
+ "required": false;
3041
+ "isSignal": true;
3042
+ };
3043
+ "drawer": {
3044
+ "alias": "drawer";
3045
+ "required": false;
3046
+ "isSignal": true;
3047
+ };
3048
+ "panelClass": {
3049
+ "alias": "panelClass";
3050
+ "required": false;
3051
+ "isSignal": true;
3052
+ };
3053
+ "inline": {
3054
+ "alias": "inline";
3055
+ "required": false;
3056
+ "isSignal": true;
3057
+ };
3058
+ }, {
3059
+ "open": "openChange";
3060
+ "opened": "opened";
3061
+ "closed": "closed";
3062
+ }, ["footer"], ["*", "[wmSirioDialogFooter]"], true, never>;
3063
+ }
3064
+ /** Dialog components, for `imports: [SIRIO_DIALOG]`. */
3065
+ export declare const SIRIO_DIALOG: readonly [typeof SirioDialog, typeof SirioDialogFooter, typeof SirioDialogClose];
3066
+ /**
3067
+ * TanStack Table features of the grid: filtering (with faceted values), grouping with
3068
+ * aggregation, sorting, expanding (detail rows, tree data, groups), pagination, column ordering
3069
+ * and sizing.
3070
+ */
3071
+ declare const GRID_FEATURES: {
3072
+ columnFilteringFeature: import("@tanstack/table-core").TableFeature;
3073
+ filteredRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3074
+ columnFacetingFeature: import("@tanstack/table-core").TableFeature;
3075
+ facetedRowModel: (table: import("@tanstack/table-core").Table<any, any>, columnId: string) => () => import("@tanstack/table-core").RowModel<any, any>;
3076
+ facetedUniqueValues: (table: import("@tanstack/table-core").Table<import("@tanstack/table-core").TableFeatures, any>, columnId: string) => () => Map<any, number>;
3077
+ columnGroupingFeature: import("@tanstack/table-core").TableFeature;
3078
+ groupedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3079
+ rowAggregationFeature: import("@tanstack/table-core").TableFeature;
3080
+ aggregationFns: {
3081
+ sum: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
3082
+ mean: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number | undefined>;
3083
+ min: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, (number | Date) | undefined>;
3084
+ max: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, (number | Date) | undefined>;
3085
+ count: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
3086
+ };
3087
+ rowSortingFeature: import("@tanstack/table-core").TableFeature;
3088
+ sortedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3089
+ rowExpandingFeature: import("@tanstack/table-core").TableFeature;
3090
+ expandedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3091
+ rowPaginationFeature: import("@tanstack/table-core").TableFeature;
3092
+ paginatedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3093
+ columnOrderingFeature: import("@tanstack/table-core").TableFeature;
3094
+ columnSizingFeature: import("@tanstack/table-core").TableFeature;
3095
+ };
3096
+ type GridFeatures = typeof GRID_FEATURES;
3097
+ /** A row of the TanStack row model (data row, sub-row or group row). */
3098
+ export type SirioGridRow<T extends object = any> = Row<GridFeatures, T>;
3099
+ /** Drop position while dragging a header. */
3100
+ interface DropTarget {
3101
+ id: string;
3102
+ side: 'before' | 'after';
3103
+ }
3104
+ /** Edit dialog of a `[formArray]` grid: the copy being edited and the row it comes from. */
3105
+ interface EditSession<T extends object> {
3106
+ context: SirioGridEditorContext<T>;
3107
+ /** Group of the form array (null for a new row). */
3108
+ original: FormGroup | null;
3109
+ }
3110
+ /**
3111
+ * A cell of the grouped headers: a group header (over `colspan` adjacent columns of the same block)
3112
+ * or a column header (with `rowspan` below a shorter group path).
3113
+ */
3114
+ type HeaderCell<T extends object> = {
3115
+ kind: 'group';
3116
+ track: string;
3117
+ label: string;
3118
+ colspan: number;
3119
+ /** First and last column ids, for the fixed position. */
3120
+ pin: readonly [string, string];
3121
+ } | {
3122
+ kind: 'column';
3123
+ track: string;
3124
+ column: SirioGridColumn<T>;
3125
+ rowspan: number;
3126
+ };
3127
+ /**
3128
+ * Cell of a fixed column (header and body): sticky position at the offset measured by the grid,
3129
+ * with the separator / scroll marker on the edge of the fixed block. A group header passes the
3130
+ * first and last column ids it spans.
3131
+ * @internal
3132
+ */
3133
+ export declare class SirioGridPinCell {
3134
+ readonly key: import("@angular/core").InputSignal<string | readonly [string, string]>;
3135
+ private readonly grid;
3136
+ private readonly first;
3137
+ private readonly last;
3138
+ /** Only single cells are measured (a group header spans more columns). */
3139
+ protected readonly measureKey: import("@angular/core").Signal<string | null>;
3140
+ protected readonly side: import("@angular/core").Signal<SirioGridFixed | null>;
3141
+ /** Left block: offset of the first column; right block: offset of the last one (see PIN_OVERHANG). */
3142
+ protected readonly offset: import("@angular/core").Signal<number>;
3143
+ protected readonly edge: import("@angular/core").Signal<SirioGridFixed | null>;
3144
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioGridPinCell, never>;
3145
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SirioGridPinCell, "[wmSirioGridPin]", never, {
3146
+ "key": {
3147
+ "alias": "wmSirioGridPin";
3148
+ "required": true;
3149
+ "isSignal": true;
3150
+ };
3151
+ }, {}, never, never, true, never>;
3152
+ }
3153
+ /**
3154
+ * Data grid based on the Sirio web kit table ("Tabelle"): `table.sirio-table` with the kit
3155
+ * variants (`sirio-table-dark`, `sirio-table-light`), densities (`sirio-table-xs/sm/lg`), sortable
3156
+ * headers (`.sirio-sorting`, `-asc`, `-desc`), selection checkboxes (`.sirio-table-check`), the
3157
+ * responsive container (`.sirio-table-responsive` with the `overflow-start/end` scroll markers),
3158
+ * fixed header / first column / last column and the card layout for small screens
3159
+ * (`.sirio-table-card` with `data-label`), followed by `wm-sirio-pagination`.
3160
+ *
3161
+ * Data processing is done by TanStack Table (`@tanstack/angular-table`, `injectTable`): column
3162
+ * filters (with the values present in the column for the select filters), sorting on one or more
3163
+ * columns, grouping with aggregations, expanding (detail panel, tree data, groups), pagination,
3164
+ * column order and widths. With a server data source filtering, sorting and pagination run in
3165
+ * manual mode (the page is shown as received) and grouping is not available.
3166
+ *
3167
+ * Columns are declared with `wm-sirio-grid-column` (optional `wmSirioGridCell` / `wmSirioGridHeader`
3168
+ * templates); `wmSirioGridDetail` adds expandable detail rows.
3169
+ *
3170
+ * ```html
3171
+ * <wm-sirio-data-grid [data]="pratiche" rowId="id" selection="multiple" [(selected)]="scelte">
3172
+ * <wm-sirio-grid-column field="numero" header="Numero" sortable />
3173
+ * <wm-sirio-grid-column field="importo" header="Importo" align="end" [format]="euro" sortable />
3174
+ * </wm-sirio-data-grid>
3175
+ * ```
3176
+ */
3177
+ export declare class SirioDataGrid<T extends object = any> {
3178
+ private readonly document;
3179
+ private readonly injector;
3180
+ /** Rows in memory: filtered, sorted, grouped and paged by the grid. Ignored with `dataSource`. */
3181
+ readonly data: import("@angular/core").InputSignal<readonly T[] | null>;
3182
+ /** Server side data source (see `SirioGridDataSource`); takes precedence over `data`. */
3183
+ readonly dataSource: import("@angular/core").InputSignal<SirioGridDataSource<T> | null>;
3184
+ /** Identity of a row (property name or function) for tracking and selection; null = the object. */
3185
+ readonly rowId: import("@angular/core").InputSignal<SirioGridRowId<T>>;
3186
+ /** Sub-rows of a row (tree data): property name or function; the rows get an expand button. */
3187
+ readonly subRows: import("@angular/core").InputSignal<SirioGridSubRows<T> | null>;
3188
+ /** External loading flag (e.g. while the page fetches `data`); the data source sets its own. */
3189
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3190
+ /**
3191
+ * Rows from a form array, one form group per row (instead of `data`; ignored with `dataSource`).
3192
+ * The grid shows `getRawValue()` of each group and follows the changes of the array; rows are
3193
+ * edited in a dialog (`wmSirioGridEditor`), added (`addable`) and removed (`deletable`).
3194
+ */
3195
+ readonly formArray: import("@angular/core").InputSignal<FormArray<any> | null>;
3196
+ /**
3197
+ * Form group of a row with its validators: for a new row (null or the initial values) and for the
3198
+ * copy edited in the dialog. Without it existing rows are edited on a generic copy of their group
3199
+ * (same controls, values and validators) and new rows cannot be added.
3200
+ */
3201
+ readonly rowFactory: import("@angular/core").InputSignal<SirioGridRowFactory<T> | null>;
3202
+ /** "Aggiungi" button: a new row edited in the dialog, added at the end (needs `rowFactory`). */
3203
+ readonly addable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3204
+ /** "Elimina" button on the rows (and "Elimina selezionati" with multiple selection). */
3205
+ readonly deletable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3206
+ /** Rows that can be changed (the others open the dialog read-only); null = every row. */
3207
+ readonly rowEditable: import("@angular/core").InputSignal<((row: T) => boolean) | null>;
3208
+ /** Rows that can be removed; null = every row. */
3209
+ readonly rowDeletable: import("@angular/core").InputSignal<((row: T) => boolean) | null>;
3210
+ /** A double click on a row opens the dialog. */
3211
+ readonly editOnDoubleClick: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3212
+ /** Confirmation dialog before removing rows. */
3213
+ readonly confirmDelete: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3214
+ /** Check before applying a save (e.g. a call to the server): see `SirioGridChangeHandler`. */
3215
+ readonly saveHandler: import("@angular/core").InputSignal<SirioGridChangeHandler<SirioGridRowSaveEvent<T>> | null>;
3216
+ /** Check before removing a row: see `SirioGridChangeHandler`. */
3217
+ readonly deleteHandler: import("@angular/core").InputSignal<SirioGridChangeHandler<SirioGridRowDeleteEvent<T>> | null>;
3218
+ /** Size of the edit dialog (kit `sirio-dialog-sm/lg/xl`). */
3219
+ readonly editorSize: import("@angular/core").InputSignal<SirioDialogSize>;
3220
+ /** Messages of the form array errors under the grid (over the global and the grid defaults). */
3221
+ readonly errorMessages: import("@angular/core").InputSignal<SirioErrorMessages | null>;
3222
+ /** Sort criteria in priority order (two-way: `[(sort)]`); empty = original order. */
3223
+ readonly sort: import("@angular/core").ModelSignal<SirioGridSort[]>;
3224
+ /** `multiple`: Shift+click (or Shift+Enter) on a header adds it to the sort. */
3225
+ readonly sortMode: import("@angular/core").InputSignal<SirioGridSortMode>;
3226
+ /** Shows `wm-sirio-pagination` and pages the rows; false shows every row. */
3227
+ readonly pageable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3228
+ /** Current page, 1-based (two-way: `[(page)]`). */
3229
+ readonly page: import("@angular/core").ModelSignal<number>;
3230
+ /** Rows per page (two-way: `[(pageSize)]`); with groups or tree data the top level rows count. */
3231
+ readonly pageSize: import("@angular/core").ModelSignal<number>;
3232
+ readonly pageSizeOptions: import("@angular/core").InputSignal<number[]>;
3233
+ /**
3234
+ * Layout of the pagination (`wm-sirio-pagination variant`): `full` (elements per page, range,
3235
+ * page select, previous/next) or `numbers` (page numbers with ellipsis).
3236
+ */
3237
+ readonly paginationVariant: import("@angular/core").InputSignal<SirioPaginationVariant>;
3238
+ /** Pages shown on each side of the current one with `paginationVariant="numbers"`. */
3239
+ readonly paginationSiblings: import("@angular/core").InputSignalWithTransform<number, unknown>;
3240
+ /** "Elementi per pagina" block (select + range) of the `full` pagination. */
3241
+ readonly paginationShowItems: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3242
+ readonly selection: import("@angular/core").InputSignal<SirioGridSelection>;
3243
+ /** Selected rows (two-way: `[(selected)]`), compared by `rowId`. */
3244
+ readonly selected: import("@angular/core").ModelSignal<readonly T[]>;
3245
+ /** Column filters by filter key (two-way: `[(filters)]`), see `SirioGridFilterType`. */
3246
+ readonly filters: import("@angular/core").ModelSignal<SirioGridFilters>;
3247
+ /** Delay (ms) before a typed text filter is applied; the other filters apply at once. */
3248
+ readonly filterDebounce: import("@angular/core").InputSignalWithTransform<number, unknown>;
3249
+ /**
3250
+ * Filters with operators on every column with a filter (a "Condizione" choice: contiene, uguale
3251
+ * a, maggiore di, compreso tra, vuoto, ...): the filter values become `SirioGridFilterCondition`.
3252
+ * A column can override it with its own `filterOperators`.
3253
+ */
3254
+ readonly filterOperators: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3255
+ /** Active filters as kit chips above the table (each one removable). */
3256
+ readonly showFilterChips: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3257
+ /**
3258
+ * Filter buttons of the headers: `always` visible (default), `hover` (as ag-grid: shown on mouse
3259
+ * over, with the keyboard focus or when the filter is active; the space stays reserved) or `none`
3260
+ * (no filter controls in the grid, card panel included: the filters are set from code, e.g.
3261
+ * `[(filters)]` or `setFilter`, as the ag-grid columns with a filter and no floating filter).
3262
+ */
3263
+ readonly filterButton: import("@angular/core").InputSignal<"always" | "none" | "hover">;
3264
+ /**
3265
+ * Row of filters under the column headers (as the floating filters of ag-grid): a field for the
3266
+ * simple condition of each filterable column, the filter button for the others. The filter chips
3267
+ * are not shown; in the card layout the "Filtri" panel stays.
3268
+ */
3269
+ readonly filterRow: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3270
+ /** Keys of the columns the rows are grouped by, in order (two-way: `[(grouping)]`). */
3271
+ readonly grouping: import("@angular/core").ModelSignal<string[]>;
3272
+ /** Expanded rows (two-way: `[(expanded)]`): detail rows, tree rows and groups. */
3273
+ readonly expanded: import("@angular/core").ModelSignal<SirioGridExpanded>;
3274
+ /** With `wmSirioGridDetail`: which rows have a detail (default every data row). */
3275
+ readonly rowExpandable: import("@angular/core").InputSignal<((row: T) => boolean) | null>;
3276
+ /**
3277
+ * Row number column at the start (after selection and expand columns): continuous across pages,
3278
+ * in the current filter and sort order; group rows have no number, tree rows are numbered by
3279
+ * level (1, 1.1, 1.2). It is the row header (`role="rowheader"`) for screen readers.
3280
+ */
3281
+ readonly rowNumbers: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3282
+ /** A click on the row (outside links, buttons and fields) also selects it. */
3283
+ readonly selectOnRowClick: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3284
+ /**
3285
+ * Column of the selection checkboxes / radios (with "select all" in multiple mode). False: no
3286
+ * column, the rows are selected with a click (multiple: each click toggles the row, no Ctrl or
3287
+ * Shift needed) or with Space / Enter on the focused row.
3288
+ */
3289
+ readonly selectionColumn: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3290
+ /**
3291
+ * Keyboard navigation as ag-grid (ARIA grid): the grid is one tab stop (entered on the first
3292
+ * column header, then the last cell visited), the arrows move between
3293
+ * headers and cells (Home / End: start and end of the row, Ctrl+Home / Ctrl+End: first and last
3294
+ * cell), Tab leaves the grid. A cell with buttons or fields passes the focus to them (e.g. the
3295
+ * actions, one stop each). Space / Enter on a cell selects its row when the rows are selected
3296
+ * without the checkbox column. The fields of the filter row keep their own tab stops.
3297
+ * False: a plain table, only the interactive headers and the controls are tab stops.
3298
+ */
3299
+ readonly keyboardNavigation: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3300
+ /** Navigation active (not in the card layout of small screens). */
3301
+ protected readonly navigation: import("@angular/core").Signal<boolean>;
3302
+ /**
3303
+ * Role of the cells of the filter row: data cells, not column headers (an empty header was announced
3304
+ * as a header without name, and the body cells must keep the titles of the first row as headers).
3305
+ */
3306
+ protected readonly filterCellRole: import("@angular/core").Signal<"cell" | "gridcell">;
3307
+ /** ARIA role of the table with the navigation: grid, treegrid with tree or grouped rows (aria-level). */
3308
+ protected readonly gridRole: import("@angular/core").Signal<"treegrid" | "grid" | null>;
3309
+ /**
3310
+ * Which rows can be selected (as `isRowSelectable` of ag-grid); null = every row. The other rows
3311
+ * have a disabled box (hidden with `hideUnselectable`), are skipped by "select all" and by the
3312
+ * click / keyboard selection. Rows already in `selected` stay selected.
3313
+ */
3314
+ readonly rowSelectable: import("@angular/core").InputSignal<((row: T) => boolean) | null>;
3315
+ /** The selection box of the rows that cannot be selected is hidden instead of disabled. */
3316
+ readonly hideUnselectable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3317
+ /**
3318
+ * Rows taken by "seleziona tutto" (multiple selection): `page` (default) the current page,
3319
+ * `filtered` every row that passes the filters over all the pages (ag-grid `selectAll: 'filtered'`),
3320
+ * `all` every row. With a server data source it is always the loaded page.
3321
+ */
3322
+ readonly selectAll: import("@angular/core").InputSignal<SirioGridSelectAll>;
3323
+ /**
3324
+ * Classes of the data rows: text, list or object `{ classe: condizione }`, or a function of the row
3325
+ * and of its index in the page (e.g. `(row) => ({ 'riga-scaduta': row.scaduta })`).
3326
+ */
3327
+ readonly rowClass: import("@angular/core").InputSignal<SirioGridRowClass<T>>;
3328
+ /**
3329
+ * Inline styles of the data rows: CSS text or object, or a function of the row and of its index.
3330
+ * A background color is applied to the cells (over the stripes and the fixed cells; the
3331
+ * selection still shows).
3332
+ */
3333
+ readonly rowStyle: import("@angular/core").InputSignal<SirioGridRowStyle<T>>;
3334
+ /** The column widths can be changed by dragging the right edge of the headers (or with the keyboard). */
3335
+ readonly resizable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3336
+ /** The columns can be moved by dragging the headers (or with Alt+arrows on a header). */
3337
+ readonly reorderable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3338
+ /** Widths in pixels by column key (two-way: `[(columnWidths)]`); empty = automatic layout. */
3339
+ readonly columnWidths: import("@angular/core").ModelSignal<Record<string, number>>;
3340
+ /** Column keys in display order (two-way: `[(columnOrder)]`); empty = declaration order. */
3341
+ readonly columnOrder: import("@angular/core").ModelSignal<string[]>;
3342
+ readonly variant: import("@angular/core").InputSignal<SirioGridVariant>;
3343
+ readonly size: import("@angular/core").InputSignal<SirioGridSize>;
3344
+ /** Horizontal scroll container of the kit with the scroll markers. */
3345
+ readonly responsive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3346
+ /**
3347
+ * Header fixed while the rows scroll (kit `sirio-table-th-fixed`). Without `height` /
3348
+ * `maxHeight` the rows area takes the kit height (450px).
3349
+ */
3350
+ readonly stickyHeader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3351
+ /**
3352
+ * First data column fixed during the horizontal scroll (with the selection, expand and row number
3353
+ * columns before it), like the kit `sirio-table-column-fixed-first`. Shortcut of `fixed="left"`
3354
+ * on the first column; ignored when a column is already fixed at the left.
3355
+ */
3356
+ readonly fixedFirstColumn: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3357
+ /**
3358
+ * Last column (e.g. actions) fixed during the horizontal scroll, like the kit
3359
+ * `sirio-table-action-fixed`. Shortcut of `fixed="right"` on the last column; ignored when a
3360
+ * column is already fixed at the right.
3361
+ */
3362
+ readonly fixedLastColumn: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3363
+ /**
3364
+ * Height of the grid (CSS, as `style.height`: `400px`, `50vh`); null (default) = the height of
3365
+ * the content, every row shown. The rows scroll inside, the header stays visible; toolbar,
3366
+ * filter chips and pagination stay out of the scroll area.
3367
+ */
3368
+ readonly height: import("@angular/core").InputSignal<string | null>;
3369
+ /** Minimum height of the grid (CSS): with fewer rows the rows area grows, the pagination stays at the bottom. */
3370
+ readonly minHeight: import("@angular/core").InputSignal<string | null>;
3371
+ /** Maximum height of the grid (CSS): the grid follows its content up to this height, then the rows scroll. */
3372
+ readonly maxHeight: import("@angular/core").InputSignal<string | null>;
3373
+ /** A height limit is set: the rows area fills the grid and scrolls. */
3374
+ protected readonly sized: import("@angular/core").Signal<boolean>;
3375
+ /**
3376
+ * Card layout on small screens (kit `sirio-table-card`: up to 768px wide every row becomes a
3377
+ * card and each cell shows its header as label).
3378
+ */
3379
+ readonly cardOnMobile: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3380
+ /** Caption of the table (accessible name). */
3381
+ readonly caption: import("@angular/core").InputSignal<string>;
3382
+ /** Shows the caption; otherwise it is visually hidden (still read by screen readers). */
3383
+ readonly captionVisible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3384
+ readonly emptyText: import("@angular/core").InputSignal<string>;
3385
+ readonly loadingText: import("@angular/core").InputSignal<string>;
3386
+ /** Message of a failed server data source (with the "Riprova" button); empty = no message. */
3387
+ readonly loadErrorText: import("@angular/core").InputSignal<string>;
3388
+ readonly retryLabel: import("@angular/core").InputSignal<string>;
3389
+ /** Read before an open server total (no `total` in the response): "oltre 30 risultati". */
3390
+ readonly moreLabel: import("@angular/core").InputSignal<string>;
3391
+ readonly resultsLabel: import("@angular/core").InputSignal<string>;
3392
+ /** Accessible label of the "seleziona tutto" checkbox; null = the text of `selectAll`. */
3393
+ readonly selectAllLabel: import("@angular/core").InputSignal<string | null>;
3394
+ /** Screen reader hint of the rows selected without the checkbox column (`selectionColumn` false). */
3395
+ readonly selectRowHint: import("@angular/core").InputSignal<string>;
3396
+ /** Accessible label of the selection box of a row. */
3397
+ /**
3398
+ * Control of the rows with single selection: `radio` (default) or `checkbox` (as ag-grid; a checked
3399
+ * box is unchecked by selecting another row or by clicking it again).
3400
+ */
3401
+ readonly singleSelectionControl: import("@angular/core").InputSignal<"radio" | "checkbox">;
3402
+ /** Radio buttons in the selection column (single selection with `singleSelectionControl="radio"`). */
3403
+ protected readonly singleRadio: import("@angular/core").Signal<boolean>;
3404
+ /** Header of the selection column with single selection (screen readers only). */
3405
+ readonly selectionHeaderLabel: import("@angular/core").InputSignal<string>;
3406
+ readonly selectRowLabel: import("@angular/core").InputSignal<(row: T, index: number) => string>;
3407
+ readonly sortAscendingLabel: import("@angular/core").InputSignal<string>;
3408
+ readonly sortDescendingLabel: import("@angular/core").InputSignal<string>;
3409
+ /** Hint of the sortable headers with `sortMode="multiple"`. */
3410
+ readonly multiSortHint: import("@angular/core").InputSignal<string>;
3411
+ readonly paginationAriaLabel: import("@angular/core").InputSignal<string>;
3412
+ /**
3413
+ * Accessible name of the paginator: `paginationAriaLabel` followed by the `caption`, so that the
3414
+ * paginators of more grids in a page are told apart ("Paginazione della tabella Prodotti").
3415
+ */
3416
+ protected readonly paginationName: import("@angular/core").Signal<string>;
3417
+ /** Prefix of the filter button and of the popover title: "Filtra per <header>". */
3418
+ readonly filterLabel: import("@angular/core").InputSignal<string>;
3419
+ readonly filterFromLabel: import("@angular/core").InputSignal<string>;
3420
+ readonly filterToLabel: import("@angular/core").InputSignal<string>;
3421
+ /** Empty choice of the select filters. */
3422
+ readonly filterAllLabel: import("@angular/core").InputSignal<string>;
3423
+ /**
3424
+ * Prefix of the filter button in the filter row ("Altre condizioni per <header>"): the field of the
3425
+ * cell is already "Filtra per <header>".
3426
+ */
3427
+ readonly filterMoreLabel: import("@angular/core").InputSignal<string>;
3428
+ readonly filterYesLabel: import("@angular/core").InputSignal<string>;
3429
+ readonly filterNoLabel: import("@angular/core").InputSignal<string>;
3430
+ /** Added to the label of the filter button when its filter is active. */
3431
+ readonly filterActiveLabel: import("@angular/core").InputSignal<string>;
3432
+ readonly clearFilterLabel: import("@angular/core").InputSignal<string>;
3433
+ readonly clearFiltersLabel: import("@angular/core").InputSignal<string>;
3434
+ /** Label of the operator choice of the filters with operators. */
3435
+ readonly filterConditionLabel: import("@angular/core").InputSignal<string>;
3436
+ /** Label of the value of a filter with operators. */
3437
+ readonly filterValueLabel: import("@angular/core").InputSignal<string>;
3438
+ /** Joins the bounds of `between` in the filter chips ("compreso tra 10 e 20"). */
3439
+ readonly filterAndLabel: import("@angular/core").InputSignal<string>;
3440
+ /** Labels of the filter operators, over the Italian defaults (e.g. `{ contains: 'Contains' }`). */
3441
+ readonly filterOperatorLabels: import("@angular/core").InputSignal<Partial<Record<SirioGridFilterOperator, string>>>;
3442
+ /** Title of the filter panel of the card layout and sr-only title of the chips. */
3443
+ readonly filtersLabel: import("@angular/core").InputSignal<string>;
3444
+ /** Visible header of the row number column. */
3445
+ readonly rowNumberHeader: import("@angular/core").InputSignal<string>;
3446
+ /** Accessible name of the row number column. */
3447
+ readonly rowNumberLabel: import("@angular/core").InputSignal<string>;
3448
+ readonly groupByLabel: import("@angular/core").InputSignal<string>;
3449
+ readonly expandAllLabel: import("@angular/core").InputSignal<string>;
3450
+ readonly collapseAllLabel: import("@angular/core").InputSignal<string>;
3451
+ /** Name of a row in the labels of its expand button ("Espandi <name>"). */
3452
+ readonly rowName: import("@angular/core").InputSignal<(row: T, index: number) => string>;
3453
+ readonly expandRowLabel: import("@angular/core").InputSignal<string>;
3454
+ readonly collapseRowLabel: import("@angular/core").InputSignal<string>;
3455
+ /** Accessible label of the resize handle: "<label> <header>". */
3456
+ readonly resizeColumnLabel: import("@angular/core").InputSignal<string>;
3457
+ /** Hint of the headers of a reorderable grid. */
3458
+ readonly reorderHint: import("@angular/core").InputSignal<string>;
3459
+ /** Hint of a resizable header (keyboard of ag-grid: Alt+arrows). */
3460
+ readonly resizeHint: import("@angular/core").InputSignal<string>;
3461
+ /** Hint of a header with a filter button (Ctrl+Enter opens it, as ag-grid). */
3462
+ readonly filterHint: import("@angular/core").InputSignal<string>;
3463
+ readonly resetColumnsLabel: import("@angular/core").InputSignal<string>;
3464
+ /** Announcement of a moved column. */
3465
+ readonly columnMovedLabel: import("@angular/core").InputSignal<(header: string, position: number, total: number) => string>;
3466
+ /** Texts of the `[formArray]` editing. */
3467
+ readonly actionsHeader: import("@angular/core").InputSignal<string>;
3468
+ readonly addLabel: import("@angular/core").InputSignal<string>;
3469
+ readonly editLabel: import("@angular/core").InputSignal<string>;
3470
+ readonly viewLabel: import("@angular/core").InputSignal<string>;
3471
+ readonly deleteLabel: import("@angular/core").InputSignal<string>;
3472
+ readonly deleteSelectedLabel: import("@angular/core").InputSignal<string>;
3473
+ readonly newRowTitle: import("@angular/core").InputSignal<string>;
3474
+ readonly editRowTitle: import("@angular/core").InputSignal<string>;
3475
+ readonly viewRowTitle: import("@angular/core").InputSignal<string>;
3476
+ readonly saveLabel: import("@angular/core").InputSignal<string>;
3477
+ readonly cancelLabel: import("@angular/core").InputSignal<string>;
3478
+ readonly closeLabel: import("@angular/core").InputSignal<string>;
3479
+ readonly deleteConfirmTitle: import("@angular/core").InputSignal<string>;
3480
+ readonly deleteSelectedConfirmTitle: import("@angular/core").InputSignal<string>;
3481
+ readonly deleteConfirmMessage: import("@angular/core").InputSignal<string>;
3482
+ /** Hint of a row with errors (icon in the actions column). */
3483
+ readonly invalidRowLabel: import("@angular/core").InputSignal<string>;
3484
+ readonly saveErrorTitle: import("@angular/core").InputSignal<string>;
3485
+ /** Text of a failed save when the error has no message of its own. */
3486
+ readonly saveErrorText: import("@angular/core").InputSignal<string>;
3487
+ /** Click on a data row, outside links, buttons and fields. */
3488
+ readonly rowClick: import("@angular/core").OutputEmitterRef<SirioGridRowEvent<T>>;
3489
+ /** Error of the data source (the grid shows no rows). */
3490
+ readonly loadError: import("@angular/core").OutputEmitterRef<unknown>;
3491
+ /** The state chosen by the user changed (sort, filters, page, columns, grouping, expansion, selection). */
3492
+ readonly stateChange: import("@angular/core").OutputEmitterRef<SirioGridState>;
3493
+ /** A row of the form array was saved from the dialog (changed or added). */
3494
+ readonly rowSave: import("@angular/core").OutputEmitterRef<SirioGridRowSaveEvent<T>>;
3495
+ /** A row was removed from the form array. */
3496
+ readonly rowDelete: import("@angular/core").OutputEmitterRef<SirioGridRowDeleteEvent<T>>;
3497
+ /** @internal */
3498
+ readonly columns: import("@angular/core").Signal<readonly SirioGridColumn<any>[]>;
3499
+ protected readonly emptyTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
3500
+ protected readonly detailTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
3501
+ protected readonly errorTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
3502
+ protected readonly editorTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
3503
+ private readonly scroller;
3504
+ private readonly tableEl;
3505
+ protected readonly baseId: string;
3506
+ /** Numbers (counts, filter values) and dates (filter chips) in the format of `LOCALE_ID`. */
3507
+ private readonly locale;
3508
+ private readonly numberFormat;
3509
+ private readonly dateFormat;
3510
+ /** Default sort of the columns without `compare`: text collation of `LOCALE_ID`. */
3511
+ private readonly defaultCompare;
3512
+ /** Widths (px) of the service columns in the resized layout (colgroup). */
3513
+ protected readonly toolColumnWidth = 48;
3514
+ protected readonly rowNumberWidth = 64;
3515
+ /** Width of the actions column: its buttons, plus the error icon when a row has errors. */
3516
+ protected readonly actionsWidth: import("@angular/core").Signal<number>;
3517
+ private readonly serverResult;
3518
+ /**
3519
+ * Total of the server rows: from the response, or found from the pages (open while every page
3520
+ * received is full). `key` is the query without the page: a new sort, filter or page size
3521
+ * starts again.
3522
+ */
3523
+ private readonly serverTotal;
3524
+ /** Error of the last request of the data source (null after a successful one). */
3525
+ protected readonly serverError: import("@angular/core").WritableSignal<{
3526
+ error: unknown;
3527
+ } | null>;
3528
+ /** Context of the error template. */
3529
+ protected readonly errorContext: import("@angular/core").Signal<{
3530
+ $implicit: unknown;
3531
+ error: unknown;
3532
+ retry: () => void;
3533
+ } | null>;
3534
+ private readonly serverLoading;
3535
+ private readonly reloadTick;
3536
+ private subscription;
3537
+ /** The next filter change is applied without the debounce (not a typed text). */
3538
+ private immediateFilter;
3539
+ private request;
3540
+ protected readonly overflowStart: import("@angular/core").WritableSignal<boolean>;
3541
+ protected readonly overflowEnd: import("@angular/core").WritableSignal<boolean>;
3542
+ /** Viewport within the kit card breakpoint (768px). */
3543
+ private readonly mobile;
3544
+ /** The card layout is active now (scroll container, fixed and resized columns are turned off). */
3545
+ protected readonly cardMode: import("@angular/core").Signal<boolean>;
3546
+ readonly isLoading: import("@angular/core").Signal<boolean>;
3547
+ protected readonly server: import("@angular/core").Signal<boolean>;
3548
+ /** Filters in use (the typed text ones after `filterDebounce`). */
3549
+ private readonly appliedFilters;
3550
+ /** Filter panel of the card layout open. */
3551
+ protected readonly filtersOpen: import("@angular/core").WritableSignal<boolean>;
3552
+ /** Announcement of the last column move (sr-only live region). */
3553
+ protected readonly announcement: import("@angular/core").WritableSignal<string>;
3554
+ /** Header being dragged and drop position. */
3555
+ protected readonly dragId: import("@angular/core").WritableSignal<string | null>;
3556
+ protected readonly dropTarget: import("@angular/core").WritableSignal<DropTarget | null>;
3557
+ /** Width of each column measured when the resizing starts (reset target). */
3558
+ private initialWidths;
3559
+ /**
3560
+ * Id of a column in the TanStack table: its key, or its position when it has none. A key already
3561
+ * used by a previous column (the same field shown twice, e.g. with another format) gets a suffix.
3562
+ */
3563
+ columnId(column: SirioGridColumn<T>): string;
3564
+ private readonly columnIds;
3565
+ /**
3566
+ * Key of a column in `filters` (and in the query of a server source): its `filterKey`, otherwise
3567
+ * its id, unique also for columns on the same field (`data`, `data~2`): a date shown as date and
3568
+ * as time must not share the filter of the other column.
3569
+ */
3570
+ filterIdOf(column: SirioGridColumn<T>): string;
3571
+ private readonly columnsById;
3572
+ /**
3573
+ * TanStack Table definitions of the columns. The column inputs that change the processing are
3574
+ * read here, so the definitions (and the row models) are rebuilt when they change.
3575
+ */
3576
+ private readonly columnDefs;
3577
+ /** Columns in the TanStack column order, hidden ones excluded. */
3578
+ private readonly orderedColumns;
3579
+ /**
3580
+ * Fixed side of the columns: their `fixed` input, plus `fixedFirstColumn` / `fixedLastColumn`.
3581
+ * Columns are fixed only in the kit scroll container (not in the card layout).
3582
+ */
3583
+ private readonly fixedSides;
3584
+ /** Group levels of the headers (0 = no grouped headers). */
3585
+ protected readonly headerDepth: import("@angular/core").Signal<number>;
3586
+ /** Rowspan of the service headers (selection, expand, row number) over every header row. */
3587
+ protected readonly headerRowspan: import("@angular/core").Signal<number | null>;
3588
+ /**
3589
+ * Header rows: one per group level, then the column headers. Adjacent columns of the same fixed
3590
+ * block with the same groups share a group cell; a column with fewer group levels has its header
3591
+ * in the row after its last group, spanning the rows below.
3592
+ */
3593
+ protected readonly headerRows: import("@angular/core").Signal<HeaderCell<T>[][]>;
3594
+ /** Sticky top (px) of each header row with the fixed header: height of the rows above. */
3595
+ private readonly headerTops;
3596
+ /** Height of the header rows: the cells focused with Tab are scrolled out from under the fixed header. */
3597
+ protected readonly headerHeight: import("@angular/core").WritableSignal<number>;
3598
+ private headerObserver;
3599
+ protected headerTop(row: number): number | null;
3600
+ private measureHeaderRows;
3601
+ /** Fixed side of a column (null = it scrolls). */
3602
+ protected fixedOf(column: SirioGridColumn<T>): SirioGridFixed | null;
3603
+ /** Columns in display order: the left fixed ones, the scrolling ones, the right fixed ones. */
3604
+ protected readonly visibleColumns: import("@angular/core").Signal<SirioGridColumn<T>[]>;
3605
+ /**
3606
+ * Keys of the fixed cells by side, in display order. The service columns (selection, expand,
3607
+ * row number) are fixed with the left fixed columns, which follow them.
3608
+ */
3609
+ private readonly pinKeys;
3610
+ protected readonly hasPinLeft: import("@angular/core").Signal<boolean>;
3611
+ protected readonly hasPinRight: import("@angular/core").Signal<boolean>;
3612
+ /** Sticky offset (px) of each fixed cell, measured on the headers. @internal */
3613
+ readonly pinOffsets: import("@angular/core").WritableSignal<Record<string, number>>;
3614
+ private pinObserver;
3615
+ /** Side of a fixed cell (column id or service key). @internal */
3616
+ pinSideOf(key: string): SirioGridFixed | null;
3617
+ /** Edge of the fixed block where the cell is (last left / first right cell). @internal */
3618
+ pinEdgeOf(key: string): SirioGridFixed | null;
3619
+ /** Offsets of the fixed cells: sum of the widths of the fixed headers before them on their side. */
3620
+ private measurePins;
3621
+ /** Widths of the fixed blocks: the kit scroll markers of the container are drawn at their inner edge. */
3622
+ protected readonly pinBlockWidths: import("@angular/core").WritableSignal<{
3623
+ left: number;
3624
+ right: number;
3625
+ }>;
3626
+ protected readonly filterColumns: import("@angular/core").Signal<SirioGridColumn<T>[]>;
3627
+ /** Filter row shown (`filterRow`, a filterable column, not in the card layout). */
3628
+ protected readonly filterRowActive: import("@angular/core").Signal<boolean>;
3629
+ protected readonly groupableColumns: import("@angular/core").Signal<SirioGridColumn<any>[]>;
3630
+ protected readonly groupOptions: import("@angular/core").Signal<SirioOption<string>[]>;
3631
+ /** Grouping in use (client side only, groupable columns only). */
3632
+ protected readonly activeGrouping: import("@angular/core").Signal<string[]>;
3633
+ protected readonly treeMode: import("@angular/core").Signal<boolean>;
3634
+ protected readonly hasDetail: import("@angular/core").Signal<boolean>;
3635
+ /** Column of the selection checkboxes / radios shown. */
3636
+ protected readonly checkColumn: import("@angular/core").Signal<boolean>;
3637
+ /** Rows selected with a click: `selectOnRowClick`, or no checkbox column. */
3638
+ protected readonly clickSelect: import("@angular/core").Signal<boolean>;
3639
+ /** Rows focusable and selected with Space / Enter (no checkbox to reach with the keyboard). */
3640
+ protected readonly keySelect: import("@angular/core").Signal<boolean>;
3641
+ protected readonly colCount: import("@angular/core").Signal<number>;
3642
+ /** Inner width of the scroll container (px), for the flex columns. */
3643
+ private readonly containerWidth;
3644
+ /** Content width of the columns without `width`, measured in the automatic layout. */
3645
+ private readonly naturalWidths;
3646
+ /** Columns sized by `flex` now (a resized column keeps its width). */
3647
+ private readonly flexColumns;
3648
+ /** Width of a column that is not flex: resized, declared (`width` in px) or content width. */
3649
+ private fixedWidthOf;
3650
+ /** Width of the service columns (selection, expand, row number). */
3651
+ private readonly toolsWidth;
3652
+ /**
3653
+ * Widths of the flex columns: the free width (container - service columns - other columns)
3654
+ * shared by `flex`, within min / max width; null while a width is still to be measured.
3655
+ */
3656
+ private readonly flexWidths;
3657
+ /** Fixed layout with the widths of `columnWidths` (after a resize) or of the flex columns. */
3658
+ protected readonly fixedLayout: import("@angular/core").Signal<boolean>;
3659
+ /** Content widths of the columns without a width, while the automatic layout is shown. */
3660
+ private measureNaturalWidths;
3661
+ protected readonly tableWidth: import("@angular/core").Signal<number | null>;
3662
+ protected readonly columnsCustomized: import("@angular/core").Signal<boolean>;
3663
+ protected readonly booleanOptions: import("@angular/core").Signal<SirioOption<unknown>[]>;
3664
+ /** Active filters as chips: "<header>: <value>". */
3665
+ protected readonly filterChips: import("@angular/core").Signal<SirioFilterChip[]>;
3666
+ /** Sort criteria as TanStack sorting state (criteria of unknown columns are dropped). */
3667
+ private readonly sortingState;
3668
+ /** Applied filters as TanStack column filters state. */
3669
+ private readonly columnFiltersState;
3670
+ /**
3671
+ * TanStack Table instance: filtering, grouping, sorting, expanding and pagination of `data`
3672
+ * (client side), or the page of the data source as it is (`manual*`, server side). Exposed for
3673
+ * advanced uses (e.g. `table.getFilteredRowModel()`); the grid owns its state.
3674
+ */
3675
+ readonly table: import("@tanstack/angular-table").AngularTable<{
3676
+ columnFilteringFeature: import("@tanstack/table-core").TableFeature;
3677
+ filteredRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3678
+ columnFacetingFeature: import("@tanstack/table-core").TableFeature;
3679
+ facetedRowModel: (table: import("@tanstack/table-core").Table<any, any>, columnId: string) => () => import("@tanstack/table-core").RowModel<any, any>;
3680
+ facetedUniqueValues: (table: import("@tanstack/table-core").Table<import("@tanstack/table-core").TableFeatures, any>, columnId: string) => () => Map<any, number>;
3681
+ columnGroupingFeature: import("@tanstack/table-core").TableFeature;
3682
+ groupedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3683
+ rowAggregationFeature: import("@tanstack/table-core").TableFeature;
3684
+ aggregationFns: {
3685
+ sum: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
3686
+ mean: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number | undefined>;
3687
+ min: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, (number | Date) | undefined>;
3688
+ max: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, (number | Date) | undefined>;
3689
+ count: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
3690
+ };
3691
+ rowSortingFeature: import("@tanstack/table-core").TableFeature;
3692
+ sortedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3693
+ rowExpandingFeature: import("@tanstack/table-core").TableFeature;
3694
+ expandedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3695
+ rowPaginationFeature: import("@tanstack/table-core").TableFeature;
3696
+ paginatedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
3697
+ columnOrderingFeature: import("@tanstack/table-core").TableFeature;
3698
+ columnSizingFeature: import("@tanstack/table-core").TableFeature;
3699
+ }, T>;
3700
+ /** Total number of top level rows (groups, tree roots or rows): the pagination total. */
3701
+ readonly total: import("@angular/core").Signal<number>;
3702
+ /** Number of rows that pass the filters (not the groups). */
3703
+ readonly resultCount: import("@angular/core").Signal<number>;
3704
+ /** The server did not give the total and the last page is not reached yet: more rows exist. */
3705
+ readonly totalOpen: import("@angular/core").Signal<boolean>;
3706
+ readonly pageCount: import("@angular/core").Signal<number>;
3707
+ /** Rows rendered: rows of the page with the expanded sub-rows and groups. */
3708
+ protected readonly renderedRows: import("@angular/core").Signal<SirioGridRow<T>[]>;
3709
+ /**
3710
+ * Row numbers by row id: data rows counted in the current filter / group / sort order over every
3711
+ * page (server side from the query offset); sub-rows of tree data numbered within their parent.
3712
+ */
3713
+ private readonly rowNumberMap;
3714
+ /** Number of a rendered row (`rowNumbers`). */
3715
+ protected rowNumberOf(row: SirioGridRow<T>): string;
3716
+ /** Data rows shown (current page, expanded sub-rows included, group rows excluded). */
3717
+ readonly rows: import("@angular/core").Signal<readonly T[]>;
3718
+ /** Query of the server data source (`pageSize` 0 = every row, when not pageable). */
3719
+ readonly query: import("@angular/core").Signal<SirioGridQuery>;
3720
+ private readonly selectedKeys;
3721
+ /** Rows of the page that can be selected (`rowSelectable`), the target of "select all". */
3722
+ /** Mode of "seleziona tutto" in use (a server data source has only the loaded page). */
3723
+ protected readonly selectAllMode: import("@angular/core").Signal<SirioGridSelectAll>;
3724
+ /** Selectable rows taken by "seleziona tutto" (`selectAll`): page, filtered rows or every row. */
3725
+ protected readonly selectableRows: import("@angular/core").Signal<T[]>;
3726
+ protected readonly pageSelectedCount: import("@angular/core").Signal<number>;
3727
+ protected readonly allPageSelected: import("@angular/core").Signal<boolean>;
3728
+ /** Label of the "seleziona tutto" checkbox. */
3729
+ protected readonly selectAllText: import("@angular/core").Signal<string>;
3730
+ /** The row can be selected (selection active and `rowSelectable`). */
3731
+ canSelect(row: T): boolean;
3732
+ protected readonly status: import("@angular/core").Signal<string>;
3733
+ constructor();
3734
+ /** Calls the data source again with the current query. */
3735
+ reload(): void;
3736
+ /** Identity of a row (`rowId`). */
3737
+ keyOf(row: T): unknown;
3738
+ isSelected(row: T): boolean;
3739
+ /** Selects or deselects a row (single: selects it). */
3740
+ toggleRow(row: T, force?: boolean): void;
3741
+ /** Selects or deselects the selectable rows of "seleziona tutto" (`selectAll`: page, filtered rows or every row). */
3742
+ toggleAll(selected?: boolean): void;
3743
+ /** Changes of the form array (values, rows, status, touched): the rows are read again. */
3744
+ private readonly formTick;
3745
+ /** Value object of each form group, reused while its value does not change (stable rows). */
3746
+ private readonly formValues;
3747
+ /** Form group of each value object shown. */
3748
+ private readonly rowGroups;
3749
+ /** Form array editing active: a form array and no server data source. */
3750
+ protected readonly formMode: import("@angular/core").Signal<boolean>;
3751
+ /** Values of the form array rows (null without a form array). */
3752
+ private readonly formRows;
3753
+ /** Rows of the client side grid: the form array values or `data`. */
3754
+ private readonly localRows;
3755
+ /** The form array (or a parent of it) is disabled: rows can only be viewed. */
3756
+ protected readonly formDisabled: import("@angular/core").Signal<boolean>;
3757
+ /** Column of the row actions (edit / view, delete) at the right end. */
3758
+ protected readonly actionsColumn: import("@angular/core").Signal<boolean>;
3759
+ /** "Aggiungi" shown. */
3760
+ protected readonly canAdd: import("@angular/core").Signal<boolean>;
3761
+ /** Selected rows that can be removed ("Elimina selezionati"). */
3762
+ protected readonly deletableSelected: import("@angular/core").Signal<T[]>;
3763
+ /** Error of the form array shown under the grid (after it is touched or changed). */
3764
+ protected readonly formError: import("@angular/core").Signal<string | null>;
3765
+ private readonly globalMessages;
3766
+ private readonly dialogs;
3767
+ /** Edit dialog: the session shown (the template stays while the dialog closes). */
3768
+ protected readonly editing: import("@angular/core").WritableSignal<EditSession<T> | null>;
3769
+ protected readonly editorOpen: import("@angular/core").WritableSignal<boolean>;
3770
+ protected readonly saving: import("@angular/core").WritableSignal<boolean>;
3771
+ protected readonly saveError: import("@angular/core").WritableSignal<string | null>;
3772
+ protected readonly editorTitle: import("@angular/core").Signal<string>;
3773
+ /** Value object of a form group: the same object while the value does not change. */
3774
+ private formValueOf;
3775
+ /** Form group of a row of a `[formArray]` grid (null for other rows). */
3776
+ groupOf(row: T): FormGroup | null;
3777
+ /** Position of a row in the form array (-1 if it is not there). */
3778
+ indexOf(row: T): number;
3779
+ /** The row can be changed in the dialog (otherwise it opens read-only). */
3780
+ canEdit(row: T): boolean;
3781
+ /** The row can be removed. */
3782
+ canDelete(row: T): boolean;
3783
+ /** The row has errors (shown once it, or the form array, is touched). */
3784
+ protected rowInvalid(row: T): boolean;
3785
+ /**
3786
+ * Opens the dialog of a row: a copy of its group (`rowFactory`, or a generic copy) applied by
3787
+ * "Salva"; read-only when the row cannot be changed.
3788
+ */
3789
+ editRow(row: T): void;
3790
+ /** Opens the dialog of a new row (`rowFactory` with the initial values), added at the end by "Salva". */
3791
+ addRow(initial?: Partial<T> | null): void;
3792
+ /** Closes the edit dialog without saving. */
3793
+ closeEditor(): void;
3794
+ private openEditor;
3795
+ /** Dialog open: the focus goes to the first field of the form. */
3796
+ protected onEditorOpened(): void;
3797
+ protected onEditorClosed(): void;
3798
+ /** "Salva": validation (pending validators awaited), `saveHandler`, then the change of the form array. */
3799
+ saveEditor(): Promise<boolean>;
3800
+ private focusFirstError;
3801
+ /** Removes a row (confirmation, `deleteHandler`); resolves true once it is removed. */
3802
+ deleteRow(row: T): Promise<boolean>;
3803
+ /** Removes the selected rows that can be removed (one confirmation). */
3804
+ deleteSelected(): Promise<number>;
3805
+ private confirmRemoval;
3806
+ private removeRow;
3807
+ /** Double click on a row: its dialog. */
3808
+ protected onRowDoubleClick(row: SirioGridRow<T>, event: MouseEvent): void;
3809
+ /** Label of a row action: "<action> <row name>". */
3810
+ protected actionLabel(action: string, row: T, index: number): string;
3811
+ /** Follows the form array: its events refresh the rows; the selection follows the edited rows. */
3812
+ private watchFormArray;
3813
+ /** Classes and styles of a data row (`rowClass`, `rowStyle`). */
3814
+ protected rowLook(row: T, index: number): {
3815
+ cls: string;
3816
+ style: Record<string, string> | null;
3817
+ };
3818
+ /** Classes (alignment, `cellClass`) and styles (`cellStyle`) of a data cell. */
3819
+ protected cellLook(column: SirioGridColumn<T>, row: T): {
3820
+ cls: string;
3821
+ style: Record<string, string> | null;
3822
+ };
3823
+ /** Expands (or collapses) every row: groups, tree rows and detail rows. */
3824
+ expandAll(expanded?: boolean): void;
3825
+ /** Expands or collapses one row (by its row id). */
3826
+ toggleExpanded(rowId: string, expanded?: boolean): void;
3827
+ protected setGrouping(keys: string[] | null): void;
3828
+ /** Group row: the column it groups by. */
3829
+ protected groupColumnOf(row: SirioGridRow<T>): SirioGridColumn<T> | undefined;
3830
+ /** Text of an aggregated value (group rows). */
3831
+ protected aggregateText(column: SirioGridColumn<T>, row: SirioGridRow<T>): string;
3832
+ /** First data column of the rendered order: it holds the tree / group indentation. */
3833
+ protected readonly firstColumn: import("@angular/core").Signal<SirioGridColumn<T>>;
3834
+ protected indentOf(row: SirioGridRow<T>): number;
3835
+ protected expandLabel(row: SirioGridRow<T>, text: string): string;
3836
+ /**
3837
+ * Sorts by a column: asc → desc → none. With `sortMode="multiple"` and `add` (Shift) the column
3838
+ * is added to (or cycled within) the current criteria; otherwise it replaces them.
3839
+ */
3840
+ sortBy(column: SirioGridColumn<T>, add?: boolean): void;
3841
+ protected directionOf(column: SirioGridColumn<T>): 'asc' | 'desc' | null;
3842
+ /** Priority (1-based) of a sorted column when more columns are sorted; 0 otherwise. */
3843
+ protected sortIndexOf(column: SirioGridColumn<T>): number;
3844
+ protected ariaSortOf(column: SirioGridColumn<T>): string | null;
3845
+ protected onHeaderClick(column: SirioGridColumn<T>, event: MouseEvent): void;
3846
+ /**
3847
+ * Keys of a focused header, as ag-grid: Enter / Space sort (Shift: multiple sort), Alt+arrows
3848
+ * resize, Shift+arrows move the column, Ctrl+Enter opens its filter. Alt+arrows are always taken
3849
+ * on a header: Alt+Left is "back" in the browsers and would leave the page (and the form).
3850
+ */
3851
+ protected onHeaderKey(column: SirioGridColumn<T>, event: KeyboardEvent): void;
3852
+ /** Opens the filter of a column from its header (its button in the header or in the filter row). */
3853
+ private openFilterOf;
3854
+ protected headerFocusable(column: SirioGridColumn<T>): boolean;
3855
+ protected headerHintId(column: SirioGridColumn<T>): string | null;
3856
+ /** Moves a column by `delta` positions (negative = towards the start). */
3857
+ moveColumn(column: SirioGridColumn<T>, delta: number, keepFocus?: boolean): void;
3858
+ /** Moves a column next to another one (drag and drop). */
3859
+ private moveColumnTo;
3860
+ private applyOrder;
3861
+ protected onDragStart(column: SirioGridColumn<T>, event: DragEvent): void;
3862
+ protected onDragOver(column: SirioGridColumn<T>, event: DragEvent): void;
3863
+ protected onDrop(event: DragEvent): void;
3864
+ protected onDragEnd(): void;
3865
+ /** Width of a column (px) in the resized / flex layout. */
3866
+ protected widthOf(column: SirioGridColumn<T>): number;
3867
+ /**
3868
+ * Minimum width of a header with a declared pixel `width` in the automatic layout: when the table
3869
+ * is wider than the grid the browser shrinks every column towards its content, also those with a
3870
+ * width (e.g. a date column of 300px shown at 200px). The fixed layout uses the widths as they are.
3871
+ */
3872
+ protected cssMinWidthOf(column: SirioGridColumn<T>): string | null;
3873
+ /** CSS width of a header: the resized width, or the declared `width`. */
3874
+ protected cssWidthOf(column: SirioGridColumn<T>): string | null;
3875
+ protected canResize(column: SirioGridColumn<T>): boolean;
3876
+ /** Sets the width of a column (clamped to its min/max); the other columns keep their width. */
3877
+ setColumnWidth(column: SirioGridColumn<T>, width: number): void;
3878
+ /** Back to the automatic layout and the declaration order of the columns. */
3879
+ resetColumns(): void;
3880
+ /**
3881
+ * First resize: the current widths of every visible column become the fixed widths (the flex
3882
+ * columns keep filling the free width, unless they are resized themselves).
3883
+ */
3884
+ private seedWidths;
3885
+ protected onResizeStart(column: SirioGridColumn<T>, event: PointerEvent): void;
3886
+ /** Back to the width the column had before resizing (a flex column is sized by `flex` again). */
3887
+ resetColumnWidth(column: SirioGridColumn<T>): void;
3888
+ /** Value of the filter of a column. */
3889
+ filterValueOf(column: SirioGridColumn<T>): unknown;
3890
+ /** Sets the filter of a column (null or empty clears it). */
3891
+ setFilter(column: SirioGridColumn<T> | string, value: unknown, immediate?: boolean): void;
3892
+ /** Removes the filter of a column. */
3893
+ clearFilter(column: SirioGridColumn<T> | string): void;
3894
+ /** Operator chosen for a column while its value is still empty (the filter is not active yet). */
3895
+ private readonly operatorDrafts;
3896
+ /** Operators of a column filter (empty = simple filter). */
3897
+ protected operatorsOf(column: SirioGridColumn<T>): readonly SirioGridFilterOperator[];
3898
+ /** Label of an operator (`filterOperatorLabels` over the Italian defaults). */
3899
+ protected operatorLabel(operator: SirioGridFilterOperator): string;
3900
+ protected operatorOptions(column: SirioGridColumn<T>): SirioOption<SirioGridFilterOperator>[];
3901
+ /**
3902
+ * Condition of a column with operators: its filter value, a simple value converted (e.g. a
3903
+ * restored state: text → contains, range → between, list → in), or the chosen / default operator.
3904
+ */
3905
+ protected conditionOf(column: SirioGridColumn<T>): SirioGridFilterCondition;
3906
+ /** Chooses the operator of a column filter (the value is kept, dropped for blank / not blank). */
3907
+ protected setOperator(column: SirioGridColumn<T>, operator: SirioGridFilterOperator | null): void;
3908
+ /** Sets the value (or the upper bound of `between`) of a column filter with operators. */
3909
+ protected setConditionPart(column: SirioGridColumn<T>, part: 'value' | 'to', value: unknown, immediate?: boolean): void;
3910
+ /**
3911
+ * Field of a column in the filter row: the value of a simple condition (text, a number or a day,
3912
+ * one option, yes / no, or the value of a single-value operator), otherwise a summary of the filter
3913
+ * (e.g. "compreso tra", "vuoto", several options) changed from the popover.
3914
+ */
3915
+ protected inlineFilterOf(column: SirioGridColumn<T>): InlineFilter;
3916
+ /**
3917
+ * Value typed or chosen in the filter row: the value of the current operator, or the simple
3918
+ * filter (a number or a day as a one-value range, one option as a list with `filterMultiple`).
3919
+ */
3920
+ protected setInlineFilter(column: SirioGridColumn<T>, value: unknown, immediate?: boolean): void;
3921
+ /** Current state as plain JSON (`getState()`), updated on every change. */
3922
+ readonly state: import("@angular/core").Signal<SirioGridState>;
3923
+ /**
3924
+ * State of the grid to save (sort, filters, page and page size, column order and widths,
3925
+ * grouping, expanded rows, keys of the selected rows), e.g. in `localStorage` or on the server.
3926
+ */
3927
+ getState(): SirioGridState;
3928
+ /**
3929
+ * Restores a saved state (only the parts present; the others stay as they are). Filters apply at
3930
+ * once, without going back to the first page; sort criteria and filters of columns that no
3931
+ * longer exist are dropped; selected keys are matched to the rows of `data` (or of the page
3932
+ * loaded from `dataSource`).
3933
+ */
3934
+ setState(state: Partial<SirioGridState> | null | undefined): void;
3935
+ /** Back to the initial state: no sort, filters, grouping, expansion or selection, first page, columns as declared. */
3936
+ resetState(): void;
3937
+ /** Removes every column filter. */
3938
+ clearFilters(): void;
3939
+ /**
3940
+ * Choices of a select filter: `filterOptions`, or the values present in the column (TanStack
3941
+ * faceted values, with the other filters applied) with their count.
3942
+ */
3943
+ protected filterOptionsOf(column: SirioGridColumn<T>): SirioOption[];
3944
+ protected rangeOf(column: SirioGridColumn<T>): SirioGridRange;
3945
+ protected setRange(column: SirioGridColumn<T>, bound: 'from' | 'to', value: unknown): void;
3946
+ protected filterButtonLabel(column: SirioGridColumn<T>, inRow?: boolean): string;
3947
+ protected filterIndex(column: SirioGridColumn<T>): number;
3948
+ protected isFiltered(column: SirioGridColumn<T>): boolean;
3949
+ /** Moves the focus into the filter popover of a column when it opens. */
3950
+ protected focusFilter(column: SirioGridColumn<T>): void;
3951
+ /** A 'yyyy-MM-dd' day in the date format of `LOCALE_ID`. */
3952
+ private formatIsoDay;
3953
+ protected onChipRemoved(chip: SirioFilterChip): void;
3954
+ /** Text of a value of a column filter (number, date, select / boolean labels). */
3955
+ private filterValueText;
3956
+ /** Text of a filter value in its chip. */
3957
+ protected filterText(column: SirioGridColumn<T>, value: unknown): string;
3958
+ protected onRowActivate(row: SirioGridRow<T>, index: number, event: MouseEvent | KeyboardEvent): void;
3959
+ /** Space / Enter on a focused row selects it (rows without the checkbox column). */
3960
+ protected onRowKey(row: SirioGridRow<T>, index: number, event: KeyboardEvent): void;
3961
+ /**
3962
+ * Focus inside the grid (keyboard navigation): the focused cell is scrolled fully into
3963
+ * view, out from under the fixed blocks and the fixed header. The browser scrolls a partly visible
3964
+ * element only when it is fully out of view, and does not know about the sticky cells.
3965
+ */
3966
+ protected revealFocused(event: FocusEvent): void;
3967
+ protected onPaged(): void;
3968
+ protected updateOverflow(): void;
3969
+ /**
3970
+ * Total after a server page: the one of the response, otherwise found from the pages received for
3971
+ * the same query (as ag-grid infinite model): a page shorter than `pageSize` is the last one, a full
3972
+ * page leaves the total open.
3973
+ */
3974
+ private nextServerTotal;
3975
+ private load;
3976
+ static ɵfac: i0.ɵɵFactoryDeclaration<SirioDataGrid<any>, never>;
3977
+ static ɵcmp: i0.ɵɵComponentDeclaration<SirioDataGrid<any>, "wm-sirio-data-grid", never, {
3978
+ "data": {
3979
+ "alias": "data";
3980
+ "required": false;
3981
+ "isSignal": true;
3982
+ };
3983
+ "dataSource": {
3984
+ "alias": "dataSource";
3985
+ "required": false;
3986
+ "isSignal": true;
3987
+ };
3988
+ "rowId": {
3989
+ "alias": "rowId";
3990
+ "required": false;
3991
+ "isSignal": true;
3992
+ };
3993
+ "subRows": {
3994
+ "alias": "subRows";
3995
+ "required": false;
3996
+ "isSignal": true;
3997
+ };
3998
+ "loading": {
3999
+ "alias": "loading";
4000
+ "required": false;
4001
+ "isSignal": true;
4002
+ };
4003
+ "formArray": {
4004
+ "alias": "formArray";
4005
+ "required": false;
4006
+ "isSignal": true;
4007
+ };
4008
+ "rowFactory": {
4009
+ "alias": "rowFactory";
4010
+ "required": false;
4011
+ "isSignal": true;
4012
+ };
4013
+ "addable": {
4014
+ "alias": "addable";
4015
+ "required": false;
4016
+ "isSignal": true;
4017
+ };
4018
+ "deletable": {
4019
+ "alias": "deletable";
4020
+ "required": false;
4021
+ "isSignal": true;
4022
+ };
4023
+ "rowEditable": {
4024
+ "alias": "rowEditable";
4025
+ "required": false;
4026
+ "isSignal": true;
4027
+ };
4028
+ "rowDeletable": {
4029
+ "alias": "rowDeletable";
4030
+ "required": false;
4031
+ "isSignal": true;
4032
+ };
4033
+ "editOnDoubleClick": {
4034
+ "alias": "editOnDoubleClick";
4035
+ "required": false;
4036
+ "isSignal": true;
4037
+ };
4038
+ "confirmDelete": {
4039
+ "alias": "confirmDelete";
4040
+ "required": false;
4041
+ "isSignal": true;
4042
+ };
4043
+ "saveHandler": {
4044
+ "alias": "saveHandler";
4045
+ "required": false;
4046
+ "isSignal": true;
4047
+ };
4048
+ "deleteHandler": {
4049
+ "alias": "deleteHandler";
4050
+ "required": false;
4051
+ "isSignal": true;
4052
+ };
4053
+ "editorSize": {
4054
+ "alias": "editorSize";
4055
+ "required": false;
4056
+ "isSignal": true;
4057
+ };
4058
+ "errorMessages": {
4059
+ "alias": "errorMessages";
4060
+ "required": false;
4061
+ "isSignal": true;
4062
+ };
4063
+ "sort": {
4064
+ "alias": "sort";
4065
+ "required": false;
4066
+ "isSignal": true;
4067
+ };
4068
+ "sortMode": {
4069
+ "alias": "sortMode";
4070
+ "required": false;
4071
+ "isSignal": true;
4072
+ };
4073
+ "pageable": {
4074
+ "alias": "pageable";
4075
+ "required": false;
4076
+ "isSignal": true;
4077
+ };
4078
+ "page": {
4079
+ "alias": "page";
4080
+ "required": false;
4081
+ "isSignal": true;
4082
+ };
4083
+ "pageSize": {
4084
+ "alias": "pageSize";
4085
+ "required": false;
4086
+ "isSignal": true;
4087
+ };
4088
+ "pageSizeOptions": {
4089
+ "alias": "pageSizeOptions";
4090
+ "required": false;
4091
+ "isSignal": true;
4092
+ };
4093
+ "paginationVariant": {
4094
+ "alias": "paginationVariant";
4095
+ "required": false;
4096
+ "isSignal": true;
4097
+ };
4098
+ "paginationSiblings": {
4099
+ "alias": "paginationSiblings";
4100
+ "required": false;
4101
+ "isSignal": true;
4102
+ };
4103
+ "paginationShowItems": {
4104
+ "alias": "paginationShowItems";
4105
+ "required": false;
4106
+ "isSignal": true;
4107
+ };
4108
+ "selection": {
4109
+ "alias": "selection";
4110
+ "required": false;
4111
+ "isSignal": true;
4112
+ };
4113
+ "selected": {
4114
+ "alias": "selected";
4115
+ "required": false;
4116
+ "isSignal": true;
4117
+ };
4118
+ "filters": {
4119
+ "alias": "filters";
4120
+ "required": false;
4121
+ "isSignal": true;
4122
+ };
4123
+ "filterDebounce": {
4124
+ "alias": "filterDebounce";
4125
+ "required": false;
4126
+ "isSignal": true;
4127
+ };
4128
+ "filterOperators": {
4129
+ "alias": "filterOperators";
4130
+ "required": false;
4131
+ "isSignal": true;
4132
+ };
4133
+ "showFilterChips": {
4134
+ "alias": "showFilterChips";
4135
+ "required": false;
4136
+ "isSignal": true;
4137
+ };
4138
+ "filterButton": {
4139
+ "alias": "filterButton";
4140
+ "required": false;
4141
+ "isSignal": true;
4142
+ };
4143
+ "filterRow": {
4144
+ "alias": "filterRow";
4145
+ "required": false;
4146
+ "isSignal": true;
4147
+ };
4148
+ "grouping": {
4149
+ "alias": "grouping";
4150
+ "required": false;
4151
+ "isSignal": true;
4152
+ };
4153
+ "expanded": {
4154
+ "alias": "expanded";
4155
+ "required": false;
4156
+ "isSignal": true;
4157
+ };
4158
+ "rowExpandable": {
4159
+ "alias": "rowExpandable";
4160
+ "required": false;
4161
+ "isSignal": true;
4162
+ };
4163
+ "rowNumbers": {
4164
+ "alias": "rowNumbers";
4165
+ "required": false;
4166
+ "isSignal": true;
4167
+ };
4168
+ "selectOnRowClick": {
4169
+ "alias": "selectOnRowClick";
4170
+ "required": false;
4171
+ "isSignal": true;
4172
+ };
4173
+ "selectionColumn": {
4174
+ "alias": "selectionColumn";
4175
+ "required": false;
4176
+ "isSignal": true;
4177
+ };
4178
+ "keyboardNavigation": {
4179
+ "alias": "keyboardNavigation";
4180
+ "required": false;
4181
+ "isSignal": true;
4182
+ };
4183
+ "rowSelectable": {
4184
+ "alias": "rowSelectable";
4185
+ "required": false;
4186
+ "isSignal": true;
4187
+ };
4188
+ "hideUnselectable": {
4189
+ "alias": "hideUnselectable";
4190
+ "required": false;
4191
+ "isSignal": true;
4192
+ };
4193
+ "selectAll": {
4194
+ "alias": "selectAll";
4195
+ "required": false;
4196
+ "isSignal": true;
4197
+ };
4198
+ "rowClass": {
4199
+ "alias": "rowClass";
4200
+ "required": false;
4201
+ "isSignal": true;
4202
+ };
4203
+ "rowStyle": {
4204
+ "alias": "rowStyle";
4205
+ "required": false;
4206
+ "isSignal": true;
4207
+ };
4208
+ "resizable": {
4209
+ "alias": "resizable";
4210
+ "required": false;
4211
+ "isSignal": true;
4212
+ };
4213
+ "reorderable": {
4214
+ "alias": "reorderable";
4215
+ "required": false;
4216
+ "isSignal": true;
4217
+ };
4218
+ "columnWidths": {
4219
+ "alias": "columnWidths";
4220
+ "required": false;
4221
+ "isSignal": true;
4222
+ };
4223
+ "columnOrder": {
4224
+ "alias": "columnOrder";
4225
+ "required": false;
4226
+ "isSignal": true;
4227
+ };
4228
+ "variant": {
4229
+ "alias": "variant";
4230
+ "required": false;
4231
+ "isSignal": true;
4232
+ };
4233
+ "size": {
4234
+ "alias": "size";
4235
+ "required": false;
4236
+ "isSignal": true;
4237
+ };
4238
+ "responsive": {
4239
+ "alias": "responsive";
4240
+ "required": false;
4241
+ "isSignal": true;
4242
+ };
4243
+ "stickyHeader": {
4244
+ "alias": "stickyHeader";
4245
+ "required": false;
4246
+ "isSignal": true;
4247
+ };
4248
+ "fixedFirstColumn": {
4249
+ "alias": "fixedFirstColumn";
4250
+ "required": false;
4251
+ "isSignal": true;
4252
+ };
4253
+ "fixedLastColumn": {
4254
+ "alias": "fixedLastColumn";
4255
+ "required": false;
4256
+ "isSignal": true;
4257
+ };
4258
+ "height": {
4259
+ "alias": "height";
4260
+ "required": false;
4261
+ "isSignal": true;
4262
+ };
4263
+ "minHeight": {
4264
+ "alias": "minHeight";
4265
+ "required": false;
4266
+ "isSignal": true;
4267
+ };
4268
+ "maxHeight": {
4269
+ "alias": "maxHeight";
4270
+ "required": false;
4271
+ "isSignal": true;
4272
+ };
4273
+ "cardOnMobile": {
4274
+ "alias": "cardOnMobile";
4275
+ "required": false;
4276
+ "isSignal": true;
4277
+ };
4278
+ "caption": {
4279
+ "alias": "caption";
4280
+ "required": false;
4281
+ "isSignal": true;
4282
+ };
4283
+ "captionVisible": {
4284
+ "alias": "captionVisible";
4285
+ "required": false;
4286
+ "isSignal": true;
4287
+ };
4288
+ "emptyText": {
4289
+ "alias": "emptyText";
4290
+ "required": false;
4291
+ "isSignal": true;
4292
+ };
4293
+ "loadingText": {
4294
+ "alias": "loadingText";
4295
+ "required": false;
4296
+ "isSignal": true;
4297
+ };
4298
+ "loadErrorText": {
4299
+ "alias": "loadErrorText";
4300
+ "required": false;
4301
+ "isSignal": true;
4302
+ };
4303
+ "retryLabel": {
4304
+ "alias": "retryLabel";
4305
+ "required": false;
4306
+ "isSignal": true;
4307
+ };
4308
+ "moreLabel": {
4309
+ "alias": "moreLabel";
4310
+ "required": false;
4311
+ "isSignal": true;
4312
+ };
4313
+ "resultsLabel": {
4314
+ "alias": "resultsLabel";
4315
+ "required": false;
4316
+ "isSignal": true;
4317
+ };
4318
+ "selectAllLabel": {
4319
+ "alias": "selectAllLabel";
4320
+ "required": false;
4321
+ "isSignal": true;
4322
+ };
4323
+ "selectRowHint": {
4324
+ "alias": "selectRowHint";
4325
+ "required": false;
4326
+ "isSignal": true;
4327
+ };
4328
+ "singleSelectionControl": {
4329
+ "alias": "singleSelectionControl";
4330
+ "required": false;
4331
+ "isSignal": true;
4332
+ };
4333
+ "selectionHeaderLabel": {
4334
+ "alias": "selectionHeaderLabel";
4335
+ "required": false;
4336
+ "isSignal": true;
4337
+ };
4338
+ "selectRowLabel": {
4339
+ "alias": "selectRowLabel";
4340
+ "required": false;
4341
+ "isSignal": true;
4342
+ };
4343
+ "sortAscendingLabel": {
4344
+ "alias": "sortAscendingLabel";
4345
+ "required": false;
4346
+ "isSignal": true;
4347
+ };
4348
+ "sortDescendingLabel": {
4349
+ "alias": "sortDescendingLabel";
4350
+ "required": false;
4351
+ "isSignal": true;
4352
+ };
4353
+ "multiSortHint": {
4354
+ "alias": "multiSortHint";
4355
+ "required": false;
4356
+ "isSignal": true;
4357
+ };
4358
+ "paginationAriaLabel": {
4359
+ "alias": "paginationAriaLabel";
4360
+ "required": false;
4361
+ "isSignal": true;
4362
+ };
4363
+ "filterLabel": {
4364
+ "alias": "filterLabel";
4365
+ "required": false;
4366
+ "isSignal": true;
4367
+ };
4368
+ "filterFromLabel": {
4369
+ "alias": "filterFromLabel";
4370
+ "required": false;
4371
+ "isSignal": true;
4372
+ };
4373
+ "filterToLabel": {
4374
+ "alias": "filterToLabel";
4375
+ "required": false;
4376
+ "isSignal": true;
4377
+ };
4378
+ "filterAllLabel": {
4379
+ "alias": "filterAllLabel";
4380
+ "required": false;
4381
+ "isSignal": true;
4382
+ };
4383
+ "filterMoreLabel": {
4384
+ "alias": "filterMoreLabel";
4385
+ "required": false;
4386
+ "isSignal": true;
4387
+ };
4388
+ "filterYesLabel": {
4389
+ "alias": "filterYesLabel";
4390
+ "required": false;
4391
+ "isSignal": true;
4392
+ };
4393
+ "filterNoLabel": {
4394
+ "alias": "filterNoLabel";
4395
+ "required": false;
4396
+ "isSignal": true;
4397
+ };
4398
+ "filterActiveLabel": {
4399
+ "alias": "filterActiveLabel";
4400
+ "required": false;
4401
+ "isSignal": true;
4402
+ };
4403
+ "clearFilterLabel": {
4404
+ "alias": "clearFilterLabel";
4405
+ "required": false;
4406
+ "isSignal": true;
4407
+ };
4408
+ "clearFiltersLabel": {
4409
+ "alias": "clearFiltersLabel";
4410
+ "required": false;
4411
+ "isSignal": true;
4412
+ };
4413
+ "filterConditionLabel": {
4414
+ "alias": "filterConditionLabel";
4415
+ "required": false;
4416
+ "isSignal": true;
4417
+ };
4418
+ "filterValueLabel": {
4419
+ "alias": "filterValueLabel";
4420
+ "required": false;
4421
+ "isSignal": true;
4422
+ };
4423
+ "filterAndLabel": {
4424
+ "alias": "filterAndLabel";
4425
+ "required": false;
4426
+ "isSignal": true;
4427
+ };
4428
+ "filterOperatorLabels": {
4429
+ "alias": "filterOperatorLabels";
4430
+ "required": false;
4431
+ "isSignal": true;
4432
+ };
4433
+ "filtersLabel": {
4434
+ "alias": "filtersLabel";
4435
+ "required": false;
4436
+ "isSignal": true;
4437
+ };
4438
+ "rowNumberHeader": {
4439
+ "alias": "rowNumberHeader";
4440
+ "required": false;
4441
+ "isSignal": true;
4442
+ };
4443
+ "rowNumberLabel": {
4444
+ "alias": "rowNumberLabel";
4445
+ "required": false;
4446
+ "isSignal": true;
4447
+ };
4448
+ "groupByLabel": {
4449
+ "alias": "groupByLabel";
4450
+ "required": false;
4451
+ "isSignal": true;
4452
+ };
4453
+ "expandAllLabel": {
4454
+ "alias": "expandAllLabel";
4455
+ "required": false;
4456
+ "isSignal": true;
4457
+ };
4458
+ "collapseAllLabel": {
4459
+ "alias": "collapseAllLabel";
4460
+ "required": false;
4461
+ "isSignal": true;
4462
+ };
4463
+ "rowName": {
4464
+ "alias": "rowName";
4465
+ "required": false;
4466
+ "isSignal": true;
4467
+ };
4468
+ "expandRowLabel": {
4469
+ "alias": "expandRowLabel";
4470
+ "required": false;
4471
+ "isSignal": true;
4472
+ };
4473
+ "collapseRowLabel": {
4474
+ "alias": "collapseRowLabel";
4475
+ "required": false;
4476
+ "isSignal": true;
4477
+ };
4478
+ "resizeColumnLabel": {
4479
+ "alias": "resizeColumnLabel";
4480
+ "required": false;
4481
+ "isSignal": true;
4482
+ };
4483
+ "reorderHint": {
4484
+ "alias": "reorderHint";
4485
+ "required": false;
4486
+ "isSignal": true;
4487
+ };
4488
+ "resizeHint": {
4489
+ "alias": "resizeHint";
4490
+ "required": false;
4491
+ "isSignal": true;
4492
+ };
4493
+ "filterHint": {
4494
+ "alias": "filterHint";
4495
+ "required": false;
4496
+ "isSignal": true;
4497
+ };
4498
+ "resetColumnsLabel": {
4499
+ "alias": "resetColumnsLabel";
4500
+ "required": false;
4501
+ "isSignal": true;
4502
+ };
4503
+ "columnMovedLabel": {
4504
+ "alias": "columnMovedLabel";
4505
+ "required": false;
4506
+ "isSignal": true;
4507
+ };
4508
+ "actionsHeader": {
4509
+ "alias": "actionsHeader";
4510
+ "required": false;
4511
+ "isSignal": true;
4512
+ };
4513
+ "addLabel": {
4514
+ "alias": "addLabel";
4515
+ "required": false;
4516
+ "isSignal": true;
4517
+ };
4518
+ "editLabel": {
4519
+ "alias": "editLabel";
4520
+ "required": false;
4521
+ "isSignal": true;
4522
+ };
4523
+ "viewLabel": {
4524
+ "alias": "viewLabel";
4525
+ "required": false;
4526
+ "isSignal": true;
4527
+ };
4528
+ "deleteLabel": {
4529
+ "alias": "deleteLabel";
4530
+ "required": false;
4531
+ "isSignal": true;
4532
+ };
4533
+ "deleteSelectedLabel": {
4534
+ "alias": "deleteSelectedLabel";
4535
+ "required": false;
4536
+ "isSignal": true;
4537
+ };
4538
+ "newRowTitle": {
4539
+ "alias": "newRowTitle";
4540
+ "required": false;
4541
+ "isSignal": true;
4542
+ };
4543
+ "editRowTitle": {
4544
+ "alias": "editRowTitle";
4545
+ "required": false;
4546
+ "isSignal": true;
4547
+ };
4548
+ "viewRowTitle": {
4549
+ "alias": "viewRowTitle";
4550
+ "required": false;
4551
+ "isSignal": true;
4552
+ };
4553
+ "saveLabel": {
4554
+ "alias": "saveLabel";
4555
+ "required": false;
4556
+ "isSignal": true;
4557
+ };
4558
+ "cancelLabel": {
4559
+ "alias": "cancelLabel";
4560
+ "required": false;
4561
+ "isSignal": true;
4562
+ };
4563
+ "closeLabel": {
4564
+ "alias": "closeLabel";
4565
+ "required": false;
4566
+ "isSignal": true;
4567
+ };
4568
+ "deleteConfirmTitle": {
4569
+ "alias": "deleteConfirmTitle";
4570
+ "required": false;
4571
+ "isSignal": true;
4572
+ };
4573
+ "deleteSelectedConfirmTitle": {
4574
+ "alias": "deleteSelectedConfirmTitle";
4575
+ "required": false;
4576
+ "isSignal": true;
4577
+ };
4578
+ "deleteConfirmMessage": {
4579
+ "alias": "deleteConfirmMessage";
4580
+ "required": false;
4581
+ "isSignal": true;
4582
+ };
4583
+ "invalidRowLabel": {
4584
+ "alias": "invalidRowLabel";
4585
+ "required": false;
4586
+ "isSignal": true;
4587
+ };
4588
+ "saveErrorTitle": {
4589
+ "alias": "saveErrorTitle";
1996
4590
  "required": false;
1997
4591
  "isSignal": true;
1998
4592
  };
1999
- "nextLabel": {
2000
- "alias": "nextLabel";
4593
+ "saveErrorText": {
4594
+ "alias": "saveErrorText";
2001
4595
  "required": false;
2002
4596
  "isSignal": true;
2003
4597
  };
2004
4598
  }, {
4599
+ "sort": "sortChange";
2005
4600
  "page": "pageChange";
2006
4601
  "pageSize": "pageSizeChange";
2007
- "paged": "paged";
2008
- }, never, ["*"], true, never>;
4602
+ "selected": "selectedChange";
4603
+ "filters": "filtersChange";
4604
+ "grouping": "groupingChange";
4605
+ "expanded": "expandedChange";
4606
+ "columnWidths": "columnWidthsChange";
4607
+ "columnOrder": "columnOrderChange";
4608
+ "rowClick": "rowClick";
4609
+ "loadError": "loadError";
4610
+ "stateChange": "stateChange";
4611
+ "rowSave": "rowSave";
4612
+ "rowDelete": "rowDelete";
4613
+ }, ["columns", "emptyTemplate", "detailTemplate", "errorTemplate", "editorTemplate"], never, true, never>;
4614
+ }
4615
+ /** The grid with its column and template directives, for `imports: [SIRIO_DATA_GRID]`. */
4616
+ export declare const SIRIO_DATA_GRID: readonly [typeof SirioDataGrid, typeof SirioGridColumn, typeof SirioGridCell, typeof SirioGridHeader, typeof SirioGridEmpty, typeof SirioGridDetail, typeof SirioGridEditor, typeof SirioGridError];
4617
+ /** Field of a column in the filter row (`inlineFilterOf`). */
4618
+ interface InlineFilter {
4619
+ kind: 'text' | 'number' | 'date' | 'select' | 'summary';
4620
+ value: unknown;
4621
+ placeholder: string;
4622
+ summary?: string;
2009
4623
  }
2010
4624
  /** Duration of the kit collapse transition (`[data-sirio-visible=collapsing]`, .35s). */
2011
4625
  declare const SIRIO_COLLAPSE_MS = 350;
@@ -3365,6 +5979,13 @@ export declare class SirioDashboard {
3365
5979
  readonly scrollTopOnNavigate: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3366
5980
  /** Kit open/close animation of the submenus. */
3367
5981
  readonly animated: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
5982
+ /**
5983
+ * Page landmarks of the layout (default): top bar as banner (`<header>`), menu as complementary
5984
+ * (`<aside>`), content as `<main>`. False for a dashboard placed inside a page that already has
5985
+ * them (e.g. an embedded example): the content is a region named `contentLabel`, the menu a region
5986
+ * named `sidebarLabel`, the top bar a group, so that the page keeps a single main landmark.
5987
+ */
5988
+ readonly landmarks: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3368
5989
  readonly menuLabel: import("@angular/core").InputSignal<string>;
3369
5990
  readonly collapseLabel: import("@angular/core").InputSignal<string>;
3370
5991
  readonly expandLabel: import("@angular/core").InputSignal<string>;
@@ -3375,6 +5996,10 @@ export declare class SirioDashboard {
3375
5996
  readonly commandsLabel: import("@angular/core").InputSignal<string>;
3376
5997
  readonly userPanelLabel: import("@angular/core").InputSignal<string>;
3377
5998
  readonly skipLinkLabel: import("@angular/core").InputSignal<string>;
5999
+ /** Name of the content region with `landmarks` false. */
6000
+ readonly contentLabel: import("@angular/core").InputSignal<string>;
6001
+ /** Name of the menu region with `landmarks` false. */
6002
+ readonly sidebarLabel: import("@angular/core").InputSignal<string>;
3378
6003
  /** Click on a command (also run by its `action`). */
3379
6004
  readonly commandClick: import("@angular/core").OutputEmitterRef<SirioDashboardCommandClick>;
3380
6005
  /** Click on a menu entry without children. */
@@ -3612,6 +6237,11 @@ export declare class SirioDashboard {
3612
6237
  "required": false;
3613
6238
  "isSignal": true;
3614
6239
  };
6240
+ "landmarks": {
6241
+ "alias": "landmarks";
6242
+ "required": false;
6243
+ "isSignal": true;
6244
+ };
3615
6245
  "menuLabel": {
3616
6246
  "alias": "menuLabel";
3617
6247
  "required": false;
@@ -3662,6 +6292,16 @@ export declare class SirioDashboard {
3662
6292
  "required": false;
3663
6293
  "isSignal": true;
3664
6294
  };
6295
+ "contentLabel": {
6296
+ "alias": "contentLabel";
6297
+ "required": false;
6298
+ "isSignal": true;
6299
+ };
6300
+ "sidebarLabel": {
6301
+ "alias": "sidebarLabel";
6302
+ "required": false;
6303
+ "isSignal": true;
6304
+ };
3665
6305
  }, {
3666
6306
  "collapsed": "collapsedChange";
3667
6307
  "menuOpen": "menuOpenChange";
@@ -3675,212 +6315,6 @@ export declare class SirioDashboard {
3675
6315
  }
3676
6316
  /** Dashboard and its content slots, for `imports: [SIRIO_DASHBOARD_COMPONENTS]`. */
3677
6317
  export declare const SIRIO_DASHBOARD_COMPONENTS: readonly [typeof SirioDashboard, typeof SirioDashboardLogo, typeof SirioDashboardToolbar, typeof SirioDashboardUserPanel, typeof SirioDashboardSidebarFooter];
3678
- /** Sizes of the kit dialog (`.sirio-dialog-wrapper` modifiers); default 600px. */
3679
- export type SirioDialogSize = 'sm' | 'default' | 'lg' | 'xl';
3680
- /** Color of the title icon (kit examples: default blue, "Avvertimento", "Pericolo"). */
3681
- export type SirioDialogTone = 'default' | 'warning' | 'danger';
3682
- /**
3683
- * Footer of a dialog (kit `.sirio-dialog-footer`), with the action buttons:
3684
- * `<div wmSirioDialogFooter>...</div>`.
3685
- */
3686
- export declare class SirioDialogFooter {
3687
- static ɵfac: i0.ɵɵFactoryDeclaration<SirioDialogFooter, never>;
3688
- static ɵdir: i0.ɵɵDirectiveDeclaration<SirioDialogFooter, "[wmSirioDialogFooter]", never, {}, {}, never, never, true, never>;
3689
- }
3690
- /**
3691
- * Closes the enclosing dialog when clicked (kit `data-sirio-dismiss="dialog"`):
3692
- * `<button wmSirioButton="secondary" wmSirioDialogClose>Annulla</button>`.
3693
- * With a value (`[wmSirioDialogClose]="true"`) the value is emitted by the dialog `(closed)`.
3694
- */
3695
- export declare class SirioDialogClose {
3696
- /** Result reported by the dialog `(closed)` output. */
3697
- readonly result: import("@angular/core").InputSignal<unknown>;
3698
- private readonly dialog;
3699
- protected close(): void;
3700
- static ɵfac: i0.ɵɵFactoryDeclaration<SirioDialogClose, never>;
3701
- static ɵdir: i0.ɵɵDirectiveDeclaration<SirioDialogClose, "[wmSirioDialogClose]", never, {
3702
- "result": {
3703
- "alias": "wmSirioDialogClose";
3704
- "required": false;
3705
- "isSignal": true;
3706
- };
3707
- }, {}, never, never, true, never>;
3708
- }
3709
- /**
3710
- * Dialog of the Sirio web kit ("Dialog"): `.sirio-dialog` (backdrop) > `.sirio-dialog-wrapper`
3711
- * (size `sm` / `lg` / `xl`, `dialog-centered`) > `.sirio-dialog-content` with header
3712
- * (`h2.sirio-dialog-title` with the icon, close button `.sirio-btn-close`), body and footer.
3713
- *
3714
- * Behaviour of the kit script (SirioDialog) reproduced in Angular: `aria-modal`, focus moved into
3715
- * the dialog when it opens and back to the previously focused element when it closes, Esc and a
3716
- * click on the backdrop close it. In addition: `role="dialog"` (`alertdialog` with `alert`), focus kept
3717
- * inside the dialog (Tab / Shift+Tab), page scroll locked while open.
3718
- *
3719
- * With `drawer` it is the kit drawer (`.sirio-drawer`): a panel opening from the right. Inside a component
3720
- * opened by `SirioDialogService.open()` the dialog opens by itself and closes the `SirioDialogRef`.
3721
- *
3722
- * ```html
3723
- * <wm-sirio-dialog [(open)]="confirmOpen" title="Vuoi eliminare il tuo account?" tone="danger" alert
3724
- * (closed)="onClosed($event)">
3725
- * <p>L'operazione non è reversibile.</p>
3726
- * <div wmSirioDialogFooter>
3727
- * <button wmSirioButton="ghost" type="button" wmSirioDialogClose>Annulla</button>
3728
- * <button wmSirioButton="danger" type="button" [wmSirioDialogClose]="true">Elimina</button>
3729
- * </div>
3730
- * </wm-sirio-dialog>
3731
- * ```
3732
- */
3733
- export declare class SirioDialog {
3734
- /** Visibility (two-way: `[(open)]`). */
3735
- readonly open: import("@angular/core").ModelSignal<boolean>;
3736
- readonly title: import("@angular/core").InputSignal<string>;
3737
- /** Accessible name when there is no title. */
3738
- readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
3739
- /** Font Awesome icon of the title (kit: `fa-exclamation-circle`); null = no icon. */
3740
- readonly icon: import("@angular/core").InputSignal<string | null>;
3741
- /** Color of the icon: default (blue), warning (`sirio-text-warning`), danger (`sirio-text-danger`). */
3742
- readonly tone: import("@angular/core").InputSignal<SirioDialogTone>;
3743
- readonly size: import("@angular/core").InputSignal<SirioDialogSize>;
3744
- /** Vertically centered (kit `dialog-centered`). */
3745
- readonly centered: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3746
- /** Close button in the header (kit). */
3747
- readonly dismissible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3748
- readonly closeLabel: import("@angular/core").InputSignal<string>;
3749
- /** Esc and a click on the backdrop close the dialog (kit behaviour). */
3750
- readonly closeOnEscape: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3751
- readonly closeOnBackdrop: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3752
- /** `role="alertdialog"` for confirmations that interrupt the user (e.g. destructive actions). */
3753
- readonly alert: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3754
- /** Kit drawer: panel opening from the right (`.sirio-drawer`). */
3755
- readonly drawer: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3756
- /** Extra classes of the `.sirio-dialog` element (e.g. kit drawer / side panel classes). */
3757
- readonly panelClass: import("@angular/core").InputSignal<string>;
3758
- /**
3759
- * The panel is also shown in the page while closed (kit side filters: `d-lg-flex` on desktop):
3760
- * it is a dialog (`role`, focus trap) only when open.
3761
- */
3762
- readonly inline: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3763
- /** Emitted after the dialog opens. */
3764
- readonly opened: import("@angular/core").OutputEmitterRef<void>;
3765
- /** Emitted when the dialog closes, with the result of `wmSirioDialogClose` (undefined otherwise). */
3766
- readonly closed: import("@angular/core").OutputEmitterRef<unknown>;
3767
- protected readonly footer: import("@angular/core").Signal<SirioDialogFooter | undefined>;
3768
- private readonly dialogRef;
3769
- private readonly document;
3770
- private readonly injector;
3771
- /** Reference of a dialog opened from code, when this is its dialog (see SirioDialogService.open). */
3772
- private readonly openedRef;
3773
- private readonly baseId;
3774
- protected readonly dialogId: string;
3775
- protected readonly titleId: string;
3776
- protected readonly iconClasses: import("@angular/core").Signal<string>;
3777
- /** Element focused before opening (focus returns there on close). */
3778
- private returnFocus;
3779
- private pendingResult;
3780
- private backdropPressed;
3781
- /** The opening steps ran (focus saved, scroll locked) and the closing ones did not yet. */
3782
- private shown;
3783
- constructor();
3784
- /** Opens the dialog (kit SirioDialog.show()). */
3785
- show(): void;
3786
- /** Closes the dialog (kit SirioDialog.hide()); `result` is emitted by `(closed)`. */
3787
- close(result?: unknown): void;
3788
- toggle(): void;
3789
- protected onKeydown(event: KeyboardEvent): void;
3790
- /** Backdrop click: the press and the release must both happen on the backdrop. */
3791
- protected onBackdropMousedown(event: MouseEvent): void;
3792
- protected onBackdropClick(event: MouseEvent): void;
3793
- private isBackdrop;
3794
- private onOpen;
3795
- private onClose;
3796
- private trapFocus;
3797
- private lockScroll;
3798
- private unlockScroll;
3799
- static ɵfac: i0.ɵɵFactoryDeclaration<SirioDialog, never>;
3800
- static ɵcmp: i0.ɵɵComponentDeclaration<SirioDialog, "wm-sirio-dialog", never, {
3801
- "open": {
3802
- "alias": "open";
3803
- "required": false;
3804
- "isSignal": true;
3805
- };
3806
- "title": {
3807
- "alias": "title";
3808
- "required": false;
3809
- "isSignal": true;
3810
- };
3811
- "ariaLabel": {
3812
- "alias": "ariaLabel";
3813
- "required": false;
3814
- "isSignal": true;
3815
- };
3816
- "icon": {
3817
- "alias": "icon";
3818
- "required": false;
3819
- "isSignal": true;
3820
- };
3821
- "tone": {
3822
- "alias": "tone";
3823
- "required": false;
3824
- "isSignal": true;
3825
- };
3826
- "size": {
3827
- "alias": "size";
3828
- "required": false;
3829
- "isSignal": true;
3830
- };
3831
- "centered": {
3832
- "alias": "centered";
3833
- "required": false;
3834
- "isSignal": true;
3835
- };
3836
- "dismissible": {
3837
- "alias": "dismissible";
3838
- "required": false;
3839
- "isSignal": true;
3840
- };
3841
- "closeLabel": {
3842
- "alias": "closeLabel";
3843
- "required": false;
3844
- "isSignal": true;
3845
- };
3846
- "closeOnEscape": {
3847
- "alias": "closeOnEscape";
3848
- "required": false;
3849
- "isSignal": true;
3850
- };
3851
- "closeOnBackdrop": {
3852
- "alias": "closeOnBackdrop";
3853
- "required": false;
3854
- "isSignal": true;
3855
- };
3856
- "alert": {
3857
- "alias": "alert";
3858
- "required": false;
3859
- "isSignal": true;
3860
- };
3861
- "drawer": {
3862
- "alias": "drawer";
3863
- "required": false;
3864
- "isSignal": true;
3865
- };
3866
- "panelClass": {
3867
- "alias": "panelClass";
3868
- "required": false;
3869
- "isSignal": true;
3870
- };
3871
- "inline": {
3872
- "alias": "inline";
3873
- "required": false;
3874
- "isSignal": true;
3875
- };
3876
- }, {
3877
- "open": "openChange";
3878
- "opened": "opened";
3879
- "closed": "closed";
3880
- }, ["footer"], ["*", "[wmSirioDialogFooter]"], true, never>;
3881
- }
3882
- /** Dialog components, for `imports: [SIRIO_DIALOG]`. */
3883
- export declare const SIRIO_DIALOG: readonly [typeof SirioDialog, typeof SirioDialogFooter, typeof SirioDialogClose];
3884
6318
  /** @internal The part of SirioDialog used by SirioDialogRef. */
3885
6319
  export interface SirioDialogCloser {
3886
6320
  close(result?: unknown): void;
@@ -4102,6 +6536,8 @@ export declare class SirioStepper {
4102
6536
  /** Heading level of the accordion headers: `null` = `div` (kit example), 2–6 = `h2`…`h6`. */
4103
6537
  export type SirioHeadingLevel = 2 | 3 | 4 | 5 | 6 | null;
4104
6538
  /** Custom title of an accordion item: `<ng-template wmSirioAccordionTitle>...</ng-template>`. */
6539
+ /** When the panels of an accordion are regions (see `SirioAccordion.panelRegions`). */
6540
+ export type SirioAccordionPanelRegions = 'auto' | 'always' | 'never';
4105
6541
  export declare class SirioAccordionTitle {
4106
6542
  static ɵfac: i0.ɵɵFactoryDeclaration<SirioAccordionTitle, never>;
4107
6543
  static ɵdir: i0.ɵɵDirectiveDeclaration<SirioAccordionTitle, "ng-template[wmSirioAccordionTitle]", never, {}, {}, never, never, true, never>;
@@ -4140,6 +6576,13 @@ export declare class SirioAccordionItem {
4140
6576
  private readonly baseId;
4141
6577
  protected readonly headerId: string;
4142
6578
  protected readonly bodyId: string;
6579
+ /**
6580
+ * The panel is a region (`role="region"`, named by its header and the `ariaLabel` of the accordion)
6581
+ * according to `panelRegions` of the accordion: by default up to 6 sections, as the ARIA accordion
6582
+ * pattern suggests (more regions crowd the landmarks of the page).
6583
+ */
6584
+ protected readonly isRegion: import("@angular/core").Signal<boolean>;
6585
+ protected readonly regionLabelledBy: import("@angular/core").Signal<string>;
4143
6586
  /** @internal Trigger button (keyboard navigation of the accordion). */
4144
6587
  readonly host: HTMLElement;
4145
6588
  protected readonly level: import("@angular/core").Signal<SirioHeadingLevel>;
@@ -4231,8 +6674,20 @@ export declare class SirioAccordion {
4231
6674
  * with `[focusContent]="false"` is excluded.
4232
6675
  */
4233
6676
  readonly focusContent: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
6677
+ /**
6678
+ * Name of the accordion: it is part of the name of the panel regions ("Anagrafica, Dati generali"),
6679
+ * so that sections with the same title in different accordions of a page are told apart.
6680
+ */
6681
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
6682
+ /**
6683
+ * Panels as regions: `auto` (default) up to 6 sections, as the ARIA accordion pattern suggests,
6684
+ * `always` or `never`. A panel that is not a region keeps the link with its header button.
6685
+ */
6686
+ readonly panelRegions: import("@angular/core").InputSignal<SirioAccordionPanelRegions>;
4234
6687
  /** @internal */
4235
6688
  readonly groupId: string;
6689
+ /** @internal Element with the `ariaLabel` text, referenced by the panel regions. */
6690
+ readonly labelId: string;
4236
6691
  /** The sections, in order. */
4237
6692
  readonly items: import("@angular/core").Signal<readonly SirioAccordionItem[]>;
4238
6693
  /** Number of sections. */
@@ -4297,6 +6752,16 @@ export declare class SirioAccordion {
4297
6752
  "required": false;
4298
6753
  "isSignal": true;
4299
6754
  };
6755
+ "ariaLabel": {
6756
+ "alias": "ariaLabel";
6757
+ "required": false;
6758
+ "isSignal": true;
6759
+ };
6760
+ "panelRegions": {
6761
+ "alias": "panelRegions";
6762
+ "required": false;
6763
+ "isSignal": true;
6764
+ };
4300
6765
  }, {}, ["items"], ["*"], true, never>;
4301
6766
  }
4302
6767
  /** Accordion components, for `imports: [SIRIO_ACCORDION]`. */
@@ -4937,6 +7402,8 @@ export declare abstract class SirioDateTimeBase extends SirioControlBase<string>
4937
7402
  * The owning component stays the only writer of the text: the picker parses with the strict Sirio
4938
7403
  * parser, never rewrites the field on blur, and its selection follows the `date` input.
4939
7404
  * The picker element is inserted right after the input (wrap it in a `position: relative` box).
7405
+ * Inside a box that clips its content (e.g. the scrolling data grid, where the date filters are) the
7406
+ * open picker floats over the page, under the field, so it is never cut.
4940
7407
  *
4941
7408
  * Internal building block of wm-sirio-date and wm-sirio-datetime.
4942
7409
  */
@@ -4955,11 +7422,28 @@ export declare class SirioDatePickerDirective implements OnDestroy {
4955
7422
  private readonly locale;
4956
7423
  private readonly italian;
4957
7424
  private picker;
7425
+ private readonly document;
7426
+ private readonly nonce;
7427
+ /** Open picker moved over the page: where it was, and the listeners that keep it under the field. */
7428
+ private floating;
4958
7429
  constructor();
4959
7430
  ngOnDestroy(): void;
4960
7431
  protected onChangeDate(): void;
7432
+ /** The arrows move the focused day: it is marked until the picker closes or the mouse is used. */
7433
+ protected onKeydown(event: KeyboardEvent): void;
7434
+ protected keyboard(on: boolean): void;
7435
+ /** Once per page: the rule of the focused day (see KEYBOARD_CSS). */
7436
+ private addKeyboardStyle;
4961
7437
  /** Gives the icon-only header buttons an accessible name for the current view. */
4962
7438
  protected labelHeader(): void;
7439
+ /**
7440
+ * Opened inside a box that clips its content: the picker goes to the end of the page body, fixed
7441
+ * under the field (above it when there is no room below), following it while the page or the box
7442
+ * scrolls.
7443
+ */
7444
+ protected float(): void;
7445
+ /** Back in its place after the input when the picker closes. */
7446
+ protected unfloat(): void;
4963
7447
  private create;
4964
7448
  /** Aligns the picker selection with the component value, without touching the text. */
4965
7449
  private select;
@@ -5450,6 +7934,8 @@ interface SelectItem<T> {
5450
7934
  /** "Select all" row of a multiple select. */
5451
7935
  isSelectAll: boolean;
5452
7936
  selected: boolean;
7937
+ /** Row shown while the options are loading (`loading`). */
7938
+ isLoading?: boolean;
5453
7939
  }
5454
7940
  /** Emitted by `optionSelected` when the user chooses an option (click, Enter, Space). */
5455
7941
  export interface SirioSelectOptionEvent<T = unknown> {
@@ -5506,8 +7992,19 @@ export declare class SirioSelect<T = unknown> extends SirioControlBase<T | T[]>
5506
7992
  readonly searchMinLength: import("@angular/core").InputSignalWithTransform<number, unknown>;
5507
7993
  /** Text of the row shown when the search finds nothing. */
5508
7994
  readonly noResultsText: import("@angular/core").InputSignal<string>;
7995
+ /**
7996
+ * Options still loading (e.g. from a service): the list shows `loadingText` with the kit spinner,
7997
+ * the closed field shows it instead of the placeholder and a spinner, the combobox is aria-busy.
7998
+ */
7999
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8000
+ readonly loadingText: import("@angular/core").InputSignal<string>;
5509
8001
  /** Accessible name of the reset button (searchable). */
5510
8002
  readonly resetLabel: import("@angular/core").InputSignal<string>;
8003
+ /**
8004
+ * Shows the reset button ("X") of the kit autocomplete that clears the search and the selection (searchable).
8005
+ * Default false: the button is not rendered, the value is changed by choosing another option or cleared from code.
8006
+ */
8007
+ readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
5511
8008
  /** Screen reader hint of the search field (as the sr-only text in the kit Autocomplete example). */
5512
8009
  readonly searchHint: import("@angular/core").InputSignal<string>;
5513
8010
  /** The model value must be one of the options (`sirioSelectValue` error otherwise). */
@@ -5624,11 +8121,26 @@ export declare class SirioSelect<T = unknown> extends SirioControlBase<T | T[]>
5624
8121
  "required": false;
5625
8122
  "isSignal": true;
5626
8123
  };
8124
+ "loading": {
8125
+ "alias": "loading";
8126
+ "required": false;
8127
+ "isSignal": true;
8128
+ };
8129
+ "loadingText": {
8130
+ "alias": "loadingText";
8131
+ "required": false;
8132
+ "isSignal": true;
8133
+ };
5627
8134
  "resetLabel": {
5628
8135
  "alias": "resetLabel";
5629
8136
  "required": false;
5630
8137
  "isSignal": true;
5631
8138
  };
8139
+ "clearable": {
8140
+ "alias": "clearable";
8141
+ "required": false;
8142
+ "isSignal": true;
8143
+ };
5632
8144
  "searchHint": {
5633
8145
  "alias": "searchHint";
5634
8146
  "required": false;