@lilydesignsystem/angular-data-grid 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/fesm2022/lilydesignsystem-angular-data-grid.mjs +700 -103
- package/fesm2022/lilydesignsystem-angular-data-grid.mjs.map +1 -1
- package/package.json +2 -2
- package/types/lilydesignsystem-angular-data-grid.d.ts +257 -5
- package/types/lilydesignsystem-angular-data-grid.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lilydesignsystem/angular-data-grid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": "=26"
|
|
6
6
|
},
|
|
7
7
|
"description": "Lily Design System Angular interactive data grid composing the headless DataTable family: sort, filter, selection, pagination, resize, reorder, cell editing, virtualization, export to CSV, TSV and Excel, and twelve cell types. Headless, SSR-safe, no CSS.",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@lilydesignsystem/angular-headless": "^0.
|
|
9
|
+
"@lilydesignsystem/angular-headless": "^0.6.0",
|
|
10
10
|
"tslib": "^2.3.0"
|
|
11
11
|
},
|
|
12
12
|
"peerDependencies": {
|
|
@@ -60,6 +60,14 @@ export declare function exportBlob(table: ExportTable, format: ExportFormat, opt
|
|
|
60
60
|
export declare function exportFilename(base: string, format: ExportFormat): string;
|
|
61
61
|
/** Saves a blob through a temporary link. Does nothing outside a browser. */
|
|
62
62
|
export declare function downloadBlob(blob: Blob, filename: string): void;
|
|
63
|
+
/** The table as tab-separated text with its header row, ready to paste into a spreadsheet (no byte-order mark, formula text defused). */
|
|
64
|
+
export declare function toClipboardText(table: ExportTable): string;
|
|
65
|
+
/**
|
|
66
|
+
* Write `text` to the clipboard: the async Clipboard API where there is one, otherwise a hidden, selected `<textarea>` and
|
|
67
|
+
* `document.execCommand("copy")`. Resolves true when something was copied, false when neither path worked (no permission, no
|
|
68
|
+
* secure context, no DOM). Never throws.
|
|
69
|
+
*/
|
|
70
|
+
export declare function copyToClipboard(text: string): Promise<boolean>;
|
|
63
71
|
type DataGridCellType = "text" | "number" | "link" | "date" | "time" | "time-zone" | "select" | "radio" | "person" | "file" | "rollup" | "formula";
|
|
64
72
|
/** A time of day and the zone it is stated in (an IANA zone id, or a bare offset such as `+01:00`). */
|
|
65
73
|
type DataGridZonedTime = {
|
|
@@ -251,7 +259,7 @@ type DataGridColumn = {
|
|
|
251
259
|
resizable?: boolean;
|
|
252
260
|
/** Column can be reordered: Alt+ArrowLeft/Right on its focused header, or dragging the header onto another. */
|
|
253
261
|
movable?: boolean;
|
|
254
|
-
/** Pins the column: its header and cells get `data-pinned="start"` / `"end"` for the consumer's sticky CSS. */
|
|
262
|
+
/** Pins the column: its header and cells get `data-pinned="start"` / `"end"` for the consumer's sticky CSS. Lily sets no position; when the widths of the pinned columns before it are known it sets `--data-grid-pinned-offset` (px) for `inset-inline-start` / `-end`. */
|
|
255
263
|
pinned?: "start" | "end";
|
|
256
264
|
/** Set `false` to leave the column out of an export. Default true. */
|
|
257
265
|
exportable?: boolean;
|
|
@@ -276,6 +284,8 @@ type DataGridColumn = {
|
|
|
276
284
|
/** The kind of value in this column: a bundle of defaults for `format`, `compare`, `filterText`, `exportValue`, `align` and `editor`. */
|
|
277
285
|
type?: DataGridCellType;
|
|
278
286
|
/** BCP 47 locale for this column's formatting and collation. */
|
|
287
|
+
/** Shown instead of nothing when this column's value is missing (`null`, `undefined` or `""`). Overrides the grid's `emptyValue`. A missing value always carries `data-empty` on its cell. */
|
|
288
|
+
emptyValue?: string;
|
|
279
289
|
locale?: string;
|
|
280
290
|
/** `select` and `radio`: the choices. */
|
|
281
291
|
options?: DataGridOption[];
|
|
@@ -354,6 +364,22 @@ type DataGridColumn = {
|
|
|
354
364
|
*/
|
|
355
365
|
type DataGridLabels = {
|
|
356
366
|
search?: string;
|
|
367
|
+
/** Accessible name of the select that limits the search to one column. Gates the select (needs `searchAllFields` too). */
|
|
368
|
+
searchField?: string;
|
|
369
|
+
/** The select's first option: search every column. */
|
|
370
|
+
searchAllFields?: string;
|
|
371
|
+
/** Accessible name of the pager. When given, the pager is a labelled `<nav>` landmark (the headless `PaginationNav`); without it the pager is a plain `<div>`. */
|
|
372
|
+
pagination?: string;
|
|
373
|
+
/** Visible text of the copy button, which puts the export (header row first, tab-separated) on the clipboard for pasting into a spreadsheet. Gates the button. */
|
|
374
|
+
copy?: string;
|
|
375
|
+
/** Announced after a copy: (how many rows). */
|
|
376
|
+
copyAnnouncement?: (rowCount: number) => string;
|
|
377
|
+
/** Announced when the clipboard could not be written. */
|
|
378
|
+
copyFailed?: string;
|
|
379
|
+
/** Announced after Ctrl/Cmd+Z puts an earlier value back: (column header, the restored text). */
|
|
380
|
+
undoAnnouncement?: (header: string, text: string) => string;
|
|
381
|
+
/** Announced after Ctrl/Cmd+Shift+Z (or Ctrl+Y) re-applies an edit: (column header, the text). */
|
|
382
|
+
redoAnnouncement?: (header: string, text: string) => string;
|
|
357
383
|
columnVisibility?: string;
|
|
358
384
|
columnVisibilityOption?: (header: string) => string;
|
|
359
385
|
resizeHandle?: (header: string) => string;
|
|
@@ -392,7 +418,12 @@ type DataGridLabels = {
|
|
|
392
418
|
/** What a footer template receives (as `$implicit`). */
|
|
393
419
|
type DataGridFooterContext = {
|
|
394
420
|
columns: DataGridColumn[];
|
|
421
|
+
/** The current page. */
|
|
395
422
|
rows: DataGridRow[];
|
|
423
|
+
/** Every row that passes the filter. */
|
|
424
|
+
allRows: DataGridRow[];
|
|
425
|
+
/** Reduces one column over `allRows` (a footer total that does not change with the page). */
|
|
426
|
+
aggregate: (columnId: string, kind: DataGridAggregate) => unknown;
|
|
396
427
|
};
|
|
397
428
|
type DataGridEntry = {
|
|
398
429
|
row: DataGridRow;
|
|
@@ -442,6 +473,16 @@ export declare class DataGrid {
|
|
|
442
473
|
readonly rows: import("@angular/core/types/core").InputSignal<DataGridRow[]>;
|
|
443
474
|
/** BCP 47 locale for the typed columns' formatting and collation. Never defaulted: with none, values show as stored. */
|
|
444
475
|
readonly locale: import("@angular/core/types/core").InputSignal<string | undefined>;
|
|
476
|
+
/** What a cell shows when its value is missing (`null`, `undefined` or `""`), for example `"—"`. A column's own `emptyValue` wins. No default: Lily ships no text. The cell always carries `data-empty`, and an export is unaffected. */
|
|
477
|
+
readonly emptyValue: import("@angular/core/types/core").InputSignal<string | undefined>;
|
|
478
|
+
/** In development, log (once per grid) the labels the grid's features call for but `labels` leaves out. Default `true`; it never logs in production. */
|
|
479
|
+
readonly warnMissingLabels: import("@angular/core/types/core").InputSignal<boolean>;
|
|
480
|
+
/** Where missing values sort: `"last"` (default, in both directions) or `"first"`. */
|
|
481
|
+
readonly nulls: import("@angular/core/types/core").InputSignal<"first" | "last">;
|
|
482
|
+
/** Make every column movable (Alt+Arrow on its header, or drag it) unless its own `movable` is `false`. Default `false`. */
|
|
483
|
+
readonly movableColumns: import("@angular/core/types/core").InputSignal<boolean>;
|
|
484
|
+
/** Hides rows for which it returns false (a status or date-range filter). Combines with the text filter; both must pass. */
|
|
485
|
+
readonly rowFilter: import("@angular/core/types/core").InputSignal<((row: DataGridRow) => boolean) | undefined>;
|
|
445
486
|
/** Derives a stable id per row. Defaults to the row's index in `rows`. */
|
|
446
487
|
readonly rowId: import("@angular/core/types/core").InputSignal<(row: DataGridRow, index: number) => string>;
|
|
447
488
|
/** Row selection mode. */
|
|
@@ -478,6 +519,11 @@ export declare class DataGrid {
|
|
|
478
519
|
readonly exportFormulas: import("@angular/core/types/core").InputSignal<boolean>;
|
|
479
520
|
/** Called with the file before it is saved. Return `false` to keep the grid from saving it. */
|
|
480
521
|
readonly exportHandler: import("@angular/core/types/core").InputSignal<((file: DataGridExport) => boolean | void) | undefined>;
|
|
522
|
+
/** Called before a copy puts text on the clipboard. Return `false` to take over (nothing is copied). The `copy` output fires first. */
|
|
523
|
+
readonly copyHandler: import("@angular/core/types/core").InputSignal<((copy: {
|
|
524
|
+
text: string;
|
|
525
|
+
rowCount: number;
|
|
526
|
+
}) => boolean | void) | undefined>;
|
|
481
527
|
/** Renders only the rows in view, in a scroll region of `height` px (needs `scroll`). */
|
|
482
528
|
readonly virtualize: import("@angular/core/types/core").InputSignal<{
|
|
483
529
|
rowHeight: number;
|
|
@@ -490,6 +536,10 @@ export declare class DataGrid {
|
|
|
490
536
|
readonly selected: import("@angular/core/types/core").ModelSignal<string[]>;
|
|
491
537
|
/** Text filter. Two-way bindable: `[(filter)]`. */
|
|
492
538
|
readonly filter: import("@angular/core/types/core").ModelSignal<string>;
|
|
539
|
+
/** Limits the text filter to one column: a column id, or `""` for every filterable column. Two-way bindable: `[(filterField)]`. */
|
|
540
|
+
readonly filterField: import("@angular/core/types/core").ModelSignal<string>;
|
|
541
|
+
/** Further sort keys after `sort`, for ties: Shift+click on another sortable header adds it. Two-way bindable: `[(thenBy)]`. */
|
|
542
|
+
readonly thenBy: import("@angular/core/types/core").ModelSignal<DataGridSort[]>;
|
|
493
543
|
/** Current sort. Two-way bindable: `[(sort)]`. */
|
|
494
544
|
readonly sort: import("@angular/core/types/core").ModelSignal<DataGridSort>;
|
|
495
545
|
/** Column ids in display order. Two-way bindable: `[(columnOrder)]`; columns it does not name follow in their `columns` order. */
|
|
@@ -514,6 +564,10 @@ export declare class DataGrid {
|
|
|
514
564
|
id: string;
|
|
515
565
|
}>;
|
|
516
566
|
readonly exportFile: import("@angular/core/types/_api-chunk").OutputEmitterRef<DataGridExport>;
|
|
567
|
+
readonly copy: import("@angular/core/types/_api-chunk").OutputEmitterRef<{
|
|
568
|
+
text: string;
|
|
569
|
+
rowCount: number;
|
|
570
|
+
}>;
|
|
517
571
|
protected readonly gridId: string;
|
|
518
572
|
protected readonly minColumnWidth = 40;
|
|
519
573
|
private readonly rootRef;
|
|
@@ -541,9 +595,16 @@ export declare class DataGrid {
|
|
|
541
595
|
/** Each cell's value and formatted text, read once per row object and column (reset when the columns change). */
|
|
542
596
|
private readonly cellCache;
|
|
543
597
|
protected cellFor(column: DataGridColumn, row: DataGridRow): DataGridCellContext;
|
|
544
|
-
/**
|
|
598
|
+
/** A missing value: `null`, `undefined` or an empty string. */
|
|
599
|
+
protected readonly isMissing: (value: unknown) => boolean;
|
|
600
|
+
/** A column the user can move: its own `movable`, else the grid's `movableColumns`. */
|
|
601
|
+
protected isMovable(column: DataGridColumn): boolean;
|
|
602
|
+
protected readonly filterableColumns: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<DataGridColumn[]>;
|
|
603
|
+
/** One folded (lower-case, no diacritics) text per filterable cell, built once per rows/columns change. */
|
|
545
604
|
private readonly searchIndex;
|
|
546
605
|
private readonly filteredEntries;
|
|
606
|
+
/** The sort keys in order: the primary, then `thenBy`, each with a real column and a direction. */
|
|
607
|
+
private readonly sortKeys;
|
|
547
608
|
protected readonly sortedEntries: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<DataGridEntry[]>;
|
|
548
609
|
protected readonly pageCount: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<number>;
|
|
549
610
|
protected readonly clampedPage: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<number>;
|
|
@@ -560,14 +621,21 @@ export declare class DataGrid {
|
|
|
560
621
|
protected readonly allSelected: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<boolean>;
|
|
561
622
|
protected readonly someSelected: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<boolean>;
|
|
562
623
|
protected readonly footerContext: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<DataGridFooterContext>;
|
|
624
|
+
/** A reduction of one column over every row that passes the filter (not only the current page), for a footer total. */
|
|
625
|
+
private footerAggregate;
|
|
563
626
|
protected readonly exportColumns: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<DataGridColumn[]>;
|
|
564
627
|
protected readonly exportEntries: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<DataGridEntry[]>;
|
|
565
628
|
protected readonly hasExportButtons: import("@angular/core/types/_chrome_dev_tools_performance-chunk").Signal<boolean>;
|
|
566
629
|
constructor();
|
|
567
630
|
private announce;
|
|
568
631
|
protected ariaSortFor(column: DataGridColumn): DataGridSortDirection | null;
|
|
569
|
-
|
|
570
|
-
protected
|
|
632
|
+
/** 1 for the primary key, 2… for `thenBy`, only while more than one key is in force. */
|
|
633
|
+
protected sortOrderFor(column: DataGridColumn): number | null;
|
|
634
|
+
protected toggleSort(column: DataGridColumn, additive?: boolean): void;
|
|
635
|
+
protected setFilter(value: string): void;
|
|
636
|
+
/** Escape in the search field clears it. */
|
|
637
|
+
protected onFilterKeydown(event: Event): void;
|
|
638
|
+
protected onFilterFieldChange(event: Event): void;
|
|
571
639
|
protected isSelected(id: string): boolean;
|
|
572
640
|
private setSelected;
|
|
573
641
|
protected onRowSelectClick(index: number, event: Event): void;
|
|
@@ -595,6 +663,9 @@ export declare class DataGrid {
|
|
|
595
663
|
/** One cell for an export: typed values stay typed, everything else is the text the grid shows. */
|
|
596
664
|
private exportCell;
|
|
597
665
|
private hasUtcColumn;
|
|
666
|
+
private buildExportTable;
|
|
667
|
+
/** Copy the export (what a download would hold) to the clipboard as tab-separated text. `copyHandler` may return false to take over. */
|
|
668
|
+
protected runCopy(): Promise<void>;
|
|
598
669
|
protected runExport(format: ExportFormat): void;
|
|
599
670
|
/** Files dropped on an editable file cell: the same report as the file input. The grid uploads nothing. */
|
|
600
671
|
protected onFileDragOver(column: DataGridColumn, event: Event): void;
|
|
@@ -606,6 +677,10 @@ export declare class DataGrid {
|
|
|
606
677
|
protected startEdit(entry: DataGridEntry, column: DataGridColumn): void;
|
|
607
678
|
private parseDraft;
|
|
608
679
|
/** Two link values with the same address and label are the same edit. */
|
|
680
|
+
/** Accepted cell edits, for Ctrl/Cmd+Z. The consumer owns the data, so an undo is reported through the `cellEdit` output like any edit. */
|
|
681
|
+
private history;
|
|
682
|
+
/** Put an earlier cell value back, or re-apply it, through `cellEdit`. */
|
|
683
|
+
private stepHistory;
|
|
609
684
|
private isStructurallyEqual;
|
|
610
685
|
/** Validate and report one new value for a cell. Returns false (and keeps editing, if the editor is open) when it is refused. */
|
|
611
686
|
protected commitValue(entry: DataGridEntry, column: DataGridColumn, value: unknown): boolean;
|
|
@@ -633,6 +708,7 @@ export declare class DataGrid {
|
|
|
633
708
|
protected onGridClick(event: Event): void;
|
|
634
709
|
/** A double click on an editable body cell starts editing it. */
|
|
635
710
|
protected onGridDblclick(event: Event): void;
|
|
711
|
+
private typeahead;
|
|
636
712
|
protected onGridKeydown(event: Event): void;
|
|
637
713
|
private restoreView;
|
|
638
714
|
protected rowLabelOf(entry: DataGridEntry): string;
|
|
@@ -674,6 +750,31 @@ export declare class DataGrid {
|
|
|
674
750
|
"required": false;
|
|
675
751
|
"isSignal": true;
|
|
676
752
|
};
|
|
753
|
+
"emptyValue": {
|
|
754
|
+
"alias": "emptyValue";
|
|
755
|
+
"required": false;
|
|
756
|
+
"isSignal": true;
|
|
757
|
+
};
|
|
758
|
+
"warnMissingLabels": {
|
|
759
|
+
"alias": "warnMissingLabels";
|
|
760
|
+
"required": false;
|
|
761
|
+
"isSignal": true;
|
|
762
|
+
};
|
|
763
|
+
"nulls": {
|
|
764
|
+
"alias": "nulls";
|
|
765
|
+
"required": false;
|
|
766
|
+
"isSignal": true;
|
|
767
|
+
};
|
|
768
|
+
"movableColumns": {
|
|
769
|
+
"alias": "movableColumns";
|
|
770
|
+
"required": false;
|
|
771
|
+
"isSignal": true;
|
|
772
|
+
};
|
|
773
|
+
"rowFilter": {
|
|
774
|
+
"alias": "rowFilter";
|
|
775
|
+
"required": false;
|
|
776
|
+
"isSignal": true;
|
|
777
|
+
};
|
|
677
778
|
"rowId": {
|
|
678
779
|
"alias": "rowId";
|
|
679
780
|
"required": false;
|
|
@@ -759,6 +860,11 @@ export declare class DataGrid {
|
|
|
759
860
|
"required": false;
|
|
760
861
|
"isSignal": true;
|
|
761
862
|
};
|
|
863
|
+
"copyHandler": {
|
|
864
|
+
"alias": "copyHandler";
|
|
865
|
+
"required": false;
|
|
866
|
+
"isSignal": true;
|
|
867
|
+
};
|
|
762
868
|
"virtualize": {
|
|
763
869
|
"alias": "virtualize";
|
|
764
870
|
"required": false;
|
|
@@ -779,6 +885,16 @@ export declare class DataGrid {
|
|
|
779
885
|
"required": false;
|
|
780
886
|
"isSignal": true;
|
|
781
887
|
};
|
|
888
|
+
"filterField": {
|
|
889
|
+
"alias": "filterField";
|
|
890
|
+
"required": false;
|
|
891
|
+
"isSignal": true;
|
|
892
|
+
};
|
|
893
|
+
"thenBy": {
|
|
894
|
+
"alias": "thenBy";
|
|
895
|
+
"required": false;
|
|
896
|
+
"isSignal": true;
|
|
897
|
+
};
|
|
782
898
|
"sort": {
|
|
783
899
|
"alias": "sort";
|
|
784
900
|
"required": false;
|
|
@@ -797,6 +913,8 @@ export declare class DataGrid {
|
|
|
797
913
|
}, {
|
|
798
914
|
"selected": "selectedChange";
|
|
799
915
|
"filter": "filterChange";
|
|
916
|
+
"filterField": "filterFieldChange";
|
|
917
|
+
"thenBy": "thenByChange";
|
|
800
918
|
"sort": "sortChange";
|
|
801
919
|
"columnOrder": "columnOrderChange";
|
|
802
920
|
"page": "pageChange";
|
|
@@ -805,7 +923,141 @@ export declare class DataGrid {
|
|
|
805
923
|
"fileRemove": "fileRemove";
|
|
806
924
|
"rowActivate": "rowActivate";
|
|
807
925
|
"exportFile": "exportFile";
|
|
926
|
+
"copy": "copy";
|
|
808
927
|
}, never, never, true, never>;
|
|
809
928
|
}
|
|
810
|
-
|
|
929
|
+
/**
|
|
930
|
+
* Search matching shared by the data grid, kanban board, Gantt chart and calendar: pure, so it is unit-tested without a browser.
|
|
931
|
+
*
|
|
932
|
+
* A query is split on whitespace into terms; every term must appear (AND), in any order, ignoring case and diacritics
|
|
933
|
+
* ("cafe" finds "Café"). An empty query matches everything.
|
|
934
|
+
*/
|
|
935
|
+
/** Lower-case and strip combining marks, so matching ignores case and diacritics. */
|
|
936
|
+
export declare function foldText(text: string): string;
|
|
937
|
+
/** The terms of a query, folded; empty when the query is blank. */
|
|
938
|
+
export declare function searchTerms(query: string): string[];
|
|
939
|
+
/** True when every term of `query` appears in `text`. */
|
|
940
|
+
export declare function matchesSearch(text: string, query: string): boolean;
|
|
941
|
+
type SearchSegment = {
|
|
942
|
+
text: string;
|
|
943
|
+
match: boolean;
|
|
944
|
+
};
|
|
945
|
+
/**
|
|
946
|
+
* `text` cut into runs, marking the parts any term matches (for `<mark>`). Folding can change a string's length (a precomposed "é"
|
|
947
|
+
* is one character, its folded form too, but a ligature may not be), so matching works on a per-character fold and falls back to
|
|
948
|
+
* one unmarked segment if the two ever disagree.
|
|
949
|
+
*/
|
|
950
|
+
export declare function highlightSegments(text: string, query: string): SearchSegment[];
|
|
951
|
+
export declare const TYPEAHEAD_RESET_MS = 700;
|
|
952
|
+
type TypeaheadState = {
|
|
953
|
+
prefix: string;
|
|
954
|
+
at: number;
|
|
955
|
+
};
|
|
956
|
+
/** Whether a key press is a type-ahead character: one printable character, no Ctrl, Alt or Meta. */
|
|
957
|
+
export declare function isTypeaheadKey(event: {
|
|
958
|
+
key: string;
|
|
959
|
+
ctrlKey?: boolean;
|
|
960
|
+
altKey?: boolean;
|
|
961
|
+
metaKey?: boolean;
|
|
962
|
+
}): boolean;
|
|
963
|
+
/** The prefix after `key` is pressed at time `now`: it grows while presses are within `resetMs` of each other, else starts over. */
|
|
964
|
+
export declare function nextTypeaheadState(previous: TypeaheadState, key: string, now: number, resetMs?: number): TypeaheadState;
|
|
965
|
+
/**
|
|
966
|
+
* The index of the row to move to, or -1. Searches from the row after `from` and wraps. A prefix of one repeated letter ("ss") is
|
|
967
|
+
* treated as that single letter, so pressing it again steps through the rows starting with it.
|
|
968
|
+
*/
|
|
969
|
+
export declare function findTypeaheadMatch(labels: readonly string[], from: number, prefix: string): number;
|
|
970
|
+
/**
|
|
971
|
+
* Undo / redo for typed-field edits: pure, so it is unit-tested without a browser. The components own nothing but the stacks:
|
|
972
|
+
* the consumer owns the data, so an undo is reported the same way an edit is — through `onFieldEdit`, with the earlier value.
|
|
973
|
+
*/
|
|
974
|
+
/** One accepted edit: which record and field, the value it took and the value it replaced. */
|
|
975
|
+
type EditRecord = {
|
|
976
|
+
ownerId: string;
|
|
977
|
+
fieldId: string;
|
|
978
|
+
value: unknown;
|
|
979
|
+
previous: unknown;
|
|
980
|
+
};
|
|
981
|
+
type EditHistory = {
|
|
982
|
+
undo: readonly EditRecord[];
|
|
983
|
+
redo: readonly EditRecord[];
|
|
984
|
+
};
|
|
985
|
+
export declare const EMPTY_HISTORY: EditHistory;
|
|
986
|
+
/** Most steps kept; the oldest fall off. */
|
|
987
|
+
export declare const HISTORY_LIMIT = 100;
|
|
988
|
+
/** A new edit goes on the undo stack and ends any redo chain. */
|
|
989
|
+
export declare function recordEdit(history: EditHistory, record: EditRecord, limit?: number): EditHistory;
|
|
990
|
+
/** Step back: the record to reverse (apply `previous`), and the history with it moved to the redo stack. */
|
|
991
|
+
export declare function undoEdit(history: EditHistory): {
|
|
992
|
+
history: EditHistory;
|
|
993
|
+
record: EditRecord | undefined;
|
|
994
|
+
};
|
|
995
|
+
/** Step forward: the record to re-apply (apply `value`), and the history with it moved back to the undo stack. */
|
|
996
|
+
export declare function redoEdit(history: EditHistory): {
|
|
997
|
+
history: EditHistory;
|
|
998
|
+
record: EditRecord | undefined;
|
|
999
|
+
};
|
|
1000
|
+
/** Whether a key press is Undo (Ctrl/Cmd+Z) or Redo (Ctrl/Cmd+Shift+Z, or Ctrl+Y), or neither. */
|
|
1001
|
+
export declare function historyKey(event: {
|
|
1002
|
+
key: string;
|
|
1003
|
+
ctrlKey?: boolean;
|
|
1004
|
+
metaKey?: boolean;
|
|
1005
|
+
shiftKey?: boolean;
|
|
1006
|
+
altKey?: boolean;
|
|
1007
|
+
}): "undo" | "redo" | null;
|
|
1008
|
+
/**
|
|
1009
|
+
* Which `labels` a grid needs, by what it renders — so an app can check that it has supplied every string for its locale, and a
|
|
1010
|
+
* grid can say, in development, which control it is about to leave unnamed. Lily ships no English: a missing label is a control with
|
|
1011
|
+
* no name, or an announcement that is never made, never English text. Pure, so it is unit-tested on its own.
|
|
1012
|
+
*/
|
|
1013
|
+
/** What the grid is showing, as far as labels are concerned. */
|
|
1014
|
+
type LabelFeatures = {
|
|
1015
|
+
/** `selectionMode` is not `none`. */
|
|
1016
|
+
selection?: boolean;
|
|
1017
|
+
/** `pageSize` is set. */
|
|
1018
|
+
pagination?: boolean;
|
|
1019
|
+
/** Some column is `hidable`. */
|
|
1020
|
+
hidableColumns?: boolean;
|
|
1021
|
+
/** Some column is `resizable`. */
|
|
1022
|
+
resizableColumns?: boolean;
|
|
1023
|
+
/** Some column is editable (`onCellEdit` is set). */
|
|
1024
|
+
editing?: boolean;
|
|
1025
|
+
/** Some column is `sortable`. */
|
|
1026
|
+
sorting?: boolean;
|
|
1027
|
+
/** The search field is wanted (the field itself is gated by `labels.search`). */
|
|
1028
|
+
search?: boolean;
|
|
1029
|
+
/** Export or copy buttons are wanted. */
|
|
1030
|
+
exporting?: boolean;
|
|
1031
|
+
};
|
|
1032
|
+
/** Labels that **name a control**: without one the control is unnamed to a screen reader (or not rendered at all). */
|
|
1033
|
+
export declare const CONTROL_LABELS: {
|
|
1034
|
+
readonly selection: readonly ["selectAll", "selectionColumn", "selectRow"];
|
|
1035
|
+
readonly pagination: readonly ["previousPage", "nextPage", "pageStatus"];
|
|
1036
|
+
readonly hidableColumns: readonly ["columnVisibility", "columnVisibilityOption"];
|
|
1037
|
+
readonly resizableColumns: readonly ["resizeHandle"];
|
|
1038
|
+
readonly editing: readonly ["editCell", "cellEditor"];
|
|
1039
|
+
readonly search: readonly ["search"];
|
|
1040
|
+
readonly exporting: readonly ["export"];
|
|
1041
|
+
};
|
|
1042
|
+
/** Labels that make an **announcement** through the live region: without one the change is silent. */
|
|
1043
|
+
export declare const ANNOUNCEMENT_LABELS: {
|
|
1044
|
+
readonly sorting: readonly ["sortAnnouncement"];
|
|
1045
|
+
readonly search: readonly ["filterAnnouncement"];
|
|
1046
|
+
readonly selection: readonly ["selectionAnnouncement"];
|
|
1047
|
+
readonly pagination: readonly ["pageAnnouncement"];
|
|
1048
|
+
readonly editing: readonly ["editAnnouncement", "editCancelAnnouncement", "editError", "undoAnnouncement", "redoAnnouncement"];
|
|
1049
|
+
readonly exporting: readonly ["exportAnnouncement", "copyAnnouncement", "copyFailed"];
|
|
1050
|
+
};
|
|
1051
|
+
type LabelKind = "control" | "announcement";
|
|
1052
|
+
/** Every label key the features in use call for, with its kind. */
|
|
1053
|
+
export declare function requiredLabels(features: LabelFeatures): {
|
|
1054
|
+
key: string;
|
|
1055
|
+
kind: LabelKind;
|
|
1056
|
+
}[];
|
|
1057
|
+
/** The required labels that are absent (`undefined`, `null` or an empty string) from `labels`. */
|
|
1058
|
+
export declare function missingLabels(features: LabelFeatures, labels: Record<string, unknown> | undefined): {
|
|
1059
|
+
key: string;
|
|
1060
|
+
kind: LabelKind;
|
|
1061
|
+
}[];
|
|
1062
|
+
export type { DataGridAggregate, DataGridCellContext, DataGridCellEdit, DataGridCellType, DataGridColumn, DataGridEntry, DataGridExport, DataGridFile, DataGridFooterContext, DataGridFormulaContext, DataGridFormulaResult, DataGridLabels, DataGridLink, DataGridOption, DataGridPerson, DataGridPersonEditorContext, DataGridRow, DataGridSelectionMode, DataGridSort, DataGridSortDirection, DataGridZonedTime, DelimitedOptions, EditHistory, EditRecord, ExportFormat, ExportFormula, ExportTable, LabelFeatures, LabelKind, SearchSegment, TypeaheadState, XlsxOptions };
|
|
811
1063
|
//# sourceMappingURL=lilydesignsystem-angular-data-grid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lilydesignsystem-angular-data-grid.d.ts","names":[],"sources":["../../export-data.ts","../../cell-types.ts","../../data-grid.component.ts"],"mappings":";;KAYY;;;;;KAMA;EAAkB;EAAiB;;;wBAG/B,gBAAgB,iBAAiB,SAAS;;KAK9C;EACR;EACA;;KAGQ;;EAER;;EAEA;;EAEA;;EAEA;;EAEA;;KAGQ;;EAER;;EAEA;;qBAGS,YAAY,OAAO;;wBAahB,SAAS,gBAAgB;;wBAoBzB,YAAY,OAAO,aAAa,UAAS;wBAUzC,MAAM,OAAO,aAAa,UAAS,KAAK;wBAIxC,MAAM,OAAO,aAAa,UAAS,KAAK;;wBAoBxC,WAAW;;wBA0FX,OAAO,OAAO,aAAa,UAAS,cAAmB;wBAuCvD,MAAM,OAAO;;wBAmBb,SAAS;EAAW;EAAc,MAAM;MAAiB;;wBA4DzD,WAAW,OAAO,aAAa,QAAQ,cAAc;EAAW;EAAoB;IAA0B;;wBAO9G,eAAe,cAAc,QAAQ;;wBAMrC,aAAa,MAAM,MAAM;
|
|
1
|
+
{"version":3,"file":"lilydesignsystem-angular-data-grid.d.ts","names":[],"sources":["../../export-data.ts","../../cell-types.ts","../../data-grid.component.ts","../../search-text.ts","../../typeahead.ts","../../edit-history.ts","../../label-coverage.ts"],"mappings":"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"}
|