@frontify/fondue 12.0.0-beta.62 → 12.0.0-beta.63
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 +86 -86
- 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
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
import { Checklist as
|
|
2
|
-
import { useButton as
|
|
3
|
-
import { useFocusRing as
|
|
4
|
-
import { merge as
|
|
1
|
+
import { Checklist as le, ChecklistDirection as ae } from "../Checklist/Checklist.es.js";
|
|
2
|
+
import { useButton as ne } from "@react-aria/button";
|
|
3
|
+
import { useFocusRing as re, FocusScope as oe } from "@react-aria/focus";
|
|
4
|
+
import { merge as ce } from "../../utilities/merge.es.js";
|
|
5
5
|
import { Validation as se } from "../../utilities/validation.es.js";
|
|
6
|
-
import { AnimatePresence as
|
|
7
|
-
import t, { useState as
|
|
8
|
-
import { getInputWidth as
|
|
6
|
+
import { AnimatePresence as ie, motion as V } from "framer-motion";
|
|
7
|
+
import t, { useState as A, useRef as x, useEffect as ue } from "react";
|
|
8
|
+
import { getInputWidth as fe, getPaddingClasses as me } from "./helpers.es.js";
|
|
9
9
|
import { useClickOutside as ge } from "../../hooks/useClickOutside.es.js";
|
|
10
|
-
import { CheckboxState as
|
|
11
|
-
import { Trigger as
|
|
12
|
-
import { Tag as
|
|
13
|
-
import { Menu as
|
|
10
|
+
import { CheckboxState as we } from "../Checkbox/Checkbox.es.js";
|
|
11
|
+
import { Trigger as pe, TriggerEmphasis as B } from "../Trigger/Trigger.es.js";
|
|
12
|
+
import { Tag as j, TagSize as w, TagType as z } from "../Tag/Tag.es.js";
|
|
13
|
+
import { Menu as de } from "../Menu/Menu.es.js";
|
|
14
14
|
import { OptionalItems as he, DefaultItem as Ee, NoSearchResults as ke } from "./SelectMenuItems/SelectMenuItems.es.js";
|
|
15
15
|
import { Text as F } from "../../typography/Text/Text.es.js";
|
|
16
|
-
import { MenuItem as
|
|
17
|
-
var
|
|
18
|
-
const
|
|
19
|
-
items:
|
|
20
|
-
activeItemKeys:
|
|
21
|
-
onSelectionChange:
|
|
22
|
-
ariaLabel:
|
|
23
|
-
disabled:
|
|
24
|
-
placeholder:
|
|
16
|
+
import { MenuItem as ve } from "../MenuItem/MenuItem.es.js";
|
|
17
|
+
var xe = /* @__PURE__ */ ((a) => (a.Default = "Default", a.Summarized = "Summarized", a))(xe || {}), Ce = /* @__PURE__ */ ((a) => (a.Small = "Small", a.Medium = "Medium", a))(Ce || {}), De = /* @__PURE__ */ ((a) => (a.Default = "Default", a.Weak = "Weak", a))(De || {});
|
|
18
|
+
const He = ({
|
|
19
|
+
items: a,
|
|
20
|
+
activeItemKeys: n,
|
|
21
|
+
onSelectionChange: p,
|
|
22
|
+
ariaLabel: q = "Select list",
|
|
23
|
+
disabled: G = !1,
|
|
24
|
+
placeholder: i,
|
|
25
25
|
label: C,
|
|
26
26
|
filterLabel: D,
|
|
27
|
-
noResultsLabel:
|
|
27
|
+
noResultsLabel: H,
|
|
28
28
|
type: S = "Default",
|
|
29
|
-
size:
|
|
30
|
-
validation:
|
|
31
|
-
emphasis:
|
|
29
|
+
size: d = "Medium",
|
|
30
|
+
validation: J = se.Default,
|
|
31
|
+
emphasis: u = "Default",
|
|
32
32
|
decorator: b = null,
|
|
33
|
-
filterable:
|
|
34
|
-
summarizedLabel:
|
|
35
|
-
indeterminateItemKeys:
|
|
33
|
+
filterable: h = !1,
|
|
34
|
+
summarizedLabel: f,
|
|
35
|
+
indeterminateItemKeys: r
|
|
36
36
|
}) => {
|
|
37
|
-
const [
|
|
38
|
-
ge(null, N, [
|
|
39
|
-
const
|
|
37
|
+
const [o, E] = A(!1), [c, T] = A([]), P = !!c.find((e) => !e.isCategory && !e.isDivider), Q = x(null), s = x(null), k = x(null), { isFocusVisible: U, focusProps: X } = re(), m = n.length > 0, Y = f != null ? f : [n.length, "selected"].join(" "), Z = fe(m, D, i), N = () => E(!1);
|
|
38
|
+
ge(null, N, [s == null ? void 0 : s.current]);
|
|
39
|
+
const v = () => E((e) => !e), { buttonProps: _ } = ne(
|
|
40
40
|
{
|
|
41
|
-
onPress:
|
|
41
|
+
onPress: v,
|
|
42
42
|
onKeyDown: (e) => {
|
|
43
43
|
e.key === "Escape" && E(!1);
|
|
44
44
|
},
|
|
45
45
|
elementType: "div"
|
|
46
46
|
},
|
|
47
|
-
|
|
47
|
+
Q
|
|
48
48
|
), W = (e) => {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
e.code === "Space" && (k.current !== document.activeElement || !
|
|
53
|
-
},
|
|
49
|
+
const l = new Set(n);
|
|
50
|
+
l.has(e) ? l.delete(e) : l.add(e), p(Array.from(l));
|
|
51
|
+
}, $ = (e) => {
|
|
52
|
+
e.code === "Space" && (k.current !== document.activeElement || !h) && v();
|
|
53
|
+
}, y = () => u === "Weak" ? m ? "" : "tw-text-text-weak" : "", M = () => u === "Weak" || !o ? z.Selected : z.SelectedWithFocus, L = (e) => {
|
|
54
54
|
T(
|
|
55
|
-
|
|
55
|
+
a.filter((l) => l.isCategory || l.isDivider ? !0 : l.value.toLowerCase().includes(e.currentTarget.value.toLowerCase())).map((l) => ({ ...l, label: l.value }))
|
|
56
56
|
);
|
|
57
57
|
};
|
|
58
58
|
return ue(() => {
|
|
59
59
|
T(
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
return
|
|
60
|
+
a.map((e) => {
|
|
61
|
+
const l = { ...e, label: e.value };
|
|
62
|
+
return r != null && r.includes(e.value) ? { ...l, state: we.Mixed } : l;
|
|
63
63
|
})
|
|
64
64
|
);
|
|
65
|
-
}, [
|
|
65
|
+
}, [a, r]), /* @__PURE__ */ t.createElement("div", {
|
|
66
66
|
className: "tw-relative",
|
|
67
|
-
ref:
|
|
68
|
-
}, /* @__PURE__ */ t.createElement(
|
|
69
|
-
disabled:
|
|
70
|
-
buttonProps:
|
|
71
|
-
isFocusVisible:
|
|
72
|
-
isOpen:
|
|
73
|
-
validation:
|
|
74
|
-
emphasis:
|
|
67
|
+
ref: s
|
|
68
|
+
}, /* @__PURE__ */ t.createElement(pe, {
|
|
69
|
+
disabled: G,
|
|
70
|
+
buttonProps: _,
|
|
71
|
+
isFocusVisible: U,
|
|
72
|
+
isOpen: o,
|
|
73
|
+
validation: J,
|
|
74
|
+
emphasis: u === "Default" ? B.Default : B.Weak
|
|
75
75
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
76
|
-
className:
|
|
76
|
+
className: ce(["tw-flex tw-flex-1 tw-gap-2", me(d)])
|
|
77
77
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
78
78
|
className: "tw-flex tw-flex-1 tw-gap-2 focus:tw-outline-0",
|
|
79
79
|
onClick: (e) => {
|
|
80
|
-
e.target === k.current &&
|
|
80
|
+
e.target === k.current && o || v();
|
|
81
81
|
},
|
|
82
82
|
role: "button",
|
|
83
|
-
...
|
|
83
|
+
...X,
|
|
84
84
|
tabIndex: 0,
|
|
85
|
-
onKeyDown:
|
|
85
|
+
onKeyDown: $
|
|
86
86
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
87
87
|
className: "tw-flex tw-flex-wrap tw-gap-2 tw-outline-none tw-items-center tw-min-h-[28px]"
|
|
88
88
|
}, b && /* @__PURE__ */ t.createElement("div", {
|
|
89
|
-
className:
|
|
89
|
+
className: y()
|
|
90
90
|
}, b), C && m && /* @__PURE__ */ t.createElement(F, {
|
|
91
91
|
weight: "strong"
|
|
92
|
-
}, C), S === "Default" &&
|
|
92
|
+
}, C), S === "Default" && n.map((e) => /* @__PURE__ */ t.createElement(j, {
|
|
93
93
|
key: e,
|
|
94
94
|
type: M(),
|
|
95
95
|
label: e.toString(),
|
|
96
|
-
size:
|
|
96
|
+
size: d === "Small" ? w.Small : w.Medium,
|
|
97
97
|
onClick: () => W(e)
|
|
98
|
-
})), S === "Summarized" && m && /* @__PURE__ */ t.createElement(
|
|
98
|
+
})), S === "Summarized" && (m || f) && /* @__PURE__ */ t.createElement(j, {
|
|
99
99
|
type: M(),
|
|
100
|
-
label:
|
|
101
|
-
size:
|
|
102
|
-
onClick: () =>
|
|
103
|
-
}), !
|
|
100
|
+
label: Y,
|
|
101
|
+
size: d === "Small" ? w.Small : w.Medium,
|
|
102
|
+
onClick: (r == null ? void 0 : r.length) === 0 ? () => p([]) : void 0
|
|
103
|
+
}), !h && n.length === 0 && i && /* @__PURE__ */ t.createElement(F, {
|
|
104
104
|
color: "weak"
|
|
105
|
-
},
|
|
105
|
+
}, i)), h && /* @__PURE__ */ t.createElement("input", {
|
|
106
106
|
ref: k,
|
|
107
107
|
className: "focus:tw-outline-0 tw-text-s tw-bg-transparent",
|
|
108
|
-
style: { maxWidth:
|
|
109
|
-
placeholder:
|
|
108
|
+
style: { maxWidth: Z },
|
|
109
|
+
placeholder: n.length === 0 ? i : D,
|
|
110
110
|
onChange: L
|
|
111
|
-
})))), /* @__PURE__ */ t.createElement(
|
|
111
|
+
})))), /* @__PURE__ */ t.createElement(ie, null, o && (u === "Default" ? /* @__PURE__ */ t.createElement(V.div, {
|
|
112
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]",
|
|
113
113
|
key: "content",
|
|
114
114
|
initial: { height: 0 },
|
|
@@ -119,12 +119,12 @@ const qe = ({
|
|
|
119
119
|
restoreFocus: !0
|
|
120
120
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
121
121
|
className: "tw-p-4"
|
|
122
|
-
}, /* @__PURE__ */ t.createElement(
|
|
123
|
-
activeValues:
|
|
124
|
-
setActiveValues:
|
|
125
|
-
checkboxes:
|
|
126
|
-
direction:
|
|
127
|
-
ariaLabel:
|
|
122
|
+
}, /* @__PURE__ */ t.createElement(le, {
|
|
123
|
+
activeValues: n.map((e) => e.toString()),
|
|
124
|
+
setActiveValues: p,
|
|
125
|
+
checkboxes: c.filter((e) => !e.isDivider && !e.isCategory),
|
|
126
|
+
direction: ae.Vertical,
|
|
127
|
+
ariaLabel: q
|
|
128
128
|
})))) : /* @__PURE__ */ t.createElement(V.div, {
|
|
129
129
|
initial: {
|
|
130
130
|
opacity: 0
|
|
@@ -138,35 +138,35 @@ const qe = ({
|
|
|
138
138
|
transition: { duration: 0.15 }
|
|
139
139
|
},
|
|
140
140
|
transition: { ease: [0.04, 0.62, 0.23, 0.98] }
|
|
141
|
-
}, /* @__PURE__ */ t.createElement(
|
|
142
|
-
open:
|
|
141
|
+
}, /* @__PURE__ */ t.createElement(de, {
|
|
142
|
+
open: o,
|
|
143
143
|
onClose: N,
|
|
144
|
-
triggerRef:
|
|
145
|
-
},
|
|
146
|
-
const { label: R, value:
|
|
144
|
+
triggerRef: s
|
|
145
|
+
}, c.length > 0 && P ? c.map((e, l) => {
|
|
146
|
+
const { label: R, value: g, avatar: I, imgSrc: K } = e, O = !!n.find((te) => te === g), ee = () => W(R);
|
|
147
147
|
return e.isCategory || e.isDivider ? /* @__PURE__ */ t.createElement(he, {
|
|
148
|
-
key:
|
|
149
|
-
checkboxes:
|
|
150
|
-
index:
|
|
151
|
-
}) : /* @__PURE__ */ t.createElement(
|
|
148
|
+
key: g + e,
|
|
149
|
+
checkboxes: c,
|
|
150
|
+
index: l
|
|
151
|
+
}) : /* @__PURE__ */ t.createElement(ve, {
|
|
152
152
|
checked: O,
|
|
153
153
|
onClick: ee,
|
|
154
|
-
key:
|
|
154
|
+
key: g
|
|
155
155
|
}, /* @__PURE__ */ t.createElement(Ee, {
|
|
156
156
|
label: R,
|
|
157
|
-
value:
|
|
157
|
+
value: g,
|
|
158
158
|
avatar: I,
|
|
159
159
|
imgSrc: K,
|
|
160
160
|
isChecked: O
|
|
161
161
|
}));
|
|
162
162
|
}) : /* @__PURE__ */ t.createElement(ke, {
|
|
163
|
-
label:
|
|
163
|
+
label: H
|
|
164
164
|
}))))));
|
|
165
165
|
};
|
|
166
166
|
export {
|
|
167
|
-
|
|
167
|
+
He as MultiSelect,
|
|
168
168
|
De as MultiSelectEmphasis,
|
|
169
169
|
Ce as MultiSelectSize,
|
|
170
|
-
|
|
170
|
+
xe as MultiSelectType
|
|
171
171
|
};
|
|
172
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, 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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"}
|
|
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 || summarizedLabelFromProps) && (\n <Tag\n type={getTagType()}\n label={summarizedLabel}\n size={size === MultiSelectSize.Small ? TagSize.Small : TagSize.Medium}\n onClick={\n indeterminateItemKeys?.length === 0 ? () => onSelectionChange([]) : undefined\n }\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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"}
|