@weasel-js/ui 1.4.3 → 1.5.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 (184) hide show
  1. package/dist/chunks/{BandEditor-CUlbOlJi.js → BandEditor-BeWO56_w.js} +1 -1
  2. package/dist/chunks/{BandEditor-CUlbOlJi.js.map → BandEditor-BeWO56_w.js.map} +1 -1
  3. package/dist/chunks/Button-CExdkQcU.js +90 -0
  4. package/dist/chunks/{Button-Cq5LBUMD.js.map → Button-CExdkQcU.js.map} +1 -1
  5. package/dist/chunks/{Callout-Dvt6lqVn.js → Callout-BPIA2is-.js} +1 -1
  6. package/dist/chunks/{Callout-Dvt6lqVn.js.map → Callout-BPIA2is-.js.map} +1 -1
  7. package/dist/chunks/{ColorField-D0OxUlvu.js → ColorField-C20aRvCg.js} +2 -2
  8. package/dist/chunks/{ColorField-D0OxUlvu.js.map → ColorField-C20aRvCg.js.map} +1 -1
  9. package/dist/chunks/ComboBox-CPES6Y1i.js +138 -0
  10. package/dist/chunks/ComboBox-CPES6Y1i.js.map +1 -0
  11. package/dist/chunks/CurveEditor-Cj0lLiyR.js +533 -0
  12. package/dist/chunks/CurveEditor-Cj0lLiyR.js.map +1 -0
  13. package/dist/chunks/{DetentSlider-BVWKdRyC.js → DetentSlider-CYicfnKr.js} +2 -2
  14. package/dist/chunks/{DetentSlider-BVWKdRyC.js.map → DetentSlider-CYicfnKr.js.map} +1 -1
  15. package/dist/chunks/{GradientEditor-C5NVILLk.js → GradientEditor-dBprHbS0.js} +3 -3
  16. package/dist/chunks/{GradientEditor-C5NVILLk.js.map → GradientEditor-dBprHbS0.js.map} +1 -1
  17. package/dist/chunks/{InlineRange-50ulExCL.js → InlineRange-CcfzY80y.js} +2 -2
  18. package/dist/chunks/{InlineRange-50ulExCL.js.map → InlineRange-CcfzY80y.js.map} +1 -1
  19. package/dist/chunks/MenuButton-Do8fFUx1.js +60 -0
  20. package/dist/chunks/MenuButton-Do8fFUx1.js.map +1 -0
  21. package/dist/chunks/NumberField-BWzhqS19.js +112 -0
  22. package/dist/chunks/NumberField-BWzhqS19.js.map +1 -0
  23. package/dist/chunks/{PaintInput-67U-COE4.js → PaintInput-DAevU7fd.js} +3 -3
  24. package/dist/chunks/{PaintInput-67U-COE4.js.map → PaintInput-DAevU7fd.js.map} +1 -1
  25. package/dist/chunks/Plot2D-CVZwQpWJ.js +292 -0
  26. package/dist/chunks/Plot2D-CVZwQpWJ.js.map +1 -0
  27. package/dist/chunks/{PointPlotter-CbDKVggs.js → PointPlotter-anTHwz8f.js} +2 -2
  28. package/dist/chunks/PointPlotter-anTHwz8f.js.map +1 -0
  29. package/dist/chunks/Prefs-CzIn-hlq.js +302 -0
  30. package/dist/chunks/Prefs-CzIn-hlq.js.map +1 -0
  31. package/dist/chunks/Properties-DJaDEJkT.js +765 -0
  32. package/dist/chunks/Properties-DJaDEJkT.js.map +1 -0
  33. package/dist/chunks/{RangeSlider-C3to8A52.js → RangeSlider-S2R3zA8N.js} +8 -8
  34. package/dist/chunks/RangeSlider-S2R3zA8N.js.map +1 -0
  35. package/dist/chunks/{ResizeHandle-BrCO0JrH.js → ResizeHandle-CiExUWP-.js} +1 -1
  36. package/dist/chunks/{ResizeHandle-BrCO0JrH.js.map → ResizeHandle-CiExUWP-.js.map} +1 -1
  37. package/dist/chunks/{SelectionPanel-BWXU8BqW.js → SelectionPanel-CbyUT3Dh.js} +206 -196
  38. package/dist/chunks/SelectionPanel-CbyUT3Dh.js.map +1 -0
  39. package/dist/chunks/{Sidebar-BvwjZiFm.js → Sidebar-Cqcfx3_s.js} +1 -1
  40. package/dist/chunks/{Sidebar-BvwjZiFm.js.map → Sidebar-Cqcfx3_s.js.map} +1 -1
  41. package/dist/chunks/{SidebarPanel-D5Ua2vyP.js → SidebarPanel-BLzBo0S2.js} +1 -1
  42. package/dist/chunks/{SidebarPanel-D5Ua2vyP.js.map → SidebarPanel-BLzBo0S2.js.map} +1 -1
  43. package/dist/chunks/{Slider-Bk_G5sSW.js → Slider--DFRC_hc.js} +15 -15
  44. package/dist/chunks/Slider--DFRC_hc.js.map +1 -0
  45. package/dist/chunks/{StatusBar-Bqv4D0dW.js → StatusBar-B9NQ8atD.js} +1 -1
  46. package/dist/chunks/{StatusBar-Bqv4D0dW.js.map → StatusBar-B9NQ8atD.js.map} +1 -1
  47. package/dist/chunks/{Tabs-BT3CDkoQ.js → Tabs-9sODd2Ut.js} +1 -1
  48. package/dist/chunks/{Tabs-BT3CDkoQ.js.map → Tabs-9sODd2Ut.js.map} +1 -1
  49. package/dist/chunks/Timeline-DOZgb1CG.js +915 -0
  50. package/dist/chunks/Timeline-DOZgb1CG.js.map +1 -0
  51. package/dist/chunks/{Toast-B7ylq7fz.js → Toast-LpN1WK8E.js} +1 -1
  52. package/dist/chunks/{Toast-B7ylq7fz.js.map → Toast-LpN1WK8E.js.map} +1 -1
  53. package/dist/chunks/{ToolButton-CtDkqUIc.js → ToolButton-B81YjdwO.js} +1 -1
  54. package/dist/chunks/{ToolButton-CtDkqUIc.js.map → ToolButton-B81YjdwO.js.map} +1 -1
  55. package/dist/chunks/{ToolGroup-zDtqt0QJ.js → ToolGroup-D7juDOC_.js} +1 -1
  56. package/dist/chunks/{ToolGroup-zDtqt0QJ.js.map → ToolGroup-D7juDOC_.js.map} +1 -1
  57. package/dist/chunks/{ToolPalette-BbrMHfQ9.js → ToolPalette-BSzmRJS7.js} +3 -3
  58. package/dist/chunks/{ToolPalette-BbrMHfQ9.js.map → ToolPalette-BSzmRJS7.js.map} +1 -1
  59. package/dist/chunks/createKeyframeLayer-AL4jP0EX.js +694 -0
  60. package/dist/chunks/createKeyframeLayer-AL4jP0EX.js.map +1 -0
  61. package/dist/chunks/number-f6PydOZK.js +52 -0
  62. package/dist/chunks/number-f6PydOZK.js.map +1 -0
  63. package/dist/chunks/range.module-CvSfABmu.js +8 -0
  64. package/dist/chunks/range.module-CvSfABmu.js.map +1 -0
  65. package/dist/chunks/{schema-CtWwGbqJ.js → schema-CPdFNeP6.js} +15 -9
  66. package/dist/chunks/schema-CPdFNeP6.js.map +1 -0
  67. package/dist/components/BandEditor/index.js +1 -1
  68. package/dist/components/Button/Button.d.ts +5 -0
  69. package/dist/components/Button/Button.d.ts.map +1 -1
  70. package/dist/components/Button/index.js +1 -1
  71. package/dist/components/Callout/index.js +1 -1
  72. package/dist/components/ColorField/index.js +1 -1
  73. package/dist/components/ComboBox/ComboBox.d.ts +36 -0
  74. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  75. package/dist/components/ComboBox/index.d.ts +1 -1
  76. package/dist/components/ComboBox/index.d.ts.map +1 -1
  77. package/dist/components/ComboBox/index.js +1 -1
  78. package/dist/components/CurveEditor/CurveEditor.d.ts +4 -2
  79. package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
  80. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts +8 -1
  81. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
  82. package/dist/components/CurveEditor/createFunctionLayer.d.ts +2 -0
  83. package/dist/components/CurveEditor/createFunctionLayer.d.ts.map +1 -1
  84. package/dist/components/CurveEditor/createKeyframeLayer.d.ts +70 -0
  85. package/dist/components/CurveEditor/createKeyframeLayer.d.ts.map +1 -0
  86. package/dist/components/CurveEditor/index.d.ts +3 -1
  87. package/dist/components/CurveEditor/index.d.ts.map +1 -1
  88. package/dist/components/CurveEditor/index.js +3 -2
  89. package/dist/components/CurveEditor/layerTypes.d.ts +8 -3
  90. package/dist/components/CurveEditor/layerTypes.d.ts.map +1 -1
  91. package/dist/components/CurveEditor/snap.d.ts +3 -0
  92. package/dist/components/CurveEditor/snap.d.ts.map +1 -0
  93. package/dist/components/DetentSlider/index.js +1 -1
  94. package/dist/components/GradientEditor/index.js +1 -1
  95. package/dist/components/InlineRange/index.js +1 -1
  96. package/dist/components/MenuButton/MenuButton.d.ts +29 -0
  97. package/dist/components/MenuButton/MenuButton.d.ts.map +1 -0
  98. package/dist/components/MenuButton/index.d.ts +3 -0
  99. package/dist/components/MenuButton/index.d.ts.map +1 -0
  100. package/dist/components/MenuButton/index.js +2 -0
  101. package/dist/components/NumberField/UnitField.d.ts +30 -0
  102. package/dist/components/NumberField/UnitField.d.ts.map +1 -0
  103. package/dist/components/NumberField/index.d.ts +2 -0
  104. package/dist/components/NumberField/index.d.ts.map +1 -1
  105. package/dist/components/NumberField/index.js +2 -2
  106. package/dist/components/PaintInput/index.js +1 -1
  107. package/dist/components/Plot2D/Plot2D.d.ts +38 -2
  108. package/dist/components/Plot2D/Plot2D.d.ts.map +1 -1
  109. package/dist/components/Plot2D/index.d.ts +2 -1
  110. package/dist/components/Plot2D/index.d.ts.map +1 -1
  111. package/dist/components/Plot2D/index.js +2 -2
  112. package/dist/components/Plot2D/ticks.d.ts +43 -0
  113. package/dist/components/Plot2D/ticks.d.ts.map +1 -0
  114. package/dist/components/PointPlotter/PointPlotter.d.ts +3 -1
  115. package/dist/components/PointPlotter/PointPlotter.d.ts.map +1 -1
  116. package/dist/components/PointPlotter/index.js +1 -1
  117. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  118. package/dist/components/Prefs/index.d.ts +1 -1
  119. package/dist/components/Prefs/index.d.ts.map +1 -1
  120. package/dist/components/Prefs/index.js +3 -3
  121. package/dist/components/Prefs/schema.d.ts +5 -2
  122. package/dist/components/Prefs/schema.d.ts.map +1 -1
  123. package/dist/components/Properties/PropertyPanel.d.ts +42 -8
  124. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  125. package/dist/components/Properties/index.js +1 -1
  126. package/dist/components/RangeSlider/RangeSlider.d.ts +5 -0
  127. package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -1
  128. package/dist/components/RangeSlider/index.js +1 -1
  129. package/dist/components/ResizeHandle/index.js +1 -1
  130. package/dist/components/SelectionPanel/index.js +1 -1
  131. package/dist/components/Sidebar/index.js +1 -1
  132. package/dist/components/SidebarPanel/index.js +1 -1
  133. package/dist/components/Slider/index.js +1 -1
  134. package/dist/components/StatusBar/index.js +1 -1
  135. package/dist/components/Tabs/index.js +1 -1
  136. package/dist/components/Timeline/Lane.d.ts +9 -7
  137. package/dist/components/Timeline/Lane.d.ts.map +1 -1
  138. package/dist/components/Timeline/LaneGraph.d.ts +24 -0
  139. package/dist/components/Timeline/LaneGraph.d.ts.map +1 -0
  140. package/dist/components/Timeline/Ruler.d.ts.map +1 -1
  141. package/dist/components/Timeline/Timeline.d.ts.map +1 -1
  142. package/dist/components/Timeline/index.js +1 -1
  143. package/dist/components/Timeline/keys.d.ts +4 -3
  144. package/dist/components/Timeline/keys.d.ts.map +1 -1
  145. package/dist/components/Timeline/timeScale.d.ts +2 -0
  146. package/dist/components/Timeline/timeScale.d.ts.map +1 -1
  147. package/dist/components/Toast/index.js +1 -1
  148. package/dist/components/ToolButton/index.js +1 -1
  149. package/dist/components/ToolGroup/index.js +1 -1
  150. package/dist/components/ToolPalette/index.js +1 -1
  151. package/dist/format/number.d.ts +16 -0
  152. package/dist/format/number.d.ts.map +1 -1
  153. package/dist/index.d.ts +4 -1
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +99 -64
  156. package/dist/index.js.map +1 -1
  157. package/dist/style.css +1 -1
  158. package/dist/useAsyncOptions.d.ts +38 -0
  159. package/dist/useAsyncOptions.d.ts.map +1 -0
  160. package/package.json +7 -6
  161. package/dist/chunks/Button-Cq5LBUMD.js +0 -87
  162. package/dist/chunks/ComboBox-BBRRWvdc.js +0 -107
  163. package/dist/chunks/ComboBox-BBRRWvdc.js.map +0 -1
  164. package/dist/chunks/CurveEditor-DtjdpJVB.js +0 -784
  165. package/dist/chunks/CurveEditor-DtjdpJVB.js.map +0 -1
  166. package/dist/chunks/NumberField-DBowmOfe.js +0 -62
  167. package/dist/chunks/NumberField-DBowmOfe.js.map +0 -1
  168. package/dist/chunks/Plot2D-C97pO13t.js +0 -134
  169. package/dist/chunks/Plot2D-C97pO13t.js.map +0 -1
  170. package/dist/chunks/PointPlotter-CbDKVggs.js.map +0 -1
  171. package/dist/chunks/Prefs-D0l0PXLF.js +0 -294
  172. package/dist/chunks/Prefs-D0l0PXLF.js.map +0 -1
  173. package/dist/chunks/Properties-CMLua9mU.js +0 -746
  174. package/dist/chunks/Properties-CMLua9mU.js.map +0 -1
  175. package/dist/chunks/RangeSlider-C3to8A52.js.map +0 -1
  176. package/dist/chunks/SelectionPanel-BWXU8BqW.js.map +0 -1
  177. package/dist/chunks/Slider-Bk_G5sSW.js.map +0 -1
  178. package/dist/chunks/Timeline-BmYwYjXd.js +0 -908
  179. package/dist/chunks/Timeline-BmYwYjXd.js.map +0 -1
  180. package/dist/chunks/number-Bv1nbhOJ.js +0 -18
  181. package/dist/chunks/number-Bv1nbhOJ.js.map +0 -1
  182. package/dist/chunks/range.module-CgURq-Ua.js +0 -8
  183. package/dist/chunks/range.module-CgURq-Ua.js.map +0 -1
  184. package/dist/chunks/schema-CtWwGbqJ.js.map +0 -1
@@ -1,107 +0,0 @@
1
- import { r as e } from "./portalHost-CjpCnuGU.js";
2
- import { n as t } from "./Field-dzlxOGxT.js";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
- import { Children as i, isValidElement as a } from "react";
5
- import { Button as o, ComboBox as s, FieldError as c, Input as l, Label as u, ListBox as d, ListBoxItem as f, Popover as p, Text as m } from "react-aria-components";
6
- var h = {
7
- field: "_field_ijbwo_1",
8
- frame: "_frame_ijbwo_9",
9
- openButton: "_openButton_ijbwo_53",
10
- popover: "_popover_ijbwo_75",
11
- listbox: "_listbox_ijbwo_80",
12
- option: "_option_ijbwo_93",
13
- empty: "_empty_ijbwo_116",
14
- fit: "_fit_ijbwo_125",
15
- sizer: "_sizer_ijbwo_146"
16
- };
17
- //#endregion
18
- //#region src/components/ComboBox/ComboBox.tsx
19
- function g(i) {
20
- let { label: a, description: f, errorMessage: g, placeholder: y, options: b, children: x, selectedKey: S, defaultSelectedKey: C, onSelectionChange: w, emptyLabel: T = "No matches", width: E = "fill", className: D, portalContainer: O, ...k } = i, { anchor: A, portalProps: j } = e(O);
21
- return /* @__PURE__ */ r(s, {
22
- ...k,
23
- selectedKey: S,
24
- defaultSelectedKey: C,
25
- onSelectionChange: w ? (e) => w(e) : void 0,
26
- className: [
27
- h.field,
28
- E === "fit" && h.fit,
29
- t.root,
30
- D
31
- ].filter(Boolean).join(" "),
32
- children: [
33
- A,
34
- a !== void 0 && /* @__PURE__ */ n(u, {
35
- className: t.label,
36
- children: a
37
- }),
38
- /* @__PURE__ */ r("div", {
39
- className: h.frame,
40
- children: [
41
- /* @__PURE__ */ n(l, { placeholder: y }),
42
- E === "fit" && /* @__PURE__ */ r("span", {
43
- className: h.sizer,
44
- "aria-hidden": "true",
45
- children: [y !== void 0 && /* @__PURE__ */ n("span", { children: y }), _(b, x).map((e, t) => /* @__PURE__ */ n("span", { children: e }, t))]
46
- }),
47
- /* @__PURE__ */ n(o, {
48
- className: h.openButton,
49
- "aria-label": "Show options",
50
- children: /* @__PURE__ */ n("svg", {
51
- viewBox: "0 0 10 10",
52
- "aria-hidden": "true",
53
- children: /* @__PURE__ */ n("path", {
54
- d: "M2 4 L5 7 L8 4",
55
- fill: "none",
56
- stroke: "currentColor",
57
- strokeWidth: "1.5",
58
- strokeLinecap: "round",
59
- strokeLinejoin: "round"
60
- })
61
- })
62
- })
63
- ]
64
- }),
65
- f !== void 0 && /* @__PURE__ */ n(m, {
66
- slot: "description",
67
- className: t.hint,
68
- children: f
69
- }),
70
- /* @__PURE__ */ n(c, {
71
- className: t.error,
72
- children: g
73
- }),
74
- /* @__PURE__ */ n(p, {
75
- className: h.popover,
76
- "data-weasel-overlay": "",
77
- ...j,
78
- children: /* @__PURE__ */ n(d, {
79
- className: h.listbox,
80
- renderEmptyState: () => /* @__PURE__ */ n("div", {
81
- className: h.empty,
82
- children: T
83
- }),
84
- children: b === void 0 ? x : b.map((e) => /* @__PURE__ */ n(v, {
85
- id: e.value,
86
- textValue: e.textValue,
87
- isDisabled: e.isDisabled,
88
- children: e.label
89
- }, String(e.value)))
90
- })
91
- })
92
- ]
93
- });
94
- }
95
- function _(e, t) {
96
- return e === void 0 ? i.toArray(t).map((e) => a(e) ? e.props.children : e) : e.map((e) => e.label);
97
- }
98
- function v({ className: e, ...t }) {
99
- return /* @__PURE__ */ n(f, {
100
- ...t,
101
- className: [h.option, e].filter(Boolean).join(" ")
102
- });
103
- }
104
- //#endregion
105
- export { v as n, g as t };
106
-
107
- //# sourceMappingURL=ComboBox-BBRRWvdc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComboBox-BBRRWvdc.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\n/* `width='fit'`: a hidden stack of every option label shares the input's grid\n cell, so the field is wide enough for whichever option is chosen and takes\n no more of the row than that. */\n.fit {\n width: auto;\n max-width: 100%;\n}\n\n.fit .frame {\n display: grid;\n grid-template-columns: auto auto;\n width: fit-content;\n max-width: 100%;\n}\n\n/* `width: 0` keeps the input's 20-character intrinsic width out of the track\n sizing — the sizer is what the column measures — and `min-width` then\n stretches it back across whatever that came to. */\n.fit .frame input {\n grid-area: 1 / 1;\n width: 0;\n min-width: 100%;\n}\n\n.fit .sizer {\n grid-area: 1 / 1;\n}\n\n.fit .openButton {\n grid-area: 1 / 2;\n}\n\n.sizer {\n display: grid;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n white-space: nowrap;\n padding: 0 var(--wzl-field-pad-x);\n}\n\n.sizer > * {\n grid-area: 1 / 1;\n}\n","import { Children, isValidElement, 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 { useOverlayPortal, type OverlayPortalProps } from '../../overlays/portalHost';\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 /**\n * `'fill'` (the default) takes the width of whatever row the combo box sits\n * in. `'fit'` sizes the input to its widest option, so it neither swallows a\n * toolbar's slack nor cuts a selection off once one is made.\n */\n width?: 'fill' | 'fit';\n className?: string;\n} & OverlayPortalProps;\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 width = 'fill',\n className,\n portalContainer,\n ...rest\n } = props;\n\n const { anchor, portalProps } = useOverlayPortal(portalContainer);\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, width === 'fit' && s.fit, fieldClasses.root, className]\n .filter(Boolean)\n .join(' ')}\n >\n {anchor}\n {label !== undefined && <Label className={fieldClasses.label}>{label}</Label>}\n <div className={s.frame}>\n <RACInput placeholder={placeholder} />\n {width === 'fit' && (\n <span className={s.sizer} aria-hidden=\"true\">\n {placeholder !== undefined && <span>{placeholder}</span>}\n {optionLabels(options, children).map((l, i) => (\n <span key={i}>{l}</span>\n ))}\n </span>\n )}\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=\"\" {...portalProps}>\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/**\n * The labels a `width='fit'` input measures itself against. In the children\n * form the label sits one element deep, inside a `ComboBoxItem`.\n */\nfunction optionLabels(\n options: ReadonlyArray<ComboBoxOption> | undefined,\n children: ReactNode,\n): ReactNode[] {\n if (options !== undefined) return options.map((o) => o.label);\n return Children.toArray(children).map((c) =>\n isValidElement<{ children?: ReactNode }>(c) ? c.props.children : c,\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":";;;;;;;;;;;;;;;;;;AC8DA,SAAgB,EAAiC,GAAyB;CACxE,IAAM,EACJ,UACA,gBACA,iBACA,gBACA,YACA,aACA,gBACA,uBACA,sBACA,gBAAa,cACb,WAAQ,QACR,cACA,oBACA,GAAG,MACD,GAEE,EAAE,WAAQ,mBAAgB,EAAiB,EAAgB;AAEjE,QACE,kBAAC,GAAD;EACE,GAAI;EACS;EACO;EACpB,mBAAmB,KAAqB,MAAM,EAAkB,EAAc,GAAG,KAAA;EACjF,WAAW;GAAC,EAAE;GAAO,MAAU,SAAS,EAAE;GAAK,EAAa;GAAM;GAAU,CACzE,OAAO,QAAQ,CACf,KAAK,IAAI;YAPd;GASG;GACA,MAAU,KAAA,KAAa,kBAAC,GAAD;IAAO,WAAW,EAAa;cAAQ;IAAc,CAAA;GAC7E,kBAAC,OAAD;IAAK,WAAW,EAAE;cAAlB;KACE,kBAAC,GAAD,EAAuB,gBAAe,CAAA;KACrC,MAAU,SACT,kBAAC,QAAD;MAAM,WAAW,EAAE;MAAO,eAAY;gBAAtC,CACG,MAAgB,KAAA,KAAa,kBAAC,QAAD,EAAA,UAAO,GAAmB,CAAA,EACvD,EAAa,GAAS,EAAS,CAAC,KAAK,GAAG,MACvC,kBAAC,QAAD,EAAA,UAAe,GAAS,EAAb,EAAa,CACxB,CACG;;KAET,kBAAC,GAAD;MAAW,WAAW,EAAE;MAAY,cAAW;gBAC7C,kBAAC,OAAD;OAAK,SAAQ;OAAY,eAAY;iBACnC,kBAAC,QAAD;QAAM,GAAE;QAAiB,MAAK;QAAO,QAAO;QAAe,aAAY;QAAM,eAAc;QAAQ,gBAAe;QAAU,CAAA;OACxH,CAAA;MACI,CAAA;KACR;;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;IAAG,GAAI;cAC3D,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;;;AAQlB,SAAS,EACP,GACA,GACa;AAEb,QADI,MAAY,KAAA,IACT,EAAS,QAAQ,EAAS,CAAC,KAAK,MACrC,EAAyC,EAAE,GAAG,EAAE,MAAM,WAAW,EAClE,GAHiC,EAAQ,KAAK,MAAM,EAAE,MAAM;;AAY/D,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"}