@ixfx/components 0.10.3 → 0.10.4

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 (98) hide show
  1. package/bundle/index.d.ts +76 -28
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +220 -5
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +1 -1
  6. package/dist/{ac-token-TCLAZeVg.d.ts → ac-token--_vCHXWw.d.ts} +2 -2
  7. package/dist/{ac-token-TCLAZeVg.d.ts.map → ac-token--_vCHXWw.d.ts.map} +1 -1
  8. package/dist/ac-token.d.ts +1 -1
  9. package/dist/{button-DsFbV4XD.js → button-B7mgqtxR.js} +36 -2
  10. package/dist/button-B7mgqtxR.js.map +1 -0
  11. package/dist/button-BYuf72aR.d.ts +63 -0
  12. package/dist/button-BYuf72aR.d.ts.map +1 -0
  13. package/dist/button.d.ts +2 -21
  14. package/dist/button.js +1 -1
  15. package/dist/colour-picker.d.ts +1 -1
  16. package/dist/crumbs.d.ts +1 -1
  17. package/dist/{data-grid-f9W2uzaR.d.ts → data-grid-DE1_gZNk.d.ts} +10 -5
  18. package/dist/data-grid-DE1_gZNk.d.ts.map +1 -0
  19. package/dist/data-grid.d.ts +2 -2
  20. package/dist/data-grid.js +56 -0
  21. package/dist/data-grid.js.map +1 -1
  22. package/dist/{detail-list-C3tozzBT.d.ts → detail-list-CaStSzYN.d.ts} +7 -5
  23. package/dist/detail-list-CaStSzYN.d.ts.map +1 -0
  24. package/dist/detail-list.d.ts +4 -3
  25. package/dist/detail-list.js +61 -1
  26. package/dist/detail-list.js.map +1 -1
  27. package/dist/{grid-list-CM1XhTaW.d.ts → grid-list-BJDxBL0x.d.ts} +3 -3
  28. package/dist/{grid-list-CM1XhTaW.d.ts.map → grid-list-BJDxBL0x.d.ts.map} +1 -1
  29. package/dist/{grid-list-WE92nfX5.js → grid-list-CaMcdpFJ.js} +22 -3
  30. package/dist/grid-list-CaMcdpFJ.js.map +1 -0
  31. package/dist/grid-list.d.ts +2 -2
  32. package/dist/grid-list.js +1 -1
  33. package/dist/{grouped-item-lister-CEZ72VOs.d.ts → grouped-item-lister-DETte0Dh.d.ts} +3 -3
  34. package/dist/{grouped-item-lister-CEZ72VOs.d.ts.map → grouped-item-lister-DETte0Dh.d.ts.map} +1 -1
  35. package/dist/grouped-item-lister.d.ts +1 -1
  36. package/dist/{icon-DR_3rSyZ.d.ts → icon-CDGprSdE.d.ts} +2 -2
  37. package/dist/icon-CDGprSdE.d.ts.map +1 -0
  38. package/dist/icons.d.ts +2 -2
  39. package/dist/incr-search.d.ts +1 -1
  40. package/dist/{index-C59-JEPl.d.ts → index-9AhaHIT2.d.ts} +3 -3
  41. package/dist/{index-C59-JEPl.d.ts.map → index-9AhaHIT2.d.ts.map} +1 -1
  42. package/dist/{index-garxxqgV.d.ts → index-CYndvTWH.d.ts} +2 -2
  43. package/dist/{index-garxxqgV.d.ts.map → index-CYndvTWH.d.ts.map} +1 -1
  44. package/dist/{index-BUB5SICW.d.ts → index-CoqtMSd9.d.ts} +2 -2
  45. package/dist/{index-BUB5SICW.d.ts.map → index-CoqtMSd9.d.ts.map} +1 -1
  46. package/dist/{index-BXafRK-_.d.ts → index-CsaQwNkz.d.ts} +2 -2
  47. package/dist/{index-BXafRK-_.d.ts.map → index-CsaQwNkz.d.ts.map} +1 -1
  48. package/dist/{index-CJ5fshD3.d.ts → index-UvnoZUAo.d.ts} +2 -2
  49. package/dist/{index-CJ5fshD3.d.ts.map → index-UvnoZUAo.d.ts.map} +1 -1
  50. package/dist/{index-BOUaDIW-.d.ts → index-tq6f8007.d.ts} +2 -2
  51. package/dist/{index-BOUaDIW-.d.ts.map → index-tq6f8007.d.ts.map} +1 -1
  52. package/dist/index.d.ts +21 -39
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -2
  55. package/dist/{labelled-input-base-Dp_9KP0G.d.ts → labelled-input-base-DiTme1JO.d.ts} +2 -2
  56. package/dist/{labelled-input-base-Dp_9KP0G.d.ts.map → labelled-input-base-DiTme1JO.d.ts.map} +1 -1
  57. package/dist/labelled-radial-input.d.ts +2 -2
  58. package/dist/labelled-radial-input.d.ts.map +1 -1
  59. package/dist/labelled-range-input.d.ts +1 -1
  60. package/dist/labelled-slider-input.d.ts +1 -1
  61. package/dist/{list-selection-types-B5ioL-dG.d.ts → list-selection-types-PjKdhF-a.d.ts} +1 -9
  62. package/dist/list-selection-types-PjKdhF-a.d.ts.map +1 -0
  63. package/dist/list-viewport-types-BRZsLcvp.d.ts +23 -0
  64. package/dist/list-viewport-types-BRZsLcvp.d.ts.map +1 -0
  65. package/dist/{menu-item-ZmkXNjek.d.ts → menu-item-CZi9vy5O.d.ts} +2 -2
  66. package/dist/{menu-item-ZmkXNjek.d.ts.map → menu-item-CZi9vy5O.d.ts.map} +1 -1
  67. package/dist/menu.d.ts +2 -2
  68. package/dist/miller.d.ts +1 -1
  69. package/dist/panel.d.ts +1 -1
  70. package/dist/{split-layout-C5SYbDrq.d.ts → split-layout-JK3xWVX2.d.ts} +2 -2
  71. package/dist/{split-layout-C5SYbDrq.d.ts.map → split-layout-JK3xWVX2.d.ts.map} +1 -1
  72. package/dist/split-layout.d.ts +1 -1
  73. package/dist/{tab-list-DbMIL520.d.ts → tab-list-CGyPt07Z.d.ts} +2 -2
  74. package/dist/{tab-list-DbMIL520.d.ts.map → tab-list-CGyPt07Z.d.ts.map} +1 -1
  75. package/dist/tabs.d.ts +1 -1
  76. package/dist/{titlebar-B5zSTZnF.d.ts → titlebar-Tqu-VvMU.d.ts} +2 -2
  77. package/dist/{titlebar-B5zSTZnF.d.ts.map → titlebar-Tqu-VvMU.d.ts.map} +1 -1
  78. package/dist/titlebar.d.ts +1 -1
  79. package/dist/tree.d.ts +1 -1
  80. package/dist/{vertical-list-DdaYcvHQ.d.ts → vertical-list-DfcNsa4p.d.ts} +11 -3
  81. package/dist/vertical-list-DfcNsa4p.d.ts.map +1 -0
  82. package/dist/vertical-list.d.ts +4 -3
  83. package/dist/vertical-list.js +47 -1
  84. package/dist/vertical-list.js.map +1 -1
  85. package/docs-user/data-grid.md +9 -0
  86. package/docs-user/detail-list.md +8 -0
  87. package/docs-user/grid-list.md +1 -1
  88. package/docs-user/index.json +2 -2
  89. package/docs-user/vertical-list.md +7 -0
  90. package/package.json +1 -1
  91. package/dist/button-DsFbV4XD.js.map +0 -1
  92. package/dist/button.d.ts.map +0 -1
  93. package/dist/data-grid-f9W2uzaR.d.ts.map +0 -1
  94. package/dist/detail-list-C3tozzBT.d.ts.map +0 -1
  95. package/dist/grid-list-WE92nfX5.js.map +0 -1
  96. package/dist/icon-DR_3rSyZ.d.ts.map +0 -1
  97. package/dist/list-selection-types-B5ioL-dG.d.ts.map +0 -1
  98. package/dist/vertical-list-DdaYcvHQ.d.ts.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { F as ListDragPreviewSourceResolver, P as ListDragPreviewRenderer, R as ListNativeDragStartEvent } from "./tree-component-DGmKBbpy.js";
2
- import { S as ListSearchController } from "./index-BXafRK-_.js";
3
- import { i as ListInteractionMode, l as ListSelectionMode, r as ListElementEventMap } from "./list-selection-types-B5ioL-dG.js";
2
+ import { n as ListViewportChangeEvent } from "./list-viewport-types-BRZsLcvp.js";
3
+ import { S as ListSearchController } from "./index-CsaQwNkz.js";
4
+ import { i as ListInteractionMode, l as ListSelectionMode, r as ListElementEventMap } from "./list-selection-types-PjKdhF-a.js";
4
5
  import { LitElement, PropertyValues } from "lit";
5
6
  import { CommandId, CommandRegistry } from "@clinth/ui-commands";
6
7
  //#region src/vertical-list/vertical-list.d.ts
@@ -123,6 +124,12 @@ declare class VerticalListElement extends LitElement {
123
124
  get registry(): CommandRegistry<unknown> | undefined;
124
125
  connectedCallback(): void;
125
126
  disconnectedCallback(): void;
127
+ /**
128
+ * The shadow scroll list only exists after the first render; start
129
+ * watching it so resizes move the window (virtualized) and the visible
130
+ * set (plain) too.
131
+ */
132
+ protected firstUpdated(): void;
126
133
  updated(changed: PropertyValues): void;
127
134
  /** The most recently selected item, or `undefined` if nothing is selected. */
128
135
  get selectedItem(): Element | undefined;
@@ -241,8 +248,9 @@ declare global {
241
248
  interface HTMLElementEventMap extends VerticalListElementEventMap {}
242
249
  }
243
250
  interface VerticalListElementEventMap extends ListElementEventMap {
251
+ 'vertical-list-viewport-change': ListViewportChangeEvent;
244
252
  'list-native-drag-start': ListNativeDragStartEvent<Element>;
245
253
  }
246
254
  //#endregion
247
255
  export { VerticalListElementEventMap as i, CustomCheckboxOptions as n, VerticalListElement as r, AddItemOptions as t };
248
- //# sourceMappingURL=vertical-list-DdaYcvHQ.d.ts.map
256
+ //# sourceMappingURL=vertical-list-DfcNsa4p.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertical-list-DfcNsa4p.d.ts","names":[],"sources":["../src/vertical-list/vertical-list.ts"],"mappings":";;;;;;;UA0DiB;EACf,WAAW;EACX;EACA;;UAGe;;;;;;EAMf;;cAuBW,4BAA4B;;EAEvC,eAAe;EAGf,iBAAiB;EAGjB,mBAAmB,IAAI;;;;;;EAQvB;;;;;;;;;;;;;;;;;;;EAqBA,oBAAoB,gCAAgC;;;;;;EAQpD;;;;;;EAQA;;;;;EAOA,qBAAqB,wBAAwB;EAG7C,mBAAmB,8BAA8B;;;;;;;;;;;EAajD;;;;;EAOA;;;;;;;;;EAWA,aAAa,eAAe;;;;;;;;;;;;;;;;;;EAoB5B;;;;;;EAQA;mBAyCiB;UAeT;UA6EA;;WA6EC,QAAM,qBAAA;;MAYX,YAAY;EA2BP;EAsBA;;;;;;YA4BU;EAwDV,QAAQ,SAAS;;MA8EtB,gBAAgB;;MAKhB,iBAAiB,YAAY;EAIjC,QAAQ,MAAM,kBAAkB,UAAU;;;;;;;EA4B1C,WAAW,MAAM,UAAU;;EA2B3B,YAAY,OAAO,SAAS,WAAW;EAIvC;;;;;;EAmBA,SAAS,gBAAgB;;;;;;EAwBzB,SAAS,WAAW,WAAW,OAAO;EAItC,OAAO,MAAM;EAIb,WAAW,OAAO,SAAS;EAI3B,SAAS,MAAM;EAIf;EAIA;;MAQI,gBAAgB;;MAKhB;;EAMJ,WAAW,MAAM;;EAKjB,gBAAgB,MAAM;;EAKtB,mBAAmB,MAAM;;;;;;EASzB,SAAS;;EAgCT,aAAa,cAAc;;;;;;;;EAW3B;;;;;;;EAuBA;EAsBE,eAAe,0CAA0C,UAAU;;;;;EA2CrE,YAAY,MAAM;;;;;;;;;;;EAclB,WAAW,aAAa;UA2fhB;UAgBA;UAOA;UAiBA;;;;;;;UA4GA;;;;;UAuBA;UAcA;UAYA;UAQA;UAWA;UAMA;UAIA;UAwDA;UAUA;UAMA;SAUQ,sBAAM;EAuKb,wBAAM;;QAeT;YACI;IACR,sBAAsB;;YAGd,4BAA4B;;UAGvB,oCAAoC;EACnD,iCAAiC;EACjC,0BAA0B,yBAAyB"}
@@ -1,4 +1,5 @@
1
1
  import { I as ListDragSource, L as ListNativeDragStartDetail, M as ListDragPreview, N as ListDragPreviewContext, P as ListDragPreviewRenderer, R as ListNativeDragStartEvent, j as ListDragEntry } from "./tree-component-DGmKBbpy.js";
2
- import { a as ListItemClickDetail, c as ListSelectEvent, d as ListTickleEvent, i as ListInteractionMode, l as ListSelectionMode, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, s as ListSelectDetail, t as ListActivateDetail, u as ListTickleDetail } from "./list-selection-types-B5ioL-dG.js";
3
- import { i as VerticalListElementEventMap, n as CustomCheckboxOptions, r as VerticalListElement, t as AddItemOptions } from "./vertical-list-DdaYcvHQ.js";
4
- export { AddItemOptions, CustomCheckboxOptions, type ListActivateDetail, type ListActivateEvent, type ListDragEntry, type ListDragPreview, type ListDragPreviewContext, type ListDragPreviewRenderer, type ListDragSource, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListNativeDragStartDetail, type ListNativeDragStartEvent, type ListSelectDetail, type ListSelectEvent, type ListSelectionMode, type ListTickleDetail, type ListTickleEvent, VerticalListElement, VerticalListElementEventMap };
2
+ import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BRZsLcvp.js";
3
+ import { a as ListItemClickDetail, c as ListSelectEvent, d as ListTickleEvent, i as ListInteractionMode, l as ListSelectionMode, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, s as ListSelectDetail, t as ListActivateDetail, u as ListTickleDetail } from "./list-selection-types-PjKdhF-a.js";
4
+ import { i as VerticalListElementEventMap, n as CustomCheckboxOptions, r as VerticalListElement, t as AddItemOptions } from "./vertical-list-DfcNsa4p.js";
5
+ export { AddItemOptions, CustomCheckboxOptions, type ListActivateDetail, type ListActivateEvent, type ListDragEntry, type ListDragPreview, type ListDragPreviewContext, type ListDragPreviewRenderer, type ListDragSource, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListNativeDragStartDetail, type ListNativeDragStartEvent, type ListSelectDetail, type ListSelectEvent, type ListSelectionMode, type ListTickleDetail, type ListTickleEvent, type ListViewportChangeDetail, type ListViewportChangeEvent, VerticalListElement, VerticalListElementEventMap };
@@ -15,6 +15,12 @@ const ITEM_SELECTOR = `li:not([data-virtual-spacer]), [data-list-item]:not([data
15
15
  * vertical rows are shorter relative to the viewport, so 3.
16
16
  */
17
17
  const VIRTUAL_OVERSCAN = 3;
18
+ /** Shallow key-array equality, treating `undefined` (never dispatched) as different. */
19
+ function sameKeys(a, b) {
20
+ if (a === void 0 || a.length !== b.length) return false;
21
+ for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;
22
+ return true;
23
+ }
18
24
  let VerticalListElement = class VerticalListElement extends LitElement {
19
25
  constructor(..._args) {
20
26
  super(..._args);
@@ -129,11 +135,11 @@ let VerticalListElement = class VerticalListElement extends LitElement {
129
135
  highlightKey: `vertical-list-search`
130
136
  }) });
131
137
  this.#onScroll = () => {
132
- if (!this.#virtualActive()) return;
133
138
  if (this.#scrollRaf !== 0) return;
134
139
  this.#scrollRaf = requestAnimationFrame(() => {
135
140
  this.#scrollRaf = 0;
136
141
  this.#syncVirtualWindow();
142
+ this.#emitViewportChangeIfChanged();
137
143
  });
138
144
  };
139
145
  this._onPointerOver = (e) => {
@@ -226,6 +232,9 @@ let VerticalListElement = class VerticalListElement extends LitElement {
226
232
  #suspendAdapterRebuild;
227
233
  #scrollRaf;
228
234
  #resizeObserver;
235
+ /** Key sets as of the last viewport-change dispatch, for dedupe. */
236
+ #lastViewportRenderedKeys;
237
+ #lastViewportVisibleKeys;
229
238
  #topSpacer;
230
239
  #bottomSpacer;
231
240
  /** Last measured viewport height — kept so a 0 read can't collapse the window. */
@@ -353,6 +362,14 @@ let VerticalListElement = class VerticalListElement extends LitElement {
353
362
  }
354
363
  }
355
364
  /**
365
+ * The shadow scroll list only exists after the first render; start
366
+ * watching it so resizes move the window (virtualized) and the visible
367
+ * set (plain) too.
368
+ */
369
+ firstUpdated() {
370
+ this.#ensureResizeObserved();
371
+ }
372
+ /**
356
373
  * Animate in items appended to the light DOM (however they got there —
357
374
  * {@link addItem}, direct `appendChild`, a framework binding). A bulk populate
358
375
  * (roughly everything at once) is left alone, as are the wrapper `<li>`s the
@@ -362,6 +379,7 @@ let VerticalListElement = class VerticalListElement extends LitElement {
362
379
  if (!this.isConnected) return;
363
380
  if (this.#virtualActive()) {
364
381
  this.#syncVirtualWindow(this.#reconcileRecords(records));
382
+ this.#scheduleViewportChangeEmit();
365
383
  return;
366
384
  }
367
385
  const fresh = [];
@@ -372,6 +390,7 @@ let VerticalListElement = class VerticalListElement extends LitElement {
372
390
  this.#animatedItems.add(node);
373
391
  fresh.push(node);
374
392
  }
393
+ this.#scheduleViewportChangeEmit();
375
394
  if (fresh.length === 0) return;
376
395
  if (this.#isBulkPopulate(fresh.length)) return;
377
396
  for (const el of fresh) animateListItemIn(el);
@@ -925,6 +944,7 @@ let VerticalListElement = class VerticalListElement extends LitElement {
925
944
  if (!ul) return;
926
945
  this.#resizeObserver ??= new ResizeObserver(() => {
927
946
  this.#syncVirtualWindow();
947
+ this.#scheduleViewportChangeEmit();
928
948
  });
929
949
  this.#resizeObserver.observe(ul);
930
950
  }
@@ -1004,6 +1024,32 @@ let VerticalListElement = class VerticalListElement extends LitElement {
1004
1024
  this._syncItemStates();
1005
1025
  this._syncNativeDraggable();
1006
1026
  this.#nativeDrag.refreshDraggable();
1027
+ this.#scheduleViewportChangeEmit();
1028
+ }
1029
+ /** Coalesce content/layout viewport checks to at most one animation frame. */
1030
+ #scheduleViewportChangeEmit() {
1031
+ if (this.#scrollRaf !== 0) return;
1032
+ this.#scrollRaf = requestAnimationFrame(() => {
1033
+ this.#scrollRaf = 0;
1034
+ this.#syncVirtualWindow();
1035
+ this.#emitViewportChangeIfChanged();
1036
+ });
1037
+ }
1038
+ /**
1039
+ * Dispatch `vertical-list-viewport-change` with the current key sets — unless
1040
+ * neither set changed since the last dispatch, so coalesced frames and
1041
+ * no-op scrolls stay silent.
1042
+ */
1043
+ #emitViewportChangeIfChanged() {
1044
+ const renderedKeys = this.renderedKeys();
1045
+ const visibleKeys = this.visibleKeys();
1046
+ if (sameKeys(this.#lastViewportRenderedKeys, renderedKeys) && sameKeys(this.#lastViewportVisibleKeys, visibleKeys)) return;
1047
+ this.#lastViewportRenderedKeys = renderedKeys;
1048
+ this.#lastViewportVisibleKeys = visibleKeys;
1049
+ this._dispatch(`vertical-list-viewport-change`, {
1050
+ renderedKeys,
1051
+ visibleKeys
1052
+ });
1007
1053
  }
1008
1054
  _getVisibleItems() {
1009
1055
  return Array.from(this.querySelectorAll(ITEM_SELECTOR)).filter((el) => {