@weasel-js/ui 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/dist/chunks/{ActionBar-DxGp3WuZ.js → ActionBar-GZdcfdQL.js} +1 -2
  2. package/dist/chunks/{ActionBar-DxGp3WuZ.js.map → ActionBar-GZdcfdQL.js.map} +1 -1
  3. package/dist/chunks/{ActionsBar-D1VFreoj.js → ActionsBar-Fhx_40iP.js} +2 -2
  4. package/dist/chunks/{ActionsBar-D1VFreoj.js.map → ActionsBar-Fhx_40iP.js.map} +1 -1
  5. package/dist/chunks/{BandEditor-BeWO56_w.js → BandEditor-D8I5Uun-.js} +93 -98
  6. package/dist/chunks/BandEditor-D8I5Uun-.js.map +1 -0
  7. package/dist/chunks/{Callout-BPIA2is-.js → Callout-cx5_CWcW.js} +1 -1
  8. package/dist/chunks/{Callout-BPIA2is-.js.map → Callout-cx5_CWcW.js.map} +1 -1
  9. package/dist/chunks/{Checkbox-D-pVpobU.js → Checkbox-BZZsPaVF.js} +1 -1
  10. package/dist/chunks/{Checkbox-D-pVpobU.js.map → Checkbox-BZZsPaVF.js.map} +1 -1
  11. package/dist/chunks/{ColorField-C20aRvCg.js → ColorField-YVf8irfr.js} +2 -2
  12. package/dist/chunks/{ColorField-C20aRvCg.js.map → ColorField-YVf8irfr.js.map} +1 -1
  13. package/dist/chunks/{ComboBox-CPES6Y1i.js → ComboBox-D57tNYDD.js} +2 -2
  14. package/dist/chunks/{ComboBox-CPES6Y1i.js.map → ComboBox-D57tNYDD.js.map} +1 -1
  15. package/dist/chunks/{CurveEditor-Cj0lLiyR.js → CurveEditor-BXiMoN9d.js} +175 -175
  16. package/dist/chunks/CurveEditor-BXiMoN9d.js.map +1 -0
  17. package/dist/chunks/DetentSlider-BWNSv07Z.js +72 -0
  18. package/dist/chunks/DetentSlider-BWNSv07Z.js.map +1 -0
  19. package/dist/chunks/{Dialog-CYBLjwbd.js → Dialog-DuOzsR2g.js} +1 -1
  20. package/dist/chunks/{Dialog-CYBLjwbd.js.map → Dialog-DuOzsR2g.js.map} +1 -1
  21. package/dist/chunks/{Disclosure-DiA6UKdM.js → Disclosure-9UgDzc7Z.js} +6 -6
  22. package/dist/chunks/{Disclosure-DiA6UKdM.js.map → Disclosure-9UgDzc7Z.js.map} +1 -1
  23. package/dist/chunks/{Field-dzlxOGxT.js → Field-BNqvUJfg.js} +1 -1
  24. package/dist/chunks/{Field-dzlxOGxT.js.map → Field-BNqvUJfg.js.map} +1 -1
  25. package/dist/chunks/{FontFamilySelect-DIJ4phXz.js → FontFamilySelect-CO19kyOO.js} +2 -2
  26. package/dist/chunks/{FontFamilySelect-DIJ4phXz.js.map → FontFamilySelect-CO19kyOO.js.map} +1 -1
  27. package/dist/chunks/{GradientEditor-dBprHbS0.js → GradientEditor-B_ymIr4Q.js} +74 -51
  28. package/dist/chunks/GradientEditor-B_ymIr4Q.js.map +1 -0
  29. package/dist/chunks/Icon-QhLhaGFe.js +498 -0
  30. package/dist/chunks/Icon-QhLhaGFe.js.map +1 -0
  31. package/dist/chunks/{InlineRange-CcfzY80y.js → InlineRange-DdIlfGqG.js} +2 -2
  32. package/dist/chunks/{InlineRange-CcfzY80y.js.map → InlineRange-DdIlfGqG.js.map} +1 -1
  33. package/dist/chunks/{Input-CoKOtyD0.js → Input-B9Vh7ASP.js} +2 -2
  34. package/dist/chunks/{Input-CoKOtyD0.js.map → Input-B9Vh7ASP.js.map} +1 -1
  35. package/dist/chunks/Jog-BYrxbAQU.js +81 -0
  36. package/dist/chunks/Jog-BYrxbAQU.js.map +1 -0
  37. package/dist/chunks/{Keycaps-DSeq6QWH.js → Keycaps-CGNQV2Pz.js} +5 -5
  38. package/dist/chunks/Keycaps-CGNQV2Pz.js.map +1 -0
  39. package/dist/chunks/{MenuButton-Do8fFUx1.js → MenuButton-DGE-0DP0.js} +1 -1
  40. package/dist/chunks/{MenuButton-Do8fFUx1.js.map → MenuButton-DGE-0DP0.js.map} +1 -1
  41. package/dist/chunks/MeshEditor-CHoGQ9K8.js +123 -0
  42. package/dist/chunks/MeshEditor-CHoGQ9K8.js.map +1 -0
  43. package/dist/chunks/{NumberField-BWzhqS19.js → NumberField-CQzS6TjF.js} +2 -2
  44. package/dist/chunks/{NumberField-BWzhqS19.js.map → NumberField-CQzS6TjF.js.map} +1 -1
  45. package/dist/chunks/{OptionsBar-D_Cd3ZYs.js → OptionsBar-BWaYG_OH.js} +2 -2
  46. package/dist/chunks/{OptionsBar-D_Cd3ZYs.js.map → OptionsBar-BWaYG_OH.js.map} +1 -1
  47. package/dist/chunks/PaintField-BVYMu3OI.js +62 -0
  48. package/dist/chunks/PaintField-BVYMu3OI.js.map +1 -0
  49. package/dist/chunks/PaintInput-BzAHCKro.js +131 -0
  50. package/dist/chunks/PaintInput-BzAHCKro.js.map +1 -0
  51. package/dist/chunks/{PatternPicker-Ba22Bf4L.js → PatternPicker-C4OryrYi.js} +2 -2
  52. package/dist/chunks/{PatternPicker-Ba22Bf4L.js.map → PatternPicker-C4OryrYi.js.map} +1 -1
  53. package/dist/chunks/{Plot2D-CVZwQpWJ.js → Plot2D-Czvyt_vG.js} +1 -1
  54. package/dist/chunks/{Plot2D-CVZwQpWJ.js.map → Plot2D-Czvyt_vG.js.map} +1 -1
  55. package/dist/chunks/{PointPlotter-anTHwz8f.js → PointPlotter-Xvb98GwB.js} +2 -2
  56. package/dist/chunks/{PointPlotter-anTHwz8f.js.map → PointPlotter-Xvb98GwB.js.map} +1 -1
  57. package/dist/chunks/{Powerline-BaHDJlcO.js → Powerline-B_EH-7Z-.js} +1 -1
  58. package/dist/chunks/{Powerline-BaHDJlcO.js.map → Powerline-B_EH-7Z-.js.map} +1 -1
  59. package/dist/chunks/Prefs-FuaJBs3t.js +308 -0
  60. package/dist/chunks/Prefs-FuaJBs3t.js.map +1 -0
  61. package/dist/chunks/Properties-B3KU69NI.js +874 -0
  62. package/dist/chunks/Properties-B3KU69NI.js.map +1 -0
  63. package/dist/chunks/{RadioGroup-B2_LUgDp.js → RadioGroup-C6xpdQNg.js} +2 -2
  64. package/dist/chunks/{RadioGroup-B2_LUgDp.js.map → RadioGroup-C6xpdQNg.js.map} +1 -1
  65. package/dist/chunks/{RangeSlider-S2R3zA8N.js → RangeSlider-CzgeGLVS.js} +1 -1
  66. package/dist/chunks/{RangeSlider-S2R3zA8N.js.map → RangeSlider-CzgeGLVS.js.map} +1 -1
  67. package/dist/chunks/{ResizeHandle-CiExUWP-.js → ResizeHandle-1Ey8AOij.js} +1 -1
  68. package/dist/chunks/{ResizeHandle-CiExUWP-.js.map → ResizeHandle-1Ey8AOij.js.map} +1 -1
  69. package/dist/chunks/{Select-CacMfs4v.js → Select-BMYVh10x.js} +20 -17
  70. package/dist/chunks/Select-BMYVh10x.js.map +1 -0
  71. package/dist/chunks/{SelectionPanel-CbyUT3Dh.js → SelectionPanel-DTpcQidl.js} +12 -12
  72. package/dist/chunks/{SelectionPanel-CbyUT3Dh.js.map → SelectionPanel-DTpcQidl.js.map} +1 -1
  73. package/dist/chunks/{Sidebar-Cqcfx3_s.js → Sidebar-BlUjn8lD.js} +1 -1
  74. package/dist/chunks/{Sidebar-Cqcfx3_s.js.map → Sidebar-BlUjn8lD.js.map} +1 -1
  75. package/dist/chunks/{SidebarPanel-BLzBo0S2.js → SidebarPanel-BqHfz6VK.js} +2 -2
  76. package/dist/chunks/{SidebarPanel-BLzBo0S2.js.map → SidebarPanel-BqHfz6VK.js.map} +1 -1
  77. package/dist/chunks/Slider-B2ywUZH6.js +381 -0
  78. package/dist/chunks/Slider-B2ywUZH6.js.map +1 -0
  79. package/dist/chunks/{StatusBar-B9NQ8atD.js → StatusBar-BFt7Yw5O.js} +1 -1
  80. package/dist/chunks/{StatusBar-B9NQ8atD.js.map → StatusBar-BFt7Yw5O.js.map} +1 -1
  81. package/dist/chunks/{Switch-C4NU-me1.js → Switch-Om3t3ASc.js} +1 -1
  82. package/dist/chunks/{Switch-C4NU-me1.js.map → Switch-Om3t3ASc.js.map} +1 -1
  83. package/dist/chunks/{Tabs-9sODd2Ut.js → Tabs-EAvYywil.js} +1 -1
  84. package/dist/chunks/{Tabs-9sODd2Ut.js.map → Tabs-EAvYywil.js.map} +1 -1
  85. package/dist/chunks/{Timeline-DOZgb1CG.js → Timeline-BEyKaBXl.js} +254 -253
  86. package/dist/chunks/Timeline-BEyKaBXl.js.map +1 -0
  87. package/dist/chunks/{Toast-LpN1WK8E.js → Toast-iqLDD_XZ.js} +1 -1
  88. package/dist/chunks/{Toast-LpN1WK8E.js.map → Toast-iqLDD_XZ.js.map} +1 -1
  89. package/dist/chunks/{ToggleBar-Bxwv6xvj.js → ToggleBar--9As2PWG.js} +8 -8
  90. package/dist/chunks/ToggleBar--9As2PWG.js.map +1 -0
  91. package/dist/chunks/TokenPanel-BL9hlq7x.js +374 -0
  92. package/dist/chunks/TokenPanel-BL9hlq7x.js.map +1 -0
  93. package/dist/chunks/{ToolButton-B81YjdwO.js → ToolButton-Dd-1T5aX.js} +1 -1
  94. package/dist/chunks/{ToolButton-B81YjdwO.js.map → ToolButton-Dd-1T5aX.js.map} +1 -1
  95. package/dist/chunks/{ToolGroup-D7juDOC_.js → ToolGroup-BBI-W-Gm.js} +1 -1
  96. package/dist/chunks/{ToolGroup-D7juDOC_.js.map → ToolGroup-BBI-W-Gm.js.map} +1 -1
  97. package/dist/chunks/{ToolPalette-BSzmRJS7.js → ToolPalette-BmTDDpmz.js} +3 -3
  98. package/dist/chunks/{ToolPalette-BSzmRJS7.js.map → ToolPalette-BmTDDpmz.js.map} +1 -1
  99. package/dist/chunks/{createKeyframeLayer-AL4jP0EX.js → createKeyframeLayer-7j7ukrSx.js} +198 -193
  100. package/dist/chunks/createKeyframeLayer-7j7ukrSx.js.map +1 -0
  101. package/dist/chunks/{icons-BV27dhKB.js → icons-Btrs-JD7.js} +35 -32
  102. package/dist/chunks/icons-Btrs-JD7.js.map +1 -0
  103. package/dist/chunks/range.module-DSsOIq1R.js +8 -0
  104. package/dist/chunks/range.module-DSsOIq1R.js.map +1 -0
  105. package/dist/chunks/{schema-CPdFNeP6.js → schema-MCVT1MLv.js} +1 -1
  106. package/dist/chunks/{schema-CPdFNeP6.js.map → schema-MCVT1MLv.js.map} +1 -1
  107. package/dist/chunks/segmentedControl.module-DmeUMYe3.js +11 -0
  108. package/dist/chunks/segmentedControl.module-DmeUMYe3.js.map +1 -0
  109. package/dist/chunks/snap-B0WQwetQ.js +13 -0
  110. package/dist/chunks/snap-B0WQwetQ.js.map +1 -0
  111. package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
  112. package/dist/components/ActionBar/index.js +1 -1
  113. package/dist/components/ActionsBar/index.js +1 -1
  114. package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
  115. package/dist/components/BandEditor/index.js +1 -1
  116. package/dist/components/BandEditor/scale.d.ts +1 -8
  117. package/dist/components/BandEditor/scale.d.ts.map +1 -1
  118. package/dist/components/Callout/index.js +1 -1
  119. package/dist/components/Checkbox/index.js +1 -1
  120. package/dist/components/ColorField/index.js +1 -1
  121. package/dist/components/ComboBox/index.js +1 -1
  122. package/dist/components/CurveEditor/createFunctionLayer.d.ts.map +1 -1
  123. package/dist/components/CurveEditor/createKeyframeLayer.d.ts.map +1 -1
  124. package/dist/components/CurveEditor/index.d.ts +1 -1
  125. package/dist/components/CurveEditor/index.d.ts.map +1 -1
  126. package/dist/components/CurveEditor/index.js +4 -3
  127. package/dist/components/DetentSlider/DetentSlider.d.ts +9 -10
  128. package/dist/components/DetentSlider/DetentSlider.d.ts.map +1 -1
  129. package/dist/components/DetentSlider/index.js +1 -1
  130. package/dist/components/Dialog/index.js +1 -1
  131. package/dist/components/Disclosure/index.js +1 -1
  132. package/dist/components/Field/index.js +1 -1
  133. package/dist/components/FontFamilySelect/index.js +1 -1
  134. package/dist/components/GradientEditor/GradientEditor.d.ts +3 -0
  135. package/dist/components/GradientEditor/GradientEditor.d.ts.map +1 -1
  136. package/dist/components/GradientEditor/index.js +1 -1
  137. package/dist/components/InlineRange/index.js +1 -1
  138. package/dist/components/Input/index.js +1 -1
  139. package/dist/components/Jog/Jog.d.ts +28 -0
  140. package/dist/components/Jog/Jog.d.ts.map +1 -0
  141. package/dist/components/Jog/index.d.ts +3 -0
  142. package/dist/components/Jog/index.d.ts.map +1 -0
  143. package/dist/components/Jog/index.js +2 -0
  144. package/dist/components/Keycaps/index.js +1 -1
  145. package/dist/components/MenuButton/index.js +1 -1
  146. package/dist/components/MeshEditor/MeshEditor.d.ts +30 -0
  147. package/dist/components/MeshEditor/MeshEditor.d.ts.map +1 -0
  148. package/dist/components/MeshEditor/index.d.ts +3 -0
  149. package/dist/components/MeshEditor/index.d.ts.map +1 -0
  150. package/dist/components/MeshEditor/index.js +2 -0
  151. package/dist/components/NumberField/index.js +1 -1
  152. package/dist/components/OptionsBar/index.js +1 -1
  153. package/dist/components/PaintField/PaintField.d.ts +36 -0
  154. package/dist/components/PaintField/PaintField.d.ts.map +1 -0
  155. package/dist/components/PaintField/index.d.ts +3 -0
  156. package/dist/components/PaintField/index.d.ts.map +1 -0
  157. package/dist/components/PaintField/index.js +2 -0
  158. package/dist/components/PaintInput/PaintInput.d.ts.map +1 -1
  159. package/dist/components/PaintInput/index.js +1 -1
  160. package/dist/components/PatternPicker/index.js +1 -1
  161. package/dist/components/Plot2D/index.js +1 -1
  162. package/dist/components/PointPlotter/index.js +1 -1
  163. package/dist/components/Powerline/index.js +1 -1
  164. package/dist/components/Prefs/PrefsForm.d.ts +4 -0
  165. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  166. package/dist/components/Prefs/index.js +2 -2
  167. package/dist/components/Properties/PinDot.d.ts +18 -0
  168. package/dist/components/Properties/PinDot.d.ts.map +1 -0
  169. package/dist/components/Properties/PropertyPanel.d.ts +93 -8
  170. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  171. package/dist/components/Properties/index.d.ts +4 -2
  172. package/dist/components/Properties/index.d.ts.map +1 -1
  173. package/dist/components/Properties/index.js +2 -2
  174. package/dist/components/Properties/storyLayouts.d.ts +1 -1
  175. package/dist/components/RadioGroup/index.js +1 -1
  176. package/dist/components/RangeSlider/index.js +1 -1
  177. package/dist/components/ResizeHandle/index.js +1 -1
  178. package/dist/components/Select/Select.d.ts +8 -0
  179. package/dist/components/Select/Select.d.ts.map +1 -1
  180. package/dist/components/Select/index.js +1 -1
  181. package/dist/components/SelectionPanel/index.js +1 -1
  182. package/dist/components/Sidebar/index.js +1 -1
  183. package/dist/components/SidebarPanel/index.js +1 -1
  184. package/dist/components/Slider/Slider.d.ts +19 -1
  185. package/dist/components/Slider/Slider.d.ts.map +1 -1
  186. package/dist/components/Slider/index.d.ts +1 -1
  187. package/dist/components/Slider/index.d.ts.map +1 -1
  188. package/dist/components/Slider/index.js +1 -1
  189. package/dist/components/StatusBar/index.js +1 -1
  190. package/dist/components/Switch/index.js +1 -1
  191. package/dist/components/Tabs/index.js +1 -1
  192. package/dist/components/Timeline/Lane.d.ts.map +1 -1
  193. package/dist/components/Timeline/index.js +2 -2
  194. package/dist/components/Timeline/keys.d.ts +1 -1
  195. package/dist/components/Timeline/keys.d.ts.map +1 -1
  196. package/dist/components/Toast/index.js +1 -1
  197. package/dist/components/ToggleBar/index.js +1 -1
  198. package/dist/components/TokenPanel/TokenPanel.d.ts +33 -0
  199. package/dist/components/TokenPanel/TokenPanel.d.ts.map +1 -0
  200. package/dist/components/TokenPanel/color.d.ts +7 -0
  201. package/dist/components/TokenPanel/color.d.ts.map +1 -0
  202. package/dist/components/TokenPanel/index.d.ts +5 -0
  203. package/dist/components/TokenPanel/index.d.ts.map +1 -0
  204. package/dist/components/TokenPanel/index.js +2 -0
  205. package/dist/components/TokenPanel/tokenTypes.d.ts +31 -0
  206. package/dist/components/TokenPanel/tokenTypes.d.ts.map +1 -0
  207. package/dist/components/ToolButton/index.js +1 -1
  208. package/dist/components/ToolGroup/index.js +1 -1
  209. package/dist/components/ToolPalette/index.js +1 -1
  210. package/dist/components/paintValue.d.ts +8 -0
  211. package/dist/components/paintValue.d.ts.map +1 -1
  212. package/dist/handles.d.ts +20 -0
  213. package/dist/handles.d.ts.map +1 -0
  214. package/dist/icons/Icon.d.ts +10 -2
  215. package/dist/icons/Icon.d.ts.map +1 -1
  216. package/dist/icons/index.d.ts +6 -3
  217. package/dist/icons/index.d.ts.map +1 -1
  218. package/dist/icons/paths.d.ts +270 -16
  219. package/dist/icons/paths.d.ts.map +1 -1
  220. package/dist/index.d.ts +7 -0
  221. package/dist/index.d.ts.map +1 -1
  222. package/dist/index.js +75 -70
  223. package/dist/index.js.map +1 -1
  224. package/dist/paintPreview.d.ts +13 -0
  225. package/dist/paintPreview.d.ts.map +1 -0
  226. package/dist/{components/CurveEditor/snap.d.ts → snap.d.ts} +2 -0
  227. package/dist/snap.d.ts.map +1 -0
  228. package/dist/style.css +1 -1
  229. package/package.json +8 -7
  230. package/dist/chunks/BandEditor-BeWO56_w.js.map +0 -1
  231. package/dist/chunks/CurveEditor-Cj0lLiyR.js.map +0 -1
  232. package/dist/chunks/DetentSlider-CYicfnKr.js +0 -83
  233. package/dist/chunks/DetentSlider-CYicfnKr.js.map +0 -1
  234. package/dist/chunks/GradientEditor-dBprHbS0.js.map +0 -1
  235. package/dist/chunks/Icon-DBXtBB1f.js +0 -101
  236. package/dist/chunks/Icon-DBXtBB1f.js.map +0 -1
  237. package/dist/chunks/Keycaps-DSeq6QWH.js.map +0 -1
  238. package/dist/chunks/PaintInput-DAevU7fd.js +0 -118
  239. package/dist/chunks/PaintInput-DAevU7fd.js.map +0 -1
  240. package/dist/chunks/Prefs-CzIn-hlq.js +0 -302
  241. package/dist/chunks/Prefs-CzIn-hlq.js.map +0 -1
  242. package/dist/chunks/Properties-DJaDEJkT.js +0 -765
  243. package/dist/chunks/Properties-DJaDEJkT.js.map +0 -1
  244. package/dist/chunks/Select-CacMfs4v.js.map +0 -1
  245. package/dist/chunks/Slider--DFRC_hc.js +0 -303
  246. package/dist/chunks/Slider--DFRC_hc.js.map +0 -1
  247. package/dist/chunks/Timeline-DOZgb1CG.js.map +0 -1
  248. package/dist/chunks/ToggleBar-Bxwv6xvj.js.map +0 -1
  249. package/dist/chunks/createKeyframeLayer-AL4jP0EX.js.map +0 -1
  250. package/dist/chunks/icons-BV27dhKB.js.map +0 -1
  251. package/dist/chunks/range.module-CvSfABmu.js +0 -8
  252. package/dist/chunks/range.module-CvSfABmu.js.map +0 -1
  253. package/dist/chunks/segmentedControl.module-BgvAPkSZ.js +0 -11
  254. package/dist/chunks/segmentedControl.module-BgvAPkSZ.js.map +0 -1
  255. package/dist/components/CurveEditor/snap.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createKeyframeLayer-7j7ukrSx.js","names":[],"sources":["../../src/components/CurveEditor/hitTest.ts","../../src/handles.ts","../../src/components/CurveEditor/CurveEditor.module.css","../../src/components/CurveEditor/LayeredCurveEditor.tsx","../../src/components/CurveEditor/createKeyframeLayer.tsx"],"sourcesContent":["/**\n * Curve-specific hit tests. Generic coord transforms live in\n * `../Plot2D/geometry`; what's here is curve-only (anchor / polyline\n * proximity).\n */\nimport type { Point } from '../Plot2D/geometry';\n\n/**\n * Nearest-anchor hit test. Anchors are already in plot/screen coords.\n * Returns the index of the nearest anchor whose squared distance to\n * the pointer is ≤ radius². Null if no anchor is within radius.\n */\nexport function hitTestAnchor(\n anchors: readonly Point[],\n pointer: Point,\n radius: number,\n): { index: number } | null {\n const r2 = radius * radius;\n let best: { index: number; d2: number } | null = null;\n for (let i = 0; i < anchors.length; i++) {\n const a = anchors[i];\n const dx = a.x - pointer.x;\n const dy = a.y - pointer.y;\n const d2 = dx * dx + dy * dy;\n if (d2 > r2) continue;\n if (best === null || d2 < best.d2) best = { index: i, d2 };\n }\n return best ? { index: best.index } : null;\n}\n\n/**\n * Hit test against a per-segment sampled polyline. Each entry in\n * `segments` is the sample list for one segment (inclusive of\n * endpoints). Returns segment index + t (∈ [0, 1]) of the closest\n * point on the polyline within radius. Null if nothing is in range.\n *\n * Distance is measured to the line-segment chords between adjacent\n * samples, not just to the samples themselves — so sparse sampling\n * still produces accurate hits along the chord.\n */\nexport function hitTestCurve(\n segments: readonly (readonly Point[])[],\n pointer: Point,\n radius: number,\n): { segIdx: number; t: number } | null {\n const r2 = radius * radius;\n let best: { segIdx: number; t: number; d2: number } | null = null;\n for (let segIdx = 0; segIdx < segments.length; segIdx++) {\n const samples = segments[segIdx];\n if (samples.length < 2) continue;\n const last = samples.length - 1;\n for (let i = 0; i < last; i++) {\n const a = samples[i];\n const b = samples[i + 1];\n const abx = b.x - a.x;\n const aby = b.y - a.y;\n const apx = pointer.x - a.x;\n const apy = pointer.y - a.y;\n const ab2 = abx * abx + aby * aby;\n let u = ab2 > 0 ? (apx * abx + apy * aby) / ab2 : 0;\n if (u < 0) u = 0;\n else if (u > 1) u = 1;\n const cx = a.x + u * abx;\n const cy = a.y + u * aby;\n const dx = cx - pointer.x;\n const dy = cy - pointer.y;\n const d2 = dx * dx + dy * dy;\n if (d2 > r2) continue;\n const t = (i + u) / last;\n if (best === null || d2 < best.d2) best = { segIdx, t, d2 };\n }\n }\n return best ? { segIdx: best.segIdx, t: best.t } : null;\n}\n","import { tokenPx } from '@weasel-js/theme';\nimport type { ResolvedTheme } from '@weasel-js/theme';\n\n/**\n * The handle sizes the theme publishes: the default rank, the inert one a\n * locked or pinned point wears, and the emphasized one for a handle that is\n * its own category.\n */\nexport const HANDLE_SIZE_TOKENS = [\n '--wzl-handle-size', '--wzl-handle-size-sm', '--wzl-handle-size-lg',\n] as const;\n\n/** One of {@link HANDLE_SIZE_TOKENS}. */\nexport type HandleSizeToken = (typeof HANDLE_SIZE_TOKENS)[number];\n\n/**\n * A handle's edge in px, for code that draws a handle instead of styling one.\n *\n * CSS reaches `--wzl-handle-*` directly; SVG geometry attributes and canvas\n * cannot, so they come through here and the number stays written once, in the\n * theme definition.\n */\nexport function handleSize(token: HandleSizeToken, resolved?: ResolvedTheme): number {\n return tokenPx(token, resolved);\n}\n\n/** Half a handle's edge — what an SVG rect centered on a point offsets by. */\nexport function handleHalf(token: HandleSizeToken, resolved?: ResolvedTheme): number {\n return handleSize(token, resolved) / 2;\n}\n",".root {\n /* Component-local vars layered over the theme tokens. Each var resolves\n * to a semantic token from @weasel-js/theme; consumers override\n * either the curve-* var (component scope) or the wzl-* token (app\n * scope) without touching this file.\n *\n * Background / grid / axis tokens live on Plot2D now (this component\n * composes Plot2D, which paints the background and chrome). */\n --curve-line: var(--wzl-curve-color);\n --curve-line-width: var(--wzl-curve-width);\n --curve-fill: color-mix(in srgb, var(--curve-line) 30%, transparent);\n --curve-anchor-fill: var(--wzl-surface);\n --curve-anchor-stroke: var(--curve-line);\n --curve-anchor-active-fill: var(--curve-line);\n --curve-pinned-fill: var(--wzl-fg-subtle);\n}\n\n.fill {\n fill: var(--curve-fill);\n stroke: none;\n pointer-events: none;\n}\n\n.curve {\n stroke: var(--curve-line);\n stroke-width: var(--curve-line-width);\n fill: none;\n pointer-events: stroke;\n}\n\n.anchor {\n fill: var(--curve-anchor-fill);\n stroke: var(--curve-anchor-stroke);\n stroke-width: 1.5;\n cursor: grab;\n}\n\n.anchor:hover {\n fill: var(--curve-anchor-active-fill);\n}\n\n.anchor.active {\n fill: var(--curve-anchor-active-fill);\n cursor: grabbing;\n}\n\n.anchor.pinned {\n fill: var(--curve-pinned-fill);\n cursor: default;\n}\n\n/* Caller-set locked anchors share the gray pinned fill but signal\n * \"not interactive at all\" via the not-allowed cursor. */\n.anchor.locked {\n cursor: not-allowed;\n}\n\n/* Endpoint vertices render as diamonds (rotated squares) instead of\n * circles, so they read as a different category of handle. The shape\n * is enforced inline via SVG <rect transform>; this class only adds\n * the hover/active styling. */\n.endpoint {\n /* No fill / stroke overrides — endpoint visuals reuse .anchor /\n * .anchor.pinned / .anchor.active styling. The class exists as a\n * marker for future per-endpoint styling needs. */\n}\n\n/* When the consumer opts into hiding non-interactive handles, pinned\n * endpoints disappear entirely. */\n.hidden {\n display: none;\n}\n\n/* Focus is drawn on the mark itself: an outline on an SVG shape rings its\n bounding box, which the nearest scroll container clips. */\n.anchor:focus-visible {\n outline: none;\n stroke: var(--wzl-focus-ring);\n stroke-width: 2;\n}\n\n/* ── keyframe layer ─────────────────────────────────────────────────── */\n\n.keyframe {\n fill: var(--curve-key-fill, var(--wzl-fg-muted));\n cursor: grab;\n}\n\n.keyframe[aria-current='true'] { fill: var(--curve-selected, var(--wzl-accent-strong)); }\n.keyframe:focus-visible,\n.handle:focus-visible {\n outline: none;\n stroke: var(--wzl-focus-ring);\n stroke-width: 2;\n}\n\n.segmentTarget:focus-visible {\n outline: none;\n stroke: var(--wzl-focus-ring);\n stroke-opacity: 0.5;\n}\n\n/* The committed key holds while its ghost tracks the pointer, so a drag\n reads as a move from somewhere to somewhere. */\n.keyframe[data-dragging='true'] { opacity: 0.4; }\n\n.keyframeGhost {\n fill: var(--curve-selected-soft, var(--wzl-accent-soft));\n stroke: var(--curve-selected, var(--wzl-accent-strong));\n stroke-width: 1;\n stroke-dasharray: 2 2;\n pointer-events: none;\n}\n\n.segmentBand {\n fill: var(--curve-selected-soft, var(--wzl-accent-soft));\n pointer-events: none;\n}\n\n/* Carries focus and a name for each segment; hit testing is geometric. */\n.segmentTarget {\n fill: none;\n stroke: transparent;\n stroke-width: 8;\n pointer-events: none;\n}\n\n.handle {\n fill: var(--wzl-surface);\n stroke: var(--curve-selected, var(--wzl-accent-strong));\n stroke-width: 1;\n cursor: grab;\n}\n\n.handleStem {\n stroke: var(--curve-selected, var(--wzl-accent-strong));\n stroke-width: 1;\n pointer-events: none;\n}\n","import {\n useCallback, useEffect, useMemo, useRef, useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { openPointerSession, type PointerSession } from '@weasel-js/core';\nimport {\n Plot2D,\n type Plot2DHandle,\n type GridSettings,\n type AxesSettings,\n type TickSettings,\n} from '../Plot2D';\nimport {\n modelToPlot, plotToModel,\n type ModelRange,\n} from '../Plot2D/geometry';\nimport { dlog } from '../../dlog';\nimport s from './CurveEditor.module.css';\nimport type {\n CurveLayer, LayerCtx, LayerGesture, LayerModifiers, ModelPoint, PlotPoint,\n} from './layerTypes';\n\n/**\n * A layer paired with the state the consumer holds for it. The editor never\n * stores layer state itself.\n */\nexport interface LayerBinding<S = unknown> {\n layer: CurveLayer<S>;\n state: S;\n}\n\n/** Props for {@link LayeredCurveEditor}. */\nexport interface LayeredCurveEditorProps {\n /** Bottom-to-top render order: `layers[0]` paints first, `layers[N-1]`\n * paints on top. Hit-testing runs in reverse (topmost claim wins). */\n layers: ReadonlyArray<LayerBinding<unknown>>;\n\n /** Fires every frame during a gesture with the live in-flight state\n * for the layer that owns the gesture. */\n onLayerChange(id: string, next: unknown): void;\n\n /** Fires once per discrete user action (drag-end, one-shot insert,\n * delete) for the layer that produced the change. `prev` is the\n * layer's state at gesture start. */\n onLayerCommit?(id: string, next: unknown, prev: unknown): void;\n\n width: number;\n height: number;\n /** Model-space x range. Default [0, 1]. */\n xRange?: readonly [number, number];\n /** Model-space y range. Default [0, 1]. */\n yRange?: readonly [number, number];\n grid?: GridSettings | false | null;\n axes?: AxesSettings | false | null;\n /** Ticks at x values. See `Plot2D.xTicks`. */\n xTicks?: TickSettings | false | null;\n /** Ticks at y values. See `Plot2D.yTicks`. */\n yTicks?: TickSettings | false | null;\n\n /** Built-in undo/redo via Cmd/Ctrl+Z (Shift+Z or Y for redo) on the\n * focused SVG. Snapshots every layer's state on each commit; undo\n * fires `onLayerChange(id, prevState)` for each layer whose state\n * changed. Default `true`. */\n history?: boolean;\n\n /** Accessible name for the plot, which is exposed as a group so the\n * focusable marks layers render inside it stay reachable. */\n 'aria-label'?: string;\n className?: string;\n style?: CSSProperties;\n\n /** Extra SVG content rendered behind all layers (under the lowest\n * layer but above grid/axes). Use this for static chrome that isn't\n * worth modeling as a layer. */\n children?: ReactNode;\n}\n\ninterface ActiveGesture {\n layerId: string;\n gesture: LayerGesture<unknown>;\n startStates: Map<string, unknown>;\n startSelfState: unknown;\n}\n\n/** A cancel carries no event, so a layer's `onCancel` sees no modifiers held. */\nconst NO_MODIFIERS: LayerModifiers = { shift: false, alt: false, meta: false, ctrl: false };\n\nfunction readModifiers(e: PointerEvent | ReactPointerEvent | KeyboardEvent | ReactKeyboardEvent): LayerModifiers {\n return {\n shift: e.shiftKey,\n alt: e.altKey,\n meta: e.metaKey,\n ctrl: e.ctrlKey,\n };\n}\n\n/**\n * A `Plot2D` that hosts a stack of composable curve layers. It owns the\n * pointer gestures and the coordinate mapping; each layer supplies its own\n * drawing, hit testing and gesture behavior.\n *\n * Layer state stays with the consumer: the editor reports changes through\n * `onLayerChange` during a gesture and `onLayerCommit` at its end, and reads\n * the state back from props each frame. That is what lets one layer's drag\n * update another layer's state mid-gesture.\n */\nexport function LayeredCurveEditor(props: LayeredCurveEditorProps) {\n const {\n layers, onLayerChange, onLayerCommit,\n width, height,\n xRange = [0, 1], yRange = [0, 1],\n grid, axes, xTicks, yTicks,\n className, style, children,\n } = props;\n\n const historyEnabled = props.history !== false;\n\n const modelRange: ModelRange = useMemo(\n () => ({ xMin: xRange[0], xMax: xRange[1], yMin: yRange[0], yMax: yRange[1] }),\n [xRange, yRange],\n );\n const plotSize = useMemo(() => ({ width, height }), [width, height]);\n\n // Refs that always hold the latest props — gesture handlers and\n // window listeners close over these refs, never over render-time\n // values, so mid-drag re-renders (including cross-layer state\n // updates) are visible to the next pointermove tick.\n const layersRef = useRef(layers);\n layersRef.current = layers;\n const modelRangeRef = useRef(modelRange);\n modelRangeRef.current = modelRange;\n const plotSizeRef = useRef(plotSize);\n plotSizeRef.current = plotSize;\n\n const plotRef = useRef<Plot2DHandle | null>(null);\n\n // ── Coord helpers ──────────────────────────────────────────────────\n const makeCtx = useCallback((modifiers: LayerModifiers): LayerCtx => {\n const mr = modelRangeRef.current;\n const ps = plotSizeRef.current;\n return {\n modelRange: mr,\n plotSize: ps,\n toPlot: (p) => modelToPlot(p, mr, ps),\n toModel: (p) => plotToModel(p, mr, ps),\n modifiers,\n };\n }, []);\n\n // ── Gesture routing ────────────────────────────────────────────────\n const activeRef = useRef(null as ActiveGesture | null);\n const [activeLayerId, setActiveLayerId] = useState<string | null>(null);\n\n // ── History (whole-state snapshots) ────────────────────────────────\n const pastRef = useRef<Map<string, unknown>[]>([]);\n const futureRef = useRef<Map<string, unknown>[]>([]);\n\n const snapshot = useCallback((): Map<string, unknown> => {\n const m = new Map<string, unknown>();\n for (const b of layersRef.current) m.set(b.layer.id, b.state);\n return m;\n }, []);\n\n const restore = useCallback((snap: Map<string, unknown>) => {\n const current = layersRef.current;\n for (const b of current) {\n const prev = snap.get(b.layer.id);\n if (prev !== undefined && prev !== b.state) {\n onLayerChange(b.layer.id, prev);\n }\n }\n }, [onLayerChange]);\n\n const undo = useCallback(() => {\n if (!historyEnabled) return;\n const past = pastRef.current;\n if (past.length === 0) return;\n const prev = past.pop()!;\n futureRef.current.push(snapshot());\n restore(prev);\n }, [historyEnabled, snapshot, restore]);\n\n const redo = useCallback(() => {\n if (!historyEnabled) return;\n const future = futureRef.current;\n if (future.length === 0) return;\n const next = future.pop()!;\n pastRef.current.push(snapshot());\n restore(next);\n }, [historyEnabled, snapshot, restore]);\n\n // ── Pointer routing during an active gesture ───────────────────────\n // The session's callbacks are fixed at gesture start, so they delegate\n // through refs holding the latest per-render impl — a mid-drag re-render\n // must reach the next pointermove tick.\n const onGestureMoveRef = useRef<(e: PointerEvent) => void>(() => {});\n const onGestureEndRef = useRef<(e: PointerEvent) => void>(() => {});\n const onGestureCancelRef = useRef<() => void>(() => {});\n\n const sessionRef = useRef<PointerSession | null>(null);\n\n const cleanupGesture = useCallback(() => {\n sessionRef.current = null;\n activeRef.current = null;\n setActiveLayerId(null);\n }, []);\n\n const findLayerState = useCallback((id: string): unknown | undefined => {\n for (const b of layersRef.current) if (b.layer.id === id) return b.state;\n return undefined;\n }, []);\n\n onGestureMoveRef.current = (e: PointerEvent) => {\n const a = activeRef.current;\n if (!a) return;\n const h = plotRef.current;\n if (!h) return;\n const model = h.clientToModel(e);\n const current = findLayerState(a.layerId);\n if (current === undefined) return;\n const ctx = makeCtx(readModifiers(e));\n const next = a.gesture.onMove(current, model, e, ctx);\n if (next !== current) onLayerChange(a.layerId, next);\n };\n\n onGestureEndRef.current = (e: PointerEvent) => {\n const a = activeRef.current;\n if (!a) return;\n const current = findLayerState(a.layerId);\n if (current === undefined) { cleanupGesture(); return; }\n const ctx = makeCtx(readModifiers(e));\n const finalState = a.gesture.onCommit ? a.gesture.onCommit(current, ctx) : current;\n if (finalState !== current) onLayerChange(a.layerId, finalState);\n if (historyEnabled) {\n pastRef.current.push(a.startStates);\n futureRef.current = [];\n }\n if (onLayerCommit) onLayerCommit(a.layerId, finalState, a.startSelfState);\n cleanupGesture();\n };\n\n onGestureCancelRef.current = () => {\n const a = activeRef.current;\n if (!a) return;\n const current = findLayerState(a.layerId);\n if (current === undefined) { cleanupGesture(); return; }\n const ctx = makeCtx(NO_MODIFIERS);\n const restored = a.gesture.onCancel ? a.gesture.onCancel(current, ctx) : a.startSelfState;\n if (restored !== current) onLayerChange(a.layerId, restored);\n cleanupGesture();\n };\n\n // No pointer capture: consumers render their own SVG chrome into the plot\n // through `children`, and capture would retarget pointerup away from it.\n const installGesture = useCallback((\n layerId: string,\n down: ReactPointerEvent<SVGSVGElement>,\n gesture: LayerGesture<unknown>,\n ) => {\n const startStates = snapshot();\n const startSelfState = startStates.get(layerId);\n activeRef.current = {\n layerId, gesture,\n startStates,\n startSelfState,\n };\n setActiveLayerId(layerId);\n sessionRef.current = openPointerSession(down.currentTarget, down, {\n onMove: (e) => onGestureMoveRef.current(e),\n onEnd: (e) => onGestureEndRef.current(e),\n onCancel: () => onGestureCancelRef.current(),\n }, { capture: false });\n }, [snapshot]);\n\n // ── pointerdown dispatch ───────────────────────────────────────────\n const onSvgPointerDown = useCallback((\n e: ReactPointerEvent<SVGSVGElement>,\n coords: { plot: PlotPoint; model: ModelPoint },\n ) => {\n if (activeRef.current) return; // ignore secondary touches mid-gesture\n const modifiers = readModifiers(e);\n const ctx = makeCtx(modifiers);\n const ls = layersRef.current;\n const nativeEvent = e.nativeEvent;\n\n dlog('layered-curve-editor', 'pointerdown', { plot: coords.plot, model: coords.model, layers: ls.length });\n\n // Capture the pre-event snapshot once; reuse for history if any\n // path produces a commit (gesture-start commit or one-shot).\n const preEventSnapshot = snapshot();\n\n // Top-to-bottom hit test.\n for (let i = ls.length - 1; i >= 0; i--) {\n const b = ls[i];\n const hit = b.layer.hitTest?.(b.state, coords.plot, ctx);\n if (!hit) continue;\n // Found a claim. onPointerDown may start a gesture, absorb the\n // click, or commit a one-shot edit via extra.commit.\n const prevState = b.state;\n let committed: unknown = undefined;\n const gesture = b.layer.onPointerDown?.(\n prevState, hit, nativeEvent, ctx,\n {\n plot: coords.plot,\n model: coords.model,\n commit(next) { committed = next; onLayerChange(b.layer.id, next); },\n },\n );\n e.stopPropagation();\n if (gesture) {\n installGesture(b.layer.id, e, gesture);\n return;\n }\n if (committed !== undefined) {\n if (historyEnabled) {\n pastRef.current.push(preEventSnapshot);\n futureRef.current = [];\n }\n onLayerCommit?.(b.layer.id, committed, prevState);\n }\n return;\n }\n\n // No hit — empty space dispatch, top-to-bottom.\n let pendingCommit: { id: string; next: unknown; prev: unknown } | null = null;\n for (let i = ls.length - 1; i >= 0; i--) {\n const b = ls[i];\n if (!b.layer.onEmptyPointerDown) continue;\n const prevState = b.state;\n let committed: unknown = undefined;\n const gesture = b.layer.onEmptyPointerDown(\n prevState, coords.model, nativeEvent, ctx,\n {\n plot: coords.plot,\n model: coords.model,\n commit(next) {\n committed = next;\n onLayerChange(b.layer.id, next);\n },\n },\n );\n if (gesture) {\n // If onEmptyPointerDown also published a commit (e.g. click-curve\n // insert publishes the new point then drags it), the gesture's\n // startStates already capture the post-insert state; the commit\n // for history is the *pre*-event snapshot, written when the\n // gesture eventually finishes via the gesture-commit path. We\n // override the gesture's startStates so undo restores correctly.\n installGesture(b.layer.id, e, gesture);\n if (committed !== undefined && activeRef.current !== null) {\n (activeRef.current as ActiveGesture).startStates = preEventSnapshot;\n (activeRef.current as ActiveGesture).startSelfState = preEventSnapshot.get(b.layer.id);\n }\n return;\n }\n if (committed !== undefined) {\n pendingCommit = { id: b.layer.id, next: committed, prev: prevState };\n break;\n }\n }\n if (pendingCommit) {\n if (historyEnabled) {\n pastRef.current.push(preEventSnapshot);\n futureRef.current = [];\n }\n onLayerCommit?.(pendingCommit.id, pendingCommit.next, pendingCommit.prev);\n }\n }, [makeCtx, installGesture, onLayerChange, onLayerCommit, historyEnabled, snapshot]);\n\n // ── keyboard ───────────────────────────────────────────────────────\n const onSvgKeyDown = useCallback((e: ReactKeyboardEvent<SVGSVGElement>) => {\n const modifiers = readModifiers(e);\n const ctx = makeCtx(modifiers);\n const ls = layersRef.current;\n // History first.\n if (historyEnabled && (e.metaKey || e.ctrlKey)) {\n const k = e.key.toLowerCase();\n if (k === 'z') {\n if (e.shiftKey) redo();\n else undo();\n e.preventDefault();\n return;\n }\n if (k === 'y') { redo(); e.preventDefault(); return; }\n }\n // Then layers (top-to-bottom).\n for (let i = ls.length - 1; i >= 0; i--) {\n const b = ls[i];\n if (!b.layer.onKeyDown) continue;\n const preEventSnapshot = snapshot();\n let committed: unknown = undefined;\n b.layer.onKeyDown(b.state, e.nativeEvent, ctx, {\n commit(next) { committed = next; onLayerChange(b.layer.id, next); },\n });\n if (committed !== undefined) {\n if (historyEnabled) {\n pastRef.current.push(preEventSnapshot);\n futureRef.current = [];\n }\n onLayerCommit?.(b.layer.id, committed, b.state);\n }\n // The layer prevents default on the native event, which the synthetic\n // event's `isDefaultPrevented` does not observe.\n if (e.nativeEvent.defaultPrevented) return;\n }\n }, [historyEnabled, undo, redo, makeCtx, snapshot, onLayerChange, onLayerCommit]);\n\n useEffect(() => () => { sessionRef.current?.cancel(); }, []);\n\n // ── render ─────────────────────────────────────────────────────────\n const renderCtxBase: Omit<LayerCtx, 'modifiers'> = useMemo(() => ({\n modelRange,\n plotSize,\n toPlot: (p) => modelToPlot(p, modelRange, plotSize),\n toModel: (p) => plotToModel(p, modelRange, plotSize),\n }), [modelRange, plotSize]);\n\n const cls = [s.root, className].filter(Boolean).join(' ');\n\n return (\n <Plot2D\n ref={plotRef}\n className={cls}\n style={style}\n width={width}\n height={height}\n xRange={xRange}\n yRange={yRange}\n grid={grid}\n axes={axes}\n xTicks={xTicks}\n yTicks={yTicks}\n tabIndex={historyEnabled ? 0 : undefined}\n role=\"group\"\n aria-label={props['aria-label']}\n onPointerDown={onSvgPointerDown}\n onKeyDown={onSvgKeyDown}\n >\n {children}\n {layers.map((b) => {\n const ctx = {\n ...renderCtxBase,\n modifiers: { shift: false, alt: false, meta: false, ctrl: false },\n isActive: activeLayerId === b.layer.id,\n };\n return (\n <g key={b.layer.id} data-layer-id={b.layer.id}>\n {b.layer.render(b.state, ctx)}\n </g>\n );\n })}\n </Plot2D>\n );\n}\n","/**\n * Keyframe layer for LayeredCurveEditor: a value-over-time curve whose shape\n * between two keys is the easing on the later one, with draggable keys and\n * draggable cubic-bezier handles on the selected segment.\n *\n * Distinct from `createFunctionLayer`, which interpolates a spline through\n * its anchors. Here the keys are exact and the easing approximates between\n * them, so the two do not share curve maths.\n */\nimport type { ReactNode } from 'react';\nimport { cubicBezierEasing, resolveEasing, type EasingFn, type Keyframe } from '@weasel-js/core';\nimport { hitTestAnchor, hitTestCurve } from './hitTest';\nimport { handleHalf } from '../../handles';\nimport { SNAP_RADIUS_PX, snapToNearest } from '../../snap';\nimport s from './CurveEditor.module.css';\nimport type {\n CurveLayer, EmptyDownArgs, KeyDownArgs, LayerCtx, LayerGesture, LayerHit, LayerRenderCtx, PlotPoint,\n} from './layerTypes';\n\ntype Bezier = readonly [number, number, number, number];\n\n/** A gesture in flight. The committed keys hold still underneath it. */\nexport type KeyframeDrag =\n | { kind: 'key'; index: number; t: number; value: number }\n | { kind: 'handle'; segment: number; bezier: Bezier };\n\n/**\n * The state a keyframe layer owns, held by the consumer and round-tripped\n * through `LayeredCurveEditor`'s `onLayerChange`.\n */\nexport interface KeyframeLayerState {\n /** Sorted ascending by `t`. */\n keys: readonly Keyframe<number>[];\n selectedKey: number | null;\n /** Index of the key the selected segment runs into. Its bezier handles show. */\n selectedSegment: number | null;\n drag: KeyframeDrag | null;\n}\n\n/** Configuration for {@link createKeyframeLayer}. */\nexport interface KeyframeLayerConfig {\n /** Layer id; default `'keyframes'`. */\n id?: string;\n /** Names the curve in each mark's accessible name. Default `'Curve'`. */\n label?: string;\n /** Formats a key time for accessible names. Default: rounded number. */\n formatX?: (x: number) => string;\n /** Times a dragged key snaps to. Holding alt defeats the snap. */\n snapX?: readonly number[];\n /** Snap reach, in plot pixels. Default 6. */\n snapRadiusPx?: number;\n /** Bounds for a key's time. Default: unbounded. */\n xClamp?: readonly [number, number];\n /** Bounds for a key's value. Default: unbounded. */\n yClamp?: readonly [number, number];\n /** One arrow-key step in model units; shift takes ten. Default: 1% of the\n * plot's range on that axis. */\n step?: { x?: number; y?: number };\n}\n\nconst SAMPLES_PER_SEGMENT = 16;\nconst KEY_HIT_PX = 8;\nconst HANDLE_HIT_PX = 8;\nconst CURVE_HIT_PX = 6;\nconst KEY_HALF = handleHalf('--wzl-handle-size');\nconst HANDLE_RADIUS = 3.5;\nconst SHIFT_MULTIPLIER = 10;\nconst HANDLE_STEP = 0.01;\n\n/** A keyframe layer state with nothing selected and no gesture in flight. */\nexport function keyframeLayerState(keys: readonly Keyframe<number>[]): KeyframeLayerState {\n return { keys, selectedKey: null, selectedSegment: null, drag: null };\n}\n\nfunction clampTo(v: number, range?: readonly [number, number]): number {\n return range ? Math.min(range[1], Math.max(range[0], v)) : v;\n}\n\nfunction bezierOf(key: Keyframe<number> | undefined): Bezier | null {\n const e = key?.easing;\n return typeof e === 'object' && e !== null && 'bezier' in e ? e.bezier : null;\n}\n\nfunction moveKeyTo(\n keys: readonly Keyframe<number>[], index: number, t: number, value: number,\n): { keys: Keyframe<number>[]; selectedKey: number } {\n const moved = { ...keys[index], t, value };\n const rest = keys.filter((_, i) => i !== index);\n const at = rest.findIndex((k) => k.t > t);\n const selectedKey = at === -1 ? rest.length : at;\n rest.splice(selectedKey, 0, moved);\n return { keys: rest, selectedKey };\n}\n\n/**\n * The keys a state's drag would leave behind: a dragged key re-sorted into\n * place, or a dragged handle's control points written onto the key its\n * segment runs into. `selectedKey` follows a moved key to its new index; a\n * key dropped where it started returns the same `keys` array.\n */\nexport function applyKeyframeDrag(\n state: KeyframeLayerState,\n): { keys: readonly Keyframe<number>[]; selectedKey: number | null } {\n const { drag, keys } = state;\n if (!drag) return { keys, selectedKey: state.selectedKey };\n if (drag.kind === 'key') {\n const k = keys[drag.index];\n if (k && k.t === drag.t && k.value === drag.value) return { keys, selectedKey: drag.index };\n return moveKeyTo(keys, drag.index, drag.t, drag.value);\n }\n const next = keys.slice();\n next[drag.segment] = { ...keys[drag.segment], easing: { bezier: drag.bezier } };\n return { keys: next, selectedKey: state.selectedKey };\n}\n\n/**\n * Builds a keyframe layer for `LayeredCurveEditor`. Model x is time and model\n * y is value; each segment is drawn through the easing on the key it runs\n * into. Every key, segment and handle is focusable and named, and the arrow\n * keys move whichever one has focus.\n */\nexport function createKeyframeLayer(cfg: KeyframeLayerConfig = {}): CurveLayer<KeyframeLayerState> {\n const id = cfg.id ?? 'keyframes';\n const label = cfg.label ?? 'Curve';\n const formatX = cfg.formatX ?? ((x: number) => String(Math.round(x)));\n const snapRadiusPx = cfg.snapRadiusPx ?? SNAP_RADIUS_PX;\n\n // A live handle drag is previewed straight from its control points: a\n // fresh spec per pointermove through `resolveEasing` would leave one\n // permanent cache entry per pixel of drag.\n function easingInto(state: KeyframeLayerState, keys: readonly Keyframe<number>[], seg: number): EasingFn {\n const d = state.drag;\n if (d?.kind === 'handle' && d.segment === seg) return cubicBezierEasing(...d.bezier);\n return resolveEasing(keys[seg].easing);\n }\n\n function segmentSamples(state: KeyframeLayerState, keys: readonly Keyframe<number>[], ctx: LayerCtx): PlotPoint[][] {\n const out: PlotPoint[][] = [];\n for (let i = 1; i < keys.length; i++) {\n const a = keys[i - 1];\n const b = keys[i];\n const ease = easingInto(state, keys, i);\n const pts: PlotPoint[] = [];\n for (let j = 0; j <= SAMPLES_PER_SEGMENT; j++) {\n const u = j / SAMPLES_PER_SEGMENT;\n pts.push(ctx.toPlot({ x: a.t + (b.t - a.t) * u, y: a.value + (b.value - a.value) * ease(u) }));\n }\n out.push(pts);\n }\n return out;\n }\n\n function activeBezier(state: KeyframeLayerState): Bezier | null {\n const seg = state.selectedSegment;\n if (seg === null || seg < 1 || seg >= state.keys.length) return null;\n const d = state.drag;\n if (d?.kind === 'handle' && d.segment === seg) return d.bezier;\n return bezierOf(state.keys[seg]);\n }\n\n function handlePoints(state: KeyframeLayerState, bezier: Bezier, ctx: LayerCtx): [PlotPoint, PlotPoint] {\n const a = state.keys[state.selectedSegment! - 1];\n const b = state.keys[state.selectedSegment!];\n const at = (xf: number, yf: number) =>\n ctx.toPlot({ x: a.t + xf * (b.t - a.t), y: a.value + yf * (b.value - a.value) });\n return [at(bezier[0], bezier[1]), at(bezier[2], bezier[3])];\n }\n\n const path = (pts: readonly PlotPoint[]): string =>\n pts.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x.toFixed(2)},${p.y.toFixed(2)}`).join('');\n\n // ── render ──────────────────────────────────────────────────────────\n function render(state: KeyframeLayerState, ctx: LayerRenderCtx): ReactNode {\n const shown = state.drag?.kind === 'key' ? applyKeyframeDrag(state).keys : state.keys;\n const segments = segmentSamples(state, shown, ctx);\n const curve = segments.flatMap((pts, i) => (i === 0 ? pts : pts.slice(1)));\n const seg = state.selectedSegment;\n const bezier = activeBezier(state);\n const dragIndex = state.drag?.kind === 'key' ? state.drag.index : null;\n\n return (\n <>\n {seg !== null && seg >= 1 && seg < shown.length ? (() => {\n const x0 = ctx.toPlot({ x: shown[seg - 1].t, y: 0 }).x;\n const x1 = ctx.toPlot({ x: shown[seg].t, y: 0 }).x;\n return (\n <rect\n className={s.segmentBand}\n x={Math.min(x0, x1)}\n y={0}\n width={Math.abs(x1 - x0)}\n height={ctx.plotSize.height}\n />\n );\n })() : null}\n {curve.length > 1 ? <path data-curve-element=\"curve\" className={s.curve} d={path(curve)} /> : null}\n {segments.map((pts, i) => (\n <path\n key={`seg-${i + 1}`}\n className={s.segmentTarget}\n d={path(pts)}\n role=\"button\"\n tabIndex={0}\n aria-label={`${label} segment into ${formatX(shown[i + 1].t)}`}\n aria-current={seg === i + 1 ? 'true' : undefined}\n data-segment-index={i + 1}\n />\n ))}\n {bezier ? (() => {\n const [h1, h2] = handlePoints(state, bezier, ctx);\n const a = ctx.toPlot({ x: state.keys[seg! - 1].t, y: state.keys[seg! - 1].value });\n const b = ctx.toPlot({ x: state.keys[seg!].t, y: state.keys[seg!].value });\n return (\n <>\n <line className={s.handleStem} x1={a.x} y1={a.y} x2={h1.x} y2={h1.y} />\n <line className={s.handleStem} x1={b.x} y1={b.y} x2={h2.x} y2={h2.y} />\n {[h1, h2].map((h, i) => (\n <circle\n key={`handle-${i}`}\n className={s.handle}\n cx={h.x}\n cy={h.y}\n r={HANDLE_RADIUS}\n role=\"button\"\n tabIndex={0}\n aria-label={`${label} bezier handle ${i + 1}`}\n data-handle-index={i}\n />\n ))}\n </>\n );\n })() : null}\n {state.keys.map((k, i) => {\n const p = ctx.toPlot({ x: k.t, y: k.value });\n return (\n <rect\n key={`key-${i}`}\n className={s.keyframe}\n x={p.x - KEY_HALF}\n y={p.y - KEY_HALF}\n width={KEY_HALF * 2}\n height={KEY_HALF * 2}\n transform={`rotate(45 ${p.x} ${p.y})`}\n role=\"button\"\n tabIndex={0}\n aria-label={`${label} key at ${formatX(k.t)}`}\n aria-current={state.selectedKey === i ? 'true' : undefined}\n data-keyframe-index={i}\n data-dragging={dragIndex === i ? 'true' : undefined}\n />\n );\n })}\n {state.drag?.kind === 'key' ? (() => {\n const p = ctx.toPlot({ x: state.drag.t, y: state.drag.value });\n return (\n <rect\n aria-hidden=\"true\"\n className={s.keyframeGhost}\n x={p.x - KEY_HALF}\n y={p.y - KEY_HALF}\n width={KEY_HALF * 2}\n height={KEY_HALF * 2}\n transform={`rotate(45 ${p.x} ${p.y})`}\n data-keyframe-ghost=\"\"\n />\n );\n })() : null}\n </>\n );\n }\n\n // ── hit test ────────────────────────────────────────────────────────\n function hitTest(state: KeyframeLayerState, plot: PlotPoint, ctx: LayerCtx): LayerHit | null {\n const bezier = activeBezier(state);\n if (bezier) {\n const h = hitTestAnchor(handlePoints(state, bezier, ctx), plot, HANDLE_HIT_PX);\n if (h) return { kind: 'handle', payload: { handle: h.index } };\n }\n const k = hitTestAnchor(state.keys.map((key) => ctx.toPlot({ x: key.t, y: key.value })), plot, KEY_HIT_PX);\n if (k) return { kind: 'key', payload: { index: k.index } };\n const c = hitTestCurve(segmentSamples(state, state.keys, ctx), plot, CURVE_HIT_PX);\n if (c) return { kind: 'segment', payload: { segment: c.segIdx + 1 } };\n return null;\n }\n\n // ── gestures ────────────────────────────────────────────────────────\n function keyGesture(index: number): LayerGesture<KeyframeLayerState> {\n return {\n onMove(state, model, e, ctx) {\n let t = clampTo(model.x, cfg.xClamp);\n if (cfg.snapX && !e.altKey) {\n const perPx = (ctx.modelRange.xMax - ctx.modelRange.xMin) / ctx.plotSize.width;\n t = clampTo(snapToNearest(t, cfg.snapX, Math.abs(perPx) * snapRadiusPx), cfg.xClamp);\n }\n return { ...state, drag: { kind: 'key', index, t, value: clampTo(model.y, cfg.yClamp) } };\n },\n onCommit(state) { return { ...state, ...applyKeyframeDrag(state), drag: null }; },\n onCancel(state) { return { ...state, drag: null }; },\n };\n }\n\n function handleGesture(segment: number, handle: 0 | 1): LayerGesture<KeyframeLayerState> {\n return {\n onMove(state, model) {\n const a = state.keys[segment - 1];\n const b = state.keys[segment];\n const d = state.drag;\n if (!a || !b || d?.kind !== 'handle') return state;\n const xf = b.t === a.t ? 0 : Math.min(1, Math.max(0, (model.x - a.t) / (b.t - a.t)));\n const yf = b.value === a.value ? 0 : (model.y - a.value) / (b.value - a.value);\n const bezier = [...d.bezier] as [number, number, number, number];\n bezier[handle * 2] = xf;\n bezier[handle * 2 + 1] = yf;\n return { ...state, drag: { kind: 'handle', segment, bezier } };\n },\n onCommit(state) { return { ...state, ...applyKeyframeDrag(state), drag: null }; },\n onCancel(state) { return { ...state, drag: null }; },\n };\n }\n\n function onPointerDown(\n state: KeyframeLayerState,\n hit: LayerHit,\n e: PointerEvent,\n _ctx: LayerCtx,\n extra: EmptyDownArgs<KeyframeLayerState>,\n ): LayerGesture<KeyframeLayerState> | void {\n if (e.button !== 0) return;\n if (hit.kind === 'handle') {\n const bezier = activeBezier(state);\n const segment = state.selectedSegment;\n if (!bezier || segment === null) return;\n const { handle } = hit.payload as { handle: 0 | 1 };\n extra.commit({ ...state, drag: { kind: 'handle', segment, bezier } });\n return handleGesture(segment, handle);\n }\n if (hit.kind === 'key') {\n const { index } = hit.payload as { index: number };\n const k = state.keys[index];\n extra.commit({ ...state, selectedKey: index, drag: { kind: 'key', index, t: k.t, value: k.value } });\n return keyGesture(index);\n }\n if (hit.kind === 'segment') {\n const { segment } = hit.payload as { segment: number };\n extra.commit({ ...state, selectedSegment: segment });\n }\n }\n\n // ── keyboard ────────────────────────────────────────────────────────\n function onKeyDown(\n state: KeyframeLayerState,\n e: KeyboardEvent,\n ctx: LayerCtx,\n extra: KeyDownArgs<KeyframeLayerState>,\n ): void {\n const target = e.target as Element | null;\n if (target?.closest?.('[data-layer-id]')?.getAttribute('data-layer-id') !== id) return;\n const activate = e.key === 'Enter' || e.key === ' ';\n const dx = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0;\n const dy = e.key === 'ArrowUp' ? 1 : e.key === 'ArrowDown' ? -1 : 0;\n const mult = e.shiftKey ? SHIFT_MULTIPLIER : 1;\n\n const keyEl = target.closest('[data-keyframe-index]');\n if (keyEl) {\n const index = Number(keyEl.getAttribute('data-keyframe-index'));\n const k = state.keys[index];\n if (!k) return;\n if (activate) {\n e.preventDefault();\n extra.commit({ ...state, selectedKey: index });\n return;\n }\n if (dx === 0 && dy === 0) return;\n e.preventDefault();\n const m = ctx.modelRange;\n const stepX = (cfg.step?.x ?? Math.abs(m.xMax - m.xMin) / 100) * mult;\n const stepY = (cfg.step?.y ?? Math.abs(m.yMax - m.yMin) / 100) * mult;\n const t = clampTo(k.t + dx * stepX, cfg.xClamp);\n const value = clampTo(k.value + dy * stepY, cfg.yClamp);\n if (t === k.t && value === k.value) return;\n extra.commit({ ...state, ...moveKeyTo(state.keys, index, t, value), drag: null });\n return;\n }\n\n const segEl = target.closest('[data-segment-index]');\n if (segEl && activate) {\n e.preventDefault();\n extra.commit({ ...state, selectedSegment: Number(segEl.getAttribute('data-segment-index')) });\n return;\n }\n\n const handleEl = target.closest('[data-handle-index]');\n const bezier = activeBezier(state);\n if (handleEl && bezier && state.selectedSegment !== null && (dx !== 0 || dy !== 0)) {\n e.preventDefault();\n const h = Number(handleEl.getAttribute('data-handle-index'));\n const next = [...bezier] as [number, number, number, number];\n next[h * 2] = Math.min(1, Math.max(0, next[h * 2] + dx * HANDLE_STEP * mult));\n next[h * 2 + 1] += dy * HANDLE_STEP * mult;\n const drag: KeyframeDrag = { kind: 'handle', segment: state.selectedSegment, bezier: next };\n extra.commit({ ...state, ...applyKeyframeDrag({ ...state, drag }), drag: null });\n }\n }\n\n return { id, render, hitTest, onPointerDown, onKeyDown };\n}\n"],"mappings":";;;;;;;;AAYA,SAAgB,EACd,GACA,GACA,GAC0B;CAC1B,IAAM,IAAK,IAAS,GAChB,IAA6C;AACjD,MAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,KAAK;EACvC,IAAM,IAAI,EAAQ,IACZ,IAAK,EAAE,IAAI,EAAQ,GACnB,IAAK,EAAE,IAAI,EAAQ,GACnB,IAAK,IAAK,IAAK,IAAK;AACtB,MAAK,MACL,MAAS,QAAQ,IAAK,EAAK,QAAI,IAAO;GAAE,OAAO;GAAG;GAAI;;AAE5D,QAAO,IAAO,EAAE,OAAO,EAAK,OAAO,GAAG;;AAaxC,SAAgB,EACd,GACA,GACA,GACsC;CACtC,IAAM,IAAK,IAAS,GAChB,IAAyD;AAC7D,MAAK,IAAI,IAAS,GAAG,IAAS,EAAS,QAAQ,KAAU;EACvD,IAAM,IAAU,EAAS;AACzB,MAAI,EAAQ,SAAS,EAAG;EACxB,IAAM,IAAO,EAAQ,SAAS;AAC9B,OAAK,IAAI,IAAI,GAAG,IAAI,GAAM,KAAK;GAC7B,IAAM,IAAI,EAAQ,IACZ,IAAI,EAAQ,IAAI,IAChB,IAAM,EAAE,IAAI,EAAE,GACd,IAAM,EAAE,IAAI,EAAE,GACd,IAAM,EAAQ,IAAI,EAAE,GACpB,IAAM,EAAQ,IAAI,EAAE,GACpB,IAAM,IAAM,IAAM,IAAM,GAC1B,IAAI,IAAM,KAAK,IAAM,IAAM,IAAM,KAAO,IAAM;AAClD,GAAI,IAAI,IAAG,IAAI,IACN,IAAI,MAAG,IAAI;GACpB,IAAM,IAAK,EAAE,IAAI,IAAI,GACf,IAAK,EAAE,IAAI,IAAI,GACf,IAAK,IAAK,EAAQ,GAClB,IAAK,IAAK,EAAQ,GAClB,IAAK,IAAK,IAAK,IAAK;AAC1B,OAAI,IAAK,EAAI;GACb,IAAM,KAAK,IAAI,KAAK;AACpB,IAAI,MAAS,QAAQ,IAAK,EAAK,QAAI,IAAO;IAAE;IAAQ;IAAG;IAAI;;;AAG/D,QAAO,IAAO;EAAE,QAAQ,EAAK;EAAQ,GAAG,EAAK;EAAG,GAAG;;;;AChErD,IAAa,IAAqB;CAChC;CAAqB;CAAwB;CAC9C;AAYD,SAAgB,EAAW,GAAwB,GAAkC;AACnF,QAAO,EAAQ,GAAO,EAAS;;AAIjC,SAAgB,EAAW,GAAwB,GAAkC;AACnF,QAAO,EAAW,GAAO,EAAS,GAAG;;;;;;;;;;;;;;;;;;GE4DjC,IAA+B;CAAE,OAAO;CAAO,KAAK;CAAO,MAAM;CAAO,MAAM;CAAO;AAE3F,SAAS,EAAc,GAA0F;AAC/G,QAAO;EACL,OAAO,EAAE;EACT,KAAK,EAAE;EACP,MAAM,EAAE;EACR,MAAM,EAAE;EACT;;AAaH,SAAgB,EAAmB,GAAgC;CACjE,IAAM,EACJ,WAAQ,kBAAe,kBACvB,UAAO,WACP,YAAS,CAAC,GAAG,EAAE,EAAE,YAAS,CAAC,GAAG,EAAE,EAChC,SAAM,SAAM,WAAQ,WACpB,cAAW,UAAO,gBAChB,GAEE,IAAiB,EAAM,YAAY,IAEnC,IAAyB,SACtB;EAAE,MAAM,EAAO;EAAI,MAAM,EAAO;EAAI,MAAM,EAAO;EAAI,MAAM,EAAO;EAAI,GAC7E,CAAC,GAAQ,EAAO,CACjB,EACK,IAAW,SAAe;EAAE;EAAO;EAAQ,GAAG,CAAC,GAAO,EAAO,CAAC,EAM9D,IAAY,EAAO,EAAO;AAChC,GAAU,UAAU;CACpB,IAAM,IAAgB,EAAO,EAAW;AACxC,GAAc,UAAU;CACxB,IAAM,IAAc,EAAO,EAAS;AACpC,GAAY,UAAU;CAEtB,IAAM,IAAU,EAA4B,KAAK,EAG3C,IAAU,GAAa,MAAwC;EACnE,IAAM,IAAK,EAAc,SACnB,IAAK,EAAY;AACvB,SAAO;GACL,YAAY;GACZ,UAAU;GACV,SAAS,MAAM,EAAY,GAAG,GAAI,EAAG;GACrC,UAAU,MAAM,EAAY,GAAG,GAAI,EAAG;GACtC;GACD;IACA,EAAE,CAAC,EAGA,IAAY,EAAO,KAA6B,EAChD,CAAC,GAAe,KAAoB,EAAwB,KAAK,EAGjE,IAAU,EAA+B,EAAE,CAAC,EAC5C,IAAY,EAA+B,EAAE,CAAC,EAE9C,IAAW,QAAwC;EACvD,IAAM,oBAAI,IAAI,KAAsB;AACpC,OAAK,IAAM,KAAK,EAAU,QAAS,GAAE,IAAI,EAAE,MAAM,IAAI,EAAE,MAAM;AAC7D,SAAO;IACN,EAAE,CAAC,EAEA,IAAU,GAAa,MAA+B;EAC1D,IAAM,IAAU,EAAU;AAC1B,OAAK,IAAM,KAAK,GAAS;GACvB,IAAM,IAAO,EAAK,IAAI,EAAE,MAAM,GAAG;AACjC,GAAI,MAAS,KAAA,KAAa,MAAS,EAAE,SACnC,EAAc,EAAE,MAAM,IAAI,EAAK;;IAGlC,CAAC,EAAc,CAAC,EAEb,IAAO,QAAkB;AAC7B,MAAI,CAAC,EAAgB;EACrB,IAAM,IAAO,EAAQ;AACrB,MAAI,EAAK,WAAW,EAAG;EACvB,IAAM,IAAO,EAAK,KAAK;AAEvB,EADA,EAAU,QAAQ,KAAK,GAAU,CAAC,EAClC,EAAQ,EAAK;IACZ;EAAC;EAAgB;EAAU;EAAQ,CAAC,EAEjC,IAAO,QAAkB;AAC7B,MAAI,CAAC,EAAgB;EACrB,IAAM,IAAS,EAAU;AACzB,MAAI,EAAO,WAAW,EAAG;EACzB,IAAM,IAAO,EAAO,KAAK;AAEzB,EADA,EAAQ,QAAQ,KAAK,GAAU,CAAC,EAChC,EAAQ,EAAK;IACZ;EAAC;EAAgB;EAAU;EAAQ,CAAC,EAMjC,IAAmB,QAAwC,GAAG,EAC9D,IAAkB,QAAwC,GAAG,EAC7D,IAAqB,QAAyB,GAAG,EAEjD,IAAa,EAA8B,KAAK,EAEhD,IAAiB,QAAkB;AAGvC,EAFA,EAAW,UAAU,MACrB,EAAU,UAAU,MACpB,EAAiB,KAAK;IACrB,EAAE,CAAC,EAEA,IAAiB,GAAa,MAAoC;AACtE,OAAK,IAAM,KAAK,EAAU,QAAS,KAAI,EAAE,MAAM,OAAO,EAAI,QAAO,EAAE;IAElE,EAAE,CAAC;AA+BN,CA7BA,EAAiB,WAAW,MAAoB;EAC9C,IAAM,IAAI,EAAU;AACpB,MAAI,CAAC,EAAG;EACR,IAAM,IAAI,EAAQ;AAClB,MAAI,CAAC,EAAG;EACR,IAAM,IAAQ,EAAE,cAAc,EAAE,EAC1B,IAAU,EAAe,EAAE,QAAQ;AACzC,MAAI,MAAY,KAAA,EAAW;EAC3B,IAAM,IAAM,EAAQ,EAAc,EAAE,CAAC,EAC/B,IAAO,EAAE,QAAQ,OAAO,GAAS,GAAO,GAAG,EAAI;AACrD,EAAI,MAAS,KAAS,EAAc,EAAE,SAAS,EAAK;IAGtD,EAAgB,WAAW,MAAoB;EAC7C,IAAM,IAAI,EAAU;AACpB,MAAI,CAAC,EAAG;EACR,IAAM,IAAU,EAAe,EAAE,QAAQ;AACzC,MAAI,MAAY,KAAA,GAAW;AAAE,MAAgB;AAAE;;EAC/C,IAAM,IAAM,EAAQ,EAAc,EAAE,CAAC,EAC/B,IAAa,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAAS,GAAS,EAAI,GAAG;AAO3E,EANI,MAAe,KAAS,EAAc,EAAE,SAAS,EAAW,EAC5D,MACF,EAAQ,QAAQ,KAAK,EAAE,YAAY,EACnC,EAAU,UAAU,EAAE,GAEpB,KAAe,EAAc,EAAE,SAAS,GAAY,EAAE,eAAe,EACzE,GAAgB;IAGlB,EAAmB,gBAAgB;EACjC,IAAM,IAAI,EAAU;AACpB,MAAI,CAAC,EAAG;EACR,IAAM,IAAU,EAAe,EAAE,QAAQ;AACzC,MAAI,MAAY,KAAA,GAAW;AAAE,MAAgB;AAAE;;EAC/C,IAAM,IAAM,EAAQ,EAAa,EAC3B,IAAW,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAAS,GAAS,EAAI,GAAG,EAAE;AAE3E,EADI,MAAa,KAAS,EAAc,EAAE,SAAS,EAAS,EAC5D,GAAgB;;CAKlB,IAAM,IAAiB,GACrB,GACA,GACA,MACG;EACH,IAAM,IAAc,GAAU;AAQ9B,EANA,EAAU,UAAU;GAClB;GAAS;GACT;GACA,gBAJqB,EAAY,IAAI,EAIrC;GACD,EACD,EAAiB,EAAQ,EACzB,EAAW,UAAU,EAAmB,EAAK,eAAe,GAAM;GAChE,SAAS,MAAM,EAAiB,QAAQ,EAAE;GAC1C,QAAQ,MAAM,EAAgB,QAAQ,EAAE;GACxC,gBAAgB,EAAmB,SAAS;GAC7C,EAAE,EAAE,SAAS,IAAO,CAAC;IACrB,CAAC,EAAS,CAAC,EAGR,KAAmB,GACvB,GACA,MACG;AACH,MAAI,EAAU,QAAS;EAEvB,IAAM,IAAM,EADM,EAAc,EACZ,CAAU,EACxB,IAAK,EAAU,SACf,IAAc,EAAE;AAEtB,IAAK,wBAAwB,eAAe;GAAE,MAAM,EAAO;GAAM,OAAO,EAAO;GAAO,QAAQ,EAAG;GAAQ,CAAC;EAI1G,IAAM,IAAmB,GAAU;AAGnC,OAAK,IAAI,IAAI,EAAG,SAAS,GAAG,KAAK,GAAG,KAAK;GACvC,IAAM,IAAI,EAAG,IACP,IAAM,EAAE,MAAM,UAAU,EAAE,OAAO,EAAO,MAAM,EAAI;AACxD,OAAI,CAAC,EAAK;GAGV,IAAM,IAAY,EAAE,OAChB,GACE,IAAU,EAAE,MAAM,gBACtB,GAAW,GAAK,GAAa,GAC7B;IACE,MAAM,EAAO;IACb,OAAO,EAAO;IACd,OAAO,GAAM;AAAoB,KAAlB,IAAY,GAAM,EAAc,EAAE,MAAM,IAAI,EAAK;;IACjE,CACF;AAED,OADA,EAAE,iBAAiB,EACf,GAAS;AACX,MAAe,EAAE,MAAM,IAAI,GAAG,EAAQ;AACtC;;AAEF,GAAI,MAAc,KAAA,MACZ,MACF,EAAQ,QAAQ,KAAK,EAAiB,EACtC,EAAU,UAAU,EAAE,GAExB,IAAgB,EAAE,MAAM,IAAI,GAAW,EAAU;AAEnD;;EAIF,IAAI,IAAqE;AACzE,OAAK,IAAI,IAAI,EAAG,SAAS,GAAG,KAAK,GAAG,KAAK;GACvC,IAAM,IAAI,EAAG;AACb,OAAI,CAAC,EAAE,MAAM,mBAAoB;GACjC,IAAM,IAAY,EAAE,OAChB,GACE,IAAU,EAAE,MAAM,mBACtB,GAAW,EAAO,OAAO,GAAa,GACtC;IACE,MAAM,EAAO;IACb,OAAO,EAAO;IACd,OAAO,GAAM;AAEX,KADA,IAAY,GACZ,EAAc,EAAE,MAAM,IAAI,EAAK;;IAElC,CACF;AACD,OAAI,GAAS;AAQX,IADA,EAAe,EAAE,MAAM,IAAI,GAAG,EAAQ,EAClC,MAAc,KAAA,KAAa,EAAU,YAAY,SAClD,EAAU,QAA0B,cAAc,GAClD,EAAU,QAA0B,iBAAiB,EAAiB,IAAI,EAAE,MAAM,GAAG;AAExF;;AAEF,OAAI,MAAc,KAAA,GAAW;AAC3B,QAAgB;KAAE,IAAI,EAAE,MAAM;KAAI,MAAM;KAAW,MAAM;KAAW;AACpE;;;AAGJ,EAAI,MACE,MACF,EAAQ,QAAQ,KAAK,EAAiB,EACtC,EAAU,UAAU,EAAE,GAExB,IAAgB,EAAc,IAAI,EAAc,MAAM,EAAc,KAAK;IAE1E;EAAC;EAAS;EAAgB;EAAe;EAAe;EAAgB;EAAS,CAAC,EAG/E,KAAe,GAAa,MAAyC;EAEzE,IAAM,IAAM,EADM,EAAc,EACZ,CAAU,EACxB,IAAK,EAAU;AAErB,MAAI,MAAmB,EAAE,WAAW,EAAE,UAAU;GAC9C,IAAM,IAAI,EAAE,IAAI,aAAa;AAC7B,OAAI,MAAM,KAAK;AAGb,IAFI,EAAE,WAAU,GAAM,GACjB,GAAM,EACX,EAAE,gBAAgB;AAClB;;AAEF,OAAI,MAAM,KAAK;AAAU,IAAR,GAAM,EAAE,EAAE,gBAAgB;AAAE;;;AAG/C,OAAK,IAAI,IAAI,EAAG,SAAS,GAAG,KAAK,GAAG,KAAK;GACvC,IAAM,IAAI,EAAG;AACb,OAAI,CAAC,EAAE,MAAM,UAAW;GACxB,IAAM,IAAmB,GAAU,EAC/B;AAaJ,OAZA,EAAE,MAAM,UAAU,EAAE,OAAO,EAAE,aAAa,GAAK,EAC7C,OAAO,GAAM;AAAoB,IAAlB,IAAY,GAAM,EAAc,EAAE,MAAM,IAAI,EAAK;MACjE,CAAC,EACE,MAAc,KAAA,MACZ,MACF,EAAQ,QAAQ,KAAK,EAAiB,EACtC,EAAU,UAAU,EAAE,GAExB,IAAgB,EAAE,MAAM,IAAI,GAAW,EAAE,MAAM,GAI7C,EAAE,YAAY,iBAAkB;;IAErC;EAAC;EAAgB;EAAM;EAAM;EAAS;EAAU;EAAe;EAAc,CAAC;AAEjF,eAAsB;AAAE,IAAW,SAAS,QAAQ;IAAK,EAAE,CAAC;CAG5D,IAAM,KAA6C,SAAe;EAChE;EACA;EACA,SAAS,MAAM,EAAY,GAAG,GAAY,EAAS;EACnD,UAAU,MAAM,EAAY,GAAG,GAAY,EAAS;EACrD,GAAG,CAAC,GAAY,EAAS,CAAC;AAI3B,QACE,kBAAC,GAAD;EACE,KAAK;EACL,WALQ,CAAC,EAAE,MAAM,EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAKtC;EACJ;EACA;EACC;EACA;EACA;EACF;EACA;EACE;EACA;EACR,UAAU,IAAiB,IAAI,KAAA;EAC/B,MAAK;EACL,cAAY,EAAM;EAClB,eAAe;EACf,WAAW;YAhBb,CAkBG,GACA,EAAO,KAAK,MAAM;GACjB,IAAM,IAAM;IACV,GAAG;IACH,WAAW;KAAE,OAAO;KAAO,KAAK;KAAO,MAAM;KAAO,MAAM;KAAO;IACjE,UAAU,MAAkB,EAAE,MAAM;IACrC;AACD,UACE,kBAAC,KAAD;IAAoB,iBAAe,EAAE,MAAM;cACxC,EAAE,MAAM,OAAO,EAAE,OAAO,EAAI;IAC3B,EAFI,EAAE,MAAM,GAEZ;IAEN,CACK;;;;;AC1Yb,IAAM,IAAsB,IACtB,IAAa,GACb,IAAgB,GAChB,IAAe,GACf,IAAW,EAAW,oBAAoB,EAC1C,IAAgB,KAChB,IAAmB,IACnB,IAAc;AAGpB,SAAgB,EAAmB,GAAuD;AACxF,QAAO;EAAE;EAAM,aAAa;EAAM,iBAAiB;EAAM,MAAM;EAAM;;AAGvE,SAAS,EAAQ,GAAW,GAA2C;AACrE,QAAO,IAAQ,KAAK,IAAI,EAAM,IAAI,KAAK,IAAI,EAAM,IAAI,EAAE,CAAC,GAAG;;AAG7D,SAAS,EAAS,GAAkD;CAClE,IAAM,IAAI,GAAK;AACf,QAAO,OAAO,KAAM,YAAY,KAAc,YAAY,IAAI,EAAE,SAAS;;AAG3E,SAAS,EACP,GAAmC,GAAe,GAAW,GACV;CACnD,IAAM,IAAQ;EAAE,GAAG,EAAK;EAAQ;EAAG;EAAO,EACpC,IAAO,EAAK,QAAQ,GAAG,MAAM,MAAM,EAAM,EACzC,IAAK,EAAK,WAAW,MAAM,EAAE,IAAI,EAAE,EACnC,IAAc,MAAO,KAAK,EAAK,SAAS;AAE9C,QADA,EAAK,OAAO,GAAa,GAAG,EAAM,EAC3B;EAAE,MAAM;EAAM;EAAa;;AASpC,SAAgB,EACd,GACmE;CACnE,IAAM,EAAE,SAAM,YAAS;AACvB,KAAI,CAAC,EAAM,QAAO;EAAE;EAAM,aAAa,EAAM;EAAa;AAC1D,KAAI,EAAK,SAAS,OAAO;EACvB,IAAM,IAAI,EAAK,EAAK;AAEpB,SADI,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,UAAU,EAAK,QAAc;GAAE;GAAM,aAAa,EAAK;GAAO,GACpF,EAAU,GAAM,EAAK,OAAO,EAAK,GAAG,EAAK,MAAM;;CAExD,IAAM,IAAO,EAAK,OAAO;AAEzB,QADA,EAAK,EAAK,WAAW;EAAE,GAAG,EAAK,EAAK;EAAU,QAAQ,EAAE,QAAQ,EAAK,QAAQ;EAAE,EACxE;EAAE,MAAM;EAAM,aAAa,EAAM;EAAa;;AASvD,SAAgB,EAAoB,IAA2B,EAAE,EAAkC;CACjG,IAAM,IAAK,EAAI,MAAM,aACf,IAAQ,EAAI,SAAS,SACrB,IAAU,EAAI,aAAa,MAAc,OAAO,KAAK,MAAM,EAAE,CAAC,GAC9D,IAAe,EAAI,gBAAA;CAKzB,SAAS,EAAW,GAA2B,GAAmC,GAAuB;EACvG,IAAM,IAAI,EAAM;AAEhB,SADI,GAAG,SAAS,YAAY,EAAE,YAAY,IAAY,EAAkB,GAAG,EAAE,OAAO,GAC7E,EAAc,EAAK,GAAK,OAAO;;CAGxC,SAAS,EAAe,GAA2B,GAAmC,GAA8B;EAClH,IAAM,IAAqB,EAAE;AAC7B,OAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK;GACpC,IAAM,IAAI,EAAK,IAAI,IACb,IAAI,EAAK,IACT,IAAO,EAAW,GAAO,GAAM,EAAE,EACjC,IAAmB,EAAE;AAC3B,QAAK,IAAI,IAAI,GAAG,KAAK,GAAqB,KAAK;IAC7C,IAAM,IAAI,IAAI;AACd,MAAI,KAAK,EAAI,OAAO;KAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;KAAG,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAK,EAAE;KAAE,CAAC,CAAC;;AAEhG,KAAI,KAAK,EAAI;;AAEf,SAAO;;CAGT,SAAS,EAAa,GAA0C;EAC9D,IAAM,IAAM,EAAM;AAClB,MAAI,MAAQ,QAAQ,IAAM,KAAK,KAAO,EAAM,KAAK,OAAQ,QAAO;EAChE,IAAM,IAAI,EAAM;AAEhB,SADI,GAAG,SAAS,YAAY,EAAE,YAAY,IAAY,EAAE,SACjD,EAAS,EAAM,KAAK,GAAK;;CAGlC,SAAS,EAAa,GAA2B,GAAgB,GAAuC;EACtG,IAAM,IAAI,EAAM,KAAK,EAAM,kBAAmB,IACxC,IAAI,EAAM,KAAK,EAAM,kBACrB,KAAM,GAAY,MACtB,EAAI,OAAO;GAAE,GAAG,EAAE,IAAI,KAAM,EAAE,IAAI,EAAE;GAAI,GAAG,EAAE,QAAQ,KAAM,EAAE,QAAQ,EAAE;GAAQ,CAAC;AAClF,SAAO,CAAC,EAAG,EAAO,IAAI,EAAO,GAAG,EAAE,EAAG,EAAO,IAAI,EAAO,GAAG,CAAC;;CAG7D,IAAM,KAAQ,MACZ,EAAI,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,GAAG;CAGzF,SAAS,EAAO,GAA2B,GAAgC;EACzE,IAAM,IAAQ,EAAM,MAAM,SAAS,QAAQ,EAAkB,EAAM,CAAC,OAAO,EAAM,MAC3E,IAAW,EAAe,GAAO,GAAO,EAAI,EAC5C,IAAQ,EAAS,SAAS,GAAK,MAAO,MAAM,IAAI,IAAM,EAAI,MAAM,EAAE,CAAE,EACpE,IAAM,EAAM,iBACZ,IAAS,EAAa,EAAM,EAC5B,IAAY,EAAM,MAAM,SAAS,QAAQ,EAAM,KAAK,QAAQ;AAElE,SACE,kBAAA,GAAA,EAAA,UAAA;GACG,MAAQ,QAAQ,KAAO,KAAK,IAAM,EAAM,gBAAgB;IACvD,IAAM,IAAK,EAAI,OAAO;KAAE,GAAG,EAAM,IAAM,GAAG;KAAG,GAAG;KAAG,CAAC,CAAC,GAC/C,IAAK,EAAI,OAAO;KAAE,GAAG,EAAM,GAAK;KAAG,GAAG;KAAG,CAAC,CAAC;AACjD,WACE,kBAAC,QAAD;KACE,WAAW,EAAE;KACb,GAAG,KAAK,IAAI,GAAI,EAAG;KACnB,GAAG;KACH,OAAO,KAAK,IAAI,IAAK,EAAG;KACxB,QAAQ,EAAI,SAAS;KACrB,CAAA;OAEF,GAAG;GACN,EAAM,SAAS,IAAI,kBAAC,QAAD;IAAM,sBAAmB;IAAQ,WAAW,EAAE;IAAO,GAAG,EAAK,EAAM;IAAI,CAAA,GAAG;GAC7F,EAAS,KAAK,GAAK,MAClB,kBAAC,QAAD;IAEE,WAAW,EAAE;IACb,GAAG,EAAK,EAAI;IACZ,MAAK;IACL,UAAU;IACV,cAAY,GAAG,EAAM,gBAAgB,EAAQ,EAAM,IAAI,GAAG,EAAE;IAC5D,gBAAc,MAAQ,IAAI,IAAI,SAAS,KAAA;IACvC,sBAAoB,IAAI;IACxB,EARK,OAAO,IAAI,IAQhB,CACF;GACD,WAAgB;IACf,IAAM,CAAC,GAAI,KAAM,EAAa,GAAO,GAAQ,EAAI,EAC3C,IAAI,EAAI,OAAO;KAAE,GAAG,EAAM,KAAK,IAAO,GAAG;KAAG,GAAG,EAAM,KAAK,IAAO,GAAG;KAAO,CAAC,EAC5E,IAAI,EAAI,OAAO;KAAE,GAAG,EAAM,KAAK,GAAM;KAAG,GAAG,EAAM,KAAK,GAAM;KAAO,CAAC;AAC1E,WACE,kBAAA,GAAA,EAAA,UAAA;KACE,kBAAC,QAAD;MAAM,WAAW,EAAE;MAAY,IAAI,EAAE;MAAG,IAAI,EAAE;MAAG,IAAI,EAAG;MAAG,IAAI,EAAG;MAAK,CAAA;KACvE,kBAAC,QAAD;MAAM,WAAW,EAAE;MAAY,IAAI,EAAE;MAAG,IAAI,EAAE;MAAG,IAAI,EAAG;MAAG,IAAI,EAAG;MAAK,CAAA;KACtE,CAAC,GAAI,EAAG,CAAC,KAAK,GAAG,MAChB,kBAAC,UAAD;MAEE,WAAW,EAAE;MACb,IAAI,EAAE;MACN,IAAI,EAAE;MACN,GAAG;MACH,MAAK;MACL,UAAU;MACV,cAAY,GAAG,EAAM,iBAAiB,IAAI;MAC1C,qBAAmB;MACnB,EATK,UAAU,IASf,CACF;KACD,EAAA,CAAA;OAEH,GAAG;GACN,EAAM,KAAK,KAAK,GAAG,MAAM;IACxB,IAAM,IAAI,EAAI,OAAO;KAAE,GAAG,EAAE;KAAG,GAAG,EAAE;KAAO,CAAC;AAC5C,WACE,kBAAC,QAAD;KAEE,WAAW,EAAE;KACb,GAAG,EAAE,IAAI;KACT,GAAG,EAAE,IAAI;KACT,OAAO,IAAW;KAClB,QAAQ,IAAW;KACnB,WAAW,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE;KACnC,MAAK;KACL,UAAU;KACV,cAAY,GAAG,EAAM,UAAU,EAAQ,EAAE,EAAE;KAC3C,gBAAc,EAAM,gBAAgB,IAAI,SAAS,KAAA;KACjD,uBAAqB;KACrB,iBAAe,MAAc,IAAI,SAAS,KAAA;KAC1C,EAbK,OAAO,IAaZ;KAEJ;GACD,EAAM,MAAM,SAAS,eAAe;IACnC,IAAM,IAAI,EAAI,OAAO;KAAE,GAAG,EAAM,KAAK;KAAG,GAAG,EAAM,KAAK;KAAO,CAAC;AAC9D,WACE,kBAAC,QAAD;KACE,eAAY;KACZ,WAAW,EAAE;KACb,GAAG,EAAE,IAAI;KACT,GAAG,EAAE,IAAI;KACT,OAAO,IAAW;KAClB,QAAQ,IAAW;KACnB,WAAW,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE;KACnC,uBAAoB;KACpB,CAAA;OAEF,GAAG;GACN,EAAA,CAAA;;CAKP,SAAS,EAAQ,GAA2B,GAAiB,GAAgC;EAC3F,IAAM,IAAS,EAAa,EAAM;AAClC,MAAI,GAAQ;GACV,IAAM,IAAI,EAAc,EAAa,GAAO,GAAQ,EAAI,EAAE,GAAM,EAAc;AAC9E,OAAI,EAAG,QAAO;IAAE,MAAM;IAAU,SAAS,EAAE,QAAQ,EAAE,OAAO;IAAE;;EAEhE,IAAM,IAAI,EAAc,EAAM,KAAK,KAAK,MAAQ,EAAI,OAAO;GAAE,GAAG,EAAI;GAAG,GAAG,EAAI;GAAO,CAAC,CAAC,EAAE,GAAM,EAAW;AAC1G,MAAI,EAAG,QAAO;GAAE,MAAM;GAAO,SAAS,EAAE,OAAO,EAAE,OAAO;GAAE;EAC1D,IAAM,IAAI,EAAa,EAAe,GAAO,EAAM,MAAM,EAAI,EAAE,GAAM,EAAa;AAElF,SADI,IAAU;GAAE,MAAM;GAAW,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG;GAAE,GAC9D;;CAIT,SAAS,EAAW,GAAiD;AACnE,SAAO;GACL,OAAO,GAAO,GAAO,GAAG,GAAK;IAC3B,IAAI,IAAI,EAAQ,EAAM,GAAG,EAAI,OAAO;AACpC,QAAI,EAAI,SAAS,CAAC,EAAE,QAAQ;KAC1B,IAAM,KAAS,EAAI,WAAW,OAAO,EAAI,WAAW,QAAQ,EAAI,SAAS;AACzE,SAAI,EAAQ,EAAc,GAAG,EAAI,OAAO,KAAK,IAAI,EAAM,GAAG,EAAa,EAAE,EAAI,OAAO;;AAEtF,WAAO;KAAE,GAAG;KAAO,MAAM;MAAE,MAAM;MAAO;MAAO;MAAG,OAAO,EAAQ,EAAM,GAAG,EAAI,OAAO;MAAE;KAAE;;GAE3F,SAAS,GAAO;AAAE,WAAO;KAAE,GAAG;KAAO,GAAG,EAAkB,EAAM;KAAE,MAAM;KAAM;;GAC9E,SAAS,GAAO;AAAE,WAAO;KAAE,GAAG;KAAO,MAAM;KAAM;;GAClD;;CAGH,SAAS,EAAc,GAAiB,GAAiD;AACvF,SAAO;GACL,OAAO,GAAO,GAAO;IACnB,IAAM,IAAI,EAAM,KAAK,IAAU,IACzB,IAAI,EAAM,KAAK,IACf,IAAI,EAAM;AAChB,QAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,SAAU,QAAO;IAC7C,IAAM,IAAK,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,EAAM,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,EAC9E,IAAK,EAAE,UAAU,EAAE,QAAQ,KAAK,EAAM,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAClE,IAAS,CAAC,GAAG,EAAE,OAAO;AAG5B,WAFA,EAAO,IAAS,KAAK,GACrB,EAAO,IAAS,IAAI,KAAK,GAClB;KAAE,GAAG;KAAO,MAAM;MAAE,MAAM;MAAU;MAAS;MAAQ;KAAE;;GAEhE,SAAS,GAAO;AAAE,WAAO;KAAE,GAAG;KAAO,GAAG,EAAkB,EAAM;KAAE,MAAM;KAAM;;GAC9E,SAAS,GAAO;AAAE,WAAO;KAAE,GAAG;KAAO,MAAM;KAAM;;GAClD;;CAGH,SAAS,EACP,GACA,GACA,GACA,GACA,GACyC;AACrC,QAAE,WAAW,GACjB;OAAI,EAAI,SAAS,UAAU;IACzB,IAAM,IAAS,EAAa,EAAM,EAC5B,IAAU,EAAM;AACtB,QAAI,CAAC,KAAU,MAAY,KAAM;IACjC,IAAM,EAAE,cAAW,EAAI;AAEvB,WADA,EAAM,OAAO;KAAE,GAAG;KAAO,MAAM;MAAE,MAAM;MAAU;MAAS;MAAQ;KAAE,CAAC,EAC9D,EAAc,GAAS,EAAO;;AAEvC,OAAI,EAAI,SAAS,OAAO;IACtB,IAAM,EAAE,aAAU,EAAI,SAChB,IAAI,EAAM,KAAK;AAErB,WADA,EAAM,OAAO;KAAE,GAAG;KAAO,aAAa;KAAO,MAAM;MAAE,MAAM;MAAO;MAAO,GAAG,EAAE;MAAG,OAAO,EAAE;MAAO;KAAE,CAAC,EAC7F,EAAW,EAAM;;AAE1B,OAAI,EAAI,SAAS,WAAW;IAC1B,IAAM,EAAE,eAAY,EAAI;AACxB,MAAM,OAAO;KAAE,GAAG;KAAO,iBAAiB;KAAS,CAAC;;;;CAKxD,SAAS,EACP,GACA,GACA,GACA,GACM;EACN,IAAM,IAAS,EAAE;AACjB,MAAI,GAAQ,UAAU,kBAAkB,EAAE,aAAa,gBAAgB,KAAK,EAAI;EAChF,IAAM,IAAW,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAC1C,IAAK,EAAE,QAAQ,eAAe,IAAI,EAAE,QAAQ,cAAc,KAAK,GAC/D,IAAK,EAAE,QAAQ,YAAY,IAAI,EAAE,QAAQ,cAAc,KAAK,GAC5D,IAAO,EAAE,WAAW,IAAmB,GAEvC,IAAQ,EAAO,QAAQ,wBAAwB;AACrD,MAAI,GAAO;GACT,IAAM,IAAQ,OAAO,EAAM,aAAa,sBAAsB,CAAC,EACzD,IAAI,EAAM,KAAK;AACrB,OAAI,CAAC,EAAG;AACR,OAAI,GAAU;AAEZ,IADA,EAAE,gBAAgB,EAClB,EAAM,OAAO;KAAE,GAAG;KAAO,aAAa;KAAO,CAAC;AAC9C;;AAEF,OAAI,MAAO,KAAK,MAAO,EAAG;AAC1B,KAAE,gBAAgB;GAClB,IAAM,IAAI,EAAI,YACR,KAAS,EAAI,MAAM,KAAK,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAC3D,KAAS,EAAI,MAAM,KAAK,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAC3D,IAAI,EAAQ,EAAE,IAAI,IAAK,GAAO,EAAI,OAAO,EACzC,IAAQ,EAAQ,EAAE,QAAQ,IAAK,GAAO,EAAI,OAAO;AACvD,OAAI,MAAM,EAAE,KAAK,MAAU,EAAE,MAAO;AACpC,KAAM,OAAO;IAAE,GAAG;IAAO,GAAG,EAAU,EAAM,MAAM,GAAO,GAAG,EAAM;IAAE,MAAM;IAAM,CAAC;AACjF;;EAGF,IAAM,IAAQ,EAAO,QAAQ,uBAAuB;AACpD,MAAI,KAAS,GAAU;AAErB,GADA,EAAE,gBAAgB,EAClB,EAAM,OAAO;IAAE,GAAG;IAAO,iBAAiB,OAAO,EAAM,aAAa,qBAAqB,CAAC;IAAE,CAAC;AAC7F;;EAGF,IAAM,IAAW,EAAO,QAAQ,sBAAsB,EAChD,IAAS,EAAa,EAAM;AAClC,MAAI,KAAY,KAAU,EAAM,oBAAoB,SAAS,MAAO,KAAK,MAAO,IAAI;AAClF,KAAE,gBAAgB;GAClB,IAAM,IAAI,OAAO,EAAS,aAAa,oBAAoB,CAAC,EACtD,IAAO,CAAC,GAAG,EAAO;AAExB,GADA,EAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAK,IAAI,KAAK,IAAK,IAAc,EAAK,CAAC,EAC7E,EAAK,IAAI,IAAI,MAAM,IAAK,IAAc;GACtC,IAAM,IAAqB;IAAE,MAAM;IAAU,SAAS,EAAM;IAAiB,QAAQ;IAAM;AAC3F,KAAM,OAAO;IAAE,GAAG;IAAO,GAAG,EAAkB;KAAE,GAAG;KAAO;KAAM,CAAC;IAAE,MAAM;IAAM,CAAC;;;AAIpF,QAAO;EAAE;EAAI;EAAQ;EAAS;EAAe;EAAW"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./Icon-DBXtBB1f.js";
1
+ import { t as e } from "./Icon-QhLhaGFe.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import { ArrowIcon as n, EllipseIcon as r, EyedropperIcon as i, HandIcon as a, ImageIcon as o, LassoIcon as s, LineIcon as c, PenIcon as l, PencilIcon as u, PolygonIcon as d, RectIcon as f, SelectIcon as p, StarIcon as m, TextIcon as h, UnknownIcon as g } from "@weasel-js/core";
4
4
  //#region src/icons/index.tsx
@@ -66,97 +66,100 @@ var _ = (n) => /* @__PURE__ */ t(e, {
66
66
  name: "stop",
67
67
  ...n
68
68
  }), R = (n) => /* @__PURE__ */ t(e, {
69
- name: "step",
69
+ name: "stepBack",
70
70
  ...n
71
71
  }), z = (n) => /* @__PURE__ */ t(e, {
72
+ name: "stepForward",
73
+ ...n
74
+ }), B = z, ee = (n) => /* @__PURE__ */ t(e, {
72
75
  name: "crosshair",
73
76
  ...n
74
- }), ee = (n) => /* @__PURE__ */ t(e, {
77
+ }), V = (n) => /* @__PURE__ */ t(e, {
75
78
  name: "fullscreen",
76
79
  ...n
77
- }), B = (n) => /* @__PURE__ */ t(e, {
80
+ }), H = (n) => /* @__PURE__ */ t(e, {
78
81
  name: "compare",
79
82
  ...n
80
- }), V = (n) => /* @__PURE__ */ t(e, {
83
+ }), U = (n) => /* @__PURE__ */ t(e, {
81
84
  name: "filter",
82
85
  ...n
83
- }), H = (n) => /* @__PURE__ */ t(e, {
86
+ }), W = (n) => /* @__PURE__ */ t(e, {
84
87
  name: "search",
85
88
  ...n
86
- }), U = (n) => /* @__PURE__ */ t(e, {
89
+ }), G = (n) => /* @__PURE__ */ t(e, {
87
90
  name: "loupe",
88
91
  ...n
89
- }), W = (n) => /* @__PURE__ */ t(e, {
92
+ }), K = (n) => /* @__PURE__ */ t(e, {
90
93
  name: "layers",
91
94
  ...n
92
- }), G = (n) => /* @__PURE__ */ t(e, {
95
+ }), q = (n) => /* @__PURE__ */ t(e, {
93
96
  name: "lock",
94
97
  ...n
95
- }), K = (n) => /* @__PURE__ */ t(e, {
98
+ }), J = (n) => /* @__PURE__ */ t(e, {
96
99
  name: "unlock",
97
100
  ...n
98
- }), q = (n) => /* @__PURE__ */ t(e, {
101
+ }), Y = (n) => /* @__PURE__ */ t(e, {
99
102
  name: "visible",
100
103
  ...n
101
- }), J = (n) => /* @__PURE__ */ t(e, {
104
+ }), X = (n) => /* @__PURE__ */ t(e, {
102
105
  name: "hidden",
103
106
  ...n
104
- }), Y = (n) => /* @__PURE__ */ t(e, {
107
+ }), Z = (n) => /* @__PURE__ */ t(e, {
105
108
  name: "pin",
106
109
  ...n
107
- }), X = (n) => /* @__PURE__ */ t(e, {
110
+ }), Q = (n) => /* @__PURE__ */ t(e, {
108
111
  name: "link",
109
112
  ...n
110
- }), Z = (n) => /* @__PURE__ */ t(e, {
113
+ }), $ = (n) => /* @__PURE__ */ t(e, {
111
114
  name: "collapse",
112
115
  ...n
113
- }), Q = (n) => /* @__PURE__ */ t(e, {
116
+ }), te = (n) => /* @__PURE__ */ t(e, {
114
117
  name: "expand",
115
118
  ...n
116
- }), $ = (n) => /* @__PURE__ */ t(e, {
119
+ }), ne = (n) => /* @__PURE__ */ t(e, {
117
120
  name: "chevron",
118
121
  ...n
119
- }), te = (n) => /* @__PURE__ */ t(e, {
122
+ }), re = (n) => /* @__PURE__ */ t(e, {
120
123
  name: "tune",
121
124
  ...n
122
- }), ne = (n) => /* @__PURE__ */ t(e, {
125
+ }), ie = (n) => /* @__PURE__ */ t(e, {
123
126
  name: "grid",
124
127
  ...n
125
- }), re = (n) => /* @__PURE__ */ t(e, {
128
+ }), ae = (n) => /* @__PURE__ */ t(e, {
126
129
  name: "snap",
127
130
  ...n
128
- }), ie = (n) => /* @__PURE__ */ t(e, {
131
+ }), oe = (n) => /* @__PURE__ */ t(e, {
129
132
  name: "measure",
130
133
  ...n
131
- }), ae = (n) => /* @__PURE__ */ t(e, {
134
+ }), se = (n) => /* @__PURE__ */ t(e, {
132
135
  name: "randomize",
133
136
  ...n
134
- }), oe = (n) => /* @__PURE__ */ t(e, {
137
+ }), ce = (n) => /* @__PURE__ */ t(e, {
135
138
  name: "refresh",
136
139
  ...n
137
- }), se = (n) => /* @__PURE__ */ t(e, {
140
+ }), le = (n) => /* @__PURE__ */ t(e, {
138
141
  name: "info",
139
142
  ...n
140
- }), ce = (n) => /* @__PURE__ */ t(e, {
143
+ }), ue = (n) => /* @__PURE__ */ t(e, {
141
144
  name: "warning",
142
145
  ...n
143
- }), le = (n) => /* @__PURE__ */ t(e, {
146
+ }), de = (n) => /* @__PURE__ */ t(e, {
144
147
  name: "error",
145
148
  ...n
146
- }), ue = (n) => /* @__PURE__ */ t(e, {
149
+ }), fe = (n) => /* @__PURE__ */ t(e, {
147
150
  name: "busy",
148
151
  ...n
149
- }), de = (n) => /* @__PURE__ */ t(e, {
152
+ }), pe = (n) => /* @__PURE__ */ t(e, {
150
153
  name: "layoutRows",
151
154
  ...n
152
- }), fe = (n) => /* @__PURE__ */ t(e, {
155
+ }), me = (n) => /* @__PURE__ */ t(e, {
153
156
  name: "layoutColumns",
154
157
  ...n
155
- }), pe = (n) => /* @__PURE__ */ t(e, {
158
+ }), he = (n) => /* @__PURE__ */ t(e, {
156
159
  name: "layoutGrid",
157
160
  ...n
158
161
  });
159
162
  //#endregion
160
- export { P as $, X as A, u as B, se as C, pe as D, fe as E, T as F, f as G, F as H, w as I, D as J, j as K, S as L, U as M, ie as N, de as O, E as P, re as Q, I as R, o as S, W as T, d as U, Y as V, ae as W, H as X, v as Y, p as Z, N as _, _ as a, te as at, a as b, B as c, K as ct, r as d, x as dt, k as et, le as f, M as ft, V as g, i as h, $ as i, h as it, G as j, c as k, z as l, q as lt, b as m, n, R as nt, y as o, A as ot, Q as p, oe as q, ue as r, L as rt, Z as s, g as st, C as t, m as tt, O as u, ce as ut, ee as v, s as w, J as x, ne as y, l as z };
163
+ export { P as $, Q as A, u as B, le as C, he as D, me as E, T as F, f as G, F as H, w as I, D as J, j as K, S as L, G as M, oe as N, pe as O, E as P, ae as Q, I as R, o as S, K as T, d as U, Z as V, se as W, W as X, v as Y, p as Z, N as _, _ as a, L as at, a as b, H as c, A as ct, r as d, Y as dt, k as et, de as f, ue as ft, U as g, i as h, ne as i, B as it, q as j, c as k, ee as l, g as lt, b as m, M as mt, n, R as nt, y as o, h as ot, te as p, x as pt, ce as q, fe as r, z as rt, $ as s, re as st, C as t, m as tt, O as u, J as ut, V as v, s as w, X as x, ie as y, l as z };
161
164
 
162
- //# sourceMappingURL=icons-BV27dhKB.js.map
165
+ //# sourceMappingURL=icons-Btrs-JD7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons-Btrs-JD7.js","names":[],"sources":["../../src/icons/index.tsx"],"sourcesContent":["import { Icon, type IconProps } from './Icon';\n\nexport { Icon, isFillable } from './Icon';\nexport type { IconProps } from './Icon';\nexport { ICON_FILLS, ICON_GROUPS, ICON_PATHS } from './paths';\nexport type { FillableIconName, IconName } from './paths';\n\n// Tool glyphs live in @weasel-js/core because core needs them for\n// `Tool.presentation.icon` defaults and cannot depend on this package.\n// Re-exported here so consumers have one import site for the whole set.\nexport {\n SelectIcon, LassoIcon, RectIcon, EllipseIcon, ImageIcon, EyedropperIcon,\n LineIcon, ArrowIcon, PolygonIcon, StarIcon, PencilIcon, TextIcon, PenIcon, HandIcon,\n UnknownIcon,\n} from '@weasel-js/core';\n\nexport const CloneIcon = (p: IconProps) => <Icon name=\"clone\" {...p} />;\nexport const ResetIcon = (p: IconProps) => <Icon name=\"reset\" {...p} />;\nexport const CloseIcon = (p: IconProps) => <Icon name=\"close\" {...p} />;\nexport const ExportIcon = (p: IconProps) => <Icon name=\"export\" {...p} />;\nexport const ZoomInIcon = (p: IconProps) => <Icon name=\"zoomIn\" {...p} />;\nexport const PanIcon = (p: IconProps) => <Icon name=\"pan\" {...p} />;\nexport const AddIcon = (p: IconProps) => <Icon name=\"add\" {...p} />;\nexport const ModeLightIcon = (p: IconProps) => <Icon name=\"modeLight\" {...p} />;\nexport const ModeDarkIcon = (p: IconProps) => <Icon name=\"modeDark\" {...p} />;\nexport const ModeAutoIcon = (p: IconProps) => <Icon name=\"modeAuto\" {...p} />;\nexport const RemoveIcon = (p: IconProps) => <Icon name=\"remove\" {...p} />;\nexport const DeleteIcon = (p: IconProps) => <Icon name=\"delete\" {...p} />;\nexport const SortIcon = (p: IconProps) => <Icon name=\"sort\" {...p} />;\nexport const UndoIcon = (p: IconProps) => <Icon name=\"undo\" {...p} />;\nexport const RedoIcon = (p: IconProps) => <Icon name=\"redo\" {...p} />;\nexport const ZoomOutIcon = (p: IconProps) => <Icon name=\"zoomOut\" {...p} />;\nexport const FitIcon = (p: IconProps) => <Icon name=\"fit\" {...p} />;\nexport const SnapshotIcon = (p: IconProps) => <Icon name=\"snapshot\" {...p} />;\nexport const PlayIcon = (p: IconProps) => <Icon name=\"play\" {...p} />;\nexport const PauseIcon = (p: IconProps) => <Icon name=\"pause\" {...p} />;\nexport const StopIcon = (p: IconProps) => <Icon name=\"stop\" {...p} />;\nexport const StepBackIcon = (p: IconProps) => <Icon name=\"stepBack\" {...p} />;\nexport const StepForwardIcon = (p: IconProps) => <Icon name=\"stepForward\" {...p} />;\n/** @deprecated Use {@link StepForwardIcon}; `step` alone stopped naming a direction. */\nexport const StepIcon = StepForwardIcon;\nexport const CrosshairIcon = (p: IconProps) => <Icon name=\"crosshair\" {...p} />;\nexport const FullscreenIcon = (p: IconProps) => <Icon name=\"fullscreen\" {...p} />;\nexport const CompareIcon = (p: IconProps) => <Icon name=\"compare\" {...p} />;\nexport const FilterIcon = (p: IconProps) => <Icon name=\"filter\" {...p} />;\nexport const SearchIcon = (p: IconProps) => <Icon name=\"search\" {...p} />;\nexport const LoupeIcon = (p: IconProps) => <Icon name=\"loupe\" {...p} />;\nexport const LayersIcon = (p: IconProps) => <Icon name=\"layers\" {...p} />;\nexport const LockIcon = (p: IconProps) => <Icon name=\"lock\" {...p} />;\nexport const UnlockIcon = (p: IconProps) => <Icon name=\"unlock\" {...p} />;\nexport const VisibleIcon = (p: IconProps) => <Icon name=\"visible\" {...p} />;\nexport const HiddenIcon = (p: IconProps) => <Icon name=\"hidden\" {...p} />;\nexport const PinIcon = (p: IconProps) => <Icon name=\"pin\" {...p} />;\nexport const LinkIcon = (p: IconProps) => <Icon name=\"link\" {...p} />;\nexport const CollapseIcon = (p: IconProps) => <Icon name=\"collapse\" {...p} />;\nexport const ExpandIcon = (p: IconProps) => <Icon name=\"expand\" {...p} />;\nexport const ChevronIcon = (p: IconProps) => <Icon name=\"chevron\" {...p} />;\nexport const TuneIcon = (p: IconProps) => <Icon name=\"tune\" {...p} />;\nexport const GridIcon = (p: IconProps) => <Icon name=\"grid\" {...p} />;\nexport const SnapIcon = (p: IconProps) => <Icon name=\"snap\" {...p} />;\nexport const MeasureIcon = (p: IconProps) => <Icon name=\"measure\" {...p} />;\nexport const RandomizeIcon = (p: IconProps) => <Icon name=\"randomize\" {...p} />;\nexport const RefreshIcon = (p: IconProps) => <Icon name=\"refresh\" {...p} />;\nexport const InfoIcon = (p: IconProps) => <Icon name=\"info\" {...p} />;\nexport const WarningIcon = (p: IconProps) => <Icon name=\"warning\" {...p} />;\nexport const ErrorIcon = (p: IconProps) => <Icon name=\"error\" {...p} />;\nexport const BusyIcon = (p: IconProps) => <Icon name=\"busy\" {...p} />;\nexport const LayoutRowsIcon = (p: IconProps) => <Icon name=\"layoutRows\" {...p} />;\nexport const LayoutColumnsIcon = (p: IconProps) => <Icon name=\"layoutColumns\" {...p} />;\nexport const LayoutGridIcon = (p: IconProps) => <Icon name=\"layoutGrid\" {...p} />;\n"],"mappings":"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"}
@@ -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-MCVT1MLv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-CPdFNeP6.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 { 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<Record<string, number>> {\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":";AAwCA,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,GAA4D;AAC1F,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"}
1
+ {"version":3,"file":"schema-MCVT1MLv.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 { 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<Record<string, number>> {\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":";AAwCA,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,GAA4D;AAC1F,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_nj5x1_10",
3
+ segment: "_segment_nj5x1_32",
4
+ segmentSelected: "_segmentSelected_nj5x1_81",
5
+ size_sm: "_size_sm_nj5x1_139",
6
+ variant_minimal: "_variant_minimal_nj5x1_152"
7
+ };
8
+ //#endregion
9
+ export { e as t };
10
+
11
+ //# sourceMappingURL=segmentedControl.module-DmeUMYe3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmentedControl.module-DmeUMYe3.js","names":[],"sources":["../../src/components/segmentedControl.module.css"],"sourcesContent":["/* Shared by ActionsBar and OptionsBar, which look identical and differ only\n in what a segment does. Lives here rather than in either component so\n neither owns the other's styling.\n\n Aqua-glass segmented control. The track is a pill-shaped well; the\n selected segment becomes a tinted glass cylinder that reads as the same\n \"lozenge\" family as the standalone Button. Visual params come from the\n `--btn-*` custom properties (see Button.module.css) so the Button Lab\n can tune both surfaces with one set of sliders. */\n.root {\n display: inline-flex;\n height: var(--tb-h, var(--wzl-control-h, 24px));\n padding: 2px;\n background: linear-gradient(\n 180deg,\n rgba(0, 0, 0, 0.18) 0%,\n rgba(0, 0, 0, 0.05) 100%\n );\n border-radius: var(--wzl-radius-pill);\n /* Clip segments to the track outline so interior corners read crisp and\n the selected segment's glass treatment doesn't paint over the rounded\n outer pixels. */\n overflow: hidden;\n box-shadow:\n inset 0 1px 2px rgba(0, 0, 0, 0.4),\n 0 1px 0 rgba(255, 255, 255, 0.06);\n user-select: none;\n -webkit-user-select: none;\n touch-action: none;\n}\n\n.segment {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n /* 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 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n margin: 0;\n font-family: var(--wzl-font-ui);\n font-weight: var(--wzl-font-weight-normal);\n font-size: var(--btn-fontsize, var(--wzl-font-size));\n line-height: 1;\n color: var(--wzl-fg-muted);\n cursor: pointer;\n /* Only round the outer corners of the bar — middle segments stay square\n so the seams between them don't render as facing parentheses. */\n border-radius: 0;\n isolation: isolate;\n overflow: hidden;\n transition: color var(--wzl-motion-fast);\n}\n\n.segment:first-child {\n border-radius: var(--wzl-radius-pill) 0 0 var(--wzl-radius-pill);\n}\n\n.segment:last-child {\n border-radius: 0 var(--wzl-radius-pill) var(--wzl-radius-pill) 0;\n}\n\n.segment:only-child {\n border-radius: var(--wzl-radius-pill);\n}\n\n.segment:focus-visible {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -2px;\n}\n\n.segment:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n}\n\n/* Selected segment — full Aqua glass cylinder. Mirrors Button.variant_primary. */\n.segmentSelected {\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha, 45%), transparent) 0%,\n color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha, 70%), transparent) calc(var(--btn-equator, 52%) - var(--btn-equator-spread, 12%)),\n color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint, 95%), white) var(--btn-equator, 52%),\n var(--wzl-accent) calc(var(--btn-equator, 52%) + var(--btn-equator-spread, 12%) * 1.6),\n color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint, 70%), black) 100%\n );\n backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n -webkit-backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n color: var(--wzl-fg-on-accent);\n text-shadow:\n 0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow, 0.35)),\n var(--btn-text-inset-x, 0px) var(--btn-text-inset-y, 1px) 0 rgba(0, 0, 0, var(--btn-text-inset, 0.55)),\n 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow, 0.35) * 0.5));\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi, 0.42)),\n inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo, 0.3)),\n 0 0 0 1px rgba(0, 0, 0, var(--btn-rim, 0.22)),\n 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near, 0.3)),\n 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far, 0.18) * 0.8));\n}\n\n/* Specular gloss on the selected segment. Top corners inherit the\n segment's radius so they hug the upper edge cleanly; bottom corners\n are flattened so the gloss ends in a straight line at the equator\n instead of two little curves that read as `)(` brackets. */\n.segmentSelected::before {\n content: '';\n position: absolute;\n inset: 1px 1px var(--btn-gloss-bottom, 50%) 1px;\n border-radius: inherit;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, var(--btn-gloss-top, 0.42)) 0%,\n rgba(255, 255, 255, var(--btn-gloss-mid, 0.12)) 60%,\n rgba(255, 255, 255, 0) 100%\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.segmentSelected > * {\n position: relative;\n z-index: 2;\n}\n\n/* Small variant — ~60% of the default height, with proportionally reduced\n padding and font. Sized for dense surfaces (lab control panels, inline\n filters, etc.). */\n.size_sm {\n height: 17px;\n padding: 1px;\n}\n\n.size_sm .segment {\n padding: 0 8px;\n font-size: var(--wzl-font-size-sm);\n}\n\n/* Minimal variant — strips the pill track, glass selected state, inset\n shadows, and outer padding. Used in dense diagnostic surfaces (dispatch\n trace, lab inspectors) where the bar must read as plain text controls. */\n.variant_minimal {\n height: auto;\n padding: 0;\n background: none;\n border-radius: 0;\n box-shadow: none;\n gap: 2px;\n}\n\n.variant_minimal .segment {\n padding: 0 4px;\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-medium);\n line-height: 1.4;\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg-muted);\n transition: none;\n}\n\n.variant_minimal .segment:first-child,\n.variant_minimal .segment:last-child,\n.variant_minimal .segment:only-child {\n border-radius: var(--wzl-radius-sm);\n}\n\n.variant_minimal .segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n background: var(--wzl-surface-hover);\n}\n\n.variant_minimal .segmentSelected {\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n color: var(--wzl-accent-fg, var(--wzl-accent));\n text-shadow: none;\n box-shadow: none;\n font-weight: var(--wzl-font-weight-medium);\n}\n\n.variant_minimal .segmentSelected::before {\n content: none;\n}\n"],"mappings":""}
@@ -0,0 +1,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-B0WQwetQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snap-B0WQwetQ.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":"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-GZdcfdQL.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-Fhx_40iP.js";
2
2
  export { e as ActionsBar };
@@ -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-D8I5Uun-.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 { n as e, t } from "../../chunks/Callout-BPIA2is-.js";
1
+ import { n as e, t } from "../../chunks/Callout-cx5_CWcW.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-BZZsPaVF.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-YVf8irfr.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-D57tNYDD.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-BXiMoN9d.js";
2
+ import { i as a, n as o, r as s, t as c } from "../../chunks/createKeyframeLayer-7j7ukrSx.js";
3
+ import { t as l } from "../../chunks/snap-B0WQwetQ.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 };
@@ -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-BWNSv07Z.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-DuOzsR2g.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-9UgDzc7Z.js";
2
2
  export { t as Disclosure, e as DisclosureRow };