@weasel-js/ui 0.5.0 → 0.6.0

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 (407) hide show
  1. package/dist/chunks/ActionBar-CiKvEvXi.js +63 -0
  2. package/dist/chunks/ActionBar-CiKvEvXi.js.map +1 -0
  3. package/dist/chunks/ActionsBar-CzU6Of3B.js +94 -0
  4. package/dist/chunks/ActionsBar-CzU6Of3B.js.map +1 -0
  5. package/dist/chunks/Badge-DU8ihE7Z.js +2942 -0
  6. package/dist/chunks/Badge-DU8ihE7Z.js.map +1 -0
  7. package/dist/chunks/Button-9QNIYugK.js +87 -0
  8. package/dist/chunks/Button-9QNIYugK.js.map +1 -0
  9. package/dist/chunks/Callout-CvTKW1sd.js +114 -0
  10. package/dist/chunks/Callout-CvTKW1sd.js.map +1 -0
  11. package/dist/chunks/Checkbox-BeWFZr1M.js +47 -0
  12. package/dist/chunks/Checkbox-BeWFZr1M.js.map +1 -0
  13. package/dist/chunks/ColorField-B7vHaU5G.js +60 -0
  14. package/dist/chunks/ColorField-B7vHaU5G.js.map +1 -0
  15. package/dist/chunks/ComboBox-yfrxG0_I.js +88 -0
  16. package/dist/chunks/ComboBox-yfrxG0_I.js.map +1 -0
  17. package/dist/chunks/CurveEditor-BEQtef4P.js +786 -0
  18. package/dist/chunks/CurveEditor-BEQtef4P.js.map +1 -0
  19. package/dist/chunks/DataGrid-mUq38k0Q.js +186 -0
  20. package/dist/chunks/DataGrid-mUq38k0Q.js.map +1 -0
  21. package/dist/chunks/Dialog-tAi14bY3.js +58 -0
  22. package/dist/chunks/Dialog-tAi14bY3.js.map +1 -0
  23. package/dist/chunks/Field-4cagmYlT.js +31 -0
  24. package/dist/chunks/Field-4cagmYlT.js.map +1 -0
  25. package/dist/chunks/Input-DRei6KJr.js +55 -0
  26. package/dist/chunks/Input-DRei6KJr.js.map +1 -0
  27. package/dist/chunks/Keycaps-B9dJMYx_.js +397 -0
  28. package/dist/chunks/Keycaps-B9dJMYx_.js.map +1 -0
  29. package/dist/chunks/NumberField-BAmJwxw0.js +59 -0
  30. package/dist/chunks/NumberField-BAmJwxw0.js.map +1 -0
  31. package/dist/chunks/OptionsBar-CHOP_CiW.js +98 -0
  32. package/dist/chunks/OptionsBar-CHOP_CiW.js.map +1 -0
  33. package/dist/chunks/Plot2D-CEnhzodm.js +168 -0
  34. package/dist/chunks/Plot2D-CEnhzodm.js.map +1 -0
  35. package/dist/chunks/PointPlotter-Dvh5cyOC.js +16 -0
  36. package/dist/chunks/PointPlotter-Dvh5cyOC.js.map +1 -0
  37. package/dist/chunks/Powerline-W_yqAVMc.js +36 -0
  38. package/dist/chunks/Powerline-W_yqAVMc.js.map +1 -0
  39. package/dist/chunks/Prefs-NOoGuUHy.js +238 -0
  40. package/dist/chunks/Prefs-NOoGuUHy.js.map +1 -0
  41. package/dist/chunks/RadioGroup-DUlTy95a.js +49 -0
  42. package/dist/chunks/RadioGroup-DUlTy95a.js.map +1 -0
  43. package/dist/chunks/RangeSlider-Bks9GQuO.js +52 -0
  44. package/dist/chunks/RangeSlider-Bks9GQuO.js.map +1 -0
  45. package/dist/chunks/Select-BV70VU5O.js +97 -0
  46. package/dist/chunks/Select-BV70VU5O.js.map +1 -0
  47. package/dist/chunks/SelectionPanel-D_U7GKup.js +283 -0
  48. package/dist/chunks/SelectionPanel-D_U7GKup.js.map +1 -0
  49. package/dist/chunks/Sidebar-Bk9_TPhX.js +26 -0
  50. package/dist/chunks/Sidebar-Bk9_TPhX.js.map +1 -0
  51. package/dist/chunks/SidebarPanel-Nd9Od5WD.js +59 -0
  52. package/dist/chunks/SidebarPanel-Nd9Od5WD.js.map +1 -0
  53. package/dist/chunks/Slider-sUJGgmKR.js +221 -0
  54. package/dist/chunks/Slider-sUJGgmKR.js.map +1 -0
  55. package/dist/chunks/Switch-iUmlnP_b.js +27 -0
  56. package/dist/chunks/Switch-iUmlnP_b.js.map +1 -0
  57. package/dist/chunks/Tabs-DCs-Ww2f.js +41 -0
  58. package/dist/chunks/Tabs-DCs-Ww2f.js.map +1 -0
  59. package/dist/chunks/Toast-NdSJo2vj.js +128 -0
  60. package/dist/chunks/Toast-NdSJo2vj.js.map +1 -0
  61. package/dist/chunks/ToggleBar-BfcvLaOr.js +120 -0
  62. package/dist/chunks/ToggleBar-BfcvLaOr.js.map +1 -0
  63. package/dist/chunks/ToolButton-GAzBOvcR.js +53 -0
  64. package/dist/chunks/ToolButton-GAzBOvcR.js.map +1 -0
  65. package/dist/chunks/ToolGroup-Btg47vJF.js +25 -0
  66. package/dist/chunks/ToolGroup-Btg47vJF.js.map +1 -0
  67. package/dist/chunks/ToolPalette-C8V-I-uX.js +117 -0
  68. package/dist/chunks/ToolPalette-C8V-I-uX.js.map +1 -0
  69. package/dist/chunks/Tooltip-Clgn4trm.js +39 -0
  70. package/dist/chunks/Tooltip-Clgn4trm.js.map +1 -0
  71. package/dist/chunks/keyGlyph-BDH5fqkO.js +22 -0
  72. package/dist/chunks/keyGlyph-BDH5fqkO.js.map +1 -0
  73. package/dist/color/oklch.d.ts +14 -0
  74. package/dist/color/oklch.d.ts.map +1 -0
  75. package/dist/components/ActionBar/ActionBar.d.ts +36 -0
  76. package/dist/components/ActionBar/ActionBar.d.ts.map +1 -0
  77. package/dist/components/ActionBar/index.d.ts +3 -0
  78. package/dist/components/ActionBar/index.d.ts.map +1 -0
  79. package/dist/components/ActionBar/index.js +2 -0
  80. package/dist/components/ActionsBar/ActionsBar.d.ts +20 -0
  81. package/dist/components/ActionsBar/ActionsBar.d.ts.map +1 -0
  82. package/dist/components/ActionsBar/index.d.ts +3 -0
  83. package/dist/components/ActionsBar/index.d.ts.map +1 -0
  84. package/dist/components/ActionsBar/index.js +2 -0
  85. package/dist/components/Badge/Badge.d.ts +50 -0
  86. package/dist/components/Badge/Badge.d.ts.map +1 -0
  87. package/dist/components/Badge/bases/ChamferedRect.d.ts +8 -0
  88. package/dist/components/Badge/bases/ChamferedRect.d.ts.map +1 -0
  89. package/dist/components/Badge/bases/OctantBSpline.d.ts +71 -0
  90. package/dist/components/Badge/bases/OctantBSpline.d.ts.map +1 -0
  91. package/dist/components/Badge/bases/OctantSpline.d.ts +79 -0
  92. package/dist/components/Badge/bases/OctantSpline.d.ts.map +1 -0
  93. package/dist/components/Badge/bases/Polygon.d.ts +8 -0
  94. package/dist/components/Badge/bases/Polygon.d.ts.map +1 -0
  95. package/dist/components/Badge/bases/Powerline.d.ts +13 -0
  96. package/dist/components/Badge/bases/Powerline.d.ts.map +1 -0
  97. package/dist/components/Badge/bases/Puzzle.d.ts +15 -0
  98. package/dist/components/Badge/bases/Puzzle.d.ts.map +1 -0
  99. package/dist/components/Badge/bases/Quatrefoil.d.ts +46 -0
  100. package/dist/components/Badge/bases/Quatrefoil.d.ts.map +1 -0
  101. package/dist/components/Badge/bases/Ribbon.d.ts +12 -0
  102. package/dist/components/Badge/bases/Ribbon.d.ts.map +1 -0
  103. package/dist/components/Badge/bases/RoundedRect.d.ts +14 -0
  104. package/dist/components/Badge/bases/RoundedRect.d.ts.map +1 -0
  105. package/dist/components/Badge/bases/edgeProfiles.d.ts +6 -0
  106. package/dist/components/Badge/bases/edgeProfiles.d.ts.map +1 -0
  107. package/dist/components/Badge/bases/index.d.ts +24 -0
  108. package/dist/components/Badge/bases/index.d.ts.map +1 -0
  109. package/dist/components/Badge/bases/polygonSampler.d.ts +4 -0
  110. package/dist/components/Badge/bases/polygonSampler.d.ts.map +1 -0
  111. package/dist/components/Badge/bases/types.d.ts +69 -0
  112. package/dist/components/Badge/bases/types.d.ts.map +1 -0
  113. package/dist/components/Badge/effects/Aqua.d.ts +49 -0
  114. package/dist/components/Badge/effects/Aqua.d.ts.map +1 -0
  115. package/dist/components/Badge/effects/Bevel.d.ts +11 -0
  116. package/dist/components/Badge/effects/Bevel.d.ts.map +1 -0
  117. package/dist/components/Badge/effects/Bevel2.d.ts +11 -0
  118. package/dist/components/Badge/effects/Bevel2.d.ts.map +1 -0
  119. package/dist/components/Badge/effects/Bites.d.ts +10 -0
  120. package/dist/components/Badge/effects/Bites.d.ts.map +1 -0
  121. package/dist/components/Badge/effects/Metal.d.ts +41 -0
  122. package/dist/components/Badge/effects/Metal.d.ts.map +1 -0
  123. package/dist/components/Badge/effects/Outline.d.ts +17 -0
  124. package/dist/components/Badge/effects/Outline.d.ts.map +1 -0
  125. package/dist/components/Badge/effects/Perforations.d.ts +11 -0
  126. package/dist/components/Badge/effects/Perforations.d.ts.map +1 -0
  127. package/dist/components/Badge/effects/Puffs.d.ts +10 -0
  128. package/dist/components/Badge/effects/Puffs.d.ts.map +1 -0
  129. package/dist/components/Badge/effects/Rivets.d.ts +13 -0
  130. package/dist/components/Badge/effects/Rivets.d.ts.map +1 -0
  131. package/dist/components/Badge/effects/Scallops.d.ts +10 -0
  132. package/dist/components/Badge/effects/Scallops.d.ts.map +1 -0
  133. package/dist/components/Badge/effects/Shadow.d.ts +11 -0
  134. package/dist/components/Badge/effects/Shadow.d.ts.map +1 -0
  135. package/dist/components/Badge/effects/Sheen.d.ts +10 -0
  136. package/dist/components/Badge/effects/Sheen.d.ts.map +1 -0
  137. package/dist/components/Badge/effects/Spikes.d.ts +20 -0
  138. package/dist/components/Badge/effects/Spikes.d.ts.map +1 -0
  139. package/dist/components/Badge/effects/Sunbeams.d.ts +29 -0
  140. package/dist/components/Badge/effects/Sunbeams.d.ts.map +1 -0
  141. package/dist/components/Badge/effects/Woodgrain.d.ts +12 -0
  142. package/dist/components/Badge/effects/Woodgrain.d.ts.map +1 -0
  143. package/dist/components/Badge/effects/index.d.ts +40 -0
  144. package/dist/components/Badge/effects/index.d.ts.map +1 -0
  145. package/dist/components/Badge/effects/rangeMask.d.ts +13 -0
  146. package/dist/components/Badge/effects/rangeMask.d.ts.map +1 -0
  147. package/dist/components/Badge/index.d.ts +4 -0
  148. package/dist/components/Badge/index.d.ts.map +1 -0
  149. package/dist/components/Badge/index.js +2 -0
  150. package/dist/components/Badge/shapeControls.d.ts +29 -0
  151. package/dist/components/Badge/shapeControls.d.ts.map +1 -0
  152. package/dist/components/Badge/shapes/Beavis.d.ts +11 -0
  153. package/dist/components/Badge/shapes/Beavis.d.ts.map +1 -0
  154. package/dist/components/Badge/shapes/Cloud.d.ts +11 -0
  155. package/dist/components/Badge/shapes/Cloud.d.ts.map +1 -0
  156. package/dist/components/Badge/shapes/Coffin.d.ts +12 -0
  157. package/dist/components/Badge/shapes/Coffin.d.ts.map +1 -0
  158. package/dist/components/Badge/shapes/Crest.d.ts +8 -0
  159. package/dist/components/Badge/shapes/Crest.d.ts.map +1 -0
  160. package/dist/components/Badge/shapes/Hexagon.d.ts +10 -0
  161. package/dist/components/Badge/shapes/Hexagon.d.ts.map +1 -0
  162. package/dist/components/Badge/shapes/House.d.ts +9 -0
  163. package/dist/components/Badge/shapes/House.d.ts.map +1 -0
  164. package/dist/components/Badge/shapes/Notched.d.ts +10 -0
  165. package/dist/components/Badge/shapes/Notched.d.ts.map +1 -0
  166. package/dist/components/Badge/shapes/Perforated.d.ts +8 -0
  167. package/dist/components/Badge/shapes/Perforated.d.ts.map +1 -0
  168. package/dist/components/Badge/shapes/Pill.d.ts +4 -0
  169. package/dist/components/Badge/shapes/Pill.d.ts.map +1 -0
  170. package/dist/components/Badge/shapes/Plain.d.ts +4 -0
  171. package/dist/components/Badge/shapes/Plain.d.ts.map +1 -0
  172. package/dist/components/Badge/shapes/Plaque.d.ts +12 -0
  173. package/dist/components/Badge/shapes/Plaque.d.ts.map +1 -0
  174. package/dist/components/Badge/shapes/Postage.d.ts +9 -0
  175. package/dist/components/Badge/shapes/Postage.d.ts.map +1 -0
  176. package/dist/components/Badge/shapes/Quatrefoil.d.ts +19 -0
  177. package/dist/components/Badge/shapes/Quatrefoil.d.ts.map +1 -0
  178. package/dist/components/Badge/shapes/Receipt.d.ts +9 -0
  179. package/dist/components/Badge/shapes/Receipt.d.ts.map +1 -0
  180. package/dist/components/Badge/shapes/Ribbon.d.ts +13 -0
  181. package/dist/components/Badge/shapes/Ribbon.d.ts.map +1 -0
  182. package/dist/components/Badge/shapes/Scalloped.d.ts +9 -0
  183. package/dist/components/Badge/shapes/Scalloped.d.ts.map +1 -0
  184. package/dist/components/Badge/shapes/Shield.d.ts +11 -0
  185. package/dist/components/Badge/shapes/Shield.d.ts.map +1 -0
  186. package/dist/components/Badge/shapes/Sparkler.d.ts +10 -0
  187. package/dist/components/Badge/shapes/Sparkler.d.ts.map +1 -0
  188. package/dist/components/Badge/shapes/Square.d.ts +8 -0
  189. package/dist/components/Badge/shapes/Square.d.ts.map +1 -0
  190. package/dist/components/Badge/shapes/Starburst.d.ts +11 -0
  191. package/dist/components/Badge/shapes/Starburst.d.ts.map +1 -0
  192. package/dist/components/Badge/shapes/Urn.d.ts +4 -0
  193. package/dist/components/Badge/shapes/Urn.d.ts.map +1 -0
  194. package/dist/components/Badge/shapes/Wood.d.ts +4 -0
  195. package/dist/components/Badge/shapes/Wood.d.ts.map +1 -0
  196. package/dist/components/Badge/shapes/index.d.ts +46 -0
  197. package/dist/components/Badge/shapes/index.d.ts.map +1 -0
  198. package/dist/components/Badge/types.d.ts +39 -0
  199. package/dist/components/Badge/types.d.ts.map +1 -0
  200. package/dist/components/Button/Button.d.ts +29 -0
  201. package/dist/components/Button/Button.d.ts.map +1 -0
  202. package/dist/components/Button/index.d.ts +3 -0
  203. package/dist/components/Button/index.d.ts.map +1 -0
  204. package/dist/components/Button/index.js +2 -0
  205. package/dist/components/Callout/Callout.d.ts +67 -0
  206. package/dist/components/Callout/Callout.d.ts.map +1 -0
  207. package/dist/components/Callout/index.d.ts +3 -0
  208. package/dist/components/Callout/index.d.ts.map +1 -0
  209. package/dist/components/Callout/index.js +2 -0
  210. package/dist/components/Checkbox/Checkbox.d.ts +15 -0
  211. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  212. package/dist/components/Checkbox/index.d.ts +3 -0
  213. package/dist/components/Checkbox/index.d.ts.map +1 -0
  214. package/dist/components/Checkbox/index.js +2 -0
  215. package/dist/components/ColorField/ColorField.d.ts +28 -0
  216. package/dist/components/ColorField/ColorField.d.ts.map +1 -0
  217. package/dist/components/ColorField/index.d.ts +2 -0
  218. package/dist/components/ColorField/index.d.ts.map +1 -0
  219. package/dist/components/ColorField/index.js +2 -0
  220. package/dist/components/ComboBox/ComboBox.d.ts +36 -0
  221. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -0
  222. package/dist/components/ComboBox/index.d.ts +3 -0
  223. package/dist/components/ComboBox/index.d.ts.map +1 -0
  224. package/dist/components/ComboBox/index.js +2 -0
  225. package/dist/components/CurveEditor/CurveEditor.d.ts +41 -0
  226. package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -0
  227. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts +40 -0
  228. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -0
  229. package/dist/components/CurveEditor/catmullRom.d.ts +35 -0
  230. package/dist/components/CurveEditor/catmullRom.d.ts.map +1 -0
  231. package/dist/components/CurveEditor/createFunctionLayer.d.ts +72 -0
  232. package/dist/components/CurveEditor/createFunctionLayer.d.ts.map +1 -0
  233. package/dist/components/CurveEditor/hitTest.d.ts +29 -0
  234. package/dist/components/CurveEditor/hitTest.d.ts.map +1 -0
  235. package/dist/components/CurveEditor/index.d.ts +7 -0
  236. package/dist/components/CurveEditor/index.d.ts.map +1 -0
  237. package/dist/components/CurveEditor/index.js +2 -0
  238. package/dist/components/CurveEditor/interpolation.d.ts +15 -0
  239. package/dist/components/CurveEditor/interpolation.d.ts.map +1 -0
  240. package/dist/components/CurveEditor/layerTypes.d.ts +103 -0
  241. package/dist/components/CurveEditor/layerTypes.d.ts.map +1 -0
  242. package/dist/components/CurveEditor/monotone.d.ts +25 -0
  243. package/dist/components/CurveEditor/monotone.d.ts.map +1 -0
  244. package/dist/components/CurveEditor/setCurveOp.d.ts +35 -0
  245. package/dist/components/CurveEditor/setCurveOp.d.ts.map +1 -0
  246. package/dist/components/DataGrid/DataGrid.d.ts +34 -0
  247. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -0
  248. package/dist/components/DataGrid/index.d.ts +3 -0
  249. package/dist/components/DataGrid/index.d.ts.map +1 -0
  250. package/dist/components/DataGrid/index.js +2 -0
  251. package/dist/components/Dialog/Dialog.d.ts +29 -0
  252. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  253. package/dist/components/Dialog/index.d.ts +3 -0
  254. package/dist/components/Dialog/index.d.ts.map +1 -0
  255. package/dist/components/Dialog/index.js +2 -0
  256. package/dist/components/Field/Field.d.ts +25 -0
  257. package/dist/components/Field/Field.d.ts.map +1 -0
  258. package/dist/components/Field/index.d.ts +3 -0
  259. package/dist/components/Field/index.d.ts.map +1 -0
  260. package/dist/components/Field/index.js +2 -0
  261. package/dist/components/Input/Input.d.ts +28 -0
  262. package/dist/components/Input/Input.d.ts.map +1 -0
  263. package/dist/components/Input/index.d.ts +3 -0
  264. package/dist/components/Input/index.d.ts.map +1 -0
  265. package/dist/components/Input/index.js +2 -0
  266. package/dist/components/Keycaps/Keycap.d.ts +34 -0
  267. package/dist/components/Keycaps/Keycap.d.ts.map +1 -0
  268. package/dist/components/Keycaps/Keycaps.d.ts +29 -0
  269. package/dist/components/Keycaps/Keycaps.d.ts.map +1 -0
  270. package/dist/components/Keycaps/index.d.ts +8 -0
  271. package/dist/components/Keycaps/index.d.ts.map +1 -0
  272. package/dist/components/Keycaps/index.js +3 -0
  273. package/dist/components/Keycaps/keyGlyph.d.ts +7 -0
  274. package/dist/components/Keycaps/keyGlyph.d.ts.map +1 -0
  275. package/dist/components/Keycaps/keySpecsFromMods.d.ts +81 -0
  276. package/dist/components/Keycaps/keySpecsFromMods.d.ts.map +1 -0
  277. package/dist/components/NumberField/NumberField.d.ts +25 -0
  278. package/dist/components/NumberField/NumberField.d.ts.map +1 -0
  279. package/dist/components/NumberField/index.d.ts +3 -0
  280. package/dist/components/NumberField/index.d.ts.map +1 -0
  281. package/dist/components/NumberField/index.js +2 -0
  282. package/dist/components/OptionsBar/OptionsBar.d.ts +25 -0
  283. package/dist/components/OptionsBar/OptionsBar.d.ts.map +1 -0
  284. package/dist/components/OptionsBar/index.d.ts +3 -0
  285. package/dist/components/OptionsBar/index.d.ts.map +1 -0
  286. package/dist/components/OptionsBar/index.js +2 -0
  287. package/dist/components/Plot2D/Plot2D.d.ts +60 -0
  288. package/dist/components/Plot2D/Plot2D.d.ts.map +1 -0
  289. package/dist/components/Plot2D/geometry.d.ts +24 -0
  290. package/dist/components/Plot2D/geometry.d.ts.map +1 -0
  291. package/dist/components/Plot2D/index.d.ts +3 -0
  292. package/dist/components/Plot2D/index.d.ts.map +1 -0
  293. package/dist/components/Plot2D/index.js +2 -0
  294. package/dist/components/PointPlotter/PointPlotter.d.ts +51 -0
  295. package/dist/components/PointPlotter/PointPlotter.d.ts.map +1 -0
  296. package/dist/components/PointPlotter/index.d.ts +2 -0
  297. package/dist/components/PointPlotter/index.d.ts.map +1 -0
  298. package/dist/components/PointPlotter/index.js +2 -0
  299. package/dist/components/Powerline/Powerline.d.ts +32 -0
  300. package/dist/components/Powerline/Powerline.d.ts.map +1 -0
  301. package/dist/components/Powerline/index.d.ts +5 -0
  302. package/dist/components/Powerline/index.d.ts.map +1 -0
  303. package/dist/components/Powerline/index.js +3 -0
  304. package/dist/components/Prefs/PrefsDialog.d.ts +21 -0
  305. package/dist/components/Prefs/PrefsDialog.d.ts.map +1 -0
  306. package/dist/components/Prefs/PrefsForm.d.ts +42 -0
  307. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -0
  308. package/dist/components/Prefs/index.d.ts +4 -0
  309. package/dist/components/Prefs/index.d.ts.map +1 -0
  310. package/dist/components/Prefs/index.js +2 -0
  311. package/dist/components/Prefs/schema.d.ts +85 -0
  312. package/dist/components/Prefs/schema.d.ts.map +1 -0
  313. package/dist/components/RadioGroup/RadioGroup.d.ts +16 -0
  314. package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
  315. package/dist/components/RadioGroup/index.d.ts +3 -0
  316. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  317. package/dist/components/RadioGroup/index.js +2 -0
  318. package/dist/components/RangeSlider/RangeSlider.d.ts +18 -0
  319. package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -0
  320. package/dist/components/RangeSlider/index.d.ts +3 -0
  321. package/dist/components/RangeSlider/index.d.ts.map +1 -0
  322. package/dist/components/RangeSlider/index.js +2 -0
  323. package/dist/components/Select/Select.d.ts +39 -0
  324. package/dist/components/Select/Select.d.ts.map +1 -0
  325. package/dist/components/Select/index.d.ts +3 -0
  326. package/dist/components/Select/index.d.ts.map +1 -0
  327. package/dist/components/Select/index.js +2 -0
  328. package/dist/components/SelectionPanel/SelectionPanel.d.ts +46 -0
  329. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -0
  330. package/dist/components/SelectionPanel/index.d.ts +3 -0
  331. package/dist/components/SelectionPanel/index.d.ts.map +1 -0
  332. package/dist/components/SelectionPanel/index.js +2 -0
  333. package/dist/components/SelectionPanel/model.d.ts +43 -0
  334. package/dist/components/SelectionPanel/model.d.ts.map +1 -0
  335. package/dist/components/Sidebar/Sidebar.d.ts +31 -0
  336. package/dist/components/Sidebar/Sidebar.d.ts.map +1 -0
  337. package/dist/components/Sidebar/index.d.ts +3 -0
  338. package/dist/components/Sidebar/index.d.ts.map +1 -0
  339. package/dist/components/Sidebar/index.js +2 -0
  340. package/dist/components/SidebarPanel/SidebarPanel.d.ts +35 -0
  341. package/dist/components/SidebarPanel/SidebarPanel.d.ts.map +1 -0
  342. package/dist/components/SidebarPanel/index.d.ts +3 -0
  343. package/dist/components/SidebarPanel/index.d.ts.map +1 -0
  344. package/dist/components/SidebarPanel/index.js +2 -0
  345. package/dist/components/Slider/Slider.d.ts +43 -0
  346. package/dist/components/Slider/Slider.d.ts.map +1 -0
  347. package/dist/components/Slider/index.d.ts +3 -0
  348. package/dist/components/Slider/index.d.ts.map +1 -0
  349. package/dist/components/Slider/index.js +2 -0
  350. package/dist/components/Switch/Switch.d.ts +11 -0
  351. package/dist/components/Switch/Switch.d.ts.map +1 -0
  352. package/dist/components/Switch/index.d.ts +3 -0
  353. package/dist/components/Switch/index.d.ts.map +1 -0
  354. package/dist/components/Switch/index.js +2 -0
  355. package/dist/components/Tabs/Tabs.d.ts +22 -0
  356. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  357. package/dist/components/Tabs/index.d.ts +3 -0
  358. package/dist/components/Tabs/index.d.ts.map +1 -0
  359. package/dist/components/Tabs/index.js +2 -0
  360. package/dist/components/Toast/Toast.d.ts +18 -0
  361. package/dist/components/Toast/Toast.d.ts.map +1 -0
  362. package/dist/components/Toast/index.d.ts +5 -0
  363. package/dist/components/Toast/index.d.ts.map +1 -0
  364. package/dist/components/Toast/index.js +2 -0
  365. package/dist/components/Toast/queue.d.ts +56 -0
  366. package/dist/components/Toast/queue.d.ts.map +1 -0
  367. package/dist/components/ToggleBar/ToggleBar.d.ts +35 -0
  368. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -0
  369. package/dist/components/ToggleBar/index.d.ts +3 -0
  370. package/dist/components/ToggleBar/index.d.ts.map +1 -0
  371. package/dist/components/ToggleBar/index.js +2 -0
  372. package/dist/components/ToolButton/ToolButton.d.ts +41 -0
  373. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -0
  374. package/dist/components/ToolButton/index.d.ts +3 -0
  375. package/dist/components/ToolButton/index.d.ts.map +1 -0
  376. package/dist/components/ToolButton/index.js +2 -0
  377. package/dist/components/ToolGroup/ToolGroup.d.ts +25 -0
  378. package/dist/components/ToolGroup/ToolGroup.d.ts.map +1 -0
  379. package/dist/components/ToolGroup/index.d.ts +3 -0
  380. package/dist/components/ToolGroup/index.d.ts.map +1 -0
  381. package/dist/components/ToolGroup/index.js +2 -0
  382. package/dist/components/ToolPalette/ToolPalette.d.ts +27 -0
  383. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -0
  384. package/dist/components/ToolPalette/formatShortcut.d.ts +17 -0
  385. package/dist/components/ToolPalette/formatShortcut.d.ts.map +1 -0
  386. package/dist/components/ToolPalette/index.d.ts +4 -0
  387. package/dist/components/ToolPalette/index.d.ts.map +1 -0
  388. package/dist/components/ToolPalette/index.js +2 -0
  389. package/dist/components/Tooltip/Tooltip.d.ts +24 -0
  390. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  391. package/dist/components/Tooltip/index.d.ts +3 -0
  392. package/dist/components/Tooltip/index.d.ts.map +1 -0
  393. package/dist/components/Tooltip/index.js +2 -0
  394. package/dist/dlog.d.ts +33 -0
  395. package/dist/dlog.d.ts.map +1 -0
  396. package/dist/format/number.d.ts +13 -0
  397. package/dist/format/number.d.ts.map +1 -0
  398. package/dist/index.d.ts +44 -0
  399. package/dist/index.d.ts.map +1 -0
  400. package/dist/index.js +49 -6749
  401. package/dist/index.js.map +1 -1
  402. package/dist/paintGradientTrack.d.ts +15 -0
  403. package/dist/paintGradientTrack.d.ts.map +1 -0
  404. package/dist/style.css +1 -1
  405. package/dist/useReorderDragList.d.ts +35 -0
  406. package/dist/useReorderDragList.d.ts.map +1 -0
  407. package/package.json +8 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleBar-BfcvLaOr.js","names":[],"sources":["../../src/components/ToggleBar/ToggleBar.module.css","../../src/components/ToggleBar/ToggleBar.tsx"],"sourcesContent":["/* Aqua-glass segmented control. The track is a pill-shaped well; the\n selected segment becomes a tinted glass cylinder that reads as the same\n \"lozenge\" family as the standalone Button. Visual params come from the\n `--btn-*` custom properties (see Button.module.css) so the Button Lab\n can tune both surfaces with one set of sliders. */\n.root {\n display: inline-flex;\n height: var(--wzl-tb-height, 28px);\n padding: 2px;\n background: linear-gradient(\n 180deg,\n rgba(0, 0, 0, 0.18) 0%,\n rgba(0, 0, 0, 0.05) 100%\n );\n border-radius: 999px;\n /* Clip segments to the track outline so interior corners read crisp and\n the selected segment's glass treatment doesn't paint over the rounded\n outer pixels. */\n overflow: hidden;\n box-shadow:\n inset 0 1px 2px rgba(0, 0, 0, 0.4),\n 0 1px 0 rgba(255, 255, 255, 0.06);\n user-select: none;\n -webkit-user-select: none;\n touch-action: none;\n}\n\n.segment {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n padding: 0 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n margin: 0;\n font-family: var(--wzl-font-ui);\n font-weight: 300;\n font-size: var(--btn-fontsize, 14px);\n line-height: 1;\n color: var(--wzl-fg-muted);\n cursor: pointer;\n /* Only round the outer corners of the bar — middle segments stay square\n so the seams between them don't render as facing parentheses. */\n border-radius: 0;\n isolation: isolate;\n overflow: hidden;\n transition: color var(--wzl-motion-fast);\n}\n\n.segment:first-child {\n border-radius: 999px 0 0 999px;\n}\n\n.segment:last-child {\n border-radius: 0 999px 999px 0;\n}\n\n.segment:only-child {\n border-radius: 999px;\n}\n\n.segment:focus-visible {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -2px;\n}\n\n.segment:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n}\n\n/* Selected segment — full Aqua glass cylinder. Mirrors Button.variant_primary. */\n.segmentSelected {\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha, 45%), transparent) 0%,\n color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha, 70%), transparent) calc(var(--btn-equator, 52%) - var(--btn-equator-spread, 12%)),\n color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint, 95%), white) var(--btn-equator, 52%),\n var(--wzl-accent) calc(var(--btn-equator, 52%) + var(--btn-equator-spread, 12%) * 1.6),\n color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint, 70%), black) 100%\n );\n backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n -webkit-backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n color: var(--wzl-fg-on-accent);\n text-shadow:\n 0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow, 0.35)),\n var(--btn-text-inset-x, 0px) var(--btn-text-inset-y, 1px) 0 rgba(0, 0, 0, var(--btn-text-inset, 0.55)),\n 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow, 0.35) * 0.5));\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi, 0.42)),\n inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo, 0.3)),\n 0 0 0 1px rgba(0, 0, 0, var(--btn-rim, 0.22)),\n 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near, 0.3)),\n 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far, 0.18) * 0.8));\n}\n\n/* Specular gloss on the selected segment. Top corners inherit the\n segment's radius so they hug the upper edge cleanly; bottom corners\n are flattened so the gloss ends in a straight line at the equator\n instead of two little curves that read as `)(` brackets. */\n.segmentSelected::before {\n content: '';\n position: absolute;\n inset: 1px 1px var(--btn-gloss-bottom, 50%) 1px;\n border-radius: inherit;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, var(--btn-gloss-top, 0.42)) 0%,\n rgba(255, 255, 255, var(--btn-gloss-mid, 0.12)) 60%,\n rgba(255, 255, 255, 0) 100%\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.segmentSelected > * {\n position: relative;\n z-index: 2;\n}\n\n/* Small variant — ~60% of the default height, with proportionally reduced\n padding and font. Sized for dense surfaces (lab control panels, inline\n filters, etc.). */\n.size_sm {\n height: 17px;\n padding: 1px;\n}\n\n.size_sm .segment {\n padding: 0 8px;\n font-size: 11px;\n}\n\n/* Minimal variant — strips the pill track, glass selected state, inset\n shadows, and outer padding. Used in dense diagnostic surfaces (dispatch\n trace, lab inspectors) where the bar must read as plain text controls. */\n.variant_minimal {\n height: auto;\n padding: 0;\n background: none;\n border: 1px solid var(--wzl-border, rgba(255, 255, 255, 0.18));\n border-radius: 3px;\n box-shadow: none;\n gap: 0;\n}\n\n.variant_minimal .segment {\n padding: 0 6px;\n font-size: 11px;\n font-weight: 400;\n line-height: 1.4;\n border-radius: 0;\n color: var(--wzl-fg-muted);\n transition: none;\n}\n\n/* Dividers between segments make the mutual-exclusion grouping visible\n without a heavy track. Only the inner edges get a rule — the outer\n border on `.variant_minimal` handles the perimeter. */\n.variant_minimal .segment + .segment {\n border-left: 1px solid var(--wzl-border, rgba(255, 255, 255, 0.18));\n}\n\n.variant_minimal .segment:first-child,\n.variant_minimal .segment:last-child,\n.variant_minimal .segment:only-child {\n border-radius: 0;\n}\n\n.variant_minimal .segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n background: rgba(255, 255, 255, 0.06);\n}\n\n.variant_minimal .segmentSelected {\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n color: var(--wzl-accent-fg, var(--wzl-accent));\n text-shadow: none;\n box-shadow: none;\n font-weight: 500;\n}\n\n.variant_minimal .segmentSelected::before {\n content: none;\n}\n","import { useRef, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent, type ReactElement, type ReactNode } from 'react';\nimport s from './ToggleBar.module.css';\n\nexport type ToggleBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n};\n\nexport type ToggleBarSize = 'sm' | 'md';\nexport type ToggleBarVariant = 'default' | 'minimal';\n\ntype CommonProps = {\n ariaLabel?: string;\n className?: string;\n height?: number;\n /** Size variant. `sm` is ~60% of the default height with reduced padding\n * and font size — sized for dense surfaces like lab control panels. */\n size?: ToggleBarSize;\n /** Visual variant. `minimal` strips the pill track and glass treatment;\n * selection becomes a flat accent. For dense diagnostic surfaces. */\n variant?: ToggleBarVariant;\n};\n\nexport type ToggleBarProps<V extends string | number = string> =\n | (CommonProps & {\n mode?: 'single';\n items: readonly ToggleBarItem<V>[];\n value: V | null;\n onChange: (next: V | null) => void;\n allowDeselect?: boolean;\n })\n | (CommonProps & {\n mode: 'multiple';\n items: readonly ToggleBarItem<V>[];\n value: readonly V[];\n onChange: (next: V[]) => void;\n });\n\nfunction firstEnabledIndex(items: readonly ToggleBarItem<string | number>[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly ToggleBarItem<string | number>[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly ToggleBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly ToggleBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nexport function ToggleBar<V extends string | number = string>(props: ToggleBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n const mode = props.mode ?? 'single';\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n const isSelected = (value: V): boolean => {\n if (mode === 'multiple') return (props.value as readonly V[]).includes(value);\n return (props.value as V | null) === value;\n };\n\n let tabStopIndex = -1;\n if (mode === 'single') {\n const sel = items.findIndex(it => it.value === (props.value as V | null));\n tabStopIndex = sel >= 0 && !items[sel].disabled ? sel : firstEnabledIndex(items);\n } else {\n tabStopIndex = firstEnabledIndex(items);\n }\n\n const handleClick = (index: number) => () => {\n const item = items[index];\n if (item.disabled) return;\n if (mode === 'multiple') {\n const current = props.value as readonly V[];\n const next = current.includes(item.value)\n ? current.filter(v => v !== item.value)\n : [...current, item.value];\n (props.onChange as (n: V[]) => void)(next);\n } else {\n const current = props.value as V | null;\n if (current === item.value) {\n if ((props as { allowDeselect?: boolean }).allowDeselect) {\n (props.onChange as (n: V | null) => void)(null);\n }\n return;\n }\n (props.onChange as (n: V | null) => void)(item.value);\n }\n };\n\n const focusSegment = (index: number) => {\n const root = rootRef.current;\n if (!root) return;\n const buttons = root.querySelectorAll<HTMLButtonElement>(`.${s.segment}`);\n buttons[index]?.focus();\n };\n\n const handleKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n if (mode === 'multiple') {\n e.preventDefault();\n handleClick(index)();\n }\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n if (mode === 'single') {\n const item = items[nextIndex];\n (props.onChange as (n: V | null) => void)(item.value);\n }\n focusSegment(nextIndex);\n };\n\n const style: CSSProperties | undefined = height !== undefined\n ? ({ ['--wzl-tb-height' as string]: `${height}px` } as CSSProperties)\n : undefined;\n\n const rootCls = [\n s.root,\n size && s[`size_${size}`],\n variant && s[`variant_${variant}`],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={rootRef}\n className={rootCls}\n role={mode === 'multiple' ? 'group' : 'radiogroup'}\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => {\n const selected = isSelected(item.value);\n const cls = `${s.segment}${selected ? ` ${s.segmentSelected}` : ''}`;\n return (\n <button\n key={item.value}\n type=\"button\"\n role={mode === 'multiple' ? undefined : 'radio'}\n aria-checked={mode === 'multiple' ? undefined : selected}\n aria-pressed={mode === 'multiple' ? selected : undefined}\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={i === tabStopIndex ? 0 : -1}\n className={cls}\n onClick={handleClick(i)}\n onKeyDown={handleKeyDown(i)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { n as e, t } from "./Tooltip-Clgn4trm.js";
2
+ import { Focusable as n } from "react-aria-components";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ var a = {
5
+ button: "_button_rsrcm_1",
6
+ active: "_active_rsrcm_26",
7
+ icon: "_icon_rsrcm_35",
8
+ label: "_label_rsrcm_37",
9
+ shortcut: "_shortcut_rsrcm_38"
10
+ };
11
+ //#endregion
12
+ //#region src/components/ToolButton/ToolButton.tsx
13
+ function o(o) {
14
+ let { icon: s, label: c, shortcut: l, active: u, disabled: d, ariaDisabled: f, tabbable: p, onClick: m, title: h, className: g } = o, _ = h ?? (l ? `${c} (${l})` : c), v = [
15
+ a.button,
16
+ u && a.active,
17
+ g
18
+ ].filter(Boolean).join(" ");
19
+ return /* @__PURE__ */ i(e, {
20
+ isDisabled: d,
21
+ children: [/* @__PURE__ */ r(n, {
22
+ isDisabled: d,
23
+ children: /* @__PURE__ */ i("button", {
24
+ type: "button",
25
+ tabIndex: p ? 0 : -1,
26
+ className: v,
27
+ "aria-current": u ? "true" : void 0,
28
+ "aria-disabled": f ? "true" : void 0,
29
+ disabled: d,
30
+ onClick: m,
31
+ children: [
32
+ /* @__PURE__ */ r("span", {
33
+ className: a.icon,
34
+ "aria-hidden": "true",
35
+ children: s
36
+ }),
37
+ /* @__PURE__ */ r("span", {
38
+ className: a.label,
39
+ children: c
40
+ }),
41
+ l && /* @__PURE__ */ r("span", {
42
+ className: a.shortcut,
43
+ children: l
44
+ })
45
+ ]
46
+ })
47
+ }), /* @__PURE__ */ r(t, { children: _ })]
48
+ });
49
+ }
50
+ //#endregion
51
+ export { o as t };
52
+
53
+ //# sourceMappingURL=ToolButton-GAzBOvcR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolButton-GAzBOvcR.js","names":[],"sources":["../../src/components/ToolButton/ToolButton.module.css","../../src/components/ToolButton/ToolButton.tsx"],"sourcesContent":[".button {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n min-width: 44px;\n padding: 6px 4px;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 3px;\n color: var(--wzl-text);\n cursor: default;\n font-family: inherit;\n font-size: 10px;\n line-height: 1.1;\n}\n.button:hover:not([disabled]) {\n background: var(--wzl-button-fill-hover);\n color: var(--wzl-button-text);\n}\n.button:focus-visible {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -2px;\n}\n.button.active {\n background: var(--wzl-button-fill-pressed);\n border-color: var(--wzl-accent);\n color: var(--wzl-button-text);\n}\n.button[disabled] {\n opacity: 0.4;\n}\n\n.icon { display: block; }\n.icon > svg { display: block; }\n.label { font-size: 10px; }\n.shortcut {\n color: var(--wzl-text-muted);\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 9px;\n}\n","import type { ReactNode } from 'react';\nimport { Focusable } from 'react-aria-components';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\nimport s from './ToolButton.module.css';\n\nexport interface ToolButtonProps {\n /** Icon node (typically an SVG component). */\n icon: ReactNode;\n /** Human-readable label shown under the icon. */\n label: string;\n /** Optional shortcut hint (e.g. \"V\" or \"⌘Z\"). */\n shortcut?: string;\n /** Selected/active state — toggles the active visual treatment. */\n active?: boolean;\n /** Disabled state — passes through to the underlying button. */\n disabled?: boolean;\n /**\n * When true, sets `aria-disabled=\"true\"` on the button without using the\n * native `disabled` attribute. This keeps the button focusable and reachable\n * by keyboard (roving-tabindex still applies) while marking it as ineligible\n * to screen readers. The caller is responsible for making `onClick` a no-op.\n */\n ariaDisabled?: boolean;\n /**\n * Whether this button is the currently tabbable member of its toolbar.\n * Toolbars use roving tabindex: exactly one button has `tabIndex=0` at\n * a time; the rest are `-1`. Caller manages which.\n */\n tabbable?: boolean;\n /** Click handler. */\n onClick(): void;\n /**\n * Tooltip content. Defaults to `label` (plus `shortcut` if provided).\n */\n title?: string;\n /** Additional class for the root button. */\n className?: string;\n}\n\n/**\n * Generic icon-+-label toolbar button — building block for `ToolPalette`\n * and similar surfaces. Headless about layout direction (parent group\n * supplies flex direction via `ToolGroup`). Theme via `--wzl-*` tokens.\n */\nexport function ToolButton(props: ToolButtonProps) {\n const { icon, label, shortcut, active, disabled, ariaDisabled, tabbable, onClick, title, className } = props;\n const resolvedTitle = title ?? (shortcut ? `${label} (${shortcut})` : label);\n const cls = [s.button, active && s.active, className].filter(Boolean).join(' ');\n return (\n <TooltipTrigger isDisabled={disabled}>\n <Focusable isDisabled={disabled}>\n <button\n type=\"button\"\n tabIndex={tabbable ? 0 : -1}\n className={cls}\n aria-current={active ? 'true' : undefined}\n aria-disabled={ariaDisabled ? 'true' : undefined}\n disabled={disabled}\n onClick={onClick}\n >\n <span className={s.icon} aria-hidden=\"true\">{icon}</span>\n <span className={s.label}>{label}</span>\n {shortcut && <span className={s.shortcut}>{shortcut}</span>}\n </button>\n </Focusable>\n <Tooltip>{resolvedTitle}</Tooltip>\n </TooltipTrigger>\n );\n}\n"],"mappings":";;;;;;;;;;;;AC4CA,SAAgB,EAAW,GAAwB;CACjD,IAAM,EAAE,SAAM,UAAO,aAAU,WAAQ,aAAU,iBAAc,aAAU,YAAS,UAAO,iBAAc,GACjG,IAAgB,MAAU,IAAW,GAAG,EAAM,IAAI,EAAS,KAAK,IAChE,IAAM;EAAC,EAAE;EAAQ,KAAU,EAAE;EAAQ;EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;CAC/E,OACE,kBAAC,GAAD;EAAgB,YAAY;YAA5B,CACE,kBAAC,GAAD;GAAW,YAAY;aACrB,kBAAC,UAAD;IACE,MAAK;IACL,UAAU,IAAW,IAAI;IACzB,WAAW;IACX,gBAAc,IAAS,SAAS,KAAA;IAChC,iBAAe,IAAe,SAAS,KAAA;IAC7B;IACD;cAPX;KASE,kBAAC,QAAD;MAAM,WAAW,EAAE;MAAM,eAAY;gBAAQ;MAAY,CAAA;KACzD,kBAAC,QAAD;MAAM,WAAW,EAAE;gBAAQ;MAAa,CAAA;KACvC,KAAY,kBAAC,QAAD;MAAM,WAAW,EAAE;gBAAW;MAAgB,CAAA;KACpD;;GACC,CAAA,EACZ,kBAAC,GAAD,EAAA,UAAU,GAAwB,CAAA,CACnB"}
@@ -0,0 +1,25 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ var t = {
3
+ group: "_group_o2pho_1",
4
+ horizontal: "_horizontal_o2pho_6"
5
+ };
6
+ //#endregion
7
+ //#region src/components/ToolGroup/ToolGroup.tsx
8
+ function n(n) {
9
+ let { children: r, orientation: i = "vertical", groupKey: a, ariaLabel: o, className: s } = n;
10
+ return /* @__PURE__ */ e("div", {
11
+ className: [
12
+ t.group,
13
+ i === "horizontal" && t.horizontal,
14
+ s
15
+ ].filter(Boolean).join(" "),
16
+ role: "group",
17
+ "data-group": a,
18
+ "aria-label": o,
19
+ children: r
20
+ });
21
+ }
22
+ //#endregion
23
+ export { n as t };
24
+
25
+ //# sourceMappingURL=ToolGroup-Btg47vJF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolGroup-Btg47vJF.js","names":[],"sources":["../../src/components/ToolGroup/ToolGroup.module.css","../../src/components/ToolGroup/ToolGroup.tsx"],"sourcesContent":[".group {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.group.horizontal {\n flex-direction: row;\n}\n","import type { ReactNode } from 'react';\nimport s from './ToolGroup.module.css';\n\nexport interface ToolGroupProps {\n children: ReactNode;\n /**\n * Lays children along an axis. `'vertical'` (default) stacks them in\n * a column; `'horizontal'` lays them in a row. Independent of the\n * parent toolbar's own orientation.\n */\n orientation?: 'vertical' | 'horizontal';\n /**\n * Optional `data-group` attribute — useful for parents that want to\n * select the group from CSS or tests by name.\n */\n groupKey?: string;\n /** Accessible name for the group (rendered as `aria-label`). */\n ariaLabel?: string;\n className?: string;\n}\n\n/**\n * Generic toolbar group — a `role=\"group\"` flex container that arranges\n * `<ToolButton>`s (or any children) along a chosen axis. No visual chrome\n * beyond layout; theming lives on the buttons.\n */\nexport function ToolGroup(props: ToolGroupProps) {\n const { children, orientation = 'vertical', groupKey, ariaLabel, className } = props;\n const cls = [s.group, orientation === 'horizontal' && s.horizontal, className]\n .filter(Boolean).join(' ');\n return (\n <div className={cls} role=\"group\" data-group={groupKey} aria-label={ariaLabel}>\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;AC0BA,SAAgB,EAAU,GAAuB;CAC/C,IAAM,EAAE,aAAU,iBAAc,YAAY,aAAU,cAAW,iBAAc;CAG/E,OACE,kBAAC,OAAD;EAAK,WAHK;GAAC,EAAE;GAAO,MAAgB,gBAAgB,EAAE;GAAY;GAAU,CAC3E,OAAO,QAAQ,CAAC,KAAK,IAEN;EAAK,MAAK;EAAQ,cAAY;EAAU,cAAY;EACjE;EACG,CAAA"}
@@ -0,0 +1,117 @@
1
+ import { t as e } from "./keyGlyph-BDH5fqkO.js";
2
+ import { t } from "./ToolButton-GAzBOvcR.js";
3
+ import { t as n } from "./ToolGroup-Btg47vJF.js";
4
+ import { Fragment as r, useRef as i } from "react";
5
+ import { UnknownIcon as a } from "@weasel-js/core";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ import { eligibleTool as c } from "@weasel-js/modes";
8
+ var l = {
9
+ palette: "_palette_1ygdo_1",
10
+ horizontal: "_horizontal_1ygdo_11",
11
+ ineligibleBtn: "_ineligibleBtn_1ygdo_16",
12
+ separator: "_separator_1ygdo_21"
13
+ };
14
+ //#endregion
15
+ //#region src/components/ToolPalette/formatShortcut.ts
16
+ function u(t) {
17
+ if (!t) return;
18
+ let n = Array.isArray(t.key) ? t.key[0] : t.key, r = [];
19
+ return t.mod && r.push("⌘"), t.shift === !0 && r.push("⇧"), t.alt && r.push("⌥"), r.push(e(n)), r;
20
+ }
21
+ function d(e) {
22
+ let t = u(e);
23
+ return t ? t.join("") : void 0;
24
+ }
25
+ //#endregion
26
+ //#region src/components/ToolPalette/ToolPalette.tsx
27
+ var f = [
28
+ "select",
29
+ "shape",
30
+ "draw",
31
+ "type",
32
+ "view"
33
+ ], p = "misc";
34
+ function m(e) {
35
+ let t = /* @__PURE__ */ new Map();
36
+ for (let n of e) {
37
+ let e = n.presentation?.group ?? p, r = t.get(e) ?? [];
38
+ r.push(n), t.set(e, r);
39
+ }
40
+ return t;
41
+ }
42
+ function h(e, t) {
43
+ let n = new Set(e.keys()), r = [];
44
+ for (let e of t) n.has(e) && (r.push(e), n.delete(e));
45
+ for (let t of e.keys()) n.has(t) && t !== p && (r.push(t), n.delete(t));
46
+ return n.has(p) && r.push(p), r;
47
+ }
48
+ function g(e) {
49
+ let t = e.presentation?.icon;
50
+ return t == null ? /* @__PURE__ */ o(a, {}) : typeof t == "function" ? t(void 0) : t;
51
+ }
52
+ function _(e) {
53
+ let { tools: a, orientation: u = "vertical", className: p, lookupShortcut: _, modeRegistry: v, groupOrder: y = f } = e, b = m(Object.values(a.registry)), x = h(b, y), S = [
54
+ l.palette,
55
+ u === "horizontal" && l.horizontal,
56
+ p
57
+ ].filter(Boolean).join(" "), C = x.flatMap((e) => b.get(e).map((e) => e.id)), w = a.active && C.includes(a.active) ? a.active : C[0], T = i(null);
58
+ function E(e) {
59
+ let t = e.target;
60
+ if (t.tagName !== "BUTTON") return;
61
+ let n = T.current;
62
+ if (!n) return;
63
+ let r = Array.from(n.querySelectorAll("button")), i = r.indexOf(t);
64
+ if (i < 0) return;
65
+ let a = -1;
66
+ switch (e.key) {
67
+ case "ArrowDown":
68
+ case "ArrowRight":
69
+ a = (i + 1) % r.length;
70
+ break;
71
+ case "ArrowUp":
72
+ case "ArrowLeft":
73
+ a = (i - 1 + r.length) % r.length;
74
+ break;
75
+ case "Home":
76
+ a = 0;
77
+ break;
78
+ case "End":
79
+ a = r.length - 1;
80
+ break;
81
+ }
82
+ a >= 0 && (e.preventDefault(), r[a].focus());
83
+ }
84
+ return /* @__PURE__ */ o("div", {
85
+ ref: T,
86
+ className: S,
87
+ role: "toolbar",
88
+ "aria-label": "Tools",
89
+ onKeyDown: E,
90
+ children: x.map((e, i) => /* @__PURE__ */ s(r, { children: [i > 0 && /* @__PURE__ */ o("div", {
91
+ className: l.separator,
92
+ role: "separator",
93
+ "aria-orientation": u === "horizontal" ? "vertical" : "horizontal"
94
+ }), /* @__PURE__ */ o(n, {
95
+ orientation: u,
96
+ groupKey: e,
97
+ children: b.get(e).map((e) => {
98
+ let n = e.presentation?.label ?? e.id, r = e.presentation?.shortcut ?? d(_ ? _(e.id) : e.keybinding), i = v ? c(v, e) : !0, s = v ? v.current().id : void 0, u = !i && s ? `${n}${r ? ` (${r})` : ""} — disabled in ${s} mode` : void 0;
99
+ return /* @__PURE__ */ o(t, {
100
+ icon: g(e),
101
+ label: n,
102
+ shortcut: r,
103
+ active: a.active === e.id,
104
+ tabbable: e.id === w,
105
+ ariaDisabled: !i,
106
+ className: i ? void 0 : l.ineligibleBtn,
107
+ title: u,
108
+ onClick: i ? () => a.setActive(e.id) : () => {}
109
+ }, e.id);
110
+ })
111
+ })] }, e))
112
+ });
113
+ }
114
+ //#endregion
115
+ export { d as n, u as r, _ as t };
116
+
117
+ //# sourceMappingURL=ToolPalette-C8V-I-uX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolPalette-C8V-I-uX.js","names":[],"sources":["../../src/components/ToolPalette/ToolPalette.module.css","../../src/components/ToolPalette/formatShortcut.ts","../../src/components/ToolPalette/ToolPalette.tsx"],"sourcesContent":[".palette {\n display: flex;\n flex-direction: column;\n gap: 4px;\n background: var(--wzl-panel-bg);\n border: 1px solid var(--wzl-panel-border);\n border-radius: 4px;\n padding: 4px;\n user-select: none;\n}\n.palette.horizontal {\n flex-direction: row;\n}\n\n/* Applied to ineligible tool buttons in the active mode. */\n.ineligibleBtn {\n opacity: 0.35;\n cursor: not-allowed;\n}\n\n.separator {\n background: var(--wzl-panel-border);\n}\n.palette:not(.horizontal) .separator {\n height: 1px;\n margin: 2px 0;\n}\n.palette.horizontal .separator {\n width: 1px;\n margin: 0 2px;\n}\n","import { keyGlyph } from '../Keycaps/keyGlyph';\n\nexport interface ShortcutInput {\n key: string | readonly string[];\n mod?: boolean;\n alt?: boolean;\n shift?: boolean | 'optional';\n}\n\n/** Format a shortcut as an array of display chips, one per key — modifier\n * icons (⌘, ↑, ⌥) followed by the key glyph. UIs that want a boxed\n * per-key look render each chip in its own element. `shift: 'optional'` is\n * treated as falsy. */\nexport function formatShortcutParts(b: ShortcutInput | undefined): readonly string[] | undefined {\n if (!b) return undefined;\n const rawKey = Array.isArray(b.key) ? b.key[0] : (b.key as string);\n const parts: string[] = [];\n if (b.mod) parts.push('⌘');\n if (b.shift === true) parts.push('⇧');\n if (b.alt) parts.push('⌥');\n parts.push(keyGlyph(rawKey));\n return parts;\n}\n\n/** Format a shortcut as a single display string. Order: mod, shift, alt,\n * key. Returns `undefined` for `undefined` input so callers can `??` a\n * fallback. When `key` is an array, the first element is used. `shift: 'optional'`\n * is treated as falsy. */\nexport function formatShortcut(b: ShortcutInput | undefined): string | undefined {\n const parts = formatShortcutParts(b);\n return parts ? parts.join('') : undefined;\n}\n","import { Fragment, useRef, type ReactNode } from 'react';\nimport { UnknownIcon } from '@weasel-js/core';\nimport type { AnyTool, ToolsApi } from '@weasel-js/core';\nimport { eligibleTool, type ModeRegistry } from '@weasel-js/modes';\nimport { ToolButton } from '../ToolButton';\nimport { ToolGroup } from '../ToolGroup';\nimport s from './ToolPalette.module.css';\nimport { formatShortcut, type ShortcutInput } from './formatShortcut';\n\nconst DEFAULT_GROUP_ORDER = ['select', 'shape', 'draw', 'type', 'view'] as const;\nconst MISC = 'misc';\n\nfunction partitionByGroup(list: AnyTool[]): Map<string, AnyTool[]> {\n const groups = new Map<string, AnyTool[]>();\n for (const tool of list) {\n const g = tool.presentation?.group ?? MISC;\n const bucket = groups.get(g) ?? [];\n bucket.push(tool);\n groups.set(g, bucket);\n }\n return groups;\n}\n\nfunction orderedGroupKeys(\n groups: Map<string, AnyTool[]>,\n groupOrder: readonly string[],\n): string[] {\n const seen = new Set(groups.keys());\n const ordered: string[] = [];\n for (const known of groupOrder) {\n if (seen.has(known)) {\n ordered.push(known);\n seen.delete(known);\n }\n }\n // Unknown groups in insertion order (Map preserves it), misc last.\n for (const key of groups.keys()) {\n if (seen.has(key) && key !== MISC) {\n ordered.push(key);\n seen.delete(key);\n }\n }\n if (seen.has(MISC)) ordered.push(MISC);\n return ordered;\n}\n\nfunction resolveIcon(tool: AnyTool): ReactNode {\n const rawIcon = tool.presentation?.icon;\n if (rawIcon == null) return <UnknownIcon />;\n if (typeof rawIcon === 'function') return rawIcon(undefined);\n return rawIcon;\n}\n\nexport interface ToolPaletteProps {\n tools: ToolsApi;\n orientation?: 'vertical' | 'horizontal';\n className?: string;\n /** Derive the keyboard shortcut for a tool button from the action registry.\n * Called with the tool's id; return `undefined` to suppress a chip. When\n * omitted, falls back to `tool.keybinding` (legacy path). */\n lookupShortcut?: (toolId: string) => ShortcutInput | undefined;\n /**\n * Optional mode registry. When provided, tools whose `capabilities` do not\n * match the current mode are rendered greyed-out, aria-disabled, and their\n * onClick is suppressed. When omitted, all tools are treated as eligible\n * (preserves existing behaviour in consumers that haven't wired a registry).\n */\n modeRegistry?: ModeRegistry;\n /**\n * Presentation-group display order. Groups not listed keep their registry\n * insertion order after the listed ones; `misc` always renders last.\n * Defaults to `['select', 'shape', 'draw', 'type', 'view']`.\n */\n groupOrder?: readonly string[];\n}\n\nexport function ToolPalette(props: ToolPaletteProps) {\n const {\n tools, orientation = 'vertical', className, lookupShortcut, modeRegistry,\n groupOrder = DEFAULT_GROUP_ORDER,\n } = props;\n const list = Object.values(tools.registry);\n const groups = partitionByGroup(list);\n const groupKeys = orderedGroupKeys(groups, groupOrder);\n const cls = [s.palette, orientation === 'horizontal' && s.horizontal, className]\n .filter(Boolean).join(' ');\n\n const orderedIds = groupKeys.flatMap((k) => groups.get(k)!.map((t) => t.id));\n const tabbableId = tools.active && orderedIds.includes(tools.active)\n ? tools.active\n : orderedIds[0];\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n function onKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\n const target = e.target as HTMLElement;\n if (target.tagName !== 'BUTTON') return;\n const root = rootRef.current;\n if (!root) return;\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>('button'));\n const i = buttons.indexOf(target as HTMLButtonElement);\n if (i < 0) return;\n\n let next = -1;\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n next = (i + 1) % buttons.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n next = (i - 1 + buttons.length) % buttons.length;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = buttons.length - 1;\n break;\n }\n if (next >= 0) {\n e.preventDefault();\n buttons[next].focus();\n }\n }\n\n return (\n <div\n ref={rootRef}\n className={cls}\n role=\"toolbar\"\n aria-label=\"Tools\"\n onKeyDown={onKeyDown}\n >\n {groupKeys.map((key, i) => (\n <Fragment key={key}>\n {i > 0 && (\n <div\n className={s.separator}\n role=\"separator\"\n aria-orientation={orientation === 'horizontal' ? 'vertical' : 'horizontal'}\n />\n )}\n <ToolGroup orientation={orientation} groupKey={key}>\n {groups.get(key)!.map((tool) => {\n const label = tool.presentation?.label ?? tool.id;\n const shortcut = tool.presentation?.shortcut\n ?? formatShortcut(lookupShortcut ? lookupShortcut(tool.id) : tool.keybinding);\n const enabled = modeRegistry ? eligibleTool(modeRegistry, tool) : true;\n const modeName = modeRegistry ? modeRegistry.current().id : undefined;\n const resolvedTitle = !enabled && modeName\n ? `${label}${shortcut ? ` (${shortcut})` : ''} — disabled in ${modeName} mode`\n : undefined;\n return (\n <ToolButton\n key={tool.id}\n icon={resolveIcon(tool)}\n label={label}\n shortcut={shortcut}\n active={tools.active === tool.id}\n tabbable={tool.id === tabbableId}\n ariaDisabled={!enabled}\n className={!enabled ? s.ineligibleBtn : undefined}\n title={resolvedTitle}\n onClick={enabled ? () => tools.setActive(tool.id) : () => {}}\n />\n );\n })}\n </ToolGroup>\n </Fragment>\n ))}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { OverlayArrow as e, Tooltip as t, TooltipTrigger as n } from "react-aria-components";
2
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ var a = {
4
+ tooltip: "_tooltip_1km1f_1",
5
+ arrow: "_arrow_1km1f_22"
6
+ };
7
+ //#endregion
8
+ //#region src/components/Tooltip/Tooltip.tsx
9
+ function o(e) {
10
+ let { delay: t = 600, closeDelay: i = 0, ...a } = e;
11
+ return /* @__PURE__ */ r(n, {
12
+ delay: t,
13
+ closeDelay: i,
14
+ ...a
15
+ });
16
+ }
17
+ function s(n) {
18
+ let { children: o, className: s, placement: c = "top", offset: l = 8, ...u } = n;
19
+ return /* @__PURE__ */ i(t, {
20
+ ...u,
21
+ placement: c,
22
+ offset: l,
23
+ className: [a.tooltip, s].filter(Boolean).join(" "),
24
+ children: [/* @__PURE__ */ r(e, {
25
+ className: a.arrow,
26
+ children: /* @__PURE__ */ r("svg", {
27
+ width: 8,
28
+ height: 8,
29
+ viewBox: "0 0 8 8",
30
+ "aria-hidden": "true",
31
+ children: /* @__PURE__ */ r("path", { d: "M0 0 L4 4 L8 0" })
32
+ })
33
+ }), o]
34
+ });
35
+ }
36
+ //#endregion
37
+ export { o as n, s as t };
38
+
39
+ //# sourceMappingURL=Tooltip-Clgn4trm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip-Clgn4trm.js","names":[],"sources":["../../src/components/Tooltip/Tooltip.module.css","../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":[".tooltip {\n /* Above Dialog overlay (1000) and ToastRegion (1100) — RAC sets no z-index. */\n z-index: 1200;\n background: var(--wzl-surface);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n font-size: 12px;\n line-height: 1.3;\n padding: 4px 8px;\n max-width: 260px;\n transition: opacity var(--wzl-motion-fast);\n}\n\n.tooltip[data-entering],\n.tooltip[data-exiting] {\n opacity: 0;\n}\n\n.arrow svg {\n display: block;\n fill: var(--wzl-surface);\n stroke: var(--wzl-border);\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","import type { ReactNode } from 'react';\nimport {\n TooltipTrigger as RACTooltipTrigger,\n Tooltip as RACTooltip,\n OverlayArrow,\n type TooltipProps as RACTooltipProps,\n type TooltipTriggerComponentProps,\n} from 'react-aria-components';\nimport s from './Tooltip.module.css';\n\nexport type TooltipTriggerProps = TooltipTriggerComponentProps;\n\n/**\n * TooltipTrigger with kit defaults: ~600 ms open delay, instant close.\n * Wrap a focusable trigger plus a `<Tooltip>`. Non-RAC triggers (plain\n * `<button>` etc.) must be wrapped in `<Focusable>` from\n * react-aria-components so hover/focus props reach the DOM node.\n *\n * Caveat: while a tooltip is open, react-aria captures the first Escape\n * keydown (document-level, capture phase) to dismiss it — app-level\n * Escape handlers (deselect, cancel gesture) see only the second press.\n */\nexport function TooltipTrigger(props: TooltipTriggerProps) {\n const { delay = 600, closeDelay = 0, ...rest } = props;\n return <RACTooltipTrigger delay={delay} closeDelay={closeDelay} {...rest} />;\n}\n\nexport type TooltipProps = Omit<RACTooltipProps, 'children' | 'className'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Tooltip bubble with an arrow pointing at the trigger. Non-interactive\n * content only (ARIA tooltip semantics). Use inside `<TooltipTrigger>`.\n */\nexport function Tooltip(props: TooltipProps) {\n const { children, className, placement = 'top', offset = 8, ...rest } = props;\n return (\n <RACTooltip\n {...rest}\n placement={placement}\n offset={offset}\n className={[s.tooltip, className].filter(Boolean).join(' ')}\n >\n <OverlayArrow className={s.arrow}>\n <svg width={8} height={8} viewBox=\"0 0 8 8\" aria-hidden=\"true\">\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n </OverlayArrow>\n {children}\n </RACTooltip>\n );\n}\n"],"mappings":";;;;;;;;ACsBA,SAAgB,EAAe,GAA4B;CACzD,IAAM,EAAE,WAAQ,KAAK,gBAAa,GAAG,GAAG,MAAS;CACjD,OAAO,kBAAC,GAAD;EAA0B;EAAmB;EAAY,GAAI;EAAQ,CAAA;;AAY9E,SAAgB,EAAQ,GAAqB;CAC3C,IAAM,EAAE,aAAU,cAAW,eAAY,OAAO,YAAS,GAAG,GAAG,MAAS;CACxE,OACE,kBAAC,GAAD;EACE,GAAI;EACO;EACH;EACR,WAAW,CAAC,EAAE,SAAS,EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;YAJ7D,CAME,kBAAC,GAAD;GAAc,WAAW,EAAE;aACzB,kBAAC,OAAD;IAAK,OAAO;IAAG,QAAQ;IAAG,SAAQ;IAAU,eAAY;cACtD,kBAAC,QAAD,EAAM,GAAE,kBAAmB,CAAA;IACvB,CAAA;GACO,CAAA,EACd,EACU"}
@@ -0,0 +1,22 @@
1
+ //#region src/components/Keycaps/keyGlyph.ts
2
+ function e(e) {
3
+ switch (e) {
4
+ case "Escape": return "⎋";
5
+ case "Backspace": return "⌫";
6
+ case "Delete": return "⌦";
7
+ case "ArrowUp": return "↑";
8
+ case "ArrowDown": return "↓";
9
+ case "ArrowLeft": return "←";
10
+ case "ArrowRight": return "→";
11
+ case "Enter":
12
+ case "Return": return "↵";
13
+ case "Tab": return "⇥";
14
+ case " ":
15
+ case "Space": return "␣";
16
+ default: return e.toUpperCase();
17
+ }
18
+ }
19
+ //#endregion
20
+ export { e as t };
21
+
22
+ //# sourceMappingURL=keyGlyph-BDH5fqkO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyGlyph-BDH5fqkO.js","names":[],"sources":["../../src/components/Keycaps/keyGlyph.ts"],"sourcesContent":["/** Apple-style glyph for a DOM `KeyboardEvent.key` value. Covers escape,\n * delete/backspace, arrows, enter/return, tab, space. Unknown keys are\n * upper-cased (so `'a'` reads as `A` on a keycap) and returned unchanged\n * otherwise — making this safe to apply uniformly without a `has-glyph`\n * check at the call site. */\nexport function keyGlyph(rawKey: string): string {\n switch (rawKey) {\n case 'Escape': return '⎋';\n case 'Backspace': return '⌫';\n case 'Delete': return '⌦';\n case 'ArrowUp': return '↑';\n case 'ArrowDown': return '↓';\n case 'ArrowLeft': return '←';\n case 'ArrowRight': return '→';\n case 'Enter':\n case 'Return': return '↵';\n case 'Tab': return '⇥';\n case ' ':\n case 'Space': return '␣';\n default: return rawKey.toUpperCase();\n }\n}\n"],"mappings":";AAKA,SAAgB,EAAS,GAAwB;CAC/C,QAAQ,GAAR;EACE,KAAK,UAAU,OAAO;EACtB,KAAK,aAAa,OAAO;EACzB,KAAK,UAAU,OAAO;EACtB,KAAK,WAAW,OAAO;EACvB,KAAK,aAAa,OAAO;EACzB,KAAK,aAAa,OAAO;EACzB,KAAK,cAAc,OAAO;EAC1B,KAAK;EACL,KAAK,UAAU,OAAO;EACtB,KAAK,OAAO,OAAO;EACnB,KAAK;EACL,KAAK,SAAS,OAAO;EACrB,SAAS,OAAO,EAAO,aAAa"}
@@ -0,0 +1,14 @@
1
+ export type ChromaCurve = {
2
+ lRange: [number, number];
3
+ midL: number;
4
+ cBot: number;
5
+ cPeak: number;
6
+ cTop: number;
7
+ };
8
+ export type ChromaCurvePoint = {
9
+ L: number;
10
+ C: number;
11
+ };
12
+ export declare function oklchToHex(L: number, C: number, Hdeg: number): string;
13
+ export declare function chromaAt(L: number, curve: ChromaCurve): number;
14
+ //# sourceMappingURL=oklch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oklch.d.ts","sourceRoot":"","sources":["../../src/color/oklch.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAM9D"}
@@ -0,0 +1,36 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface ActionBarProps {
3
+ /** Group key — only actions with `action.group === group` are rendered. */
4
+ group: string;
5
+ /** Layout direction. Defaults to `'horizontal'`. */
6
+ orientation?: 'horizontal' | 'vertical';
7
+ /**
8
+ * Per-id icon overrides — keyed by `action.id`. When an entry is provided
9
+ * it replaces the action's own `icon` for this bar only. Mirrors
10
+ * `PathfinderPanelProps.icons` so call sites that ship custom glyph sets
11
+ * can swap them in without re-registering actions.
12
+ */
13
+ icons?: Record<string, ReactNode>;
14
+ /**
15
+ * Per-id label overrides — keyed by `action.id`. Drives both `aria-label`
16
+ * and `title`. When omitted, the action's own `label` is used.
17
+ */
18
+ labels?: Record<string, string>;
19
+ /** Additional class for the toolbar root. */
20
+ className?: string;
21
+ }
22
+ /**
23
+ * Generic group-keyed action toolbar. Reads the parent `ActionsRegistry`,
24
+ * filters to actions whose `group` matches `props.group`, and renders one
25
+ * icon button per match. Disabled state is derived from each action's
26
+ * `enabled` predicate via `evaluateEnabled` (so the button greys out and
27
+ * swallows clicks while the keybinding — if any — still fires through the
28
+ * registry's keydown listener; that's the registry's contract, not ours).
29
+ *
30
+ * Visual parity with the WeaselDraw `<PathfinderPanel>` is intentional;
31
+ * this is the generic, registry-driven version. No keyboard navigation
32
+ * (roving tabindex) yet — bar consumers today are short flat strips. Add
33
+ * if/when a long bar lands.
34
+ */
35
+ export declare function ActionBar(props: ActionBarProps): import("react/jsx-runtime").JSX.Element;
36
+ //# sourceMappingURL=ActionBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../../src/components/ActionBar/ActionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAc7D,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAkE9C"}
@@ -0,0 +1,3 @@
1
+ export { ActionBar } from './ActionBar';
2
+ export type { ActionBarProps } from './ActionBar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ActionBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { t as e } from "../../chunks/ActionBar-CiKvEvXi.js";
2
+ export { e as ActionBar };
@@ -0,0 +1,20 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ export type ActionsBarItem<V extends string | number = string> = {
3
+ value: V;
4
+ label?: ReactNode;
5
+ ariaLabel?: string;
6
+ disabled?: boolean;
7
+ onAction: () => void;
8
+ };
9
+ export type ActionsBarSize = 'sm' | 'md';
10
+ export type ActionsBarVariant = 'default' | 'minimal';
11
+ export type ActionsBarProps<V extends string | number = string> = {
12
+ items: readonly ActionsBarItem<V>[];
13
+ ariaLabel?: string;
14
+ className?: string;
15
+ height?: number;
16
+ size?: ActionsBarSize;
17
+ variant?: ActionsBarVariant;
18
+ };
19
+ export declare function ActionsBar<V extends string | number = string>(props: ActionsBarProps<V>): ReactElement;
20
+ //# sourceMappingURL=ActionsBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsBar.d.ts","sourceRoot":"","sources":["../../../src/components/ActionsBar/ActionsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhI,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAChE,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AA8BF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAoFtG"}
@@ -0,0 +1,3 @@
1
+ export { ActionsBar } from './ActionsBar';
2
+ export type { ActionsBarItem, ActionsBarProps, ActionsBarSize, ActionsBarVariant } from './ActionsBar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ActionsBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { t as e } from "../../chunks/ActionsBar-CzU6Of3B.js";
2
+ export { e as ActionsBar };
@@ -0,0 +1,50 @@
1
+ import { type ReactNode, type CSSProperties } from 'react';
2
+ import { type BadgeShapeParams } from './shapes';
3
+ import { type BadgeBase, type BadgeBaseParams } from './bases';
4
+ import { type EffectSpec } from './effects';
5
+ import type { BadgeShape, BadgeTone, BadgeVariant, BadgeSize } from './types';
6
+ interface BadgeBaseProps {
7
+ tone?: BadgeTone;
8
+ variant?: BadgeVariant;
9
+ size?: BadgeSize;
10
+ /** "Edge bloat": offset every base perimeter sample outward by N CSS px along the normal
11
+ * before any compose effects run. Negative values shrink the silhouette. Photoshop-style
12
+ * expand-selection on the body. */
13
+ bloat?: number;
14
+ padding?: number | string;
15
+ /**
16
+ * For CSS-rendered shapes (pill, plain) that fragment across line wraps, controls how the
17
+ * background/border behaves at each break.
18
+ * - `'slice'` (default): decoration is severed at the break (looks like one continuous badge cut by the line).
19
+ * - `'clone'`: each fragment paints its own complete decoration (looks like two separate badges).
20
+ */
21
+ breakStyle?: 'slice' | 'clone';
22
+ /** When set, perimeter-pattern shapes (beavis, cloud, postage, scalloped) continuously shift their pattern. */
23
+ crawl?: boolean | number;
24
+ /** Compose-mode: base shape underneath the badge content. When set, overrides the `shape` prop. */
25
+ base?: BadgeBase;
26
+ baseParams?: BadgeBaseParams[BadgeBase];
27
+ /** Compose-mode: layered effects applied around / over the base. */
28
+ effects?: EffectSpec[];
29
+ onClick?: () => void;
30
+ onRemove?: () => void;
31
+ removeLabel?: string;
32
+ href?: string;
33
+ as?: 'span' | 'button' | 'a';
34
+ children: ReactNode;
35
+ className?: string;
36
+ /** Optional style overrides merged with the badge's own style. Useful for setting CSS
37
+ * custom properties (e.g. `--badge-edge` to inject a custom tone color). */
38
+ style?: CSSProperties;
39
+ 'aria-label'?: string;
40
+ }
41
+ type BadgePropsByShape = {
42
+ [S in BadgeShape]: BadgeBaseProps & {
43
+ shape?: S;
44
+ shapeParams?: BadgeShapeParams[S];
45
+ };
46
+ }[BadgeShape];
47
+ export type BadgeProps = BadgePropsByShape;
48
+ export declare function Badge(props: BadgeProps): import("react/jsx-runtime").JSX.Element;
49
+ export {};
50
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAEhH,OAAO,EAAU,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAW,KAAK,UAAU,EAAoB,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE9E,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;wCAEoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/B,+GAA+G;IAC/G,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,mGAAmG;IACnG,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,oEAAoE;IACpE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;iFAC6E;IAC7E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,iBAAiB,GAAG;KACtB,CAAC,IAAI,UAAU,GAAG,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAAE;CACrF,CAAC,UAAU,CAAC,CAAC;AAEd,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAS3C,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,2CAqQtC"}
@@ -0,0 +1,8 @@
1
+ import type { BaseModule } from './types';
2
+ export interface ChamferedRectParams {
3
+ /** CSS px length of each 45° corner chamfer. */
4
+ chamfer?: number;
5
+ }
6
+ declare const ChamferedRect: BaseModule<ChamferedRectParams>;
7
+ export default ChamferedRect;
8
+ //# sourceMappingURL=ChamferedRect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChamferedRect.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/bases/ChamferedRect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA+B,MAAM,SAAS,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,QAAA,MAAM,aAAa,EAAE,UAAU,CAAC,mBAAmB,CAmElD,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { BaseModule } from './types';
2
+ /**
3
+ * Symmetric polar NURBS base. Same anchor concept as `octant-spline` but the curve is an
4
+ * **approximating** cubic NURBS — the control points pull the curve without sitting on it.
5
+ * Each anchor's weight increases the local pull toward that control point.
6
+ *
7
+ * Endpoint behaviour: the curve uses mirror-phantom control points just outside [0, 1]
8
+ * derived from the second-from-end anchors, which enforces zero slope at s=0 and s=1 so
9
+ * the reflected/rotated full silhouette closes cleanly across the symmetry axes.
10
+ */
11
+ export interface OctantBSplineParams {
12
+ mode?: 'octant' | 'quadrant';
13
+ count?: number;
14
+ s0?: number;
15
+ s1?: number;
16
+ s2?: number;
17
+ s3?: number;
18
+ s4?: number;
19
+ s5?: number;
20
+ s6?: number;
21
+ s7?: number;
22
+ s8?: number;
23
+ s9?: number;
24
+ s10?: number;
25
+ s11?: number;
26
+ r0?: number;
27
+ r1?: number;
28
+ r2?: number;
29
+ r3?: number;
30
+ r4?: number;
31
+ r5?: number;
32
+ r6?: number;
33
+ r7?: number;
34
+ r8?: number;
35
+ r9?: number;
36
+ r10?: number;
37
+ r11?: number;
38
+ w0?: number;
39
+ w1?: number;
40
+ w2?: number;
41
+ w3?: number;
42
+ w4?: number;
43
+ w5?: number;
44
+ w6?: number;
45
+ w7?: number;
46
+ w8?: number;
47
+ w9?: number;
48
+ w10?: number;
49
+ w11?: number;
50
+ rotation?: number;
51
+ samples?: number;
52
+ }
53
+ export declare const OCTANT_BSPLINE_MAX_ANCHORS = 12;
54
+ interface Anchor {
55
+ s: number;
56
+ r: number;
57
+ w: number;
58
+ }
59
+ export declare function extractAnchorPairs(params?: OctantBSplineParams): Anchor[];
60
+ interface CompiledNurbs {
61
+ extended: Anchor[];
62
+ knots: number[];
63
+ degree: number;
64
+ }
65
+ export declare function compileNurbs(anchors: Anchor[]): CompiledNurbs;
66
+ /** Invert S(u) = s by bisection. The NURBS is monotonic in s because the underlying knot
67
+ * vector and control sequence are monotonic, so bisection converges quickly. */
68
+ export declare function evalNurbsAtS(s: number, nurbs: CompiledNurbs): number;
69
+ declare const OctantBSpline: BaseModule<OctantBSplineParams>;
70
+ export default OctantBSpline;
71
+ //# sourceMappingURL=OctantBSpline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OctantBSpline.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/bases/OctantBSpline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAe7C,UAAU,MAAM;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAEpD,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAsB7E;AAwED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa,CAK7D;AAqBD;iFACiF;AACjF,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAWpE;AAED,QAAA,MAAM,aAAa,EAAE,UAAU,CAAC,mBAAmB,CA2BlD,CAAC;AAEF,eAAe,aAAa,CAAC"}