@ixfx/components 0.16.5 → 0.17.1

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 (218) hide show
  1. package/bundle/index.d.ts +4093 -1746
  2. package/bundle/index.js +1083 -226
  3. package/bundle/rolldown-runtime-CAoDHAWh.js +1 -0
  4. package/dist/ac-text.d.ts +11 -14
  5. package/dist/ac-text.js +8 -9
  6. package/dist/{ac-token-qEs3FsQv.d.ts → ac-token-CTBa93hF.d.ts} +2 -6
  7. package/dist/ac-token.d.ts +1 -1
  8. package/dist/ac-token.js +8 -9
  9. package/dist/{button-ikByJJPN.js → button-BOX1dfyd.js} +5 -7
  10. package/dist/{button-N92DKoWb.d.ts → button-DyJyyCsb.d.ts} +0 -4
  11. package/dist/button.d.ts +1 -1
  12. package/dist/button.js +1 -2
  13. package/dist/checkbox.d.ts +42 -9
  14. package/dist/checkbox.js +4 -5
  15. package/dist/{checked-select-CBUidG7n.js → checked-select-BmwqpgGr.js} +8 -10
  16. package/dist/{checked-select-CglRukbP.d.ts → checked-select-CNv5zNvR.d.ts} +0 -4
  17. package/dist/checked-select.d.ts +33 -1
  18. package/dist/checked-select.js +1 -2
  19. package/dist/{colour-picker-DwAa6RDh.js → colour-picker-D8g-bTSF.js} +6 -9
  20. package/dist/colour-picker.d.ts +1 -1
  21. package/dist/colour-picker.js +1 -2
  22. package/dist/{crumb-navigation-D3ndPgFg.js → crumb-navigation-D7dAC0H-.js} +11 -13
  23. package/dist/{crumb-navigation-BbqfmkYs.d.ts → crumb-navigation-Tm4fnsvN.d.ts} +6 -10
  24. package/dist/crumbs.d.ts +1 -1
  25. package/dist/crumbs.js +1 -2
  26. package/dist/{data-controller-DOlmqNKb.js → data-controller-q-rXRMzJ.js} +1 -2
  27. package/dist/data-display.d.ts +5 -8
  28. package/dist/data-display.js +3 -4
  29. package/dist/{data-grid-8TsiF2ES.js → data-grid-BcO3SMac.js} +20 -23
  30. package/dist/{data-grid-CslzF16R.d.ts → data-grid-vasJtjFP.d.ts} +9 -15
  31. package/dist/data-grid.d.ts +2 -2
  32. package/dist/data-grid.js +1 -2
  33. package/dist/{data-provider-35TyWclX.js → data-provider-C6ZNAcaT.js} +1 -2
  34. package/dist/{data-provider-BAn_-oR1.d.ts → data-provider-Cq_ylpET.d.ts} +0 -2
  35. package/dist/date-input.d.ts +9 -12
  36. package/dist/date-input.js +3 -4
  37. package/dist/{decorate-VRK8rslU.js → decorate-Dxs8sFX8.js} +2 -4
  38. package/dist/{defaults-B4ePs4LB.js → defaults-_6ELsqLb.js} +2 -3
  39. package/dist/{detail-list-n1MbNbhF.d.ts → detail-list-E9WdMVbE.d.ts} +10 -16
  40. package/dist/{detail-list-w3GXKO2k.js → detail-list-vPVwE1CP.js} +17 -20
  41. package/dist/detail-list.d.ts +5 -5
  42. package/dist/detail-list.js +1 -2
  43. package/dist/{drag-ghost-DtSDvjri.js → drag-ghost-DNWu_RyN.js} +1 -2
  44. package/dist/{editable-label-rzXkjf1H.d.ts → editable-label-CiHCDlhC.d.ts} +0 -2
  45. package/dist/editable-label.d.ts +31 -1
  46. package/dist/editable-label.js +3 -4
  47. package/dist/{fallbacks-DQ_5OsmR.js → fallbacks-BPjjBoED.js} +1 -2
  48. package/dist/{flat-list-D_4y3wgn.d.ts → flat-list-CfutGqKY.d.ts} +8 -12
  49. package/dist/flat-list.d.ts +1 -1
  50. package/dist/flat-list.js +10 -11
  51. package/dist/{form-CY0nibZ5.js → form-Cxx2sO8_.js} +5 -9
  52. package/dist/{form-BGZK3jZd.d.ts → form-raTQNAWF.d.ts} +0 -4
  53. package/dist/form.d.ts +1 -1
  54. package/dist/form.js +1 -2
  55. package/dist/{grid-list-Cz2tKcNZ.js → grid-list-D2hinM64.js} +275 -41
  56. package/dist/{grid-list-CqYS28NY.d.ts → grid-list-OCdjuhng.d.ts} +60 -24
  57. package/dist/grid-list.d.ts +5 -5
  58. package/dist/grid-list.js +1 -2
  59. package/dist/{grouped-item-lister-CS4yInuw.d.ts → grouped-item-lister-1MlvJORP.d.ts} +2 -6
  60. package/dist/grouped-item-lister.d.ts +1 -1
  61. package/dist/grouped-item-lister.js +3 -4
  62. package/dist/{grouping-CUKgmkMm.d.ts → grouping-OoQ8WaKc.d.ts} +0 -2
  63. package/dist/{grouping-RYPnHkrS.js → grouping-kENdqzSV.js} +1 -2
  64. package/dist/{handle-DAXs7kbJ.js → handle-BVUWv97X.js} +1 -2
  65. package/dist/{hex-editor-Caq8vNQk.d.ts → hex-editor-BCBKRU9D.d.ts} +0 -4
  66. package/dist/{hex-editor-DiYpgIKs.js → hex-editor-DephDhuu.js} +12 -13
  67. package/dist/hex.d.ts +1 -1
  68. package/dist/hex.js +1 -2
  69. package/dist/{highlight-B-eQrhhb.js → highlight-noLHFSKZ.js} +1 -2
  70. package/dist/{icon-CDGprSdE.d.ts → icon-Bhz0c6Yf.d.ts} +0 -2
  71. package/dist/{icon-1gpwtPx8.js → icon-DvTQuylG.js} +4 -5
  72. package/dist/icons.d.ts +2 -2
  73. package/dist/icons.js +4 -5
  74. package/dist/{incr-search-Dc6gYpJG.js → incr-search-C5114RxZ.js} +14 -26
  75. package/dist/incr-search.d.ts +1 -1
  76. package/dist/incr-search.js +2 -2
  77. package/dist/{index-ZaA90u09.d.ts → index-0smh4WCH.d.ts} +3 -21
  78. package/dist/{index-VAs9akt4.d.ts → index-88ra6YHP.d.ts} +8 -22
  79. package/dist/{index-UvnoZUAo.d.ts → index-B7odjrlg.d.ts} +4 -8
  80. package/dist/{index-Bm9a9S3_.d.ts → index-CRLTVAyt.d.ts} +4 -30
  81. package/dist/{index-9ttcdwlL.d.ts → index-Cdcek1Oj.d.ts} +1 -3
  82. package/dist/index-Cn0qsz9a.d.ts +1632 -0
  83. package/dist/{index-YCDugjdu.d.ts → index-CzhYJJsx.d.ts} +7 -17
  84. package/dist/{index-CYndvTWH.d.ts → index-D6N4Lzek.d.ts} +1 -5
  85. package/dist/{index-CoqtMSd9.d.ts → index-DN6kC6an.d.ts} +1 -3
  86. package/dist/{index-DV3iaUBW2.d.ts → index-DrYQBts2.d.ts} +0 -14
  87. package/dist/{index-o-CWDt11.d.ts → index-DzocgUef.d.ts} +0 -4
  88. package/dist/{index-DN2BWctP.d.ts → index-PIrgX1bP.d.ts} +1 -7
  89. package/dist/index.d.ts +364 -491
  90. package/dist/index.js +139 -207
  91. package/dist/interaction-8Kbbf6xN.js +3 -0
  92. package/dist/{item-appearance-BjcMyauw.js → item-appearance-FRO3TRFI.js} +1 -2
  93. package/dist/{keyboard-B5xD7Fz-.js → keyboard-DMwjIYh7.js} +0 -1
  94. package/dist/{labelled-input-base-BFa4xlYV.js → labelled-input-base-KUhD02dh.js} +3 -5
  95. package/dist/{labelled-input-base-DiTme1JO.d.ts → labelled-input-base-jyr_SR6t.d.ts} +0 -2
  96. package/dist/labelled-radial-input.d.ts +4 -7
  97. package/dist/labelled-radial-input.js +5 -6
  98. package/dist/labelled-range-input.d.ts +1 -1
  99. package/dist/labelled-range-input.js +3 -4
  100. package/dist/{labelled-slider-input-FdCRi6st.js → labelled-slider-input-CfRKd5kC.js} +9 -11
  101. package/dist/labelled-slider-input.d.ts +1 -1
  102. package/dist/labelled-slider-input.js +1 -2
  103. package/dist/led.d.ts +3 -6
  104. package/dist/led.js +2 -3
  105. package/dist/list-group-header.d.ts +3 -6
  106. package/dist/list-group-header.js +3 -4
  107. package/dist/{list-native-drag-controller-CcXoS0YX.js → list-native-drag-controller-ByftBooJ.js} +5 -9
  108. package/dist/{list-native-drag-controller-D_UrXipS.d.ts → list-native-drag-controller-CgXKdmjr.d.ts} +1 -3
  109. package/dist/{list-selection-controller-D4iIrvJH.js → list-selection-controller-Dkh3m3hX.js} +3 -5
  110. package/dist/{list-selection-types-Dnamh2Lu.d.ts → list-selection-types-CKTt7Rrw.d.ts} +0 -2
  111. package/dist/{list-viewport-types-BRZsLcvp.d.ts → list-viewport-types-BJ8c6qur.d.ts} +0 -2
  112. package/dist/{menu-BX1FHxY8.js → menu-C3DhTjHx.js} +17 -27
  113. package/dist/{menu-item-oxU1VKiJ.js → menu-item-BSxhlWnW.js} +30 -15
  114. package/dist/{menu-item-bF6narIz.d.ts → menu-item-DJhaWy9z.d.ts} +10 -7
  115. package/dist/menu.d.ts +2 -2
  116. package/dist/menu.js +2 -2
  117. package/dist/{miller-BrmBywNZ.js → miller-DqDEaXqT.js} +15 -19
  118. package/dist/miller.d.ts +3 -3
  119. package/dist/miller.js +1 -2
  120. package/dist/narrowed-text.d.ts +1 -1
  121. package/dist/narrowed-text.js +8 -9
  122. package/dist/node-graph-DqEGv5QR.js +5369 -0
  123. package/dist/node-graph.d.ts +2 -0
  124. package/dist/node-graph.js +1 -0
  125. package/dist/{notification-pill-DyZydXoZ.d.ts → notification-pill-BiHEJk-o.d.ts} +0 -4
  126. package/dist/notifier.d.ts +1 -1
  127. package/dist/notifier.js +4 -5
  128. package/dist/{pan-text-CoYmt2qd.d.ts → pan-text-DKe2zinH.d.ts} +0 -2
  129. package/dist/{pan-text-CqtvjPyK.js → pan-text-DrJYKQKN.js} +3 -4
  130. package/dist/panel.d.ts +11 -14
  131. package/dist/panel.js +3 -4
  132. package/dist/{partial-keys-Ck6CiprB.js → partial-keys-D4l_ede_.js} +2 -3
  133. package/dist/{pending-BGidHppL.js → pending-Afl4LT64.js} +1 -2
  134. package/dist/plots.d.ts +1 -1
  135. package/dist/plots.js +1 -2
  136. package/dist/polar-pad.d.ts +5 -7
  137. package/dist/polar-pad.js +6 -7
  138. package/dist/{popup-D80sj2QC.js → popup-D8IxN1Eq.js} +1 -2
  139. package/dist/{prominence-DlFShic3.js → prominence-BOOQVWF-.js} +1 -2
  140. package/dist/{radial-input-KMVltQfe.js → radial-input-Cxys4TOG.js} +7 -9
  141. package/dist/{radial-input-DU6t2hYO.d.ts → radial-input-DNCSwRGF.d.ts} +1 -5
  142. package/dist/radial-input.d.ts +10 -1
  143. package/dist/radial-input.js +1 -2
  144. package/dist/range-input.d.ts +4 -6
  145. package/dist/range-input.js +5 -6
  146. package/dist/range.d.ts +4 -6
  147. package/dist/range.js +6 -7
  148. package/dist/{registry-BEtb8_wB.js → registry-DcF0fO7l.js} +1 -2
  149. package/dist/rolldown-runtime-D3KUYPsf.js +12 -0
  150. package/dist/{scroll-fade-Xx28D7mH.js → scroll-fade-DH8OXSqL.js} +1 -2
  151. package/dist/{scroll-hover-guard-Cjw6179Q.js → scroll-hover-guard-BGAjtyXT.js} +1 -2
  152. package/dist/select-horiz.d.ts +7 -9
  153. package/dist/select-horiz.js +8 -9
  154. package/dist/{slider-input-ByHdotzp.js → slider-input-C3mbUBZi.js} +6 -8
  155. package/dist/{slider-input-BxURAAmD.d.ts → slider-input-DHLGJKWF.d.ts} +1 -5
  156. package/dist/slider-input.d.ts +34 -1
  157. package/dist/slider-input.js +1 -2
  158. package/dist/snackbar.d.ts +5 -8
  159. package/dist/snackbar.js +4 -5
  160. package/dist/snap-container.d.ts +8 -11
  161. package/dist/snap-container.js +2 -3
  162. package/dist/{split-layout-DTY4PJRp.js → split-layout-BMN_s6d7.js} +10 -15
  163. package/dist/{split-layout-CophkNeU.d.ts → split-layout-HytcG1Bn.d.ts} +2 -8
  164. package/dist/split-layout.d.ts +1 -1
  165. package/dist/split-layout.js +1 -2
  166. package/dist/sunburst-tree.d.ts +1 -1
  167. package/dist/sunburst-tree.js +1 -2
  168. package/dist/{sunbursttree-list-DQF6DcsS.js → sunbursttree-list-C-FuZB5z.js} +23 -32
  169. package/dist/{sunbursttree-list-Bk20giTF.d.ts → sunbursttree-list-CsrmVSB8.d.ts} +5 -11
  170. package/dist/swipe.d.ts +7 -9
  171. package/dist/swipe.js +5 -6
  172. package/dist/{tab-list-Df371rqw.d.ts → tab-list-BXMRYJeR.d.ts} +1 -5
  173. package/dist/{tab-list-R_bGbDvO.js → tab-list-CFJy3hVm.js} +6 -15
  174. package/dist/tabs.d.ts +1 -1
  175. package/dist/tabs.js +1 -2
  176. package/dist/{tickled-controller-D-HZymaZ.js → tickled-controller-BVhGKzjZ.js} +1 -2
  177. package/dist/{tickled-controller-DodxD3eQ.d.ts → tickled-controller-DSPoG551.d.ts} +0 -2
  178. package/dist/{tickled-styles-BrAHEj1q.js → tickled-styles-pnieYweS.js} +1 -2
  179. package/dist/{timeline-BP1Ux2EV.js → timeline-Br5JIeLI.js} +9 -15
  180. package/dist/timeline.d.ts +1 -1
  181. package/dist/timeline.js +1 -2
  182. package/dist/{titlebar-Tqu-VvMU.d.ts → titlebar-BtLAF2ws.d.ts} +1 -3
  183. package/dist/titlebar.d.ts +1 -1
  184. package/dist/titlebar.js +4 -5
  185. package/dist/{tooltip-CJt3WLmN.js → tooltip-B7t_u6EY.js} +1 -2
  186. package/dist/{tooltip-BlvBUQxx.d.ts → tooltip-Bl4HpBue.d.ts} +0 -2
  187. package/dist/transitory-label.d.ts +3 -6
  188. package/dist/transitory-label.js +2 -3
  189. package/dist/{tree-BaXYyt5U.js → tree-BP5fxvEX.js} +24 -34
  190. package/dist/{tree-CftHwtEb.js → tree-DUc-iQcg.js} +2 -3
  191. package/dist/{tree-component-DgfkxmVY.d.ts → tree-component-DNuzfo6R.d.ts} +2 -8
  192. package/dist/tree.d.ts +3 -3
  193. package/dist/tree.js +1 -2
  194. package/dist/{types-LU1u0CB8.d.ts → types-16GC5k1z.d.ts} +0 -2
  195. package/dist/{types-Jky6oNAp.d.ts → types-6hpXRKt7.d.ts} +1 -3
  196. package/dist/unit-input.d.ts +11 -14
  197. package/dist/unit-input.js +3 -4
  198. package/dist/{vertical-list-o5hfqH87.js → vertical-list-B9z1lbjM.js} +13 -15
  199. package/dist/{vertical-list-DtHX26JO.d.ts → vertical-list-BzeXehBt.d.ts} +7 -13
  200. package/dist/vertical-list.d.ts +4 -4
  201. package/dist/vertical-list.js +1 -2
  202. package/dist/{view-state-controller-BdyXWUUM.js → view-state-controller-DiPAPiA7.js} +3 -6
  203. package/dist/{wheel-nudge-D5rmht3v.js → wheel-nudge-DgJzrL28.js} +2 -3
  204. package/dist/{wheel-nudge-By5s_ioH.d.ts → wheel-nudge-oMFKat9P.d.ts} +1 -3
  205. package/dist/{xy-axis-DQqd2yXJ.d.ts → xy-axis-Bf6WfOS2.d.ts} +0 -12
  206. package/dist/{xy-axis-CyMd_Bn1.js → xy-axis-CBpml-3S.js} +11 -20
  207. package/dist/xy-pad.d.ts +7 -9
  208. package/dist/xy-pad.js +6 -7
  209. package/docs-user/README.md +1 -0
  210. package/docs-user/grid-list.md +65 -0
  211. package/docs-user/index.json +7 -2
  212. package/docs-user/llms.txt +1 -0
  213. package/docs-user/node-graph.md +376 -0
  214. package/llms.txt +1 -0
  215. package/package.json +39 -24
  216. package/bundle/rolldown-runtime-CEoa-xHZ.js +0 -1
  217. package/dist/interaction-E-uMGHkJ.js +0 -3
  218. package/dist/rolldown-runtime-D7D4PA-g.js +0 -13
@@ -1,5 +1,5 @@
1
- import { B as ListNativeDragStartDetail, F as ListDragPreview, I as ListDragPreviewContext, L as ListDragPreviewRenderer, P as ListDragEntry, V as ListNativeDragStartEvent, z as ListDragSource } from "./tree-component-DgfkxmVY.js";
2
- import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BRZsLcvp.js";
3
- import { _ as ListTickleEvent, a as ListItemClickDetail, c as ListSelectDetail, g as ListTickleDetail, h as ListSelectionMode, i as ListInteractionMode, l as ListSelectEvent, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, t as ListActivateDetail } from "./list-selection-types-Dnamh2Lu.js";
4
- import { a as VerticalListViewState, c as ListDragLeaveDetail, d as ListDropDetail, f as ListDropEvent, g as ListEditCommitEvent, h as ListEditCommitDetail, i as VerticalListElementEventMap, l as ListDragLeaveEvent, m as ListEditCancelEvent, n as CustomCheckboxOptions, o as ListContextMenuDetail, p as ListEditCancelDetail, r as VerticalListElement, s as ListContextMenuEvent, t as AddItemOptions, u as ListDragOverEvent } from "./vertical-list-DtHX26JO.js";
1
+ import { B as ListNativeDragStartDetail, F as ListDragPreview, I as ListDragPreviewContext, L as ListDragPreviewRenderer, P as ListDragEntry, V as ListNativeDragStartEvent, z as ListDragSource } from "./tree-component-DNuzfo6R.js";
2
+ import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BJ8c6qur.js";
3
+ import { _ as ListTickleEvent, a as ListItemClickDetail, c as ListSelectDetail, g as ListTickleDetail, h as ListSelectionMode, i as ListInteractionMode, l as ListSelectEvent, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, t as ListActivateDetail } from "./list-selection-types-CKTt7Rrw.js";
4
+ import { a as VerticalListViewState, c as ListDragLeaveDetail, d as ListDropDetail, f as ListDropEvent, g as ListEditCommitEvent, h as ListEditCommitDetail, i as VerticalListElementEventMap, l as ListDragLeaveEvent, m as ListEditCancelEvent, n as CustomCheckboxOptions, o as ListContextMenuDetail, p as ListEditCancelDetail, r as VerticalListElement, s as ListContextMenuEvent, t as AddItemOptions, u as ListDragOverEvent } from "./vertical-list-BzeXehBt.js";
5
5
  export { AddItemOptions, CustomCheckboxOptions, type ListActivateDetail, type ListActivateEvent, type ListContextMenuDetail, type ListContextMenuEvent, type ListDragEntry, type ListDragLeaveDetail, type ListDragLeaveEvent, type ListDragOverEvent, type ListDragPreview, type ListDragPreviewContext, type ListDragPreviewRenderer, type ListDragSource, type ListDropDetail, type ListDropEvent, type ListEditCancelDetail, type ListEditCancelEvent, type ListEditCommitDetail, type ListEditCommitEvent, 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, type VerticalListViewState };
@@ -1,2 +1 @@
1
- import { t as VerticalListElement } from "./vertical-list-o5hfqH87.js";
2
- export { VerticalListElement };
1
+ export { t as VerticalListElement } from "./vertical-list-B9z1lbjM.js";
@@ -1,4 +1,4 @@
1
- //#region src/common/view-state/types.ts
1
+ // src/common/view-state/types.ts
2
2
  /**
3
3
  * Shared view-state contract for list-like components.
4
4
  *
@@ -17,8 +17,7 @@
17
17
  const VIEW_STATE_VERSION = 1;
18
18
  /** Name of the debounced change event every view-stateful component fires. */
19
19
  const VIEW_STATE_CHANGE = `view-state-change`;
20
- //#endregion
21
- //#region src/common/view-state/scroll-anchor.ts
20
+ // src/common/view-state/scroll-anchor.ts
22
21
  /**
23
22
  * Capture a {@link ScrollState} for a DOM-rendered list. `items` must be in
24
23
  * visual order along `axis`; the first one whose far edge is below / right of
@@ -143,8 +142,7 @@ function onUserScrollIntent(target, onIntent) {
143
142
  for (const type of events) target.removeEventListener(type, handler, { capture: true });
144
143
  };
145
144
  }
146
- //#endregion
147
- //#region src/common/view-state/view-state-controller.ts
145
+ // src/common/view-state/view-state-controller.ts
148
146
  const REASON_RANK = {
149
147
  restore: 0,
150
148
  data: 1,
@@ -301,5 +299,4 @@ var ViewStateController = class {
301
299
  this.notify(reason);
302
300
  }
303
301
  };
304
- //#endregion
305
302
  export { restoreElementScroll as a, VIEW_STATE_VERSION as c, onUserScrollIntent as i, anchorFromRow as n, scrollToOffset as o, captureElementScroll as r, VIEW_STATE_CHANGE as s, ViewStateController as t };
@@ -1,6 +1,6 @@
1
- import { t as __decorate } from "./decorate-VRK8rslU.js";
1
+ import { t as __decorate } from "./decorate-Dxs8sFX8.js";
2
2
  import { property } from "lit/decorators.js";
3
- //#region src/mixins/wheel-nudge.ts
3
+ // src/mixins/wheel-nudge.ts
4
4
  /**
5
5
  * Mixin that adds mousewheel support with an optional `lighttouch` hover mode.
6
6
  *
@@ -85,5 +85,4 @@ function WheelNudgeMixin(superClass) {
85
85
  })], WheelNudgeMixinClass.prototype, "lighttouch", void 0);
86
86
  return WheelNudgeMixinClass;
87
87
  }
88
- //#endregion
89
88
  export { WheelNudgeMixin as t };
@@ -1,5 +1,4 @@
1
- import { LitElement } from "lit";
2
- //#region src/mixins/wheel-nudge.d.ts
1
+ import "lit";
3
2
  /**
4
3
  * Direction of a wheel tick. `+1` for `deltaY < 0` (wheel up/away), `-1` for
5
4
  * `deltaY > 0` (wheel down/toward).
@@ -26,5 +25,4 @@ interface WheelNudgeConsumer {
26
25
  _applyWheelDelta(direction: WheelDirection, event: WheelEvent): void;
27
26
  _shouldHandleWheel(): boolean;
28
27
  }
29
- //#endregion
30
28
  export { WheelNudgeConsumer as n, WheelDirection as t };
@@ -1,5 +1,4 @@
1
1
  import { LitElement, PropertyValues } from "lit";
2
- //#region src/plots/colour-map.d.ts
3
2
  type ColourMode = `fixed` | `opacity` | `hue` | `saturation` | `lightness` | `scale`;
4
3
  type ColourMapConfig = {
5
4
  mode: ColourMode;
@@ -30,8 +29,6 @@ declare function computeColour(scaledValue: number, baseColour: string, config:
30
29
  * 'size' is not handled here — the caller adjusts the radius separately.
31
30
  */
32
31
  declare function applyAgeModification(base: ColourResult, ageFraction: number, ageStyle: string): ColourResult;
33
- //#endregion
34
- //#region src/plots/data.d.ts
35
32
  type PlotDataSeriesOptions = {
36
33
  /**
37
34
  * Limit of how many data points to store.
@@ -101,8 +98,6 @@ declare class PlotDataSeries {
101
98
  */
102
99
  clear(): boolean;
103
100
  }
104
- //#endregion
105
- //#region src/plots/single-axis.d.ts
106
101
  type SingleAxisDrawStyle = `line-sharp` | `line-round` | `circles` | `squares` | `vbar` | `hbar` | `hist-bottom` | `hist-top` | `hist-middle`;
107
102
  type SingleAxisAgeStyle = `none` | `opacity` | `desaturation` | `size`;
108
103
  /**
@@ -210,8 +205,6 @@ interface PlotSingleAxis {
210
205
  (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
211
206
  };
212
207
  }
213
- //#endregion
214
- //#region src/plots/multi-axis.d.ts
215
208
  type PlotMultiAxisLayout = `overlap` | `horizontal` | `vertical` | `grid`;
216
209
  type PlotMultiAxisDataPointClickDetail = {
217
210
  readonly value: number;
@@ -282,8 +275,6 @@ interface PlotMultiAxis {
282
275
  (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
283
276
  };
284
277
  }
285
- //#endregion
286
- //#region src/plots/plot-histogram.d.ts
287
278
  type PlotHistogramOrientation = `horizontal` | `vertical`;
288
279
  /**
289
280
  * - `hover`: floating `ixfx-tooltip` bubble, shown/hidden with a debounce delay.
@@ -382,8 +373,6 @@ declare global {
382
373
  interface PlotHistogram {
383
374
  addEventListener: (<K extends keyof PlotHistogramElementEventMap>(type: K, listener: (this: PlotHistogram, event: PlotHistogramElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
384
375
  }
385
- //#endregion
386
- //#region src/plots/xy-axis.d.ts
387
376
  type XyDrawStyle = `circles` | `squares`;
388
377
  type XyAgeStyle = `none` | `opacity` | `desaturation` | `size`;
389
378
  declare class PlotXyAxis extends LitElement {
@@ -422,5 +411,4 @@ declare global {
422
411
  'ixfx-plot-xy-axis': PlotXyAxis;
423
412
  }
424
413
  }
425
- //#endregion
426
414
  export { applyAgeModification as A, SingleAxisAgeStyle as C, ColourMapConfig as D, PlotDataSeriesOptions as E, parseColourScaleAttr as M, readBaseColour as N, ColourMode as O, PlotSingleAxisPointerMoveEvent as S, PlotDataSeries as T, PlotMultiAxisElementEventMap as _, PlotHistogramBucketClickDetail as a, PlotSingleAxisElementEventMap as b, PlotHistogramInteractionMode as c, PlotHistogramSelectionChangeEvent as d, PlotHistogramSelectionRange as f, PlotMultiAxisDataPointClickEvent as g, PlotMultiAxisDataPointClickDetail as h, PlotHistogram as i, computeColour as j, ColourResult as k, PlotHistogramOrientation as l, PlotMultiAxis as m, XyAgeStyle as n, PlotHistogramBucketClickEvent as o, PlotHistogramValueTooltips as p, XyDrawStyle as r, PlotHistogramElementEventMap as s, PlotXyAxis as t, PlotHistogramSelectionChangeDetail as u, PlotMultiAxisLayout as v, SingleAxisDrawStyle as w, PlotSingleAxisPointerMoveDetail as x, PlotSingleAxis as y };
@@ -1,5 +1,5 @@
1
- import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
2
- import { i as hasIcon } from "./registry-BEtb8_wB.js";
1
+ import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
2
+ import { i as hasIcon } from "./registry-DcF0fO7l.js";
3
3
  import "./icons.js";
4
4
  import { LitElement, css, html, nothing, svg } from "lit";
5
5
  import { property, state } from "lit/decorators.js";
@@ -9,7 +9,7 @@ import { Colour } from "@ixfx/visual";
9
9
  import { clamp, rangeStream } from "@ixfx/numbers";
10
10
  import { classMap } from "lit/directives/class-map.js";
11
11
  import { Easings } from "@ixfx/modulation";
12
- //#region src/plots/colour-map.ts
12
+ // src/plots/colour-map.ts
13
13
  const DEFAULT_BASE = `oklch(60% 0.15 140)`;
14
14
  const DEFAULT_PALETTE = [
15
15
  `green`,
@@ -141,8 +141,7 @@ function applyAgeModification(base, ageFraction, ageStyle) {
141
141
  }
142
142
  return base;
143
143
  }
144
- //#endregion
145
- //#region src/plots/data.ts
144
+ // src/plots/data.ts
146
145
  /**
147
146
  * A data series
148
147
  */
@@ -246,16 +245,14 @@ var PlotDataSeries = class {
246
245
  return !empty;
247
246
  }
248
247
  };
249
- //#endregion
250
- //#region src/util/is-numeric.ts
248
+ // src/util/is-numeric.ts
251
249
  function isNumeric(str) {
252
250
  if (typeof str === `number`) return true;
253
251
  if (typeof str !== `string`) return false;
254
252
  const trimmed = str.trim();
255
253
  return trimmed !== `` && !Number.isNaN(Number(trimmed));
256
254
  }
257
- //#endregion
258
- //#region src/util/tooltip.ts
255
+ // src/util/tooltip.ts
259
256
  var _TooltipElement;
260
257
  let _baseStylesInjected = false;
261
258
  function ensureBaseTooltipStyles() {
@@ -348,8 +345,7 @@ __decorate([property({ type: String })], TooltipElement.prototype, "anchor", voi
348
345
  __decorate([property()], TooltipElement.prototype, "value", void 0);
349
346
  __decorate([property({ type: String })], TooltipElement.prototype, "icon", void 0);
350
347
  TooltipElement = _TooltipElement = __decorate([safeCustomElement(`ixfx-tooltip`)], TooltipElement);
351
- //#endregion
352
- //#region src/plots/svg-utils.ts
348
+ // src/plots/svg-utils.ts
353
349
  let _tooltipEl = null;
354
350
  let _tooltipOwner = null;
355
351
  function ensureTooltip() {
@@ -455,8 +451,7 @@ function scaleValue(v, min, max) {
455
451
  const range = max - min;
456
452
  return range === 0 ? .5 : (v - min) / range;
457
453
  }
458
- //#endregion
459
- //#region src/plots/multi-axis.ts
454
+ // src/plots/multi-axis.ts
460
455
  const PLOT_PALETTE = [
461
456
  `oklch(60% 0.15 30)`,
462
457
  `oklch(60% 0.15 90)`,
@@ -704,8 +699,7 @@ __decorate([property({
704
699
  type: Number
705
700
  })], PlotMultiAxis.prototype, "gridMinWidth", void 0);
706
701
  PlotMultiAxis = __decorate([safeCustomElement(`ixfx-plot-multi-axis`)], PlotMultiAxis);
707
- //#endregion
708
- //#region src/plots/plot-histogram.ts
702
+ // src/plots/plot-histogram.ts
709
703
  let PlotHistogram = class PlotHistogram extends LitElement {
710
704
  constructor(..._args) {
711
705
  super(..._args);
@@ -1284,8 +1278,7 @@ __decorate([state()], PlotHistogram.prototype, "_selectionEnd", void 0);
1284
1278
  __decorate([state()], PlotHistogram.prototype, "_isDragging", void 0);
1285
1279
  __decorate([state()], PlotHistogram.prototype, "_selectionOverlayText", void 0);
1286
1280
  PlotHistogram = __decorate([safeCustomElement(`ixfx-plot-histogram`)], PlotHistogram);
1287
- //#endregion
1288
- //#region src/plots/single-axis.ts
1281
+ // src/plots/single-axis.ts
1289
1282
  function buildLinePath(points) {
1290
1283
  if (points.length === 0) return ``;
1291
1284
  let d = `M ${points[0].x},${points[0].y}`;
@@ -1731,8 +1724,7 @@ __decorate([property({ attribute: `color-scale` })], PlotSingleAxis.prototype, "
1731
1724
  __decorate([state()], PlotSingleAxis.prototype, "_width", void 0);
1732
1725
  __decorate([state()], PlotSingleAxis.prototype, "_height", void 0);
1733
1726
  PlotSingleAxis = __decorate([safeCustomElement(`ixfx-plot-single-axis`)], PlotSingleAxis);
1734
- //#endregion
1735
- //#region src/plots/xy-axis.ts
1727
+ // src/plots/xy-axis.ts
1736
1728
  let PlotXyAxis = class PlotXyAxis extends LitElement {
1737
1729
  constructor(..._args) {
1738
1730
  super(..._args);
@@ -2001,5 +1993,4 @@ __decorate([property({ attribute: `color-scale` })], PlotXyAxis.prototype, "colo
2001
1993
  __decorate([state()], PlotXyAxis.prototype, "_width", void 0);
2002
1994
  __decorate([state()], PlotXyAxis.prototype, "_height", void 0);
2003
1995
  PlotXyAxis = __decorate([safeCustomElement(`ixfx-plot-xy-axis`)], PlotXyAxis);
2004
- //#endregion
2005
1996
  export { TooltipElement as a, computeColour as c, PlotMultiAxis as i, parseColourScaleAttr as l, PlotSingleAxis as n, PlotDataSeries as o, PlotHistogram as r, applyAgeModification as s, PlotXyAxis as t, readBaseColour as u };
package/dist/xy-pad.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- import { n as WheelNudgeConsumer, t as WheelDirection } from "./wheel-nudge-By5s_ioH.js";
1
+ import { n as WheelNudgeConsumer, t as WheelDirection } from "./wheel-nudge-oMFKat9P.js";
2
2
  import { LitElement, PropertyValues, html } from "lit";
3
- //#region src/xy-pad/xy-pad.d.ts
4
3
  declare const XyPad_base: typeof LitElement & (new (...args: any[]) => WheelNudgeConsumer);
5
- declare class XyPad extends XyPad_base {
4
+ export declare class XyPad extends XyPad_base {
6
5
  static styles: import("lit").CSSResult[];
7
6
  xMin: number;
8
7
  xMax: number;
@@ -69,22 +68,21 @@ declare class XyPad extends XyPad_base {
69
68
  disconnectedCallback(): void;
70
69
  render(): ReturnType<typeof html>;
71
70
  }
72
- type XyPadInputDetail = {
71
+ export type XyPadInputDetail = {
73
72
  readonly x: number;
74
73
  readonly y: number;
75
74
  };
76
- type XyPadInputEvent = CustomEvent<XyPadInputDetail>;
75
+ export type XyPadInputEvent = CustomEvent<XyPadInputDetail>;
77
76
  declare global {
78
77
  interface HTMLElementTagNameMap {
79
78
  'ixfx-xy-pad': XyPad;
80
79
  }
81
80
  }
82
- interface XyPadEventMap {
81
+ export interface XyPadEventMap {
83
82
  input: XyPadInputEvent;
84
83
  change: XyPadInputEvent;
85
84
  }
86
- interface XyPad {
85
+ export interface XyPad {
87
86
  addEventListener: (<K extends keyof XyPadEventMap>(type: K, listener: (this: XyPad, event: XyPadEventMap[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
88
87
  }
89
- //#endregion
90
- export { XyPad, XyPadEventMap, XyPadInputDetail, XyPadInputEvent };
88
+ export {};
package/dist/xy-pad.js CHANGED
@@ -1,11 +1,11 @@
1
- import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
2
- import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
3
- import { t as prominenceStyles } from "./prominence-DlFShic3.js";
4
- import { t as resolveAxisStep } from "./keyboard-B5xD7Fz-.js";
5
- import { t as WheelNudgeMixin } from "./wheel-nudge-D5rmht3v.js";
1
+ import { t as resolveAxisStep } from "./keyboard-DMwjIYh7.js";
2
+ import { t as WheelNudgeMixin } from "./wheel-nudge-DgJzrL28.js";
3
+ import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
4
+ import { t as prominenceStyles } from "./prominence-BOOQVWF-.js";
5
+ import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
6
6
  import { LitElement, css, html } from "lit";
7
7
  import { property } from "lit/decorators.js";
8
- //#region src/xy-pad/xy-pad.ts
8
+ // src/xy-pad/xy-pad.ts
9
9
  /**
10
10
  * <x-xy-pad> — 2D touch-friendly XY pad for controlling two parameters.
11
11
  *
@@ -475,5 +475,4 @@ __decorate([property({
475
475
  attribute: `stops-y`
476
476
  })], XyPad.prototype, "stopsY", void 0);
477
477
  XyPad = __decorate([safeCustomElement(`ixfx-xy-pad`)], XyPad);
478
- //#endregion
479
478
  export { XyPad };
@@ -36,6 +36,7 @@ This directory contains documentation for each component and some architectural
36
36
  - [miller](./miller.md)
37
37
  - [multicol-list](./multicol-list.md)
38
38
  - [narrowed-text](./narrowed-text.md)
39
+ - [node-graph](./node-graph.md)
39
40
  - [notifier](./notifier.md)
40
41
  - [pan-text](./pan-text.md)
41
42
  - [panel](./panel.md)
@@ -412,6 +412,8 @@ Parts: `part="icon"` and `part="badge"` on the wrappers this adds.
412
412
  | `setItems(items)` | Replace the collection. Selection / cursor keep any key still present; vanished keys are deselected silently and held pending (see [View state](#view-state)). |
413
413
  | `appendItems(items)` | Add to the end. Scroll, selection and cursor untouched; no reflow animation. |
414
414
  | `updateItem(key, item)` | Replace one item. A visible cell re-renders in place; an offscreen one updates when scrolled in. |
415
+ | `updateItems(entries)` | Replace many items at once — the batched form of `updateItem`. See [Batched updates](#batched-updates). |
416
+ | `refreshItem(key)` | Re-render one cell **without** changing `items`. See [Refreshing a cell](#refreshing-a-cell). |
415
417
  | `removeItems(keys)` | Remove items. Removed keys drop out of selection / cursor silently and are held pending. |
416
418
  | `clearItems()` | Drop everything. Resets selection / cursor and emits one empty `list-select`; the keys are held pending, so re-adding them restores the selection. |
417
419
 
@@ -424,6 +426,49 @@ key-based. Data-mode events carry the data value as `detail.item` and
424
426
  Duplicate keys are warned about once; the first occurrence wins for key-based
425
427
  operations.
426
428
 
429
+ #### Batched updates
430
+
431
+ `updateItems(entries)` applies many replacements with **one** array copy and
432
+ **one** source rebuild:
433
+
434
+ ```typescript
435
+ grid.updateItems([
436
+ { key: 'a', item: { ...fileA, name: 'Renamed' } },
437
+ { key: 'b', item: { ...fileB, thumb: newThumb } },
438
+ ]);
439
+
440
+ // A Map works too:
441
+ grid.updateItems(new Map([['a', newA], ['b', newB]]));
442
+ ```
443
+
444
+ It has the same semantics as the equivalent run of `updateItem` calls: unknown
445
+ keys are ignored, selection / cursor / scroll are untouched, and an entry whose
446
+ `item` is the identical object already at that key is skipped. If nothing
447
+ changes, `items` keeps its identity and nothing is emitted.
448
+
449
+ **Use `updateItems` rather than a loop of `updateItem`s** when you have more
450
+ than one row to change. A loop pays one array copy per call, so changing n rows
451
+ costs n copies; the batched form pays one. On a 20k-item collection, replacing
452
+ 500 rows measured ~22 ms as a loop versus ~0.7 ms as one batch (happy-dom).
453
+
454
+ #### Refreshing a cell
455
+
456
+ `updateItem(key, item)` with the **same object** that is already at `key` is a
457
+ no-op — the array is not copied and nothing is emitted. That is the right
458
+ behaviour when you only want to push the *data* through.
459
+
460
+ If instead you want to redraw a cell whose data is unchanged — because the
461
+ adapter renders something that lives outside the item, such as a thumbnail that
462
+ just finished loading — use `refreshItem(key)`:
463
+
464
+ ```typescript
465
+ grid.refreshItem('a'); // re-renders the cell for 'a'; `items` is untouched
466
+ ```
467
+
468
+ The adapter's `render` is called again for that cell, so it picks up the new
469
+ state. The `items` array keeps its identity, so nothing is copied and the
470
+ collection is not rebuilt.
471
+
427
472
  ---
428
473
 
429
474
  ## Grouping
@@ -608,6 +653,26 @@ Inserting is O(items): one `appendItems` costs ~5 ms at 5k items and ~21 ms at
608
653
  50k (the source and search index are rebuilt, and `items` is copied); the
609
654
  element-mode equivalents are ~8 ms at 2k and ~16 ms at 10k.
610
655
 
656
+ ### Mutation API
657
+
658
+ `src/grid-list/grid-list.perf.test.ts` guards the data-mode mutation API with
659
+ **work counters** — how many times the adapter's `key` is called per mutation.
660
+ That number must not scale with the item count. Run it with:
661
+
662
+ ```sh
663
+ pnpm test:perf # all perf suites, verbose
664
+ PERF_REPORT=1 pnpm vitest run src/grid-list/grid-list.perf.test.ts
665
+ ```
666
+
667
+ The mutation paths keep a key → raw index map, so a lookup is O(1) rather than
668
+ an O(n) scan of the array:
669
+
670
+ - `updateItem(key, item)` — one lookup and one array copy. Passing the
671
+ identical object is a no-op (no copy, no emit).
672
+ - `updateItems(entries)` — many replacements, one copy, one rebuild.
673
+ - `appendItems(items)` — the appended items are added to the map; the existing
674
+ ones are not re-scanned.
675
+
611
676
  Things that keep the per-frame paths flat, and that the benchmark guards:
612
677
 
613
678
  - **Cell recycling.** Cells are keyed by a stable cell id, not the item key, so
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
- "version": "0.16.5",
4
- "generated": "2026-11-08T23:14:38.622Z",
3
+ "version": "0.17.1",
4
+ "generated": "2026-11-10T11:14:57.413Z",
5
5
  "components": [
6
6
  {
7
7
  "name": "ac-text",
@@ -163,6 +163,11 @@
163
163
  "summary": "A filtered text selection component with inline search. Shows slotted items filtered by a query string as the user types.",
164
164
  "path": "docs-user/narrowed-text.md"
165
165
  },
166
+ {
167
+ "name": "node-graph",
168
+ "summary": "A Svelte-Flow-style node editor: nodes on a pan/zoom canvas, wires between typed ports, and a magnetic connect gesture. Nodes are ordinary light-DOM elements, so you can put anything inside them — inc",
169
+ "path": "docs-user/node-graph.md"
170
+ },
166
171
  {
167
172
  "name": "notifier",
168
173
  "summary": "A \"lookless\" app-wide notification system. `NotificationManager` is a singleton that owns notification state, queueing, and timing — it doesn't know how to draw anything. A `NotificationRenderer` (the",
@@ -43,6 +43,7 @@ import '@ixfx/components/data-grid';
43
43
  - [miller](docs-user/miller.md): A Miller column component displays hierarchical data as multiple vertical columns, like macOS Finder or email clients. Each column shows the children of the selected item in the previous column.
44
44
  - [multicol-list](docs-user/multicol-list.md): A faceted-filtering component: each column shows one property (facet) of the *same*
45
45
  - [narrowed-text](docs-user/narrowed-text.md): A filtered text selection component with inline search. Shows slotted items filtered by a query string as the user types.
46
+ - [node-graph](docs-user/node-graph.md): A Svelte-Flow-style node editor: nodes on a pan/zoom canvas, wires between typed ports, and a magnetic connect gesture. Nodes are ordinary light-DOM elements, so you can put anything inside them — inc
46
47
  - [notifier](docs-user/notifier.md): A "lookless" app-wide notification system. `NotificationManager` is a singleton that owns notification state, queueing, and timing — it doesn't know how to draw anything. A `NotificationRenderer` (the
47
48
  - [pan-text](docs-user/pan-text.md): Pans overflowing text on hover or continuously in a loop. Use when a label is too long for its container and you want to reveal the full text without truncation.
48
49
  - [panel](docs-user/panel.md): An collapsible panel component with support for titles, icons, toolbars, and multiple visual variants.