@weasel-js/ui 1.7.0 → 1.7.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 (391) hide show
  1. package/dist/chunks/ActionBar-xA73vzzF.js +64 -0
  2. package/dist/chunks/ActionBar-xA73vzzF.js.map +1 -0
  3. package/dist/chunks/{Badge-D2aD7xVL.js → Badge-jYQjrTKc.js} +235 -264
  4. package/dist/chunks/{Badge-D2aD7xVL.js.map → Badge-jYQjrTKc.js.map} +1 -1
  5. package/dist/chunks/BandEditor-Dd0egAgE.js.map +1 -1
  6. package/dist/chunks/{Button-BIdXHQOx.js → Button-XB-T75YL.js} +2 -2
  7. package/dist/chunks/{Button-BIdXHQOx.js.map → Button-XB-T75YL.js.map} +1 -1
  8. package/dist/chunks/{ButtonBar-DIQTe5GQ.js → ButtonBar-CIMKPPRS.js} +7 -9
  9. package/dist/chunks/{ButtonBar-DIQTe5GQ.js.map → ButtonBar-CIMKPPRS.js.map} +1 -1
  10. package/dist/chunks/Callout-BUn0dP_S.js +115 -0
  11. package/dist/chunks/Callout-BUn0dP_S.js.map +1 -0
  12. package/dist/chunks/Checkbox-DFn-x0JO.js +37 -0
  13. package/dist/chunks/Checkbox-DFn-x0JO.js.map +1 -0
  14. package/dist/chunks/{CloseButton-C2J7wVfo.js → CloseButton-BmNmRVtb.js} +3 -3
  15. package/dist/chunks/{CloseButton-C2J7wVfo.js.map → CloseButton-BmNmRVtb.js.map} +1 -1
  16. package/dist/chunks/ColorField-BLs9fbeq.js +90 -0
  17. package/dist/chunks/ColorField-BLs9fbeq.js.map +1 -0
  18. package/dist/chunks/{ColorModeControl-BewxA0rX.js → ColorModeControl-DaVJ-SyX.js} +3 -3
  19. package/dist/chunks/{ColorModeControl-BewxA0rX.js.map → ColorModeControl-DaVJ-SyX.js.map} +1 -1
  20. package/dist/chunks/ComboBox-CuTLRmUg.js +138 -0
  21. package/dist/chunks/ComboBox-CuTLRmUg.js.map +1 -0
  22. package/dist/chunks/{CurveEditor-DUVjd25R.js → CurveEditor-jVBEqqdv.js} +90 -87
  23. package/dist/chunks/CurveEditor-jVBEqqdv.js.map +1 -0
  24. package/dist/chunks/{DataGrid-LZ2JgY2Y.js → DataGrid-BklgBqS0.js} +2 -2
  25. package/dist/chunks/{DataGrid-LZ2JgY2Y.js.map → DataGrid-BklgBqS0.js.map} +1 -1
  26. package/dist/chunks/{DetailList-BKomDzg5.js → DetailList-DFtqdOJj.js} +7 -7
  27. package/dist/chunks/DetailList-DFtqdOJj.js.map +1 -0
  28. package/dist/chunks/{DetentSlider-5uQPFucv.js → DetentSlider-Bh7EpMqT.js} +2 -2
  29. package/dist/chunks/{DetentSlider-5uQPFucv.js.map → DetentSlider-Bh7EpMqT.js.map} +1 -1
  30. package/dist/chunks/{Dialog-DGFutQ--.js → Dialog-DKfsk5VN.js} +3 -3
  31. package/dist/chunks/{Dialog-DGFutQ--.js.map → Dialog-DKfsk5VN.js.map} +1 -1
  32. package/dist/chunks/{DragGhost-B5_hb9W9.js → DragGhost-BeYDJyLZ.js} +2 -2
  33. package/dist/chunks/{DragGhost-B5_hb9W9.js.map → DragGhost-BeYDJyLZ.js.map} +1 -1
  34. package/dist/chunks/{FallthroughDiagram-BEHiM5IS.js → FallthroughDiagram-C7BUe8eU.js} +3 -3
  35. package/dist/chunks/{FallthroughDiagram-BEHiM5IS.js.map → FallthroughDiagram-C7BUe8eU.js.map} +1 -1
  36. package/dist/chunks/Field-DsBlnFKf.js +25 -0
  37. package/dist/chunks/Field-DsBlnFKf.js.map +1 -0
  38. package/dist/chunks/FillStrokeSwatch-CgsYQgew.js +112 -0
  39. package/dist/chunks/FillStrokeSwatch-CgsYQgew.js.map +1 -0
  40. package/dist/chunks/{FontFamilySelect-DkRgNtag.js → FontFamilySelect-CGJ5OIOy.js} +2 -2
  41. package/dist/chunks/FontFamilySelect-CGJ5OIOy.js.map +1 -0
  42. package/dist/chunks/FontWeightSelect-RbcXYJPS.js +49 -0
  43. package/dist/chunks/FontWeightSelect-RbcXYJPS.js.map +1 -0
  44. package/dist/chunks/{GestureRoute-C_YGl7bJ.js → GestureRoute-BXESrHI0.js} +2 -2
  45. package/dist/chunks/{GestureRoute-C_YGl7bJ.js.map → GestureRoute-BXESrHI0.js.map} +1 -1
  46. package/dist/chunks/GradientEditor-DypXzMc-.js +325 -0
  47. package/dist/chunks/GradientEditor-DypXzMc-.js.map +1 -0
  48. package/dist/chunks/{Icon-CcVjdq2C.js → Icon--B1ME-6c.js} +3 -1
  49. package/dist/chunks/Icon--B1ME-6c.js.map +1 -0
  50. package/dist/chunks/{Input-CHmkfYaD.js → Input-CzwvCZs_.js} +10 -15
  51. package/dist/chunks/Input-CzwvCZs_.js.map +1 -0
  52. package/dist/chunks/{ItemList-Cm-HUWCi.js → ItemList-CRu9y7hL.js} +2 -2
  53. package/dist/chunks/ItemList-CRu9y7hL.js.map +1 -0
  54. package/dist/chunks/{Jog-DRmfrkCg.js → Jog-DfNUYejm.js} +8 -8
  55. package/dist/chunks/Jog-DfNUYejm.js.map +1 -0
  56. package/dist/chunks/{LayerList-wCI1EueM.js → LayerList-CsDqwYh-.js} +151 -153
  57. package/dist/chunks/LayerList-CsDqwYh-.js.map +1 -0
  58. package/dist/chunks/ListEditor-BnGzqERm.js +72 -0
  59. package/dist/chunks/ListEditor-BnGzqERm.js.map +1 -0
  60. package/dist/chunks/MenuButton-L9f5vido.js +75 -0
  61. package/dist/chunks/MenuButton-L9f5vido.js.map +1 -0
  62. package/dist/chunks/MeshEditor-GbqqiPk8.js +199 -0
  63. package/dist/chunks/MeshEditor-GbqqiPk8.js.map +1 -0
  64. package/dist/chunks/{NumberField-BnJxcazc.js → NumberField-DLXXgh48.js} +26 -23
  65. package/dist/chunks/NumberField-DLXXgh48.js.map +1 -0
  66. package/dist/chunks/{OptionsBar-ujxYidhj.js → OptionsBar-DeTAjVb7.js} +6 -8
  67. package/dist/chunks/{OptionsBar-ujxYidhj.js.map → OptionsBar-DeTAjVb7.js.map} +1 -1
  68. package/dist/chunks/PaintField-C0hoXc0Y.js +63 -0
  69. package/dist/chunks/PaintField-C0hoXc0Y.js.map +1 -0
  70. package/dist/chunks/PaintInput-jQRxM95Y.js +132 -0
  71. package/dist/chunks/PaintInput-jQRxM95Y.js.map +1 -0
  72. package/dist/chunks/PatternPicker-CaMYXzhF.js +135 -0
  73. package/dist/chunks/PatternPicker-CaMYXzhF.js.map +1 -0
  74. package/dist/chunks/{Plot2D-CTXHkL5p.js → Plot2D-BHNbgCAl.js} +7 -7
  75. package/dist/chunks/Plot2D-BHNbgCAl.js.map +1 -0
  76. package/dist/chunks/{PointPlotter-ldI4RrU1.js → PointPlotter-BZ_vk6gV.js} +2 -2
  77. package/dist/chunks/{PointPlotter-ldI4RrU1.js.map → PointPlotter-BZ_vk6gV.js.map} +1 -1
  78. package/dist/chunks/{Powerline-DNyH885r.js → Powerline-6wIFmDik.js} +2 -2
  79. package/dist/chunks/{Powerline-DNyH885r.js.map → Powerline-6wIFmDik.js.map} +1 -1
  80. package/dist/chunks/{Prefs-ByA-x51i.js → Prefs-CkyldX-e.js} +83 -70
  81. package/dist/chunks/Prefs-CkyldX-e.js.map +1 -0
  82. package/dist/chunks/{Properties-DmAeQ3mk.js → Properties-D15c8NP-.js} +25 -25
  83. package/dist/chunks/{Properties-DmAeQ3mk.js.map → Properties-D15c8NP-.js.map} +1 -1
  84. package/dist/chunks/PropertyField-CV_Gw57S.js +686 -0
  85. package/dist/chunks/PropertyField-CV_Gw57S.js.map +1 -0
  86. package/dist/chunks/{RadioGroup-Bh4-12e-.js → RadioGroup-4dbzqvGy.js} +2 -2
  87. package/dist/chunks/{RadioGroup-Bh4-12e-.js.map → RadioGroup-4dbzqvGy.js.map} +1 -1
  88. package/dist/chunks/{RangeSlider-SEGE-7VF.js → RangeSlider-BxokZViJ.js} +8 -8
  89. package/dist/chunks/RangeSlider-BxokZViJ.js.map +1 -0
  90. package/dist/chunks/RecentColorsProvider-DHcfk25u.js +84 -0
  91. package/dist/chunks/RecentColorsProvider-DHcfk25u.js.map +1 -0
  92. package/dist/chunks/ResizeHandle-CbAgCQOt.js +81 -0
  93. package/dist/chunks/ResizeHandle-CbAgCQOt.js.map +1 -0
  94. package/dist/chunks/Select-BppLsJTz.js +236 -0
  95. package/dist/chunks/Select-BppLsJTz.js.map +1 -0
  96. package/dist/chunks/{SelectionPanel-BaQnX4Bs.js → SelectionPanel-Cm1qu-ZX.js} +14 -13
  97. package/dist/chunks/{SelectionPanel-BaQnX4Bs.js.map → SelectionPanel-Cm1qu-ZX.js.map} +1 -1
  98. package/dist/chunks/{SidebarPanel-BblDEz4G.js → SidebarPanel-AXQ0jRDx.js} +2 -2
  99. package/dist/chunks/{SidebarPanel-BblDEz4G.js.map → SidebarPanel-AXQ0jRDx.js.map} +1 -1
  100. package/dist/chunks/{Slider-YofwGOI4.js → Slider-Cl5RCeZ7.js} +19 -19
  101. package/dist/chunks/Slider-Cl5RCeZ7.js.map +1 -0
  102. package/dist/chunks/SwatchGrid-9ZPiDmxd.js +78 -0
  103. package/dist/chunks/SwatchGrid-9ZPiDmxd.js.map +1 -0
  104. package/dist/chunks/SwatchStrip-Cw0l8Om7.js +577 -0
  105. package/dist/chunks/SwatchStrip-Cw0l8Om7.js.map +1 -0
  106. package/dist/chunks/{ThemeSwitcher-BlsInAmR.js → ThemeSwitcher-DiBmMh_B.js} +3 -3
  107. package/dist/chunks/{ThemeSwitcher-BlsInAmR.js.map → ThemeSwitcher-DiBmMh_B.js.map} +1 -1
  108. package/dist/chunks/{Timeline-B39cwfMB.js → Timeline-pqnYk5cV.js} +244 -246
  109. package/dist/chunks/Timeline-pqnYk5cV.js.map +1 -0
  110. package/dist/chunks/Toast-C3ozq11V.js +170 -0
  111. package/dist/chunks/Toast-C3ozq11V.js.map +1 -0
  112. package/dist/chunks/{ToggleBar-BTYkBXU9.js → ToggleBar-Z2jZiguF.js} +6 -8
  113. package/dist/chunks/{ToggleBar-BTYkBXU9.js.map → ToggleBar-Z2jZiguF.js.map} +1 -1
  114. package/dist/chunks/{TokenPanel-CMDAOfYH.js → TokenPanel-DAkL6vwQ.js} +32 -32
  115. package/dist/chunks/TokenPanel-DAkL6vwQ.js.map +1 -0
  116. package/dist/chunks/{ToolButton-CAHBa08P.js → ToolButton-BURp4YIO.js} +7 -9
  117. package/dist/chunks/ToolButton-BURp4YIO.js.map +1 -0
  118. package/dist/chunks/{ToolOptionsBar-D_GCrBAN.js → ToolOptionsBar-COsTJ1cu.js} +3 -2
  119. package/dist/chunks/{ToolOptionsBar-D_GCrBAN.js.map → ToolOptionsBar-COsTJ1cu.js.map} +1 -1
  120. package/dist/chunks/{ToolPalette-OOWN51Xx.js → ToolPalette-DKDFWOX-.js} +7 -9
  121. package/dist/chunks/{ToolPalette-OOWN51Xx.js.map → ToolPalette-DKDFWOX-.js.map} +1 -1
  122. package/dist/chunks/{Tooltip-Clg2mhSt.js → Tooltip-C6eFCYxw.js} +2 -2
  123. package/dist/chunks/{Tooltip-Clg2mhSt.js.map → Tooltip-C6eFCYxw.js.map} +1 -1
  124. package/dist/chunks/Tree-Cc8lIzgM.js.map +1 -1
  125. package/dist/chunks/checkbox.module-DLQV9tMX.js +5 -0
  126. package/dist/chunks/checkbox.module-DLQV9tMX.js.map +1 -0
  127. package/dist/chunks/{createKeyframeLayer-DVl321_l.js → createKeyframeLayer-BTa4LyJE.js} +194 -208
  128. package/dist/chunks/createKeyframeLayer-BTa4LyJE.js.map +1 -0
  129. package/dist/chunks/field.module-Bh7BTKMh.js +15 -0
  130. package/dist/chunks/field.module-Bh7BTKMh.js.map +1 -0
  131. package/dist/chunks/formatShortcut-DRQrVThu.js.map +1 -1
  132. package/dist/chunks/handles-CqVANLtu.js +17 -0
  133. package/dist/chunks/handles-CqVANLtu.js.map +1 -0
  134. package/dist/chunks/{icons-BhcR1l64.js → icons-Dr2-r30x.js} +2 -2
  135. package/dist/chunks/icons-Dr2-r30x.js.map +1 -0
  136. package/dist/chunks/listbox.module-BcdVJMbm.js +8 -0
  137. package/dist/chunks/listbox.module-BcdVJMbm.js.map +1 -0
  138. package/dist/chunks/model-B1-gMBIW.js +386 -0
  139. package/dist/chunks/model-B1-gMBIW.js.map +1 -0
  140. package/dist/chunks/{portalHost-yTOVuCej.js → portalHost-CE70wLzo.js} +10 -6
  141. package/dist/chunks/portalHost-CE70wLzo.js.map +1 -0
  142. package/dist/chunks/prefField-BE_Ytr2H.js +229 -0
  143. package/dist/chunks/prefField-BE_Ytr2H.js.map +1 -0
  144. package/dist/chunks/{segmentTooltip-CStYHKzd.js → segmentTooltip-CGxCOWNz.js} +2 -2
  145. package/dist/chunks/{segmentTooltip-CStYHKzd.js.map → segmentTooltip-CGxCOWNz.js.map} +1 -1
  146. package/dist/chunks/segmentedControl.module-BzGXUL5G.js +11 -0
  147. package/dist/chunks/segmentedControl.module-BzGXUL5G.js.map +1 -0
  148. package/dist/chunks/useReorderDragList-CStYKjHl.js +133 -0
  149. package/dist/chunks/useReorderDragList-CStYKjHl.js.map +1 -0
  150. package/dist/chunks/useRovingTabIndex-D7u22Ia_.js +91 -0
  151. package/dist/chunks/useRovingTabIndex-D7u22Ia_.js.map +1 -0
  152. package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
  153. package/dist/components/ActionBar/index.js +1 -1
  154. package/dist/components/Badge/bases/ChamferedRect.d.ts.map +1 -1
  155. package/dist/components/Badge/index.js +1 -1
  156. package/dist/components/BandEditor/BandEditor.d.ts +1 -0
  157. package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
  158. package/dist/components/Button/index.js +1 -1
  159. package/dist/components/ButtonBar/ButtonBar.d.ts.map +1 -1
  160. package/dist/components/ButtonBar/index.js +1 -1
  161. package/dist/components/Callout/Callout.d.ts.map +1 -1
  162. package/dist/components/Callout/index.js +1 -1
  163. package/dist/components/Checkbox/Checkbox.d.ts +28 -13
  164. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  165. package/dist/components/Checkbox/index.js +1 -1
  166. package/dist/components/CloseButton/index.js +1 -1
  167. package/dist/components/ColorField/ColorField.d.ts.map +1 -1
  168. package/dist/components/ColorField/OpacityRange.d.ts +18 -0
  169. package/dist/components/ColorField/OpacityRange.d.ts.map +1 -0
  170. package/dist/components/ColorField/index.js +1 -1
  171. package/dist/components/ColorModeControl/index.js +1 -1
  172. package/dist/components/ComboBox/ComboBox.d.ts +7 -0
  173. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  174. package/dist/components/ComboBox/index.js +1 -1
  175. package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
  176. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
  177. package/dist/components/CurveEditor/index.js +2 -2
  178. package/dist/components/DataGrid/index.js +1 -1
  179. package/dist/components/DetailList/index.js +1 -1
  180. package/dist/components/DetentSlider/index.js +1 -1
  181. package/dist/components/Dialog/index.js +1 -1
  182. package/dist/components/DragGhost/index.js +1 -1
  183. package/dist/components/FallthroughDiagram/index.js +1 -1
  184. package/dist/components/Field/index.js +1 -1
  185. package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts.map +1 -1
  186. package/dist/components/FillStrokeSwatch/index.js +1 -1
  187. package/dist/components/FontFamilySelect/FontFamilySelect.d.ts +20 -0
  188. package/dist/components/FontFamilySelect/FontFamilySelect.d.ts.map +1 -1
  189. package/dist/components/FontFamilySelect/index.js +1 -1
  190. package/dist/components/FontWeightSelect/FontWeightSelect.d.ts +26 -0
  191. package/dist/components/FontWeightSelect/FontWeightSelect.d.ts.map +1 -0
  192. package/dist/components/FontWeightSelect/index.d.ts +3 -0
  193. package/dist/components/FontWeightSelect/index.d.ts.map +1 -0
  194. package/dist/components/FontWeightSelect/index.js +2 -0
  195. package/dist/components/GestureRoute/index.js +1 -1
  196. package/dist/components/GradientEditor/GradientHandles.d.ts +1 -8
  197. package/dist/components/GradientEditor/GradientHandles.d.ts.map +1 -1
  198. package/dist/components/GradientEditor/SceneGradientHandles.d.ts +7 -5
  199. package/dist/components/GradientEditor/SceneGradientHandles.d.ts.map +1 -1
  200. package/dist/components/GradientEditor/handleOverlay.d.ts +41 -0
  201. package/dist/components/GradientEditor/handleOverlay.d.ts.map +1 -0
  202. package/dist/components/GradientEditor/index.js +1 -1
  203. package/dist/components/Input/Input.d.ts +1 -1
  204. package/dist/components/Input/Input.d.ts.map +1 -1
  205. package/dist/components/Input/index.js +1 -1
  206. package/dist/components/ItemList/ItemList.d.ts +32 -31
  207. package/dist/components/ItemList/ItemList.d.ts.map +1 -1
  208. package/dist/components/ItemList/index.js +1 -1
  209. package/dist/components/Jog/index.js +1 -1
  210. package/dist/components/LayerList/LayerList.d.ts.map +1 -1
  211. package/dist/components/LayerList/index.js +1 -1
  212. package/dist/components/ListEditor/ListEditor.d.ts.map +1 -1
  213. package/dist/components/ListEditor/index.js +1 -1
  214. package/dist/components/MenuButton/MenuButton.d.ts.map +1 -1
  215. package/dist/components/MenuButton/index.js +1 -1
  216. package/dist/components/MeshEditor/MeshEditor.d.ts +4 -3
  217. package/dist/components/MeshEditor/MeshEditor.d.ts.map +1 -1
  218. package/dist/components/MeshEditor/MeshHandles.d.ts +38 -0
  219. package/dist/components/MeshEditor/MeshHandles.d.ts.map +1 -0
  220. package/dist/components/MeshEditor/index.d.ts +2 -0
  221. package/dist/components/MeshEditor/index.d.ts.map +1 -1
  222. package/dist/components/MeshEditor/index.js +2 -2
  223. package/dist/components/NumberField/NumberField.d.ts +1 -1
  224. package/dist/components/NumberField/NumberField.d.ts.map +1 -1
  225. package/dist/components/NumberField/index.js +1 -1
  226. package/dist/components/OptionsBar/OptionsBar.d.ts.map +1 -1
  227. package/dist/components/OptionsBar/index.js +1 -1
  228. package/dist/components/PaintField/PaintField.d.ts.map +1 -1
  229. package/dist/components/PaintField/index.js +1 -1
  230. package/dist/components/PaintInput/PaintInput.d.ts.map +1 -1
  231. package/dist/components/PaintInput/index.js +1 -1
  232. package/dist/components/PatternPicker/PatternPicker.d.ts +6 -5
  233. package/dist/components/PatternPicker/PatternPicker.d.ts.map +1 -1
  234. package/dist/components/PatternPicker/index.js +1 -1
  235. package/dist/components/Plot2D/index.js +1 -1
  236. package/dist/components/PointPlotter/index.js +1 -1
  237. package/dist/components/Powerline/index.js +2 -2
  238. package/dist/components/Prefs/PrefsForm.d.ts +8 -0
  239. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  240. package/dist/components/Prefs/PrefsRail.d.ts +3 -2
  241. package/dist/components/Prefs/PrefsRail.d.ts.map +1 -1
  242. package/dist/components/Prefs/index.js +2 -2
  243. package/dist/components/Prefs/prefField.d.ts +13 -0
  244. package/dist/components/Prefs/prefField.d.ts.map +1 -1
  245. package/dist/components/Properties/PropertyField.d.ts +13 -2
  246. package/dist/components/Properties/PropertyField.d.ts.map +1 -1
  247. package/dist/components/Properties/index.js +3 -3
  248. package/dist/components/RadioGroup/index.js +1 -1
  249. package/dist/components/RangeSlider/index.js +1 -1
  250. package/dist/components/RecentColors/RecentColorsProvider.d.ts +24 -0
  251. package/dist/components/RecentColors/RecentColorsProvider.d.ts.map +1 -0
  252. package/dist/components/RecentColors/index.d.ts +5 -0
  253. package/dist/components/RecentColors/index.d.ts.map +1 -0
  254. package/dist/components/RecentColors/index.js +2 -0
  255. package/dist/components/RecentColors/recentColors.d.ts +39 -0
  256. package/dist/components/RecentColors/recentColors.d.ts.map +1 -0
  257. package/dist/components/ResizeHandle/ResizeHandle.d.ts.map +1 -1
  258. package/dist/components/ResizeHandle/index.js +1 -1
  259. package/dist/components/Select/Select.d.ts +6 -2
  260. package/dist/components/Select/Select.d.ts.map +1 -1
  261. package/dist/components/Select/index.js +1 -1
  262. package/dist/components/SelectionPanel/index.js +2 -2
  263. package/dist/components/SelectionPanel/renderLeaf.d.ts +12 -2
  264. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
  265. package/dist/components/SidebarPanel/index.js +1 -1
  266. package/dist/components/Slider/index.js +1 -1
  267. package/dist/components/SwatchGrid/SwatchGrid.d.ts.map +1 -1
  268. package/dist/components/SwatchGrid/index.js +1 -1
  269. package/dist/components/SwatchStrip/SwatchStrip.d.ts +44 -0
  270. package/dist/components/SwatchStrip/SwatchStrip.d.ts.map +1 -0
  271. package/dist/components/SwatchStrip/index.d.ts +5 -0
  272. package/dist/components/SwatchStrip/index.d.ts.map +1 -0
  273. package/dist/components/SwatchStrip/index.js +2 -0
  274. package/dist/components/SwatchStrip/palettes.d.ts +21 -0
  275. package/dist/components/SwatchStrip/palettes.d.ts.map +1 -0
  276. package/dist/components/ThemeSwitcher/index.js +1 -1
  277. package/dist/components/Timeline/AnimatedTimeline.d.ts +1 -0
  278. package/dist/components/Timeline/AnimatedTimeline.d.ts.map +1 -1
  279. package/dist/components/Timeline/EasingPicker.d.ts +3 -0
  280. package/dist/components/Timeline/EasingPicker.d.ts.map +1 -1
  281. package/dist/components/Timeline/LaneGraph.d.ts +1 -1
  282. package/dist/components/Timeline/LaneGraph.d.ts.map +1 -1
  283. package/dist/components/Timeline/Timeline.d.ts +10 -1
  284. package/dist/components/Timeline/Timeline.d.ts.map +1 -1
  285. package/dist/components/Timeline/Transport.d.ts +6 -0
  286. package/dist/components/Timeline/Transport.d.ts.map +1 -1
  287. package/dist/components/Timeline/index.js +1 -1
  288. package/dist/components/Timeline/keys.d.ts +1 -0
  289. package/dist/components/Timeline/keys.d.ts.map +1 -1
  290. package/dist/components/Toast/Toast.d.ts +12 -3
  291. package/dist/components/Toast/Toast.d.ts.map +1 -1
  292. package/dist/components/Toast/index.js +1 -1
  293. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  294. package/dist/components/ToggleBar/index.js +1 -1
  295. package/dist/components/TokenPanel/index.js +1 -1
  296. package/dist/components/TokenPanel/tokenTypes.d.ts +1 -0
  297. package/dist/components/TokenPanel/tokenTypes.d.ts.map +1 -1
  298. package/dist/components/ToolButton/ToolButton.d.ts +1 -10
  299. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  300. package/dist/components/ToolButton/index.js +1 -1
  301. package/dist/components/ToolOptionsBar/index.js +1 -1
  302. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
  303. package/dist/components/ToolPalette/formatShortcut.d.ts +2 -0
  304. package/dist/components/ToolPalette/formatShortcut.d.ts.map +1 -1
  305. package/dist/components/ToolPalette/index.js +1 -1
  306. package/dist/components/Tooltip/index.js +1 -1
  307. package/dist/components/Tree/Tree.d.ts +27 -26
  308. package/dist/components/Tree/Tree.d.ts.map +1 -1
  309. package/dist/icons/index.d.ts +51 -0
  310. package/dist/icons/index.d.ts.map +1 -1
  311. package/dist/icons/paths.d.ts +2 -0
  312. package/dist/icons/paths.d.ts.map +1 -1
  313. package/dist/index.d.ts +4 -1
  314. package/dist/index.d.ts.map +1 -1
  315. package/dist/index.js +98 -95
  316. package/dist/index.js.map +1 -1
  317. package/dist/overlays/portalHost.d.ts +6 -0
  318. package/dist/overlays/portalHost.d.ts.map +1 -1
  319. package/dist/style.css +1 -1
  320. package/dist/useAsyncOptions.d.ts.map +1 -1
  321. package/dist/useReorderDragList.d.ts.map +1 -1
  322. package/dist/useRovingTabIndex.d.ts +40 -39
  323. package/dist/useRovingTabIndex.d.ts.map +1 -1
  324. package/package.json +9 -9
  325. package/dist/chunks/ActionBar-DCq16yFA.js +0 -57
  326. package/dist/chunks/ActionBar-DCq16yFA.js.map +0 -1
  327. package/dist/chunks/Callout-ndW5_Bqx.js +0 -116
  328. package/dist/chunks/Callout-ndW5_Bqx.js.map +0 -1
  329. package/dist/chunks/Checkbox-DHXTUHO9.js +0 -47
  330. package/dist/chunks/Checkbox-DHXTUHO9.js.map +0 -1
  331. package/dist/chunks/ColorField-Yz_BkcCT.js +0 -69
  332. package/dist/chunks/ColorField-Yz_BkcCT.js.map +0 -1
  333. package/dist/chunks/ComboBox-B34H76CW.js +0 -138
  334. package/dist/chunks/ComboBox-B34H76CW.js.map +0 -1
  335. package/dist/chunks/CurveEditor-DUVjd25R.js.map +0 -1
  336. package/dist/chunks/DetailList-BKomDzg5.js.map +0 -1
  337. package/dist/chunks/Field--onYxXTF.js +0 -32
  338. package/dist/chunks/Field--onYxXTF.js.map +0 -1
  339. package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js +0 -111
  340. package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js.map +0 -1
  341. package/dist/chunks/FontFamilySelect-DkRgNtag.js.map +0 -1
  342. package/dist/chunks/GradientEditor-b7v4Ph3i.js +0 -363
  343. package/dist/chunks/GradientEditor-b7v4Ph3i.js.map +0 -1
  344. package/dist/chunks/Icon-CcVjdq2C.js.map +0 -1
  345. package/dist/chunks/Input-CHmkfYaD.js.map +0 -1
  346. package/dist/chunks/ItemList-Cm-HUWCi.js.map +0 -1
  347. package/dist/chunks/Jog-DRmfrkCg.js.map +0 -1
  348. package/dist/chunks/LayerList-wCI1EueM.js.map +0 -1
  349. package/dist/chunks/ListEditor-BeA60TAA.js +0 -71
  350. package/dist/chunks/ListEditor-BeA60TAA.js.map +0 -1
  351. package/dist/chunks/MenuButton-BSqEChJE.js +0 -70
  352. package/dist/chunks/MenuButton-BSqEChJE.js.map +0 -1
  353. package/dist/chunks/MeshEditor-D1HLZcAh.js +0 -87
  354. package/dist/chunks/MeshEditor-D1HLZcAh.js.map +0 -1
  355. package/dist/chunks/NumberField-BnJxcazc.js.map +0 -1
  356. package/dist/chunks/PaintField-DadOELMg.js +0 -62
  357. package/dist/chunks/PaintField-DadOELMg.js.map +0 -1
  358. package/dist/chunks/PaintInput-v8Y7MDbH.js +0 -121
  359. package/dist/chunks/PaintInput-v8Y7MDbH.js.map +0 -1
  360. package/dist/chunks/PatternPicker-R_EQtw2Q.js +0 -93
  361. package/dist/chunks/PatternPicker-R_EQtw2Q.js.map +0 -1
  362. package/dist/chunks/Plot2D-CTXHkL5p.js.map +0 -1
  363. package/dist/chunks/Prefs-ByA-x51i.js.map +0 -1
  364. package/dist/chunks/PropertyField-DfIJJ5GS.js +0 -673
  365. package/dist/chunks/PropertyField-DfIJJ5GS.js.map +0 -1
  366. package/dist/chunks/RangeSlider-SEGE-7VF.js.map +0 -1
  367. package/dist/chunks/ResizeHandle-rKVWyeTG.js +0 -79
  368. package/dist/chunks/ResizeHandle-rKVWyeTG.js.map +0 -1
  369. package/dist/chunks/Select-ClmKtyWg.js +0 -229
  370. package/dist/chunks/Select-ClmKtyWg.js.map +0 -1
  371. package/dist/chunks/Slider-YofwGOI4.js.map +0 -1
  372. package/dist/chunks/SwatchGrid-BYvA8Bmh.js +0 -73
  373. package/dist/chunks/SwatchGrid-BYvA8Bmh.js.map +0 -1
  374. package/dist/chunks/Timeline-B39cwfMB.js.map +0 -1
  375. package/dist/chunks/Toast-BF9GE0HC.js +0 -126
  376. package/dist/chunks/Toast-BF9GE0HC.js.map +0 -1
  377. package/dist/chunks/TokenPanel-CMDAOfYH.js.map +0 -1
  378. package/dist/chunks/ToolButton-CAHBa08P.js.map +0 -1
  379. package/dist/chunks/createKeyframeLayer-DVl321_l.js.map +0 -1
  380. package/dist/chunks/icons-BhcR1l64.js.map +0 -1
  381. package/dist/chunks/model-BaF65rnX.js +0 -365
  382. package/dist/chunks/model-BaF65rnX.js.map +0 -1
  383. package/dist/chunks/portalHost-yTOVuCej.js.map +0 -1
  384. package/dist/chunks/prefField-BopW9bjx.js +0 -201
  385. package/dist/chunks/prefField-BopW9bjx.js.map +0 -1
  386. package/dist/chunks/segmentedControl.module-D6SzYJD7.js +0 -11
  387. package/dist/chunks/segmentedControl.module-D6SzYJD7.js.map +0 -1
  388. package/dist/chunks/useReorderDragList-FCMoFIzH.js +0 -131
  389. package/dist/chunks/useReorderDragList-FCMoFIzH.js.map +0 -1
  390. package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js +0 -65
  391. package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Properties-DmAeQ3mk.js","names":["s","s","s","s","dlog","Button","Disclosure","CurveEditor","Dialog","propertyMetricClass","PropertyNote","Properties_module_default","PropertyRow","CurveField_module_default","CurveField","points","useMemo","out","i","values","handleChange","useCallback","flat","next","ySnap","step","y","min","max","onChange","handleFlip","flipped","a","b","p","handleFlipVertical","mid","marks","width","height","color","m","x0","x1","left","w","x","defaults","DialogRow","open","setOpen","useState","close","name","label","summary","title","footer","children","DialogBody","render","PropertyGroup","bodyId","useId","titleId","own","setOwn","defaultCollapsed","stanced","useStance","hidden","folds","collapsible","collapsed","onCollapsedChange","folded","toggle","base","pack","cls","span","className","titled","heading","leading","actions","description","Subpanel"],"sources":["../../src/components/Properties/CurveField.module.css","../../src/components/Properties/CurveField.tsx","../../src/components/Properties/DialogRow.tsx","../../src/components/Properties/PropertyGroup.tsx","../../src/components/Properties/Subpanel.tsx"],"sourcesContent":[".field {\n display: grid;\n gap: var(--wzl-space-3);\n grid-column: 1 / -1;\n box-sizing: border-box;\n}\n\n.field * {\n box-sizing: border-box;\n}\n\n.plot {\n position: relative;\n width: 100%;\n}\n\n.marks {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n.actions {\n display: flex;\n gap: var(--wzl-space-3);\n justify-self: start;\n}\n\n.action {\n background: transparent;\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg);\n padding: var(--wzl-space-2) var(--wzl-space-5);\n font: inherit;\n font-size: var(--wzl-font-size-sm);\n cursor: pointer;\n}\n\n.action:hover {\n background: var(--wzl-surface-raised);\n}\n","import { useCallback, useMemo } from 'react';\nimport { dlog } from '../../dlog';\nimport { type ControlPoint, CurveEditor } from '../CurveEditor';\nimport s from './CurveField.module.css';\n\n/** An annotation drawn over a curve plot: a shaded band across a range of x,\n * or a vertical line at one x. */\nexport type CurveMark =\n | { kind: 'band'; x: [number, number]; color?: string }\n | { kind: 'line'; x: number; color?: string };\n\n/** Props for `<CurveField>`. */\nexport interface CurveFieldProps {\n /** Flat [x0, y0, x1, y1, …] — matches how curve-as-array configs\n * serialize in JSON snapshots. */\n values: number[];\n min: number;\n max: number;\n step: number;\n /** Plot width in CSS px. Caller sizes (typically uses a ResizeObserver). */\n width: number;\n /** Plot height in CSS px. Default 110. */\n height?: number;\n /** Flat default curve. When provided, a Reset button restores it. */\n defaults?: readonly number[];\n onChange: (next: number[]) => void;\n /** Optional vertical marks overlaid on the plot (e.g. landmarks). */\n marks?: readonly CurveMark[];\n}\n\n/**\n * A function-domain (y = f(x), x ∈ [0,1]) curve editor with per-stop\n * numeric readouts and flip buttons. Wraps weasel-ui's\n * `CurveEditor`; consumers wanting the raw editor (2D paths,\n * custom anchors) should import that instead.\n */\nexport function CurveField({\n values,\n min,\n max,\n step,\n width,\n height = 110,\n defaults,\n onChange,\n marks,\n}: CurveFieldProps) {\n const points: ControlPoint[] = useMemo(() => {\n const out: ControlPoint[] = [];\n for (let i = 0; i + 1 < values.length; i += 2) out.push({ x: values[i], y: values[i + 1] });\n return out;\n }, [values]);\n\n const handleChange = useCallback(\n (next: ControlPoint[]) => {\n const flat: number[] = new Array(next.length * 2);\n for (let i = 0; i < next.length; i++) {\n const ySnap = Math.round(next[i].y / step) * step;\n const y = Math.max(min, Math.min(max, ySnap));\n flat[i * 2] = next[i].x;\n flat[i * 2 + 1] = y;\n }\n dlog('curve-field', 'handleChange', {\n nLen: next.length,\n flatLen: flat.length,\n sample: flat.slice(0, 4),\n });\n onChange(flat);\n },\n [onChange, min, max, step],\n );\n\n const handleFlip = useCallback(() => {\n const flipped: Array<{ x: number; y: number }> = [];\n for (let i = 0; i + 1 < values.length; i += 2) {\n flipped.push({ x: 1 - values[i], y: values[i + 1] });\n }\n flipped.sort((a, b) => a.x - b.x);\n const out: number[] = [];\n for (const p of flipped) out.push(p.x, p.y);\n onChange(out);\n }, [values, onChange]);\n\n const handleFlipVertical = useCallback(() => {\n const mid = (min + max) / 2;\n const flipped: number[] = new Array(values.length);\n for (let i = 0; i + 1 < values.length; i += 2) {\n flipped[i] = values[i];\n flipped[i + 1] = 2 * mid - values[i + 1];\n }\n onChange(flipped);\n }, [values, min, max, onChange]);\n\n return (\n <div className={s.field}>\n <div className={s.plot}>\n <CurveEditor\n value={points}\n onInput={handleChange}\n domain=\"1d\"\n constrain=\"function\"\n xRange={[0, 1]}\n yRange={[min, max]}\n width={width}\n height={height}\n endpoints=\"pinned-x\"\n addPointMode=\"click-curve\"\n minPoints={2}\n grid={{}}\n history={false}\n />\n {marks && marks.length > 0 && (\n <svg\n className={s.marks}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n aria-hidden=\"true\"\n >\n {marks.map((m) => {\n const color = m.color ?? '#ffcc00';\n if (m.kind === 'band') {\n const x0 = Math.max(0, Math.min(1, m.x[0])) * width;\n const x1 = Math.max(0, Math.min(1, m.x[1])) * width;\n const left = Math.min(x0, x1);\n const w = Math.abs(x1 - x0);\n return (\n <g key={`band-${m.x[0]}-${m.x[1]}-${color}`}>\n <rect x={left} y={0} width={w} height={height} fill={color} fillOpacity={0.4} />\n <line\n x1={left}\n y1={0}\n x2={left}\n y2={height}\n stroke={color}\n strokeOpacity={0.85}\n strokeWidth={1}\n />\n <line\n x1={left + w}\n y1={0}\n x2={left + w}\n y2={height}\n stroke={color}\n strokeOpacity={0.85}\n strokeWidth={1}\n />\n </g>\n );\n }\n const x = Math.max(0, Math.min(1, m.x)) * width;\n return (\n <line\n key={`mark-${m.x}-${color}`}\n x1={x}\n y1={0}\n x2={x}\n y2={height}\n stroke={color}\n strokeWidth={1}\n />\n );\n })}\n </svg>\n )}\n </div>\n <div className={s.actions}>\n <button type=\"button\" className={s.action} onClick={handleFlip}>\n Flip horizontally\n </button>\n <button type=\"button\" className={s.action} onClick={handleFlipVertical}>\n Flip vertically\n </button>\n {defaults && (\n <button\n type=\"button\"\n className={s.action}\n onClick={() => onChange([...defaults])}\n >\n Reset\n </button>\n )}\n </div>\n </div>\n );\n}\n","import { type ReactNode, useState } from 'react';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\nimport { type PropertyMetricProps, type PropertyRowLayout, PropertyRow } from './PropertyPanel';\nimport s from './Properties.module.css';\n\n/** Props for `<DialogRow>`. */\nexport interface DialogRowProps extends PropertyMetricProps {\n label: ReactNode;\n /** What the row shows of the value, on the button that opens the dialog. One\n * line; a longer one is cut off with an ellipsis. */\n summary: ReactNode;\n /** The dialog's body. A function runs only while the dialog is open, as a\n * component — it may use hooks — and is handed `close`. */\n children: ReactNode | ((close: () => void) => ReactNode);\n /** The dialog's heading. Defaults to `label`. */\n title?: ReactNode;\n /** Dialog footer. Defaults to a Done button; `null` draws none. */\n footer?: ReactNode | null;\n layout?: PropertyRowLayout;\n description?: string;\n /** Right-aligned readout shown next to the label — see `<PropertyRow readout>`. */\n readout?: ReactNode;\n /** Take the full width of the enclosing grid — see `<PropertyRow span>`. */\n span?: boolean;\n /** The row is auto — see `<PropertyRow auto>`. */\n auto?: boolean;\n /** Toggles `auto` from the row's label — see `<PropertyRow onAutoChange>`. */\n onAutoChange?: (next: boolean) => void;\n}\n\n/**\n * A row for a value too big to edit in place: it shows a one-line summary on a\n * button, and the button opens a modal holding whatever editor the row is\n * given. The body edits live — the dialog is room, not a transaction.\n */\nexport function DialogRow({\n label,\n summary,\n children,\n title,\n footer,\n layout,\n description,\n readout,\n span,\n density,\n align,\n auto,\n onAutoChange,\n}: DialogRowProps) {\n const [open, setOpen] = useState(false);\n const close = (): void => setOpen(false);\n const name = typeof label === 'string' ? label : undefined;\n return (\n <PropertyRow\n label={label}\n readout={readout}\n layout={layout}\n description={description}\n span={span}\n density={density}\n align={align}\n auto={auto}\n onAutoChange={onAutoChange}\n // A `<label>` hands a click on its text to its button, which would open\n // the dialog from the label — and the label is the auto toggle.\n group\n >\n <button\n type=\"button\"\n className={s.dialogTrigger}\n aria-haspopup=\"dialog\"\n aria-label={name === undefined ? undefined : `Edit ${name}`}\n onClick={() => setOpen(true)}\n >\n <span className={s.dialogSummary}>{summary}</span>\n <span className={s.dialogGlyph} aria-hidden=\"true\">\n …\n </span>\n </button>\n <Dialog\n isOpen={open}\n onOpenChange={setOpen}\n title={title ?? label}\n footer={\n footer === undefined ? (\n <Button variant=\"primary\" onClick={close}>\n Done\n </Button>\n ) : (\n (footer ?? undefined)\n )\n }\n >\n {typeof children === 'function' ? <DialogBody render={children} close={close} /> : children}\n </Dialog>\n </PropertyRow>\n );\n}\n\n/** Calls a function body as a component, so it runs only while the dialog is\n * mounted and may use hooks of its own. */\nfunction DialogBody({\n render,\n close,\n}: {\n render: (close: () => void) => ReactNode;\n close: () => void;\n}) {\n return render(close);\n}\n","import { type ReactNode, useId, useState } from 'react';\nimport { Disclosure } from '../Disclosure';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Properties.module.css';\nimport {\n type PropertyListPack,\n type PropertyMetricProps,\n PropertyNote,\n propertyMetricClass,\n} from './PropertyPanel';\n\n/** Props for `<PropertyGroup>`. */\nexport interface PropertyGroupProps extends PropertyMetricProps, StanceProps {\n /** Title rendered between two rules at the top of the group. */\n title: ReactNode;\n /** Before the title: a drag handle, an ordinal. Clicks here do not fold the group. */\n leading?: ReactNode;\n /** After the title: a summary of the group's value, a remove button. Clicks here do not fold the group. */\n actions?: ReactNode;\n /** Help text for the whole group, drawn under the title and above the\n * rows. `<PropertyRow description>` covers the per-row case. */\n description?: ReactNode;\n /** When true the group renders nothing — useful for conditional sections. */\n hidden?: boolean;\n /**\n * Give the title a twisty that folds the rows away. Implied by any of the\n * three props below, so it is only needed for a group that starts open and\n * keeps its own state.\n */\n collapsible?: boolean;\n /** Start folded. Read once; the group owns the state from then on. */\n defaultCollapsed?: boolean;\n /**\n * Folded or not, as the consumer holds it. Given, the group keeps no state\n * of its own and every toggle arrives at `onCollapsedChange` instead — which\n * is what a panel that remembers its sections past a reload needs.\n */\n collapsed?: boolean;\n onCollapsedChange?: (next: boolean) => void;\n children: ReactNode;\n className?: string;\n /** Take the whole width of a packed grid, like `<PropertyRow span>`: a group\n * lays its own rows out, so half a column leaves them overlapping. */\n span?: boolean;\n /** How rows pack into the 2-column grid — see `<PropertyList pack>`. */\n pack?: PropertyListPack;\n}\n\n/**\n * Visually-bordered group inside a PropertyList. Use to scope a set of\n * related rows under a heading (e.g. \"Aqua\", \"Bevel\", \"Dome\" sections\n * inside a fill effect's controls).\n *\n * A collapsible group keeps its rows mounted and hides them, so a control's\n * local state survives being folded away. `stance` and `tone` work as on\n * `<PropertyPanel>`; a tone also draws the group's leading edge in it, which\n * is how a list of like groups — effects, tails — tells its members apart.\n * `leading` and `actions` put a handle and controls in the title row, and the\n * groups of a `<PropertyList>` reorder with `useReorderDragList`.\n */\nexport function PropertyGroup({\n title,\n leading,\n actions,\n description,\n hidden,\n collapsible,\n defaultCollapsed,\n collapsed,\n onCollapsedChange,\n children,\n className,\n span,\n pack = 'auto-color',\n density,\n align,\n stance,\n tone,\n}: PropertyGroupProps) {\n const bodyId = useId();\n const titleId = useId();\n const [own, setOwn] = useState(defaultCollapsed ?? false);\n const stanced = useStance({ stance, tone });\n if (hidden) return null;\n\n const folds =\n collapsible ??\n (defaultCollapsed !== undefined || collapsed !== undefined || onCollapsedChange !== undefined);\n const folded = folds && (collapsed ?? own);\n const toggle = () => {\n if (collapsed === undefined) setOwn(!folded);\n onCollapsedChange?.(!folded);\n };\n\n const base = `${s.group}${pack === 'pairs' ? ` ${s.groupPairs}` : pack === 'one-up' ? ` ${s.groupOneUp}` : ''}`;\n const cls = propertyMetricClass(span ? `${base} ${s.span}` : base, { density, align }, className);\n // The twisty sits in the title, between the rules, so the two read as one\n // unit, without moving the centered text. The heading is named by the title\n // alone, not the twisty's label too.\n const titled = (\n <h3 className={s.groupTitle} aria-labelledby={folds ? titleId : undefined}>\n <hr />\n <span className={s.groupTitleMid}>\n {folds ? (\n <Disclosure\n open={!folded}\n onToggle={toggle}\n label={typeof title === 'string' ? title : 'this section'}\n controls={bodyId}\n className={s.groupTwisty}\n />\n ) : null}\n <span id={titleId}>{title}</span>\n </span>\n <hr />\n </h3>\n );\n const heading =\n leading === undefined && actions === undefined ? (\n titled\n ) : (\n <div className={s.groupHeadRow}>\n {leading === undefined ? null : <span className={s.groupLeading}>{leading}</span>}\n {titled}\n {actions === undefined ? null : <span className={s.groupActions}>{actions}</span>}\n </div>\n );\n return (\n <div className={cls} {...stanced}>\n {heading}\n {description !== undefined && description !== '' && <PropertyNote>{description}</PropertyNote>}\n <div id={bodyId} className={s.groupBody} hidden={folded}>\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Properties.module.css';\nimport { type PropertyMetricProps, propertyMetricClass } from './PropertyPanel';\n\n/** Props for `<Subpanel>`. */\nexport interface SubpanelProps extends PropertyMetricProps, StanceProps {\n title: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\n/** A typographic divider inside a property list: a small title flanked by a\n * rule. Purely a heading — use `<PropertyGroup>` for a bordered section. A\n * stance or tone colors the title and rule. */\nexport function Subpanel({ title, children, className, density, align, stance, tone }: SubpanelProps) {\n const cls = propertyMetricClass(s.subpanel, { density, align }, className);\n return (\n <div className={cls} {...useStance({ stance, tone })}>\n <h4 className={s.subpanelTitle}>\n <span>{title}</span>\n <hr />\n </h4>\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;ACoCA,SAAgBc,EAAW,EACzB,WACA,QACA,QACA,SACA,UACA,YAAS,KACT,aACA,aACA,YACkB;CAClB,IAAMC,IAAyBC,QAAc;EAC3C,IAAMC,IAAsB,CAAC;EAC7B,KAAK,IAAIC,IAAI,GAAGA,IAAI,IAAIC,EAAO,QAAQ,KAAK,GAAG,EAAI,KAAK;GAAE,GAAGA,EAAOD;GAAI,GAAGC,EAAOD,IAAI;EAAG,CAAC;EAC1F,OAAOD;CACT,GAAG,CAACE,CAAM,CAAC,GAELC,IAAeC,GAClB,MAAyB;EACxB,IAAMC,IAAqB,MAAMC,EAAK,SAAS,CAAC;EAChD,KAAK,IAAIL,IAAI,GAAGA,IAAIK,EAAK,QAAQ,KAAK;GACpC,IAAMC,IAAQ,KAAK,MAAMD,EAAKL,EAAE,CAAC,IAAIO,CAAI,IAAIA,GACvCC,IAAI,KAAK,IAAIC,GAAK,KAAK,IAAIC,GAAKJ,CAAK,CAAC;GAE5C,AADA,EAAKN,IAAI,KAAKK,EAAKL,EAAE,CAAC,GACtB,EAAKA,IAAI,IAAI,KAAKQ;EACpB;EAMA,AALAtB,EAAK,eAAe,gBAAgB;GAClC,MAAMmB,EAAK;GACX,SAASD,EAAK;GACd,QAAQA,EAAK,MAAM,GAAG,CAAC;EACzB,CAAC,GACDO,EAASP,CAAI;CACf,GACA;EAACO;EAAUF;EAAKC;EAAKH;CAAI,CAC3B,GAEMK,IAAaT,QAAkB;EACnC,IAAMU,IAA2C,CAAC;EAClD,KAAK,IAAIb,IAAI,GAAGA,IAAI,IAAIC,EAAO,QAAQ,KAAK,GAC1C,EAAQ,KAAK;GAAE,GAAG,IAAIA,EAAOD;GAAI,GAAGC,EAAOD,IAAI;EAAG,CAAC;EAErD,EAAQ,MAAM,GAAG,MAAMc,EAAE,IAAIC,EAAE,CAAC;EAChC,IAAMhB,IAAgB,CAAC;EACvB,KAAK,IAAMiB,KAAKH,GAAS,EAAI,KAAKG,EAAE,GAAGA,EAAE,CAAC;EAC1C,EAASjB,CAAG;CACd,GAAG,CAACE,GAAQU,CAAQ,CAAC,GAEfM,IAAqBd,QAAkB;EAC3C,IAAMe,KAAOT,IAAMC,KAAO,GACpBG,IAAwB,MAAMZ,EAAO,MAAM;EACjD,KAAK,IAAID,IAAI,GAAGA,IAAI,IAAIC,EAAO,QAAQ,KAAK,GAE1C,AADA,EAAQD,KAAKC,EAAOD,IACpB,EAAQA,IAAI,KAAK,IAAIkB,IAAMjB,EAAOD,IAAI;EAExC,EAASa,CAAO;CAClB,GAAG;EAACZ;EAAQQ;EAAKC;EAAKC;CAAQ,CAAC;CAE/B,OACE,kBAAC,OAAD;EAAK,WAAW7B,EAAE;EAAlB,UAAA,CACE,kBAAC,OAAD;GAAK,WAAWA,EAAE;GAAlB,UAAA,CACE,kBAACO,GAAD;IACE,OAAOQ;IACP,SAASK;IACT,QAAO;IACP,WAAU;IACV,QAAQ,CAAC,GAAG,CAAC;IACb,QAAQ,CAACO,GAAKC,CAAG;IACV;IACC;IACR,WAAU;IACV,cAAa;IACb,WAAW;IACX,MAAM,CAAC;IACP,SAAS;GACV,CAAA,GACAS,KAASA,EAAM,SAAS,KACvB,kBAAC,OAAD;IACE,WAAWrC,EAAE;IACN;IACC;IACR,SAAS,OAAOsC,EAAM,GAAGC;IACzB,eAAY;IAEX,UAAAF,EAAM,KAAK,MAAM;KAChB,IAAMG,IAAQC,EAAE,SAAS;KACzB,IAAIA,EAAE,SAAS,QAAQ;MACrB,IAAMC,IAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGD,EAAE,EAAE,EAAE,CAAC,IAAIH,GACxCK,IAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGF,EAAE,EAAE,EAAE,CAAC,IAAIH,GACxCM,IAAO,KAAK,IAAIF,GAAIC,CAAE,GACtBE,IAAI,KAAK,IAAIF,IAAKD,CAAE;MAC1B,OACE,kBAAC,KAAD,EAAA,UAAA;OACE,kBAAC,QAAD;QAAM,GAAGE;QAAM,GAAG;QAAG,OAAOC;QAAW;QAAQ,MAAML;QAAO,aAAa;OAAM,CAAA;OAC/E,kBAAC,QAAD;QACE,IAAII;QACJ,IAAI;QACJ,IAAIA;QACJ,IAAIL;QACJ,QAAQC;QACR,eAAe;QACf,aAAa;OACd,CAAA;OACD,kBAAC,QAAD;QACE,IAAII,IAAOC;QACX,IAAI;QACJ,IAAID,IAAOC;QACX,IAAIN;QACJ,QAAQC;QACR,eAAe;QACf,aAAa;OACd,CAAA;MACA,EAAA,GApBK,QAAQC,EAAE,EAAE,GAAG,GAAGA,EAAE,EAAE,GAAG,GAAGD,GAoBjC;KAEP;KACA,IAAMM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGL,EAAE,CAAC,CAAC,IAAIH;KAC1C,OACE,kBAAC,QAAD;MAEE,IAAIQ;MACJ,IAAI;MACJ,IAAIA;MACJ,IAAIP;MACJ,QAAQC;MACR,aAAa;KACd,GAPM,QAAQC,EAAE,EAAE,GAAGD,GAOrB;IAEL,CAAC;GACE,CAAA,CAEJ;EACL,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAWxC,EAAE;GAAlB,UAAA;IACE,kBAAC,UAAD;KAAQ,MAAK;KAAS,WAAWA,EAAE;KAAQ,SAAS8B;KAAY,UAAA;IAExD,CAAA;IACR,kBAAC,UAAD;KAAQ,MAAK;KAAS,WAAW9B,EAAE;KAAQ,SAASmC;KAAoB,UAAA;IAEhE,CAAA;IACPY,KACC,kBAAC,UAAD;KACE,MAAK;KACL,WAAW/C,EAAE;KACb,eAAe6B,EAAS,CAAC,GAAGkB,CAAQ,CAAC;KACtC,UAAA;IAEO,CAAA;GAEP;EACF,CAAA,CAAA;;AAET;;;ACrJA,SAAgBC,EAAU,EACxB,UACA,YACA,aACA,UACA,WACA,WACA,gBACA,YACA,SACA,YACA,UACA,SACA,mBACiB;CACjB,IAAM,CAACC,GAAMC,KAAWC,EAAS,EAAK,GAChCC,UAAoBF,EAAQ,EAAK,GACjCG,IAAO,OAAOC,KAAU,WAAWA,IAAQ,KAAA;CACjD,OACE,kBAAC1C,GAAD;EACS;EACE;EACD;EACK;EACP;EACG;EACF;EACD;EACQ;EAGd,OAAA;EAZF,UAAA,CAcE,kBAAC,UAAD;GACE,MAAK;GACL,WAAWX,EAAE;GACb,iBAAc;GACd,cAAYoD,MAAS,KAAA,IAAY,KAAA,IAAY,QAAQA;GACrD,eAAeH,EAAQ,EAAI;GAL7B,UAAA,CAOE,kBAAC,QAAD;IAAM,WAAWjD,EAAE;IAAgB,UAAAsD;GAAc,CAAA,GACjD,kBAAC,QAAD;IAAM,WAAWtD,EAAE;IAAa,eAAY;IAAO,UAAA;GAE7C,CAAA,CACA;EACR,CAAA,GAAA,kBAACO,GAAD;GACE,QAAQyC;GACR,cAAcC;GACd,OAAOM,KAASF;GAChB,QACEG,MAAW,KAAA,IACT,kBAACpD,GAAD;IAAQ,SAAQ;IAAU,SAAS+C;IAAO,UAAA;GAElC,CAAA,IAEPK,KAAU,KAAA;GAId,UAAA,OAAOC,KAAa,aAAa,kBAACC,GAAD;IAAY,QAAQD;IAAiB;GAAQ,CAAA,IAAIA;EAC7E,CAAA,CACG;;AAEjB;AAIA,SAASC,EAAW,EAClB,WACA,YAIC;CACD,OAAOC,EAAOR,CAAK;AACrB;;;ACnDA,SAAgBS,EAAc,EAC5B,UACA,YACA,YACA,gBACA,WACA,gBACA,qBACA,cACA,sBACA,aACA,cACA,SACA,UAAO,cACP,YACA,UACA,WACA,WACqB;CACrB,IAAMC,IAASC,EAAM,GACfC,IAAUD,EAAM,GAChB,CAACE,GAAKC,KAAUf,EAASgB,KAAoB,EAAK,GAClDC,IAAUC,EAAU;EAAE;EAAQ;CAAK,CAAC;CAC1C,IAAIC,GAAQ,OAAO;CAEnB,IAAMC,IACJC,MACCL,MAAqB,KAAA,KAAaM,MAAc,KAAA,KAAaC,MAAsB,KAAA,IAChFC,IAASJ,MAAUE,KAAaR,IAChCW,UAAe;EAEnB,AADIH,MAAc,KAAA,KAAWP,EAAO,CAACS,CAAM,GAC3CD,IAAoB,CAACC,CAAM;CAC7B,GAEME,IAAO,GAAG3E,EAAE,QAAQ4E,MAAS,UAAU,IAAI5E,EAAE,eAAe4E,MAAS,WAAW,IAAI5E,EAAE,eAAe,MACrG6E,IAAMtE,EAAoBuE,IAAO,GAAGH,EAAK,GAAG3E,EAAE,SAAS2E,GAAM;EAAE;EAAS;CAAM,GAAGI,CAAS,GAI1FC,IACJ,kBAAC,MAAD;EAAI,WAAWhF,EAAE;EAAY,mBAAiBqE,IAAQP,IAAU,KAAA;EAAhE,UAAA;GACE,kBAAC,MAAD,CAAK,CAAA;GACL,kBAAC,QAAD;IAAM,WAAW9D,EAAE;IAAnB,UAAA,CACGqE,IACC,kBAACjE,GAAD;KACE,MAAM,CAACqE;KACP,UAAUC;KACV,OAAO,OAAOpB,KAAU,WAAWA,IAAQ;KAC3C,UAAUM;KACV,WAAW5D,EAAE;IACd,CAAA,IACC,MACJ,kBAAC,QAAD;KAAM,IAAI8D;KAAU,UAAAR;IAAY,CAAA,CAC5B;;GACN,kBAAC,MAAD,CAAK,CAAA;EACH;KAEA2B,IACJC,MAAY,KAAA,KAAaC,MAAY,KAAA,IACnCH,IAEA,kBAAC,OAAD;EAAK,WAAWhF,EAAE;EAAlB,UAAA;GACGkF,MAAY,KAAA,IAAY,OAAO,kBAAC,QAAD;IAAM,WAAWlF,EAAE;IAAe,UAAAkF;GAAc,CAAA;GAC/EF;GACAG,MAAY,KAAA,IAAY,OAAO,kBAAC,QAAD;IAAM,WAAWnF,EAAE;IAAe,UAAAmF;GAAc,CAAA;EAC7E;;CAET,OACE,kBAAC,OAAD;EAAK,WAAWN;EAAK,GAAIX;EAAzB,UAAA;GACGe;GACAG,MAAgB,KAAA,KAAaA,MAAgB,MAAM,kBAAC5E,GAAD,EAAA,UAAe4E,EAA0B,CAAA;GAC7F,kBAAC,OAAD;IAAK,IAAIxB;IAAQ,WAAW5D,EAAE;IAAW,QAAQyE;IAC9C;GACE,CAAA;EACF;;AAET;;;ACzHA,SAAgBY,EAAS,EAAE,UAAO,aAAU,cAAW,YAAS,UAAO,WAAQ,WAAuB;CACpG,IAAMR,IAAMtE,EAAoBN,EAAE,UAAU;EAAE;EAAS;CAAM,GAAG8E,CAAS;CACzE,OACE,kBAAC,OAAD;EAAK,WAAWF;EAAK,GAAIV,EAAU;GAAE;GAAQ;EAAK,CAAC;EAAnD,UAAA,CACE,kBAAC,MAAD;GAAI,WAAWlE,EAAE;GAAjB,UAAA,CACE,kBAAC,QAAD,EAAA,UAAOqD,EAAY,CAAA,GACnB,kBAAC,MAAD,CAAK,CAAA,CACH;EACH,CAAA,GAAAE,CACE;;AAET"}
1
+ {"version":3,"file":"Properties-D15c8NP-.js","names":["s","s","s","s","dlog","Button","Disclosure","CurveEditor","Dialog","PropertyNote","propertyMetricClass","PropertyRow","Properties_module_default","CurveField_module_default","CurveField","points","useMemo","out","i","values","handleChange","useCallback","flat","next","ySnap","step","y","min","max","onChange","handleFlip","flipped","a","b","p","handleFlipVertical","mid","marks","width","height","color","m","x0","x1","left","w","x","defaults","DialogRow","open","setOpen","useState","close","name","label","summary","title","footer","children","DialogBody","render","PropertyGroup","bodyId","useId","titleId","own","setOwn","defaultCollapsed","stanced","useStance","hidden","folds","collapsible","collapsed","onCollapsedChange","folded","toggle","base","pack","cls","span","className","titled","heading","leading","actions","description","Subpanel"],"sources":["../../src/components/Properties/CurveField.module.css","../../src/components/Properties/CurveField.tsx","../../src/components/Properties/DialogRow.tsx","../../src/components/Properties/PropertyGroup.tsx","../../src/components/Properties/Subpanel.tsx"],"sourcesContent":[".field {\n display: grid;\n gap: var(--wzl-space-3);\n grid-column: 1 / -1;\n box-sizing: border-box;\n}\n\n.field * {\n box-sizing: border-box;\n}\n\n.plot {\n position: relative;\n width: 100%;\n}\n\n.marks {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n.actions {\n display: flex;\n gap: var(--wzl-space-3);\n justify-self: start;\n}\n\n.action {\n background: transparent;\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg);\n padding: var(--wzl-space-2) var(--wzl-space-5);\n font: inherit;\n font-size: var(--wzl-font-size-sm);\n cursor: pointer;\n}\n\n.action:hover {\n background: var(--wzl-surface-raised);\n}\n","import { useCallback, useMemo } from 'react';\nimport { dlog } from '../../dlog';\nimport { type ControlPoint, CurveEditor } from '../CurveEditor';\nimport s from './CurveField.module.css';\n\n/** An annotation drawn over a curve plot: a shaded band across a range of x,\n * or a vertical line at one x. */\nexport type CurveMark =\n | { kind: 'band'; x: [number, number]; color?: string }\n | { kind: 'line'; x: number; color?: string };\n\n/** Props for `<CurveField>`. */\nexport interface CurveFieldProps {\n /** Flat [x0, y0, x1, y1, …] — matches how curve-as-array configs\n * serialize in JSON snapshots. */\n values: number[];\n min: number;\n max: number;\n step: number;\n /** Plot width in CSS px. Caller sizes (typically uses a ResizeObserver). */\n width: number;\n /** Plot height in CSS px. Default 110. */\n height?: number;\n /** Flat default curve. When provided, a Reset button restores it. */\n defaults?: readonly number[];\n onChange: (next: number[]) => void;\n /** Optional vertical marks overlaid on the plot (e.g. landmarks). */\n marks?: readonly CurveMark[];\n}\n\n/**\n * A function-domain (y = f(x), x ∈ [0,1]) curve editor with per-stop\n * numeric readouts and flip buttons. Wraps weasel-ui's\n * `CurveEditor`; consumers wanting the raw editor (2D paths,\n * custom anchors) should import that instead.\n */\nexport function CurveField({\n values,\n min,\n max,\n step,\n width,\n height = 110,\n defaults,\n onChange,\n marks,\n}: CurveFieldProps) {\n const points: ControlPoint[] = useMemo(() => {\n const out: ControlPoint[] = [];\n for (let i = 0; i + 1 < values.length; i += 2) out.push({ x: values[i], y: values[i + 1] });\n return out;\n }, [values]);\n\n const handleChange = useCallback(\n (next: ControlPoint[]) => {\n const flat: number[] = new Array(next.length * 2);\n for (let i = 0; i < next.length; i++) {\n const ySnap = Math.round(next[i].y / step) * step;\n const y = Math.max(min, Math.min(max, ySnap));\n flat[i * 2] = next[i].x;\n flat[i * 2 + 1] = y;\n }\n dlog('curve-field', 'handleChange', {\n nLen: next.length,\n flatLen: flat.length,\n sample: flat.slice(0, 4),\n });\n onChange(flat);\n },\n [onChange, min, max, step],\n );\n\n const handleFlip = useCallback(() => {\n const flipped: Array<{ x: number; y: number }> = [];\n for (let i = 0; i + 1 < values.length; i += 2) {\n flipped.push({ x: 1 - values[i], y: values[i + 1] });\n }\n flipped.sort((a, b) => a.x - b.x);\n const out: number[] = [];\n for (const p of flipped) out.push(p.x, p.y);\n onChange(out);\n }, [values, onChange]);\n\n const handleFlipVertical = useCallback(() => {\n const mid = (min + max) / 2;\n const flipped: number[] = new Array(values.length);\n for (let i = 0; i + 1 < values.length; i += 2) {\n flipped[i] = values[i];\n flipped[i + 1] = 2 * mid - values[i + 1];\n }\n onChange(flipped);\n }, [values, min, max, onChange]);\n\n return (\n <div className={s.field}>\n <div className={s.plot}>\n <CurveEditor\n value={points}\n onInput={handleChange}\n domain=\"1d\"\n constrain=\"function\"\n xRange={[0, 1]}\n yRange={[min, max]}\n width={width}\n height={height}\n endpoints=\"pinned-x\"\n addPointMode=\"click-curve\"\n minPoints={2}\n grid={{}}\n history={false}\n />\n {marks && marks.length > 0 && (\n <svg\n className={s.marks}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n aria-hidden=\"true\"\n >\n {marks.map((m) => {\n const color = m.color ?? '#ffcc00';\n if (m.kind === 'band') {\n const x0 = Math.max(0, Math.min(1, m.x[0])) * width;\n const x1 = Math.max(0, Math.min(1, m.x[1])) * width;\n const left = Math.min(x0, x1);\n const w = Math.abs(x1 - x0);\n return (\n <g key={`band-${m.x[0]}-${m.x[1]}-${color}`}>\n <rect x={left} y={0} width={w} height={height} fill={color} fillOpacity={0.4} />\n <line\n x1={left}\n y1={0}\n x2={left}\n y2={height}\n stroke={color}\n strokeOpacity={0.85}\n strokeWidth={1}\n />\n <line\n x1={left + w}\n y1={0}\n x2={left + w}\n y2={height}\n stroke={color}\n strokeOpacity={0.85}\n strokeWidth={1}\n />\n </g>\n );\n }\n const x = Math.max(0, Math.min(1, m.x)) * width;\n return (\n <line\n key={`mark-${m.x}-${color}`}\n x1={x}\n y1={0}\n x2={x}\n y2={height}\n stroke={color}\n strokeWidth={1}\n />\n );\n })}\n </svg>\n )}\n </div>\n <div className={s.actions}>\n <button type=\"button\" className={s.action} onClick={handleFlip}>\n Flip horizontally\n </button>\n <button type=\"button\" className={s.action} onClick={handleFlipVertical}>\n Flip vertically\n </button>\n {defaults && (\n <button\n type=\"button\"\n className={s.action}\n onClick={() => onChange([...defaults])}\n >\n Reset\n </button>\n )}\n </div>\n </div>\n );\n}\n","import { type ReactNode, useState } from 'react';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\nimport { type PropertyMetricProps, type PropertyRowLayout, PropertyRow } from './PropertyPanel';\nimport s from './Properties.module.css';\n\n/** Props for `<DialogRow>`. */\nexport interface DialogRowProps extends PropertyMetricProps {\n label: ReactNode;\n /** What the row shows of the value, on the button that opens the dialog. One\n * line; a longer one is cut off with an ellipsis. */\n summary: ReactNode;\n /** The dialog's body. A function runs only while the dialog is open, as a\n * component — it may use hooks — and is handed `close`. */\n children: ReactNode | ((close: () => void) => ReactNode);\n /** The dialog's heading. Defaults to `label`. */\n title?: ReactNode;\n /** Dialog footer. Defaults to a Done button; `null` draws none. */\n footer?: ReactNode | null;\n layout?: PropertyRowLayout;\n description?: string;\n /** Right-aligned readout shown next to the label — see `<PropertyRow readout>`. */\n readout?: ReactNode;\n /** Take the full width of the enclosing grid — see `<PropertyRow span>`. */\n span?: boolean;\n /** The row is auto — see `<PropertyRow auto>`. */\n auto?: boolean;\n /** Toggles `auto` from the row's label — see `<PropertyRow onAutoChange>`. */\n onAutoChange?: (next: boolean) => void;\n}\n\n/**\n * A row for a value too big to edit in place: it shows a one-line summary on a\n * button, and the button opens a modal holding whatever editor the row is\n * given. The body edits live — the dialog is room, not a transaction.\n */\nexport function DialogRow({\n label,\n summary,\n children,\n title,\n footer,\n layout,\n description,\n readout,\n span,\n density,\n align,\n auto,\n onAutoChange,\n}: DialogRowProps) {\n const [open, setOpen] = useState(false);\n const close = (): void => setOpen(false);\n const name = typeof label === 'string' ? label : undefined;\n return (\n <PropertyRow\n label={label}\n readout={readout}\n layout={layout}\n description={description}\n span={span}\n density={density}\n align={align}\n auto={auto}\n onAutoChange={onAutoChange}\n // A `<label>` hands a click on its text to its button, which would open\n // the dialog from the label — and the label is the auto toggle.\n group\n >\n <button\n type=\"button\"\n className={s.dialogTrigger}\n aria-haspopup=\"dialog\"\n aria-label={name === undefined ? undefined : `Edit ${name}`}\n onClick={() => setOpen(true)}\n >\n <span className={s.dialogSummary}>{summary}</span>\n <span className={s.dialogGlyph} aria-hidden=\"true\">\n …\n </span>\n </button>\n <Dialog\n isOpen={open}\n onOpenChange={setOpen}\n title={title ?? label}\n footer={\n footer === undefined ? (\n <Button variant=\"primary\" onClick={close}>\n Done\n </Button>\n ) : (\n (footer ?? undefined)\n )\n }\n >\n {typeof children === 'function' ? <DialogBody render={children} close={close} /> : children}\n </Dialog>\n </PropertyRow>\n );\n}\n\n/** Calls a function body as a component, so it runs only while the dialog is\n * mounted and may use hooks of its own. */\nfunction DialogBody({\n render,\n close,\n}: {\n render: (close: () => void) => ReactNode;\n close: () => void;\n}) {\n return render(close);\n}\n","import { type ReactNode, useId, useState } from 'react';\nimport { Disclosure } from '../Disclosure';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Properties.module.css';\nimport {\n type PropertyListPack,\n type PropertyMetricProps,\n PropertyNote,\n propertyMetricClass,\n} from './PropertyPanel';\n\n/** Props for `<PropertyGroup>`. */\nexport interface PropertyGroupProps extends PropertyMetricProps, StanceProps {\n /** Title rendered between two rules at the top of the group. */\n title: ReactNode;\n /** Before the title: a drag handle, an ordinal. Clicks here do not fold the group. */\n leading?: ReactNode;\n /** After the title: a summary of the group's value, a remove button. Clicks here do not fold the group. */\n actions?: ReactNode;\n /** Help text for the whole group, drawn under the title and above the\n * rows. `<PropertyRow description>` covers the per-row case. */\n description?: ReactNode;\n /** When true the group renders nothing — useful for conditional sections. */\n hidden?: boolean;\n /**\n * Give the title a twisty that folds the rows away. Implied by any of the\n * three props below, so it is only needed for a group that starts open and\n * keeps its own state.\n */\n collapsible?: boolean;\n /** Start folded. Read once; the group owns the state from then on. */\n defaultCollapsed?: boolean;\n /**\n * Folded or not, as the consumer holds it. Given, the group keeps no state\n * of its own and every toggle arrives at `onCollapsedChange` instead — which\n * is what a panel that remembers its sections past a reload needs.\n */\n collapsed?: boolean;\n onCollapsedChange?: (next: boolean) => void;\n children: ReactNode;\n className?: string;\n /** Take the whole width of a packed grid, like `<PropertyRow span>`: a group\n * lays its own rows out, so half a column leaves them overlapping. */\n span?: boolean;\n /** How rows pack into the 2-column grid — see `<PropertyList pack>`. */\n pack?: PropertyListPack;\n}\n\n/**\n * Visually-bordered group inside a PropertyList. Use to scope a set of\n * related rows under a heading (e.g. \"Aqua\", \"Bevel\", \"Dome\" sections\n * inside a fill effect's controls).\n *\n * A collapsible group keeps its rows mounted and hides them, so a control's\n * local state survives being folded away. `stance` and `tone` work as on\n * `<PropertyPanel>`; a tone also draws the group's leading edge in it, which\n * is how a list of like groups — effects, tails — tells its members apart.\n * `leading` and `actions` put a handle and controls in the title row, and the\n * groups of a `<PropertyList>` reorder with `useReorderDragList`.\n */\nexport function PropertyGroup({\n title,\n leading,\n actions,\n description,\n hidden,\n collapsible,\n defaultCollapsed,\n collapsed,\n onCollapsedChange,\n children,\n className,\n span,\n pack = 'auto-color',\n density,\n align,\n stance,\n tone,\n}: PropertyGroupProps) {\n const bodyId = useId();\n const titleId = useId();\n const [own, setOwn] = useState(defaultCollapsed ?? false);\n const stanced = useStance({ stance, tone });\n if (hidden) return null;\n\n const folds =\n collapsible ??\n (defaultCollapsed !== undefined || collapsed !== undefined || onCollapsedChange !== undefined);\n const folded = folds && (collapsed ?? own);\n const toggle = () => {\n if (collapsed === undefined) setOwn(!folded);\n onCollapsedChange?.(!folded);\n };\n\n const base = `${s.group}${pack === 'pairs' ? ` ${s.groupPairs}` : pack === 'one-up' ? ` ${s.groupOneUp}` : ''}`;\n const cls = propertyMetricClass(span ? `${base} ${s.span}` : base, { density, align }, className);\n // The twisty sits in the title, between the rules, so the two read as one\n // unit, without moving the centered text. The heading is named by the title\n // alone, not the twisty's label too.\n const titled = (\n <h3 className={s.groupTitle} aria-labelledby={folds ? titleId : undefined}>\n <hr />\n <span className={s.groupTitleMid}>\n {folds ? (\n <Disclosure\n open={!folded}\n onToggle={toggle}\n label={typeof title === 'string' ? title : 'this section'}\n controls={bodyId}\n className={s.groupTwisty}\n />\n ) : null}\n <span id={titleId}>{title}</span>\n </span>\n <hr />\n </h3>\n );\n const heading =\n leading === undefined && actions === undefined ? (\n titled\n ) : (\n <div className={s.groupHeadRow}>\n {leading === undefined ? null : <span className={s.groupLeading}>{leading}</span>}\n {titled}\n {actions === undefined ? null : <span className={s.groupActions}>{actions}</span>}\n </div>\n );\n return (\n <div className={cls} {...stanced}>\n {heading}\n {description !== undefined && description !== '' && <PropertyNote>{description}</PropertyNote>}\n <div id={bodyId} className={s.groupBody} hidden={folded}>\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Properties.module.css';\nimport { type PropertyMetricProps, propertyMetricClass } from './PropertyPanel';\n\n/** Props for `<Subpanel>`. */\nexport interface SubpanelProps extends PropertyMetricProps, StanceProps {\n title: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\n/** A typographic divider inside a property list: a small title flanked by a\n * rule. Purely a heading — use `<PropertyGroup>` for a bordered section. A\n * stance or tone colors the title and rule. */\nexport function Subpanel({ title, children, className, density, align, stance, tone }: SubpanelProps) {\n const cls = propertyMetricClass(s.subpanel, { density, align }, className);\n return (\n <div className={cls} {...useStance({ stance, tone })}>\n <h4 className={s.subpanelTitle}>\n <span>{title}</span>\n <hr />\n </h4>\n {children}\n </div>\n );\n}\n"],"mappings":"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"}