@frontify/fondue-components 29.0.1 → 29.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/fondue-components111.js +3 -15
  2. package/dist/fondue-components111.js.map +1 -1
  3. package/dist/fondue-components112.js +5 -127
  4. package/dist/fondue-components112.js.map +1 -1
  5. package/dist/fondue-components113.js +14 -11
  6. package/dist/fondue-components113.js.map +1 -1
  7. package/dist/fondue-components114.js +17 -36
  8. package/dist/fondue-components114.js.map +1 -1
  9. package/dist/fondue-components115.js +111 -14
  10. package/dist/fondue-components115.js.map +1 -1
  11. package/dist/fondue-components116.js +12 -14
  12. package/dist/fondue-components116.js.map +1 -1
  13. package/dist/fondue-components117.js +16 -110
  14. package/dist/fondue-components117.js.map +1 -1
  15. package/dist/fondue-components118.js +10 -10
  16. package/dist/fondue-components118.js.map +1 -1
  17. package/dist/fondue-components119.js +17 -17
  18. package/dist/fondue-components119.js.map +1 -1
  19. package/dist/fondue-components120.js +126 -12
  20. package/dist/fondue-components120.js.map +1 -1
  21. package/dist/fondue-components121.js +11 -217
  22. package/dist/fondue-components121.js.map +1 -1
  23. package/dist/fondue-components122.js +34 -17
  24. package/dist/fondue-components122.js.map +1 -1
  25. package/dist/fondue-components123.js +214 -14
  26. package/dist/fondue-components123.js.map +1 -1
  27. package/dist/fondue-components124.js +17 -149
  28. package/dist/fondue-components124.js.map +1 -1
  29. package/dist/fondue-components125.js +16 -44
  30. package/dist/fondue-components125.js.map +1 -1
  31. package/dist/fondue-components126.js +150 -4
  32. package/dist/fondue-components126.js.map +1 -1
  33. package/dist/fondue-components127.js +44 -4
  34. package/dist/fondue-components127.js.map +1 -1
  35. package/dist/fondue-components128.js +31 -18
  36. package/dist/fondue-components128.js.map +1 -1
  37. package/dist/fondue-components131.js +170 -6
  38. package/dist/fondue-components131.js.map +1 -1
  39. package/dist/fondue-components132.js +60 -12
  40. package/dist/fondue-components132.js.map +1 -1
  41. package/dist/fondue-components133.js +9 -71
  42. package/dist/fondue-components133.js.map +1 -1
  43. package/dist/fondue-components134.js +255 -14
  44. package/dist/fondue-components134.js.map +1 -1
  45. package/dist/fondue-components135.js +6 -7
  46. package/dist/fondue-components135.js.map +1 -1
  47. package/dist/fondue-components136.js +11 -88
  48. package/dist/fondue-components136.js.map +1 -1
  49. package/dist/fondue-components137.js +69 -79
  50. package/dist/fondue-components137.js.map +1 -1
  51. package/dist/fondue-components138.js +14 -30
  52. package/dist/fondue-components138.js.map +1 -1
  53. package/dist/fondue-components139.js +7 -170
  54. package/dist/fondue-components139.js.map +1 -1
  55. package/dist/fondue-components140.js +86 -57
  56. package/dist/fondue-components140.js.map +1 -1
  57. package/dist/fondue-components141.js +81 -9
  58. package/dist/fondue-components141.js.map +1 -1
  59. package/dist/fondue-components142.js +29 -254
  60. package/dist/fondue-components142.js.map +1 -1
  61. package/dist/fondue-components145.js +2 -2
  62. package/dist/fondue-components147.js +2 -2
  63. package/dist/fondue-components148.js +1 -1
  64. package/dist/fondue-components43.js +2 -2
  65. package/dist/fondue-components50.js +1 -1
  66. package/dist/fondue-components60.js +10 -10
  67. package/dist/fondue-components60.js.map +1 -1
  68. package/dist/fondue-components61.js +3 -3
  69. package/dist/fondue-components62.js +2 -2
  70. package/dist/fondue-components74.js +2 -2
  71. package/dist/fondue-components77.js +1 -1
  72. package/dist/fondue-components78.js +1 -1
  73. package/dist/fondue-components79.js +1 -1
  74. package/dist/fondue-components82.js +1 -1
  75. package/dist/fondue-components84.js +2 -2
  76. package/dist/fondue-components90.js +2 -2
  77. package/dist/fondue-components91.js +2 -2
  78. package/dist/fondue-components92.js +2 -2
  79. package/dist/fondue-components93.js +2 -2
  80. package/dist/fondue-components94.js +1 -1
  81. package/dist/fondue-components95.js +1 -1
  82. package/dist/index.d.ts +4 -4
  83. package/dist/style.css +1 -1
  84. package/package.json +3 -3
@@ -1,220 +1,14 @@
1
- import { jsxs as g, jsx as n, Fragment as ue } from "react/jsx-runtime";
2
- import { IconCaretDown as me } from "@frontify/fondue-icons";
3
- import * as H from "@radix-ui/react-popover";
4
- import { useMultipleSelection as K, useCombobox as s } from "downshift";
5
- import { forwardRef as be, useRef as he, useCallback as fe, useState as ge, useMemo as j } from "react";
6
- import { LoadingCircle as pe } from "./fondue-components21.js";
7
- import { useTranslation as Ce } from "./fondue-components42.js";
8
- import { useBadgeItems as ye } from "./fondue-components131.js";
9
- import { useFocusRing as Ie } from "./fondue-components132.js";
10
- import { useSelectData as ve } from "./fondue-components133.js";
11
- import { useSelectionDescription as Be } from "./fondue-components134.js";
12
- import c from "./fondue-components125.js";
13
- import { ClearButton as xe } from "./fondue-components135.js";
14
- import { CollapsibleBadges as Se } from "./fondue-components136.js";
15
- import { SelectMenu as we } from "./fondue-components137.js";
16
- import { ForwardedRefSelectSlot as De } from "./fondue-components95.js";
17
- import { StatusIcons as Re } from "./fondue-components138.js";
18
- const z = ({
19
- children: E,
20
- selectedItemValues: i,
21
- onItemSelect: m,
22
- onClear: $,
23
- placeholder: x = "",
24
- status: p = "neutral",
25
- disabled: b,
26
- "data-test-id": d = "fondue-select-combobox",
27
- alignMenu: _ = "start",
28
- side: q = "bottom",
29
- id: G,
30
- viewportCollisionPadding: J = "compact",
31
- getAsyncItems: C,
32
- onEscapeKeyDown: Q,
33
- multiple: o,
34
- ...a
35
- }, U) => {
36
- const h = he(null), W = fe((e) => {
37
- h.current = e;
38
- }, []), { t: X } = Ce(), { inputSlots: Y, menuSlots: Z, items: y, filterText: A, clearButton: S, getItemByValue: r, setFilterText: I, asyncItemStatus: w } = ve(E, C), { wasClickedRef: V, onMouseDown: D, onFocus: R, onBlur: ee } = Ie(), { selectionDescriptionId: L, selectionDescription: O } = Be(
39
- o,
40
- i,
41
- r
42
- ), te = ye(i, r), [ae, k] = ge(!1), M = j(() => i.map((e) => r(e)).filter((e) => e !== void 0 && "value" in e && "label" in e), [i, r]), ne = K(
43
- o ? {
44
- selectedItems: M,
45
- onStateChange({ selectedItems: e, type: l }) {
46
- if (l === K.stateChangeTypes.SelectedItemKeyDownBackspace) {
47
- const t = M.find((u) => !(e != null && e.includes(u)));
48
- t && m(t.value);
49
- }
50
- }
51
- } : { selectedItems: [] }
52
- ), oe = o ? ne.removeSelectedItem : () => {
53
- }, {
54
- getInputProps: f,
55
- getToggleButtonProps: ie,
56
- getMenuProps: le,
57
- getItemProps: re,
58
- reset: N,
59
- selectedItem: v,
60
- isOpen: T,
61
- highlightedIndex: se,
62
- inputValue: B
63
- } = s({
64
- items: y,
65
- selectedItem: o ? null : r(i[0]),
66
- defaultHighlightedIndex: 0,
67
- toggleButtonId: G,
68
- // Only set labelId if aria-labelledby is explicitly provided, otherwise downshift generates an orphan ID
69
- ..."aria-labelledby" in a && a["aria-labelledby"] ? { labelId: a["aria-labelledby"] } : {},
70
- onSelectedItemChange: ({ selectedItem: e }) => {
71
- e && m(e.value), o && I("");
72
- },
73
- onInputValueChange: ({ inputValue: e }) => {
74
- I(e);
75
- },
76
- onIsOpenChange: () => {
77
- k(!1), I("");
78
- },
79
- onHighlightedIndexChange: () => {
80
- k(!0);
81
- },
82
- itemToString: (e) => e ? e.label : "",
83
- stateReducer: (e, l) => {
84
- const { changes: t, type: u } = l;
85
- if (o)
86
- switch (u) {
87
- case s.stateChangeTypes.InputKeyDownEnter:
88
- case s.stateChangeTypes.ItemClick:
89
- return {
90
- ...t,
91
- isOpen: !0,
92
- highlightedIndex: e.highlightedIndex,
93
- inputValue: ""
94
- };
95
- case s.stateChangeTypes.InputBlur:
96
- return {
97
- ...t,
98
- inputValue: ""
99
- };
100
- }
101
- else
102
- switch (u) {
103
- case s.stateChangeTypes.InputKeyDownEnter:
104
- case s.stateChangeTypes.ItemClick:
105
- t.selectedItem && e.selectedItem && t.selectedItem.value === e.selectedItem.value && m(t.selectedItem.value);
106
- break;
107
- }
108
- return t;
109
- }
110
- }), F = j(() => o ? !1 : !C && !y.find((e) => e.label.toLowerCase().includes(B.toLowerCase())), [B, y, C, o]) || !!w.error || p === "error", ce = (e, l) => {
111
- const t = r(e);
112
- t && (oe(t), m(e), h.current && (h.current.focus(), l && (h.current.dataset.showFocusRing = "false")));
113
- }, de = () => {
114
- $(), N();
115
- }, P = (e) => {
116
- var l, t;
117
- ee(e), o || ((v == null ? void 0 : v.label) ?? "").toLocaleLowerCase() !== B.toLocaleLowerCase() && N(), f().onBlur && ((t = (l = f()).onBlur) == null || t.call(l, e));
118
- };
119
- return /* @__PURE__ */ g(H.Root, { open: T, children: [
120
- /* @__PURE__ */ n(H.Anchor, { asChild: !0, children: /* @__PURE__ */ g(
121
- "div",
122
- {
123
- ref: U,
124
- className: c.root,
125
- "data-status": F ? "error" : p,
126
- "data-disabled": b,
127
- "data-empty": i.length === 0,
128
- children: [
129
- o ? /* @__PURE__ */ g(ue, { children: [
130
- /* @__PURE__ */ n("span", { id: L, className: c.srOnly, children: O }),
131
- /* @__PURE__ */ n(
132
- Se,
133
- {
134
- items: te,
135
- onDismiss: ce,
136
- selectedCount: i.length,
137
- children: /* @__PURE__ */ n(
138
- "input",
139
- {
140
- ...f({
141
- ref: W,
142
- "aria-label": "aria-label" in a ? a["aria-label"] : void 0,
143
- // Remove auto-generated aria-labelledby if not explicitly provided
144
- "aria-labelledby": "aria-labelledby" in a && a["aria-labelledby"] ? a["aria-labelledby"] : void 0,
145
- "aria-describedby": O ? L : void 0
146
- }),
147
- "data-test-id": d,
148
- placeholder: i.length === 0 ? x : "",
149
- className: c.multiSelectInput,
150
- disabled: b,
151
- onMouseDown: D,
152
- onFocus: R,
153
- onBlur: P
154
- }
155
- )
156
- }
157
- )
158
- ] }) : /* @__PURE__ */ n(
159
- "input",
160
- {
161
- ...f({
162
- "aria-label": "aria-label" in a ? a["aria-label"] : void 0,
163
- // Remove auto-generated aria-labelledby if not explicitly provided
164
- "aria-labelledby": "aria-labelledby" in a && a["aria-labelledby"] ? a["aria-labelledby"] : void 0
165
- }),
166
- "data-test-id": d,
167
- placeholder: x,
168
- className: c.input,
169
- disabled: b,
170
- onMouseDown: D,
171
- onFocus: R,
172
- onBlur: P
173
- }
174
- ),
175
- Y,
176
- S ? /* @__PURE__ */ n(xe, { onClear: de, children: S }) : null,
177
- w.isLoading && T ? /* @__PURE__ */ n(De, { name: "right", "data-test-id": `${d}-right-slot`, children: /* @__PURE__ */ n(pe, { size: "x-small", "data-test-id": `${d}-loading-circle` }) }) : null,
178
- /* @__PURE__ */ g("div", { className: c.icons, children: [
179
- /* @__PURE__ */ n(
180
- "button",
181
- {
182
- "aria-label": X("Select_toggleMenu"),
183
- ...ie(),
184
- type: "button",
185
- disabled: b,
186
- onMouseDown: () => {
187
- V.current = !0;
188
- },
189
- children: /* @__PURE__ */ n(me, { size: 16, className: c.caret })
190
- }
191
- ),
192
- /* @__PURE__ */ n(Re, { status: p, hasError: F, dataTestId: d })
193
- ] })
194
- ]
195
- }
196
- ) }),
197
- /* @__PURE__ */ n(
198
- we,
199
- {
200
- align: _,
201
- side: q,
202
- highlightedIndex: se,
203
- filterText: A,
204
- getMenuProps: le,
205
- getItemProps: re,
206
- selectedItemValues: i,
207
- hasInteractedSinceOpening: ae,
208
- viewportCollisionPadding: J,
209
- onEscapeKeyDown: Q,
210
- children: Z
211
- }
212
- )
213
- ] });
214
- };
215
- z.displayName = "Select.Combobox";
216
- const Qe = be(z);
1
+ import { createContext as t, useContext as r } from "react";
2
+ const e = t({
3
+ itemId: "",
4
+ dragHandleRef: () => null,
5
+ hasHandle: !1
6
+ });
7
+ e.displayName = "OrderableItemContext";
8
+ const a = e.Provider, n = () => r(e);
217
9
  export {
218
- Qe as ComboboxBase
10
+ e as OrderableItemContext,
11
+ a as OrderableItemContextProvider,
12
+ n as useOrderableItemContext
219
13
  };
220
14
  //# sourceMappingURL=fondue-components121.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components121.js","sources":["../src/components/Select/components/ComboboxBase.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCaretDown } from '@frontify/fondue-icons';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { useCombobox, useMultipleSelection } from 'downshift';\nimport {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type ForwardedRef,\n type ReactNode,\n} from 'react';\n\nimport { LoadingCircle } from '#/components/LoadingCircle/LoadingCircle.tsx';\nimport { type CommonAriaProps } from '#/helpers/aria';\nimport { useTranslation } from '#/hooks/useTranslation';\n\nimport { useBadgeItems } from '../hooks/useBadgeItems';\nimport { useFocusRing } from '../hooks/useFocusRing';\nimport { useSelectData, type AsyncItemsFetcher } from '../hooks/useSelectData';\nimport { useSelectionDescription } from '../hooks/useSelectionDescription';\nimport styles from '../styles/select.module.scss';\n\nimport { ClearButton } from './ClearButton';\nimport { CollapsibleBadges } from './CollapsibleBadges';\nimport { SelectMenu, type SelectMenuViewportCollisionPadding } from './SelectMenu';\nimport { ForwardedRefSelectSlot } from './SelectSlot';\nimport { StatusIcons } from './StatusIcons';\n\ntype SelectItem = {\n value: string;\n label: string;\n children?: ReactNode;\n};\n\nexport type ComboboxSharedProps = {\n /**\n * Children of the Combobox component. This can contain the `Select.Slot` components for the label, decorators, clear action and menu\n */\n children?: ReactNode;\n /**\n * The placeholder in the combobox component\n */\n placeholder?: string;\n /**\n * Status of the text input\n * @default \"neutral\"\n */\n status?: 'neutral' | 'success' | 'error';\n /**\n * Disables the combobox component\n */\n disabled?: boolean;\n /**\n * The alignment of the menu\n * @default \"start\"\n */\n alignMenu?: 'start' | 'center' | 'end';\n /**\n * Defines the preferred side of the combobox. It will not be respected if there are collisions with the viewport\n * @default \"bottom\"\n */\n side?: 'left' | 'right' | 'bottom' | 'top';\n /**\n * Id of the combobox component\n */\n id?: string;\n /**\n * The data test id of the combobox component\n */\n 'data-test-id'?: string;\n /**\n * Define the minimum distance between the select menu and the viewport edge\n * @default 'compact'\n */\n viewportCollisionPadding?: SelectMenuViewportCollisionPadding;\n /**\n * Function to fetch items asynchronously\n */\n getAsyncItems?: AsyncItemsFetcher;\n /**\n * Event handler called when the escape key is pressed\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n} & CommonAriaProps;\n\ntype ComboboxBaseProps = ComboboxSharedProps & {\n /**\n * The currently selected item values\n */\n selectedItemValues: string[];\n /**\n * Callback fired when an item is selected or deselected\n */\n onItemSelect: (value?: string) => void;\n /**\n * Callback fired when the selection is cleared\n */\n onClear: () => void;\n /**\n * Whether the combobox allows multiple selections\n */\n multiple: boolean;\n};\n\nconst ComboboxBaseInput = (\n {\n children,\n selectedItemValues,\n onItemSelect,\n onClear,\n placeholder = '',\n status = 'neutral',\n disabled,\n 'data-test-id': dataTestId = 'fondue-select-combobox',\n alignMenu = 'start',\n side = 'bottom',\n id,\n viewportCollisionPadding = 'compact',\n getAsyncItems,\n onEscapeKeyDown,\n multiple,\n ...props\n }: ComboboxBaseProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n): ReactNode => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const inputCallbackRef = useCallback((node: HTMLInputElement | null): void => {\n inputRef.current = node;\n }, []);\n const { t } = useTranslation();\n const { inputSlots, menuSlots, items, filterText, clearButton, getItemByValue, setFilterText, asyncItemStatus } =\n useSelectData(children, getAsyncItems);\n const { wasClickedRef, onMouseDown, onFocus, onBlur } = useFocusRing();\n const { selectionDescriptionId, selectionDescription } = useSelectionDescription(\n multiple,\n selectedItemValues,\n getItemByValue,\n );\n const badgeItems = useBadgeItems(selectedItemValues, getItemByValue);\n\n const [hasInteractedSinceOpening, setHasInteractedSinceOpening] = useState(false);\n\n const selectedItems = useMemo((): SelectItem[] => {\n return selectedItemValues\n .map((value) => getItemByValue(value))\n .filter((item): item is SelectItem => item !== undefined && 'value' in item && 'label' in item);\n }, [selectedItemValues, getItemByValue]);\n\n const multipleSelectionResult = useMultipleSelection<SelectItem>(\n multiple\n ? {\n selectedItems,\n onStateChange({ selectedItems: newSelectedItems, type }) {\n if (type === useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace) {\n const removedItem = selectedItems.find((item) => !newSelectedItems?.includes(item));\n if (removedItem) {\n onItemSelect(removedItem.value);\n }\n }\n },\n }\n : { selectedItems: [] },\n );\n const removeSelectedItem = multiple ? multipleSelectionResult.removeSelectedItem : (): void => {};\n\n const {\n getInputProps,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n reset,\n selectedItem,\n isOpen,\n highlightedIndex,\n inputValue,\n } = useCombobox<SelectItem>({\n items,\n selectedItem: multiple ? null : (getItemByValue(selectedItemValues[0]) as SelectItem | null | undefined),\n defaultHighlightedIndex: 0,\n toggleButtonId: id,\n // Only set labelId if aria-labelledby is explicitly provided, otherwise downshift generates an orphan ID\n ...('aria-labelledby' in props && props['aria-labelledby'] ? { labelId: props['aria-labelledby'] } : {}),\n onSelectedItemChange: ({ selectedItem }) => {\n if (selectedItem) {\n onItemSelect(selectedItem.value);\n }\n if (multiple) {\n setFilterText('');\n }\n },\n onInputValueChange: ({ inputValue }) => {\n setFilterText(inputValue);\n },\n onIsOpenChange: () => {\n setHasInteractedSinceOpening(false);\n setFilterText('');\n },\n onHighlightedIndexChange: () => {\n setHasInteractedSinceOpening(true);\n },\n itemToString: (item) => (item ? item.label : ''),\n stateReducer: (state, actionAndChanges) => {\n const { changes, type } = actionAndChanges;\n if (multiple) {\n switch (type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true,\n highlightedIndex: state.highlightedIndex,\n inputValue: '',\n };\n case useCombobox.stateChangeTypes.InputBlur:\n // Select item on blur (Tab key) but clear the input\n return {\n ...changes,\n inputValue: '',\n };\n }\n } else {\n // For single select, handle re-selection of the same item\n // onSelectedItemChange doesn't fire when selecting the same item, so we call onItemSelect here\n switch (type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n if (\n changes.selectedItem &&\n state.selectedItem &&\n changes.selectedItem.value === state.selectedItem.value\n ) {\n onItemSelect(changes.selectedItem.value);\n }\n break;\n }\n }\n return changes;\n },\n });\n\n const valueInvalid = useMemo(() => {\n if (multiple) {\n return false;\n }\n return !getAsyncItems && !items.find((item) => item.label.toLowerCase().includes(inputValue.toLowerCase()));\n }, [inputValue, items, getAsyncItems, multiple]);\n\n const hasError = valueInvalid || !!asyncItemStatus.error || status === 'error';\n\n const handleDismissBadge = (value: string, preventFocusRing: boolean): void => {\n const item = getItemByValue(value) as SelectItem | undefined;\n if (item) {\n removeSelectedItem(item);\n onItemSelect(value);\n if (inputRef.current) {\n inputRef.current.focus();\n if (preventFocusRing) {\n inputRef.current.dataset.showFocusRing = 'false';\n }\n }\n }\n };\n\n const handleClear = (): void => {\n onClear();\n reset();\n };\n\n const handleBlur = (blurEvent: FocusEvent<HTMLInputElement, Element>): void => {\n onBlur(blurEvent);\n\n if (!multiple) {\n const selectedItemLabel = selectedItem?.label ?? '';\n const isOutdated = selectedItemLabel.toLocaleLowerCase() !== inputValue.toLocaleLowerCase();\n\n if (isOutdated) {\n reset();\n }\n }\n\n if (getInputProps().onBlur) {\n getInputProps().onBlur?.(blurEvent);\n }\n };\n\n return (\n <RadixPopover.Root open={isOpen}>\n <RadixPopover.Anchor asChild>\n <div\n ref={forwardedRef}\n className={styles.root}\n data-status={hasError ? 'error' : status}\n data-disabled={disabled}\n data-empty={selectedItemValues.length === 0}\n >\n {multiple ? (\n <>\n {/* Hidden description for screen readers - announced on focus */}\n <span id={selectionDescriptionId} className={styles.srOnly}>\n {selectionDescription}\n </span>\n <CollapsibleBadges\n items={badgeItems}\n onDismiss={handleDismissBadge}\n selectedCount={selectedItemValues.length}\n >\n <input\n // eslint-disable-next-line react-hooks/refs\n {...getInputProps({\n ref: inputCallbackRef,\n 'aria-label': 'aria-label' in props ? props['aria-label'] : undefined,\n // Remove auto-generated aria-labelledby if not explicitly provided\n 'aria-labelledby':\n 'aria-labelledby' in props && props['aria-labelledby']\n ? props['aria-labelledby']\n : undefined,\n 'aria-describedby': selectionDescription ? selectionDescriptionId : undefined,\n })}\n data-test-id={dataTestId}\n placeholder={selectedItemValues.length === 0 ? placeholder : ''}\n className={styles.multiSelectInput}\n disabled={disabled}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={handleBlur}\n />\n </CollapsibleBadges>\n </>\n ) : (\n <input\n {...getInputProps({\n 'aria-label': 'aria-label' in props ? props['aria-label'] : undefined,\n // Remove auto-generated aria-labelledby if not explicitly provided\n 'aria-labelledby':\n 'aria-labelledby' in props && props['aria-labelledby']\n ? props['aria-labelledby']\n : undefined,\n })}\n data-test-id={dataTestId}\n placeholder={placeholder}\n className={styles.input}\n disabled={disabled}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={handleBlur}\n />\n )}\n {inputSlots}\n {clearButton ? <ClearButton onClear={handleClear}>{clearButton}</ClearButton> : null}\n {asyncItemStatus.isLoading && isOpen ? (\n <ForwardedRefSelectSlot name=\"right\" data-test-id={`${dataTestId}-right-slot`}>\n <LoadingCircle size=\"x-small\" data-test-id={`${dataTestId}-loading-circle`} />\n </ForwardedRefSelectSlot>\n ) : null}\n <div className={styles.icons}>\n <button\n aria-label={t('Select_toggleMenu')}\n {...getToggleButtonProps()}\n type=\"button\"\n disabled={disabled}\n onMouseDown={() => {\n wasClickedRef.current = true;\n }}\n >\n <IconCaretDown size={16} className={styles.caret} />\n </button>\n <StatusIcons status={status} hasError={hasError} dataTestId={dataTestId} />\n </div>\n </div>\n </RadixPopover.Anchor>\n\n <SelectMenu\n align={alignMenu}\n side={side}\n highlightedIndex={highlightedIndex}\n filterText={filterText}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n selectedItemValues={selectedItemValues}\n hasInteractedSinceOpening={hasInteractedSinceOpening}\n viewportCollisionPadding={viewportCollisionPadding}\n onEscapeKeyDown={onEscapeKeyDown}\n >\n {menuSlots}\n </SelectMenu>\n </RadixPopover.Root>\n );\n};\nComboboxBaseInput.displayName = 'Select.Combobox';\n\nexport const ComboboxBase = forwardRef<HTMLDivElement, ComboboxBaseProps>(ComboboxBaseInput);\n"],"names":["ComboboxBaseInput","children","selectedItemValues","onItemSelect","onClear","placeholder","status","disabled","dataTestId","alignMenu","side","id","viewportCollisionPadding","getAsyncItems","onEscapeKeyDown","multiple","props","forwardedRef","inputRef","useRef","inputCallbackRef","useCallback","node","t","useTranslation","inputSlots","menuSlots","items","filterText","clearButton","getItemByValue","setFilterText","asyncItemStatus","useSelectData","wasClickedRef","onMouseDown","onFocus","onBlur","useFocusRing","selectionDescriptionId","selectionDescription","useSelectionDescription","badgeItems","useBadgeItems","hasInteractedSinceOpening","setHasInteractedSinceOpening","useState","selectedItems","useMemo","value","item","multipleSelectionResult","useMultipleSelection","newSelectedItems","type","removedItem","removeSelectedItem","getInputProps","getToggleButtonProps","getMenuProps","getItemProps","reset","selectedItem","isOpen","highlightedIndex","inputValue","useCombobox","state","actionAndChanges","changes","hasError","handleDismissBadge","preventFocusRing","handleClear","handleBlur","blurEvent","_b","_a","jsxs","RadixPopover","jsx","styles","Fragment","CollapsibleBadges","ClearButton","ForwardedRefSelectSlot","LoadingCircle","IconCaretDown","StatusIcons","SelectMenu","ComboboxBase","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"fondue-components121.js","sources":["../src/components/OrderableList/hooks/useOrderedListItemContext.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { createContext, useContext } from 'react';\n\ntype OrderableItemContextType = {\n itemId: string;\n dragHandleRef: (element: Element | null) => void;\n hasHandle: boolean;\n selected?: boolean;\n onSelect?: (isSelected: boolean) => void;\n};\n\nexport const OrderableItemContext = createContext<OrderableItemContextType>({\n itemId: '',\n dragHandleRef: () => null,\n hasHandle: false,\n});\nOrderableItemContext.displayName = 'OrderableItemContext';\n\nexport const OrderableItemContextProvider = OrderableItemContext.Provider;\n\nexport const useOrderableItemContext = (): OrderableItemContextType => useContext(OrderableItemContext);\n"],"names":["OrderableItemContext","createContext","OrderableItemContextProvider","useOrderableItemContext","useContext"],"mappings":";AAYO,MAAMA,IAAuBC,EAAwC;AAAA,EACxE,QAAQ;AAAA,EACR,eAAe,MAAM;AAAA,EACrB,WAAW;AACf,CAAC;AACDD,EAAqB,cAAc;AAE5B,MAAME,IAA+BF,EAAqB,UAEpDG,IAA0B,MAAgCC,EAAWJ,CAAoB;"}
@@ -1,22 +1,39 @@
1
- import { useState as f } from "react";
2
- const I = (i, l, r) => {
3
- const [d, n] = f(r ?? []), e = l ?? d, s = (t) => {
4
- l || n(t), i == null || i(t);
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import { forwardRef as f } from "react";
3
+ import { getItemTitle as p } from "./fondue-components80.js";
4
+ import { useOrderableListAnnounce as u } from "./fondue-components81.js";
5
+ import { useOrderableItemContext as b } from "./fondue-components121.js";
6
+ import l from "./fondue-components83.js";
7
+ const I = f(({ children: t }, o) => {
8
+ const { itemId: c, onSelect: n, selected: r, hasHandle: d } = b(), m = u();
9
+ if (!n)
10
+ return (
11
+ // eslint-disable-next-line jsx-a11y-x/no-noninteractive-tabindex
12
+ /* @__PURE__ */ s("div", { className: l.content, ref: o, tabIndex: d ? 0 : void 0, children: t })
13
+ );
14
+ const a = () => {
15
+ const e = !r;
16
+ n(e), m(`${p(c)} ${e ? "selected" : "unselected"}`);
17
+ }, i = (e) => {
18
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), a());
5
19
  };
6
- return {
7
- selectedItemValues: e,
8
- toggleSelectedItem: (t) => {
9
- if (t === void 0)
10
- return;
11
- const c = e.findIndex((o) => t === o);
12
- c > 0 ? s([...e.slice(0, c), ...e.slice(c + 1)]) : s(c === 0 ? [...e.slice(1)] : [...e, t]);
13
- },
14
- clear: () => {
15
- s([]);
20
+ return /* @__PURE__ */ s(
21
+ "div",
22
+ {
23
+ className: l.content,
24
+ ref: o,
25
+ role: "button",
26
+ tabIndex: 0,
27
+ "aria-pressed": !!r,
28
+ onClick: a,
29
+ onKeyDown: i,
30
+ "data-clickable": !0,
31
+ children: t
16
32
  }
17
- };
18
- };
33
+ );
34
+ });
35
+ I.displayName = "OrderableListItemContent";
19
36
  export {
20
- I as useMultiselect
37
+ I as OrderableListItemContent
21
38
  };
22
39
  //# sourceMappingURL=fondue-components122.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components122.js","sources":["../src/components/Select/hooks/useMultiselect.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { useState } from 'react';\n\nexport const useMultiselect = (\n onSelect?: (value: string[] | null) => void,\n value?: string[] | null,\n defaultValue?: string[],\n) => {\n const [selectedItemsState, setSelectedItemsState] = useState<string[]>(defaultValue ?? []);\n\n const selectedItemValues = value ?? selectedItemsState;\n const setSelectedItems = (items: string[]) => {\n if (!value) {\n setSelectedItemsState(items);\n }\n onSelect?.(items);\n };\n\n const toggleSelectedItem = (toggledItem?: string) => {\n if (toggledItem === undefined) {\n return;\n }\n const index = selectedItemValues.findIndex((selectedItemValue) => toggledItem === selectedItemValue);\n if (index > 0) {\n setSelectedItems([...selectedItemValues.slice(0, index), ...selectedItemValues.slice(index + 1)]);\n } else if (index === 0) {\n setSelectedItems([...selectedItemValues.slice(1)]);\n } else {\n setSelectedItems([...selectedItemValues, toggledItem]);\n }\n };\n\n const clear = () => {\n setSelectedItems([]);\n };\n\n return {\n selectedItemValues,\n toggleSelectedItem,\n clear,\n };\n};\n"],"names":["useMultiselect","onSelect","value","defaultValue","selectedItemsState","setSelectedItemsState","useState","selectedItemValues","setSelectedItems","items","toggledItem","index","selectedItemValue"],"mappings":";AAIO,MAAMA,IAAiB,CAC1BC,GACAC,GACAC,MACC;AACD,QAAM,CAACC,GAAoBC,CAAqB,IAAIC,EAAmBH,KAAgB,CAAA,CAAE,GAEnFI,IAAqBL,KAASE,GAC9BI,IAAmB,CAACC,MAAoB;AAC1C,IAAKP,KACDG,EAAsBI,CAAK,GAE/BR,KAAA,QAAAA,EAAWQ;AAAA,EACf;AAoBA,SAAO;AAAA,IACH,oBAAAF;AAAA,IACA,oBApBuB,CAACG,MAAyB;AACjD,UAAIA,MAAgB;AAChB;AAEJ,YAAMC,IAAQJ,EAAmB,UAAU,CAACK,MAAsBF,MAAgBE,CAAiB;AACnG,MAAID,IAAQ,IACRH,EAAiB,CAAC,GAAGD,EAAmB,MAAM,GAAGI,CAAK,GAAG,GAAGJ,EAAmB,MAAMI,IAAQ,CAAC,CAAC,CAAC,IAEhGH,EADOG,MAAU,IACA,CAAC,GAAGJ,EAAmB,MAAM,CAAC,CAAC,IAE/B,CAAC,GAAGA,GAAoBG,CAAW,CAFH;AAAA,IAIzD;AAAA,IASI,OAPU,MAAM;AAChB,MAAAF,EAAiB,CAAA,CAAE;AAAA,IACvB;AAAA,EAKI;AAER;"}
1
+ {"version":3,"file":"fondue-components122.js","sources":["../src/components/OrderableList/OrderableListItemContent.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { forwardRef, type KeyboardEvent, type ReactNode } from 'react';\n\nimport { getItemTitle } from './helpers/getItemTitle';\nimport { useOrderableListAnnounce } from './hooks/useOrderableListAnnounce';\nimport { useOrderableItemContext } from './hooks/useOrderedListItemContext';\nimport styles from './styles/orderable-list.module.scss';\n\nexport const OrderableListItemContent = forwardRef<HTMLDivElement, { children: ReactNode }>(({ children }, ref) => {\n const { itemId, onSelect, selected, hasHandle } = useOrderableItemContext();\n const announce = useOrderableListAnnounce();\n\n if (!onSelect) {\n return (\n // eslint-disable-next-line jsx-a11y-x/no-noninteractive-tabindex\n <div className={styles.content} ref={ref} tabIndex={hasHandle ? 0 : undefined}>\n {children}\n </div>\n );\n }\n\n const handleSelect = () => {\n const newSelected = !selected;\n onSelect(newSelected);\n announce(`${getItemTitle(itemId)} ${newSelected ? 'selected' : 'unselected'}`);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleSelect();\n }\n };\n\n return (\n <div\n className={styles.content}\n ref={ref}\n role=\"button\"\n tabIndex={0}\n aria-pressed={Boolean(selected)}\n onClick={handleSelect}\n onKeyDown={handleKeyDown}\n data-clickable\n >\n {children}\n </div>\n );\n});\nOrderableListItemContent.displayName = 'OrderableListItemContent';\n"],"names":["OrderableListItemContent","forwardRef","children","ref","itemId","onSelect","selected","hasHandle","useOrderableItemContext","announce","useOrderableListAnnounce","jsx","styles","handleSelect","newSelected","getItemTitle","handleKeyDown","event"],"mappings":";;;;;;AASO,MAAMA,IAA2BC,EAAoD,CAAC,EAAE,UAAAC,EAAA,GAAYC,MAAQ;AAC/G,QAAM,EAAE,QAAAC,GAAQ,UAAAC,GAAU,UAAAC,GAAU,WAAAC,EAAA,IAAcC,EAAA,GAC5CC,IAAWC,EAAA;AAEjB,MAAI,CAACL;AACD;AAAA;AAAA,MAEI,gBAAAM,EAAC,OAAA,EAAI,WAAWC,EAAO,SAAS,KAAAT,GAAU,UAAUI,IAAY,IAAI,QAC/D,UAAAL,EAAA,CACL;AAAA;AAIR,QAAMW,IAAe,MAAM;AACvB,UAAMC,IAAc,CAACR;AACrB,IAAAD,EAASS,CAAW,GACpBL,EAAS,GAAGM,EAAaX,CAAM,CAAC,IAAIU,IAAc,aAAa,YAAY,EAAE;AAAA,EACjF,GAEME,IAAgB,CAACC,MAAyB;AAC5C,KAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACvCA,EAAM,eAAA,GACNJ,EAAA;AAAA,EAER;AAEA,SACI,gBAAAF;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWC,EAAO;AAAA,MAClB,KAAAT;AAAA,MACA,MAAK;AAAA,MACL,UAAU;AAAA,MACV,gBAAc,EAAQG;AAAA,MACtB,SAASO;AAAA,MACT,WAAWG;AAAA,MACX,kBAAc;AAAA,MAEb,UAAAd;AAAA,IAAA;AAAA,EAAA;AAGb,CAAC;AACDF,EAAyB,cAAc;"}
@@ -1,20 +1,220 @@
1
- import { useState as a, useCallback as u } from "react";
2
- const n = (s, t, e) => {
3
- const [f, r] = a(e ?? null), i = t !== void 0 ? t : f, l = i !== null ? [i] : [], m = u(
4
- (d) => {
5
- d !== void 0 && (t === void 0 && r(d), s == null || s(d));
1
+ import { jsxs as g, jsx as n, Fragment as ue } from "react/jsx-runtime";
2
+ import { IconCaretDown as me } from "@frontify/fondue-icons";
3
+ import * as H from "@radix-ui/react-popover";
4
+ import { useMultipleSelection as K, useCombobox as s } from "downshift";
5
+ import { forwardRef as be, useRef as he, useCallback as fe, useState as ge, useMemo as j } from "react";
6
+ import { LoadingCircle as pe } from "./fondue-components21.js";
7
+ import { useTranslation as Ce } from "./fondue-components42.js";
8
+ import { useBadgeItems as ye } from "./fondue-components135.js";
9
+ import { useFocusRing as Ie } from "./fondue-components136.js";
10
+ import { useSelectData as ve } from "./fondue-components137.js";
11
+ import { useSelectionDescription as Be } from "./fondue-components138.js";
12
+ import c from "./fondue-components127.js";
13
+ import { ClearButton as xe } from "./fondue-components139.js";
14
+ import { CollapsibleBadges as Se } from "./fondue-components140.js";
15
+ import { SelectMenu as we } from "./fondue-components141.js";
16
+ import { ForwardedRefSelectSlot as De } from "./fondue-components95.js";
17
+ import { StatusIcons as Re } from "./fondue-components142.js";
18
+ const z = ({
19
+ children: E,
20
+ selectedItemValues: i,
21
+ onItemSelect: m,
22
+ onClear: $,
23
+ placeholder: x = "",
24
+ status: p = "neutral",
25
+ disabled: b,
26
+ "data-test-id": d = "fondue-select-combobox",
27
+ alignMenu: _ = "start",
28
+ side: q = "bottom",
29
+ id: G,
30
+ viewportCollisionPadding: J = "compact",
31
+ getAsyncItems: C,
32
+ onEscapeKeyDown: Q,
33
+ multiple: o,
34
+ ...a
35
+ }, U) => {
36
+ const h = he(null), W = fe((e) => {
37
+ h.current = e;
38
+ }, []), { t: X } = Ce(), { inputSlots: Y, menuSlots: Z, items: y, filterText: A, clearButton: S, getItemByValue: r, setFilterText: I, asyncItemStatus: w } = ve(E, C), { wasClickedRef: V, onMouseDown: D, onFocus: R, onBlur: ee } = Ie(), { selectionDescriptionId: L, selectionDescription: O } = Be(
39
+ o,
40
+ i,
41
+ r
42
+ ), te = ye(i, r), [ae, k] = ge(!1), M = j(() => i.map((e) => r(e)).filter((e) => e !== void 0 && "value" in e && "label" in e), [i, r]), ne = K(
43
+ o ? {
44
+ selectedItems: M,
45
+ onStateChange({ selectedItems: e, type: l }) {
46
+ if (l === K.stateChangeTypes.SelectedItemKeyDownBackspace) {
47
+ const t = M.find((u) => !(e != null && e.includes(u)));
48
+ t && m(t.value);
49
+ }
50
+ }
51
+ } : { selectedItems: [] }
52
+ ), oe = o ? ne.removeSelectedItem : () => {
53
+ }, {
54
+ getInputProps: f,
55
+ getToggleButtonProps: ie,
56
+ getMenuProps: le,
57
+ getItemProps: re,
58
+ reset: N,
59
+ selectedItem: v,
60
+ isOpen: T,
61
+ highlightedIndex: se,
62
+ inputValue: B
63
+ } = s({
64
+ items: y,
65
+ selectedItem: o ? null : r(i[0]),
66
+ defaultHighlightedIndex: 0,
67
+ toggleButtonId: G,
68
+ // Only set labelId if aria-labelledby is explicitly provided, otherwise downshift generates an orphan ID
69
+ ..."aria-labelledby" in a && a["aria-labelledby"] ? { labelId: a["aria-labelledby"] } : {},
70
+ onSelectedItemChange: ({ selectedItem: e }) => {
71
+ e && m(e.value), o && I("");
6
72
  },
7
- [t, s]
8
- ), I = u(() => {
9
- t === void 0 && r(null), s == null || s(null);
10
- }, [t, s]);
11
- return {
12
- selectedItemValues: l,
13
- selectItem: m,
14
- clear: I
73
+ onInputValueChange: ({ inputValue: e }) => {
74
+ I(e);
75
+ },
76
+ onIsOpenChange: () => {
77
+ k(!1), I("");
78
+ },
79
+ onHighlightedIndexChange: () => {
80
+ k(!0);
81
+ },
82
+ itemToString: (e) => e ? e.label : "",
83
+ stateReducer: (e, l) => {
84
+ const { changes: t, type: u } = l;
85
+ if (o)
86
+ switch (u) {
87
+ case s.stateChangeTypes.InputKeyDownEnter:
88
+ case s.stateChangeTypes.ItemClick:
89
+ return {
90
+ ...t,
91
+ isOpen: !0,
92
+ highlightedIndex: e.highlightedIndex,
93
+ inputValue: ""
94
+ };
95
+ case s.stateChangeTypes.InputBlur:
96
+ return {
97
+ ...t,
98
+ inputValue: ""
99
+ };
100
+ }
101
+ else
102
+ switch (u) {
103
+ case s.stateChangeTypes.InputKeyDownEnter:
104
+ case s.stateChangeTypes.ItemClick:
105
+ t.selectedItem && e.selectedItem && t.selectedItem.value === e.selectedItem.value && m(t.selectedItem.value);
106
+ break;
107
+ }
108
+ return t;
109
+ }
110
+ }), F = j(() => o ? !1 : !C && !y.find((e) => e.label.toLowerCase().includes(B.toLowerCase())), [B, y, C, o]) || !!w.error || p === "error", ce = (e, l) => {
111
+ const t = r(e);
112
+ t && (oe(t), m(e), h.current && (h.current.focus(), l && (h.current.dataset.showFocusRing = "false")));
113
+ }, de = () => {
114
+ $(), N();
115
+ }, P = (e) => {
116
+ var l, t;
117
+ ee(e), o || ((v == null ? void 0 : v.label) ?? "").toLocaleLowerCase() !== B.toLocaleLowerCase() && N(), f().onBlur && ((t = (l = f()).onBlur) == null || t.call(l, e));
15
118
  };
119
+ return /* @__PURE__ */ g(H.Root, { open: T, children: [
120
+ /* @__PURE__ */ n(H.Anchor, { asChild: !0, children: /* @__PURE__ */ g(
121
+ "div",
122
+ {
123
+ ref: U,
124
+ className: c.root,
125
+ "data-status": F ? "error" : p,
126
+ "data-disabled": b,
127
+ "data-empty": i.length === 0,
128
+ children: [
129
+ o ? /* @__PURE__ */ g(ue, { children: [
130
+ /* @__PURE__ */ n("span", { id: L, className: c.srOnly, children: O }),
131
+ /* @__PURE__ */ n(
132
+ Se,
133
+ {
134
+ items: te,
135
+ onDismiss: ce,
136
+ selectedCount: i.length,
137
+ children: /* @__PURE__ */ n(
138
+ "input",
139
+ {
140
+ ...f({
141
+ ref: W,
142
+ "aria-label": "aria-label" in a ? a["aria-label"] : void 0,
143
+ // Remove auto-generated aria-labelledby if not explicitly provided
144
+ "aria-labelledby": "aria-labelledby" in a && a["aria-labelledby"] ? a["aria-labelledby"] : void 0,
145
+ "aria-describedby": O ? L : void 0
146
+ }),
147
+ "data-test-id": d,
148
+ placeholder: i.length === 0 ? x : "",
149
+ className: c.multiSelectInput,
150
+ disabled: b,
151
+ onMouseDown: D,
152
+ onFocus: R,
153
+ onBlur: P
154
+ }
155
+ )
156
+ }
157
+ )
158
+ ] }) : /* @__PURE__ */ n(
159
+ "input",
160
+ {
161
+ ...f({
162
+ "aria-label": "aria-label" in a ? a["aria-label"] : void 0,
163
+ // Remove auto-generated aria-labelledby if not explicitly provided
164
+ "aria-labelledby": "aria-labelledby" in a && a["aria-labelledby"] ? a["aria-labelledby"] : void 0
165
+ }),
166
+ "data-test-id": d,
167
+ placeholder: x,
168
+ className: c.input,
169
+ disabled: b,
170
+ onMouseDown: D,
171
+ onFocus: R,
172
+ onBlur: P
173
+ }
174
+ ),
175
+ Y,
176
+ S ? /* @__PURE__ */ n(xe, { onClear: de, children: S }) : null,
177
+ w.isLoading && T ? /* @__PURE__ */ n(De, { name: "right", "data-test-id": `${d}-right-slot`, children: /* @__PURE__ */ n(pe, { size: "x-small", "data-test-id": `${d}-loading-circle` }) }) : null,
178
+ /* @__PURE__ */ g("div", { className: c.icons, children: [
179
+ /* @__PURE__ */ n(
180
+ "button",
181
+ {
182
+ "aria-label": X("Select_toggleMenu"),
183
+ ...ie(),
184
+ type: "button",
185
+ disabled: b,
186
+ onMouseDown: () => {
187
+ V.current = !0;
188
+ },
189
+ children: /* @__PURE__ */ n(me, { size: 16, className: c.caret })
190
+ }
191
+ ),
192
+ /* @__PURE__ */ n(Re, { status: p, hasError: F, dataTestId: d })
193
+ ] })
194
+ ]
195
+ }
196
+ ) }),
197
+ /* @__PURE__ */ n(
198
+ we,
199
+ {
200
+ align: _,
201
+ side: q,
202
+ highlightedIndex: se,
203
+ filterText: A,
204
+ getMenuProps: le,
205
+ getItemProps: re,
206
+ selectedItemValues: i,
207
+ hasInteractedSinceOpening: ae,
208
+ viewportCollisionPadding: J,
209
+ onEscapeKeyDown: Q,
210
+ children: Z
211
+ }
212
+ )
213
+ ] });
16
214
  };
215
+ z.displayName = "Select.Combobox";
216
+ const Qe = be(z);
17
217
  export {
18
- n as useSingleSelect
218
+ Qe as ComboboxBase
19
219
  };
20
220
  //# sourceMappingURL=fondue-components123.js.map