@weasel-js/ui 1.4.0 → 1.4.2

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 (212) hide show
  1. package/dist/chunks/{ActionsBar-B-gWm0NE.js → ActionsBar-C2oXIJk-.js} +3 -3
  2. package/dist/chunks/{ActionsBar-B-gWm0NE.js.map → ActionsBar-C2oXIJk-.js.map} +1 -1
  3. package/dist/chunks/{Badge-BXTDs-zi.js → Badge-7yQseqZb.js} +233 -263
  4. package/dist/chunks/Badge-7yQseqZb.js.map +1 -0
  5. package/dist/chunks/BandEditor-CqiMlSF9.js +252 -0
  6. package/dist/chunks/BandEditor-CqiMlSF9.js.map +1 -0
  7. package/dist/chunks/{Callout-wRyevt8I.js → Callout-63z0T-w3.js} +1 -1
  8. package/dist/chunks/{Callout-wRyevt8I.js.map → Callout-63z0T-w3.js.map} +1 -1
  9. package/dist/chunks/{Checkbox-D_GCnoJ0.js → Checkbox-CkcngYWa.js} +1 -1
  10. package/dist/chunks/{Checkbox-D_GCnoJ0.js.map → Checkbox-CkcngYWa.js.map} +1 -1
  11. package/dist/chunks/{ColorField-pEkaSppg.js → ColorField-CCBSv8dp.js} +2 -2
  12. package/dist/chunks/{ColorField-pEkaSppg.js.map → ColorField-CCBSv8dp.js.map} +1 -1
  13. package/dist/chunks/{ComboBox-inno5gt1.js → ComboBox-TnIrRldB.js} +2 -2
  14. package/dist/chunks/{ComboBox-inno5gt1.js.map → ComboBox-TnIrRldB.js.map} +1 -1
  15. package/dist/chunks/{CurveEditor-Cpuvl_iN.js → CurveEditor-BNbP2wgq.js} +193 -196
  16. package/dist/chunks/CurveEditor-BNbP2wgq.js.map +1 -0
  17. package/dist/chunks/{DataGrid-BWZZUekH.js → DataGrid-CiJGbgok.js} +2 -5
  18. package/dist/chunks/DataGrid-CiJGbgok.js.map +1 -0
  19. package/dist/chunks/{DetentSlider--tQdVQj_.js → DetentSlider-C6RTsiPi.js} +2 -2
  20. package/dist/chunks/{DetentSlider--tQdVQj_.js.map → DetentSlider-C6RTsiPi.js.map} +1 -1
  21. package/dist/chunks/{Dialog-CX2B8PIp.js → Dialog-D8pVzsw8.js} +1 -1
  22. package/dist/chunks/{Dialog-CX2B8PIp.js.map → Dialog-D8pVzsw8.js.map} +1 -1
  23. package/dist/chunks/Disclosure-aSX2CZlw.js +47 -0
  24. package/dist/chunks/Disclosure-aSX2CZlw.js.map +1 -0
  25. package/dist/chunks/{DragHandleGlyph--2zsZzA2.js → DragHandleGlyph-C6GJyfnm.js} +1 -1
  26. package/dist/chunks/{DragHandleGlyph--2zsZzA2.js.map → DragHandleGlyph-C6GJyfnm.js.map} +1 -1
  27. package/dist/chunks/{Field-Bc6Nuc3p.js → Field-BUroh92b.js} +1 -1
  28. package/dist/chunks/{Field-Bc6Nuc3p.js.map → Field-BUroh92b.js.map} +1 -1
  29. package/dist/chunks/{FontFamilySelect-CvrXKVwv.js → FontFamilySelect-xjOHQMsK.js} +2 -2
  30. package/dist/chunks/{FontFamilySelect-CvrXKVwv.js.map → FontFamilySelect-xjOHQMsK.js.map} +1 -1
  31. package/dist/chunks/{GradientEditor-C5pPbMa_.js → GradientEditor-D1IVEkHO.js} +13 -11
  32. package/dist/chunks/{GradientEditor-C5pPbMa_.js.map → GradientEditor-D1IVEkHO.js.map} +1 -1
  33. package/dist/chunks/{InlineRange-CBt_SBsC.js → InlineRange-DG2dvtb4.js} +2 -2
  34. package/dist/chunks/{InlineRange-CBt_SBsC.js.map → InlineRange-DG2dvtb4.js.map} +1 -1
  35. package/dist/chunks/{Input-CSAECs_T.js → Input-CxMANia3.js} +2 -2
  36. package/dist/chunks/{Input-CSAECs_T.js.map → Input-CxMANia3.js.map} +1 -1
  37. package/dist/chunks/{ItemList-POiCvUDx.js → ItemList-BcdHAah3.js} +1 -1
  38. package/dist/chunks/{ItemList-POiCvUDx.js.map → ItemList-BcdHAah3.js.map} +1 -1
  39. package/dist/chunks/{Keycaps-DszN5Dwl.js → Keycaps-D-UGWDrt.js} +1 -1
  40. package/dist/chunks/{Keycaps-DszN5Dwl.js.map → Keycaps-D-UGWDrt.js.map} +1 -1
  41. package/dist/chunks/{LayerStack-htMwIsJ6.js → LayerStack-DQnWSOVC.js} +23 -26
  42. package/dist/chunks/LayerStack-DQnWSOVC.js.map +1 -0
  43. package/dist/chunks/{NumberField-Byw1iaIJ.js → NumberField-DLw4UmF3.js} +12 -10
  44. package/dist/chunks/NumberField-DLw4UmF3.js.map +1 -0
  45. package/dist/chunks/{OptionsBar-efIwfqYe.js → OptionsBar-BXyk_5gT.js} +3 -3
  46. package/dist/chunks/{OptionsBar-efIwfqYe.js.map → OptionsBar-BXyk_5gT.js.map} +1 -1
  47. package/dist/chunks/{PaintInput-DtCSGda0.js → PaintInput-DCgWtKxw.js} +5 -5
  48. package/dist/chunks/{PaintInput-DtCSGda0.js.map → PaintInput-DCgWtKxw.js.map} +1 -1
  49. package/dist/chunks/{PatternPicker-G9e0CU5H.js → PatternPicker-CPFEhpXD.js} +2 -2
  50. package/dist/chunks/{PatternPicker-G9e0CU5H.js.map → PatternPicker-CPFEhpXD.js.map} +1 -1
  51. package/dist/chunks/{Plot2D-D63D5w6c.js → Plot2D-BtI_c25q.js} +1 -1
  52. package/dist/chunks/{Plot2D-D63D5w6c.js.map → Plot2D-BtI_c25q.js.map} +1 -1
  53. package/dist/chunks/{PointPlotter-CR-QGCIf.js → PointPlotter-B-DvXjkL.js} +2 -2
  54. package/dist/chunks/{PointPlotter-CR-QGCIf.js.map → PointPlotter-B-DvXjkL.js.map} +1 -1
  55. package/dist/chunks/{Powerline--gx4j0Zr.js → Powerline-CJYCbqSc.js} +2 -2
  56. package/dist/chunks/{Powerline--gx4j0Zr.js.map → Powerline-CJYCbqSc.js.map} +1 -1
  57. package/dist/chunks/{Prefs-ByKG3ylD.js → Prefs-BqnwyjmH.js} +10 -10
  58. package/dist/chunks/{Prefs-ByKG3ylD.js.map → Prefs-BqnwyjmH.js.map} +1 -1
  59. package/dist/chunks/Properties-fLSEE65J.js +746 -0
  60. package/dist/chunks/Properties-fLSEE65J.js.map +1 -0
  61. package/dist/chunks/{RadioGroup-XjbfUb7S.js → RadioGroup-VGAaLYaR.js} +2 -2
  62. package/dist/chunks/{RadioGroup-XjbfUb7S.js.map → RadioGroup-VGAaLYaR.js.map} +1 -1
  63. package/dist/chunks/{RangeSlider-D0hFbx_Z.js → RangeSlider-DefoAOsh.js} +1 -1
  64. package/dist/chunks/{RangeSlider-D0hFbx_Z.js.map → RangeSlider-DefoAOsh.js.map} +1 -1
  65. package/dist/chunks/ResizeHandle-DMJdqRud.js +79 -0
  66. package/dist/chunks/ResizeHandle-DMJdqRud.js.map +1 -0
  67. package/dist/chunks/Select-DGafwTF0.js +121 -0
  68. package/dist/chunks/Select-DGafwTF0.js.map +1 -0
  69. package/dist/chunks/{SelectionPanel-OfbtyDJH.js → SelectionPanel-BwBevj5F.js} +10 -10
  70. package/dist/chunks/{SelectionPanel-OfbtyDJH.js.map → SelectionPanel-BwBevj5F.js.map} +1 -1
  71. package/dist/chunks/{Sidebar-Du0yp1S0.js → Sidebar-CeSRkWKK.js} +1 -1
  72. package/dist/chunks/{Sidebar-Du0yp1S0.js.map → Sidebar-CeSRkWKK.js.map} +1 -1
  73. package/dist/chunks/{SidebarPanel-Cuq__FIC.js → SidebarPanel-BWIiJv7M.js} +1 -1
  74. package/dist/chunks/{SidebarPanel-Cuq__FIC.js.map → SidebarPanel-BWIiJv7M.js.map} +1 -1
  75. package/dist/chunks/Slider-X6WcO-6s.js +303 -0
  76. package/dist/chunks/Slider-X6WcO-6s.js.map +1 -0
  77. package/dist/chunks/{StatusBar-DLYwh5sb.js → StatusBar-COyPUoEs.js} +1 -1
  78. package/dist/chunks/{StatusBar-DLYwh5sb.js.map → StatusBar-COyPUoEs.js.map} +1 -1
  79. package/dist/chunks/{Switch-B521iN3m.js → Switch-Y097LD1L.js} +1 -1
  80. package/dist/chunks/{Switch-B521iN3m.js.map → Switch-Y097LD1L.js.map} +1 -1
  81. package/dist/chunks/{Tabs-BuifAv0p.js → Tabs-BDzkqWDE.js} +1 -1
  82. package/dist/chunks/{Tabs-BuifAv0p.js.map → Tabs-BDzkqWDE.js.map} +1 -1
  83. package/dist/chunks/{Timeline-BE7UWajy.js → Timeline-D9xQBdKN.js} +219 -205
  84. package/dist/chunks/Timeline-D9xQBdKN.js.map +1 -0
  85. package/dist/chunks/{Toast-B75V2gqL.js → Toast-DX0iLdC3.js} +1 -1
  86. package/dist/chunks/{Toast-B75V2gqL.js.map → Toast-DX0iLdC3.js.map} +1 -1
  87. package/dist/chunks/{ToggleBar-D0veW91s.js → ToggleBar-fQGk_Wf_.js} +2 -2
  88. package/dist/chunks/{ToggleBar-D0veW91s.js.map → ToggleBar-fQGk_Wf_.js.map} +1 -1
  89. package/dist/chunks/{ToolButton-D5VwD47i.js → ToolButton-DpqTcgLa.js} +1 -1
  90. package/dist/chunks/{ToolButton-D5VwD47i.js.map → ToolButton-DpqTcgLa.js.map} +1 -1
  91. package/dist/chunks/{ToolGroup-B2PlMKQ-.js → ToolGroup-DOrObiiA.js} +1 -1
  92. package/dist/chunks/{ToolGroup-B2PlMKQ-.js.map → ToolGroup-DOrObiiA.js.map} +1 -1
  93. package/dist/chunks/{ToolOptionsBar-ByHX7y1M.js → ToolOptionsBar-f6b5u99i.js} +1 -1
  94. package/dist/chunks/{ToolOptionsBar-ByHX7y1M.js.map → ToolOptionsBar-f6b5u99i.js.map} +1 -1
  95. package/dist/chunks/{ToolPalette-Bi5ezkO6.js → ToolPalette-B_Zjw6dC.js} +5 -5
  96. package/dist/chunks/{ToolPalette-Bi5ezkO6.js.map → ToolPalette-B_Zjw6dC.js.map} +1 -1
  97. package/dist/chunks/{keyGlyph-BLFMKZgF.js → keyGlyph-L5bsDQe5.js} +1 -1
  98. package/dist/chunks/{keyGlyph-BLFMKZgF.js.map → keyGlyph-L5bsDQe5.js.map} +1 -1
  99. package/dist/chunks/{number-D3TDawLC.js → number-Dy633mrx.js} +1 -1
  100. package/dist/chunks/{number-D3TDawLC.js.map → number-Dy633mrx.js.map} +1 -1
  101. package/dist/chunks/{range.module-CttzfN6a.js → range.module-CO59aXEH.js} +1 -1
  102. package/dist/chunks/{range.module-CttzfN6a.js.map → range.module-CO59aXEH.js.map} +1 -1
  103. package/dist/chunks/{segmentedControl.module-XADeq9e5.js → segmentedControl.module-pcPOsNey.js} +1 -1
  104. package/dist/chunks/{segmentedControl.module-XADeq9e5.js.map → segmentedControl.module-pcPOsNey.js.map} +1 -1
  105. package/dist/chunks/useReorderDragList-C2fhvbU1.js +102 -0
  106. package/dist/chunks/useReorderDragList-C2fhvbU1.js.map +1 -0
  107. package/dist/chunks/{useRovingTabIndex-ByjY4lnw.js → useRovingTabIndex-DqXFNDaD.js} +1 -1
  108. package/dist/chunks/{useRovingTabIndex-ByjY4lnw.js.map → useRovingTabIndex-DqXFNDaD.js.map} +1 -1
  109. package/dist/components/ActionsBar/index.js +1 -1
  110. package/dist/components/Badge/Badge.d.ts.map +1 -1
  111. package/dist/components/Badge/index.js +1 -1
  112. package/dist/components/Badge/shapes/Perforated.d.ts.map +1 -1
  113. package/dist/components/Badge/shapes/Shield.d.ts.map +1 -1
  114. package/dist/components/Badge/useSvgBox.d.ts +10 -0
  115. package/dist/components/Badge/useSvgBox.d.ts.map +1 -0
  116. package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
  117. package/dist/components/BandEditor/index.js +1 -1
  118. package/dist/components/Callout/index.js +1 -1
  119. package/dist/components/Checkbox/index.js +1 -1
  120. package/dist/components/ColorField/index.js +1 -1
  121. package/dist/components/ComboBox/index.js +1 -1
  122. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
  123. package/dist/components/CurveEditor/index.js +1 -1
  124. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  125. package/dist/components/DataGrid/index.js +1 -1
  126. package/dist/components/DetentSlider/index.js +1 -1
  127. package/dist/components/Dialog/index.js +1 -1
  128. package/dist/components/Disclosure/Disclosure.d.ts +64 -0
  129. package/dist/components/Disclosure/Disclosure.d.ts.map +1 -0
  130. package/dist/components/Disclosure/index.d.ts +3 -0
  131. package/dist/components/Disclosure/index.d.ts.map +1 -0
  132. package/dist/components/Disclosure/index.js +2 -0
  133. package/dist/components/DragHandleGlyph/index.js +1 -1
  134. package/dist/components/Field/index.js +1 -1
  135. package/dist/components/FontFamilySelect/index.js +1 -1
  136. package/dist/components/GradientEditor/index.js +1 -1
  137. package/dist/components/InlineRange/index.js +1 -1
  138. package/dist/components/Input/index.js +1 -1
  139. package/dist/components/ItemList/index.js +1 -1
  140. package/dist/components/Keycaps/index.js +2 -2
  141. package/dist/components/LayerStack/LayerStack.d.ts +22 -9
  142. package/dist/components/LayerStack/LayerStack.d.ts.map +1 -1
  143. package/dist/components/LayerStack/index.js +1 -1
  144. package/dist/components/NumberField/NumberField.d.ts +12 -0
  145. package/dist/components/NumberField/NumberField.d.ts.map +1 -1
  146. package/dist/components/NumberField/index.js +1 -1
  147. package/dist/components/OptionsBar/index.js +1 -1
  148. package/dist/components/PaintInput/index.js +1 -1
  149. package/dist/components/PatternPicker/index.js +1 -1
  150. package/dist/components/Plot2D/index.js +1 -1
  151. package/dist/components/PointPlotter/index.js +1 -1
  152. package/dist/components/Powerline/index.js +2 -2
  153. package/dist/components/Prefs/index.js +1 -1
  154. package/dist/components/Properties/EffectCard.d.ts +3 -2
  155. package/dist/components/Properties/EffectCard.d.ts.map +1 -1
  156. package/dist/components/Properties/PropertyGroup.d.ts +24 -10
  157. package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
  158. package/dist/components/Properties/PropertyPanel.d.ts +68 -24
  159. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  160. package/dist/components/Properties/index.d.ts +1 -1
  161. package/dist/components/Properties/index.d.ts.map +1 -1
  162. package/dist/components/Properties/index.js +2 -2
  163. package/dist/components/RadioGroup/index.js +1 -1
  164. package/dist/components/RangeSlider/index.js +1 -1
  165. package/dist/components/ResizeHandle/ResizeHandle.d.ts.map +1 -1
  166. package/dist/components/ResizeHandle/index.js +1 -1
  167. package/dist/components/Select/Select.d.ts +7 -1
  168. package/dist/components/Select/Select.d.ts.map +1 -1
  169. package/dist/components/Select/index.js +1 -1
  170. package/dist/components/SelectionPanel/index.js +1 -1
  171. package/dist/components/Sidebar/index.js +1 -1
  172. package/dist/components/SidebarPanel/index.js +1 -1
  173. package/dist/components/Slider/Slider.d.ts.map +1 -1
  174. package/dist/components/Slider/index.js +1 -1
  175. package/dist/components/StatusBar/index.js +1 -1
  176. package/dist/components/Switch/index.js +1 -1
  177. package/dist/components/Tabs/index.js +1 -1
  178. package/dist/components/Timeline/Lane.d.ts.map +1 -1
  179. package/dist/components/Timeline/Ruler.d.ts.map +1 -1
  180. package/dist/components/Timeline/index.js +1 -1
  181. package/dist/components/Toast/index.js +1 -1
  182. package/dist/components/ToggleBar/index.js +1 -1
  183. package/dist/components/ToolButton/index.js +1 -1
  184. package/dist/components/ToolGroup/index.js +1 -1
  185. package/dist/components/ToolOptionsBar/index.js +1 -1
  186. package/dist/components/ToolPalette/index.js +1 -1
  187. package/dist/index.d.ts +1 -0
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +58 -57
  190. package/dist/index.js.map +1 -1
  191. package/dist/style.css +1 -1
  192. package/dist/useReorderDragList.d.ts +20 -7
  193. package/dist/useReorderDragList.d.ts.map +1 -1
  194. package/package.json +6 -6
  195. package/dist/chunks/Badge-BXTDs-zi.js.map +0 -1
  196. package/dist/chunks/BandEditor-CfLW44uR.js +0 -248
  197. package/dist/chunks/BandEditor-CfLW44uR.js.map +0 -1
  198. package/dist/chunks/CurveEditor-Cpuvl_iN.js.map +0 -1
  199. package/dist/chunks/DataGrid-BWZZUekH.js.map +0 -1
  200. package/dist/chunks/LayerStack-htMwIsJ6.js.map +0 -1
  201. package/dist/chunks/NumberField-Byw1iaIJ.js.map +0 -1
  202. package/dist/chunks/Properties-BEGlt0Z2.js +0 -662
  203. package/dist/chunks/Properties-BEGlt0Z2.js.map +0 -1
  204. package/dist/chunks/ResizeHandle-DjGZkPpx.js +0 -81
  205. package/dist/chunks/ResizeHandle-DjGZkPpx.js.map +0 -1
  206. package/dist/chunks/Select-D1uP21db.js +0 -103
  207. package/dist/chunks/Select-D1uP21db.js.map +0 -1
  208. package/dist/chunks/Slider-CSwL-Nj9.js +0 -296
  209. package/dist/chunks/Slider-CSwL-Nj9.js.map +0 -1
  210. package/dist/chunks/Timeline-BE7UWajy.js.map +0 -1
  211. package/dist/chunks/useReorderDragList-nQMVwNBd.js +0 -109
  212. package/dist/chunks/useReorderDragList-nQMVwNBd.js.map +0 -1
@@ -5,4 +5,4 @@ var e = {
5
5
  //#endregion
6
6
  export { e as t };
7
7
 
8
- //# sourceMappingURL=range.module-CttzfN6a.js.map
8
+ //# sourceMappingURL=range.module-CO59aXEH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"range.module-CttzfN6a.js","names":[],"sources":["../../src/components/range.module.css"],"sourcesContent":["/* The one skin for a native <input type=\"range\">. Imported by InlineRange and\n by the property rows, which render the same DOM and used to carry three\n independently authored copies of these rules.\n\n The track is painted here rather than left to `accent-color`: a UA fills the\n left of the track with the accent but draws the remainder near-white on a\n dark surface whatever `color-scheme` says, and overriding the track's\n background removes the accent fill instead of recolouring the remainder. */\n.range {\n appearance: none;\n -webkit-appearance: none;\n width: 100%;\n min-inline-size: 48px;\n /* The box is taller than the track so the thumb has room to spill; a surface\n where the element itself IS the track overrides this. */\n height: var(--wzl-range-box-h, 12px);\n margin: 0;\n padding: 0;\n /* Transparent so the track pseudo-element shows; a surface that paints the element itself overrides it. */\n background: var(--wzl-range-bg, transparent);\n cursor: pointer;\n}\n\n.range::-webkit-slider-runnable-track {\n height: var(--wzl-slider-track-h);\n border-radius: var(--wzl-radius-sm);\n background: var(\n --wzl-range-track-bg,\n color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-track-tint), transparent)\n );\n}\n\n.range::-moz-range-track {\n height: var(--wzl-slider-track-h);\n border-radius: var(--wzl-radius-sm);\n background: var(\n --wzl-range-track-bg,\n color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-track-tint), transparent)\n );\n}\n\n.range::-webkit-slider-thumb {\n appearance: none;\n -webkit-appearance: none;\n width: var(--wzl-slider-thumb-size);\n height: var(--wzl-slider-thumb-size);\n border: none;\n border-radius: 50%;\n background: color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-thumb-tint), transparent);\n /* Centres an 8px thumb on a 4px track. Webkit does not centre it for you. */\n margin-top: calc((var(--wzl-slider-track-h) - var(--wzl-slider-thumb-size)) / 2);\n}\n\n.range::-moz-range-thumb {\n width: var(--wzl-slider-thumb-size);\n height: var(--wzl-slider-thumb-size);\n border: none;\n border-radius: 50%;\n background: color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-thumb-tint), transparent);\n}\n\n.range:focus-visible {\n outline: 2px solid var(--wzl-focus-ring);\n outline-offset: 2px;\n}\n\n.range:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n/* Alpha variant: a fainter track, used where the row already carries a colour\n swatch and the slider must not compete with it. */\n.alpha::-webkit-slider-runnable-track {\n background: color-mix(in srgb, var(--wzl-accent) 10%, transparent);\n}\n\n.alpha::-moz-range-track {\n background: color-mix(in srgb, var(--wzl-accent) 10%, transparent);\n}\n\n/* A dead alpha track keeps its groove but loses its thumb, so the affordance\n reads inert rather than merely dimmed. Keyed off `:disabled`, which ColorRow\n already sets on the input — not off a class on the row. */\n.alpha:disabled::-webkit-slider-runnable-track,\n.alpha:disabled::-moz-range-track {\n background: color-mix(in srgb, var(--wzl-fg) 5%, transparent);\n}\n\n.alpha:disabled::-webkit-slider-thumb,\n.alpha:disabled::-moz-range-thumb {\n background: transparent;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"range.module-CO59aXEH.js","names":[],"sources":["../../src/components/range.module.css"],"sourcesContent":["/* The one skin for a native <input type=\"range\">. Imported by InlineRange and\n by the property rows, which render the same DOM and used to carry three\n independently authored copies of these rules.\n\n The track is painted here rather than left to `accent-color`: a UA fills the\n left of the track with the accent but draws the remainder near-white on a\n dark surface whatever `color-scheme` says, and overriding the track's\n background removes the accent fill instead of recolouring the remainder. */\n.range {\n appearance: none;\n -webkit-appearance: none;\n width: 100%;\n min-inline-size: 48px;\n /* The box is taller than the track so the thumb has room to spill; a surface\n where the element itself IS the track overrides this. */\n height: var(--wzl-range-box-h, 12px);\n margin: 0;\n padding: 0;\n /* Transparent so the track pseudo-element shows; a surface that paints the element itself overrides it. */\n background: var(--wzl-range-bg, transparent);\n cursor: pointer;\n}\n\n.range::-webkit-slider-runnable-track {\n height: var(--wzl-slider-track-h);\n border-radius: var(--wzl-radius-sm);\n background: var(\n --wzl-range-track-bg,\n color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-track-tint), transparent)\n );\n}\n\n.range::-moz-range-track {\n height: var(--wzl-slider-track-h);\n border-radius: var(--wzl-radius-sm);\n background: var(\n --wzl-range-track-bg,\n color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-track-tint), transparent)\n );\n}\n\n.range::-webkit-slider-thumb {\n appearance: none;\n -webkit-appearance: none;\n width: var(--wzl-slider-thumb-size);\n height: var(--wzl-slider-thumb-size);\n border: none;\n border-radius: 50%;\n background: color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-thumb-tint), transparent);\n /* Centres an 8px thumb on a 4px track. Webkit does not centre it for you. */\n margin-top: calc((var(--wzl-slider-track-h) - var(--wzl-slider-thumb-size)) / 2);\n}\n\n.range::-moz-range-thumb {\n width: var(--wzl-slider-thumb-size);\n height: var(--wzl-slider-thumb-size);\n border: none;\n border-radius: 50%;\n background: color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-thumb-tint), transparent);\n}\n\n.range:focus-visible {\n outline: 2px solid var(--wzl-focus-ring);\n outline-offset: 2px;\n}\n\n.range:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n/* Alpha variant: a fainter track, used where the row already carries a colour\n swatch and the slider must not compete with it. */\n.alpha::-webkit-slider-runnable-track {\n background: color-mix(in srgb, var(--wzl-accent) 10%, transparent);\n}\n\n.alpha::-moz-range-track {\n background: color-mix(in srgb, var(--wzl-accent) 10%, transparent);\n}\n\n/* A dead alpha track keeps its groove but loses its thumb, so the affordance\n reads inert rather than merely dimmed. Keyed off `:disabled`, which ColorRow\n already sets on the input — not off a class on the row. */\n.alpha:disabled::-webkit-slider-runnable-track,\n.alpha:disabled::-moz-range-track {\n background: color-mix(in srgb, var(--wzl-fg) 5%, transparent);\n}\n\n.alpha:disabled::-webkit-slider-thumb,\n.alpha:disabled::-moz-range-thumb {\n background: transparent;\n}\n"],"mappings":""}
@@ -8,4 +8,4 @@ var e = {
8
8
  //#endregion
9
9
  export { e as t };
10
10
 
11
- //# sourceMappingURL=segmentedControl.module-XADeq9e5.js.map
11
+ //# sourceMappingURL=segmentedControl.module-pcPOsNey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"segmentedControl.module-XADeq9e5.js","names":[],"sources":["../../src/components/segmentedControl.module.css"],"sourcesContent":["/* Shared by ActionsBar and OptionsBar, which look identical and differ only\n in what a segment does. Lives here rather than in either component so\n neither owns the other's styling.\n\n Aqua-glass segmented control. The track is a pill-shaped well; the\n selected segment becomes a tinted glass cylinder that reads as the same\n \"lozenge\" family as the standalone Button. Visual params come from the\n `--btn-*` custom properties (see Button.module.css) so the Button Lab\n can tune both surfaces with one set of sliders. */\n.root {\n display: inline-flex;\n height: var(--tb-h, var(--wzl-control-h, 24px));\n padding: 2px;\n background: linear-gradient(\n 180deg,\n rgba(0, 0, 0, 0.18) 0%,\n rgba(0, 0, 0, 0.05) 100%\n );\n border-radius: var(--wzl-radius-pill);\n /* Clip segments to the track outline so interior corners read crisp and\n the selected segment's glass treatment doesn't paint over the rounded\n outer pixels. */\n overflow: hidden;\n box-shadow:\n inset 0 1px 2px rgba(0, 0, 0, 0.4),\n 0 1px 0 rgba(255, 255, 255, 0.06);\n user-select: none;\n -webkit-user-select: none;\n touch-action: none;\n}\n\n.segment {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n padding: 0 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n margin: 0;\n font-family: var(--wzl-font-ui);\n font-weight: var(--wzl-font-weight-normal);\n font-size: var(--btn-fontsize, var(--wzl-font-size));\n line-height: 1;\n color: var(--wzl-fg-muted);\n cursor: pointer;\n /* Only round the outer corners of the bar — middle segments stay square\n so the seams between them don't render as facing parentheses. */\n border-radius: 0;\n isolation: isolate;\n overflow: hidden;\n transition: color var(--wzl-motion-fast);\n}\n\n.segment:first-child {\n border-radius: var(--wzl-radius-pill) 0 0 var(--wzl-radius-pill);\n}\n\n.segment:last-child {\n border-radius: 0 var(--wzl-radius-pill) var(--wzl-radius-pill) 0;\n}\n\n.segment:only-child {\n border-radius: var(--wzl-radius-pill);\n}\n\n.segment:focus-visible {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -2px;\n}\n\n.segment:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n}\n\n/* Selected segment — full Aqua glass cylinder. Mirrors Button.variant_primary. */\n.segmentSelected {\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha, 45%), transparent) 0%,\n color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha, 70%), transparent) calc(var(--btn-equator, 52%) - var(--btn-equator-spread, 12%)),\n color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint, 95%), white) var(--btn-equator, 52%),\n var(--wzl-accent) calc(var(--btn-equator, 52%) + var(--btn-equator-spread, 12%) * 1.6),\n color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint, 70%), black) 100%\n );\n backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n -webkit-backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n color: var(--wzl-fg-on-accent);\n text-shadow:\n 0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow, 0.35)),\n var(--btn-text-inset-x, 0px) var(--btn-text-inset-y, 1px) 0 rgba(0, 0, 0, var(--btn-text-inset, 0.55)),\n 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow, 0.35) * 0.5));\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi, 0.42)),\n inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo, 0.3)),\n 0 0 0 1px rgba(0, 0, 0, var(--btn-rim, 0.22)),\n 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near, 0.3)),\n 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far, 0.18) * 0.8));\n}\n\n/* Specular gloss on the selected segment. Top corners inherit the\n segment's radius so they hug the upper edge cleanly; bottom corners\n are flattened so the gloss ends in a straight line at the equator\n instead of two little curves that read as `)(` brackets. */\n.segmentSelected::before {\n content: '';\n position: absolute;\n inset: 1px 1px var(--btn-gloss-bottom, 50%) 1px;\n border-radius: inherit;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, var(--btn-gloss-top, 0.42)) 0%,\n rgba(255, 255, 255, var(--btn-gloss-mid, 0.12)) 60%,\n rgba(255, 255, 255, 0) 100%\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.segmentSelected > * {\n position: relative;\n z-index: 2;\n}\n\n/* Small variant — ~60% of the default height, with proportionally reduced\n padding and font. Sized for dense surfaces (lab control panels, inline\n filters, etc.). */\n.size_sm {\n height: 17px;\n padding: 1px;\n}\n\n.size_sm .segment {\n padding: 0 8px;\n font-size: var(--wzl-font-size-sm);\n}\n\n/* Minimal variant — strips the pill track, glass selected state, inset\n shadows, and outer padding. Used in dense diagnostic surfaces (dispatch\n trace, lab inspectors) where the bar must read as plain text controls. */\n.variant_minimal {\n height: auto;\n padding: 0;\n background: none;\n border-radius: 0;\n box-shadow: none;\n gap: 2px;\n}\n\n.variant_minimal .segment {\n padding: 0 4px;\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-medium);\n line-height: 1.4;\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg-muted);\n transition: none;\n}\n\n.variant_minimal .segment:first-child,\n.variant_minimal .segment:last-child,\n.variant_minimal .segment:only-child {\n border-radius: var(--wzl-radius-sm);\n}\n\n.variant_minimal .segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n background: var(--wzl-surface-hover);\n}\n\n.variant_minimal .segmentSelected {\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n color: var(--wzl-accent-fg, var(--wzl-accent));\n text-shadow: none;\n box-shadow: none;\n font-weight: var(--wzl-font-weight-medium);\n}\n\n.variant_minimal .segmentSelected::before {\n content: none;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"segmentedControl.module-pcPOsNey.js","names":[],"sources":["../../src/components/segmentedControl.module.css"],"sourcesContent":["/* Shared by ActionsBar and OptionsBar, which look identical and differ only\n in what a segment does. Lives here rather than in either component so\n neither owns the other's styling.\n\n Aqua-glass segmented control. The track is a pill-shaped well; the\n selected segment becomes a tinted glass cylinder that reads as the same\n \"lozenge\" family as the standalone Button. Visual params come from the\n `--btn-*` custom properties (see Button.module.css) so the Button Lab\n can tune both surfaces with one set of sliders. */\n.root {\n display: inline-flex;\n height: var(--tb-h, var(--wzl-control-h, 24px));\n padding: 2px;\n background: linear-gradient(\n 180deg,\n rgba(0, 0, 0, 0.18) 0%,\n rgba(0, 0, 0, 0.05) 100%\n );\n border-radius: var(--wzl-radius-pill);\n /* Clip segments to the track outline so interior corners read crisp and\n the selected segment's glass treatment doesn't paint over the rounded\n outer pixels. */\n overflow: hidden;\n box-shadow:\n inset 0 1px 2px rgba(0, 0, 0, 0.4),\n 0 1px 0 rgba(255, 255, 255, 0.06);\n user-select: none;\n -webkit-user-select: none;\n touch-action: none;\n}\n\n.segment {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n padding: 0 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n margin: 0;\n font-family: var(--wzl-font-ui);\n font-weight: var(--wzl-font-weight-normal);\n font-size: var(--btn-fontsize, var(--wzl-font-size));\n line-height: 1;\n color: var(--wzl-fg-muted);\n cursor: pointer;\n /* Only round the outer corners of the bar — middle segments stay square\n so the seams between them don't render as facing parentheses. */\n border-radius: 0;\n isolation: isolate;\n overflow: hidden;\n transition: color var(--wzl-motion-fast);\n}\n\n.segment:first-child {\n border-radius: var(--wzl-radius-pill) 0 0 var(--wzl-radius-pill);\n}\n\n.segment:last-child {\n border-radius: 0 var(--wzl-radius-pill) var(--wzl-radius-pill) 0;\n}\n\n.segment:only-child {\n border-radius: var(--wzl-radius-pill);\n}\n\n.segment:focus-visible {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -2px;\n}\n\n.segment:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n}\n\n/* Selected segment — full Aqua glass cylinder. Mirrors Button.variant_primary. */\n.segmentSelected {\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha, 45%), transparent) 0%,\n color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha, 70%), transparent) calc(var(--btn-equator, 52%) - var(--btn-equator-spread, 12%)),\n color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint, 95%), white) var(--btn-equator, 52%),\n var(--wzl-accent) calc(var(--btn-equator, 52%) + var(--btn-equator-spread, 12%) * 1.6),\n color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint, 70%), black) 100%\n );\n backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n -webkit-backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n color: var(--wzl-fg-on-accent);\n text-shadow:\n 0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow, 0.35)),\n var(--btn-text-inset-x, 0px) var(--btn-text-inset-y, 1px) 0 rgba(0, 0, 0, var(--btn-text-inset, 0.55)),\n 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow, 0.35) * 0.5));\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi, 0.42)),\n inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo, 0.3)),\n 0 0 0 1px rgba(0, 0, 0, var(--btn-rim, 0.22)),\n 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near, 0.3)),\n 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far, 0.18) * 0.8));\n}\n\n/* Specular gloss on the selected segment. Top corners inherit the\n segment's radius so they hug the upper edge cleanly; bottom corners\n are flattened so the gloss ends in a straight line at the equator\n instead of two little curves that read as `)(` brackets. */\n.segmentSelected::before {\n content: '';\n position: absolute;\n inset: 1px 1px var(--btn-gloss-bottom, 50%) 1px;\n border-radius: inherit;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, var(--btn-gloss-top, 0.42)) 0%,\n rgba(255, 255, 255, var(--btn-gloss-mid, 0.12)) 60%,\n rgba(255, 255, 255, 0) 100%\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.segmentSelected > * {\n position: relative;\n z-index: 2;\n}\n\n/* Small variant — ~60% of the default height, with proportionally reduced\n padding and font. Sized for dense surfaces (lab control panels, inline\n filters, etc.). */\n.size_sm {\n height: 17px;\n padding: 1px;\n}\n\n.size_sm .segment {\n padding: 0 8px;\n font-size: var(--wzl-font-size-sm);\n}\n\n/* Minimal variant — strips the pill track, glass selected state, inset\n shadows, and outer padding. Used in dense diagnostic surfaces (dispatch\n trace, lab inspectors) where the bar must read as plain text controls. */\n.variant_minimal {\n height: auto;\n padding: 0;\n background: none;\n border-radius: 0;\n box-shadow: none;\n gap: 2px;\n}\n\n.variant_minimal .segment {\n padding: 0 4px;\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-medium);\n line-height: 1.4;\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg-muted);\n transition: none;\n}\n\n.variant_minimal .segment:first-child,\n.variant_minimal .segment:last-child,\n.variant_minimal .segment:only-child {\n border-radius: var(--wzl-radius-sm);\n}\n\n.variant_minimal .segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n background: var(--wzl-surface-hover);\n}\n\n.variant_minimal .segmentSelected {\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n color: var(--wzl-accent-fg, var(--wzl-accent));\n text-shadow: none;\n box-shadow: none;\n font-weight: var(--wzl-font-weight-medium);\n}\n\n.variant_minimal .segmentSelected::before {\n content: none;\n}\n"],"mappings":""}
@@ -0,0 +1,102 @@
1
+ import { startThresholdDrag as e } from "@weasel-js/core";
2
+ import { useCallback as t, useEffect as n, useRef as r, useState as i } from "react";
3
+ //#region src/useReorderDragList.ts
4
+ function a(e, t) {
5
+ let n = 0;
6
+ for (let r = t - 1; r >= 0; r--) if (e[r]?.locked) {
7
+ n = r + 1;
8
+ break;
9
+ }
10
+ let r = e.length;
11
+ for (let n = t + 1; n < e.length; n++) if (e[n]?.locked) {
12
+ r = n;
13
+ break;
14
+ }
15
+ return [n, r];
16
+ }
17
+ function o(e, t, n) {
18
+ let r = t.map((t) => e.findIndex((e) => e.id === t)).filter((e) => e >= 0).sort((e, t) => e - t), i = r.length > 0 && r.every((e, t) => {
19
+ if (t === 0) return !0;
20
+ let n = r[t - 1];
21
+ return n !== void 0 && e === n + 1;
22
+ }), a = r[0], o = r[r.length - 1];
23
+ return i && a !== void 0 && o !== void 0 && n >= a && n <= o + 1;
24
+ }
25
+ function s(s) {
26
+ let c = r(s);
27
+ c.current = s;
28
+ let l = r(null), u = r(null), [d, f] = i({
29
+ draggedIds: null,
30
+ targetIndex: null
31
+ });
32
+ n(() => () => {
33
+ u.current?.cancel();
34
+ }, []);
35
+ let p = t((e, t) => {
36
+ let [n, r] = a(c.current.items, t), i = l.current;
37
+ if (!i) return n;
38
+ let o = Array.from(i.children), s = o.length;
39
+ for (let t = 0; t < o.length; t++) {
40
+ let n = o[t];
41
+ if (n && e < n.getBoundingClientRect().bottom) {
42
+ s = t;
43
+ break;
44
+ }
45
+ }
46
+ return Math.max(n, Math.min(s, r));
47
+ }, []), m = t((e) => {
48
+ l.current = e;
49
+ }, []), h = t(() => {
50
+ u.current = null, f({
51
+ draggedIds: null,
52
+ targetIndex: null
53
+ });
54
+ }, []), g = t((t, n, r) => {
55
+ let i = l.current;
56
+ if (!i || u.current) return;
57
+ let s = {
58
+ shiftKey: r.shiftKey,
59
+ ctrlKey: r.ctrlKey,
60
+ metaKey: r.metaKey,
61
+ altKey: r.altKey
62
+ }, d = [], m = 0;
63
+ u.current = e(r, {
64
+ origin: i,
65
+ threshold: c.current.items[n]?.locked ? Infinity : c.current.threshold ?? 4,
66
+ onActivate: (e) => {
67
+ let r = c.current.selectedIds, [i, o] = a(c.current.items, n);
68
+ d = (r.includes(t) ? [...r] : [t]).filter((e) => {
69
+ let t = c.current.items.findIndex((t) => t.id === e);
70
+ return t >= i && t < o;
71
+ }), m = p(e.clientY, n), f({
72
+ draggedIds: d,
73
+ targetIndex: m
74
+ });
75
+ },
76
+ onMove: (e) => {
77
+ let t = p(e.clientY, n);
78
+ t !== m && (m = t, f({
79
+ draggedIds: d,
80
+ targetIndex: m
81
+ }));
82
+ },
83
+ onCommit: (e) => {
84
+ let t = p(e.clientY, n);
85
+ o(c.current.items, d, t) || c.current.onReorder(d, t), h();
86
+ },
87
+ onClick: () => {
88
+ c.current.onPress?.(t, s), h();
89
+ },
90
+ onCancel: h
91
+ });
92
+ }, [p, h]);
93
+ return {
94
+ rowProps: (e, t) => ({ onPointerDown: (n) => g(e, t, n) }),
95
+ containerProps: { ref: m },
96
+ state: d
97
+ };
98
+ }
99
+ //#endregion
100
+ export { s as t };
101
+
102
+ //# sourceMappingURL=useReorderDragList-C2fhvbU1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReorderDragList-C2fhvbU1.js","names":[],"sources":["../../src/useReorderDragList.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { ReactNode, PointerEvent as ReactPointerEvent, RefCallback } from 'react';\nimport { startThresholdDrag, type ThresholdDragHandle } from '@weasel-js/core';\n\n/** One row in a reorderable list. */\nexport interface LayerListItem {\n id: string;\n label: ReactNode;\n /** Locked rows cannot be dragged, cannot be crossed by drops, and\n * never combine with other rows in a multi-selection. */\n locked?: boolean;\n /** Optional color swatch rendered before the label. Any CSS color string. */\n swatch?: string;\n}\n\n/**\n * Options for {@link useReorderDragList}. `onReorder` receives the dragged ids\n * and the index they were dropped at, measured against the pre-drag `items`.\n */\nexport interface UseReorderDragListOptions {\n items: LayerListItem[];\n selectedIds: string[];\n onReorder(ids: string[], targetIndex: number): void;\n /** A press that was released without ever engaging a drag — the click a\n * list row means by it. Fires for locked rows too, which can be selected\n * but not dragged. Modifiers are read at press, not at release. */\n onPress?(id: string, mods: PressModifiers): void;\n /** Pointer-move distance (px) before pending drag engages. Default 4. */\n threshold?: number;\n}\n\n/** Modifier keys held when a press began. */\nexport interface PressModifiers {\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n}\n\n/**\n * Live drag state for rendering feedback: which ids are being dragged and the\n * insertion index the drop would use. Both `null` when no drag is engaged.\n */\nexport interface ReorderDragState {\n draggedIds: string[] | null;\n targetIndex: number | null;\n}\n\n/**\n * A `ref` for the list container, an `onPointerDown` for each row, and the\n * live {@link ReorderDragState}. The container ref is required, not optional\n * decoration: it is what the drop index is measured against and what the\n * pointer session is opened on.\n */\nexport interface ReorderDragHandlers {\n rowProps(id: string, index: number): { onPointerDown(e: ReactPointerEvent): void };\n containerProps: {\n ref: RefCallback<HTMLElement>;\n };\n state: ReorderDragState;\n}\n\n/**\n * The half-open run of indices a row at `sourceIndex` may be dropped into:\n * bounded by the nearest locked row above and below it, so a locked row is a\n * wall in both directions rather than a global ceiling.\n */\nfunction unlockedSegment(items: readonly LayerListItem[], sourceIndex: number): [number, number] {\n let lo = 0;\n for (let i = sourceIndex - 1; i >= 0; i--) {\n if (items[i]?.locked) { lo = i + 1; break; }\n }\n let hi = items.length;\n for (let i = sourceIndex + 1; i < items.length; i++) {\n if (items[i]?.locked) { hi = i; break; }\n }\n return [lo, hi];\n}\n\n/** Would dropping `draggedIds` at `targetIndex` leave a contiguous block where it already is? */\nfunction isNoopDrop(items: readonly LayerListItem[], draggedIds: readonly string[], targetIndex: number): boolean {\n const indices = draggedIds\n .map((id) => items.findIndex((it) => it.id === id))\n .filter((i) => i >= 0)\n .sort((a, b) => a - b);\n const contiguous =\n indices.length > 0 &&\n indices.every((v, i) => {\n if (i === 0) return true;\n const prev = indices[i - 1];\n return prev !== undefined && v === prev + 1;\n });\n const first = indices[0];\n const last = indices[indices.length - 1];\n return contiguous\n && first !== undefined\n && last !== undefined\n && targetIndex >= first\n && targetIndex <= last + 1;\n}\n\n/**\n * Drag-to-reorder for a vertical list of rows. Dragging a row that is part of\n * the current selection drags the whole selection; dragging any other row\n * drags just that row. Locked rows can neither be dragged nor crossed by a\n * drop. A drop that would leave a contiguous block where it already is does\n * not call `onReorder`.\n *\n * A press opens a `startThresholdDrag` on the *container*, which owns the\n * rest of the gesture: a drag that leaves the list still tracks, a release\n * anywhere still drops, and a release the window never delivered still ends\n * the drag. The container is the origin rather than the row because rows come\n * and go as the list re-renders, and a drag must outlive the row it grabbed.\n */\nexport function useReorderDragList(opts: UseReorderDragListOptions): ReorderDragHandlers {\n const optsRef = useRef(opts);\n optsRef.current = opts;\n const containerRef = useRef<HTMLElement | null>(null);\n const dragRef = useRef<ThresholdDragHandle | null>(null);\n const [state, setState] = useState<ReorderDragState>({ draggedIds: null, targetIndex: null });\n\n useEffect(() => () => { dragRef.current?.cancel(); }, []);\n\n const computeTargetIndex = useCallback((clientY: number, sourceIndex: number): number => {\n const [lo, hi] = unlockedSegment(optsRef.current.items, sourceIndex);\n const c = containerRef.current;\n if (!c) return lo;\n const rows = Array.from(c.children) as HTMLElement[];\n let raw = rows.length;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (!row) continue;\n const r = row.getBoundingClientRect();\n if (clientY < r.bottom) { raw = i; break; }\n }\n return Math.max(lo, Math.min(raw, hi));\n }, []);\n\n const refCb = useCallback<RefCallback<HTMLElement>>((el) => {\n containerRef.current = el;\n }, []);\n\n const reset = useCallback(() => {\n dragRef.current = null;\n setState({ draggedIds: null, targetIndex: null });\n }, []);\n\n const onPointerDownRow = useCallback((id: string, index: number, e: ReactPointerEvent) => {\n const container = containerRef.current;\n if (!container || dragRef.current) return;\n\n const mods: PressModifiers = {\n shiftKey: e.shiftKey, ctrlKey: e.ctrlKey, metaKey: e.metaKey, altKey: e.altKey,\n };\n let draggedIds: string[] = [];\n let targetIndex = 0;\n\n dragRef.current = startThresholdDrag(e, {\n origin: container,\n // A locked row still opens a drag so its release reaches `onPress`, and\n // a threshold nothing can cross is what keeps it from ever engaging.\n threshold: optsRef.current.items[index]?.locked\n ? Number.POSITIVE_INFINITY\n : (optsRef.current.threshold ?? 4),\n onActivate: (ev) => {\n const selected = optsRef.current.selectedIds;\n const [lo, hi] = unlockedSegment(optsRef.current.items, index);\n draggedIds = (selected.includes(id) ? [...selected] : [id]).filter((x) => {\n const i = optsRef.current.items.findIndex((it) => it.id === x);\n return i >= lo && i < hi;\n });\n targetIndex = computeTargetIndex(ev.clientY, index);\n setState({ draggedIds, targetIndex });\n },\n onMove: (ev) => {\n const next = computeTargetIndex(ev.clientY, index);\n if (next === targetIndex) return;\n targetIndex = next;\n setState({ draggedIds, targetIndex });\n },\n onCommit: (ev) => {\n const drop = computeTargetIndex(ev.clientY, index);\n if (!isNoopDrop(optsRef.current.items, draggedIds, drop)) {\n optsRef.current.onReorder(draggedIds, drop);\n }\n reset();\n },\n onClick: () => {\n optsRef.current.onPress?.(id, mods);\n reset();\n },\n // Every cancel reason — the browser's, a lost capture, an unmount —\n // says the gesture was interrupted rather than aimed, so the rows stay\n // where they were.\n onCancel: reset,\n });\n }, [computeTargetIndex, reset]);\n\n return {\n rowProps: (id, index) => ({\n onPointerDown: (e) => onPointerDownRow(id, index, e),\n }),\n containerProps: {\n ref: refCb,\n },\n state,\n };\n}\n"],"mappings":";;;AAmEA,SAAS,EAAgB,GAAiC,GAAuC;CAC/F,IAAI,IAAK;AACT,MAAK,IAAI,IAAI,IAAc,GAAG,KAAK,GAAG,IACpC,KAAI,EAAM,IAAI,QAAQ;AAAE,MAAK,IAAI;AAAG;;CAEtC,IAAI,IAAK,EAAM;AACf,MAAK,IAAI,IAAI,IAAc,GAAG,IAAI,EAAM,QAAQ,IAC9C,KAAI,EAAM,IAAI,QAAQ;AAAE,MAAK;AAAG;;AAElC,QAAO,CAAC,GAAI,EAAG;;AAIjB,SAAS,EAAW,GAAiC,GAA+B,GAA8B;CAChH,IAAM,IAAU,EACb,KAAK,MAAO,EAAM,WAAW,MAAO,EAAG,OAAO,EAAG,CAAC,CAClD,QAAQ,MAAM,KAAK,EAAE,CACrB,MAAM,GAAG,MAAM,IAAI,EAAE,EAClB,IACJ,EAAQ,SAAS,KACjB,EAAQ,OAAO,GAAG,MAAM;AACtB,MAAI,MAAM,EAAG,QAAO;EACpB,IAAM,IAAO,EAAQ,IAAI;AACzB,SAAO,MAAS,KAAA,KAAa,MAAM,IAAO;GAC1C,EACE,IAAQ,EAAQ,IAChB,IAAO,EAAQ,EAAQ,SAAS;AACtC,QAAO,KACF,MAAU,KAAA,KACV,MAAS,KAAA,KACT,KAAe,KACf,KAAe,IAAO;;AAgB7B,SAAgB,EAAmB,GAAsD;CACvF,IAAM,IAAU,EAAO,EAAK;AAC5B,GAAQ,UAAU;CAClB,IAAM,IAAe,EAA2B,KAAK,EAC/C,IAAU,EAAmC,KAAK,EAClD,CAAC,GAAO,KAAY,EAA2B;EAAE,YAAY;EAAM,aAAa;EAAM,CAAC;AAE7F,eAAsB;AAAE,IAAQ,SAAS,QAAQ;IAAK,EAAE,CAAC;CAEzD,IAAM,IAAqB,GAAa,GAAiB,MAAgC;EACvF,IAAM,CAAC,GAAI,KAAM,EAAgB,EAAQ,QAAQ,OAAO,EAAY,EAC9D,IAAI,EAAa;AACvB,MAAI,CAAC,EAAG,QAAO;EACf,IAAM,IAAO,MAAM,KAAK,EAAE,SAAS,EAC/B,IAAM,EAAK;AACf,OAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK;GACpC,IAAM,IAAM,EAAK;AACZ,YAED,IADM,EAAI,uBACA,CAAE,QAAQ;AAAE,QAAM;AAAG;;;AAErC,SAAO,KAAK,IAAI,GAAI,KAAK,IAAI,GAAK,EAAG,CAAC;IACrC,EAAE,CAAC,EAEA,IAAQ,GAAuC,MAAO;AAC1D,IAAa,UAAU;IACtB,EAAE,CAAC,EAEA,IAAQ,QAAkB;AAE9B,EADA,EAAQ,UAAU,MAClB,EAAS;GAAE,YAAY;GAAM,aAAa;GAAM,CAAC;IAChD,EAAE,CAAC,EAEA,IAAmB,GAAa,GAAY,GAAe,MAAyB;EACxF,IAAM,IAAY,EAAa;AAC/B,MAAI,CAAC,KAAa,EAAQ,QAAS;EAEnC,IAAM,IAAuB;GAC3B,UAAU,EAAE;GAAU,SAAS,EAAE;GAAS,SAAS,EAAE;GAAS,QAAQ,EAAE;GACzE,EACG,IAAuB,EAAE,EACzB,IAAc;AAElB,IAAQ,UAAU,EAAmB,GAAG;GACtC,QAAQ;GAGR,WAAW,EAAQ,QAAQ,MAAM,IAAQ,SACrC,WACC,EAAQ,QAAQ,aAAa;GAClC,aAAa,MAAO;IAClB,IAAM,IAAW,EAAQ,QAAQ,aAC3B,CAAC,GAAI,KAAM,EAAgB,EAAQ,QAAQ,OAAO,EAAM;AAM9D,IALA,KAAc,EAAS,SAAS,EAAG,GAAG,CAAC,GAAG,EAAS,GAAG,CAAC,EAAG,EAAE,QAAQ,MAAM;KACxE,IAAM,IAAI,EAAQ,QAAQ,MAAM,WAAW,MAAO,EAAG,OAAO,EAAE;AAC9D,YAAO,KAAK,KAAM,IAAI;MACtB,EACF,IAAc,EAAmB,EAAG,SAAS,EAAM,EACnD,EAAS;KAAE;KAAY;KAAa,CAAC;;GAEvC,SAAS,MAAO;IACd,IAAM,IAAO,EAAmB,EAAG,SAAS,EAAM;AAC9C,UAAS,MACb,IAAc,GACd,EAAS;KAAE;KAAY;KAAa,CAAC;;GAEvC,WAAW,MAAO;IAChB,IAAM,IAAO,EAAmB,EAAG,SAAS,EAAM;AAIlD,IAHK,EAAW,EAAQ,QAAQ,OAAO,GAAY,EAAK,IACtD,EAAQ,QAAQ,UAAU,GAAY,EAAK,EAE7C,GAAO;;GAET,eAAe;AAEb,IADA,EAAQ,QAAQ,UAAU,GAAI,EAAK,EACnC,GAAO;;GAKT,UAAU;GACX,CAAC;IACD,CAAC,GAAoB,EAAM,CAAC;AAE/B,QAAO;EACL,WAAW,GAAI,OAAW,EACxB,gBAAgB,MAAM,EAAiB,GAAI,GAAO,EAAE,EACrD;EACD,gBAAgB,EACd,KAAK,GACN;EACD;EACD"}
@@ -62,4 +62,4 @@ function a(a) {
62
62
  //#endregion
63
63
  export { a as t };
64
64
 
65
- //# sourceMappingURL=useRovingTabIndex-ByjY4lnw.js.map
65
+ //# sourceMappingURL=useRovingTabIndex-DqXFNDaD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRovingTabIndex-ByjY4lnw.js","names":[],"sources":["../../src/useRovingTabIndex.ts"],"sourcesContent":["import { useRef, type KeyboardEvent as ReactKeyboardEvent, type RefObject } from 'react';\n\n/** The only thing the hook needs to know about a bar's items: which are\n * skipped by arrow navigation. */\nexport type RovingItem = { disabled?: boolean };\n\n/** Options for {@link useRovingTabIndex}. */\nexport type UseRovingTabIndexOptions = {\n /** In the same order as the elements carrying `itemClassName`. */\n items: readonly RovingItem[];\n /** Class on the focusable element of each item, inside the container the\n * returned `rootRef` is attached to. Their DOM order must match `items`. */\n itemClassName: string;\n /** Index that carries `tabIndex=0`. Defaults to the first enabled item; a\n * radiogroup-style bar passes its selected index so Tab lands on the\n * current value. */\n tabStopIndex?: number;\n /** Called with the new index as arrow/Home/End focus moves, before focus\n * moves. This is where a selection-follows-focus bar commits the value. */\n onNavigate?: (index: number) => void;\n /** Space/Enter on the item at `index`. When omitted the keypress is left\n * alone, which on a native `<button>` produces an ordinary click. */\n onActivate?: (index: number) => void;\n};\n\n/**\n * What {@link useRovingTabIndex} returns: a container ref plus the per-item\n * `tabIndex` and `onKeyDown` values to spread onto each item.\n */\nexport type RovingTabIndex<T extends HTMLElement = HTMLDivElement> = {\n /** Attach to the container element that holds the items. */\n rootRef: RefObject<T | null>;\n /** `tabIndex` value for the item at `index`. */\n tabIndexFor: (index: number) => 0 | -1;\n /** `onKeyDown` for the item at `index`. */\n onKeyDown: (index: number) => (e: ReactKeyboardEvent<HTMLElement>) => void;\n};\n\nfunction firstEnabledIndex(items: readonly RovingItem[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly RovingItem[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly RovingItem[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly RovingItem[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\n/**\n * Roving tabindex for a bar of items: one item is in the tab order, and the\n * arrow keys move focus among the rest, skipping disabled ones and wrapping\n * at both ends. Home and End go to the first and last enabled item. Both axes\n * navigate, so the same bar works laid out either way.\n *\n * Backs `ActionsBar`, `OptionsBar`, and `ToggleBar`.\n *\n * **When a bar should not use this.** Only when the bar owns its items. A\n * container of arbitrary compound controls — a number field, a select, a\n * color field — must leave the arrow keys alone, because those controls edit\n * their own value with them; taking the arrows over would break the control\n * to navigate between controls. `ToolOptionsBar` is that case and keeps plain\n * DOM tab order. A bar whose items are all simple buttons is the case this\n * hook is for.\n *\n * With every item disabled there is no tab stop and the bar drops out of the\n * tab order entirely.\n */\nexport function useRovingTabIndex<T extends HTMLElement = HTMLDivElement>(\n options: UseRovingTabIndexOptions,\n): RovingTabIndex<T> {\n const { items, itemClassName, onNavigate, onActivate } = options;\n const rootRef = useRef<T | null>(null);\n\n const tabStopIndex = options.tabStopIndex ?? firstEnabledIndex(items);\n\n const focusItem = (index: number): void => {\n const root = rootRef.current;\n if (!root) return;\n const elements = root.querySelectorAll<HTMLElement>(`.${itemClassName}`);\n elements[index]?.focus();\n };\n\n const onKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLElement>): void => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n if (onActivate) {\n e.preventDefault();\n onActivate(index);\n }\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n onNavigate?.(nextIndex);\n focusItem(nextIndex);\n };\n\n return {\n rootRef,\n tabIndexFor: (index: number) => (index === tabStopIndex ? 0 : -1),\n onKeyDown,\n };\n}\n"],"mappings":";;AAsCA,SAAS,EAAkB,GAAsC;AAC/D,MAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,IAAK,KAAI,CAAC,EAAM,GAAG,SAAU,QAAO;AACtE,QAAO;;AAGT,SAAS,EAAiB,GAAsC;AAC9D,MAAK,IAAI,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,CAAC,EAAM,GAAG,SAAU,QAAO;AAC3E,QAAO;;AAGT,SAAS,EAAiB,GAA8B,GAAsB;CAC5E,IAAM,IAAI,EAAM;AAChB,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC3B,IAAM,KAAK,IAAO,IAAI,KAAK;AAC3B,MAAI,CAAC,EAAM,GAAG,SAAU,QAAO;;AAEjC,QAAO;;AAGT,SAAS,EAAiB,GAA8B,GAAsB;CAC5E,IAAM,IAAI,EAAM;AAChB,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC3B,IAAM,KAAK,IAAO,IAAI,KAAK;AAC3B,MAAI,CAAC,EAAM,GAAG,SAAU,QAAO;;AAEjC,QAAO;;AAsBT,SAAgB,EACd,GACmB;CACnB,IAAM,EAAE,UAAO,kBAAe,eAAY,kBAAe,GACnD,IAAU,EAAiB,KAAK,EAEhC,IAAe,EAAQ,gBAAgB,EAAkB,EAAM,EAE/D,KAAa,MAAwB;EACzC,IAAM,IAAO,EAAQ;AAChB,OACY,EAAK,iBAA8B,IAAI,IACxD,CAAS,IAAQ,OAAO;;AAoC1B,QAAO;EACL;EACA,cAAc,MAAmB,MAAU,IAAe,IAAI;EAC9D,YApCiB,OAAmB,MAA6C;GACjF,IAAI,IAAY;AAChB,WAAQ,EAAE,KAAV;IACE,KAAK;IACL,KAAK;AACH,SAAY,EAAiB,GAAO,EAAM;AAC1C;IACF,KAAK;IACL,KAAK;AACH,SAAY,EAAiB,GAAO,EAAM;AAC1C;IACF,KAAK;AACH,SAAY,EAAkB,EAAM;AACpC;IACF,KAAK;AACH,SAAY,EAAiB,EAAM;AACnC;IACF,KAAK;IACL,KAAK;AACH,KAAI,MACF,EAAE,gBAAgB,EAClB,EAAW,EAAM;AAEnB;IACF,QACE;;AAEA,OAAY,KAAK,MAAc,MACnC,EAAE,gBAAgB,EAClB,IAAa,EAAU,EACvB,EAAU,EAAU;;EAOrB"}
1
+ {"version":3,"file":"useRovingTabIndex-DqXFNDaD.js","names":[],"sources":["../../src/useRovingTabIndex.ts"],"sourcesContent":["import { useRef, type KeyboardEvent as ReactKeyboardEvent, type RefObject } from 'react';\n\n/** The only thing the hook needs to know about a bar's items: which are\n * skipped by arrow navigation. */\nexport type RovingItem = { disabled?: boolean };\n\n/** Options for {@link useRovingTabIndex}. */\nexport type UseRovingTabIndexOptions = {\n /** In the same order as the elements carrying `itemClassName`. */\n items: readonly RovingItem[];\n /** Class on the focusable element of each item, inside the container the\n * returned `rootRef` is attached to. Their DOM order must match `items`. */\n itemClassName: string;\n /** Index that carries `tabIndex=0`. Defaults to the first enabled item; a\n * radiogroup-style bar passes its selected index so Tab lands on the\n * current value. */\n tabStopIndex?: number;\n /** Called with the new index as arrow/Home/End focus moves, before focus\n * moves. This is where a selection-follows-focus bar commits the value. */\n onNavigate?: (index: number) => void;\n /** Space/Enter on the item at `index`. When omitted the keypress is left\n * alone, which on a native `<button>` produces an ordinary click. */\n onActivate?: (index: number) => void;\n};\n\n/**\n * What {@link useRovingTabIndex} returns: a container ref plus the per-item\n * `tabIndex` and `onKeyDown` values to spread onto each item.\n */\nexport type RovingTabIndex<T extends HTMLElement = HTMLDivElement> = {\n /** Attach to the container element that holds the items. */\n rootRef: RefObject<T | null>;\n /** `tabIndex` value for the item at `index`. */\n tabIndexFor: (index: number) => 0 | -1;\n /** `onKeyDown` for the item at `index`. */\n onKeyDown: (index: number) => (e: ReactKeyboardEvent<HTMLElement>) => void;\n};\n\nfunction firstEnabledIndex(items: readonly RovingItem[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly RovingItem[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly RovingItem[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly RovingItem[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\n/**\n * Roving tabindex for a bar of items: one item is in the tab order, and the\n * arrow keys move focus among the rest, skipping disabled ones and wrapping\n * at both ends. Home and End go to the first and last enabled item. Both axes\n * navigate, so the same bar works laid out either way.\n *\n * Backs `ActionsBar`, `OptionsBar`, and `ToggleBar`.\n *\n * **When a bar should not use this.** Only when the bar owns its items. A\n * container of arbitrary compound controls — a number field, a select, a\n * color field — must leave the arrow keys alone, because those controls edit\n * their own value with them; taking the arrows over would break the control\n * to navigate between controls. `ToolOptionsBar` is that case and keeps plain\n * DOM tab order. A bar whose items are all simple buttons is the case this\n * hook is for.\n *\n * With every item disabled there is no tab stop and the bar drops out of the\n * tab order entirely.\n */\nexport function useRovingTabIndex<T extends HTMLElement = HTMLDivElement>(\n options: UseRovingTabIndexOptions,\n): RovingTabIndex<T> {\n const { items, itemClassName, onNavigate, onActivate } = options;\n const rootRef = useRef<T | null>(null);\n\n const tabStopIndex = options.tabStopIndex ?? firstEnabledIndex(items);\n\n const focusItem = (index: number): void => {\n const root = rootRef.current;\n if (!root) return;\n const elements = root.querySelectorAll<HTMLElement>(`.${itemClassName}`);\n elements[index]?.focus();\n };\n\n const onKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLElement>): void => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n if (onActivate) {\n e.preventDefault();\n onActivate(index);\n }\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n onNavigate?.(nextIndex);\n focusItem(nextIndex);\n };\n\n return {\n rootRef,\n tabIndexFor: (index: number) => (index === tabStopIndex ? 0 : -1),\n onKeyDown,\n };\n}\n"],"mappings":";;AAsCA,SAAS,EAAkB,GAAsC;AAC/D,MAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,IAAK,KAAI,CAAC,EAAM,GAAG,SAAU,QAAO;AACtE,QAAO;;AAGT,SAAS,EAAiB,GAAsC;AAC9D,MAAK,IAAI,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,CAAC,EAAM,GAAG,SAAU,QAAO;AAC3E,QAAO;;AAGT,SAAS,EAAiB,GAA8B,GAAsB;CAC5E,IAAM,IAAI,EAAM;AAChB,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC3B,IAAM,KAAK,IAAO,IAAI,KAAK;AAC3B,MAAI,CAAC,EAAM,GAAG,SAAU,QAAO;;AAEjC,QAAO;;AAGT,SAAS,EAAiB,GAA8B,GAAsB;CAC5E,IAAM,IAAI,EAAM;AAChB,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC3B,IAAM,KAAK,IAAO,IAAI,KAAK;AAC3B,MAAI,CAAC,EAAM,GAAG,SAAU,QAAO;;AAEjC,QAAO;;AAsBT,SAAgB,EACd,GACmB;CACnB,IAAM,EAAE,UAAO,kBAAe,eAAY,kBAAe,GACnD,IAAU,EAAiB,KAAK,EAEhC,IAAe,EAAQ,gBAAgB,EAAkB,EAAM,EAE/D,KAAa,MAAwB;EACzC,IAAM,IAAO,EAAQ;AAChB,OACY,EAAK,iBAA8B,IAAI,IACxD,CAAS,IAAQ,OAAO;;AAoC1B,QAAO;EACL;EACA,cAAc,MAAmB,MAAU,IAAe,IAAI;EAC9D,YApCiB,OAAmB,MAA6C;GACjF,IAAI,IAAY;AAChB,WAAQ,EAAE,KAAV;IACE,KAAK;IACL,KAAK;AACH,SAAY,EAAiB,GAAO,EAAM;AAC1C;IACF,KAAK;IACL,KAAK;AACH,SAAY,EAAiB,GAAO,EAAM;AAC1C;IACF,KAAK;AACH,SAAY,EAAkB,EAAM;AACpC;IACF,KAAK;AACH,SAAY,EAAiB,EAAM;AACnC;IACF,KAAK;IACL,KAAK;AACH,KAAI,MACF,EAAE,gBAAgB,EAClB,EAAW,EAAM;AAEnB;IACF,QACE;;AAEA,OAAY,KAAK,MAAc,MACnC,EAAE,gBAAgB,EAClB,IAAa,EAAU,EACvB,EAAU,EAAU;;EAOrB"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ActionsBar-B-gWm0NE.js";
1
+ import { t as e } from "../../chunks/ActionsBar-C2oXIJk-.js";
2
2
  export { e as ActionsBar };
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAGhH,OAAO,EAAU,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAW,KAAK,UAAU,EAAoB,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE9E,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;wCAEoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/B,+GAA+G;IAC/G,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,mGAAmG;IACnG,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,oEAAoE;IACpE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;iFAC6E;IAC7E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,iBAAiB,GAAG;KACtB,CAAC,IAAI,UAAU,GAAG,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAAE;CACrF,CAAC,UAAU,CAAC,CAAC;AAEd;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAS3C;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,2CA8QtC"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAG/F,OAAO,EAAU,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAW,KAAK,UAAU,EAAoB,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG9E,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;wCAEoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/B,+GAA+G;IAC/G,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,mGAAmG;IACnG,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,oEAAoE;IACpE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;iFAC6E;IAC7E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,iBAAiB,GAAG;KACtB,CAAC,IAAI,UAAU,GAAG,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAAE;CACrF,CAAC,UAAU,CAAC,CAAC;AAEd;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAS3C;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,2CAgQtC"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Badge-BXTDs-zi.js";
1
+ import { t as e } from "../../chunks/Badge-7yQseqZb.js";
2
2
  export { e as Badge };
@@ -1 +1 @@
1
- {"version":3,"file":"Perforated.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/shapes/Perforated.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwED,QAAA,MAAM,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAK7C,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"Perforated.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/shapes/Perforated.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0DD,QAAA,MAAM,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAK7C,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Shield.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/shapes/Shield.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA6DD,QAAA,MAAM,MAAM,EAAE,WAAW,CAAC,YAAY,CAKrC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Shield.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/shapes/Shield.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+CD,QAAA,MAAM,MAAM,EAAE,WAAW,CAAC,YAAY,CAKrC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type RefObject } from 'react';
2
+ /**
3
+ * Live CSS-pixel size of the SVG `ref`'s element belongs to; an outermost `<svg>` is its own.
4
+ * `when` both gates the measurement and re-measures whenever its identity changes.
5
+ */
6
+ export declare function useSvgBox(ref: RefObject<SVGElement | null>, when?: unknown): {
7
+ w: number;
8
+ h: number;
9
+ };
10
+ //# sourceMappingURL=useSvgBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSvgBox.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/useSvgBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,IAAI,GAAE,OAAc,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAmB3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"BandEditor.d.ts","sourceRoot":"","sources":["../../../src/components/BandEditor/BandEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAWL,KAAK,IAAI,EACV,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAEhC,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,2EAA2E;IAC3E,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjB,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,sDAAsD;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACrC,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IAC5C,0FAA0F;IAC1F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CA6NrE"}
1
+ {"version":3,"file":"BandEditor.d.ts","sourceRoot":"","sources":["../../../src/components/BandEditor/BandEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAWL,KAAK,IAAI,EACV,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAEhC,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,2EAA2E;IAC3E,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjB,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,sDAAsD;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACrC,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IAC5C,0FAA0F;IAC1F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CA0NrE"}
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../../chunks/BandEditor-CfLW44uR.js";
1
+ import { n as e, r as t, t as n } from "../../chunks/BandEditor-CqiMlSF9.js";
2
2
  export { n as BandEditor, e as linearScale, t as logScale };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Callout-wRyevt8I.js";
1
+ import { n as e, t } from "../../chunks/Callout-63z0T-w3.js";
2
2
  export { t as Callout, e as CalloutTrigger };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Checkbox-D_GCnoJ0.js";
1
+ import { t as e } from "../../chunks/Checkbox-CkcngYWa.js";
2
2
  export { e as Checkbox };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ColorField-pEkaSppg.js";
1
+ import { t as e } from "../../chunks/ColorField-CCBSv8dp.js";
2
2
  export { e as ColorField };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/ComboBox-inno5gt1.js";
1
+ import { n as e, t } from "../../chunks/ComboBox-TnIrRldB.js";
2
2
  export { t as ComboBox, e as ComboBoxItem };
@@ -1 +1 @@
1
- {"version":3,"file":"LayeredCurveEditor.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/LayeredCurveEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAGlB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAOnB,OAAO,KAAK,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;CACV;AAED,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC;2EACuE;IACvE,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7C;+CAC2C;IAC3C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAE/C;;0CAEsC;IACtC,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAE/D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IAEnC;;;mCAG+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;qCAEiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CA0UhE"}
1
+ {"version":3,"file":"LayeredCurveEditor.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/LayeredCurveEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAGlB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAOnB,OAAO,KAAK,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;CACV;AAED,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC;2EACuE;IACvE,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7C;+CAC2C;IAC3C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAE/C;;0CAEsC;IACtC,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAE/D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IAEnC;;;mCAG+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;qCAEiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAqBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAyUhE"}
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/CurveEditor-Cpuvl_iN.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/CurveEditor-BNbP2wgq.js";
2
2
  export { n as CurveEditor, i as LayeredCurveEditor, t as createFunctionLayer, a as createSetCurveOp, e as functionLayerState, r as sampleByInterpolation };
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,kEAAkE;IAClE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa,CAAC,GAAG,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACvD,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;IACrB,OAAO,EAAE,SAAS,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,oEAAoE;IACpE,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;IAC9D;yEACqE;IACrE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,2CAA2C;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,2CAqH7E"}
1
+ {"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,kEAAkE;IAClE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa,CAAC,GAAG,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACvD,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;IACrB,OAAO,EAAE,SAAS,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,oEAAoE;IACpE,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;IAC9D;yEACqE;IACrE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,2CAA2C;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,2CAkH7E"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/DataGrid-BWZZUekH.js";
1
+ import { t as e } from "../../chunks/DataGrid-CiJGbgok.js";
2
2
  export { e as DataGrid };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/DetentSlider--tQdVQj_.js";
1
+ import { t as e } from "../../chunks/DetentSlider-C6RTsiPi.js";
2
2
  export { e as DetentSlider };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Dialog-CX2B8PIp.js";
1
+ import { t as e } from "../../chunks/Dialog-D8pVzsw8.js";
2
2
  export { e as Dialog };
@@ -0,0 +1,64 @@
1
+ import type { ReactNode } from 'react';
2
+ /** Which way the mark points when the section is closed. */
3
+ export type DisclosureDirection = 'right' | 'down';
4
+ /** Props for `<Disclosure>`. */
5
+ export interface DisclosureProps {
6
+ /** Whether the section it controls is open. The consumer owns this. */
7
+ open: boolean;
8
+ onToggle: () => void;
9
+ /**
10
+ * Names the section, for a screen reader. The control has no text of its
11
+ * own, so without this it announces as an unlabeled button.
12
+ */
13
+ label: string;
14
+ /**
15
+ * `id` of the element this expands. Sets `aria-controls`, which lets a
16
+ * screen reader move to the revealed content.
17
+ */
18
+ controls?: string;
19
+ /** Which way the closed mark points. `'right'` (default) rotates down when
20
+ * open; `'down'` rotates up. */
21
+ direction?: DisclosureDirection;
22
+ /** Mark size in px. The hit target is at least 20px and grows with it.
23
+ * Default 12. */
24
+ size?: number;
25
+ disabled?: boolean;
26
+ className?: string;
27
+ }
28
+ /**
29
+ * The twisty on a collapsible section: a triangle that turns as it opens.
30
+ *
31
+ * Presentational — it holds no open/closed state and renders no children.
32
+ * The consumer owns the state and the panel; this is the control that toggles
33
+ * it, and `aria-expanded` is what ties the two together.
34
+ *
35
+ * Three things it settles that a hand-rolled twisty keeps getting wrong. The
36
+ * mark is drawn rather than typed, because `--wzl-font-ui` carries no ▸/▾ and
37
+ * a text glyph falls back to whatever the system offers at whatever size that
38
+ * font renders it — around 6px against 13px body text, which reads as dirt on
39
+ * the screen. The hit target is larger than the mark. And it is a sibling of
40
+ * the row's label rather than a child, so clicking to expand does not actuate
41
+ * the label's own control.
42
+ *
43
+ * Deliberately not part of the icon register, on the same grounds as
44
+ * `DragHandleGlyph`: that register is outline strokes at a fixed weight, and
45
+ * `base.mjs` rejects a solid triangle in it by name. A disclosure mark is
46
+ * filled.
47
+ */
48
+ export declare function Disclosure({ open, onToggle, label, controls, direction, size, disabled, className, }: DisclosureProps): import("react/jsx-runtime").JSX.Element;
49
+ /** Props for `<DisclosureRow>`. */
50
+ export interface DisclosureRowProps extends Omit<DisclosureProps, 'className'> {
51
+ /** The row's own content — a label, a checkbox, a count. */
52
+ children: ReactNode;
53
+ className?: string;
54
+ }
55
+ /**
56
+ * A `<Disclosure>` and a row of content beside it, laid out so the twisty
57
+ * leads and the content takes the rest.
58
+ *
59
+ * The layout is the point: the twisty sits *outside* whatever the row puts in
60
+ * it, so a row whose content is a `<label>` wrapping a checkbox stays
61
+ * clickable as a label without the twisty actuating it.
62
+ */
63
+ export declare function DisclosureRow({ children, className, ...twisty }: DisclosureRowProps): import("react/jsx-runtime").JSX.Element;
64
+ //# sourceMappingURL=Disclosure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disclosure.d.ts","sourceRoot":"","sources":["../../../src/components/Disclosure/Disclosure.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnD,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;qCACiC;IACjC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC;sBACkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAmB,EACnB,IAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE,eAAe,2CA0BjB;AAED,mCAAmC;AACnC,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC;IAC5E,4DAA4D;IAC5D,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,kBAAkB,2CAOnF"}
@@ -0,0 +1,3 @@
1
+ export { Disclosure, DisclosureRow } from './Disclosure';
2
+ export type { DisclosureDirection, DisclosureProps, DisclosureRowProps, } from './Disclosure';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Disclosure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { n as e, t } from "../../chunks/Disclosure-aSX2CZlw.js";
2
+ export { t as Disclosure, e as DisclosureRow };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/DragHandleGlyph--2zsZzA2.js";
1
+ import { t as e } from "../../chunks/DragHandleGlyph-C6GJyfnm.js";
2
2
  export { e as DragHandleGlyph };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Field-Bc6Nuc3p.js";
1
+ import { n as e, t } from "../../chunks/Field-BUroh92b.js";
2
2
  export { t as Field, e as fieldClasses };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/FontFamilySelect-CvrXKVwv.js";
1
+ import { t as e } from "../../chunks/FontFamilySelect-xjOHQMsK.js";
2
2
  export { e as FontFamilySelect };
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../../chunks/GradientEditor-C5pPbMa_.js";
1
+ import { n as e, r as t, t as n } from "../../chunks/GradientEditor-D1IVEkHO.js";
2
2
  export { t as GradientEditor, e as GradientHandles, n as SceneGradientHandles };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/InlineRange-CBt_SBsC.js";
1
+ import { t as e } from "../../chunks/InlineRange-DG2dvtb4.js";
2
2
  export { e as InlineRange };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Input-CSAECs_T.js";
1
+ import { t as e } from "../../chunks/Input-CxMANia3.js";
2
2
  export { e as Input };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ItemList-POiCvUDx.js";
1
+ import { t as e } from "../../chunks/ItemList-BcdHAah3.js";
2
2
  export { e as ItemList };
@@ -1,3 +1,3 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/Keycaps-DszN5Dwl.js";
2
- import { t as o } from "../../chunks/keyGlyph-BLFMKZgF.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/Keycaps-D-UGWDrt.js";
2
+ import { t as o } from "../../chunks/keyGlyph-L5bsDQe5.js";
3
3
  export { e as KeyCap, t as KeySequence, a as detectPlatform, r as inferKeycapKind, o as keyGlyph, n as keySpecFromKey, i as keySpecsFromMods };
@@ -6,8 +6,12 @@ export interface LayerStackItem {
6
6
  * common id-from-nextId conventions; string ids also work. */
7
7
  id: number | string;
8
8
  /** Short kind label rendered in the header when no primary select
9
- * is hoisted (e.g. "shadow", "stroke"). */
10
- kind: string;
9
+ * is hoisted (e.g. "shadow", "stroke"). Omit it for items that have no
10
+ * kind; `label` then names the card. */
11
+ kind?: string;
12
+ /** Header text, when the item's name is not its kind. Falls back to
13
+ * `kind`. */
14
+ label?: string;
11
15
  /** When present, hoist this select into the card header so the user
12
16
  * can switch mode/shape without expanding. */
13
17
  primaryValue?: string;
@@ -25,16 +29,25 @@ export interface LayerStackItem {
25
29
  }
26
30
  /** Props for `<LayerStack>`. */
27
31
  export interface LayerStackProps {
28
- title: string;
32
+ /** Heading above the list. Omit it, along with the palette, for a stack
33
+ * whose surroundings already name it. */
34
+ title?: string;
29
35
  items: LayerStackItem[];
30
- /** Kinds the user can add via the header palette. */
31
- paletteKinds: string[];
32
- onAdd: (kind: string) => void;
33
- onRemove: (id: number | string) => void;
36
+ /** Kinds the user can add via the header palette. Omit both this and
37
+ * `onAdd` for a stack the user cannot add to. */
38
+ paletteKinds?: string[];
39
+ onAdd?: (kind: string) => void;
40
+ /** Omit for items the user cannot remove; the card then has no ✕. */
41
+ onRemove?: (id: number | string) => void;
34
42
  onReorder: (orderedIds: Array<number | string>) => void;
35
- onPrimaryChange: (id: number | string, nextValue: string) => void;
43
+ /** Required for `primaryValue` to render as a select — without a handler
44
+ * the control could not be changed. */
45
+ onPrimaryChange?: (id: number | string, nextValue: string) => void;
36
46
  /** Render the body controls for each item. */
37
47
  renderBody: (item: LayerStackItem) => ReactNode;
48
+ /** Shown in place of the list when `items` is empty. Defaults to a line
49
+ * that points at the palette, or a bare one when there is no palette. */
50
+ emptyLabel?: ReactNode;
38
51
  /** Hide the title + palette row (used when an outer wrap renders its
39
52
  * own head — see speech-balloons Tails panel). */
40
53
  hideHead?: boolean;
@@ -45,5 +58,5 @@ export interface LayerStackProps {
45
58
  }
46
59
  /** A drag-reorderable stack of expandable cards, with a palette in the header
47
60
  * for adding more. The body of each card is the caller's to render. */
48
- export declare function LayerStack({ className, title, items, paletteKinds, onAdd, onRemove, onReorder, onPrimaryChange, renderBody, hideHead, }: LayerStackProps): import("react/jsx-runtime").JSX.Element;
61
+ export declare function LayerStack({ className, title, items, paletteKinds, onAdd, onRemove, onReorder, onPrimaryChange, renderBody, emptyLabel, hideHead, }: LayerStackProps): import("react/jsx-runtime").JSX.Element;
49
62
  //# sourceMappingURL=LayerStack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LayerStack.d.ts","sourceRoot":"","sources":["../../../src/components/LayerStack/LayerStack.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAyC,MAAM,OAAO,CAAC;AAMlG;uDACuD;AACvD,MAAM,WAAW,cAAc;IAC7B;mEAC+D;IAC/D,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB;gDAC4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb;mDAC+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;oCAEgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;sCAEkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACxD,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,8CAA8C;IAC9C,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IAChD;uDACmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;+BAE2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;wEACwE;AACxE,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,KAAK,EACL,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,EACV,QAAQ,GACT,EAAE,eAAe,2CAsJjB"}
1
+ {"version":3,"file":"LayerStack.d.ts","sourceRoot":"","sources":["../../../src/components/LayerStack/LayerStack.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAyC,MAAM,OAAO,CAAC;AAMlG;uDACuD;AACvD,MAAM,WAAW,cAAc;IAC7B;mEAC+D;IAC/D,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB;;6CAEyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;kBACc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;mDAC+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;oCAEgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;sCAEkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B;8CAC0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB;sDACkD;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACxD;4CACwC;IACxC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,8CAA8C;IAC9C,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IAChD;8EAC0E;IAC1E,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;uDACmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;+BAE2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;wEACwE;AACxE,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,KAAK,EACL,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,EACV,UAAU,EACV,QAAQ,GACT,EAAE,eAAe,2CA6JjB"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/LayerStack-htMwIsJ6.js";
1
+ import { t as e } from "../../chunks/LayerStack-DQnWSOVC.js";
2
2
  export { e as LayerStack };
@@ -13,6 +13,12 @@ export type NumberFieldProps = Omit<RACNumberFieldProps, 'children' | 'className
13
13
  /** Native input placeholder — e.g. `'Mixed'` for a multi-selection
14
14
  * editor with no shared value. */
15
15
  placeholder?: string;
16
+ /**
17
+ * `'fill'` (the default) takes the width of whatever row the field sits in.
18
+ * `'fit'` sizes it to `--wzl-number-field-width` (`9ch` by default) plus its
19
+ * own chrome, rather than to the input's 20-character intrinsic width.
20
+ */
21
+ width?: 'fill' | 'fit';
16
22
  className?: string;
17
23
  };
18
24
  /**
@@ -35,6 +41,12 @@ export declare const NumberField: import("react").ForwardRefExoticComponent<Omit
35
41
  /** Native input placeholder — e.g. `'Mixed'` for a multi-selection
36
42
  * editor with no shared value. */
37
43
  placeholder?: string;
44
+ /**
45
+ * `'fill'` (the default) takes the width of whatever row the field sits in.
46
+ * `'fit'` sizes it to `--wzl-number-field-width` (`9ch` by default) plus its
47
+ * own chrome, rather than to the input's 20-character intrinsic width.
48
+ */
49
+ width?: "fill" | "fit";
38
50
  className?: string;
39
51
  } & import("react").RefAttributes<HTMLInputElement>>;
40
52
  //# sourceMappingURL=NumberField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../../src/components/NumberField/NumberField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAC7D,OAAO,EAQL,KAAK,gBAAgB,IAAI,mBAAmB,EAC5C,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAI/B,iFAAiF;AACjF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IACnF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC;IAChE,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;qFACiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;uCACmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;YAtBd,SAAS;kBACH,SAAS;mBACR,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,KAAK,SAAS,CAAC;IAC/D,2DAA2D;mBAC5C,OAAO;IACtB;qFACiF;YACzE,OAAO;IACf;uCACmC;kBACrB,MAAM;gBACR,MAAM;oDAwClB,CAAC"}
1
+ {"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../../src/components/NumberField/NumberField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAC7D,OAAO,EAQL,KAAK,gBAAgB,IAAI,mBAAmB,EAC5C,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAI/B,iFAAiF;AACjF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IACnF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC;IAChE,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;qFACiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;uCACmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;YA5Bd,SAAS;kBACH,SAAS;mBACR,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,KAAK,SAAS,CAAC;IAC/D,2DAA2D;mBAC5C,OAAO;IACtB;qFACiF;YACzE,OAAO;IACf;uCACmC;kBACrB,MAAM;IACpB;;;;OAIG;YACK,MAAM,GAAG,KAAK;gBACV,MAAM;oDAmDlB,CAAC"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/NumberField-Byw1iaIJ.js";
1
+ import { t as e } from "../../chunks/NumberField-DLw4UmF3.js";
2
2
  export { e as NumberField };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/OptionsBar-efIwfqYe.js";
1
+ import { t as e } from "../../chunks/OptionsBar-BXyk_5gT.js";
2
2
  export { e as OptionsBar };