@weasel-js/ui 1.4.2 → 1.4.4

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 (218) hide show
  1. package/dist/chunks/{ActionBar-D4N1o4LB.js → ActionBar-DxGp3WuZ.js} +2 -2
  2. package/dist/chunks/{ActionBar-D4N1o4LB.js.map → ActionBar-DxGp3WuZ.js.map} +1 -1
  3. package/dist/chunks/{ActionsBar-C2oXIJk-.js → ActionsBar-D1VFreoj.js} +3 -3
  4. package/dist/chunks/{ActionsBar-C2oXIJk-.js.map → ActionsBar-D1VFreoj.js.map} +1 -1
  5. package/dist/chunks/{Badge-7yQseqZb.js → Badge-Bf8Rd1R6.js} +1 -1
  6. package/dist/chunks/{Badge-7yQseqZb.js.map → Badge-Bf8Rd1R6.js.map} +1 -1
  7. package/dist/chunks/{BandEditor-CqiMlSF9.js → BandEditor-CUlbOlJi.js} +1 -1
  8. package/dist/chunks/{BandEditor-CqiMlSF9.js.map → BandEditor-CUlbOlJi.js.map} +1 -1
  9. package/dist/chunks/Button-CExdkQcU.js +90 -0
  10. package/dist/chunks/{Button-0OdcoOMx.js.map → Button-CExdkQcU.js.map} +1 -1
  11. package/dist/chunks/Callout-Dvt6lqVn.js +122 -0
  12. package/dist/chunks/Callout-Dvt6lqVn.js.map +1 -0
  13. package/dist/chunks/{Checkbox-CkcngYWa.js → Checkbox-D-pVpobU.js} +1 -1
  14. package/dist/chunks/{Checkbox-CkcngYWa.js.map → Checkbox-D-pVpobU.js.map} +1 -1
  15. package/dist/chunks/{ColorField-CCBSv8dp.js → ColorField-C20aRvCg.js} +2 -2
  16. package/dist/chunks/{ColorField-CCBSv8dp.js.map → ColorField-C20aRvCg.js.map} +1 -1
  17. package/dist/chunks/ComboBox-BBRRWvdc.js +107 -0
  18. package/dist/chunks/ComboBox-BBRRWvdc.js.map +1 -0
  19. package/dist/chunks/{CurveEditor-BNbP2wgq.js → CurveEditor-DtjdpJVB.js} +2 -2
  20. package/dist/chunks/{CurveEditor-BNbP2wgq.js.map → CurveEditor-DtjdpJVB.js.map} +1 -1
  21. package/dist/chunks/{DataGrid-CiJGbgok.js → DataGrid-BVdDMZkQ.js} +2 -2
  22. package/dist/chunks/{DataGrid-CiJGbgok.js.map → DataGrid-BVdDMZkQ.js.map} +1 -1
  23. package/dist/chunks/{DetentSlider-C6RTsiPi.js → DetentSlider-BpD7bgjN.js} +2 -2
  24. package/dist/chunks/{DetentSlider-C6RTsiPi.js.map → DetentSlider-BpD7bgjN.js.map} +1 -1
  25. package/dist/chunks/Dialog-CYBLjwbd.js +61 -0
  26. package/dist/chunks/Dialog-CYBLjwbd.js.map +1 -0
  27. package/dist/chunks/{Disclosure-aSX2CZlw.js → Disclosure-DiA6UKdM.js} +1 -1
  28. package/dist/chunks/{Disclosure-aSX2CZlw.js.map → Disclosure-DiA6UKdM.js.map} +1 -1
  29. package/dist/chunks/{DragHandleGlyph-C6GJyfnm.js → DragHandleGlyph-CppAz4_8.js} +1 -1
  30. package/dist/chunks/{DragHandleGlyph-C6GJyfnm.js.map → DragHandleGlyph-CppAz4_8.js.map} +1 -1
  31. package/dist/chunks/{Field-BUroh92b.js → Field-dzlxOGxT.js} +1 -1
  32. package/dist/chunks/{Field-BUroh92b.js.map → Field-dzlxOGxT.js.map} +1 -1
  33. package/dist/chunks/{FontFamilySelect-xjOHQMsK.js → FontFamilySelect-DIJ4phXz.js} +2 -2
  34. package/dist/chunks/{FontFamilySelect-xjOHQMsK.js.map → FontFamilySelect-DIJ4phXz.js.map} +1 -1
  35. package/dist/chunks/{GradientEditor-D1IVEkHO.js → GradientEditor-BLpAtMDK.js} +4 -4
  36. package/dist/chunks/{GradientEditor-D1IVEkHO.js.map → GradientEditor-BLpAtMDK.js.map} +1 -1
  37. package/dist/chunks/{InlineRange-DG2dvtb4.js → InlineRange-CcfzY80y.js} +2 -2
  38. package/dist/chunks/{InlineRange-DG2dvtb4.js.map → InlineRange-CcfzY80y.js.map} +1 -1
  39. package/dist/chunks/{Input-CxMANia3.js → Input-CoKOtyD0.js} +2 -2
  40. package/dist/chunks/{Input-CxMANia3.js.map → Input-CoKOtyD0.js.map} +1 -1
  41. package/dist/chunks/{ItemList-BcdHAah3.js → ItemList-BZJQReXD.js} +1 -1
  42. package/dist/chunks/{ItemList-BcdHAah3.js.map → ItemList-BZJQReXD.js.map} +1 -1
  43. package/dist/chunks/{Keycaps-D-UGWDrt.js → Keycaps-DSeq6QWH.js} +1 -1
  44. package/dist/chunks/{Keycaps-D-UGWDrt.js.map → Keycaps-DSeq6QWH.js.map} +1 -1
  45. package/dist/chunks/{LayerStack-DQnWSOVC.js → LayerStack-DOylrQcm.js} +3 -3
  46. package/dist/chunks/{LayerStack-DQnWSOVC.js.map → LayerStack-DOylrQcm.js.map} +1 -1
  47. package/dist/chunks/{NumberField-DLw4UmF3.js → NumberField-DBowmOfe.js} +2 -2
  48. package/dist/chunks/{NumberField-DLw4UmF3.js.map → NumberField-DBowmOfe.js.map} +1 -1
  49. package/dist/chunks/{OptionsBar-BXyk_5gT.js → OptionsBar-D_Cd3ZYs.js} +3 -3
  50. package/dist/chunks/{OptionsBar-BXyk_5gT.js.map → OptionsBar-D_Cd3ZYs.js.map} +1 -1
  51. package/dist/chunks/{PaintInput-DCgWtKxw.js → PaintInput-B7AScmHN.js} +5 -5
  52. package/dist/chunks/{PaintInput-DCgWtKxw.js.map → PaintInput-B7AScmHN.js.map} +1 -1
  53. package/dist/chunks/{PatternPicker-CPFEhpXD.js → PatternPicker-Ba22Bf4L.js} +2 -2
  54. package/dist/chunks/{PatternPicker-CPFEhpXD.js.map → PatternPicker-Ba22Bf4L.js.map} +1 -1
  55. package/dist/chunks/{Plot2D-BtI_c25q.js → Plot2D-C97pO13t.js} +1 -1
  56. package/dist/chunks/{Plot2D-BtI_c25q.js.map → Plot2D-C97pO13t.js.map} +1 -1
  57. package/dist/chunks/{PointPlotter-B-DvXjkL.js → PointPlotter-CbDKVggs.js} +2 -2
  58. package/dist/chunks/{PointPlotter-B-DvXjkL.js.map → PointPlotter-CbDKVggs.js.map} +1 -1
  59. package/dist/chunks/{Powerline-CJYCbqSc.js → Powerline-BaHDJlcO.js} +2 -2
  60. package/dist/chunks/{Powerline-CJYCbqSc.js.map → Powerline-BaHDJlcO.js.map} +1 -1
  61. package/dist/chunks/Prefs-4JSEtuU-.js +294 -0
  62. package/dist/chunks/Prefs-4JSEtuU-.js.map +1 -0
  63. package/dist/chunks/{Properties-fLSEE65J.js → Properties-BpUYKi7-.js} +129 -117
  64. package/dist/chunks/Properties-BpUYKi7-.js.map +1 -0
  65. package/dist/chunks/{RadioGroup-VGAaLYaR.js → RadioGroup-B2_LUgDp.js} +2 -2
  66. package/dist/chunks/{RadioGroup-VGAaLYaR.js.map → RadioGroup-B2_LUgDp.js.map} +1 -1
  67. package/dist/chunks/{RangeSlider-DefoAOsh.js → RangeSlider-S2R3zA8N.js} +8 -8
  68. package/dist/chunks/RangeSlider-S2R3zA8N.js.map +1 -0
  69. package/dist/chunks/{ResizeHandle-DMJdqRud.js → ResizeHandle-BrCO0JrH.js} +1 -1
  70. package/dist/chunks/{ResizeHandle-DMJdqRud.js.map → ResizeHandle-BrCO0JrH.js.map} +1 -1
  71. package/dist/chunks/Select-CacMfs4v.js +124 -0
  72. package/dist/chunks/Select-CacMfs4v.js.map +1 -0
  73. package/dist/chunks/{SelectionPanel-BwBevj5F.js → SelectionPanel-C59wavdA.js} +203 -202
  74. package/dist/chunks/SelectionPanel-C59wavdA.js.map +1 -0
  75. package/dist/chunks/{Sidebar-CeSRkWKK.js → Sidebar-BvwjZiFm.js} +1 -1
  76. package/dist/chunks/{Sidebar-CeSRkWKK.js.map → Sidebar-BvwjZiFm.js.map} +1 -1
  77. package/dist/chunks/{SidebarPanel-BWIiJv7M.js → SidebarPanel-D5Ua2vyP.js} +2 -2
  78. package/dist/chunks/{SidebarPanel-BWIiJv7M.js.map → SidebarPanel-D5Ua2vyP.js.map} +1 -1
  79. package/dist/chunks/{Slider-X6WcO-6s.js → Slider-Bs-KSYgQ.js} +15 -15
  80. package/dist/chunks/Slider-Bs-KSYgQ.js.map +1 -0
  81. package/dist/chunks/{StatusBar-COyPUoEs.js → StatusBar-Bqv4D0dW.js} +1 -1
  82. package/dist/chunks/{StatusBar-COyPUoEs.js.map → StatusBar-Bqv4D0dW.js.map} +1 -1
  83. package/dist/chunks/{Switch-Y097LD1L.js → Switch-C4NU-me1.js} +1 -1
  84. package/dist/chunks/{Switch-Y097LD1L.js.map → Switch-C4NU-me1.js.map} +1 -1
  85. package/dist/chunks/{Tabs-BDzkqWDE.js → Tabs-BT3CDkoQ.js} +1 -1
  86. package/dist/chunks/{Tabs-BDzkqWDE.js.map → Tabs-BT3CDkoQ.js.map} +1 -1
  87. package/dist/chunks/{Timeline-D9xQBdKN.js → Timeline-Bz806JbE.js} +2 -2
  88. package/dist/chunks/{Timeline-D9xQBdKN.js.map → Timeline-Bz806JbE.js.map} +1 -1
  89. package/dist/chunks/{Toast-DX0iLdC3.js → Toast-B7ylq7fz.js} +1 -1
  90. package/dist/chunks/{Toast-DX0iLdC3.js.map → Toast-B7ylq7fz.js.map} +1 -1
  91. package/dist/chunks/{ToggleBar-fQGk_Wf_.js → ToggleBar-Bxwv6xvj.js} +2 -2
  92. package/dist/chunks/{ToggleBar-fQGk_Wf_.js.map → ToggleBar-Bxwv6xvj.js.map} +1 -1
  93. package/dist/chunks/{ToolButton-DpqTcgLa.js → ToolButton-CtDkqUIc.js} +2 -2
  94. package/dist/chunks/{ToolButton-DpqTcgLa.js.map → ToolButton-CtDkqUIc.js.map} +1 -1
  95. package/dist/chunks/{ToolGroup-DOrObiiA.js → ToolGroup-zDtqt0QJ.js} +1 -1
  96. package/dist/chunks/{ToolGroup-DOrObiiA.js.map → ToolGroup-zDtqt0QJ.js.map} +1 -1
  97. package/dist/chunks/{ToolOptionsBar-f6b5u99i.js → ToolOptionsBar-B2xPWzJf.js} +1 -1
  98. package/dist/chunks/{ToolOptionsBar-f6b5u99i.js.map → ToolOptionsBar-B2xPWzJf.js.map} +1 -1
  99. package/dist/chunks/{ToolPalette-B_Zjw6dC.js → ToolPalette-BbrMHfQ9.js} +5 -5
  100. package/dist/chunks/{ToolPalette-B_Zjw6dC.js.map → ToolPalette-BbrMHfQ9.js.map} +1 -1
  101. package/dist/chunks/Tooltip-BHre_vbI.js +42 -0
  102. package/dist/chunks/Tooltip-BHre_vbI.js.map +1 -0
  103. package/dist/chunks/{keyGlyph-L5bsDQe5.js → keyGlyph-Bp0wnLHn.js} +1 -1
  104. package/dist/chunks/{keyGlyph-L5bsDQe5.js.map → keyGlyph-Bp0wnLHn.js.map} +1 -1
  105. package/dist/chunks/{number-Dy633mrx.js → number-Bv1nbhOJ.js} +1 -1
  106. package/dist/chunks/{number-Dy633mrx.js.map → number-Bv1nbhOJ.js.map} +1 -1
  107. package/dist/chunks/portalHost-CjpCnuGU.js +28 -0
  108. package/dist/chunks/portalHost-CjpCnuGU.js.map +1 -0
  109. package/dist/chunks/range.module-CvSfABmu.js +8 -0
  110. package/dist/chunks/range.module-CvSfABmu.js.map +1 -0
  111. package/dist/chunks/schema-CtWwGbqJ.js +41 -0
  112. package/dist/chunks/schema-CtWwGbqJ.js.map +1 -0
  113. package/dist/chunks/{segmentedControl.module-pcPOsNey.js → segmentedControl.module-BgvAPkSZ.js} +1 -1
  114. package/dist/chunks/{segmentedControl.module-pcPOsNey.js.map → segmentedControl.module-BgvAPkSZ.js.map} +1 -1
  115. package/dist/chunks/{useReorderDragList-C2fhvbU1.js → useReorderDragList-CSQGd7zQ.js} +1 -1
  116. package/dist/chunks/{useReorderDragList-C2fhvbU1.js.map → useReorderDragList-CSQGd7zQ.js.map} +1 -1
  117. package/dist/chunks/{useRovingTabIndex-DqXFNDaD.js → useRovingTabIndex-Dkpf_KhN.js} +1 -1
  118. package/dist/chunks/{useRovingTabIndex-DqXFNDaD.js.map → useRovingTabIndex-Dkpf_KhN.js.map} +1 -1
  119. package/dist/components/ActionBar/index.js +1 -1
  120. package/dist/components/ActionsBar/index.js +1 -1
  121. package/dist/components/Badge/index.js +1 -1
  122. package/dist/components/BandEditor/index.js +1 -1
  123. package/dist/components/Button/Button.d.ts +5 -0
  124. package/dist/components/Button/Button.d.ts.map +1 -1
  125. package/dist/components/Button/index.js +1 -1
  126. package/dist/components/Callout/Callout.d.ts +2 -1
  127. package/dist/components/Callout/Callout.d.ts.map +1 -1
  128. package/dist/components/Callout/index.js +1 -1
  129. package/dist/components/Checkbox/index.js +1 -1
  130. package/dist/components/ColorField/index.js +1 -1
  131. package/dist/components/ComboBox/ComboBox.d.ts +9 -2
  132. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  133. package/dist/components/ComboBox/index.js +1 -1
  134. package/dist/components/CurveEditor/index.js +1 -1
  135. package/dist/components/DataGrid/index.js +1 -1
  136. package/dist/components/DetentSlider/index.js +1 -1
  137. package/dist/components/Dialog/Dialog.d.ts +2 -1
  138. package/dist/components/Dialog/Dialog.d.ts.map +1 -1
  139. package/dist/components/Dialog/index.js +1 -1
  140. package/dist/components/Disclosure/index.js +1 -1
  141. package/dist/components/DragHandleGlyph/index.js +1 -1
  142. package/dist/components/Field/index.js +1 -1
  143. package/dist/components/FontFamilySelect/index.js +1 -1
  144. package/dist/components/GradientEditor/index.js +1 -1
  145. package/dist/components/InlineRange/index.js +1 -1
  146. package/dist/components/Input/index.js +1 -1
  147. package/dist/components/ItemList/index.js +1 -1
  148. package/dist/components/Keycaps/index.js +2 -2
  149. package/dist/components/LayerStack/index.js +1 -1
  150. package/dist/components/NumberField/index.js +1 -1
  151. package/dist/components/OptionsBar/index.js +1 -1
  152. package/dist/components/PaintInput/index.js +1 -1
  153. package/dist/components/PatternPicker/index.js +1 -1
  154. package/dist/components/Plot2D/index.js +1 -1
  155. package/dist/components/PointPlotter/index.js +1 -1
  156. package/dist/components/Powerline/index.js +2 -2
  157. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  158. package/dist/components/Prefs/index.d.ts +1 -1
  159. package/dist/components/Prefs/index.d.ts.map +1 -1
  160. package/dist/components/Prefs/index.js +3 -2
  161. package/dist/components/Prefs/schema.d.ts +17 -1
  162. package/dist/components/Prefs/schema.d.ts.map +1 -1
  163. package/dist/components/Properties/PropertyPanel.d.ts +27 -2
  164. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  165. package/dist/components/Properties/index.js +1 -1
  166. package/dist/components/RadioGroup/index.js +1 -1
  167. package/dist/components/RangeSlider/RangeSlider.d.ts +5 -0
  168. package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -1
  169. package/dist/components/RangeSlider/index.js +1 -1
  170. package/dist/components/ResizeHandle/index.js +1 -1
  171. package/dist/components/Select/Select.d.ts +2 -1
  172. package/dist/components/Select/Select.d.ts.map +1 -1
  173. package/dist/components/Select/index.js +1 -1
  174. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
  175. package/dist/components/SelectionPanel/index.js +1 -1
  176. package/dist/components/Sidebar/index.js +1 -1
  177. package/dist/components/SidebarPanel/index.js +1 -1
  178. package/dist/components/Slider/index.js +1 -1
  179. package/dist/components/StatusBar/index.js +1 -1
  180. package/dist/components/Switch/index.js +1 -1
  181. package/dist/components/Tabs/index.js +1 -1
  182. package/dist/components/Timeline/index.js +1 -1
  183. package/dist/components/Toast/index.js +1 -1
  184. package/dist/components/ToggleBar/index.js +1 -1
  185. package/dist/components/ToolButton/index.js +1 -1
  186. package/dist/components/ToolGroup/index.js +1 -1
  187. package/dist/components/ToolOptionsBar/index.js +1 -1
  188. package/dist/components/ToolPalette/index.js +1 -1
  189. package/dist/components/Tooltip/Tooltip.d.ts +2 -1
  190. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  191. package/dist/components/Tooltip/index.js +1 -1
  192. package/dist/index.d.ts +1 -0
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/index.js +63 -61
  195. package/dist/index.js.map +1 -1
  196. package/dist/overlays/portalHost.d.ts +55 -0
  197. package/dist/overlays/portalHost.d.ts.map +1 -0
  198. package/dist/style.css +1 -1
  199. package/package.json +6 -6
  200. package/dist/chunks/Button-0OdcoOMx.js +0 -87
  201. package/dist/chunks/Callout-63z0T-w3.js +0 -116
  202. package/dist/chunks/Callout-63z0T-w3.js.map +0 -1
  203. package/dist/chunks/ComboBox-TnIrRldB.js +0 -89
  204. package/dist/chunks/ComboBox-TnIrRldB.js.map +0 -1
  205. package/dist/chunks/Dialog-D8pVzsw8.js +0 -59
  206. package/dist/chunks/Dialog-D8pVzsw8.js.map +0 -1
  207. package/dist/chunks/Prefs-BqnwyjmH.js +0 -300
  208. package/dist/chunks/Prefs-BqnwyjmH.js.map +0 -1
  209. package/dist/chunks/Properties-fLSEE65J.js.map +0 -1
  210. package/dist/chunks/RangeSlider-DefoAOsh.js.map +0 -1
  211. package/dist/chunks/Select-DGafwTF0.js +0 -121
  212. package/dist/chunks/Select-DGafwTF0.js.map +0 -1
  213. package/dist/chunks/SelectionPanel-BwBevj5F.js.map +0 -1
  214. package/dist/chunks/Slider-X6WcO-6s.js.map +0 -1
  215. package/dist/chunks/Tooltip-Bq8Hvj4r.js +0 -40
  216. package/dist/chunks/Tooltip-Bq8Hvj4r.js.map +0 -1
  217. package/dist/chunks/range.module-CO59aXEH.js +0 -8
  218. package/dist/chunks/range.module-CO59aXEH.js.map +0 -1
@@ -1,116 +0,0 @@
1
- import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
- import { useCallback as r, useEffect as i, useId as a, useRef as o } from "react";
3
- import { Dialog as s, DialogTrigger as c, Heading as l, OverlayArrow as u, Popover as d } from "react-aria-components";
4
- import { createPortal as f } from "react-dom";
5
- var p = {
6
- anchor: "_anchor_vtcyj_1",
7
- popover: "_popover_vtcyj_6",
8
- toneWarning: "_toneWarning_vtcyj_25",
9
- toneDanger: "_toneDanger_vtcyj_29",
10
- arrow: "_arrow_vtcyj_33",
11
- dialog: "_dialog_vtcyj_52",
12
- header: "_header_vtcyj_59",
13
- title: "_title_vtcyj_66",
14
- close: "_close_vtcyj_73",
15
- body: "_body_vtcyj_89",
16
- footer: "_footer_vtcyj_96"
17
- }, m = {
18
- info: p.toneInfo,
19
- warning: p.toneWarning,
20
- danger: p.toneDanger
21
- };
22
- function h(c) {
23
- let { children: h, className: g, title: _, footer: v, tone: y = "info", modal: b = !1, showCloseButton: x, onDismiss: S, triggerRef: C, anchorRect: w, placement: T = "top", offset: E = 12, maxHeight: D = 400, onOpenChange: O, shouldCloseOnInteractOutside: k, "aria-label": A, "aria-labelledby": j, ...M } = c, N = o(null), P = x ?? !b, F = o(S);
24
- F.current = S;
25
- let I = o((e) => {
26
- e.key === "Escape" && F.current?.();
27
- }), L = o(null), R = r((e) => {
28
- L.current?.removeEventListener("keydown", I.current), L.current = e, e?.addEventListener("keydown", I.current);
29
- }, []), z = a(), B = w !== void 0;
30
- i(() => {
31
- !B || typeof window > "u" || window.dispatchEvent(new Event("resize"));
32
- }, [
33
- B,
34
- w?.x,
35
- w?.y,
36
- w?.width,
37
- w?.height
38
- ]);
39
- let V = b && _ !== void 0 ? z : j, H = b ? A : void 0;
40
- return /* @__PURE__ */ n(e, { children: [w !== void 0 && f(/* @__PURE__ */ t("span", {
41
- ref: N,
42
- "data-callout-anchor": "",
43
- className: p.anchor,
44
- "aria-hidden": "true",
45
- style: {
46
- left: w.x,
47
- top: w.y,
48
- width: w.width,
49
- height: w.height
50
- }
51
- }), document.body), /* @__PURE__ */ n(d, {
52
- ...M,
53
- triggerRef: w === void 0 ? C : N,
54
- isNonModal: !b,
55
- placement: T,
56
- offset: E,
57
- maxHeight: D,
58
- onOpenChange: O,
59
- shouldCloseOnInteractOutside: k ?? (b ? () => !1 : void 0),
60
- "aria-label": H,
61
- "aria-labelledby": V,
62
- className: [
63
- p.popover,
64
- m[y],
65
- g
66
- ].filter(Boolean).join(" "),
67
- "data-weasel-overlay": "",
68
- children: [/* @__PURE__ */ t(u, {
69
- className: p.arrow,
70
- children: /* @__PURE__ */ t("svg", {
71
- width: 12,
72
- height: 12,
73
- viewBox: "0 0 12 12",
74
- "aria-hidden": "true",
75
- children: /* @__PURE__ */ t("path", { d: "M0 0 L6 6 L12 0" })
76
- })
77
- }), /* @__PURE__ */ t(s, {
78
- role: b ? "alertdialog" : "dialog",
79
- className: p.dialog,
80
- "aria-label": A,
81
- "aria-labelledby": j,
82
- ref: R,
83
- children: ({ close: r }) => /* @__PURE__ */ n(e, { children: [
84
- (_ !== void 0 || P) && /* @__PURE__ */ n("header", {
85
- className: p.header,
86
- children: [_ !== void 0 && /* @__PURE__ */ t(l, {
87
- id: z,
88
- slot: "title",
89
- className: p.title,
90
- children: _
91
- }), P && /* @__PURE__ */ t("button", {
92
- type: "button",
93
- className: p.close,
94
- onClick: () => {
95
- r(), O?.(!1), S?.();
96
- },
97
- "aria-label": "Close callout",
98
- children: "×"
99
- })]
100
- }),
101
- /* @__PURE__ */ t("div", {
102
- className: p.body,
103
- children: h
104
- }),
105
- v !== void 0 && /* @__PURE__ */ t("footer", {
106
- className: p.footer,
107
- children: v
108
- })
109
- ] })
110
- })]
111
- })] });
112
- }
113
- //#endregion
114
- export { c as n, h as t };
115
-
116
- //# sourceMappingURL=Callout-63z0T-w3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Callout-63z0T-w3.js","names":[],"sources":["../../src/components/Callout/Callout.module.css","../../src/components/Callout/Callout.tsx"],"sourcesContent":[".anchor {\n position: fixed;\n pointer-events: none;\n}\n\n.popover {\n /* Above Dialog overlay (1000) and ToastRegion (1100) — RAC sets no z-index. */\n z-index: 1200;\n --callout-accent: var(--wzl-accent-strong);\n background: var(--wzl-surface);\n border: 1px solid var(--callout-accent);\n border-radius: var(--wzl-radius-md);\n box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n max-width: 320px;\n transition: opacity var(--wzl-motion-fast);\n}\n\n.popover[data-entering],\n.popover[data-exiting] {\n opacity: 0;\n}\n\n.toneWarning {\n --callout-accent: var(--wzl-warning, #d99a3f);\n}\n\n.toneDanger {\n --callout-accent: var(--wzl-danger);\n}\n\n.arrow svg {\n display: block;\n fill: var(--wzl-surface);\n stroke: var(--callout-accent);\n stroke-width: 1;\n}\n\n.arrow[data-placement='bottom'] svg {\n transform: rotate(180deg);\n}\n\n.arrow[data-placement='left'] svg {\n transform: rotate(-90deg);\n}\n\n.arrow[data-placement='right'] svg {\n transform: rotate(90deg);\n}\n\n.dialog {\n outline: none;\n max-height: inherit;\n display: flex;\n flex-direction: column;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px 0;\n}\n\n.title {\n margin: 0;\n flex: 1;\n font-size: var(--wzl-font-size);\n font-weight: var(--wzl-font-weight-bold);\n}\n\n.close {\n flex: 0 0 auto;\n background: none;\n border: none;\n color: var(--wzl-fg-muted);\n font-size: var(--wzl-font-size-lg);\n line-height: 1;\n padding: 2px 4px;\n cursor: pointer;\n border-radius: var(--wzl-radius-sm);\n}\n\n.close:hover {\n color: var(--wzl-fg);\n}\n\n.body {\n padding: 8px 12px 10px;\n font-size: var(--wzl-font-size);\n line-height: 1.4;\n overflow-y: auto;\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 0 12px 10px;\n}\n","import { useCallback, useEffect, useId, useRef, type ReactNode, type RefObject } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n DialogTrigger,\n Popover as RACPopover,\n OverlayArrow,\n Dialog as RACDialog,\n Heading,\n type PopoverProps as RACPopoverProps,\n} from 'react-aria-components';\nimport s from './Callout.module.css';\n\n/** Accent color of a {@link Callout}'s border and arrow. */\nexport type CalloutTone = 'info' | 'warning' | 'danger';\n\n/**\n * Composition wrapper for press-to-open callouts:\n * `<CalloutTrigger><Pressable>…</Pressable><Callout>…</Callout></CalloutTrigger>`.\n * Re-exported RAC DialogTrigger — non-RAC trigger elements must be wrapped\n * in `<Pressable>` from react-aria-components.\n * In composed mode, put `defaultOpen` on `CalloutTrigger`, not `Callout` —\n * RAC detaches to local open state on the trigger, not the popover.\n */\nexport { DialogTrigger as CalloutTrigger };\n\n/** Props for {@link Callout}, on top of React Aria's `Popover` props. */\nexport type CalloutProps = Omit<\n RACPopoverProps,\n 'children' | 'className' | 'isNonModal' | 'triggerRef'\n> & {\n children?: ReactNode;\n className?: string;\n /** Optional heading rendered above the body. */\n title?: ReactNode;\n /** Footer slot — typically action buttons. */\n footer?: ReactNode;\n /** Accent tone for border + arrow. Default `info`. */\n tone?: CalloutTone;\n /**\n * `true` — blocks interaction with the rest of the app until dismissed;\n * inner dialog is `role=\"alertdialog\"`. `false` (default) — non-blocking:\n * the app stays interactive; Esc / outside click / close button dismiss.\n */\n modal?: boolean;\n /**\n * Show the × button. Defaults to `!modal`. In programmatic\n * `triggerRef`/`anchorRect` modes the close button needs controlled open\n * (`isOpen` + `onOpenChange`); with only `defaultOpen` it has no open-state\n * setter to call and cannot close.\n */\n showCloseButton?: boolean;\n /**\n * The user asked for this callout to go away — the × button or Escape.\n *\n * Distinct from `onOpenChange`, which a non-modal popover *also* fires when\n * interaction or focus merely leaves it. On a canvas that's every click on\n * the artwork, so a consumer that pins `isOpen` and treats `onOpenChange`\n * as dismissal retires messages nobody read. Use this instead: it fires\n * only on a deliberate act, and never on incidental focus loss.\n */\n onDismiss?: () => void;\n /** Anchor to an arbitrary element (programmatic use, with `isOpen`). */\n triggerRef?: RefObject<Element | null>;\n /**\n * Anchor to a client-coordinate rect — e.g. a scene node's on-screen box.\n * The callout re-anchors whenever this rect changes, so a consumer that\n * recomputes it on pan, zoom, or scene edits keeps the arrow on its target.\n * Takes precedence over `triggerRef`.\n */\n anchorRect?: { x: number; y: number; width: number; height: number };\n};\n\nconst toneClass: Record<CalloutTone, string> = {\n info: s.toneInfo,\n warning: s.toneWarning,\n danger: s.toneDanger,\n};\n\n/**\n * Anchored callout with an arrow pointing at its source — a trigger\n * element, an arbitrary `triggerRef`, or a client-space `anchorRect`.\n * Wraps React Aria Popover + Dialog; positioning, collision flipping,\n * dismissal, and focus behavior come from the underlying primitives.\n */\nexport function Callout(props: CalloutProps) {\n const {\n children,\n className,\n title,\n footer,\n tone = 'info',\n modal = false,\n showCloseButton,\n onDismiss,\n triggerRef,\n anchorRect,\n placement = 'top',\n offset = 12,\n maxHeight = 400,\n onOpenChange,\n shouldCloseOnInteractOutside,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n ...rest\n } = props;\n const anchorRef = useRef<HTMLSpanElement>(null);\n const showClose = showCloseButton ?? !modal;\n // Escape is a dismissal like the × is. It can't ride on a React `onKeyDown`:\n // RAC's Dialog runs its props through filterDOMProps, which drops handlers\n // it doesn't know, so the listener goes on the section itself. RAC's own\n // Escape handling is untouched — this only adds the signal.\n const onDismissRef = useRef(onDismiss);\n onDismissRef.current = onDismiss;\n const escapeListener = useRef((e: KeyboardEvent) => {\n if (e.key === 'Escape') onDismissRef.current?.();\n });\n const listeningTo = useRef<HTMLElement | null>(null);\n const dialogRef = useCallback((node: HTMLElement | null) => {\n listeningTo.current?.removeEventListener('keydown', escapeListener.current);\n listeningTo.current = node;\n node?.addEventListener('keydown', escapeListener.current);\n }, []);\n const titleId = useId();\n // RAC positions on open and recomputes on scroll, resize, and a\n // ResizeObserver on the anchor — none of which fire when `anchorRect` is\n // merely *translated*, as it is when a consumer tracks a scene node across a\n // pan. (Zoom happens to work, since scaling also changes the anchor's size.)\n // Nudging RAC's own resize listener is the supported way to make it\n // recompute; there's no public updatePosition on Popover.\n const hasAnchorRect = anchorRect !== undefined;\n useEffect(() => {\n if (!hasAnchorRect || typeof window === 'undefined') return;\n window.dispatchEvent(new Event('resize'));\n }, [hasAnchorRect, anchorRect?.x, anchorRect?.y, anchorRect?.width, anchorRect?.height]);\n // RAC's popover role-heuristic misses alertdialog; label the outer role\n // it stamps. Upstream: react-spectrum Popover.mjs querySelector('[role=dialog]').\n const popoverAriaLabelledby =\n modal && title !== undefined ? titleId : ariaLabelledby;\n const popoverAriaLabel = modal ? ariaLabel : undefined;\n return (\n <>\n {/* Harmless while closed — RAC reads the ref only when the popover is open. */}\n {anchorRect !== undefined &&\n createPortal(\n <span\n ref={anchorRef}\n data-callout-anchor=\"\"\n className={s.anchor}\n aria-hidden=\"true\"\n // Dynamic geometry — inline style is the mechanism here, not styling.\n style={{\n left: anchorRect.x,\n top: anchorRect.y,\n width: anchorRect.width,\n height: anchorRect.height,\n }}\n />,\n document.body,\n )}\n <RACPopover\n {...rest}\n triggerRef={anchorRect !== undefined ? anchorRef : triggerRef}\n isNonModal={!modal}\n placement={placement}\n offset={offset}\n maxHeight={maxHeight}\n onOpenChange={onOpenChange}\n shouldCloseOnInteractOutside={\n shouldCloseOnInteractOutside ?? (modal ? () => false : undefined)\n }\n aria-label={popoverAriaLabel}\n aria-labelledby={popoverAriaLabelledby}\n className={[s.popover, toneClass[tone], className].filter(Boolean).join(' ')}\n data-weasel-overlay=\"\"\n >\n <OverlayArrow className={s.arrow}>\n <svg width={12} height={12} viewBox=\"0 0 12 12\" aria-hidden=\"true\">\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </OverlayArrow>\n <RACDialog\n role={modal ? 'alertdialog' : 'dialog'}\n className={s.dialog}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={dialogRef}\n >\n {({ close }) => (\n <>\n {(title !== undefined || showClose) && (\n <header className={s.header}>\n {title !== undefined && (\n <Heading id={titleId} slot=\"title\" className={s.title}>\n {title}\n </Heading>\n )}\n {showClose && (\n <button\n type=\"button\"\n className={s.close}\n onClick={() => {\n // `close()` resolves OverlayTriggerStateContext, only\n // provided by DialogTrigger (composed mode). In\n // triggerRef/anchorRect modes there is no such\n // context, so `close()` is a no-op there — the\n // controlled-open fallback below does the work.\n close();\n onOpenChange?.(false);\n onDismiss?.();\n }}\n aria-label=\"Close callout\"\n >\n ×\n </button>\n )}\n </header>\n )}\n <div className={s.body}>{children}</div>\n {footer !== undefined && <footer className={s.footer}>{footer}</footer>}\n </>\n )}\n </RACDialog>\n </RACPopover>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;GCwEM,IAAyC;CAC7C,MAAM,EAAE;CACR,SAAS,EAAE;CACX,QAAQ,EAAE;CACX;AAQD,SAAgB,EAAQ,GAAqB;CAC3C,IAAM,EACJ,aACA,cACA,UACA,WACA,UAAO,QACP,WAAQ,IACR,oBACA,cACA,eACA,eACA,eAAY,OACZ,YAAS,IACT,eAAY,KACZ,iBACA,iCACA,cAAc,GACd,mBAAmB,GACnB,GAAG,MACD,GACE,IAAY,EAAwB,KAAK,EACzC,IAAY,KAAmB,CAAC,GAKhC,IAAe,EAAO,EAAU;AACtC,GAAa,UAAU;CACvB,IAAM,IAAiB,GAAQ,MAAqB;AAClD,EAAI,EAAE,QAAQ,YAAU,EAAa,WAAW;GAChD,EACI,IAAc,EAA2B,KAAK,EAC9C,IAAY,GAAa,MAA6B;AAG1D,EAFA,EAAY,SAAS,oBAAoB,WAAW,EAAe,QAAQ,EAC3E,EAAY,UAAU,GACtB,GAAM,iBAAiB,WAAW,EAAe,QAAQ;IACxD,EAAE,CAAC,EACA,IAAU,GAAO,EAOjB,IAAgB,MAAe,KAAA;AACrC,SAAgB;AACV,GAAC,KAAiB,OAAO,SAAW,OACxC,OAAO,cAAc,IAAI,MAAM,SAAS,CAAC;IACxC;EAAC;EAAe,GAAY;EAAG,GAAY;EAAG,GAAY;EAAO,GAAY;EAAO,CAAC;CAGxF,IAAM,IACJ,KAAS,MAAU,KAAA,IAAY,IAAU,GACrC,IAAmB,IAAQ,IAAY,KAAA;AAC7C,QACE,kBAAA,GAAA,EAAA,UAAA,CAEG,MAAe,KAAA,KACd,EACE,kBAAC,QAAD;EACE,KAAK;EACL,uBAAoB;EACpB,WAAW,EAAE;EACb,eAAY;EAEZ,OAAO;GACL,MAAM,EAAW;GACjB,KAAK,EAAW;GAChB,OAAO,EAAW;GAClB,QAAQ,EAAW;GACpB;EACD,CAAA,EACF,SAAS,KACV,EACH,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,MAAe,KAAA,IAAwB,IAAZ;EACvC,YAAY,CAAC;EACF;EACH;EACG;EACG;EACd,8BACE,MAAiC,UAAc,KAAQ,KAAA;EAEzD,cAAY;EACZ,mBAAiB;EACjB,WAAW;GAAC,EAAE;GAAS,EAAU;GAAO;GAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAC5E,uBAAoB;YAdtB,CAgBE,kBAAC,GAAD;GAAc,WAAW,EAAE;aACzB,kBAAC,OAAD;IAAK,OAAO;IAAI,QAAQ;IAAI,SAAQ;IAAY,eAAY;cAC1D,kBAAC,QAAD,EAAM,GAAE,mBAAoB,CAAA;IACxB,CAAA;GACO,CAAA,EACf,kBAAC,GAAD;GACE,MAAM,IAAQ,gBAAgB;GAC9B,WAAW,EAAE;GACb,cAAY;GACZ,mBAAiB;GACjB,KAAK;cAEH,EAAE,eACF,kBAAA,GAAA,EAAA,UAAA;KACI,MAAU,KAAA,KAAa,MACvB,kBAAC,UAAD;KAAQ,WAAW,EAAE;eAArB,CACG,MAAU,KAAA,KACT,kBAAC,GAAD;MAAS,IAAI;MAAS,MAAK;MAAQ,WAAW,EAAE;gBAC7C;MACO,CAAA,EAEX,KACC,kBAAC,UAAD;MACE,MAAK;MACL,WAAW,EAAE;MACb,eAAe;AAQb,OAFA,GAAO,EACP,IAAe,GAAM,EACrB,KAAa;;MAEf,cAAW;gBACZ;MAEQ,CAAA,CAEJ;;IAEX,kBAAC,OAAD;KAAK,WAAW,EAAE;KAAO;KAAe,CAAA;IACvC,MAAW,KAAA,KAAa,kBAAC,UAAD;KAAQ,WAAW,EAAE;eAAS;KAAgB,CAAA;IACtE,EAAA,CAAA;GAEK,CAAA,CACD;IACZ,EAAA,CAAA"}
@@ -1,89 +0,0 @@
1
- import { n as e } from "./Field-BUroh92b.js";
2
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
- import { Button as r, ComboBox as i, FieldError as a, Input as o, Label as s, ListBox as c, ListBoxItem as l, Popover as u, Text as d } from "react-aria-components";
4
- var f = {
5
- field: "_field_148rf_1",
6
- frame: "_frame_148rf_9",
7
- openButton: "_openButton_148rf_53",
8
- popover: "_popover_148rf_75",
9
- listbox: "_listbox_148rf_80",
10
- option: "_option_148rf_93",
11
- empty: "_empty_148rf_116"
12
- };
13
- //#endregion
14
- //#region src/components/ComboBox/ComboBox.tsx
15
- function p(l) {
16
- let { label: p, description: h, errorMessage: g, placeholder: _, options: v, children: y, selectedKey: b, defaultSelectedKey: x, onSelectionChange: S, emptyLabel: C = "No matches", className: w, ...T } = l;
17
- return /* @__PURE__ */ n(i, {
18
- ...T,
19
- selectedKey: b,
20
- defaultSelectedKey: x,
21
- onSelectionChange: S ? (e) => S(e) : void 0,
22
- className: [
23
- f.field,
24
- e.root,
25
- w
26
- ].filter(Boolean).join(" "),
27
- children: [
28
- p !== void 0 && /* @__PURE__ */ t(s, {
29
- className: e.label,
30
- children: p
31
- }),
32
- /* @__PURE__ */ n("div", {
33
- className: f.frame,
34
- children: [/* @__PURE__ */ t(o, { placeholder: _ }), /* @__PURE__ */ t(r, {
35
- className: f.openButton,
36
- "aria-label": "Show options",
37
- children: /* @__PURE__ */ t("svg", {
38
- viewBox: "0 0 10 10",
39
- "aria-hidden": "true",
40
- children: /* @__PURE__ */ t("path", {
41
- d: "M2 4 L5 7 L8 4",
42
- fill: "none",
43
- stroke: "currentColor",
44
- strokeWidth: "1.5",
45
- strokeLinecap: "round",
46
- strokeLinejoin: "round"
47
- })
48
- })
49
- })]
50
- }),
51
- h !== void 0 && /* @__PURE__ */ t(d, {
52
- slot: "description",
53
- className: e.hint,
54
- children: h
55
- }),
56
- /* @__PURE__ */ t(a, {
57
- className: e.error,
58
- children: g
59
- }),
60
- /* @__PURE__ */ t(u, {
61
- className: f.popover,
62
- "data-weasel-overlay": "",
63
- children: /* @__PURE__ */ t(c, {
64
- className: f.listbox,
65
- renderEmptyState: () => /* @__PURE__ */ t("div", {
66
- className: f.empty,
67
- children: C
68
- }),
69
- children: v === void 0 ? y : v.map((e) => /* @__PURE__ */ t(m, {
70
- id: e.value,
71
- textValue: e.textValue,
72
- isDisabled: e.isDisabled,
73
- children: e.label
74
- }, String(e.value)))
75
- })
76
- })
77
- ]
78
- });
79
- }
80
- function m({ className: e, ...n }) {
81
- return /* @__PURE__ */ t(l, {
82
- ...n,
83
- className: [f.option, e].filter(Boolean).join(" ")
84
- });
85
- }
86
- //#endregion
87
- export { m as n, p as t };
88
-
89
- //# sourceMappingURL=ComboBox-TnIrRldB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComboBox-TnIrRldB.js","names":[],"sources":["../../src/components/ComboBox/ComboBox.module.css","../../src/components/ComboBox/ComboBox.tsx"],"sourcesContent":[".field {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n gap: 4px;\n}\n\n.frame {\n display: flex;\n align-items: stretch;\n height: var(--wzl-field-h, var(--wzl-control-h));\n background: var(--wzl-surface-sunken);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n line-height: 1;\n overflow: hidden;\n transition: border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);\n}\n\n.frame:focus-within {\n border-color: var(--wzl-focus-ring);\n box-shadow: 0 0 0 1px var(--wzl-focus-ring);\n}\n\n.field[data-invalid] .frame {\n border-color: var(--wzl-danger);\n}\n\n.field[data-disabled] .frame {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.frame input {\n flex: 1;\n min-width: 0;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n padding: 0 var(--wzl-field-pad-x);\n}\n\n.frame input::placeholder {\n color: var(--wzl-fg-subtle);\n}\n\n.openButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n background: transparent;\n border: none;\n border-left: 1px solid var(--wzl-border);\n color: var(--wzl-fg-muted);\n cursor: pointer;\n padding: 0;\n}\n\n.openButton[data-hovered]:not([data-disabled]) {\n color: var(--wzl-fg);\n}\n\n.openButton svg {\n width: 10px;\n height: 10px;\n}\n\n.popover {\n min-width: var(--trigger-width);\n outline: none;\n}\n\n.listbox {\n background: var(--wzl-surface-raised);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-md);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\n padding: 4px;\n max-height: 280px;\n overflow: auto;\n outline: none;\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n}\n\n.option {\n display: flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: var(--wzl-radius-sm);\n cursor: pointer;\n color: var(--wzl-fg);\n outline: none;\n}\n\n.option[data-focused] {\n background: var(--wzl-surface-hover);\n}\n\n.option[data-selected] {\n font-weight: var(--wzl-font-weight-medium);\n}\n\n.option[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.empty {\n padding: 6px 8px;\n color: var(--wzl-fg-subtle);\n font-size: var(--wzl-font-size-sm);\n}\n","import type { ReactNode } from 'react';\nimport {\n ComboBox as RACComboBox,\n Label,\n Input as RACInput,\n Button as RACButton,\n Popover as RACPopover,\n ListBox as RACListBox,\n ListBoxItem as RACListBoxItem,\n Text,\n FieldError,\n type ComboBoxProps as RACComboBoxProps,\n type ListBoxItemProps as RACListBoxItemProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses } from '../Field/Field';\nimport s from './ComboBox.module.css';\n\n/**\n * One option in a {@link ComboBox}'s `options` list. `textValue` is the\n * plain-text form used for filtering and screen readers, needed only when\n * `label` isn't a bare string.\n */\nexport type ComboBoxOption = {\n value: string;\n label: ReactNode;\n textValue?: string;\n isDisabled?: boolean;\n};\n\ntype Key = string | number;\n\n/**\n * Props for {@link ComboBox}, on top of React Aria's `ComboBox` props, with\n * the selection key narrowed to the option value type.\n */\nexport type ComboBoxProps<T extends Key = string> = Omit<RACComboBoxProps<object>, 'children' | 'className' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange'> & {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n placeholder?: string;\n options?: ReadonlyArray<ComboBoxOption & { value: T }>;\n children?: ReactNode;\n selectedKey?: T | null;\n defaultSelectedKey?: T;\n onSelectionChange?: (key: T | null) => void;\n emptyLabel?: ReactNode;\n className?: string;\n};\n\n/**\n * Filterable single-select wrapping React Aria's ComboBox. The user can\n * type to filter; selection commits to `onSelectionChange`. When no value\n * is in the input, selection clears (key becomes null).\n */\nexport function ComboBox<T extends Key = string>(props: ComboBoxProps<T>) {\n const {\n label,\n description,\n errorMessage,\n placeholder,\n options,\n children,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n emptyLabel = 'No matches',\n className,\n ...rest\n } = props;\n\n return (\n <RACComboBox\n {...rest}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange ? (k) => onSelectionChange(k as T | null) : undefined}\n className={[s.field, fieldClasses.root, className].filter(Boolean).join(' ')}\n >\n {label !== undefined && <Label className={fieldClasses.label}>{label}</Label>}\n <div className={s.frame}>\n <RACInput placeholder={placeholder} />\n <RACButton className={s.openButton} aria-label=\"Show options\">\n <svg viewBox=\"0 0 10 10\" aria-hidden=\"true\">\n <path d=\"M2 4 L5 7 L8 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </RACButton>\n </div>\n {description !== undefined && (\n <Text slot=\"description\" className={fieldClasses.hint}>\n {description}\n </Text>\n )}\n <FieldError className={fieldClasses.error}>{errorMessage}</FieldError>\n <RACPopover className={s.popover} data-weasel-overlay=\"\">\n <RACListBox className={s.listbox} renderEmptyState={() => <div className={s.empty}>{emptyLabel}</div>}>\n {options !== undefined\n ? options.map((o) => (\n <ComboBoxItem key={String(o.value)} id={o.value} textValue={o.textValue} isDisabled={o.isDisabled}>\n {o.label}\n </ComboBoxItem>\n ))\n : children}\n </RACListBox>\n </RACPopover>\n </RACComboBox>\n );\n}\n\n/** Props for {@link ComboBoxItem}, on top of React Aria's `ListBoxItem` props. */\nexport type ComboBoxItemProps = Omit<RACListBoxItemProps, 'className'> & {\n className?: string;\n};\n\n/** One row in a {@link ComboBox}'s filtered list. */\nexport function ComboBoxItem({ className, ...rest }: ComboBoxItemProps) {\n return <RACListBoxItem {...rest} className={[s.option, className].filter(Boolean).join(' ')} />;\n}\n"],"mappings":";;;;;;;;;;;;;;ACuDA,SAAgB,EAAiC,GAAyB;CACxE,IAAM,EACJ,UACA,gBACA,iBACA,gBACA,YACA,aACA,gBACA,uBACA,sBACA,gBAAa,cACb,cACA,GAAG,MACD;AAEJ,QACE,kBAAC,GAAD;EACE,GAAI;EACS;EACO;EACpB,mBAAmB,KAAqB,MAAM,EAAkB,EAAc,GAAG,KAAA;EACjF,WAAW;GAAC,EAAE;GAAO,EAAa;GAAM;GAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;YAL9E;GAOG,MAAU,KAAA,KAAa,kBAAC,GAAD;IAAO,WAAW,EAAa;cAAQ;IAAc,CAAA;GAC7E,kBAAC,OAAD;IAAK,WAAW,EAAE;cAAlB,CACE,kBAAC,GAAD,EAAuB,gBAAe,CAAA,EACtC,kBAAC,GAAD;KAAW,WAAW,EAAE;KAAY,cAAW;eAC7C,kBAAC,OAAD;MAAK,SAAQ;MAAY,eAAY;gBACnC,kBAAC,QAAD;OAAM,GAAE;OAAiB,MAAK;OAAO,QAAO;OAAe,aAAY;OAAM,eAAc;OAAQ,gBAAe;OAAU,CAAA;MACxH,CAAA;KACI,CAAA,CACR;;GACL,MAAgB,KAAA,KACf,kBAAC,GAAD;IAAM,MAAK;IAAc,WAAW,EAAa;cAC9C;IACI,CAAA;GAET,kBAAC,GAAD;IAAY,WAAW,EAAa;cAAQ;IAA0B,CAAA;GACtE,kBAAC,GAAD;IAAY,WAAW,EAAE;IAAS,uBAAoB;cACpD,kBAAC,GAAD;KAAY,WAAW,EAAE;KAAS,wBAAwB,kBAAC,OAAD;MAAK,WAAW,EAAE;gBAAQ;MAAiB,CAAA;eAClG,MAAY,KAAA,IAMT,IALA,EAAQ,KAAK,MACX,kBAAC,GAAD;MAAoC,IAAI,EAAE;MAAO,WAAW,EAAE;MAAW,YAAY,EAAE;gBACpF,EAAE;MACU,EAFI,OAAO,EAAE,MAAM,CAEnB,CACf;KAEK,CAAA;IACF,CAAA;GACD;;;AAUlB,SAAgB,EAAa,EAAE,cAAW,GAAG,KAA2B;AACtE,QAAO,kBAAC,GAAD;EAAgB,GAAI;EAAM,WAAW,CAAC,EAAE,QAAQ,EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAI,CAAA"}
@@ -1,59 +0,0 @@
1
- import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
- import { Dialog as r, Heading as i, Modal as a, ModalOverlay as o } from "react-aria-components";
3
- var s = {
4
- overlay: "_overlay_1og89_1",
5
- modal: "_modal_1og89_29",
6
- dialog: "_dialog_1og89_43",
7
- header: "_header_1og89_51",
8
- title: "_title_1og89_60",
9
- close: "_close_1og89_68",
10
- body: "_body_1og89_90",
11
- footer: "_footer_1og89_97"
12
- };
13
- //#endregion
14
- //#region src/components/Dialog/Dialog.tsx
15
- function c(c) {
16
- let { title: l, showCloseButton: u, children: d, footer: f, role: p = "dialog", className: m, isOpen: h, onOpenChange: g, ..._ } = c, v = u ?? !!g;
17
- return /* @__PURE__ */ t(o, {
18
- ..._,
19
- isOpen: h,
20
- onOpenChange: g,
21
- className: s.overlay,
22
- "data-weasel-overlay": "",
23
- children: /* @__PURE__ */ t(a, {
24
- className: [s.modal, m].filter(Boolean).join(" "),
25
- children: /* @__PURE__ */ t(r, {
26
- role: p,
27
- className: s.dialog,
28
- children: ({ close: r }) => /* @__PURE__ */ n(e, { children: [
29
- (l !== void 0 || v) && /* @__PURE__ */ n("header", {
30
- className: s.header,
31
- children: [l !== void 0 && /* @__PURE__ */ t(i, {
32
- slot: "title",
33
- className: s.title,
34
- children: l
35
- }), v && /* @__PURE__ */ t("button", {
36
- type: "button",
37
- className: s.close,
38
- onClick: r,
39
- "aria-label": "Close dialog",
40
- children: "×"
41
- })]
42
- }),
43
- /* @__PURE__ */ t("div", {
44
- className: s.body,
45
- children: d
46
- }),
47
- f !== void 0 && /* @__PURE__ */ t("footer", {
48
- className: s.footer,
49
- children: f
50
- })
51
- ] })
52
- })
53
- })
54
- });
55
- }
56
- //#endregion
57
- export { c as t };
58
-
59
- //# sourceMappingURL=Dialog-D8pVzsw8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dialog-D8pVzsw8.js","names":[],"sources":["../../src/components/Dialog/Dialog.module.css","../../src/components/Dialog/Dialog.tsx"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n opacity: 0;\n transition: opacity var(--wzl-motion-fast);\n}\n\n.overlay[data-entering] {\n opacity: 0;\n}\n\n.overlay[data-entering][data-rac] {\n opacity: 1;\n}\n\n.overlay[data-exiting] {\n opacity: 0;\n}\n\n.overlay[data-rac]:not([data-entering]):not([data-exiting]) {\n opacity: 1;\n}\n\n.modal {\n background: var(--wzl-surface);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-md);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n max-width: min(900px, calc(100vw - 32px));\n max-height: calc(100vh - 32px);\n display: flex;\n flex-direction: column;\n outline: none;\n}\n\n.dialog {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex: 1;\n outline: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 16px;\n border-bottom: 1px solid var(--wzl-border);\n flex: 0 0 auto;\n}\n\n.title {\n flex: 1;\n margin: 0;\n font-size: var(--wzl-font-size);\n font-weight: var(--wzl-font-weight-bold);\n color: var(--wzl-fg);\n}\n\n.close {\n flex: 0 0 auto;\n width: 22px;\n height: 22px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg-muted);\n cursor: pointer;\n padding: 0;\n font-size: var(--wzl-font-size-lg);\n line-height: 1;\n}\n\n.close:hover {\n background: var(--wzl-surface-hover);\n color: var(--wzl-fg);\n}\n\n.body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: 16px;\n}\n\n.footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--wzl-border);\n flex: 0 0 auto;\n}\n","import type { ReactNode } from 'react';\nimport {\n Modal as RACModal,\n ModalOverlay,\n Dialog as RACDialog,\n Heading,\n type ModalOverlayProps,\n type DialogProps as RACDialogProps,\n} from 'react-aria-components';\nimport s from './Dialog.module.css';\n\n/** Props for {@link Dialog}, on top of React Aria's `ModalOverlay` props. */\nexport type DialogProps = Omit<ModalOverlayProps, 'children' | 'className'> & {\n /** Heading rendered in the dialog's default header. Omit when supplying\n * a custom `header` slot via children. */\n title?: ReactNode;\n /** Show the built-in close button. Defaults to true when `onOpenChange`\n * is wired so the user has an escape hatch. */\n showCloseButton?: boolean;\n /** Body content. */\n children?: ReactNode;\n /** Footer slot — typically action buttons. */\n footer?: ReactNode;\n /** ARIA role. Defaults to `dialog`. Use `alertdialog` for confirms. */\n role?: RACDialogProps['role'];\n /** Class applied to the modal box (inside the overlay). */\n className?: string;\n};\n\n/**\n * Modal dialog wrapping React Aria. Supplies a default header (title +\n * close), scrollable body, and footer slot. Pass `isOpen` + `onOpenChange`\n * for controlled visibility, or omit both and use a `<DialogTrigger>` from\n * `react-aria-components` upstream of this component.\n *\n * Escape, click-outside, focus trap, and scroll lock all come from the\n * underlying primitives.\n */\nexport function Dialog(props: DialogProps) {\n const {\n title,\n showCloseButton,\n children,\n footer,\n role = 'dialog',\n className,\n isOpen,\n onOpenChange,\n ...rest\n } = props;\n\n const showClose = showCloseButton ?? Boolean(onOpenChange);\n\n return (\n <ModalOverlay {...rest} isOpen={isOpen} onOpenChange={onOpenChange} className={s.overlay} data-weasel-overlay=\"\">\n <RACModal className={[s.modal, className].filter(Boolean).join(' ')}>\n <RACDialog role={role} className={s.dialog}>\n {({ close }) => (\n <>\n {(title !== undefined || showClose) && (\n <header className={s.header}>\n {title !== undefined && (\n <Heading slot=\"title\" className={s.title}>{title}</Heading>\n )}\n {showClose && (\n <button\n type=\"button\"\n className={s.close}\n onClick={close}\n aria-label=\"Close dialog\"\n >\n ×\n </button>\n )}\n </header>\n )}\n <div className={s.body}>{children}</div>\n {footer !== undefined && <footer className={s.footer}>{footer}</footer>}\n </>\n )}\n </RACDialog>\n </RACModal>\n </ModalOverlay>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;ACsCA,SAAgB,EAAO,GAAoB;CACzC,IAAM,EACJ,UACA,oBACA,aACA,WACA,UAAO,UACP,cACA,WACA,iBACA,GAAG,MACD,GAEE,IAAY,KAAmB,EAAQ;AAE7C,QACE,kBAAC,GAAD;EAAc,GAAI;EAAc;EAAsB;EAAc,WAAW,EAAE;EAAS,uBAAoB;YAC5G,kBAAC,GAAD;GAAU,WAAW,CAAC,EAAE,OAAO,EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;aACjE,kBAAC,GAAD;IAAiB;IAAM,WAAW,EAAE;eAChC,EAAE,eACF,kBAAA,GAAA,EAAA,UAAA;MACI,MAAU,KAAA,KAAa,MACvB,kBAAC,UAAD;MAAQ,WAAW,EAAE;gBAArB,CACG,MAAU,KAAA,KACT,kBAAC,GAAD;OAAS,MAAK;OAAQ,WAAW,EAAE;iBAAQ;OAAgB,CAAA,EAE5D,KACC,kBAAC,UAAD;OACE,MAAK;OACL,WAAW,EAAE;OACb,SAAS;OACT,cAAW;iBACZ;OAEQ,CAAA,CAEJ;;KAEX,kBAAC,OAAD;MAAK,WAAW,EAAE;MAAO;MAAe,CAAA;KACvC,MAAW,KAAA,KAAa,kBAAC,UAAD;MAAQ,WAAW,EAAE;gBAAS;MAAgB,CAAA;KACtE,EAAA,CAAA;IAEK,CAAA;GACH,CAAA;EACE,CAAA"}
@@ -1,300 +0,0 @@
1
- import { n as e, t } from "./Tooltip-Bq8Hvj4r.js";
2
- import { t as n } from "./ColorField-CCBSv8dp.js";
3
- import { t as r } from "./Checkbox-CkcngYWa.js";
4
- import { t as i } from "./Input-CxMANia3.js";
5
- import { t as a } from "./NumberField-DLw4UmF3.js";
6
- import { n as o, t as s } from "./RadioGroup-VGAaLYaR.js";
7
- import { t as c } from "./RangeSlider-DefoAOsh.js";
8
- import { t as l } from "./Select-DGafwTF0.js";
9
- import { t as u } from "./Switch-Y097LD1L.js";
10
- import { t as d } from "./Dialog-D8pVzsw8.js";
11
- import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
12
- import { isBuiltinToolPref as h } from "@weasel-js/core";
13
- import { useMemo as g } from "react";
14
- import { Focusable as _ } from "react-aria-components";
15
- //#region src/components/paintValue.ts
16
- function v(e) {
17
- if (typeof e != "object" || !e) return;
18
- let t = e;
19
- if (!(t.fill !== void 0 && t.fill !== "solid")) return typeof t.color == "string" ? t.color : void 0;
20
- }
21
- function y(e) {
22
- if (!(typeof e != "object" || !e || !("paint" in e))) return v(e.paint);
23
- }
24
- //#endregion
25
- //#region src/components/Prefs/schema.ts
26
- function b(e) {
27
- return "kind" in e;
28
- }
29
- function x(e, t) {
30
- let n = e;
31
- for (let e of t.split(".")) {
32
- if (typeof n != "object" || !n) return;
33
- n = n[e];
34
- }
35
- return n;
36
- }
37
- function S(e, t) {
38
- if (b(e)) return e.hidden && !t ? null : e;
39
- let n = e, r = {};
40
- for (let [e, i] of Object.entries(n.children)) {
41
- let n = S(i, t);
42
- n && (r[e] = n);
43
- }
44
- return Object.keys(r).length === 0 ? null : {
45
- ...e,
46
- children: r
47
- };
48
- }
49
- var C = {
50
- columns: "_columns_i4hcs_5",
51
- column: "_column_i4hcs_5",
52
- panel: "_panel_i4hcs_23",
53
- subpanel: "_subpanel_i4hcs_33",
54
- groupHeader: "_groupHeader_i4hcs_44",
55
- groupTitle: "_groupTitle_i4hcs_57",
56
- groupDesc: "_groupDesc_i4hcs_72",
57
- rows: "_rows_i4hcs_79",
58
- row: "_row_i4hcs_79",
59
- rowLabel: "_rowLabel_i4hcs_95",
60
- help: "_help_i4hcs_104",
61
- rowControl: "_rowControl_i4hcs_128",
62
- textarea: "_textarea_i4hcs_135",
63
- unrenderable: "_unrenderable_i4hcs_147",
64
- titleRow: "_titleRow_i4hcs_154",
65
- objectLeaf: "_objectLeaf_i4hcs_168",
66
- objectRow: "_objectRow_i4hcs_175",
67
- objectLabel: "_objectLabel_i4hcs_182",
68
- objectGroup: "_objectGroup_i4hcs_187"
69
- };
70
- //#endregion
71
- //#region src/components/Prefs/PrefsForm.tsx
72
- function w(e) {
73
- let { schema: t, values: n, onChange: r, renderers: i, showHidden: a = !1, className: o } = e, s = g(() => S(t, a), [t, a]), c = {
74
- values: n,
75
- onChange: r,
76
- renderers: i
77
- };
78
- return /* @__PURE__ */ p("div", {
79
- className: [C.columns, o].filter(Boolean).join(" "),
80
- children: Object.entries(s?.children ?? {}).map(([e, t]) => /* @__PURE__ */ p("div", {
81
- className: C.column,
82
- children: b(t) ? /* @__PURE__ */ p(E, {
83
- ctx: c,
84
- path: e,
85
- pref: t
86
- }) : /* @__PURE__ */ p(T, {
87
- ctx: c,
88
- group: t,
89
- path: e,
90
- depth: 0
91
- })
92
- }, e))
93
- });
94
- }
95
- function T({ ctx: e, group: t, path: n, depth: r }) {
96
- return /* @__PURE__ */ m("div", {
97
- className: r === 0 ? C.panel : C.subpanel,
98
- children: [/* @__PURE__ */ m("div", {
99
- className: C.groupHeader,
100
- children: [/* @__PURE__ */ p("h3", {
101
- className: C.groupTitle,
102
- children: t.name
103
- }), t.description !== void 0 && /* @__PURE__ */ p("p", {
104
- className: C.groupDesc,
105
- children: t.description
106
- })]
107
- }), /* @__PURE__ */ p("div", {
108
- className: C.rows,
109
- children: Object.entries(t.children).map(([t, i]) => {
110
- let a = `${n}.${t}`;
111
- return b(i) ? /* @__PURE__ */ p(E, {
112
- ctx: e,
113
- path: a,
114
- pref: i
115
- }, t) : /* @__PURE__ */ p(T, {
116
- ctx: e,
117
- group: i,
118
- path: a,
119
- depth: r + 1
120
- }, t);
121
- })
122
- })]
123
- });
124
- }
125
- function E({ ctx: n, path: r, pref: i }) {
126
- let a = x(n.values, r), o = {
127
- path: r,
128
- pref: i,
129
- value: a === void 0 ? i.default : a,
130
- setValue: (e) => n.onChange(r, e)
131
- }, s = n.renderers?.[i.kind], c = s ? s(o) : D(o);
132
- return s && c === null ? null : i.block ? /* @__PURE__ */ p(f, { children: c }) : /* @__PURE__ */ m("label", {
133
- className: C.row,
134
- children: [/* @__PURE__ */ m("span", {
135
- className: C.rowLabel,
136
- children: [i.name, i.description ? /* @__PURE__ */ m(e, { children: [/* @__PURE__ */ p(_, { children: /* @__PURE__ */ p("button", {
137
- type: "button",
138
- className: C.help,
139
- "aria-label": `About ${i.name}`,
140
- children: "ⓘ"
141
- }) }), /* @__PURE__ */ p(t, { children: i.description })] }) : null]
142
- }), /* @__PURE__ */ p("span", {
143
- className: C.rowControl,
144
- children: c
145
- })]
146
- });
147
- }
148
- function D(e, t) {
149
- let { pref: d, value: f, setValue: g } = e;
150
- if (!h(d)) return /* @__PURE__ */ m("span", {
151
- className: C.unrenderable,
152
- children: [
153
- "(",
154
- d.kind,
155
- ": no renderer)"
156
- ]
157
- });
158
- switch (d.kind) {
159
- case "boolean": {
160
- let e = !!f;
161
- return d.control === "switch" ? /* @__PURE__ */ p(u, {
162
- isSelected: e,
163
- onChange: g,
164
- "aria-label": d.name
165
- }) : /* @__PURE__ */ p(r, {
166
- isSelected: e,
167
- onChange: g,
168
- "aria-label": d.name
169
- });
170
- }
171
- case "number": {
172
- let e = typeof f == "number" && Number.isFinite(f) ? f : 0;
173
- return d.control === "slider" ? /* @__PURE__ */ p(c, {
174
- value: e,
175
- onChange: (e) => g(typeof e == "number" ? e : e[0]),
176
- minValue: d.min,
177
- maxValue: d.max,
178
- step: d.step ?? 1,
179
- "aria-label": d.name
180
- }) : /* @__PURE__ */ p(a, {
181
- value: e,
182
- onChange: g,
183
- minValue: d.min,
184
- maxValue: d.max,
185
- step: d.step ?? 1,
186
- "aria-label": d.name
187
- });
188
- }
189
- case "string": {
190
- let e = typeof f == "string" ? f : "";
191
- return d.control === "textarea" ? /* @__PURE__ */ p("textarea", {
192
- className: C.textarea,
193
- value: e,
194
- onChange: (e) => g(e.target.value),
195
- "aria-label": d.name,
196
- rows: 3
197
- }) : /* @__PURE__ */ p(i, {
198
- value: e,
199
- onChange: g,
200
- "aria-label": d.name
201
- });
202
- }
203
- case "enum": {
204
- let e = d.encoding, n = e ? e.read(f, t) : typeof f == "string" ? f : d.default, r = (n) => g(e ? e.write(n, t) : n);
205
- return d.control === "radio" ? /* @__PURE__ */ p(o, {
206
- value: n ?? null,
207
- onChange: r,
208
- "aria-label": d.name,
209
- children: d.options.map((e) => /* @__PURE__ */ p(s, {
210
- value: e.value,
211
- isDisabled: e.disabled,
212
- children: e.label
213
- }, e.value))
214
- }) : /* @__PURE__ */ p(l, {
215
- options: d.options.map((e) => ({
216
- value: e.value,
217
- label: e.label,
218
- isDisabled: e.disabled
219
- })),
220
- selectedKey: n ?? null,
221
- onSelectionChange: r,
222
- "aria-label": d.name
223
- });
224
- }
225
- case "color": return /* @__PURE__ */ p(n, {
226
- value: typeof f == "string" ? f : d.default,
227
- alpha: d.alpha,
228
- onChange: g,
229
- "aria-label": d.name
230
- });
231
- case "paint": return /* @__PURE__ */ p(n, {
232
- value: v(f) ?? v(d.default),
233
- alpha: d.alpha,
234
- onChange: (e) => g({
235
- fill: "solid",
236
- color: e
237
- }),
238
- "aria-label": d.name
239
- });
240
- case "object": {
241
- let t = d, n = typeof f == "object" && f ? f : void 0, r = (i) => {
242
- let a = [];
243
- for (let [o, s] of Object.entries(i)) {
244
- if (!b(s)) {
245
- let e = r(s.children);
246
- if (e.length === 0) continue;
247
- a.push(/* @__PURE__ */ p("h4", {
248
- className: C.objectGroup,
249
- children: s.name
250
- }, `group:${o}`), ...e);
251
- continue;
252
- }
253
- a.push(/* @__PURE__ */ m("label", {
254
- className: C.objectRow,
255
- children: [/* @__PURE__ */ p("span", {
256
- className: C.objectLabel,
257
- children: s.name
258
- }), D({
259
- path: `${e.path}.${o}`,
260
- pref: s,
261
- value: n?.[o],
262
- setValue: (e) => {
263
- g({
264
- ...n ?? t.fromScalar?.(f) ?? {},
265
- [o]: e
266
- });
267
- }
268
- }, n)]
269
- }, o));
270
- }
271
- return a;
272
- };
273
- return /* @__PURE__ */ p("div", {
274
- className: C.objectLeaf,
275
- children: r(t.children)
276
- });
277
- }
278
- default: throw Error(`PrefsForm: no control for built-in pref kind "${d.kind}"`);
279
- }
280
- }
281
- //#endregion
282
- //#region src/components/Prefs/PrefsDialog.tsx
283
- function O(e) {
284
- let { isOpen: t, onOpenChange: n, title: r, headerExtra: i, dialogClassName: a, ...o } = e;
285
- return /* @__PURE__ */ p(d, {
286
- isOpen: t,
287
- onOpenChange: n,
288
- "aria-label": typeof r == "string" ? r : o.schema.name,
289
- className: a,
290
- title: i === void 0 ? r ?? o.schema.name : /* @__PURE__ */ m("span", {
291
- className: C.titleRow,
292
- children: [/* @__PURE__ */ p("span", { children: r ?? o.schema.name }), i]
293
- }),
294
- children: /* @__PURE__ */ p(w, { ...o })
295
- });
296
- }
297
- //#endregion
298
- export { S as a, x as i, w as n, v as o, b as r, y as s, O as t };
299
-
300
- //# sourceMappingURL=Prefs-BqnwyjmH.js.map