@sectile/dom 0.6.0 → 0.8.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 +3 -1
- package/dist/accordion.d.ts +0 -1
- package/dist/accordion.js +4 -1
- package/dist/accordion.js.map +1 -1
- package/dist/alert-dialog.d.ts +0 -1
- package/dist/calendar.d.ts +0 -1
- package/dist/calendar.js +4 -1
- package/dist/calendar.js.map +1 -1
- package/dist/carousel.d.ts +0 -1
- package/dist/carousel.js +5 -1
- package/dist/carousel.js.map +1 -1
- package/dist/cascade-list.d.ts +51 -0
- package/dist/cascade-list.js +166 -0
- package/dist/cascade-list.js.map +1 -0
- package/dist/cascade-select.d.ts +1 -2
- package/dist/cascade-select.js +20 -47
- package/dist/cascade-select.js.map +1 -1
- package/dist/checkbox-group.d.ts +0 -1
- package/dist/checkbox.d.ts +0 -1
- package/dist/color-picker.d.ts +0 -1
- package/dist/combobox.d.ts +0 -1
- package/dist/combobox.js +32 -2
- package/dist/combobox.js.map +1 -1
- package/dist/data-grid.d.ts +66 -0
- package/dist/data-grid.js +50 -0
- package/dist/data-grid.js.map +1 -0
- package/dist/data-table.d.ts +100 -0
- package/dist/data-table.js +359 -0
- package/dist/data-table.js.map +1 -0
- package/dist/data-tree-grid.d.ts +73 -0
- package/dist/data-tree-grid.js +53 -0
- package/dist/data-tree-grid.js.map +1 -0
- package/dist/date-field.d.ts +1 -2
- package/dist/date-field.js +17 -5
- package/dist/date-field.js.map +1 -1
- package/dist/date-picker.d.ts +3 -2
- package/dist/date-picker.js +13 -4
- package/dist/date-picker.js.map +1 -1
- package/dist/date-range-field.d.ts +0 -1
- package/dist/date-range-field.js +7 -2
- package/dist/date-range-field.js.map +1 -1
- package/dist/date-range-picker.d.ts +2 -2
- package/dist/date-range-picker.js +10 -5
- package/dist/date-range-picker.js.map +1 -1
- package/dist/date-time-field.d.ts +1 -2
- package/dist/date-time-field.js +15 -4
- package/dist/date-time-field.js.map +1 -1
- package/dist/date-time-picker.d.ts +2 -2
- package/dist/date-time-picker.js +23 -10
- package/dist/date-time-picker.js.map +1 -1
- package/dist/date-time-range-picker.d.ts +2 -2
- package/dist/date-time-range-picker.js +26 -12
- package/dist/date-time-range-picker.js.map +1 -1
- package/dist/dialog.d.ts +0 -1
- package/dist/disclosure.d.ts +0 -1
- package/dist/drawer.d.ts +0 -1
- package/dist/editable.d.ts +0 -1
- package/dist/feed.d.ts +0 -1
- package/dist/feed.js +4 -0
- package/dist/feed.js.map +1 -1
- package/dist/form.d.ts +51 -11
- package/dist/form.js +608 -58
- package/dist/form.js.map +1 -1
- package/dist/grid.d.ts +3 -3
- package/dist/grid.js +8 -4
- package/dist/grid.js.map +1 -1
- package/dist/index.d.ts +8 -30
- package/dist/index.js +4 -17
- package/dist/index.js.map +1 -1
- package/dist/interact-outside.d.ts +0 -1
- package/dist/internal/cascade-choice-binding.d.ts +34 -0
- package/dist/internal/cascade-choice-binding.js +112 -0
- package/dist/internal/cascade-choice-binding.js.map +1 -0
- package/dist/internal/checked-control.d.ts +4 -5
- package/dist/internal/checked-control.js +14 -27
- package/dist/internal/checked-control.js.map +1 -1
- package/dist/internal/controlled-field-input.d.ts +9 -0
- package/dist/internal/controlled-field-input.js +25 -0
- package/dist/internal/controlled-field-input.js.map +1 -0
- package/dist/internal/date-picker-cell.d.ts +0 -1
- package/dist/internal/delegated-event.d.ts +0 -1
- package/dist/internal/direction.d.ts +0 -1
- package/dist/internal/disabled-items.d.ts +0 -1
- package/dist/internal/disabled-items.js +2 -12
- package/dist/internal/disabled-items.js.map +1 -1
- package/dist/internal/exact-percentage.d.ts +2 -0
- package/dist/internal/exact-percentage.js +5 -0
- package/dist/internal/exact-percentage.js.map +1 -0
- package/dist/internal/interaction.d.ts +0 -1
- package/dist/internal/layer-binding.d.ts +0 -1
- package/dist/internal/layer-manager.d.ts +0 -1
- package/dist/internal/menu-control.d.ts +0 -1
- package/dist/internal/menu-control.js +48 -97
- package/dist/internal/menu-control.js.map +1 -1
- package/dist/internal/modal-effects.d.ts +0 -1
- package/dist/internal/picker-position.d.ts +7 -0
- package/dist/internal/picker-position.js +19 -0
- package/dist/internal/picker-position.js.map +1 -0
- package/dist/internal/popup-control.d.ts +2 -3
- package/dist/internal/popup-control.js +8 -10
- package/dist/internal/popup-control.js.map +1 -1
- package/dist/internal/position-connection.d.ts +22 -0
- package/dist/internal/position-connection.js +57 -0
- package/dist/internal/position-connection.js.map +1 -0
- package/dist/internal/positioning/engine.d.ts +65 -0
- package/dist/internal/positioning/engine.js +488 -0
- package/dist/internal/positioning/engine.js.map +1 -0
- package/dist/internal/reference-date.d.ts +0 -1
- package/dist/internal/result.d.ts +0 -3
- package/dist/internal/result.js.map +1 -1
- package/dist/internal/tabular-dom.d.ts +109 -0
- package/dist/internal/tabular-dom.js +316 -0
- package/dist/internal/tabular-dom.js.map +1 -0
- package/dist/internal/tabular-grid-dom.d.ts +151 -0
- package/dist/internal/tabular-grid-dom.js +524 -0
- package/dist/internal/tabular-grid-dom.js.map +1 -0
- package/dist/internal/text-element.d.ts +0 -1
- package/dist/listbox.d.ts +0 -1
- package/dist/listbox.js +5 -0
- package/dist/listbox.js.map +1 -1
- package/dist/menu-button.d.ts +0 -1
- package/dist/menu.d.ts +0 -1
- package/dist/menubar.d.ts +0 -1
- package/dist/meter-group.d.ts +39 -0
- package/dist/meter-group.js +182 -0
- package/dist/meter-group.js.map +1 -0
- package/dist/meter.d.ts +35 -0
- package/dist/meter.js +111 -0
- package/dist/meter.js.map +1 -0
- package/dist/month-picker.d.ts +0 -1
- package/dist/month-range-picker.d.ts +0 -1
- package/dist/multi-thumb-slider.d.ts +0 -1
- package/dist/navigation-menu.d.ts +0 -1
- package/dist/number-field.d.ts +0 -1
- package/dist/number-field.js +8 -1
- package/dist/number-field.js.map +1 -1
- package/dist/pagination.d.ts +0 -1
- package/dist/pin-input.d.ts +0 -1
- package/dist/pin-input.js +5 -3
- package/dist/pin-input.js.map +1 -1
- package/dist/popover.d.ts +6 -22
- package/dist/popover.js +6 -9
- package/dist/popover.js.map +1 -1
- package/dist/position.d.ts +19 -0
- package/dist/position.js +2 -0
- package/dist/position.js.map +1 -0
- package/dist/progress.d.ts +35 -0
- package/dist/progress.js +105 -0
- package/dist/progress.js.map +1 -0
- package/dist/quantity-field.d.ts +0 -1
- package/dist/quantity-field.js +12 -1
- package/dist/quantity-field.js.map +1 -1
- package/dist/radio-group.d.ts +0 -1
- package/dist/radio-group.js +13 -1
- package/dist/radio-group.js.map +1 -1
- package/dist/range-calendar.d.ts +0 -1
- package/dist/rating.d.ts +1 -2
- package/dist/rating.js +191 -27
- package/dist/rating.js.map +1 -1
- package/dist/reorder.d.ts +0 -1
- package/dist/select.d.ts +2 -15
- package/dist/select.js +7 -5
- package/dist/select.js.map +1 -1
- package/dist/slider.d.ts +0 -1
- package/dist/spin-button.d.ts +0 -1
- package/dist/stepper.d.ts +0 -1
- package/dist/switch.d.ts +0 -1
- package/dist/tabs.d.ts +0 -1
- package/dist/tabs.js +11 -2
- package/dist/tabs.js.map +1 -1
- package/dist/tabular.d.ts +3 -0
- package/dist/tabular.js +4 -0
- package/dist/tabular.js.map +1 -0
- package/dist/tags-input.d.ts +0 -1
- package/dist/tags-input.js +8 -4
- package/dist/tags-input.js.map +1 -1
- package/dist/text.d.ts +0 -1
- package/dist/time-field.d.ts +1 -2
- package/dist/time-field.js +11 -5
- package/dist/time-field.js.map +1 -1
- package/dist/time-range-field.d.ts +0 -1
- package/dist/time-range-field.js +3 -1
- package/dist/time-range-field.js.map +1 -1
- package/dist/timer.d.ts +0 -1
- package/dist/toast.d.ts +0 -1
- package/dist/toast.js +32 -5
- package/dist/toast.js.map +1 -1
- package/dist/toggle-button.d.ts +0 -1
- package/dist/toggle-group.d.ts +0 -1
- package/dist/toolbar.d.ts +0 -1
- package/dist/toolbar.js +4 -0
- package/dist/toolbar.js.map +1 -1
- package/dist/tooltip.d.ts +5 -23
- package/dist/tooltip.js +3 -6
- package/dist/tooltip.js.map +1 -1
- package/dist/tree-grid.d.ts +0 -1
- package/dist/tree-grid.js +14 -1
- package/dist/tree-grid.js.map +1 -1
- package/dist/tree-view.d.ts +0 -1
- package/dist/tree-view.js +4 -0
- package/dist/tree-view.js.map +1 -1
- package/dist/virtual.d.ts +2 -3
- package/dist/virtual.js +76 -28
- package/dist/virtual.js.map +1 -1
- package/dist/window-splitter.d.ts +0 -1
- package/dist/year-picker.d.ts +0 -1
- package/dist/year-range-picker.d.ts +0 -1
- package/package.json +135 -85
- package/dist/accordion.d.ts.map +0 -1
- package/dist/alert-dialog.d.ts.map +0 -1
- package/dist/calendar.d.ts.map +0 -1
- package/dist/carousel.d.ts.map +0 -1
- package/dist/cascade-select.d.ts.map +0 -1
- package/dist/checkbox-group.d.ts.map +0 -1
- package/dist/checkbox.d.ts.map +0 -1
- package/dist/color-picker.d.ts.map +0 -1
- package/dist/combobox.d.ts.map +0 -1
- package/dist/date-field.d.ts.map +0 -1
- package/dist/date-picker.d.ts.map +0 -1
- package/dist/date-range-field.d.ts.map +0 -1
- package/dist/date-range-picker.d.ts.map +0 -1
- package/dist/date-time-field.d.ts.map +0 -1
- package/dist/date-time-picker.d.ts.map +0 -1
- package/dist/date-time-range-picker.d.ts.map +0 -1
- package/dist/dialog.d.ts.map +0 -1
- package/dist/disclosure.d.ts.map +0 -1
- package/dist/drawer.d.ts.map +0 -1
- package/dist/editable.d.ts.map +0 -1
- package/dist/feed.d.ts.map +0 -1
- package/dist/form.d.ts.map +0 -1
- package/dist/grid.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/interact-outside.d.ts.map +0 -1
- package/dist/internal/checked-control.d.ts.map +0 -1
- package/dist/internal/date-picker-cell.d.ts.map +0 -1
- package/dist/internal/delegated-event.d.ts.map +0 -1
- package/dist/internal/direction.d.ts.map +0 -1
- package/dist/internal/disabled-items.d.ts.map +0 -1
- package/dist/internal/floating-position.d.ts +0 -26
- package/dist/internal/floating-position.d.ts.map +0 -1
- package/dist/internal/floating-position.js +0 -107
- package/dist/internal/floating-position.js.map +0 -1
- package/dist/internal/interaction.d.ts.map +0 -1
- package/dist/internal/layer-binding.d.ts.map +0 -1
- package/dist/internal/layer-manager.d.ts.map +0 -1
- package/dist/internal/menu-control.d.ts.map +0 -1
- package/dist/internal/modal-effects.d.ts.map +0 -1
- package/dist/internal/popup-control.d.ts.map +0 -1
- package/dist/internal/reference-date.d.ts.map +0 -1
- package/dist/internal/result.d.ts.map +0 -1
- package/dist/internal/text-element.d.ts.map +0 -1
- package/dist/listbox.d.ts.map +0 -1
- package/dist/menu-button.d.ts.map +0 -1
- package/dist/menu.d.ts.map +0 -1
- package/dist/menubar.d.ts.map +0 -1
- package/dist/month-picker.d.ts.map +0 -1
- package/dist/month-range-picker.d.ts.map +0 -1
- package/dist/multi-thumb-slider.d.ts.map +0 -1
- package/dist/navigation-menu.d.ts.map +0 -1
- package/dist/number-field.d.ts.map +0 -1
- package/dist/pagination.d.ts.map +0 -1
- package/dist/pin-input.d.ts.map +0 -1
- package/dist/popover.d.ts.map +0 -1
- package/dist/quantity-field.d.ts.map +0 -1
- package/dist/radio-group.d.ts.map +0 -1
- package/dist/range-calendar.d.ts.map +0 -1
- package/dist/rating.d.ts.map +0 -1
- package/dist/reorder.d.ts.map +0 -1
- package/dist/select.d.ts.map +0 -1
- package/dist/slider.d.ts.map +0 -1
- package/dist/spin-button.d.ts.map +0 -1
- package/dist/stepper.d.ts.map +0 -1
- package/dist/switch.d.ts.map +0 -1
- package/dist/tabs.d.ts.map +0 -1
- package/dist/tags-input.d.ts.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/time-field.d.ts.map +0 -1
- package/dist/time-range-field.d.ts.map +0 -1
- package/dist/timer.d.ts.map +0 -1
- package/dist/toast.d.ts.map +0 -1
- package/dist/toggle-button.d.ts.map +0 -1
- package/dist/toggle-group.d.ts.map +0 -1
- package/dist/toolbar.d.ts.map +0 -1
- package/dist/tooltip.d.ts.map +0 -1
- package/dist/tree-grid.d.ts.map +0 -1
- package/dist/tree-view.d.ts.map +0 -1
- package/dist/virtual.d.ts.map +0 -1
- package/dist/window-splitter.d.ts.map +0 -1
- package/dist/year-picker.d.ts.map +0 -1
- package/dist/year-range-picker.d.ts.map +0 -1
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { unwrap } from '@sectile/core/result';
|
|
2
|
+
import { tryCreateDataTable as tryCreateSemanticDataTable, } from '@sectile/tabular/data-table';
|
|
3
|
+
import { BindingScope, ColumnSizeStore, allMatchingSelectionState, bindColumnResizeHandle, bindEvent, clearAttributes, columnIndex, domFailure, findProjectedRow, headerElementID, leafHeaderID, ok, queryWithFilter, queryWithSort, readEditorValue, resolveHeaderReference, rowSelected, rowSelectionActivation, setEditorAttributes, setColumnInlineSize, setBulkSelectionControlAttributes, setRowSelectionControlAttributes, validateColumnSizeOptions, validateRegistrationGeneration, } from './internal/tabular-dom.js';
|
|
4
|
+
export function createDataTable(options) {
|
|
5
|
+
return unwrap(tryCreateDataTable(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateDataTable(options) {
|
|
8
|
+
const host = validateColumnSizeOptions(options);
|
|
9
|
+
if (!host.ok)
|
|
10
|
+
return host;
|
|
11
|
+
const semantic = tryCreateSemanticDataTable(options);
|
|
12
|
+
if (!semantic.ok)
|
|
13
|
+
return semantic;
|
|
14
|
+
return ok(new DOMDataTable({ ...options, controller: semantic.value }, true));
|
|
15
|
+
}
|
|
16
|
+
export function connectDataTable(options) {
|
|
17
|
+
return new DOMDataTable(options, false);
|
|
18
|
+
}
|
|
19
|
+
class DOMDataTable {
|
|
20
|
+
controller;
|
|
21
|
+
#options;
|
|
22
|
+
#ownsController;
|
|
23
|
+
#scope = new BindingScope();
|
|
24
|
+
#columnSizes;
|
|
25
|
+
#rows = new Map();
|
|
26
|
+
#cells = new Map();
|
|
27
|
+
#refreshers = new Set();
|
|
28
|
+
#unsubscribeCommands;
|
|
29
|
+
#projectionGeneration;
|
|
30
|
+
#selectionAnchor = null;
|
|
31
|
+
constructor(options, ownsController) {
|
|
32
|
+
this.#options = options;
|
|
33
|
+
this.controller = options.controller;
|
|
34
|
+
this.#ownsController = ownsController;
|
|
35
|
+
this.#columnSizes = new ColumnSizeStore(options);
|
|
36
|
+
this.#projectionGeneration = this.controller.getProjection().generation;
|
|
37
|
+
this.#unsubscribeCommands = this.controller.subscribeCommands((command) => options.onCommand?.(command));
|
|
38
|
+
this.setTableAttributes();
|
|
39
|
+
}
|
|
40
|
+
getSnapshot() { return this.controller.getSnapshot(); }
|
|
41
|
+
getProjection() { return this.controller.getProjection(); }
|
|
42
|
+
getColumnSizeState() { return this.#columnSizes.getState(); }
|
|
43
|
+
syncControlledValues(values) {
|
|
44
|
+
const sizes = this.#columnSizes.synchronize(values.columnSizes);
|
|
45
|
+
if (!sizes.ok)
|
|
46
|
+
return sizes;
|
|
47
|
+
const { columnSizes: _columnSizes, ...semanticValues } = values;
|
|
48
|
+
const result = this.controller.syncControlledValues(semanticValues);
|
|
49
|
+
if (result.ok)
|
|
50
|
+
this.#updated();
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
synchronizeView(response) {
|
|
54
|
+
const result = this.controller.synchronizeView(response);
|
|
55
|
+
if (result.ok)
|
|
56
|
+
this.#updated();
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
requestView() {
|
|
60
|
+
const result = this.controller.requestView();
|
|
61
|
+
if (result.ok)
|
|
62
|
+
this.#updated();
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
abandonRequest(requestID) {
|
|
66
|
+
const result = this.controller.abandonRequest(requestID);
|
|
67
|
+
if (result.ok)
|
|
68
|
+
this.#updated();
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
handleEvent(event) {
|
|
72
|
+
if (!this.#scope.active)
|
|
73
|
+
return false;
|
|
74
|
+
const result = this.controller.dispatch(event);
|
|
75
|
+
if (result.ok)
|
|
76
|
+
this.#updated();
|
|
77
|
+
return result.ok;
|
|
78
|
+
}
|
|
79
|
+
setTableAttributes(element = this.#options.table) {
|
|
80
|
+
element.setAttribute('data-scope', 'data-table');
|
|
81
|
+
element.setAttribute('data-part', 'root');
|
|
82
|
+
element.removeAttribute('role');
|
|
83
|
+
}
|
|
84
|
+
setHeaderCellAttributes(element, options) {
|
|
85
|
+
const resolved = resolveHeaderReference(this.getSnapshot(), options);
|
|
86
|
+
const metric = resolved.metric;
|
|
87
|
+
element.setAttribute('data-part', 'column-header');
|
|
88
|
+
element.setAttribute('data-header-node-id', resolved.headerNodeID);
|
|
89
|
+
element.id = headerElementID(resolved.headerNodeID);
|
|
90
|
+
if (metric === undefined) {
|
|
91
|
+
element.colSpan = 1;
|
|
92
|
+
element.rowSpan = 1;
|
|
93
|
+
element.removeAttribute('aria-sort');
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
element.colSpan = metric.colSpan;
|
|
97
|
+
element.rowSpan = metric.rowSpan;
|
|
98
|
+
if (metric.columnID === null) {
|
|
99
|
+
element.scope = 'colgroup';
|
|
100
|
+
element.removeAttribute('aria-sort');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
element.scope = 'col';
|
|
104
|
+
const sort = this.getSnapshot().state.query.sort.find((entry) => entry.columnID === metric.columnID);
|
|
105
|
+
if (sort === undefined)
|
|
106
|
+
element.removeAttribute('aria-sort');
|
|
107
|
+
else
|
|
108
|
+
element.setAttribute('aria-sort', sort.direction);
|
|
109
|
+
setColumnInlineSize(element, metric.columnID, this.#columnSizes.getState());
|
|
110
|
+
}
|
|
111
|
+
setRowAttributes(element, options) {
|
|
112
|
+
const row = findProjectedRow(this.getSnapshot(), options.rowID);
|
|
113
|
+
element.setAttribute('data-part', 'row');
|
|
114
|
+
element.setAttribute('data-row-id', options.rowID);
|
|
115
|
+
if (row?.kind === 'group') {
|
|
116
|
+
element.setAttribute('aria-level', String(row.depth + 1));
|
|
117
|
+
element.setAttribute('aria-expanded', String(row.expanded));
|
|
118
|
+
}
|
|
119
|
+
else
|
|
120
|
+
clearAttributes(element, ['aria-level', 'aria-expanded']);
|
|
121
|
+
}
|
|
122
|
+
setCellAttributes(element, options) {
|
|
123
|
+
element.setAttribute('data-part', 'cell');
|
|
124
|
+
element.setAttribute('data-row-id', options.cell.rowID);
|
|
125
|
+
element.setAttribute('data-column-id', options.cell.columnID);
|
|
126
|
+
const headerID = leafHeaderID(this.getSnapshot(), options.cell.columnID);
|
|
127
|
+
if (headerID === null)
|
|
128
|
+
element.removeAttribute('headers');
|
|
129
|
+
else
|
|
130
|
+
element.setAttribute('headers', headerID);
|
|
131
|
+
setColumnInlineSize(element, options.cell.columnID, this.#columnSizes.getState());
|
|
132
|
+
}
|
|
133
|
+
registerRow(element, options) {
|
|
134
|
+
const valid = validateRegistrationGeneration(this.getProjection().generation, options);
|
|
135
|
+
if (!valid.ok)
|
|
136
|
+
return valid;
|
|
137
|
+
if (findProjectedRow(this.getSnapshot(), options.rowID) === undefined)
|
|
138
|
+
return domFailure('profile-view-mismatch', 'Registered DataTable row is not projected.', { rowID: options.rowID });
|
|
139
|
+
const current = this.#rows.get(options.rowID);
|
|
140
|
+
if (current !== undefined && current.element !== element)
|
|
141
|
+
return domFailure('profile-view-mismatch', 'DataTable row is already registered.', { rowID: options.rowID });
|
|
142
|
+
this.#rows.set(options.rowID, { element, options });
|
|
143
|
+
this.setRowAttributes(element, options);
|
|
144
|
+
return ok(this.#scope.retain(() => { if (this.#rows.get(options.rowID)?.element === element)
|
|
145
|
+
this.#rows.delete(options.rowID); }));
|
|
146
|
+
}
|
|
147
|
+
registerCell(element, options) {
|
|
148
|
+
const valid = validateRegistrationGeneration(this.getProjection().generation, options);
|
|
149
|
+
if (!valid.ok)
|
|
150
|
+
return valid;
|
|
151
|
+
if (!this.#hasCell(options.cell))
|
|
152
|
+
return domFailure('profile-view-mismatch', 'Registered DataTable cell is not projected.', { cell: options.cell });
|
|
153
|
+
const key = JSON.stringify([options.cell.rowID, options.cell.columnID]);
|
|
154
|
+
const current = this.#cells.get(key);
|
|
155
|
+
if (current !== undefined && current.element !== element)
|
|
156
|
+
return domFailure('profile-view-mismatch', 'DataTable cell is already registered.', { cell: options.cell });
|
|
157
|
+
this.#cells.set(key, { element, options });
|
|
158
|
+
this.setCellAttributes(element, options);
|
|
159
|
+
return ok(this.#scope.retain(() => { if (this.#cells.get(key)?.element === element)
|
|
160
|
+
this.#cells.delete(key); }));
|
|
161
|
+
}
|
|
162
|
+
bindSortTrigger(element, options) {
|
|
163
|
+
element.setAttribute('data-part', 'sort-trigger');
|
|
164
|
+
element.setAttribute('data-column-id', options.columnID);
|
|
165
|
+
const update = () => {
|
|
166
|
+
const current = this.getSnapshot().state.query.sort.find((entry) => entry.columnID === options.columnID)?.direction;
|
|
167
|
+
element.setAttribute('aria-pressed', String(current !== undefined));
|
|
168
|
+
};
|
|
169
|
+
const dispose = bindEvent(this.#scope, element, 'click', () => {
|
|
170
|
+
const query = this.getSnapshot().state.query;
|
|
171
|
+
const current = query.sort.find((entry) => entry.columnID === options.columnID)?.direction;
|
|
172
|
+
const direction = current === undefined ? 'ascending' : current === 'ascending' ? 'descending' : null;
|
|
173
|
+
this.handleEvent({ type: 'set-query', query: queryWithSort(query, options.columnID, options.comparator, direction) });
|
|
174
|
+
});
|
|
175
|
+
this.#refreshers.add(update);
|
|
176
|
+
update();
|
|
177
|
+
return this.#scope.retain(() => { dispose(); this.#refreshers.delete(update); });
|
|
178
|
+
}
|
|
179
|
+
bindFilterControl(element, options) {
|
|
180
|
+
element.setAttribute('data-part', 'filter-control');
|
|
181
|
+
if (options.scope === 'column')
|
|
182
|
+
element.setAttribute('data-column-id', options.columnID);
|
|
183
|
+
const listener = () => {
|
|
184
|
+
const query = this.getSnapshot().state.query;
|
|
185
|
+
this.handleEvent({
|
|
186
|
+
type: 'set-query',
|
|
187
|
+
query: queryWithFilter(query, options.id, options.scope, options.predicate, element.value, options.scope === 'column' ? options.columnID : undefined),
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
return bindEvent(this.#scope, element, 'input', listener);
|
|
191
|
+
}
|
|
192
|
+
bindSelectionControl(element, options) {
|
|
193
|
+
const input = element.tagName === 'INPUT' ? element : null;
|
|
194
|
+
if (input !== null) {
|
|
195
|
+
input.type = 'checkbox';
|
|
196
|
+
input.value = options.value;
|
|
197
|
+
if (options.form === undefined)
|
|
198
|
+
input.removeAttribute('form');
|
|
199
|
+
else
|
|
200
|
+
input.setAttribute('form', options.form);
|
|
201
|
+
}
|
|
202
|
+
element.setAttribute('data-part', 'selection-control');
|
|
203
|
+
element.setAttribute('data-row-id', options.rowID);
|
|
204
|
+
const update = () => {
|
|
205
|
+
const selection = this.getSnapshot().state.rowSelection;
|
|
206
|
+
setRowSelectionControlAttributes(element, rowSelected(selection, options.rowID), options.disabled === true);
|
|
207
|
+
if (input !== null) {
|
|
208
|
+
if (selection.kind === 'explicit-rows')
|
|
209
|
+
input.name = options.name;
|
|
210
|
+
else
|
|
211
|
+
input.removeAttribute('name');
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const activate = (shiftKey) => {
|
|
215
|
+
if (options.disabled === true)
|
|
216
|
+
return;
|
|
217
|
+
const projection = this.getProjection();
|
|
218
|
+
const activation = rowSelectionActivation(projection.rowSelection, projection.generation, this.#selectionAnchor, options.rowID, shiftKey);
|
|
219
|
+
if (this.handleEvent(activation.event))
|
|
220
|
+
this.#selectionAnchor = activation.anchor;
|
|
221
|
+
else if (activation.event.type === 'set-row-selection-range') {
|
|
222
|
+
const fallback = rowSelectionActivation(projection.rowSelection, projection.generation, null, options.rowID, false);
|
|
223
|
+
if (this.handleEvent(fallback.event))
|
|
224
|
+
this.#selectionAnchor = fallback.anchor;
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
const disposers = [
|
|
228
|
+
bindEvent(this.#scope, element, 'click', (event) => activate(event.shiftKey)),
|
|
229
|
+
bindEvent(this.#scope, element, 'keydown', (event) => {
|
|
230
|
+
if (event.key !== ' ' || !event.shiftKey || event.ctrlKey || event.metaKey || event.altKey || event.isComposing)
|
|
231
|
+
return;
|
|
232
|
+
activate(true);
|
|
233
|
+
event.preventDefault();
|
|
234
|
+
}),
|
|
235
|
+
];
|
|
236
|
+
this.#refreshers.add(update);
|
|
237
|
+
update();
|
|
238
|
+
return this.#scope.retain(() => { for (const dispose of disposers)
|
|
239
|
+
dispose(); this.#refreshers.delete(update); });
|
|
240
|
+
}
|
|
241
|
+
bindBulkSelectionControl(element, options) {
|
|
242
|
+
element.setAttribute('data-part', 'bulk-selection-control');
|
|
243
|
+
const update = () => {
|
|
244
|
+
if (options.target.kind !== 'all-matching') {
|
|
245
|
+
element.setAttribute('aria-disabled', String(options.disabled === true));
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
setBulkSelectionControlAttributes(element, allMatchingSelectionState(this.getSnapshot()), options.disabled === true);
|
|
249
|
+
};
|
|
250
|
+
const dispose = bindEvent(this.#scope, element, 'click', () => {
|
|
251
|
+
if (options.disabled === true)
|
|
252
|
+
return;
|
|
253
|
+
if (options.target.kind === 'all-matching') {
|
|
254
|
+
const event = allMatchingSelectionState(this.getSnapshot()) === 'checked'
|
|
255
|
+
? { type: 'set-row-selection', selection: { kind: 'explicit-rows', rowIDs: [] } }
|
|
256
|
+
: { type: 'select-all-matching' };
|
|
257
|
+
this.handleEvent(event);
|
|
258
|
+
}
|
|
259
|
+
else
|
|
260
|
+
this.handleEvent({ type: 'request-group-leaf-selection', groupID: options.target.groupID });
|
|
261
|
+
});
|
|
262
|
+
this.#refreshers.add(update);
|
|
263
|
+
update();
|
|
264
|
+
return this.#scope.retain(() => { dispose(); this.#refreshers.delete(update); });
|
|
265
|
+
}
|
|
266
|
+
bindDisclosure(element, options) {
|
|
267
|
+
element.setAttribute('data-part', 'disclosure');
|
|
268
|
+
element.setAttribute('data-row-id', options.rowID);
|
|
269
|
+
const update = () => {
|
|
270
|
+
const open = this.getSnapshot().state.expansion.includes(options.rowID);
|
|
271
|
+
element.setAttribute('aria-expanded', String(open));
|
|
272
|
+
element.setAttribute('aria-disabled', String(options.disabled === true));
|
|
273
|
+
};
|
|
274
|
+
const dispose = bindEvent(this.#scope, element, 'click', () => {
|
|
275
|
+
if (options.disabled === true)
|
|
276
|
+
return;
|
|
277
|
+
const expansion = this.getSnapshot().state.expansion;
|
|
278
|
+
const next = expansion.includes(options.rowID) ? expansion.filter((id) => id !== options.rowID) : [...expansion, options.rowID];
|
|
279
|
+
this.handleEvent({ type: 'set-expansion', expansion: next });
|
|
280
|
+
});
|
|
281
|
+
this.#refreshers.add(update);
|
|
282
|
+
update();
|
|
283
|
+
return this.#scope.retain(() => { dispose(); this.#refreshers.delete(update); });
|
|
284
|
+
}
|
|
285
|
+
bindEditor(element, options) {
|
|
286
|
+
setEditorAttributes(element, options, 'editor');
|
|
287
|
+
let composing = false;
|
|
288
|
+
const commit = () => {
|
|
289
|
+
if (composing || !this.#scope.active || options.disabled === true || options.readOnly === true)
|
|
290
|
+
return false;
|
|
291
|
+
const value = readEditorValue(element, options.parseValue);
|
|
292
|
+
element.setAttribute('aria-invalid', String(!value.ok));
|
|
293
|
+
return value.ok && this.handleEvent({ type: 'request-value-commit', cell: options.cell, value: value.value });
|
|
294
|
+
};
|
|
295
|
+
const keydown = (event) => {
|
|
296
|
+
if (event.isComposing || composing || event.key !== 'Enter' || (element.tagName === 'TEXTAREA' && event.shiftKey))
|
|
297
|
+
return;
|
|
298
|
+
if (commit())
|
|
299
|
+
event.preventDefault();
|
|
300
|
+
};
|
|
301
|
+
const input = () => element.setAttribute('aria-invalid', 'false');
|
|
302
|
+
const change = () => { if (options.commitOnChange !== false)
|
|
303
|
+
commit(); };
|
|
304
|
+
const blur = () => { if (options.commitOnBlur === true)
|
|
305
|
+
commit(); };
|
|
306
|
+
const compositionStart = () => { composing = true; };
|
|
307
|
+
const compositionEnd = () => { composing = false; };
|
|
308
|
+
const disposers = [
|
|
309
|
+
bindEvent(this.#scope, element, 'keydown', keydown),
|
|
310
|
+
bindEvent(this.#scope, element, 'input', input),
|
|
311
|
+
bindEvent(this.#scope, element, 'change', change),
|
|
312
|
+
bindEvent(this.#scope, element, 'blur', blur),
|
|
313
|
+
bindEvent(this.#scope, element, 'compositionstart', compositionStart),
|
|
314
|
+
bindEvent(this.#scope, element, 'compositionend', compositionEnd),
|
|
315
|
+
];
|
|
316
|
+
return this.#scope.retain(() => { for (const dispose of disposers)
|
|
317
|
+
dispose(); });
|
|
318
|
+
}
|
|
319
|
+
bindColumnResizeHandle(element, options) {
|
|
320
|
+
return bindColumnResizeHandle(this.#scope, element, this.#columnSizes, options, () => this.#updated());
|
|
321
|
+
}
|
|
322
|
+
refresh() {
|
|
323
|
+
if (!this.#scope.active)
|
|
324
|
+
return;
|
|
325
|
+
const generation = this.getProjection().generation;
|
|
326
|
+
if (generation !== this.#projectionGeneration) {
|
|
327
|
+
this.#projectionGeneration = generation;
|
|
328
|
+
this.#selectionAnchor = null;
|
|
329
|
+
}
|
|
330
|
+
this.setTableAttributes();
|
|
331
|
+
for (const registration of this.#rows.values())
|
|
332
|
+
this.setRowAttributes(registration.element, registration.options);
|
|
333
|
+
for (const registration of this.#cells.values())
|
|
334
|
+
this.setCellAttributes(registration.element, registration.options);
|
|
335
|
+
for (const refresh of this.#refreshers)
|
|
336
|
+
refresh();
|
|
337
|
+
}
|
|
338
|
+
disconnect() {
|
|
339
|
+
if (!this.#scope.active)
|
|
340
|
+
return;
|
|
341
|
+
this.#scope.disconnect();
|
|
342
|
+
this.#unsubscribeCommands();
|
|
343
|
+
this.#rows.clear();
|
|
344
|
+
this.#cells.clear();
|
|
345
|
+
this.#refreshers.clear();
|
|
346
|
+
this.#selectionAnchor = null;
|
|
347
|
+
clearAttributes(this.#options.table, ['data-scope', 'data-part']);
|
|
348
|
+
if (this.#ownsController)
|
|
349
|
+
this.controller.dispose();
|
|
350
|
+
}
|
|
351
|
+
#updated() {
|
|
352
|
+
this.refresh();
|
|
353
|
+
this.#options.onSnapshotChange?.(this.getSnapshot());
|
|
354
|
+
}
|
|
355
|
+
#hasCell(cell) {
|
|
356
|
+
return findProjectedRow(this.getSnapshot(), cell.rowID) !== undefined && columnIndex(this.getSnapshot(), cell.columnID) > 0;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=data-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table.js","sourceRoot":"","sources":["../src/data-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type DataTreeGridCommand as SemanticDataTreeGridCommand, type DataTreeGridController as SemanticDataTreeGridController, type DataTreeGridEvent, type DataTreeGridOptions as SemanticDataTreeGridOptions, type DataTreeGridProjection, type DataTreeGridState } from '@sectile/tabular/data-tree-grid';
|
|
2
|
+
import type { TabularCellAddress, TabularResult, TabularRowID, TabularViewResponse } from '@sectile/tabular';
|
|
3
|
+
import { type GridDOMBulkSelectionControlOptions, type GridDOMCellOptions, type GridDOMColumnHeaderOptions, type GridDOMConnectionOptions, type GridDOMControlledValues, type GridDOMDisclosureOptions, type GridDOMEditorOptions, type GridDOMFilterControlOptions, type GridDOMRowOptions, type GridDOMSelectionControlOptions, type GridDOMSortTriggerOptions, type GridRevealCellCommand, type GridRevealRowCommand } from './internal/tabular-grid-dom.js';
|
|
4
|
+
import type { TabularDOMColumnResizeHandleOptions, TabularDOMColumnSizeState, TabularDOMEditorElement, TabularDOMEditorValueParser } from './internal/tabular-dom.js';
|
|
5
|
+
export type DataTreeGridDOMCommand = SemanticDataTreeGridCommand | GridRevealCellCommand | GridRevealRowCommand;
|
|
6
|
+
export type DataTreeGridDOMCommandHandler = (command: DataTreeGridDOMCommand) => void;
|
|
7
|
+
export type DataTreeGridSnapshotChangeHandler = (snapshot: DataTreeGridState) => void;
|
|
8
|
+
export type DataTreeGridColumnSizeChangeHandler = (state: DataTreeGridColumnSizeState) => void;
|
|
9
|
+
export type DataTreeGridColumnSizeState = TabularDOMColumnSizeState;
|
|
10
|
+
export interface DataTreeGridControlledValues extends GridDOMControlledValues {
|
|
11
|
+
}
|
|
12
|
+
export type DataTreeGridColumnHeaderOptions = GridDOMColumnHeaderOptions;
|
|
13
|
+
export interface DataTreeGridRowOptions extends GridDOMRowOptions {
|
|
14
|
+
}
|
|
15
|
+
export interface DataTreeGridTreeRowOptions extends GridDOMRowOptions {
|
|
16
|
+
}
|
|
17
|
+
export interface DataTreeGridCellOptions extends GridDOMCellOptions {
|
|
18
|
+
}
|
|
19
|
+
export interface DataTreeGridSortTriggerOptions extends GridDOMSortTriggerOptions {
|
|
20
|
+
}
|
|
21
|
+
export type DataTreeGridFilterControlOptions = GridDOMFilterControlOptions;
|
|
22
|
+
export interface DataTreeGridRowSelectionControlOptions extends GridDOMSelectionControlOptions {
|
|
23
|
+
}
|
|
24
|
+
export type DataTreeGridBulkSelectionControlOptions = GridDOMBulkSelectionControlOptions;
|
|
25
|
+
export interface DataTreeGridRowDisclosureOptions extends GridDOMDisclosureOptions {
|
|
26
|
+
}
|
|
27
|
+
export type DataTreeGridColumnResizeHandleOptions = TabularDOMColumnResizeHandleOptions;
|
|
28
|
+
export type DataTreeGridEditorElement = TabularDOMEditorElement;
|
|
29
|
+
export type DataTreeGridEditorValueParser = TabularDOMEditorValueParser;
|
|
30
|
+
export interface DataTreeGridEditorOptions extends GridDOMEditorOptions {
|
|
31
|
+
}
|
|
32
|
+
export interface DataTreeGridConnectionOptions extends Omit<GridDOMConnectionOptions<SemanticDataTreeGridController, SemanticDataTreeGridCommand>, 'onCommand' | 'onSnapshotChange'> {
|
|
33
|
+
readonly controller: SemanticDataTreeGridController;
|
|
34
|
+
readonly onCommand?: DataTreeGridDOMCommandHandler;
|
|
35
|
+
readonly onSnapshotChange?: DataTreeGridSnapshotChangeHandler;
|
|
36
|
+
}
|
|
37
|
+
export interface DataTreeGridOptions extends SemanticDataTreeGridOptions, Omit<DataTreeGridConnectionOptions, 'controller'> {
|
|
38
|
+
}
|
|
39
|
+
export interface DataTreeGridConnection {
|
|
40
|
+
readonly controller: SemanticDataTreeGridController;
|
|
41
|
+
getSnapshot(): DataTreeGridState;
|
|
42
|
+
getProjection(): DataTreeGridProjection;
|
|
43
|
+
getColumnSizeState(): DataTreeGridColumnSizeState;
|
|
44
|
+
syncControlledValues(values: DataTreeGridControlledValues): TabularResult<DataTreeGridState>;
|
|
45
|
+
synchronizeView(response: TabularViewResponse): TabularResult<DataTreeGridState>;
|
|
46
|
+
requestView(): TabularResult<DataTreeGridState>;
|
|
47
|
+
abandonRequest(requestID: number): TabularResult<DataTreeGridState>;
|
|
48
|
+
handleEvent(event: DataTreeGridEvent): boolean;
|
|
49
|
+
setGridAttributes(element?: HTMLElement): void;
|
|
50
|
+
setColumnHeaderAttributes(element: HTMLElement, options: DataTreeGridColumnHeaderOptions): void;
|
|
51
|
+
setRowAttributes(element: HTMLElement, options: DataTreeGridRowOptions): void;
|
|
52
|
+
setTreeRowAttributes(element: HTMLElement, options: DataTreeGridTreeRowOptions): void;
|
|
53
|
+
setCellAttributes(element: HTMLElement, options: DataTreeGridCellOptions): void;
|
|
54
|
+
registerRow(element: HTMLElement, options: DataTreeGridRowOptions): TabularResult<() => void>;
|
|
55
|
+
registerCell(element: HTMLElement, options: DataTreeGridCellOptions): TabularResult<() => void>;
|
|
56
|
+
bindSortTrigger(element: HTMLElement, options: DataTreeGridSortTriggerOptions): () => void;
|
|
57
|
+
bindFilterControl(element: HTMLInputElement | HTMLSelectElement, options: DataTreeGridFilterControlOptions): () => void;
|
|
58
|
+
bindRowSelectionControl(element: HTMLElement, options: DataTreeGridRowSelectionControlOptions): () => void;
|
|
59
|
+
bindBulkSelectionControl(element: HTMLElement, options: DataTreeGridBulkSelectionControlOptions): () => void;
|
|
60
|
+
bindRowDisclosure(element: HTMLElement, options: DataTreeGridRowDisclosureOptions): () => void;
|
|
61
|
+
bindEditor(element: DataTreeGridEditorElement, options: DataTreeGridEditorOptions): () => void;
|
|
62
|
+
bindColumnResizeHandle(element: HTMLElement, options: DataTreeGridColumnResizeHandleOptions): () => void;
|
|
63
|
+
requestRevealCell(cell: TabularCellAddress, expectedProjectionGeneration?: number): boolean;
|
|
64
|
+
requestRevealRow(rowID: TabularRowID, expectedProjectionGeneration?: number): boolean;
|
|
65
|
+
focusCurrent(): void;
|
|
66
|
+
refresh(): void;
|
|
67
|
+
disconnect(): void;
|
|
68
|
+
}
|
|
69
|
+
export declare function createDataTreeGrid(options: DataTreeGridOptions): DataTreeGridConnection;
|
|
70
|
+
export declare function tryCreateDataTreeGrid(options: DataTreeGridOptions): TabularResult<DataTreeGridConnection>;
|
|
71
|
+
export declare function connectDataTreeGrid(options: DataTreeGridConnectionOptions): DataTreeGridConnection;
|
|
72
|
+
export type { DataTreeGridCommand, DataTreeGridController, DataTreeGridCursorState, DataTreeGridEditState, DataTreeGridEvent, DataTreeGridExpansionState, DataTreeGridProjection, DataTreeGridRow, DataTreeGridState, DataTreeGridUpdate, } from '@sectile/tabular/data-tree-grid';
|
|
73
|
+
export type { TabularCellAddress, TabularColumnDefinition, TabularColumnID, TabularError, TabularHeaderNode, TabularQuery, TabularRow, TabularRowSelection, TabularViewResponse, } from '@sectile/tabular';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { unwrap } from '@sectile/core/result';
|
|
2
|
+
import { tryCreateDataTreeGrid as tryCreateSemanticDataTreeGrid, } from '@sectile/tabular/data-tree-grid';
|
|
3
|
+
import { DOMTabularGrid, } from './internal/tabular-grid-dom.js';
|
|
4
|
+
import { validateColumnSizeOptions } from './internal/tabular-dom.js';
|
|
5
|
+
export function createDataTreeGrid(options) {
|
|
6
|
+
return unwrap(tryCreateDataTreeGrid(options));
|
|
7
|
+
}
|
|
8
|
+
export function tryCreateDataTreeGrid(options) {
|
|
9
|
+
const host = validateColumnSizeOptions(options);
|
|
10
|
+
if (!host.ok)
|
|
11
|
+
return host;
|
|
12
|
+
const semantic = tryCreateSemanticDataTreeGrid(options);
|
|
13
|
+
if (!semantic.ok)
|
|
14
|
+
return semantic;
|
|
15
|
+
return { ok: true, value: createDataTreeGridConnection({ ...options, controller: semantic.value }, true) };
|
|
16
|
+
}
|
|
17
|
+
export function connectDataTreeGrid(options) {
|
|
18
|
+
return createDataTreeGridConnection(options, false);
|
|
19
|
+
}
|
|
20
|
+
function createDataTreeGridConnection(options, ownsController) {
|
|
21
|
+
const base = new DOMTabularGrid(options, true, ownsController);
|
|
22
|
+
return Object.freeze({
|
|
23
|
+
controller: options.controller,
|
|
24
|
+
getSnapshot: () => base.getSnapshot(),
|
|
25
|
+
getProjection: () => base.getProjection(),
|
|
26
|
+
getColumnSizeState: () => base.getColumnSizeState(),
|
|
27
|
+
syncControlledValues: (values) => base.syncControlledValues(values),
|
|
28
|
+
synchronizeView: (response) => base.synchronizeView(response),
|
|
29
|
+
requestView: () => base.requestView(),
|
|
30
|
+
abandonRequest: (requestID) => base.abandonRequest(requestID),
|
|
31
|
+
handleEvent: (event) => base.handleEvent(event),
|
|
32
|
+
setGridAttributes: (element) => base.setGridAttributes(element),
|
|
33
|
+
setColumnHeaderAttributes: (element, value) => base.setColumnHeaderAttributes(element, value),
|
|
34
|
+
setRowAttributes: (element, value) => base.setRowAttributes(element, value),
|
|
35
|
+
setTreeRowAttributes: (element, value) => base.setRowAttributes(element, value),
|
|
36
|
+
setCellAttributes: (element, value) => base.setCellAttributes(element, value),
|
|
37
|
+
registerRow: (element, value) => base.registerRow(element, value),
|
|
38
|
+
registerCell: (element, value) => base.registerCell(element, value),
|
|
39
|
+
bindSortTrigger: (element, value) => base.bindSortTrigger(element, value),
|
|
40
|
+
bindFilterControl: (element, value) => base.bindFilterControl(element, value),
|
|
41
|
+
bindRowSelectionControl: (element, value) => base.bindRowSelectionControl(element, value),
|
|
42
|
+
bindBulkSelectionControl: (element, value) => base.bindBulkSelectionControl(element, value),
|
|
43
|
+
bindRowDisclosure: (element, value) => base.bindRowDisclosure(element, value),
|
|
44
|
+
bindEditor: (element, value) => base.bindEditor(element, value),
|
|
45
|
+
bindColumnResizeHandle: (element, value) => base.bindColumnResizeHandle(element, value),
|
|
46
|
+
requestRevealCell: (cell, generation) => base.requestRevealCell(cell, generation),
|
|
47
|
+
requestRevealRow: (rowID, generation) => base.requestRevealRow(rowID, generation),
|
|
48
|
+
focusCurrent: () => base.focusCurrent(),
|
|
49
|
+
refresh: () => base.refresh(),
|
|
50
|
+
disconnect: () => base.disconnect(),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data-tree-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-tree-grid.js","sourceRoot":"","sources":["../src/data-tree-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,qBAAqB,IAAI,6BAA6B,GAOvD,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,cAAc,GAcf,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AA6DtE,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA4B;IAChE,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAsC;IACxE,OAAO,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAsC,EAAE,cAAuB;IACnG,MAAM,IAAI,GAAG,IAAI,cAAc,CAC7B,OAAgG,EAChG,IAAI,EACJ,cAAc,CACf,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;QACrC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;QACzC,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;QACnD,oBAAoB,EAAE,CAAC,MAAoC,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QACjG,eAAe,EAAE,CAAC,QAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAClF,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;QACrC,cAAc,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;QACrE,WAAW,EAAE,CAAC,KAAwB,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAClE,iBAAiB,EAAE,CAAC,OAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAC7E,yBAAyB,EAAE,CAAC,OAAoB,EAAE,KAAsC,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3I,gBAAgB,EAAE,CAAC,OAAoB,EAAE,KAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;QAChH,oBAAoB,EAAE,CAAC,OAAoB,EAAE,KAAiC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;QACxH,iBAAiB,EAAE,CAAC,OAAoB,EAAE,KAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;QACnH,WAAW,EAAE,CAAC,OAAoB,EAAE,KAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QACtG,YAAY,EAAE,CAAC,OAAoB,EAAE,KAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;QACzG,eAAe,EAAE,CAAC,OAAoB,EAAE,KAAqC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;QACtH,iBAAiB,EAAE,CAAC,OAA6C,EAAE,KAAuC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;QACrJ,uBAAuB,EAAE,CAAC,OAAoB,EAAE,KAA6C,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC;QAC9I,wBAAwB,EAAE,CAAC,OAAoB,EAAE,KAA8C,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC;QACjJ,iBAAiB,EAAE,CAAC,OAAoB,EAAE,KAAuC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5H,UAAU,EAAE,CAAC,OAAkC,EAAE,KAAgC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QACrH,sBAAsB,EAAE,CAAC,OAAoB,EAAE,KAA4C,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3I,iBAAiB,EAAE,CAAC,IAAwB,EAAE,UAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC;QAC9G,gBAAgB,EAAE,CAAC,KAAmB,EAAE,UAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC;QACxG,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;QAC7B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;KACpC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/date-field.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface DateFieldOptions {
|
|
|
17
17
|
readonly required?: boolean;
|
|
18
18
|
readonly label?: string;
|
|
19
19
|
readonly native?: boolean;
|
|
20
|
-
readonly onValueChange?: (value: DateValue | null) => void;
|
|
20
|
+
readonly onValueChange?: (value: DateValue | null) => boolean | void;
|
|
21
21
|
readonly onInputStateChange?: (value: TextEditingState, previousValue: TextEditingState) => void;
|
|
22
22
|
readonly onUpdate?: () => void;
|
|
23
23
|
}
|
|
@@ -39,4 +39,3 @@ export interface DateFieldConnection {
|
|
|
39
39
|
}
|
|
40
40
|
export declare function createDateField(options: DateFieldOptions): FacadeConnection<DateFieldConnection>;
|
|
41
41
|
export declare function tryCreateDateField(options: DateFieldOptions): DOMTemporalResult<FacadeConnection<DateFieldConnection>>;
|
|
42
|
-
//# sourceMappingURL=date-field.d.ts.map
|
package/dist/date-field.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { unwrap } from '@sectile/core/result';
|
|
2
2
|
import { createDOMTemporalController, createDOMTemporalFacadeConnection } from './internal/result.js';
|
|
3
3
|
import { sameTextEditingState } from '@sectile/core/text';
|
|
4
|
-
import { applyDateFieldEvent, tryCreateDateFieldState } from '@sectile/temporal/date-field';
|
|
4
|
+
import { applyDateFieldEvent, formatDateValue, tryCreateDateFieldState } from '@sectile/temporal/date-field';
|
|
5
5
|
import {} from '@sectile/core/adapter-runtime';
|
|
6
6
|
import { setFieldValidity, setInteractionAttributes } from './internal/interaction.js';
|
|
7
7
|
import { DOMTextElementBinding } from './internal/text-element.js';
|
|
8
|
+
import { synchronizeControlledFieldInput, synchronizeFieldInputSelection } from './internal/controlled-field-input.js';
|
|
8
9
|
import { toTextEvent } from './text.js';
|
|
9
10
|
export { formatDateValue, parseDateValue } from '@sectile/temporal/date-field';
|
|
10
11
|
export function createDateField(options) { return unwrap(tryCreateDateField(options)); }
|
|
@@ -64,7 +65,11 @@ class DOMDateField {
|
|
|
64
65
|
if (this.valueControlled !== (values.value !== undefined) || this.inputControlled !== (values.inputState !== undefined))
|
|
65
66
|
return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled date field values must preserve their construction-time shape.' } };
|
|
66
67
|
const state = this.getSnapshot().state;
|
|
67
|
-
const
|
|
68
|
+
const value = this.valueControlled ? values.value : state.value;
|
|
69
|
+
const inputState = this.inputControlled
|
|
70
|
+
? values.inputState
|
|
71
|
+
: synchronizeControlledFieldInput(synchronizeFieldInputSelection(state.inputState, this.options.input), state.value === null ? '' : formatDateValue(state.value), value === null ? '' : formatDateValue(value));
|
|
72
|
+
const result = this.runtime.replace(tryCreateDateFieldState(value, inputState));
|
|
68
73
|
if (result.ok) {
|
|
69
74
|
this.refresh();
|
|
70
75
|
this.options.onUpdate?.();
|
|
@@ -72,12 +77,19 @@ class DOMDateField {
|
|
|
72
77
|
return result;
|
|
73
78
|
}
|
|
74
79
|
handleEvent(event) {
|
|
80
|
+
const previous = this.getSnapshot();
|
|
75
81
|
const result = this.runtime.handle(event);
|
|
76
82
|
setFieldValidity(this.options.input, result);
|
|
77
83
|
if (result.ok) {
|
|
78
|
-
for (const command of result.commands)
|
|
79
|
-
if (command.type === 'value-committed')
|
|
80
|
-
this.
|
|
84
|
+
for (const command of result.commands) {
|
|
85
|
+
if (command.type === 'value-committed' && this.options.onValueChange?.(command.value) === false) {
|
|
86
|
+
this.runtime.replace({ ok: true, value: previous.state });
|
|
87
|
+
this.refresh();
|
|
88
|
+
setFieldValidity(this.options.input, { ok: false, error: { message: 'The parent control rejected the date value.' } });
|
|
89
|
+
this.options.onUpdate?.();
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
81
93
|
this.refresh();
|
|
82
94
|
this.options.onUpdate?.();
|
|
83
95
|
}
|
package/dist/date-field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-field.js","sourceRoot":"","sources":["../src/date-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,iCAAiC,EAAsD,MAAM,sBAAsB,CAAC;AAE1J,OAAO,EAAE,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAA2G,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"date-field.js","sourceRoot":"","sources":["../src/date-field.ts"],"names":[],"mappings":"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"}
|