@reactzero/combo 0.1.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.
- package/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +188 -0
- package/dist/Combo-Cx3kSkop.cjs +2 -0
- package/dist/Combo-Cx3kSkop.cjs.map +1 -0
- package/dist/Combo-qs6_L512.js +439 -0
- package/dist/Combo-qs6_L512.js.map +1 -0
- package/dist/components/Combo.d.ts +71 -0
- package/dist/components/Combo.d.ts.map +1 -0
- package/dist/components/LiveRegion.d.ts +7 -0
- package/dist/components/LiveRegion.d.ts.map +1 -0
- package/dist/components/Portal.d.ts +8 -0
- package/dist/components/Portal.d.ts.map +1 -0
- package/dist/components/slots/CheckboxItem.d.ts +38 -0
- package/dist/components/slots/CheckboxItem.d.ts.map +1 -0
- package/dist/components/slots/CustomItem.d.ts +35 -0
- package/dist/components/slots/CustomItem.d.ts.map +1 -0
- package/dist/components/slots/FooterActions.d.ts +42 -0
- package/dist/components/slots/FooterActions.d.ts.map +1 -0
- package/dist/components/slots/GroupSeparator.d.ts +30 -0
- package/dist/components/slots/GroupSeparator.d.ts.map +1 -0
- package/dist/components/slots/index.d.ts +9 -0
- package/dist/components/slots/index.d.ts.map +1 -0
- package/dist/components/tabs/TabbedCombo.d.ts +45 -0
- package/dist/components/tabs/TabbedCombo.d.ts.map +1 -0
- package/dist/components/tabs/index.d.ts +3 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/core/announce.d.ts +10 -0
- package/dist/core/announce.d.ts.map +1 -0
- package/dist/core/ids.d.ts +13 -0
- package/dist/core/ids.d.ts.map +1 -0
- package/dist/core/keyboard.d.ts +13 -0
- package/dist/core/keyboard.d.ts.map +1 -0
- package/dist/core/scroll.d.ts +5 -0
- package/dist/core/scroll.d.ts.map +1 -0
- package/dist/core/stateMachine.d.ts +32 -0
- package/dist/core/stateMachine.d.ts.map +1 -0
- package/dist/core/utils.d.ts +26 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/defaults-iFGq2Q-7.cjs +2 -0
- package/dist/defaults-iFGq2Q-7.cjs.map +1 -0
- package/dist/defaults-rhC5DFTg.js +53 -0
- package/dist/defaults-rhC5DFTg.js.map +1 -0
- package/dist/entries/hook-bare.d.ts +4 -0
- package/dist/entries/hook-bare.d.ts.map +1 -0
- package/dist/entries/hook.d.ts +4 -0
- package/dist/entries/hook.d.ts.map +1 -0
- package/dist/entries/icons.d.ts +4 -0
- package/dist/entries/icons.d.ts.map +1 -0
- package/dist/entries/index.d.ts +9 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/position.d.ts +3 -0
- package/dist/entries/position.d.ts.map +1 -0
- package/dist/entries/slots.d.ts +9 -0
- package/dist/entries/slots.d.ts.map +1 -0
- package/dist/entries/tabs.d.ts +4 -0
- package/dist/entries/tabs.d.ts.map +1 -0
- package/dist/hook-bare.cjs +2 -0
- package/dist/hook-bare.cjs.map +1 -0
- package/dist/hook-bare.js +9 -0
- package/dist/hook-bare.js.map +1 -0
- package/dist/hook.cjs +2 -0
- package/dist/hook.cjs.map +1 -0
- package/dist/hook.js +11 -0
- package/dist/hook.js.map +1 -0
- package/dist/hooks/useCombo.d.ts +3 -0
- package/dist/hooks/useCombo.d.ts.map +1 -0
- package/dist/hooks/usePosition.d.ts +16 -0
- package/dist/hooks/usePosition.d.ts.map +1 -0
- package/dist/icons/defaults.d.ts +16 -0
- package/dist/icons/defaults.d.ts.map +1 -0
- package/dist/icons/icons.d.ts +30 -0
- package/dist/icons/icons.d.ts.map +1 -0
- package/dist/icons-Ch1Q5AhF.js +40 -0
- package/dist/icons-Ch1Q5AhF.js.map +1 -0
- package/dist/icons-vzkEacAb.cjs +2 -0
- package/dist/icons-vzkEacAb.cjs.map +1 -0
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.js +20 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/position.cjs +2 -0
- package/dist/position.cjs.map +1 -0
- package/dist/position.js +5 -0
- package/dist/position.js.map +1 -0
- package/dist/slots.cjs +2 -0
- package/dist/slots.cjs.map +1 -0
- package/dist/slots.js +92 -0
- package/dist/slots.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/styles/base.css +205 -0
- package/dist/styles/checkbox.css +36 -0
- package/dist/styles/chips.css +71 -0
- package/dist/styles/custom-item.css +64 -0
- package/dist/styles/footer.css +73 -0
- package/dist/styles/groups.css +23 -0
- package/dist/styles/meta.css +30 -0
- package/dist/styles/radio.css +36 -0
- package/dist/styles/select.css +35 -0
- package/dist/styles/states.css +22 -0
- package/dist/tabs.cjs +2 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.js +132 -0
- package/dist/tabs.js.map +1 -0
- package/dist/themes/dark.css +96 -0
- package/dist/themes/default.css +126 -0
- package/dist/themes/high-contrast.css +98 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/useCombo-D_vriwVz.cjs +2 -0
- package/dist/useCombo-D_vriwVz.cjs.map +1 -0
- package/dist/useCombo-gPeBdkRf.js +887 -0
- package/dist/useCombo-gPeBdkRf.js.map +1 -0
- package/dist/usePosition-6GfutqGX.cjs +2 -0
- package/dist/usePosition-6GfutqGX.cjs.map +1 -0
- package/dist/usePosition-DVw8IlwA.js +36 -0
- package/dist/usePosition-DVw8IlwA.js.map +1 -0
- package/package.json +219 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { jsx as r, Fragment as Te, jsxs as s } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as oe, useEffect as Ie, useMemo as B } from "react";
|
|
3
|
+
import { u as Pe } from "./useCombo-gPeBdkRf.js";
|
|
4
|
+
import { u as we } from "./usePosition-DVw8IlwA.js";
|
|
5
|
+
import { createPortal as De } from "react-dom";
|
|
6
|
+
function Me({ children: d, target: p, disabled: h }) {
|
|
7
|
+
if (h) return /* @__PURE__ */ r(Te, { children: d });
|
|
8
|
+
const m = p ?? (typeof document < "u" ? document.body : null);
|
|
9
|
+
return m ? De(d, m) : null;
|
|
10
|
+
}
|
|
11
|
+
const Ce = {
|
|
12
|
+
position: "absolute",
|
|
13
|
+
width: "1px",
|
|
14
|
+
height: "1px",
|
|
15
|
+
padding: 0,
|
|
16
|
+
margin: "-1px",
|
|
17
|
+
overflow: "hidden",
|
|
18
|
+
clip: "rect(0,0,0,0)",
|
|
19
|
+
whiteSpace: "nowrap",
|
|
20
|
+
borderWidth: 0
|
|
21
|
+
};
|
|
22
|
+
function Le({
|
|
23
|
+
message: d,
|
|
24
|
+
id: p,
|
|
25
|
+
clearAfterMs: h = 3e3
|
|
26
|
+
}) {
|
|
27
|
+
const m = oe(null);
|
|
28
|
+
return Ie(() => {
|
|
29
|
+
if (!m.current || !d) return;
|
|
30
|
+
const b = m.current;
|
|
31
|
+
b.textContent = "";
|
|
32
|
+
const P = requestAnimationFrame(() => {
|
|
33
|
+
b.textContent = d;
|
|
34
|
+
}), w = setTimeout(() => {
|
|
35
|
+
b.textContent = "";
|
|
36
|
+
}, h);
|
|
37
|
+
return () => {
|
|
38
|
+
cancelAnimationFrame(P), clearTimeout(w);
|
|
39
|
+
};
|
|
40
|
+
}, [d, h]), /* @__PURE__ */ r(
|
|
41
|
+
"div",
|
|
42
|
+
{
|
|
43
|
+
ref: m,
|
|
44
|
+
id: p,
|
|
45
|
+
role: "status",
|
|
46
|
+
"aria-live": "polite",
|
|
47
|
+
"aria-atomic": "true",
|
|
48
|
+
style: Ce
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function i(...d) {
|
|
53
|
+
return d.filter(Boolean).join(" ");
|
|
54
|
+
}
|
|
55
|
+
function $e(d) {
|
|
56
|
+
const {
|
|
57
|
+
placeholder: p,
|
|
58
|
+
label: h,
|
|
59
|
+
theme: m,
|
|
60
|
+
itemVariant: b,
|
|
61
|
+
renderItem: P,
|
|
62
|
+
renderEmpty: w,
|
|
63
|
+
renderLoading: U,
|
|
64
|
+
renderError: A,
|
|
65
|
+
renderFooter: G,
|
|
66
|
+
renderTrigger: W,
|
|
67
|
+
renderGroupHeader: q,
|
|
68
|
+
renderListHeader: J,
|
|
69
|
+
hintText: H,
|
|
70
|
+
errorText: D,
|
|
71
|
+
minSelected: f,
|
|
72
|
+
onInputKeyDown: Q,
|
|
73
|
+
classNames: n = {},
|
|
74
|
+
...t
|
|
75
|
+
} = d, ne = B(() => t.groups && !t.items?.length ? t.groups.flatMap((e) => e.items) : t.items, [t.groups, t.items]), ae = Pe({ ...t, items: ne }), {
|
|
76
|
+
isOpen: l,
|
|
77
|
+
selectedItem: M,
|
|
78
|
+
highlightedIndex: le,
|
|
79
|
+
filteredItems: N,
|
|
80
|
+
hasSelection: z,
|
|
81
|
+
triggerLabel: C,
|
|
82
|
+
isLoading: v,
|
|
83
|
+
isError: y,
|
|
84
|
+
error: ie,
|
|
85
|
+
getLabelProps: se,
|
|
86
|
+
getInputProps: k,
|
|
87
|
+
getToggleButtonProps: E,
|
|
88
|
+
getClearButtonProps: $,
|
|
89
|
+
getMenuProps: ce,
|
|
90
|
+
getItemProps: X,
|
|
91
|
+
getGroupProps: de,
|
|
92
|
+
getChevronProps: L,
|
|
93
|
+
getTriggerProps: Y,
|
|
94
|
+
icons: O,
|
|
95
|
+
chevronIcon: R,
|
|
96
|
+
inputRef: Z,
|
|
97
|
+
listboxRef: me,
|
|
98
|
+
triggerRef: ue,
|
|
99
|
+
inputValue: ge,
|
|
100
|
+
openMenu: pe,
|
|
101
|
+
closeMenu: he,
|
|
102
|
+
clearSelection: be,
|
|
103
|
+
removeItem: fe,
|
|
104
|
+
selectedItems: g
|
|
105
|
+
} = ae, F = t.itemToString ?? ((e) => e != null ? String(e) : ""), u = t.itemToValue ?? ((e) => typeof e == "object" && e != null && "value" in e ? e.value : String(e)), ve = t.isItemDisabled ?? (() => !1), _ = t.variant === "select", x = t.mode === "multi", V = y || !!D, ee = oe(null), T = we({
|
|
106
|
+
triggerRef: _ ? ue : x ? ee : Z,
|
|
107
|
+
listboxRef: me,
|
|
108
|
+
isOpen: l
|
|
109
|
+
}), Ne = B(() => {
|
|
110
|
+
if (!l) return "";
|
|
111
|
+
if (v) return "Loading options...";
|
|
112
|
+
const e = N.length;
|
|
113
|
+
return e === 0 ? "No options available" : `${e} option${e !== 1 ? "s" : ""} available`;
|
|
114
|
+
}, [l, v, N.length]), ze = m ? { "data-rzero-theme": m } : {}, S = t.disabled === !0, te = B(() => {
|
|
115
|
+
const e = /* @__PURE__ */ new Map();
|
|
116
|
+
return N.forEach((o, a) => {
|
|
117
|
+
e.set(u(o), a);
|
|
118
|
+
}), e;
|
|
119
|
+
}, [N, u]), j = B(() => t.groups ? t.groups.map((e, o) => {
|
|
120
|
+
const a = e.items.map((c) => ({
|
|
121
|
+
item: c,
|
|
122
|
+
globalIndex: te.get(u(c))
|
|
123
|
+
})).filter(
|
|
124
|
+
(c) => c.globalIndex !== void 0
|
|
125
|
+
);
|
|
126
|
+
return { group: e, groupIdx: o, items: a };
|
|
127
|
+
}).filter((e) => e.items.length > 0) : null, [t.groups, te, u]);
|
|
128
|
+
function re(e, o) {
|
|
129
|
+
const a = le === o, c = x ? g.some((xe) => u(xe) === u(e)) : M != null && u(M) === u(e), I = ve(e), K = b && b !== "default" ? b : void 0;
|
|
130
|
+
return P ? /* @__PURE__ */ r(
|
|
131
|
+
"li",
|
|
132
|
+
{
|
|
133
|
+
...X({ item: e, index: o, variant: K }),
|
|
134
|
+
className: i(
|
|
135
|
+
"rzero-combo-item",
|
|
136
|
+
n.item,
|
|
137
|
+
a && n.itemHighlighted,
|
|
138
|
+
c && n.itemSelected,
|
|
139
|
+
I && n.itemDisabled
|
|
140
|
+
),
|
|
141
|
+
children: P({
|
|
142
|
+
item: e,
|
|
143
|
+
index: o,
|
|
144
|
+
isHighlighted: a,
|
|
145
|
+
isSelected: c,
|
|
146
|
+
isDisabled: I
|
|
147
|
+
})
|
|
148
|
+
},
|
|
149
|
+
o
|
|
150
|
+
) : /* @__PURE__ */ s(
|
|
151
|
+
"li",
|
|
152
|
+
{
|
|
153
|
+
...X({ item: e, index: o, variant: K }),
|
|
154
|
+
className: i(
|
|
155
|
+
"rzero-combo-item",
|
|
156
|
+
n.item,
|
|
157
|
+
a && n.itemHighlighted,
|
|
158
|
+
c && n.itemSelected,
|
|
159
|
+
I && n.itemDisabled
|
|
160
|
+
),
|
|
161
|
+
children: [
|
|
162
|
+
/* @__PURE__ */ r("span", { children: F(e) }),
|
|
163
|
+
c && !K && /* @__PURE__ */ r("span", { className: "rzero-combo-check", "aria-hidden": "true", children: O.check })
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
o
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
function Se() {
|
|
170
|
+
if (x)
|
|
171
|
+
return /* @__PURE__ */ s(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
ref: ee,
|
|
175
|
+
className: i("rzero-combo-trigger", "rzero-combo-trigger--multi", n.trigger),
|
|
176
|
+
"data-rzero-trigger": "",
|
|
177
|
+
"data-disabled": S || void 0,
|
|
178
|
+
"data-readonly": t.readOnly || void 0,
|
|
179
|
+
"data-loading": t.disabled === "loading" || void 0,
|
|
180
|
+
"data-error": V || void 0,
|
|
181
|
+
onClick: (o) => {
|
|
182
|
+
if (S || t.readOnly) return;
|
|
183
|
+
const a = o.target;
|
|
184
|
+
a.tagName === "INPUT" || a.tagName === "BUTTON" || a.closest("button") || (Z.current?.focus(), l || pe());
|
|
185
|
+
},
|
|
186
|
+
onMouseDown: (o) => {
|
|
187
|
+
o.target.tagName !== "INPUT" && o.preventDefault();
|
|
188
|
+
},
|
|
189
|
+
children: [
|
|
190
|
+
/* @__PURE__ */ s("div", { className: "rzero-combo-trigger-content", children: [
|
|
191
|
+
g.map((o) => /* @__PURE__ */ s("span", { className: "rzero-combo-chip", children: [
|
|
192
|
+
/* @__PURE__ */ r("span", { className: "rzero-combo-chip-label", children: F(o) }),
|
|
193
|
+
!S && !t.readOnly && /* @__PURE__ */ r(
|
|
194
|
+
"button",
|
|
195
|
+
{
|
|
196
|
+
type: "button",
|
|
197
|
+
className: "rzero-combo-chip-remove",
|
|
198
|
+
"aria-label": `Remove ${F(o)}`,
|
|
199
|
+
onMouseDown: (a) => a.preventDefault(),
|
|
200
|
+
onClick: (a) => {
|
|
201
|
+
a.stopPropagation(), fe(o);
|
|
202
|
+
},
|
|
203
|
+
children: /* @__PURE__ */ r("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", children: /* @__PURE__ */ r("path", { d: "M18 6 6 18M6 6l12 12" }) })
|
|
204
|
+
}
|
|
205
|
+
)
|
|
206
|
+
] }, String(u(o)))),
|
|
207
|
+
/* @__PURE__ */ r(
|
|
208
|
+
"input",
|
|
209
|
+
{
|
|
210
|
+
...k({
|
|
211
|
+
placeholder: g.length === 0 ? p : "",
|
|
212
|
+
className: n.input,
|
|
213
|
+
onKeyDown: Q
|
|
214
|
+
})
|
|
215
|
+
}
|
|
216
|
+
)
|
|
217
|
+
] }),
|
|
218
|
+
/* @__PURE__ */ s("div", { className: "rzero-combo-trigger-actions", children: [
|
|
219
|
+
z && !S && !t.readOnly && /* @__PURE__ */ r(
|
|
220
|
+
"button",
|
|
221
|
+
{
|
|
222
|
+
...$({
|
|
223
|
+
className: n.clearButton
|
|
224
|
+
}),
|
|
225
|
+
children: O.clear
|
|
226
|
+
}
|
|
227
|
+
),
|
|
228
|
+
/* @__PURE__ */ r(
|
|
229
|
+
"button",
|
|
230
|
+
{
|
|
231
|
+
...E({
|
|
232
|
+
className: n.toggleButton
|
|
233
|
+
}),
|
|
234
|
+
children: /* @__PURE__ */ r("span", { ...L(), children: R })
|
|
235
|
+
}
|
|
236
|
+
)
|
|
237
|
+
] })
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
);
|
|
241
|
+
const e = z && l && ge !== C;
|
|
242
|
+
return /* @__PURE__ */ s(
|
|
243
|
+
"div",
|
|
244
|
+
{
|
|
245
|
+
className: i("rzero-combo-trigger", n.trigger),
|
|
246
|
+
"data-rzero-trigger": "",
|
|
247
|
+
"data-disabled": S || void 0,
|
|
248
|
+
"data-readonly": t.readOnly || void 0,
|
|
249
|
+
"data-loading": t.disabled === "loading" || void 0,
|
|
250
|
+
"data-error": V || void 0,
|
|
251
|
+
"data-has-hidden-selection": e || void 0,
|
|
252
|
+
children: [
|
|
253
|
+
/* @__PURE__ */ r(
|
|
254
|
+
"input",
|
|
255
|
+
{
|
|
256
|
+
...k({
|
|
257
|
+
placeholder: z ? C : p,
|
|
258
|
+
className: n.input,
|
|
259
|
+
onKeyDown: Q
|
|
260
|
+
})
|
|
261
|
+
}
|
|
262
|
+
),
|
|
263
|
+
z && !S && !t.readOnly && /* @__PURE__ */ r(
|
|
264
|
+
"button",
|
|
265
|
+
{
|
|
266
|
+
...$({
|
|
267
|
+
className: n.clearButton
|
|
268
|
+
}),
|
|
269
|
+
children: O.clear
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
/* @__PURE__ */ r(
|
|
273
|
+
"button",
|
|
274
|
+
{
|
|
275
|
+
...E({
|
|
276
|
+
className: n.toggleButton
|
|
277
|
+
}),
|
|
278
|
+
children: /* @__PURE__ */ r("span", { ...L(), children: R })
|
|
279
|
+
}
|
|
280
|
+
)
|
|
281
|
+
]
|
|
282
|
+
}
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
function ye() {
|
|
286
|
+
return /* @__PURE__ */ s(
|
|
287
|
+
"button",
|
|
288
|
+
{
|
|
289
|
+
...Y({
|
|
290
|
+
className: i("rzero-combo-select-trigger", n.trigger),
|
|
291
|
+
"data-error": V || void 0
|
|
292
|
+
}),
|
|
293
|
+
children: [
|
|
294
|
+
/* @__PURE__ */ r("span", { className: "rzero-combo-select-value", children: z ? C : p || "Select..." }),
|
|
295
|
+
/* @__PURE__ */ r("span", { ...L(), children: R })
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
return /* @__PURE__ */ s(
|
|
301
|
+
"div",
|
|
302
|
+
{
|
|
303
|
+
className: i("rzero-combo", n.root),
|
|
304
|
+
...ze,
|
|
305
|
+
"data-rzero-root": "",
|
|
306
|
+
children: [
|
|
307
|
+
h && /* @__PURE__ */ r(
|
|
308
|
+
"label",
|
|
309
|
+
{
|
|
310
|
+
...se({
|
|
311
|
+
className: i("rzero-combo-label", n.label)
|
|
312
|
+
}),
|
|
313
|
+
children: h
|
|
314
|
+
}
|
|
315
|
+
),
|
|
316
|
+
W ? W({
|
|
317
|
+
getInputProps: k,
|
|
318
|
+
getToggleButtonProps: E,
|
|
319
|
+
getTriggerProps: Y,
|
|
320
|
+
getClearButtonProps: $,
|
|
321
|
+
getChevronProps: L,
|
|
322
|
+
selectedItem: M,
|
|
323
|
+
hasSelection: z,
|
|
324
|
+
triggerLabel: C,
|
|
325
|
+
isOpen: l,
|
|
326
|
+
icons: O,
|
|
327
|
+
chevronIcon: R
|
|
328
|
+
}) : _ ? ye() : Se(),
|
|
329
|
+
(D || H || x && (f != null || t.maxSelected != null)) && /* @__PURE__ */ s("div", { className: "rzero-combo-meta", children: [
|
|
330
|
+
D ? /* @__PURE__ */ r("span", { className: "rzero-combo-error-text", children: D }) : H ? /* @__PURE__ */ r("span", { className: "rzero-combo-hint", children: H }) : /* @__PURE__ */ r("span", {}),
|
|
331
|
+
x && (f != null || t.maxSelected != null) && /* @__PURE__ */ s(
|
|
332
|
+
"span",
|
|
333
|
+
{
|
|
334
|
+
className: "rzero-combo-selection-count",
|
|
335
|
+
"data-warning": f != null && g.length < f || t.maxSelected != null && g.length >= t.maxSelected ? "" : void 0,
|
|
336
|
+
children: [
|
|
337
|
+
g.length,
|
|
338
|
+
t.maxSelected != null ? ` / ${t.maxSelected}` : "",
|
|
339
|
+
f != null && g.length < f ? ` · min ${f}` : ""
|
|
340
|
+
]
|
|
341
|
+
}
|
|
342
|
+
)
|
|
343
|
+
] }),
|
|
344
|
+
/* @__PURE__ */ r(
|
|
345
|
+
Me,
|
|
346
|
+
{
|
|
347
|
+
disabled: t.disablePortal,
|
|
348
|
+
target: t.portalTarget,
|
|
349
|
+
children: /* @__PURE__ */ s(
|
|
350
|
+
"ul",
|
|
351
|
+
{
|
|
352
|
+
...ce({
|
|
353
|
+
className: i("rzero-combo-list", n.list),
|
|
354
|
+
style: l ? {
|
|
355
|
+
position: "absolute",
|
|
356
|
+
top: T.top,
|
|
357
|
+
left: T.left,
|
|
358
|
+
width: T.width,
|
|
359
|
+
maxHeight: T.maxHeight,
|
|
360
|
+
overflow: "auto",
|
|
361
|
+
zIndex: "var(--rzero-combo-z-index, 9999)",
|
|
362
|
+
margin: 0
|
|
363
|
+
} : { display: "none" }
|
|
364
|
+
}),
|
|
365
|
+
"data-state": l ? "open" : "closed",
|
|
366
|
+
"data-placement": T.placement,
|
|
367
|
+
hidden: !l,
|
|
368
|
+
children: [
|
|
369
|
+
l && J && /* @__PURE__ */ r("li", { role: "presentation", children: J() }),
|
|
370
|
+
l && v && /* @__PURE__ */ r(
|
|
371
|
+
"li",
|
|
372
|
+
{
|
|
373
|
+
role: "presentation",
|
|
374
|
+
className: i("rzero-combo-loading", n.loadingState),
|
|
375
|
+
children: U ? U() : "Loading..."
|
|
376
|
+
}
|
|
377
|
+
),
|
|
378
|
+
l && !v && y && A && /* @__PURE__ */ r(
|
|
379
|
+
"li",
|
|
380
|
+
{
|
|
381
|
+
role: "presentation",
|
|
382
|
+
className: i("rzero-combo-error", n.errorState),
|
|
383
|
+
children: A({ error: ie })
|
|
384
|
+
}
|
|
385
|
+
),
|
|
386
|
+
l && !v && !y && N.length === 0 && /* @__PURE__ */ r(
|
|
387
|
+
"li",
|
|
388
|
+
{
|
|
389
|
+
role: "presentation",
|
|
390
|
+
className: i("rzero-combo-empty", n.emptyState),
|
|
391
|
+
children: w ? w() : "No results found"
|
|
392
|
+
}
|
|
393
|
+
),
|
|
394
|
+
l && !v && !y && j && j.map(({ group: e, groupIdx: o, items: a }) => /* @__PURE__ */ s("li", { role: "presentation", children: [
|
|
395
|
+
/* @__PURE__ */ r(
|
|
396
|
+
"div",
|
|
397
|
+
{
|
|
398
|
+
...de({ group: e, index: o }),
|
|
399
|
+
className: i(
|
|
400
|
+
"rzero-combo-group-header",
|
|
401
|
+
n.groupHeader
|
|
402
|
+
),
|
|
403
|
+
children: q ? q({ group: e, index: o }) : e.label
|
|
404
|
+
}
|
|
405
|
+
),
|
|
406
|
+
/* @__PURE__ */ r("ul", { role: "group", "aria-label": e.label, style: { listStyle: "none", margin: 0, padding: 0 }, children: a.map(
|
|
407
|
+
({ item: c, globalIndex: I }) => re(c, I)
|
|
408
|
+
) })
|
|
409
|
+
] }, `group-${o}`)),
|
|
410
|
+
l && !v && !y && !j && N.map((e, o) => re(e, o)),
|
|
411
|
+
l && G && /* @__PURE__ */ r(
|
|
412
|
+
"li",
|
|
413
|
+
{
|
|
414
|
+
role: "presentation",
|
|
415
|
+
className: i("rzero-combo-footer", n.footer),
|
|
416
|
+
children: G({
|
|
417
|
+
selectedItem: M,
|
|
418
|
+
selectedItems: g,
|
|
419
|
+
closeMenu: he,
|
|
420
|
+
clearSelection: be
|
|
421
|
+
})
|
|
422
|
+
}
|
|
423
|
+
)
|
|
424
|
+
]
|
|
425
|
+
}
|
|
426
|
+
)
|
|
427
|
+
}
|
|
428
|
+
),
|
|
429
|
+
/* @__PURE__ */ r(Le, { message: Ne })
|
|
430
|
+
]
|
|
431
|
+
}
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
export {
|
|
435
|
+
$e as C,
|
|
436
|
+
Le as L,
|
|
437
|
+
Me as P
|
|
438
|
+
};
|
|
439
|
+
//# sourceMappingURL=Combo-qs6_L512.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combo-qs6_L512.js","sources":["../src/components/Portal.tsx","../src/components/LiveRegion.tsx","../src/components/Combo.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport type { ReactNode } from 'react';\n\nexport interface PortalProps {\n children: ReactNode;\n target?: Element | null;\n disabled?: boolean;\n}\n\nexport function Portal({ children, target, disabled }: PortalProps) {\n if (disabled) return <>{children}</>;\n\n const mountNode =\n target ?? (typeof document !== 'undefined' ? document.body : null);\n if (!mountNode) return null;\n\n return createPortal(children, mountNode);\n}\n","import { useEffect, useRef } from 'react';\n\nexport interface LiveRegionProps {\n message: string;\n id?: string;\n clearAfterMs?: number;\n}\n\nconst srOnlyStyle: React.CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n borderWidth: 0,\n};\n\nexport function LiveRegion({\n message,\n id,\n clearAfterMs = 3000,\n}: LiveRegionProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current || !message) return;\n const el = ref.current;\n // Clear then set — forces screen readers to re-announce\n el.textContent = '';\n const raf = requestAnimationFrame(() => {\n el.textContent = message;\n });\n const timer = setTimeout(() => {\n el.textContent = '';\n }, clearAfterMs);\n return () => {\n cancelAnimationFrame(raf);\n clearTimeout(timer);\n };\n }, [message, clearAfterMs]);\n\n return (\n <div\n ref={ref}\n id={id}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={srOnlyStyle}\n />\n );\n}\n","import React, { useMemo, useRef } from 'react';\nimport { useCombo } from '../hooks/useCombo';\nimport { usePosition } from '../hooks/usePosition';\nimport { Portal } from './Portal';\nimport { LiveRegion } from './LiveRegion';\nimport type {\n UseComboOptions,\n UseComboReturn,\n ComboGroup,\n IconSlots,\n} from '../types';\n\nexport interface ComboClassNames {\n root?: string;\n label?: string;\n input?: string;\n trigger?: string;\n popover?: string;\n list?: string;\n item?: string;\n itemSelected?: string;\n itemHighlighted?: string;\n itemDisabled?: string;\n clearButton?: string;\n toggleButton?: string;\n groupHeader?: string;\n loadingState?: string;\n emptyState?: string;\n errorState?: string;\n footer?: string;\n}\n\nexport type ItemVariant = 'default' | 'checkbox' | 'radio';\n\nexport interface ComboProps<T> extends UseComboOptions<T> {\n placeholder?: string;\n label?: string;\n theme?: 'default' | 'dark' | 'high-contrast' | 'system';\n itemVariant?: ItemVariant;\n renderItem?: (props: {\n item: T;\n index: number;\n isHighlighted: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n }) => React.ReactNode;\n renderEmpty?: () => React.ReactNode;\n renderLoading?: () => React.ReactNode;\n renderError?: (props: { error: Error | null }) => React.ReactNode;\n renderFooter?: (props: {\n selectedItem: T | null;\n selectedItems: T[];\n closeMenu: () => void;\n clearSelection: () => void;\n }) => React.ReactNode;\n renderTrigger?: (props: {\n getInputProps: UseComboReturn<T>['getInputProps'];\n getToggleButtonProps: UseComboReturn<T>['getToggleButtonProps'];\n getTriggerProps: UseComboReturn<T>['getTriggerProps'];\n getClearButtonProps: UseComboReturn<T>['getClearButtonProps'];\n getChevronProps: UseComboReturn<T>['getChevronProps'];\n selectedItem: T | null;\n hasSelection: boolean;\n triggerLabel: string;\n isOpen: boolean;\n icons: IconSlots;\n chevronIcon: React.ReactNode;\n }) => React.ReactNode;\n renderGroupHeader?: (props: {\n group: ComboGroup<T>;\n index: number;\n }) => React.ReactNode;\n renderListHeader?: () => React.ReactNode;\n hintText?: string;\n errorText?: string;\n minSelected?: number;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n classNames?: ComboClassNames;\n}\n\nfunction cx(...args: (string | false | null | undefined)[]): string {\n return args.filter(Boolean).join(' ');\n}\n\nexport function Combo<T>(props: ComboProps<T>) {\n const {\n placeholder,\n label,\n theme,\n itemVariant,\n renderItem,\n renderEmpty,\n renderLoading,\n renderError,\n renderFooter,\n renderTrigger,\n renderGroupHeader,\n renderListHeader,\n hintText,\n errorText,\n minSelected,\n onInputKeyDown,\n classNames = {},\n ...hookOptions\n } = props;\n\n // When groups are provided, flatten into items for the hook\n const flatItems = useMemo(() => {\n if (hookOptions.groups && !hookOptions.items?.length) {\n return hookOptions.groups.flatMap((g) => g.items);\n }\n return hookOptions.items;\n }, [hookOptions.groups, hookOptions.items]);\n\n const combo = useCombo({ ...hookOptions, items: flatItems });\n const {\n isOpen,\n selectedItem,\n highlightedIndex,\n filteredItems,\n hasSelection,\n triggerLabel,\n isLoading,\n isError,\n error,\n getLabelProps,\n getInputProps,\n getToggleButtonProps,\n getClearButtonProps,\n getMenuProps,\n getItemProps,\n getGroupProps,\n getChevronProps,\n getTriggerProps,\n icons,\n chevronIcon,\n inputRef,\n listboxRef,\n triggerRef,\n inputValue,\n openMenu,\n closeMenu,\n clearSelection,\n removeItem,\n selectedItems,\n } = combo;\n\n const itemToString =\n hookOptions.itemToString ??\n ((item: T | null) => (item != null ? String(item) : ''));\n const itemToValue =\n hookOptions.itemToValue ??\n ((item: T) => {\n if (\n typeof item === 'object' &&\n item != null &&\n 'value' in (item as object)\n )\n return (item as Record<string, unknown>).value as string | number;\n return String(item);\n });\n const isItemDisabled = hookOptions.isItemDisabled ?? (() => false);\n const isSelectVariant = hookOptions.variant === 'select';\n const isMultiMode = hookOptions.mode === 'multi';\n const hasError = isError || !!errorText;\n\n // Stable ref for the multi-select trigger container so the popover\n // anchors to the outer div rather than the input (which shifts as chips wrap).\n const multiTriggerRef = useRef<HTMLDivElement>(null);\n\n const positionTriggerRef = isSelectVariant\n ? triggerRef\n : isMultiMode\n ? multiTriggerRef\n : inputRef;\n\n const position = usePosition({\n triggerRef: positionTriggerRef,\n listboxRef,\n isOpen,\n });\n\n const liveMessage = useMemo(() => {\n if (!isOpen) return '';\n if (isLoading) return 'Loading options...';\n const count = filteredItems.length;\n return count === 0\n ? 'No options available'\n : `${count} option${count !== 1 ? 's' : ''} available`;\n }, [isOpen, isLoading, filteredItems.length]);\n\n const themeAttr = theme ? { 'data-rzero-theme': theme } : {};\n const isDisabled = hookOptions.disabled === true;\n\n // Build a value → filteredItems index map for grouped rendering\n const valueToIndex = useMemo(() => {\n const map = new Map<string | number, number>();\n filteredItems.forEach((item, index) => {\n map.set(itemToValue(item), index);\n });\n return map;\n }, [filteredItems, itemToValue]);\n\n // Compute grouped items with global indices\n const groupedItems = useMemo(() => {\n if (!hookOptions.groups) return null;\n return hookOptions.groups\n .map((group, groupIdx) => {\n const items = group.items\n .map((item) => ({\n item,\n globalIndex: valueToIndex.get(itemToValue(item)),\n }))\n .filter(\n (entry): entry is { item: T; globalIndex: number } =>\n entry.globalIndex !== undefined,\n );\n return { group, groupIdx, items };\n })\n .filter((g) => g.items.length > 0);\n }, [hookOptions.groups, valueToIndex, itemToValue]);\n\n // Shared item renderer\n\n function renderItemLi(item: T, index: number) {\n const isHighlighted = highlightedIndex === index;\n const isSelected = isMultiMode\n ? selectedItems.some((si: T) => itemToValue(si) === itemToValue(item))\n : selectedItem != null &&\n itemToValue(selectedItem) === itemToValue(item);\n const itemDisabled = isItemDisabled(item);\n\n const variantForItem =\n itemVariant && itemVariant !== 'default' ? itemVariant : undefined;\n\n if (renderItem) {\n return (\n <li\n key={index}\n {...getItemProps({ item, index, variant: variantForItem })}\n className={cx(\n 'rzero-combo-item',\n classNames.item,\n isHighlighted && classNames.itemHighlighted,\n isSelected && classNames.itemSelected,\n itemDisabled && classNames.itemDisabled,\n )}\n >\n {renderItem({\n item,\n index,\n isHighlighted,\n isSelected,\n isDisabled: itemDisabled,\n })}\n </li>\n );\n }\n\n return (\n <li\n key={index}\n {...getItemProps({ item, index, variant: variantForItem })}\n className={cx(\n 'rzero-combo-item',\n classNames.item,\n isHighlighted && classNames.itemHighlighted,\n isSelected && classNames.itemSelected,\n itemDisabled && classNames.itemDisabled,\n )}\n >\n <span>{itemToString(item)}</span>\n {isSelected && !variantForItem && (\n <span className=\"rzero-combo-check\" aria-hidden=\"true\">\n {icons.check}\n </span>\n )}\n </li>\n );\n }\n\n // Default trigger (input variant)\n function renderDefaultTrigger() {\n if (isMultiMode) {\n return (\n <div\n ref={multiTriggerRef}\n className={cx('rzero-combo-trigger', 'rzero-combo-trigger--multi', classNames.trigger)}\n data-rzero-trigger=\"\"\n data-disabled={isDisabled || undefined}\n data-readonly={hookOptions.readOnly || undefined}\n data-loading={hookOptions.disabled === 'loading' || undefined}\n data-error={hasError || undefined}\n onClick={(e) => {\n if (isDisabled || hookOptions.readOnly) return;\n // Only handle clicks on the container itself, not on input/buttons\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'BUTTON' || target.closest('button')) return;\n inputRef.current?.focus();\n if (!isOpen) openMenu();\n }}\n onMouseDown={(e) => {\n // Prevent blur when clicking the container (not input)\n const target = e.target as HTMLElement;\n if (target.tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <div className=\"rzero-combo-trigger-content\">\n {selectedItems.map((item: T) => (\n <span className=\"rzero-combo-chip\" key={String(itemToValue(item))}>\n <span className=\"rzero-combo-chip-label\">{itemToString(item)}</span>\n {!isDisabled && !hookOptions.readOnly && (\n <button\n type=\"button\"\n className=\"rzero-combo-chip-remove\"\n aria-label={`Remove ${itemToString(item)}`}\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n e.stopPropagation();\n removeItem(item);\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </span>\n ))}\n <input\n {...getInputProps({\n placeholder: selectedItems.length === 0 ? placeholder : '',\n className: classNames.input,\n onKeyDown: onInputKeyDown,\n } as Record<string, unknown>)}\n />\n </div>\n\n <div className=\"rzero-combo-trigger-actions\">\n {hasSelection && !isDisabled && !hookOptions.readOnly && (\n <button\n {...getClearButtonProps({\n className: classNames.clearButton,\n } as Record<string, unknown>)}\n >\n {icons.clear}\n </button>\n )}\n\n <button\n {...getToggleButtonProps({\n className: classNames.toggleButton,\n } as Record<string, unknown>)}\n >\n <span {...getChevronProps()}>{chevronIcon}</span>\n </button>\n </div>\n </div>\n );\n }\n\n const hasHiddenSelection = hasSelection && isOpen && inputValue !== triggerLabel;\n\n return (\n <div\n className={cx('rzero-combo-trigger', classNames.trigger)}\n data-rzero-trigger=\"\"\n data-disabled={isDisabled || undefined}\n data-readonly={hookOptions.readOnly || undefined}\n data-loading={hookOptions.disabled === 'loading' || undefined}\n data-error={hasError || undefined}\n data-has-hidden-selection={hasHiddenSelection || undefined}\n >\n <input\n {...getInputProps({\n placeholder: hasSelection ? triggerLabel : placeholder,\n className: classNames.input,\n onKeyDown: onInputKeyDown,\n } as Record<string, unknown>)}\n />\n\n {hasSelection && !isDisabled && !hookOptions.readOnly && (\n <button\n {...getClearButtonProps({\n className: classNames.clearButton,\n } as Record<string, unknown>)}\n >\n {icons.clear}\n </button>\n )}\n\n <button\n {...getToggleButtonProps({\n className: classNames.toggleButton,\n } as Record<string, unknown>)}\n >\n <span {...getChevronProps()}>{chevronIcon}</span>\n </button>\n </div>\n );\n }\n\n // Select variant trigger\n function renderSelectTrigger() {\n return (\n <button\n {...getTriggerProps({\n className: cx('rzero-combo-select-trigger', classNames.trigger),\n 'data-error': hasError || undefined,\n } as Record<string, unknown>)}\n >\n <span className=\"rzero-combo-select-value\">\n {hasSelection ? triggerLabel : placeholder || 'Select...'}\n </span>\n <span {...getChevronProps()}>{chevronIcon}</span>\n </button>\n );\n }\n\n return (\n <div\n className={cx('rzero-combo', classNames.root)}\n {...themeAttr}\n data-rzero-root=\"\"\n >\n {/* Label */}\n {label && (\n <label\n {...getLabelProps({\n className: cx('rzero-combo-label', classNames.label),\n } as Record<string, unknown>)}\n >\n {label}\n </label>\n )}\n\n {/* Trigger */}\n {renderTrigger\n ? renderTrigger({\n getInputProps,\n getToggleButtonProps,\n getTriggerProps,\n getClearButtonProps,\n getChevronProps,\n selectedItem,\n hasSelection,\n triggerLabel,\n isOpen,\n icons,\n chevronIcon,\n })\n : isSelectVariant\n ? renderSelectTrigger()\n : renderDefaultTrigger()}\n\n {/* Meta row: hint/error text + selection count */}\n {(errorText || hintText || (isMultiMode && (minSelected != null || hookOptions.maxSelected != null))) && (\n <div className=\"rzero-combo-meta\">\n {errorText ? (\n <span className=\"rzero-combo-error-text\">{errorText}</span>\n ) : hintText ? (\n <span className=\"rzero-combo-hint\">{hintText}</span>\n ) : (\n <span />\n )}\n {isMultiMode && (minSelected != null || hookOptions.maxSelected != null) && (\n <span\n className=\"rzero-combo-selection-count\"\n data-warning={\n (minSelected != null && selectedItems.length < minSelected) ||\n (hookOptions.maxSelected != null && selectedItems.length >= hookOptions.maxSelected)\n ? ''\n : undefined\n }\n >\n {selectedItems.length}\n {hookOptions.maxSelected != null ? ` / ${hookOptions.maxSelected}` : ''}\n {minSelected != null && selectedItems.length < minSelected\n ? ` \\u00B7 min ${minSelected}`\n : ''}\n </span>\n )}\n </div>\n )}\n\n {/* Popover */}\n <Portal\n disabled={hookOptions.disablePortal}\n target={hookOptions.portalTarget}\n >\n <ul\n {...getMenuProps({\n className: cx('rzero-combo-list', classNames.list),\n style: isOpen\n ? ({\n position: 'absolute',\n top: position.top,\n left: position.left,\n width: position.width,\n maxHeight: position.maxHeight,\n overflow: 'auto',\n zIndex: 'var(--rzero-combo-z-index, 9999)',\n margin: 0,\n } as React.CSSProperties)\n : ({ display: 'none' } as React.CSSProperties),\n } as Record<string, unknown>)}\n data-state={isOpen ? 'open' : 'closed'}\n data-placement={position.placement}\n hidden={!isOpen}\n >\n {/* List header (e.g. tab strip) */}\n {isOpen && renderListHeader && (\n <li role=\"presentation\">\n {renderListHeader()}\n </li>\n )}\n\n {/* Loading */}\n {isOpen && isLoading && (\n <li\n role=\"presentation\"\n className={cx('rzero-combo-loading', classNames.loadingState)}\n >\n {renderLoading ? renderLoading() : 'Loading...'}\n </li>\n )}\n\n {/* Error */}\n {isOpen && !isLoading && isError && renderError && (\n <li\n role=\"presentation\"\n className={cx('rzero-combo-error', classNames.errorState)}\n >\n {renderError({ error })}\n </li>\n )}\n\n {/* Empty */}\n {isOpen &&\n !isLoading &&\n !isError &&\n filteredItems.length === 0 && (\n <li\n role=\"presentation\"\n className={cx('rzero-combo-empty', classNames.emptyState)}\n >\n {renderEmpty ? renderEmpty() : 'No results found'}\n </li>\n )}\n\n {/* Items — grouped rendering */}\n {isOpen &&\n !isLoading &&\n !isError &&\n groupedItems &&\n groupedItems.map(({ group, groupIdx, items }) => (\n <li key={`group-${groupIdx}`} role=\"presentation\">\n <div\n {...getGroupProps({ group, index: groupIdx })}\n className={cx(\n 'rzero-combo-group-header',\n classNames.groupHeader,\n )}\n >\n {renderGroupHeader\n ? renderGroupHeader({ group, index: groupIdx })\n : group.label}\n </div>\n <ul role=\"group\" aria-label={group.label} style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map(({ item, globalIndex }) =>\n renderItemLi(item, globalIndex),\n )}\n </ul>\n </li>\n ))}\n\n {/* Items — flat rendering (no groups) */}\n {isOpen &&\n !isLoading &&\n !isError &&\n !groupedItems &&\n filteredItems.map((item, index) => renderItemLi(item, index))}\n\n {/* Footer */}\n {isOpen && renderFooter && (\n <li\n role=\"presentation\"\n className={cx('rzero-combo-footer', classNames.footer)}\n >\n {renderFooter({\n selectedItem,\n selectedItems,\n closeMenu,\n clearSelection,\n })}\n </li>\n )}\n </ul>\n </Portal>\n\n {/* Live region */}\n <LiveRegion message={liveMessage} />\n </div>\n );\n}\n"],"names":["Portal","children","target","disabled","jsx","Fragment","mountNode","createPortal","srOnlyStyle","LiveRegion","message","id","clearAfterMs","ref","useRef","useEffect","el","raf","timer","cx","args","Combo","props","placeholder","label","theme","itemVariant","renderItem","renderEmpty","renderLoading","renderError","renderFooter","renderTrigger","renderGroupHeader","renderListHeader","hintText","errorText","minSelected","onInputKeyDown","classNames","hookOptions","flatItems","useMemo","g","combo","useCombo","isOpen","selectedItem","highlightedIndex","filteredItems","hasSelection","triggerLabel","isLoading","isError","error","getLabelProps","getInputProps","getToggleButtonProps","getClearButtonProps","getMenuProps","getItemProps","getGroupProps","getChevronProps","getTriggerProps","icons","chevronIcon","inputRef","listboxRef","triggerRef","inputValue","openMenu","closeMenu","clearSelection","removeItem","selectedItems","itemToString","item","itemToValue","isItemDisabled","isSelectVariant","isMultiMode","hasError","multiTriggerRef","position","usePosition","liveMessage","count","themeAttr","isDisabled","valueToIndex","map","index","groupedItems","group","groupIdx","items","entry","renderItemLi","isHighlighted","isSelected","si","itemDisabled","variantForItem","jsxs","renderDefaultTrigger","e","hasHiddenSelection","renderSelectTrigger","globalIndex"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { UseComboOptions, UseComboReturn, ComboGroup, IconSlots } from '../types';
|
|
3
|
+
export interface ComboClassNames {
|
|
4
|
+
root?: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
input?: string;
|
|
7
|
+
trigger?: string;
|
|
8
|
+
popover?: string;
|
|
9
|
+
list?: string;
|
|
10
|
+
item?: string;
|
|
11
|
+
itemSelected?: string;
|
|
12
|
+
itemHighlighted?: string;
|
|
13
|
+
itemDisabled?: string;
|
|
14
|
+
clearButton?: string;
|
|
15
|
+
toggleButton?: string;
|
|
16
|
+
groupHeader?: string;
|
|
17
|
+
loadingState?: string;
|
|
18
|
+
emptyState?: string;
|
|
19
|
+
errorState?: string;
|
|
20
|
+
footer?: string;
|
|
21
|
+
}
|
|
22
|
+
export type ItemVariant = 'default' | 'checkbox' | 'radio';
|
|
23
|
+
export interface ComboProps<T> extends UseComboOptions<T> {
|
|
24
|
+
placeholder?: string;
|
|
25
|
+
label?: string;
|
|
26
|
+
theme?: 'default' | 'dark' | 'high-contrast' | 'system';
|
|
27
|
+
itemVariant?: ItemVariant;
|
|
28
|
+
renderItem?: (props: {
|
|
29
|
+
item: T;
|
|
30
|
+
index: number;
|
|
31
|
+
isHighlighted: boolean;
|
|
32
|
+
isSelected: boolean;
|
|
33
|
+
isDisabled: boolean;
|
|
34
|
+
}) => React.ReactNode;
|
|
35
|
+
renderEmpty?: () => React.ReactNode;
|
|
36
|
+
renderLoading?: () => React.ReactNode;
|
|
37
|
+
renderError?: (props: {
|
|
38
|
+
error: Error | null;
|
|
39
|
+
}) => React.ReactNode;
|
|
40
|
+
renderFooter?: (props: {
|
|
41
|
+
selectedItem: T | null;
|
|
42
|
+
selectedItems: T[];
|
|
43
|
+
closeMenu: () => void;
|
|
44
|
+
clearSelection: () => void;
|
|
45
|
+
}) => React.ReactNode;
|
|
46
|
+
renderTrigger?: (props: {
|
|
47
|
+
getInputProps: UseComboReturn<T>['getInputProps'];
|
|
48
|
+
getToggleButtonProps: UseComboReturn<T>['getToggleButtonProps'];
|
|
49
|
+
getTriggerProps: UseComboReturn<T>['getTriggerProps'];
|
|
50
|
+
getClearButtonProps: UseComboReturn<T>['getClearButtonProps'];
|
|
51
|
+
getChevronProps: UseComboReturn<T>['getChevronProps'];
|
|
52
|
+
selectedItem: T | null;
|
|
53
|
+
hasSelection: boolean;
|
|
54
|
+
triggerLabel: string;
|
|
55
|
+
isOpen: boolean;
|
|
56
|
+
icons: IconSlots;
|
|
57
|
+
chevronIcon: React.ReactNode;
|
|
58
|
+
}) => React.ReactNode;
|
|
59
|
+
renderGroupHeader?: (props: {
|
|
60
|
+
group: ComboGroup<T>;
|
|
61
|
+
index: number;
|
|
62
|
+
}) => React.ReactNode;
|
|
63
|
+
renderListHeader?: () => React.ReactNode;
|
|
64
|
+
hintText?: string;
|
|
65
|
+
errorText?: string;
|
|
66
|
+
minSelected?: number;
|
|
67
|
+
onInputKeyDown?: (e: React.KeyboardEvent) => void;
|
|
68
|
+
classNames?: ComboClassNames;
|
|
69
|
+
}
|
|
70
|
+
export declare function Combo<T>(props: ComboProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
71
|
+
//# sourceMappingURL=Combo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combo.d.ts","sourceRoot":"","sources":["../../src/components/Combo.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface LiveRegionProps {
|
|
2
|
+
message: string;
|
|
3
|
+
id?: string;
|
|
4
|
+
clearAfterMs?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function LiveRegion({ message, id, clearAfterMs, }: LiveRegionProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=LiveRegion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveRegion.d.ts","sourceRoot":"","sources":["../../src/components/LiveRegion.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,EAAE,EACF,YAAmB,GACpB,EAAE,eAAe,2CA8BjB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface PortalProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
target?: Element | null;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function Portal({ children, target, disabled }: PortalProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=Portal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Portal.d.ts","sourceRoot":"","sources":["../../src/components/Portal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,WAAW,kDAQjE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface CheckboxItemProps {
|
|
3
|
+
/** Display label for the item */
|
|
4
|
+
label: string;
|
|
5
|
+
/** Optional secondary description text */
|
|
6
|
+
description?: string;
|
|
7
|
+
/** Optional leading icon */
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
/** Whether the item is currently highlighted */
|
|
10
|
+
isHighlighted?: boolean;
|
|
11
|
+
/** Whether the item is currently selected */
|
|
12
|
+
isSelected?: boolean;
|
|
13
|
+
/** Whether the item is disabled */
|
|
14
|
+
isDisabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Pre-built item content for checkbox-style multi-select.
|
|
18
|
+
* Pair with `itemVariant="checkbox"` on the Combo for CSS-driven checkbox visuals.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <Combo
|
|
23
|
+
* items={items}
|
|
24
|
+
* itemVariant="checkbox"
|
|
25
|
+
* renderItem={({ item, isHighlighted, isSelected, isDisabled }) => (
|
|
26
|
+
* <CheckboxItem
|
|
27
|
+
* label={item.label}
|
|
28
|
+
* description={item.description}
|
|
29
|
+
* isHighlighted={isHighlighted}
|
|
30
|
+
* isSelected={isSelected}
|
|
31
|
+
* isDisabled={isDisabled}
|
|
32
|
+
* />
|
|
33
|
+
* )}
|
|
34
|
+
* />
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function CheckboxItem({ label, description, icon, }: CheckboxItemProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=CheckboxItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxItem.d.ts","sourceRoot":"","sources":["../../../src/components/slots/CheckboxItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,IAAI,GAGL,EAAE,iBAAiB,2CAkBnB"}
|