@weasel-js/ui 1.7.3 → 1.8.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 (306) hide show
  1. package/dist/chunks/{ActionBar-xA73vzzF.js → ActionBar-CfXS7-9f.js} +2 -2
  2. package/dist/chunks/{ActionBar-xA73vzzF.js.map → ActionBar-CfXS7-9f.js.map} +1 -1
  3. package/dist/chunks/{Badge-jYQjrTKc.js → Badge-4ShpqA0h.js} +2 -2
  4. package/dist/chunks/{Badge-jYQjrTKc.js.map → Badge-4ShpqA0h.js.map} +1 -1
  5. package/dist/chunks/{Badge-CTc9Lkwn.js → Badge-qkV9EqKs.js} +6 -2
  6. package/dist/chunks/Badge-qkV9EqKs.js.map +1 -0
  7. package/dist/chunks/{Button-XB-T75YL.js → Button-CQA-K1g9.js} +17 -17
  8. package/dist/chunks/Button-CQA-K1g9.js.map +1 -0
  9. package/dist/chunks/Button-KF-qSGtA.js +11 -0
  10. package/dist/chunks/Button-KF-qSGtA.js.map +1 -0
  11. package/dist/chunks/{ButtonBar-CIMKPPRS.js → ButtonBar-B-cYuoem.js} +10 -4
  12. package/dist/chunks/ButtonBar-B-cYuoem.js.map +1 -0
  13. package/dist/chunks/{Callout-BUn0dP_S.js → Callout-VyYDIP7w.js} +26 -26
  14. package/dist/chunks/Callout-VyYDIP7w.js.map +1 -0
  15. package/dist/chunks/{Checkbox-DFn-x0JO.js → Checkbox-d4IfhiXh.js} +2 -2
  16. package/dist/chunks/{Checkbox-DFn-x0JO.js.map → Checkbox-d4IfhiXh.js.map} +1 -1
  17. package/dist/chunks/{CloseButton-BmNmRVtb.js → CloseButton-CKarkTT9.js} +3 -3
  18. package/dist/chunks/{CloseButton-BmNmRVtb.js.map → CloseButton-CKarkTT9.js.map} +1 -1
  19. package/dist/chunks/{Code-AsKpgnv6.js → Code-ChwKP1V0.js} +8 -2
  20. package/dist/chunks/Code-ChwKP1V0.js.map +1 -0
  21. package/dist/chunks/{ColorModeControl-DaVJ-SyX.js → ColorModeControl-CH9PmDlT.js} +6 -6
  22. package/dist/chunks/{ColorModeControl-DaVJ-SyX.js.map → ColorModeControl-CH9PmDlT.js.map} +1 -1
  23. package/dist/chunks/{ComboBox-DKln_mOd.js → ComboBox-BMj_IKBj.js} +4 -4
  24. package/dist/chunks/ComboBox-BMj_IKBj.js.map +1 -0
  25. package/dist/chunks/{DataGrid-CmHJe57v.js → DataGrid-CjiVKoaA.js} +3 -3
  26. package/dist/chunks/{DataGrid-CmHJe57v.js.map → DataGrid-CjiVKoaA.js.map} +1 -1
  27. package/dist/chunks/{DetentSlider-DNTAk8xP.js → DetentSlider-D40V8Oma.js} +2 -2
  28. package/dist/chunks/{DetentSlider-DNTAk8xP.js.map → DetentSlider-D40V8Oma.js.map} +1 -1
  29. package/dist/chunks/{Dialog-DKfsk5VN.js → Dialog-Du4POZ52.js} +12 -12
  30. package/dist/chunks/Dialog-Du4POZ52.js.map +1 -0
  31. package/dist/chunks/{Disclosure-Ch2KxYuB.js → Disclosure-CpWt87nO.js} +7 -7
  32. package/dist/chunks/{Disclosure-Ch2KxYuB.js.map → Disclosure-CpWt87nO.js.map} +1 -1
  33. package/dist/chunks/{DragGhost-BeYDJyLZ.js → DragGhost-_IpuN_xM.js} +2 -2
  34. package/dist/chunks/{DragGhost-BeYDJyLZ.js.map → DragGhost-_IpuN_xM.js.map} +1 -1
  35. package/dist/chunks/{FallthroughDiagram-CS1IhQaU.js → FallthroughDiagram-Cn6QLWKA.js} +9 -9
  36. package/dist/chunks/{FallthroughDiagram-CS1IhQaU.js.map → FallthroughDiagram-Cn6QLWKA.js.map} +1 -1
  37. package/dist/chunks/{FillStrokeSwatch-C4h3rUFM.js → FillStrokeSwatch-BkUhlpQL.js} +2 -2
  38. package/dist/chunks/{FillStrokeSwatch-C4h3rUFM.js.map → FillStrokeSwatch-BkUhlpQL.js.map} +1 -1
  39. package/dist/chunks/FitLabel-BzZGkWfL.js +76 -0
  40. package/dist/chunks/FitLabel-BzZGkWfL.js.map +1 -0
  41. package/dist/chunks/{FontFamilySelect-DEvMXyZd.js → FontFamilySelect-CXN7O2-p.js} +2 -2
  42. package/dist/chunks/{FontFamilySelect-DEvMXyZd.js.map → FontFamilySelect-CXN7O2-p.js.map} +1 -1
  43. package/dist/chunks/{FontWeightSelect-BLQ_LMJF.js → FontWeightSelect-BBuJGe_2.js} +2 -2
  44. package/dist/chunks/{FontWeightSelect-BLQ_LMJF.js.map → FontWeightSelect-BBuJGe_2.js.map} +1 -1
  45. package/dist/chunks/{GestureRoute-BXESrHI0.js → GestureRoute-BqHUrGeQ.js} +13 -13
  46. package/dist/chunks/{GestureRoute-BXESrHI0.js.map → GestureRoute-BqHUrGeQ.js.map} +1 -1
  47. package/dist/chunks/{GradientEditor-DD2OjQtn.js → GradientEditor-DX4sb1Hf.js} +4 -4
  48. package/dist/chunks/{GradientEditor-DD2OjQtn.js.map → GradientEditor-DX4sb1Hf.js.map} +1 -1
  49. package/dist/chunks/{Icon--B1ME-6c.js → Icon-BfqYtAX5.js} +33 -1
  50. package/dist/chunks/Icon-BfqYtAX5.js.map +1 -0
  51. package/dist/chunks/{ItemList-CRu9y7hL.js → ItemList-nbakLf3N.js} +32 -32
  52. package/dist/chunks/ItemList-nbakLf3N.js.map +1 -0
  53. package/dist/chunks/{Jog-BrkzdGV2.js → Jog-BU0xuM3G.js} +7 -7
  54. package/dist/chunks/{Jog-BrkzdGV2.js.map → Jog-BU0xuM3G.js.map} +1 -1
  55. package/dist/chunks/{Keycaps-C-FJyG8k.js → Keycaps-CM-gOj0e.js} +8 -2
  56. package/dist/chunks/Keycaps-CM-gOj0e.js.map +1 -0
  57. package/dist/chunks/LayerList-vfAoImxX.js +432 -0
  58. package/dist/chunks/LayerList-vfAoImxX.js.map +1 -0
  59. package/dist/chunks/{ListEditor-OQDzG4A5.js → ListEditor-BAKs47bN.js} +3 -3
  60. package/dist/chunks/{ListEditor-OQDzG4A5.js.map → ListEditor-BAKs47bN.js.map} +1 -1
  61. package/dist/chunks/{MenuButton-TAFg88Lp.js → MenuButton-CJGdhwGr.js} +5 -5
  62. package/dist/chunks/MenuButton-CJGdhwGr.js.map +1 -0
  63. package/dist/chunks/{MeshEditor-DWpvg8H6.js → MeshEditor-rhf7cXfG.js} +2 -2
  64. package/dist/chunks/{MeshEditor-DWpvg8H6.js.map → MeshEditor-rhf7cXfG.js.map} +1 -1
  65. package/dist/chunks/{NumberField-DS0WSiin.js → NumberField-BXFrOi5M.js} +8 -5
  66. package/dist/chunks/{NumberField-DS0WSiin.js.map → NumberField-BXFrOi5M.js.map} +1 -1
  67. package/dist/chunks/{OptionsBar-DeTAjVb7.js → OptionsBar-DyTXbev-.js} +9 -3
  68. package/dist/chunks/OptionsBar-DyTXbev-.js.map +1 -0
  69. package/dist/chunks/{PaintField-BdmQM53v.js → PaintField--GbF8sL7.js} +7 -7
  70. package/dist/chunks/PaintField--GbF8sL7.js.map +1 -0
  71. package/dist/chunks/{PaintInput-DaQMeBsI.js → PaintInput-DSS5IjXn.js} +5 -5
  72. package/dist/chunks/{PaintInput-DaQMeBsI.js.map → PaintInput-DSS5IjXn.js.map} +1 -1
  73. package/dist/chunks/{PatternPicker-B3HcMZWg.js → PatternPicker-82DCUvUk.js} +9 -9
  74. package/dist/chunks/PatternPicker-82DCUvUk.js.map +1 -0
  75. package/dist/chunks/{Powerline-6wIFmDik.js → Powerline-CogJv9VU.js} +2 -2
  76. package/dist/chunks/{Powerline-6wIFmDik.js.map → Powerline-CogJv9VU.js.map} +1 -1
  77. package/dist/chunks/{Prefs-BnVEyfWO.js → Prefs-BSSKOvPa.js} +41 -41
  78. package/dist/chunks/Prefs-BSSKOvPa.js.map +1 -0
  79. package/dist/chunks/{Properties-BoG2MMHR.js → Properties-DteSVEWs.js} +5 -5
  80. package/dist/chunks/{Properties-BoG2MMHR.js.map → Properties-DteSVEWs.js.map} +1 -1
  81. package/dist/chunks/PropertyField-CLbUOynA.js +751 -0
  82. package/dist/chunks/PropertyField-CLbUOynA.js.map +1 -0
  83. package/dist/chunks/{Select-ouV8O6cp.js → Select-BhHwjNsb.js} +13 -13
  84. package/dist/chunks/Select-BhHwjNsb.js.map +1 -0
  85. package/dist/chunks/{SelectionPanel-COZ6z9_P.js → SelectionPanel-B6HinSdB.js} +2 -2
  86. package/dist/chunks/{SelectionPanel-COZ6z9_P.js.map → SelectionPanel-B6HinSdB.js.map} +1 -1
  87. package/dist/chunks/{SidebarPanel-AXQ0jRDx.js → SidebarPanel-P3a8tIIj.js} +3 -3
  88. package/dist/chunks/{SidebarPanel-AXQ0jRDx.js.map → SidebarPanel-P3a8tIIj.js.map} +1 -1
  89. package/dist/chunks/Slider-CHBQ8uUC.js +439 -0
  90. package/dist/chunks/Slider-CHBQ8uUC.js.map +1 -0
  91. package/dist/chunks/{StatusBar-BEOfOX0D.js → StatusBar-DEh7J2Gj.js} +14 -9
  92. package/dist/chunks/StatusBar-DEh7J2Gj.js.map +1 -0
  93. package/dist/chunks/{SwatchGrid-9ZPiDmxd.js → SwatchGrid-DxK9e_IV.js} +3 -3
  94. package/dist/chunks/SwatchGrid-DxK9e_IV.js.map +1 -0
  95. package/dist/chunks/{SwatchStrip-Bi9iPLoh.js → SwatchStrip-D7YNn_p0.js} +3 -3
  96. package/dist/chunks/{SwatchStrip-Bi9iPLoh.js.map → SwatchStrip-D7YNn_p0.js.map} +1 -1
  97. package/dist/chunks/{ThemeSwitcher-DiBmMh_B.js → ThemeSwitcher-BJWP1l87.js} +6 -6
  98. package/dist/chunks/{ThemeSwitcher-DiBmMh_B.js.map → ThemeSwitcher-BJWP1l87.js.map} +1 -1
  99. package/dist/chunks/{Timeline-sMCH2fah.js → Timeline-CisRg82u.js} +4 -4
  100. package/dist/chunks/{Timeline-sMCH2fah.js.map → Timeline-CisRg82u.js.map} +1 -1
  101. package/dist/chunks/{Toast-C3ozq11V.js → Toast-DhkU9Z0b.js} +3 -3
  102. package/dist/chunks/{Toast-C3ozq11V.js.map → Toast-DhkU9Z0b.js.map} +1 -1
  103. package/dist/chunks/ToggleBar-CRc2k89_.js +10 -0
  104. package/dist/chunks/ToggleBar-CRc2k89_.js.map +1 -0
  105. package/dist/chunks/ToggleBar-CfYbMK3x.js +84 -0
  106. package/dist/chunks/ToggleBar-CfYbMK3x.js.map +1 -0
  107. package/dist/chunks/{TokenPanel-WtKGY2Db.js → TokenPanel-cL37E39j.js} +26 -26
  108. package/dist/chunks/{TokenPanel-WtKGY2Db.js.map → TokenPanel-cL37E39j.js.map} +1 -1
  109. package/dist/chunks/{ToolButton-BURp4YIO.js → ToolButton-Bo7WH1wt.js} +2 -2
  110. package/dist/chunks/{ToolButton-BURp4YIO.js.map → ToolButton-Bo7WH1wt.js.map} +1 -1
  111. package/dist/chunks/ToolOptionsBar-DmhzrOmd.js +94 -0
  112. package/dist/chunks/ToolOptionsBar-DmhzrOmd.js.map +1 -0
  113. package/dist/chunks/{ToolPalette-DKDFWOX-.js → ToolPalette-BTD84k9C.js} +2 -2
  114. package/dist/chunks/{ToolPalette-DKDFWOX-.js.map → ToolPalette-BTD84k9C.js.map} +1 -1
  115. package/dist/chunks/{Tooltip-C6eFCYxw.js → Tooltip-DljsPEQG.js} +4 -4
  116. package/dist/chunks/Tooltip-DljsPEQG.js.map +1 -0
  117. package/dist/chunks/Tree-B_PW6K-W.js +215 -0
  118. package/dist/chunks/Tree-B_PW6K-W.js.map +1 -0
  119. package/dist/chunks/checkbox.module-Dcx8ILgR.js +5 -0
  120. package/dist/chunks/checkbox.module-Dcx8ILgR.js.map +1 -0
  121. package/dist/chunks/{icons-Dr2-r30x.js → icons-B_fPKEis.js} +52 -43
  122. package/dist/chunks/icons-B_fPKEis.js.map +1 -0
  123. package/dist/chunks/{model-B6zuQg6b.js → model-Ca0f95r0.js} +134 -133
  124. package/dist/chunks/model-Ca0f95r0.js.map +1 -0
  125. package/dist/chunks/{portalHost-CE70wLzo.js → portalHost-RUQPxIoW.js} +3 -2
  126. package/dist/chunks/{portalHost-CE70wLzo.js.map → portalHost-RUQPxIoW.js.map} +1 -1
  127. package/dist/chunks/{prefField-BE_Ytr2H.js → prefField-DPPbAmRR.js} +81 -75
  128. package/dist/chunks/prefField-DPPbAmRR.js.map +1 -0
  129. package/dist/chunks/{segmentTooltip-CGxCOWNz.js → segmentTooltip-8VBPNgEc.js} +2 -2
  130. package/dist/chunks/{segmentTooltip-CGxCOWNz.js.map → segmentTooltip-8VBPNgEc.js.map} +1 -1
  131. package/dist/chunks/segmentedControl.module-62qjNWJk.js +11 -0
  132. package/dist/chunks/{segmentedControl.module-BzGXUL5G.js.map → segmentedControl.module-62qjNWJk.js.map} +1 -1
  133. package/dist/chunks/{useReorderDragList-CStYKjHl.js → useReorderDragList-DnqqvRGK.js} +38 -30
  134. package/dist/chunks/useReorderDragList-DnqqvRGK.js.map +1 -0
  135. package/dist/components/ActionBar/index.js +1 -1
  136. package/dist/components/Badge/index.d.ts +1 -0
  137. package/dist/components/Badge/index.d.ts.map +1 -1
  138. package/dist/components/Badge/index.js +3 -3
  139. package/dist/components/Badge/variantIcons.d.ts +5 -0
  140. package/dist/components/Badge/variantIcons.d.ts.map +1 -0
  141. package/dist/components/Button/index.d.ts +1 -0
  142. package/dist/components/Button/index.d.ts.map +1 -1
  143. package/dist/components/Button/index.js +3 -2
  144. package/dist/components/Button/variantIcons.d.ts +5 -0
  145. package/dist/components/Button/variantIcons.d.ts.map +1 -0
  146. package/dist/components/ButtonBar/index.d.ts +1 -0
  147. package/dist/components/ButtonBar/index.d.ts.map +1 -1
  148. package/dist/components/ButtonBar/index.js +2 -2
  149. package/dist/components/ButtonBar/variantIcons.d.ts +5 -0
  150. package/dist/components/ButtonBar/variantIcons.d.ts.map +1 -0
  151. package/dist/components/Callout/Callout.d.ts.map +1 -1
  152. package/dist/components/Callout/index.js +1 -1
  153. package/dist/components/Checkbox/index.js +1 -1
  154. package/dist/components/CloseButton/index.js +1 -1
  155. package/dist/components/Code/index.d.ts +1 -0
  156. package/dist/components/Code/index.d.ts.map +1 -1
  157. package/dist/components/Code/index.js +2 -2
  158. package/dist/components/Code/variantIcons.d.ts +5 -0
  159. package/dist/components/Code/variantIcons.d.ts.map +1 -0
  160. package/dist/components/ColorModeControl/index.js +1 -1
  161. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  162. package/dist/components/ComboBox/index.js +1 -1
  163. package/dist/components/DataGrid/index.js +1 -1
  164. package/dist/components/DetentSlider/index.js +1 -1
  165. package/dist/components/Dialog/Dialog.d.ts.map +1 -1
  166. package/dist/components/Dialog/index.js +1 -1
  167. package/dist/components/Disclosure/index.js +1 -1
  168. package/dist/components/DragGhost/index.js +1 -1
  169. package/dist/components/FallthroughDiagram/index.js +1 -1
  170. package/dist/components/FillStrokeSwatch/index.js +1 -1
  171. package/dist/components/FitLabel/FitLabel.d.ts +41 -0
  172. package/dist/components/FitLabel/FitLabel.d.ts.map +1 -0
  173. package/dist/components/FitLabel/index.d.ts +3 -0
  174. package/dist/components/FitLabel/index.d.ts.map +1 -0
  175. package/dist/components/FitLabel/index.js +2 -0
  176. package/dist/components/FontFamilySelect/index.js +1 -1
  177. package/dist/components/FontWeightSelect/index.js +1 -1
  178. package/dist/components/GestureRoute/index.js +1 -1
  179. package/dist/components/GradientEditor/index.js +1 -1
  180. package/dist/components/InlineRange/InlineRange.d.ts +1 -1
  181. package/dist/components/ItemList/index.js +1 -1
  182. package/dist/components/Jog/index.js +1 -1
  183. package/dist/components/Keycaps/index.d.ts +1 -0
  184. package/dist/components/Keycaps/index.d.ts.map +1 -1
  185. package/dist/components/Keycaps/index.js +2 -2
  186. package/dist/components/Keycaps/variantIcons.d.ts +5 -0
  187. package/dist/components/Keycaps/variantIcons.d.ts.map +1 -0
  188. package/dist/components/LayerList/LayerList.d.ts.map +1 -1
  189. package/dist/components/LayerList/index.js +1 -1
  190. package/dist/components/ListEditor/index.js +1 -1
  191. package/dist/components/MenuButton/MenuButton.d.ts.map +1 -1
  192. package/dist/components/MenuButton/index.js +1 -1
  193. package/dist/components/MeshEditor/index.js +1 -1
  194. package/dist/components/NumberField/UnitField.d.ts.map +1 -1
  195. package/dist/components/NumberField/index.js +1 -1
  196. package/dist/components/OptionsBar/index.d.ts +1 -0
  197. package/dist/components/OptionsBar/index.d.ts.map +1 -1
  198. package/dist/components/OptionsBar/index.js +2 -2
  199. package/dist/components/OptionsBar/variantIcons.d.ts +5 -0
  200. package/dist/components/OptionsBar/variantIcons.d.ts.map +1 -0
  201. package/dist/components/PaintField/PaintField.d.ts.map +1 -1
  202. package/dist/components/PaintField/index.js +1 -1
  203. package/dist/components/PaintInput/index.js +1 -1
  204. package/dist/components/PatternPicker/index.js +1 -1
  205. package/dist/components/Powerline/index.js +2 -2
  206. package/dist/components/Prefs/index.js +2 -2
  207. package/dist/components/Prefs/prefField.d.ts.map +1 -1
  208. package/dist/components/Properties/NumberControls.d.ts +16 -0
  209. package/dist/components/Properties/NumberControls.d.ts.map +1 -0
  210. package/dist/components/Properties/PropertyField.d.ts +18 -8
  211. package/dist/components/Properties/PropertyField.d.ts.map +1 -1
  212. package/dist/components/Properties/index.js +2 -2
  213. package/dist/components/Select/Select.d.ts.map +1 -1
  214. package/dist/components/Select/index.js +1 -1
  215. package/dist/components/SelectionPanel/index.js +2 -2
  216. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
  217. package/dist/components/SidebarPanel/index.js +1 -1
  218. package/dist/components/Slider/Slider.d.ts +6 -0
  219. package/dist/components/Slider/Slider.d.ts.map +1 -1
  220. package/dist/components/Slider/index.js +1 -1
  221. package/dist/components/StatusBar/StatusBar.d.ts +2 -0
  222. package/dist/components/StatusBar/StatusBar.d.ts.map +1 -1
  223. package/dist/components/StatusBar/index.js +1 -1
  224. package/dist/components/SwatchGrid/index.js +1 -1
  225. package/dist/components/SwatchStrip/index.js +1 -1
  226. package/dist/components/ThemeSwitcher/index.js +1 -1
  227. package/dist/components/Timeline/index.js +1 -1
  228. package/dist/components/Toast/index.js +1 -1
  229. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  230. package/dist/components/ToggleBar/index.d.ts +1 -0
  231. package/dist/components/ToggleBar/index.d.ts.map +1 -1
  232. package/dist/components/ToggleBar/index.js +3 -2
  233. package/dist/components/ToggleBar/variantIcons.d.ts +5 -0
  234. package/dist/components/ToggleBar/variantIcons.d.ts.map +1 -0
  235. package/dist/components/TokenPanel/index.js +1 -1
  236. package/dist/components/ToolButton/index.js +1 -1
  237. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts +1 -1
  238. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts.map +1 -1
  239. package/dist/components/ToolOptionsBar/index.js +1 -1
  240. package/dist/components/ToolPalette/index.js +1 -1
  241. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  242. package/dist/components/Tooltip/index.js +1 -1
  243. package/dist/components/Tree/Tree.d.ts +1 -1
  244. package/dist/components/Tree/Tree.d.ts.map +1 -1
  245. package/dist/components/Tree/index.js +1 -1
  246. package/dist/components/stanceCss.d.ts +6 -0
  247. package/dist/components/stanceCss.d.ts.map +1 -1
  248. package/dist/components/stanceSurfaces.d.ts.map +1 -1
  249. package/dist/endless.d.ts +7 -0
  250. package/dist/endless.d.ts.map +1 -0
  251. package/dist/icons/index.d.ts +6 -0
  252. package/dist/icons/index.d.ts.map +1 -1
  253. package/dist/icons/paths.d.ts +14 -0
  254. package/dist/icons/paths.d.ts.map +1 -1
  255. package/dist/index.d.ts +1 -0
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +101 -97
  258. package/dist/index.js.map +1 -1
  259. package/dist/overlays/portalHost.d.ts +10 -4
  260. package/dist/overlays/portalHost.d.ts.map +1 -1
  261. package/dist/style.css +1 -1
  262. package/dist/useReorderDragList.d.ts +3 -0
  263. package/dist/useReorderDragList.d.ts.map +1 -1
  264. package/package.json +10 -9
  265. package/dist/chunks/Badge-CTc9Lkwn.js.map +0 -1
  266. package/dist/chunks/Button-XB-T75YL.js.map +0 -1
  267. package/dist/chunks/ButtonBar-CIMKPPRS.js.map +0 -1
  268. package/dist/chunks/Callout-BUn0dP_S.js.map +0 -1
  269. package/dist/chunks/Code-AsKpgnv6.js.map +0 -1
  270. package/dist/chunks/ComboBox-DKln_mOd.js.map +0 -1
  271. package/dist/chunks/Dialog-DKfsk5VN.js.map +0 -1
  272. package/dist/chunks/Icon--B1ME-6c.js.map +0 -1
  273. package/dist/chunks/ItemList-CRu9y7hL.js.map +0 -1
  274. package/dist/chunks/Keycaps-C-FJyG8k.js.map +0 -1
  275. package/dist/chunks/LayerList-BqeWFuGc.js +0 -421
  276. package/dist/chunks/LayerList-BqeWFuGc.js.map +0 -1
  277. package/dist/chunks/MenuButton-TAFg88Lp.js.map +0 -1
  278. package/dist/chunks/OptionsBar-DeTAjVb7.js.map +0 -1
  279. package/dist/chunks/PaintField-BdmQM53v.js.map +0 -1
  280. package/dist/chunks/PatternPicker-B3HcMZWg.js.map +0 -1
  281. package/dist/chunks/Prefs-BnVEyfWO.js.map +0 -1
  282. package/dist/chunks/PropertyField-PMrqBA0n.js +0 -743
  283. package/dist/chunks/PropertyField-PMrqBA0n.js.map +0 -1
  284. package/dist/chunks/Select-ouV8O6cp.js.map +0 -1
  285. package/dist/chunks/Slider-DSrlMEq8.js +0 -389
  286. package/dist/chunks/Slider-DSrlMEq8.js.map +0 -1
  287. package/dist/chunks/StatusBar-BEOfOX0D.js.map +0 -1
  288. package/dist/chunks/SwatchGrid-9ZPiDmxd.js.map +0 -1
  289. package/dist/chunks/ToggleBar-Z2jZiguF.js +0 -80
  290. package/dist/chunks/ToggleBar-Z2jZiguF.js.map +0 -1
  291. package/dist/chunks/ToolOptionsBar-BJKwnemU.js +0 -88
  292. package/dist/chunks/ToolOptionsBar-BJKwnemU.js.map +0 -1
  293. package/dist/chunks/Tooltip-C6eFCYxw.js.map +0 -1
  294. package/dist/chunks/Tree-Cc8lIzgM.js +0 -203
  295. package/dist/chunks/Tree-Cc8lIzgM.js.map +0 -1
  296. package/dist/chunks/checkbox.module-DLQV9tMX.js +0 -5
  297. package/dist/chunks/checkbox.module-DLQV9tMX.js.map +0 -1
  298. package/dist/chunks/icons-Dr2-r30x.js.map +0 -1
  299. package/dist/chunks/interactiveTarget-BNZmTow2.js +0 -24
  300. package/dist/chunks/interactiveTarget-BNZmTow2.js.map +0 -1
  301. package/dist/chunks/model-B6zuQg6b.js.map +0 -1
  302. package/dist/chunks/prefField-BE_Ytr2H.js.map +0 -1
  303. package/dist/chunks/segmentedControl.module-BzGXUL5G.js +0 -11
  304. package/dist/chunks/useReorderDragList-CStYKjHl.js.map +0 -1
  305. package/dist/interactiveTarget.d.ts +0 -9
  306. package/dist/interactiveTarget.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionPanel-COZ6z9_P.js","names":["s","_Fragment","Fragment","renderCells","SelectionPanel_module_default","effectiveSections","setAtPath","aggregateValue","kindBreakdown","classifyKind","MIXED","renderBuiltin","Fragment$1","defaultKindLabel","kind","SelectionPanel","props","scene","nodes","selection","asNodeId","id","n","kinds","routing","selectionKey","sections","properties","className","emptyState","commit","head","rest","leaf","ids","node","value","next","nodeValueAt","kindLabel","Fragment","rows","section","row","leafCell","panelLeaf","renderers","controls","content","key","aggregated","path","mixed","ctx","v","fn","at","p","custom","ariaLabel"],"sources":["../../src/components/SelectionPanel/SelectionPanel.tsx"],"sourcesContent":["import { Fragment, useSyncExternalStore, type ReactNode } from 'react';\nimport {\n asNodeId,\n type NodePropertiesEntry,\n type NodeRoutingEntry,\n type Scene,\n type SelectionApi,\n} from '@weasel-js/core';\nimport {\n renderBuiltin,\n renderCells,\n type LeafCell,\n type PropertyRenderContext,\n type PropertyRenderer,\n} from './renderLeaf';\nimport {\n MIXED,\n aggregateValue,\n classifyKind,\n effectiveSections,\n kindBreakdown,\n nodeValueAt,\n setAtPath,\n type AnyNode,\n type PanelLeaf,\n} from './model';\nimport s from './SelectionPanel.module.css';\n\nexport type { PropertyRenderContext, PropertyRenderer } from './renderLeaf';\n\n/** Props for {@link SelectionPanel}. */\nexport interface SelectionPanelProps<TData, TLayer extends string, TPose> {\n /** The scene handle (`useScene`). The panel subscribes itself, so it\n * re-renders on scene mutations regardless of parent renders. */\n scene: Scene<TData, TLayer, TPose>;\n /** Selection handle (`useSelection`). Only `current` is read. */\n selection: Pick<SelectionApi, 'current'>;\n /** Properties-trait entries, e.g. core's `defaultNodeProperties` /\n * `inferredNodeProperties` (+ consumer extras). Memoize or hoist. */\n properties: readonly NodePropertiesEntry[];\n /** Routing-trait classifiers used to derive each node's kind — pass\n * the same list the canvas uses. Memoize or hoist. */\n routing: readonly NodeRoutingEntry[];\n /** Control overrides / app-defined kinds (PrefsForm-style). Keys are\n * leaf paths (`data.fill`, checked first) or leaf kinds (`color`).\n * A renderer returning `null` collapses its leaf (and the row, when\n * every leaf in it collapses). */\n renderers?: Record<string, PropertyRenderer>;\n /** Kind → header label. Default: capitalized kind name. */\n kindLabel?: (kind: string) => string;\n /** Rendered when the selection is empty. */\n emptyState?: ReactNode;\n className?: string;\n}\n\nconst defaultKindLabel = (kind: string): string =>\n kind.length === 0 ? kind : kind[0].toUpperCase() + kind.slice(1);\n\n/**\n * Pre-baked selection properties panel. Shows the selected nodes' kind\n * and the properties-trait schema for that kind; multi-selections show\n * the intersection of the kinds' schemas with per-field Mixed state.\n * Edits commit as one labeled `scene.batch` fan-out per gesture.\n */\nexport function SelectionPanel<TData, TLayer extends string, TPose>(\n props: SelectionPanelProps<TData, TLayer, TPose>,\n) {\n const {\n scene,\n selection,\n properties,\n routing,\n renderers,\n kindLabel = defaultKindLabel,\n emptyState = null,\n className,\n } = props;\n\n useSyncExternalStore(scene.subscribe, scene.getVersion, scene.getVersion);\n\n const nodes = selection.current\n .map((id) => scene.get(asNodeId(id)))\n .filter((n): n is NonNullable<typeof n> => n != null) as readonly AnyNode[];\n\n const kinds = nodes.map((n) => classifyKind(n, routing));\n const selectionKey = nodes.map((n) => n.id).join(',');\n const sections = effectiveSections(kinds, properties);\n\n if (nodes.length === 0) {\n return <div className={[s.root, className].filter(Boolean).join(' ')}>{emptyState}</div>;\n }\n\n /** Writes, into every selected node, what `next` derives from the value\n * that node holds at the leaf's path. */\n const commit = (leaf: PanelLeaf, next: (prev: unknown) => unknown): void => {\n const [head, ...rest] = leaf.path.split('.');\n if (rest.length === 0) return;\n const ids = selection.current.map(asNodeId);\n scene.batch(`Edit ${leaf.leaf.name}`, () => {\n for (const id of ids) {\n const node = scene.get(id);\n if (!node) continue;\n const value = next(nodeValueAt(node as AnyNode, leaf.path));\n // `setAtPath` spreads plain objects/arrays down the schema path;\n // consumer `pose`/`data` are assumed plain-object-shaped along\n // that path (a class instance's prototype would be dropped by\n // the spread) — the `as TPose`/`as TData` casts below rely on it.\n if (head === 'pose') {\n scene.setPose(id, setAtPath(node.pose as object, rest, value) as TPose);\n } else if (head === 'data') {\n scene.update(id, { data: setAtPath(node.data as object, rest, value) as TData });\n }\n }\n });\n };\n\n return (\n <div className={[s.root, className].filter(Boolean).join(' ')}>\n <header className={s.header}>\n {nodes.length === 1 ? (\n <span className={s.kind}>{kindLabel(kinds[0])}</span>\n ) : (\n <>\n <span className={s.kind}>{nodes.length} selected</span>\n <span className={s.breakdown}>{kindBreakdown(kinds)}</span>\n </>\n )}\n </header>\n {sections.map((section) => {\n // Render controls before emitting row chrome so a null-rendering\n // leaf (custom renderer opting out) collapses its cell — and the\n // whole row / section when nothing survives. PrefsForm precedent.\n const rows = section.rows\n .map((row) => {\n const controls = renderCells(\n row.leaves.map((panelLeaf) =>\n leafCell(\n panelLeaf,\n row.leaves.length > 1\n ? `${row.label} ${panelLeaf.leaf.name}`\n : panelLeaf.leaf.name,\n nodes,\n renderers,\n commit,\n selectionKey,\n ),\n ),\n renderers,\n );\n return { row, controls };\n })\n .filter(({ controls }) => controls.length > 0);\n if (rows.length === 0) return null;\n return (\n <section key={section.key} className={s.section}>\n {section.name !== '' && <h3 className={s.sectionTitle}>{section.name}</h3>}\n {rows.map(({ row, controls }) => (\n // A `block` leaf brings its own chrome — it spans the section\n // instead of sitting in a labeled row's control cell. Under a\n // headless section nothing else names it, so it heads itself;\n // an object leaf already renders its own heading.\n row.leaves.length === 1 && row.leaves[0].leaf.block ? (\n <div key={row.leaves[0].path}>\n {section.name === '' && row.leaves[0].leaf.kind !== 'object' && (\n <h4 className={s.sectionTitle} title={row.leaves[0].leaf.description}>\n {row.leaves[0].leaf.name}\n </h4>\n )}\n {controls[0].content}\n </div>\n ) : (\n <div key={row.leaves[0].path} className={s.row}>\n <span className={s.rowLabel} title={row.leaves[0].leaf.description}>\n {row.label}\n </span>\n <span className={s.rowControls}>\n {controls.map(({ key, content }) => (\n <Fragment key={key}>{content}</Fragment>\n ))}\n </span>\n </div>\n )\n ))}\n </section>\n );\n })}\n </div>\n );\n}\n\n\nfunction leafCell(\n panelLeaf: PanelLeaf,\n ariaLabel: string,\n nodes: readonly AnyNode[],\n renderers: Record<string, PropertyRenderer> | undefined,\n commit: (leaf: PanelLeaf, next: (prev: unknown) => unknown) => void,\n selectionKey: string,\n): LeafCell {\n const { path, leaf } = panelLeaf;\n const aggregated = aggregateValue(nodes, path);\n const mixed = aggregated === MIXED;\n const value = mixed ? undefined : aggregated;\n\n const ctx: PropertyRenderContext = {\n path,\n pref: leaf,\n value,\n mixed,\n unset: !mixed && aggregated === undefined,\n each: nodes.map((n) => nodeValueAt(n, path)),\n setValue: (v) => commit(panelLeaf, () => v),\n update: (fn) => commit(panelLeaf, fn),\n valueAt: (p) => {\n const at = aggregateValue(nodes, p);\n return at === MIXED ? { value: undefined, mixed: true } : { value: at, mixed: false };\n },\n selectionKey,\n };\n\n return {\n key: path,\n leaf,\n ctx,\n ariaLabel,\n render: () => {\n const custom = renderers?.[path] ?? renderers?.[leaf.kind];\n if (custom) return custom(ctx);\n return renderBuiltin(ctx, ariaLabel, renderers, selectionKey);\n },\n };\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectionPanel-B6HinSdB.js","names":["s","_Fragment","Fragment","renderCells","SelectionPanel_module_default","effectiveSections","setAtPath","aggregateValue","kindBreakdown","classifyKind","MIXED","renderBuiltin","Fragment$1","defaultKindLabel","kind","SelectionPanel","props","scene","nodes","selection","asNodeId","id","n","kinds","routing","selectionKey","sections","properties","className","emptyState","commit","head","rest","leaf","ids","node","value","next","nodeValueAt","kindLabel","Fragment","rows","section","row","leafCell","panelLeaf","renderers","controls","content","key","aggregated","path","mixed","ctx","v","fn","at","p","custom","ariaLabel"],"sources":["../../src/components/SelectionPanel/SelectionPanel.tsx"],"sourcesContent":["import { Fragment, useSyncExternalStore, type ReactNode } from 'react';\nimport {\n asNodeId,\n type NodePropertiesEntry,\n type NodeRoutingEntry,\n type Scene,\n type SelectionApi,\n} from '@weasel-js/core';\nimport {\n renderBuiltin,\n renderCells,\n type LeafCell,\n type PropertyRenderContext,\n type PropertyRenderer,\n} from './renderLeaf';\nimport {\n MIXED,\n aggregateValue,\n classifyKind,\n effectiveSections,\n kindBreakdown,\n nodeValueAt,\n setAtPath,\n type AnyNode,\n type PanelLeaf,\n} from './model';\nimport s from './SelectionPanel.module.css';\n\nexport type { PropertyRenderContext, PropertyRenderer } from './renderLeaf';\n\n/** Props for {@link SelectionPanel}. */\nexport interface SelectionPanelProps<TData, TLayer extends string, TPose> {\n /** The scene handle (`useScene`). The panel subscribes itself, so it\n * re-renders on scene mutations regardless of parent renders. */\n scene: Scene<TData, TLayer, TPose>;\n /** Selection handle (`useSelection`). Only `current` is read. */\n selection: Pick<SelectionApi, 'current'>;\n /** Properties-trait entries, e.g. core's `defaultNodeProperties` /\n * `inferredNodeProperties` (+ consumer extras). Memoize or hoist. */\n properties: readonly NodePropertiesEntry[];\n /** Routing-trait classifiers used to derive each node's kind — pass\n * the same list the canvas uses. Memoize or hoist. */\n routing: readonly NodeRoutingEntry[];\n /** Control overrides / app-defined kinds (PrefsForm-style). Keys are\n * leaf paths (`data.fill`, checked first) or leaf kinds (`color`).\n * A renderer returning `null` collapses its leaf (and the row, when\n * every leaf in it collapses). */\n renderers?: Record<string, PropertyRenderer>;\n /** Kind → header label. Default: capitalized kind name. */\n kindLabel?: (kind: string) => string;\n /** Rendered when the selection is empty. */\n emptyState?: ReactNode;\n className?: string;\n}\n\nconst defaultKindLabel = (kind: string): string =>\n kind.length === 0 ? kind : kind[0].toUpperCase() + kind.slice(1);\n\n/**\n * Pre-baked selection properties panel. Shows the selected nodes' kind\n * and the properties-trait schema for that kind; multi-selections show\n * the intersection of the kinds' schemas with per-field Mixed state.\n * Edits commit as one labeled `scene.batch` fan-out per gesture.\n */\nexport function SelectionPanel<TData, TLayer extends string, TPose>(\n props: SelectionPanelProps<TData, TLayer, TPose>,\n) {\n const {\n scene,\n selection,\n properties,\n routing,\n renderers,\n kindLabel = defaultKindLabel,\n emptyState = null,\n className,\n } = props;\n\n useSyncExternalStore(scene.subscribe, scene.getVersion, scene.getVersion);\n\n const nodes = selection.current\n .map((id) => scene.get(asNodeId(id)))\n .filter((n): n is NonNullable<typeof n> => n != null) as readonly AnyNode[];\n\n const kinds = nodes.map((n) => classifyKind(n, routing));\n const selectionKey = nodes.map((n) => n.id).join(',');\n const sections = effectiveSections(kinds, properties);\n\n if (nodes.length === 0) {\n return <div className={[s.root, className].filter(Boolean).join(' ')}>{emptyState}</div>;\n }\n\n /** Writes, into every selected node, what `next` derives from the value\n * that node holds at the leaf's path. */\n const commit = (leaf: PanelLeaf, next: (prev: unknown) => unknown): void => {\n const [head, ...rest] = leaf.path.split('.');\n if (rest.length === 0) return;\n const ids = selection.current.map(asNodeId);\n scene.batch(`Edit ${leaf.leaf.name}`, () => {\n for (const id of ids) {\n const node = scene.get(id);\n if (!node) continue;\n const value = next(nodeValueAt(node as AnyNode, leaf.path));\n // `setAtPath` spreads plain objects/arrays down the schema path;\n // consumer `pose`/`data` are assumed plain-object-shaped along\n // that path (a class instance's prototype would be dropped by\n // the spread) — the `as TPose`/`as TData` casts below rely on it.\n if (head === 'pose') {\n scene.setPose(id, setAtPath(node.pose as object, rest, value) as TPose);\n } else if (head === 'data') {\n scene.update(id, { data: setAtPath(node.data as object, rest, value) as TData });\n }\n }\n });\n };\n\n return (\n <div className={[s.root, className].filter(Boolean).join(' ')}>\n <header className={s.header}>\n {nodes.length === 1 ? (\n <span className={s.kind}>{kindLabel(kinds[0])}</span>\n ) : (\n <>\n <span className={s.kind}>{nodes.length} selected</span>\n <span className={s.breakdown}>{kindBreakdown(kinds)}</span>\n </>\n )}\n </header>\n {sections.map((section) => {\n // Render controls before emitting row chrome so a null-rendering\n // leaf (custom renderer opting out) collapses its cell — and the\n // whole row / section when nothing survives. PrefsForm precedent.\n const rows = section.rows\n .map((row) => {\n const controls = renderCells(\n row.leaves.map((panelLeaf) =>\n leafCell(\n panelLeaf,\n row.leaves.length > 1\n ? `${row.label} ${panelLeaf.leaf.name}`\n : panelLeaf.leaf.name,\n nodes,\n renderers,\n commit,\n selectionKey,\n ),\n ),\n renderers,\n );\n return { row, controls };\n })\n .filter(({ controls }) => controls.length > 0);\n if (rows.length === 0) return null;\n return (\n <section key={section.key} className={s.section}>\n {section.name !== '' && <h3 className={s.sectionTitle}>{section.name}</h3>}\n {rows.map(({ row, controls }) => (\n // A `block` leaf brings its own chrome — it spans the section\n // instead of sitting in a labeled row's control cell. Under a\n // headless section nothing else names it, so it heads itself;\n // an object leaf already renders its own heading.\n row.leaves.length === 1 && row.leaves[0].leaf.block ? (\n <div key={row.leaves[0].path}>\n {section.name === '' && row.leaves[0].leaf.kind !== 'object' && (\n <h4 className={s.sectionTitle} title={row.leaves[0].leaf.description}>\n {row.leaves[0].leaf.name}\n </h4>\n )}\n {controls[0].content}\n </div>\n ) : (\n <div key={row.leaves[0].path} className={s.row}>\n <span className={s.rowLabel} title={row.leaves[0].leaf.description}>\n {row.label}\n </span>\n <span className={s.rowControls}>\n {controls.map(({ key, content }) => (\n <Fragment key={key}>{content}</Fragment>\n ))}\n </span>\n </div>\n )\n ))}\n </section>\n );\n })}\n </div>\n );\n}\n\n\nfunction leafCell(\n panelLeaf: PanelLeaf,\n ariaLabel: string,\n nodes: readonly AnyNode[],\n renderers: Record<string, PropertyRenderer> | undefined,\n commit: (leaf: PanelLeaf, next: (prev: unknown) => unknown) => void,\n selectionKey: string,\n): LeafCell {\n const { path, leaf } = panelLeaf;\n const aggregated = aggregateValue(nodes, path);\n const mixed = aggregated === MIXED;\n const value = mixed ? undefined : aggregated;\n\n const ctx: PropertyRenderContext = {\n path,\n pref: leaf,\n value,\n mixed,\n unset: !mixed && aggregated === undefined,\n each: nodes.map((n) => nodeValueAt(n, path)),\n setValue: (v) => commit(panelLeaf, () => v),\n update: (fn) => commit(panelLeaf, fn),\n valueAt: (p) => {\n const at = aggregateValue(nodes, p);\n return at === MIXED ? { value: undefined, mixed: true } : { value: at, mixed: false };\n },\n selectionKey,\n };\n\n return {\n key: path,\n leaf,\n ctx,\n ariaLabel,\n render: () => {\n const custom = renderers?.[path] ?? renderers?.[leaf.kind];\n if (custom) return custom(ctx);\n return renderBuiltin(ctx, ariaLabel, renderers, selectionKey);\n },\n };\n}\n\n"],"mappings":";;;;;AAuDA,IAAMa,KAAoB,MACxBC,EAAK,WAAW,IAAIA,IAAOA,EAAK,EAAE,CAAC,YAAY,IAAIA,EAAK,MAAM,CAAC;AAQjE,SAAgBC,EACd,GACA;CACA,IAAM,EACJ,UACA,cACA,eACA,YACA,cACA,eAAYF,GACZ,gBAAa,MACb,iBACEG;CAEJ,EAAqBC,EAAM,WAAWA,EAAM,YAAYA,EAAM,UAAU;CAExE,IAAMC,IAAQC,EAAU,QACrB,KAAK,MAAOF,EAAM,IAAIG,EAASC,CAAE,CAAC,CAAC,CAAC,CACpC,QAAQ,MAAkCC,KAAK,IAAI,GAEhDC,IAAQL,EAAM,KAAK,MAAMT,EAAaa,GAAGE,CAAO,CAAC,GACjDC,IAAeP,EAAM,KAAK,MAAMI,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,GAC9CI,IAAWrB,EAAkBkB,GAAOI,CAAU;CAEpD,IAAIT,EAAM,WAAW,GACnB,OAAO,kBAAC,OAAD;EAAK,WAAW,CAAClB,EAAE,MAAM4B,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAAI,UAAAC;CAAgB,CAAA;CAKzF,IAAMC,KAAU,GAAiB,MAA2C;EAC1E,IAAM,CAACC,GAAM,GAAGC,KAAQC,EAAK,KAAK,MAAM,GAAG;EAC3C,IAAID,EAAK,WAAW,GAAG;EACvB,IAAME,IAAMf,EAAU,QAAQ,IAAIC,CAAQ;EAC1C,EAAM,MAAM,QAAQa,EAAK,KAAK,cAAc;GAC1C,KAAK,IAAMZ,KAAMa,GAAK;IACpB,IAAMC,IAAOlB,EAAM,IAAII,CAAE;IACzB,IAAI,CAACc,GAAM;IACX,IAAMC,IAAQC,EAAKC,EAAYH,GAAiBF,EAAK,IAAI,CAAC;IAK1D,AAAIF,MAAS,SACXd,EAAM,QAAQI,GAAIf,EAAU6B,EAAK,MAAgBH,GAAMI,CAAK,CAAU,IAC7DL,MAAS,UAClBd,EAAM,OAAOI,GAAI,EAAE,MAAMf,EAAU6B,EAAK,MAAgBH,GAAMI,CAAK,EAAW,CAAC;GAEnF;EACF,CAAC;CACH;CAEA,OACE,kBAAC,OAAD;EAAK,WAAW,CAACpC,EAAE,MAAM4B,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAA5D,UAAA,CACE,kBAAC,UAAD;GAAQ,WAAW5B,EAAE;GAClB,UAAAkB,EAAM,WAAW,IAChB,kBAAC,QAAD;IAAM,WAAWlB,EAAE;IAAO,UAAAuC,EAAUhB,EAAM,EAAE;GAAQ,CAAA,IAEpD,kBAAAtB,GAAA,EAAA,UAAA,CACE,kBAAC,QAAD;IAAM,WAAWD,EAAE;IAAnB,UAAA,CAA0BkB,EAAM,QAAO,WAAe;GACtD,CAAA,GAAA,kBAAC,QAAD;IAAM,WAAWlB,EAAE;IAAY,UAAAQ,EAAce,CAAK;GAAQ,CAAA,CAC1D,EAAA,CAAA;EAEE,CAAA,GACPG,EAAS,KAAK,MAAY;GAIzB,IAAMe,IAAOC,EAAQ,KAClB,KAAK,OAgBG;IAAE;IAAK,UAfGvC,EACfwC,EAAI,OAAO,KAAK,MACdC,EACEC,GACAF,EAAI,OAAO,SAAS,IAChB,GAAGA,EAAI,MAAM,GAAGE,EAAU,KAAK,SAC/BA,EAAU,KAAK,MACnB3B,GACA4B,GACAhB,GACAL,CACF,CACF,GACAqB,CAEY;GAAS,EACxB,CAAC,CACD,QAAQ,EAAE,kBAAeC,EAAS,SAAS,CAAC;GAE/C,OADIN,EAAK,WAAW,IAAU,OAE5B,kBAAC,WAAD;IAA2B,WAAWzC,EAAE;IAAxC,UAAA,CACG0C,EAAQ,SAAS,MAAM,kBAAC,MAAD;KAAI,WAAW1C,EAAE;KAAe,UAAA0C,EAAQ;IAAS,CAAA,GACxED,EAAK,KAAK,EAAE,QAAK,kBAKhBE,EAAI,OAAO,WAAW,KAAKA,EAAI,OAAO,EAAE,CAAC,KAAK,QAC5C,kBAAC,OAAD,EAAA,UAAA,CACGD,EAAQ,SAAS,MAAMC,EAAI,OAAO,EAAE,CAAC,KAAK,SAAS,YAClD,kBAAC,MAAD;KAAI,WAAW3C,EAAE;KAAc,OAAO2C,EAAI,OAAO,EAAE,CAAC,KAAK;KACtD,UAAAA,EAAI,OAAO,EAAE,CAAC,KAAK;IAClB,CAAA,GAELI,EAAS,EAAE,CAAC,OACV,EAAA,GAPKJ,EAAI,OAAO,EAAE,CAAC,IAOnB,IAEP,kBAAC,OAAD;KAA8B,WAAW3C,EAAE;KAA3C,UAAA,CACE,kBAAC,QAAD;MAAM,WAAWA,EAAE;MAAU,OAAO2C,EAAI,OAAO,EAAE,CAAC,KAAK;MACpD,UAAAA,EAAI;KACD,CAAA,GACN,kBAAC,QAAD;MAAM,WAAW3C,EAAE;MAChB,UAAA+C,EAAS,KAAK,EAAE,QAAK,iBACpB,kBAAC7C,GAAD,EAAA,UAAqB8C,EAAkB,GAAxBC,CAAwB,CACxC;KACG,CAAA,CACH;IATK,GAAAN,EAAI,OAAO,EAAE,CAAC,IASnB,CAEN,CACM;GA7BK,GAAAD,EAAQ,GA6Bb;EAEb,CAAC,CACE;;AAET;AAGA,SAASE,EACP,GACA,GACA,GACA,GACA,GACA,GACU;CACV,IAAM,EAAE,SAAM,YAASC,GACjBK,IAAa3C,EAAeW,GAAOiC,CAAI,GACvCC,IAAQF,MAAexC,GAGvB2C,IAA6B;EACjC;EACA,MAAMpB;EACN,OALYmB,IAAQ,KAAA,IAAYF;EAMhC;EACA,OAAO,CAACE,KAASF,MAAe,KAAA;EAChC,MAAMhC,EAAM,KAAK,MAAMoB,EAAYhB,GAAG6B,CAAI,CAAC;EAC3C,WAAW,MAAMrB,EAAOe,SAAiBS,CAAC;EAC1C,SAAS,MAAOxB,EAAOe,GAAWU,CAAE;EACpC,UAAU,MAAM;GACd,IAAMC,IAAKjD,EAAeW,GAAOuC,CAAC;GAClC,OAAOD,MAAO9C,IAAQ;IAAE,OAAO,KAAA;IAAW,OAAO;GAAK,IAAI;IAAE,OAAO8C;IAAI,OAAO;GAAM;EACtF;EACA;CACF;CAEA,OAAO;EACL,KAAKL;EACL;EACA;EACA;EACA,cAAc;GACZ,IAAMO,IAASZ,IAAYK,MAASL,IAAYb,EAAK;GAErD,OADIyB,IAAeA,EAAOL,CAAG,IACtB1C,EAAc0C,GAAKM,GAAWb,GAAWrB,CAAY;EAC9D;CACF;AACF"}
@@ -1,5 +1,5 @@
1
- import { t as e } from "./CloseButton-BmNmRVtb.js";
2
- import { n as t } from "./Disclosure-Ch2KxYuB.js";
1
+ import { t as e } from "./CloseButton-CKarkTT9.js";
2
+ import { n as t } from "./Disclosure-CpWt87nO.js";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  var i = {
5
5
  panel: "_panel_1sr1g_1",
@@ -50,4 +50,4 @@ function a(a) {
50
50
  //#endregion
51
51
  export { a as t };
52
52
 
53
- //# sourceMappingURL=SidebarPanel-AXQ0jRDx.js.map
53
+ //# sourceMappingURL=SidebarPanel-P3a8tIIj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarPanel-AXQ0jRDx.js","names":["s","CloseButton","DisclosureMark","SidebarPanel_module_default","SidebarPanel","props","cls","collapsed","className","headerInteractive","onToggleCollapse","title","onHide"],"sources":["../../src/components/SidebarPanel/SidebarPanel.module.css","../../src/components/SidebarPanel/SidebarPanel.tsx"],"sourcesContent":[".panel {\n /* Vertical only: the body spans the panel's full width, and the title row's\n own controls carry the horizontal inset. */\n padding: var(--wzl-space-4) 0;\n background: var(--wzl-surface);\n color: var(--wzl-fg);\n}\n\n.title {\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-bold);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--wzl-fg-muted);\n}\n\n.titleRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--wzl-space-2);\n padding: 0;\n}\n\n/* The title's inset, shared by the static title and the collapse button so the\n two line up. */\n.titleBox {\n padding: var(--wzl-space-2) var(--wzl-space-4);\n}\n\n.titleButton {\n display: inline-flex;\n align-items: center;\n gap: var(--wzl-space-2);\n flex: 1 1 auto;\n background: transparent;\n border: 0;\n cursor: pointer;\n color: inherit;\n font: inherit;\n text-align: left;\n}\n.titleButton:hover {\n color: var(--wzl-fg);\n}\n\n.hideButton {\n margin-inline-end: var(--wzl-space-2);\n}\n\n.panel.collapsed {\n padding-bottom: var(--wzl-space-2);\n}\n\n.body {\n padding: 0;\n}\n","import type { ReactNode } from 'react';\nimport { CloseButton } from '../CloseButton';\nimport { DisclosureMark } from '../Disclosure';\nimport s from './SidebarPanel.module.css';\n\n/** Props for {@link SidebarPanel}. */\nexport interface SidebarPanelProps {\n /** Title rendered in the panel's header row. */\n title?: ReactNode;\n /**\n * Collapsed state — when true, only the header paints; the body is\n * omitted. Caller owns the state (typically via prefs) and flips it\n * back via `onToggleCollapse`.\n */\n collapsed?: boolean;\n /**\n * Click handler for the title row. When provided, the header renders\n * as a button (fold mark + label) and acts as the collapse toggle.\n * When omitted, the title is static text and the panel can't collapse.\n */\n onToggleCollapse?(): void;\n /**\n * Optional close handler — when provided, the header gains a close\n * button on the trailing edge. Caller flips its \"hidden\" state and\n * conditionally unmounts the panel from the parent.\n */\n onHide?(): void;\n children?: ReactNode;\n className?: string;\n}\n\n/**\n * Generic collapsible panel section for sidebars. Pure presentation —\n * caller manages `collapsed`/`hidden` state externally (the pattern is\n * to drive it from app prefs so the Preferences modal and inline\n * fold marks toggle the same map).\n *\n * Pair with `<Sidebar>` for the docked column layout.\n */\nexport function SidebarPanel(props: SidebarPanelProps) {\n const { title, collapsed, onToggleCollapse, onHide, children, className } = props;\n const cls = [s.panel, collapsed && s.collapsed, className].filter(Boolean).join(' ');\n const headerInteractive = onToggleCollapse !== undefined;\n return (\n <div className={cls}>\n {title !== undefined && (\n <div className={s.titleRow}>\n {headerInteractive ? (\n <button\n type=\"button\"\n className={`${s.titleButton} ${s.titleBox}`}\n onClick={onToggleCollapse}\n aria-expanded={!collapsed}\n >\n <DisclosureMark open={!collapsed} />\n <span className={s.title}>{title}</span>\n </button>\n ) : (\n <span className={`${s.title} ${s.titleBox}`}>{title}</span>\n )}\n {onHide !== undefined && (\n <CloseButton\n className={s.hideButton}\n ariaLabel=\"Hide panel\"\n tooltip=\"Hide panel\"\n onClick={onHide}\n />\n )}\n </div>\n )}\n {!collapsed && <div className={s.body}>{children}</div>}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;ACuCA,SAAgBI,EAAa,GAA0B;CACrD,IAAM,EAAE,UAAO,cAAW,qBAAkB,WAAQ,aAAU,iBAAcC,GACtEC,IAAM;EAACN,EAAE;EAAOO,KAAaP,EAAE;EAAWQ;CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAC7EC,IAAoBC,MAAqB,KAAA;CAC/C,OACE,kBAAC,OAAD;EAAK,WAAWJ;EAAhB,UAAA,CACGK,MAAU,KAAA,KACT,kBAAC,OAAD;GAAK,WAAWX,EAAE;GAAlB,UAAA,CACGS,IACC,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,GAAGT,EAAE,YAAY,GAAGA,EAAE;IACjC,SAASU;IACT,iBAAe,CAACH;IAJlB,UAAA,CAME,kBAACL,GAAD,EAAgB,MAAM,CAACK,EAAY,CAAA,GACnC,kBAAC,QAAD;KAAM,WAAWP,EAAE;KAAQ,UAAAW;IAAY,CAAA,CACjC;GAER,CAAA,IAAA,kBAAC,QAAD;IAAM,WAAW,GAAGX,EAAE,MAAM,GAAGA,EAAE;IAAa,UAAAW;GAAY,CAAA,GAE3DC,MAAW,KAAA,KACV,kBAACX,GAAD;IACE,WAAWD,EAAE;IACb,WAAU;IACV,SAAQ;IACR,SAASY;GACV,CAAA,CAEA;EAEN,CAAA,GAAA,CAACL,KAAa,kBAAC,OAAD;GAAK,WAAWP,EAAE;GAAO;EAAc,CAAA,CACnD;;AAET"}
1
+ {"version":3,"file":"SidebarPanel-P3a8tIIj.js","names":["s","CloseButton","DisclosureMark","SidebarPanel_module_default","SidebarPanel","props","cls","collapsed","className","headerInteractive","onToggleCollapse","title","onHide"],"sources":["../../src/components/SidebarPanel/SidebarPanel.module.css","../../src/components/SidebarPanel/SidebarPanel.tsx"],"sourcesContent":[".panel {\n /* Vertical only: the body spans the panel's full width, and the title row's\n own controls carry the horizontal inset. */\n padding: var(--wzl-space-4) 0;\n background: var(--wzl-surface);\n color: var(--wzl-fg);\n}\n\n.title {\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-bold);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--wzl-fg-muted);\n}\n\n.titleRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--wzl-space-2);\n padding: 0;\n}\n\n/* The title's inset, shared by the static title and the collapse button so the\n two line up. */\n.titleBox {\n padding: var(--wzl-space-2) var(--wzl-space-4);\n}\n\n.titleButton {\n display: inline-flex;\n align-items: center;\n gap: var(--wzl-space-2);\n flex: 1 1 auto;\n background: transparent;\n border: 0;\n cursor: pointer;\n color: inherit;\n font: inherit;\n text-align: left;\n}\n.titleButton:hover {\n color: var(--wzl-fg);\n}\n\n.hideButton {\n margin-inline-end: var(--wzl-space-2);\n}\n\n.panel.collapsed {\n padding-bottom: var(--wzl-space-2);\n}\n\n.body {\n padding: 0;\n}\n","import type { ReactNode } from 'react';\nimport { CloseButton } from '../CloseButton';\nimport { DisclosureMark } from '../Disclosure';\nimport s from './SidebarPanel.module.css';\n\n/** Props for {@link SidebarPanel}. */\nexport interface SidebarPanelProps {\n /** Title rendered in the panel's header row. */\n title?: ReactNode;\n /**\n * Collapsed state — when true, only the header paints; the body is\n * omitted. Caller owns the state (typically via prefs) and flips it\n * back via `onToggleCollapse`.\n */\n collapsed?: boolean;\n /**\n * Click handler for the title row. When provided, the header renders\n * as a button (fold mark + label) and acts as the collapse toggle.\n * When omitted, the title is static text and the panel can't collapse.\n */\n onToggleCollapse?(): void;\n /**\n * Optional close handler — when provided, the header gains a close\n * button on the trailing edge. Caller flips its \"hidden\" state and\n * conditionally unmounts the panel from the parent.\n */\n onHide?(): void;\n children?: ReactNode;\n className?: string;\n}\n\n/**\n * Generic collapsible panel section for sidebars. Pure presentation —\n * caller manages `collapsed`/`hidden` state externally (the pattern is\n * to drive it from app prefs so the Preferences modal and inline\n * fold marks toggle the same map).\n *\n * Pair with `<Sidebar>` for the docked column layout.\n */\nexport function SidebarPanel(props: SidebarPanelProps) {\n const { title, collapsed, onToggleCollapse, onHide, children, className } = props;\n const cls = [s.panel, collapsed && s.collapsed, className].filter(Boolean).join(' ');\n const headerInteractive = onToggleCollapse !== undefined;\n return (\n <div className={cls}>\n {title !== undefined && (\n <div className={s.titleRow}>\n {headerInteractive ? (\n <button\n type=\"button\"\n className={`${s.titleButton} ${s.titleBox}`}\n onClick={onToggleCollapse}\n aria-expanded={!collapsed}\n >\n <DisclosureMark open={!collapsed} />\n <span className={s.title}>{title}</span>\n </button>\n ) : (\n <span className={`${s.title} ${s.titleBox}`}>{title}</span>\n )}\n {onHide !== undefined && (\n <CloseButton\n className={s.hideButton}\n ariaLabel=\"Hide panel\"\n tooltip=\"Hide panel\"\n onClick={onHide}\n />\n )}\n </div>\n )}\n {!collapsed && <div className={s.body}>{children}</div>}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;ACuCA,SAAgBI,EAAa,GAA0B;CACrD,IAAM,EAAE,UAAO,cAAW,qBAAkB,WAAQ,aAAU,iBAAcC,GACtEC,IAAM;EAACN,EAAE;EAAOO,KAAaP,EAAE;EAAWQ;CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAC7EC,IAAoBC,MAAqB,KAAA;CAC/C,OACE,kBAAC,OAAD;EAAK,WAAWJ;EAAhB,UAAA,CACGK,MAAU,KAAA,KACT,kBAAC,OAAD;GAAK,WAAWX,EAAE;GAAlB,UAAA,CACGS,IACC,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,GAAGT,EAAE,YAAY,GAAGA,EAAE;IACjC,SAASU;IACT,iBAAe,CAACH;IAJlB,UAAA,CAME,kBAACL,GAAD,EAAgB,MAAM,CAACK,EAAY,CAAA,GACnC,kBAAC,QAAD;KAAM,WAAWP,EAAE;KAAQ,UAAAW;IAAY,CAAA,CACjC;GAER,CAAA,IAAA,kBAAC,QAAD;IAAM,WAAW,GAAGX,EAAE,MAAM,GAAGA,EAAE;IAAa,UAAAW;GAAY,CAAA,GAE3DC,MAAW,KAAA,KACV,kBAACX,GAAD;IACE,WAAWD,EAAE;IACb,WAAU;IACV,SAAQ;IACR,SAASY;GACV,CAAA,CAEA;EAEN,CAAA,GAAA,CAACL,KAAa,kBAAC,OAAD;GAAK,WAAWP,EAAE;GAAO;EAAc,CAAA,CACnD;;AAET"}
@@ -0,0 +1,439 @@
1
+ import { openPointerSession as e } from "@weasel-js/core";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { useCallback as r, useEffect as i, useMemo as a, useRef as o } from "react";
4
+ import { decimal as s, qty as c } from "@weasel-js/quantity";
5
+ var l = {
6
+ root: "_root_17uzd_1",
7
+ row: "_row_17uzd_12",
8
+ track: "_track_17uzd_18",
9
+ thumb: "_thumb_17uzd_35 _numeric_zns9n_4",
10
+ slim: "_slim_17uzd_46",
11
+ notched: "_notched_17uzd_47",
12
+ overhang: "_overhang_17uzd_51",
13
+ rail: "_rail_17uzd_55",
14
+ trackInner: "_trackInner_17uzd_29",
15
+ thumbActive: "_thumbActive_17uzd_121",
16
+ readoutsBelow: "_readoutsBelow_17uzd_129",
17
+ readoutBelow: "_readoutBelow_17uzd_136 _numeric_zns9n_4",
18
+ readoutInline: "_readoutInline_17uzd_147 _numeric_zns9n_4",
19
+ ticks: "_ticks_17uzd_177",
20
+ tick: "_tick_17uzd_177",
21
+ withStopLabels: "_withStopLabels_17uzd_198",
22
+ stopLabels: "_stopLabels_17uzd_202",
23
+ stopLabel: "_stopLabel_17uzd_202 _numeric_zns9n_4"
24
+ };
25
+ //#endregion
26
+ //#region src/endless.ts
27
+ function u(e, t) {
28
+ return e === "both" || e === (t > 0 ? "max" : "min");
29
+ }
30
+ function d(e, t) {
31
+ return t === Infinity && u(e, 1) || t === -Infinity && u(e, -1);
32
+ }
33
+ //#endregion
34
+ //#region src/components/Slider/Slider.tsx
35
+ function f(e, t, n) {
36
+ return t === void 0 || t <= 0 ? e : Math.round((e - n) / t) * t + n;
37
+ }
38
+ function p(e, t, n) {
39
+ return Math.max(t, Math.min(n, e));
40
+ }
41
+ var m = 8, h = { capture: !1 };
42
+ function g(e, t, n) {
43
+ if (!e || e.length === 0) return [];
44
+ let r = /* @__PURE__ */ new Map();
45
+ for (let i of e) {
46
+ let e = typeof i == "number" ? { value: i } : i;
47
+ if (e.value < t || e.value > n) continue;
48
+ let a = r.get(e.value);
49
+ (!a || a.label === void 0 && e.label !== void 0) && r.set(e.value, e);
50
+ }
51
+ return [...r.values()].sort((e, t) => e.value - t.value);
52
+ }
53
+ function _(e, t, n, r) {
54
+ let i = r(e), a = e, o = n;
55
+ for (let e of t) {
56
+ let t = Math.abs(r(e) - i);
57
+ t <= o && (a = e, o = t);
58
+ }
59
+ return a;
60
+ }
61
+ function v(e, t, n, r) {
62
+ if (n > 0) {
63
+ let n = e.findIndex((e) => e > t);
64
+ return n === -1 ? e[e.length - 1] : e[Math.min(e.length - 1, n + r - 1)];
65
+ }
66
+ let i = -1;
67
+ for (let n = e.length - 1; n >= 0; n--) if (e[n] < t) {
68
+ i = n;
69
+ break;
70
+ }
71
+ return i === -1 ? e[0] : e[Math.max(0, i - (r - 1))];
72
+ }
73
+ function y(e, t, n) {
74
+ return e !== void 0 && e > 0 ? e : (n - t) / 100;
75
+ }
76
+ function b(e, t, n, r, i, a) {
77
+ let o = a !== void 0 && a > 0 ? a : (i - r) / 1e3;
78
+ return p(e, n > 0 ? t[n - 1].value + o : r, n < t.length - 1 ? t[n + 1].value - o : i);
79
+ }
80
+ function x(e, t, n, r) {
81
+ if (!e.bounds) return [n, r];
82
+ let i = typeof e.bounds == "function" ? e.bounds(t) : e.bounds;
83
+ return [i[0], i[1]];
84
+ }
85
+ function ee(e) {
86
+ return `calc(var(--rp-thumb-inset) + ${e} * (100% - 2 * var(--rp-thumb-inset)))`;
87
+ }
88
+ var S = s({ places: 3 });
89
+ function C(e) {
90
+ let t = a(() => g(e.stops, e.min, e.max), [
91
+ e.stops,
92
+ e.min,
93
+ e.max
94
+ ]), n = a(() => t.map((e) => e.value), [t]), r = e.spacing === "even" && n.length >= 2;
95
+ return {
96
+ stopList: t,
97
+ stops: n,
98
+ even: r,
99
+ min: r ? n[0] : e.min,
100
+ max: r ? n[n.length - 1] : e.max
101
+ };
102
+ }
103
+ function w(e) {
104
+ let { endless: n, display: r, renderReadout: i, onInput: o, onChange: s } = e, { min: l, max: d } = C(e), f = a(() => e.thumbs.map((e) => e.value === Infinity ? {
105
+ ...e,
106
+ value: d
107
+ } : e.value === -Infinity ? {
108
+ ...e,
109
+ value: l
110
+ } : e), [
111
+ e.thumbs,
112
+ l,
113
+ d
114
+ ]);
115
+ if (n === void 0) return /* @__PURE__ */ t(T, { ...e });
116
+ let p = (e) => u(n, 1) && e >= d ? Infinity : u(n, -1) && e <= l ? -Infinity : e, m = (e) => e.map((e) => ({
117
+ ...e,
118
+ value: p(e.value)
119
+ }));
120
+ return /* @__PURE__ */ t(T, {
121
+ ...e,
122
+ thumbs: f,
123
+ onInput: (e) => o(m(e)),
124
+ onChange: s && ((e) => s(m(e))),
125
+ renderReadout: (e, t) => {
126
+ let n = {
127
+ ...e,
128
+ value: p(e.value)
129
+ };
130
+ return i ? i(n, t) : c(n.value, r ?? S).text;
131
+ },
132
+ spokenAt: (e) => Number.isFinite(p(e)) ? void 0 : c(p(e), r ?? S).spoken
133
+ });
134
+ }
135
+ function T(a) {
136
+ let { thumbs: s, onInput: u, onChange: d, step: g, constraint: w, trackHeight: T, density: te, ariaLabel: ne, className: E } = a, { stopList: D, stops: O, even: k, min: A, max: j } = C(a), M = a.snap === "strict" && O.length > 0, N = o(null), P = o(null), F = o(null), I = o(null);
137
+ i(() => () => {
138
+ I.current?.cancel();
139
+ }, []);
140
+ let L = r((e) => {
141
+ if (j === A) return 0;
142
+ if (!k) return p((e - A) / (j - A), 0, 1);
143
+ let t = O.length - 1, n = p(e, A, j), r = 0;
144
+ for (; r < t - 1 && n > O[r + 1];) r++;
145
+ return (r + (n - O[r]) / (O[r + 1] - O[r])) / t;
146
+ }, [
147
+ A,
148
+ j,
149
+ k,
150
+ O
151
+ ]), R = r((e) => {
152
+ let t = p(e, 0, 1);
153
+ if (!k) return A + t * (j - A);
154
+ let n = O.length - 1, r = Math.min(n - 1, Math.floor(t * n));
155
+ return O[r] + (t * n - r) * (O[r + 1] - O[r]);
156
+ }, [
157
+ A,
158
+ j,
159
+ k,
160
+ O
161
+ ]), z = r((e, t) => {
162
+ let n = R(e);
163
+ if (M) return _(n, O, Infinity, L);
164
+ let r = p(f(n, g, A), A, j);
165
+ return O.length > 0 ? _(r, O, m / t, L) : r;
166
+ }, [
167
+ R,
168
+ L,
169
+ M,
170
+ O,
171
+ g,
172
+ A,
173
+ j
174
+ ]), B = r((t, n, r, i) => {
175
+ I.current?.cancel();
176
+ let o = (i ?? s).map((e) => ({ ...e }));
177
+ F.current = o;
178
+ let c = !1;
179
+ I.current = e(t, n, {
180
+ onMove: (e) => {
181
+ let t = P.current, n = F.current;
182
+ if (!t || !n) return;
183
+ let i = t.getBoundingClientRect(), o = z((e.clientX - i.left) / i.width, i.width), [s, l] = x(n[r], {
184
+ thumbs: n,
185
+ index: r
186
+ }, A, j);
187
+ o = p(o, s, l), w === "ordered" && (o = b(o, n, r, A, j, g));
188
+ let d = i.height;
189
+ a.onRemoveThumb && (c = e.clientY < i.top - d || e.clientY > i.bottom + d), n[r] = {
190
+ ...n[r],
191
+ value: o
192
+ }, u(n.map((e) => ({ ...e })));
193
+ },
194
+ onEnd: () => {
195
+ I.current = null;
196
+ let e = F.current;
197
+ if (F.current = null, e) {
198
+ if (c && a.onRemoveThumb && a.onRemoveThumb(r)) {
199
+ let t = e.filter((e, t) => t !== r).map((e) => ({ ...e }));
200
+ u(t), d?.(t);
201
+ return;
202
+ }
203
+ d?.(e.map((e) => ({ ...e })));
204
+ }
205
+ },
206
+ onCancel: () => {
207
+ I.current = null, F.current = null;
208
+ }
209
+ }, h);
210
+ }, [
211
+ s,
212
+ u,
213
+ d,
214
+ z,
215
+ A,
216
+ j,
217
+ g,
218
+ w,
219
+ a
220
+ ]), V = r((t, n, r) => {
221
+ I.current?.cancel();
222
+ let i = s.map((e) => ({ ...e })), a = i.map((e) => e.value);
223
+ F.current = i, I.current = e(t, n, {
224
+ onMove: (e) => {
225
+ let t = P.current, n = F.current;
226
+ if (!t || !n) return;
227
+ let i = t.getBoundingClientRect(), o = (e.clientX - r) / i.width;
228
+ if (k) {
229
+ let e = a.map(L), t = p(o, -Math.min(...e), 1 - Math.max(...e));
230
+ for (let r = 0; r < n.length; r++) n[r] = {
231
+ ...n[r],
232
+ value: R(e[r] + t)
233
+ };
234
+ u(n.map((e) => ({ ...e })));
235
+ return;
236
+ }
237
+ let s = o * (j - A);
238
+ s = f(s, g, 0);
239
+ let c = -Infinity, l = Infinity;
240
+ for (let e = 0; e < a.length; e++) c = Math.max(c, A - a[e]), l = Math.min(l, j - a[e]);
241
+ s = p(s, c, l);
242
+ for (let e = 0; e < n.length; e++) n[e] = {
243
+ ...n[e],
244
+ value: p(a[e] + s, A, j)
245
+ };
246
+ u(n.map((e) => ({ ...e })));
247
+ },
248
+ onEnd: () => {
249
+ I.current = null;
250
+ let e = F.current;
251
+ F.current = null, e && d?.(e.map((e) => ({ ...e })));
252
+ },
253
+ onCancel: () => {
254
+ I.current = null, F.current = null;
255
+ }
256
+ }, h);
257
+ }, [
258
+ s,
259
+ u,
260
+ d,
261
+ A,
262
+ j,
263
+ g,
264
+ k,
265
+ L,
266
+ R
267
+ ]), H = (e) => (t) => {
268
+ if (typeof t.button == "number" && t.button > 0) return;
269
+ t.currentTarget.focus?.(), t.preventDefault(), t.stopPropagation();
270
+ let n = t.currentTarget;
271
+ t.shiftKey && a.allowShiftAll ? V(n, t, t.clientX) : B(n, t, e);
272
+ }, U = (e) => (t) => {
273
+ if (!a.onRemoveThumb || (t.preventDefault(), !a.onRemoveThumb(e))) return;
274
+ let n = s.filter((t, n) => n !== e).map((e) => ({ ...e }));
275
+ u(n), d?.(n);
276
+ }, W = (e) => {
277
+ if (typeof e.button == "number" && e.button > 0) return;
278
+ let t = (a.trackClick ?? (s.length === 1 ? "move-nearest" : "none")) === "move-nearest" && s.length > 0;
279
+ if (!a.onAddThumb && !t || e.target.closest(`.${l.thumb}`)) return;
280
+ e.preventDefault();
281
+ let n = N.current, r = P.current;
282
+ if (!n || !r) return;
283
+ let i = r.getBoundingClientRect(), o = z((e.clientX - i.left) / i.width, i.width);
284
+ if (a.onAddThumb) {
285
+ let e = a.onAddThumb(o);
286
+ if (!e) return;
287
+ let t = [...s.map((e) => ({ ...e })), e];
288
+ u(t), d?.(t);
289
+ return;
290
+ }
291
+ let c = 0;
292
+ for (let e = 1; e < s.length; e++) Math.abs(s[e].value - o) < Math.abs(s[c].value - o) && (c = e);
293
+ let f = s.map((e) => ({ ...e })), [m, h] = x(f[c], {
294
+ thumbs: f,
295
+ index: c
296
+ }, A, j), _ = p(o, m, h);
297
+ w === "ordered" && (_ = b(_, f, c, A, j, g)), f[c] = {
298
+ ...f[c],
299
+ value: _
300
+ }, u(f), n.querySelectorAll(`.${l.thumb}`)[c]?.focus(), B(n, e, c, f);
301
+ }, re = (e) => (t) => {
302
+ let n = y(g, A, j), r = 0, i = 0, a = null;
303
+ switch (t.key) {
304
+ case "ArrowRight":
305
+ case "ArrowUp":
306
+ r = t.shiftKey ? n * 10 : n, i = t.shiftKey ? 10 : 1;
307
+ break;
308
+ case "ArrowLeft":
309
+ case "ArrowDown":
310
+ r = t.shiftKey ? -n * 10 : -n, i = t.shiftKey ? -10 : -1;
311
+ break;
312
+ case "PageUp":
313
+ r = n * 10, i = 10;
314
+ break;
315
+ case "PageDown":
316
+ r = -n * 10, i = -10;
317
+ break;
318
+ case "Home":
319
+ a = "home";
320
+ break;
321
+ case "End":
322
+ a = "end";
323
+ break;
324
+ default: return;
325
+ }
326
+ t.preventDefault();
327
+ let o = s.map((e) => ({ ...e })), [c, l] = x(o[e], {
328
+ thumbs: o,
329
+ index: e
330
+ }, A, j), m = Math.max(A, c), h = Math.min(j, l), _;
331
+ _ = a === "home" ? m : a === "end" ? h : O.length > 0 ? v(O, o[e].value, i > 0 ? 1 : -1, Math.abs(i)) : f(o[e].value + r, g, A), _ = p(_, m, h), w === "ordered" && (_ = b(_, o, e, m, h, g)), o[e] = {
332
+ ...o[e],
333
+ value: _
334
+ }, u(o), d?.(o);
335
+ }, G = a.readoutPlacement ?? "none", K = a.renderReadout, q = a.display, J = te === "slim", Y = {};
336
+ J && (Y["--rp-track-height"] = "var(--wzl-slider-track-h)", Y["--rp-thumb-size"] = "var(--wzl-slider-thumb-size)"), T !== void 0 && (Y["--rp-track-height"] = `${T}px`);
337
+ let X = a.stopLabels ?? "all", Z = D.length - 1, Q = X === "none" ? [] : D.map((e, t) => ({
338
+ stop: e,
339
+ i: t
340
+ })).filter(({ stop: e, i: t }) => e.label !== void 0 && (X === "all" || t === 0 || t === Z)), $ = Q.length > 0 && /* @__PURE__ */ t("div", {
341
+ className: l.stopLabels,
342
+ "data-slider-stop-labels": !0,
343
+ "aria-hidden": "true",
344
+ children: Q.map(({ stop: e, i: n }) => /* @__PURE__ */ t("span", {
345
+ className: l.stopLabel,
346
+ "data-slider-stop-label": !0,
347
+ "data-selected": s.some((t) => t.value === e.value) ? "true" : void 0,
348
+ "data-edge": n === 0 ? "start" : n === Z ? "end" : void 0,
349
+ style: { left: `${L(e.value) * 100}%` },
350
+ children: e.label
351
+ }, e.value))
352
+ }), ie = [
353
+ l.root,
354
+ J && l.slim,
355
+ a.thumbFit === "overhang" && l.overhang,
356
+ $ && l.withStopLabels,
357
+ E
358
+ ].filter(Boolean).join(" ");
359
+ return /* @__PURE__ */ n("div", {
360
+ className: ie,
361
+ style: Object.keys(Y).length > 0 ? Y : void 0,
362
+ children: [/* @__PURE__ */ n("div", {
363
+ className: l.row,
364
+ children: [/* @__PURE__ */ n("div", {
365
+ className: l.track,
366
+ ref: N,
367
+ onPointerDown: W,
368
+ children: [a.renderTrack && /* @__PURE__ */ t("div", {
369
+ className: l.trackInner,
370
+ children: a.renderTrack({
371
+ trackWidth: N.current?.getBoundingClientRect().width ?? 0,
372
+ valueToFraction: L,
373
+ fractionToPosition: ee
374
+ })
375
+ }), /* @__PURE__ */ n("div", {
376
+ className: l.rail,
377
+ ref: P,
378
+ "data-slider-rail": !0,
379
+ children: [
380
+ (a.showStops ?? !0) && O.length > 0 && /* @__PURE__ */ t("div", {
381
+ className: l.ticks,
382
+ "data-slider-ticks": !0,
383
+ "aria-hidden": "true",
384
+ children: O.map((e) => {
385
+ let n = L(e);
386
+ return /* @__PURE__ */ t("span", {
387
+ className: l.tick,
388
+ "data-slider-tick": !0,
389
+ "data-fraction": String(n),
390
+ style: { left: `${n * 100}%` }
391
+ }, e);
392
+ })
393
+ }),
394
+ $,
395
+ s.map((e, n) => {
396
+ let r = e.shape === "notched", i = typeof e.shape == "object" && e.shape !== null ? e.shape.render : null, o = `${l.thumb}${r ? ` ${l.notched}` : ""}`;
397
+ return /* @__PURE__ */ t("div", {
398
+ role: "slider",
399
+ tabIndex: 0,
400
+ "aria-orientation": "horizontal",
401
+ "aria-valuemin": A,
402
+ "aria-valuemax": j,
403
+ "aria-valuenow": e.value,
404
+ "aria-valuetext": e.valueText ?? a.spokenAt?.(e.value) ?? (q ? c(e.value, q).spoken : void 0),
405
+ "aria-label": [ne, e.label].filter(Boolean).join(" ") || void 0,
406
+ className: o,
407
+ style: { left: `${L(e.value) * 100}%` },
408
+ onPointerDown: H(n),
409
+ onKeyDown: re(n),
410
+ onContextMenu: U(n),
411
+ children: i ? i({
412
+ width: 14,
413
+ height: 24,
414
+ isActive: !1
415
+ }) : e.label ?? ""
416
+ }, n);
417
+ })
418
+ ]
419
+ })]
420
+ }), G === "inline-after" && /* @__PURE__ */ t("span", {
421
+ "data-readout": "inline",
422
+ className: l.readoutInline,
423
+ children: s.map((e, t) => /* @__PURE__ */ n("span", { children: [t > 0 ? " / " : "", K ? K(e, t) : c(e.value, q ?? S).text] }, t))
424
+ })]
425
+ }), G === "below-thumb" && /* @__PURE__ */ t("div", {
426
+ className: l.readoutsBelow,
427
+ children: s.map((e, n) => /* @__PURE__ */ t("span", {
428
+ "data-readout": "below",
429
+ className: l.readoutBelow,
430
+ style: { left: `${L(e.value) * 100}%` },
431
+ children: K ? K(e, n) : c(e.value, q ?? S).text
432
+ }, n))
433
+ })]
434
+ });
435
+ }
436
+ //#endregion
437
+ export { d as n, u as r, w as t };
438
+
439
+ //# sourceMappingURL=Slider-CHBQ8uUC.js.map