@frontify/fondue 12.0.0-beta.61 → 12.0.0-beta.62
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/dist/components/MultiSelect/MultiSelect.es.js +75 -73
- package/dist/components/MultiSelect/MultiSelect.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -3,44 +3,39 @@ import { useButton as re } from "@react-aria/button";
|
|
|
3
3
|
import { useFocusRing as le, FocusScope as oe } from "@react-aria/focus";
|
|
4
4
|
import { merge as ie } from "../../utilities/merge.es.js";
|
|
5
5
|
import { Validation as se } from "../../utilities/validation.es.js";
|
|
6
|
-
import { AnimatePresence as ce, motion as
|
|
7
|
-
import t, { useState as
|
|
8
|
-
import { getInputWidth as
|
|
9
|
-
import { useClickOutside as
|
|
10
|
-
import { CheckboxState as
|
|
11
|
-
import { Trigger as
|
|
12
|
-
import { Tag as
|
|
13
|
-
import { Menu as
|
|
14
|
-
import { OptionalItems as
|
|
15
|
-
import { Text as
|
|
16
|
-
import { MenuItem as
|
|
17
|
-
var
|
|
18
|
-
const
|
|
6
|
+
import { AnimatePresence as ce, motion as V } from "framer-motion";
|
|
7
|
+
import t, { useState as y, useRef as v, useEffect as ue } from "react";
|
|
8
|
+
import { getInputWidth as me, getPaddingClasses as fe } from "./helpers.es.js";
|
|
9
|
+
import { useClickOutside as ge } from "../../hooks/useClickOutside.es.js";
|
|
10
|
+
import { CheckboxState as de } from "../Checkbox/Checkbox.es.js";
|
|
11
|
+
import { Trigger as we, TriggerEmphasis as A } from "../Trigger/Trigger.es.js";
|
|
12
|
+
import { Tag as z, TagSize as g, TagType as B } from "../Tag/Tag.es.js";
|
|
13
|
+
import { Menu as pe } from "../Menu/Menu.es.js";
|
|
14
|
+
import { OptionalItems as he, DefaultItem as Ee, NoSearchResults as ke } from "./SelectMenuItems/SelectMenuItems.es.js";
|
|
15
|
+
import { Text as F } from "../../typography/Text/Text.es.js";
|
|
16
|
+
import { MenuItem as xe } from "../MenuItem/MenuItem.es.js";
|
|
17
|
+
var ve = /* @__PURE__ */ ((n) => (n.Default = "Default", n.Summarized = "Summarized", n))(ve || {}), Ce = /* @__PURE__ */ ((n) => (n.Small = "Small", n.Medium = "Medium", n))(Ce || {}), De = /* @__PURE__ */ ((n) => (n.Default = "Default", n.Weak = "Weak", n))(De || {});
|
|
18
|
+
const qe = ({
|
|
19
19
|
items: n,
|
|
20
20
|
activeItemKeys: r,
|
|
21
|
-
onSelectionChange:
|
|
22
|
-
ariaLabel:
|
|
23
|
-
disabled:
|
|
21
|
+
onSelectionChange: d,
|
|
22
|
+
ariaLabel: j = "Select list",
|
|
23
|
+
disabled: P = !1,
|
|
24
24
|
placeholder: s,
|
|
25
25
|
label: C,
|
|
26
26
|
filterLabel: D,
|
|
27
|
-
noResultsLabel:
|
|
27
|
+
noResultsLabel: q,
|
|
28
28
|
type: S = "Default",
|
|
29
|
-
size:
|
|
30
|
-
validation:
|
|
29
|
+
size: w = "Medium",
|
|
30
|
+
validation: G = se.Default,
|
|
31
31
|
emphasis: c = "Default",
|
|
32
32
|
decorator: b = null,
|
|
33
|
-
filterable:
|
|
34
|
-
summarizedLabel:
|
|
35
|
-
indeterminateItemKeys:
|
|
33
|
+
filterable: p = !1,
|
|
34
|
+
summarizedLabel: h,
|
|
35
|
+
indeterminateItemKeys: u
|
|
36
36
|
}) => {
|
|
37
|
-
const [l, E] =
|
|
38
|
-
|
|
39
|
-
const a = { ...e, label: e.value };
|
|
40
|
-
return h != null && h.includes(e.value) ? { ...a, state: ge.Mixed } : a;
|
|
41
|
-
})
|
|
42
|
-
), H = !!o.find((e) => !e.isCategory && !e.isDivider), J = v(null), i = v(null), k = v(null), { isFocusVisible: Q, focusProps: U } = le(), u = r.length > 0, X = p != null ? p : [r.length, "selected"].join(" "), Y = ue(u, D, s), T = () => E(!1);
|
|
43
|
-
fe(null, T, [i == null ? void 0 : i.current]);
|
|
37
|
+
const [l, E] = y(!1), [o, T] = y([]), H = !!o.find((e) => !e.isCategory && !e.isDivider), J = v(null), i = v(null), k = v(null), { isFocusVisible: Q, focusProps: U } = le(), m = r.length > 0, X = h != null ? h : [r.length, "selected"].join(" "), Y = me(m, D, s), N = () => E(!1);
|
|
38
|
+
ge(null, N, [i == null ? void 0 : i.current]);
|
|
44
39
|
const x = () => E((e) => !e), { buttonProps: Z } = re(
|
|
45
40
|
{
|
|
46
41
|
onPress: x,
|
|
@@ -50,28 +45,35 @@ const Pe = ({
|
|
|
50
45
|
elementType: "div"
|
|
51
46
|
},
|
|
52
47
|
J
|
|
53
|
-
),
|
|
48
|
+
), W = (e) => {
|
|
54
49
|
const a = new Set(r);
|
|
55
|
-
a.has(e) ? a.delete(e) : a.add(e),
|
|
50
|
+
a.has(e) ? a.delete(e) : a.add(e), d(Array.from(a));
|
|
56
51
|
}, _ = (e) => {
|
|
57
|
-
e.code === "Space" && (k.current !== document.activeElement || !
|
|
58
|
-
}, $ = () => c === "Weak" ?
|
|
59
|
-
|
|
52
|
+
e.code === "Space" && (k.current !== document.activeElement || !p) && x();
|
|
53
|
+
}, $ = () => c === "Weak" ? m ? "" : "tw-text-text-weak" : "", M = () => c === "Weak" || !l ? B.Selected : B.SelectedWithFocus, L = (e) => {
|
|
54
|
+
T(
|
|
60
55
|
n.filter((a) => a.isCategory || a.isDivider ? !0 : a.value.toLowerCase().includes(e.currentTarget.value.toLowerCase())).map((a) => ({ ...a, label: a.value }))
|
|
61
56
|
);
|
|
62
57
|
};
|
|
63
|
-
return
|
|
58
|
+
return ue(() => {
|
|
59
|
+
T(
|
|
60
|
+
n.map((e) => {
|
|
61
|
+
const a = { ...e, label: e.value };
|
|
62
|
+
return u != null && u.includes(e.value) ? { ...a, state: de.Mixed } : a;
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
}, [n, u]), /* @__PURE__ */ t.createElement("div", {
|
|
64
66
|
className: "tw-relative",
|
|
65
67
|
ref: i
|
|
66
|
-
}, /* @__PURE__ */ t.createElement(
|
|
67
|
-
disabled:
|
|
68
|
+
}, /* @__PURE__ */ t.createElement(we, {
|
|
69
|
+
disabled: P,
|
|
68
70
|
buttonProps: Z,
|
|
69
71
|
isFocusVisible: Q,
|
|
70
72
|
isOpen: l,
|
|
71
|
-
validation:
|
|
72
|
-
emphasis: c === "Default" ?
|
|
73
|
+
validation: G,
|
|
74
|
+
emphasis: c === "Default" ? A.Default : A.Weak
|
|
73
75
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
74
|
-
className: ie(["tw-flex tw-flex-1 tw-gap-2",
|
|
76
|
+
className: ie(["tw-flex tw-flex-1 tw-gap-2", fe(w)])
|
|
75
77
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
76
78
|
className: "tw-flex tw-flex-1 tw-gap-2 focus:tw-outline-0",
|
|
77
79
|
onClick: (e) => {
|
|
@@ -85,28 +87,28 @@ const Pe = ({
|
|
|
85
87
|
className: "tw-flex tw-flex-wrap tw-gap-2 tw-outline-none tw-items-center tw-min-h-[28px]"
|
|
86
88
|
}, b && /* @__PURE__ */ t.createElement("div", {
|
|
87
89
|
className: $()
|
|
88
|
-
}, b), C &&
|
|
90
|
+
}, b), C && m && /* @__PURE__ */ t.createElement(F, {
|
|
89
91
|
weight: "strong"
|
|
90
|
-
}, C), S === "Default" && r.map((e) => /* @__PURE__ */ t.createElement(
|
|
92
|
+
}, C), S === "Default" && r.map((e) => /* @__PURE__ */ t.createElement(z, {
|
|
91
93
|
key: e,
|
|
92
|
-
type:
|
|
94
|
+
type: M(),
|
|
93
95
|
label: e.toString(),
|
|
94
|
-
size:
|
|
95
|
-
onClick: () =>
|
|
96
|
-
})), S === "Summarized" &&
|
|
97
|
-
type:
|
|
96
|
+
size: w === "Small" ? g.Small : g.Medium,
|
|
97
|
+
onClick: () => W(e)
|
|
98
|
+
})), S === "Summarized" && m && /* @__PURE__ */ t.createElement(z, {
|
|
99
|
+
type: M(),
|
|
98
100
|
label: X,
|
|
99
|
-
size:
|
|
100
|
-
onClick: () =>
|
|
101
|
-
}), !
|
|
101
|
+
size: w === "Small" ? g.Small : g.Medium,
|
|
102
|
+
onClick: () => d([])
|
|
103
|
+
}), !p && r.length === 0 && s && /* @__PURE__ */ t.createElement(F, {
|
|
102
104
|
color: "weak"
|
|
103
|
-
}, s)),
|
|
105
|
+
}, s)), p && /* @__PURE__ */ t.createElement("input", {
|
|
104
106
|
ref: k,
|
|
105
107
|
className: "focus:tw-outline-0 tw-text-s tw-bg-transparent",
|
|
106
108
|
style: { maxWidth: Y },
|
|
107
109
|
placeholder: r.length === 0 ? s : D,
|
|
108
110
|
onChange: L
|
|
109
|
-
})))), /* @__PURE__ */ t.createElement(ce, null, l && (c === "Default" ? /* @__PURE__ */ t.createElement(
|
|
111
|
+
})))), /* @__PURE__ */ t.createElement(ce, null, l && (c === "Default" ? /* @__PURE__ */ t.createElement(V.div, {
|
|
110
112
|
className: "tw-absolute tw-left-0 tw-w-full tw-overflow-hidden tw-p-0 tw-shadow-mid tw-list-none tw-m-0 tw-mt-2 tw-z-30 tw-bg-base tw-min-w-[18rem]",
|
|
111
113
|
key: "content",
|
|
112
114
|
initial: { height: 0 },
|
|
@@ -119,11 +121,11 @@ const Pe = ({
|
|
|
119
121
|
className: "tw-p-4"
|
|
120
122
|
}, /* @__PURE__ */ t.createElement(ae, {
|
|
121
123
|
activeValues: r.map((e) => e.toString()),
|
|
122
|
-
setActiveValues:
|
|
124
|
+
setActiveValues: d,
|
|
123
125
|
checkboxes: o.filter((e) => !e.isDivider && !e.isCategory),
|
|
124
126
|
direction: ne.Vertical,
|
|
125
|
-
ariaLabel:
|
|
126
|
-
})))) : /* @__PURE__ */ t.createElement(
|
|
127
|
+
ariaLabel: j
|
|
128
|
+
})))) : /* @__PURE__ */ t.createElement(V.div, {
|
|
127
129
|
initial: {
|
|
128
130
|
opacity: 0
|
|
129
131
|
},
|
|
@@ -136,35 +138,35 @@ const Pe = ({
|
|
|
136
138
|
transition: { duration: 0.15 }
|
|
137
139
|
},
|
|
138
140
|
transition: { ease: [0.04, 0.62, 0.23, 0.98] }
|
|
139
|
-
}, /* @__PURE__ */ t.createElement(
|
|
141
|
+
}, /* @__PURE__ */ t.createElement(pe, {
|
|
140
142
|
open: l,
|
|
141
|
-
onClose:
|
|
143
|
+
onClose: N,
|
|
142
144
|
triggerRef: i
|
|
143
145
|
}, o.length > 0 && H ? o.map((e, a) => {
|
|
144
|
-
const { label:
|
|
145
|
-
return e.isCategory || e.isDivider ? /* @__PURE__ */ t.createElement(
|
|
146
|
-
key:
|
|
146
|
+
const { label: R, value: f, avatar: I, imgSrc: K } = e, O = !!r.find((te) => te === f), ee = () => W(R);
|
|
147
|
+
return e.isCategory || e.isDivider ? /* @__PURE__ */ t.createElement(he, {
|
|
148
|
+
key: f + e,
|
|
147
149
|
checkboxes: o,
|
|
148
150
|
index: a
|
|
149
|
-
}) : /* @__PURE__ */ t.createElement(
|
|
150
|
-
checked:
|
|
151
|
+
}) : /* @__PURE__ */ t.createElement(xe, {
|
|
152
|
+
checked: O,
|
|
151
153
|
onClick: ee,
|
|
152
|
-
key:
|
|
153
|
-
}, /* @__PURE__ */ t.createElement(
|
|
154
|
-
label:
|
|
155
|
-
value:
|
|
154
|
+
key: f
|
|
155
|
+
}, /* @__PURE__ */ t.createElement(Ee, {
|
|
156
|
+
label: R,
|
|
157
|
+
value: f,
|
|
156
158
|
avatar: I,
|
|
157
159
|
imgSrc: K,
|
|
158
|
-
isChecked:
|
|
160
|
+
isChecked: O
|
|
159
161
|
}));
|
|
160
|
-
}) : /* @__PURE__ */ t.createElement(
|
|
161
|
-
label:
|
|
162
|
+
}) : /* @__PURE__ */ t.createElement(ke, {
|
|
163
|
+
label: q
|
|
162
164
|
}))))));
|
|
163
165
|
};
|
|
164
166
|
export {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
qe as MultiSelect,
|
|
168
|
+
De as MultiSelectEmphasis,
|
|
169
|
+
Ce as MultiSelectSize,
|
|
170
|
+
ve as MultiSelectType
|
|
169
171
|
};
|
|
170
172
|
//# sourceMappingURL=MultiSelect.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.es.js","sources":["../../../src/components/MultiSelect/MultiSelect.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Checklist, ChecklistDirection } from '@components/Checklist/Checklist';\nimport { Tag, TagSize, TagType } from '@components/Tag';\nimport { Trigger, TriggerEmphasis } from '@components/Trigger';\nimport { Text } from '@typography/Text';\nimport { useButton } from '@react-aria/button';\nimport { FocusScope, useFocusRing } from '@react-aria/focus';\nimport { merge } from '@utilities/merge';\nimport { Validation } from '@utilities/validation';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport React, { ChangeEvent, FC, KeyboardEvent, useRef, useState } from 'react';\nimport { getInputWidth, getPaddingClasses } from './helpers';\nimport { Menu } from '@components/Menu';\nimport { MenuItem } from '@components/MenuItem';\nimport { useClickOutside } from '@hooks/useClickOutside';\nimport { DefaultItem, NoSearchResults, OptionalItems } from './SelectMenuItems';\nimport { CheckboxState } from '@components/Checkbox/Checkbox';\n\nexport enum MultiSelectType {\n Default = 'Default',\n Summarized = 'Summarized',\n}\n\nexport enum MultiSelectSize {\n Small = 'Small',\n Medium = 'Medium',\n}\n\nexport enum MultiSelectEmphasis {\n Default = 'Default',\n Weak = 'Weak',\n}\n\nexport type MultiSelectItem = {\n value: string;\n isCategory?: boolean;\n isDivider?: boolean;\n avatar?: React.ReactNode;\n imgSrc?: string;\n ariaLabel?: string;\n};\n\nexport type MultiSelectProps = {\n items: MultiSelectItem[];\n activeItemKeys: (string | number)[];\n disabled?: boolean;\n onSelectionChange: (keys: (string | number)[]) => void;\n ariaLabel?: string;\n label?: string;\n placeholder?: string;\n type?: MultiSelectType;\n size?: MultiSelectSize;\n validation?: Validation;\n emphasis?: MultiSelectEmphasis;\n decorator?: React.ReactNode;\n filterable?: boolean;\n filterLabel?: string;\n noResultsLabel?: string;\n summarizedLabel?: string;\n indeterminateItemKeys?: (string | number)[];\n};\n\nexport type Item = {\n label: string;\n value: string;\n avatar?: React.ReactNode;\n isCategory?: boolean;\n isDivider?: boolean;\n imgSrc?: string;\n ariaLabel?: string;\n};\n\nexport const MultiSelect: FC<MultiSelectProps> = ({\n items,\n activeItemKeys,\n onSelectionChange,\n ariaLabel = 'Select list',\n disabled = false,\n placeholder,\n label,\n filterLabel,\n noResultsLabel,\n type = MultiSelectType.Default,\n size = MultiSelectSize.Medium,\n validation = Validation.Default,\n emphasis = MultiSelectEmphasis.Default,\n decorator = null,\n filterable = false,\n summarizedLabel: summarizedLabelFromProps,\n indeterminateItemKeys,\n}) => {\n const [open, setOpen] = useState(false);\n const [checkboxes, setCheckboxes] = useState<Item[]>(\n items.map((item) => {\n const checkboxBaseItem = { ...item, label: item.value };\n if (indeterminateItemKeys?.includes(item.value)) {\n return { ...checkboxBaseItem, state: CheckboxState.Mixed };\n }\n return checkboxBaseItem;\n }),\n );\n const hasResults = !!checkboxes.find((item) => !item.isCategory && !item.isDivider);\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const multiSelectRef = useRef<HTMLDivElement | null>(null);\n const filterInputRef = useRef<HTMLInputElement | null>(null);\n const { isFocusVisible, focusProps } = useFocusRing();\n\n const hasSelectedItems = activeItemKeys.length > 0;\n const summarizedLabel = summarizedLabelFromProps ?? [activeItemKeys.length, 'selected'].join(' ');\n const inputWidth = getInputWidth(hasSelectedItems, filterLabel, placeholder);\n\n const handleClose = () => setOpen(false);\n\n useClickOutside(null, handleClose, [multiSelectRef?.current as HTMLElement]);\n\n const toggleOpen = () => setOpen((open) => !open);\n\n const { buttonProps } = useButton(\n {\n onPress: toggleOpen,\n onKeyDown: (e) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n },\n elementType: 'div',\n },\n triggerRef,\n );\n\n const toggleSelection = (key: string | number) => {\n const keySet = new Set(activeItemKeys);\n\n if (keySet.has(key)) {\n keySet.delete(key);\n } else {\n keySet.add(key);\n }\n\n onSelectionChange(Array.from(keySet));\n };\n\n const handleSpacebarToggle = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.code === 'Space' && (filterInputRef.current !== document.activeElement || !filterable)) {\n toggleOpen();\n }\n };\n\n const getDecoratorClasses = () => {\n if (emphasis === MultiSelectEmphasis.Weak) {\n return hasSelectedItems ? '' : 'tw-text-text-weak';\n }\n\n return '';\n };\n\n const getTagType = () => {\n if (emphasis === MultiSelectEmphasis.Weak || !open) {\n return TagType.Selected;\n }\n return TagType.SelectedWithFocus;\n };\n\n const handleFilterChange = (e: ChangeEvent<HTMLInputElement>) => {\n setCheckboxes(\n items\n .filter((item) => {\n if (item.isCategory || item.isDivider) {\n return true;\n }\n\n return item.value.toLowerCase().includes(e.currentTarget.value.toLowerCase());\n })\n .map((item) => ({ ...item, label: item.value })),\n );\n };\n\n return (\n <div className=\"tw-relative\" ref={multiSelectRef}>\n <Trigger\n disabled={disabled}\n buttonProps={buttonProps}\n isFocusVisible={isFocusVisible}\n isOpen={open}\n validation={validation}\n emphasis={emphasis === MultiSelectEmphasis.Default ? TriggerEmphasis.Default : TriggerEmphasis.Weak}\n >\n <div className={merge(['tw-flex tw-flex-1 tw-gap-2', getPaddingClasses(size)])}>\n <div\n className=\"tw-flex tw-flex-1 tw-gap-2 focus:tw-outline-0\"\n onClick={(e) => {\n if (e.target === filterInputRef.current && open) {\n return;\n }\n toggleOpen();\n }}\n role=\"button\"\n {...focusProps}\n tabIndex={0}\n onKeyDown={handleSpacebarToggle}\n >\n <div className=\"tw-flex tw-flex-wrap tw-gap-2 tw-outline-none tw-items-center tw-min-h-[28px]\">\n {decorator && <div className={getDecoratorClasses()}>{decorator}</div>}\n {label && hasSelectedItems && <Text weight=\"strong\">{label}</Text>}\n {type === MultiSelectType.Default &&\n activeItemKeys.map((key) => (\n <Tag\n key={key}\n type={getTagType()}\n label={key.toString()}\n size={size === MultiSelectSize.Small ? TagSize.Small : TagSize.Medium}\n onClick={() => toggleSelection(key)}\n />\n ))}\n\n {type === MultiSelectType.Summarized && hasSelectedItems && (\n <Tag\n type={getTagType()}\n label={summarizedLabel}\n size={size === MultiSelectSize.Small ? TagSize.Small : TagSize.Medium}\n onClick={() => onSelectionChange([])}\n />\n )}\n\n {!filterable && activeItemKeys.length === 0 && placeholder && (\n <Text color=\"weak\">{placeholder}</Text>\n )}\n </div>\n {filterable && (\n <input\n ref={filterInputRef}\n className=\"focus:tw-outline-0 tw-text-s tw-bg-transparent\"\n style={{ maxWidth: inputWidth }}\n placeholder={activeItemKeys.length === 0 ? placeholder : filterLabel}\n onChange={handleFilterChange}\n />\n )}\n </div>\n </div>\n </Trigger>\n <AnimatePresence>\n {open &&\n (emphasis === MultiSelectEmphasis.Default ? (\n <motion.div\n className=\"tw-absolute tw-left-0 tw-w-full tw-overflow-hidden tw-p-0 tw-shadow-mid tw-list-none tw-m-0 tw-mt-2 tw-z-30 tw-bg-base tw-min-w-[18rem]\"\n key=\"content\"\n initial={{ height: 0 }}\n animate={{ height: 'auto' }}\n exit={{ height: 0 }}\n transition={{ ease: [0.04, 0.62, 0.23, 0.98] }}\n >\n <FocusScope restoreFocus>\n <div className=\"tw-p-4\">\n <Checklist\n activeValues={activeItemKeys.map((key) => key.toString())}\n setActiveValues={onSelectionChange}\n checkboxes={checkboxes.filter((item) => !item.isDivider && !item.isCategory)}\n direction={ChecklistDirection.Vertical}\n ariaLabel={ariaLabel}\n />\n </div>\n </FocusScope>\n </motion.div>\n ) : (\n <motion.div\n initial={{\n opacity: 0,\n }}\n animate={{\n opacity: 1,\n transition: { duration: 0.15 },\n }}\n exit={{\n opacity: 0,\n transition: { duration: 0.15 },\n }}\n transition={{ ease: [0.04, 0.62, 0.23, 0.98] }}\n >\n <Menu open={open} onClose={handleClose} triggerRef={multiSelectRef}>\n {checkboxes.length > 0 && hasResults ? (\n checkboxes.map((item, index) => {\n const { label, value, avatar, imgSrc } = item;\n const isChecked = !!activeItemKeys.find((key) => key === value);\n const handleMenuItemClick = () => toggleSelection(label);\n\n if (item.isCategory || item.isDivider) {\n return (\n <OptionalItems\n key={value + item}\n {...{\n checkboxes,\n index,\n }}\n />\n );\n }\n\n return (\n <MenuItem checked={isChecked} onClick={handleMenuItemClick} key={value}>\n <DefaultItem {...{ label, value, avatar, imgSrc, isChecked }} />\n </MenuItem>\n );\n })\n ) : (\n <NoSearchResults label={noResultsLabel} />\n )}\n </Menu>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n );\n};\n"],"names":["MultiSelectType","MultiSelectSize","MultiSelectEmphasis","MultiSelect","items","activeItemKeys","onSelectionChange","ariaLabel","disabled","placeholder","label","filterLabel","noResultsLabel","type","size","validation","Validation","emphasis","decorator","filterable","summarizedLabelFromProps","indeterminateItemKeys","open","setOpen","useState","checkboxes","setCheckboxes","item","checkboxBaseItem","CheckboxState","hasResults","triggerRef","useRef","multiSelectRef","filterInputRef","isFocusVisible","focusProps","useFocusRing","hasSelectedItems","summarizedLabel","inputWidth","getInputWidth","handleClose","useClickOutside","toggleOpen","buttonProps","useButton","toggleSelection","key","keySet","handleSpacebarToggle","getDecoratorClasses","getTagType","TagType","handleFilterChange","React","Trigger","TriggerEmphasis","merge","getPaddingClasses","Text","Tag","TagSize","AnimatePresence","motion","FocusScope","Checklist","ChecklistDirection","Menu","index","value","avatar","imgSrc","isChecked","handleMenuItemClick","OptionalItems","MenuItem","DefaultItem","NoSearchResults"],"mappings":";;;;;;;;;;;;;;;;AAmBY,IAAAA,uBAAAA,OACRA,EAAA,UAAU,WACVA,EAAA,aAAa,cAFLA,IAAAA,MAAA,CAAA,CAAA,GAKAC,uBAAAA,OACRA,EAAA,QAAQ,SACRA,EAAA,SAAS,UAFDA,IAAAA,MAAA,CAAA,CAAA,GAKAC,uBAAAA,OACRA,EAAA,UAAU,WACVA,EAAA,OAAO,QAFCA,IAAAA,MAAA,CAAA,CAAA;AA4CL,MAAMC,KAAoC,CAAC;AAAA,EAC9C,OAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAaC,GAAW;AAAA,EACxB,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,iBAAiBC;AAAA,EACjB,uBAAAC;AACJ,MAAM;AACF,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAACC,GAAYC,CAAa,IAAIF;AAAA,IAChCpB,EAAM,IAAI,CAACuB,MAAS;AAChB,YAAMC,IAAmB,EAAE,GAAGD,GAAM,OAAOA,EAAK;AAChD,aAAIN,KAAA,QAAAA,EAAuB,SAASM,EAAK,SAC9B,EAAE,GAAGC,GAAkB,OAAOC,GAAc,MAAM,IAEtDD;AAAA,IAAA,CACV;AAAA,EAAA,GAECE,IAAa,CAAC,CAACL,EAAW,KAAK,CAACE,MAAS,CAACA,EAAK,cAAc,CAACA,EAAK,SAAS,GAC5EI,IAAaC,EAA8B,IAAI,GAC/CC,IAAiBD,EAA8B,IAAI,GACnDE,IAAiBF,EAAgC,IAAI,GACrD,EAAE,gBAAAG,GAAgB,YAAAC,EAAW,IAAIC,GAAa,GAE9CC,IAAmBjC,EAAe,SAAS,GAC3CkC,IAAkBnB,KAAA,OAAAA,IAA4B,CAACf,EAAe,QAAQ,UAAU,EAAE,KAAK,GAAG,GAC1FmC,IAAaC,GAAcH,GAAkB3B,GAAaF,CAAW,GAErEiC,IAAc,MAAMnB,EAAQ,EAAK;AAEvC,EAAAoB,GAAgB,MAAMD,GAAa,CAACT,KAAA,gBAAAA,EAAgB,OAAsB,CAAC;AAE3E,QAAMW,IAAa,MAAMrB,EAAQ,CAACD,MAAS,CAACA,CAAI,GAE1C,EAAE,aAAAuB,MAAgBC;AAAA,IACpB;AAAA,MACI,SAASF;AAAA,MACT,WAAW,CAAC,MAAM;AACV,QAAA,EAAE,QAAQ,YACVrB,EAAQ,EAAK;AAAA,MAErB;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,IACAQ;AAAA,EAAA,GAGEgB,IAAkB,CAACC,MAAyB;AACxC,UAAAC,IAAS,IAAI,IAAI5C,CAAc;AAEjC,IAAA4C,EAAO,IAAID,CAAG,IACdC,EAAO,OAAOD,CAAG,IAEjBC,EAAO,IAAID,CAAG,GAGA1C,EAAA,MAAM,KAAK2C,CAAM,CAAC;AAAA,EAAA,GAGlCC,IAAuB,CAAC,MAAqC;AAC3D,IAAA,EAAE,SAAS,YAAYhB,EAAe,YAAY,SAAS,iBAAiB,CAACf,MAClEyB;EACf,GAGEO,IAAsB,MACpBlC,MAAa,SACNqB,IAAmB,KAAK,sBAG5B,IAGLc,IAAa,MACXnC,MAAa,UAA4B,CAACK,IACnC+B,EAAQ,WAEZA,EAAQ,mBAGbC,IAAqB,CAAC,MAAqC;AAC7D,IAAA5B;AAAA,MACItB,EACK,OAAO,CAACuB,MACDA,EAAK,cAAcA,EAAK,YACjB,KAGJA,EAAK,MAAM,cAAc,SAAS,EAAE,cAAc,MAAM,YAAA,CAAa,CAC/E,EACA,IAAI,CAACA,OAAU,EAAE,GAAGA,GAAM,OAAOA,EAAK,MAAA,EAAQ;AAAA,IAAA;AAAA,EACvD;AAGJ,SACK,gBAAA4B,EAAA,cAAA,OAAA;AAAA,IAAI,WAAU;AAAA,IAAc,KAAKtB;AAAA,EAAA,GAC7B,gBAAAsB,EAAA,cAAAC,IAAA;AAAA,IACG,UAAAhD;AAAA,IACA,aAAAqC;AAAA,IACA,gBAAAV;AAAA,IACA,QAAQb;AAAA,IACR,YAAAP;AAAA,IACA,UAAUE,MAAa,YAA8BwC,EAAgB,UAAUA,EAAgB;AAAA,EAAA,GAE9F,gBAAAF,EAAA,cAAA,OAAA;AAAA,IAAI,WAAWG,GAAM,CAAC,8BAA8BC,GAAkB7C,CAAI,CAAC,CAAC;AAAA,EAAA,GACxE,gBAAAyC,EAAA,cAAA,OAAA;AAAA,IACG,WAAU;AAAA,IACV,SAAS,CAAC,MAAM;AACZ,MAAI,EAAE,WAAWrB,EAAe,WAAWZ,KAGhCsB;IACf;AAAA,IACA,MAAK;AAAA,IACJ,GAAGR;AAAA,IACJ,UAAU;AAAA,IACV,WAAWc;AAAA,EAAA,GAEV,gBAAAK,EAAA,cAAA,OAAA;AAAA,IAAI,WAAU;AAAA,EAAA,GACVrC,KAAc,gBAAAqC,EAAA,cAAA,OAAA;AAAA,IAAI,WAAWJ,EAAoB;AAAA,EAAA,GAAIjC,CAAU,GAC/DR,KAAS4B,KAAqB,gBAAAiB,EAAA,cAAAK,GAAA;AAAA,IAAK,QAAO;AAAA,EAAU,GAAAlD,CAAM,GAC1DG,MAAS,aACNR,EAAe,IAAI,CAAC2C,MACf,gBAAAO,EAAA,cAAAM,GAAA;AAAA,IACG,KAAAb;AAAA,IACA,MAAMI,EAAW;AAAA,IACjB,OAAOJ,EAAI,SAAS;AAAA,IACpB,MAAMlC,MAAS,UAAwBgD,EAAQ,QAAQA,EAAQ;AAAA,IAC/D,SAAS,MAAMf,EAAgBC,CAAG;AAAA,EAAA,CACtC,CACH,GAEJnC,MAAS,gBAA8ByB,KACnC,gBAAAiB,EAAA,cAAAM,GAAA;AAAA,IACG,MAAMT,EAAW;AAAA,IACjB,OAAOb;AAAA,IACP,MAAMzB,MAAS,UAAwBgD,EAAQ,QAAQA,EAAQ;AAAA,IAC/D,SAAS,MAAMxD,EAAkB,EAAE;AAAA,EAAA,CACvC,GAGH,CAACa,KAAcd,EAAe,WAAW,KAAKI,KAC1C,gBAAA8C,EAAA,cAAAK,GAAA;AAAA,IAAK,OAAM;AAAA,EAAA,GAAQnD,CAAY,CAExC,GACCU,KACI,gBAAAoC,EAAA,cAAA,SAAA;AAAA,IACG,KAAKrB;AAAA,IACL,WAAU;AAAA,IACV,OAAO,EAAE,UAAUM,EAAW;AAAA,IAC9B,aAAanC,EAAe,WAAW,IAAII,IAAcE;AAAA,IACzD,UAAU2C;AAAA,EACd,CAAA,CAER,CACJ,CACJ,GACA,gBAAAC,EAAA,cAACQ,IACI,MAAAzC,MACIL,MAAa,YACT,gBAAAsC,EAAA,cAAAS,EAAO,KAAP;AAAA,IACG,WAAU;AAAA,IACV,KAAI;AAAA,IACJ,SAAS,EAAE,QAAQ,EAAE;AAAA,IACrB,SAAS,EAAE,QAAQ,OAAO;AAAA,IAC1B,MAAM,EAAE,QAAQ,EAAE;AAAA,IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE;AAAA,EAAA,GAE5C,gBAAAT,EAAA,cAAAU,IAAA;AAAA,IAAW,cAAY;AAAA,EAAA,GACnB,gBAAAV,EAAA,cAAA,OAAA;AAAA,IAAI,WAAU;AAAA,EAAA,GACV,gBAAAA,EAAA,cAAAW,IAAA;AAAA,IACG,cAAc7D,EAAe,IAAI,CAAC2C,MAAQA,EAAI,UAAU;AAAA,IACxD,iBAAiB1C;AAAA,IACjB,YAAYmB,EAAW,OAAO,CAACE,MAAS,CAACA,EAAK,aAAa,CAACA,EAAK,UAAU;AAAA,IAC3E,WAAWwC,GAAmB;AAAA,IAC9B,WAAA5D;AAAA,EAAA,CACJ,CACJ,CACJ,CACJ,IAEA,gBAAAgD,EAAA,cAACS,EAAO,KAAP;AAAA,IACG,SAAS;AAAA,MACL,SAAS;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACL,SAAS;AAAA,MACT,YAAY,EAAE,UAAU,KAAK;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACF,SAAS;AAAA,MACT,YAAY,EAAE,UAAU,KAAK;AAAA,IACjC;AAAA,IACA,YAAY,EAAE,MAAM,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE;AAAA,EAAA,GAE5C,gBAAAT,EAAA,cAAAa,IAAA;AAAA,IAAK,MAAA9C;AAAA,IAAY,SAASoB;AAAA,IAAa,YAAYT;AAAA,EAAA,GAC/CR,EAAW,SAAS,KAAKK,IACtBL,EAAW,IAAI,CAACE,GAAM0C,MAAU;AAC5B,UAAM,EAAE,OAAA3D,GAAO,OAAA4D,GAAO,QAAAC,GAAQ,QAAAC,EAAW,IAAA7C,GACnC8C,IAAY,CAAC,CAACpE,EAAe,KAAK,CAAC2C,OAAQA,OAAQsB,CAAK,GACxDI,KAAsB,MAAM3B,EAAgBrC,CAAK;AAEnD,WAAAiB,EAAK,cAAcA,EAAK,YAEnB,gBAAA4B,EAAA,cAAAoB,IAAA;AAAA,MACG,KAAKL,IAAQ3C;AAAA,MAET,YAAAF;AAAA,MACA,OAAA4C;AAAA,IACJ,CACJ,IAKH,gBAAAd,EAAA,cAAAqB,IAAA;AAAA,MAAS,SAASH;AAAA,MAAW,SAASC;AAAA,MAAqB,KAAKJ;AAAA,IAAA,GAC5D,gBAAAf,EAAA,cAAAsB,IAAA;AAAA,MAAkB,OAAAnE;AAAAA,MAAO,OAAA4D;AAAA,MAAO,QAAAC;AAAA,MAAQ,QAAAC;AAAA,MAAQ,WAAAC;AAAA,IAAa,CAAA,CAClE;AAAA,EAAA,CAEP,IAEA,gBAAAlB,EAAA,cAAAuB,IAAA;AAAA,IAAgB,OAAOlE;AAAA,EAAA,CAAgB,CAEhD,CACJ,EAEZ,CACJ;AAER;"}
|
|
1
|
+
{"version":3,"file":"MultiSelect.es.js","sources":["../../../src/components/MultiSelect/MultiSelect.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Checklist, ChecklistDirection } from '@components/Checklist/Checklist';\nimport { Tag, TagSize, TagType } from '@components/Tag';\nimport { Trigger, TriggerEmphasis } from '@components/Trigger';\nimport { Text } from '@typography/Text';\nimport { useButton } from '@react-aria/button';\nimport { FocusScope, useFocusRing } from '@react-aria/focus';\nimport { merge } from '@utilities/merge';\nimport { Validation } from '@utilities/validation';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport React, { ChangeEvent, FC, KeyboardEvent, useEffect, useRef, useState } from 'react';\nimport { getInputWidth, getPaddingClasses } from './helpers';\nimport { Menu } from '@components/Menu';\nimport { MenuItem } from '@components/MenuItem';\nimport { useClickOutside } from '@hooks/useClickOutside';\nimport { DefaultItem, NoSearchResults, OptionalItems } from './SelectMenuItems';\nimport { CheckboxState } from '@components/Checkbox/Checkbox';\n\nexport enum MultiSelectType {\n Default = 'Default',\n Summarized = 'Summarized',\n}\n\nexport enum MultiSelectSize {\n Small = 'Small',\n Medium = 'Medium',\n}\n\nexport enum MultiSelectEmphasis {\n Default = 'Default',\n Weak = 'Weak',\n}\n\nexport type MultiSelectItem = {\n value: string;\n isCategory?: boolean;\n isDivider?: boolean;\n avatar?: React.ReactNode;\n imgSrc?: string;\n ariaLabel?: string;\n};\n\nexport type MultiSelectProps = {\n items: MultiSelectItem[];\n activeItemKeys: (string | number)[];\n disabled?: boolean;\n onSelectionChange: (keys: (string | number)[]) => void;\n ariaLabel?: string;\n label?: string;\n placeholder?: string;\n type?: MultiSelectType;\n size?: MultiSelectSize;\n validation?: Validation;\n emphasis?: MultiSelectEmphasis;\n decorator?: React.ReactNode;\n filterable?: boolean;\n filterLabel?: string;\n noResultsLabel?: string;\n summarizedLabel?: string;\n indeterminateItemKeys?: (string | number)[];\n};\n\nexport type Item = {\n label: string;\n value: string;\n avatar?: React.ReactNode;\n isCategory?: boolean;\n isDivider?: boolean;\n imgSrc?: string;\n ariaLabel?: string;\n};\n\nexport const MultiSelect: FC<MultiSelectProps> = ({\n items,\n activeItemKeys,\n onSelectionChange,\n ariaLabel = 'Select list',\n disabled = false,\n placeholder,\n label,\n filterLabel,\n noResultsLabel,\n type = MultiSelectType.Default,\n size = MultiSelectSize.Medium,\n validation = Validation.Default,\n emphasis = MultiSelectEmphasis.Default,\n decorator = null,\n filterable = false,\n summarizedLabel: summarizedLabelFromProps,\n indeterminateItemKeys,\n}) => {\n const [open, setOpen] = useState(false);\n const [checkboxes, setCheckboxes] = useState<Item[]>([]);\n const hasResults = !!checkboxes.find((item) => !item.isCategory && !item.isDivider);\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const multiSelectRef = useRef<HTMLDivElement | null>(null);\n const filterInputRef = useRef<HTMLInputElement | null>(null);\n const { isFocusVisible, focusProps } = useFocusRing();\n\n const hasSelectedItems = activeItemKeys.length > 0;\n const summarizedLabel = summarizedLabelFromProps ?? [activeItemKeys.length, 'selected'].join(' ');\n const inputWidth = getInputWidth(hasSelectedItems, filterLabel, placeholder);\n\n const handleClose = () => setOpen(false);\n\n useClickOutside(null, handleClose, [multiSelectRef?.current as HTMLElement]);\n\n const toggleOpen = () => setOpen((open) => !open);\n\n const { buttonProps } = useButton(\n {\n onPress: toggleOpen,\n onKeyDown: (e) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n },\n elementType: 'div',\n },\n triggerRef,\n );\n\n const toggleSelection = (key: string | number) => {\n const keySet = new Set(activeItemKeys);\n\n if (keySet.has(key)) {\n keySet.delete(key);\n } else {\n keySet.add(key);\n }\n\n onSelectionChange(Array.from(keySet));\n };\n\n const handleSpacebarToggle = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.code === 'Space' && (filterInputRef.current !== document.activeElement || !filterable)) {\n toggleOpen();\n }\n };\n\n const getDecoratorClasses = () => {\n if (emphasis === MultiSelectEmphasis.Weak) {\n return hasSelectedItems ? '' : 'tw-text-text-weak';\n }\n\n return '';\n };\n\n const getTagType = () => {\n if (emphasis === MultiSelectEmphasis.Weak || !open) {\n return TagType.Selected;\n }\n return TagType.SelectedWithFocus;\n };\n\n const handleFilterChange = (e: ChangeEvent<HTMLInputElement>) => {\n setCheckboxes(\n items\n .filter((item) => {\n if (item.isCategory || item.isDivider) {\n return true;\n }\n\n return item.value.toLowerCase().includes(e.currentTarget.value.toLowerCase());\n })\n .map((item) => ({ ...item, label: item.value })),\n );\n };\n\n useEffect(() => {\n setCheckboxes(\n items.map((item) => {\n const checkboxBaseItem = { ...item, label: item.value };\n if (indeterminateItemKeys?.includes(item.value)) {\n return { ...checkboxBaseItem, state: CheckboxState.Mixed };\n }\n return checkboxBaseItem;\n }),\n );\n }, [items, indeterminateItemKeys]);\n\n return (\n <div className=\"tw-relative\" ref={multiSelectRef}>\n <Trigger\n disabled={disabled}\n buttonProps={buttonProps}\n isFocusVisible={isFocusVisible}\n isOpen={open}\n validation={validation}\n emphasis={emphasis === MultiSelectEmphasis.Default ? TriggerEmphasis.Default : TriggerEmphasis.Weak}\n >\n <div className={merge(['tw-flex tw-flex-1 tw-gap-2', getPaddingClasses(size)])}>\n <div\n className=\"tw-flex tw-flex-1 tw-gap-2 focus:tw-outline-0\"\n onClick={(e) => {\n if (e.target === filterInputRef.current && open) {\n return;\n }\n toggleOpen();\n }}\n role=\"button\"\n {...focusProps}\n tabIndex={0}\n onKeyDown={handleSpacebarToggle}\n >\n <div className=\"tw-flex tw-flex-wrap tw-gap-2 tw-outline-none tw-items-center tw-min-h-[28px]\">\n {decorator && <div className={getDecoratorClasses()}>{decorator}</div>}\n {label && hasSelectedItems && <Text weight=\"strong\">{label}</Text>}\n {type === MultiSelectType.Default &&\n activeItemKeys.map((key) => (\n <Tag\n key={key}\n type={getTagType()}\n label={key.toString()}\n size={size === MultiSelectSize.Small ? TagSize.Small : TagSize.Medium}\n onClick={() => toggleSelection(key)}\n />\n ))}\n\n {type === MultiSelectType.Summarized && hasSelectedItems && (\n <Tag\n type={getTagType()}\n label={summarizedLabel}\n size={size === MultiSelectSize.Small ? TagSize.Small : TagSize.Medium}\n onClick={() => onSelectionChange([])}\n />\n )}\n\n {!filterable && activeItemKeys.length === 0 && placeholder && (\n <Text color=\"weak\">{placeholder}</Text>\n )}\n </div>\n {filterable && (\n <input\n ref={filterInputRef}\n className=\"focus:tw-outline-0 tw-text-s tw-bg-transparent\"\n style={{ maxWidth: inputWidth }}\n placeholder={activeItemKeys.length === 0 ? placeholder : filterLabel}\n onChange={handleFilterChange}\n />\n )}\n </div>\n </div>\n </Trigger>\n <AnimatePresence>\n {open &&\n (emphasis === MultiSelectEmphasis.Default ? (\n <motion.div\n className=\"tw-absolute tw-left-0 tw-w-full tw-overflow-hidden tw-p-0 tw-shadow-mid tw-list-none tw-m-0 tw-mt-2 tw-z-30 tw-bg-base tw-min-w-[18rem]\"\n key=\"content\"\n initial={{ height: 0 }}\n animate={{ height: 'auto' }}\n exit={{ height: 0 }}\n transition={{ ease: [0.04, 0.62, 0.23, 0.98] }}\n >\n <FocusScope restoreFocus>\n <div className=\"tw-p-4\">\n <Checklist\n activeValues={activeItemKeys.map((key) => key.toString())}\n setActiveValues={onSelectionChange}\n checkboxes={checkboxes.filter((item) => !item.isDivider && !item.isCategory)}\n direction={ChecklistDirection.Vertical}\n ariaLabel={ariaLabel}\n />\n </div>\n </FocusScope>\n </motion.div>\n ) : (\n <motion.div\n initial={{\n opacity: 0,\n }}\n animate={{\n opacity: 1,\n transition: { duration: 0.15 },\n }}\n exit={{\n opacity: 0,\n transition: { duration: 0.15 },\n }}\n transition={{ ease: [0.04, 0.62, 0.23, 0.98] }}\n >\n <Menu open={open} onClose={handleClose} triggerRef={multiSelectRef}>\n {checkboxes.length > 0 && hasResults ? (\n checkboxes.map((item, index) => {\n const { label, value, avatar, imgSrc } = item;\n const isChecked = !!activeItemKeys.find((key) => key === value);\n const handleMenuItemClick = () => toggleSelection(label);\n\n if (item.isCategory || item.isDivider) {\n return (\n <OptionalItems\n key={value + item}\n {...{\n checkboxes,\n index,\n }}\n />\n );\n }\n\n return (\n <MenuItem checked={isChecked} onClick={handleMenuItemClick} key={value}>\n <DefaultItem {...{ label, value, avatar, imgSrc, isChecked }} />\n </MenuItem>\n );\n })\n ) : (\n <NoSearchResults label={noResultsLabel} />\n )}\n </Menu>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n );\n};\n"],"names":["MultiSelectType","MultiSelectSize","MultiSelectEmphasis","MultiSelect","items","activeItemKeys","onSelectionChange","ariaLabel","disabled","placeholder","label","filterLabel","noResultsLabel","type","size","validation","Validation","emphasis","decorator","filterable","summarizedLabelFromProps","indeterminateItemKeys","open","setOpen","useState","checkboxes","setCheckboxes","hasResults","item","triggerRef","useRef","multiSelectRef","filterInputRef","isFocusVisible","focusProps","useFocusRing","hasSelectedItems","summarizedLabel","inputWidth","getInputWidth","handleClose","useClickOutside","toggleOpen","buttonProps","useButton","toggleSelection","key","keySet","handleSpacebarToggle","getDecoratorClasses","getTagType","TagType","handleFilterChange","useEffect","checkboxBaseItem","CheckboxState","React","Trigger","TriggerEmphasis","merge","getPaddingClasses","Text","Tag","TagSize","AnimatePresence","motion","FocusScope","Checklist","ChecklistDirection","Menu","index","value","avatar","imgSrc","isChecked","handleMenuItemClick","OptionalItems","MenuItem","DefaultItem","NoSearchResults"],"mappings":"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"}
|