@weasel-js/ui 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) 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 → BandEditor-B4jUAHQ8.js} +13 -13
  6. package/dist/chunks/BandEditor-B4jUAHQ8.js.map +1 -0
  7. package/dist/chunks/{Button-BIdXHQOx.js → Button-XB-T75YL.js} +2 -2
  8. package/dist/chunks/{Button-BIdXHQOx.js.map → Button-XB-T75YL.js.map} +1 -1
  9. package/dist/chunks/{ButtonBar-DIQTe5GQ.js → ButtonBar-CIMKPPRS.js} +7 -9
  10. package/dist/chunks/{ButtonBar-DIQTe5GQ.js.map → ButtonBar-CIMKPPRS.js.map} +1 -1
  11. package/dist/chunks/Callout-BUn0dP_S.js +115 -0
  12. package/dist/chunks/Callout-BUn0dP_S.js.map +1 -0
  13. package/dist/chunks/Checkbox-DFn-x0JO.js +37 -0
  14. package/dist/chunks/Checkbox-DFn-x0JO.js.map +1 -0
  15. package/dist/chunks/{CloseButton-C2J7wVfo.js → CloseButton-BmNmRVtb.js} +3 -3
  16. package/dist/chunks/{CloseButton-C2J7wVfo.js.map → CloseButton-BmNmRVtb.js.map} +1 -1
  17. package/dist/chunks/ColorField-BwlelY26.js +90 -0
  18. package/dist/chunks/ColorField-BwlelY26.js.map +1 -0
  19. package/dist/chunks/{ColorModeControl-BewxA0rX.js → ColorModeControl-DaVJ-SyX.js} +3 -3
  20. package/dist/chunks/{ColorModeControl-BewxA0rX.js.map → ColorModeControl-DaVJ-SyX.js.map} +1 -1
  21. package/dist/chunks/ComboBox-DKln_mOd.js +138 -0
  22. package/dist/chunks/ComboBox-DKln_mOd.js.map +1 -0
  23. package/dist/chunks/{CurveEditor-DUVjd25R.js → CurveEditor-0EE00D6s.js} +90 -87
  24. package/dist/chunks/CurveEditor-0EE00D6s.js.map +1 -0
  25. package/dist/chunks/{DataGrid-LZ2JgY2Y.js → DataGrid-CmHJe57v.js} +23 -18
  26. package/dist/chunks/DataGrid-CmHJe57v.js.map +1 -0
  27. package/dist/chunks/DetailList-BpU50XVe.js +54 -0
  28. package/dist/chunks/DetailList-BpU50XVe.js.map +1 -0
  29. package/dist/chunks/{DetentSlider-5uQPFucv.js → DetentSlider-DNTAk8xP.js} +2 -2
  30. package/dist/chunks/{DetentSlider-5uQPFucv.js.map → DetentSlider-DNTAk8xP.js.map} +1 -1
  31. package/dist/chunks/{Dialog-DGFutQ--.js → Dialog-DKfsk5VN.js} +3 -3
  32. package/dist/chunks/{Dialog-DGFutQ--.js.map → Dialog-DKfsk5VN.js.map} +1 -1
  33. package/dist/chunks/{DragGhost-B5_hb9W9.js → DragGhost-BeYDJyLZ.js} +2 -2
  34. package/dist/chunks/{DragGhost-B5_hb9W9.js.map → DragGhost-BeYDJyLZ.js.map} +1 -1
  35. package/dist/chunks/{FallthroughDiagram-BEHiM5IS.js → FallthroughDiagram-CS1IhQaU.js} +16 -16
  36. package/dist/chunks/FallthroughDiagram-CS1IhQaU.js.map +1 -0
  37. package/dist/chunks/Field-DiX_WByH.js +25 -0
  38. package/dist/chunks/Field-DiX_WByH.js.map +1 -0
  39. package/dist/chunks/FillStrokeSwatch-C4h3rUFM.js +112 -0
  40. package/dist/chunks/FillStrokeSwatch-C4h3rUFM.js.map +1 -0
  41. package/dist/chunks/{FontFamilySelect-DkRgNtag.js → FontFamilySelect-DEvMXyZd.js} +2 -2
  42. package/dist/chunks/FontFamilySelect-DEvMXyZd.js.map +1 -0
  43. package/dist/chunks/FontWeightSelect-BLQ_LMJF.js +49 -0
  44. package/dist/chunks/FontWeightSelect-BLQ_LMJF.js.map +1 -0
  45. package/dist/chunks/{GestureRoute-C_YGl7bJ.js → GestureRoute-BXESrHI0.js} +2 -2
  46. package/dist/chunks/{GestureRoute-C_YGl7bJ.js.map → GestureRoute-BXESrHI0.js.map} +1 -1
  47. package/dist/chunks/GradientEditor-DD2OjQtn.js +325 -0
  48. package/dist/chunks/GradientEditor-DD2OjQtn.js.map +1 -0
  49. package/dist/chunks/{Icon-CcVjdq2C.js → Icon--B1ME-6c.js} +3 -1
  50. package/dist/chunks/Icon--B1ME-6c.js.map +1 -0
  51. package/dist/chunks/{InlineRange-P01ABSzo.js → InlineRange-DPjIsJB3.js} +3 -3
  52. package/dist/chunks/InlineRange-DPjIsJB3.js.map +1 -0
  53. package/dist/chunks/{Input-CHmkfYaD.js → Input-D7SDKbST.js} +10 -15
  54. package/dist/chunks/Input-D7SDKbST.js.map +1 -0
  55. package/dist/chunks/{ItemList-Cm-HUWCi.js → ItemList-CRu9y7hL.js} +2 -2
  56. package/dist/chunks/ItemList-CRu9y7hL.js.map +1 -0
  57. package/dist/chunks/{Jog-DRmfrkCg.js → Jog-BrkzdGV2.js} +8 -8
  58. package/dist/chunks/Jog-BrkzdGV2.js.map +1 -0
  59. package/dist/chunks/{LayerList-wCI1EueM.js → LayerList-Bxj1N6bj.js} +151 -153
  60. package/dist/chunks/LayerList-Bxj1N6bj.js.map +1 -0
  61. package/dist/chunks/ListEditor-OQDzG4A5.js +72 -0
  62. package/dist/chunks/ListEditor-OQDzG4A5.js.map +1 -0
  63. package/dist/chunks/MenuButton-TAFg88Lp.js +75 -0
  64. package/dist/chunks/MenuButton-TAFg88Lp.js.map +1 -0
  65. package/dist/chunks/MeshEditor-DWpvg8H6.js +199 -0
  66. package/dist/chunks/MeshEditor-DWpvg8H6.js.map +1 -0
  67. package/dist/chunks/{NumberField-BnJxcazc.js → NumberField-DS0WSiin.js} +26 -23
  68. package/dist/chunks/NumberField-DS0WSiin.js.map +1 -0
  69. package/dist/chunks/{OptionsBar-ujxYidhj.js → OptionsBar-DeTAjVb7.js} +6 -8
  70. package/dist/chunks/{OptionsBar-ujxYidhj.js.map → OptionsBar-DeTAjVb7.js.map} +1 -1
  71. package/dist/chunks/PaintField-BdmQM53v.js +63 -0
  72. package/dist/chunks/PaintField-BdmQM53v.js.map +1 -0
  73. package/dist/chunks/PaintInput-DaQMeBsI.js +132 -0
  74. package/dist/chunks/PaintInput-DaQMeBsI.js.map +1 -0
  75. package/dist/chunks/PatternPicker-B3HcMZWg.js +135 -0
  76. package/dist/chunks/PatternPicker-B3HcMZWg.js.map +1 -0
  77. package/dist/chunks/{Plot2D-CTXHkL5p.js → Plot2D-BrvQS0dh.js} +7 -7
  78. package/dist/chunks/Plot2D-BrvQS0dh.js.map +1 -0
  79. package/dist/chunks/{PointPlotter-ldI4RrU1.js → PointPlotter-BBXpQ_QD.js} +2 -2
  80. package/dist/chunks/{PointPlotter-ldI4RrU1.js.map → PointPlotter-BBXpQ_QD.js.map} +1 -1
  81. package/dist/chunks/{Powerline-DNyH885r.js → Powerline-6wIFmDik.js} +2 -2
  82. package/dist/chunks/{Powerline-DNyH885r.js.map → Powerline-6wIFmDik.js.map} +1 -1
  83. package/dist/chunks/{Prefs-ByA-x51i.js → Prefs-C4MZ28SX.js} +118 -95
  84. package/dist/chunks/Prefs-C4MZ28SX.js.map +1 -0
  85. package/dist/chunks/{Properties-DmAeQ3mk.js → Properties-DseN56WI.js} +29 -29
  86. package/dist/chunks/{Properties-DmAeQ3mk.js.map → Properties-DseN56WI.js.map} +1 -1
  87. package/dist/chunks/PropertyField-BbNqK8xr.js +743 -0
  88. package/dist/chunks/PropertyField-BbNqK8xr.js.map +1 -0
  89. package/dist/chunks/{RadioGroup-Bh4-12e-.js → RadioGroup-B70_M-gT.js} +2 -2
  90. package/dist/chunks/{RadioGroup-Bh4-12e-.js.map → RadioGroup-B70_M-gT.js.map} +1 -1
  91. package/dist/chunks/{RangeSlider-SEGE-7VF.js → RangeSlider-DO5TZVk7.js} +8 -8
  92. package/dist/chunks/{RangeSlider-SEGE-7VF.js.map → RangeSlider-DO5TZVk7.js.map} +1 -1
  93. package/dist/chunks/RecentColorsProvider-DHcfk25u.js +84 -0
  94. package/dist/chunks/RecentColorsProvider-DHcfk25u.js.map +1 -0
  95. package/dist/chunks/ResizeHandle-CbAgCQOt.js +81 -0
  96. package/dist/chunks/ResizeHandle-CbAgCQOt.js.map +1 -0
  97. package/dist/chunks/Select-ouV8O6cp.js +236 -0
  98. package/dist/chunks/Select-ouV8O6cp.js.map +1 -0
  99. package/dist/chunks/{SelectionPanel-BaQnX4Bs.js → SelectionPanel-C3WzyaZV.js} +14 -13
  100. package/dist/chunks/{SelectionPanel-BaQnX4Bs.js.map → SelectionPanel-C3WzyaZV.js.map} +1 -1
  101. package/dist/chunks/{SidebarPanel-BblDEz4G.js → SidebarPanel-AXQ0jRDx.js} +2 -2
  102. package/dist/chunks/{SidebarPanel-BblDEz4G.js.map → SidebarPanel-AXQ0jRDx.js.map} +1 -1
  103. package/dist/chunks/{Slider-YofwGOI4.js → Slider-DSrlMEq8.js} +19 -19
  104. package/dist/chunks/Slider-DSrlMEq8.js.map +1 -0
  105. package/dist/chunks/{StatusBar-Ca9Dvhhq.js → StatusBar-BEOfOX0D.js} +6 -6
  106. package/dist/chunks/StatusBar-BEOfOX0D.js.map +1 -0
  107. package/dist/chunks/SwatchGrid-9ZPiDmxd.js +78 -0
  108. package/dist/chunks/SwatchGrid-9ZPiDmxd.js.map +1 -0
  109. package/dist/chunks/SwatchStrip-Bi9iPLoh.js +577 -0
  110. package/dist/chunks/SwatchStrip-Bi9iPLoh.js.map +1 -0
  111. package/dist/chunks/{ThemeSwitcher-BlsInAmR.js → ThemeSwitcher-DiBmMh_B.js} +3 -3
  112. package/dist/chunks/{ThemeSwitcher-BlsInAmR.js.map → ThemeSwitcher-DiBmMh_B.js.map} +1 -1
  113. package/dist/chunks/{Timeline-B39cwfMB.js → Timeline-sMCH2fah.js} +293 -280
  114. package/dist/chunks/Timeline-sMCH2fah.js.map +1 -0
  115. package/dist/chunks/Toast-C3ozq11V.js +170 -0
  116. package/dist/chunks/Toast-C3ozq11V.js.map +1 -0
  117. package/dist/chunks/{ToggleBar-BTYkBXU9.js → ToggleBar-Z2jZiguF.js} +6 -8
  118. package/dist/chunks/{ToggleBar-BTYkBXU9.js.map → ToggleBar-Z2jZiguF.js.map} +1 -1
  119. package/dist/chunks/{TokenPanel-CMDAOfYH.js → TokenPanel-WtKGY2Db.js} +32 -32
  120. package/dist/chunks/TokenPanel-WtKGY2Db.js.map +1 -0
  121. package/dist/chunks/{ToolButton-CAHBa08P.js → ToolButton-BURp4YIO.js} +7 -9
  122. package/dist/chunks/ToolButton-BURp4YIO.js.map +1 -0
  123. package/dist/chunks/{ToolOptionsBar-D_GCrBAN.js → ToolOptionsBar-CZTYPoC2.js} +3 -2
  124. package/dist/chunks/{ToolOptionsBar-D_GCrBAN.js.map → ToolOptionsBar-CZTYPoC2.js.map} +1 -1
  125. package/dist/chunks/{ToolPalette-OOWN51Xx.js → ToolPalette-DKDFWOX-.js} +7 -9
  126. package/dist/chunks/{ToolPalette-OOWN51Xx.js.map → ToolPalette-DKDFWOX-.js.map} +1 -1
  127. package/dist/chunks/{Tooltip-Clg2mhSt.js → Tooltip-C6eFCYxw.js} +2 -2
  128. package/dist/chunks/{Tooltip-Clg2mhSt.js.map → Tooltip-C6eFCYxw.js.map} +1 -1
  129. package/dist/chunks/Tree-Cc8lIzgM.js.map +1 -1
  130. package/dist/chunks/checkbox.module-DLQV9tMX.js +5 -0
  131. package/dist/chunks/checkbox.module-DLQV9tMX.js.map +1 -0
  132. package/dist/chunks/{createKeyframeLayer-DVl321_l.js → createKeyframeLayer-DSVf13Su.js} +194 -208
  133. package/dist/chunks/createKeyframeLayer-DSVf13Su.js.map +1 -0
  134. package/dist/chunks/field.module-B27pWv0i.js +15 -0
  135. package/dist/chunks/field.module-B27pWv0i.js.map +1 -0
  136. package/dist/chunks/formatShortcut-DRQrVThu.js.map +1 -1
  137. package/dist/chunks/handles-CqVANLtu.js +17 -0
  138. package/dist/chunks/handles-CqVANLtu.js.map +1 -0
  139. package/dist/chunks/{icons-BhcR1l64.js → icons-Dr2-r30x.js} +2 -2
  140. package/dist/chunks/icons-Dr2-r30x.js.map +1 -0
  141. package/dist/chunks/listbox.module-BcdVJMbm.js +8 -0
  142. package/dist/chunks/listbox.module-BcdVJMbm.js.map +1 -0
  143. package/dist/chunks/model-qsAFK7_0.js +386 -0
  144. package/dist/chunks/model-qsAFK7_0.js.map +1 -0
  145. package/dist/chunks/{portalHost-yTOVuCej.js → portalHost-CE70wLzo.js} +10 -6
  146. package/dist/chunks/portalHost-CE70wLzo.js.map +1 -0
  147. package/dist/chunks/prefField-BE_Ytr2H.js +229 -0
  148. package/dist/chunks/prefField-BE_Ytr2H.js.map +1 -0
  149. package/dist/chunks/{segmentTooltip-CStYHKzd.js → segmentTooltip-CGxCOWNz.js} +2 -2
  150. package/dist/chunks/{segmentTooltip-CStYHKzd.js.map → segmentTooltip-CGxCOWNz.js.map} +1 -1
  151. package/dist/chunks/segmentedControl.module-BzGXUL5G.js +11 -0
  152. package/dist/chunks/segmentedControl.module-BzGXUL5G.js.map +1 -0
  153. package/dist/chunks/useReorderDragList-CStYKjHl.js +133 -0
  154. package/dist/chunks/useReorderDragList-CStYKjHl.js.map +1 -0
  155. package/dist/chunks/useRovingTabIndex-D7u22Ia_.js +91 -0
  156. package/dist/chunks/useRovingTabIndex-D7u22Ia_.js.map +1 -0
  157. package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
  158. package/dist/components/ActionBar/index.js +1 -1
  159. package/dist/components/Badge/bases/ChamferedRect.d.ts.map +1 -1
  160. package/dist/components/Badge/index.js +1 -1
  161. package/dist/components/BandEditor/BandEditor.d.ts +1 -0
  162. package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
  163. package/dist/components/BandEditor/index.js +1 -1
  164. package/dist/components/Button/index.js +1 -1
  165. package/dist/components/ButtonBar/ButtonBar.d.ts.map +1 -1
  166. package/dist/components/ButtonBar/index.js +1 -1
  167. package/dist/components/Callout/Callout.d.ts.map +1 -1
  168. package/dist/components/Callout/index.js +1 -1
  169. package/dist/components/Checkbox/Checkbox.d.ts +28 -13
  170. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  171. package/dist/components/Checkbox/index.js +1 -1
  172. package/dist/components/CloseButton/index.js +1 -1
  173. package/dist/components/ColorField/ColorField.d.ts.map +1 -1
  174. package/dist/components/ColorField/OpacityRange.d.ts +18 -0
  175. package/dist/components/ColorField/OpacityRange.d.ts.map +1 -0
  176. package/dist/components/ColorField/index.js +1 -1
  177. package/dist/components/ColorModeControl/index.js +1 -1
  178. package/dist/components/ComboBox/ComboBox.d.ts +7 -0
  179. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  180. package/dist/components/ComboBox/index.js +1 -1
  181. package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
  182. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
  183. package/dist/components/CurveEditor/index.js +2 -2
  184. package/dist/components/DataGrid/DataGrid.d.ts +3 -0
  185. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  186. package/dist/components/DataGrid/index.js +1 -1
  187. package/dist/components/DetailList/DetailList.d.ts +1 -1
  188. package/dist/components/DetailList/DetailList.d.ts.map +1 -1
  189. package/dist/components/DetailList/index.js +1 -1
  190. package/dist/components/DetentSlider/index.js +1 -1
  191. package/dist/components/Dialog/index.js +1 -1
  192. package/dist/components/DragGhost/index.js +1 -1
  193. package/dist/components/FallthroughDiagram/index.js +1 -1
  194. package/dist/components/Field/index.js +1 -1
  195. package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts +5 -2
  196. package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts.map +1 -1
  197. package/dist/components/FillStrokeSwatch/index.js +1 -1
  198. package/dist/components/FontFamilySelect/FontFamilySelect.d.ts +20 -0
  199. package/dist/components/FontFamilySelect/FontFamilySelect.d.ts.map +1 -1
  200. package/dist/components/FontFamilySelect/index.js +1 -1
  201. package/dist/components/FontWeightSelect/FontWeightSelect.d.ts +26 -0
  202. package/dist/components/FontWeightSelect/FontWeightSelect.d.ts.map +1 -0
  203. package/dist/components/FontWeightSelect/index.d.ts +3 -0
  204. package/dist/components/FontWeightSelect/index.d.ts.map +1 -0
  205. package/dist/components/FontWeightSelect/index.js +2 -0
  206. package/dist/components/GestureRoute/index.js +1 -1
  207. package/dist/components/GradientEditor/GradientHandles.d.ts +1 -8
  208. package/dist/components/GradientEditor/GradientHandles.d.ts.map +1 -1
  209. package/dist/components/GradientEditor/SceneGradientHandles.d.ts +7 -5
  210. package/dist/components/GradientEditor/SceneGradientHandles.d.ts.map +1 -1
  211. package/dist/components/GradientEditor/handleOverlay.d.ts +41 -0
  212. package/dist/components/GradientEditor/handleOverlay.d.ts.map +1 -0
  213. package/dist/components/GradientEditor/index.js +1 -1
  214. package/dist/components/InlineRange/index.js +1 -1
  215. package/dist/components/Input/Input.d.ts +1 -1
  216. package/dist/components/Input/Input.d.ts.map +1 -1
  217. package/dist/components/Input/index.js +1 -1
  218. package/dist/components/ItemList/ItemList.d.ts +32 -31
  219. package/dist/components/ItemList/ItemList.d.ts.map +1 -1
  220. package/dist/components/ItemList/index.js +1 -1
  221. package/dist/components/Jog/index.js +1 -1
  222. package/dist/components/LayerList/LayerList.d.ts.map +1 -1
  223. package/dist/components/LayerList/index.js +1 -1
  224. package/dist/components/ListEditor/ListEditor.d.ts.map +1 -1
  225. package/dist/components/ListEditor/index.js +1 -1
  226. package/dist/components/MenuButton/MenuButton.d.ts.map +1 -1
  227. package/dist/components/MenuButton/index.js +1 -1
  228. package/dist/components/MeshEditor/MeshEditor.d.ts +4 -3
  229. package/dist/components/MeshEditor/MeshEditor.d.ts.map +1 -1
  230. package/dist/components/MeshEditor/MeshHandles.d.ts +38 -0
  231. package/dist/components/MeshEditor/MeshHandles.d.ts.map +1 -0
  232. package/dist/components/MeshEditor/index.d.ts +2 -0
  233. package/dist/components/MeshEditor/index.d.ts.map +1 -1
  234. package/dist/components/MeshEditor/index.js +2 -2
  235. package/dist/components/NumberField/NumberField.d.ts +1 -1
  236. package/dist/components/NumberField/NumberField.d.ts.map +1 -1
  237. package/dist/components/NumberField/index.js +1 -1
  238. package/dist/components/OptionsBar/OptionsBar.d.ts.map +1 -1
  239. package/dist/components/OptionsBar/index.js +1 -1
  240. package/dist/components/PaintField/PaintField.d.ts.map +1 -1
  241. package/dist/components/PaintField/index.js +1 -1
  242. package/dist/components/PaintInput/PaintInput.d.ts.map +1 -1
  243. package/dist/components/PaintInput/index.js +1 -1
  244. package/dist/components/PatternPicker/PatternPicker.d.ts +6 -5
  245. package/dist/components/PatternPicker/PatternPicker.d.ts.map +1 -1
  246. package/dist/components/PatternPicker/index.js +1 -1
  247. package/dist/components/Plot2D/index.js +1 -1
  248. package/dist/components/PointPlotter/index.js +1 -1
  249. package/dist/components/Powerline/index.js +2 -2
  250. package/dist/components/Prefs/PrefsForm.d.ts +22 -0
  251. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  252. package/dist/components/Prefs/PrefsRail.d.ts +3 -2
  253. package/dist/components/Prefs/PrefsRail.d.ts.map +1 -1
  254. package/dist/components/Prefs/PrefsRow.d.ts +4 -0
  255. package/dist/components/Prefs/PrefsRow.d.ts.map +1 -1
  256. package/dist/components/Prefs/index.js +2 -2
  257. package/dist/components/Prefs/prefField.d.ts +13 -0
  258. package/dist/components/Prefs/prefField.d.ts.map +1 -1
  259. package/dist/components/Properties/PropertyField.d.ts +13 -2
  260. package/dist/components/Properties/PropertyField.d.ts.map +1 -1
  261. package/dist/components/Properties/PropertyPanel.d.ts +18 -1
  262. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  263. package/dist/components/Properties/index.d.ts +2 -2
  264. package/dist/components/Properties/index.d.ts.map +1 -1
  265. package/dist/components/Properties/index.js +3 -3
  266. package/dist/components/RadioGroup/index.js +1 -1
  267. package/dist/components/RangeSlider/index.js +1 -1
  268. package/dist/components/RecentColors/RecentColorsProvider.d.ts +24 -0
  269. package/dist/components/RecentColors/RecentColorsProvider.d.ts.map +1 -0
  270. package/dist/components/RecentColors/index.d.ts +5 -0
  271. package/dist/components/RecentColors/index.d.ts.map +1 -0
  272. package/dist/components/RecentColors/index.js +2 -0
  273. package/dist/components/RecentColors/recentColors.d.ts +39 -0
  274. package/dist/components/RecentColors/recentColors.d.ts.map +1 -0
  275. package/dist/components/ResizeHandle/ResizeHandle.d.ts.map +1 -1
  276. package/dist/components/ResizeHandle/index.js +1 -1
  277. package/dist/components/Select/Select.d.ts +6 -2
  278. package/dist/components/Select/Select.d.ts.map +1 -1
  279. package/dist/components/Select/index.js +1 -1
  280. package/dist/components/SelectionPanel/index.js +2 -2
  281. package/dist/components/SelectionPanel/renderLeaf.d.ts +12 -2
  282. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
  283. package/dist/components/SidebarPanel/index.js +1 -1
  284. package/dist/components/Slider/index.js +1 -1
  285. package/dist/components/StatusBar/StatusBar.d.ts +1 -1
  286. package/dist/components/StatusBar/index.js +1 -1
  287. package/dist/components/SwatchGrid/SwatchGrid.d.ts.map +1 -1
  288. package/dist/components/SwatchGrid/index.js +1 -1
  289. package/dist/components/SwatchStrip/SwatchStrip.d.ts +44 -0
  290. package/dist/components/SwatchStrip/SwatchStrip.d.ts.map +1 -0
  291. package/dist/components/SwatchStrip/index.d.ts +5 -0
  292. package/dist/components/SwatchStrip/index.d.ts.map +1 -0
  293. package/dist/components/SwatchStrip/index.js +2 -0
  294. package/dist/components/SwatchStrip/palettes.d.ts +21 -0
  295. package/dist/components/SwatchStrip/palettes.d.ts.map +1 -0
  296. package/dist/components/ThemeSwitcher/index.js +1 -1
  297. package/dist/components/Timeline/AnimatedTimeline.d.ts +1 -0
  298. package/dist/components/Timeline/AnimatedTimeline.d.ts.map +1 -1
  299. package/dist/components/Timeline/EasingPicker.d.ts +3 -0
  300. package/dist/components/Timeline/EasingPicker.d.ts.map +1 -1
  301. package/dist/components/Timeline/LaneGraph.d.ts +1 -1
  302. package/dist/components/Timeline/LaneGraph.d.ts.map +1 -1
  303. package/dist/components/Timeline/Timeline.d.ts +10 -1
  304. package/dist/components/Timeline/Timeline.d.ts.map +1 -1
  305. package/dist/components/Timeline/Transport.d.ts +6 -0
  306. package/dist/components/Timeline/Transport.d.ts.map +1 -1
  307. package/dist/components/Timeline/index.js +1 -1
  308. package/dist/components/Timeline/keys.d.ts +1 -0
  309. package/dist/components/Timeline/keys.d.ts.map +1 -1
  310. package/dist/components/Toast/Toast.d.ts +12 -3
  311. package/dist/components/Toast/Toast.d.ts.map +1 -1
  312. package/dist/components/Toast/index.js +1 -1
  313. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  314. package/dist/components/ToggleBar/index.js +1 -1
  315. package/dist/components/TokenPanel/index.js +1 -1
  316. package/dist/components/TokenPanel/tokenTypes.d.ts +1 -0
  317. package/dist/components/TokenPanel/tokenTypes.d.ts.map +1 -1
  318. package/dist/components/ToolButton/ToolButton.d.ts +1 -10
  319. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  320. package/dist/components/ToolButton/index.js +1 -1
  321. package/dist/components/ToolOptionsBar/index.js +1 -1
  322. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
  323. package/dist/components/ToolPalette/formatShortcut.d.ts +2 -0
  324. package/dist/components/ToolPalette/formatShortcut.d.ts.map +1 -1
  325. package/dist/components/ToolPalette/index.js +1 -1
  326. package/dist/components/Tooltip/index.js +1 -1
  327. package/dist/components/Tree/Tree.d.ts +27 -26
  328. package/dist/components/Tree/Tree.d.ts.map +1 -1
  329. package/dist/icons/index.d.ts +51 -0
  330. package/dist/icons/index.d.ts.map +1 -1
  331. package/dist/icons/paths.d.ts +2 -0
  332. package/dist/icons/paths.d.ts.map +1 -1
  333. package/dist/index.d.ts +4 -1
  334. package/dist/index.d.ts.map +1 -1
  335. package/dist/index.js +98 -95
  336. package/dist/index.js.map +1 -1
  337. package/dist/overlays/portalHost.d.ts +6 -0
  338. package/dist/overlays/portalHost.d.ts.map +1 -1
  339. package/dist/style.css +1 -1
  340. package/dist/useAsyncOptions.d.ts.map +1 -1
  341. package/dist/useReorderDragList.d.ts.map +1 -1
  342. package/dist/useRovingTabIndex.d.ts +40 -39
  343. package/dist/useRovingTabIndex.d.ts.map +1 -1
  344. package/package.json +9 -9
  345. package/dist/chunks/ActionBar-DCq16yFA.js +0 -57
  346. package/dist/chunks/ActionBar-DCq16yFA.js.map +0 -1
  347. package/dist/chunks/BandEditor-Dd0egAgE.js.map +0 -1
  348. package/dist/chunks/Callout-ndW5_Bqx.js +0 -116
  349. package/dist/chunks/Callout-ndW5_Bqx.js.map +0 -1
  350. package/dist/chunks/Checkbox-DHXTUHO9.js +0 -47
  351. package/dist/chunks/Checkbox-DHXTUHO9.js.map +0 -1
  352. package/dist/chunks/ColorField-Yz_BkcCT.js +0 -69
  353. package/dist/chunks/ColorField-Yz_BkcCT.js.map +0 -1
  354. package/dist/chunks/ComboBox-B34H76CW.js +0 -138
  355. package/dist/chunks/ComboBox-B34H76CW.js.map +0 -1
  356. package/dist/chunks/CurveEditor-DUVjd25R.js.map +0 -1
  357. package/dist/chunks/DataGrid-LZ2JgY2Y.js.map +0 -1
  358. package/dist/chunks/DetailList-BKomDzg5.js +0 -52
  359. package/dist/chunks/DetailList-BKomDzg5.js.map +0 -1
  360. package/dist/chunks/FallthroughDiagram-BEHiM5IS.js.map +0 -1
  361. package/dist/chunks/Field--onYxXTF.js +0 -32
  362. package/dist/chunks/Field--onYxXTF.js.map +0 -1
  363. package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js +0 -111
  364. package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js.map +0 -1
  365. package/dist/chunks/FontFamilySelect-DkRgNtag.js.map +0 -1
  366. package/dist/chunks/GradientEditor-b7v4Ph3i.js +0 -363
  367. package/dist/chunks/GradientEditor-b7v4Ph3i.js.map +0 -1
  368. package/dist/chunks/Icon-CcVjdq2C.js.map +0 -1
  369. package/dist/chunks/InlineRange-P01ABSzo.js.map +0 -1
  370. package/dist/chunks/Input-CHmkfYaD.js.map +0 -1
  371. package/dist/chunks/ItemList-Cm-HUWCi.js.map +0 -1
  372. package/dist/chunks/Jog-DRmfrkCg.js.map +0 -1
  373. package/dist/chunks/LayerList-wCI1EueM.js.map +0 -1
  374. package/dist/chunks/ListEditor-BeA60TAA.js +0 -71
  375. package/dist/chunks/ListEditor-BeA60TAA.js.map +0 -1
  376. package/dist/chunks/MenuButton-BSqEChJE.js +0 -70
  377. package/dist/chunks/MenuButton-BSqEChJE.js.map +0 -1
  378. package/dist/chunks/MeshEditor-D1HLZcAh.js +0 -87
  379. package/dist/chunks/MeshEditor-D1HLZcAh.js.map +0 -1
  380. package/dist/chunks/NumberField-BnJxcazc.js.map +0 -1
  381. package/dist/chunks/PaintField-DadOELMg.js +0 -62
  382. package/dist/chunks/PaintField-DadOELMg.js.map +0 -1
  383. package/dist/chunks/PaintInput-v8Y7MDbH.js +0 -121
  384. package/dist/chunks/PaintInput-v8Y7MDbH.js.map +0 -1
  385. package/dist/chunks/PatternPicker-R_EQtw2Q.js +0 -93
  386. package/dist/chunks/PatternPicker-R_EQtw2Q.js.map +0 -1
  387. package/dist/chunks/Plot2D-CTXHkL5p.js.map +0 -1
  388. package/dist/chunks/Prefs-ByA-x51i.js.map +0 -1
  389. package/dist/chunks/PropertyField-DfIJJ5GS.js +0 -673
  390. package/dist/chunks/PropertyField-DfIJJ5GS.js.map +0 -1
  391. package/dist/chunks/ResizeHandle-rKVWyeTG.js +0 -79
  392. package/dist/chunks/ResizeHandle-rKVWyeTG.js.map +0 -1
  393. package/dist/chunks/Select-ClmKtyWg.js +0 -229
  394. package/dist/chunks/Select-ClmKtyWg.js.map +0 -1
  395. package/dist/chunks/Slider-YofwGOI4.js.map +0 -1
  396. package/dist/chunks/StatusBar-Ca9Dvhhq.js.map +0 -1
  397. package/dist/chunks/SwatchGrid-BYvA8Bmh.js +0 -73
  398. package/dist/chunks/SwatchGrid-BYvA8Bmh.js.map +0 -1
  399. package/dist/chunks/Timeline-B39cwfMB.js.map +0 -1
  400. package/dist/chunks/Toast-BF9GE0HC.js +0 -126
  401. package/dist/chunks/Toast-BF9GE0HC.js.map +0 -1
  402. package/dist/chunks/TokenPanel-CMDAOfYH.js.map +0 -1
  403. package/dist/chunks/ToolButton-CAHBa08P.js.map +0 -1
  404. package/dist/chunks/createKeyframeLayer-DVl321_l.js.map +0 -1
  405. package/dist/chunks/icons-BhcR1l64.js.map +0 -1
  406. package/dist/chunks/model-BaF65rnX.js +0 -365
  407. package/dist/chunks/model-BaF65rnX.js.map +0 -1
  408. package/dist/chunks/portalHost-yTOVuCej.js.map +0 -1
  409. package/dist/chunks/prefField-BopW9bjx.js +0 -201
  410. package/dist/chunks/prefField-BopW9bjx.js.map +0 -1
  411. package/dist/chunks/segmentedControl.module-D6SzYJD7.js +0 -11
  412. package/dist/chunks/segmentedControl.module-D6SzYJD7.js.map +0 -1
  413. package/dist/chunks/useReorderDragList-FCMoFIzH.js +0 -131
  414. package/dist/chunks/useReorderDragList-FCMoFIzH.js.map +0 -1
  415. package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js +0 -65
  416. package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js.map +0 -1
@@ -1,17 +1,17 @@
1
1
  import { t as e } from "./dlog-F0I8KsIW.js";
2
- import { J as t } from "./icons-BhcR1l64.js";
3
- import { t as n } from "./CloseButton-C2J7wVfo.js";
4
- import { t as r } from "./useReorderDragList-FCMoFIzH.js";
2
+ import { J as t } from "./icons-Dr2-r30x.js";
3
+ import { t as n } from "./CloseButton-BmNmRVtb.js";
4
+ import { t as r } from "./useReorderDragList-CStYKjHl.js";
5
5
  import { t as i } from "./Disclosure-Ch2KxYuB.js";
6
- import { t as a } from "./DragGhost-B5_hb9W9.js";
6
+ import { t as a } from "./DragGhost-BeYDJyLZ.js";
7
7
  import { t as o } from "./DragGrip-AoIZXfZb.js";
8
8
  import { t as s } from "./ItemList.module-BSpCSxan.js";
9
- import { n as c } from "./Properties-DmAeQ3mk.js";
10
- import { r as l } from "./PropertyField-DfIJJ5GS.js";
11
- import { asNodeId as u, createMoveToIndexOp as d, dispatchApplyBatch as f } from "@weasel-js/core";
12
- import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
13
- import { useId as g, useLayoutEffect as _, useRef as v, useState as y } from "react";
14
- var b = {
9
+ import { n as c } from "./Properties-DseN56WI.js";
10
+ import { a as l } from "./PropertyField-BbNqK8xr.js";
11
+ import { asNodeId as u, createMoveToIndexOp as d, dispatchApplyBatch as f, useLatest as p } from "@weasel-js/core";
12
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
13
+ import { useId as _, useLayoutEffect as v, useRef as y, useState as b } from "react";
14
+ var x = {
15
15
  root: "_root_19r15_3",
16
16
  head: "_head_19r15_13",
17
17
  title: "_title_19r15_20",
@@ -35,16 +35,16 @@ var b = {
35
35
  };
36
36
  //#endregion
37
37
  //#region src/components/LayerList/LayerList.tsx
38
- function x(e, t) {
39
- return t.parentId === null ? S(e, t) : e.map((e) => e.id === t.parentId ? {
38
+ function S(e, t) {
39
+ return t.parentId === null ? C(e, t) : e.map((e) => e.id === t.parentId ? {
40
40
  ...e,
41
- children: S(e.children ?? [], t)
41
+ children: C(e.children ?? [], t)
42
42
  } : e.children ? {
43
43
  ...e,
44
- children: x(e.children, t)
44
+ children: S(e.children, t)
45
45
  } : e);
46
46
  }
47
- function S(e, { ids: t, index: n }) {
47
+ function C(e, { ids: t, index: n }) {
48
48
  let r = new Set(t), i = e.filter((e) => !r.has(e.id)), a = e.filter((e) => r.has(e.id)), o = Math.max(0, Math.min(i.length, n));
49
49
  return [
50
50
  ...i.slice(0, o),
@@ -52,98 +52,96 @@ function S(e, { ids: t, index: n }) {
52
52
  ...i.slice(o)
53
53
  ];
54
54
  }
55
- function C(e, t, n = /* @__PURE__ */ new Set()) {
56
- for (let r of e) t(r) && n.add(r.id), r.children && C(r.children, t, n);
55
+ function w(e, t, n = /* @__PURE__ */ new Set()) {
56
+ for (let r of e) t(r) && n.add(r.id), r.children && w(r.children, t, n);
57
57
  return n;
58
58
  }
59
- function w(e) {
59
+ function T(e) {
60
60
  return e.some((e) => (e.children?.length ?? 0) > 0);
61
61
  }
62
- function T(e) {
62
+ function E(e) {
63
63
  return e != null && e !== !1;
64
64
  }
65
- function E(t) {
66
- let { items: n, collapsedIds: r, onCollapsedChange: i, title: a, addKinds: o, onAdd: c, empty: l, className: u } = t, [d, f] = y(/* @__PURE__ */ new Map()), p = r ? new Set(r) : C(n, (e) => d.get(e.id) ?? e.defaultCollapsed === !0), x = (e) => {
67
- let t = new Set(p);
65
+ function D(t) {
66
+ let { items: n, collapsedIds: r, onCollapsedChange: i, title: a, addKinds: o, onAdd: c, empty: l, className: u } = t, [d, f] = b(/* @__PURE__ */ new Map()), m = r ? new Set(r) : w(n, (e) => d.get(e.id) ?? e.defaultCollapsed === !0), S = (e) => {
67
+ let t = new Set(m);
68
68
  t.has(e) ? t.delete(e) : t.add(e), r || f((n) => new Map(n).set(e, t.has(e))), i?.([...t]);
69
- }, S = v(t);
70
- S.current = t;
71
- let E = (e, t) => {
72
- let { selectedIds: n = [], onSelect: r } = S.current;
69
+ }, C = p(t), D = (e, t) => {
70
+ let { selectedIds: n = [], onSelect: r } = C.current;
73
71
  if (!r) return;
74
- if (L.current = e.id, e.locked || !t.shiftKey) {
72
+ if (R.current = e.id, e.locked || !t.shiftKey) {
75
73
  r([e.id]);
76
74
  return;
77
75
  }
78
- let i = new Set(D(S.current.items)), a = n.filter((e) => !i.has(e));
76
+ let i = new Set(O(C.current.items)), a = n.filter((e) => !i.has(e));
79
77
  r(a.includes(e.id) ? a.filter((t) => t !== e.id) : [...a, e.id]);
80
- }, k = /* @__PURE__ */ new Map(), A = (e) => {
81
- for (let n of e) k.set(n.id, t.renderBody ? t.renderBody(n) : null), n.children && A(n.children);
78
+ }, A = /* @__PURE__ */ new Map(), j = (e) => {
79
+ for (let n of e) A.set(n.id, t.renderBody ? t.renderBody(n) : null), n.children && j(n.children);
82
80
  };
83
- A(n);
84
- let j = [], M = (e, t, n) => {
85
- for (let r of e) T(k.get(r.id)) || j.push({
81
+ j(n);
82
+ let M = [], N = (e, t, n) => {
83
+ for (let r of e) E(A.get(r.id)) || M.push({
86
84
  item: r,
87
85
  parentId: t,
88
86
  level: n
89
- }), r.children?.length && !p.has(r.id) && M(r.children, r.id, n + 1);
87
+ }), r.children?.length && !m.has(r.id) && N(r.children, r.id, n + 1);
90
88
  };
91
- M(n, null, 1);
92
- let N = v(/* @__PURE__ */ new Map()), [P, F] = y(null), I = v(null), L = v(null), R = v(/* @__PURE__ */ new Map()).current;
93
- _(() => {
94
- let e = I.current;
89
+ N(n, null, 1);
90
+ let P = y(/* @__PURE__ */ new Map()), [F, I] = b(null), L = y(null), R = y(null), z = y(/* @__PURE__ */ new Map()).current;
91
+ v(() => {
92
+ let e = L.current;
95
93
  if (e === null) return;
96
- I.current = null;
97
- let t = N.current.get(e);
94
+ L.current = null;
95
+ let t = P.current.get(e);
98
96
  t && document.activeElement !== t && t.focus();
99
97
  });
100
- let z = t.selectedIds ?? [], B = j.some((e) => e.item.id === P) ? P ?? void 0 : (j.find((e) => z.includes(e.item.id)) ?? j[0])?.item.id, V = (e) => {
101
- I.current = e, F(e);
102
- }, H = (e) => {
103
- let t = L.current ?? e, n = j.findIndex((e) => e.item.id === t), r = j.findIndex((t) => t.item.id === e);
98
+ let B = t.selectedIds ?? [], V = M.some((e) => e.item.id === F) ? F ?? void 0 : (M.find((e) => B.includes(e.item.id)) ?? M[0])?.item.id, H = (e) => {
99
+ L.current = e, I(e);
100
+ }, U = (e) => {
101
+ let t = R.current ?? e, n = M.findIndex((e) => e.item.id === t), r = M.findIndex((t) => t.item.id === e);
104
102
  if (n < 0 || r < 0) return;
105
- let i = j.slice(Math.min(n, r), Math.max(n, r) + 1).filter((e) => !e.item.locked).map((e) => e.item.id);
106
- i.length > 0 && S.current.onSelect?.(i);
107
- }, U = {
108
- tabStop: B,
103
+ let i = M.slice(Math.min(n, r), Math.max(n, r) + 1).filter((e) => !e.item.locked).map((e) => e.item.id);
104
+ i.length > 0 && C.current.onSelect?.(i);
105
+ }, W = {
106
+ tabStop: V,
109
107
  register: (e) => (t) => {
110
- t ? N.current.set(e, t) : N.current.delete(e);
108
+ t ? P.current.set(e, t) : P.current.delete(e);
111
109
  },
112
110
  onFocus: (e) => {
113
- F(e), L.current ??= e;
111
+ I(e), R.current ??= e;
114
112
  },
115
113
  onKeyDown: (e, n) => (r) => {
116
114
  if (r.target !== r.currentTarget) return;
117
- let i = j.findIndex((t) => t.item.id === e.id), a = (e) => {
118
- let n = j[Math.max(0, Math.min(j.length - 1, e))];
119
- n && (V(n.item.id), r.shiftKey && t.onSelect ? H(n.item.id) : L.current = n.item.id);
120
- }, o = (e.children?.length ?? 0) > 0, s = o && !p.has(e.id);
115
+ let i = M.findIndex((t) => t.item.id === e.id), a = (e) => {
116
+ let n = M[Math.max(0, Math.min(M.length - 1, e))];
117
+ n && (H(n.item.id), r.shiftKey && t.onSelect ? U(n.item.id) : R.current = n.item.id);
118
+ }, o = (e.children?.length ?? 0) > 0, s = o && !m.has(e.id);
121
119
  switch (r.key) {
122
120
  case "ArrowDown":
123
121
  case "ArrowUp": {
124
122
  let t = r.key === "ArrowDown" ? 1 : -1;
125
- r.altKey ? R.get(n)?.(e.id, t) && (I.current = e.id) : a(i + t);
123
+ r.altKey ? z.get(n)?.(e.id, t) && (L.current = e.id) : a(i + t);
126
124
  break;
127
125
  }
128
126
  case "Home":
129
127
  a(0);
130
128
  break;
131
129
  case "End":
132
- a(j.length - 1);
130
+ a(M.length - 1);
133
131
  break;
134
132
  case "ArrowRight":
135
- if (o && !s) x(e.id);
133
+ if (o && !s) S(e.id);
136
134
  else if (s) a(i + 1);
137
135
  else return;
138
136
  break;
139
137
  case "ArrowLeft":
140
- if (s) x(e.id);
141
- else if (n !== null) a(j.findIndex((e) => e.item.id === n));
138
+ if (s) S(e.id);
139
+ else if (n !== null) a(M.findIndex((e) => e.item.id === n));
142
140
  else return;
143
141
  break;
144
142
  case "Enter":
145
143
  case " ":
146
- E(e, {
144
+ D(e, {
147
145
  shiftKey: r.shiftKey,
148
146
  ctrlKey: r.ctrlKey,
149
147
  metaKey: r.metaKey,
@@ -154,29 +152,29 @@ function E(t) {
154
152
  }
155
153
  r.preventDefault();
156
154
  }
157
- }, W = {
155
+ }, G = {
158
156
  props: t,
159
- collapsed: p,
160
- toggle: x,
161
- press: E,
162
- uid: g(),
163
- nested: w(n),
164
- bodies: k,
165
- nudgers: R,
166
- keys: U
167
- }, G = c ? o ?? [] : [], K = u ? `${b.root} ${u}` : b.root;
168
- return /* @__PURE__ */ h("div", {
169
- className: K,
170
- children: [(a !== void 0 || G.length > 0) && /* @__PURE__ */ h("div", {
171
- className: b.head,
172
- children: [a !== void 0 && /* @__PURE__ */ m("h2", {
173
- className: b.title,
157
+ collapsed: m,
158
+ toggle: S,
159
+ press: D,
160
+ uid: _(),
161
+ nested: T(n),
162
+ bodies: A,
163
+ nudgers: z,
164
+ keys: W
165
+ }, K = c ? o ?? [] : [], q = u ? `${x.root} ${u}` : x.root;
166
+ return /* @__PURE__ */ g("div", {
167
+ className: q,
168
+ children: [(a !== void 0 || K.length > 0) && /* @__PURE__ */ g("div", {
169
+ className: x.head,
170
+ children: [a !== void 0 && /* @__PURE__ */ h("h2", {
171
+ className: x.title,
174
172
  children: a
175
- }), /* @__PURE__ */ m("div", {
176
- className: b.palette,
177
- children: G.map((t) => /* @__PURE__ */ m("button", {
173
+ }), /* @__PURE__ */ h("div", {
174
+ className: x.palette,
175
+ children: K.map((t) => /* @__PURE__ */ h("button", {
178
176
  type: "button",
179
- className: b.add,
177
+ className: x.add,
180
178
  "aria-label": `Add ${t}`,
181
179
  onClick: () => {
182
180
  e("layer-list", "onAdd", { kind: t }), c?.(t);
@@ -184,31 +182,31 @@ function E(t) {
184
182
  children: t
185
183
  }, t))
186
184
  })]
187
- }), n.length === 0 ? /* @__PURE__ */ m("div", {
185
+ }), n.length === 0 ? /* @__PURE__ */ h("div", {
188
186
  className: s.empty,
189
- children: l ?? (G.length > 0 ? "No layers — add one above." : "No layers.")
190
- }) : /* @__PURE__ */ m(O, {
187
+ children: l ?? (K.length > 0 ? "No layers — add one above." : "No layers.")
188
+ }) : /* @__PURE__ */ h(k, {
191
189
  items: n,
192
190
  parentId: null,
193
- shared: W,
191
+ shared: G,
194
192
  path: "",
195
193
  level: 1
196
194
  })]
197
195
  });
198
196
  }
199
- function D(e) {
197
+ function O(e) {
200
198
  let t = [];
201
- for (let n of e) n.locked && t.push(n.id), n.children && t.push(...D(n.children));
199
+ for (let n of e) n.locked && t.push(n.id), n.children && t.push(...O(n.children));
202
200
  return t;
203
201
  }
204
- function O({ items: t, parentId: n, shared: o, path: u, level: d }) {
205
- let { props: f } = o, g = f.selectedIds ?? [], _ = r({
202
+ function k({ items: t, parentId: n, shared: o, path: u, level: d }) {
203
+ let { props: f } = o, p = f.selectedIds ?? [], _ = r({
206
204
  items: t.map((e) => ({
207
205
  id: e.id,
208
206
  label: e.label,
209
207
  locked: e.locked || !f.onReorder
210
208
  })),
211
- selectedIds: t.filter((e) => g.includes(e.id)).map((e) => e.id),
209
+ selectedIds: t.filter((e) => p.includes(e.id)).map((e) => e.id),
212
210
  onReorder: (r, i) => {
213
211
  let a = new Set(r), o = {
214
212
  ids: t.filter((e) => a.has(e.id)).map((e) => e.id),
@@ -223,41 +221,41 @@ function O({ items: t, parentId: n, shared: o, path: u, level: d }) {
223
221
  }
224
222
  });
225
223
  o.nudgers.set(n, (e, n) => _.nudge(e, t.findIndex((t) => t.id === e), n));
226
- let [v, x] = y(null), S = (e) => {
227
- x(e), _.containerProps.ref(e);
228
- }, C = t.map((e) => o.bodies.get(e.id)), w = C.some(T), { draggedIds: E, targetIndex: D, ghost: P } = _.state, F = (e, r, a) => {
229
- let l = C[r], p = e.children ?? [], v = !o.collapsed.has(e.id), y = `${o.uid}${u}-${r}`, x = a ? void 0 : _.rowProps(e.id, r).onPointerDown, S = g.includes(e.id), w = [b.entry];
230
- a || (E?.includes(e.id) && w.push(b.dragging), D === r && !E?.includes(e.id) && w.push(b.dropBefore), D === t.length && r === t.length - 1 && w.push(b.dropAfter));
231
- let P = /* @__PURE__ */ m(M, {
224
+ let [v, y] = b(null), S = (e) => {
225
+ y(e), _.containerProps.ref(e);
226
+ }, C = t.map((e) => o.bodies.get(e.id)), w = C.some(E), { draggedIds: T, targetIndex: D, ghost: O } = _.state, F = (e, r, a) => {
227
+ let l = C[r], m = e.children ?? [], v = !o.collapsed.has(e.id), y = `${o.uid}${u}-${r}`, b = a ? void 0 : _.rowProps(e.id, r).onPointerDown, S = p.includes(e.id), w = [x.entry];
228
+ a || (T?.includes(e.id) && w.push(x.dragging), D === r && !T?.includes(e.id) && w.push(x.dropBefore), D === t.length && r === t.length - 1 && w.push(x.dropAfter));
229
+ let O = /* @__PURE__ */ h(N, {
232
230
  item: e,
233
231
  shared: o
234
- }), F = T(l) ? /* @__PURE__ */ m(c, {
235
- className: b.card,
232
+ }), F = E(l) ? /* @__PURE__ */ h(c, {
233
+ className: x.card,
236
234
  title: e.title ?? e.label,
237
235
  ...e.tone === void 0 ? {} : { tone: e.tone },
238
236
  collapsed: a || !v,
239
237
  onCollapsedChange: () => o.toggle(e.id),
240
- leading: /* @__PURE__ */ m(j, {
238
+ leading: /* @__PURE__ */ h(M, {
241
239
  item: e,
242
240
  reorder: f.onReorder !== void 0,
243
- onPointerDown: x,
241
+ onPointerDown: b,
244
242
  onNudge: (t) => o.nudgers.get(n)?.(e.id, t)
245
243
  }),
246
- actions: a ? void 0 : P,
244
+ actions: a ? void 0 : O,
247
245
  children: a ? null : l
248
- }) : /* @__PURE__ */ h("div", {
246
+ }) : /* @__PURE__ */ g("div", {
249
247
  className: [
250
248
  s.row,
251
- b.row,
249
+ x.row,
252
250
  S ? s.selected : ""
253
251
  ].filter(Boolean).join(" "),
254
252
  "data-selected": S ? "true" : void 0,
255
253
  "data-locked": e.locked ? "true" : void 0,
256
- onPointerDown: x,
254
+ onPointerDown: b,
257
255
  ...a ? {} : {
258
256
  role: "row",
259
257
  "aria-level": d,
260
- ...p.length > 0 ? { "aria-expanded": v } : {},
258
+ ...m.length > 0 ? { "aria-expanded": v } : {},
261
259
  ...f.onSelect ? { "aria-selected": S } : {},
262
260
  tabIndex: o.keys.tabStop === e.id ? 0 : -1,
263
261
  ref: o.keys.register(e.id),
@@ -265,49 +263,49 @@ function O({ items: t, parentId: n, shared: o, path: u, level: d }) {
265
263
  onFocus: () => o.keys.onFocus(e.id)
266
264
  },
267
265
  children: [
268
- o.nested && (p.length > 0 ? /* @__PURE__ */ m("span", {
269
- className: b.stop,
270
- onPointerDown: k,
271
- children: /* @__PURE__ */ m(i, {
266
+ o.nested && (m.length > 0 ? /* @__PURE__ */ h("span", {
267
+ className: x.stop,
268
+ onPointerDown: A,
269
+ children: /* @__PURE__ */ h(i, {
272
270
  open: v,
273
271
  onToggle: () => o.toggle(e.id),
274
272
  label: `${e.label} sublayers`,
275
273
  controls: y
276
274
  })
277
- }) : /* @__PURE__ */ m("span", { className: b.twistyGap })),
278
- /* @__PURE__ */ m(A, {
275
+ }) : /* @__PURE__ */ h("span", { className: x.twistyGap })),
276
+ /* @__PURE__ */ h(j, {
279
277
  item: e,
280
278
  reorder: f.onReorder !== void 0
281
279
  }),
282
- f.onVisibilityChange && (e.locked ? /* @__PURE__ */ m("span", { className: b.check }) : /* @__PURE__ */ m("input", {
283
- className: b.check,
280
+ f.onVisibilityChange && (e.locked ? /* @__PURE__ */ h("span", { className: x.check }) : /* @__PURE__ */ h("input", {
281
+ className: x.check,
284
282
  type: "checkbox",
285
283
  checked: e.visible !== !1,
286
- onPointerDown: k,
284
+ onPointerDown: A,
287
285
  onChange: (t) => f.onVisibilityChange?.(e.id, t.target.checked),
288
286
  "aria-label": `Show ${e.label}`
289
287
  })),
290
288
  e.leading,
291
- /* @__PURE__ */ m("span", {
289
+ /* @__PURE__ */ h("span", {
292
290
  className: s.label,
293
291
  children: e.title ?? e.label
294
292
  }),
295
- a ? null : /* @__PURE__ */ m(N, {
293
+ a ? null : /* @__PURE__ */ h(P, {
296
294
  item: e,
297
295
  shared: o
298
296
  })
299
297
  ]
300
298
  });
301
- return /* @__PURE__ */ h("div", {
299
+ return /* @__PURE__ */ g("div", {
302
300
  role: "none",
303
301
  className: w.join(" "),
304
302
  "data-selected": S ? "true" : void 0,
305
- children: [F, !a && p.length > 0 && v && /* @__PURE__ */ m("div", {
303
+ children: [F, !a && m.length > 0 && v && /* @__PURE__ */ h("div", {
306
304
  id: y,
307
305
  role: "rowgroup",
308
- className: b.children,
309
- children: /* @__PURE__ */ m(O, {
310
- items: p,
306
+ className: x.children,
307
+ children: /* @__PURE__ */ h(k, {
308
+ items: m,
311
309
  parentId: e.id,
312
310
  shared: o,
313
311
  path: `${u}-${r}`,
@@ -316,75 +314,75 @@ function O({ items: t, parentId: n, shared: o, path: u, level: d }) {
316
314
  })]
317
315
  }, e.id);
318
316
  };
319
- return /* @__PURE__ */ h(p, { children: [w ? /* @__PURE__ */ m(l, {
317
+ return /* @__PURE__ */ g(m, { children: [w ? /* @__PURE__ */ h(l, {
320
318
  ref: S,
321
- className: `${b.level} ${b.cards}`,
319
+ className: `${x.level} ${x.cards}`,
322
320
  children: t.map((e, t) => F(e, t, !1))
323
- }) : /* @__PURE__ */ m("div", {
321
+ }) : /* @__PURE__ */ h("div", {
324
322
  ref: S,
325
- className: b.level,
323
+ className: x.level,
326
324
  ...n === null ? {
327
325
  role: "treegrid",
328
326
  "aria-label": f.label ?? f.title ?? "Layers",
329
327
  ...f.onSelect ? { "aria-multiselectable": !0 } : {}
330
328
  } : { role: "none" },
331
329
  children: t.map((e, t) => F(e, t, !1))
332
- }), P && v ? /* @__PURE__ */ m(a, {
333
- at: P,
330
+ }), O && v ? /* @__PURE__ */ h(a, {
331
+ at: O,
334
332
  from: v,
335
- children: t.map((e, t) => P.ids.includes(e.id) ? F(e, t, !0) : null)
333
+ children: t.map((e, t) => O.ids.includes(e.id) ? F(e, t, !0) : null)
336
334
  }) : null] });
337
335
  }
338
- var k = (e) => e.stopPropagation();
339
- function A({ item: e, reorder: n }) {
340
- return e.locked ? /* @__PURE__ */ m("span", {
341
- className: b.lock,
336
+ var A = (e) => e.stopPropagation();
337
+ function j({ item: e, reorder: n }) {
338
+ return e.locked ? /* @__PURE__ */ h("span", {
339
+ className: x.lock,
342
340
  role: "img",
343
341
  "aria-label": "Locked",
344
- children: /* @__PURE__ */ m(t, { size: 12 })
345
- }) : !n && e.badge === void 0 ? null : /* @__PURE__ */ m("span", {
346
- className: b.grip,
342
+ children: /* @__PURE__ */ h(t, { size: 12 })
343
+ }) : !n && e.badge === void 0 ? null : /* @__PURE__ */ h("span", {
344
+ className: x.grip,
347
345
  "aria-hidden": "true",
348
- children: e.badge ?? /* @__PURE__ */ m(o, { size: 13 })
346
+ children: e.badge ?? /* @__PURE__ */ h(o, { size: 13 })
349
347
  });
350
348
  }
351
- function j({ item: e, reorder: t, onPointerDown: n, onNudge: r }) {
352
- if (e.locked) return /* @__PURE__ */ m(A, {
349
+ function M({ item: e, reorder: t, onPointerDown: n, onNudge: r }) {
350
+ if (e.locked) return /* @__PURE__ */ h(j, {
353
351
  item: e,
354
352
  reorder: t
355
353
  });
356
- if (t || e.badge !== void 0) return /* @__PURE__ */ m("button", {
354
+ if (t || e.badge !== void 0) return /* @__PURE__ */ h("button", {
357
355
  type: "button",
358
- className: b.handle,
356
+ className: x.handle,
359
357
  "aria-label": `Drag to reorder ${e.label}`,
360
358
  "aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown",
361
359
  onPointerDown: n,
362
360
  onKeyDown: (e) => {
363
361
  !e.altKey || e.key !== "ArrowUp" && e.key !== "ArrowDown" || (e.preventDefault(), r(e.key === "ArrowUp" ? -1 : 1));
364
362
  },
365
- children: e.badge ?? /* @__PURE__ */ m(o, {})
363
+ children: e.badge ?? /* @__PURE__ */ h(o, {})
366
364
  });
367
365
  }
368
- function M({ item: e, shared: t }) {
366
+ function N({ item: e, shared: t }) {
369
367
  let { onVisibilityChange: n } = t.props;
370
- return /* @__PURE__ */ h(p, { children: [n && !e.locked && /* @__PURE__ */ m("input", {
371
- className: b.check,
368
+ return /* @__PURE__ */ g(m, { children: [n && !e.locked && /* @__PURE__ */ h("input", {
369
+ className: x.check,
372
370
  type: "checkbox",
373
371
  checked: e.visible !== !1,
374
- onClick: k,
372
+ onClick: A,
375
373
  onChange: (t) => n(e.id, t.target.checked),
376
374
  "aria-label": `Show ${e.label}`
377
- }), /* @__PURE__ */ m(N, {
375
+ }), /* @__PURE__ */ h(P, {
378
376
  item: e,
379
377
  shared: t
380
378
  })] });
381
379
  }
382
- function N({ item: e, shared: t }) {
380
+ function P({ item: e, shared: t }) {
383
381
  let { onRemove: r } = t.props;
384
- return !r || e.locked ? null : /* @__PURE__ */ m("span", {
385
- className: b.stop,
386
- onPointerDown: k,
387
- children: /* @__PURE__ */ m(n, {
382
+ return !r || e.locked ? null : /* @__PURE__ */ h("span", {
383
+ className: x.stop,
384
+ onPointerDown: A,
385
+ children: /* @__PURE__ */ h(n, {
388
386
  ariaLabel: `Remove ${e.label}`,
389
387
  onClick: () => r(e.id)
390
388
  })
@@ -392,7 +390,7 @@ function N({ item: e, shared: t }) {
392
390
  }
393
391
  //#endregion
394
392
  //#region src/components/LayerList/useSceneLayerList.ts
395
- function P(e) {
393
+ function F(e) {
396
394
  let { scene: t, selection: n, adapter: r, itemFor: i, label: a = "Reorder" } = e, o = (e) => [...e].reverse().flatMap((e) => {
397
395
  let n = t.get(e);
398
396
  if (!n) return [];
@@ -418,6 +416,6 @@ function P(e) {
418
416
  };
419
417
  }
420
418
  //#endregion
421
- export { E as n, x as r, P as t };
419
+ export { D as n, S as r, F as t };
422
420
 
423
- //# sourceMappingURL=LayerList-wCI1EueM.js.map
421
+ //# sourceMappingURL=LayerList-Bxj1N6bj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayerList-Bxj1N6bj.js","names":["stop","s","rows","_Fragment","dlog","LockIcon","CloseButton","useReorderDragList","Disclosure","DragGhost","DragGrip","ItemList_module_default","PropertyGroup","PropertyList","LayerList_module_default","moveLayers","move","reorder","items","item","moving","ids","kept","siblings","it","moved","at","index","collectCollapsed","isCollapsed","into","anyNested","hasBody","body","LayerList","props","toggled","setToggled","useState","collapsed","collapsedIds","toggle","next","id","prev","onCollapsedChange","live","useLatest","press","onSelect","mods","locked","lockedIds","selectedIds","bodies","collectBodies","list","visible","walk","level","rowEls","useRef","focusId","setFocusId","pendingFocus","anchor","nudgers","el","tabStop","v","focusRow","selectRange","from","to","a","b","range","keys","e","go","branch","open","delta","parentId","shared","useId","palette","onAdd","addKinds","cls","className","title","kind","empty","Level","out","selected","drag","target","setEl","bind","node","cards","entry","i","kids","childId","path","onPointerDown","ghosted","isSelected","draggedIds","targetIndex","controls","Controls","head","Handle","stop","Grip","Remove","Fragment","ghost","onNudge","onVisibilityChange","onRemove","useSceneLayerList","args","build","scene","itemFor","selection","asNodeId","back","adapter","createMoveToIndexOp","label"],"sources":["../../src/components/LayerList/LayerList.module.css","../../src/components/LayerList/LayerList.tsx","../../src/components/LayerList/useSceneLayerList.ts"],"sourcesContent":["/* Row box, hover and selection are `ItemList`'s, so a layer list and the\n history list stacked under it agree. What is here is only what a layer has. */\n.root,\n.root * {\n box-sizing: border-box;\n}\n\n.root {\n display: grid;\n gap: var(--wzl-space-4);\n}\n\n.head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wzl-space-4);\n}\n\n.title {\n margin: 0;\n font-family: var(--wzl-font-display);\n font-weight: var(--wzl-font-weight-light);\n font-size: var(--wzl-font-size-lg);\n color: var(--wzl-fg);\n}\n\n.palette {\n display: flex;\n gap: var(--wzl-space-2);\n}\n\n.add {\n font: inherit;\n height: var(--wzl-control-h);\n background: transparent;\n border: 1px dashed var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n padding: var(--wzl-space-1) var(--wzl-space-4);\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n cursor: pointer;\n}\n\n.add:hover {\n background: var(--wzl-surface-raised);\n color: var(--wzl-fg);\n}\n\n.level {\n display: flex;\n flex-direction: column;\n gap: 1px;\n position: relative;\n width: 100%;\n}\n\n/* A level of cards is a `PropertyList`, so the controls in each body take the\n panel's density; its rows are spaced like cards rather than lines. */\n.level.cards {\n display: grid;\n row-gap: var(--wzl-space-3);\n}\n\n.entry {\n min-width: 0;\n}\n\n.row {\n user-select: none;\n}\n\n.row:focus-visible {\n outline: 2px solid var(--wzl-focus-ring);\n outline-offset: -2px;\n}\n\n/* A child's twisty sits under its parent's grip. */\n.children {\n padding-left: calc(var(--wzl-disclosure-target, var(--wzl-control-h-sm)) + var(--wzl-space-4));\n}\n\n/* The layer the drag picked up holds its place, faded, while its ghost follows the pointer. */\n.dragging {\n opacity: 0.5;\n}\n\n/* Where the drop would land: a line on the edge of the layer it would land against. */\n.dropBefore {\n box-shadow: 0 -2px 0 var(--wzl-accent);\n}\n\n.dropAfter {\n box-shadow: 0 2px 0 var(--wzl-accent);\n}\n\n/* One width for the grip and the lock, so a locked row's label lines up. */\n.grip,\n.lock {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n min-width: 13px;\n color: var(--wzl-fg-muted);\n}\n\n.row:not([data-locked]) {\n cursor: grab;\n}\n\n.row:not([data-locked]):active {\n cursor: grabbing;\n}\n\n.stop {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n}\n\n/* Holds the twisty column open on rows with nothing to expand, so labels line up down a level. */\n.twistyGap {\n flex: 0 0 auto;\n width: var(--wzl-disclosure-target, var(--wzl-control-h-sm));\n}\n\n/* Sized, so the empty column a locked row keeps is the checkbox's width. */\n.check {\n flex: 0 0 auto;\n width: 13px;\n height: 13px;\n margin: 0;\n accent-color: var(--wzl-accent);\n}\n\n.handle {\n font: inherit;\n background: transparent;\n border: 0;\n color: var(--wzl-fg-subtle);\n padding: var(--wzl-space-1) var(--wzl-space-2);\n cursor: grab;\n touch-action: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--wzl-icon-button-size);\n height: var(--wzl-icon-button-size);\n border-radius: var(--wzl-radius-sm);\n font-weight: var(--wzl-font-weight-bold);\n font-size: var(--wzl-font-size);\n}\n\n.card[data-tone] .handle {\n background: var(--wzl-tone);\n color: var(--wzl-fg-on-accent);\n}\n\n.handle:active {\n cursor: grabbing;\n}\n\n.entry[data-selected] > .card {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -1px;\n}\n","import {\n type KeyboardEvent,\n type ReactNode,\n type RefCallback,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLatest } from '@weasel-js/core';\nimport { dlog } from '../../dlog';\nimport { LockIcon } from '../../icons';\nimport { type PressModifiers, useReorderDragList } from '../../useReorderDragList';\nimport { CloseButton } from '../CloseButton';\nimport { Disclosure } from '../Disclosure';\nimport { DragGhost } from '../DragGhost';\nimport { DragGrip } from '../DragGrip';\nimport rows from '../ItemList/ItemList.module.css';\nimport { PropertyGroup, PropertyList } from '../Properties';\nimport type { StanceProps } from '../stance';\nimport s from './LayerList.module.css';\n\n/** One layer. With a body (see `renderBody`) it draws as a card that folds its\n * body away; without one, as a one-line row. Either can hold child layers. */\nexport interface LayerListItem {\n id: string;\n /** The layer's name. Also what its controls are labeled by. */\n label: string;\n /** Shown in the header in place of `label` — a select that switches the\n * layer's kind, say. */\n title?: ReactNode;\n /** Fixed-size content before the label: a color swatch, a kind icon. */\n leading?: ReactNode;\n /** Drawn in the drag handle in place of the grip — an ordinal. */\n badge?: ReactNode;\n /** Which of its list this layer is: an index into the theme's tone list, or\n * a color. A card draws its edge and handle in it and recolors its controls. */\n tone?: StanceProps['tone'];\n /** Cannot be dragged, hidden or removed, walls off drops on either side, and\n * selects alone rather than joining a multi-selection. */\n locked?: boolean;\n /** Shown or not, when the list has `onVisibilityChange`. Default true. */\n visible?: boolean;\n children?: LayerListItem[];\n /** Folds the body and children away until the user opens them.\n * `collapsedIds` overrides it. */\n defaultCollapsed?: boolean;\n}\n\n/**\n * A reorder: `ids`, siblings under `parentId` (`null` at the top level), now\n * sit as one block in list order starting at `index` of the parent's children.\n * A drag never moves a layer to another parent.\n */\nexport interface LayerMove {\n ids: string[];\n parentId: string | null;\n index: number;\n}\n\n/** Props for `<LayerList>`. */\nexport interface LayerListProps {\n items: LayerListItem[];\n /** Omit for a list the user cannot reorder. */\n onReorder?: (move: LayerMove) => void;\n /** Giving both makes rows selectable: a click selects one, shift-click adds\n * or removes one, and dragging a selected row drags its selected siblings. */\n selectedIds?: readonly string[];\n onSelect?: (ids: string[]) => void;\n /** Adds a visibility checkbox to every unlocked layer. */\n onVisibilityChange?: (id: string, visible: boolean) => void;\n /** Adds a remove button to every unlocked layer. */\n onRemove?: (id: string) => void;\n /** A layer's controls. Returning `null` leaves that layer a one-line row. */\n renderBody?: (item: LayerListItem) => ReactNode;\n /** Ids whose body and children are folded away. Giving it makes folding\n * controlled; `onCollapsedChange` fires either way. */\n collapsedIds?: readonly string[];\n onCollapsedChange?: (ids: string[]) => void;\n /** Heading above the list. */\n title?: string;\n /** Names the list for assistive tech when it has no `title`. */\n label?: string;\n /** Kinds the user can add, as buttons beside the title. Shown only with `onAdd`. */\n addKinds?: string[];\n onAdd?: (kind: string) => void;\n /** Shown in place of the list when `items` is empty. */\n empty?: ReactNode;\n /** Appended to the root's class list — the module's own names are hashed. */\n className?: string;\n}\n\n/** Returns `items` with `move` applied, for a consumer that holds the tree as state. */\nexport function moveLayers(items: LayerListItem[], move: LayerMove): LayerListItem[] {\n if (move.parentId === null) return reorder(items, move);\n return items.map((item) => {\n if (item.id === move.parentId) return { ...item, children: reorder(item.children ?? [], move) };\n return item.children ? { ...item, children: moveLayers(item.children, move) } : item;\n });\n}\n\nfunction reorder(siblings: LayerListItem[], { ids, index }: LayerMove): LayerListItem[] {\n const moving = new Set(ids);\n const kept = siblings.filter((it) => !moving.has(it.id));\n const moved = siblings.filter((it) => moving.has(it.id));\n const at = Math.max(0, Math.min(kept.length, index));\n return [...kept.slice(0, at), ...moved, ...kept.slice(at)];\n}\n\nfunction collectCollapsed(\n items: LayerListItem[],\n isCollapsed: (item: LayerListItem) => boolean,\n into = new Set<string>(),\n): Set<string> {\n for (const item of items) {\n if (isCollapsed(item)) into.add(item.id);\n if (item.children) collectCollapsed(item.children, isCollapsed, into);\n }\n return into;\n}\n\nfunction anyNested(items: LayerListItem[]): boolean {\n return items.some((it) => (it.children?.length ?? 0) > 0);\n}\n\n/** What every level of the tree reads from the list. */\ninterface Shared {\n props: LayerListProps;\n collapsed: ReadonlySet<string>;\n toggle: (id: string) => void;\n press: (item: LayerListItem, mods: PressModifiers) => void;\n uid: string;\n /** Some layer has children, so every row keeps a twisty column. */\n nested: boolean;\n /** Each layer's body, rendered once; a row where it is empty. */\n bodies: ReadonlyMap<string, ReactNode>;\n /** Per sibling group, keyed by parent: move a row one place, as its drag would. */\n nudgers: Map<string | null, (id: string, delta: -1 | 1) => boolean>;\n keys: RowKeys;\n}\n\n/** The roving focus over the rows: one row is in the tab order at a time. */\ninterface RowKeys {\n tabStop: string | undefined;\n register: (id: string) => (el: HTMLElement | null) => void;\n onKeyDown: (item: LayerListItem, parentId: string | null) => (e: KeyboardEvent<HTMLElement>) => void;\n onFocus: (id: string) => void;\n}\n\ninterface VisibleRow {\n item: LayerListItem;\n parentId: string | null;\n level: number;\n}\n\nfunction hasBody(body: ReactNode): boolean {\n return body !== null && body !== undefined && body !== false;\n}\n\n/**\n * An ordered, drag-reorderable list of layers — a document's objects, a lab's\n * canvases, a fill's effects. Each layer is a one-line row or, with a body, a\n * card whose controls fold away; either can nest child layers. Selection,\n * visibility, removal and an add palette are each on when their handler is given.\n */\nexport function LayerList(props: LayerListProps) {\n const { items, collapsedIds, onCollapsedChange, title, addKinds, onAdd, empty, className } = props;\n // Only the user's own toggles are state; everything else reads the layer's\n // `defaultCollapsed`, so a layer added later starts the way it asks to.\n const [toggled, setToggled] = useState<ReadonlyMap<string, boolean>>(new Map());\n const collapsed = collapsedIds\n ? new Set(collapsedIds)\n : collectCollapsed(items, (item) => toggled.get(item.id) ?? item.defaultCollapsed === true);\n const toggle = (id: string) => {\n const next = new Set(collapsed);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n if (!collapsedIds) setToggled((prev) => new Map(prev).set(id, next.has(id)));\n onCollapsedChange?.([...next]);\n };\n\n // The press arrives after the drag session ends, which can be after a render\n // the closure did not see, so it reads the selection from here.\n const live = useLatest(props);\n const press = (item: LayerListItem, mods: PressModifiers) => {\n const { selectedIds = [], onSelect } = live.current;\n if (!onSelect) return;\n anchor.current = item.id;\n if (item.locked || !mods.shiftKey) {\n onSelect([item.id]);\n return;\n }\n // A leftover locked selection does not carry into a multi-selection.\n const locked = new Set(lockedIds(live.current.items));\n const kept = selectedIds.filter((id) => !locked.has(id));\n onSelect(kept.includes(item.id) ? kept.filter((id) => id !== item.id) : [...kept, item.id]);\n };\n\n const bodies = new Map<string, ReactNode>();\n const collectBodies = (list: LayerListItem[]) => {\n for (const it of list) {\n bodies.set(it.id, props.renderBody ? props.renderBody(it) : null);\n if (it.children) collectBodies(it.children);\n }\n };\n collectBodies(items);\n\n // The rows the arrow keys walk: open branches only, and not cards, whose\n // heads are their own controls.\n const visible: VisibleRow[] = [];\n const walk = (list: LayerListItem[], parentId: string | null, level: number) => {\n for (const item of list) {\n if (!hasBody(bodies.get(item.id))) visible.push({ item, parentId, level });\n if (item.children?.length && !collapsed.has(item.id)) walk(item.children, item.id, level + 1);\n }\n };\n walk(items, null, 1);\n\n const rowEls = useRef(new Map<string, HTMLElement>());\n const [focusId, setFocusId] = useState<string | null>(null);\n const pendingFocus = useRef<string | null>(null);\n const anchor = useRef<string | null>(null);\n const nudgers = useRef(new Map<string | null, (id: string, delta: -1 | 1) => boolean>()).current;\n useLayoutEffect(() => {\n const id = pendingFocus.current;\n if (id === null) return;\n pendingFocus.current = null;\n const el = rowEls.current.get(id);\n if (el && document.activeElement !== el) el.focus();\n });\n\n const selectedIds = props.selectedIds ?? [];\n const tabStop = visible.some((v) => v.item.id === focusId)\n ? (focusId ?? undefined)\n : (visible.find((v) => selectedIds.includes(v.item.id)) ?? visible[0])?.item.id;\n\n const focusRow = (id: string) => {\n pendingFocus.current = id;\n setFocusId(id);\n };\n // Locked rows never join a multi-selection, so a range passes over them.\n const selectRange = (to: string) => {\n const from = anchor.current ?? to;\n const a = visible.findIndex((v) => v.item.id === from);\n const b = visible.findIndex((v) => v.item.id === to);\n if (a < 0 || b < 0) return;\n const range = visible\n .slice(Math.min(a, b), Math.max(a, b) + 1)\n .filter((v) => !v.item.locked)\n .map((v) => v.item.id);\n if (range.length > 0) live.current.onSelect?.(range);\n };\n\n const keys: RowKeys = {\n tabStop,\n register: (id) => (el) => {\n if (el) rowEls.current.set(id, el);\n else rowEls.current.delete(id);\n },\n onFocus: (id) => {\n setFocusId(id);\n anchor.current ??= id;\n },\n onKeyDown: (item, parentId) => (e) => {\n // Keys on a control inside the row are the control's.\n if (e.target !== e.currentTarget) return;\n const at = visible.findIndex((v) => v.item.id === item.id);\n const go = (index: number) => {\n const next = visible[Math.max(0, Math.min(visible.length - 1, index))];\n if (!next) return;\n focusRow(next.item.id);\n if (e.shiftKey && props.onSelect) selectRange(next.item.id);\n else anchor.current = next.item.id;\n };\n const branch = (item.children?.length ?? 0) > 0;\n const open = branch && !collapsed.has(item.id);\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n if (e.altKey) {\n if (nudgers.get(parentId)?.(item.id, delta)) pendingFocus.current = item.id;\n } else {\n go(at + delta);\n }\n break;\n }\n case 'Home':\n go(0);\n break;\n case 'End':\n go(visible.length - 1);\n break;\n case 'ArrowRight':\n if (branch && !open) toggle(item.id);\n else if (open) go(at + 1);\n else return;\n break;\n case 'ArrowLeft':\n if (open) toggle(item.id);\n else if (parentId !== null) go(visible.findIndex((v) => v.item.id === parentId));\n else return;\n break;\n case 'Enter':\n case ' ':\n press(item, { shiftKey: e.shiftKey, ctrlKey: e.ctrlKey, metaKey: e.metaKey, altKey: e.altKey });\n break;\n default:\n return;\n }\n e.preventDefault();\n },\n };\n\n const uid = useId();\n const shared: Shared = { props, collapsed, toggle, press, uid, nested: anyNested(items), bodies, nudgers, keys };\n const palette = onAdd ? (addKinds ?? []) : [];\n const cls = className ? `${s.root} ${className}` : s.root;\n\n return (\n <div className={cls}>\n {(title !== undefined || palette.length > 0) && (\n <div className={s.head}>\n {title !== undefined && <h2 className={s.title}>{title}</h2>}\n <div className={s.palette}>\n {palette.map((kind) => (\n <button\n key={kind}\n type=\"button\"\n className={s.add}\n aria-label={`Add ${kind}`}\n onClick={() => {\n dlog('layer-list', 'onAdd', { kind });\n onAdd?.(kind);\n }}\n >\n {kind}\n </button>\n ))}\n </div>\n </div>\n )}\n {items.length === 0 ? (\n <div className={rows.empty}>\n {empty ?? (palette.length > 0 ? 'No layers — add one above.' : 'No layers.')}\n </div>\n ) : (\n <Level items={items} parentId={null} shared={shared} path=\"\" level={1} />\n )}\n </div>\n );\n}\n\nfunction lockedIds(items: LayerListItem[]): string[] {\n const out: string[] = [];\n for (const it of items) {\n if (it.locked) out.push(it.id);\n if (it.children) out.push(...lockedIds(it.children));\n }\n return out;\n}\n\ninterface LevelProps {\n items: LayerListItem[];\n parentId: string | null;\n shared: Shared;\n path: string;\n level: number;\n}\n\n/** One sibling group. Each has its own drag, so a drag stays under one parent. */\nfunction Level({ items, parentId, shared, path, level }: LevelProps) {\n const { props } = shared;\n const selected = props.selectedIds ?? [];\n const drag = useReorderDragList({\n // With no `onReorder` every row is a locked one to the drag, so a press\n // still reaches `onPress` and nothing ever engages.\n items: items.map((it) => ({ id: it.id, label: it.label, locked: it.locked || !props.onReorder })),\n selectedIds: items.filter((it) => selected.includes(it.id)).map((it) => it.id),\n onReorder: (ids, target) => {\n const moving = new Set(ids);\n const inOrder = items.filter((it) => moving.has(it.id)).map((it) => it.id);\n // The hook's index counts the dragged rows; a move's index does not.\n const before = items.slice(0, target).filter((it) => moving.has(it.id)).length;\n const move = { ids: inOrder, parentId, index: target - before };\n dlog('layer-list', 'onReorder', move);\n props.onReorder?.(move);\n },\n onPress: (id, mods) => {\n const item = items.find((it) => it.id === id);\n if (item) shared.press(item, mods);\n },\n });\n shared.nudgers.set(parentId, (id, delta) =>\n drag.nudge(id, items.findIndex((it) => it.id === id), delta),\n );\n const [el, setEl] = useState<HTMLDivElement | null>(null);\n const bind = (node: HTMLDivElement | null) => {\n setEl(node);\n (drag.containerProps.ref as RefCallback<HTMLDivElement>)(node);\n };\n\n const bodies = items.map((it) => shared.bodies.get(it.id));\n const cards = bodies.some(hasBody);\n const { draggedIds, targetIndex, ghost } = drag.state;\n\n const entry = (item: LayerListItem, i: number, ghosted: boolean) => {\n const body = bodies[i];\n const kids = item.children ?? [];\n const open = !shared.collapsed.has(item.id);\n const childId = `${shared.uid}${path}-${i}`;\n const onPointerDown = ghosted ? undefined : drag.rowProps(item.id, i).onPointerDown;\n const isSelected = selected.includes(item.id);\n const cls = [s.entry];\n if (!ghosted) {\n if (draggedIds?.includes(item.id)) cls.push(s.dragging);\n if (targetIndex === i && !draggedIds?.includes(item.id)) cls.push(s.dropBefore);\n if (targetIndex === items.length && i === items.length - 1) cls.push(s.dropAfter);\n }\n const controls = <Controls item={item} shared={shared} />;\n const head =\n hasBody(body) ? (\n <PropertyGroup\n className={s.card}\n title={item.title ?? item.label}\n {...(item.tone === undefined ? {} : { tone: item.tone })}\n collapsed={ghosted || !open}\n onCollapsedChange={() => shared.toggle(item.id)}\n leading={\n <Handle\n item={item}\n reorder={props.onReorder !== undefined}\n onPointerDown={onPointerDown}\n onNudge={(delta) => shared.nudgers.get(parentId)?.(item.id, delta)}\n />\n }\n actions={ghosted ? undefined : controls}\n >\n {ghosted ? null : body}\n </PropertyGroup>\n ) : (\n <div\n className={[rows.row, s.row, isSelected ? rows.selected : ''].filter(Boolean).join(' ')}\n data-selected={isSelected ? 'true' : undefined}\n data-locked={item.locked ? 'true' : undefined}\n onPointerDown={onPointerDown}\n {...(ghosted\n ? {}\n : {\n role: 'row',\n 'aria-level': level,\n ...(kids.length > 0 ? { 'aria-expanded': open } : {}),\n ...(props.onSelect ? { 'aria-selected': isSelected } : {}),\n tabIndex: shared.keys.tabStop === item.id ? 0 : -1,\n ref: shared.keys.register(item.id),\n onKeyDown: shared.keys.onKeyDown(item, parentId),\n onFocus: () => shared.keys.onFocus(item.id),\n })}\n >\n {shared.nested &&\n (kids.length > 0 ? (\n <span className={s.stop} onPointerDown={stop}>\n <Disclosure\n open={open}\n onToggle={() => shared.toggle(item.id)}\n label={`${item.label} sublayers`}\n controls={childId}\n />\n </span>\n ) : (\n <span className={s.twistyGap} />\n ))}\n <Grip item={item} reorder={props.onReorder !== undefined} />\n {props.onVisibilityChange &&\n (item.locked ? (\n <span className={s.check} />\n ) : (\n <input\n className={s.check}\n type=\"checkbox\"\n checked={item.visible !== false}\n onPointerDown={stop}\n onChange={(e) => props.onVisibilityChange?.(item.id, e.target.checked)}\n aria-label={`Show ${item.label}`}\n />\n ))}\n {item.leading}\n <span className={rows.label}>{item.title ?? item.label}</span>\n {ghosted ? null : <Remove item={item} shared={shared} />}\n </div>\n );\n return (\n <div key={item.id} role=\"none\" className={cls.join(' ')} data-selected={isSelected ? 'true' : undefined}>\n {head}\n {!ghosted && kids.length > 0 && open && (\n <div id={childId} role=\"rowgroup\" className={s.children}>\n <Level items={kids} parentId={item.id} shared={shared} path={`${path}-${i}`} level={level + 1} />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <>\n {cards ? (\n <PropertyList ref={bind} className={`${s.level} ${s.cards}`}>\n {items.map((it, i) => entry(it, i, false))}\n </PropertyList>\n ) : (\n <div\n ref={bind}\n className={s.level}\n {...(parentId === null\n ? {\n role: 'treegrid',\n 'aria-label': props.label ?? props.title ?? 'Layers',\n ...(props.onSelect ? { 'aria-multiselectable': true } : {}),\n }\n : { role: 'none' })}\n >\n {items.map((it, i) => entry(it, i, false))}\n </div>\n )}\n {ghost && el ? (\n <DragGhost at={ghost} from={el}>\n {items.map((it, i) => (ghost.ids.includes(it.id) ? entry(it, i, true) : null))}\n </DragGhost>\n ) : null}\n </>\n );\n}\n\n// Keeps a press on a control inside a row from also starting the row's press.\nconst stop = (e: { stopPropagation(): void }) => e.stopPropagation();\n\n/** A row's grip: decoration, since the whole row takes the drag. */\nfunction Grip({ item, reorder }: { item: LayerListItem; reorder: boolean }) {\n if (item.locked) {\n return (\n <span className={s.lock} role=\"img\" aria-label=\"Locked\">\n <LockIcon size={12} />\n </span>\n );\n }\n if (!reorder && item.badge === undefined) return null;\n return (\n <span className={s.grip} aria-hidden=\"true\">\n {item.badge ?? <DragGrip size={13} />}\n </span>\n );\n}\n\n/** A card's handle: the drag target, since the rest of its head folds it, and\n * Alt+Up/Down on it moves the card. */\nfunction Handle({\n item,\n reorder,\n onPointerDown,\n onNudge,\n}: {\n item: LayerListItem;\n reorder: boolean;\n onPointerDown: ((e: React.PointerEvent) => void) | undefined;\n onNudge: (delta: -1 | 1) => void;\n}) {\n if (item.locked) return <Grip item={item} reorder={reorder} />;\n if (!reorder && item.badge === undefined) return undefined;\n return (\n <button\n type=\"button\"\n className={s.handle}\n aria-label={`Drag to reorder ${item.label}`}\n aria-keyshortcuts=\"Alt+ArrowUp Alt+ArrowDown\"\n onPointerDown={onPointerDown}\n onKeyDown={(e) => {\n if (!e.altKey || (e.key !== 'ArrowUp' && e.key !== 'ArrowDown')) return;\n e.preventDefault();\n onNudge(e.key === 'ArrowUp' ? -1 : 1);\n }}\n >\n {item.badge ?? <DragGrip />}\n </button>\n );\n}\n\nfunction Controls({ item, shared }: { item: LayerListItem; shared: Shared }) {\n const { onVisibilityChange } = shared.props;\n return (\n <>\n {onVisibilityChange && !item.locked && (\n <input\n className={s.check}\n type=\"checkbox\"\n checked={item.visible !== false}\n onClick={stop}\n onChange={(e) => onVisibilityChange(item.id, e.target.checked)}\n aria-label={`Show ${item.label}`}\n />\n )}\n <Remove item={item} shared={shared} />\n </>\n );\n}\n\nfunction Remove({ item, shared }: { item: LayerListItem; shared: Shared }) {\n const { onRemove } = shared.props;\n if (!onRemove || item.locked) return null;\n return (\n <span className={s.stop} onPointerDown={stop}>\n <CloseButton ariaLabel={`Remove ${item.label}`} onClick={() => onRemove(item.id)} />\n </span>\n );\n}\n","import { asNodeId, createMoveToIndexOp, dispatchApplyBatch } from '@weasel-js/core';\nimport type { NodeId, Scene, SceneNode, SelectionApi } from '@weasel-js/core';\nimport type { LayerListItem, LayerListProps } from './LayerList';\n\n/** Arguments for {@link useSceneLayerList}. */\nexport interface UseSceneLayerListArgs<TData, TLayer extends string, TPose> {\n scene: Scene<TData, TLayer, TPose>;\n selection: SelectionApi;\n /** What the reorder op is dispatched against — the adapter `<SceneCanvas>` uses. */\n adapter: object;\n /** A row's content for a node: its label, a leading swatch or icon, whether it is locked. */\n itemFor: (node: SceneNode<TData, TLayer, TPose>) => Omit<LayerListItem, 'id' | 'children'>;\n /** Label of the reorder's history entry. Default `'Reorder'`. */\n label?: string;\n}\n\n/**\n * The props that put a scene in a `<LayerList>`: a row per node, a container's\n * children nested under it, the front-most at the top, selection read from and\n * written to `selection`, and a drag dispatched as a `MoveToIndexOp`.\n */\nexport function useSceneLayerList<TData, TLayer extends string, TPose>(\n args: UseSceneLayerListArgs<TData, TLayer, TPose>,\n): Required<Pick<LayerListProps, 'items' | 'selectedIds' | 'onSelect' | 'onReorder'>> {\n const { scene, selection, adapter, itemFor, label = 'Reorder' } = args;\n\n // A scene orders children back to front and the list front to back. Rebuilt\n // every render: the scene keeps its identity across a reorder, so a memo keyed\n // on it would serve the order from before.\n const build = (ids: readonly NodeId[]): LayerListItem[] =>\n [...ids].reverse().flatMap((id) => {\n const node = scene.get(id);\n if (!node) return [];\n const kids = scene.childrenOf(id);\n return [{ ...itemFor(node), id, ...(kids.length > 0 ? { children: build(kids) } : {}) }];\n });\n\n return {\n items: build(scene.roots),\n selectedIds: selection.current.map(String),\n onSelect: (ids) => selection.set(ids.map(asNodeId)),\n onReorder: ({ ids, parentId, index }) => {\n const siblings = parentId === null ? scene.roots : scene.childrenOf(asNodeId(parentId));\n // `index` counts from the front among the siblings the drag left behind.\n const back = siblings.length - ids.length - index;\n dispatchApplyBatch(adapter, [createMoveToIndexOp({ ids, parentId, index: Math.max(0, back) })], label);\n },\n };\n}\n"],"mappings":"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"}