@ixfx/components 0.13.2 → 0.13.3
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/bundle/index.d.ts +97 -14
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +2183 -636
- package/bundle/index.js.map +1 -1
- package/dist/ac-token.js +1 -1
- package/dist/{data-grid-Ck1Qx2H1.d.ts → data-grid-DHWJN66w.d.ts} +7 -5
- package/dist/{data-grid-Ck1Qx2H1.d.ts.map → data-grid-DHWJN66w.d.ts.map} +1 -1
- package/dist/data-grid.d.ts +1 -1
- package/dist/data-grid.js +210 -120
- package/dist/data-grid.js.map +1 -1
- package/dist/detail-list-C96B5Txz.js +2001 -0
- package/dist/detail-list-C96B5Txz.js.map +1 -0
- package/dist/{detail-list-C1xzr1z7.d.ts → detail-list-dX7jLO6b.d.ts} +12 -3
- package/dist/{detail-list-C1xzr1z7.d.ts.map → detail-list-dX7jLO6b.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +2 -2
- package/dist/detail-list.js +1 -1680
- package/dist/{flat-list-Ohxqsy0g.d.ts → flat-list-Y98IqH00.d.ts} +2 -2
- package/dist/{flat-list-Ohxqsy0g.d.ts.map → flat-list-Y98IqH00.d.ts.map} +1 -1
- package/dist/flat-list.d.ts +1 -1
- package/dist/flat-list.js +5 -1
- package/dist/flat-list.js.map +1 -1
- package/dist/{grid-list-pefLORIr.d.ts → grid-list-CoT9e1jB.d.ts} +9 -2
- package/dist/{grid-list-pefLORIr.d.ts.map → grid-list-CoT9e1jB.d.ts.map} +1 -1
- package/dist/{grid-list-DjIl910A.js → grid-list-DeqAd9-h.js} +189 -40
- package/dist/grid-list-DeqAd9-h.js.map +1 -0
- package/dist/grid-list.d.ts +1 -1
- package/dist/grid-list.js +1 -1
- package/dist/{incr-search-D91M4Ozq.js → incr-search-JIhwB49y.js} +27 -5
- package/dist/incr-search-JIhwB49y.js.map +1 -0
- package/dist/incr-search.d.ts +1 -1
- package/dist/incr-search.js +1 -1
- package/dist/index-CnQPCywE.d.ts +325 -0
- package/dist/index-CnQPCywE.d.ts.map +1 -0
- package/dist/{index-CxZ61DO1.d.ts → index-Dlah7Zfi.d.ts} +8 -1
- package/dist/{index-CxZ61DO1.d.ts.map → index-Dlah7Zfi.d.ts.map} +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -25
- package/dist/index.js.map +1 -1
- package/dist/miller.d.ts +1 -1
- package/dist/miller.d.ts.map +1 -1
- package/dist/miller.js +146 -100
- package/dist/miller.js.map +1 -1
- package/dist/narrowed-text.js +1 -1
- package/dist/split-layout-C5SYbDrq.d.ts.map +1 -1
- package/dist/{split-layout-CXotkdbx.js → split-layout-Deoxy47d.js} +6 -1
- package/dist/{split-layout-CXotkdbx.js.map → split-layout-Deoxy47d.js.map} +1 -1
- package/dist/split-layout.js +1 -1
- package/dist/{tab-list-v8mKX7Fu.d.ts → tab-list-D_dmImJM.d.ts} +2 -3
- package/dist/tab-list-D_dmImJM.d.ts.map +1 -0
- package/dist/tabs.d.ts +1 -1
- package/dist/tabs.js +22 -0
- package/dist/tabs.js.map +1 -1
- package/dist/{tree-DGveys4K.js → tree-DD8OaqsK.js} +1010 -230
- package/dist/tree-DD8OaqsK.js.map +1 -0
- package/dist/tree.d.ts +4 -267
- package/dist/tree.js +1 -1
- package/dist/{vertical-list-CqBc-t8w.d.ts → vertical-list-lj_19DCx.d.ts} +3 -2
- package/dist/{vertical-list-CqBc-t8w.d.ts.map → vertical-list-lj_19DCx.d.ts.map} +1 -1
- package/dist/vertical-list.d.ts +1 -1
- package/dist/vertical-list.js +113 -24
- package/dist/vertical-list.js.map +1 -1
- package/docs-user/data-grid.md +74 -4
- package/docs-user/detail-list.md +65 -0
- package/docs-user/grid-list.md +81 -4
- package/docs-user/index.json +1 -1
- package/docs-user/miller.md +59 -3
- package/docs-user/tree.md +63 -2
- package/docs-user/vertical-list.md +9 -1
- package/package.json +6 -1
- package/dist/detail-list.js.map +0 -1
- package/dist/grid-list-DjIl910A.js.map +0 -1
- package/dist/incr-search-D91M4Ozq.js.map +0 -1
- package/dist/tab-list-v8mKX7Fu.d.ts.map +0 -1
- package/dist/tree-DGveys4K.js.map +0 -1
- package/dist/tree.d.ts.map +0 -1
package/dist/miller.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { D as TreeTickleDetail, E as TreeSelectEvent, O as TreeTickleEvent, T as TreeSelectDetail, a as TreeComponent, b as TreeItemClickDetail, i as TreeCollapseEvent, k as TreeDataModel, n as TreeActivateEvent, o as TreeComponentEventMap, r as TreeCollapseDetail, t as TreeActivateDetail, v as TreeExpandDetail, w as TreeSearchHost, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-Cj8V3uar.js";
|
|
2
2
|
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-DQ7KOUIj.js";
|
|
3
|
-
import { S as ListSearchController } from "./index-
|
|
3
|
+
import { S as ListSearchController } from "./index-Dlah7Zfi.js";
|
|
4
4
|
import { n as TickledController } from "./tickled-controller-DodxD3eQ.js";
|
|
5
5
|
import { LitElement, PropertyValues, TemplateResult, nothing } from "lit";
|
|
6
6
|
import { CommandRegistry } from "@clinth/ui-commands";
|
package/dist/miller.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"miller.d.ts","names":[],"sources":["../src/miller/types.ts","../src/miller/miller-base.ts","../src/miller/miller-list.ts","../src/miller/miller-tree-controller.ts"],"mappings":";;;;;;;;KAyBY;KAEA;EACV,cAAc;;;KAIJ;;EAEV;;EAEA;;;;;;;;EAQA,MAAM,MAZI;;;KAgBA;EACV,MADU;EAEV;;;KAIU;;EAEV,UAFU;;;;;EAOV,MAAM,MALiC;;;KAS7B;EACV,MADU;EAEV;EACA,YAAY;;;KAIF;EACV;EACA;EACA,MAAM,MAHI;EAIV,YAAY;;KAGF,yBAAyB,YAAY;KACrC,0BAA0B,YAAY;KACtC,4BAA4B,YAAY;KACxC,8BAA8B,YAAY;KAC1C,oBAAoB,YAAY;;;;;;;;;;KAWhC;EACV;EACA;EACA;EACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCMW,0BAA0B,sBAAsB,eAAe;;EAE1E,MAAM;EAGN,OAAO;EAGP;;;;;;;;;;;;EAcA;;;;;;;;;;;EAaA,UAAU;;;;;;EAQV,iBAAiB;EAKjB,iBAAiB;EAGjB,aAAa;;;;;;EAQb,cAAc;EAGd,iBAAiB;;;;;;EAQjB;YAGU,UAAU;YAIV;YAGA,kBAAgB,YAAA;YAGhB,eAAe;YAIf,gBAAc,IAAA;;WA2Bf,QAAM;IAAoC,MAAA;IAAiB;;;MAWhE,YAAY;EAqBhB,SAAO;EAoCE,QAAQ,cAAc;EA0EtB;EAMA;EAWT,aAAa;EAQb,UAAU,QAAQ;;MASd,gBAAgB;;MAKhB,aAAa,MAAM;;MAQnB,gBAAgB;MAIhB,aAAa,MAAM;;MAWnB,iBAAiB,YAAY;;EAOjC,OAAO,MAAM;;EAYb,SAAS,MAAM;;;;EAgBf;;EAYA;;EAKA;;;;;EAQA,YAAY,MAAM,UAAY;;;;;EAmB9B,eAAe;;;;;EAef,WAAW;;;;EAuDX,eAAe,YAAY,MAAM;;EAWjC,UAAU;;EAiCV,WAAW,OAAO,SAAS;EAU3B,YAAY;IAAgB,MAAM;IAAY;;;;;;;;;;;;;;;EA4E9C,SAAS,QAAQ;;;;;EAoBjB;YA0FU,oBAAoB,OAAO,YAAc,gBAAgB,wBAAwB;YAMjF,iBAAiB,MAAM,UAAY,eAAe,QAAQ;;;;YAO1D,qBAAqB,OAAO,YAAY,MAAM,UAAY;;;;YAQ1D,oBAAoB,MAAM,UAAY,eAAe,QAAQ;;;;YAW7D,sBAAsB,MAAM,UAAY,eAAe,OAAO;;;;YAW9D,wBAAwB,OAAO,YAAY;YAU3C,YAAY,MAAM,UAAY;YAY9B,QAAQ,MAAM,UAAY;;;;EAOpC,aAAa,aAAa,gBAAgB;;;;
|
|
1
|
+
{"version":3,"file":"miller.d.ts","names":[],"sources":["../src/miller/types.ts","../src/miller/miller-base.ts","../src/miller/miller-list.ts","../src/miller/miller-tree-controller.ts"],"mappings":"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"}
|
package/dist/miller.js
CHANGED
|
@@ -2,7 +2,7 @@ import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
|
|
|
2
2
|
import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
|
|
3
3
|
import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
|
|
4
4
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
5
|
-
import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-
|
|
5
|
+
import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-JIhwB49y.js";
|
|
6
6
|
import "./interaction-ZTh4htzr.js";
|
|
7
7
|
import { t as collectDataResult } from "./data-provider-35TyWclX.js";
|
|
8
8
|
import { n as appearanceColor, t as appearanceAbsent } from "./item-appearance-BjcMyauw.js";
|
|
@@ -52,86 +52,30 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
54
|
switch (event.key) {
|
|
55
|
-
case `ArrowDown`:
|
|
55
|
+
case `ArrowDown`:
|
|
56
56
|
event.preventDefault();
|
|
57
|
-
|
|
58
|
-
let targetIndex = 0;
|
|
59
|
-
if (current && current.depth === currentDepth) targetIndex = Math.min(current.index + 1, col.length - 1);
|
|
60
|
-
const targetNode = col[targetIndex];
|
|
61
|
-
if (!targetNode) break;
|
|
62
|
-
this.#setTickledNode(targetNode, currentDepth);
|
|
63
|
-
if (this.interactionMode === `standard` || this.interactionMode === `vscode`) {
|
|
64
|
-
const prevIndex = current?.index ?? 0;
|
|
65
|
-
if (event.shiftKey) {
|
|
66
|
-
if (!this.#anchor || this.#anchor.depth !== currentDepth) {
|
|
67
|
-
const anchorNode = col[prevIndex];
|
|
68
|
-
if (anchorNode) this.#anchor = {
|
|
69
|
-
key: anchorNode.item.key,
|
|
70
|
-
depth: currentDepth,
|
|
71
|
-
index: prevIndex,
|
|
72
|
-
selectionSnapshot: this.interactionMode === `vscode` ? new Set(this._selectedKeys) : void 0
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
if (this.#anchor) {
|
|
76
|
-
const from = Math.min(this.#anchor.index, targetIndex);
|
|
77
|
-
const to = Math.max(this.#anchor.index, targetIndex);
|
|
78
|
-
const rangeKeys = col.slice(from, to + 1).map((n) => n.item.key);
|
|
79
|
-
if (this.interactionMode === `vscode`) {
|
|
80
|
-
const snap = this.#anchor.selectionSnapshot;
|
|
81
|
-
for (const k of rangeKeys) if (snap.has(k)) this._selectedKeys.delete(k);
|
|
82
|
-
else this._selectedKeys.add(k);
|
|
83
|
-
} else this._selectedKeys = new Set(rangeKeys);
|
|
84
|
-
}
|
|
85
|
-
} else if (this.interactionMode === `standard`) this.#anchor = {
|
|
86
|
-
key: targetNode.item.key,
|
|
87
|
-
depth: currentDepth,
|
|
88
|
-
index: targetIndex
|
|
89
|
-
};
|
|
90
|
-
else this.#anchor = void 0;
|
|
91
|
-
}
|
|
92
|
-
this.requestUpdate();
|
|
57
|
+
this.#moveCursor(col, currentDepth, event, (current) => Math.min(current + 1, col.length - 1));
|
|
93
58
|
break;
|
|
94
|
-
|
|
95
|
-
case `ArrowUp`: {
|
|
59
|
+
case `ArrowUp`:
|
|
96
60
|
event.preventDefault();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
if (this.#anchor) {
|
|
116
|
-
const from = Math.min(this.#anchor.index, targetIndex);
|
|
117
|
-
const to = Math.max(this.#anchor.index, targetIndex);
|
|
118
|
-
const rangeKeys = col.slice(from, to + 1).map((n) => n.item.key);
|
|
119
|
-
if (this.interactionMode === `vscode`) {
|
|
120
|
-
const snap = this.#anchor.selectionSnapshot;
|
|
121
|
-
for (const k of rangeKeys) if (snap.has(k)) this._selectedKeys.delete(k);
|
|
122
|
-
else this._selectedKeys.add(k);
|
|
123
|
-
} else this._selectedKeys = new Set(rangeKeys);
|
|
124
|
-
}
|
|
125
|
-
} else if (this.interactionMode === `standard`) this.#anchor = {
|
|
126
|
-
key: targetNode.item.key,
|
|
127
|
-
depth: currentDepth,
|
|
128
|
-
index: targetIndex
|
|
129
|
-
};
|
|
130
|
-
else this.#anchor = void 0;
|
|
131
|
-
}
|
|
132
|
-
this.requestUpdate();
|
|
61
|
+
this.#moveCursor(col, currentDepth, event, (current) => Math.max(current - 1, 0));
|
|
62
|
+
break;
|
|
63
|
+
case `Home`:
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
this.#moveCursor(col, currentDepth, event, () => 0, true);
|
|
66
|
+
break;
|
|
67
|
+
case `End`:
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
this.#moveCursor(col, currentDepth, event, () => col.length - 1, true);
|
|
70
|
+
break;
|
|
71
|
+
case `PageUp`:
|
|
72
|
+
event.preventDefault();
|
|
73
|
+
this.#moveCursor(col, currentDepth, event, (current) => Math.max(current - this.#pageSize(currentDepth), 0), true);
|
|
74
|
+
break;
|
|
75
|
+
case `PageDown`:
|
|
76
|
+
event.preventDefault();
|
|
77
|
+
this.#moveCursor(col, currentDepth, event, (current) => Math.min(current + this.#pageSize(currentDepth), col.length - 1), true);
|
|
133
78
|
break;
|
|
134
|
-
}
|
|
135
79
|
case `ArrowRight`: {
|
|
136
80
|
event.preventDefault();
|
|
137
81
|
const tickled = this.#getTickledNodeAndDepth();
|
|
@@ -224,14 +168,28 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
224
168
|
window.addEventListener(`pointermove`, this.#onResizeMove);
|
|
225
169
|
window.addEventListener(`pointerup`, this.#onResizeEnd);
|
|
226
170
|
};
|
|
171
|
+
this.#resizeRaf = null;
|
|
172
|
+
this.#resizePendingWidth = 0;
|
|
227
173
|
this.#onResizeMove = (event) => {
|
|
228
174
|
if (this.#resizingDepth < 0) return;
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
175
|
+
this.#resizePendingWidth = Math.max(32, this.#resizeStartWidth + (event.clientX - this.#resizeStartX));
|
|
176
|
+
this.#resizeRaf ??= requestAnimationFrame(this.#applyResizeWidth);
|
|
177
|
+
};
|
|
178
|
+
this.#applyResizeWidth = () => {
|
|
179
|
+
this.#resizeRaf = null;
|
|
180
|
+
if (this.#resizingDepth < 0) return;
|
|
181
|
+
(this.shadowRoot?.querySelectorAll(`.column`)[this.#resizingDepth])?.setAttribute(`style`, this.#explicitWidthStyle(this.#resizePendingWidth));
|
|
233
182
|
};
|
|
234
183
|
this.#onResizeEnd = () => {
|
|
184
|
+
if (this.#resizeRaf !== null) {
|
|
185
|
+
cancelAnimationFrame(this.#resizeRaf);
|
|
186
|
+
this.#resizeRaf = null;
|
|
187
|
+
}
|
|
188
|
+
if (this.#resizingDepth >= 0 && this.#resizePendingWidth > 0) {
|
|
189
|
+
this.#columnWidths.set(this.#resizingDepth, this.#resizePendingWidth);
|
|
190
|
+
this.requestUpdate();
|
|
191
|
+
}
|
|
192
|
+
this.#resizePendingWidth = 0;
|
|
235
193
|
this.#resizingDepth = -1;
|
|
236
194
|
window.removeEventListener(`pointermove`, this.#onResizeMove);
|
|
237
195
|
window.removeEventListener(`pointerup`, this.#onResizeEnd);
|
|
@@ -838,7 +796,7 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
838
796
|
this.#handleStandardClick(node, depth, event);
|
|
839
797
|
break;
|
|
840
798
|
case `manual`: break;
|
|
841
|
-
case `checked`: this.#expandNode(node, depth);
|
|
799
|
+
case `checked`: this.#expandNode(node, depth, true);
|
|
842
800
|
}
|
|
843
801
|
}
|
|
844
802
|
#handleImplicitClick(node, depth) {
|
|
@@ -848,7 +806,7 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
848
806
|
this._selectedKeys = /* @__PURE__ */ new Set([node.item.key]);
|
|
849
807
|
this._selectedNodes.clear();
|
|
850
808
|
this._selectedNodes.add(node);
|
|
851
|
-
this.#expandNode(node, depth);
|
|
809
|
+
this.#expandNode(node, depth, true);
|
|
852
810
|
if (!previous.has(node)) this.#dispatchSelectEvent(previous);
|
|
853
811
|
}
|
|
854
812
|
#handleStandardClick(node, depth, event) {
|
|
@@ -891,16 +849,22 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
891
849
|
} : void 0;
|
|
892
850
|
this._selectedByDepth.set(depth, node);
|
|
893
851
|
this.#lastSelectedNode = node;
|
|
894
|
-
this.#expandNode(node, depth);
|
|
852
|
+
this.#expandNode(node, depth, true);
|
|
895
853
|
if (!previous.has(node) || previous.size !== 1) this.#dispatchSelectEvent(previous);
|
|
896
854
|
}
|
|
897
|
-
|
|
855
|
+
/**
|
|
856
|
+
* Open the column for `node`. `immediate` skips the lazy-load debounce: use
|
|
857
|
+
* it for deliberate clicks, where the user has committed to this node. The
|
|
858
|
+
* debounce is kept for keyboard navigation, which can sweep over many
|
|
859
|
+
* branches in quick succession.
|
|
860
|
+
*/
|
|
861
|
+
#expandNode(node, depth, immediate = false) {
|
|
898
862
|
if (node.item.isLeaf) {
|
|
899
863
|
this._columns = this._columns.slice(0, depth + 1);
|
|
900
864
|
this.requestUpdate();
|
|
901
865
|
return;
|
|
902
866
|
}
|
|
903
|
-
if (node.children === void 0) this.#loadUnloadedChildren(node, depth, true);
|
|
867
|
+
if (node.children === void 0) this.#loadUnloadedChildren(node, depth, true, immediate);
|
|
904
868
|
else {
|
|
905
869
|
const newColumns = this._columns.slice(0, depth + 1);
|
|
906
870
|
newColumns.push(node.children);
|
|
@@ -925,10 +889,11 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
925
889
|
* own depth: its column for expansions, -1 for a view root (it sits above
|
|
926
890
|
* column 0, so loaders computing child depth as `depth + 1` stay correct).
|
|
927
891
|
*/
|
|
928
|
-
#loadUnloadedChildren(node, parentDepth, fireExpandEvent) {
|
|
892
|
+
#loadUnloadedChildren(node, parentDepth, fireExpandEvent, immediate = false) {
|
|
929
893
|
const nodeDepth = parentDepth + 1;
|
|
930
894
|
this._columns = this._columns.slice(0, nodeDepth);
|
|
931
895
|
this._loadingDepth = nodeDepth;
|
|
896
|
+
this.#pendingController?.abort();
|
|
932
897
|
this.#pendingNode = node;
|
|
933
898
|
const controller = new AbortController();
|
|
934
899
|
this.#pendingController = controller;
|
|
@@ -959,15 +924,20 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
959
924
|
this.requestUpdate();
|
|
960
925
|
};
|
|
961
926
|
if (this.model || this.loadChildren) {
|
|
962
|
-
if (this.#expandTimer !== void 0)
|
|
963
|
-
|
|
927
|
+
if (this.#expandTimer !== void 0) {
|
|
928
|
+
clearTimeout(this.#expandTimer);
|
|
929
|
+
this.#expandTimer = void 0;
|
|
930
|
+
}
|
|
931
|
+
const load = () => {
|
|
964
932
|
this.#expandTimer = void 0;
|
|
965
933
|
if (this.#pendingNode !== node) return;
|
|
966
934
|
(this.model ? this.model.getChildren(node, nodeDepth - 1, controller.signal) : collectDataResult(this.loadChildren({
|
|
967
935
|
node,
|
|
968
936
|
depth: nodeDepth - 1
|
|
969
937
|
}, controller.signal), controller.signal)).then((children) => applyChildren([...children])).catch(handleError);
|
|
970
|
-
}
|
|
938
|
+
};
|
|
939
|
+
if (immediate) load();
|
|
940
|
+
else this.#expandTimer = setTimeout(load, EXPAND_DEBOUNCE_MS);
|
|
971
941
|
} else {
|
|
972
942
|
this._loadingDepth = void 0;
|
|
973
943
|
this.#pendingNode = void 0;
|
|
@@ -978,10 +948,12 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
978
948
|
}
|
|
979
949
|
}
|
|
980
950
|
#onCheckboxClick(node) {
|
|
951
|
+
const previous = new Set(this._selectedNodes);
|
|
981
952
|
const currentlySelected = this._selectedKeys.has(node.item.key);
|
|
982
953
|
if (!!node.children?.length ? this.#allDescendantsSelected(node) : currentlySelected) this.#applyCheckedToggle(node, false);
|
|
983
954
|
else this.#applyCheckedToggle(node, true);
|
|
984
955
|
this.requestUpdate();
|
|
956
|
+
this.#dispatchSelectEvent(previous);
|
|
985
957
|
}
|
|
986
958
|
#allDescendantsSelected(node) {
|
|
987
959
|
if (!this._selectedKeys.has(node.item.key)) return false;
|
|
@@ -1018,7 +990,7 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
1018
990
|
index
|
|
1019
991
|
};
|
|
1020
992
|
}
|
|
1021
|
-
#scrollNavigatedItemIntoView() {
|
|
993
|
+
#scrollNavigatedItemIntoView(behavior = `smooth`) {
|
|
1022
994
|
requestAnimationFrame(() => {
|
|
1023
995
|
const tickled = this.#getTickledNodeAndDepth();
|
|
1024
996
|
if (!tickled) return;
|
|
@@ -1026,7 +998,7 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
1026
998
|
if (!container) return;
|
|
1027
999
|
container.querySelectorAll(`.item`)[tickled.index]?.scrollIntoView({
|
|
1028
1000
|
block: `nearest`,
|
|
1029
|
-
behavior
|
|
1001
|
+
behavior
|
|
1030
1002
|
});
|
|
1031
1003
|
});
|
|
1032
1004
|
}
|
|
@@ -1041,9 +1013,67 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
1041
1013
|
composed: true
|
|
1042
1014
|
}));
|
|
1043
1015
|
}
|
|
1016
|
+
/**
|
|
1017
|
+
* Number of items a PageUp/PageDown moves: how many rows fit in the column's
|
|
1018
|
+
* visible area, less one so the previous page's last row stays in view.
|
|
1019
|
+
*/
|
|
1020
|
+
#pageSize(depth) {
|
|
1021
|
+
const content = this.shadowRoot?.querySelectorAll(`.column`)[depth]?.querySelector(`.column-content`);
|
|
1022
|
+
const item = content?.querySelector(`.item`);
|
|
1023
|
+
if (!content || !item || item.offsetHeight === 0) return 10;
|
|
1024
|
+
return Math.max(1, Math.floor(content.clientHeight / item.offsetHeight) - 1);
|
|
1025
|
+
}
|
|
1026
|
+
/**
|
|
1027
|
+
* Move the cursor within column `col` to the index returned by `target`
|
|
1028
|
+
* (given the current cursor index, or -1 when the cursor isn't in this
|
|
1029
|
+
* column, which behaves as "before the first item"). Handles Shift range
|
|
1030
|
+
* extension and anchor seating for `standard` / `vscode` modes.
|
|
1031
|
+
* `scroll` brings the new item into view (for jumps larger than one row).
|
|
1032
|
+
*/
|
|
1033
|
+
#moveCursor(col, currentDepth, event, target, scroll = false) {
|
|
1034
|
+
const current = this.#getTickledNodeAndDepth();
|
|
1035
|
+
const targetIndex = target(current !== void 0 && current.depth === currentDepth ? current.index : -1);
|
|
1036
|
+
const targetNode = col[targetIndex];
|
|
1037
|
+
if (!targetNode) return;
|
|
1038
|
+
this.#setTickledNode(targetNode, currentDepth);
|
|
1039
|
+
if (this.interactionMode === `standard` || this.interactionMode === `vscode`) {
|
|
1040
|
+
const prevIndex = current?.index ?? 0;
|
|
1041
|
+
if (event.shiftKey) {
|
|
1042
|
+
if (!this.#anchor || this.#anchor.depth !== currentDepth) {
|
|
1043
|
+
const anchorNode = col[prevIndex];
|
|
1044
|
+
if (anchorNode) this.#anchor = {
|
|
1045
|
+
key: anchorNode.item.key,
|
|
1046
|
+
depth: currentDepth,
|
|
1047
|
+
index: prevIndex,
|
|
1048
|
+
selectionSnapshot: this.interactionMode === `vscode` ? new Set(this._selectedKeys) : void 0
|
|
1049
|
+
};
|
|
1050
|
+
}
|
|
1051
|
+
if (this.#anchor) {
|
|
1052
|
+
const from = Math.min(this.#anchor.index, targetIndex);
|
|
1053
|
+
const to = Math.max(this.#anchor.index, targetIndex);
|
|
1054
|
+
const rangeKeys = col.slice(from, to + 1).map((n) => n.item.key);
|
|
1055
|
+
if (this.interactionMode === `vscode`) {
|
|
1056
|
+
const snap = this.#anchor.selectionSnapshot;
|
|
1057
|
+
for (const k of rangeKeys) if (snap.has(k)) this._selectedKeys.delete(k);
|
|
1058
|
+
else this._selectedKeys.add(k);
|
|
1059
|
+
} else this._selectedKeys = new Set(rangeKeys);
|
|
1060
|
+
}
|
|
1061
|
+
} else if (this.interactionMode === `standard`) this.#anchor = {
|
|
1062
|
+
key: targetNode.item.key,
|
|
1063
|
+
depth: currentDepth,
|
|
1064
|
+
index: targetIndex
|
|
1065
|
+
};
|
|
1066
|
+
else this.#anchor = void 0;
|
|
1067
|
+
}
|
|
1068
|
+
this.requestUpdate();
|
|
1069
|
+
if (scroll) this.#scrollNavigatedItemIntoView(`auto`);
|
|
1070
|
+
}
|
|
1044
1071
|
#onKeyDown;
|
|
1045
1072
|
#onResizeStart;
|
|
1073
|
+
#resizeRaf;
|
|
1074
|
+
#resizePendingWidth;
|
|
1046
1075
|
#onResizeMove;
|
|
1076
|
+
#applyResizeWidth;
|
|
1047
1077
|
#onResizeEnd;
|
|
1048
1078
|
#getColumnHeader(depth) {
|
|
1049
1079
|
if (depth === 0) return this.#displayRoot?.item.label ?? ``;
|
|
@@ -1057,9 +1087,12 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
1057
1087
|
}
|
|
1058
1088
|
return ``;
|
|
1059
1089
|
}
|
|
1090
|
+
#explicitWidthStyle(width) {
|
|
1091
|
+
return `width:${width}px;flex-grow:0;flex-shrink:0;flex-basis:auto;max-width:none`;
|
|
1092
|
+
}
|
|
1060
1093
|
#columnStyle(depth, isLast) {
|
|
1061
1094
|
const w = this.#columnWidths.get(depth);
|
|
1062
|
-
if (w !== void 0) return
|
|
1095
|
+
if (w !== void 0) return this.#explicitWidthStyle(w);
|
|
1063
1096
|
if (this.stretchLastColumn && isLast) return `width:max-content;flex-grow:1;flex-shrink:0;flex-basis:auto;min-width:0`;
|
|
1064
1097
|
return `width:max-content;flex-grow:0;flex-shrink:0;flex-basis:auto`;
|
|
1065
1098
|
}
|
|
@@ -1309,8 +1342,24 @@ __decorate([state()], MillerBaseElement.prototype, "_selectedNodes", void 0);
|
|
|
1309
1342
|
MillerBaseElement = __decorate([safeCustomElement(`ixfx-miller-base`)], MillerBaseElement);
|
|
1310
1343
|
//#endregion
|
|
1311
1344
|
//#region src/miller/miller-list.ts
|
|
1345
|
+
const HAS_CHECKED = 1;
|
|
1346
|
+
const HAS_UNCHECKED = 2;
|
|
1347
|
+
/**
|
|
1348
|
+
* Walk the loaded subtree under `node`, returning which kinds of leaf were
|
|
1349
|
+
* seen (`HAS_CHECKED` | `HAS_UNCHECKED`). Stops as soon as both have been
|
|
1350
|
+
* seen, since the result can no longer change.
|
|
1351
|
+
*/
|
|
1352
|
+
function scanCheckState(node, selectedKeys) {
|
|
1353
|
+
if (node.item.isLeaf || !node.children?.length) return selectedKeys.has(node.item.key) ? HAS_CHECKED : HAS_UNCHECKED;
|
|
1354
|
+
let seen = 0;
|
|
1355
|
+
for (const child of node.children) {
|
|
1356
|
+
seen |= scanCheckState(child, selectedKeys);
|
|
1357
|
+
if (seen === 3) break;
|
|
1358
|
+
}
|
|
1359
|
+
return seen;
|
|
1360
|
+
}
|
|
1312
1361
|
/**
|
|
1313
|
-
*
|
|
1362
|
+
* Compute the checkbox state for a node based on `selectedKeys`.
|
|
1314
1363
|
*
|
|
1315
1364
|
* - Unloaded branch (`children === undefined`): treated as a leaf — we can only
|
|
1316
1365
|
* report on what is known.
|
|
@@ -1319,12 +1368,9 @@ MillerBaseElement = __decorate([safeCustomElement(`ixfx-miller-base`)], MillerBa
|
|
|
1319
1368
|
* indeterminate otherwise.
|
|
1320
1369
|
*/
|
|
1321
1370
|
function computeCheckboxState(node, selectedKeys) {
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
const allUnchecked = childStates.every((s) => s === `unchecked`);
|
|
1326
|
-
if (allChecked) return `checked`;
|
|
1327
|
-
if (allUnchecked) return `unchecked`;
|
|
1371
|
+
const seen = scanCheckState(node, selectedKeys);
|
|
1372
|
+
if (seen === HAS_CHECKED) return `checked`;
|
|
1373
|
+
if (seen === HAS_UNCHECKED) return `unchecked`;
|
|
1328
1374
|
return `indeterminate`;
|
|
1329
1375
|
}
|
|
1330
1376
|
let MillerListElement = class MillerListElement extends MillerBaseElement {
|