@bioturing/components 0.46.3 → 0.46.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/component.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EACZ,YAAY,EAOb,MAAM,OAAO,CAAC;AAUf,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQ7D,QAAA,MAAM,aAAa,GACjB,CAAC,SAAS,KAAK,CAAC,GAAG,EACnB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAEtC,mcAmCG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,KAAK,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/component.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EACZ,YAAY,EAOb,MAAM,OAAO,CAAC;AAUf,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQ7D,QAAA,MAAM,aAAa,GACjB,CAAC,SAAS,KAAK,CAAC,GAAG,EACnB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAEtC,mcAmCG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,KAAK,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,4CAkbxC,CAAC;AAUF,eAAO,MAAM,QAAQ,GAPnB,CAAC,SAAS,KAAK,CAAC,GAAG,EACnB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAE1B,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,CAAA;CAAE,KACnE,UAAU,CAAC,OAAO,aAAa,CAIlC,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|
|
@@ -1,77 +1,77 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as t, jsxs as g, Fragment as ne } from "react/jsx-runtime";
|
|
3
3
|
import { Combobox as r } from "@base-ui/react/combobox";
|
|
4
|
-
import
|
|
5
|
-
import { FormItemInputContext as
|
|
4
|
+
import Ae from "antd/es/config-provider/DisabledContext";
|
|
5
|
+
import { FormItemInputContext as Re } from "antd/es/form/context";
|
|
6
6
|
import { forwardRef as Se, useRef as ke, useContext as re, useCallback as v, useMemo as y, useState as De } from "react";
|
|
7
|
-
import { BaseMenu as
|
|
7
|
+
import { BaseMenu as V } from "../base-menu/index.js";
|
|
8
8
|
import { XIcon as Me } from "@bioturing/assets";
|
|
9
|
-
import {
|
|
10
|
-
import { useComboboxTokenInput as
|
|
9
|
+
import { hasTokenSeparator as Ve, splitBySeparators as Fe } from "./utils.js";
|
|
10
|
+
import { useComboboxTokenInput as Oe } from "./use-combobox-token-input.js";
|
|
11
11
|
import './style.css';/* empty css */
|
|
12
12
|
import { SelectTrigger as p } from "../select-trigger/component.js";
|
|
13
13
|
import { BaseMenuItem as se } from "../base-menu/item.js";
|
|
14
|
-
import { Empty as
|
|
14
|
+
import { Empty as $e } from "../empty/component.js";
|
|
15
15
|
import { useControlledState as ce } from "../hooks/useControlledState.js";
|
|
16
|
-
import { useCls as
|
|
16
|
+
import { useCls as Be } from "../utils/antdUtils.js";
|
|
17
17
|
import { clsx as l } from "../utils/cn.js";
|
|
18
18
|
import { reactNodeToString as le } from "../utils/reactToString.js";
|
|
19
|
-
import { ScrollArea as
|
|
20
|
-
const
|
|
19
|
+
import { ScrollArea as Le } from "../scroll-area/component.js";
|
|
20
|
+
const Pe = (s) => /* @__PURE__ */ t(V.Root, { ...s }), je = (s) => /* @__PURE__ */ t(V.Popup, { ...s }), Ee = (s) => /* @__PURE__ */ t(V.Divider, { ...s }), Ke = (s) => /* @__PURE__ */ t(V.List, { ...s }), We = ({
|
|
21
21
|
options: s = [],
|
|
22
22
|
value: ae,
|
|
23
23
|
defaultValue: K,
|
|
24
|
-
onChange:
|
|
24
|
+
onChange: F,
|
|
25
25
|
placeholder: w = "Select...",
|
|
26
26
|
disabled: ie = !1,
|
|
27
27
|
status: de,
|
|
28
28
|
allowClear: W = !1,
|
|
29
29
|
multiple: n = !1,
|
|
30
|
-
showSearch:
|
|
31
|
-
open:
|
|
32
|
-
onOpenChange:
|
|
30
|
+
showSearch: Qe = !0,
|
|
31
|
+
open: he,
|
|
32
|
+
onOpenChange: me,
|
|
33
33
|
className: ue,
|
|
34
34
|
classNames: b,
|
|
35
|
-
size:
|
|
35
|
+
size: O = "middle",
|
|
36
36
|
optionRender: H,
|
|
37
|
-
onSearch:
|
|
37
|
+
onSearch: $,
|
|
38
38
|
clearIcon: Q,
|
|
39
39
|
suffixIcon: U,
|
|
40
|
-
placement:
|
|
40
|
+
placement: T = "bottomLeft",
|
|
41
41
|
// showSelectionSummary: _showSelectionSummary = false,
|
|
42
42
|
// selectionSummaryRender,
|
|
43
43
|
showSelectAll: X = !1,
|
|
44
|
-
optionLabelRender:
|
|
44
|
+
optionLabelRender: A,
|
|
45
45
|
getOptionKeywords: G = (u) => [
|
|
46
46
|
String(u.value),
|
|
47
47
|
le(u.label)
|
|
48
48
|
],
|
|
49
49
|
popupMatchSelectWidth: be = !0,
|
|
50
|
-
addOnEnter:
|
|
50
|
+
addOnEnter: B = !1,
|
|
51
51
|
tokenSeparators: C,
|
|
52
|
-
autoHighlight:
|
|
53
|
-
filterOption:
|
|
52
|
+
autoHighlight: L = !0,
|
|
53
|
+
filterOption: R,
|
|
54
54
|
...fe
|
|
55
55
|
}, ge) => {
|
|
56
56
|
const [u, J] = ce(
|
|
57
57
|
ae,
|
|
58
|
-
|
|
58
|
+
F,
|
|
59
59
|
K !== void 0 ? K : n ? [] : void 0
|
|
60
|
-
), [
|
|
60
|
+
), [P, S] = ce(he, me, !1), c = Be(), j = ke(null), { status: pe } = re(Re), Ce = re(Ae), k = de || pe, I = ie || Ce, h = v(
|
|
61
61
|
(e) => {
|
|
62
|
-
J(e),
|
|
62
|
+
J(e), F?.(e);
|
|
63
63
|
},
|
|
64
|
-
[J,
|
|
64
|
+
[J, F]
|
|
65
65
|
), Y = v(() => {
|
|
66
66
|
if (n) {
|
|
67
67
|
const e = s.map((o) => o.value);
|
|
68
|
-
|
|
68
|
+
h(e);
|
|
69
69
|
}
|
|
70
|
-
}, [n, s,
|
|
71
|
-
n &&
|
|
72
|
-
}, [n,
|
|
73
|
-
|
|
74
|
-
}, [n,
|
|
70
|
+
}, [n, s, h]), Z = v(() => {
|
|
71
|
+
n && h([]);
|
|
72
|
+
}, [n, h]), _ = v(() => {
|
|
73
|
+
h(n ? [] : void 0);
|
|
74
|
+
}, [n, h]), m = y(() => Array.isArray(u) ? u : u ? [u] : [], [u]), i = y(() => {
|
|
75
75
|
const e = /* @__PURE__ */ new Map();
|
|
76
76
|
for (const o of s)
|
|
77
77
|
e.set(o.value, o);
|
|
@@ -79,7 +79,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
79
79
|
}, [s]), D = y(() => {
|
|
80
80
|
if (!X || !n || s.length === 0)
|
|
81
81
|
return null;
|
|
82
|
-
const e =
|
|
82
|
+
const e = m.filter((d) => i.has(d)), o = e.length === s.length && s.length > 0, a = e.length > 0 && e.length < s.length;
|
|
83
83
|
return {
|
|
84
84
|
checked: o,
|
|
85
85
|
indeterminate: a,
|
|
@@ -87,9 +87,9 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
87
87
|
a || o ? Z() : Y();
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
|
-
}, [X, n, s, i,
|
|
90
|
+
}, [X, n, s, i, m, Z, Y]), xe = y(() => s.map((e) => e.value), [s]), z = y(() => n ? m.length > 0 ? `${m.length} item${m.length === 1 ? "" : "s"} selected` : null : i.get(m[0])?.label || null, [n, m, i]), q = l(
|
|
91
91
|
c("combobox-input"),
|
|
92
|
-
c(`combobox-input-${
|
|
92
|
+
c(`combobox-input-${O}`),
|
|
93
93
|
k && c(`combobox-input-${k}`),
|
|
94
94
|
b?.input
|
|
95
95
|
), ve = v(
|
|
@@ -98,34 +98,34 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
98
98
|
return le(o?.label || String(e));
|
|
99
99
|
},
|
|
100
100
|
[i]
|
|
101
|
-
), [
|
|
102
|
-
addOnEnter:
|
|
101
|
+
), [M, ee] = De(""), { handleAddOnEnter: oe, handleInputValueChange: ye } = Oe({
|
|
102
|
+
addOnEnter: B,
|
|
103
103
|
multiple: n,
|
|
104
104
|
tokenSeparators: C,
|
|
105
105
|
optionMap: i,
|
|
106
106
|
value: u,
|
|
107
|
-
handleValueChange:
|
|
107
|
+
handleValueChange: h,
|
|
108
108
|
setOpen: S,
|
|
109
109
|
setSearchValue: ee,
|
|
110
|
-
onSearch:
|
|
111
|
-
}), Ie = !!C?.length, Ne = n && Ie ? !1 :
|
|
110
|
+
onSearch: $
|
|
111
|
+
}), Ie = !!C?.length, Ne = n && Ie && Ve(M, C) ? !1 : L, te = v(
|
|
112
112
|
(e) => (o) => {
|
|
113
|
-
if (o.key === "Enter" &&
|
|
114
|
-
if (!n &&
|
|
115
|
-
oe(e) && (o.preventDefault(), ee(""),
|
|
113
|
+
if (o.key === "Enter" && B && e) {
|
|
114
|
+
if (!n && L) return;
|
|
115
|
+
oe(e) && (o.preventDefault(), ee(""), $?.(""));
|
|
116
116
|
}
|
|
117
117
|
},
|
|
118
|
-
[
|
|
119
|
-
), we = y(() =>
|
|
118
|
+
[B, L, n, oe, $]
|
|
119
|
+
), we = y(() => R === !1 ? null : typeof R == "function" ? (e, o) => {
|
|
120
120
|
const a = i.get(e);
|
|
121
|
-
return
|
|
121
|
+
return R(o, a);
|
|
122
122
|
} : (e, o) => {
|
|
123
123
|
if (!o) return !0;
|
|
124
124
|
const a = i.get(e);
|
|
125
125
|
if (!a) return !1;
|
|
126
|
-
const d = C && C.length > 0 ?
|
|
126
|
+
const d = C && C.length > 0 ? Fe(o, C) : [o], x = G(a).map((N) => N.toLowerCase()), f = d.filter((N) => {
|
|
127
127
|
const E = N.toLowerCase();
|
|
128
|
-
return x.some((
|
|
128
|
+
return x.some((Te) => Te.includes(E));
|
|
129
129
|
}).length;
|
|
130
130
|
if (f === 0) return !1;
|
|
131
131
|
if (d.length > 1 && f > 1) {
|
|
@@ -133,19 +133,19 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
133
133
|
return x.some((E) => E.includes(N));
|
|
134
134
|
}
|
|
135
135
|
return !0;
|
|
136
|
-
}, [
|
|
136
|
+
}, [R, i, C, G]);
|
|
137
137
|
return /* @__PURE__ */ t("div", { ref: ge, className: l(c("combobox"), ue), ...fe, children: /* @__PURE__ */ g(
|
|
138
138
|
r.Root,
|
|
139
139
|
{
|
|
140
|
-
value: n ?
|
|
140
|
+
value: n ? m : m[0] ?? null,
|
|
141
141
|
onValueChange: (e) => {
|
|
142
|
-
|
|
142
|
+
h(
|
|
143
143
|
n ? Array.isArray(e) ? e : [] : e
|
|
144
144
|
);
|
|
145
145
|
},
|
|
146
|
-
inputValue:
|
|
146
|
+
inputValue: M,
|
|
147
147
|
onInputValueChange: ye,
|
|
148
|
-
open:
|
|
148
|
+
open: P,
|
|
149
149
|
onOpenChange: S,
|
|
150
150
|
multiple: n,
|
|
151
151
|
disabled: I,
|
|
@@ -159,10 +159,10 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
159
159
|
/* @__PURE__ */ g(
|
|
160
160
|
p.Root,
|
|
161
161
|
{
|
|
162
|
-
ref:
|
|
163
|
-
size:
|
|
162
|
+
ref: j,
|
|
163
|
+
size: O,
|
|
164
164
|
disabled: I,
|
|
165
|
-
open:
|
|
165
|
+
open: P,
|
|
166
166
|
status: k,
|
|
167
167
|
placeholder: w,
|
|
168
168
|
displayValue: z,
|
|
@@ -182,7 +182,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
182
182
|
const f = i.get(x);
|
|
183
183
|
return /* @__PURE__ */ g(r.Chip, { className: l(c("combobox-chip")), children: [
|
|
184
184
|
f?.icon && /* @__PURE__ */ t("span", { className: l(c("combobox-chip-icon")), children: f.icon }),
|
|
185
|
-
/* @__PURE__ */ t("span", { className: l(c("combobox-chip-text")), children: f ?
|
|
185
|
+
/* @__PURE__ */ t("span", { className: l(c("combobox-chip-text")), children: f ? A ? A(f) : f.label : x }),
|
|
186
186
|
/* @__PURE__ */ t(
|
|
187
187
|
r.ChipRemove,
|
|
188
188
|
{
|
|
@@ -198,7 +198,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
198
198
|
placeholder: d.length > 0 ? "" : w,
|
|
199
199
|
className: q,
|
|
200
200
|
disabled: I,
|
|
201
|
-
onKeyDown: te(
|
|
201
|
+
onKeyDown: te(M)
|
|
202
202
|
}
|
|
203
203
|
)
|
|
204
204
|
] }) }) })
|
|
@@ -222,11 +222,11 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
222
222
|
) : /* @__PURE__ */ g(
|
|
223
223
|
p.Root,
|
|
224
224
|
{
|
|
225
|
-
ref:
|
|
225
|
+
ref: j,
|
|
226
226
|
as: "div",
|
|
227
|
-
size:
|
|
227
|
+
size: O,
|
|
228
228
|
disabled: I,
|
|
229
|
-
open:
|
|
229
|
+
open: P,
|
|
230
230
|
status: k,
|
|
231
231
|
placeholder: w,
|
|
232
232
|
displayValue: z,
|
|
@@ -246,7 +246,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
246
246
|
placeholder: w,
|
|
247
247
|
className: l(e, q),
|
|
248
248
|
disabled: I,
|
|
249
|
-
onKeyDown: te(
|
|
249
|
+
onKeyDown: te(M),
|
|
250
250
|
...a
|
|
251
251
|
}
|
|
252
252
|
)
|
|
@@ -270,11 +270,11 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
270
270
|
/* @__PURE__ */ t(r.Portal, { children: /* @__PURE__ */ t(
|
|
271
271
|
r.Positioner,
|
|
272
272
|
{
|
|
273
|
-
anchor:
|
|
273
|
+
anchor: j.current,
|
|
274
274
|
sideOffset: 4,
|
|
275
|
-
side:
|
|
276
|
-
align:
|
|
277
|
-
render:
|
|
275
|
+
side: T.startsWith("top") ? "top" : "bottom",
|
|
276
|
+
align: T.endsWith("Right") ? "end" : T === "top" || T === "bottom" ? "center" : "start",
|
|
277
|
+
render: Pe,
|
|
278
278
|
children: /* @__PURE__ */ t(
|
|
279
279
|
r.Popup,
|
|
280
280
|
{
|
|
@@ -283,7 +283,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
283
283
|
!be && c("combobox-popup--auto-width"),
|
|
284
284
|
b?.portal
|
|
285
285
|
),
|
|
286
|
-
render:
|
|
286
|
+
render: je,
|
|
287
287
|
children: /* @__PURE__ */ g("div", { className: l(c("combobox-container")), children: [
|
|
288
288
|
D && /* @__PURE__ */ g(ne, { children: [
|
|
289
289
|
/* @__PURE__ */ t(
|
|
@@ -299,18 +299,18 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
299
299
|
children: "Select All"
|
|
300
300
|
}
|
|
301
301
|
),
|
|
302
|
-
/* @__PURE__ */ t(r.Separator, { render:
|
|
302
|
+
/* @__PURE__ */ t(r.Separator, { render: Ee })
|
|
303
303
|
] }),
|
|
304
|
-
/* @__PURE__ */ g(
|
|
304
|
+
/* @__PURE__ */ g(Le, { fadeEdges: !0, children: [
|
|
305
305
|
/* @__PURE__ */ t(
|
|
306
306
|
r.List,
|
|
307
307
|
{
|
|
308
308
|
className: l(c("combobox-list"), b?.list),
|
|
309
|
-
render:
|
|
309
|
+
render: Ke,
|
|
310
310
|
children: (e) => {
|
|
311
311
|
const o = i.get(e);
|
|
312
312
|
if (!o) return null;
|
|
313
|
-
const a =
|
|
313
|
+
const a = m.includes(e);
|
|
314
314
|
return H ? H(o, {}) : /* @__PURE__ */ t(
|
|
315
315
|
se,
|
|
316
316
|
{
|
|
@@ -323,7 +323,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
323
323
|
icon: b?.optionIcon,
|
|
324
324
|
text: b?.optionText
|
|
325
325
|
},
|
|
326
|
-
labelRender:
|
|
326
|
+
labelRender: A ? (d) => A(o, d) : void 0,
|
|
327
327
|
render: (d) => /* @__PURE__ */ t(
|
|
328
328
|
r.Item,
|
|
329
329
|
{
|
|
@@ -341,7 +341,7 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
343
|
),
|
|
344
|
-
/* @__PURE__ */ t(r.Empty, { className: l(c("combobox-empty")), children: /* @__PURE__ */ t(
|
|
344
|
+
/* @__PURE__ */ t(r.Empty, { className: l(c("combobox-empty")), children: /* @__PURE__ */ t($e, { description: "No options found" }) })
|
|
345
345
|
] })
|
|
346
346
|
] })
|
|
347
347
|
}
|
|
@@ -351,11 +351,11 @@ const Le = (s) => /* @__PURE__ */ t(M.Root, { ...s }), Pe = (s) => /* @__PURE__
|
|
|
351
351
|
]
|
|
352
352
|
}
|
|
353
353
|
) });
|
|
354
|
-
},
|
|
354
|
+
}, He = Se(We), io = Object.assign(He, {
|
|
355
355
|
// Add any sub components here if needed
|
|
356
356
|
});
|
|
357
357
|
export {
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
io as Combobox,
|
|
359
|
+
io as default
|
|
360
360
|
};
|
|
361
361
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/combobox/component.tsx"],"sourcesContent":["\"use client\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport DisabledContext from \"antd/es/config-provider/DisabledContext\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { BaseMenuItem } from \"../base-menu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { SelectTrigger } from \"../select-trigger\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\n\nimport { XIcon } from \"@bioturing/assets\";\nimport { BaseMenu } from \"../base-menu\";\nimport { Empty } from \"../empty\";\nimport type { ComboboxOption, ComboboxProps } from \"./types\";\nimport { splitBySeparators } from \"./utils\";\nimport { useComboboxTokenInput } from \"./use-combobox-token-input\";\nimport \"./style.css\";\n\nexport type { ComboboxOption, ComboboxProps } from \"./types\";\n\n// Module-level static renderers — avoid recreating on every render\nconst positionerRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Root {...props} />;\nconst popupRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Popup {...props} />;\nconst separatorRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />;\nconst listRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.List {...props} />;\n\nconst ComboboxInner = <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n {\n options = [],\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select...\",\n disabled: disabledProp = false,\n status: statusProp,\n allowClear = false,\n multiple = false as M,\n showSearch: _showSearch = true,\n open: controlledOpen,\n onOpenChange,\n className,\n classNames,\n size = \"middle\",\n optionRender,\n onSearch,\n clearIcon,\n suffixIcon,\n placement = \"bottomLeft\",\n // showSelectionSummary: _showSelectionSummary = false,\n // selectionSummaryRender,\n showSelectAll = false,\n optionLabelRender,\n getOptionKeywords: _getOptionKeywords = (option: ComboboxOption<T, O>) => [\n String(option.value),\n reactNodeToString(option.label),\n ],\n popupMatchSelectWidth = true,\n addOnEnter = false,\n tokenSeparators,\n autoHighlight = true,\n filterOption,\n ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined ? defaultValue : multiple ? ([] as T[]) : undefined,\n );\n\n const [open, setOpen] = useControlledState(controlledOpen, onOpenChange, false);\n\n const cls = useCls();\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n // Get form context values\n const { status: contextStatus } = useContext(FormItemInputContext);\n const contextDisabled = useContext(DisabledContext);\n\n // Merge context values with props\n const mergedStatus = statusProp || contextStatus;\n const disabled = disabledProp || contextDisabled;\n\n const handleValueChange = useCallback(\n (newValue: M extends true ? T[] : T) => {\n setValue(newValue);\n onChange?.(newValue);\n },\n [setValue, onChange],\n );\n\n const handleSelectAll = useCallback(() => {\n if (multiple) {\n const allValues = options.map((option) => option.value);\n (handleValueChange as (v: T[]) => void)(allValues);\n }\n }, [multiple, options, handleValueChange]);\n\n const handleDeselectAll = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n }\n }, [multiple, handleValueChange]);\n\n const handleClear = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n } else {\n (handleValueChange as (v: T) => void)(undefined as T);\n }\n }, [multiple, handleValueChange]);\n\n // Prepare selected values\n const selectedValues = useMemo(() => {\n return Array.isArray(value) ? value : value ? [value] : [];\n }, [value]);\n\n // Build a Map for O(1) option lookups.\n // `options.find()` was being called 7+ times per render and inside\n // the hot `filter` path on every keystroke.\n const optionMap = useMemo(() => {\n const map = new Map<T, ComboboxOption<T, O>>();\n for (const opt of options) {\n map.set(opt.value, opt);\n }\n return map;\n }, [options]);\n\n // Select all option logic\n const selectAllOption = useMemo(() => {\n if (!showSelectAll || !multiple || options.length === 0) {\n return null;\n }\n\n const selectedFromFiltered = selectedValues.filter((val) => optionMap.has(val as T));\n const checked = selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 && selectedFromFiltered.length < options.length;\n\n return {\n checked,\n indeterminate,\n onToggle: () => {\n if (indeterminate || checked) {\n handleDeselectAll();\n } else {\n handleSelectAll();\n }\n },\n };\n }, [showSelectAll, multiple, options, optionMap, selectedValues, handleDeselectAll, handleSelectAll]);\n\n // Convert options to Base UI format\n const baseUIItems = useMemo(() => options.map((opt) => opt.value), [options]);\n\n // Get display value for SelectTrigger\n const displayValue = useMemo(() => {\n if (multiple) {\n return selectedValues.length > 0\n ? `${selectedValues.length} item${selectedValues.length === 1 ? \"\" : \"s\"} selected`\n : null;\n } else {\n const selectedOption = optionMap.get(selectedValues[0] as T);\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, optionMap]);\n\n const inputClassName = clsx(\n cls(\"combobox-input\"),\n cls(`combobox-input-${size}`),\n mergedStatus && cls(`combobox-input-${mergedStatus}`),\n classNames?.input,\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = optionMap.get(itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [optionMap],\n );\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n const { handleAddOnEnter, handleInputValueChange } = useComboboxTokenInput<T, O>({\n addOnEnter,\n multiple,\n tokenSeparators,\n optionMap,\n value: value as T | T[] | undefined,\n handleValueChange: handleValueChange as (nextValue: T | T[]) => void,\n setOpen,\n setSearchValue,\n onSearch,\n });\n\n const hasTokenSeparators = Boolean(tokenSeparators?.length);\n const effectiveAutoHighlight = multiple && hasTokenSeparators ? false : autoHighlight;\n\n const createInputKeyDownHandler = useCallback(\n (currentSearchValue: string) => (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && addOnEnter && currentSearchValue) {\n // In single-select mode with autoHighlight, let Base UI handle Enter\n // to select the natively highlighted item instead of exact matching.\n if (!multiple && autoHighlight) return;\n\n const matched = handleAddOnEnter(currentSearchValue);\n if (matched) {\n event.preventDefault();\n setSearchValue(\"\");\n onSearch?.(\"\");\n }\n }\n },\n [addOnEnter, autoHighlight, multiple, handleAddOnEnter, onSearch],\n );\n\n const mergedFilter = useMemo(() => {\n if (filterOption === false) {\n return null;\n }\n\n if (typeof filterOption === \"function\") {\n return (itemValue: T, query: string) => {\n const option = optionMap.get(itemValue);\n return filterOption(query, option);\n };\n }\n\n return (itemValue: T, query: string) => {\n if (!query) return true;\n const option = optionMap.get(itemValue);\n if (!option) return false;\n\n const tokens =\n tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(query, tokenSeparators)\n : [query];\n\n const keywords = _getOptionKeywords(option).map((k) => k.toLowerCase());\n\n const matchingTokenCount = tokens.filter((token) => {\n const lowerToken = token.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerToken));\n }).length;\n\n if (matchingTokenCount === 0) return false;\n if (tokens.length > 1 && matchingTokenCount > 1) {\n const lowerQuery = query.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerQuery));\n }\n return true;\n };\n }, [filterOption, optionMap, tokenSeparators, _getOptionKeywords]);\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple ? selectedValues : (selectedValues[0] ?? null)) as M extends true\n ? T[]\n : T | null\n }\n onValueChange={(newValue) => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)(\n Array.isArray(newValue) ? (newValue as T[]) : [],\n );\n } else {\n (handleValueChange as (v: T) => void)(newValue as T);\n }\n }}\n inputValue={searchValue}\n onInputValueChange={handleInputValueChange}\n open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n autoHighlight={effectiveAutoHighlight}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\n filter={mergedFilter}\n >\n {/* Single Selection Layout using SelectTrigger compound components */}\n {!multiple ? (\n <SelectTrigger.Root\n ref={inputContainerRef}\n as=\"div\"\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-single\"))}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n ) : (\n /* Multiple Selection Layout using SelectTrigger compound components */\n <SelectTrigger.Root\n ref={inputContainerRef}\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-multiple\"))}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips className={clsx(cls(\"combobox-chips\"), className)} {...rest}>\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = optionMap.get(item);\n return (\n <BaseCombobox.Chip key={item} className={clsx(cls(\"combobox-chip\"))}>\n {option?.icon && (\n <span className={clsx(cls(\"combobox-chip-icon\"))}>\n {option.icon}\n </span>\n )}\n <span className={clsx(cls(\"combobox-chip-text\"))}>\n {option\n ? optionLabelRender\n ? optionLabelRender(option)\n : option.label\n : item}\n </span>\n <BaseCombobox.ChipRemove\n className={clsx(cls(\"combobox-chip-remove\"))}\n >\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n })}\n\n <BaseCombobox.Input\n placeholder={selectedItems.length > 0 ? \"\" : placeholder}\n className={inputClassName}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n )}\n\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n anchor={inputContainerRef.current}\n sideOffset={4}\n side={placement.startsWith(\"top\") ? \"top\" : \"bottom\"}\n align={\n placement.endsWith(\"Right\")\n ? \"end\"\n : placement === \"top\" || placement === \"bottom\"\n ? \"center\"\n : \"start\"\n }\n render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(\n cls(\"combobox-popup\"),\n !popupMatchSelectWidth && cls(\"combobox-popup--auto-width\"),\n classNames?.portal,\n )}\n render={popupRender}\n >\n <div className={clsx(cls(\"combobox-container\"))}>\n {/* Select All Option */}\n {selectAllOption && (\n <>\n <BaseMenuItem\n as=\"button\"\n type=\"button\"\n className={clsx(cls(\"combobox-select-all\"))}\n selected={selectAllOption.checked}\n onClick={selectAllOption.onToggle}\n indeterminate={selectAllOption.indeterminate}\n showCheckbox\n >\n Select All\n </BaseMenuItem>\n <BaseCombobox.Separator render={separatorRender} />\n </>\n )}\n <ScrollArea fadeEdges>\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={listRender}\n >\n {(item: T) => {\n const option = optionMap.get(item);\n if (!option) return null;\n const isSelected = (selectedValues as T[]).includes(item);\n return optionRender ? (\n optionRender(option, {})\n ) : (\n <BaseMenuItem\n key={option.value}\n disabled={option.disabled}\n selected={isSelected}\n showCheckbox={multiple}\n icon={option.icon}\n classNames={{\n root: clsx(classNames?.option),\n icon: classNames?.optionIcon,\n text: classNames?.optionText,\n }}\n labelRender={\n optionLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n optionLabelRender(option, props)\n : undefined\n }\n render={(props: React.HTMLAttributes<HTMLElement>) => (\n <BaseCombobox.Item\n value={item as T}\n disabled={option.disabled}\n {...props}\n data-disabled={option.disabled}\n data-selected={isSelected}\n />\n )}\n >\n {option.label}\n </BaseMenuItem>\n );\n }}\n </BaseCombobox.List>\n\n <BaseCombobox.Empty className={clsx(cls(\"combobox-empty\"))}>\n <Empty description=\"No options found\" />\n </BaseCombobox.Empty>\n </ScrollArea>\n </div>\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n </div>\n );\n};\n\nconst MainCombobox = forwardRef(ComboboxInner) as <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n props: ComboboxProps<T, M, O> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReturnType<typeof ComboboxInner>;\n\nexport const Combobox = Object.assign(MainCombobox, {\n // Add any sub components here if needed\n});\n\nexport default Combobox;\n"],"names":["positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","placement","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","popupMatchSelectWidth","addOnEnter","tokenSeparators","autoHighlight","filterOption","rest","ref","value","setValue","useControlledState","open","setOpen","cls","useCls","inputContainerRef","useRef","contextStatus","useContext","FormItemInputContext","contextDisabled","DisabledContext","mergedStatus","disabled","handleValueChange","useCallback","newValue","handleSelectAll","allValues","handleDeselectAll","handleClear","selectedValues","useMemo","optionMap","map","opt","selectAllOption","selectedFromFiltered","val","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","itemToStringLabel","itemValue","searchValue","setSearchValue","useState","handleAddOnEnter","handleInputValueChange","useComboboxTokenInput","hasTokenSeparators","effectiveAutoHighlight","createInputKeyDownHandler","currentSearchValue","event","mergedFilter","query","tokens","splitBySeparators","keywords","k","matchingTokenCount","token","lowerToken","keyword","lowerQuery","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","icon","BaseMenuItem","ScrollArea","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/combobox/component.tsx"],"sourcesContent":["\"use client\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport DisabledContext from \"antd/es/config-provider/DisabledContext\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { BaseMenuItem } from \"../base-menu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { SelectTrigger } from \"../select-trigger\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\n\nimport { XIcon } from \"@bioturing/assets\";\nimport { BaseMenu } from \"../base-menu\";\nimport { Empty } from \"../empty\";\nimport type { ComboboxOption, ComboboxProps } from \"./types\";\nimport { hasTokenSeparator, splitBySeparators } from \"./utils\";\nimport { useComboboxTokenInput } from \"./use-combobox-token-input\";\nimport \"./style.css\";\n\nexport type { ComboboxOption, ComboboxProps } from \"./types\";\n\n// Module-level static renderers — avoid recreating on every render\nconst positionerRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Root {...props} />;\nconst popupRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Popup {...props} />;\nconst separatorRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />;\nconst listRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.List {...props} />;\n\nconst ComboboxInner = <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n {\n options = [],\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select...\",\n disabled: disabledProp = false,\n status: statusProp,\n allowClear = false,\n multiple = false as M,\n showSearch: _showSearch = true,\n open: controlledOpen,\n onOpenChange,\n className,\n classNames,\n size = \"middle\",\n optionRender,\n onSearch,\n clearIcon,\n suffixIcon,\n placement = \"bottomLeft\",\n // showSelectionSummary: _showSelectionSummary = false,\n // selectionSummaryRender,\n showSelectAll = false,\n optionLabelRender,\n getOptionKeywords: _getOptionKeywords = (option: ComboboxOption<T, O>) => [\n String(option.value),\n reactNodeToString(option.label),\n ],\n popupMatchSelectWidth = true,\n addOnEnter = false,\n tokenSeparators,\n autoHighlight = true,\n filterOption,\n ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined ? defaultValue : multiple ? ([] as T[]) : undefined,\n );\n\n const [open, setOpen] = useControlledState(controlledOpen, onOpenChange, false);\n\n const cls = useCls();\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n // Get form context values\n const { status: contextStatus } = useContext(FormItemInputContext);\n const contextDisabled = useContext(DisabledContext);\n\n // Merge context values with props\n const mergedStatus = statusProp || contextStatus;\n const disabled = disabledProp || contextDisabled;\n\n const handleValueChange = useCallback(\n (newValue: M extends true ? T[] : T) => {\n setValue(newValue);\n onChange?.(newValue);\n },\n [setValue, onChange],\n );\n\n const handleSelectAll = useCallback(() => {\n if (multiple) {\n const allValues = options.map((option) => option.value);\n (handleValueChange as (v: T[]) => void)(allValues);\n }\n }, [multiple, options, handleValueChange]);\n\n const handleDeselectAll = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n }\n }, [multiple, handleValueChange]);\n\n const handleClear = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n } else {\n (handleValueChange as (v: T) => void)(undefined as T);\n }\n }, [multiple, handleValueChange]);\n\n // Prepare selected values\n const selectedValues = useMemo(() => {\n return Array.isArray(value) ? value : value ? [value] : [];\n }, [value]);\n\n // Build a Map for O(1) option lookups.\n // `options.find()` was being called 7+ times per render and inside\n // the hot `filter` path on every keystroke.\n const optionMap = useMemo(() => {\n const map = new Map<T, ComboboxOption<T, O>>();\n for (const opt of options) {\n map.set(opt.value, opt);\n }\n return map;\n }, [options]);\n\n // Select all option logic\n const selectAllOption = useMemo(() => {\n if (!showSelectAll || !multiple || options.length === 0) {\n return null;\n }\n\n const selectedFromFiltered = selectedValues.filter((val) => optionMap.has(val as T));\n const checked = selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 && selectedFromFiltered.length < options.length;\n\n return {\n checked,\n indeterminate,\n onToggle: () => {\n if (indeterminate || checked) {\n handleDeselectAll();\n } else {\n handleSelectAll();\n }\n },\n };\n }, [showSelectAll, multiple, options, optionMap, selectedValues, handleDeselectAll, handleSelectAll]);\n\n // Convert options to Base UI format\n const baseUIItems = useMemo(() => options.map((opt) => opt.value), [options]);\n\n // Get display value for SelectTrigger\n const displayValue = useMemo(() => {\n if (multiple) {\n return selectedValues.length > 0\n ? `${selectedValues.length} item${selectedValues.length === 1 ? \"\" : \"s\"} selected`\n : null;\n } else {\n const selectedOption = optionMap.get(selectedValues[0] as T);\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, optionMap]);\n\n const inputClassName = clsx(\n cls(\"combobox-input\"),\n cls(`combobox-input-${size}`),\n mergedStatus && cls(`combobox-input-${mergedStatus}`),\n classNames?.input,\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = optionMap.get(itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [optionMap],\n );\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n const { handleAddOnEnter, handleInputValueChange } = useComboboxTokenInput<T, O>({\n addOnEnter,\n multiple,\n tokenSeparators,\n optionMap,\n value: value as T | T[] | undefined,\n handleValueChange: handleValueChange as (nextValue: T | T[]) => void,\n setOpen,\n setSearchValue,\n onSearch,\n });\n\n const hasTokenSeparators = Boolean(tokenSeparators?.length);\n const effectiveAutoHighlight =\n multiple && hasTokenSeparators && hasTokenSeparator(searchValue, tokenSeparators)\n ? false\n : autoHighlight;\n\n const createInputKeyDownHandler = useCallback(\n (currentSearchValue: string) => (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && addOnEnter && currentSearchValue) {\n // In single-select mode with autoHighlight, let Base UI handle Enter\n // to select the natively highlighted item instead of exact matching.\n if (!multiple && autoHighlight) return;\n\n const matched = handleAddOnEnter(currentSearchValue);\n if (matched) {\n event.preventDefault();\n setSearchValue(\"\");\n onSearch?.(\"\");\n }\n }\n },\n [addOnEnter, autoHighlight, multiple, handleAddOnEnter, onSearch],\n );\n\n const mergedFilter = useMemo(() => {\n if (filterOption === false) {\n return null;\n }\n\n if (typeof filterOption === \"function\") {\n return (itemValue: T, query: string) => {\n const option = optionMap.get(itemValue);\n return filterOption(query, option);\n };\n }\n\n return (itemValue: T, query: string) => {\n if (!query) return true;\n const option = optionMap.get(itemValue);\n if (!option) return false;\n\n const tokens =\n tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(query, tokenSeparators)\n : [query];\n\n const keywords = _getOptionKeywords(option).map((k) => k.toLowerCase());\n\n const matchingTokenCount = tokens.filter((token) => {\n const lowerToken = token.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerToken));\n }).length;\n\n if (matchingTokenCount === 0) return false;\n if (tokens.length > 1 && matchingTokenCount > 1) {\n const lowerQuery = query.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerQuery));\n }\n return true;\n };\n }, [filterOption, optionMap, tokenSeparators, _getOptionKeywords]);\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple ? selectedValues : (selectedValues[0] ?? null)) as M extends true\n ? T[]\n : T | null\n }\n onValueChange={(newValue) => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)(\n Array.isArray(newValue) ? (newValue as T[]) : [],\n );\n } else {\n (handleValueChange as (v: T) => void)(newValue as T);\n }\n }}\n inputValue={searchValue}\n onInputValueChange={handleInputValueChange}\n open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n autoHighlight={effectiveAutoHighlight}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\n filter={mergedFilter}\n >\n {/* Single Selection Layout using SelectTrigger compound components */}\n {!multiple ? (\n <SelectTrigger.Root\n ref={inputContainerRef}\n as=\"div\"\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-single\"))}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n ) : (\n /* Multiple Selection Layout using SelectTrigger compound components */\n <SelectTrigger.Root\n ref={inputContainerRef}\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-multiple\"))}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips className={clsx(cls(\"combobox-chips\"), className)} {...rest}>\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = optionMap.get(item);\n return (\n <BaseCombobox.Chip key={item} className={clsx(cls(\"combobox-chip\"))}>\n {option?.icon && (\n <span className={clsx(cls(\"combobox-chip-icon\"))}>\n {option.icon}\n </span>\n )}\n <span className={clsx(cls(\"combobox-chip-text\"))}>\n {option\n ? optionLabelRender\n ? optionLabelRender(option)\n : option.label\n : item}\n </span>\n <BaseCombobox.ChipRemove\n className={clsx(cls(\"combobox-chip-remove\"))}\n >\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n })}\n\n <BaseCombobox.Input\n placeholder={selectedItems.length > 0 ? \"\" : placeholder}\n className={inputClassName}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n )}\n\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n anchor={inputContainerRef.current}\n sideOffset={4}\n side={placement.startsWith(\"top\") ? \"top\" : \"bottom\"}\n align={\n placement.endsWith(\"Right\")\n ? \"end\"\n : placement === \"top\" || placement === \"bottom\"\n ? \"center\"\n : \"start\"\n }\n render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(\n cls(\"combobox-popup\"),\n !popupMatchSelectWidth && cls(\"combobox-popup--auto-width\"),\n classNames?.portal,\n )}\n render={popupRender}\n >\n <div className={clsx(cls(\"combobox-container\"))}>\n {/* Select All Option */}\n {selectAllOption && (\n <>\n <BaseMenuItem\n as=\"button\"\n type=\"button\"\n className={clsx(cls(\"combobox-select-all\"))}\n selected={selectAllOption.checked}\n onClick={selectAllOption.onToggle}\n indeterminate={selectAllOption.indeterminate}\n showCheckbox\n >\n Select All\n </BaseMenuItem>\n <BaseCombobox.Separator render={separatorRender} />\n </>\n )}\n <ScrollArea fadeEdges>\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={listRender}\n >\n {(item: T) => {\n const option = optionMap.get(item);\n if (!option) return null;\n const isSelected = (selectedValues as T[]).includes(item);\n return optionRender ? (\n optionRender(option, {})\n ) : (\n <BaseMenuItem\n key={option.value}\n disabled={option.disabled}\n selected={isSelected}\n showCheckbox={multiple}\n icon={option.icon}\n classNames={{\n root: clsx(classNames?.option),\n icon: classNames?.optionIcon,\n text: classNames?.optionText,\n }}\n labelRender={\n optionLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n optionLabelRender(option, props)\n : undefined\n }\n render={(props: React.HTMLAttributes<HTMLElement>) => (\n <BaseCombobox.Item\n value={item as T}\n disabled={option.disabled}\n {...props}\n data-disabled={option.disabled}\n data-selected={isSelected}\n />\n )}\n >\n {option.label}\n </BaseMenuItem>\n );\n }}\n </BaseCombobox.List>\n\n <BaseCombobox.Empty className={clsx(cls(\"combobox-empty\"))}>\n <Empty description=\"No options found\" />\n </BaseCombobox.Empty>\n </ScrollArea>\n </div>\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n </div>\n );\n};\n\nconst MainCombobox = forwardRef(ComboboxInner) as <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n props: ComboboxProps<T, M, O> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReturnType<typeof ComboboxInner>;\n\nexport const Combobox = Object.assign(MainCombobox, {\n // Add any sub components here if needed\n});\n\nexport default Combobox;\n"],"names":["positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","placement","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","popupMatchSelectWidth","addOnEnter","tokenSeparators","autoHighlight","filterOption","rest","ref","value","setValue","useControlledState","open","setOpen","cls","useCls","inputContainerRef","useRef","contextStatus","useContext","FormItemInputContext","contextDisabled","DisabledContext","mergedStatus","disabled","handleValueChange","useCallback","newValue","handleSelectAll","allValues","handleDeselectAll","handleClear","selectedValues","useMemo","optionMap","map","opt","selectAllOption","selectedFromFiltered","val","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","itemToStringLabel","itemValue","searchValue","setSearchValue","useState","handleAddOnEnter","handleInputValueChange","useComboboxTokenInput","hasTokenSeparators","effectiveAutoHighlight","hasTokenSeparator","createInputKeyDownHandler","currentSearchValue","event","mergedFilter","query","tokens","splitBySeparators","keywords","k","matchingTokenCount","token","lowerToken","keyword","lowerQuery","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","icon","BaseMenuItem","ScrollArea","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":";;;;;;;;;;;;;;;;;;;AA8BA,MAAMA,KAAmB,CAACC,MAAuC,gBAAAC,EAACC,EAAS,MAAT,EAAe,GAAGF,GAAO,GACrFG,KAAc,CAACH,MAAuC,gBAAAC,EAACC,EAAS,OAAT,EAAgB,GAAGF,GAAO,GACjFI,KAAkB,CAACJ,MAAuC,gBAAAC,EAACC,EAAS,SAAT,EAAkB,GAAGF,GAAO,GACvFK,KAAa,CAACL,MAAuC,gBAAAC,EAACC,EAAS,MAAT,EAAe,GAAGF,GAAO,GAE/EM,KAAgB,CAKpB;AAAA,EACE,SAAAC,IAAU,CAAA;AAAA,EACV,OAAOC;AAAA,EACP,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAUC,KAAe;AAAA,EACzB,QAAQC;AAAA,EACR,YAAAC,IAAa;AAAA,EACb,UAAAC,IAAW;AAAA,EACX,YAAYC,KAAc;AAAA,EAC1B,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AAAA;AAAA;AAAA,EAGZ,eAAAC,IAAgB;AAAA,EAChB,mBAAAC;AAAA,EACA,mBAAmBC,IAAqB,CAACC,MAAiC;AAAA,IACxE,OAAOA,EAAO,KAAK;AAAA,IACnBC,GAAkBD,EAAO,KAAK;AAAA,EAAA;AAAA,EAEhC,uBAAAE,KAAwB;AAAA,EACxB,YAAAC,IAAa;AAAA,EACb,iBAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,cAAAC;AAAA,EACA,GAAGC;AACL,GACAC,OACG;AACH,QAAM,CAACC,GAAOC,CAAQ,IAAIC;AAAA,IACxBjC;AAAA,IACAE;AAAA,IACAD,MAAiB,SAAYA,IAAeM,IAAY,CAAA,IAAa;AAAA,EAAA,GAGjE,CAAC2B,GAAMC,CAAO,IAAIF,GAAmBxB,IAAgBC,IAAc,EAAK,GAExE0B,IAAMC,GAAA,GACNC,IAAoBC,GAAuB,IAAI,GAG/C,EAAE,QAAQC,OAAkBC,GAAWC,EAAoB,GAC3DC,KAAkBF,GAAWG,EAAe,GAG5CC,IAAexC,MAAcmC,IAC7BM,IAAW1C,MAAgBuC,IAE3BI,IAAoBC;AAAA,IACxB,CAACC,MAAuC;AACtC,MAAAjB,EAASiB,CAAQ,GACjB/C,IAAW+C,CAAQ;AAAA,IACrB;AAAA,IACA,CAACjB,GAAU9B,CAAQ;AAAA,EAAA,GAGfgD,IAAkBF,EAAY,MAAM;AACxC,QAAIzC,GAAU;AACZ,YAAM4C,IAAYpD,EAAQ,IAAI,CAACuB,MAAWA,EAAO,KAAK;AACrD,MAAAyB,EAAuCI,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAAC5C,GAAUR,GAASgD,CAAiB,CAAC,GAEnCK,IAAoBJ,EAAY,MAAM;AAC1C,IAAIzC,KACDwC,EAAuC,CAAA,CAAE;AAAA,EAE9C,GAAG,CAACxC,GAAUwC,CAAiB,CAAC,GAE1BM,IAAcL,EAAY,MAAM;AACpC,IACGD,EADCxC,IACsC,CAAA,IAEF,MAFI;AAAA,EAI9C,GAAG,CAACA,GAAUwC,CAAiB,CAAC,GAG1BO,IAAiBC,EAAQ,MACtB,MAAM,QAAQxB,CAAK,IAAIA,IAAQA,IAAQ,CAACA,CAAK,IAAI,CAAA,GACvD,CAACA,CAAK,CAAC,GAKJyB,IAAYD,EAAQ,MAAM;AAC9B,UAAME,wBAAU,IAAA;AAChB,eAAWC,KAAO3D;AAChB,MAAA0D,EAAI,IAAIC,EAAI,OAAOA,CAAG;AAExB,WAAOD;AAAA,EACT,GAAG,CAAC1D,CAAO,CAAC,GAGN4D,IAAkBJ,EAAQ,MAAM;AACpC,QAAI,CAACpC,KAAiB,CAACZ,KAAYR,EAAQ,WAAW;AACpD,aAAO;AAGT,UAAM6D,IAAuBN,EAAe,OAAO,CAACO,MAAQL,EAAU,IAAIK,CAAQ,CAAC,GAC7EC,IAAUF,EAAqB,WAAW7D,EAAQ,UAAUA,EAAQ,SAAS,GAC7EgE,IACJH,EAAqB,SAAS,KAAKA,EAAqB,SAAS7D,EAAQ;AAE3E,WAAO;AAAA,MACL,SAAA+D;AAAA,MACA,eAAAC;AAAA,MACA,UAAU,MAAM;AACd,QAAIA,KAAiBD,IACnBV,EAAA,IAEAF,EAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAC/B,GAAeZ,GAAUR,GAASyD,GAAWF,GAAgBF,GAAmBF,CAAe,CAAC,GAG9Fc,KAAcT,EAAQ,MAAMxD,EAAQ,IAAI,CAAC2D,MAAQA,EAAI,KAAK,GAAG,CAAC3D,CAAO,CAAC,GAGtEkE,IAAeV,EAAQ,MACvBhD,IACK+C,EAAe,SAAS,IAC3B,GAAGA,EAAe,MAAM,QAAQA,EAAe,WAAW,IAAI,KAAK,GAAG,cACtE,OAEmBE,EAAU,IAAIF,EAAe,CAAC,CAAM,GACpC,SAAS,MAEjC,CAAC/C,GAAU+C,GAAgBE,CAAS,CAAC,GAElCU,IAAiBC;AAAA,IACrB/B,EAAI,gBAAgB;AAAA,IACpBA,EAAI,kBAAkBvB,CAAI,EAAE;AAAA,IAC5BgC,KAAgBT,EAAI,kBAAkBS,CAAY,EAAE;AAAA,IACpDjC,GAAY;AAAA,EAAA,GAGRwD,KAAoBpB;AAAA,IACxB,CAACqB,MAAiB;AAChB,YAAM/C,IAASkC,EAAU,IAAIa,CAAS;AACtC,aAAO9C,GAAkBD,GAAQ,SAAS,OAAO+C,CAAS,CAAC;AAAA,IAC7D;AAAA,IACA,CAACb,CAAS;AAAA,EAAA,GAGN,CAACc,GAAaC,EAAc,IAAIC,GAAS,EAAE,GAE3C,EAAE,kBAAAC,IAAkB,wBAAAC,GAAA,IAA2BC,GAA4B;AAAA,IAC/E,YAAAlD;AAAA,IACA,UAAAlB;AAAA,IACA,iBAAAmB;AAAA,IACA,WAAA8B;AAAA,IACA,OAAAzB;AAAA,IACA,mBAAAgB;AAAA,IACA,SAAAZ;AAAA,IACA,gBAAAoC;AAAA,IACA,UAAAxD;AAAA,EAAA,CACD,GAEK6D,KAAqB,EAAQlD,GAAiB,QAC9CmD,KACJtE,KAAYqE,MAAsBE,GAAkBR,GAAa5C,CAAe,IAC5E,KACAC,GAEAoD,KAA4B/B;AAAA,IAChC,CAACgC,MAA+B,CAACC,MAAiD;AAChF,UAAIA,EAAM,QAAQ,WAAWxD,KAAcuD,GAAoB;AAG7D,YAAI,CAACzE,KAAYoB,EAAe;AAGhC,QADgB8C,GAAiBO,CAAkB,MAEjDC,EAAM,eAAA,GACNV,GAAe,EAAE,GACjBxD,IAAW,EAAE;AAAA,MAEjB;AAAA,IACF;AAAA,IACA,CAACU,GAAYE,GAAepB,GAAUkE,IAAkB1D,CAAQ;AAAA,EAAA,GAG5DmE,KAAe3B,EAAQ,MACvB3B,MAAiB,KACZ,OAGL,OAAOA,KAAiB,aACnB,CAACyC,GAAcc,MAAkB;AACtC,UAAM7D,IAASkC,EAAU,IAAIa,CAAS;AACtC,WAAOzC,EAAauD,GAAO7D,CAAM;AAAA,EACnC,IAGK,CAAC+C,GAAcc,MAAkB;AACtC,QAAI,CAACA,EAAO,QAAO;AACnB,UAAM7D,IAASkC,EAAU,IAAIa,CAAS;AACtC,QAAI,CAAC/C,EAAQ,QAAO;AAEpB,UAAM8D,IACJ1D,KAAmBA,EAAgB,SAAS,IACxC2D,GAAkBF,GAAOzD,CAAe,IACxC,CAACyD,CAAK,GAENG,IAAWjE,EAAmBC,CAAM,EAAE,IAAI,CAACiE,MAAMA,EAAE,aAAa,GAEhEC,IAAqBJ,EAAO,OAAO,CAACK,MAAU;AAClD,YAAMC,IAAaD,EAAM,YAAA;AACzB,aAAOH,EAAS,KAAK,CAACK,OAAYA,GAAQ,SAASD,CAAU,CAAC;AAAA,IAChE,CAAC,EAAE;AAEH,QAAIF,MAAuB,EAAG,QAAO;AACrC,QAAIJ,EAAO,SAAS,KAAKI,IAAqB,GAAG;AAC/C,YAAMI,IAAaT,EAAM,YAAA;AACzB,aAAOG,EAAS,KAAK,CAACK,MAAYA,EAAQ,SAASC,CAAU,CAAC;AAAA,IAChE;AACA,WAAO;AAAA,EACT,GACC,CAAChE,GAAc4B,GAAW9B,GAAiBL,CAAkB,CAAC;AAEjE,SACE,gBAAA5B,EAAC,OAAA,EAAI,KAAAqC,IAAU,WAAWqC,EAAK/B,EAAI,UAAU,GAAGzB,EAAS,GAAI,GAAGkB,IAC9D,UAAA,gBAAAgE;AAAA,IAACC,EAAa;AAAA,IAAb;AAAA,MACC,OACGvF,IAAW+C,IAAkBA,EAAe,CAAC,KAAK;AAAA,MAIrD,eAAe,CAACL,MAAa;AAC3B,QACGF;AAAA,UADCxC,IAEA,MAAM,QAAQ0C,CAAQ,IAAKA,IAAmB,CAAA,IAGVA;AAAA,QAHW;AAAA,MAKrD;AAAA,MACA,YAAYqB;AAAA,MACZ,oBAAoBI;AAAA,MACpB,MAAAxC;AAAA,MACA,cAAcC;AAAA,MACd,UAAA5B;AAAA,MACA,UAAAuC;AAAA,MACA,eAAe+B;AAAA,MACf,OAAOb;AAAA,MACP,mBAAAI;AAAA,MACA,QAAQc;AAAA,MAGP,UAAA;AAAA,QAAC3E;AAAA;AAAA,UAyCA,gBAAAsF;AAAA,YAACE,EAAc;AAAA,YAAd;AAAA,cACC,KAAKzD;AAAA,cACL,MAAAzB;AAAA,cACA,UAAAiC;AAAA,cACA,MAAAZ;AAAA,cACA,QAAQW;AAAA,cACR,aAAA1C;AAAA,cACA,cAAA8D;AAAA,cACA,YAAA3D;AAAA,cACA,YAAAW;AAAA,cACA,WAAAD;AAAA,cACA,SAASqC;AAAA,cACT,cAAclB;AAAA,cACd,WAAWgC,EAAKvD,GAAY,SAASwB,EAAI,2BAA2B,CAAC;AAAA,cACrE,IAAG;AAAA,cAEH,UAAA;AAAA,gBAAA,gBAAA3C;AAAA,kBAACsG,EAAc;AAAA,kBAAd;AAAA,oBACC,eAAe,CAAC,EAAE,WAAApF,GAAW,UAAAqF,GAAU,GAAGnE,EAAAA,MACxC,gBAAApC,EAACqG,EAAa,OAAb,EAAmB,WAAW3B,EAAK/B,EAAI,gBAAgB,GAAGzB,CAAS,GAAI,GAAGkB,GACzE,UAAA,gBAAApC,EAACqG,EAAa,OAAb,EACE,UAAA,CAACG,MACA,gBAAAJ,EAAAK,IAAA,EACG,UAAA;AAAA,sBAAAD,EAAc,IAAI,CAACE,MAAY;AAC9B,8BAAM7E,IAASkC,EAAU,IAAI2C,CAAI;AACjC,+BACE,gBAAAN,EAACC,EAAa,MAAb,EAA6B,WAAW3B,EAAK/B,EAAI,eAAe,CAAC,GAC/D,UAAA;AAAA,0BAAAd,GAAQ,QACP,gBAAA7B,EAAC,QAAA,EAAK,WAAW0E,EAAK/B,EAAI,oBAAoB,CAAC,GAC5C,UAAAd,EAAO,KAAA,CACV;AAAA,0BAEF,gBAAA7B,EAAC,QAAA,EAAK,WAAW0E,EAAK/B,EAAI,oBAAoB,CAAC,GAC5C,UAAAd,IACGF,IACEA,EAAkBE,CAAM,IACxBA,EAAO,QACT6E,GACN;AAAA,0BACA,gBAAA1G;AAAA,4BAACqG,EAAa;AAAA,4BAAb;AAAA,8BACC,WAAW3B,EAAK/B,EAAI,sBAAsB,CAAC;AAAA,8BAE3C,4BAACgE,IAAA,CAAA,CAAM;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACT,EAAA,GAjBsBD,CAkBxB;AAAA,sBAEJ,CAAC;AAAA,sBAED,gBAAA1G;AAAA,wBAACqG,EAAa;AAAA,wBAAb;AAAA,0BACC,aAAaG,EAAc,SAAS,IAAI,KAAK9F;AAAA,0BAC7C,WAAW+D;AAAA,0BACX,UAAApB;AAAA,0BACA,WAAWiC,GAA0BT,CAAW;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAClD,EAAA,CACF,GAEJ,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGJ,gBAAA7E;AAAA,kBAACsG,EAAc;AAAA,kBAAd;AAAA,oBACC,QAAQ,CAACvG,MAAU,gBAAAC,EAACqG,EAAa,OAAb,EAAoB,GAAGtG,EAAA,CAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEpD,gBAAAC;AAAA,kBAACsG,EAAc;AAAA,kBAAd;AAAA,oBACC,QAAQ,CAACvG,GAAO,EAAE,MAAA6G,EAAA,MAChB,gBAAA5G,EAACqG,EAAa,SAAb,EAAsB,GAAGtG,GACxB,UAAA,gBAAAC,EAACqG,EAAa,MAAb,EAAmB,aAAK,EAAA,CAC3B;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEJ;AAAA,YAAA;AAAA,UAAA;AAAA,YA5GF,gBAAAD;AAAA,UAACE,EAAc;AAAA,UAAd;AAAA,YACC,KAAKzD;AAAA,YACL,IAAG;AAAA,YACH,MAAAzB;AAAA,YACA,UAAAiC;AAAA,YACA,MAAAZ;AAAA,YACA,QAAQW;AAAA,YACR,aAAA1C;AAAA,YACA,cAAA8D;AAAA,YACA,YAAA3D;AAAA,YACA,YAAAW;AAAA,YACA,WAAAD;AAAA,YACA,SAASqC;AAAA,YACT,cAAclB;AAAA,YACd,WAAWgC,EAAKvD,GAAY,SAASwB,EAAI,yBAAyB,CAAC;AAAA,YAEnE,UAAA;AAAA,cAAA,gBAAA3C;AAAA,gBAACsG,EAAc;AAAA,gBAAd;AAAA,kBACC,eAAe,CAAC,EAAE,WAAApF,GAAW,UAAAqF,GAAU,GAAGnE,QACxC,gBAAApC;AAAA,oBAACqG,EAAa;AAAA,oBAAb;AAAA,sBACC,aAAA3F;AAAA,sBACA,WAAWgE,EAAKxD,GAAWuD,CAAc;AAAA,sBACzC,UAAApB;AAAA,sBACA,WAAWiC,GAA0BT,CAAW;AAAA,sBAC/C,GAAGzC;AAAAA,oBAAA;AAAA,kBAAA;AAAA,gBACN;AAAA,cAAA;AAAA,cAGJ,gBAAApC;AAAA,gBAACsG,EAAc;AAAA,gBAAd;AAAA,kBACC,QAAQ,CAACvG,MAAU,gBAAAC,EAACqG,EAAa,OAAb,EAAoB,GAAGtG,EAAA,CAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEpD,gBAAAC;AAAA,gBAACsG,EAAc;AAAA,gBAAd;AAAA,kBACC,QAAQ,CAACvG,GAAO,EAAE,MAAA6G,EAAA,MAChB,gBAAA5G,EAACqG,EAAa,SAAb,EAAsB,GAAGtG,GACxB,UAAA,gBAAAC,EAACqG,EAAa,MAAb,EAAmB,aAAK,EAAA,CAC3B;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,QA4EJ,gBAAArG,EAACqG,EAAa,QAAb,EACC,UAAA,gBAAArG;AAAA,UAACqG,EAAa;AAAA,UAAb;AAAA,YACC,QAAQxD,EAAkB;AAAA,YAC1B,YAAY;AAAA,YACZ,MAAMpB,EAAU,WAAW,KAAK,IAAI,QAAQ;AAAA,YAC5C,OACEA,EAAU,SAAS,OAAO,IACtB,QACAA,MAAc,SAASA,MAAc,WACnC,WACA;AAAA,YAER,QAAQ3B;AAAA,YAER,UAAA,gBAAAE;AAAA,cAACqG,EAAa;AAAA,cAAb;AAAA,gBACC,WAAW3B;AAAA,kBACT/B,EAAI,gBAAgB;AAAA,kBACpB,CAACZ,MAAyBY,EAAI,4BAA4B;AAAA,kBAC1DxB,GAAY;AAAA,gBAAA;AAAA,gBAEd,QAAQjB;AAAA,gBAER,4BAAC,OAAA,EAAI,WAAWwE,EAAK/B,EAAI,oBAAoB,CAAC,GAE3C,UAAA;AAAA,kBAAAuB,KACC,gBAAAkC,EAAAK,IAAA,EACE,UAAA;AAAA,oBAAA,gBAAAzG;AAAA,sBAAC6G;AAAA,sBAAA;AAAA,wBACC,IAAG;AAAA,wBACH,MAAK;AAAA,wBACL,WAAWnC,EAAK/B,EAAI,qBAAqB,CAAC;AAAA,wBAC1C,UAAUuB,EAAgB;AAAA,wBAC1B,SAASA,EAAgB;AAAA,wBACzB,eAAeA,EAAgB;AAAA,wBAC/B,cAAY;AAAA,wBACb,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAlE,EAACqG,EAAa,WAAb,EAAuB,QAAQlG,GAAA,CAAiB;AAAA,kBAAA,GACnD;AAAA,kBAEF,gBAAAiG,EAACU,IAAA,EAAW,WAAS,IACnB,UAAA;AAAA,oBAAA,gBAAA9G;AAAA,sBAACqG,EAAa;AAAA,sBAAb;AAAA,wBACC,WAAW3B,EAAK/B,EAAI,eAAe,GAAGxB,GAAY,IAAI;AAAA,wBACtD,QAAQf;AAAA,wBAEP,WAACsG,MAAY;AACZ,gCAAM7E,IAASkC,EAAU,IAAI2C,CAAI;AACjC,8BAAI,CAAC7E,EAAQ,QAAO;AACpB,gCAAMkF,IAAclD,EAAuB,SAAS6C,CAAI;AACxD,iCAAOrF,IACLA,EAAaQ,GAAQ,CAAA,CAAE,IAEvB,gBAAA7B;AAAA,4BAAC6G;AAAA,4BAAA;AAAA,8BAEC,UAAUhF,EAAO;AAAA,8BACjB,UAAUkF;AAAA,8BACV,cAAcjG;AAAA,8BACd,MAAMe,EAAO;AAAA,8BACb,YAAY;AAAA,gCACV,MAAM6C,EAAKvD,GAAY,MAAM;AAAA,gCAC7B,MAAMA,GAAY;AAAA,gCAClB,MAAMA,GAAY;AAAA,8BAAA;AAAA,8BAEpB,aACEQ,IACI,CAAC5B,MACC4B,EAAkBE,GAAQ9B,CAAK,IACjC;AAAA,8BAEN,QAAQ,CAACA,MACP,gBAAAC;AAAA,gCAACqG,EAAa;AAAA,gCAAb;AAAA,kCACC,OAAOK;AAAA,kCACP,UAAU7E,EAAO;AAAA,kCAChB,GAAG9B;AAAA,kCACJ,iBAAe8B,EAAO;AAAA,kCACtB,iBAAekF;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAIlB,UAAAlF,EAAO;AAAA,4BAAA;AAAA,4BA1BHA,EAAO;AAAA,0BAAA;AAAA,wBA6BlB;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGF,gBAAA7B,EAACqG,EAAa,OAAb,EAAmB,WAAW3B,EAAK/B,EAAI,gBAAgB,CAAC,GACvD,UAAA,gBAAA3C,EAACgH,IAAA,EAAM,aAAY,oBAAmB,EAAA,CACxC;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA,EACF,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ,GAEMC,KAAeC,GAAW7G,EAAa,GAQhC8G,KAAW,OAAO,OAAOF,IAAc;AAAA;AAEpD,CAAC;"}
|