@ixfx/components 0.16.1 → 0.16.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.
Files changed (71) hide show
  1. package/bundle/index.d.ts +272 -58
  2. package/bundle/index.js +400 -337
  3. package/dist/ac-token.js +1 -1
  4. package/dist/{crumb-navigation-YnFVFqrx.js → crumb-navigation-D3ndPgFg.js} +2 -2
  5. package/dist/crumbs.js +1 -1
  6. package/dist/{data-grid-Cqxuwgbb.js → data-grid-8TsiF2ES.js} +142 -60
  7. package/dist/{data-grid-Csh5EJW9.d.ts → data-grid-CslzF16R.d.ts} +21 -3
  8. package/dist/data-grid.d.ts +2 -2
  9. package/dist/data-grid.js +1 -1
  10. package/dist/{detail-list-DSZ1DDor.d.ts → detail-list-n1MbNbhF.d.ts} +11 -3
  11. package/dist/{detail-list-Bo5ze3SN.js → detail-list-w3GXKO2k.js} +71 -19
  12. package/dist/detail-list.d.ts +2 -2
  13. package/dist/detail-list.js +1 -1
  14. package/dist/{flat-list-CT9kX3TQ.d.ts → flat-list-D_4y3wgn.d.ts} +7 -2
  15. package/dist/flat-list.d.ts +1 -1
  16. package/dist/flat-list.js +5 -2
  17. package/dist/{grid-list-DDLrWRxm.d.ts → grid-list-CqYS28NY.d.ts} +60 -14
  18. package/dist/{grid-list-D0dJNVEF.js → grid-list-Cz2tKcNZ.js} +55 -17
  19. package/dist/grid-list.d.ts +2 -2
  20. package/dist/grid-list.js +1 -1
  21. package/dist/{grouped-item-lister-DETte0Dh.d.ts → grouped-item-lister-CS4yInuw.d.ts} +1 -1
  22. package/dist/grouped-item-lister.d.ts +1 -1
  23. package/dist/{incr-search-CgbL-OlS.js → incr-search-Dc6gYpJG.js} +34 -5
  24. package/dist/incr-search.d.ts +1 -1
  25. package/dist/incr-search.js +1 -1
  26. package/dist/{index-CUErGhCg.d.ts → index-Bm9a9S3_.d.ts} +2 -1
  27. package/dist/{index-Bnm-kKGC.d.ts → index-DyaHA9Kk.d.ts} +20 -1
  28. package/dist/{index-D-lZNlHa.d.ts → index-VAs9akt4.d.ts} +18 -2
  29. package/dist/{index-DxyyVqzA.d.ts → index-ZaA90u09.d.ts} +1 -0
  30. package/dist/index.d.ts +45 -14
  31. package/dist/index.js +93 -17
  32. package/dist/{list-selection-controller-5L0Nj9tR.js → list-selection-controller-D4iIrvJH.js} +199 -57
  33. package/dist/list-selection-types-Dnamh2Lu.d.ts +109 -0
  34. package/dist/{menu-CU9KAm8s.js → menu-BX1FHxY8.js} +16 -1
  35. package/dist/{menu-item-BUv8An2k.js → menu-item-oxU1VKiJ.js} +34 -9
  36. package/dist/menu.d.ts +1 -1
  37. package/dist/menu.js +2 -2
  38. package/dist/{miller-DUqiUAWQ.js → miller-Be7x4ufN.js} +142 -10
  39. package/dist/miller.d.ts +1 -1
  40. package/dist/miller.js +1 -1
  41. package/dist/narrowed-text.js +1 -1
  42. package/dist/partial-keys-Ck6CiprB.js +32 -0
  43. package/dist/sunburst-tree.d.ts +1 -1
  44. package/dist/sunburst-tree.js +1 -1
  45. package/dist/{sunbursttree-list-DePuFYlU.d.ts → sunbursttree-list-Bk20giTF.d.ts} +1 -1
  46. package/dist/{sunbursttree-list-B_M0YTEA.js → sunbursttree-list-DQF6DcsS.js} +1 -1
  47. package/dist/timeline.d.ts +1 -1
  48. package/dist/{tree-DAlgvaHB.js → tree-BaXYyt5U.js} +185 -69
  49. package/dist/tree.d.ts +1 -1
  50. package/dist/tree.js +1 -1
  51. package/dist/{vertical-list-SAx56U-l.d.ts → vertical-list-DtHX26JO.d.ts} +11 -2
  52. package/dist/{vertical-list-DyKPKGxK.js → vertical-list-o5hfqH87.js} +54 -19
  53. package/dist/vertical-list.d.ts +2 -2
  54. package/dist/vertical-list.js +1 -1
  55. package/docs-user/README.md +1 -0
  56. package/docs-user/data-grid.md +10 -3
  57. package/docs-user/detail-list.md +1 -1
  58. package/docs-user/grid-list.md +4 -1
  59. package/docs-user/index.json +6 -2
  60. package/docs-user/llms.txt +1 -0
  61. package/docs-user/menu.md +11 -1
  62. package/docs-user/miller.md +4 -0
  63. package/docs-user/multicol-list.md +6 -0
  64. package/docs-user/select-horiz.md +1 -1
  65. package/docs-user/tree.md +6 -0
  66. package/docs-user/user-selection-intents.md +86 -0
  67. package/docs-user/vertical-list.md +9 -1
  68. package/llms.txt +1 -0
  69. package/package.json +1 -1
  70. package/dist/list-selection-types-PjKdhF-a.d.ts +0 -45
  71. /package/dist/{index-DV3iaUBW.d.ts → index-DV3iaUBW2.d.ts} +0 -0
package/dist/menu.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { i as MenuContainer, n as MenuTrigger, t as MenuItem } from "./menu-item-bF6narIz.js";
2
- import { a as menuFromTree, c as MenuSeparator, d as MenuCheckItem, f as MenuBar, i as MenuFromTreeOptions, l as MenuSubTrigger, n as MenuRadioGroup, o as menuFromTreeToElements, r as MenuRadioItem, s as MenuHeader, u as MenuCommandController } from "./index-DxyyVqzA.js";
2
+ import { a as menuFromTree, c as MenuSeparator, d as MenuCheckItem, f as MenuBar, i as MenuFromTreeOptions, l as MenuSubTrigger, n as MenuRadioGroup, o as menuFromTreeToElements, r as MenuRadioItem, s as MenuHeader, u as MenuCommandController } from "./index-ZaA90u09.js";
3
3
  export { MenuBar, MenuCheckItem, MenuCommandController, MenuContainer, type MenuFromTreeOptions, MenuHeader, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubTrigger, MenuTrigger, menuFromTree, menuFromTreeToElements };
package/dist/menu.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as MenuTrigger, r as MenuContainer, t as MenuItem } from "./menu-item-BUv8An2k.js";
2
- import { a as menuFromTreeToElements, c as MenuSubTrigger, d as MenuBar, i as menuFromTree, l as MenuCommandController, n as MenuRadioGroup, o as MenuHeader, r as MenuRadioItem, s as MenuSeparator, u as MenuCheckItem } from "./menu-CU9KAm8s.js";
1
+ import { n as MenuTrigger, r as MenuContainer, t as MenuItem } from "./menu-item-oxU1VKiJ.js";
2
+ import { a as menuFromTreeToElements, c as MenuSubTrigger, d as MenuBar, i as menuFromTree, l as MenuCommandController, n as MenuRadioGroup, o as MenuHeader, r as MenuRadioItem, s as MenuSeparator, u as MenuCheckItem } from "./menu-BX1FHxY8.js";
3
3
  export { MenuBar, MenuCheckItem, MenuCommandController, MenuContainer, MenuHeader, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubTrigger, MenuTrigger, menuFromTree, menuFromTreeToElements };
@@ -2,8 +2,9 @@ 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-CgbL-OlS.js";
5
+ import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-Dc6gYpJG.js";
6
6
  import { a as capKeys, d as partitionKeys, l as keysToArray, n as EMPTY_KEYS } from "./pending-BGidHppL.js";
7
+ import { i as sameKeySet, r as isPartialKey, t as PARTIAL_DESCRIPTION } from "./partial-keys-Ck6CiprB.js";
7
8
  import "./interaction-E-uMGHkJ.js";
8
9
  import { t as collectDataResult } from "./data-provider-35TyWclX.js";
9
10
  import { a as restoreElementScroll, i as onUserScrollIntent, o as scrollToOffset, r as captureElementScroll, t as ViewStateController } from "./view-state-controller-BdyXWUUM.js";
@@ -278,6 +279,8 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
278
279
  this.#onColumnScroll = (event) => {
279
280
  if (this.#pendingColumnScroll.size === 0 && event.target.classList?.contains(`column-content`)) this.#viewState.notify();
280
281
  };
282
+ this._partialKeys = /* @__PURE__ */ new Set();
283
+ this._partialDescription = PARTIAL_DESCRIPTION;
281
284
  this.#selectOrigin = `user`;
282
285
  this.#selectSilent = false;
283
286
  this.#onKeyDown = (event) => {
@@ -781,6 +784,24 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
781
784
  }
782
785
  /** Not implemented on miller-list. */
783
786
  selectAll() {}
787
+ /**
788
+ * Nodes shown as *partially* selected (a part of the resource is selected):
789
+ * an indeterminate checkbox in `checked` mode, `.partial` and an accessible
790
+ * description otherwise. Independent of the selection — a key in both counts
791
+ * as selected. In `checked` mode this overrides the state derived from
792
+ * loaded descendants. Replace-on-set.
793
+ */
794
+ get partialKeys() {
795
+ return this._partialKeys;
796
+ }
797
+ set partialKeys(keys) {
798
+ const next = new Set(keys);
799
+ if (!sameKeySet(next, this._partialKeys)) this._partialKeys = next;
800
+ }
801
+ /** Whether `node` is shown as partial (and, being selected, not). */
802
+ _isPartial(node, depth) {
803
+ return isPartialKey(node.item.key, this._partialKeys, this._isSelected(node, depth));
804
+ }
784
805
  /** Not implemented on miller-list. */
785
806
  deselectAll() {}
786
807
  /**
@@ -1171,6 +1192,58 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1171
1192
  bubbles: true,
1172
1193
  composed: true
1173
1194
  }));
1195
+ this.dispatchEvent(new CustomEvent(`list-select`, {
1196
+ detail: {
1197
+ selectedKeys: new Set(this._selectedKeys),
1198
+ previousKeys: new Set([...previous].map((n) => n.item.key)),
1199
+ previous
1200
+ },
1201
+ bubbles: true,
1202
+ composed: true
1203
+ }));
1204
+ }
1205
+ /** Report an intent before changing the selection; `true` when the caller took over. */
1206
+ #intercepted(intent) {
1207
+ return !this.dispatchEvent(new CustomEvent(`list-select-intent`, {
1208
+ detail: intent,
1209
+ bubbles: true,
1210
+ composed: true,
1211
+ cancelable: true
1212
+ }));
1213
+ }
1214
+ /** The anchor..`index` range in `col` when `depth` holds the range anchor, else `undefined`. */
1215
+ #rangeNodes(col, depth, index) {
1216
+ if (!this.#anchor || this.#anchor.depth !== depth || !col || index < 0) return void 0;
1217
+ return col.slice(Math.min(this.#anchor.index, index), Math.max(this.#anchor.index, index) + 1);
1218
+ }
1219
+ /** `manual` mode: nothing is selected here, but the caller is told what the click meant. */
1220
+ #reportManualClick(node, depth, event, source) {
1221
+ const key = node.item.key;
1222
+ if (event && (event.metaKey || event.ctrlKey)) {
1223
+ this.#intercepted({
1224
+ kind: `toggle`,
1225
+ keys: [key],
1226
+ source
1227
+ });
1228
+ return;
1229
+ }
1230
+ const col = this._columns[depth];
1231
+ const range = event?.shiftKey ? this.#rangeNodes(col, depth, col ? col.indexOf(node) : -1) : void 0;
1232
+ if (range && this.#anchor) {
1233
+ this.#intercepted({
1234
+ kind: `extend`,
1235
+ keys: range.map((n) => n.item.key),
1236
+ anchorKey: this.#anchor.key,
1237
+ targetKey: key,
1238
+ source
1239
+ });
1240
+ return;
1241
+ }
1242
+ this.#intercepted({
1243
+ kind: `replace`,
1244
+ keys: [key],
1245
+ source
1246
+ });
1174
1247
  }
1175
1248
  #abortPending() {
1176
1249
  if (this.#expandTimer !== void 0) {
@@ -1241,11 +1314,22 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1241
1314
  case `vscode`:
1242
1315
  this.#handleStandardClick(node, depth, event);
1243
1316
  break;
1244
- case `manual`: break;
1317
+ case `manual`:
1318
+ this.#reportManualClick(node, depth, event, `pointer`);
1319
+ break;
1245
1320
  case `checked`: this.#expandNode(node, depth, true);
1246
1321
  }
1247
1322
  }
1248
1323
  #handleImplicitClick(node, depth) {
1324
+ if (this.#intercepted({
1325
+ kind: `replace`,
1326
+ keys: [node.item.key],
1327
+ source: `pointer`
1328
+ })) {
1329
+ this.#lastSelectedNode = node;
1330
+ this.#expandNode(node, depth, true);
1331
+ return;
1332
+ }
1249
1333
  const previous = new Set(this._selectedNodes);
1250
1334
  this._selectedByDepth.set(depth, node);
1251
1335
  this.#lastSelectedNode = node;
@@ -1261,6 +1345,18 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1261
1345
  const isMeta = event ? event.metaKey || event.ctrlKey : false;
1262
1346
  const isShift = event ? event.shiftKey : false;
1263
1347
  if (isMeta) {
1348
+ if (this.#intercepted({
1349
+ kind: `toggle`,
1350
+ keys: [node.item.key],
1351
+ source: `pointer`
1352
+ })) {
1353
+ this.#anchor = index >= 0 ? {
1354
+ key: node.item.key,
1355
+ depth,
1356
+ index
1357
+ } : this.#anchor;
1358
+ return;
1359
+ }
1264
1360
  if (this._selectedKeys.has(node.item.key)) {
1265
1361
  this._selectedKeys.delete(node.item.key);
1266
1362
  this._selectedNodes.delete(node);
@@ -1278,23 +1374,38 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1278
1374
  return;
1279
1375
  }
1280
1376
  if (isShift && this.#anchor && this.#anchor.depth === depth && col) {
1281
- const from = Math.min(this.#anchor.index, index);
1282
- const to = Math.max(this.#anchor.index, index);
1283
- const rangeNodes = col.slice(from, to + 1);
1377
+ const rangeNodes = this.#rangeNodes(col, depth, index) ?? [];
1378
+ if (this.#intercepted({
1379
+ kind: `extend`,
1380
+ keys: rangeNodes.map((n) => n.item.key),
1381
+ anchorKey: this.#anchor.key,
1382
+ targetKey: node.item.key,
1383
+ source: `pointer`
1384
+ })) return;
1284
1385
  this._selectedKeys = new Set(rangeNodes.map((n) => n.item.key));
1285
1386
  this._selectedNodes = new Set(rangeNodes);
1286
1387
  this.#selectionChanged();
1287
1388
  this.requestUpdate();
1288
1389
  return;
1289
1390
  }
1391
+ const intercepted = this.#intercepted({
1392
+ kind: `replace`,
1393
+ keys: [node.item.key],
1394
+ source: `pointer`
1395
+ });
1290
1396
  const previous = new Set(this._selectedNodes);
1291
- this._selectedKeys = /* @__PURE__ */ new Set([node.item.key]);
1292
- this._selectedNodes = /* @__PURE__ */ new Set([node]);
1293
1397
  this.#anchor = index >= 0 ? {
1294
1398
  key: node.item.key,
1295
1399
  depth,
1296
1400
  index
1297
1401
  } : void 0;
1402
+ if (intercepted) {
1403
+ this.#lastSelectedNode = node;
1404
+ this.#expandNode(node, depth, true);
1405
+ return;
1406
+ }
1407
+ this._selectedKeys = /* @__PURE__ */ new Set([node.item.key]);
1408
+ this._selectedNodes = /* @__PURE__ */ new Set([node]);
1298
1409
  this._selectedByDepth.set(depth, node);
1299
1410
  this.#lastSelectedNode = node;
1300
1411
  this.#expandNode(node, depth, true);
@@ -1399,6 +1510,11 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1399
1510
  }
1400
1511
  }
1401
1512
  #onCheckboxClick(node) {
1513
+ if (this.#intercepted({
1514
+ kind: `toggle`,
1515
+ keys: [node.item.key],
1516
+ source: `pointer`
1517
+ })) return;
1402
1518
  const previous = new Set(this._selectedNodes);
1403
1519
  const currentlySelected = this._selectedKeys.has(node.item.key);
1404
1520
  if (!!node.children?.length ? this.#allDescendantsSelected(node) : currentlySelected) this.#applyCheckedToggle(node, false);
@@ -1519,7 +1635,13 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1519
1635
  const from = Math.min(this.#anchor.index, targetIndex);
1520
1636
  const to = Math.max(this.#anchor.index, targetIndex);
1521
1637
  const rangeKeys = col.slice(from, to + 1).map((n) => n.item.key);
1522
- if (this.interactionMode === `vscode`) {
1638
+ if (this.#intercepted({
1639
+ kind: `extend`,
1640
+ keys: rangeKeys,
1641
+ anchorKey: this.#anchor.key,
1642
+ targetKey: targetNode.item.key,
1643
+ source: `keyboard`
1644
+ })) {} else if (this.interactionMode === `vscode`) {
1523
1645
  const snap = this.#anchor.selectionSnapshot;
1524
1646
  for (const k of rangeKeys) if (snap.has(k)) this._selectedKeys.delete(k);
1525
1647
  else this._selectedKeys.add(k);
@@ -1803,6 +1925,7 @@ __decorate([state()], MillerBaseElement.prototype, "_columns", void 0);
1803
1925
  __decorate([state()], MillerBaseElement.prototype, "_loadingDepth", void 0);
1804
1926
  __decorate([state()], MillerBaseElement.prototype, "_selectedNodes", void 0);
1805
1927
  __decorate([property({ attribute: false })], MillerBaseElement.prototype, "restoreLoads", void 0);
1928
+ __decorate([state()], MillerBaseElement.prototype, "_partialKeys", void 0);
1806
1929
  MillerBaseElement = __decorate([safeCustomElement(`ixfx-miller-base`)], MillerBaseElement);
1807
1930
  //#endregion
1808
1931
  //#region src/miller/miller-list.ts
@@ -1854,6 +1977,7 @@ let MillerListElement = class MillerListElement extends MillerBaseElement {
1854
1977
  }
1855
1978
  #renderListItem(node, depth) {
1856
1979
  const selected = this._isSelected(node, depth);
1980
+ const partial = this._isPartial(node, depth);
1857
1981
  const tickled = this._isFocused(node, depth);
1858
1982
  const open = this._isOpen(node, depth);
1859
1983
  const isBranch = node.item.isLeaf !== true;
@@ -1865,13 +1989,14 @@ let MillerListElement = class MillerListElement extends MillerBaseElement {
1865
1989
  const isCheckedMode = this.interactionMode === `checked`;
1866
1990
  let checkboxTpl = nothing;
1867
1991
  if (isCheckedMode) {
1868
- const state = computeCheckboxState(node, this._selectedKeys);
1992
+ const state = partial ? `indeterminate` : computeCheckboxState(node, this._selectedKeys);
1869
1993
  checkboxTpl = html`
1870
1994
  <input
1871
1995
  type="checkbox"
1872
1996
  class="item-checkbox"
1873
1997
  .checked=${state === `checked`}
1874
1998
  .indeterminate=${state === `indeterminate`}
1999
+ aria-checked=${state === `indeterminate` ? `mixed` : String(state === `checked`)}
1875
2000
  aria-label="Select ${node.item.label}"
1876
2001
  @click=${(e) => this._handleCheckboxClick(e, node, depth)}
1877
2002
  />
@@ -1879,9 +2004,10 @@ let MillerListElement = class MillerListElement extends MillerBaseElement {
1879
2004
  }
1880
2005
  return html`
1881
2006
  <li
1882
- class="item ${selected ? `selected` : ``} ${open ? `open` : ``} ${tickled ? `tickled` : ``} ${isBranch ? `branch` : `leaf`}"
2007
+ class="item ${selected ? `selected` : ``} ${partial ? `partial` : ``} ${open ? `open` : ``} ${tickled ? `tickled` : ``} ${isBranch ? `branch` : `leaf`}"
1883
2008
  role="option"
1884
2009
  aria-selected=${selected}
2010
+ aria-description=${partial && !isCheckedMode ? this._partialDescription : nothing}
1885
2011
  @click=${(e) => this._handleItemClick(node, depth, e)}
1886
2012
  @dblclick=${(e) => this._handleItemDblClick(node, depth, e)}
1887
2013
  @contextmenu=${(e) => this._handleItemRightClick(node, depth, e)}
@@ -1914,6 +2040,12 @@ let MillerListElement = class MillerListElement extends MillerBaseElement {
1914
2040
  justify-content: space-between;
1915
2041
  }
1916
2042
 
2043
+ .item.partial:not(.selected) {
2044
+ background: var(--item-bg-partial, color-mix(in srgb, var(--item-selected-bg) 35%, transparent));
2045
+ outline: 1px dashed var(--item-border-partial, var(--border, #555));
2046
+ outline-offset: -1px;
2047
+ }
2048
+
1917
2049
  .item.selected {
1918
2050
  background: var(--item-selected-bg);
1919
2051
  color: var(--item-selected-text, #fff);
package/dist/miller.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { A as TreeTickleDetail, O as TreeSelectDetail, b as TreeItemClickDetail, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, n as TreeActivateEvent, r as TreeCollapseDetail, t as TreeActivateDetail, v as TreeExpandDetail, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-DgfkxmVY.js";
2
2
  import { a as TreeItem, o as TreeNode } from "./types-Jky6oNAp.js";
3
- import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-Bnm-kKGC.js";
3
+ import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-DyaHA9Kk.js";
4
4
  export { type TreeActivateDetail as MillerActivateDetail, type TreeActivateEvent as MillerActivateEvent, MillerBaseElement, MillerBaseElementEventMap, type TreeCollapseDetail as MillerCollapseDetail, type TreeCollapseEvent as MillerCollapseEvent, type TreeExpandDetail as MillerExpandDetail, type TreeExpandEvent as MillerExpandEvent, MillerHeaderClickDetail, MillerHeaderClickEvent, MillerHeaderRightClickDetail, MillerHeaderRightClickEvent, type TreeItem as MillerItem, type TreeItemClickDetail as MillerItemClickDetail, type TreeItemClickEvent as MillerItemClickEvent, MillerItemDblClickDetail, MillerItemDblClickEvent, MillerItemRightClickDetail, MillerItemRightClickEvent, MillerItemState, MillerListElement, type MillerListViewState, type TreeNode as MillerNode, MillerRebaseDetail, MillerRebaseEvent, type TreeSelectDetail as MillerSelectDetail, type TreeSelectEvent as MillerSelectEvent, MillerSelectionMode, type TreeTickleDetail as MillerTickleDetail, type TreeTickleEvent as MillerTickleEvent, MillerTreeController, MillerTreeControllerOptions };
package/dist/miller.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-DUqiUAWQ.js";
1
+ import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-Be7x4ufN.js";
2
2
  export { MillerBaseElement, MillerListElement, MillerTreeController };
@@ -3,7 +3,7 @@ import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
3
3
  import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
4
4
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
5
5
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
6
- import { p as createIncrSearch } from "./incr-search-CgbL-OlS.js";
6
+ import { m as createIncrSearch } from "./incr-search-Dc6gYpJG.js";
7
7
  import "./interaction-E-uMGHkJ.js";
8
8
  import { LitElement, css, html, nothing } from "lit";
9
9
  import { property, query, state } from "lit/decorators.js";
@@ -0,0 +1,32 @@
1
+ //#region src/interaction/partial-keys.ts
2
+ /**
3
+ * Shared "partial" row state for list-like components: a row whose resource
4
+ * is only partly selected (a time range of an audio file, a region of an
5
+ * image). Set by the caller through a `partialKeys` property; independent of
6
+ * the selection, except that a key which is also selected counts as selected.
7
+ */
8
+ /** Accessible description for a partial row outside checked mode (no `aria-checked="mixed"` there). */
9
+ const PARTIAL_DESCRIPTION = `Partially selected`;
10
+ /** Whether a row with this key shows the partial state: partial, and not selected (selected wins). */
11
+ function isPartialKey(key, partialKeys, selected) {
12
+ return !selected && key !== void 0 && partialKeys.has(key);
13
+ }
14
+ /** Whether two key sets hold the same keys. */
15
+ function sameKeySet(a, b) {
16
+ if (a.size !== b.size) return false;
17
+ for (const key of a) if (!b.has(key)) return false;
18
+ return true;
19
+ }
20
+ /**
21
+ * Reflect the partial state onto a row element: `data-partial`, plus an
22
+ * accessible description. Never overwrites an `aria-description` it didn't
23
+ * set itself.
24
+ */
25
+ function applyPartialAttributes(el, partial) {
26
+ el.toggleAttribute(`data-partial`, partial);
27
+ if (partial) {
28
+ if (!el.hasAttribute(`aria-description`)) el.setAttribute(`aria-description`, PARTIAL_DESCRIPTION);
29
+ } else if (el.getAttribute(`aria-description`) === PARTIAL_DESCRIPTION) el.removeAttribute(`aria-description`);
30
+ }
31
+ //#endregion
32
+ export { sameKeySet as i, applyPartialAttributes as n, isPartialKey as r, PARTIAL_DESCRIPTION as t };
@@ -1,2 +1,2 @@
1
- import { a as SunburstViewState, i as SunburstZoomEvent, n as SunburstTreeListElementEventMap, r as SunburstZoomDetail, t as SunburstTreeListElement } from "./sunbursttree-list-DePuFYlU.js";
1
+ import { a as SunburstViewState, i as SunburstZoomEvent, n as SunburstTreeListElementEventMap, r as SunburstZoomDetail, t as SunburstTreeListElement } from "./sunbursttree-list-Bk20giTF.js";
2
2
  export { SunburstTreeListElement, SunburstTreeListElementEventMap, type SunburstViewState, SunburstZoomDetail, SunburstZoomEvent };
@@ -1,2 +1,2 @@
1
- import { t as SunburstTreeListElement } from "./sunbursttree-list-B_M0YTEA.js";
1
+ import { t as SunburstTreeListElement } from "./sunbursttree-list-DQF6DcsS.js";
2
2
  export { SunburstTreeListElement };
@@ -2,7 +2,7 @@ import { C as TreeItemDblClickEvent, E as TreeSearchHost, M as TreeDataModel, a
2
2
  import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-Jky6oNAp.js";
3
3
  import { a as ViewStateBase, t as GetViewStateOptions } from "./types-LU1u0CB8.js";
4
4
  import "./index-9ttcdwlL.js";
5
- import { S as ListSearchController } from "./index-CUErGhCg.js";
5
+ import { S as ListSearchController } from "./index-Bm9a9S3_.js";
6
6
  import { LitElement, PropertyValues } from "lit";
7
7
  import { CommandRegistry } from "@clinth/ui-commands";
8
8
  //#region src/sunburst-tree/types.d.ts
@@ -1,7 +1,7 @@
1
1
  import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
2
2
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
3
3
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
4
- import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-CgbL-OlS.js";
4
+ import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-Dc6gYpJG.js";
5
5
  import { a as capKeys, l as keysToArray, n as EMPTY_KEYS } from "./pending-BGidHppL.js";
6
6
  import { t as collectDataResult } from "./data-provider-35TyWclX.js";
7
7
  import { t as ViewStateController } from "./view-state-controller-BdyXWUUM.js";
@@ -1,2 +1,2 @@
1
- import { A as TimelineTrackReorderEvent, C as TimelineEventResizeEvent, D as TimelineTickleChangeEvent, E as TimelineTickleChangeDetail, F as TrackHeightMode, I as TrackLayout, L as UserScale, M as TimelineTrackResizeEvent, N as TimelineTrackSelectDetail, O as TimelineTrack, P as TimelineTrackSelectEvent, R as ViewRange, S as TimelineEventResizeDetail, T as TimelineSelectionChangeEvent, _ as TimelineDraggingEvent, a as CssVars, b as TimelineEventMoveDetail, c as resolveGrid, d as DragSnappingFn, f as DragTarget, g as TimelineDraggingDetail, h as TimelineDraggingCallbackDetail, i as TimelineTrackTabElement, j as TimelineTrackResizeDetail, k as TimelineTrackReorderDetail, l as TimelineController, m as GridResolution, n as attachTimelineInteractions, o as Rect, p as GridMode, r as IxfxTimelineElement, s as resolveCssVars, t as timelineStyles, u as TimelineControllerConfig, v as TimelineElementEventMap, w as TimelineSelectionChangeDetail, x as TimelineEventMoveEvent, y as TimelineEvent } from "./index-DV3iaUBW.js";
1
+ import { A as TimelineTrackReorderEvent, C as TimelineEventResizeEvent, D as TimelineTickleChangeEvent, E as TimelineTickleChangeDetail, F as TrackHeightMode, I as TrackLayout, L as UserScale, M as TimelineTrackResizeEvent, N as TimelineTrackSelectDetail, O as TimelineTrack, P as TimelineTrackSelectEvent, R as ViewRange, S as TimelineEventResizeDetail, T as TimelineSelectionChangeEvent, _ as TimelineDraggingEvent, a as CssVars, b as TimelineEventMoveDetail, c as resolveGrid, d as DragSnappingFn, f as DragTarget, g as TimelineDraggingDetail, h as TimelineDraggingCallbackDetail, i as TimelineTrackTabElement, j as TimelineTrackResizeDetail, k as TimelineTrackReorderDetail, l as TimelineController, m as GridResolution, n as attachTimelineInteractions, o as Rect, p as GridMode, r as IxfxTimelineElement, s as resolveCssVars, t as timelineStyles, u as TimelineControllerConfig, v as TimelineElementEventMap, w as TimelineSelectionChangeDetail, x as TimelineEventMoveEvent, y as TimelineEvent } from "./index-DV3iaUBW2.js";
2
2
  export { type CssVars, DragSnappingFn, DragTarget, GridMode, GridResolution, IxfxTimelineElement, type Rect, TimelineController, TimelineControllerConfig, TimelineDraggingCallbackDetail, TimelineDraggingDetail, TimelineDraggingEvent, TimelineElementEventMap, TimelineEvent, TimelineEventMoveDetail, TimelineEventMoveEvent, TimelineEventResizeDetail, TimelineEventResizeEvent, TimelineSelectionChangeDetail, TimelineSelectionChangeEvent, TimelineTickleChangeDetail, TimelineTickleChangeEvent, TimelineTrack, TimelineTrackReorderDetail, TimelineTrackReorderEvent, TimelineTrackResizeDetail, TimelineTrackResizeEvent, TimelineTrackSelectDetail, TimelineTrackSelectEvent, TimelineTrackTabElement, TrackHeightMode, TrackLayout, UserScale, ViewRange, attachTimelineInteractions, resolveCssVars, resolveGrid, timelineStyles };