@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":"useAsyncOptions.d.ts","sourceRoot":"","sources":["../src/useAsyncOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3B,oEAAoE;AACpE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,GAAG,IAAI,cAAc,GAAG;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEvE,2CAA2C;AAC3C,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,GAAG,IAAI;IAChD;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,GAAG,IAAI;IAC9C,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,GAAG,MAAM,EAAE,EACtD,IAAI,EACJ,UAAgB,EAChB,SAAa,GACd,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CA8DjD"}
1
+ {"version":3,"file":"useAsyncOptions.d.ts","sourceRoot":"","sources":["../src/useAsyncOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3B,oEAAoE;AACpE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,GAAG,IAAI,cAAc,GAAG;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEvE,2CAA2C;AAC3C,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,GAAG,IAAI;IAChD;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,GAAG,IAAI;IAC9C,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,GAAG,MAAM,EAAE,EACtD,IAAI,EACJ,UAAgB,EAChB,SAAa,GACd,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CA6DjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useReorderDragList.d.ts","sourceRoot":"","sources":["../src/useReorderDragList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,IAAI,iBAAiB,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIvF,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB;8DAC0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD;;;;;oEAKgE;IAChE,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IACjD,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;0BAEsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;CAC5B;AAID;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,aAAa,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IACnF,cAAc,EAAE;QACd,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;KAC/B,CAAC;IACF,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAC1D;AAuDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,mBAAmB,CAwHvF"}
1
+ {"version":3,"file":"useReorderDragList.d.ts","sourceRoot":"","sources":["../src/useReorderDragList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,IAAI,iBAAiB,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIvF,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB;8DAC0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD;;;;;oEAKgE;IAChE,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IACjD,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;0BAEsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;CAC5B;AAID;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,aAAa,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IACnF,cAAc,EAAE;QACd,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;KAC/B,CAAC;IACF,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAC1D;AAuDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,mBAAmB,CAuHvF"}
@@ -1,59 +1,60 @@
1
1
  import { type KeyboardEvent as ReactKeyboardEvent, type RefObject } from 'react';
2
- /** The only thing the hook needs to know about a bar's items: which are
3
- * skipped by arrow navigation. */
4
- export type RovingItem = {
5
- disabled?: boolean;
6
- };
2
+ /** Which arrow keys walk the items. `'both'` answers to all four, the way a
3
+ * radio group does; a one-axis toolbar leaves the cross-axis arrows to the
4
+ * page. Matches `aria-orientation` for the one-axis values. */
5
+ export type RovingOrientation = 'horizontal' | 'vertical' | 'both';
7
6
  /** Options for {@link useRovingTabIndex}. */
8
7
  export type UseRovingTabIndexOptions = {
9
- /** In the same order as the elements carrying `itemClassName`. */
10
- items: readonly RovingItem[];
11
- /** Class on the focusable element of each item, inside the container the
12
- * returned `rootRef` is attached to. Their DOM order must match `items`. */
13
- itemClassName: string;
14
- /** Index that carries `tabIndex=0`. Defaults to the first enabled item; a
15
- * radiogroup-style bar passes its selected index so Tab lands on the
16
- * current value. */
8
+ /** Selects the items inside the container, in DOM order. Items belonging to
9
+ * a nested roving container are its own, not this one's. Defaults to
10
+ * `'button, [role="button"]'`. */
11
+ itemSelector?: string;
12
+ /** Defaults to `'both'`. */
13
+ orientation?: RovingOrientation;
14
+ /** The item that holds the tab stop while focus is outside the container —
15
+ * a radiogroup-style bar passes its selected index so Tab lands on the
16
+ * current value. Omitted, the stop stays on whichever item last had focus,
17
+ * starting at the first enabled one. */
17
18
  tabStopIndex?: number;
18
- /** Called with the new index as arrow/Home/End focus moves, before focus
19
- * moves. This is where a selection-follows-focus bar commits the value. */
19
+ /** Called with the destination index as arrow/Home/End navigation moves,
20
+ * before focus does. This is where a selection-follows-focus bar commits
21
+ * the value. */
20
22
  onNavigate?: (index: number) => void;
21
23
  /** Space/Enter on the item at `index`. When omitted the keypress is left
22
24
  * alone, which on a native `<button>` produces an ordinary click. */
23
25
  onActivate?: (index: number) => void;
24
26
  };
25
- /**
26
- * What {@link useRovingTabIndex} returns: a container ref plus the per-item
27
- * `tabIndex` and `onKeyDown` values to spread onto each item.
28
- */
27
+ /** What {@link useRovingTabIndex} returns. Attach both to the container. */
29
28
  export type RovingTabIndex<T extends HTMLElement = HTMLDivElement> = {
30
- /** Attach to the container element that holds the items. */
31
29
  rootRef: RefObject<T | null>;
32
- /** `tabIndex` value for the item at `index`. */
33
- tabIndexFor: (index: number) => 0 | -1;
34
- /** `onKeyDown` for the item at `index`. */
35
- onKeyDown: (index: number) => (e: ReactKeyboardEvent<HTMLElement>) => void;
30
+ onKeyDown: (e: ReactKeyboardEvent<T>) => void;
36
31
  };
32
+ /** Where `key` takes focus from `current`, or null if it does not move it.
33
+ * Arrows skip disabled items and wrap; Home and End go to the first and last
34
+ * enabled item. */
35
+ export declare function rovingTarget(current: number, key: string, enabled: readonly boolean[], orientation?: RovingOrientation): number | null;
37
36
  /**
38
- * Roving tabindex for a bar of items: one item is in the tab order, and the
39
- * arrow keys move focus among the rest, skipping disabled ones and wrapping
40
- * at both ends. Home and End go to the first and last enabled item. Both axes
41
- * navigate, so the same bar works laid out either way.
37
+ * The APG roving-tabindex contract for a container of items: exactly one item
38
+ * is in the tab order, and the arrow keys move focus among the rest, skipping
39
+ * disabled ones (`disabled` or `aria-disabled="true"`) and wrapping at both
40
+ * ends. Home and End go to the first and last enabled item. While focus is
41
+ * inside, the focused item holds the tab stop, so Tab and Shift+Tab both leave
42
+ * the container.
42
43
  *
43
- * Backs `ButtonBar`, `OptionsBar`, and `ToggleBar`.
44
+ * The items are found in the DOM and their `tabIndex` is written there, so the
45
+ * container can hold arbitrary children; callers must not render `tabIndex` on
46
+ * the items themselves. Adding, removing, disabling or enabling an item moves
47
+ * the stop without the container re-rendering.
48
+ *
49
+ * With every item disabled there is no tab stop and the container drops out of
50
+ * the tab order entirely.
44
51
  *
45
52
  * **When a bar should not use this.** What decides it is the items, not who
46
53
  * owns them. A container of compound controls — a number field, a select, a
47
54
  * color field — must leave the arrow keys alone, because those controls edit
48
- * their own value with them; taking the arrows over would break the control
49
- * to navigate between controls. `ToolOptionsBar` is that case: it draws its
50
- * own controls from a tool's schema now rather than taking arbitrary
51
- * children, and a schema-drawn number field eats arrows exactly as a
52
- * hand-placed one did, so it keeps plain DOM tab order. A bar whose items are
53
- * all simple buttons is the case this hook is for.
54
- *
55
- * With every item disabled there is no tab stop and the bar drops out of the
56
- * tab order entirely.
55
+ * their own value with them. `ToolOptionsBar` is that case, and keeps plain
56
+ * DOM tab order. A bar whose items are all simple buttons is the case this
57
+ * hook is for.
57
58
  */
58
- export declare function useRovingTabIndex<T extends HTMLElement = HTMLDivElement>(options: UseRovingTabIndexOptions): RovingTabIndex<T>;
59
+ export declare function useRovingTabIndex<T extends HTMLElement = HTMLDivElement>(options?: UseRovingTabIndexOptions): RovingTabIndex<T>;
59
60
  //# sourceMappingURL=useRovingTabIndex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRovingTabIndex.d.ts","sourceRoot":"","sources":["../src/useRovingTabIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,aAAa,IAAI,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF;mCACmC;AACnC,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhD,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG;IACrC,kEAAkE;IAClE,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B;iFAC6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB;;yBAEqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;gFAC4E;IAC5E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;0EACsE;IACtE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,IAAI;IACnE,4DAA4D;IAC5D,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,gDAAgD;IAChD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,2CAA2C;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAC5E,CAAC;AA8BF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,EACtE,OAAO,EAAE,wBAAwB,GAChC,cAAc,CAAC,CAAC,CAAC,CAmDnB"}
1
+ {"version":3,"file":"useRovingTabIndex.d.ts","sourceRoot":"","sources":["../src/useRovingTabIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,IAAI,kBAAkB,EACxC,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf;;gEAEgE;AAChE,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAEnE,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG;IACrC;;uCAEmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;6CAGyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;qBAEiB;IACjB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;0EACsE;IACtE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,IAAI;IACnE,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAC/C,CAAC;AASF;;oBAEoB;AACpB,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,WAAW,GAAE,iBAA0B,GACtC,MAAM,GAAG,IAAI,CAmBf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,EACtE,OAAO,GAAE,wBAA6B,GACrC,cAAc,CAAC,CAAC,CAAC,CAqGnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/ui",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "UI chrome primitives for weasel apps (properties panel, etc.)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,17 +23,17 @@
23
23
  "./package.json": "./package.json"
24
24
  },
25
25
  "dependencies": {
26
- "@weasel-js/font": "1.7.0",
27
- "@weasel-js/modes": "1.7.0",
28
- "@weasel-js/quantity": "1.7.0",
29
- "@weasel-js/svg": "1.7.0",
30
- "@weasel-js/theme": "1.7.0",
26
+ "@weasel-js/font": "1.7.1",
27
+ "@weasel-js/modes": "1.7.1",
28
+ "@weasel-js/quantity": "1.7.1",
29
+ "@weasel-js/svg": "1.7.1",
30
+ "@weasel-js/theme": "1.7.1",
31
31
  "react-aria-components": "^1.5.0"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "react": ">=18",
35
35
  "react-dom": ">=18",
36
- "@weasel-js/core": "1.7.0"
36
+ "@weasel-js/core": "1.7.1"
37
37
  },
38
38
  "author": "orochi235",
39
39
  "homepage": "https://orochi235.github.io/weasel/",
@@ -61,7 +61,7 @@
61
61
  "provenance": true
62
62
  },
63
63
  "devDependencies": {
64
- "@weasel-js/cursor": "1.7.0",
65
- "@weasel-js/geom": "1.7.0"
64
+ "@weasel-js/cursor": "1.7.1",
65
+ "@weasel-js/geom": "1.7.1"
66
66
  }
67
67
  }
@@ -1,57 +0,0 @@
1
- import { n as e, r as t } from "./Tooltip-Clg2mhSt.js";
2
- import { t as n } from "./formatShortcut-DRQrVThu.js";
3
- import { actionItems as r, actionShortcuts as i, buildDepsFromRequires as a, evaluateEnabled as o, useActionsRegistry as s, useOptionalDepRegistry as c } from "@weasel-js/core";
4
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
- import { useSyncExternalStore as d } from "react";
6
- import { Focusable as f } from "react-aria-components";
7
- var p = {
8
- bar: "_bar_1x8zd_7",
9
- vertical: "_vertical_1x8zd_18",
10
- button: "_button_1x8zd_22"
11
- }, m = Object.freeze([]), h = () => () => {};
12
- function g(e, t) {
13
- if (t !== void 0) return t;
14
- let n = e.icon;
15
- return typeof n == "function" ? n() : n;
16
- }
17
- function _(e, t) {
18
- let r = t.action.shortcut ?? n(i(t.action, t.params)[0]);
19
- return r ? `${e} (${r})` : e;
20
- }
21
- function v(n) {
22
- let { group: i, orientation: v = "horizontal", icons: y, labels: b, className: x } = n, S = s(), C = c(), w = d(S ? S.subscribe : h, S ? S.list : () => m, S ? S.list : () => m).filter((e) => e.group === i).flatMap(r), T = [
23
- p.bar,
24
- v === "vertical" && p.vertical,
25
- x
26
- ].filter(Boolean).join(" ");
27
- return /* @__PURE__ */ l("div", {
28
- className: T,
29
- role: "toolbar",
30
- "aria-label": `${i} actions`,
31
- children: w.map((n) => {
32
- let r = b?.[n.key] ?? n.label, i = g(n, y?.[n.key]), s = C ? a(n.action, C) : void 0, { enabled: c } = o(n.action, s), d = !c, m = _(r, n);
33
- return /* @__PURE__ */ u(t, {
34
- isDisabled: d,
35
- children: [/* @__PURE__ */ l(f, {
36
- isDisabled: d,
37
- children: /* @__PURE__ */ l("button", {
38
- type: "button",
39
- "data-testid": `action-bar-item-${n.key}`,
40
- "aria-label": r,
41
- "aria-disabled": d || void 0,
42
- disabled: d,
43
- className: p.button,
44
- onClick: () => {
45
- d || S?.trigger(n.action.id, n.params);
46
- },
47
- children: i
48
- })
49
- }), /* @__PURE__ */ l(e, { children: m })]
50
- }, n.key);
51
- })
52
- });
53
- }
54
- //#endregion
55
- export { v as t };
56
-
57
- //# sourceMappingURL=ActionBar-DCq16yFA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionBar-DCq16yFA.js","names":["s","TooltipTrigger","Tooltip","Tooltip$1","TooltipTrigger$1","formatShortcut","ActionBar_module_default","EMPTY_LIST","noopSubscribe","resolveIcon","override","i","item","resolveTitle","shortcut","actionShortcuts","label","ActionBar","props","registry","useActionsRegistry","depReg","useOptionalDepRegistry","items","useSyncExternalStore","a","group","actionItems","cls","orientation","className","labels","icon","icons","deps","buildDepsFromRequires","evaluateEnabled","disabled","enabled","title","Focusable"],"sources":["../../src/components/ActionBar/ActionBar.module.css","../../src/components/ActionBar/ActionBar.tsx"],"sourcesContent":["/* `<ActionBar>` shares the segmented widget look of the WeaselDraw\n * pathfinder panel — small chrome on the panel surface so a bar of\n * Action buttons reads as a single control. Tokens are theme-driven\n * via `--wzl-*`. Visual parity with `PathfinderPanel.module.css` is\n * intentional; this is the generic version. */\n\n.bar {\n display: flex;\n flex-direction: row;\n gap: 1px;\n background: var(--wzl-surface);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n padding: var(--wzl-space-1);\n user-select: none;\n}\n\n.bar.vertical {\n flex-direction: column;\n}\n\n.button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wzl-tb-height);\n height: var(--wzl-tb-height);\n padding: 0;\n background: transparent;\n border: 0;\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg);\n cursor: default;\n}\n\n.button:hover:not([disabled]) {\n background: var(--wzl-border);\n}\n\n.button:active:not([disabled]) {\n background: color-mix(in srgb, var(--wzl-border) 70%, transparent);\n}\n\n.button[disabled] {\n opacity: 0.4;\n cursor: default;\n}\n\n.button > svg {\n display: block;\n}\n","import { useSyncExternalStore, type ReactNode } from 'react';\nimport { Focusable } from 'react-aria-components';\nimport {\n useActionsRegistry,\n useOptionalDepRegistry,\n evaluateEnabled,\n buildDepsFromRequires,\n actionItems,\n actionShortcuts,\n type Action,\n type ActionItem,\n} from '@weasel-js/core';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\nimport { formatShortcut } from '../ToolPalette/formatShortcut';\nimport s from './ActionBar.module.css';\n\nconst EMPTY_LIST: readonly Action[] = Object.freeze([]);\nconst noopSubscribe = (): (() => void) => () => {};\n\n/** Props for {@link ActionBar}. */\nexport interface ActionBarProps {\n /** Group key — only actions with `action.group === group` are rendered. */\n group: string;\n /** Layout direction. Defaults to `'horizontal'`. */\n orientation?: 'horizontal' | 'vertical';\n /**\n * Per-entry icon overrides, keyed by `ActionItem.key` — the action id, or\n * `id:variant` for one variant of a parametric action. When an entry is provided\n * it replaces the action's own `icon` for this bar only. Mirrors\n * `PathfinderPanelProps.icons` so call sites that ship custom glyph sets\n * can swap them in without re-registering actions.\n */\n icons?: Record<string, ReactNode>;\n /**\n * Per-entry label overrides, keyed like `icons`. Drives both `aria-label`\n * and `title`. When omitted, the entry's own `label` is used.\n */\n labels?: Record<string, string>;\n /** Additional class for the toolbar root. */\n className?: string;\n}\n\nfunction resolveIcon(item: ActionItem, override: ReactNode | undefined): ReactNode {\n if (override !== undefined) return override;\n const i = item.icon;\n if (typeof i === 'function') return i();\n return i;\n}\n\nfunction resolveTitle(label: string, item: ActionItem): string {\n const shortcut = item.action.shortcut ?? formatShortcut(actionShortcuts(item.action, item.params)[0]);\n return shortcut ? `${label} (${shortcut})` : label;\n}\n\n/**\n * Generic group-keyed action toolbar. Reads the parent `ActionsRegistry`,\n * filters to actions whose `group` matches `props.group`, and renders one\n * icon button per match — or per variant, for an action that declares\n * `variants`. Disabled state is derived from each action's\n * `enabled` predicate via `evaluateEnabled` (so the button greys out and\n * swallows clicks while the keybinding — if any — still fires through the\n * registry's keydown listener; that's the registry's contract, not ours).\n *\n * Visual parity with the WeaselDraw `<PathfinderPanel>` is intentional;\n * this is the generic, registry-driven version. No keyboard navigation\n * (roving tabindex) yet — bar consumers today are short flat strips. Add\n * if/when a long bar lands.\n */\nexport function ActionBar(props: ActionBarProps) {\n const { group, orientation = 'horizontal', icons, labels, className } = props;\n const registry = useActionsRegistry();\n const depReg = useOptionalDepRegistry();\n const all = useSyncExternalStore(\n registry ? registry.subscribe : noopSubscribe,\n registry ? registry.list : () => EMPTY_LIST,\n registry ? registry.list : () => EMPTY_LIST,\n );\n const items = all.filter((a) => a.group === group).flatMap(actionItems);\n\n const cls = [s.bar, orientation === 'vertical' && s.vertical, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} role=\"toolbar\" aria-label={`${group} actions`}>\n {items.map((item) => {\n const label = labels?.[item.key] ?? item.label;\n const icon = resolveIcon(item, icons?.[item.key]);\n // Read at render: `enabled` reflects whatever the deps hold now, so\n // the bar is current as long as its parent re-renders on changes.\n const deps = depReg ? buildDepsFromRequires(item.action, depReg) : undefined;\n const { enabled } = evaluateEnabled(item.action, deps);\n const disabled = !enabled;\n const title = resolveTitle(label, item);\n return (\n <TooltipTrigger key={item.key} isDisabled={disabled}>\n <Focusable isDisabled={disabled}>\n <button\n type=\"button\"\n data-testid={`action-bar-item-${item.key}`}\n aria-label={label}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n className={s.button}\n onClick={() => {\n if (disabled) return;\n // Dispatch through the registry so the enabled() guard runs.\n // If no registry is in scope the click is a no-op — ActionBar\n // is expected to render under an `ActionsProvider`.\n registry?.trigger(item.action.id, item.params);\n }}\n >\n {icon}\n </button>\n </Focusable>\n <Tooltip>{title}</Tooltip>\n </TooltipTrigger>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;GCgBMO,IAAgC,OAAO,OAAO,CAAC,CAAC,GAChDC,gBAA0C,CAAC;AAyBjD,SAASC,EAAY,GAAkB,GAA4C;CACjF,IAAIC,MAAa,KAAA,GAAW,OAAOA;CACnC,IAAMC,IAAIC,EAAK;CAEf,OADI,OAAOD,KAAM,aAAmBA,EAAE,IAC/BA;AACT;AAEA,SAASE,EAAa,GAAe,GAA0B;CAC7D,IAAMC,IAAWF,EAAK,OAAO,YAAYP,EAAeU,EAAgBH,EAAK,QAAQA,EAAK,MAAM,CAAC,CAAC,EAAE;CACpG,OAAOE,IAAW,GAAGE,EAAM,IAAIF,EAAS,KAAKE;AAC/C;AAgBA,SAAgBC,EAAU,GAAuB;CAC/C,IAAM,EAAE,UAAO,iBAAc,cAAc,UAAO,WAAQ,iBAAcC,GAClEC,IAAWC,EAAmB,GAC9BC,IAASC,EAAuB,GAMhCC,IALMC,EACVL,IAAWA,EAAS,YAAYX,GAChCW,IAAWA,EAAS,aAAaZ,GACjCY,IAAWA,EAAS,aAAaZ,CAErB,CAAA,CAAI,QAAQ,MAAMkB,EAAE,UAAUC,CAAK,CAAC,CAAC,QAAQC,CAAW,GAEhEC,IAAM;EAAC5B,EAAE;EAAK6B,MAAgB,cAAc7B,EAAE;EAAU8B;CAAS,CAAC,CACrE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,kBAAC,OAAD;EAAK,WAAWF;EAAK,MAAK;EAAU,cAAY,GAAGF,EAAM;EACtD,UAAAH,EAAM,KAAK,MAAS;GACnB,IAAMP,IAAQe,IAASnB,EAAK,QAAQA,EAAK,OACnCoB,IAAOvB,EAAYG,GAAMqB,IAAQrB,EAAK,IAAI,GAG1CsB,IAAOb,IAASc,EAAsBvB,EAAK,QAAQS,CAAM,IAAI,KAAA,GAC7D,EAAE,eAAYe,EAAgBxB,EAAK,QAAQsB,CAAI,GAC/CG,IAAW,CAACC,GACZC,IAAQ1B,EAAaG,GAAOJ,CAAI;GACtC,OACE,kBAACX,GAAD;IAA+B,YAAYoC;IAA3C,UAAA,CACE,kBAACG,GAAD;KAAW,YAAYH;KACrB,UAAA,kBAAC,UAAD;MACE,MAAK;MACL,eAAa,mBAAmBzB,EAAK;MACrC,cAAYI;MACZ,iBAAeqB,KAAY,KAAA;MACjB;MACV,WAAWrC,EAAE;MACb,eAAe;OACb,AAAIqC,KAIJlB,GAAU,QAAQP,EAAK,OAAO,IAAIA,EAAK,MAAM;MAC/C;MAEC,UAAAoB;KACK,CAAA;IACC,CAAA,GACX,kBAAC9B,GAAD,EAAA,UAAUqC,EAAe,CAAA,CACX;GArBK,GAAA3B,EAAK,GAqBV;EAEpB,CAAC;CACE,CAAA;AAET"}
@@ -1,116 +0,0 @@
1
- import { r as e } from "./portalHost-yTOVuCej.js";
2
- import { t } from "./stance-BFQpS_fL.js";
3
- import { t as n } from "./CloseButton-C2J7wVfo.js";
4
- import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
5
- import { useCallback as o, useEffect as s, useId as c, useRef as l } from "react";
6
- import { Dialog as u, DialogTrigger as d, Heading as f, OverlayArrow as p, Popover as m } from "react-aria-components";
7
- import { createPortal as h } from "react-dom";
8
- var g = {
9
- anchor: "_anchor_w6dfg_1",
10
- popover: "_popover_w6dfg_6",
11
- arrow: "_arrow_w6dfg_204",
12
- dialog: "_dialog_w6dfg_223",
13
- header: "_header_w6dfg_230",
14
- title: "_title_w6dfg_237",
15
- body: "_body_w6dfg_248",
16
- footer: "_footer_w6dfg_255"
17
- };
18
- //#endregion
19
- //#region src/components/Callout/Callout.tsx
20
- function _(d) {
21
- let { children: _, className: v, title: y, footer: b, stance: x = "notice", tone: S, modal: C = !1, showCloseButton: w, onDismiss: T, triggerRef: E, anchorRect: D, placement: O = "top", offset: k = 12, maxHeight: A = 400, onOpenChange: j, shouldCloseOnInteractOutside: M, "aria-label": N, "aria-labelledby": P, portalContainer: F, ...I } = d, L = l(null), R = t({
22
- stance: x,
23
- tone: S
24
- }), { anchor: z, portalProps: B } = e(F), V = w ?? !C, H = l(T);
25
- H.current = T;
26
- let U = l((e) => {
27
- e.key === "Escape" && H.current?.();
28
- }), W = l(null), G = o((e) => {
29
- W.current?.removeEventListener("keydown", U.current), W.current = e, e?.addEventListener("keydown", U.current);
30
- }, []), K = c(), q = D !== void 0;
31
- s(() => {
32
- q && typeof window < "u" && window.dispatchEvent(new Event("resize"));
33
- }, [
34
- q,
35
- D?.x,
36
- D?.y,
37
- D?.width,
38
- D?.height
39
- ]);
40
- let J = C && y !== void 0 ? K : P, Y = C ? N : void 0;
41
- return /* @__PURE__ */ a(r, { children: [
42
- z,
43
- D !== void 0 && h(/* @__PURE__ */ i("span", {
44
- ref: L,
45
- "data-callout-anchor": "",
46
- className: g.anchor,
47
- "aria-hidden": "true",
48
- style: {
49
- left: D.x,
50
- top: D.y,
51
- width: D.width,
52
- height: D.height
53
- }
54
- }), document.body),
55
- /* @__PURE__ */ a(m, {
56
- ...I,
57
- triggerRef: D === void 0 ? E : L,
58
- isNonModal: !C,
59
- placement: O,
60
- offset: k,
61
- maxHeight: A,
62
- onOpenChange: j,
63
- shouldCloseOnInteractOutside: M ?? (C ? () => !1 : void 0),
64
- "aria-label": Y,
65
- "aria-labelledby": J,
66
- className: [g.popover, v].filter(Boolean).join(" "),
67
- ...R,
68
- "data-weasel-overlay": "",
69
- ...B,
70
- children: [/* @__PURE__ */ i(p, {
71
- className: g.arrow,
72
- children: /* @__PURE__ */ i("svg", {
73
- width: 12,
74
- height: 12,
75
- viewBox: "0 0 12 12",
76
- "aria-hidden": "true",
77
- children: /* @__PURE__ */ i("path", { d: "M0 0 L6 6 L12 0" })
78
- })
79
- }), /* @__PURE__ */ i(u, {
80
- role: C ? "alertdialog" : "dialog",
81
- className: g.dialog,
82
- "aria-label": N,
83
- "aria-labelledby": P,
84
- ref: G,
85
- children: ({ close: e }) => /* @__PURE__ */ a(r, { children: [
86
- (y !== void 0 || V) && /* @__PURE__ */ a("header", {
87
- className: g.header,
88
- children: [y !== void 0 && /* @__PURE__ */ i(f, {
89
- id: K,
90
- slot: "title",
91
- className: g.title,
92
- children: y
93
- }), V && /* @__PURE__ */ i(n, {
94
- ariaLabel: "Close callout",
95
- onClick: () => {
96
- e(), j?.(!1), T?.();
97
- }
98
- })]
99
- }),
100
- /* @__PURE__ */ i("div", {
101
- className: g.body,
102
- children: _
103
- }),
104
- b !== void 0 && /* @__PURE__ */ i("footer", {
105
- className: g.footer,
106
- children: b
107
- })
108
- ] })
109
- })]
110
- })
111
- ] });
112
- }
113
- //#endregion
114
- export { d as n, _ as t };
115
-
116
- //# sourceMappingURL=Callout-ndW5_Bqx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Callout-ndW5_Bqx.js","names":["_Fragment","s","RACPopover","RACDialog","useOverlayPortal","CloseButton","DialogTrigger$1","Callout_module_default","Callout","ariaLabel","ariaLabelledby","rest","props","anchorRef","useRef","stanced","useStance","portalAnchor","portalContainer","showClose","showCloseButton","modal","onDismissRef","onDismiss","escapeListener","listeningTo","dialogRef","useCallback","node","titleId","useId","hasAnchorRect","anchorRect","popoverAriaLabelledby","title","popoverAriaLabel","Fragment","createPortal","Popover","triggerRef","shouldCloseOnInteractOutside","className","portalProps","OverlayArrow","Dialog","Heading","close","onOpenChange","footer"],"sources":["../../src/components/Callout/Callout.module.css","../../src/components/Callout/Callout.tsx"],"sourcesContent":[".anchor {\n position: fixed;\n pointer-events: none;\n}\n\n.popover {\n /* Above Dialog overlay (1000) and ToastRegion (1100) — RAC sets no z-index. */\n z-index: 1200;\n background: var(--_s-fill);\n border: var(--_s-border-width) var(--_s-border-style) var(--_s-border-color);\n border-radius: var(--_s-radius);\n box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n max-width: 320px;\n transition: opacity var(--wzl-motion-fast);\n}\n\n.popover[data-entering],\n.popover[data-exiting] {\n opacity: 0;\n}\n\n/* BEGIN GENERATED stance rules: callout — `npm run gen:stances`, do not edit. */\n\n.popover {\n --wzl-tone: initial;\n}\n\n.popover {\n --_s-surface: var(--wzl-surface);\n --_s-border-color: var(--wzl-accent-strong);\n --_s-border-style: solid;\n --_s-border-width: 1px;\n --_s-radius: var(--wzl-radius-md);\n --_s-tone-mix: var(--wzl-panel-tone-mix);\n --_s-tone: var(--wzl-tone, var(--_s-surface));\n --_s-accent: var(--wzl-tone);\n --_s-title-font: var(--wzl-font-ui);\n --_s-title-weight: var(--wzl-font-weight-bold);\n --_s-title-size: var(--wzl-font-size);\n --_s-title-case: none;\n --_s-title-tracking: normal;\n --_s-title-color: var(--wzl-fg);\n}\n\n.popover[data-stance='scope'] {\n --_s-surface: var(--wzl-stance-scope-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-scope-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-scope-border-style, solid);\n --_s-border-width: var(--wzl-stance-scope-border-width, 1px);\n --_s-radius: var(--wzl-stance-scope-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-scope-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-scope-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-scope-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-scope-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-scope-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-scope-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-scope-title-case, none);\n --_s-title-tracking: var(--wzl-stance-scope-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-scope-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='aside'] {\n --_s-surface: var(--wzl-stance-aside-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-aside-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-aside-border-style, solid);\n --_s-border-width: var(--wzl-stance-aside-border-width, 1px);\n --_s-radius: var(--wzl-stance-aside-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-aside-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-aside-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-aside-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-aside-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-aside-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-aside-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-aside-title-case, none);\n --_s-title-tracking: var(--wzl-stance-aside-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-aside-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='advanced'] {\n --_s-surface: var(--wzl-stance-advanced-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-advanced-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-advanced-border-style, solid);\n --_s-border-width: var(--wzl-stance-advanced-border-width, 1px);\n --_s-radius: var(--wzl-stance-advanced-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-advanced-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-advanced-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-advanced-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-advanced-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-advanced-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-advanced-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-advanced-title-case, none);\n --_s-title-tracking: var(--wzl-stance-advanced-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-advanced-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='debug'] {\n --_s-surface: var(--wzl-stance-debug-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-debug-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-debug-border-style, solid);\n --_s-border-width: var(--wzl-stance-debug-border-width, 1px);\n --_s-radius: var(--wzl-stance-debug-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-debug-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-debug-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-debug-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-debug-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-debug-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-debug-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-debug-title-case, none);\n --_s-title-tracking: var(--wzl-stance-debug-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-debug-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='danger'] {\n --_s-surface: var(--wzl-stance-danger-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-danger-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-danger-border-style, solid);\n --_s-border-width: var(--wzl-stance-danger-border-width, 1px);\n --_s-radius: var(--wzl-stance-danger-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-danger-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-danger-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-danger-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-danger-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-danger-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-danger-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-danger-title-case, none);\n --_s-title-tracking: var(--wzl-stance-danger-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-danger-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='notice'] {\n --_s-surface: var(--wzl-stance-notice-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-notice-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-notice-border-style, solid);\n --_s-border-width: var(--wzl-stance-notice-border-width, 1px);\n --_s-radius: var(--wzl-stance-notice-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-notice-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-notice-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-notice-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-notice-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-notice-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-notice-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-notice-title-case, none);\n --_s-title-tracking: var(--wzl-stance-notice-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-notice-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='important'] {\n --_s-surface: var(--wzl-stance-important-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-important-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-important-border-style, solid);\n --_s-border-width: var(--wzl-stance-important-border-width, 1px);\n --_s-radius: var(--wzl-stance-important-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-important-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-important-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-important-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-important-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-important-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-important-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-important-title-case, none);\n --_s-title-tracking: var(--wzl-stance-important-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-important-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='preview'] {\n --_s-surface: var(--wzl-stance-preview-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-preview-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-preview-border-style, solid);\n --_s-border-width: var(--wzl-stance-preview-border-width, 1px);\n --_s-radius: var(--wzl-stance-preview-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-preview-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-preview-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-preview-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-preview-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-preview-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-preview-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-preview-title-case, none);\n --_s-title-tracking: var(--wzl-stance-preview-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-preview-title-color, var(--wzl-fg));\n}\n\n.popover {\n --_s-fill: var(--_s-surface);\n}\n\n.popover[data-tone],\n.popover[data-stance] {\n --_s-fill: color-mix(in oklab, var(--_s-tone) var(--_s-tone-mix), var(--_s-surface));\n}\n\n.popover[data-tone] {\n --wzl-accent: var(--_s-accent);\n --wzl-accent-base: var(--_s-accent);\n --wzl-accent-strong: color-mix(in oklab, var(--_s-accent) 70%, var(--wzl-fg));\n --wzl-accent-soft: color-mix(in oklab, var(--_s-accent) 45%, var(--wzl-surface));\n --wzl-accent-hover: var(--wzl-accent-strong);\n --wzl-accent-fg: var(--wzl-accent-strong);\n --wzl-focus-ring: var(--wzl-accent-strong);\n}\n\n/* END GENERATED stance rules: callout */\n\n.arrow svg {\n display: block;\n fill: var(--_s-fill);\n stroke: var(--_s-border-color);\n stroke-width: 1;\n}\n\n.arrow[data-placement='bottom'] svg {\n transform: rotate(180deg);\n}\n\n.arrow[data-placement='left'] svg {\n transform: rotate(-90deg);\n}\n\n.arrow[data-placement='right'] svg {\n transform: rotate(90deg);\n}\n\n.dialog {\n outline: none;\n max-height: inherit;\n display: flex;\n flex-direction: column;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-4);\n padding: var(--wzl-space-5) var(--wzl-space-6) 0;\n}\n\n.title {\n margin: 0;\n flex: 1;\n font-family: var(--_s-title-font);\n font-size: var(--_s-title-size);\n font-weight: var(--_s-title-weight);\n text-transform: var(--_s-title-case);\n letter-spacing: var(--_s-title-tracking);\n color: var(--_s-title-color);\n}\n\n.body {\n padding: var(--wzl-space-4) var(--wzl-space-6) var(--wzl-space-5);\n font-size: var(--wzl-font-size);\n line-height: 1.4;\n overflow-y: auto;\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--wzl-space-4);\n padding: 0 var(--wzl-space-6) var(--wzl-space-5);\n}\n","import { useCallback, useEffect, useId, useRef, type ReactNode, type RefObject } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n DialogTrigger,\n Popover as RACPopover,\n OverlayArrow,\n Dialog as RACDialog,\n Heading,\n type PopoverProps as RACPopoverProps,\n} from 'react-aria-components';\nimport { useOverlayPortal, type OverlayPortalProps, type WithoutPortalTarget } from '../../overlays/portalHost';\nimport { CloseButton } from '../CloseButton';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Callout.module.css';\n\n/**\n * Composition wrapper for press-to-open callouts:\n * `<CalloutTrigger><Pressable>…</Pressable><Callout>…</Callout></CalloutTrigger>`.\n * Re-exported RAC DialogTrigger — non-RAC trigger elements must be wrapped\n * in `<Pressable>` from react-aria-components.\n * In composed mode, put `defaultOpen` on `CalloutTrigger`, not `Callout` —\n * RAC detaches to local open state on the trigger, not the popover.\n */\nexport { DialogTrigger as CalloutTrigger };\n\n/** Props for {@link Callout}, on top of React Aria's `Popover` props. */\nexport type CalloutProps = Omit<\n WithoutPortalTarget<RACPopoverProps>,\n 'children' | 'className' | 'isNonModal' | 'triggerRef'\n> &\n OverlayPortalProps &\n StanceProps & {\n children?: ReactNode;\n className?: string;\n /** Optional heading rendered above the body. */\n title?: ReactNode;\n /** Footer slot — typically action buttons. */\n footer?: ReactNode;\n /**\n * `true` — blocks interaction with the rest of the app until dismissed;\n * inner dialog is `role=\"alertdialog\"`. `false` (default) — non-blocking:\n * the app stays interactive; Esc / outside click / close button dismiss.\n */\n modal?: boolean;\n /**\n * Show the close button. Defaults to `!modal`. In programmatic\n * `triggerRef`/`anchorRect` modes the close button needs controlled open\n * (`isOpen` + `onOpenChange`); with only `defaultOpen` it has no open-state\n * setter to call and cannot close.\n */\n showCloseButton?: boolean;\n /**\n * The user asked for this callout to go away — the close button or Escape.\n *\n * Distinct from `onOpenChange`, which a non-modal popover *also* fires when\n * interaction or focus merely leaves it. On a canvas that's every click on\n * the artwork, so a consumer that pins `isOpen` and treats `onOpenChange`\n * as dismissal retires messages nobody read. Use this instead: it fires\n * only on a deliberate act, and never on incidental focus loss.\n */\n onDismiss?: () => void;\n /** Anchor to an arbitrary element (programmatic use, with `isOpen`). */\n triggerRef?: RefObject<Element | null>;\n /**\n * Anchor to a client-coordinate rect — e.g. a scene node's on-screen box.\n * The callout re-anchors whenever this rect changes, so a consumer that\n * recomputes it on pan, zoom, or scene edits keeps the arrow on its target.\n * Takes precedence over `triggerRef`.\n */\n anchorRect?: { x: number; y: number; width: number; height: number };\n };\n\n/**\n * Anchored callout with an arrow pointing at its source — a trigger\n * element, an arbitrary `triggerRef`, or a client-space `anchorRect`.\n * Wraps React Aria Popover + Dialog; positioning, collision flipping,\n * dismissal, and focus behavior come from the underlying primitives.\n */\nexport function Callout(props: CalloutProps) {\n const {\n children,\n className,\n title,\n footer,\n stance = 'notice',\n tone,\n modal = false,\n showCloseButton,\n onDismiss,\n triggerRef,\n anchorRect,\n placement = 'top',\n offset = 12,\n maxHeight = 400,\n onOpenChange,\n shouldCloseOnInteractOutside,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n portalContainer,\n ...rest\n } = props;\n const anchorRef = useRef<HTMLSpanElement>(null);\n const stanced = useStance({ stance, tone });\n const { anchor: portalAnchor, portalProps } = useOverlayPortal(portalContainer);\n const showClose = showCloseButton ?? !modal;\n // Escape is a dismissal like the close button is. It can't ride on a React `onKeyDown`:\n // RAC's Dialog runs its props through filterDOMProps, which drops handlers\n // it doesn't know, so the listener goes on the section itself. RAC's own\n // Escape handling is untouched — this only adds the signal.\n const onDismissRef = useRef(onDismiss);\n onDismissRef.current = onDismiss;\n const escapeListener = useRef((e: KeyboardEvent) => {\n if (e.key === 'Escape') onDismissRef.current?.();\n });\n const listeningTo = useRef<HTMLElement | null>(null);\n const dialogRef = useCallback((node: HTMLElement | null) => {\n listeningTo.current?.removeEventListener('keydown', escapeListener.current);\n listeningTo.current = node;\n node?.addEventListener('keydown', escapeListener.current);\n }, []);\n const titleId = useId();\n // RAC positions on open and recomputes on scroll, resize, and a\n // ResizeObserver on the anchor — none of which fire when `anchorRect` is\n // merely *translated*, as it is when a consumer tracks a scene node across a\n // pan. (Zoom happens to work, since scaling also changes the anchor's size.)\n // Nudging RAC's own resize listener is the supported way to make it\n // recompute; there's no public updatePosition on Popover.\n const hasAnchorRect = anchorRect !== undefined;\n useEffect(() => {\n if (!hasAnchorRect || typeof window === 'undefined') return;\n window.dispatchEvent(new Event('resize'));\n }, [hasAnchorRect, anchorRect?.x, anchorRect?.y, anchorRect?.width, anchorRect?.height]);\n // RAC's popover role-heuristic misses alertdialog; label the outer role\n // it stamps. Upstream: react-spectrum Popover.mjs querySelector('[role=dialog]').\n const popoverAriaLabelledby =\n modal && title !== undefined ? titleId : ariaLabelledby;\n const popoverAriaLabel = modal ? ariaLabel : undefined;\n return (\n <>\n {portalAnchor}\n {/* Harmless while closed — RAC reads the ref only when the popover is open. */}\n {anchorRect !== undefined &&\n createPortal(\n <span\n ref={anchorRef}\n data-callout-anchor=\"\"\n className={s.anchor}\n aria-hidden=\"true\"\n // Dynamic geometry — inline style is the mechanism here, not styling.\n style={{\n left: anchorRect.x,\n top: anchorRect.y,\n width: anchorRect.width,\n height: anchorRect.height,\n }}\n />,\n document.body,\n )}\n <RACPopover\n {...rest}\n triggerRef={anchorRect !== undefined ? anchorRef : triggerRef}\n isNonModal={!modal}\n placement={placement}\n offset={offset}\n maxHeight={maxHeight}\n onOpenChange={onOpenChange}\n shouldCloseOnInteractOutside={\n shouldCloseOnInteractOutside ?? (modal ? () => false : undefined)\n }\n aria-label={popoverAriaLabel}\n aria-labelledby={popoverAriaLabelledby}\n className={[s.popover, className].filter(Boolean).join(' ')}\n {...stanced}\n data-weasel-overlay=\"\"\n {...portalProps}\n >\n <OverlayArrow className={s.arrow}>\n <svg width={12} height={12} viewBox=\"0 0 12 12\" aria-hidden=\"true\">\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </OverlayArrow>\n <RACDialog\n role={modal ? 'alertdialog' : 'dialog'}\n className={s.dialog}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={dialogRef}\n >\n {({ close }) => (\n <>\n {(title !== undefined || showClose) && (\n <header className={s.header}>\n {title !== undefined && (\n <Heading id={titleId} slot=\"title\" className={s.title}>\n {title}\n </Heading>\n )}\n {showClose && (\n <CloseButton\n ariaLabel=\"Close callout\"\n onClick={() => {\n // `close()` resolves OverlayTriggerStateContext, only\n // provided by DialogTrigger (composed mode). In\n // triggerRef/anchorRect modes there is no such\n // context, so `close()` is a no-op there — the\n // controlled-open fallback below does the work.\n close();\n onOpenChange?.(false);\n onDismiss?.();\n }}\n />\n )}\n </header>\n )}\n <div className={s.body}>{children}</div>\n {footer !== undefined && <footer className={s.footer}>{footer}</footer>}\n </>\n )}\n </RACDialog>\n </RACPopover>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AC8EA,SAAgBQ,EAAQ,GAAqB;CAC3C,IAAM,EACJ,aACA,cACA,UACA,WACA,YAAS,UACT,SACA,WAAQ,IACR,oBACA,cACA,eACA,eACA,eAAY,OACZ,YAAS,IACT,eAAY,KACZ,iBACA,iCACA,cAAcC,GACd,mBAAmBC,GACnB,oBACA,GAAGC,MACDC,GACEC,IAAYC,EAAwB,IAAI,GACxCC,IAAUC,EAAU;EAAE;EAAQ;CAAK,CAAC,GACpC,EAAE,QAAQC,GAAc,mBAAgBb,EAAiBc,CAAe,GACxEC,IAAYC,KAAmB,CAACC,GAKhCC,IAAeR,EAAOS,CAAS;CACrC,EAAa,UAAUA;CACvB,IAAMC,IAAiBV,GAAQ,MAAqB;EAClD,AAAI,EAAE,QAAQ,YAAUQ,EAAa,UAAU;CACjD,CAAC,GACKG,IAAcX,EAA2B,IAAI,GAC7CY,IAAYC,GAAa,MAA6B;EAG1D,AAFAF,EAAY,SAAS,oBAAoB,WAAWD,EAAe,OAAO,GAC1E,EAAY,UAAUI,GACtBA,GAAM,iBAAiB,WAAWJ,EAAe,OAAO;CAC1D,GAAG,CAAC,CAAC,GACCK,IAAUC,EAAM,GAOhBC,IAAgBC,MAAe,KAAA;CACrC,QAAgB;EACd,AAAKD,KAAiB,OAAO,SAAW,OACxC,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;CAC1C,GAAG;EAACA;EAAeC,GAAY;EAAGA,GAAY;EAAGA,GAAY;EAAOA,GAAY;CAAM,CAAC;CAGvF,IAAMC,IACJZ,KAASa,MAAU,KAAA,IAAYL,IAAUnB,GACrCyB,IAAmBd,IAAQZ,IAAY,KAAA;CAC7C,OACE,kBAAAT,GAAA,EAAA,UAAA;EACGiB;EAEAe,MAAe,KAAA,KACdK,EACE,kBAAC,QAAD;GACE,KAAKxB;GACL,uBAAoB;GACpB,WAAWZ,EAAE;GACb,eAAY;GAEZ,OAAO;IACL,MAAM+B,EAAW;IACjB,KAAKA,EAAW;IAChB,OAAOA,EAAW;IAClB,QAAQA,EAAW;GACrB;EACD,CAAA,GACD,SAAS,IACX;EACF,kBAAC9B,GAAD;GACE,GAAIS;GACJ,YAAYqB,MAAe,KAAA,IAAwBO,IAAZ1B;GACvC,YAAY,CAACQ;GACF;GACH;GACG;GACG;GACd,8BACEmB,MAAiCnB,UAAc,KAAQ,KAAA;GAEzD,cAAYc;GACZ,mBAAiBF;GACjB,WAAW,CAAChC,EAAE,SAASwC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GAC1D,GAAI1B;GACJ,uBAAoB;GACpB,GAAI2B;GAhBN,UAAA,CAkBE,kBAACC,GAAD;IAAc,WAAW1C,EAAE;IACzB,UAAA,kBAAC,OAAD;KAAK,OAAO;KAAI,QAAQ;KAAI,SAAQ;KAAY,eAAY;KAC1D,UAAA,kBAAC,QAAD,EAAM,GAAE,kBAAmB,CAAA;IACxB,CAAA;GACO,CAAA,GACd,kBAACE,GAAD;IACE,MAAMkB,IAAQ,gBAAgB;IAC9B,WAAWpB,EAAE;IACb,cAAYQ;IACZ,mBAAiBC;IACjB,KAAKgB;IAEH,WAAA,EAAE,eACF,kBAAA1B,GAAA,EAAA,UAAA;MACIkC,MAAU,KAAA,KAAaf,MACvB,kBAAC,UAAD;MAAQ,WAAWlB,EAAE;MAArB,UAAA,CACGiC,MAAU,KAAA,KACT,kBAACW,GAAD;OAAS,IAAIhB;OAAS,MAAK;OAAQ,WAAW5B,EAAE;OAC7C,UAAAiC;MACM,CAAA,GAEVf,KACC,kBAACd,GAAD;OACE,WAAU;OACV,eAAe;QAQb,AAFAyC,EAAM,GACNC,IAAe,EAAK,GACpBxB,IAAY;OACd;MACD,CAAA,CAEG;;KAEV,kBAAC,OAAD;MAAK,WAAWtB,EAAE;MAAO;KAAc,CAAA;KACtC+C,MAAW,KAAA,KAAa,kBAAC,UAAD;MAAQ,WAAW/C,EAAE;MAAS,UAAA+C;KAAe,CAAA;IACtE,EAAA,CAAA;GAEK,CAAA,CACD;;CACZ,EAAA,CAAA;AAEN"}
@@ -1,47 +0,0 @@
1
- import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
- import { forwardRef as r } from "react";
3
- import { Checkbox as i } from "react-aria-components";
4
- var a = {
5
- checkbox: "_checkbox_1gsy2_1",
6
- box: "_box_1gsy2_18",
7
- checkmark: "_checkmark_1gsy2_47",
8
- label: "_label_1gsy2_60"
9
- }, o = r(function(r, o) {
10
- let { children: s, className: c, ...l } = r;
11
- return /* @__PURE__ */ t(i, {
12
- ...l,
13
- ref: o,
14
- className: [a.checkbox, c].filter(Boolean).join(" "),
15
- children: ({ isIndeterminate: r }) => /* @__PURE__ */ n(e, { children: [/* @__PURE__ */ t("span", {
16
- className: a.box,
17
- children: /* @__PURE__ */ t("svg", {
18
- className: a.checkmark,
19
- viewBox: "0 0 14 14",
20
- "aria-hidden": "true",
21
- children: r ? /* @__PURE__ */ t("line", {
22
- x1: "3",
23
- y1: "7",
24
- x2: "11",
25
- y2: "7",
26
- stroke: "currentColor",
27
- strokeWidth: "2",
28
- strokeLinecap: "round"
29
- }) : /* @__PURE__ */ t("polyline", {
30
- points: "3,7.5 6,10.5 11,4.5",
31
- fill: "none",
32
- stroke: "currentColor",
33
- strokeWidth: "2",
34
- strokeLinecap: "round",
35
- strokeLinejoin: "round"
36
- })
37
- })
38
- }), s !== void 0 && /* @__PURE__ */ t("span", {
39
- className: a.label,
40
- children: s
41
- })] })
42
- });
43
- });
44
- //#endregion
45
- export { o as t };
46
-
47
- //# sourceMappingURL=Checkbox-DHXTUHO9.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Checkbox-DHXTUHO9.js","names":["Checkbox","RACCheckbox","s","_Fragment","Checkbox_module_default","Checkbox$1","forwardRef","rest","props","Checkbox","className","Fragment","isIndeterminate","children"],"sources":["../../src/components/Checkbox/Checkbox.module.css","../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":[".checkbox {\n display: inline-flex;\n align-items: center;\n gap: var(--wzl-space-4);\n cursor: pointer;\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n color: var(--wzl-fg);\n user-select: none;\n -webkit-user-select: none;\n}\n\n.checkbox[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.box {\n position: relative;\n flex: 0 0 auto;\n width: 14px;\n height: 14px;\n background: var(--wzl-surface-sunken);\n border: 1px solid var(--wzl-border-strong);\n border-radius: var(--wzl-radius-sm);\n transition: background-color var(--wzl-motion-fast), border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);\n}\n\n.checkbox[data-focus-visible] .box {\n box-shadow: 0 0 0 2px var(--wzl-focus-ring);\n}\n\n.checkbox[data-hovered]:not([data-disabled]) .box {\n border-color: var(--wzl-fg-muted);\n}\n\n.checkbox[data-selected] .box,\n.checkbox[data-indeterminate] .box {\n background: var(--wzl-accent-strong);\n border-color: var(--wzl-accent-strong);\n}\n\n.checkbox[data-invalid] .box {\n border-color: var(--wzl-danger);\n}\n\n.checkmark {\n position: absolute;\n inset: 0;\n color: var(--wzl-fg-on-accent);\n opacity: 0;\n pointer-events: none;\n}\n\n.checkbox[data-selected] .checkmark,\n.checkbox[data-indeterminate] .checkmark {\n opacity: 1;\n}\n\n.label {\n line-height: 1.2;\n}\n","import { forwardRef, type ReactNode, type Ref } from 'react';\nimport {\n Checkbox as RACCheckbox,\n type CheckboxProps as RACCheckboxProps,\n} from 'react-aria-components';\nimport s from './Checkbox.module.css';\n\n/**\n * Props for {@link Checkbox}, on top of React Aria's `Checkbox` props. The\n * label is passed as children.\n */\nexport type CheckboxProps = Omit<RACCheckboxProps, 'children' | 'className'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Single checkbox wrapping React Aria's Checkbox. Supports indeterminate\n * via `isIndeterminate`. The label is supplied as children.\n */\nexport const Checkbox = forwardRef(function Checkbox(\n props: CheckboxProps,\n ref: Ref<HTMLLabelElement>,\n) {\n const { children, className, ...rest } = props;\n return (\n <RACCheckbox\n {...rest}\n ref={ref}\n className={[s.checkbox, className].filter(Boolean).join(' ')}\n >\n {({ isIndeterminate }) => (\n <>\n <span className={s.box}>\n <svg className={s.checkmark} viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n {isIndeterminate ? (\n <line x1=\"3\" y1=\"7\" x2=\"11\" y2=\"7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n ) : (\n <polyline\n points=\"3,7.5 6,10.5 11,4.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n </svg>\n </span>\n {children !== undefined && <span className={s.label}>{children}</span>}\n </>\n )}\n </RACCheckbox>\n );\n});\n"],"mappings":";;;;;;;;GCoBaA,IAAWM,EAAW,SACjC,GACA,GACA;CACA,IAAM,EAAE,aAAU,cAAW,GAAGC,MAASC;CACzC,OACE,kBAACP,GAAD;EACE,GAAIM;EACC;EACL,WAAW,CAACL,EAAE,UAAUQ,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAEzD,WAAA,EAAE,yBACF,kBAAAP,GAAA,EAAA,UAAA,CACE,kBAAC,QAAD;GAAM,WAAWD,EAAE;GACjB,UAAA,kBAAC,OAAD;IAAK,WAAWA,EAAE;IAAW,SAAQ;IAAY,eAAY;IAC1D,UAAAU,IACC,kBAAC,QAAD;KAAM,IAAG;KAAI,IAAG;KAAI,IAAG;KAAK,IAAG;KAAI,QAAO;KAAe,aAAY;KAAI,eAAc;IAAS,CAAA,IAEhG,kBAAC,YAAD;KACE,QAAO;KACP,MAAK;KACL,QAAO;KACP,aAAY;KACZ,eAAc;KACd,gBAAe;IAChB,CAAA;GAEA,CAAA;EACD,CAAA,GACLC,MAAa,KAAA,KAAa,kBAAC,QAAD;GAAM,WAAWX,EAAE;GAAQ;EAAe,CAAA,CACrE,EAAA,CAAA;CAEO,CAAA;AAEjB,CAAC"}
@@ -1,69 +0,0 @@
1
- import { n as e, t } from "./InlineRange-P01ABSzo.js";
2
- import { getAlpha01 as n, toHex8 as r, withAlpha01 as i } from "@weasel-js/core";
3
- import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { useEffect as c, useRef as l, useState as u } from "react";
5
- var d = {
6
- root: "_root_1vb3y_1",
7
- chip: "_chip_1vb3y_7",
8
- color: "_color_1vb3y_14",
9
- alphaRange: "_alphaRange_1vb3y_46",
10
- alphaReadout: "_alphaReadout_1vb3y_50"
11
- };
12
- //#endregion
13
- //#region src/components/ColorField/ColorField.tsx
14
- function f(f) {
15
- let { value: p, mixed: m = !1, alpha: h = !1, alphaDisabled: g = !1, onInput: _, onChange: v, id: y, className: b } = f, x = r(p ?? "#000000"), S = x.slice(0, 7), C = n(x), w = Math.round(C * 100), [T, E] = u(null), [D, O] = u(null), k = T ?? S, A = D ?? w, j = (e, t) => h ? i(e, t) : e, M = m && T === null, N = (e, t) => {
16
- (T !== null || D !== null) && (v(j(e, t)), E(null), O(null));
17
- }, P = l(null), F = l(() => {});
18
- return c(() => {
19
- F.current = () => N(k, A / 100);
20
- }), c(() => {
21
- let e = P.current;
22
- if (!e) return;
23
- let t = () => F.current();
24
- return e.addEventListener("change", t), () => e.removeEventListener("change", t);
25
- }, []), /* @__PURE__ */ s("span", {
26
- className: [d.root, b].filter(Boolean).join(" "),
27
- ...m && T === null ? { "data-mixed": "" } : {},
28
- children: [/* @__PURE__ */ o("span", {
29
- className: d.chip,
30
- children: /* @__PURE__ */ o("input", {
31
- ref: P,
32
- id: y,
33
- className: d.color,
34
- type: "color",
35
- value: k,
36
- "aria-label": f["aria-label"] ?? "Color",
37
- onInput: (e) => {
38
- let t = e.target.value;
39
- E(t), _?.(j(t, A / 100));
40
- },
41
- onBlur: () => N(k, A / 100)
42
- })
43
- }), h && /* @__PURE__ */ s(a, { children: [/* @__PURE__ */ o(t, {
44
- className: `${d.alphaRange} ${e.alpha}`,
45
- min: 0,
46
- max: 100,
47
- step: 1,
48
- value: A,
49
- disabled: M || g,
50
- "aria-label": f["aria-label"] ? `${f["aria-label"]} opacity` : "Opacity",
51
- onInput: (e) => {
52
- let t = Number(e.target.value);
53
- O(t), _?.(j(k, t / 100));
54
- },
55
- onPointerUp: () => N(k, A / 100),
56
- onPointerCancel: () => N(k, A / 100),
57
- onKeyUp: () => N(k, A / 100),
58
- onBlur: () => N(k, A / 100)
59
- }), /* @__PURE__ */ s("span", {
60
- className: d.alphaReadout,
61
- "aria-hidden": "true",
62
- children: [A, "%"]
63
- })] })]
64
- });
65
- }
66
- //#endregion
67
- export { f as t };
68
-
69
- //# sourceMappingURL=ColorField-Yz_BkcCT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorField-Yz_BkcCT.js","names":["s","_Fragment","shared","range_module_default","ColorField_module_default","ColorField","props","hex8","toHex8","value","rgb6","alpha01","getAlpha01","alphaPct","colorDraft","setColorDraft","useState","alphaDraft","setAlphaDraft","visibleRgb","visibleAlphaPct","compose","alpha","withAlpha01","rgb","a01","alphaLocked","mixed","commit","onChange","swatch","useRef","latestCommit","useEffect","el","onClose","className","onInput","Fragment","InlineRange","alphaDisabled","pct"],"sources":["../../src/components/ColorField/ColorField.module.css","../../src/components/ColorField/ColorField.tsx"],"sourcesContent":[".root {\n display: inline-flex;\n align-items: center;\n gap: var(--wzl-space-3);\n}\n\n.chip {\n position: relative;\n display: inline-flex;\n border-radius: var(--wzl-radius-sm);\n overflow: hidden;\n}\n\n.color {\n inline-size: 28px;\n block-size: var(--wzl-control-h-sm);\n padding: 0;\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n background: none;\n cursor: pointer;\n}\n\n.color:focus-visible {\n outline: none;\n border-color: var(--wzl-focus-ring);\n box-shadow: 0 0 0 1px var(--wzl-focus-ring);\n}\n\n/* Indeterminate (mixed) presentation: checkerboard overlay atop the\n * swatch. pointer-events: none so the input stays clickable. */\n.root[data-mixed] .chip::after {\n content: '';\n position: absolute;\n inset: 1px;\n border-radius: var(--wzl-radius-sm);\n pointer-events: none;\n background: repeating-conic-gradient(\n var(--wzl-checker-a) 0% 25%,\n var(--wzl-checker-b) 0% 50%\n )\n 50% / var(--wzl-checker-size) var(--wzl-checker-size);\n}\n\n/* `InlineRange` owns the track; this only says how it shares the row. */\n.alphaRange {\n flex: 1;\n}\n\n.alphaReadout {\n min-inline-size: 3ch;\n text-align: end;\n font-size: var(--wzl-font-size-sm);\n opacity: 0.7;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { toHex8, getAlpha01, withAlpha01 } from '@weasel-js/core';\nimport { InlineRange } from '../InlineRange';\nimport shared from '../range.module.css';\nimport s from './ColorField.module.css';\n\n/**\n * Props for {@link ColorField}. `onInput` fires throughout a gesture and\n * `onChange` once at its end.\n */\nexport interface ColorFieldProps {\n /** Current color, `#rrggbb` or `#rrggbbaa`. Omit when `mixed`. */\n value?: string;\n /** Indeterminate presentation (multi-selection with differing colors):\n * checkered chip, empty value. The first color edit produces a real\n * value; the opacity slider stays disabled until then (an alpha-only\n * edit would otherwise commit a value composed against the\n * placeholder black). */\n mixed?: boolean;\n /** Show the opacity slider; emitted values are `#rrggbbaa`. */\n alpha?: boolean;\n /** Draw the opacity slider inert, for a consumer that drops alpha. */\n alphaDisabled?: boolean;\n /** Live value during interaction (picker drag, slider drag). Optional —\n * wire it for live preview; omit it for commit-only consumers. */\n onInput?: (hex: string) => void;\n /** Committed value — picker close or blur, or slider release. One call\n * per user gesture; pair with an undoable write. */\n onChange: (hex: string) => void;\n /** Id for the color input, for a `<label htmlFor>` outside it. */\n id?: string;\n 'aria-label'?: string;\n className?: string;\n}\n\n/**\n * Compact color editor: native color input + optional opacity slider.\n * Commit semantics are gesture-based (see `onChange`) because native\n * color/range inputs fire `change` continuously during interaction —\n * commit-on-change would emit one undo entry per tick.\n */\nexport function ColorField(props: ColorFieldProps) {\n const { value, mixed = false, alpha = false, alphaDisabled = false, onInput, onChange, id, className } = props;\n const hex8 = toHex8(value ?? '#000000');\n const rgb6 = hex8.slice(0, 7);\n const alpha01 = getAlpha01(hex8);\n const alphaPct = Math.round(alpha01 * 100);\n\n // Drafts track the control during a gesture (the committed prop only\n // updates after onChange), then reset to follow the prop again.\n const [colorDraft, setColorDraft] = useState<string | null>(null);\n const [alphaDraft, setAlphaDraft] = useState<number | null>(null);\n const visibleRgb = colorDraft ?? rgb6;\n const visibleAlphaPct = alphaDraft ?? alphaPct;\n\n const compose = (rgb: string, a01: number): string =>\n alpha ? withAlpha01(rgb, a01) : rgb;\n\n // Mixed with no color edit yet: the alpha slider has nothing real to\n // compose against (rgb6 is the placeholder black), so keep it disabled\n // until the first color edit lands.\n const alphaLocked = mixed && colorDraft === null;\n\n // Commit only when a gesture actually changed something — blur with no\n // preceding input must not emit (it would create a no-op undo entry).\n const commit = (rgb: string, a01: number): void => {\n if (colorDraft === null && alphaDraft === null) return;\n onChange(compose(rgb, a01));\n setColorDraft(null);\n setAlphaDraft(null);\n };\n\n // The picker closing fires a native `change`, which React's `onChange` does\n // not deliver apart from `input`; the input can keep focus after it closes,\n // so waiting for blur alone would hold the commit until the next click.\n const swatch = useRef<HTMLInputElement>(null);\n const latestCommit = useRef(() => {});\n useEffect(() => {\n latestCommit.current = () => commit(visibleRgb, visibleAlphaPct / 100);\n });\n useEffect(() => {\n const el = swatch.current;\n if (!el) return;\n const onClose = () => latestCommit.current();\n el.addEventListener('change', onClose);\n return () => el.removeEventListener('change', onClose);\n }, []);\n\n return (\n <span\n className={[s.root, className].filter(Boolean).join(' ')}\n {...(mixed && colorDraft === null ? { 'data-mixed': '' } : {})}\n >\n <span className={s.chip}>\n <input\n ref={swatch}\n id={id}\n className={s.color}\n type=\"color\"\n value={visibleRgb}\n aria-label={props['aria-label'] ?? 'Color'}\n onInput={(e) => {\n const rgb = (e.target as HTMLInputElement).value;\n setColorDraft(rgb);\n onInput?.(compose(rgb, visibleAlphaPct / 100));\n }}\n onBlur={() => commit(visibleRgb, visibleAlphaPct / 100)}\n />\n </span>\n {alpha && (\n <>\n <InlineRange\n className={`${s.alphaRange} ${shared.alpha}`}\n min={0}\n max={100}\n step={1}\n value={visibleAlphaPct}\n disabled={alphaLocked || alphaDisabled}\n aria-label={props['aria-label'] ? `${props['aria-label']} opacity` : 'Opacity'}\n onInput={(e) => {\n const pct = Number((e.target as HTMLInputElement).value);\n setAlphaDraft(pct);\n onInput?.(compose(visibleRgb, pct / 100));\n }}\n onPointerUp={() => commit(visibleRgb, visibleAlphaPct / 100)}\n onPointerCancel={() => commit(visibleRgb, visibleAlphaPct / 100)}\n onKeyUp={() => commit(visibleRgb, visibleAlphaPct / 100)}\n onBlur={() => commit(visibleRgb, visibleAlphaPct / 100)}\n />\n <span className={s.alphaReadout} aria-hidden=\"true\">{visibleAlphaPct}%</span>\n </>\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;ACyCA,SAAgBK,EAAW,GAAwB;CACjD,IAAM,EAAE,UAAO,WAAQ,IAAO,WAAQ,IAAO,mBAAgB,IAAO,YAAS,aAAU,OAAI,iBAAcC,GACnGC,IAAOC,EAAOC,KAAS,SAAS,GAChCC,IAAOH,EAAK,MAAM,GAAG,CAAC,GACtBI,IAAUC,EAAWL,CAAI,GACzBM,IAAW,KAAK,MAAMF,IAAU,GAAG,GAInC,CAACG,GAAYC,KAAiBC,EAAwB,IAAI,GAC1D,CAACC,GAAYC,KAAiBF,EAAwB,IAAI,GAC1DG,IAAaL,KAAcJ,GAC3BU,IAAkBH,KAAcJ,GAEhCQ,KAAW,GAAa,MAC5BC,IAAQC,EAAYC,GAAKC,CAAG,IAAID,GAK5BE,IAAcC,KAASb,MAAe,MAItCc,KAAU,GAAa,MAAsB;EACjD,CAAId,MAAe,QAAQG,MAAe,UAC1CY,EAASR,EAAQG,GAAKC,CAAG,CAAC,GAC1BV,EAAc,IAAI,GAClBG,EAAc,IAAI;CACpB,GAKMY,IAASC,EAAyB,IAAI,GACtCC,IAAeD,QAAa,CAAC,CAAC;CAYpC,OAXAE,QAAgB;EACd,EAAa,gBAAgBL,EAAOT,GAAYC,IAAkB,GAAG;CACvE,CAAC,GACDa,QAAgB;EACd,IAAMC,IAAKJ,EAAO;EAClB,IAAI,CAACI,GAAI;EACT,IAAMC,UAAgBH,EAAa,QAAQ;EAE3C,OADAE,EAAG,iBAAiB,UAAUC,CAAO,SACxBD,EAAG,oBAAoB,UAAUC,CAAO;CACvD,GAAG,CAAC,CAAC,GAGH,kBAAC,QAAD;EACE,WAAW,CAACnC,EAAE,MAAMoC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACvD,GAAKT,KAASb,MAAe,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;EAF9D,UAAA,CAIE,kBAAC,QAAD;GAAM,WAAWd,EAAE;GACjB,UAAA,kBAAC,SAAD;IACE,KAAK8B;IACD;IACJ,WAAW9B,EAAE;IACb,MAAK;IACL,OAAOmB;IACP,cAAYb,EAAM,iBAAiB;IACnC,UAAU,MAAM;KACd,IAAMkB,IAAO,EAAE,OAA4B;KAE3C,AADAT,EAAcS,CAAG,GACjBa,IAAUhB,EAAQG,GAAKJ,IAAkB,GAAG,CAAC;IAC/C;IACA,cAAcQ,EAAOT,GAAYC,IAAkB,GAAG;GACvD,CAAA;EACG,CAAA,GACLE,KACC,kBAAArB,GAAA,EAAA,UAAA,CACE,kBAACsC,GAAD;GACE,WAAW,GAAGvC,EAAE,WAAW,GAAGE,EAAO;GACrC,KAAK;GACL,KAAK;GACL,MAAM;GACN,OAAOkB;GACP,UAAUM,KAAec;GACzB,cAAYlC,EAAM,gBAAgB,GAAGA,EAAM,cAAc,YAAY;GACrE,UAAU,MAAM;IACd,IAAMmC,IAAM,OAAQ,EAAE,OAA4B,KAAK;IAEvD,AADAvB,EAAcuB,CAAG,GACjBJ,IAAUhB,EAAQF,GAAYsB,IAAM,GAAG,CAAC;GAC1C;GACA,mBAAmBb,EAAOT,GAAYC,IAAkB,GAAG;GAC3D,uBAAuBQ,EAAOT,GAAYC,IAAkB,GAAG;GAC/D,eAAeQ,EAAOT,GAAYC,IAAkB,GAAG;GACvD,cAAcQ,EAAOT,GAAYC,IAAkB,GAAG;EACvD,CAAA,GACD,kBAAC,QAAD;GAAM,WAAWpB,EAAE;GAAc,eAAY;GAA7C,UAAA,CAAqDoB,GAAgB,GAAO;EAC5E,CAAA,CAAA,EAAA,CAAA,CAEA;;AAEV"}