@weasel-js/ui 1.5.0 → 1.5.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 (341) hide show
  1. package/dist/chunks/{ActionBar-DxGp3WuZ.js → ActionBar-CLwiY3Jg.js} +5 -6
  2. package/dist/chunks/ActionBar-CLwiY3Jg.js.map +1 -0
  3. package/dist/chunks/{ActionsBar-D1VFreoj.js → ActionsBar-D84a4eGy.js} +2 -2
  4. package/dist/chunks/{ActionsBar-D1VFreoj.js.map → ActionsBar-D84a4eGy.js.map} +1 -1
  5. package/dist/chunks/{Badge-Bf8Rd1R6.js → Badge-CW9pBPFl.js} +5 -5
  6. package/dist/chunks/Badge-CW9pBPFl.js.map +1 -0
  7. package/dist/chunks/{BandEditor-BeWO56_w.js → BandEditor-jY-PFKY6.js} +103 -108
  8. package/dist/chunks/BandEditor-jY-PFKY6.js.map +1 -0
  9. package/dist/chunks/{Button-CExdkQcU.js → Button-DRSApvnK.js} +15 -15
  10. package/dist/chunks/Button-DRSApvnK.js.map +1 -0
  11. package/dist/chunks/{Callout-BPIA2is-.js → Callout-DrNu-9Qr.js} +12 -12
  12. package/dist/chunks/Callout-DrNu-9Qr.js.map +1 -0
  13. package/dist/chunks/{Checkbox-D-pVpobU.js → Checkbox-BOsDAY2F.js} +5 -5
  14. package/dist/chunks/Checkbox-BOsDAY2F.js.map +1 -0
  15. package/dist/chunks/{ColorField-C20aRvCg.js → ColorField-BYzgZM9o.js} +7 -7
  16. package/dist/chunks/ColorField-BYzgZM9o.js.map +1 -0
  17. package/dist/chunks/{ComboBox-CPES6Y1i.js → ComboBox-Cz3f0Y_8.js} +13 -13
  18. package/dist/chunks/ComboBox-Cz3f0Y_8.js.map +1 -0
  19. package/dist/chunks/{CurveEditor-Cj0lLiyR.js → CurveEditor-DXwSP-iA.js} +175 -175
  20. package/dist/chunks/CurveEditor-DXwSP-iA.js.map +1 -0
  21. package/dist/chunks/{DataGrid-BVdDMZkQ.js → DataGrid-C8KrYtw7.js} +11 -11
  22. package/dist/chunks/DataGrid-C8KrYtw7.js.map +1 -0
  23. package/dist/chunks/DetentSlider-CAubVX0J.js +72 -0
  24. package/dist/chunks/DetentSlider-CAubVX0J.js.map +1 -0
  25. package/dist/chunks/{Dialog-CYBLjwbd.js → Dialog-fGqqQ6o_.js} +9 -9
  26. package/dist/chunks/Dialog-fGqqQ6o_.js.map +1 -0
  27. package/dist/chunks/{Disclosure-DiA6UKdM.js → Disclosure-CILDfWsU.js} +6 -6
  28. package/dist/chunks/Disclosure-CILDfWsU.js.map +1 -0
  29. package/dist/chunks/{Field-dzlxOGxT.js → Field-DWnV8WZY.js} +6 -6
  30. package/dist/chunks/Field-DWnV8WZY.js.map +1 -0
  31. package/dist/chunks/{FontFamilySelect-DIJ4phXz.js → FontFamilySelect-DxfgTC3G.js} +2 -2
  32. package/dist/chunks/{FontFamilySelect-DIJ4phXz.js.map → FontFamilySelect-DxfgTC3G.js.map} +1 -1
  33. package/dist/chunks/{GradientEditor-dBprHbS0.js → GradientEditor-rRBmf3G0.js} +77 -54
  34. package/dist/chunks/GradientEditor-rRBmf3G0.js.map +1 -0
  35. package/dist/chunks/Icon-DT0x6HaQ.js +519 -0
  36. package/dist/chunks/Icon-DT0x6HaQ.js.map +1 -0
  37. package/dist/chunks/{InlineRange-CcfzY80y.js → InlineRange-DdIlfGqG.js} +2 -2
  38. package/dist/chunks/{InlineRange-CcfzY80y.js.map → InlineRange-DdIlfGqG.js.map} +1 -1
  39. package/dist/chunks/{Input-CoKOtyD0.js → Input-DbMKpkXy.js} +5 -5
  40. package/dist/chunks/Input-DbMKpkXy.js.map +1 -0
  41. package/dist/chunks/{ItemList-BZJQReXD.js → ItemList-B9zYb0GE.js} +7 -7
  42. package/dist/chunks/ItemList-B9zYb0GE.js.map +1 -0
  43. package/dist/chunks/Jog-DkkTlL3_.js +81 -0
  44. package/dist/chunks/Jog-DkkTlL3_.js.map +1 -0
  45. package/dist/chunks/{Keycaps-DSeq6QWH.js → Keycaps-DunVpejA.js} +5 -5
  46. package/dist/chunks/Keycaps-DunVpejA.js.map +1 -0
  47. package/dist/chunks/{LayerStack-DOylrQcm.js → LayerStack-CfQ6GsRz.js} +18 -18
  48. package/dist/chunks/LayerStack-CfQ6GsRz.js.map +1 -0
  49. package/dist/chunks/{MenuButton-Do8fFUx1.js → MenuButton-C_4nox39.js} +7 -7
  50. package/dist/chunks/MenuButton-C_4nox39.js.map +1 -0
  51. package/dist/chunks/MeshEditor-Bipz-Ocl.js +123 -0
  52. package/dist/chunks/MeshEditor-Bipz-Ocl.js.map +1 -0
  53. package/dist/chunks/{NumberField-BWzhqS19.js → NumberField-CCjEDZCg.js} +9 -9
  54. package/dist/chunks/NumberField-CCjEDZCg.js.map +1 -0
  55. package/dist/chunks/{OptionsBar-D_Cd3ZYs.js → OptionsBar-DeQ-vUeZ.js} +2 -2
  56. package/dist/chunks/{OptionsBar-D_Cd3ZYs.js.map → OptionsBar-DeQ-vUeZ.js.map} +1 -1
  57. package/dist/chunks/PaintField-jBOJ32rL.js +62 -0
  58. package/dist/chunks/PaintField-jBOJ32rL.js.map +1 -0
  59. package/dist/chunks/PaintInput-Qs7Rul5R.js +131 -0
  60. package/dist/chunks/PaintInput-Qs7Rul5R.js.map +1 -0
  61. package/dist/chunks/{PatternPicker-Ba22Bf4L.js → PatternPicker-BMpXWboq.js} +6 -6
  62. package/dist/chunks/PatternPicker-BMpXWboq.js.map +1 -0
  63. package/dist/chunks/{Plot2D-CVZwQpWJ.js → Plot2D-CXf_f7QD.js} +1 -1
  64. package/dist/chunks/{Plot2D-CVZwQpWJ.js.map → Plot2D-CXf_f7QD.js.map} +1 -1
  65. package/dist/chunks/{PointPlotter-anTHwz8f.js → PointPlotter-S_gz7VYt.js} +2 -2
  66. package/dist/chunks/{PointPlotter-anTHwz8f.js.map → PointPlotter-S_gz7VYt.js.map} +1 -1
  67. package/dist/chunks/{Powerline-BaHDJlcO.js → Powerline-Ak5AWUlK.js} +5 -5
  68. package/dist/chunks/Powerline-Ak5AWUlK.js.map +1 -0
  69. package/dist/chunks/Prefs-CNC8tzyN.js +308 -0
  70. package/dist/chunks/Prefs-CNC8tzyN.js.map +1 -0
  71. package/dist/chunks/Properties-Rnb6TAbN.js +891 -0
  72. package/dist/chunks/Properties-Rnb6TAbN.js.map +1 -0
  73. package/dist/chunks/{RadioGroup-B2_LUgDp.js → RadioGroup-CsVp3SEu.js} +6 -6
  74. package/dist/chunks/RadioGroup-CsVp3SEu.js.map +1 -0
  75. package/dist/chunks/{RangeSlider-S2R3zA8N.js → RangeSlider-DNr-pJpZ.js} +8 -8
  76. package/dist/chunks/RangeSlider-DNr-pJpZ.js.map +1 -0
  77. package/dist/chunks/{ResizeHandle-CiExUWP-.js → ResizeHandle-RXFf5fXr.js} +1 -1
  78. package/dist/chunks/{ResizeHandle-CiExUWP-.js.map → ResizeHandle-RXFf5fXr.js.map} +1 -1
  79. package/dist/chunks/Select-BEope086.js +190 -0
  80. package/dist/chunks/Select-BEope086.js.map +1 -0
  81. package/dist/chunks/SelectionPanel-CEbLS-0D.js +102 -0
  82. package/dist/chunks/SelectionPanel-CEbLS-0D.js.map +1 -0
  83. package/dist/chunks/{Sidebar-Cqcfx3_s.js → Sidebar-qn_oSCNX.js} +4 -4
  84. package/dist/chunks/Sidebar-qn_oSCNX.js.map +1 -0
  85. package/dist/chunks/{SidebarPanel-BLzBo0S2.js → SidebarPanel-Bs6V21hg.js} +12 -12
  86. package/dist/chunks/SidebarPanel-Bs6V21hg.js.map +1 -0
  87. package/dist/chunks/Slider-CIIrqiFS.js +381 -0
  88. package/dist/chunks/Slider-CIIrqiFS.js.map +1 -0
  89. package/dist/chunks/{StatusBar-B9NQ8atD.js → StatusBar-B4L15DSm.js} +6 -6
  90. package/dist/chunks/StatusBar-B4L15DSm.js.map +1 -0
  91. package/dist/chunks/{Switch-C4NU-me1.js → Switch-DH5POG0T.js} +5 -5
  92. package/dist/chunks/Switch-DH5POG0T.js.map +1 -0
  93. package/dist/chunks/{Tabs-9sODd2Ut.js → Tabs-BFHikpml.js} +5 -5
  94. package/dist/chunks/Tabs-BFHikpml.js.map +1 -0
  95. package/dist/chunks/{Timeline-DOZgb1CG.js → Timeline-DNKY_yiK.js} +254 -253
  96. package/dist/chunks/Timeline-DNKY_yiK.js.map +1 -0
  97. package/dist/chunks/{Toast-LpN1WK8E.js → Toast-CI1UDuK6.js} +15 -15
  98. package/dist/chunks/Toast-CI1UDuK6.js.map +1 -0
  99. package/dist/chunks/{ToggleBar-Bxwv6xvj.js → ToggleBar-CClus5Cd.js} +8 -8
  100. package/dist/chunks/ToggleBar-CClus5Cd.js.map +1 -0
  101. package/dist/chunks/TokenPanel-BPHq24dc.js +634 -0
  102. package/dist/chunks/TokenPanel-BPHq24dc.js.map +1 -0
  103. package/dist/chunks/{ToolButton-B81YjdwO.js → ToolButton-9QzJCmuM.js} +7 -7
  104. package/dist/chunks/ToolButton-9QzJCmuM.js.map +1 -0
  105. package/dist/chunks/{ToolGroup-D7juDOC_.js → ToolGroup-BJiDrH_i.js} +3 -3
  106. package/dist/chunks/ToolGroup-BJiDrH_i.js.map +1 -0
  107. package/dist/chunks/ToolOptionsBar-CAM6RcUH.js +85 -0
  108. package/dist/chunks/ToolOptionsBar-CAM6RcUH.js.map +1 -0
  109. package/dist/chunks/{ToolPalette-BSzmRJS7.js → ToolPalette-DGkKwE7D.js} +8 -8
  110. package/dist/chunks/ToolPalette-DGkKwE7D.js.map +1 -0
  111. package/dist/chunks/{Tooltip-BHre_vbI.js → Tooltip-C4YBczLq.js} +3 -3
  112. package/dist/chunks/Tooltip-C4YBczLq.js.map +1 -0
  113. package/dist/chunks/{createKeyframeLayer-AL4jP0EX.js → createKeyframeLayer-DKtO0Sw_.js} +198 -193
  114. package/dist/chunks/createKeyframeLayer-DKtO0Sw_.js.map +1 -0
  115. package/dist/chunks/{icons-BV27dhKB.js → icons-DFLytcui.js} +35 -32
  116. package/dist/chunks/icons-DFLytcui.js.map +1 -0
  117. package/dist/chunks/model-13kZ_-mE.js +483 -0
  118. package/dist/chunks/model-13kZ_-mE.js.map +1 -0
  119. package/dist/chunks/number-BHz66zQO.js +89 -0
  120. package/dist/chunks/number-BHz66zQO.js.map +1 -0
  121. package/dist/chunks/range.module-DSsOIq1R.js +8 -0
  122. package/dist/chunks/range.module-DSsOIq1R.js.map +1 -0
  123. package/dist/chunks/{schema-CPdFNeP6.js → schema-Dft4Cu2p.js} +1 -1
  124. package/dist/chunks/schema-Dft4Cu2p.js.map +1 -0
  125. package/dist/chunks/segmentedControl.module-DS72X1ns.js +11 -0
  126. package/dist/chunks/segmentedControl.module-DS72X1ns.js.map +1 -0
  127. package/dist/chunks/snap-CEjuWOhN.js +13 -0
  128. package/dist/chunks/snap-CEjuWOhN.js.map +1 -0
  129. package/dist/chunks/useRovingTabIndex-Dkpf_KhN.js.map +1 -1
  130. package/dist/color/oklch.d.ts +2 -1
  131. package/dist/color/oklch.d.ts.map +1 -1
  132. package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
  133. package/dist/components/ActionBar/index.js +1 -1
  134. package/dist/components/ActionsBar/index.js +1 -1
  135. package/dist/components/Badge/index.js +1 -1
  136. package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
  137. package/dist/components/BandEditor/index.js +1 -1
  138. package/dist/components/BandEditor/scale.d.ts +1 -8
  139. package/dist/components/BandEditor/scale.d.ts.map +1 -1
  140. package/dist/components/Button/index.js +1 -1
  141. package/dist/components/Callout/index.js +1 -1
  142. package/dist/components/Checkbox/index.js +1 -1
  143. package/dist/components/ColorField/index.js +1 -1
  144. package/dist/components/ComboBox/index.js +1 -1
  145. package/dist/components/CurveEditor/createFunctionLayer.d.ts.map +1 -1
  146. package/dist/components/CurveEditor/createKeyframeLayer.d.ts.map +1 -1
  147. package/dist/components/CurveEditor/index.d.ts +1 -1
  148. package/dist/components/CurveEditor/index.d.ts.map +1 -1
  149. package/dist/components/CurveEditor/index.js +4 -3
  150. package/dist/components/DataGrid/index.js +1 -1
  151. package/dist/components/DetentSlider/DetentSlider.d.ts +9 -10
  152. package/dist/components/DetentSlider/DetentSlider.d.ts.map +1 -1
  153. package/dist/components/DetentSlider/index.js +1 -1
  154. package/dist/components/Dialog/index.js +1 -1
  155. package/dist/components/Disclosure/index.js +1 -1
  156. package/dist/components/Field/index.js +1 -1
  157. package/dist/components/FontFamilySelect/index.js +1 -1
  158. package/dist/components/GradientEditor/GradientEditor.d.ts +3 -0
  159. package/dist/components/GradientEditor/GradientEditor.d.ts.map +1 -1
  160. package/dist/components/GradientEditor/index.js +1 -1
  161. package/dist/components/InlineRange/index.js +1 -1
  162. package/dist/components/Input/index.js +1 -1
  163. package/dist/components/ItemList/index.js +1 -1
  164. package/dist/components/Jog/Jog.d.ts +28 -0
  165. package/dist/components/Jog/Jog.d.ts.map +1 -0
  166. package/dist/components/Jog/index.d.ts +3 -0
  167. package/dist/components/Jog/index.d.ts.map +1 -0
  168. package/dist/components/Jog/index.js +2 -0
  169. package/dist/components/Keycaps/index.js +1 -1
  170. package/dist/components/LayerStack/index.js +1 -1
  171. package/dist/components/MenuButton/index.js +1 -1
  172. package/dist/components/MeshEditor/MeshEditor.d.ts +30 -0
  173. package/dist/components/MeshEditor/MeshEditor.d.ts.map +1 -0
  174. package/dist/components/MeshEditor/index.d.ts +3 -0
  175. package/dist/components/MeshEditor/index.d.ts.map +1 -0
  176. package/dist/components/MeshEditor/index.js +2 -0
  177. package/dist/components/NumberField/UnitField.d.ts +2 -1
  178. package/dist/components/NumberField/UnitField.d.ts.map +1 -1
  179. package/dist/components/NumberField/index.js +1 -1
  180. package/dist/components/OptionsBar/index.js +1 -1
  181. package/dist/components/PaintField/PaintField.d.ts +36 -0
  182. package/dist/components/PaintField/PaintField.d.ts.map +1 -0
  183. package/dist/components/PaintField/index.d.ts +3 -0
  184. package/dist/components/PaintField/index.d.ts.map +1 -0
  185. package/dist/components/PaintField/index.js +2 -0
  186. package/dist/components/PaintInput/PaintInput.d.ts.map +1 -1
  187. package/dist/components/PaintInput/index.js +1 -1
  188. package/dist/components/PatternPicker/index.js +1 -1
  189. package/dist/components/Plot2D/index.js +1 -1
  190. package/dist/components/PointPlotter/index.js +1 -1
  191. package/dist/components/Powerline/index.js +2 -2
  192. package/dist/components/Prefs/PrefsForm.d.ts +4 -0
  193. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  194. package/dist/components/Prefs/index.js +2 -2
  195. package/dist/components/Prefs/schema.d.ts +2 -1
  196. package/dist/components/Prefs/schema.d.ts.map +1 -1
  197. package/dist/components/Properties/PropertyGroup.d.ts +7 -1
  198. package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
  199. package/dist/components/Properties/PropertyPanel.d.ts +91 -8
  200. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  201. package/dist/components/Properties/index.d.ts +2 -2
  202. package/dist/components/Properties/index.d.ts.map +1 -1
  203. package/dist/components/Properties/index.js +2 -2
  204. package/dist/components/Properties/storyLayouts.d.ts +1 -1
  205. package/dist/components/RadioGroup/index.js +1 -1
  206. package/dist/components/RangeSlider/index.js +1 -1
  207. package/dist/components/ResizeHandle/index.js +1 -1
  208. package/dist/components/Select/Select.d.ts +26 -0
  209. package/dist/components/Select/Select.d.ts.map +1 -1
  210. package/dist/components/Select/index.d.ts +1 -1
  211. package/dist/components/Select/index.d.ts.map +1 -1
  212. package/dist/components/Select/index.js +1 -1
  213. package/dist/components/SelectionPanel/SelectionPanel.d.ts +3 -50
  214. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
  215. package/dist/components/SelectionPanel/index.js +3 -2
  216. package/dist/components/SelectionPanel/model.d.ts +4 -1
  217. package/dist/components/SelectionPanel/model.d.ts.map +1 -1
  218. package/dist/components/SelectionPanel/renderLeaf.d.ts +106 -0
  219. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -0
  220. package/dist/components/Sidebar/index.js +1 -1
  221. package/dist/components/SidebarPanel/index.js +1 -1
  222. package/dist/components/Slider/Slider.d.ts +19 -1
  223. package/dist/components/Slider/Slider.d.ts.map +1 -1
  224. package/dist/components/Slider/index.d.ts +1 -1
  225. package/dist/components/Slider/index.d.ts.map +1 -1
  226. package/dist/components/Slider/index.js +1 -1
  227. package/dist/components/StatusBar/index.js +1 -1
  228. package/dist/components/Switch/index.js +1 -1
  229. package/dist/components/Tabs/index.js +1 -1
  230. package/dist/components/Timeline/Lane.d.ts.map +1 -1
  231. package/dist/components/Timeline/index.js +2 -2
  232. package/dist/components/Timeline/keys.d.ts +1 -1
  233. package/dist/components/Timeline/keys.d.ts.map +1 -1
  234. package/dist/components/Toast/index.js +1 -1
  235. package/dist/components/ToggleBar/index.js +1 -1
  236. package/dist/components/TokenPanel/TokenPanel.d.ts +39 -0
  237. package/dist/components/TokenPanel/TokenPanel.d.ts.map +1 -0
  238. package/dist/components/TokenPanel/color.d.ts +7 -0
  239. package/dist/components/TokenPanel/color.d.ts.map +1 -0
  240. package/dist/components/TokenPanel/index.d.ts +5 -0
  241. package/dist/components/TokenPanel/index.d.ts.map +1 -0
  242. package/dist/components/TokenPanel/index.js +2 -0
  243. package/dist/components/TokenPanel/tokenTypes.d.ts +55 -0
  244. package/dist/components/TokenPanel/tokenTypes.d.ts.map +1 -0
  245. package/dist/components/ToolButton/index.js +1 -1
  246. package/dist/components/ToolGroup/index.js +1 -1
  247. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts +29 -18
  248. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts.map +1 -1
  249. package/dist/components/ToolOptionsBar/index.js +1 -1
  250. package/dist/components/ToolPalette/ToolPalette.d.ts +5 -4
  251. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
  252. package/dist/components/ToolPalette/index.js +1 -1
  253. package/dist/components/Tooltip/index.js +1 -1
  254. package/dist/components/paintValue.d.ts +8 -0
  255. package/dist/components/paintValue.d.ts.map +1 -1
  256. package/dist/format/number.d.ts +10 -1
  257. package/dist/format/number.d.ts.map +1 -1
  258. package/dist/handles.d.ts +20 -0
  259. package/dist/handles.d.ts.map +1 -0
  260. package/dist/icons/Icon.d.ts +10 -2
  261. package/dist/icons/Icon.d.ts.map +1 -1
  262. package/dist/icons/index.d.ts +6 -3
  263. package/dist/icons/index.d.ts.map +1 -1
  264. package/dist/icons/paths.d.ts +279 -17
  265. package/dist/icons/paths.d.ts.map +1 -1
  266. package/dist/index.d.ts +7 -0
  267. package/dist/index.d.ts.map +1 -1
  268. package/dist/index.js +74 -75
  269. package/dist/index.js.map +1 -1
  270. package/dist/paintPreview.d.ts +13 -0
  271. package/dist/paintPreview.d.ts.map +1 -0
  272. package/dist/{components/CurveEditor/snap.d.ts → snap.d.ts} +2 -0
  273. package/dist/snap.d.ts.map +1 -0
  274. package/dist/style.css +1 -1
  275. package/dist/useRovingTabIndex.d.ts +7 -5
  276. package/dist/useRovingTabIndex.d.ts.map +1 -1
  277. package/package.json +8 -7
  278. package/dist/chunks/ActionBar-DxGp3WuZ.js.map +0 -1
  279. package/dist/chunks/Badge-Bf8Rd1R6.js.map +0 -1
  280. package/dist/chunks/BandEditor-BeWO56_w.js.map +0 -1
  281. package/dist/chunks/Button-CExdkQcU.js.map +0 -1
  282. package/dist/chunks/Callout-BPIA2is-.js.map +0 -1
  283. package/dist/chunks/Checkbox-D-pVpobU.js.map +0 -1
  284. package/dist/chunks/ColorField-C20aRvCg.js.map +0 -1
  285. package/dist/chunks/ComboBox-CPES6Y1i.js.map +0 -1
  286. package/dist/chunks/CurveEditor-Cj0lLiyR.js.map +0 -1
  287. package/dist/chunks/DataGrid-BVdDMZkQ.js.map +0 -1
  288. package/dist/chunks/DetentSlider-CYicfnKr.js +0 -83
  289. package/dist/chunks/DetentSlider-CYicfnKr.js.map +0 -1
  290. package/dist/chunks/Dialog-CYBLjwbd.js.map +0 -1
  291. package/dist/chunks/Disclosure-DiA6UKdM.js.map +0 -1
  292. package/dist/chunks/Field-dzlxOGxT.js.map +0 -1
  293. package/dist/chunks/GradientEditor-dBprHbS0.js.map +0 -1
  294. package/dist/chunks/Icon-DBXtBB1f.js +0 -101
  295. package/dist/chunks/Icon-DBXtBB1f.js.map +0 -1
  296. package/dist/chunks/Input-CoKOtyD0.js.map +0 -1
  297. package/dist/chunks/ItemList-BZJQReXD.js.map +0 -1
  298. package/dist/chunks/Keycaps-DSeq6QWH.js.map +0 -1
  299. package/dist/chunks/LayerStack-DOylrQcm.js.map +0 -1
  300. package/dist/chunks/MenuButton-Do8fFUx1.js.map +0 -1
  301. package/dist/chunks/NumberField-BWzhqS19.js.map +0 -1
  302. package/dist/chunks/PaintInput-DAevU7fd.js +0 -118
  303. package/dist/chunks/PaintInput-DAevU7fd.js.map +0 -1
  304. package/dist/chunks/PatternPicker-Ba22Bf4L.js.map +0 -1
  305. package/dist/chunks/Powerline-BaHDJlcO.js.map +0 -1
  306. package/dist/chunks/Prefs-CzIn-hlq.js +0 -302
  307. package/dist/chunks/Prefs-CzIn-hlq.js.map +0 -1
  308. package/dist/chunks/Properties-DJaDEJkT.js +0 -765
  309. package/dist/chunks/Properties-DJaDEJkT.js.map +0 -1
  310. package/dist/chunks/RadioGroup-B2_LUgDp.js.map +0 -1
  311. package/dist/chunks/RangeSlider-S2R3zA8N.js.map +0 -1
  312. package/dist/chunks/Select-CacMfs4v.js +0 -124
  313. package/dist/chunks/Select-CacMfs4v.js.map +0 -1
  314. package/dist/chunks/SelectionPanel-CbyUT3Dh.js +0 -572
  315. package/dist/chunks/SelectionPanel-CbyUT3Dh.js.map +0 -1
  316. package/dist/chunks/Sidebar-Cqcfx3_s.js.map +0 -1
  317. package/dist/chunks/SidebarPanel-BLzBo0S2.js.map +0 -1
  318. package/dist/chunks/Slider--DFRC_hc.js +0 -303
  319. package/dist/chunks/Slider--DFRC_hc.js.map +0 -1
  320. package/dist/chunks/StatusBar-B9NQ8atD.js.map +0 -1
  321. package/dist/chunks/Switch-C4NU-me1.js.map +0 -1
  322. package/dist/chunks/Tabs-9sODd2Ut.js.map +0 -1
  323. package/dist/chunks/Timeline-DOZgb1CG.js.map +0 -1
  324. package/dist/chunks/Toast-LpN1WK8E.js.map +0 -1
  325. package/dist/chunks/ToggleBar-Bxwv6xvj.js.map +0 -1
  326. package/dist/chunks/ToolButton-B81YjdwO.js.map +0 -1
  327. package/dist/chunks/ToolGroup-D7juDOC_.js.map +0 -1
  328. package/dist/chunks/ToolOptionsBar-B2xPWzJf.js +0 -27
  329. package/dist/chunks/ToolOptionsBar-B2xPWzJf.js.map +0 -1
  330. package/dist/chunks/ToolPalette-BSzmRJS7.js.map +0 -1
  331. package/dist/chunks/Tooltip-BHre_vbI.js.map +0 -1
  332. package/dist/chunks/createKeyframeLayer-AL4jP0EX.js.map +0 -1
  333. package/dist/chunks/icons-BV27dhKB.js.map +0 -1
  334. package/dist/chunks/number-f6PydOZK.js +0 -52
  335. package/dist/chunks/number-f6PydOZK.js.map +0 -1
  336. package/dist/chunks/range.module-CvSfABmu.js +0 -8
  337. package/dist/chunks/range.module-CvSfABmu.js.map +0 -1
  338. package/dist/chunks/schema-CPdFNeP6.js.map +0 -1
  339. package/dist/chunks/segmentedControl.module-BgvAPkSZ.js +0 -11
  340. package/dist/chunks/segmentedControl.module-BgvAPkSZ.js.map +0 -1
  341. package/dist/components/CurveEditor/snap.d.ts.map +0 -1
@@ -0,0 +1,89 @@
1
+ //#region src/format/number.ts
2
+ var e = "−";
3
+ function t(e, t) {
4
+ return (Number.isFinite(e) ? e.toLocaleString(void 0, t) : String(e)).replace(/^-/, "−");
5
+ }
6
+ function n(e) {
7
+ return Number(e.replace("−", "-"));
8
+ }
9
+ var r = {
10
+ k: 3,
11
+ m: 6,
12
+ b: 9,
13
+ t: 12
14
+ };
15
+ function i(e, n = 0) {
16
+ if (!Number.isFinite(e)) return t(e);
17
+ let r = Math.abs(e) < 1e3 ? {
18
+ useGrouping: !1,
19
+ minimumFractionDigits: n,
20
+ maximumFractionDigits: n
21
+ } : {
22
+ notation: "compact",
23
+ minimumFractionDigits: 1,
24
+ maximumFractionDigits: 1
25
+ };
26
+ return e.toLocaleString("en-US", r).replace(/^-/, "−");
27
+ }
28
+ function a(e, t) {
29
+ if (t) {
30
+ let n = e.trim(), r = u(n, t);
31
+ if (r !== void 0) {
32
+ let e = c(n, t);
33
+ if (e !== void 0 && e.length > 1) return l(e, n, t);
34
+ let { factor: i, offset: u } = s(t[r]);
35
+ return o(a(n.slice(0, -r.length)), i) + u;
36
+ }
37
+ }
38
+ let n = e.trim().replace("−", "-"), i = r[n.slice(-1).toLowerCase()];
39
+ return i !== void 0 && (n = n.slice(0, -1).trimEnd()), /^[-+]?\d{1,3}(,\d{3})+(\.\d*)?$/.test(n) && (n = n.replace(/,/g, "")), /\d/.test(n) ? Number(i === void 0 ? n : `${n}e${i}`) : NaN;
40
+ }
41
+ function o(e, t) {
42
+ return t < 1 ? e / (1 / t) : e * t;
43
+ }
44
+ function s(e) {
45
+ return typeof e == "number" ? {
46
+ factor: e,
47
+ offset: 0
48
+ } : {
49
+ factor: e.factor,
50
+ offset: e.offset ?? 0
51
+ };
52
+ }
53
+ function c(e, t) {
54
+ let n = [], r = e.trimEnd();
55
+ for (; r !== "";) {
56
+ let e = u(r, t);
57
+ if (e === void 0) return;
58
+ n.push(e);
59
+ let i = r.slice(0, -e.length), a = /(\d+(?:\.\d+)?|\.\d+)\s*$/.exec(i);
60
+ if (!a) return;
61
+ r = i.slice(0, a.index).trimEnd(), (r === "-" || r === "+" || r === "−") && (r = "");
62
+ }
63
+ return n.length === 0 ? void 0 : n.reverse();
64
+ }
65
+ function l(e, t, n) {
66
+ let r = t.match(/\d+(?:\.\d+)?|\.\d+/g);
67
+ if (!r || r.length !== e.length) return NaN;
68
+ let i = /^\s*[-\u2212]/.test(t) ? -1 : 1, a = 0;
69
+ for (let [t, i] of e.entries()) {
70
+ let { factor: e, offset: c } = s(n[i]);
71
+ if (c !== 0) return NaN;
72
+ a += o(Number(r[t]), e);
73
+ }
74
+ return i * a;
75
+ }
76
+ function u(e, t) {
77
+ let n = Object.keys(t).filter((e) => e !== "").sort((e, t) => t.length - e.length), r = e.toLowerCase();
78
+ return n.find((t) => e.endsWith(t)) ?? n.find((e) => r.endsWith(e.toLowerCase()));
79
+ }
80
+ function d(e) {
81
+ return String(e).replace(/^-/, "−");
82
+ }
83
+ function f(e) {
84
+ return Number.isFinite(e) ? e <= 2 ? `${d(Math.round(e * 100))}%` : e >= 100 ? `${Math.round(e).toLocaleString("en-US")}x` : `${d(Math.round(e * 10) / 10)}x` : String(e);
85
+ }
86
+ //#endregion
87
+ export { a, f as i, i as n, n as o, t as r, e as t };
88
+
89
+ //# sourceMappingURL=number-BHz66zQO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-BHz66zQO.js","names":[],"sources":["../../src/format/number.ts"],"sourcesContent":["/**\n * Display-formatter for numbers. Use this anywhere a number is shown to\n * a user. The whole point: negative values get prefixed with the real\n * MINUS SIGN (U+2212) instead of the ASCII HYPHEN-MINUS (U+002D) that\n * `toLocaleString` and template literals produce by default.\n *\n * U+2212 is the same visual width as `+` and reads as a sign rather\n * than a hyphen — columns of signed numbers align cleanly and the\n * glyph doesn't get confused with a bullet or list dash.\n */\nexport const MINUS_SIGN = '−';\n\n/**\n * Formats a number for display, substituting {@link MINUS_SIGN} for the ASCII\n * hyphen `toLocaleString` emits. Non-finite values stringify as-is.\n */\nexport function formatNumber(value: number, options?: Intl.NumberFormatOptions): string {\n const formatted = Number.isFinite(value)\n ? value.toLocaleString(undefined, options)\n : String(value);\n return formatted.replace(/^-/, MINUS_SIGN);\n}\n\n/**\n * Parses a string that may carry {@link MINUS_SIGN} in place of the ASCII\n * hyphen. The inverse of {@link formatNumber} for any editing surface that\n * renders its value through it and reads the edited text back.\n */\nexport function parseSignedNumber(text: string): number {\n return Number(text.replace(MINUS_SIGN, '-'));\n}\n\n/** Powers of ten a typed magnitude suffix stands for. */\nconst EXPONENTS: Record<string, number> = { k: 3, m: 6, b: 9, t: 12 };\n\n/**\n * Formats a number the way a `compact` readout shows it: below 1,000 at\n * `decimals` places, from 1,000 up at one decimal with a magnitude suffix\n * (`40.0K`, `2.0M`). Always `en-US`, so {@link parseNumber} reads it back.\n */\nexport function formatCompact(value: number, decimals = 0): string {\n if (!Number.isFinite(value)) return formatNumber(value);\n const options: Intl.NumberFormatOptions =\n Math.abs(value) < 1000\n ? { useGrouping: false, minimumFractionDigits: decimals, maximumFractionDigits: decimals }\n : { notation: 'compact', minimumFractionDigits: 1, maximumFractionDigits: 1 };\n return value.toLocaleString('en-US', options).replace(/^-/, MINUS_SIGN);\n}\n\n/**\n * Reads a typed number: anything {@link parseSignedNumber} reads, plus\n * thousands commas in the `40,000` shape and a `k`/`m`/`b`/`t` suffix in either\n * case (`2.5m` is 2,500,000). Empty text is NaN rather than zero.\n *\n * Given `units` — a suffix mapped to the factor it scales by — a trailing unit\n * name is read first: the longest match wins, exact case before any case, and\n * a unit beats a magnitude suffix, so with `m` accepted `2m` is `2 * units.m`.\n */\nexport function parseNumber(text: string, units?: Readonly<UnitTable>): number {\n if (units) {\n const trimmed = text.trim();\n const name = unitSuffixOf(trimmed, units);\n if (name !== undefined) {\n const terms = compoundTermsOf(trimmed, units);\n if (terms !== undefined && terms.length > 1) return compoundValue(terms, trimmed, units);\n const { factor, offset } = scaleOf(units[name]!);\n return scaled(parseNumber(trimmed.slice(0, -name.length)), factor) + offset;\n }\n }\n let t = text.trim().replace(MINUS_SIGN, '-');\n const exponent = EXPONENTS[t.slice(-1).toLowerCase()];\n if (exponent !== undefined) t = t.slice(0, -1).trimEnd();\n if (/^[-+]?\\d{1,3}(,\\d{3})+(\\.\\d*)?$/.test(t)) t = t.replace(/,/g, '');\n if (!/\\d/.test(t)) return Number.NaN;\n // Scaled through the exponent rather than by multiplying: 1.1 * 1000 is 1100.0000000000002.\n return Number(exponent === undefined ? t : `${t}e${exponent}`);\n}\n\n/** One unit's conversion into the shown unit: a bare factor, or a scale that\n * also moves zero. Structurally the kit's `UnitEntry`, kept local so this\n * formatting helper stays free of the scene vocabulary. */\nexport type UnitTableEntry = number | { factor: number; offset?: number };\n/** Suffixes a person may type, each mapped to its conversion. */\nexport type UnitTable = Record<string, UnitTableEntry>;\n\n/** Divided by the reciprocal below 1: 12 * 0.1 is 1.2000000000000002, 12 / 10 is 1.2. */\nfunction scaled(n: number, factor: number): number {\n return factor < 1 ? n / (1 / factor) : n * factor;\n}\n\n/** A unit table entry's scale, with the bare-factor shorthand widened. */\nfunction scaleOf(entry: UnitTableEntry): { factor: number; offset: number } {\n return typeof entry === 'number'\n ? { factor: entry, offset: 0 }\n : { factor: entry.factor, offset: entry.offset ?? 0 };\n}\n\n/**\n * The unit names in `text`, in reading order, when every one of them closes a\n * `<number><unit>` term — which is what tells `5ft 3in` from a malformed\n * `5ft 3`. Undefined when the text is not a run of whole terms.\n */\nfunction compoundTermsOf(text: string, units: Readonly<UnitTable>): string[] | undefined {\n const names: string[] = [];\n let rest = text.trimEnd();\n while (rest !== '') {\n const name = unitSuffixOf(rest, units);\n if (name === undefined) return undefined;\n names.push(name);\n const before = rest.slice(0, -name.length);\n const m = /(\\d+(?:\\.\\d+)?|\\.\\d+)\\s*$/.exec(before);\n if (!m) return undefined;\n rest = before.slice(0, m.index).trimEnd();\n // A sign leads the whole value, so it ends the walk rather than a term.\n if (rest === '-' || rest === '+' || rest === MINUS_SIGN) rest = '';\n }\n return names.length === 0 ? undefined : names.reverse();\n}\n\n/**\n * `5ft 3in` as one number in the shown unit. Every term scales and they sum;\n * a leading sign carries across all of them, so `-5ft 3in` is −63in and not\n * −57. Offsets have no meaning in a sum — 1K + 2degC is not a temperature —\n * so a term carrying one makes the whole value unreadable.\n */\nfunction compoundValue(names: string[], text: string, units: Readonly<UnitTable>): number {\n const digits = text.match(/\\d+(?:\\.\\d+)?|\\.\\d+/g);\n if (!digits || digits.length !== names.length) return Number.NaN;\n const sign = /^\\s*[-\\u2212]/.test(text) ? -1 : 1;\n let total = 0;\n for (const [i, name] of names.entries()) {\n const { factor, offset } = scaleOf(units[name]!);\n if (offset !== 0) return Number.NaN;\n total += scaled(Number(digits[i]), factor);\n }\n return sign * total;\n}\n\n/** The longest unit name `text` ends with — exact case first, then any case. */\nfunction unitSuffixOf(text: string, units: Readonly<UnitTable>): string | undefined {\n const names = Object.keys(units).filter((n) => n !== '').sort((a, b) => b.length - a.length);\n const lower = text.toLowerCase();\n return names.find((n) => text.endsWith(n)) ?? names.find((n) => lower.endsWith(n.toLowerCase()));\n}\n\n/** {@link String} with the leading ASCII hyphen swapped for {@link MINUS_SIGN}.\n * Locale-independent, unlike `toLocaleString`. */\nfunction signedString(value: number): string {\n return String(value).replace(/^-/, MINUS_SIGN);\n}\n\n/**\n * Formats a zoom factor for display. Below 2x a percentage reads naturally;\n * past it the numbers get long and a multiplier is what people say out loud,\n * so 250% shows as `2.5x`. Past 100x a tenth is noise, so the decimal is\n * dropped and thousands are grouped: `1009.74` reads as `1,010x`.\n */\nexport function formatZoom(zoom: number): string {\n if (!Number.isFinite(zoom)) return String(zoom);\n if (zoom <= 2) return `${signedString(Math.round(zoom * 100))}%`;\n if (zoom >= 100) return `${Math.round(zoom).toLocaleString('en-US')}x`;\n return `${signedString(Math.round(zoom * 10) / 10)}x`;\n}\n"],"mappings":";AAUA,IAAa,IAAa;AAM1B,SAAgB,EAAa,GAAe,GAA4C;AAItF,SAHkB,OAAO,SAAS,EAAM,GACpC,EAAM,eAAe,KAAA,GAAW,EAAQ,GACxC,OAAO,EAAM,EACA,QAAQ,MAAA,IAAiB;;AAQ5C,SAAgB,EAAkB,GAAsB;AACtD,QAAO,OAAO,EAAK,QAAA,KAAoB,IAAI,CAAC;;AAI9C,IAAM,IAAoC;CAAE,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;CAAI;AAOrE,SAAgB,EAAc,GAAe,IAAW,GAAW;AACjE,KAAI,CAAC,OAAO,SAAS,EAAM,CAAE,QAAO,EAAa,EAAM;CACvD,IAAM,IACJ,KAAK,IAAI,EAAM,GAAG,MACd;EAAE,aAAa;EAAO,uBAAuB;EAAU,uBAAuB;EAAU,GACxF;EAAE,UAAU;EAAW,uBAAuB;EAAG,uBAAuB;EAAG;AACjF,QAAO,EAAM,eAAe,SAAS,EAAQ,CAAC,QAAQ,MAAA,IAAiB;;AAYzE,SAAgB,EAAY,GAAc,GAAqC;AAC7E,KAAI,GAAO;EACT,IAAM,IAAU,EAAK,MAAM,EACrB,IAAO,EAAa,GAAS,EAAM;AACzC,MAAI,MAAS,KAAA,GAAW;GACtB,IAAM,IAAQ,EAAgB,GAAS,EAAM;AAC7C,OAAI,MAAU,KAAA,KAAa,EAAM,SAAS,EAAG,QAAO,EAAc,GAAO,GAAS,EAAM;GACxF,IAAM,EAAE,WAAQ,cAAW,EAAQ,EAAM,GAAO;AAChD,UAAO,EAAO,EAAY,EAAQ,MAAM,GAAG,CAAC,EAAK,OAAO,CAAC,EAAE,EAAO,GAAG;;;CAGzE,IAAI,IAAI,EAAK,MAAM,CAAC,QAAA,KAAoB,IAAI,EACtC,IAAW,EAAU,EAAE,MAAM,GAAG,CAAC,aAAa;AAKpD,QAJI,MAAa,KAAA,MAAW,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,GACpD,kCAAkC,KAAK,EAAE,KAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,GACjE,KAAK,KAAK,EAAE,GAEV,OAAO,MAAa,KAAA,IAAY,IAAI,GAAG,EAAE,GAAG,IAAW,GAFpC;;AAa5B,SAAS,EAAO,GAAW,GAAwB;AACjD,QAAO,IAAS,IAAI,KAAK,IAAI,KAAU,IAAI;;AAI7C,SAAS,EAAQ,GAA2D;AAC1E,QAAO,OAAO,KAAU,WACpB;EAAE,QAAQ;EAAO,QAAQ;EAAG,GAC5B;EAAE,QAAQ,EAAM;EAAQ,QAAQ,EAAM,UAAU;EAAG;;AAQzD,SAAS,EAAgB,GAAc,GAAkD;CACvF,IAAM,IAAkB,EAAE,EACtB,IAAO,EAAK,SAAS;AACzB,QAAO,MAAS,KAAI;EAClB,IAAM,IAAO,EAAa,GAAM,EAAM;AACtC,MAAI,MAAS,KAAA,EAAW;AACxB,IAAM,KAAK,EAAK;EAChB,IAAM,IAAS,EAAK,MAAM,GAAG,CAAC,EAAK,OAAO,EACpC,IAAI,4BAA4B,KAAK,EAAO;AAClD,MAAI,CAAC,EAAG;AAGR,EAFA,IAAO,EAAO,MAAM,GAAG,EAAE,MAAM,CAAC,SAAS,GAErC,MAAS,OAAO,MAAS,OAAO,MAAA,SAAqB,IAAO;;AAElE,QAAO,EAAM,WAAW,IAAI,KAAA,IAAY,EAAM,SAAS;;AASzD,SAAS,EAAc,GAAiB,GAAc,GAAoC;CACxF,IAAM,IAAS,EAAK,MAAM,uBAAuB;AACjD,KAAI,CAAC,KAAU,EAAO,WAAW,EAAM,OAAQ,QAAO;CACtD,IAAM,IAAO,gBAAgB,KAAK,EAAK,GAAG,KAAK,GAC3C,IAAQ;AACZ,MAAK,IAAM,CAAC,GAAG,MAAS,EAAM,SAAS,EAAE;EACvC,IAAM,EAAE,WAAQ,cAAW,EAAQ,EAAM,GAAO;AAChD,MAAI,MAAW,EAAG,QAAO;AACzB,OAAS,EAAO,OAAO,EAAO,GAAG,EAAE,EAAO;;AAE5C,QAAO,IAAO;;AAIhB,SAAS,EAAa,GAAc,GAAgD;CAClF,IAAM,IAAQ,OAAO,KAAK,EAAM,CAAC,QAAQ,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,EACtF,IAAQ,EAAK,aAAa;AAChC,QAAO,EAAM,MAAM,MAAM,EAAK,SAAS,EAAE,CAAC,IAAI,EAAM,MAAM,MAAM,EAAM,SAAS,EAAE,aAAa,CAAC,CAAC;;AAKlG,SAAS,EAAa,GAAuB;AAC3C,QAAO,OAAO,EAAM,CAAC,QAAQ,MAAA,IAAiB;;AAShD,SAAgB,EAAW,GAAsB;AAI/C,QAHK,OAAO,SAAS,EAAK,GACtB,KAAQ,IAAU,GAAG,EAAa,KAAK,MAAM,IAAO,IAAI,CAAC,CAAC,KAC1D,KAAQ,MAAY,GAAG,KAAK,MAAM,EAAK,CAAC,eAAe,QAAQ,CAAC,KAC7D,GAAG,EAAa,KAAK,MAAM,IAAO,GAAG,GAAG,GAAG,CAAC,KAHhB,OAAO,EAAK"}
@@ -0,0 +1,8 @@
1
+ var e = {
2
+ range: "_range_g7ip1_9",
3
+ alpha: "_alpha_g7ip1_74"
4
+ };
5
+ //#endregion
6
+ export { e as t };
7
+
8
+ //# sourceMappingURL=range.module-DSsOIq1R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.module-DSsOIq1R.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, 4px);\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-mix, 18%), transparent)\n );\n}\n\n.range::-moz-range-track {\n height: var(--wzl-slider-track-h, 4px);\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-mix, 18%), transparent)\n );\n}\n\n.range::-webkit-slider-thumb {\n appearance: none;\n -webkit-appearance: none;\n width: var(--wzl-slider-thumb-size, 8px);\n height: var(--wzl-slider-thumb-size, 8px);\n border: none;\n border-radius: 50%;\n background: color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-thumb-mix, 70%), 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, 4px) - var(--wzl-slider-thumb-size, 8px)) / 2);\n}\n\n.range::-moz-range-thumb {\n width: var(--wzl-slider-thumb-size, 8px);\n height: var(--wzl-slider-thumb-size, 8px);\n border: none;\n border-radius: 50%;\n background: color-mix(in srgb, var(--wzl-accent) var(--wzl-slider-thumb-mix, 70%), 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: var(--wzl-range-track-bg, color-mix(in srgb, var(--wzl-accent) 10%, transparent));\n}\n\n.alpha::-moz-range-track {\n background: var(--wzl-range-track-bg, 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":""}
@@ -44,4 +44,4 @@ function i(e, t) {
44
44
  //#endregion
45
45
  export { i as a, r as i, e as n, t as r, n as t };
46
46
 
47
- //# sourceMappingURL=schema-CPdFNeP6.js.map
47
+ //# sourceMappingURL=schema-Dft4Cu2p.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-Dft4Cu2p.js","names":[],"sources":["../../src/components/Prefs/schema.ts"],"sourcesContent":["// Preference-schema vocabulary for PrefsForm / PrefsDialog / SelectionPanel:\n// core's `ToolPref*` family under this package's names. Never re-declare them\n// here — this was a hand-kept structural copy until it drifted, and the\n// independence from `@weasel-js/core` it bought is long gone anyway.\n\nexport type {\n ToolPref as BuiltinPref,\n ToolPrefBoolean as PrefBoolean,\n ToolPrefBooleanControl as PrefBooleanControl,\n ToolPrefColor as PrefColor,\n ToolPrefCustom as PrefCustom,\n ToolPrefEnum as PrefEnum,\n ToolPrefEnumControl as PrefEnumControl,\n ToolPrefEnumEncoding as PrefEnumEncoding,\n ToolPrefGroup as PrefGroup,\n ToolPrefKind as PrefKind,\n ToolPrefLeaf as PrefLeaf,\n ToolPrefNumber as PrefNumber,\n ToolPrefNumberControl as PrefNumberControl,\n ToolPrefNumberFormat as PrefNumberFormat,\n ToolPrefNumberUnit as PrefNumberUnit,\n ToolPrefObject as PrefObject,\n ToolPrefPaint as PrefPaint,\n ToolPrefString as PrefString,\n ToolPrefStringControl as PrefStringControl,\n} from '@weasel-js/core';\n\nimport type { UnitTable } from '../../format/number';\nimport type { ToolPrefGroup, ToolPrefLeaf, ToolPrefNumber, ToolPrefNumberUnit as PrefNumberUnitType } from '@weasel-js/core';\n\n/**\n * A number leaf's bounds in the unit it is displayed in.\n *\n * Only what the leaf declares converts: an omitted bound has no stored\n * counterpart to put through the conversion, and its fallback — 0..100 for a\n * slider's track, a step of 1 — is a display-space number already. `min` and\n * `max` are points, so they convert the way the value does; `step` is a\n * distance, and a unit with an offset maps zero somewhere else, so converting\n * it as a point would scale it wrong. A decreasing conversion swaps which end\n * is the lower one.\n */\nexport function prefDisplayBounds(\n p: ToolPrefNumber,\n): { min?: number; max?: number; step: number } {\n if (!p.unit) return { min: p.min, max: p.max, step: p.step ?? 1 };\n const { toDisplay } = p.unit;\n const lo = p.min === undefined ? undefined : toDisplay(p.min);\n const hi = p.max === undefined ? undefined : toDisplay(p.max);\n const flipped = lo !== undefined && hi !== undefined && lo > hi;\n const step = p.step === undefined\n ? 1\n : Math.abs(toDisplay(p.step) - toDisplay(0)) || p.step;\n return { min: flipped ? hi : lo, max: flipped ? lo : hi, step };\n}\n\n/** What a unit leaf's field reads as typed text: its `accepts` table, and its\n * `suffix` as the display unit itself. */\nexport function prefUnitAccepts(unit: PrefNumberUnitType): Readonly<UnitTable> {\n return unit.suffix === undefined ? { ...unit.accepts } : { [unit.suffix]: 1, ...unit.accepts };\n}\n\n/** Distinguishes a leaf from a group while walking a schema tree. */\nexport function isPrefLeaf(node: ToolPrefLeaf | ToolPrefGroup): node is ToolPrefLeaf {\n return 'kind' in node;\n}\n\n/** Get the value at a dotted path inside a nested value tree. Returns\n * `undefined` when a segment is missing or hits a non-object. */\nexport function prefValueAtPath(values: unknown, path: string): unknown {\n let cur: unknown = values;\n for (const seg of path.split('.')) {\n if (cur == null || typeof cur !== 'object') return undefined;\n cur = (cur as Record<string, unknown>)[seg];\n }\n return cur;\n}\n\n/**\n * Recursively drop `hidden` leaves (unless `showHidden`), pruning groups\n * that end up empty. Returns null when the entire subtree is hidden.\n */\nexport function visiblePrefSubtree<T extends ToolPrefLeaf | ToolPrefGroup>(\n node: T,\n showHidden: boolean,\n): T | null {\n if (isPrefLeaf(node)) return node.hidden && !showHidden ? null : node;\n const group = node as ToolPrefGroup;\n const children: Record<string, ToolPrefLeaf | ToolPrefGroup> = {};\n for (const [key, child] of Object.entries(group.children)) {\n const kept = visiblePrefSubtree(child, showHidden);\n if (kept) children[key] = kept;\n }\n if (Object.keys(children).length === 0) return null;\n return { ...node, children };\n}\n"],"mappings":";AAyCA,SAAgB,EACd,GAC8C;AAC9C,KAAI,CAAC,EAAE,KAAM,QAAO;EAAE,KAAK,EAAE;EAAK,KAAK,EAAE;EAAK,MAAM,EAAE,QAAQ;EAAG;CACjE,IAAM,EAAE,iBAAc,EAAE,MAClB,IAAK,EAAE,QAAQ,KAAA,IAAY,KAAA,IAAY,EAAU,EAAE,IAAI,EACvD,IAAK,EAAE,QAAQ,KAAA,IAAY,KAAA,IAAY,EAAU,EAAE,IAAI,EACvD,IAAU,MAAO,KAAA,KAAa,MAAO,KAAA,KAAa,IAAK,GACvD,IAAO,EAAE,SAAS,KAAA,IACpB,IACA,KAAK,IAAI,EAAU,EAAE,KAAK,GAAG,EAAU,EAAE,CAAC,IAAI,EAAE;AACpD,QAAO;EAAE,KAAK,IAAU,IAAK;EAAI,KAAK,IAAU,IAAK;EAAI;EAAM;;AAKjE,SAAgB,EAAgB,GAA+C;AAC7E,QAAO,EAAK,WAAW,KAAA,IAAY,EAAE,GAAG,EAAK,SAAS,GAAG;GAAG,EAAK,SAAS;EAAG,GAAG,EAAK;EAAS;;AAIhG,SAAgB,EAAW,GAA0D;AACnF,QAAO,UAAU;;AAKnB,SAAgB,EAAgB,GAAiB,GAAuB;CACtE,IAAI,IAAe;AACnB,MAAK,IAAM,KAAO,EAAK,MAAM,IAAI,EAAE;AACjC,MAAmB,OAAO,KAAQ,aAA9B,EAAwC;AAC5C,MAAO,EAAgC;;AAEzC,QAAO;;AAOT,SAAgB,EACd,GACA,GACU;AACV,KAAI,EAAW,EAAK,CAAE,QAAO,EAAK,UAAU,CAAC,IAAa,OAAO;CACjE,IAAM,IAAQ,GACR,IAAyD,EAAE;AACjE,MAAK,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,EAAM,SAAS,EAAE;EACzD,IAAM,IAAO,EAAmB,GAAO,EAAW;AAClD,EAAI,MAAM,EAAS,KAAO;;AAG5B,QADI,OAAO,KAAK,EAAS,CAAC,WAAW,IAAU,OACxC;EAAE,GAAG;EAAM;EAAU"}
@@ -0,0 +1,11 @@
1
+ var e = {
2
+ root: "_root_9a0rv_10",
3
+ segment: "_segment_9a0rv_32",
4
+ segmentSelected: "_segmentSelected_9a0rv_81",
5
+ size_sm: "_size_sm_9a0rv_139",
6
+ variant_minimal: "_variant_minimal_9a0rv_152"
7
+ };
8
+ //#endregion
9
+ export { e as t };
10
+
11
+ //# sourceMappingURL=segmentedControl.module-DS72X1ns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmentedControl.module-DS72X1ns.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: var(--wzl-space-1);\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 /* The track's stretch sizes a segment; without this, labkit's :where(button) height wins and overflows a small bar. */\n height: auto;\n padding: 0 var(--wzl-space-6);\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 var(--wzl-space-4);\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: var(--wzl-space-1);\n}\n\n.variant_minimal .segment {\n padding: 0 var(--wzl-space-2);\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,13 @@
1
+ //#region src/snap.ts
2
+ function e(e, t, n) {
3
+ let r = e, i = n;
4
+ for (let n of t) {
5
+ let t = Math.abs(n - e);
6
+ t <= i && (r = n, i = t);
7
+ }
8
+ return r;
9
+ }
10
+ //#endregion
11
+ export { e as t };
12
+
13
+ //# sourceMappingURL=snap-CEjuWOhN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snap-CEjuWOhN.js","names":[],"sources":["../../src/snap.ts"],"sourcesContent":["/** How close, in screen pixels, a drag has to come to a candidate to snap to it. */\nexport const SNAP_RADIUS_PX = 6;\n\n/** Snap `value` to the nearest candidate within `tolerance`, else return it. */\nexport function snapToNearest(value: number, candidates: readonly number[], tolerance: number): number {\n let best = value;\n let bestDist = tolerance;\n for (const c of candidates) {\n const d = Math.abs(c - value);\n if (d <= bestDist) {\n best = c;\n bestDist = d;\n }\n }\n return best;\n}\n"],"mappings":";AAIA,SAAgB,EAAc,GAAe,GAA+B,GAA2B;CACrG,IAAI,IAAO,GACP,IAAW;AACf,MAAK,IAAM,KAAK,GAAY;EAC1B,IAAM,IAAI,KAAK,IAAI,IAAI,EAAM;AAC7B,EAAI,KAAK,MACP,IAAO,GACP,IAAW;;AAGf,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRovingTabIndex-Dkpf_KhN.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-Dkpf_KhN.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.** What decides it is the items, not who\n * owns them. A container of 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: it draws its\n * own controls from a tool's schema now rather than taking arbitrary\n * children, and a schema-drawn number field eats arrows exactly as a\n * hand-placed one did, so it keeps plain DOM tab order. A bar whose items are\n * all simple buttons is the case this 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;;AAwBT,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,3 +1,4 @@
1
+ import { oklchDegToHex } from '@weasel-js/core';
1
2
  /**
2
3
  * A chroma envelope over lightness, as three linear segments: flat at `cBot`
3
4
  * below `lRange[0]`, rising to `cPeak` at `midL`, falling to `cTop` at
@@ -20,7 +21,7 @@ export type ChromaCurvePoint = {
20
21
  * Converts an OKLCH color to a gamut-clipped `#rrggbb` string. Hue is in
21
22
  * degrees, unlike the kit's OKLab helpers which take radians.
22
23
  */
23
- export declare function oklchToHex(L: number, C: number, Hdeg: number): string;
24
+ export declare const oklchToHex: typeof oklchDegToHex;
24
25
  /** Evaluates a {@link ChromaCurve} at a lightness, clamping outside its range. */
25
26
  export declare function chromaAt(L: number, curve: ChromaCurve): number;
26
27
  //# sourceMappingURL=oklch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oklch.d.ts","sourceRoot":"","sources":["../../src/color/oklch.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,gBAAgB,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAM9D"}
1
+ {"version":3,"file":"oklch.d.ts","sourceRoot":"","sources":["../../src/color/oklch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,gBAAgB,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,UAAU,sBAAgB,CAAC;AAExC,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAM9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../../src/components/ActionBar/ActionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAc7D,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAkE9C"}
1
+ {"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../../src/components/ActionBar/ActionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAc7D,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAiE9C"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ActionBar-DxGp3WuZ.js";
1
+ import { t as e } from "../../chunks/ActionBar-CLwiY3Jg.js";
2
2
  export { e as ActionBar };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ActionsBar-D1VFreoj.js";
1
+ import { t as e } from "../../chunks/ActionsBar-D84a4eGy.js";
2
2
  export { e as ActionsBar };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Badge-Bf8Rd1R6.js";
1
+ import { t as e } from "../../chunks/Badge-CW9pBPFl.js";
2
2
  export { e as Badge };
@@ -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;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
+ {"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;AAIf,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;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAgNrE"}
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../../chunks/BandEditor-BeWO56_w.js";
1
+ import { n as e, r as t, t as n } from "../../chunks/BandEditor-jY-PFKY6.js";
2
2
  export { n as BandEditor, e as linearScale, t as logScale };
@@ -1,11 +1,4 @@
1
- /**
2
- * Maps a domain value onto its position along the track, and back.
3
- *
4
- * Deliberately narrow — two functions over an explicit `[min, max]` — rather
5
- * than a general scale type for the package. `Plot2D`, `CurveEditor` and
6
- * `@weasel-js/core` each already use "scale" or "domain" to mean something
7
- * else; generalizing is a job for a second consumer that needs one.
8
- */
1
+ /** Maps a domain value onto its position along the track, and back. */
9
2
  export interface BandScale {
10
3
  /** Domain → position in [0,1]. Must be monotonic increasing. */
11
4
  toUnit(value: number, min: number, max: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/components/BandEditor/scale.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,2BAA2B;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,+CAA+C;AAC/C,eAAO,MAAM,WAAW,EAAE,SAGzB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,EAAE,SAUtB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,EAC/C,GAAG,EAAE,MAAM,GACV,SAAS,CAkBX"}
1
+ {"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/components/BandEditor/scale.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,2BAA2B;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,+CAA+C;AAC/C,eAAO,MAAM,WAAW,EAAE,SAGzB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,EAAE,SAUtB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,EAC/C,GAAG,EAAE,MAAM,GACV,SAAS,CAkBX"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Button-CExdkQcU.js";
1
+ import { t as e } from "../../chunks/Button-DRSApvnK.js";
2
2
  export { e as Button };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Callout-BPIA2is-.js";
1
+ import { n as e, t } from "../../chunks/Callout-DrNu-9Qr.js";
2
2
  export { t as Callout, e as CalloutTrigger };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Checkbox-D-pVpobU.js";
1
+ import { t as e } from "../../chunks/Checkbox-BOsDAY2F.js";
2
2
  export { e as Checkbox };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ColorField-C20aRvCg.js";
1
+ import { t as e } from "../../chunks/ColorField-BYzgZM9o.js";
2
2
  export { e as ColorField };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/ComboBox-CPES6Y1i.js";
1
+ import { n as e, t } from "../../chunks/ComboBox-Cz3f0Y_8.js";
2
2
  export { t as ComboBox, e as ComboBoxItem };
@@ -1 +1 @@
1
- {"version":3,"file":"createFunctionLayer.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/createFunctionLayer.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIhF,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,cAAc,CAAC;AAItB,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;iEAC6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC;kCAC8B;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC;IACrC,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACtD;;qEAEiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;wDAGoD;IACpD,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC;;sDAEkD;IAClD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA2DD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,mBAAwB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CA+SjG;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,kBAAkB,CAEtF"}
1
+ {"version":3,"file":"createFunctionLayer.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/createFunctionLayer.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKhF,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,cAAc,CAAC;AAItB,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;iEAC6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC;kCAC8B;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC;IACrC,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACtD;;qEAEiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;wDAGoD;IACpD,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC;;sDAEkD;IAClD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA6DD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,mBAAwB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CA+SjG;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,kBAAkB,CAEtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"createKeyframeLayer.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/createKeyframeLayer.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAmD,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIjG,OAAO,KAAK,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,wEAAwE;AACxE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gFAAgF;IAChF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oDAAoD;IACpD,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;qCACiC;IACjC,IAAI,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;AAYD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,kBAAkB,CAExF;AAsBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,GACxB;IAAE,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAWnE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,mBAAwB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CA4RjG"}
1
+ {"version":3,"file":"createKeyframeLayer.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/createKeyframeLayer.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAmD,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKjG,OAAO,KAAK,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,wEAAwE;AACxE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gFAAgF;IAChF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oDAAoD;IACpD,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;qCACiC;IACjC,IAAI,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;AAWD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,kBAAkB,CAExF;AAsBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,GACxB;IAAE,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAWnE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,mBAAwB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CA4RjG"}
@@ -1,7 +1,7 @@
1
1
  export { CurveEditor, type CurveEditorProps, } from './CurveEditor';
2
2
  export { type ControlPoint, type CurveDomain, type EndpointMode, type AddPointMode, type FillSettings, type CurveSettings, type AnchorRenderProps, createFunctionLayer, functionLayerState, type FunctionLayerConfig, type FunctionLayerState, } from './createFunctionLayer';
3
3
  export { createKeyframeLayer, keyframeLayerState, applyKeyframeDrag, type KeyframeDrag, type KeyframeLayerConfig, type KeyframeLayerState, } from './createKeyframeLayer';
4
- export { snapToNearest } from './snap';
4
+ export { snapToNearest } from '../../snap';
5
5
  export { LayeredCurveEditor, type LayeredCurveEditorProps, type LayerBinding, } from './LayeredCurveEditor';
6
6
  export type { CurveLayer, LayerCtx, LayerRenderCtx, LayerHit, LayerGesture, LayerModifiers, EmptyDownArgs, KeyDownArgs, ModelPoint, PlotPoint, } from './layerTypes';
7
7
  export { createSetCurveOp, type SetCurveAdapter, type CreateSetCurveOpArgs, } from './setCurveOp';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CurveEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
@@ -1,3 +1,4 @@
1
- import { a as e, i as t, n, r, t as i } from "../../chunks/CurveEditor-Cj0lLiyR.js";
2
- import { a, i as o, n as s, r as c, t as l } from "../../chunks/createKeyframeLayer-AL4jP0EX.js";
3
- export { n as CurveEditor, a as LayeredCurveEditor, l as applyKeyframeDrag, r as createFunctionLayer, s as createKeyframeLayer, i as createSetCurveOp, t as functionLayerState, c as keyframeLayerState, e as sampleByInterpolation, o as snapToNearest };
1
+ import { a as e, i as t, n, r, t as i } from "../../chunks/CurveEditor-DXwSP-iA.js";
2
+ import { i as a, n as o, r as s, t as c } from "../../chunks/createKeyframeLayer-DKtO0Sw_.js";
3
+ import { t as l } from "../../chunks/snap-CEjuWOhN.js";
4
+ export { n as CurveEditor, a as LayeredCurveEditor, c as applyKeyframeDrag, r as createFunctionLayer, o as createKeyframeLayer, i as createSetCurveOp, t as functionLayerState, s as keyframeLayerState, e as sampleByInterpolation, l as snapToNearest };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/DataGrid-BVdDMZkQ.js";
1
+ import { t as e } from "../../chunks/DataGrid-C8KrYtw7.js";
2
2
  export { e as DataGrid };
@@ -36,17 +36,16 @@ export type DetentSliderProps<V extends DetentValue = number> = {
36
36
  * Slider over a fixed list of values: one detent per value, evenly spaced, the
37
37
  * thumb resting on one of them.
38
38
  *
39
- * This is the shape to reach for when a numeric option has a small set of
40
- * allowed values along a line — playback rate, zoom step, stroke weight — in
41
- * place of a dropdown, which hides the ordering and the extent of the range
42
- * behind a click.
39
+ * This is the shape to reach for when an option has a small set of allowed
40
+ * values along a line — playback rate, zoom step, quality — in place of a
41
+ * dropdown, which hides the ordering and the extent of the range behind a
42
+ * click. The values need only be ordered, not numeric.
43
43
  *
44
- * The track addresses the *index* of `items`, not the value, which is what
45
- * makes the detents evenly spaced no matter how the values are distributed:
46
- * a geometric rate list (0.25/0.5/1/2/4) laid out linearly would crowd four
47
- * of its five detents into the first fifth of the track and leave the most
48
- * used one nearly unhittable. Since the index is meaningless to a screen
49
- * reader, the value is published as `aria-valuetext`.
44
+ * It is a strict {@link Slider} over the *index* of `items`, which keeps the
45
+ * detents evenly spaced however the values are distributed. Since the index is
46
+ * meaningless to a screen reader, the value is published as `aria-valuetext`.
47
+ * For numbers that may also rest between the detents, use `Slider` directly
48
+ * with `spacing="even"` and magnetic stops.
50
49
  */
51
50
  export declare function DetentSlider<V extends DetentValue = number>(props: DetentSliderProps<V>): ReactElement;
52
51
  //# sourceMappingURL=DetentSlider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetentSlider.d.ts","sourceRoot":"","sources":["../../../src/components/DetentSlider/DetentSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7E;2CAC2C;AAC3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,IAAI;IACvD,KAAK,EAAE,CAAC,CAAC;IACT,8EAA8E;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,IAAI;IAC9D,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACrD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkCF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,YAAY,CAkFtG"}
1
+ {"version":3,"file":"DetentSlider.d.ts","sourceRoot":"","sources":["../../../src/components/DetentSlider/DetentSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7E;2CAC2C;AAC3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,IAAI;IACvD,KAAK,EAAE,CAAC,CAAC;IACT,8EAA8E;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,IAAI;IAC9D,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACrD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkCF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,YAAY,CA4DtG"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/DetentSlider-CYicfnKr.js";
1
+ import { t as e } from "../../chunks/DetentSlider-CAubVX0J.js";
2
2
  export { e as DetentSlider };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Dialog-CYBLjwbd.js";
1
+ import { t as e } from "../../chunks/Dialog-fGqqQ6o_.js";
2
2
  export { e as Dialog };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Disclosure-DiA6UKdM.js";
1
+ import { n as e, t } from "../../chunks/Disclosure-CILDfWsU.js";
2
2
  export { t as Disclosure, e as DisclosureRow };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Field-dzlxOGxT.js";
1
+ import { n as e, t } from "../../chunks/Field-DWnV8WZY.js";
2
2
  export { t as Field, e as fieldClasses };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/FontFamilySelect-DIJ4phXz.js";
1
+ import { t as e } from "../../chunks/FontFamilySelect-DxfgTC3G.js";
2
2
  export { e as FontFamilySelect };
@@ -19,6 +19,9 @@ export interface GradientEditorProps {
19
19
  /** Show the linear / radial / conic switch. Default true; turn it off
20
20
  * when the surrounding UI already owns the kind. */
21
21
  kindSwitch?: boolean;
22
+ /** Show the sRGB / OKLab / OKLCh switch, which writes `interpolate`.
23
+ * Default true. */
24
+ spaceSwitch?: boolean;
22
25
  className?: string;
23
26
  }
24
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"GradientEditor.d.ts","sourceRoot":"","sources":["../../../src/components/GradientEditor/GradientEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAgBzB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC;0BACsB;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC;yDACqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAoEvE"}
1
+ {"version":3,"file":"GradientEditor.d.ts","sourceRoot":"","sources":["../../../src/components/GradientEditor/GradientEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAKL,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAsBzB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC;0BACsB;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC;yDACqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;wBACoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAiFvE"}
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../../chunks/GradientEditor-dBprHbS0.js";
1
+ import { n as e, r as t, t as n } from "../../chunks/GradientEditor-rRBmf3G0.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-CcfzY80y.js";
1
+ import { t as e } from "../../chunks/InlineRange-DdIlfGqG.js";
2
2
  export { e as InlineRange };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Input-CoKOtyD0.js";
1
+ import { t as e } from "../../chunks/Input-DbMKpkXy.js";
2
2
  export { e as Input };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ItemList-BZJQReXD.js";
1
+ import { t as e } from "../../chunks/ItemList-B9zYb0GE.js";
2
2
  export { e as ItemList };
@@ -0,0 +1,28 @@
1
+ import type { ReactNode } from 'react';
2
+ /** Props for {@link Jog}. */
3
+ export interface JogProps {
4
+ /** Which step is showing, 0-based. */
5
+ index: number;
6
+ /** How many steps there are. */
7
+ count: number;
8
+ playing: boolean;
9
+ onPlay: (playing: boolean) => void;
10
+ /** Move one step, back or forward. */
11
+ onStep: (by: -1 | 1) => void;
12
+ /** Jump to a step. Left out, no scrubber is drawn. */
13
+ onScrub?: (index: number) => void;
14
+ /** What one step is called, for the spoken labels. Defaults to `Step`. */
15
+ unit?: string;
16
+ /** Drawn after the readout — a beat's caption, a snapshot's date. */
17
+ caption?: ReactNode;
18
+ className?: string;
19
+ }
20
+ /**
21
+ * Transport for something counted rather than timed: beat 3 of 24, not 4.20s of 12.00s.
22
+ * `<Transport>` is the continuous-time one, and wants a playhead in milliseconds, a rate and
23
+ * a loop, none of which a list of steps has.
24
+ *
25
+ * Named for the jog of jog/shuttle — moving one frame at a time, as against running at speed.
26
+ */
27
+ export declare function Jog(props: JogProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=Jog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Jog.d.ts","sourceRoot":"","sources":["../../../src/components/Jog/Jog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,6BAA6B;AAC7B,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,sCAAsC;IACtC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7B,sDAAsD;IACtD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,2CA6DlC"}
@@ -0,0 +1,3 @@
1
+ export { Jog } from './Jog';
2
+ export type { JogProps } from './Jog';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Jog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { t as e } from "../../chunks/Jog-DkkTlL3_.js";
2
+ export { e as Jog };
@@ -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-DSeq6QWH.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/Keycaps-DunVpejA.js";
2
2
  import { t as o } from "../../chunks/keyGlyph-Bp0wnLHn.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 };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/LayerStack-DOylrQcm.js";
1
+ import { t as e } from "../../chunks/LayerStack-CfQ6GsRz.js";
2
2
  export { e as LayerStack };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/MenuButton-Do8fFUx1.js";
1
+ import { t as e } from "../../chunks/MenuButton-C_4nox39.js";
2
2
  export { e as MenuButton };