@weasel-js/ui 1.2.0 → 1.3.0-pre.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 (227) hide show
  1. package/dist/chunks/{ActionBar-BvPEd_GW.js → ActionBar-BTev_ZZl.js} +21 -21
  2. package/dist/chunks/ActionBar-BTev_ZZl.js.map +1 -0
  3. package/dist/chunks/{ActionsBar-9aR5N3lU.js → ActionsBar-gTuCtkv8.js} +4 -4
  4. package/dist/chunks/{ActionsBar-9aR5N3lU.js.map → ActionsBar-gTuCtkv8.js.map} +1 -1
  5. package/dist/chunks/{Badge-dQzbkk-C.js → Badge-9dPfvYOk.js} +672 -670
  6. package/dist/chunks/Badge-9dPfvYOk.js.map +1 -0
  7. package/dist/chunks/{BandEditor-D3i6l299.js → BandEditor-DKbcHG2_.js} +46 -46
  8. package/dist/chunks/BandEditor-DKbcHG2_.js.map +1 -0
  9. package/dist/chunks/{Button-9QNIYugK.js → Button-CIu40Epu.js} +28 -28
  10. package/dist/chunks/Button-CIu40Epu.js.map +1 -0
  11. package/dist/chunks/{Callout-cJHJ4kIN.js → Callout-CHs98djt.js} +35 -35
  12. package/dist/chunks/Callout-CHs98djt.js.map +1 -0
  13. package/dist/chunks/Checkbox-BLEw-wEb.js +47 -0
  14. package/dist/chunks/Checkbox-BLEw-wEb.js.map +1 -0
  15. package/dist/chunks/ColorField-D1t-BdSa.js +60 -0
  16. package/dist/chunks/ColorField-D1t-BdSa.js.map +1 -0
  17. package/dist/chunks/{ComboBox-ONQISwtI.js → ComboBox-cvdKolWv.js} +28 -28
  18. package/dist/chunks/ComboBox-cvdKolWv.js.map +1 -0
  19. package/dist/chunks/{CurveEditor-SmwwvrsA.js → CurveEditor-BaA-PabB.js} +116 -116
  20. package/dist/chunks/{CurveEditor-SmwwvrsA.js.map → CurveEditor-BaA-PabB.js.map} +1 -1
  21. package/dist/chunks/DataGrid-D15I779H.js +210 -0
  22. package/dist/chunks/DataGrid-D15I779H.js.map +1 -0
  23. package/dist/chunks/Dialog-DC1x46Sq.js +59 -0
  24. package/dist/chunks/Dialog-DC1x46Sq.js.map +1 -0
  25. package/dist/chunks/{Field-VQwmrIna.js → Field-BjFl_yng.js} +6 -6
  26. package/dist/chunks/Field-BjFl_yng.js.map +1 -0
  27. package/dist/chunks/GradientEditor-BJRD0n1g.js +308 -0
  28. package/dist/chunks/GradientEditor-BJRD0n1g.js.map +1 -0
  29. package/dist/chunks/InlineRange-C6UYKxLD.js +24 -0
  30. package/dist/chunks/InlineRange-C6UYKxLD.js.map +1 -0
  31. package/dist/chunks/Input-DhWBgpRx.js +55 -0
  32. package/dist/chunks/Input-DhWBgpRx.js.map +1 -0
  33. package/dist/chunks/{Keycaps-CFX7UAj8.js → Keycaps-BhCKdyws.js} +15 -15
  34. package/dist/chunks/Keycaps-BhCKdyws.js.map +1 -0
  35. package/dist/chunks/NumberField-ZdVa4bpJ.js +59 -0
  36. package/dist/chunks/NumberField-ZdVa4bpJ.js.map +1 -0
  37. package/dist/chunks/{OptionsBar-CHvH4n4u.js → OptionsBar-DahCI4Aq.js} +4 -4
  38. package/dist/chunks/{OptionsBar-CHvH4n4u.js.map → OptionsBar-DahCI4Aq.js.map} +1 -1
  39. package/dist/chunks/PaintInput-Cggm9OIl.js +205 -0
  40. package/dist/chunks/PaintInput-Cggm9OIl.js.map +1 -0
  41. package/dist/chunks/PatternPicker-B63SlDoF.js +93 -0
  42. package/dist/chunks/PatternPicker-B63SlDoF.js.map +1 -0
  43. package/dist/chunks/{Plot2D-CEnhzodm.js → Plot2D-sPXTw_-l.js} +27 -27
  44. package/dist/chunks/{Plot2D-CEnhzodm.js.map → Plot2D-sPXTw_-l.js.map} +1 -1
  45. package/dist/chunks/{PointPlotter-BUIse9c4.js → PointPlotter-CLd9u5Bq.js} +2 -2
  46. package/dist/chunks/{PointPlotter-BUIse9c4.js.map → PointPlotter-CLd9u5Bq.js.map} +1 -1
  47. package/dist/chunks/{Powerline-BYWdK8QH.js → Powerline-DhQJYaUg.js} +2 -2
  48. package/dist/chunks/{Powerline-BYWdK8QH.js.map → Powerline-DhQJYaUg.js.map} +1 -1
  49. package/dist/chunks/Prefs-BSJ0lMmJ.js +300 -0
  50. package/dist/chunks/Prefs-BSJ0lMmJ.js.map +1 -0
  51. package/dist/chunks/RadioGroup-vtwjRiUm.js +49 -0
  52. package/dist/chunks/RadioGroup-vtwjRiUm.js.map +1 -0
  53. package/dist/chunks/RangeSlider-B-n_7AgJ.js +52 -0
  54. package/dist/chunks/RangeSlider-B-n_7AgJ.js.map +1 -0
  55. package/dist/chunks/{ResizeHandle-BOpmtOOj.js → ResizeHandle--ZExnMfa.js} +8 -8
  56. package/dist/chunks/{ResizeHandle-BOpmtOOj.js.map → ResizeHandle--ZExnMfa.js.map} +1 -1
  57. package/dist/chunks/{Select-CHsuQCp0.js → Select--BVTi-j0.js} +32 -32
  58. package/dist/chunks/Select--BVTi-j0.js.map +1 -0
  59. package/dist/chunks/SelectionPanel-C7kygTFE.js +446 -0
  60. package/dist/chunks/SelectionPanel-C7kygTFE.js.map +1 -0
  61. package/dist/chunks/{Sidebar-DP_nyJze.js → Sidebar-CtwBdr4n.js} +1 -1
  62. package/dist/chunks/{Sidebar-DP_nyJze.js.map → Sidebar-CtwBdr4n.js.map} +1 -1
  63. package/dist/chunks/SidebarPanel-AeSc7wNR.js +59 -0
  64. package/dist/chunks/SidebarPanel-AeSc7wNR.js.map +1 -0
  65. package/dist/chunks/{Slider-tGbqoAZH.js → Slider-cxWR47gi.js} +39 -39
  66. package/dist/chunks/Slider-cxWR47gi.js.map +1 -0
  67. package/dist/chunks/{StatusBar-DBO0E0Yd.js → StatusBar-D_wu-SZh.js} +6 -6
  68. package/dist/chunks/StatusBar-D_wu-SZh.js.map +1 -0
  69. package/dist/chunks/Switch-CtZwp5zm.js +27 -0
  70. package/dist/chunks/Switch-CtZwp5zm.js.map +1 -0
  71. package/dist/chunks/Tabs-lB0IB4TX.js +41 -0
  72. package/dist/chunks/Tabs-lB0IB4TX.js.map +1 -0
  73. package/dist/chunks/{Toast-DFw4IrD_.js → Toast-hr9BYsho.js} +31 -31
  74. package/dist/chunks/{Toast-DFw4IrD_.js.map → Toast-hr9BYsho.js.map} +1 -1
  75. package/dist/chunks/{ToggleBar-BP1zFcvg.js → ToggleBar-BxgWq-wO.js} +11 -10
  76. package/dist/chunks/ToggleBar-BxgWq-wO.js.map +1 -0
  77. package/dist/chunks/{ToolButton-ClPz5L6j.js → ToolButton-CJrPjbsj.js} +16 -16
  78. package/dist/chunks/ToolButton-CJrPjbsj.js.map +1 -0
  79. package/dist/chunks/{ToolGroup-BTIwd4U4.js → ToolGroup-D_lDzkvU.js} +1 -1
  80. package/dist/chunks/{ToolGroup-BTIwd4U4.js.map → ToolGroup-D_lDzkvU.js.map} +1 -1
  81. package/dist/chunks/{ToolOptionsBar-JvmY7iNe.js → ToolOptionsBar-BA6Sb3U2.js} +4 -4
  82. package/dist/chunks/ToolOptionsBar-BA6Sb3U2.js.map +1 -0
  83. package/dist/chunks/{ToolPalette-DAiVhdtV.js → ToolPalette-TMvkaJwr.js} +24 -24
  84. package/dist/chunks/ToolPalette-TMvkaJwr.js.map +1 -0
  85. package/dist/chunks/Tooltip-Di7vxbFa.js +40 -0
  86. package/dist/chunks/Tooltip-Di7vxbFa.js.map +1 -0
  87. package/dist/chunks/{keyGlyph-BDH5fqkO.js → keyGlyph-DNpLxF8u.js} +1 -1
  88. package/dist/chunks/{keyGlyph-BDH5fqkO.js.map → keyGlyph-DNpLxF8u.js.map} +1 -1
  89. package/dist/chunks/segmentedControl.module-D4b7x19O.js +11 -0
  90. package/dist/chunks/segmentedControl.module-D4b7x19O.js.map +1 -0
  91. package/dist/chunks/{useRovingTabIndex-DBZtq4IH.js → useRovingTabIndex-CQz8EiKh.js} +1 -1
  92. package/dist/chunks/{useRovingTabIndex-DBZtq4IH.js.map → useRovingTabIndex-CQz8EiKh.js.map} +1 -1
  93. package/dist/components/ActionBar/index.js +1 -1
  94. package/dist/components/ActionsBar/index.js +1 -1
  95. package/dist/components/Badge/Badge.d.ts.map +1 -1
  96. package/dist/components/Badge/index.js +1 -1
  97. package/dist/components/BandEditor/index.js +1 -1
  98. package/dist/components/Button/index.js +1 -1
  99. package/dist/components/Callout/index.js +1 -1
  100. package/dist/components/Checkbox/Checkbox.d.ts +1 -1
  101. package/dist/components/Checkbox/index.js +1 -1
  102. package/dist/components/ColorField/ColorField.d.ts.map +1 -1
  103. package/dist/components/ColorField/index.js +1 -1
  104. package/dist/components/ComboBox/index.js +1 -1
  105. package/dist/components/CurveEditor/index.js +1 -1
  106. package/dist/components/DataGrid/index.js +1 -1
  107. package/dist/components/Dialog/index.js +1 -1
  108. package/dist/components/Field/index.js +1 -1
  109. package/dist/components/GradientEditor/SceneGradientHandles.d.ts +41 -0
  110. package/dist/components/GradientEditor/SceneGradientHandles.d.ts.map +1 -0
  111. package/dist/components/GradientEditor/index.d.ts +1 -0
  112. package/dist/components/GradientEditor/index.d.ts.map +1 -1
  113. package/dist/components/GradientEditor/index.js +2 -2
  114. package/dist/components/InlineRange/InlineRange.d.ts +17 -0
  115. package/dist/components/InlineRange/InlineRange.d.ts.map +1 -0
  116. package/dist/components/InlineRange/index.d.ts +2 -0
  117. package/dist/components/InlineRange/index.d.ts.map +1 -0
  118. package/dist/components/InlineRange/index.js +2 -0
  119. package/dist/components/Input/Input.d.ts +1 -1
  120. package/dist/components/Input/index.js +1 -1
  121. package/dist/components/Keycaps/index.js +2 -2
  122. package/dist/components/NumberField/NumberField.d.ts +1 -1
  123. package/dist/components/NumberField/index.js +1 -1
  124. package/dist/components/OptionsBar/index.js +1 -1
  125. package/dist/components/PaintInput/PaintInput.d.ts +40 -0
  126. package/dist/components/PaintInput/PaintInput.d.ts.map +1 -0
  127. package/dist/components/PaintInput/index.d.ts +2 -0
  128. package/dist/components/PaintInput/index.d.ts.map +1 -0
  129. package/dist/components/PaintInput/index.js +2 -0
  130. package/dist/components/PatternPicker/PatternPicker.d.ts +31 -0
  131. package/dist/components/PatternPicker/PatternPicker.d.ts.map +1 -0
  132. package/dist/components/PatternPicker/index.d.ts +2 -0
  133. package/dist/components/PatternPicker/index.d.ts.map +1 -0
  134. package/dist/components/PatternPicker/index.js +2 -0
  135. package/dist/components/Plot2D/index.js +1 -1
  136. package/dist/components/PointPlotter/index.js +1 -1
  137. package/dist/components/Powerline/index.js +2 -2
  138. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  139. package/dist/components/Prefs/index.d.ts +1 -1
  140. package/dist/components/Prefs/index.d.ts.map +1 -1
  141. package/dist/components/Prefs/index.js +1 -1
  142. package/dist/components/Prefs/schema.d.ts +4 -92
  143. package/dist/components/Prefs/schema.d.ts.map +1 -1
  144. package/dist/components/RadioGroup/index.js +1 -1
  145. package/dist/components/RangeSlider/index.js +1 -1
  146. package/dist/components/ResizeHandle/index.js +1 -1
  147. package/dist/components/Select/index.js +1 -1
  148. package/dist/components/SelectionPanel/SelectionPanel.d.ts +32 -1
  149. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
  150. package/dist/components/SelectionPanel/index.js +1 -1
  151. package/dist/components/Sidebar/index.js +1 -1
  152. package/dist/components/SidebarPanel/index.js +1 -1
  153. package/dist/components/Slider/index.js +1 -1
  154. package/dist/components/StatusBar/index.js +1 -1
  155. package/dist/components/Switch/Switch.d.ts +1 -1
  156. package/dist/components/Switch/index.js +1 -1
  157. package/dist/components/Tabs/index.js +1 -1
  158. package/dist/components/Toast/index.js +1 -1
  159. package/dist/components/ToggleBar/ToggleBar.d.ts +1 -1
  160. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  161. package/dist/components/ToggleBar/index.js +1 -1
  162. package/dist/components/ToolButton/index.js +1 -1
  163. package/dist/components/ToolGroup/index.js +1 -1
  164. package/dist/components/ToolOptionsBar/index.js +1 -1
  165. package/dist/components/ToolPalette/index.js +1 -1
  166. package/dist/components/Tooltip/index.js +1 -1
  167. package/dist/components/paintValue.d.ts +8 -0
  168. package/dist/components/paintValue.d.ts.map +1 -0
  169. package/dist/icons/Icon.d.ts +17 -0
  170. package/dist/icons/Icon.d.ts.map +1 -0
  171. package/dist/icons/index.d.ts +50 -0
  172. package/dist/icons/index.d.ts.map +1 -0
  173. package/dist/icons/paths.d.ts +71 -0
  174. package/dist/icons/paths.d.ts.map +1 -0
  175. package/dist/index.d.ts +5 -0
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +184 -48
  178. package/dist/index.js.map +1 -1
  179. package/dist/style.css +1 -1
  180. package/package.json +4 -3
  181. package/dist/chunks/ActionBar-BvPEd_GW.js.map +0 -1
  182. package/dist/chunks/Badge-dQzbkk-C.js.map +0 -1
  183. package/dist/chunks/BandEditor-D3i6l299.js.map +0 -1
  184. package/dist/chunks/Button-9QNIYugK.js.map +0 -1
  185. package/dist/chunks/Callout-cJHJ4kIN.js.map +0 -1
  186. package/dist/chunks/Checkbox-KQ5L8APP.js +0 -47
  187. package/dist/chunks/Checkbox-KQ5L8APP.js.map +0 -1
  188. package/dist/chunks/ColorField-ykpiD3XU.js +0 -60
  189. package/dist/chunks/ColorField-ykpiD3XU.js.map +0 -1
  190. package/dist/chunks/ComboBox-ONQISwtI.js.map +0 -1
  191. package/dist/chunks/DataGrid-DZQ4Chbd.js +0 -210
  192. package/dist/chunks/DataGrid-DZQ4Chbd.js.map +0 -1
  193. package/dist/chunks/Dialog-CqwdJv_t.js +0 -59
  194. package/dist/chunks/Dialog-CqwdJv_t.js.map +0 -1
  195. package/dist/chunks/Field-VQwmrIna.js.map +0 -1
  196. package/dist/chunks/GradientEditor-Bg6SX64V.js +0 -280
  197. package/dist/chunks/GradientEditor-Bg6SX64V.js.map +0 -1
  198. package/dist/chunks/Input-DpkwYtUY.js +0 -55
  199. package/dist/chunks/Input-DpkwYtUY.js.map +0 -1
  200. package/dist/chunks/Keycaps-CFX7UAj8.js.map +0 -1
  201. package/dist/chunks/NumberField-BbzI0GtU.js +0 -59
  202. package/dist/chunks/NumberField-BbzI0GtU.js.map +0 -1
  203. package/dist/chunks/Prefs-BMR9wMiZ.js +0 -238
  204. package/dist/chunks/Prefs-BMR9wMiZ.js.map +0 -1
  205. package/dist/chunks/RadioGroup-CIpHr3g6.js +0 -49
  206. package/dist/chunks/RadioGroup-CIpHr3g6.js.map +0 -1
  207. package/dist/chunks/RangeSlider-CaDogGTj.js +0 -52
  208. package/dist/chunks/RangeSlider-CaDogGTj.js.map +0 -1
  209. package/dist/chunks/Select-CHsuQCp0.js.map +0 -1
  210. package/dist/chunks/SelectionPanel-D_wk_8ZN.js +0 -303
  211. package/dist/chunks/SelectionPanel-D_wk_8ZN.js.map +0 -1
  212. package/dist/chunks/SidebarPanel-BVTQ1ZyM.js +0 -59
  213. package/dist/chunks/SidebarPanel-BVTQ1ZyM.js.map +0 -1
  214. package/dist/chunks/Slider-tGbqoAZH.js.map +0 -1
  215. package/dist/chunks/StatusBar-DBO0E0Yd.js.map +0 -1
  216. package/dist/chunks/Switch-JyVSSAzC.js +0 -27
  217. package/dist/chunks/Switch-JyVSSAzC.js.map +0 -1
  218. package/dist/chunks/Tabs-Df0sDomx.js +0 -41
  219. package/dist/chunks/Tabs-Df0sDomx.js.map +0 -1
  220. package/dist/chunks/ToggleBar-BP1zFcvg.js.map +0 -1
  221. package/dist/chunks/ToolButton-ClPz5L6j.js.map +0 -1
  222. package/dist/chunks/ToolOptionsBar-JvmY7iNe.js.map +0 -1
  223. package/dist/chunks/ToolPalette-DAiVhdtV.js.map +0 -1
  224. package/dist/chunks/Tooltip-DXJbdR5B.js +0 -40
  225. package/dist/chunks/Tooltip-DXJbdR5B.js.map +0 -1
  226. package/dist/chunks/segmentedControl.module-DCyuDbj1.js +0 -11
  227. package/dist/chunks/segmentedControl.module-DCyuDbj1.js.map +0 -1
@@ -1,12 +1,12 @@
1
- import { n as e, t } from "./Tooltip-DXJbdR5B.js";
2
- import { useSyncExternalStore as n } from "react";
3
- import { Focusable as r } from "react-aria-components";
1
+ import { n as e, t } from "./Tooltip-Di7vxbFa.js";
2
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
3
  import { evaluateEnabled as i, useActionsRegistry as a, useOptionalDepRegistry as o } from "@weasel-js/core";
5
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ import { useSyncExternalStore as s } from "react";
5
+ import { Focusable as c } from "react-aria-components";
6
6
  var l = {
7
- bar: "_bar_147qb_7",
8
- vertical: "_vertical_147qb_18",
9
- button: "_button_147qb_22"
7
+ bar: "_bar_1quk7_7",
8
+ vertical: "_vertical_1quk7_18",
9
+ button: "_button_1quk7_22"
10
10
  }, u = Object.freeze([]), d = () => () => {};
11
11
  function f(e, t) {
12
12
  if (t !== void 0) return t;
@@ -17,7 +17,7 @@ function p(e, t) {
17
17
  return t ? `${e} (${t})` : e;
18
18
  }
19
19
  function m(m) {
20
- let { group: h, orientation: g = "horizontal", icons: _, labels: v, className: y } = m, b = a(), x = o(), S = n(b ? b.subscribe : d, b ? b.list : () => u, b ? b.list : () => u).filter((e) => e.group === h), C = x ? {
20
+ let { group: h, orientation: g = "horizontal", icons: _, labels: v, className: y } = m, b = a(), x = o(), S = s(b ? b.subscribe : d, b ? b.list : () => u, b ? b.list : () => u).filter((e) => e.group === h), C = x ? {
21
21
  selection: x.get("selection"),
22
22
  scene: x.get("scene"),
23
23
  history: x.get("history"),
@@ -26,7 +26,7 @@ function m(m) {
26
26
  activeTool: x.get("activeTool"),
27
27
  booleansAdapter: x.get("booleansAdapter")
28
28
  } : void 0;
29
- return /* @__PURE__ */ s("div", {
29
+ return /* @__PURE__ */ n("div", {
30
30
  className: [
31
31
  l.bar,
32
32
  g === "vertical" && l.vertical,
@@ -34,30 +34,30 @@ function m(m) {
34
34
  ].filter(Boolean).join(" "),
35
35
  role: "toolbar",
36
36
  "aria-label": `${h} actions`,
37
- children: S.map((n) => {
38
- let a = v?.[n.id] ?? n.label, o = f(n, _?.[n.id]), { enabled: u } = i(n, C), d = !u, m = p(a, n.shortcut);
39
- return /* @__PURE__ */ c(e, {
37
+ children: S.map((a) => {
38
+ let o = v?.[a.id] ?? a.label, s = f(a, _?.[a.id]), { enabled: u } = i(a, C), d = !u, m = p(o, a.shortcut);
39
+ return /* @__PURE__ */ r(e, {
40
40
  isDisabled: d,
41
- children: [/* @__PURE__ */ s(r, {
41
+ children: [/* @__PURE__ */ n(c, {
42
42
  isDisabled: d,
43
- children: /* @__PURE__ */ s("button", {
43
+ children: /* @__PURE__ */ n("button", {
44
44
  type: "button",
45
- "data-testid": `action-bar-item-${n.id}`,
46
- "aria-label": a,
45
+ "data-testid": `action-bar-item-${a.id}`,
46
+ "aria-label": o,
47
47
  "aria-disabled": d || void 0,
48
48
  disabled: d,
49
49
  className: l.button,
50
50
  onClick: () => {
51
- d || b?.trigger(n.id);
51
+ d || b?.trigger(a.id);
52
52
  },
53
- children: o
53
+ children: s
54
54
  })
55
- }), /* @__PURE__ */ s(t, { children: m })]
56
- }, n.id);
55
+ }), /* @__PURE__ */ n(t, { children: m })]
56
+ }, a.id);
57
57
  })
58
58
  });
59
59
  }
60
60
  //#endregion
61
61
  export { m as t };
62
62
 
63
- //# sourceMappingURL=ActionBar-BvPEd_GW.js.map
63
+ //# sourceMappingURL=ActionBar-BTev_ZZl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionBar-BTev_ZZl.js","names":[],"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: 2px;\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: 28px;\n height: 28px;\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 type Action,\n} from '@weasel-js/core';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\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-id icon overrides — keyed by `action.id`. 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-id label overrides — keyed by `action.id`. Drives both `aria-label`\n * and `title`. When omitted, the action'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(action: Action, override: ReactNode | undefined): ReactNode {\n if (override !== undefined) return override;\n const i = action.icon;\n if (typeof i === 'function') return i();\n return i;\n}\n\nfunction resolveTitle(label: string, shortcut: string | undefined): string {\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. 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 actions = all.filter((a) => a.group === group);\n\n // Build the deps bag fresh each render — predicates read selection / etc.\n // from these. ActionBar relies on its parent re-rendering when the\n // underlying state changes (e.g. the consumer reads `selection.current`\n // somewhere above us) for `enabled` to reflect the latest values.\n const deps = depReg\n ? {\n selection: depReg.get('selection'),\n scene: depReg.get('scene'),\n history: depReg.get('history'),\n view: depReg.get('view'),\n pointer: depReg.get('pointer'),\n activeTool: depReg.get('activeTool'),\n booleansAdapter: depReg.get('booleansAdapter'),\n }\n : undefined;\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 {actions.map((action) => {\n const label = labels?.[action.id] ?? action.label;\n const icon = resolveIcon(action, icons?.[action.id]);\n const { enabled } = evaluateEnabled(action, deps);\n const disabled = !enabled;\n const title = resolveTitle(label, action.shortcut);\n return (\n <TooltipTrigger key={action.id} isDisabled={disabled}>\n <Focusable isDisabled={disabled}>\n <button\n type=\"button\"\n data-testid={`action-bar-item-${action.id}`}\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(action.id);\n }}\n >\n {icon}\n </button>\n </Focusable>\n <Tooltip>{title}</Tooltip>\n </TooltipTrigger>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;GCWM,IAAgC,OAAO,OAAO,EAAE,CAAC,EACjD,gBAA0C;AAwBhD,SAAS,EAAY,GAAgB,GAA4C;AAC/E,KAAI,MAAa,KAAA,EAAW,QAAO;CACnC,IAAM,IAAI,EAAO;AAEjB,QADI,OAAO,KAAM,aAAmB,GAAG,GAChC;;AAGT,SAAS,EAAa,GAAe,GAAsC;AACzE,QAAO,IAAW,GAAG,EAAM,IAAI,EAAS,KAAK;;AAgB/C,SAAgB,EAAU,GAAuB;CAC/C,IAAM,EAAE,UAAO,iBAAc,cAAc,UAAO,WAAQ,iBAAc,GAClE,IAAW,GAAoB,EAC/B,IAAS,GAAwB,EAMjC,IALM,EACV,IAAW,EAAS,YAAY,GAChC,IAAW,EAAS,aAAa,GACjC,IAAW,EAAS,aAAa,EAEnB,CAAI,QAAQ,MAAM,EAAE,UAAU,EAAM,EAM9C,IAAO,IACT;EACE,WAAW,EAAO,IAAI,YAAY;EAClC,OAAO,EAAO,IAAI,QAAQ;EAC1B,SAAS,EAAO,IAAI,UAAU;EAC9B,MAAM,EAAO,IAAI,OAAO;EACxB,SAAS,EAAO,IAAI,UAAU;EAC9B,YAAY,EAAO,IAAI,aAAa;EACpC,iBAAiB,EAAO,IAAI,kBAAkB;EAC/C,GACD,KAAA;AAMJ,QACE,kBAAC,OAAD;EAAK,WALK;GAAC,EAAE;GAAK,MAAgB,cAAc,EAAE;GAAU;GAAU,CACrE,OAAO,QAAQ,CACf,KAAK,IAGU;EAAK,MAAK;EAAU,cAAY,GAAG,EAAM;YACtD,EAAQ,KAAK,MAAW;GACvB,IAAM,IAAQ,IAAS,EAAO,OAAO,EAAO,OACtC,IAAO,EAAY,GAAQ,IAAQ,EAAO,IAAI,EAC9C,EAAE,eAAY,EAAgB,GAAQ,EAAK,EAC3C,IAAW,CAAC,GACZ,IAAQ,EAAa,GAAO,EAAO,SAAS;AAClD,UACE,kBAAC,GAAD;IAAgC,YAAY;cAA5C,CACE,kBAAC,GAAD;KAAW,YAAY;eACrB,kBAAC,UAAD;MACE,MAAK;MACL,eAAa,mBAAmB,EAAO;MACvC,cAAY;MACZ,iBAAe,KAAY,KAAA;MACjB;MACV,WAAW,EAAE;MACb,eAAe;AACT,YAIJ,GAAU,QAAQ,EAAO,GAAG;;gBAG7B;MACM,CAAA;KACC,CAAA,EACZ,kBAAC,GAAD,EAAA,UAAU,GAAgB,CAAA,CACX;MArBI,EAAO,GAqBX;IAEnB;EACE,CAAA"}
@@ -1,7 +1,7 @@
1
- import { t as e } from "./useRovingTabIndex-DBZtq4IH.js";
2
- import { t } from "./segmentedControl.module-DCyuDbj1.js";
3
- import "react";
1
+ import { t as e } from "./useRovingTabIndex-CQz8EiKh.js";
2
+ import { t } from "./segmentedControl.module-D4b7x19O.js";
4
3
  import { jsx as n } from "react/jsx-runtime";
4
+ import "react";
5
5
  //#region src/components/ActionsBar/ActionsBar.tsx
6
6
  function r(r) {
7
7
  let { items: i, ariaLabel: a, className: o, height: s, size: c, variant: l } = r, u = (e) => {
@@ -38,4 +38,4 @@ function r(r) {
38
38
  //#endregion
39
39
  export { r as t };
40
40
 
41
- //# sourceMappingURL=ActionsBar-9aR5N3lU.js.map
41
+ //# sourceMappingURL=ActionsBar-gTuCtkv8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsBar-9aR5N3lU.js","names":[],"sources":["../../src/components/ActionsBar/ActionsBar.tsx"],"sourcesContent":["import { type CSSProperties, type ReactElement, type ReactNode } from 'react';\nimport s from '../segmentedControl.module.css';\nimport { useRovingTabIndex } from '../../useRovingTabIndex';\n\n/**\n * One button in an {@link ActionsBar}. `value` is only a React key; the item\n * carries no selected state.\n */\nexport type ActionsBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n onAction: () => void;\n};\n\n/** Segment height and type scale for an {@link ActionsBar}. */\nexport type ActionsBarSize = 'sm' | 'md';\n/** Visual treatment of an {@link ActionsBar}. */\nexport type ActionsBarVariant = 'default' | 'minimal';\n\n/** Props for {@link ActionsBar}. */\nexport type ActionsBarProps<V extends string | number = string> = {\n items: readonly ActionsBarItem<V>[];\n ariaLabel?: string;\n className?: string;\n height?: number;\n size?: ActionsBarSize;\n variant?: ActionsBarVariant;\n};\n\n/**\n * Segmented strip of momentary buttons — each press fires and nothing stays\n * selected. Shares the look and the arrow-key navigation of `ToggleBar` and\n * `OptionsBar`.\n *\n * This is a plain callback bar. For buttons driven by the kit's actions\n * registry, use `ActionBar` instead.\n */\nexport function ActionsBar<V extends string | number = string>(props: ActionsBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n\n const fire = (index: number) => {\n const item = items[index];\n if (item.disabled) return;\n item.onAction();\n };\n\n const roving = useRovingTabIndex({ items, itemClassName: s.segment, onActivate: fire });\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={roving.rootRef}\n className={rootCls}\n role=\"toolbar\"\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => (\n <button\n key={item.value}\n type=\"button\"\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={roving.tabIndexFor(i)}\n className={s.segment}\n onClick={() => fire(i)}\n onKeyDown={roving.onKeyDown(i)}\n >\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;AAuCA,SAAgB,EAA+C,GAAyC;CACtG,IAAM,EAAE,UAAO,cAAW,cAAW,WAAQ,SAAM,eAAY,GAEzD,KAAQ,MAAkB;EAC9B,IAAM,IAAO,EAAM;AACf,IAAK,YACT,EAAK,UAAU;IAGX,IAAS,EAAkB;EAAE;EAAO,eAAe,EAAE;EAAS,YAAY;EAAM,CAAC,EAEjF,IAAmC,MAAW,KAAA,IAEhD,KAAA,IADC,EAAG,mBAA8B,GAAG,EAAO,KAAK,EAG/C,IAAU;EACd,EAAE;EACF,KAAQ,EAAE,QAAQ;EAClB,KAAW,EAAE,WAAW;EACxB;EACD,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;AAE3B,QACE,kBAAC,OAAD;EACE,KAAK,EAAO;EACZ,WAAW;EACX,MAAK;EACL,cAAY;EACL;YAEN,EAAM,KAAK,GAAM,MAChB,kBAAC,UAAD;GAEE,MAAK;GACL,cAAY,EAAK;GACjB,UAAU,EAAK;GACf,UAAU,EAAO,YAAY,EAAE;GAC/B,WAAW,EAAE;GACb,eAAe,EAAK,EAAE;GACtB,WAAW,EAAO,UAAU,EAAE;aAE7B,EAAK;GACC,EAVF,EAAK,MAUH,CACT;EACE,CAAA"}
1
+ {"version":3,"file":"ActionsBar-gTuCtkv8.js","names":[],"sources":["../../src/components/ActionsBar/ActionsBar.tsx"],"sourcesContent":["import { type CSSProperties, type ReactElement, type ReactNode } from 'react';\nimport s from '../segmentedControl.module.css';\nimport { useRovingTabIndex } from '../../useRovingTabIndex';\n\n/**\n * One button in an {@link ActionsBar}. `value` is only a React key; the item\n * carries no selected state.\n */\nexport type ActionsBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n onAction: () => void;\n};\n\n/** Segment height and type scale for an {@link ActionsBar}. */\nexport type ActionsBarSize = 'sm' | 'md';\n/** Visual treatment of an {@link ActionsBar}. */\nexport type ActionsBarVariant = 'default' | 'minimal';\n\n/** Props for {@link ActionsBar}. */\nexport type ActionsBarProps<V extends string | number = string> = {\n items: readonly ActionsBarItem<V>[];\n ariaLabel?: string;\n className?: string;\n height?: number;\n size?: ActionsBarSize;\n variant?: ActionsBarVariant;\n};\n\n/**\n * Segmented strip of momentary buttons — each press fires and nothing stays\n * selected. Shares the look and the arrow-key navigation of `ToggleBar` and\n * `OptionsBar`.\n *\n * This is a plain callback bar. For buttons driven by the kit's actions\n * registry, use `ActionBar` instead.\n */\nexport function ActionsBar<V extends string | number = string>(props: ActionsBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n\n const fire = (index: number) => {\n const item = items[index];\n if (item.disabled) return;\n item.onAction();\n };\n\n const roving = useRovingTabIndex({ items, itemClassName: s.segment, onActivate: fire });\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={roving.rootRef}\n className={rootCls}\n role=\"toolbar\"\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => (\n <button\n key={item.value}\n type=\"button\"\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={roving.tabIndexFor(i)}\n className={s.segment}\n onClick={() => fire(i)}\n onKeyDown={roving.onKeyDown(i)}\n >\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;AAuCA,SAAgB,EAA+C,GAAyC;CACtG,IAAM,EAAE,UAAO,cAAW,cAAW,WAAQ,SAAM,eAAY,GAEzD,KAAQ,MAAkB;EAC9B,IAAM,IAAO,EAAM;AACf,IAAK,YACT,EAAK,UAAU;IAGX,IAAS,EAAkB;EAAE;EAAO,eAAe,EAAE;EAAS,YAAY;EAAM,CAAC,EAEjF,IAAmC,MAAW,KAAA,IAEhD,KAAA,IADC,EAAG,mBAA8B,GAAG,EAAO,KAAK,EAG/C,IAAU;EACd,EAAE;EACF,KAAQ,EAAE,QAAQ;EAClB,KAAW,EAAE,WAAW;EACxB;EACD,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;AAE3B,QACE,kBAAC,OAAD;EACE,KAAK,EAAO;EACZ,WAAW;EACX,MAAK;EACL,cAAY;EACL;YAEN,EAAM,KAAK,GAAM,MAChB,kBAAC,UAAD;GAEE,MAAK;GACL,cAAY,EAAK;GACjB,UAAU,EAAK;GACf,UAAU,EAAO,YAAY,EAAE;GAC/B,WAAW,EAAE;GACb,eAAe,EAAK,EAAE;GACtB,WAAW,EAAO,UAAU,EAAE;aAE7B,EAAK;GACC,EAVF,EAAK,MAUH,CACT;EACE,CAAA"}