@gravionlabs/helix-ui 22.1.30 → 22.2.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.
@@ -115,7 +115,7 @@ interface HxOption<V = unknown> {
115
115
  disabled: boolean;
116
116
  }
117
117
  /** How values are compared to find the chosen option: `Object.is` unless the app passes its own. */
118
- declare const compareValues: (a: unknown, b: unknown) => boolean;
118
+ declare const compareValues$1: (a: unknown, b: unknown) => boolean;
119
119
  /**
120
120
  * Turns the `options` input of a component into `{ label, value, disabled }` entries. A primitive is its own
121
121
  * label and value; an object is read through the accessors (a property name or a function). A missing label is
@@ -973,6 +973,657 @@ export declare class HxConfirmPopup {
973
973
  static ɵfac: i0.ɵɵFactoryDeclaration<HxConfirmPopup, never>;
974
974
  static ɵcmp: i0.ɵɵComponentDeclaration<HxConfirmPopup, "hx-confirm-popup", never, {}, {}, never, never, true, never>;
975
975
  }
976
+ /** What `pageChange` carries. */
977
+ interface HxPageEvent {
978
+ /** Index of the first record of the page (0-based). */
979
+ first: number;
980
+ /** Records per page. */
981
+ rows: number;
982
+ /** The page, 0-based. */
983
+ page: number;
984
+ pageCount: number;
985
+ }
986
+ /**
987
+ * Page navigation for a list or table: first, previous, page links, next, last, and a rows-per-page select.
988
+ *
989
+ * ```html
990
+ * <hx-paginator [rows]="10" [totalRecords]="120" [(first)]="first" [rowsPerPageOptions]="[10, 20, 50]"
991
+ * showCurrentPageReport (pageChange)="load($event)" />
992
+ * ```
993
+ *
994
+ * `first` is the index of the first record shown, so the page is `first / rows`. A change of the rows per page keeps
995
+ * the first record on screen. The paginator is a `nav`; the current page link has `aria-current="page"`. Labels are
996
+ * inputs, for translation.
997
+ */
998
+ export declare class HxPaginator {
999
+ /** Records per page. */
1000
+ readonly rows: import("@angular/core").ModelSignal<number>;
1001
+ readonly totalRecords: import("@angular/core").InputSignalWithTransform<number, unknown>;
1002
+ /** Index of the first record shown. */
1003
+ readonly first: import("@angular/core").ModelSignal<number>;
1004
+ /** Offers a rows-per-page select when given. */
1005
+ readonly rowsPerPageOptions: import("@angular/core").InputSignal<readonly number[] | undefined>;
1006
+ /** Page links shown at most (the current page stays in the middle). */
1007
+ readonly pageLinkSize: import("@angular/core").InputSignalWithTransform<number, unknown>;
1008
+ readonly showCurrentPageReport: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1009
+ /** `{first}`, `{last}`, `{totalRecords}`, `{page}` and `{pageCount}` are replaced. */
1010
+ readonly currentPageReportTemplate: import("@angular/core").InputSignal<string>;
1011
+ readonly showFirstLastButtons: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1012
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
1013
+ readonly firstPageLabel: import("@angular/core").InputSignal<string>;
1014
+ readonly previousPageLabel: import("@angular/core").InputSignal<string>;
1015
+ readonly nextPageLabel: import("@angular/core").InputSignal<string>;
1016
+ readonly lastPageLabel: import("@angular/core").InputSignal<string>;
1017
+ /** `{page}` is replaced by the page number (1-based). */
1018
+ readonly pageLabelTemplate: import("@angular/core").InputSignal<string>;
1019
+ readonly rowsPerPageLabel: import("@angular/core").InputSignal<string>;
1020
+ readonly pageChange: import("@angular/core").OutputEmitterRef<HxPageEvent>;
1021
+ protected readonly pageCount: import("@angular/core").Signal<number>;
1022
+ protected readonly page: import("@angular/core").Signal<number>;
1023
+ protected readonly isFirst: import("@angular/core").Signal<boolean>;
1024
+ protected readonly isLast: import("@angular/core").Signal<boolean>;
1025
+ /** The page numbers (0-based) of the links: a window of `pageLinkSize` around the current page. */
1026
+ protected readonly links: import("@angular/core").Signal<number[]>;
1027
+ protected readonly rowsOptions: import("@angular/core").Signal<{
1028
+ label: string;
1029
+ value: number;
1030
+ }[]>;
1031
+ protected readonly report: import("@angular/core").Signal<string>;
1032
+ protected pageLabel(page: number): string;
1033
+ /** Goes to a page (0-based); an out-of-range page is clamped. */
1034
+ goTo(page: number): void;
1035
+ protected setRows(value: unknown): void;
1036
+ private emit;
1037
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxPaginator, never>;
1038
+ static ɵcmp: i0.ɵɵComponentDeclaration<HxPaginator, "hx-paginator", never, {
1039
+ "rows": {
1040
+ "alias": "rows";
1041
+ "required": false;
1042
+ "isSignal": true;
1043
+ };
1044
+ "totalRecords": {
1045
+ "alias": "totalRecords";
1046
+ "required": false;
1047
+ "isSignal": true;
1048
+ };
1049
+ "first": {
1050
+ "alias": "first";
1051
+ "required": false;
1052
+ "isSignal": true;
1053
+ };
1054
+ "rowsPerPageOptions": {
1055
+ "alias": "rowsPerPageOptions";
1056
+ "required": false;
1057
+ "isSignal": true;
1058
+ };
1059
+ "pageLinkSize": {
1060
+ "alias": "pageLinkSize";
1061
+ "required": false;
1062
+ "isSignal": true;
1063
+ };
1064
+ "showCurrentPageReport": {
1065
+ "alias": "showCurrentPageReport";
1066
+ "required": false;
1067
+ "isSignal": true;
1068
+ };
1069
+ "currentPageReportTemplate": {
1070
+ "alias": "currentPageReportTemplate";
1071
+ "required": false;
1072
+ "isSignal": true;
1073
+ };
1074
+ "showFirstLastButtons": {
1075
+ "alias": "showFirstLastButtons";
1076
+ "required": false;
1077
+ "isSignal": true;
1078
+ };
1079
+ "ariaLabel": {
1080
+ "alias": "ariaLabel";
1081
+ "required": false;
1082
+ "isSignal": true;
1083
+ };
1084
+ "firstPageLabel": {
1085
+ "alias": "firstPageLabel";
1086
+ "required": false;
1087
+ "isSignal": true;
1088
+ };
1089
+ "previousPageLabel": {
1090
+ "alias": "previousPageLabel";
1091
+ "required": false;
1092
+ "isSignal": true;
1093
+ };
1094
+ "nextPageLabel": {
1095
+ "alias": "nextPageLabel";
1096
+ "required": false;
1097
+ "isSignal": true;
1098
+ };
1099
+ "lastPageLabel": {
1100
+ "alias": "lastPageLabel";
1101
+ "required": false;
1102
+ "isSignal": true;
1103
+ };
1104
+ "pageLabelTemplate": {
1105
+ "alias": "pageLabelTemplate";
1106
+ "required": false;
1107
+ "isSignal": true;
1108
+ };
1109
+ "rowsPerPageLabel": {
1110
+ "alias": "rowsPerPageLabel";
1111
+ "required": false;
1112
+ "isSignal": true;
1113
+ };
1114
+ }, {
1115
+ "rows": "rowsChange";
1116
+ "first": "firstChange";
1117
+ "pageChange": "pageChange";
1118
+ }, never, never, true, never>;
1119
+ }
1120
+ type HxTableSize = 'small' | 'medium' | 'large';
1121
+ /**
1122
+ * A native `<table>` drawn as a Helix table (CSS only): header, body and footer rows, hover, stripes and gridlines
1123
+ * from the `--h-datatable-*` tokens. For small static tables; there is no sorting, paging or selection here: data grids
1124
+ * use AG Grid through `helix-ag-grid`.
1125
+ *
1126
+ * ```html
1127
+ * <div class="hx-table-scroll">
1128
+ * <table hx-table striped hoverable>
1129
+ * <caption>Invoices</caption>
1130
+ * <thead><tr><th scope="col">No.</th><th scope="col">Amount</th></tr></thead>
1131
+ * <tbody><tr><th scope="row">1001</th><td>€ 120</td></tr></tbody>
1132
+ * </table>
1133
+ * </div>
1134
+ * ```
1135
+ *
1136
+ * The table keeps its native semantics: nothing is added to the roles. Give it a `<caption>` (it is drawn as the table
1137
+ * header), mark header cells with `<th scope="col">` / `<th scope="row">`, and mark a selected row with
1138
+ * `aria-selected="true"`, which is also what is styled. Wrap a wide table in `.hx-table-scroll` for horizontal
1139
+ * scrolling; with `stickyHeader` and a `max-height` on the wrapper the header stays in view. The wrapper is a scroll
1140
+ * container, so give it `tabindex="0"` and a name (`role="region"` with `aria-label`) when it scrolls.
1141
+ */
1142
+ export declare class HxTable {
1143
+ readonly size: import("@angular/core").InputSignal<HxTableSize>;
1144
+ /** Alternate rows get a background. */
1145
+ readonly striped: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1146
+ /** Borders around every cell. */
1147
+ readonly gridlines: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1148
+ /** Rows of the body change colour under the pointer. */
1149
+ readonly hoverable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1150
+ /** The header stays at the top of its scroll container (`.hx-table-scroll` with a `max-height`). */
1151
+ readonly stickyHeader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1152
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxTable, never>;
1153
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxTable, "table[hx-table]", never, {
1154
+ "size": {
1155
+ "alias": "size";
1156
+ "required": false;
1157
+ "isSignal": true;
1158
+ };
1159
+ "striped": {
1160
+ "alias": "striped";
1161
+ "required": false;
1162
+ "isSignal": true;
1163
+ };
1164
+ "gridlines": {
1165
+ "alias": "gridlines";
1166
+ "required": false;
1167
+ "isSignal": true;
1168
+ };
1169
+ "hoverable": {
1170
+ "alias": "hoverable";
1171
+ "required": false;
1172
+ "isSignal": true;
1173
+ };
1174
+ "stickyHeader": {
1175
+ "alias": "stickyHeader";
1176
+ "required": false;
1177
+ "isSignal": true;
1178
+ };
1179
+ }, {}, never, never, true, never>;
1180
+ }
1181
+ type HxColumnAlign = 'left' | 'center' | 'right';
1182
+ /** One column of an `hx-data-table`. */
1183
+ interface HxColumn {
1184
+ /** The property of the row shown in the column; a path (`address.city`) reads nested properties. */
1185
+ field: string;
1186
+ /** The header text. */
1187
+ header: string;
1188
+ /** CSS width of the column (`8rem`, `20%`). */
1189
+ width?: string;
1190
+ /** Horizontal alignment of header and cells (the start edge by default). */
1191
+ align?: HxColumnAlign;
1192
+ /** The header is a button that sorts by the column. */
1193
+ sortable?: boolean;
1194
+ /** The column gets a text filter in the filter row (`filterDisplay="row"`). */
1195
+ filter?: boolean;
1196
+ }
1197
+ /** One sorted column: `order` 1 is ascending, -1 descending. */
1198
+ interface HxSortMeta {
1199
+ field: string;
1200
+ order: 1 | -1;
1201
+ }
1202
+ type HxSortMode = 'single' | 'multiple';
1203
+ /** What `lazyLoad` carries: the state the data has to be loaded for. */
1204
+ interface HxLazyLoadEvent {
1205
+ first: number;
1206
+ rows: number;
1207
+ sortField: string | null;
1208
+ sortOrder: 1 | -1;
1209
+ multiSortMeta: HxSortMeta[];
1210
+ /** The text of each column filter, by field (empty filters are left out). */
1211
+ filters: Record<string, string>;
1212
+ /** The text of the global filter. */
1213
+ globalFilter: string;
1214
+ }
1215
+ /** Replaces the client-side sort: gets the rows and the sort state, returns the sorted rows. */
1216
+ type HxSortFunction = (rows: readonly unknown[], meta: readonly HxSortMeta[]) => readonly unknown[];
1217
+ /** The default order of two values: empty values last, numbers and dates by value, text by locale. */
1218
+ export declare function compareValues(a: unknown, b: unknown): number;
1219
+ /** The value of a (nested) property of a row. */
1220
+ export declare function resolveField(row: unknown, field: string): unknown;
1221
+ /**
1222
+ * The template of the cells of one column: `<ng-template hxCell="price" let-row let-value="value">`. The context
1223
+ * has the row (`$implicit`), the `value` of the column's field and the `index` of the row.
1224
+ */
1225
+ export declare class HxCell {
1226
+ /** The `field` of the column. */
1227
+ readonly field: import("@angular/core").InputSignal<string>;
1228
+ readonly template: TemplateRef<HxCellContext>;
1229
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxCell, never>;
1230
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxCell, "ng-template[hxCell]", never, {
1231
+ "field": {
1232
+ "alias": "hxCell";
1233
+ "required": true;
1234
+ "isSignal": true;
1235
+ };
1236
+ }, {}, never, never, true, never>;
1237
+ }
1238
+ interface HxCellContext {
1239
+ $implicit: unknown;
1240
+ value: unknown;
1241
+ index: number;
1242
+ }
1243
+ /** Cells of the header row, replacing the generated headers: `<ng-template hxTableHeader let-columns>…<th>`. */
1244
+ export declare class HxTableHeader {
1245
+ readonly template: TemplateRef<HxTableColumnsContext>;
1246
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxTableHeader, never>;
1247
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxTableHeader, "ng-template[hxTableHeader]", never, {}, {}, never, never, true, never>;
1248
+ }
1249
+ /** Cells of every body row, replacing the generated cells: `<ng-template hxTableBody let-row>…<td>`. */
1250
+ export declare class HxTableBody {
1251
+ readonly template: TemplateRef<HxTableRowContext>;
1252
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxTableBody, never>;
1253
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxTableBody, "ng-template[hxTableBody]", never, {}, {}, never, never, true, never>;
1254
+ }
1255
+ /** Cells of the footer row: `<ng-template hxTableFooter let-columns>…<td>`; without it there is no footer. */
1256
+ export declare class HxTableFooter {
1257
+ readonly template: TemplateRef<HxTableColumnsContext>;
1258
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxTableFooter, never>;
1259
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxTableFooter, "ng-template[hxTableFooter]", never, {}, {}, never, never, true, never>;
1260
+ }
1261
+ /** The content of the table's caption (the visible header above the table). */
1262
+ export declare class HxTableCaption {
1263
+ readonly template: TemplateRef<unknown>;
1264
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxTableCaption, never>;
1265
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxTableCaption, "ng-template[hxTableCaption]", never, {}, {}, never, never, true, never>;
1266
+ }
1267
+ /** The content of the empty row, replacing `emptyMessage`: `<ng-template hxTableEmpty>`. */
1268
+ export declare class HxTableEmpty {
1269
+ readonly template: TemplateRef<unknown>;
1270
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxTableEmpty, never>;
1271
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxTableEmpty, "ng-template[hxTableEmpty]", never, {}, {}, never, never, true, never>;
1272
+ }
1273
+ /** The content of the row that opens below a row: `<ng-template hxRowExpansion let-row>`. */
1274
+ export declare class HxRowExpansion {
1275
+ readonly template: TemplateRef<HxTableRowContext>;
1276
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxRowExpansion, never>;
1277
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HxRowExpansion, "ng-template[hxRowExpansion]", never, {}, {}, never, never, true, never>;
1278
+ }
1279
+ type HxSelectionMode = 'single' | 'multiple';
1280
+ interface HxTableColumnsContext {
1281
+ $implicit: readonly HxColumn[];
1282
+ }
1283
+ interface HxTableRowContext {
1284
+ $implicit: unknown;
1285
+ index: number;
1286
+ columns: readonly HxColumn[];
1287
+ }
1288
+ /**
1289
+ * A data table on a native `<table>`: a column model, cell templates, caption, empty and loading state, striped
1290
+ * rows, gridlines, sizes and a scrolling body with a sticky header. It draws with the CSS of `table[hx-table]`.
1291
+ *
1292
+ * ```html
1293
+ * <hx-data-table [value]="invoices" [columns]="columns" dataKey="id" caption="Invoices" stripedRows>
1294
+ * <ng-template hxCell="amount" let-value>{{ value | currency: 'EUR' }}</ng-template>
1295
+ * </hx-data-table>
1296
+ * ```
1297
+ *
1298
+ * The table keeps the native semantics: a `<caption>` (drawn as the table header; visually hidden when only
1299
+ * `ariaLabel` is set), `<th scope="col">` cells and `aria-busy` while `loading`. A scrolling table is a labelled,
1300
+ * focusable `region`.
1301
+ */
1302
+ export declare class HxDataTable implements OnInit {
1303
+ /** The rows. */
1304
+ readonly value: import("@angular/core").InputSignal<readonly unknown[]>;
1305
+ readonly columns: import("@angular/core").InputSignal<readonly HxColumn[]>;
1306
+ /** The property that identifies a row (keeps the DOM of a row when the rows change). */
1307
+ readonly dataKey: import("@angular/core").InputSignal<string | undefined>;
1308
+ readonly size: import("@angular/core").InputSignal<HxTableSize>;
1309
+ readonly stripedRows: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1310
+ readonly showGridlines: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1311
+ /** Rows change colour under the pointer (default on). */
1312
+ readonly hoverRows: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1313
+ readonly emptyMessage: import("@angular/core").InputSignal<string>;
1314
+ /** Covers the table with a spinner and sets `aria-busy`. */
1315
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1316
+ /** Visible caption text above the table. */
1317
+ readonly caption: import("@angular/core").InputSignal<string | undefined>;
1318
+ /** The accessible name of the table; with no `caption` it becomes a visually hidden caption. */
1319
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
1320
+ /** The body scrolls inside this height (`300px`, `50vh`) and the header stays in view. */
1321
+ readonly scrollHeight: import("@angular/core").InputSignal<string | undefined>;
1322
+ /** A wide table scrolls horizontally instead of overflowing. */
1323
+ readonly scrollable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1324
+ /** `single`: one sorted column; `multiple`: a click adds the column to the sort order. */
1325
+ readonly sortMode: import("@angular/core").InputSignal<HxSortMode>;
1326
+ /** The sorted column in `single` mode. */
1327
+ readonly sortField: import("@angular/core").ModelSignal<string | null>;
1328
+ /** 1 ascending, -1 descending (`single` mode). */
1329
+ readonly sortOrder: import("@angular/core").ModelSignal<1 | -1>;
1330
+ /** The sorted columns in `multiple` mode, most important first. */
1331
+ readonly multiSortMeta: import("@angular/core").ModelSignal<HxSortMeta[]>;
1332
+ /** Replaces the client-side sort. */
1333
+ readonly sortFunction: import("@angular/core").InputSignal<HxSortFunction | undefined>;
1334
+ /** Shows a paginator below the table. */
1335
+ readonly paginator: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1336
+ readonly rows: import("@angular/core").ModelSignal<number>;
1337
+ readonly first: import("@angular/core").ModelSignal<number>;
1338
+ readonly rowsPerPageOptions: import("@angular/core").InputSignal<readonly number[] | undefined>;
1339
+ readonly showCurrentPageReport: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1340
+ /** The rows are paged and sorted elsewhere: the table only shows `value` and emits `lazyLoad`. */
1341
+ readonly lazy: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1342
+ /** The number of all records when `lazy` (otherwise the length of `value`). */
1343
+ readonly totalRecords: import("@angular/core").InputSignal<number | undefined>;
1344
+ /** Emits `lazyLoad` once on init (default on). */
1345
+ readonly lazyLoadOnInit: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1346
+ /** Sort, page or rows-per-page changed while `lazy`: load the data for this state. */
1347
+ readonly lazyLoad: import("@angular/core").OutputEmitterRef<HxLazyLoadEvent>;
1348
+ /** `single`: a click selects a row; `multiple`: a checkbox column (or, with `metaKeySelection`, Ctrl/Cmd+click). */
1349
+ readonly selectionMode: import("@angular/core").InputSignal<HxSelectionMode | undefined>;
1350
+ /** The selected row (`single`) or rows (`multiple`). Rows are compared by `dataKey` when set. */
1351
+ readonly selection: import("@angular/core").ModelSignal<unknown>;
1352
+ /** `multiple`: no checkbox column; a click selects only that row, Ctrl/Cmd+click adds or removes one. */
1353
+ readonly metaKeySelection: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1354
+ readonly selectAllLabel: import("@angular/core").InputSignal<string>;
1355
+ /** `{row}` is replaced by the row number (1-based). */
1356
+ readonly selectRowLabel: import("@angular/core").InputSignal<string>;
1357
+ /** The properties of a row the global filter looks in (`filterGlobal`). */
1358
+ readonly globalFilterFields: import("@angular/core").InputSignal<readonly string[]>;
1359
+ /** `row`: a filter row with a text input under the headers of columns with `filter: true`. */
1360
+ readonly filterDisplay: import("@angular/core").InputSignal<"row" | undefined>;
1361
+ /** The text of the column filters, by field. */
1362
+ readonly filters: import("@angular/core").ModelSignal<Record<string, string>>;
1363
+ readonly filterLabel: import("@angular/core").InputSignal<string>;
1364
+ /** The rows that are open (by `dataKey`, or the row index without one); needs a `hxRowExpansion` template. */
1365
+ readonly expandedRowKeys: import("@angular/core").ModelSignal<Record<string, boolean>>;
1366
+ readonly expandLabel: import("@angular/core").InputSignal<string>;
1367
+ readonly collapseLabel: import("@angular/core").InputSignal<string>;
1368
+ protected readonly announcement: import("@angular/core").WritableSignal<string>;
1369
+ private readonly globalText;
1370
+ protected readonly cellTemplates: import("@angular/core").Signal<readonly HxCell[]>;
1371
+ protected readonly headerTemplate: import("@angular/core").Signal<HxTableHeader | undefined>;
1372
+ protected readonly bodyTemplate: import("@angular/core").Signal<HxTableBody | undefined>;
1373
+ protected readonly footerTemplate: import("@angular/core").Signal<HxTableFooter | undefined>;
1374
+ protected readonly captionTemplate: import("@angular/core").Signal<HxTableCaption | undefined>;
1375
+ protected readonly expansionTemplate: import("@angular/core").Signal<HxRowExpansion | undefined>;
1376
+ protected readonly emptyTemplate: import("@angular/core").Signal<HxTableEmpty | undefined>;
1377
+ /** The sort state as a list, whichever the mode. */
1378
+ protected readonly sortMeta: import("@angular/core").Signal<HxSortMeta[]>;
1379
+ private readonly filtered;
1380
+ private readonly sorted;
1381
+ /** The number of records the paginator pages over. */
1382
+ protected readonly total: import("@angular/core").Signal<number>;
1383
+ /** The rows the table draws: sorted, then the current page. */
1384
+ protected readonly visibleRows: import("@angular/core").Signal<readonly unknown[]>;
1385
+ protected readonly cells: import("@angular/core").Signal<Map<string, TemplateRef<HxCellContext>>>;
1386
+ protected readonly scrolls: import("@angular/core").Signal<boolean>;
1387
+ protected readonly hasCaption: import("@angular/core").Signal<boolean>;
1388
+ protected readonly captionHidden: import("@angular/core").Signal<boolean>;
1389
+ protected readonly checkboxColumn: import("@angular/core").Signal<boolean>;
1390
+ protected readonly expanderColumn: import("@angular/core").Signal<boolean>;
1391
+ protected readonly selectable: import("@angular/core").Signal<boolean>;
1392
+ protected readonly filterRow: import("@angular/core").Signal<boolean>;
1393
+ protected readonly colspan: import("@angular/core").Signal<number>;
1394
+ private selectedRows;
1395
+ private keyOf;
1396
+ protected isSelected(row: unknown): boolean;
1397
+ /** All filtered rows (of every page) are selected / some are. */
1398
+ protected readonly allSelected: import("@angular/core").Signal<boolean>;
1399
+ protected readonly someSelected: import("@angular/core").Signal<boolean>;
1400
+ protected toggleSelectAll(checked: boolean): void;
1401
+ protected toggleRowCheckbox(row: unknown, checked: boolean): void;
1402
+ /** A click or Enter/Space on a row selects it (single mode, or multiple with `metaKeySelection`). */
1403
+ protected selectRow(row: unknown, event: Event): void;
1404
+ protected onRowKey(row: unknown, event: Event): void;
1405
+ /** Filters every column in `globalFilterFields` for a text (case-insensitive, contains). */
1406
+ filterGlobal(text: string): void;
1407
+ protected setFilter(column: HxColumn, text: string): void;
1408
+ protected rowKey(row: unknown, index: number): string;
1409
+ protected isExpanded(row: unknown, index: number): boolean;
1410
+ protected toggleExpansion(row: unknown, index: number): void;
1411
+ ngOnInit(): void;
1412
+ /** The order of a column (1, -1) or 0 when it is not sorted. */
1413
+ protected orderOf(column: HxColumn): 0 | 1 | -1;
1414
+ protected ariaSort(column: HxColumn): 'ascending' | 'descending' | 'none' | null;
1415
+ /** The position (1-based) of a column in a multi-column sort, when more than one column is sorted. */
1416
+ protected sortRank(column: HxColumn): number | null;
1417
+ /** Sorts by a column: ascending, then descending, then not at all. */
1418
+ sort(column: HxColumn): void;
1419
+ protected onPage(event: HxPageEvent): void;
1420
+ private emitLazy;
1421
+ protected trackRow(row: unknown, index: number): unknown;
1422
+ protected valueOf(row: unknown, column: HxColumn): unknown;
1423
+ static ɵfac: i0.ɵɵFactoryDeclaration<HxDataTable, never>;
1424
+ static ɵcmp: i0.ɵɵComponentDeclaration<HxDataTable, "hx-data-table", never, {
1425
+ "value": {
1426
+ "alias": "value";
1427
+ "required": false;
1428
+ "isSignal": true;
1429
+ };
1430
+ "columns": {
1431
+ "alias": "columns";
1432
+ "required": false;
1433
+ "isSignal": true;
1434
+ };
1435
+ "dataKey": {
1436
+ "alias": "dataKey";
1437
+ "required": false;
1438
+ "isSignal": true;
1439
+ };
1440
+ "size": {
1441
+ "alias": "size";
1442
+ "required": false;
1443
+ "isSignal": true;
1444
+ };
1445
+ "stripedRows": {
1446
+ "alias": "stripedRows";
1447
+ "required": false;
1448
+ "isSignal": true;
1449
+ };
1450
+ "showGridlines": {
1451
+ "alias": "showGridlines";
1452
+ "required": false;
1453
+ "isSignal": true;
1454
+ };
1455
+ "hoverRows": {
1456
+ "alias": "hoverRows";
1457
+ "required": false;
1458
+ "isSignal": true;
1459
+ };
1460
+ "emptyMessage": {
1461
+ "alias": "emptyMessage";
1462
+ "required": false;
1463
+ "isSignal": true;
1464
+ };
1465
+ "loading": {
1466
+ "alias": "loading";
1467
+ "required": false;
1468
+ "isSignal": true;
1469
+ };
1470
+ "caption": {
1471
+ "alias": "caption";
1472
+ "required": false;
1473
+ "isSignal": true;
1474
+ };
1475
+ "ariaLabel": {
1476
+ "alias": "ariaLabel";
1477
+ "required": false;
1478
+ "isSignal": true;
1479
+ };
1480
+ "scrollHeight": {
1481
+ "alias": "scrollHeight";
1482
+ "required": false;
1483
+ "isSignal": true;
1484
+ };
1485
+ "scrollable": {
1486
+ "alias": "scrollable";
1487
+ "required": false;
1488
+ "isSignal": true;
1489
+ };
1490
+ "sortMode": {
1491
+ "alias": "sortMode";
1492
+ "required": false;
1493
+ "isSignal": true;
1494
+ };
1495
+ "sortField": {
1496
+ "alias": "sortField";
1497
+ "required": false;
1498
+ "isSignal": true;
1499
+ };
1500
+ "sortOrder": {
1501
+ "alias": "sortOrder";
1502
+ "required": false;
1503
+ "isSignal": true;
1504
+ };
1505
+ "multiSortMeta": {
1506
+ "alias": "multiSortMeta";
1507
+ "required": false;
1508
+ "isSignal": true;
1509
+ };
1510
+ "sortFunction": {
1511
+ "alias": "sortFunction";
1512
+ "required": false;
1513
+ "isSignal": true;
1514
+ };
1515
+ "paginator": {
1516
+ "alias": "paginator";
1517
+ "required": false;
1518
+ "isSignal": true;
1519
+ };
1520
+ "rows": {
1521
+ "alias": "rows";
1522
+ "required": false;
1523
+ "isSignal": true;
1524
+ };
1525
+ "first": {
1526
+ "alias": "first";
1527
+ "required": false;
1528
+ "isSignal": true;
1529
+ };
1530
+ "rowsPerPageOptions": {
1531
+ "alias": "rowsPerPageOptions";
1532
+ "required": false;
1533
+ "isSignal": true;
1534
+ };
1535
+ "showCurrentPageReport": {
1536
+ "alias": "showCurrentPageReport";
1537
+ "required": false;
1538
+ "isSignal": true;
1539
+ };
1540
+ "lazy": {
1541
+ "alias": "lazy";
1542
+ "required": false;
1543
+ "isSignal": true;
1544
+ };
1545
+ "totalRecords": {
1546
+ "alias": "totalRecords";
1547
+ "required": false;
1548
+ "isSignal": true;
1549
+ };
1550
+ "lazyLoadOnInit": {
1551
+ "alias": "lazyLoadOnInit";
1552
+ "required": false;
1553
+ "isSignal": true;
1554
+ };
1555
+ "selectionMode": {
1556
+ "alias": "selectionMode";
1557
+ "required": false;
1558
+ "isSignal": true;
1559
+ };
1560
+ "selection": {
1561
+ "alias": "selection";
1562
+ "required": false;
1563
+ "isSignal": true;
1564
+ };
1565
+ "metaKeySelection": {
1566
+ "alias": "metaKeySelection";
1567
+ "required": false;
1568
+ "isSignal": true;
1569
+ };
1570
+ "selectAllLabel": {
1571
+ "alias": "selectAllLabel";
1572
+ "required": false;
1573
+ "isSignal": true;
1574
+ };
1575
+ "selectRowLabel": {
1576
+ "alias": "selectRowLabel";
1577
+ "required": false;
1578
+ "isSignal": true;
1579
+ };
1580
+ "globalFilterFields": {
1581
+ "alias": "globalFilterFields";
1582
+ "required": false;
1583
+ "isSignal": true;
1584
+ };
1585
+ "filterDisplay": {
1586
+ "alias": "filterDisplay";
1587
+ "required": false;
1588
+ "isSignal": true;
1589
+ };
1590
+ "filters": {
1591
+ "alias": "filters";
1592
+ "required": false;
1593
+ "isSignal": true;
1594
+ };
1595
+ "filterLabel": {
1596
+ "alias": "filterLabel";
1597
+ "required": false;
1598
+ "isSignal": true;
1599
+ };
1600
+ "expandedRowKeys": {
1601
+ "alias": "expandedRowKeys";
1602
+ "required": false;
1603
+ "isSignal": true;
1604
+ };
1605
+ "expandLabel": {
1606
+ "alias": "expandLabel";
1607
+ "required": false;
1608
+ "isSignal": true;
1609
+ };
1610
+ "collapseLabel": {
1611
+ "alias": "collapseLabel";
1612
+ "required": false;
1613
+ "isSignal": true;
1614
+ };
1615
+ }, {
1616
+ "sortField": "sortFieldChange";
1617
+ "sortOrder": "sortOrderChange";
1618
+ "multiSortMeta": "multiSortMetaChange";
1619
+ "rows": "rowsChange";
1620
+ "first": "firstChange";
1621
+ "lazyLoad": "lazyLoad";
1622
+ "selection": "selectionChange";
1623
+ "filters": "filtersChange";
1624
+ "expandedRowKeys": "expandedRowKeysChange";
1625
+ }, ["cellTemplates", "headerTemplate", "bodyTemplate", "footerTemplate", "captionTemplate", "expansionTemplate", "emptyTemplate"], never, true, never>;
1626
+ }
976
1627
  type HxDatePickerSelectionMode = 'single' | 'range' | 'multiple';
977
1628
  type HxDatePickerValue = Date | Date[] | null;
978
1629
  type CalendarView = 'day' | 'month' | 'year';
@@ -3794,67 +4445,6 @@ export declare class HxSwitch {
3794
4445
  static ɵfac: i0.ɵɵFactoryDeclaration<HxSwitch, never>;
3795
4446
  static ɵdir: i0.ɵɵDirectiveDeclaration<HxSwitch, "input[hx-switch]", ["hx-switch"], {}, {}, never, never, true, never>;
3796
4447
  }
3797
- type HxTableSize = 'small' | 'medium' | 'large';
3798
- /**
3799
- * A native `<table>` drawn as a Helix table (CSS only): header, body and footer rows, hover, stripes and gridlines
3800
- * from the `--h-datatable-*` tokens. For small static tables; there is no sorting, paging or selection here: data grids
3801
- * use AG Grid through `helix-ag-grid`.
3802
- *
3803
- * ```html
3804
- * <div class="hx-table-scroll">
3805
- * <table hx-table striped hoverable>
3806
- * <caption>Invoices</caption>
3807
- * <thead><tr><th scope="col">No.</th><th scope="col">Amount</th></tr></thead>
3808
- * <tbody><tr><th scope="row">1001</th><td>€ 120</td></tr></tbody>
3809
- * </table>
3810
- * </div>
3811
- * ```
3812
- *
3813
- * The table keeps its native semantics: nothing is added to the roles. Give it a `<caption>` (it is drawn as the table
3814
- * header), mark header cells with `<th scope="col">` / `<th scope="row">`, and mark a selected row with
3815
- * `aria-selected="true"`, which is also what is styled. Wrap a wide table in `.hx-table-scroll` for horizontal
3816
- * scrolling; with `stickyHeader` and a `max-height` on the wrapper the header stays in view. The wrapper is a scroll
3817
- * container, so give it `tabindex="0"` and a name (`role="region"` with `aria-label`) when it scrolls.
3818
- */
3819
- export declare class HxTable {
3820
- readonly size: import("@angular/core").InputSignal<HxTableSize>;
3821
- /** Alternate rows get a background. */
3822
- readonly striped: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3823
- /** Borders around every cell. */
3824
- readonly gridlines: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3825
- /** Rows of the body change colour under the pointer. */
3826
- readonly hoverable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3827
- /** The header stays at the top of its scroll container (`.hx-table-scroll` with a `max-height`). */
3828
- readonly stickyHeader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3829
- static ɵfac: i0.ɵɵFactoryDeclaration<HxTable, never>;
3830
- static ɵdir: i0.ɵɵDirectiveDeclaration<HxTable, "table[hx-table]", never, {
3831
- "size": {
3832
- "alias": "size";
3833
- "required": false;
3834
- "isSignal": true;
3835
- };
3836
- "striped": {
3837
- "alias": "striped";
3838
- "required": false;
3839
- "isSignal": true;
3840
- };
3841
- "gridlines": {
3842
- "alias": "gridlines";
3843
- "required": false;
3844
- "isSignal": true;
3845
- };
3846
- "hoverable": {
3847
- "alias": "hoverable";
3848
- "required": false;
3849
- "isSignal": true;
3850
- };
3851
- "stickyHeader": {
3852
- "alias": "stickyHeader";
3853
- "required": false;
3854
- "isSignal": true;
3855
- };
3856
- }, {}, never, never, true, never>;
3857
- }
3858
4448
  /**
3859
4449
  * Tabs with panels, in the WAI-ARIA tabs pattern.
3860
4450
  *
@@ -4717,4 +5307,4 @@ export declare class HxTree {
4717
5307
  "nodeCollapse": "nodeCollapse";
4718
5308
  }, ["template"], never, true, never>;
4719
5309
  }
4720
- export type { HxAccordionValue, HxAutoCompleteEvent, HxAutoCompleteSize, HxAvatarShape, HxAvatarSize, HxBadgeSeverity, HxBadgeSize, HxBreadcrumbItem, HxButtonSeverity, HxButtonSize, HxButtonVariant, HxChartInstance, HxChartModule, HxChartSelectEvent, HxChartType, HxCheckboxSize, HxConfirmation, HxDatePickerSelectionMode, HxDatePickerValue, HxDialogConfig, HxDialogPosition, HxDividerAlign, HxDividerLayout, HxDividerType, HxDrawerPosition, HxFileUploadMode, HxFloatLabelVariant, HxIconPosition, HxInputNumberButtonLayout, HxInputNumberMode, HxInputNumberSize, HxInputNumberVariant, HxInputSize, HxInputVariant, HxMenuItem, HxMenuItemCommandEvent, HxMessageSeverity, HxMessageSize, HxMessageVariant, HxMultiSelectDisplay, HxMultiSelectSize, HxMultiSelectVariant, HxPrimaryColor, HxProgressMode, HxRadioSize, HxSelectButtonSize, HxSelectItem, HxSelectSize, HxSelectVariant, HxSkeletonAnimation, HxSkeletonShape, HxSliderOrientation, HxSliderValue, HxStepContentContext, HxStepValue, HxSurface, HxTableSize, HxTagSeverity, HxThemeOptions, HxTimelineAlign, HxTimelineContext, HxTimelineLayout, HxToastMessage, HxToastMessageInput, HxToastPosition, HxToastSeverity, HxToggleButtonSize, HxTooltipEvent, HxTooltipPosition, HxTreeFilterMode, HxTreeNode, HxTreeNodeContext, HxTreeNodeEvent, HxTreeSelection, HxTreeSelectionMode };
5310
+ export type { HxAccordionValue, HxAutoCompleteEvent, HxAutoCompleteSize, HxAvatarShape, HxAvatarSize, HxBadgeSeverity, HxBadgeSize, HxBreadcrumbItem, HxButtonSeverity, HxButtonSize, HxButtonVariant, HxCellContext, HxChartInstance, HxChartModule, HxChartSelectEvent, HxChartType, HxCheckboxSize, HxColumn, HxColumnAlign, HxConfirmation, HxDatePickerSelectionMode, HxDatePickerValue, HxDialogConfig, HxDialogPosition, HxDividerAlign, HxDividerLayout, HxDividerType, HxDrawerPosition, HxFileUploadMode, HxFloatLabelVariant, HxIconPosition, HxInputNumberButtonLayout, HxInputNumberMode, HxInputNumberSize, HxInputNumberVariant, HxInputSize, HxInputVariant, HxLazyLoadEvent, HxMenuItem, HxMenuItemCommandEvent, HxMessageSeverity, HxMessageSize, HxMessageVariant, HxMultiSelectDisplay, HxMultiSelectSize, HxMultiSelectVariant, HxPageEvent, HxPrimaryColor, HxProgressMode, HxRadioSize, HxSelectButtonSize, HxSelectItem, HxSelectSize, HxSelectVariant, HxSelectionMode, HxSkeletonAnimation, HxSkeletonShape, HxSliderOrientation, HxSliderValue, HxSortFunction, HxSortMeta, HxSortMode, HxStepContentContext, HxStepValue, HxSurface, HxTableColumnsContext, HxTableRowContext, HxTableSize, HxTagSeverity, HxThemeOptions, HxTimelineAlign, HxTimelineContext, HxTimelineLayout, HxToastMessage, HxToastMessageInput, HxToastPosition, HxToastSeverity, HxToggleButtonSize, HxTooltipEvent, HxTooltipPosition, HxTreeFilterMode, HxTreeNode, HxTreeNodeContext, HxTreeNodeEvent, HxTreeSelection, HxTreeSelectionMode };