@ixfx/components 0.13.3 → 0.13.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 (297) hide show
  1. package/bundle/index.d.ts +1449 -11
  2. package/bundle/index.js +1529 -45918
  3. package/bundle/rolldown-runtime-CEoa-xHZ.js +1 -0
  4. package/dist/ac-text.d.ts +2 -3
  5. package/dist/ac-text.js +0 -2
  6. package/dist/{ac-token-TCLAZeVg.d.ts → ac-token--_vCHXWw.d.ts} +2 -3
  7. package/dist/ac-token.d.ts +1 -1
  8. package/dist/ac-token.js +0 -2
  9. package/dist/button-B7mgqtxR.js +0 -2
  10. package/dist/{button-CTL45aBl.d.ts → button-BYuf72aR.d.ts} +2 -3
  11. package/dist/button.d.ts +1 -1
  12. package/dist/checkbox.d.ts +1 -2
  13. package/dist/checkbox.js +0 -2
  14. package/dist/checked-select-CglRukbP.d.ts +1 -2
  15. package/dist/checked-select-lDgAQQ7v.js +0 -2
  16. package/dist/colour-picker-BCMU7W7R.js +0 -2
  17. package/dist/colour-picker.d.ts +1 -1
  18. package/dist/crumbs.d.ts +2 -3
  19. package/dist/crumbs.js +1 -3
  20. package/dist/data-controller-DOlmqNKb.js +0 -2
  21. package/dist/data-display.d.ts +1 -2
  22. package/dist/data-display.js +0 -2
  23. package/dist/{data-grid-DHWJN66w.d.ts → data-grid-BtBZt8M1.d.ts} +5 -6
  24. package/dist/data-grid-FHr7wZ_k.js +2108 -0
  25. package/dist/data-grid.d.ts +1 -1
  26. package/dist/data-grid.js +1 -2013
  27. package/dist/data-provider-35TyWclX.js +0 -2
  28. package/dist/data-provider-BAn_-oR1.d.ts +1 -2
  29. package/dist/decorate-VRK8rslU.js +0 -2
  30. package/dist/defaults-B4ePs4LB.js +0 -2
  31. package/dist/{detail-list-C96B5Txz.js → detail-list-BfYHNh6B.js} +1 -3
  32. package/dist/{detail-list-dX7jLO6b.d.ts → detail-list-u2rWnAXQ.d.ts} +4 -5
  33. package/dist/detail-list.d.ts +2 -2
  34. package/dist/detail-list.js +1 -1
  35. package/dist/drag-ghost-DtSDvjri.js +0 -2
  36. package/dist/editable-label-rzXkjf1H.d.ts +1 -2
  37. package/dist/editable-label.js +0 -2
  38. package/dist/fallbacks-DQ_5OsmR.js +0 -2
  39. package/dist/{flat-list-Y98IqH00.d.ts → flat-list-DNnTQ65v.d.ts} +3 -4
  40. package/dist/flat-list.d.ts +1 -1
  41. package/dist/flat-list.js +0 -2
  42. package/dist/form-CsXJX15p.js +0 -2
  43. package/dist/form.d.ts +1 -2
  44. package/dist/{grid-list-CoT9e1jB.d.ts → grid-list-BLnV9oZE.d.ts} +2 -3
  45. package/dist/{grid-list-DeqAd9-h.js → grid-list-CkU8gHCh.js} +1 -3
  46. package/dist/grid-list.d.ts +1 -1
  47. package/dist/grid-list.js +1 -1
  48. package/dist/{grouped-item-lister-Bhyo-dkH.d.ts → grouped-item-lister-DETte0Dh.d.ts} +2 -3
  49. package/dist/grouped-item-lister.d.ts +1 -1
  50. package/dist/grouped-item-lister.js +0 -2
  51. package/dist/grouping-CUKgmkMm.d.ts +1 -2
  52. package/dist/grouping-RYPnHkrS.js +0 -2
  53. package/dist/handle-DAXs7kbJ.js +0 -2
  54. package/dist/hex-editor-Caq8vNQk.d.ts +1 -2
  55. package/dist/hex-editor-DiYpgIKs.js +0 -2
  56. package/dist/highlight-B-eQrhhb.js +0 -2
  57. package/dist/icon-1gpwtPx8.js +0 -2
  58. package/dist/{icon-DR_3rSyZ.d.ts → icon-CDGprSdE.d.ts} +2 -3
  59. package/dist/icons.d.ts +2 -2
  60. package/dist/icons.js +0 -2
  61. package/dist/incr-search-JIhwB49y.js +0 -2
  62. package/dist/incr-search.d.ts +1 -1
  63. package/dist/{index-Dq30pOnn.d.ts → index-B-hzcIP0.d.ts} +3 -4
  64. package/dist/{index-Dlah7Zfi.d.ts → index-BYIRgv49.d.ts} +2 -3
  65. package/dist/{index-CnQPCywE.d.ts → index-CCC0G1nO.d.ts} +2 -3
  66. package/dist/{index-garxxqgV.d.ts → index-CYndvTWH.d.ts} +2 -3
  67. package/dist/{index-BUB5SICW.d.ts → index-CoqtMSd9.d.ts} +2 -3
  68. package/dist/index-DV3iaUBW.d.ts +1 -2
  69. package/dist/{index-CJ5fshD3.d.ts → index-UvnoZUAo.d.ts} +2 -3
  70. package/dist/index-o-CWDt11.d.ts +1 -2
  71. package/dist/{index-BOUaDIW-.d.ts → index-tq6f8007.d.ts} +2 -3
  72. package/dist/index.d.ts +21 -22
  73. package/dist/index.js +4 -6
  74. package/dist/item-appearance-BjcMyauw.js +0 -2
  75. package/dist/keyboard-B5xD7Fz-.js +0 -2
  76. package/dist/labelled-input-base-BFa4xlYV.js +0 -2
  77. package/dist/{labelled-input-base-Dp_9KP0G.d.ts → labelled-input-base-DiTme1JO.d.ts} +2 -3
  78. package/dist/labelled-radial-input.d.ts +3 -4
  79. package/dist/labelled-radial-input.js +0 -2
  80. package/dist/labelled-range-input.d.ts +1 -1
  81. package/dist/labelled-range-input.js +0 -2
  82. package/dist/labelled-slider-input-FdCRi6st.js +0 -2
  83. package/dist/labelled-slider-input.d.ts +1 -1
  84. package/dist/led.d.ts +1 -2
  85. package/dist/led.js +0 -2
  86. package/dist/list-group-header.d.ts +2 -3
  87. package/dist/list-group-header.js +0 -2
  88. package/dist/list-item-animation-BUoEKi5s.js +0 -2
  89. package/dist/list-native-drag-controller-B9xO0XWn.js +0 -2
  90. package/dist/list-native-drag-controller-ChIi3eK5.d.ts +1 -2
  91. package/dist/list-selection-controller-BeE70lbB.js +0 -2
  92. package/dist/list-selection-types-PjKdhF-a.d.ts +1 -2
  93. package/dist/list-viewport-types-BRZsLcvp.d.ts +1 -2
  94. package/dist/menu-CwcXXeLM.js +0 -2
  95. package/dist/menu-item-BDEekBVy.js +0 -2
  96. package/dist/{menu-item-B0zqw2xp.d.ts → menu-item-bF6narIz.d.ts} +2 -3
  97. package/dist/menu.d.ts +2 -2
  98. package/dist/miller.d.ts +2 -3
  99. package/dist/miller.js +0 -2
  100. package/dist/narrowed-text.js +0 -2
  101. package/dist/notification-pill-DyZydXoZ.d.ts +1 -2
  102. package/dist/notifier.js +0 -2
  103. package/dist/pan-text-CoYmt2qd.d.ts +1 -2
  104. package/dist/pan-text-CqtvjPyK.js +0 -2
  105. package/dist/panel.d.ts +2 -3
  106. package/dist/panel.js +0 -2
  107. package/dist/polar-pad.d.ts +1 -2
  108. package/dist/polar-pad.js +0 -2
  109. package/dist/popup-D80sj2QC.js +0 -2
  110. package/dist/prominence-DlFShic3.js +0 -2
  111. package/dist/radial-input-DU6t2hYO.d.ts +1 -2
  112. package/dist/radial-input-KMVltQfe.js +0 -2
  113. package/dist/range-input.d.ts +1 -2
  114. package/dist/range-input.js +0 -2
  115. package/dist/range.d.ts +1 -2
  116. package/dist/range.js +0 -2
  117. package/dist/registry-BEtb8_wB.js +0 -2
  118. package/dist/{scroll-fade-BrNUIYnm.js → scroll-fade-Xx28D7mH.js} +11 -7
  119. package/dist/select-horiz.d.ts +1 -2
  120. package/dist/select-horiz.js +1 -3
  121. package/dist/slider-input-BxURAAmD.d.ts +1 -2
  122. package/dist/slider-input-ByHdotzp.js +0 -2
  123. package/dist/snackbar.d.ts +1 -2
  124. package/dist/snackbar.js +0 -2
  125. package/dist/snap-container.d.ts +1 -2
  126. package/dist/snap-container.js +0 -2
  127. package/dist/split-layout-Deoxy47d.js +0 -2
  128. package/dist/{split-layout-C5SYbDrq.d.ts → split-layout-JK3xWVX2.d.ts} +2 -3
  129. package/dist/split-layout.d.ts +1 -1
  130. package/dist/swipe.d.ts +1 -2
  131. package/dist/swipe.js +0 -2
  132. package/dist/{tab-list-D_dmImJM.d.ts → tab-list-CexFFg6O.d.ts} +2 -3
  133. package/dist/tabs.d.ts +1 -1
  134. package/dist/tabs.js +1 -3
  135. package/dist/tickled-controller-D-HZymaZ.js +0 -2
  136. package/dist/tickled-controller-DodxD3eQ.d.ts +1 -2
  137. package/dist/tickled-styles-BrAHEj1q.js +0 -2
  138. package/dist/timeline-BP1Ux2EV.js +0 -2
  139. package/dist/{titlebar-B5zSTZnF.d.ts → titlebar-Tqu-VvMU.d.ts} +2 -3
  140. package/dist/titlebar.d.ts +1 -1
  141. package/dist/titlebar.js +0 -2
  142. package/dist/tooltip-BlvBUQxx.d.ts +1 -2
  143. package/dist/tooltip-CJt3WLmN.js +0 -2
  144. package/dist/transitory-label.d.ts +1 -2
  145. package/dist/transitory-label.js +0 -2
  146. package/dist/tree-DD8OaqsK.js +0 -2
  147. package/dist/tree-component-Cj8V3uar.d.ts +1 -2
  148. package/dist/tree.d.ts +1 -1
  149. package/dist/types-DQ7KOUIj.d.ts +1 -2
  150. package/dist/{vertical-list-lj_19DCx.d.ts → vertical-list-m7GJtXwv.d.ts} +2 -3
  151. package/dist/vertical-list.d.ts +1 -1
  152. package/dist/vertical-list.js +1 -3
  153. package/dist/wheel-nudge-By5s_ioH.d.ts +1 -2
  154. package/dist/wheel-nudge-D5rmht3v.js +0 -2
  155. package/dist/xy-axis-CyMd_Bn1.js +0 -2
  156. package/dist/xy-axis-DQqd2yXJ.d.ts +1 -2
  157. package/dist/xy-pad.d.ts +1 -2
  158. package/dist/xy-pad.js +0 -2
  159. package/docs-user/index.json +2 -2
  160. package/package.json +1 -1
  161. package/bundle/index.d.ts.map +0 -1
  162. package/bundle/index.js.map +0 -1
  163. package/bundle/rolldown-runtime-D7D4PA-g.js +0 -13
  164. package/dist/ac-text.d.ts.map +0 -1
  165. package/dist/ac-text.js.map +0 -1
  166. package/dist/ac-token-TCLAZeVg.d.ts.map +0 -1
  167. package/dist/ac-token.js.map +0 -1
  168. package/dist/button-B7mgqtxR.js.map +0 -1
  169. package/dist/button-CTL45aBl.d.ts.map +0 -1
  170. package/dist/checkbox.d.ts.map +0 -1
  171. package/dist/checkbox.js.map +0 -1
  172. package/dist/checked-select-CglRukbP.d.ts.map +0 -1
  173. package/dist/checked-select-lDgAQQ7v.js.map +0 -1
  174. package/dist/colour-picker-BCMU7W7R.js.map +0 -1
  175. package/dist/crumbs.d.ts.map +0 -1
  176. package/dist/crumbs.js.map +0 -1
  177. package/dist/data-controller-DOlmqNKb.js.map +0 -1
  178. package/dist/data-display.d.ts.map +0 -1
  179. package/dist/data-display.js.map +0 -1
  180. package/dist/data-grid-DHWJN66w.d.ts.map +0 -1
  181. package/dist/data-grid.js.map +0 -1
  182. package/dist/data-provider-35TyWclX.js.map +0 -1
  183. package/dist/data-provider-BAn_-oR1.d.ts.map +0 -1
  184. package/dist/decorate-VRK8rslU.js.map +0 -1
  185. package/dist/defaults-B4ePs4LB.js.map +0 -1
  186. package/dist/detail-list-C96B5Txz.js.map +0 -1
  187. package/dist/detail-list-dX7jLO6b.d.ts.map +0 -1
  188. package/dist/drag-ghost-DtSDvjri.js.map +0 -1
  189. package/dist/editable-label-rzXkjf1H.d.ts.map +0 -1
  190. package/dist/editable-label.js.map +0 -1
  191. package/dist/fallbacks-DQ_5OsmR.js.map +0 -1
  192. package/dist/flat-list-Y98IqH00.d.ts.map +0 -1
  193. package/dist/flat-list.js.map +0 -1
  194. package/dist/form-CsXJX15p.js.map +0 -1
  195. package/dist/form.d.ts.map +0 -1
  196. package/dist/grid-list-CoT9e1jB.d.ts.map +0 -1
  197. package/dist/grid-list-DeqAd9-h.js.map +0 -1
  198. package/dist/grouped-item-lister-Bhyo-dkH.d.ts.map +0 -1
  199. package/dist/grouped-item-lister.js.map +0 -1
  200. package/dist/grouping-CUKgmkMm.d.ts.map +0 -1
  201. package/dist/grouping-RYPnHkrS.js.map +0 -1
  202. package/dist/handle-DAXs7kbJ.js.map +0 -1
  203. package/dist/hex-editor-Caq8vNQk.d.ts.map +0 -1
  204. package/dist/hex-editor-DiYpgIKs.js.map +0 -1
  205. package/dist/highlight-B-eQrhhb.js.map +0 -1
  206. package/dist/icon-1gpwtPx8.js.map +0 -1
  207. package/dist/icon-DR_3rSyZ.d.ts.map +0 -1
  208. package/dist/icons.js.map +0 -1
  209. package/dist/incr-search-JIhwB49y.js.map +0 -1
  210. package/dist/index-BOUaDIW-.d.ts.map +0 -1
  211. package/dist/index-BUB5SICW.d.ts.map +0 -1
  212. package/dist/index-CJ5fshD3.d.ts.map +0 -1
  213. package/dist/index-CnQPCywE.d.ts.map +0 -1
  214. package/dist/index-DV3iaUBW.d.ts.map +0 -1
  215. package/dist/index-Dlah7Zfi.d.ts.map +0 -1
  216. package/dist/index-Dq30pOnn.d.ts.map +0 -1
  217. package/dist/index-garxxqgV.d.ts.map +0 -1
  218. package/dist/index-o-CWDt11.d.ts.map +0 -1
  219. package/dist/index.d.ts.map +0 -1
  220. package/dist/index.js.map +0 -1
  221. package/dist/item-appearance-BjcMyauw.js.map +0 -1
  222. package/dist/keyboard-B5xD7Fz-.js.map +0 -1
  223. package/dist/labelled-input-base-BFa4xlYV.js.map +0 -1
  224. package/dist/labelled-input-base-Dp_9KP0G.d.ts.map +0 -1
  225. package/dist/labelled-radial-input.d.ts.map +0 -1
  226. package/dist/labelled-radial-input.js.map +0 -1
  227. package/dist/labelled-range-input.js.map +0 -1
  228. package/dist/labelled-slider-input-FdCRi6st.js.map +0 -1
  229. package/dist/led.d.ts.map +0 -1
  230. package/dist/led.js.map +0 -1
  231. package/dist/list-group-header.d.ts.map +0 -1
  232. package/dist/list-group-header.js.map +0 -1
  233. package/dist/list-item-animation-BUoEKi5s.js.map +0 -1
  234. package/dist/list-native-drag-controller-B9xO0XWn.js.map +0 -1
  235. package/dist/list-native-drag-controller-ChIi3eK5.d.ts.map +0 -1
  236. package/dist/list-selection-controller-BeE70lbB.js.map +0 -1
  237. package/dist/list-selection-types-PjKdhF-a.d.ts.map +0 -1
  238. package/dist/list-viewport-types-BRZsLcvp.d.ts.map +0 -1
  239. package/dist/menu-CwcXXeLM.js.map +0 -1
  240. package/dist/menu-item-B0zqw2xp.d.ts.map +0 -1
  241. package/dist/menu-item-BDEekBVy.js.map +0 -1
  242. package/dist/miller.d.ts.map +0 -1
  243. package/dist/miller.js.map +0 -1
  244. package/dist/narrowed-text.js.map +0 -1
  245. package/dist/notification-pill-DyZydXoZ.d.ts.map +0 -1
  246. package/dist/notifier.js.map +0 -1
  247. package/dist/pan-text-CoYmt2qd.d.ts.map +0 -1
  248. package/dist/pan-text-CqtvjPyK.js.map +0 -1
  249. package/dist/panel.d.ts.map +0 -1
  250. package/dist/panel.js.map +0 -1
  251. package/dist/polar-pad.d.ts.map +0 -1
  252. package/dist/polar-pad.js.map +0 -1
  253. package/dist/popup-D80sj2QC.js.map +0 -1
  254. package/dist/prominence-DlFShic3.js.map +0 -1
  255. package/dist/radial-input-DU6t2hYO.d.ts.map +0 -1
  256. package/dist/radial-input-KMVltQfe.js.map +0 -1
  257. package/dist/range-input.d.ts.map +0 -1
  258. package/dist/range-input.js.map +0 -1
  259. package/dist/range.d.ts.map +0 -1
  260. package/dist/range.js.map +0 -1
  261. package/dist/registry-BEtb8_wB.js.map +0 -1
  262. package/dist/scroll-fade-BrNUIYnm.js.map +0 -1
  263. package/dist/select-horiz.d.ts.map +0 -1
  264. package/dist/select-horiz.js.map +0 -1
  265. package/dist/slider-input-BxURAAmD.d.ts.map +0 -1
  266. package/dist/slider-input-ByHdotzp.js.map +0 -1
  267. package/dist/snackbar.d.ts.map +0 -1
  268. package/dist/snackbar.js.map +0 -1
  269. package/dist/snap-container.d.ts.map +0 -1
  270. package/dist/snap-container.js.map +0 -1
  271. package/dist/split-layout-C5SYbDrq.d.ts.map +0 -1
  272. package/dist/split-layout-Deoxy47d.js.map +0 -1
  273. package/dist/swipe.d.ts.map +0 -1
  274. package/dist/swipe.js.map +0 -1
  275. package/dist/tab-list-D_dmImJM.d.ts.map +0 -1
  276. package/dist/tabs.js.map +0 -1
  277. package/dist/tickled-controller-D-HZymaZ.js.map +0 -1
  278. package/dist/tickled-controller-DodxD3eQ.d.ts.map +0 -1
  279. package/dist/tickled-styles-BrAHEj1q.js.map +0 -1
  280. package/dist/timeline-BP1Ux2EV.js.map +0 -1
  281. package/dist/titlebar-B5zSTZnF.d.ts.map +0 -1
  282. package/dist/titlebar.js.map +0 -1
  283. package/dist/tooltip-BlvBUQxx.d.ts.map +0 -1
  284. package/dist/tooltip-CJt3WLmN.js.map +0 -1
  285. package/dist/transitory-label.d.ts.map +0 -1
  286. package/dist/transitory-label.js.map +0 -1
  287. package/dist/tree-DD8OaqsK.js.map +0 -1
  288. package/dist/tree-component-Cj8V3uar.d.ts.map +0 -1
  289. package/dist/types-DQ7KOUIj.d.ts.map +0 -1
  290. package/dist/vertical-list-lj_19DCx.d.ts.map +0 -1
  291. package/dist/vertical-list.js.map +0 -1
  292. package/dist/wheel-nudge-By5s_ioH.d.ts.map +0 -1
  293. package/dist/wheel-nudge-D5rmht3v.js.map +0 -1
  294. package/dist/xy-axis-CyMd_Bn1.js.map +0 -1
  295. package/dist/xy-axis-DQqd2yXJ.d.ts.map +0 -1
  296. package/dist/xy-pad.d.ts.map +0 -1
  297. package/dist/xy-pad.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"handle-DAXs7kbJ.js","names":[],"sources":["../src/styles/handle.ts"],"sourcesContent":["import { css } from 'lit';\n\n/**\n * Shared drag / resize **handle** styling.\n *\n * A handle is the grab affordance for moving or resizing an object. Apply the\n * `.ixfx-handle` class to a small decorative element inside your drag / resize\n * hit-zone and choose a look with two independent attributes:\n *\n * - `data-handle` — texture: `flat` (default) · `dotted` · `dimpled` · `grated`\n * - `data-shape` — topology: `horizontal` (default) · `vertical` · `spot`\n *\n * - **flat** — a solid rounded capsule (bar) or dot (`spot`), filled with\n * `--ixfx-handle-color`.\n * - **dotted** — marks in the [Lucide *grip*](https://lucide.dev/icons/grip)\n * arrangement: one or more marks along the long axis (`horizontal`: a row,\n * `vertical`: a column), repeated in one or more rows/columns across the\n * bar's cross axis (or a 3×3 block for `spot`, unaffected by the row/column\n * / mark-count behaviour below). Tinted by `--ixfx-handle-color`. Each\n * mark's corner rounding is `--ixfx-handle-radius` (→ the theme\n * `--radius-l`), so a flat, squared-off theme renders them as **squares**\n * instead of circles. For `horizontal` / `vertical`, `--ixfx-handle-length`\n * decides how many marks (1-7) fit along the long axis — spaced by\n * `--ixfx-handle-dot-gap` — the same way `--ixfx-handle-thickness` decides\n * how many rows (or columns) of marks (1-7) fit across the cross axis —\n * spaced by `--ixfx-handle-dot-pitch`. Both the bar's rendered length and\n * its thickness snap to the nearest whole multiple of the relevant spacing\n * so marks never clip at the edges.\n * - **dimpled** — that same layout, but each mark is pressed in: a lighter\n * copy peeking out above-left and a darker copy below-right of the base mark.\n * - **grated** — fine 45° knurling: each ridge is a lit edge, the base colour,\n * then a shaded edge. `spot` is the same hatch on a square crop.\n *\n * `dotted` / `dimpled` / `grated` are texture only — no plate, box or border; the\n * gaps are transparent so the surface behind shows through. The base colour is\n * `--ixfx-handle-color` (a theme token); the deboss edges default to that colour\n * lightened / darkened.\n *\n * The handle is `pointer-events: none` — bind pointer handlers to the surrounding\n * hit-zone. It reaches its \"active\" look (`--ixfx-handle-opacity-active`, and for\n * `flat` / `dotted` the `--ixfx-handle-color-active` tint) when its immediate\n * parent (the hit-zone) is `:hover` / `:focus-visible` / `[data-active]`, or when\n * the handle itself is. Set `[data-active]` on the hit-zone yourself while a drag\n * is live so the handle stays lit after the pointer leaves it.\n *\n * ```ts\n * import { handleStyles } from '../styles/handle.js';\n *\n * static styles = [themeFallbacks, handleStyles, css`...`];\n * ```\n * ```html\n * <div class=\"hit-zone\" @pointerdown=${this.#onDown}>\n * <span class=\"ixfx-handle\" data-handle=\"dotted\" data-shape=\"spot\" part=\"handle\"></span>\n * </div>\n * ```\n *\n * ## CSS variables (defaults shown; override on the element or any ancestor)\n * - `--ixfx-handle-color` `var(--surface-muted-text)` — `flat` / `dotted` fill\n * - `--ixfx-handle-color-active` `var(--accent)` — `flat` / `dotted` hover / focus\n * - `--ixfx-handle-thickness` `6px` — cross-axis size of a bar (dotted /\n * dimpled `horizontal` / `vertical` bars snap this to the nearest whole multiple\n * of `--ixfx-handle-dot-pitch` so their mark rows / columns fit exactly)\n * - `--ixfx-handle-length` `44px` — long-axis size of a bar (`100%` to\n * fill). For dotted / dimpled `horizontal` / `vertical` bars this also decides\n * how many marks (1-7) fit along the long axis — spaced by\n * `--ixfx-handle-dot-gap` — the same way `--ixfx-handle-thickness` decides row /\n * column count across the cross axis, and the bar's rendered length likewise\n * snaps to the nearest whole multiple of `--ixfx-handle-dot-gap` so marks\n * never clip at the edges.\n * - `--ixfx-handle-spot-size` `14px` — width = height of a `spot`\n * - `--ixfx-handle-radius` `var(--radius-l)` — `flat` capsule / dotted & dimpled mark rounding\n * - `--ixfx-handle-opacity` `0.55` — rest opacity\n * - `--ixfx-handle-opacity-active` `1`\n * - `--ixfx-handle-dot-size` `3px` — mark size (dotted / dimpled)\n * - `--ixfx-handle-dot-gap` `length/4` (bar) · `spot/3` — mark centre-to-centre\n * step along the long axis (dotted / dimpled `horizontal` / `vertical` bars fit up\n * to 7 marks, driven by `--ixfx-handle-length`; `spot` is a fixed 3×3 block)\n * - `--ixfx-handle-dot-pitch` `dot-size * 2` — row/column centre-to-centre step across\n * the cross axis (dotted / dimpled `horizontal` / `vertical` only; up to 7 rows/columns)\n * - `--ixfx-handle-tile` `5px` — knurl period (grated)\n * - `--ixfx-handle-highlight` `color-mix(currentColor 35%, #fff)` — lit deboss edge\n * - `--ixfx-handle-shadow` `color-mix(currentColor 60%, #000)` — shaded deboss edge\n */\nexport const handleStyles = css`\n .ixfx-handle {\n /* Bridge: public --ixfx-handle-* (element or ancestor) → internal alias → fallback. */\n --_handle-color: var(--ixfx-handle-color, var(--surface-3-text));\n --_handle-color-active: var(--ixfx-handle-color-active, var(--surface-3-text));\n --_handle-thickness: var(--ixfx-handle-thickness, 6px);\n --_handle-length: var(--ixfx-handle-length, 44px);\n --_handle-spot: var(--ixfx-handle-spot-size, 14px);\n --_handle-radius: var(--ixfx-handle-radius, var(--radius-l));\n --_handle-opacity: var(--ixfx-handle-opacity, 0.55);\n --_handle-opacity-active: var(--ixfx-handle-opacity-active, 1);\n --_handle-dot: var(--ixfx-handle-dot-size, 3px);\n --_handle-tile: var(--ixfx-handle-tile, 5px);\n /* Centre-to-centre step of the dotted / dimpled marks (a length). Defaults to\n a share of the long axis; a bar shows ~3 marks. */\n --_handle-gap: var(--ixfx-handle-dot-gap, calc(var(--_handle-length) / 4));\n /* Centre-to-centre step between rows (horizontal) / columns (vertical) of\n marks across the bar's cross axis. */\n --_handle-pitch: var(--ixfx-handle-dot-pitch, calc(var(--_handle-dot) * 2));\n /* How many whole pitch-steps fit across the thickness, rounded to the\n nearest step and clamped to 1-7 rows/columns. */\n --_handle-rows: clamp(1, round(nearest, calc(var(--_handle-thickness) / var(--_handle-pitch)), 1), 7);\n /* An even row/column count has no centre step, so the whole grid (the\n ::before mark and its box-shadow copies, spaced at whole --_handle-pitch\n steps from it) is nudged by half a pitch to stay centred and symmetric. */\n --_handle-row-shift: calc((1 - mod(var(--_handle-rows), 2)) * var(--_handle-pitch) / 2);\n /* The bar's cross-axis size snapped to exactly --_handle-rows steps of\n --_handle-pitch, so mark rows/columns fit without clipping. */\n --_handle-thickness-snapped: calc(var(--_handle-rows) * var(--_handle-pitch));\n /* How many whole gap-steps fit across the long axis, rounded to the\n nearest step and clamped to 1-7 marks. */\n --_handle-cols: clamp(1, round(nearest, calc(var(--_handle-length) / var(--_handle-gap)), 1), 7);\n /* An even mark count has no centre step, so the whole grid is nudged by\n half a gap along the long axis to stay centred and symmetric. */\n --_handle-col-shift: calc((1 - mod(var(--_handle-cols), 2)) * var(--_handle-gap) / 2);\n /* The bar's long-axis size snapped to exactly --_handle-cols steps of\n --_handle-gap, so marks fit without clipping. */\n --_handle-length-snapped: calc(var(--_handle-cols) * var(--_handle-gap));\n /* How far a dimpled mark's highlight / shadow copy is offset. */\n --_dimple-off: calc(var(--_handle-dot) * 0.15);\n /* The mark colour lightened / darkened for the two deboss edges. */\n --_handle-hi: var(--ixfx-handle-highlight, color-mix(in oklch, var(--surface-4) 50%, var(--_handle-color)));\n --_handle-lo: var(--ixfx-handle-shadow, color-mix(in oklch, var(--surface-2) 40%, var(--_handle-color)));\n\n box-sizing: border-box;\n display: inline-block;\n flex: none;\n width: var(--_handle-length);\n height: var(--_handle-thickness);\n color: var(--_handle-color);\n opacity: var(--_handle-opacity);\n pointer-events: none;\n transition:\n color var(--transition, 0.15s ease-out),\n opacity var(--transition, 0.15s ease-out);\n }\n\n .ixfx-handle[data-shape='vertical'] {\n width: var(--_handle-thickness);\n height: var(--_handle-length);\n }\n\n .ixfx-handle[data-shape='spot'] {\n width: var(--_handle-spot);\n height: var(--_handle-spot);\n --_handle-gap: var(--ixfx-handle-dot-gap, calc(var(--_handle-spot) / 3));\n }\n\n .ixfx-handle:hover,\n .ixfx-handle:focus-visible,\n .ixfx-handle[data-active],\n :hover > .ixfx-handle,\n :focus-visible > .ixfx-handle,\n [data-active] > .ixfx-handle {\n color: var(--_handle-color-active);\n opacity: var(--_handle-opacity-active);\n }\n\n /* ── flat: solid capsule / dot ────────────────────────────────────────── */\n .ixfx-handle[data-handle='flat'] {\n background: currentColor;\n border-radius: var(--_handle-radius);\n }\n .ixfx-handle[data-handle='flat'][data-shape='spot'] {\n border-radius: 50%;\n }\n\n /* ── dotted / dimpled: 3 marks in a row / column (or 3×3 for spot), repeated\n in --_handle-rows rows/columns across the cross axis for horizontal /\n vertical, drawn as one ::before mark whose border-radius follows the\n theme — round normally, square in a flat / squared-off theme\n (--radius-l: 0). box-shadow paints the rest of the marks. The extra\n rows/columns beyond --_handle-rows are still emitted (a fixed 7-row\n grid, CSS can't loop) but land outside the snapped, overflow: hidden\n bar, so they're clipped cleanly rather than shown or partially cut. ── */\n .ixfx-handle[data-handle='dotted'],\n .ixfx-handle[data-handle='dimpled'] {\n position: relative;\n }\n .ixfx-handle[data-handle='dotted']:not([data-shape='spot']),\n .ixfx-handle[data-handle='dimpled']:not([data-shape='spot']) {\n overflow: hidden;\n }\n .ixfx-handle[data-handle='dotted']:not([data-shape='vertical']):not([data-shape='spot']),\n .ixfx-handle[data-handle='dimpled']:not([data-shape='vertical']):not([data-shape='spot']) {\n width: var(--_handle-length-snapped);\n height: var(--_handle-thickness-snapped);\n }\n .ixfx-handle[data-handle='dotted'][data-shape='vertical'],\n .ixfx-handle[data-handle='dimpled'][data-shape='vertical'] {\n width: var(--_handle-thickness-snapped);\n height: var(--_handle-length-snapped);\n }\n .ixfx-handle[data-handle='dotted']::before,\n .ixfx-handle[data-handle='dimpled']::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--_handle-dot);\n height: var(--_handle-dot);\n transform: translate(-50%, -50%);\n border-radius: var(--_handle-radius);\n background: currentColor;\n }\n\n /* dotted — the other marks are plain copies: 2 more along the long axis,\n repeated across up to 7 rows/columns on the cross axis (clipped to\n --_handle-rows by the snapped, overflow: hidden bar — see above). */\n .ixfx-handle[data-handle='dotted']:not([data-shape='vertical']):not([data-shape='spot'])::before {\n transform: translate(calc(-50% + var(--_handle-col-shift)), calc(-50% + var(--_handle-row-shift)));\n box-shadow:\n calc(-3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(var(--_handle-gap)) 0 0 0 currentColor,\n calc(2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor;\n }\n .ixfx-handle[data-handle='dotted'][data-shape='vertical']::before {\n transform: translate(calc(-50% + var(--_handle-row-shift)), calc(-50% + var(--_handle-col-shift)));\n box-shadow:\n calc(-3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(var(--_handle-gap)) 0 0 currentColor,\n 0 calc(2 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) 0 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor;\n }\n .ixfx-handle[data-handle='dotted'][data-shape='spot']::before,\n .ixfx-handle[data-handle='dimpled'][data-shape='spot']::before {\n box-shadow:\n calc(-1 * var(--_handle-gap)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n var(--_handle-gap) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) 0 0 0 currentColor,\n var(--_handle-gap) 0 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) var(--_handle-gap) 0 0 currentColor,\n 0 var(--_handle-gap) 0 0 currentColor,\n var(--_handle-gap) var(--_handle-gap) 0 0 currentColor;\n }\n\n /* dimpled — each mark also gets a lighter copy up-left and a darker copy\n down-right, repeated across up to 7 rows/columns on the cross axis\n (clipped to --_handle-rows — see above). Spot stays plain — the 3D is\n imperceptible at that size. */\n .ixfx-handle[data-handle='dimpled']:not([data-shape='vertical']):not([data-shape='spot'])::before {\n transform: translate(calc(-50% + var(--_handle-col-shift)), calc(-50% + var(--_handle-row-shift)));\n box-shadow:\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) 0 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo);\n }\n .ixfx-handle[data-handle='dimpled'][data-shape='vertical']::before {\n transform: translate(calc(-50% + var(--_handle-row-shift)), calc(-50% + var(--_handle-col-shift)));\n box-shadow:\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) 0 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo);\n }\n\n /* ── grated: fine 45° knurling — each ridge is a lit edge, the base colour,\n then a shaded edge. Same hatch at every shape (spot is a square crop). ── */\n .ixfx-handle[data-handle='grated'] {\n background-image: repeating-linear-gradient(\n 45deg,\n var(--_handle-hi) 0 0.9px,\n currentColor 0.9px 1.6px,\n var(--_handle-lo) 1.6px 2.5px,\n transparent 2.5px var(--_handle-tile)\n );\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ixfx-handle {\n transition: none;\n }\n }\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,MAAa,eAAe,GAAG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hex-editor-Caq8vNQk.d.ts","names":[],"sources":["../src/hex/types.ts","../src/hex/hex-editor.ts"],"mappings":";;KAAY;KAEA;WAA6B;WAAyB,KAAK;;KAC3D;WAAiC;WAA6B,OAAO;WAAkB,KAAK;;KAC5F;WAAkC;WAA8B;WAAoB;WAAoB;WAAwB;;KAChI,YAAY,kBAAkB,sBAAsB;KAYpD;WAAuB;WAAyB;;KAChD,OAAO,YAAY,SAAS;KAK5B;;;cCCC,6BAA6B;EAExC;EAGA,cAAc;EAGd;EAGA;EAGA;EAGA;UAGQ;UAGA;UAGA;UAGA;UAGA;UAGA;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;SAED,sBAAM;EA4Ib,QAAQ,MAAM;EASd;EASA;EAQA;EAUE,iBAAiB;IAAY;IAAyB;IAAqB;;EAY7E,iBAAiB;EAIjB,aAAa;EAMb,iBAAiB,eAAe;EAUhC,kBAAkB,WAAW,WAAW,eAAe;EAYvD;EAMA,gBAAgB;YAIG;UAaX;UAMA;UAoCA;UAwCA;UAuDA;UA4HA;UAOA;UAsDA;UAYA;UAUA;UAQA;UAuBA;UAYM;UAyDN;UAiBA;UASA;UAUA;UAIA;YAIE,wBAAM;UAmCR;UA6BA;UAWA;UA+CA;;KAwCE;WACD,MAAM;;KAGL,iBAAiB,YAAY;KAE7B;WAAqC;WAAyB;;KAC9D;WAAyC;WAA6B;WAAwB;;KAC9F;WAA0C;WAA8B;WAAoB;WAAoB;WAAwB;;KACxI;WAAmC;;KACnC,oBAAoB,0BAA0B,8BAA8B,+BAA+B;QAE/G;YACI;IACR,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hex-editor-DiYpgIKs.js","names":["storeLength","undoDiff","redoDiff","customElement"],"sources":["../src/hex/colour.ts","../src/hex/data.ts","../src/hex/diff.ts","../src/hex/selection.ts","../src/hex/hex-editor.ts"],"sourcesContent":["import { Colour } from '@ixfx/visual';\n\nexport type ColourMap = {\n forByte: (byte: number) => string;\n};\n\nconst WHITESPACE_BYTES = new Set([0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x20]);\n\nfunction isControlByte(byte: number): boolean {\n return byte < 0x20 && byte !== 0x09 && byte !== 0x0A && byte !== 0x0B && byte !== 0x0C && byte !== 0x0D;\n}\n\nfunction isPrintableAscii(byte: number): boolean {\n return byte >= 0x20 && byte <= 0x7E;\n}\n\nexport function getAsciiClass(byte: number): string {\n if (byte === 0)\n return `byte-null`;\n if (WHITESPACE_BYTES.has(byte))\n return `byte-whitespace`;\n if (isControlByte(byte))\n return `byte-control`;\n if (isPrintableAscii(byte))\n return `byte-printable`;\n return `byte-other`;\n}\n\nexport function createShadeMap(nullColour: string, maxColour: string, stepStart: string, stepEnd: string): ColourMap {\n const steps = Colour.createSteps(stepStart, stepEnd, { steps: 16 });\n const cssSteps = steps.map(Colour.toCssColour);\n return {\n forByte: (byte) => {\n if (byte === 0x00)\n return nullColour;\n if (byte === 0xFF)\n return maxColour;\n return cssSteps[byte >> 4];\n },\n };\n}\n","import type { BytePos, Diff } from './types.js';\n\ntype StoreImpl = {\n data: Uint8Array;\n changeset: Set<BytePos>;\n};\n\nexport type HexStore = StoreImpl;\n\nexport function createHexStore(data: Uint8Array): HexStore {\n return {\n data: new Uint8Array(data),\n changeset: new Set<BytePos>(),\n };\n}\n\nexport function readByte(store: HexStore, pos: BytePos): number {\n return store.data[pos] ?? 0;\n}\n\nexport function readBytes(store: HexStore, positions: readonly BytePos[]): readonly number[] {\n return positions.map(p => store.data[p] ?? 0);\n}\n\nexport function length(store: HexStore): number {\n return store.data.length;\n}\n\nfunction clamp(value: number): number {\n return Math.max(0, Math.min(255, value));\n}\n\nexport function writeByte(store: HexStore, pos: BytePos, value: number): Diff {\n const clampedValue = clamp(value);\n const before = store.data[pos];\n const diff: Diff = new Map([[pos, { before, after: clampedValue }]]);\n store.data[pos] = clampedValue;\n store.changeset.add(pos);\n return diff;\n}\n\nexport function writeBytes(store: HexStore, entries: ReadonlyMap<BytePos, number>): Diff {\n const diff = new Map<BytePos, { before: number; after: number }>();\n entries.forEach((value, pos) => {\n const clampedValue = clamp(value);\n const before = store.data[pos];\n diff.set(pos, { before, after: clampedValue });\n store.data[pos] = clampedValue;\n store.changeset.add(pos);\n });\n return diff as Diff;\n}\n\nexport function applyDiff(store: HexStore, diff: Diff): Diff {\n const reverse = new Map<BytePos, { before: number; after: number }>();\n diff.forEach((entry, pos) => {\n const before = store.data[pos];\n reverse.set(pos, { before: entry.after, after: before });\n store.data[pos] = entry.after;\n store.changeset.add(pos);\n });\n return reverse as Diff;\n}\n\nexport function reverseDiff(diff: Diff): Diff {\n const reversed = new Map<BytePos, { before: number; after: number }>();\n diff.forEach((entry, pos) => {\n reversed.set(pos, { before: entry.after, after: entry.before });\n });\n return reversed as Diff;\n}\n\nexport function getChangeset(store: HexStore): ReadonlySet<BytePos> {\n return store.changeset;\n}\n\nexport function clearChangeset(store: HexStore): void {\n store.changeset.clear();\n}\n","import type { Diff } from './types.js';\n\ntype StackImpl = {\n undos: Diff[];\n redos: Diff[];\n};\n\nexport type UndoRedoStack = StackImpl;\n\nexport function createUndoRedoStack(): UndoRedoStack {\n return {\n undos: [],\n redos: [],\n };\n}\n\nexport function push(stack: UndoRedoStack, diff: Diff): void {\n stack.undos.push(diff);\n stack.redos = [];\n}\n\nexport function undo(stack: UndoRedoStack): Diff | undefined {\n const diff = stack.undos.pop();\n if (diff) {\n stack.redos.push(diff);\n }\n return diff;\n}\n\nexport function redo(stack: UndoRedoStack): Diff | undefined {\n const diff = stack.redos.pop();\n if (diff) {\n stack.undos.push(diff);\n }\n return diff;\n}\n\nexport function canUndo(stack: UndoRedoStack): boolean {\n return stack.undos.length > 0;\n}\n\nexport function canRedo(stack: UndoRedoStack): boolean {\n return stack.redos.length > 0;\n}\n","import type { BytePos, ContiguousSelection, RectangularSelection, Selection, SingleSelection } from './types.js';\n\nexport const bytesPerRow = (columns: number): number => columns * 4;\n\nconst min = (a: number, b: number): number => (a < b ? a : b);\nconst max = (a: number, b: number): number => (a > b ? a : b);\n\nexport function clampPos(pos: BytePos, dataLength: number): BytePos {\n return Math.max(0, Math.min(pos, dataLength - 1));\n}\n\nexport function getSelectedPositions(sel: Selection, columns: number): readonly BytePos[] {\n if (!sel)\n return [];\n\n const bpr = bytesPerRow(columns);\n\n if (sel.kind === `single`) {\n return [sel.pos];\n }\n\n if (sel.kind === `contiguous`) {\n const start = min(sel.start, sel.end);\n const end = max(sel.start, sel.end);\n const positions: BytePos[] = [];\n for (let i = start; i <= end; i++) {\n positions.push(i);\n }\n return positions;\n }\n\n if (sel.kind === `rectangular`) {\n const positions: BytePos[] = [];\n for (let row = 0; row < sel.height; row++) {\n for (let col = 0; col < sel.width; col++) {\n const y = sel.y + row;\n const x = sel.x + col;\n const pos = y * bpr + x;\n positions.push(pos);\n }\n }\n return positions;\n }\n\n return [];\n}\n\nexport function selectionContains(sel: Selection, pos: BytePos, columns: number): boolean {\n if (!sel)\n return false;\n\n const bpr = bytesPerRow(columns);\n\n if (sel.kind === `single`) {\n return pos === sel.pos;\n }\n\n if (sel.kind === `contiguous`) {\n const start = min(sel.start, sel.end);\n const end = max(sel.start, sel.end);\n return pos >= start && pos <= end;\n }\n\n if (sel.kind === `rectangular`) {\n const row = Math.floor(pos / bpr);\n const col = pos % bpr;\n const x = sel.x;\n const y = sel.y;\n const width = sel.width;\n const height = sel.height;\n return row >= y && row < y + height && col >= x && col < x + width;\n }\n\n return false;\n}\n\nexport function getCursorPos(sel: Selection, dir: `up` | `down` | `left` | `right`, columns: number, dataLength: number): BytePos {\n let currentPos: BytePos;\n\n if (!sel) {\n currentPos = 0;\n } else if (sel.kind === `single`) {\n currentPos = sel.pos;\n } else if (sel.kind === `contiguous`) {\n currentPos = max(sel.start, sel.end);\n } else if (sel.kind === `rectangular`) {\n currentPos = sel.y * bytesPerRow(columns) + sel.x + sel.width - 1;\n } else {\n currentPos = 0;\n }\n\n const bpr = bytesPerRow(columns);\n let newPos: BytePos;\n\n switch (dir) {\n case `left`:\n newPos = currentPos - 1;\n break;\n case `right`:\n newPos = currentPos + 1;\n break;\n case `up`:\n newPos = currentPos - bpr;\n break;\n case `down`:\n newPos = currentPos + bpr;\n break;\n default:\n newPos = currentPos;\n }\n\n return clampPos(newPos, dataLength);\n}\n\nexport function moveSelection(sel: Selection, dir: `up` | `down` | `left` | `right`, columns: number, dataLength: number): SingleSelection {\n const newPos = getCursorPos(sel, dir, columns, dataLength);\n return { kind: `single`, pos: newPos };\n}\n\nexport function extendContiguous(sel: Selection, _dir: `up` | `down` | `left` | `right`, columns: number, _dataLength: number, anchor: BytePos | null = null): ContiguousSelection {\n let currentPos: BytePos;\n\n if (!sel || sel.kind === `single`) {\n currentPos = sel?.kind === `single` ? sel.pos : 0;\n } else if (sel.kind === `contiguous`) {\n currentPos = max(sel.start, sel.end);\n } else if (sel.kind === `rectangular`) {\n currentPos = sel.y * bytesPerRow(columns) + sel.x;\n } else {\n currentPos = 0;\n }\n\n const newPos = anchor ?? currentPos;\n const start = Math.min(currentPos, newPos);\n const end = Math.max(currentPos, newPos);\n\n return {\n kind: `contiguous`,\n start,\n end,\n };\n}\n\nexport function extendRectangular(sel: Selection, dir: `up` | `down` | `left` | `right`, columns: number, _dataLength: number, anchorX: number = 0, anchorY: number = 0): RectangularSelection {\n const bpr = bytesPerRow(columns);\n\n let x: number;\n let y: number;\n let width: number;\n let height: number;\n\n if (!sel || sel.kind === `single`) {\n const pos = sel?.kind === `single` ? sel.pos : 0;\n x = pos % bpr;\n y = Math.floor(pos / bpr);\n width = 1;\n height = 1;\n } else if (sel.kind === `contiguous`) {\n const start = min(sel.start, sel.end);\n const end = max(sel.start, sel.end);\n x = start % bpr;\n y = Math.floor(start / bpr);\n width = end - start + 1;\n height = 1;\n } else if (sel.kind === `rectangular`) {\n x = sel.x;\n y = sel.y;\n width = sel.width;\n height = sel.height;\n } else {\n x = 0;\n y = 0;\n width = 1;\n height = 1;\n }\n\n const effectiveAnchorX = anchorX > 0 || (sel?.kind === `rectangular`) ? anchorX : x;\n const effectiveAnchorY = anchorY > 0 || (sel?.kind === `rectangular`) ? anchorY : y;\n\n switch (dir) {\n case `left`:\n if (x > effectiveAnchorX) {\n width -= 1;\n } else if (x === effectiveAnchorX && width > 1) {\n x -= 1;\n width += 1;\n } else if (x > 0) {\n x -= 1;\n width += 1;\n }\n break;\n case `right`:\n if (x + width < bpr) {\n width += 1;\n }\n break;\n case `up`:\n if (y > effectiveAnchorY) {\n height -= 1;\n } else if (y === effectiveAnchorY && height > 1) {\n y -= 1;\n height += 1;\n } else if (y > 0) {\n y -= 1;\n height += 1;\n }\n break;\n case `down`:\n height += 1;\n break;\n }\n\n return { kind: `rectangular`, x, y, width, height };\n}\n\nexport function selectionFromPointerRange(start: BytePos, end: BytePos, mode: `contiguous` | `rectangular`, columns: number): Selection {\n const bpr = bytesPerRow(columns);\n\n if (mode === `contiguous`) {\n const s = min(start, end);\n const e = max(start, end);\n return {\n kind: `contiguous`,\n start: s,\n end: e,\n };\n }\n\n const startX = start % bpr;\n const startY = Math.floor(start / bpr);\n const endX = end % bpr;\n const endY = Math.floor(end / bpr);\n\n const x = min(startX, endX);\n const y = min(startY, endY);\n const width = Math.abs(endX - startX) + 1;\n const height = Math.abs(endY - startY) + 1;\n\n return { kind: `rectangular`, x, y, width, height };\n}\n","import type { ColourMap } from './colour.js';\nimport type { BytePos, ColourScheme, Diff, EditState, Selection } from './types.js';\nimport { css, html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\n\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport { createShadeMap, getAsciiClass } from './colour.js';\n\nimport { applyDiff, createHexStore, getChangeset, readByte, reverseDiff, length as storeLength, writeByte, writeBytes } from './data.js';\nimport { createUndoRedoStack, push as pushDiff, redo as redoDiff, undo as undoDiff } from './diff.js';\nimport { bytesPerRow, clampPos, extendRectangular, getCursorPos, getSelectedPositions, moveSelection, selectionContains, selectionFromPointerRange } from './selection.js';\n\ntype PointerMode = `pending` | `drag-value` | `select-cont` | `select-rect` | null;\n\ntype DragStart = {\n pos: BytePos;\n startValue: number;\n startY: number;\n startX: number;\n};\n\n@customElement(`ixfx-hex-editor`)\nexport class IxfxHexEditorElement extends LitElement {\n @property({ type: Number })\n columns = 4;\n\n @property({ type: String })\n colourScheme: ColourScheme = `ascii`;\n\n @property({ type: Boolean })\n showChangeset = true;\n\n @property({ type: Boolean, attribute: `hide-offset-col` })\n hideOffsetCol = false;\n\n @property({ type: Boolean, attribute: `hide-hex-col` })\n hideHexCol = false;\n\n @property({ type: Boolean, attribute: `hide-text-col` })\n hideTextCol = false;\n\n @state()\n private _selection: Selection = null;\n\n @state()\n private _scrollTop = 0;\n\n @state()\n private _editState: EditState | null = null;\n\n @state()\n private _containerH = 0;\n\n @state()\n private _shadeMap: ColourMap | null = null;\n\n @state()\n private _focusSide: `hex` | `text` | null = null;\n\n private _store = createHexStore(new Uint8Array(0));\n private _undoStack = createUndoRedoStack();\n private _copyBuffer: Uint8Array | null = null;\n private _rowHeight = 24;\n private _dragStart: DragStart | null = null;\n private _dragAnchor: BytePos | null = null;\n private _rectAnchorX = 0;\n private _rectAnchorY = 0;\n private _rectAnchorXFromKeyboard = 0;\n private _rectAnchorYFromKeyboard = 0;\n private _initialSelectionPoint: BytePos = 0;\n private _currentCursorPoint: BytePos = 0;\n private _pointerMode: PointerMode = null;\n private _currentDragDiff: Diff | null = null;\n private _shiftClickTarget: BytePos | null = null;\n\n static styles = css`\n :host {\n --hex-row-height: 24px;\n --hex-offset-width: 8ch;\n --hex-font: monospace;\n --hex-font-size: 0.85rem;\n --hex-changed-weight: bold;\n\n --ascii-null: #808080;\n --ascii-printable: #4caf50;\n --ascii-whitespace: #ffffff;\n --ascii-control: #f48fb1;\n --ascii-other: #ffeb3b;\n\n --shade-null: #808080;\n --shade-max: #ffffff;\n --shade-step-start: #ff0000;\n --shade-step-end: #0000ff;\n\n display: block;\n font-family: var(--hex-font);\n font-size: var(--hex-font-size);\n }\n\n .hex-editor {\n display: flex;\n flex-direction: column;\n height: 300px;\n overflow: hidden;\n background: #1e1e1e;\n color: #e0e0e0;\n border: 1px solid #333;\n border-radius: 4px;\n }\n\n .scroll-container {\n flex: 1;\n overflow-y: auto;\n position: relative;\n }\n\n .header {\n display: flex;\n background: #2d2d2d;\n font-weight: bold;\n border-bottom: 1px solid #444;\n height: var(--hex-row-height);\n flex-shrink: 0;\n align-items: center;\n }\n\n .row {\n display: flex;\n height: var(--hex-row-height);\n align-items: center;\n }\n\n .row:hover {\n background: rgba(255, 255, 255, 0.05);\n }\n\n .offset-cell {\n width: var(--hex-offset-width);\n padding: 0 8px;\n text-align: right;\n color: #888;\n flex-shrink: 0;\n box-sizing: border-box;\n }\n\n .col-group {\n display: inline-flex;\n gap: 4px;\n margin-right: 16px;\n }\n\n .col-header {\n width: calc(8ch + 28px);\n padding: 0 8px;\n color: #555;\n text-align: right;\n flex-shrink: 0;\n box-sizing: border-box;\n }\n\n .col-header.active {\n color: #aaa;\n }\n\n .text-header {\n padding: 4px 8px;\n color: #555;\n width: calc(var(--columns, 4) * 4 * 1ch);\n box-sizing: border-box;\n flex-shrink: 0;\n }\n\n .text-header.active {\n color: #aaa;\n }\n\n .hex-cell, .text-char {\n display: inline-block;\n width: 2ch;\n text-align: center;\n cursor: pointer;\n user-select: none;\n padding: 2px 0;\n }\n\n .hex-cell.selected, .text-char.selected {\n background: rgba(100, 149, 237, 0.4);\n }\n\n .hex-cell.changed, .text-char.changed {\n font-weight: var(--hex-changed-weight);\n }\n\n .hex-cell.editing {\n background: rgba(255, 215, 0, 0.3);\n }\n\n\n .text-area {\n display: inline-flex;\n gap: 0;\n }\n\n .text-char {\n width: 1ch;\n text-align: left;\n }\n\n .byte-null { color: var(--ascii-null); }\n .byte-printable { color: var(--ascii-printable); }\n .byte-whitespace { color: var(--ascii-whitespace); }\n .byte-control { color: var(--ascii-control); }\n .byte-other { color: var(--ascii-other); }\n `;\n\n setData(data: Uint8Array): void {\n this._store = createHexStore(data);\n this._undoStack = createUndoRedoStack();\n this._selection = null;\n this._editState = null;\n this._scrollTop = 0;\n this.requestUpdate();\n }\n\n undo(): void {\n const diff = undoDiff(this._undoStack);\n if (!diff)\n return;\n const reverse = reverseDiff(diff);\n applyDiff(this._store, reverse);\n this.requestUpdate();\n }\n\n redo(): void {\n const diff = redoDiff(this._undoStack);\n if (!diff)\n return;\n applyDiff(this._store, diff);\n this.requestUpdate();\n }\n\n recomputeColours(): void {\n const style = getComputedStyle(this);\n const nullC = style.getPropertyValue(`--shade-null`).trim() || `#808080`;\n const maxC = style.getPropertyValue(`--shade-max`).trim() || `#ffffff`;\n const stepStart = style.getPropertyValue(`--shade-step-start`).trim() || `#ff0000`;\n const stepEnd = style.getPropertyValue(`--shade-step-end`).trim() || `#0000ff`;\n this._shadeMap = createShadeMap(nullC, maxC, stepStart, stepEnd);\n this.requestUpdate();\n }\n\n * selectedBytes(): Generator<{ selection_index: number; array_index: number; value: number }> {\n const positions = getSelectedPositions(this._selection, this.columns);\n for (let i = 0; i < positions.length; i++) {\n const pos = positions[i];\n yield {\n selection_index: i,\n array_index: pos,\n value: readByte(this._store, pos),\n };\n }\n }\n\n containsPosition(pos: number): boolean {\n return selectionContains(this._selection, pos as BytePos, this.columns);\n }\n\n selectSingle(position: number): void {\n this._selection = { kind: `single`, pos: position as BytePos };\n this._dispatchSelectEvent();\n this.requestUpdate();\n }\n\n selectContiguous(start: number, end: number): void {\n this._selection = {\n kind: `contiguous`,\n start: start as BytePos,\n end: end as BytePos,\n };\n this._dispatchSelectEvent();\n this.requestUpdate();\n }\n\n selectRectangular(x: number, y: number, width: number, height: number): void {\n this._selection = {\n kind: `rectangular`,\n x,\n y,\n width,\n height,\n };\n this._dispatchSelectEvent();\n this.requestUpdate();\n }\n\n clearSelection(): void {\n this._selection = null;\n this._dispatchSelectEvent();\n this.requestUpdate();\n }\n\n getSelection(): Selection {\n return this._selection;\n }\n\n protected override firstUpdated(): void {\n const container = this.shadowRoot?.querySelector(`.scroll-container`);\n if (container) {\n const ro = new ResizeObserver((entries) => {\n this._containerH = entries[0].contentRect.height;\n this.requestUpdate();\n });\n ro.observe(container);\n this._containerH = container.clientHeight;\n }\n this.recomputeColours();\n }\n\n private _onScroll = (e: Event): void => {\n const target = e.target as HTMLElement;\n this._scrollTop = target.scrollTop;\n this.requestUpdate();\n };\n\n private _onPointerDown(pos: BytePos, side: `hex` | `text`, e: PointerEvent): void {\n e.preventDefault();\n if (e.button !== 0)\n return;\n\n (this.shadowRoot?.querySelector(`.hex-editor`) as HTMLElement)?.focus();\n this._focusSide = side;\n\n const target = e.target as Element;\n target.setPointerCapture(e.pointerId);\n\n const bpr = bytesPerRow(this.columns);\n const startX = pos % bpr;\n const startY = Math.floor(pos / bpr);\n\n if (e.metaKey || e.ctrlKey) {\n this._pointerMode = `select-rect`;\n this._dragAnchor = pos;\n this._rectAnchorX = startX;\n this._rectAnchorY = startY;\n } else if (e.shiftKey) {\n this._pointerMode = `select-cont`;\n if (!this._selection || this._selection.kind !== `single`) {\n this._dragAnchor = pos;\n } else {\n this._dragAnchor = this._selection.pos;\n this._shiftClickTarget = pos;\n }\n } else {\n this._pointerMode = `pending`;\n this._dragStart = { pos, startValue: readByte(this._store, pos), startY: e.clientY, startX: e.clientX };\n this._dragAnchor = pos;\n this._currentDragDiff = null;\n }\n }\n\n private _onPointerMove(pos: BytePos, _side: `hex` | `text`, e: PointerEvent): void {\n if (!this._dragStart)\n return;\n\n const dy = Math.abs(e.clientY - this._dragStart.startY);\n const dx = Math.abs(e.clientX - this._dragStart.startX);\n\n if (this._pointerMode === `pending` && dy > 4 && dy > dx) {\n this._pointerMode = `drag-value`;\n this._editState = null;\n }\n\n if (this._pointerMode === `drag-value`) {\n const delta = Math.round((e.clientY - this._dragStart.startY) / 4);\n const newValue = Math.max(0, Math.min(255, this._dragStart.startValue - delta));\n this._currentDragDiff = writeByte(this._store, pos, newValue);\n this.requestUpdate();\n }\n\n if (this._pointerMode === `select-cont`) {\n if (this._dragAnchor !== null) {\n const mode = `contiguous`;\n this._selection = selectionFromPointerRange(this._dragAnchor, pos, mode, this.columns);\n this._dispatchSelectEvent();\n }\n }\n\n if (this._pointerMode === `select-rect`) {\n const bpr = bytesPerRow(this.columns);\n const currentX = pos % bpr;\n const currentY = Math.floor(pos / bpr);\n const x = Math.min(this._rectAnchorX, currentX);\n const y = Math.min(this._rectAnchorY, currentY);\n const width = Math.abs(currentX - this._rectAnchorX) + 1;\n const height = Math.abs(currentY - this._rectAnchorY) + 1;\n this._selection = { kind: `rectangular`, x, y, width, height };\n this._dispatchSelectEvent();\n }\n }\n\n private _onPointerUp(pos: BytePos, side: `hex` | `text`, e: PointerEvent): void {\n const target = e.target as Element;\n target.releasePointerCapture(e.pointerId);\n\n if (this._pointerMode === `pending`) {\n this._selection = { kind: `single`, pos };\n this._initialSelectionPoint = pos;\n this._currentCursorPoint = pos;\n this._editState = { pos, side, partial: `` };\n this._dispatchSelectEvent();\n }\n\n if (this._pointerMode === `select-cont`) {\n if (this._dragAnchor !== null && this._shiftClickTarget !== null) {\n this._selection = {\n kind: `contiguous`,\n start: this._dragAnchor,\n end: this._shiftClickTarget,\n };\n this._initialSelectionPoint = Math.min(this._dragAnchor, this._shiftClickTarget);\n this._currentCursorPoint = Math.max(this._dragAnchor, this._shiftClickTarget);\n this._dispatchSelectEvent();\n } else if (this._dragAnchor !== null) {\n const mode = `contiguous`;\n this._selection = selectionFromPointerRange(this._dragAnchor, pos, mode, this.columns);\n this._initialSelectionPoint = this._dragAnchor;\n this._currentCursorPoint = pos;\n this._dispatchSelectEvent();\n }\n }\n\n if (this._pointerMode === `select-rect`) {\n const bpr = bytesPerRow(this.columns);\n const currentX = pos % bpr;\n const currentY = Math.floor(pos / bpr);\n const x = Math.min(this._rectAnchorX, currentX);\n const y = Math.min(this._rectAnchorY, currentY);\n const width = Math.abs(currentX - this._rectAnchorX) + 1;\n const height = Math.abs(currentY - this._rectAnchorY) + 1;\n this._selection = { kind: `rectangular`, x, y, width, height };\n this._dispatchSelectEvent();\n }\n\n if (this._pointerMode === `drag-value` && this._currentDragDiff) {\n pushDiff(this._undoStack, this._currentDragDiff);\n this._dispatchChangeEvent(this._currentDragDiff);\n }\n\n this._pointerMode = null;\n this._dragStart = null;\n this._dragAnchor = null;\n this._currentDragDiff = null;\n this._shiftClickTarget = null;\n }\n\n private _onKeyDown = (e: KeyboardEvent): void => {\n const isNavigationKey = [`ArrowLeft`, `ArrowRight`, `ArrowUp`, `ArrowDown`].includes(e.key);\n\n if (isNavigationKey) {\n e.preventDefault();\n e.stopPropagation();\n\n if (this._editState) {\n this._editState = null;\n }\n\n const dir = e.key.replace(`Arrow`, ``).toLowerCase() as `left` | `right` | `up` | `down`;\n const dataLen = storeLength(this._store);\n const bpr = bytesPerRow(this.columns);\n\n if (e.metaKey || e.ctrlKey) {\n if (!this._selection || this._selection.kind !== `rectangular`) {\n let startPos = 0;\n if (this._selection?.kind === `single`) {\n startPos = this._selection.pos;\n } else if (this._selection?.kind === `contiguous`) {\n startPos = Math.min(this._selection.start, this._selection.end);\n }\n this._rectAnchorXFromKeyboard = startPos % bpr;\n this._rectAnchorYFromKeyboard = Math.floor(startPos / bpr);\n this._selection = { kind: `rectangular`, x: this._rectAnchorXFromKeyboard, y: this._rectAnchorYFromKeyboard, width: 1, height: 1 };\n }\n this._selection = extendRectangular(this._selection, dir, this.columns, dataLen, this._rectAnchorXFromKeyboard, this._rectAnchorYFromKeyboard);\n } else if (e.shiftKey) {\n if (!this._selection) {\n this._initialSelectionPoint = 0;\n this._currentCursorPoint = 0;\n } else if (this._selection.kind === `single`) {\n this._initialSelectionPoint = this._selection.pos;\n this._currentCursorPoint = this._selection.pos;\n } else if (this._selection.kind === `rectangular`) {\n const cursorPos = this._selection.y * bpr + this._selection.x;\n this._initialSelectionPoint = cursorPos;\n this._currentCursorPoint = cursorPos;\n }\n const newPos = getCursorPos(this._selection, dir, this.columns, dataLen);\n const start = Math.min(this._initialSelectionPoint, newPos);\n const end = Math.max(this._initialSelectionPoint, newPos);\n this._currentCursorPoint = newPos;\n this._selection = { kind: `contiguous`, start, end };\n } else {\n this._selection = moveSelection(this._selection, dir, this.columns, dataLen);\n const pos = getCursorPos(this._selection, dir, this.columns, dataLen);\n this._initialSelectionPoint = pos;\n this._currentCursorPoint = pos;\n }\n this._dispatchSelectEvent();\n this.requestUpdate();\n return;\n }\n\n if (e.key === `Tab`) {\n e.preventDefault();\n e.stopPropagation();\n if (this._editState) {\n this._advanceCursor();\n } else {\n const dataLen = storeLength(this._store);\n this._selection = moveSelection(this._selection, `right`, this.columns, dataLen);\n this._dispatchSelectEvent();\n }\n this.requestUpdate();\n return;\n }\n\n if (e.key === `Escape`) {\n e.preventDefault();\n e.stopPropagation();\n if (this._editState) {\n this._editState = null;\n } else if (this._selection && this._selection.kind !== `single`) {\n const sel = this._selection;\n let firstPos = 0;\n if ((sel as { kind: string }).kind === `contiguous`) {\n const c = sel as { start: number; end: number };\n firstPos = Math.min(c.start, c.end);\n }\n if ((sel as { kind: string }).kind === `rectangular`) {\n const r = sel as { y: number; x: number };\n firstPos = r.y * bytesPerRow(this.columns) + r.x;\n }\n this._selection = { kind: `single`, pos: firstPos };\n this._dispatchSelectEvent();\n }\n this.requestUpdate();\n return;\n }\n\n if (this._editState) {\n e.stopPropagation();\n\n if (e.key === `Backspace`) {\n this._handleBackspace();\n return;\n }\n\n if (e.key === `Enter`) {\n if (this._editState.side === `hex` && this._editState.partial.startsWith(`.`)) {\n this._commitDecimalValue();\n }\n return;\n }\n\n if (e.key.length === 1) {\n this._handleValueEntry(e.key);\n }\n return;\n }\n\n if (this._selection && this._selection.kind === `single` && e.key.length === 1) {\n e.preventDefault();\n e.stopPropagation();\n const pos = this._selection.pos;\n const side: `hex` | `text` = this._focusSide ?? `hex`;\n this._editState = { pos, side, partial: `` };\n this._handleValueEntry(e.key);\n }\n };\n\n private _handleBackspace(): void {\n if (!this._editState)\n return;\n this._editState = { ...this._editState, partial: `` };\n this.requestUpdate();\n }\n\n private _handleValueEntry(key: string): void {\n if (!this._editState)\n return;\n\n const { pos, side, partial } = this._editState;\n\n if (side === `text`) {\n if (key.length === 1 && key.charCodeAt(0) >= 0x20 && key.charCodeAt(0) <= 0x7E) {\n const value = key.charCodeAt(0);\n const diff = writeByte(this._store, pos, value);\n pushDiff(this._undoStack, diff);\n this._dispatchChangeEvent(diff);\n this._advanceCursor();\n }\n return;\n }\n\n if (partial === `` && key === `.`) {\n this._editState = { ...this._editState, partial: `.` };\n this.requestUpdate();\n return;\n }\n\n if (partial.startsWith(`.`)) {\n if (/\\d/.test(key)) {\n let newPartial = partial + key;\n if (Number(newPartial.slice(1)) > 255) {\n newPartial = `.255`;\n }\n this._editState = { ...this._editState, partial: newPartial };\n this.requestUpdate();\n }\n return;\n }\n\n const hexChars = `0123456789ABCDEFabcdef`;\n if (hexChars.includes(key)) {\n const newPartial = (partial + key.toUpperCase()).slice(-2);\n this._editState = { ...this._editState, partial: newPartial };\n this.requestUpdate();\n\n if (newPartial.length === 2) {\n const value = Number.parseInt(newPartial, 16);\n const diff = writeByte(this._store, pos, value);\n pushDiff(this._undoStack, diff);\n this._dispatchChangeEvent(diff);\n this._advanceCursor();\n }\n } else if (partial !== ``) {\n this._editState = { ...this._editState, partial: `` };\n this.requestUpdate();\n }\n }\n\n private _commitDecimalValue(): void {\n if (!this._editState)\n return;\n const value = Number.parseInt(this._editState.partial.slice(1), 10);\n if (!Number.isNaN(value)) {\n const diff = writeByte(this._store, this._editState.pos, value);\n pushDiff(this._undoStack, diff);\n this._dispatchChangeEvent(diff);\n this._advanceCursor();\n }\n }\n\n private _advanceCursor(): void {\n if (!this._editState)\n return;\n const dataLen = storeLength(this._store);\n const newPos = clampPos(this._editState.pos + 1, dataLen);\n this._editState = { pos: newPos, side: this._editState.side, partial: `` };\n this._selection = { kind: `single`, pos: newPos };\n this.requestUpdate();\n }\n\n private _dispatchChangeEvent(diff: Diff): void {\n this.dispatchEvent(new CustomEvent(`hex-change`, {\n detail: { diff },\n bubbles: true,\n composed: true,\n }));\n }\n\n private _dispatchSelectEvent(): void {\n const sel = this._selection;\n let detail: SelectEventDetail;\n\n if (!sel) {\n detail = { type: `none` };\n } else if (sel.kind === `single`) {\n detail = { type: `single`, position: sel.pos };\n } else if (sel.kind === `contiguous`) {\n detail = { type: `contiguous`, start: sel.start, end: sel.end };\n } else if (sel.kind === `rectangular`) {\n detail = { type: `rectangular`, x: sel.x, y: sel.y, width: sel.width, height: sel.height };\n } else {\n detail = { type: `none` };\n }\n\n this.dispatchEvent(new CustomEvent(`select`, {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n private _copy(): void {\n const positions = getSelectedPositions(this._selection, this.columns);\n if (positions.length === 0)\n return;\n\n const bytes = positions.map((p: BytePos) => readByte(this._store, p));\n this._copyBuffer = new Uint8Array(bytes);\n\n const hexStr = bytes.map((b: number) => b.toString(16).padStart(2, `0`)).join(` `);\n navigator.clipboard?.writeText(hexStr).catch(() => {});\n }\n\n private async _paste(): Promise<void> {\n let bytes: number[] | null = null;\n\n try {\n const text = await navigator.clipboard?.readText();\n if (text) {\n bytes = this._parseHexString(text);\n }\n } catch {\n // ignore\n }\n\n if (!bytes && this._copyBuffer) {\n bytes = Array.from(this._copyBuffer);\n }\n\n if (!bytes || bytes.length === 0)\n return;\n\n if (!this._selection)\n return;\n\n const entries = new Map<BytePos, number>();\n\n if (this._selection.kind === `single`) {\n const startPos = this._selection.pos;\n const dataLen = storeLength(this._store);\n for (let i = 0; i < bytes.length && startPos + i < dataLen; i++) {\n entries.set(startPos + i, bytes[i]);\n }\n } else if (this._selection.kind === `contiguous`) {\n const startPos = Math.min(this._selection.start, this._selection.end);\n const endPos = Math.max(this._selection.start, this._selection.end);\n const available = endPos - startPos + 1;\n for (let i = 0; i < Math.min(bytes.length, available); i++) {\n entries.set(startPos + i, bytes[i]);\n }\n } else if (this._selection.kind === `rectangular`) {\n const { x, y, width, height } = this._selection;\n const bpr = bytesPerRow(this.columns);\n let byteIdx = 0;\n for (let row = 0; row < height && byteIdx < bytes.length; row++) {\n for (let col = 0; col < width && byteIdx < bytes.length; col++) {\n const pos = (y + row) * bpr + x + col;\n entries.set(pos, bytes[byteIdx++]);\n }\n }\n }\n\n if (entries.size > 0) {\n const diff = writeBytes(this._store, entries);\n pushDiff(this._undoStack, diff);\n this._dispatchChangeEvent(diff);\n this.requestUpdate();\n }\n }\n\n private _parseHexString(text: string): number[] {\n const bytes: number[] = [];\n const cleaned = text.replace(/[^0-9A-F]/gi, ` `).trim();\n if (!cleaned)\n return bytes;\n\n const parts = cleaned.split(/\\s+/);\n for (const part of parts) {\n if (part.length === 1) {\n bytes.push(Number.parseInt(part + part, 16));\n } else if (part.length === 2) {\n bytes.push(Number.parseInt(part, 16));\n }\n }\n return bytes;\n }\n\n private _getColHeaders(): string[] {\n const headers: string[] = [];\n for (let i = 0; i < this.columns; i++) {\n const offset = i * 4;\n headers.push(`+${offset.toString(16).toUpperCase()}`);\n }\n return headers;\n }\n\n private _isRowShaded(pos: BytePos): boolean {\n const sel = this._selection;\n if (!sel || sel.kind !== `single`)\n return true;\n const bpr = bytesPerRow(this.columns);\n const row = Math.floor(pos / bpr);\n const selRow = Math.floor(sel.pos / bpr);\n return row === selRow;\n }\n\n private _isHexShaded(pos: BytePos): boolean {\n return this._isRowShaded(pos);\n }\n\n private _isTextShaded(pos: BytePos): boolean {\n return this._isRowShaded(pos);\n }\n\n protected render() {\n const dataLen = storeLength(this._store);\n const bpr = bytesPerRow(this.columns);\n const totalRows = Math.ceil(dataLen / bpr);\n const containerH = this._containerH > 0 ? this._containerH : 280;\n const startRow = Math.floor(this._scrollTop / this._rowHeight);\n const endRow = Math.min(startRow + Math.ceil(containerH / this._rowHeight) + 2, totalRows);\n const topSpacerHeight = startRow * this._rowHeight;\n const botSpacerHeight = (totalRows - endRow) * this._rowHeight;\n const changeset = getChangeset(this._store);\n\n const colHeaders = this._getColHeaders();\n const hexActive = this._focusSide === `hex` || this._focusSide === null;\n const textActive = this._focusSide === `text`;\n\n return html`\n <div class=\"hex-editor\" tabindex=\"0\" @keydown=${this._onKeyDown} @pointerleave=${() => {}}>\n <div class=\"header\">\n ${this.hideOffsetCol ? null : html`<span class=\"offset-cell\">Offset</span>`}\n ${this.hideHexCol ? null : repeat(colHeaders, h => html`<span class=\"col-header ${hexActive ? `active` : ``}\">${h}</span>`)}\n ${this.hideTextCol ? null : html`<span class=\"text-header ${textActive ? `active` : ``}\">Text</span>`}\n </div>\n <div class=\"scroll-container\" @scroll=${this._onScroll}>\n <div style=\"height: ${topSpacerHeight}px\"></div>\n ${repeat(\n Array.from({ length: endRow - startRow }, (_, i) => startRow + i),\n rowIndex => rowIndex,\n rowIndex => this._renderRow(rowIndex, changeset),\n )}\n <div style=\"height: ${botSpacerHeight}px\"></div>\n </div>\n </div>\n `;\n }\n\n private _renderRow(rowIndex: number, changeset: ReadonlySet<BytePos>) {\n const bpr = bytesPerRow(this.columns);\n const offset = rowIndex * bpr;\n\n return html`\n <div class=\"row\" data-row=${rowIndex}>\n ${this.hideOffsetCol ? null : html`<span class=\"offset-cell\">${offset.toString(16).toUpperCase().padStart(6, `0`)}</span>`}\n ${this.hideHexCol\n ? null\n : repeat(\n Array.from({ length: this.columns }, (_, i) => i),\n colIndex => colIndex,\n colIndex => this._renderColumn(rowIndex, colIndex, changeset),\n )}\n ${this.hideTextCol\n ? null\n : html`\n <span class=\"text-area\">\n ${repeat(\n Array.from({ length: bpr }, (_, i) => i),\n i => i,\n i => this._renderTextChar(offset + i, changeset),\n )}\n </span>\n `}\n </div>\n `;\n }\n\n private _renderColumn(rowIndex: number, colIndex: number, changeset: ReadonlySet<BytePos>) {\n const bpr = bytesPerRow(this.columns);\n const basePos = rowIndex * bpr + colIndex * 4;\n\n return html`\n <span class=\"col-group\">\n ${[0, 1, 2, 3].map(b => this._renderHexCell(basePos + b, changeset))}\n </span>\n `;\n }\n\n private _renderHexCell(pos: BytePos, changeset: ReadonlySet<BytePos>) {\n const dataLen = storeLength(this._store);\n if (pos >= dataLen) {\n return html`<span class=\"hex-cell\"></span>`;\n }\n\n const byte = readByte(this._store, pos);\n const hexStr = byte.toString(16).toUpperCase().padStart(2, `0`);\n\n const isSelected = selectionContains(this._selection, pos, this.columns);\n const isChanged = this.showChangeset && changeset.has(pos);\n const isEditing = this._editState?.pos === pos;\n\n const classes: string[] = [`hex-cell`];\n if (isSelected)\n classes.push(`selected`);\n if (isChanged)\n classes.push(`changed`);\n if (isEditing)\n classes.push(`editing`);\n if (this._isHexShaded(pos))\n classes.push(`shaded`);\n\n let displayText = hexStr;\n let colourStyle: Record<string, string> | undefined;\n\n if (isEditing && this._editState) {\n displayText = this._editState.partial === `` ? hexStr : `${this._editState.partial}_`;\n }\n\n if (this.colourScheme === `shade` && this._shadeMap) {\n colourStyle = { color: this._shadeMap.forByte(byte) };\n } else if (this.colourScheme === `ascii`) {\n classes.push(getAsciiClass(byte));\n }\n\n return html`\n <span\n class=${classes.join(` `)}\n style=${styleMap(colourStyle || {})}\n @pointerdown=${(e: PointerEvent) => this._onPointerDown(pos, `hex`, e)}\n @pointerup=${(e: PointerEvent) => this._onPointerUp(pos, `hex`, e)}\n @pointermove=${(e: PointerEvent) => this._onPointerMove(pos, `hex`, e)}\n >${displayText}</span>\n `;\n }\n\n private _renderTextChar(pos: BytePos, changeset: ReadonlySet<BytePos>) {\n const dataLen = storeLength(this._store);\n if (pos >= dataLen) {\n return html`<span class=\"text-char\"></span>`;\n }\n\n const byte = readByte(this._store, pos);\n const char = byte >= 0x20 && byte <= 0x7E ? String.fromCharCode(byte) : `.`;\n\n const isSelected = selectionContains(this._selection, pos, this.columns);\n const isChanged = this.showChangeset && changeset.has(pos);\n\n const classes: string[] = [`text-char`];\n if (isSelected)\n classes.push(`selected`);\n if (isChanged)\n classes.push(`changed`);\n if (this._isTextShaded(pos))\n classes.push(`shaded`);\n\n let colourStyle: Record<string, string> | undefined;\n\n if (this.colourScheme === `shade` && this._shadeMap) {\n colourStyle = { color: this._shadeMap.forByte(byte) };\n } else if (this.colourScheme === `ascii`) {\n classes.push(getAsciiClass(byte));\n }\n\n return html`\n <span\n class=${classes.join(` `)}\n style=${styleMap(colourStyle || {})}\n @pointerdown=${(e: PointerEvent) => this._onPointerDown(pos, `text`, e)}\n @pointerup=${(e: PointerEvent) => this._onPointerUp(pos, `text`, e)}\n @pointermove=${(e: PointerEvent) => this._onPointerMove(pos, `text`, e)}\n >${char}</span>\n `;\n }\n}\n\nexport type HexChangeDetail = {\n readonly diff: Diff;\n};\n\nexport type HexChangeEvent = CustomEvent<HexChangeDetail>;\n\nexport type SingleSelectEventDetail = { readonly type: `single`; readonly position: number };\nexport type ContiguousSelectEventDetail = { readonly type: `contiguous`; readonly start: number; readonly end: number };\nexport type RectangularSelectEventDetail = { readonly type: `rectangular`; readonly x: number; readonly y: number; readonly width: number; readonly height: number };\nexport type NoneSelectEventDetail = { readonly type: `none` };\nexport type SelectEventDetail = SingleSelectEventDetail | ContiguousSelectEventDetail | RectangularSelectEventDetail | NoneSelectEventDetail;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-hex-editor': IxfxHexEditorElement;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"highlight-B-eQrhhb.js","names":[],"sources":["../src/incr-search/highlight.ts"],"sourcesContent":["import type { HighlightOptions, HighlightTarget } from './types.js';\n\nconst DEFAULT_KEY = `incr-search-highlight`;\n\nexport function applyHighlights(\n targets: readonly HighlightTarget[],\n options: HighlightOptions = {},\n): void {\n if (typeof CSS === `undefined` || !CSS.highlights)\n return;\n\n const key = options.key ?? DEFAULT_KEY;\n CSS.highlights.delete(key);\n\n const ranges: Range[] = [];\n\n for (const { element, text, positions } of targets) {\n if (!positions.size)\n continue;\n\n const textNode = findTextNode(element, text);\n if (!textNode)\n continue;\n\n for (const pos of positions) {\n const range = new Range();\n range.setStart(textNode, pos);\n range.setEnd(textNode, pos + 1);\n ranges.push(range);\n }\n }\n\n if (ranges.length > 0) {\n CSS.highlights.set(key, new Highlight(...ranges));\n }\n}\n\nexport function clearHighlights(options: HighlightOptions = {}): void {\n if (typeof CSS === `undefined` || !CSS.highlights)\n return;\n CSS.highlights.delete(options.key ?? DEFAULT_KEY);\n}\n\nexport function buildHighlightTargets<T>(\n root: ShadowRoot | Element,\n itemSelector: string,\n positionsByItem: ReadonlyMap<T, ReadonlySet<number>>,\n getItem: (el: Element) => T | undefined,\n getText: (el: Element) => string,\n): HighlightTarget[] {\n const targets: HighlightTarget[] = [];\n const labelEls = root.querySelectorAll(itemSelector);\n\n for (const el of labelEls) {\n const item = getItem(el);\n if (item === undefined)\n continue;\n const positions = positionsByItem.get(item);\n if (!positions || positions.size === 0)\n continue;\n targets.push({ element: el, text: getText(el), positions });\n }\n\n return targets;\n}\n\nfunction findTextNode(element: Element, expectedText?: string): Text | null {\n for (const node of element.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n if (expectedText === undefined || node.textContent === expectedText) {\n return node as Text;\n }\n }\n }\n return null;\n}\n"],"mappings":";AAEA,MAAM,cAAc;AAEpB,SAAgB,gBACd,SACA,UAA4B,CAAC,GACvB;CACN,IAAI,OAAO,QAAQ,eAAe,CAAC,IAAI,YACrC;CAEF,MAAM,MAAM,QAAQ,OAAO;CAC3B,IAAI,WAAW,OAAO,GAAG;CAEzB,MAAM,SAAkB,CAAC;CAEzB,KAAK,MAAM,EAAE,SAAS,MAAM,eAAe,SAAS;EAClD,IAAI,CAAC,UAAU,MACb;EAEF,MAAM,WAAW,aAAa,SAAS,IAAI;EAC3C,IAAI,CAAC,UACH;EAEF,KAAK,MAAM,OAAO,WAAW;GAC3B,MAAM,QAAQ,IAAI,MAAM;GACxB,MAAM,SAAS,UAAU,GAAG;GAC5B,MAAM,OAAO,UAAU,MAAM,CAAC;GAC9B,OAAO,KAAK,KAAK;EACnB;CACF;CAEA,IAAI,OAAO,SAAS,GAClB,IAAI,WAAW,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,CAAC;AAEpD;AAEA,SAAgB,gBAAgB,UAA4B,CAAC,GAAS;CACpE,IAAI,OAAO,QAAQ,eAAe,CAAC,IAAI,YACrC;CACF,IAAI,WAAW,OAAO,QAAQ,OAAO,WAAW;AAClD;AAEA,SAAgB,sBACd,MACA,cACA,iBACA,SACA,SACmB;CACnB,MAAM,UAA6B,CAAC;CACpC,MAAM,WAAW,KAAK,iBAAiB,YAAY;CAEnD,KAAK,MAAM,MAAM,UAAU;EACzB,MAAM,OAAO,QAAQ,EAAE;EACvB,IAAI,SAAS,KAAA,GACX;EACF,MAAM,YAAY,gBAAgB,IAAI,IAAI;EAC1C,IAAI,CAAC,aAAa,UAAU,SAAS,GACnC;EACF,QAAQ,KAAK;GAAE,SAAS;GAAI,MAAM,QAAQ,EAAE;GAAG;EAAU,CAAC;CAC5D;CAEA,OAAO;AACT;AAEA,SAAS,aAAa,SAAkB,cAAoC;CAC1E,KAAK,MAAM,QAAQ,QAAQ,YACzB,IAAI,KAAK,aAAa,KAAK,WACrB;MAAA,iBAAiB,KAAA,KAAa,KAAK,gBAAgB,cACrD,OAAO;CAAA;CAIb,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon-1gpwtPx8.js","names":["#onIconChange","#onFontChange","customElement"],"sources":["../src/icons/icon.ts"],"sourcesContent":["import type { IconChangedEvent } from './registry.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport { getIconEntry, getIconFont, iconBus } from './registry.js';\n\n@customElement(`ixfx-icon`)\nexport class IxfxIconElement extends LitElement {\n @property() name = ``;\n @property({ type: Number }) size: number | undefined;\n @property() label = ``;\n @property({ type: Boolean, attribute: `prominence` }) prominence = false;\n @property({ type: String, attribute: `rotate`, reflect: true }) rotate = ``;\n\n #onIconChange = (e: Event): void => {\n if ((e as IconChangedEvent).detail.name === this.name) {\n this.requestUpdate();\n }\n };\n\n #onFontChange = (): void => {\n const entry = getIconEntry(this.name);\n if (entry?.kind === `font`) {\n this.requestUpdate();\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n iconBus.addEventListener(`ixfx-icon-change`, this.#onIconChange);\n iconBus.addEventListener(`ixfx-icon-font-change`, this.#onFontChange);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n iconBus.removeEventListener(`ixfx-icon-change`, this.#onIconChange);\n iconBus.removeEventListener(`ixfx-icon-font-change`, this.#onFontChange);\n }\n\n protected override render() {\n const entry = getIconEntry(this.name);\n if (!entry)\n return nothing;\n\n const hasLabel = this.label.length > 0;\n\n if (entry.kind === `font`) {\n const fontFamily = getIconFont();\n return html`\n <span\n class=\"font-icon\"\n style=${styleMap({ fontFamily: fontFamily ?? `` })}\n aria-hidden=${hasLabel ? nothing : `true`}\n aria-label=${hasLabel ? this.label : nothing}\n >${entry.char}</span>\n `;\n }\n\n return html`\n <span\n class=\"icon-wrapper\"\n aria-hidden=${hasLabel ? nothing : `true`}\n aria-label=${hasLabel ? this.label : nothing}\n >${unsafeHTML(entry.svg)}</span>\n `;\n }\n\n protected override updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (changed.has(`rotate`)) {\n if (this.rotate?.length > 0) {\n this.style.setProperty(`--rotate`, this.rotate);\n } else {\n this.style.removeProperty(`--rotate`);\n }\n }\n if (changed.has(`size`)) {\n if (this.size !== undefined) {\n this.style.width = `${this.size}px`;\n this.style.height = `${this.size}px`;\n } else {\n this.style.removeProperty(`width`);\n this.style.removeProperty(`height`);\n }\n }\n }\n\n static override styles = [themeFallbacks, css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1em;\n height: 1em;\n opacity: var(--opacity, 1);\n }\n\n :host([prominence]) {\n opacity: var(--prominence-idle-opacity, 1);\n }\n\n :host([prominence]:hover) {\n opacity: var(--prominence-tickled-opacity, 1);\n }\n\n :host([prominence][disabled]) {\n opacity: var(--prominence-disabled-opacity, 0.5);\n }\n\n .icon-wrapper,\n .font-icon {\n display: contents;\n }\n\n :host svg,\n :host .font-icon {\n width: 100%;\n height: 100%;\n transition: transform var(--transition, 0.15s ease-out);\n }\n\n :host .font-icon {\n font-family: inherit;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n :host([rotate]) svg,\n :host([rotate]) .font-icon {\n transform: rotate(var(--rotate));\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-icon': IxfxIconElement;\n }\n}\n"],"mappings":";;;;;;;;AAUO,IAAM,kBAAN,MAAM,wBAAwB,WAAW;;;EAC3B,KAAA,OAAA;EAEC,KAAA,QAAA;EAC+C,KAAA,aAAA;EACM,KAAA,SAAA;EAExD,KAAA,iBAAA,MAAmB;GAClC,IAAK,EAAuB,OAAO,SAAS,KAAK,MAC/C,KAAK,cAAc;EAEvB;EAE4B,KAAA,sBAAA;GAE1B,IADc,aAAa,KAAK,IACxB,CAAC,EAAE,SAAS,QAClB,KAAK,cAAc;EAEvB;;CAXA;CAMA;CAOA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,QAAQ,iBAAiB,oBAAoB,KAAKA,aAAa;EAC/D,QAAQ,iBAAiB,yBAAyB,KAAKC,aAAa;CACtE;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,QAAQ,oBAAoB,oBAAoB,KAAKD,aAAa;EAClE,QAAQ,oBAAoB,yBAAyB,KAAKC,aAAa;CACzE;CAEA,SAA4B;EAC1B,MAAM,QAAQ,aAAa,KAAK,IAAI;EACpC,IAAI,CAAC,OACH,OAAO;EAET,MAAM,WAAW,KAAK,MAAM,SAAS;EAErC,IAAI,MAAM,SAAS,QAAQ;GACzB,MAAM,aAAa,YAAY;GAC/B,OAAO,IAAI;;;kBAGC,SAAS,EAAE,YAAY,cAAc,GAAG,CAAC,EAAE;wBACrC,WAAW,UAAU,OAAO;uBAC7B,WAAW,KAAK,QAAQ,QAAQ;WAC5C,MAAM,KAAK;;EAElB;EAEA,OAAO,IAAI;;;sBAGO,WAAW,UAAU,OAAO;qBAC7B,WAAW,KAAK,QAAQ,QAAQ;SAC5C,WAAW,MAAM,GAAG,EAAE;;CAE7B;CAEA,QAA2B,SAAqC;EAC9D,MAAM,QAAQ,OAAO;EACrB,IAAI,QAAQ,IAAI,QAAQ,GAAG;GACzB,IAAI,KAAK,QAAQ,SAAS,GACxB,KAAK,MAAM,YAAY,YAAY,KAAK,MAAM;QAE9C,KAAK,MAAM,eAAe,UAAU;EAExC;EACA,IAAI,QAAQ,IAAI,MAAM,GAAG;GACvB,IAAI,KAAK,SAAS,KAAA,GAAW;IAC3B,KAAK,MAAM,QAAQ,GAAG,KAAK,KAAK;IAChC,KAAK,MAAM,SAAS,GAAG,KAAK,KAAK;GACnC,OAAO;IACL,KAAK,MAAM,eAAe,OAAO;IACjC,KAAK,MAAM,eAAe,QAAQ;GACpC;EACF;CACF;;EAEyB,KAAA,SAAA,CAAC,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8C5C;;AACH;AA9HG,WAAA,CAAA,SAAS,CAAA,GAAA,gBAAA,WAAA,QAAA,KAAA,CAAA;AACT,WAAA,CAAA,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,gBAAA,WAAA,QAAA,KAAA,CAAA;AACzB,WAAA,CAAA,SAAS,CAAA,GAAA,gBAAA,WAAA,SAAA,KAAA,CAAA;AACT,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,WAAW;AAAa,CAAC,CAAA,GAAA,gBAAA,WAAA,cAAA,KAAA,CAAA;AACnD,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAU,SAAS;AAAK,CAAC,CAAA,GAAA,gBAAA,WAAA,UAAA,KAAA,CAAA;AAN/DC,kBAAAA,WAAAA,CAAAA,kBAAc,WAAW,CAAA,GAAA,eAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon-DR_3rSyZ.d.ts","names":[],"sources":["../src/icons/icon.ts"],"mappings":";;cAUa,wBAAwB;;EACvB;EACgB;EAChB;EAC0C;EACU;EAevD;EAMA;YAMU,wBAAM,2BAAA;YA4BN,QAAQ,SAAS;SAoBpB,sBAAM;;QAiDhB;YACI;IACR,aAAa"}
package/dist/icons.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"icons.js","names":[],"sources":["../src/icons/index.ts"],"sourcesContent":["import { registerDefaults } from './defaults.js';\n\nexport { ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE } from './defaults.js';\nexport { IxfxIconElement } from './icon.js';\nexport {\n getIcon,\n getIconEntry,\n getIconFont,\n hasIcon,\n iconBus,\n registerFontIcon,\n registerIcon,\n setIconFont,\n svgToDataUri,\n} from './registry.js';\nexport type { IconChangedDetail, IconChangedEvent, IconEntry } from './registry.js';\n\nregisterDefaults();\n"],"mappings":";;;;AAiBA,iBAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"incr-search-JIhwB49y.js","names":["FzfAny","DEFAULT_HIGHLIGHT_KEY","#el","#opts","#search","#labelMap","#onInput","#onKeydown","#unsub","#onStateChange","#root","#selector","#map","#observer","#dirty","#rebuild","#host","#adapter","#modes","#mode","#placeholder","#search","#unsub","#onState","#open","#query","#matches","#matchIndex","#observer","#teardownEffects","#focusInput","#filterActive","#applyMode","#currentItems","#cycle","#itemFor","#itemByKey","#applyHighlights","#onInput","#onKeydown","#highlightKey"],"sources":["../src/incr-search/fuzzy.ts","../src/incr-search/ac-adapter.ts","../src/incr-search/incr-search.ts","../src/incr-search/controller-tree.ts","../src/incr-search/data-list-search-adapter.ts","../src/interaction/keyed-list.ts","../src/incr-search/element-list-search-adapter.ts","../src/incr-search/element-search.ts","../src/incr-search/list-search-commands.ts","../src/incr-search/list-search-controller.ts","../src/incr-search/list-search-styles.ts","../src/incr-search/tree-list-search-adapter.ts"],"sourcesContent":["import type { FuzzySearch, FuzzySearchOptions, IncrSearchResult } from './types.js';\nimport { Fzf } from 'fzf';\n\nfunction defaultSelector<T>(item: T): string {\n if (typeof item === `string`)\n return item;\n const r = item as Record<string, unknown>;\n if (typeof r.label === `string`)\n return r.label;\n if (typeof r.key === `string`)\n return r.key;\n if (typeof r.value === `string`)\n return r.value;\n return String(item);\n}\n\nexport function createFuzzySearch<T>(\n items: readonly T[],\n options: FuzzySearchOptions<T> = {},\n): FuzzySearch<T> {\n const selector = options.selector ?? defaultSelector<T>;\n // fzf uses a conditional SyncOptionsTuple<T> rest-parameter overload that TypeScript\n // cannot narrow through a spread when T is generic.\n const FzfAny = Fzf as new (list: readonly T[], opts: any) => { find: (q: string) => Array<{ item: T; positions: ReadonlySet<number>; score: number }> };\n const fzf = new FzfAny(items as readonly T[], { selector, ...(options.fzf ?? {}) });\n\n const find = (query: string): ReadonlyArray<IncrSearchResult<T>> => {\n if (!query.trim()) {\n return items.map(item => ({\n item,\n positions: new Set<number>(),\n score: 0,\n }));\n }\n return fzf.find(query).map(r => ({\n item: r.item,\n positions: r.positions,\n score: r.score,\n }));\n };\n\n return { find, items };\n}\n","import type { FuzzySearchOptions } from './types.js';\nimport { createFuzzySearch } from './fuzzy.js';\n\n/**\n * Creates an ixfx-ac-text-compatible `completionProvider` function from a\n * static item list. Uses synchronous fuzzy search wrapped in a Promise so it\n * fits the async provider signature.\n *\n * Each returned item has `positions` populated with matched character indices,\n * which `ixfx-ac-text` uses to render CSS Custom Highlights on the label.\n *\n * Empty query returns all items in original order (no positions).\n * A cancelled signal causes the returned promise to reject with an AbortError.\n */\nexport function createAcCompletionProvider<T extends { label: string }>(\n items: readonly T[],\n options: Pick<FuzzySearchOptions<T>, `selector`> = {},\n): (query: string, signal: AbortSignal) => Promise<Array<T & { positions: ReadonlySet<number> }>> {\n const selector = options.selector ?? ((item: T) => item.label);\n const fuzzy = createFuzzySearch(items, { selector });\n\n return (\n query: string,\n signal: AbortSignal,\n ): Promise<Array<T & { positions: ReadonlySet<number> }>> =>\n new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(new DOMException(`Aborted`, `AbortError`));\n return;\n }\n\n const results = fuzzy.find(query).map(r => ({ ...r.item, positions: r.positions }));\n\n if (signal.aborted) {\n reject(new DOMException(`Aborted`, `AbortError`));\n return;\n }\n\n resolve(results);\n });\n}\n","import type {\n IncrSearch,\n IncrSearchChangeCallback,\n IncrSearchOptions,\n IncrSearchState,\n} from './types.js';\nimport { createFuzzySearch } from './fuzzy.js';\n\nfunction buildState<T>(results: ReturnType<ReturnType<typeof createFuzzySearch<T>>[`find`]>, query: string): IncrSearchState<T> {\n const positionsByItem = new Map<T, ReadonlySet<number>>();\n for (const r of results) {\n positionsByItem.set(r.item, r.positions);\n }\n return Object.freeze({\n query,\n results: Object.freeze([...results]),\n positionsByItem,\n });\n}\n\nexport function createIncrSearch<T>(options: IncrSearchOptions<T> = {}): IncrSearch<T> {\n let items: readonly T[] = options.items ?? [];\n let query = ``;\n let fuzzy = createFuzzySearch(items, { selector: options.selector, fzf: options.fzf });\n let state: IncrSearchState<T> = buildState(fuzzy.find(query), query);\n let disposed = false;\n\n const observers = new Set<IncrSearchChangeCallback<T>>();\n\n if (options.onChange) {\n observers.add(options.onChange);\n }\n\n const notify = (s: IncrSearchState<T>): void => {\n for (const cb of observers) {\n cb(s);\n }\n };\n\n const run = async (q: string, signal?: AbortSignal): Promise<IncrSearchState<T>> => {\n // Yield to the microtask queue for a consistent async interface\n await Promise.resolve();\n if (signal?.aborted || disposed) {\n return state;\n }\n const results = fuzzy.find(q);\n if (signal?.aborted || disposed) {\n return state;\n }\n state = buildState(results, q);\n notify(state);\n return state;\n };\n\n return {\n get state() {\n return state;\n },\n\n async setItems(newItems: readonly T[], signal?: AbortSignal): Promise<void> {\n items = newItems;\n fuzzy = createFuzzySearch(items, { selector: options.selector, fzf: options.fzf });\n await run(query, signal);\n },\n\n async setQuery(q: string, signal?: AbortSignal): Promise<IncrSearchState<T>> {\n query = q;\n return run(q, signal);\n },\n\n async clearQuery(): Promise<void> {\n query = ``;\n await run(``, undefined);\n },\n\n onChange(cb: IncrSearchChangeCallback<T>): () => void {\n observers.add(cb);\n cb(state);\n return () => {\n observers.delete(cb);\n };\n },\n\n dispose(): void {\n disposed = true;\n observers.clear();\n items = [];\n },\n };\n}\n","import type { FzfOptions } from 'fzf';\nimport type { TreeSearchHost } from '../common/searchable.js';\nimport type { TreeNode } from '../common/types.js';\nimport type { IncrSearchState } from './types.js';\nimport { applyHighlights, buildHighlightTargets, clearHighlights } from './highlight.js';\nimport { createIncrSearch } from './incr-search.js';\n\nconst DEFAULT_HIGHLIGHT_KEY = `incr-search-highlight`;\n\nexport type IncrSearchTreeOptions = {\n selector: (item: { node: TreeNode; depth: number }) => string;\n /**\n * CSS selector for the label elements inside the shadow root.\n * Defaults to `.tree-label` (suitable for ixfx-tree-list).\n * Use `.label` for ixfx-miller-list.\n */\n labelSelector?: string;\n highlightKey?: string;\n input?: HTMLInputElement;\n fzf?: Partial<FzfOptions<{ node: TreeNode; depth: number }>>;\n};\n\ntype SearchItem = { node: TreeNode; depth: number };\n\n/**\n * External-input filter-search controller for `TreeSearchHost` components.\n *\n * @deprecated `ixfx-tree-list` / `ixfx-miller-list` now have a built-in\n * incremental-search popover with navigate / select / filter modes — invoke\n * `el.registry.invoke('list.search.filter')` (see `docs/infra-incremental.md`)\n * instead of wiring an external `<input>`. This class remains for existing\n * consumers and covers filter mode only.\n *\n * @example Using with ixfx-tree-list:\n * ```typescript\n * const ctrl = new IncrSearchTreeController(myTreeList, {\n * selector: item => item.node.item.label,\n * });\n * ctrl.connect();\n * ```\n *\n * @example Using with ixfx-miller-list (different label selector):\n * ```typescript\n * const ctrl = new IncrSearchTreeController(myMillerList, {\n * selector: item => item.node.item.label,\n * labelSelector: '.label',\n * });\n * ctrl.connect();\n * ```\n */\nexport class IncrSearchTreeController {\n #el: TreeSearchHost;\n #opts: IncrSearchTreeOptions;\n #search: ReturnType<typeof createIncrSearch<SearchItem>>;\n #unsub: (() => void) | undefined;\n #labelMap = new Map<string, SearchItem>();\n\n constructor(el: TreeSearchHost, opts: IncrSearchTreeOptions) {\n this.#el = el;\n this.#opts = opts;\n this.#search = createIncrSearch<SearchItem>({\n selector: opts.selector,\n fzf: opts.fzf,\n });\n }\n\n connect(): void {\n this.disconnect();\n\n const items = this.#el.getNodes();\n for (const item of items) {\n this.#labelMap.set(this.#opts.selector(item), item);\n }\n void this.#search.setItems(items);\n\n if (this.#opts.input) {\n this.#opts.input.addEventListener(`input`, this.#onInput);\n this.#opts.input.addEventListener(`keydown`, this.#onKeydown);\n }\n\n this.#unsub = this.#search.onChange(state => this.#onStateChange(state));\n }\n\n disconnect(): void {\n if (this.#unsub) {\n this.#unsub();\n this.#unsub = undefined;\n }\n if (this.#opts.input) {\n this.#opts.input.removeEventListener(`input`, this.#onInput);\n this.#opts.input.removeEventListener(`keydown`, this.#onKeydown);\n }\n this.#el.filterPredicate = undefined;\n clearHighlights({ key: this.#opts.highlightKey ?? DEFAULT_HIGHLIGHT_KEY });\n this.#labelMap.clear();\n }\n\n async setQuery(query: string): Promise<void> {\n await this.#search.setQuery(query);\n }\n\n async clearQuery(): Promise<void> {\n await this.#search.clearQuery();\n }\n\n #onInput = () => {\n const value = this.#opts.input?.value ?? ``;\n void this.setQuery(value);\n };\n\n #onKeydown = (e: KeyboardEvent) => {\n if (e.key === `Escape` && this.#opts.input) {\n this.#opts.input.value = ``;\n void this.clearQuery();\n }\n };\n\n #onStateChange(state: IncrSearchState<SearchItem>): void {\n const matched = new Set(state.results.map(r => r.item.node.item.key));\n const hasQuery = state.query.trim().length > 0;\n this.#el.filterPredicate = hasQuery && matched.size > 0\n ? (node: TreeNode, _depth: number) => matched.has(node.item.key)\n : undefined;\n\n const key = this.#opts.highlightKey ?? DEFAULT_HIGHLIGHT_KEY;\n if (!this.#el.shadowRoot)\n return;\n\n if (!state.query.trim()) {\n clearHighlights({ key });\n return;\n }\n\n const labelSelector = this.#opts.labelSelector ?? `.tree-label`;\n const targets = buildHighlightTargets(\n this.#el.shadowRoot,\n labelSelector,\n state.positionsByItem,\n (labelEl) => {\n const text = labelEl.textContent ?? ``;\n return this.#labelMap.get(text);\n },\n labelEl => labelEl.textContent ?? ``,\n );\n applyHighlights(targets, { key });\n }\n}\n","import type { ListSearchAdapter } from './list-search-controller.js';\n\n/** One searchable item in data-backed mode. */\nexport type DataListSearchItem = { key: string; index: number };\n\nexport interface DataListSearchAdapterOptions {\n /** Total number of items in the whole collection (search sees all of them). */\n rawCount: () => number;\n /** Raw (unfiltered) index → key. */\n rawKeyAt: (index: number) => string;\n /** Raw (unfiltered) index → text matched against the query. */\n rawSearchTextAt: (index: number) => string;\n /** `filter` mode: the host hides items whose key is not in `matchedKeys` (`undefined` clears). */\n onFilterChange?: (matchedKeys: ReadonlySet<string> | undefined) => void;\n /** `navigate` + Enter: activate the item with this key. Falls back to `focusKey`. */\n onActivate?: (key: string) => void;\n /** Where matched-character highlights are painted (usually the shadow root). */\n getHighlightRoot?: () => ShadowRoot | Element | null | undefined;\n}\n\n/**\n * A {@link ListSearchAdapter} over a data-backed list. Unlike the element\n * adapter it never materialises an element per item — it reads keys and text\n * straight from the source by index. Highlights are painted on whatever\n * captions are currently rendered in the shadow window; offscreen matches paint\n * when scrolled into view. See `docs/infra-incremental.md`.\n */\nexport function createDataListSearchAdapter(\n host: { focusKey: (key: string) => void; selectKeys: (keys: Iterable<string>) => void },\n options: DataListSearchAdapterOptions,\n): ListSearchAdapter<DataListSearchItem> {\n return {\n getItems: () =>\n Array.from({ length: options.rawCount() }, (_, i) => ({\n key: options.rawKeyAt(i),\n index: i,\n })),\n getLabel: item => options.rawSearchTextAt(item.index),\n getKey: item => item.key,\n focusItem: (item) => {\n if (item)\n host.focusKey(item.key);\n },\n activateItem: (item) => {\n if (options.onActivate)\n options.onActivate(item.key);\n else\n host.focusKey(item.key);\n },\n selectItems: (items) => {\n host.selectKeys(items.map(i => i.key));\n },\n applyFilter: (matched) => {\n options.onFilterChange?.(matched);\n },\n highlightRoot: options.getHighlightRoot,\n highlightSelector: `.cell .caption`,\n highlightKeyOf: el => el.closest(`.cell`)?.getAttribute(`data-key`) ?? undefined,\n highlightText: el => el.textContent ?? ``,\n highlightKey: `grid-list-search`,\n };\n}\n","/**\n * Helpers for key-based selection on the Element-flavoured list components\n * (`ixfx-vertical-list`, `ixfx-detail-list`, `ixfx-grid-list`).\n *\n * A \"key\" is a stable string the host puts on each item element — `data-key`\n * (preferred) or `data-value`. It survives the host rebuilding the item set\n * (re-fetch, re-sort, filter) where raw `Element` references do not.\n */\n\n/**\n * The stable key for an item element: `data-key`, then `data-value`, else\n * `undefined`.\n */\nexport function keyForElement(el: Element): string | undefined {\n return el.getAttribute(`data-key`) ?? el.getAttribute(`data-value`) ?? undefined;\n}\n\n/**\n * A lazily-built key → element index over a container. Rebuilt on first use\n * and after any child-list mutation under `root`; `invalidate()` forces a\n * rebuild on the next `get()`.\n *\n * ```ts\n * #keyIndex = new KeyedElementIndex(this);\n * // ...\n * const el = this.#keyIndex.get(`row-42`);\n * // on disconnect:\n * this.#keyIndex.dispose();\n * ```\n */\nexport class KeyedElementIndex {\n readonly #root: Element;\n readonly #selector: string;\n readonly #map = new Map<string, Element>();\n #dirty = true;\n readonly #observer: MutationObserver;\n\n /**\n * @param root Container whose descendants are indexed.\n * @param itemSelector Which descendants count as items (default: any `[data-key]`).\n */\n constructor(root: Element, itemSelector = `[data-key]`) {\n this.#root = root;\n this.#selector = itemSelector;\n this.#observer = new MutationObserver(() => {\n this.#dirty = true;\n });\n this.#observer.observe(root, { childList: true, subtree: true });\n }\n\n /** The element with this key, or `undefined`. First match wins on duplicates. */\n get(key: string): Element | undefined {\n if (this.#dirty) {\n this.#rebuild();\n }\n return this.#map.get(key);\n }\n\n /** Force a rebuild on the next `get()` — e.g. after a `data-key` attribute change. */\n invalidate(): void {\n this.#dirty = true;\n }\n\n /** Stop observing and drop the cache. */\n dispose(): void {\n this.#observer.disconnect();\n this.#map.clear();\n }\n\n #rebuild(): void {\n this.#map.clear();\n for (const el of this.#root.querySelectorAll(this.#selector)) {\n const key = keyForElement(el);\n if (key !== undefined && !this.#map.has(key)) {\n this.#map.set(key, el);\n }\n }\n this.#dirty = false;\n }\n}\n","import type { ListSearchAdapter } from './list-search-controller.js';\nimport { keyForElement } from '../interaction/keyed-list.js';\n\n/**\n * The slice of a list component the element adapter drives. `ixfx-grid-list`,\n * `ixfx-vertical-list` and `ixfx-detail-list` all satisfy it.\n */\nexport interface ElementListSearchHost extends HTMLElement {\n focusKey: (key: string) => void;\n selectKeys: (keys: Iterable<string>) => void;\n activateKey?: (key: string) => void;\n}\n\nexport interface ElementListSearchAdapterOptions {\n /** Selector for item elements, relative to the host. Default `:scope > *`. */\n itemSelector?: string;\n getLabel?: (el: Element) => string;\n getKey?: (el: Element) => string;\n /** `CSS.highlights` registry key for matched-character highlights. */\n highlightKey?: string;\n /** Full ordered item set, including rows not currently in the DOM (virtualised hosts). Defaults to querying `itemSelector`. */\n getAllItems?: () => Element[];\n /** Observe host child-list mutations to refresh the item set. Default true. */\n observeContainer?: boolean;\n}\n\nfunction defaultLabel(el: Element): string {\n return el.getAttribute(`data-search-label`) ?? el.textContent?.trim() ?? ``;\n}\n\n/**\n * A {@link ListSearchAdapter} over the light-DOM item elements of a list\n * component. Filter mode toggles `hidden` (only on elements it hid itself, so a\n * consumer's own `hidden` items are left alone). Highlights are painted on the\n * item elements in the light DOM — the consuming page styles\n * `::highlight(<highlightKey>)`. See `docs/infra-incremental.md`.\n */\nexport function createElementListSearchAdapter(\n host: ElementListSearchHost,\n options: ElementListSearchAdapterOptions = {},\n): ListSearchAdapter<Element> {\n const itemSelector = options.itemSelector ?? `:scope > *`;\n const getLabel = options.getLabel ?? defaultLabel;\n const getKey = options.getKey ?? (el => keyForElement(el) ?? defaultLabel(el));\n const hidden = new Set<Element>();\n const observeContainer = options.observeContainer ?? true;\n\n const items = (): Element[] => {\n if (options.getAllItems)\n return options.getAllItems();\n return Array.from(host.querySelectorAll(itemSelector));\n };\n\n return {\n getItems: items,\n getLabel,\n getKey,\n focusItem: (el) => {\n if (el)\n host.focusKey(getKey(el));\n },\n activateItem: (el) => {\n const key = getKey(el);\n if (host.activateKey) {\n host.activateKey(key);\n } else {\n el.dispatchEvent(new MouseEvent(`click`, { bubbles: true, composed: true }));\n }\n },\n selectItems: (els) => {\n host.selectKeys(els.map(getKey));\n },\n applyFilter: (matched) => {\n if (matched === undefined) {\n for (const el of hidden)\n (el as HTMLElement).hidden = false;\n hidden.clear();\n return;\n }\n for (const el of items()) {\n if (matched.has(getKey(el))) {\n if (hidden.delete(el))\n (el as HTMLElement).hidden = false;\n } else {\n (el as HTMLElement).hidden = true;\n hidden.add(el);\n }\n }\n },\n highlightRoot: () => host,\n highlightSelector: itemSelector,\n highlightKeyOf: el => getKey(el),\n highlightText: getLabel,\n highlightKey: options.highlightKey,\n container: observeContainer ? () => host : undefined,\n };\n}\n","import type {\n ElementIncrSearchOptions,\n IncrSearchChangeCallback,\n IncrSearchState,\n} from './types.js';\nimport { applyHighlights, buildHighlightTargets, clearHighlights } from './highlight.js';\nimport { createIncrSearch } from './incr-search.js';\n\ntype ElementItem = { readonly key: string; readonly label: string };\n\nconst defaultGetLabel = (el: Element): string => el.textContent?.trim() ?? ``;\n\nfunction defaultGetKey(el: Element): string {\n return el.getAttribute(`data-key`)\n ?? el.getAttribute(`data-value`)\n ?? el.textContent?.trim()\n ?? ``;\n}\n\nexport type ElementIncrSearch = {\n readonly setQuery: (query: string, signal?: AbortSignal) => Promise<void>;\n readonly clearQuery: () => Promise<void>;\n readonly refresh: () => void;\n readonly onChange: (cb: IncrSearchChangeCallback<ElementItem>) => () => void;\n readonly dispose: () => void;\n};\n\n/**\n * DOM filter-search over a container's item elements (sets `hidden` on\n * non-matches, applies highlights).\n *\n * @deprecated The list components (`ixfx-grid-list`, `ixfx-vertical-list`,\n * `ixfx-detail-list`, …) now have a built-in navigate / select / filter search\n * popover — see `docs/infra-incremental.md` and `ListSearchController`. Kept for\n * standalone / non-component use.\n */\nexport function createElementIncrSearch(opts: ElementIncrSearchOptions): ElementIncrSearch {\n const {\n container,\n itemSelector,\n getLabel = defaultGetLabel,\n getKey = defaultGetKey,\n labelSelector,\n highlightKey,\n } = opts;\n\n // Map from key → element reference for highlight lookup\n let elementByKey = new Map<string, Element>();\n\n const search = createIncrSearch<ElementItem>({\n selector: item => item.label,\n fzf: opts.fzf,\n });\n\n const updateVisibility = (state: IncrSearchState<ElementItem>): void => {\n const matchedKeys = new Set(state.results.map(r => r.item.key));\n const hasQuery = state.query.trim().length > 0;\n\n for (const [key, el] of elementByKey) {\n (el as HTMLElement).hidden = hasQuery ? !matchedKeys.has(key) : false;\n }\n };\n\n const updateHighlights = (state: IncrSearchState<ElementItem>): void => {\n if (!state.query.trim()) {\n clearHighlights({ key: highlightKey });\n return;\n }\n\n const sel = labelSelector ?? itemSelector;\n const targets = buildHighlightTargets(\n container,\n sel,\n state.positionsByItem,\n (el) => {\n const key = getKey(el);\n // Find the ElementItem whose key matches this element's key\n const result = state.results.find(r => r.item.key === key);\n return result?.item;\n },\n el => getLabel(el),\n );\n applyHighlights(targets, { key: highlightKey });\n };\n\n const unsubscribeState = search.onChange((state) => {\n updateVisibility(state);\n updateHighlights(state);\n opts.onChange?.(state);\n });\n\n let refreshPending = false;\n\n const refresh = (): void => {\n if (refreshPending)\n return;\n refreshPending = true;\n void Promise.resolve().then(() => {\n refreshPending = false;\n elementByKey = new Map<string, Element>();\n const els = container.querySelectorAll(itemSelector);\n const items: ElementItem[] = [];\n for (const el of els) {\n const key = getKey(el);\n elementByKey.set(key, el);\n items.push({ key, label: getLabel(el) });\n }\n void search.setItems(items);\n });\n };\n\n const observer = new MutationObserver(() => refresh());\n observer.observe(container, { childList: true, subtree: false });\n\n refresh();\n\n return {\n async setQuery(query, signal) {\n await search.setQuery(query, signal);\n },\n\n async clearQuery() {\n await search.clearQuery();\n },\n\n refresh,\n\n onChange(cb) {\n return search.onChange(cb);\n },\n\n dispose() {\n observer.disconnect();\n unsubscribeState();\n search.dispose();\n clearHighlights({ key: highlightKey });\n },\n };\n}\n","import type { CommandRegistry } from '@clinth/ui-commands';\nimport type { ListSearchController, ListSearchMode } from './list-search-controller.js';\n\n/** Command ids registered by {@link registerListSearchCommands}, keyed by mode. */\nexport const LIST_SEARCH_COMMAND_IDS: Readonly<Record<ListSearchMode, string>> = {\n navigate: `list.search.navigate`,\n select: `list.search.select`,\n filter: `list.search.filter`,\n};\n\nconst LABELS: Readonly<Record<ListSearchMode, { label: string; description: string }>> = {\n navigate: { label: `Find`, description: `Type to move the cursor to the best match` },\n select: { label: `Find & Select`, description: `Type to select every matching item` },\n filter: { label: `Filter`, description: `Type to hide items that don't match` },\n};\n\nexport interface RegisterListSearchCommandsOptions {\n /**\n * Prefix for command ids, e.g. `grid-list` ⇒ `grid-list.search.filter`. When\n * omitted the shared ids from {@link LIST_SEARCH_COMMAND_IDS} are used so a\n * single dispatch (`ixfx-grouped-item-lister.dispatch('list.search.filter')`)\n * fans out to every list.\n */\n idPrefix?: string;\n}\n\n/**\n * Register one command per mode the controller offers (see\n * `controller.registeredModes`). Each command opens the search popover in its\n * mode. Returns a function that unregisters them again — call it from\n * `disconnectedCallback`. See `docs/infra-incremental.md`.\n */\nexport function registerListSearchCommands<T>(\n registry: CommandRegistry<unknown>,\n controller: ListSearchController<T>,\n options: RegisterListSearchCommandsOptions = {},\n): () => void {\n const id = (mode: ListSearchMode): string =>\n options.idPrefix ? `${options.idPrefix}.search.${mode}` : LIST_SEARCH_COMMAND_IDS[mode];\n\n const registered: string[] = [];\n for (const mode of controller.registeredModes) {\n const commandId = id(mode);\n if (registry.has(commandId))\n continue;\n registry.register({\n id: commandId,\n label: LABELS[mode].label,\n description: LABELS[mode].description,\n execute: () => controller.open(mode),\n });\n registered.push(commandId);\n }\n\n return () => {\n for (const commandId of registered)\n registry.unregister(commandId);\n };\n}\n","import type { FzfOptions } from 'fzf';\nimport type { ReactiveController, ReactiveControllerHost, TemplateResult } from 'lit';\nimport type { IncrSearchResult, IncrSearchState } from './types.js';\nimport { html, nothing } from 'lit';\nimport { applyHighlights, buildHighlightTargets, clearHighlights } from './highlight.js';\nimport { createIncrSearch } from './incr-search.js';\nimport '../icons/icon.js';\n\n/**\n * The three things incremental search can do to a list / tree component. See\n * `docs/infra-incremental.md`.\n *\n * - `navigate` — move the cursor to the best match; ↑/↓ cycle between matches;\n * Enter activates the current match and closes.\n * - `select` — (re)select every item whose label matches, live as you type.\n * - `filter` — hide items that don't match; restored when the popover closes.\n */\nexport type ListSearchMode = `navigate` | `select` | `filter`;\n\n/** Canonical order — used for the switch-row and to normalise a requested set. */\nexport const LIST_SEARCH_MODES: readonly ListSearchMode[] = [`navigate`, `select`, `filter`];\n\nconst DEFAULT_HIGHLIGHT_KEY = `incr-search-highlight`;\nconst INPUT_CLASS = `list-search-input`;\n\ntype SearchItem = { readonly key: string; readonly label: string };\n\n/**\n * Everything {@link ListSearchController} needs to drive a specific host. One is\n * supplied per component; `createElementListSearchAdapter` and\n * `createTreeListSearchAdapter` cover the common shapes.\n */\nexport interface ListSearchAdapter<TItem> {\n /** All searchable items, in display order. */\n getItems: () => readonly TItem[];\n /** Text matched against the query. */\n getLabel: (item: TItem) => string;\n /** Stable identity for an item. */\n getKey: (item: TItem) => string;\n /** `navigate`: move the cursor to `item` and reveal it. `undefined` = no-op. */\n focusItem: (item: TItem | undefined) => void;\n /** `navigate` + Enter: activate `item` (falls back to `focusItem`). */\n activateItem?: (item: TItem) => void;\n /** `select` / \"Select matches\": replace the selection with `items`. */\n selectItems: (items: readonly TItem[]) => void;\n /** `filter`: hide items whose key is not in `matchedKeys`; `undefined` clears the filter. */\n applyFilter: (matchedKeys: ReadonlySet<string> | undefined) => void;\n /** Where matched-character highlights are painted (usually the shadow root). */\n highlightRoot?: () => ShadowRoot | Element | null | undefined;\n /** CSS selector for the label elements inside {@link highlightRoot}. */\n highlightSelector?: string;\n /** Given a label element, the key of the item it belongs to. */\n highlightKeyOf?: (labelEl: Element) => string | undefined;\n /** Text of a label element as fzf saw it (defaults to `el.textContent`). */\n highlightText?: (labelEl: Element) => string;\n /** `CSS.highlights` registry key. Defaults to `incr-search-highlight`. */\n highlightKey?: string;\n /** Element whose child-list mutations should trigger a `refresh()`. */\n container?: () => Element | null | undefined;\n}\n\nexport interface ListSearchControllerOptions<TItem> {\n adapter: ListSearchAdapter<TItem>;\n /**\n * Modes this instance offers, as entry points and as in-popover switch\n * targets. The controller intersects this with {@link LIST_SEARCH_MODES}, so\n * pass the intersection of the component's own capability and any\n * consumer-set `search-modes`. Empty ⇒ search disabled. Default: all three.\n */\n modes?: readonly ListSearchMode[];\n fzf?: Partial<FzfOptions<SearchItem>>;\n placeholder?: string;\n}\n\nexport type ListSearchHost = ReactiveControllerHost & HTMLElement & {\n renderRoot?: DocumentFragment | HTMLElement;\n};\n\n/**\n * Shared brain for the three-mode incremental-search popover. A Lit\n * `ReactiveController`: the host adds `listSearchStyles` to `static styles`,\n * drops `${controller.renderField()}` into `render()`, and registers the\n * commands with {@link registerListSearchCommands}. See `docs/infra-incremental.md`.\n */\nexport class ListSearchController<TItem> implements ReactiveController {\n #host: ListSearchHost;\n #adapter: ListSearchAdapter<TItem>;\n #modes: readonly ListSearchMode[];\n #placeholder: string;\n #search: ReturnType<typeof createIncrSearch<SearchItem>>;\n #unsub: (() => void) | undefined;\n #observer: MutationObserver | undefined;\n\n #itemByKey = new Map<string, TItem>();\n\n #open = false;\n #mode: ListSearchMode = `filter`;\n #query = ``;\n #matchIndex = 0;\n #matches: ReadonlyArray<IncrSearchResult<SearchItem>> = [];\n /** Whether a filter has been pushed to the adapter and still needs undoing. */\n #filterActive = false;\n\n constructor(host: ListSearchHost, options: ListSearchControllerOptions<TItem>) {\n this.#host = host;\n this.#adapter = options.adapter;\n const requested = new Set(options.modes ?? LIST_SEARCH_MODES);\n this.#modes = LIST_SEARCH_MODES.filter(m => requested.has(m));\n this.#mode = this.#modes[0] ?? `filter`;\n this.#placeholder = options.placeholder ?? `Search…`;\n this.#search = createIncrSearch<SearchItem>({ selector: i => i.label, fzf: options.fzf });\n this.#unsub = this.#search.onChange(state => this.#onState(state));\n // Register last: on an already-connected host `addController` invokes\n // `hostConnected()` synchronously, which reads `#adapter` / `#search`.\n host.addController(this);\n }\n\n // --- Public surface ---\n\n /** `false` when no modes are available — the host should register no commands and render no field. */\n get enabled(): boolean {\n return this.#modes.length > 0;\n }\n\n /** The modes actually offered (component capability ∩ consumer request). */\n get registeredModes(): readonly ListSearchMode[] {\n return this.#modes;\n }\n\n /**\n * Replace the offered mode set (normalised to {@link LIST_SEARCH_MODES}\n * order). If the current mode is dropped the popover closes and falls back to\n * the first remaining mode. Callers should re-run\n * {@link registerListSearchCommands} afterwards.\n */\n setModes(modes: readonly ListSearchMode[]): void {\n const set = new Set(modes);\n this.#modes = LIST_SEARCH_MODES.filter(m => set.has(m));\n if (!this.#modes.includes(this.#mode)) {\n if (this.#open)\n this.close();\n this.#mode = this.#modes[0] ?? `filter`;\n }\n this.#host.requestUpdate();\n }\n\n get isOpen(): boolean {\n return this.#open;\n }\n\n get mode(): ListSearchMode {\n return this.#mode;\n }\n\n get query(): string {\n return this.#query;\n }\n\n get matchCount(): number {\n return this.#matches.length;\n }\n\n get matchIndex(): number {\n return this.#matchIndex;\n }\n\n // --- ReactiveController lifecycle ---\n\n hostConnected(): void {\n const container = this.#adapter.container?.();\n if (container) {\n this.#observer = new MutationObserver(() => this.refresh());\n this.#observer.observe(container, { childList: true, subtree: false });\n }\n this.refresh();\n }\n\n hostDisconnected(): void {\n this.#observer?.disconnect();\n this.#observer = undefined;\n if (this.#open)\n this.#teardownEffects();\n this.#open = false;\n this.#unsub?.();\n this.#unsub = undefined;\n this.#search.dispose();\n }\n\n // --- Commands / actions ---\n\n /** Open the popover in `mode` (clamped to the available set). */\n open(mode: ListSearchMode): void {\n if (!this.enabled)\n return;\n this.#mode = this.#modes.includes(mode) ? mode : this.#modes[0];\n this.#open = true;\n this.#query = ``;\n this.#matchIndex = 0;\n this.#matches = [];\n this.refresh();\n void this.#search.setQuery(``);\n this.#host.requestUpdate();\n void this.#host.updateComplete.then(() => this.#focusInput());\n }\n\n /** Close the popover, restoring any live filter. Selection / cursor stay put. */\n close(): void {\n if (!this.#open)\n return;\n this.#open = false;\n this.#teardownEffects();\n this.#query = ``;\n this.#matches = [];\n void this.#search.clearQuery();\n this.#host.requestUpdate();\n this.#host.focus();\n }\n\n setQuery(query: string): void {\n this.#query = query;\n this.#matchIndex = 0;\n void this.#search.setQuery(query);\n }\n\n /** Re-interpret the current query under a new mode (undoing the old mode's effect). */\n switchMode(next: ListSearchMode): void {\n if (!this.#modes.includes(next) || next === this.#mode)\n return;\n if (this.#mode === `filter` && this.#filterActive) {\n this.#adapter.applyFilter(undefined);\n this.#filterActive = false;\n }\n this.#mode = next;\n this.#applyMode();\n this.#host.requestUpdate();\n void this.#host.updateComplete.then(() => this.#focusInput());\n }\n\n /** One-shot: turn the current match set into the selection, staying in the current mode. */\n selectMatches(): void {\n if (!this.#modes.includes(`select`))\n return;\n this.#adapter.selectItems(this.#currentItems());\n this.#host.requestUpdate();\n }\n\n nextMatch(): void {\n this.#cycle(1);\n }\n\n prevMatch(): void {\n this.#cycle(-1);\n }\n\n /** Enter: in `navigate` activate the current match; then close. */\n commit(): void {\n if (this.#mode === `navigate`) {\n const item = this.#itemFor(this.#matches[this.#matchIndex]);\n if (item) {\n if (this.#adapter.activateItem)\n this.#adapter.activateItem(item);\n else\n this.#adapter.focusItem(item);\n }\n }\n this.close();\n }\n\n /** Rebuild the searchable item set from the adapter. Called on open and on container mutation. */\n refresh(): void {\n this.#itemByKey.clear();\n const items: SearchItem[] = [];\n for (const it of this.#adapter.getItems()) {\n const key = this.#adapter.getKey(it);\n this.#itemByKey.set(key, it);\n items.push({ key, label: this.#adapter.getLabel(it) });\n }\n void this.#search.setItems(items);\n }\n\n /** Re-paint highlights without rebuilding the item set. Use when the rendered window changes. */\n repaintHighlights(): void {\n this.#applyHighlights();\n }\n\n // --- Rendering ---\n\n /** Popover markup. Pair with `listSearchStyles` in the host's `static styles`. */\n renderField(): TemplateResult | typeof nothing {\n if (!this.enabled)\n return nothing;\n const hasQuery = this.#query.trim().length > 0;\n const others = this.#modes.filter(m => m !== this.#mode);\n const showSelectMatches = this.#modes.includes(`select`) && this.#mode !== `select`;\n return html`\n <div class=\"list-search\" part=\"search\" ?hidden=${!this.#open}>\n <div class=\"list-search-row\">\n <span class=\"list-search-mode\">${this.#mode}</span>\n <input\n class=${INPUT_CLASS}\n type=\"text\"\n part=\"search-input\"\n placeholder=${this.#placeholder}\n .value=${this.#query}\n @input=${this.#onInput}\n @keydown=${this.#onKeydown}\n />\n ${hasQuery\n ? html`<span class=\"list-search-count\">${this.#matches.length === 0 ? `0` : this.#matchIndex + 1} / ${this.#matches.length}</span>`\n : nothing}\n ${this.#mode === `navigate` && this.#matches.length > 1\n ? html`\n <button class=\"list-search-icon-btn\" title=\"Previous match (↑)\" @click=${() => this.prevMatch()}><ixfx-icon name=\"chevron-left\" size=\"14\"></ixfx-icon></button>\n <button class=\"list-search-icon-btn\" title=\"Next match (↓)\" @click=${() => this.nextMatch()}><ixfx-icon name=\"chevron-right\" size=\"14\"></ixfx-icon></button>\n `\n : nothing}\n <button class=\"list-search-icon-btn\" title=\"Close (Esc)\" @click=${() => this.close()}><ixfx-icon name=\"close\" size=\"14\"></ixfx-icon></button>\n </div>\n ${others.length > 0 || showSelectMatches\n ? html`\n <div class=\"list-search-switch\">\n ${others.map(m => html`<button class=\"list-search-btn\" @click=${() => this.switchMode(m)}>${m}</button>`)}\n ${showSelectMatches\n ? html`<button class=\"list-search-btn\" @click=${() => this.selectMatches()}>Select matches</button>`\n : nothing}\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n // --- Internals ---\n\n #focusInput(): void {\n this.#host.renderRoot?.querySelector<HTMLInputElement>(`.${INPUT_CLASS}`)?.focus();\n }\n\n #onInput = (e: Event): void => {\n this.setQuery((e.target as HTMLInputElement).value);\n };\n\n #onKeydown = (e: KeyboardEvent): void => {\n switch (e.key) {\n case `Escape`:\n e.preventDefault();\n e.stopPropagation();\n this.close();\n break;\n case `Enter`:\n e.preventDefault();\n e.stopPropagation();\n this.commit();\n break;\n case `ArrowDown`:\n if (this.#mode === `navigate`) {\n e.preventDefault();\n this.nextMatch();\n }\n break;\n case `ArrowUp`:\n if (this.#mode === `navigate`) {\n e.preventDefault();\n this.prevMatch();\n }\n break;\n default:\n break;\n }\n };\n\n #cycle(delta: number): void {\n if (this.#matches.length === 0)\n return;\n const n = this.#matches.length;\n this.#matchIndex = (this.#matchIndex + delta + n) % n;\n if (this.#mode === `navigate`)\n this.#adapter.focusItem(this.#itemFor(this.#matches[this.#matchIndex]));\n this.#host.requestUpdate();\n }\n\n #itemFor(match: IncrSearchResult<SearchItem> | undefined): TItem | undefined {\n return match ? this.#itemByKey.get(match.item.key) : undefined;\n }\n\n #currentItems(): TItem[] {\n return this.#matches\n .map(m => this.#itemFor(m))\n .filter((x): x is TItem => x !== undefined);\n }\n\n get #highlightKey(): string {\n return this.#adapter.highlightKey ?? DEFAULT_HIGHLIGHT_KEY;\n }\n\n #onState(state: IncrSearchState<SearchItem>): void {\n if (!this.#open)\n return;\n const hasQuery = state.query.trim().length > 0;\n this.#matches = hasQuery ? [...state.results] : [];\n if (this.#matchIndex >= this.#matches.length)\n this.#matchIndex = 0;\n this.#applyMode();\n this.#host.requestUpdate();\n }\n\n #applyMode(): void {\n const hasQuery = this.#query.trim().length > 0;\n\n if (!hasQuery) {\n if (this.#filterActive) {\n this.#adapter.applyFilter(undefined);\n this.#filterActive = false;\n }\n this.#applyHighlights();\n return;\n }\n\n switch (this.#mode) {\n case `navigate`:\n this.#adapter.focusItem(this.#itemFor(this.#matches[this.#matchIndex]));\n break;\n case `select`:\n this.#adapter.selectItems(this.#currentItems());\n break;\n case `filter`:\n this.#adapter.applyFilter(new Set(this.#matches.map(m => m.item.key)));\n this.#filterActive = true;\n break;\n }\n this.#applyHighlights();\n }\n\n #applyHighlights(): void {\n const root = this.#adapter.highlightRoot?.();\n const selector = this.#adapter.highlightSelector;\n const keyOf = this.#adapter.highlightKeyOf;\n if (!root || !selector || !keyOf)\n return;\n if (this.#query.trim().length === 0) {\n clearHighlights({ key: this.#highlightKey });\n return;\n }\n const state = this.#search.state;\n const itemByKey = new Map(state.results.map(r => [r.item.key, r.item]));\n const targets = buildHighlightTargets(\n root,\n selector,\n state.positionsByItem,\n (el) => {\n const key = keyOf(el);\n return key === undefined ? undefined : itemByKey.get(key);\n },\n this.#adapter.highlightText ?? (el => el.textContent ?? ``),\n );\n // Highlights are cosmetic — never let a bad range (label / positions\n // mismatch) surface as an unhandled rejection through the async engine.\n try {\n applyHighlights(targets, { key: this.#highlightKey });\n } catch {\n clearHighlights({ key: this.#highlightKey });\n }\n }\n\n #teardownEffects(): void {\n if (this.#filterActive) {\n this.#adapter.applyFilter(undefined);\n this.#filterActive = false;\n }\n clearHighlights({ key: this.#highlightKey });\n }\n}\n","import { css } from 'lit';\n\n/**\n * Styles for the incremental-search popover rendered by\n * `ListSearchController.renderField()`. Add to a component's `static styles`;\n * the class names are the contract between this fragment and `renderField()`.\n *\n * The host must give the popover a positioned ancestor (a wrapper with\n * `position: relative`, or `:host { position: relative }`). Tunables:\n * `--list-search-inset` (default `8px`) offsets it from the top-right corner.\n *\n * See `docs/infra-incremental.md`.\n */\nexport const listSearchStyles = css`\n .list-search {\n position: absolute;\n top: var(--list-search-inset, 8px);\n right: var(--list-search-inset, 8px);\n z-index: 20;\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 6px;\n box-sizing: border-box;\n background: var(--surface-4, #2a2a2a);\n color: var(--surface-3-text, inherit);\n border: 1px solid var(--border, #444);\n border-radius: var(--radius-m, 6px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);\n font-size: var(--text-s, 0.85em);\n }\n\n .list-search[hidden] {\n display: none;\n }\n\n .list-search-row {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .list-search-mode {\n flex: none;\n padding: 1px 7px;\n border-radius: 999px;\n font-weight: 600;\n text-transform: capitalize;\n background: var(--accent, #60a5fa);\n color: var(--accent-text, #000);\n }\n\n .list-search-input {\n flex: 1;\n min-width: 140px;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n }\n\n .list-search-count {\n flex: none;\n opacity: 0.6;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n\n .list-search-switch {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .list-search-btn {\n padding: 1px 7px;\n background: var(--surface-3, #333);\n color: inherit;\n border: 1px solid var(--border, #444);\n border-radius: var(--radius-s, 4px);\n cursor: pointer;\n font: inherit;\n text-transform: capitalize;\n }\n\n .list-search-btn:hover {\n background: var(--item-bg-tickled, #444);\n }\n\n .list-search-icon-btn {\n flex: none;\n padding: 0 2px;\n background: transparent;\n border: none;\n color: var(--surface-muted-text, #888);\n cursor: pointer;\n font-size: 1.1em;\n line-height: 1;\n }\n\n .list-search-icon-btn:hover {\n color: inherit;\n }\n`;\n","import type { TreeSearchHost } from '../common/tree-component.js';\nimport type { TreeNode } from '../common/types.js';\nimport type { ListSearchAdapter } from './list-search-controller.js';\n\ntype TreeSearchItem = { node: TreeNode; depth: number };\n\nexport interface TreeListSearchAdapterOptions {\n /** Label-element selector inside the shadow root. Default `.tree-label`; `ixfx-miller-list` uses `.label`. */\n labelSelector?: string;\n /** `CSS.highlights` registry key for matched-character highlights. */\n highlightKey?: string;\n getLabel?: (item: TreeSearchItem) => string;\n}\n\n/**\n * The label's own text. Highlights are painted on one text node matched by its\n * exact content, but a Lit-rendered label also holds template whitespace and\n * sibling bindings (tooltips), so `textContent` is padded and never equals the\n * node's content. Take the first non-blank text node instead.\n */\nfunction labelText(el: Element): string {\n for (const node of el.childNodes) {\n if (node.nodeType === Node.TEXT_NODE && (node.textContent ?? ``).trim().length > 0)\n return node.textContent ?? ``;\n }\n return el.textContent ?? ``;\n}\n\n/**\n * A {@link ListSearchAdapter} over any `TreeSearchHost` (`ixfx-tree-list`,\n * `ixfx-miller-list`, `ixfx-crumb-navigation`). Navigate reveals the match\n * (expands its ancestors, moves the cursor); select drives `selectMany`; filter\n * sets `filterPredicate`. The item set is the whole tree — `getNodes()` returns\n * every node regardless of expansion or an active filter — so refining a query\n * can always re-surface a node. See `docs/infra-incremental.md`.\n */\nexport function createTreeListSearchAdapter(\n host: TreeSearchHost,\n options: TreeListSearchAdapterOptions = {},\n): ListSearchAdapter<TreeSearchItem> {\n const getLabel = options.getLabel ?? ((item: TreeSearchItem) => item.node.item.label);\n\n return {\n getItems: () => host.getNodes(),\n getLabel,\n getKey: item => item.node.item.key,\n focusItem: (item) => {\n if (item)\n host.revealKey(item.node.item.key);\n },\n activateItem: (item) => {\n host.revealKey(item.node.item.key);\n host.select(item.node);\n },\n selectItems: (items) => {\n host.selectMany(items.map(i => i.node));\n },\n applyFilter: (matched) => {\n host.filterPredicate = matched === undefined\n ? undefined\n : (node: TreeNode) => matched.has(node.item.key);\n },\n highlightRoot: () => host.shadowRoot,\n highlightSelector: options.labelSelector ?? `.tree-label`,\n highlightText: labelText,\n highlightKeyOf: el => (el.closest(`[data-key]`) as HTMLElement | null)?.dataset.key,\n highlightKey: options.highlightKey,\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BOUaDIW-.d.ts","names":[],"sources":["../src/colour-picker/types.ts","../src/colour-picker/colour-picker.ts","../src/colour-picker/colour-picker-popup.ts"],"mappings":";;;;;;;KAGY;WACD;WACA;WACA;WACA;WACA;WACA;;;;;KAMC,0BAA0B;;;;KAK1B,yBAAyB,YAAY;KACrC,0BAA0B,YAAY;KAiBtC;KACA;;;;QAKJ;YACI;IACR,sBAAmD;;;;;cCZ1C,qBAAqB;EACJ;EACA;EACA;EACA;EAE2C;EACN;EACA;EACA;EACf;EACmB;EACM;EACH;UAGhE;EAE0C;EACA;EACA;EACA;UAE1C;EAOY,UAAW;EACX,UAAW;EACX,UAAW;EACX,UAAW;EACZ,YAAa;UAIxB;UACA;UACA;UACA;mBAKS;MAEb;MAIA,MAAM;;;;;;EAcV,UAAU,QAAQ,OAAO;MASrB,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;EAIlB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIR,WAAW,mBAAmB;UAY/B;UAOA;UASA;UAUA;UA0BA;UAIA;UAYA;UAWA;EAKC,wBAAM;EAoCN,aAAa,mBAAmB;EAKhC,QAAQ,mBAAmB;EAqBpC;EA4FA,WAAY,GAAG,OAAO;EAQtB,YAAa,GAAG,OAAO;EAevB;EAKA;SAKO,QAAQ;;QAoIT;YACI;IACR,sBAAsB;;;;;cCthBpB;;;;;;;;;;;;;;;;;;KAOD,0BAA0B;cAgBlB,0BAA0B;EACT;EAEA;EACA;EACA;EACA;EAE4B;EACS;EACA;EACA;EACf;EACI;EAC1B,MAAM;UAEjB;UACA;EAEA,UAAW;EACC,WAAY;mBAExB;mBACA;mBACA;UAGT;UACA;UACA;UACA;UAGA;UACA;UACA;UACA;UAGA;;MAUJ;MAIA,MAAM,QAAQ,OAAO;cAIb;cAQA;EAIZ,UAAU,QAAQ,OAAO;EAQhB,aAAa,mBAAmB;EAMhC,QAAQ,mBAAmB;UAS5B;UAUA;UAOA;UAoBA;UAmBA;UAmBA;UAcA;UAYA;UAKA;EAKC,wBAAM;SAiDR,QAAQ;;QAmGT;YACI;IACR,4BAA4B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BUB5SICW.d.ts","names":[],"sources":["../src/labelled-range-input/labelled-range-input.ts"],"mappings":";;;cAuEa,2BAA2B;WAC7B;EAEmB;EACC;EACyB;EACQ;;EAEjC;EAE2B;YAErC,uCAAqB;EA2B/B,wBAAM;SA2BR,QAAQ;;QA2ET;YACI;IACR,6BAA6B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CJ5fshD3.d.ts","names":[],"sources":["../src/editable-label/editable-number.ts","../src/labelled-slider-input/labelled-slider-input.ts"],"mappings":";;;;;;;cAoDa,uBAAuB;;EACN;EACA;EACA;;EAEA;EAC+B;EACpB;EACE;EACE;EACQ;EACvB;;EAqBnB,wBAAM;UAoBP;EAMC;EAWA;UAWD;UAWA;;YAkBE;;YAOS;;gBAGL,cAAc;EAKnB,aAAa,mBAAmB;YAU/B;UA0BF;EAaC,QAAQ,mBAAmB;UAW5B;YAyCW;YAuBA;YAaA,qBAAsB,GAAG;YA6BzB,iBAAkB,GAAG;UA8BhC;UAiBA;;;;;UA4CA;EAmCC;EAMA,iBAAiB,WAAW,gBAAgB,OAAO;UAQpD;UAkBA;UA2CA;UA0BA;UASA;;;;;;UASA;UAYA;UAQA;UAYA;UAYA;;UAKA;SAUQ,QAAQ;;QAoKlB;YACI;IACR,wBAAwB;;;;;cCjuBf,4BAA4B;WAC9B;EAEmB;EAC2B,aAAa;EACb,aAAa;EACxC;EACgB;EACA;;EAEf;EAE2B;YAErC,uCAAqB;YA2BrB,WAAW;EAUrB,wBAAM;SA0BR,QAAQ;;QAyGT;YACI;IACR,8BAA8B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CnQPCywE.d.ts","names":[],"sources":["../src/tree/types.ts","../src/tree/tree-base.ts","../src/tree/tree-flat.ts","../src/tree/tree-list.ts","../src/tree/tree-controller.ts","../src/tree/tree-drop-controller.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DV3iaUBW.d.ts","names":[],"sources":["../src/timeline/types.ts","../src/timeline/timeline-controller.ts","../src/timeline/timeline-draw.ts","../src/timeline/timeline-track-tabs.ts","../src/timeline/timeline-element.ts","../src/timeline/timeline-interactions.ts","../src/timeline/timeline-styles.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Dlah7Zfi.d.ts","names":[],"sources":["../src/incr-search/types.ts","../src/incr-search/ac-adapter.ts","../src/incr-search/controller-tree.ts","../src/incr-search/list-search-controller.ts","../src/incr-search/data-list-search-adapter.ts","../src/incr-search/element-list-search-adapter.ts","../src/incr-search/element-search.ts","../src/incr-search/fuzzy.ts","../src/incr-search/highlight.ts","../src/incr-search/incr-search.ts","../src/incr-search/list-search-commands.ts","../src/incr-search/list-search-styles.ts","../src/incr-search/tree-list-search-adapter.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Dq30pOnn.d.ts","names":[],"sources":["../src/menu/menu-bar.ts","../src/menu/menu-check-item.ts","../src/menu/menu-command-controller.ts","../src/menu/menu-sub-trigger.ts","../src/menu/menu-separator.ts","../src/menu/menu-header.ts","../src/menu/menu-from-tree.ts","../src/menu/menu-radio-item.ts","../src/menu/menu-radio-group.ts","../src/menu/index.ts"],"mappings":";;;;;;cAMa,gBAAgB;UACnB;UACA;EAER;EASA;UASQ;UAOA;UAIA;UAMA;UAIA;UAQA;UASA;SAkCD,sBAAM;EAab,wBAAM;;QAKA;YACI;IACR,iBAAiB;;;;;cCvGR,sBAAsB;EACL;EAC2B;EAC3B;EACC;EACA;EACuB;EACpB,WAAW;EACX,kBAAkB;UAE1C;UAYA;UASA;EASR,WAAW,mBAAmB;EAU9B,QAAQ,mBAAmB;UAInB;SAaQ,sBAAM;EA2DtB,wBAAM;;QAoBA;YACI;IACR,wBAAwB;;;;;cCnKf;UACH;UACA;UACA;EAEI,YAAA;IAAW,UAAU;IAA0B,SAAS;;EAMpE;EAIA;UAIQ;;;;cCZG,uBAAuB;EACN;EAC2B;EAC3B;EACC;EACuB;EACpB,WAAW;EACX,kBAAkB;UAEjC;UACsB;UACJ;UACX;iBAET;UACP;UACA;UACA;EAER;EAKA;EAIA;UAWQ;EAUC,QAAQ,mBAAmB;EAMpC,WAAW,mBAAmB;UAUtB;UASA;UAKA;UAQA;UAQA;UAOA;UAQA;UAYA;UAQA;UAIA;UAIA;UAWA;SAiCQ,sBAAM;EAmEtB,wBAAM;;QA2BA;YACI;IACR,yBAAyB;;;;;cC1RhB,sBAAsB;SAC1B,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,uBAAuB;;;;;cCnBd,mBAAmB;EACF;SAErB,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,oBAAoB;;;;;KCjBZ;EACV,aAAa,QAAQ;EACrB,WAAW;EACX,kBAAkB;;iBAOJ,aACd,OAAO,YACP,UAAS,sBACR;iBAmGa,uBACd,OAAO,YACP,UAAS,sBACR;;;cChHU,sBAAsB;EACL;EACA;EACC;EACD;EACwB;UAE5C;SAWQ,sBAAM;EAoDtB,wBAAM;;QAmBA;YACI;IACR,wBAAwB;;;;;cC5Ff,uBAAuB;EACN;EACA;UAEX;UAET;UAMA;UAMA;EAYR,QAAQ,mBAAmB;SAMpB,sBAAM;EAUb,wBAAM;;QAOA;YACI;IACR,yBAAyB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-garxxqgV.d.ts","names":[],"sources":["../src/icons/defaults.ts","../src/icons/registry.ts"],"mappings":";;;cAOa;;;;;cAMA;;cAGA;;cAGA;;;cCfA,SAAO;KAER;WAA+B;;KAC/B,mBAAmB,YAAY;KAE/B;EACJ;EAAa;;EACb;EAAc;;iBAEN,aAAa,cAAc;iBAK3B,iBAAiB,cAAc;iBAa/B,QAAQ;iBAKR,aAAa,eAAe;iBAI5B,QAAQ;iBAIR,YAAY;iBAKZ;iBAIA,aAAa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-o-CWDt11.d.ts","names":[],"sources":["../src/narrowed-text/types.ts","../src/narrowed-text/narrowed-text.ts"],"mappings":";;;KAAY,mBAAmB;EAC7B;EACA;EACA;EACA;EACA;;KAGU;WACD,MAAM;WACN;WACA,mBAAmB;;KAGlB,0BAA0B,YAAY;KAEtC;KAEA;KAEA;EACV,MAAM;EACN,WAAW;EACX;;;;cCEW,4BAA4B;;EACkB,eAAe;EACV;EACR,aAAa;EACjB;EACE;EACJ;EACC;EACU;EAC/B;EAG5B,UAAU;UAEO;UACA;UACA;UACA;UACM;UAEf;UACA;UACA;UAIA;UACA;UAGA;MAqBJ;MAQA,SAAS;EAgBb;EA0BA;EAmBS;EA+BA;YAcU;YAIA,QAAQ,mBAAmB;UAWtC;UAiBA;UAeA;UAIA;EAiJR;EAUA;EASA,YAAY,UAAU;EA4BtB,WAAW;UAuCH;UAmCA;YA4BW,wBAAM;UAqCjB;SAWQ,sBAAM;;QA6IhB;YACI;IACR,sBAAsB"}