@frontify/fondue-components 26.0.3 → 27.0.1

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 (45) hide show
  1. package/dist/fondue-components104.js +1 -1
  2. package/dist/fondue-components105.js +1 -1
  3. package/dist/fondue-components106.js +1 -1
  4. package/dist/fondue-components107.js +1 -1
  5. package/dist/fondue-components108.js +1 -1
  6. package/dist/fondue-components23.js +1 -0
  7. package/dist/fondue-components23.js.map +1 -1
  8. package/dist/fondue-components32.js +62 -60
  9. package/dist/fondue-components32.js.map +1 -1
  10. package/dist/fondue-components4.js +56 -48
  11. package/dist/fondue-components4.js.map +1 -1
  12. package/dist/fondue-components40.js +2 -2
  13. package/dist/fondue-components41.js +4 -2
  14. package/dist/fondue-components41.js.map +1 -1
  15. package/dist/fondue-components47.js +1 -1
  16. package/dist/fondue-components53.js +14 -12
  17. package/dist/fondue-components53.js.map +1 -1
  18. package/dist/fondue-components71.js +2 -2
  19. package/dist/fondue-components72.js +2 -2
  20. package/dist/fondue-components73.js +2 -2
  21. package/dist/fondue-components74.js +2 -2
  22. package/dist/fondue-components75.js +1 -1
  23. package/dist/fondue-components76.js +1 -1
  24. package/dist/fondue-components85.js +10 -10
  25. package/dist/fondue-components9.js +95 -83
  26. package/dist/fondue-components9.js.map +1 -1
  27. package/dist/fondue-components92.js +4 -216
  28. package/dist/fondue-components92.js.map +1 -1
  29. package/dist/fondue-components93.js +4 -18
  30. package/dist/fondue-components93.js.map +1 -1
  31. package/dist/fondue-components94.js +16 -16
  32. package/dist/fondue-components94.js.map +1 -1
  33. package/dist/fondue-components95.js +188 -122
  34. package/dist/fondue-components95.js.map +1 -1
  35. package/dist/fondue-components96.js +18 -44
  36. package/dist/fondue-components96.js.map +1 -1
  37. package/dist/fondue-components97.js +16 -16
  38. package/dist/fondue-components97.js.map +1 -1
  39. package/dist/fondue-components98.js +150 -4
  40. package/dist/fondue-components98.js.map +1 -1
  41. package/dist/fondue-components99.js +44 -4
  42. package/dist/fondue-components99.js.map +1 -1
  43. package/dist/index.d.ts +15 -3
  44. package/dist/style.css +1 -1
  45. package/package.json +1 -1
@@ -1,48 +1,22 @@
1
- const c = "_root_13ciu_7", e = "_selectedValue_13ciu_63", _ = "_input_13ciu_80", o = "_slot_13ciu_106", t = "_clear_13ciu_156", n = "_clearIcon_13ciu_163", u = "_icons_13ciu_167", i = "_caret_13ciu_173", r = "_iconSuccess_13ciu_201", s = "_iconError_13ciu_207", a = "_menu_13ciu_213", l = "_portal_13ciu_236", p = "_item_13ciu_252", g = "_checkmarkIcon_13ciu_281", m = "_itemValue_13ciu_287", d = "_group_13ciu_301", I = "_groupHeading_13ciu_312", b = "_badgesContainer_13ciu_324", k = "_badgeWrapper_13ciu_336", S = "_srOnly_13ciu_345", V = "_multiSelectInput_13ciu_357", y = {
2
- root: c,
3
- selectedValue: e,
4
- input: _,
5
- slot: o,
6
- clear: t,
7
- clearIcon: n,
8
- icons: u,
9
- caret: i,
10
- iconSuccess: r,
11
- iconError: s,
12
- menu: a,
13
- portal: l,
14
- item: p,
15
- checkmarkIcon: g,
16
- itemValue: m,
17
- group: d,
18
- groupHeading: I,
19
- badgesContainer: b,
20
- badgeWrapper: k,
21
- srOnly: S,
22
- multiSelectInput: V
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);
5
+ };
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([]);
16
+ }
17
+ };
23
18
  };
24
19
  export {
25
- k as badgeWrapper,
26
- b as badgesContainer,
27
- i as caret,
28
- g as checkmarkIcon,
29
- t as clear,
30
- n as clearIcon,
31
- y as default,
32
- d as group,
33
- I as groupHeading,
34
- s as iconError,
35
- r as iconSuccess,
36
- u as icons,
37
- _ as input,
38
- p as item,
39
- m as itemValue,
40
- a as menu,
41
- V as multiSelectInput,
42
- l as portal,
43
- c as root,
44
- e as selectedValue,
45
- o as slot,
46
- S as srOnly
20
+ I as useMultiselect
47
21
  };
48
22
  //# sourceMappingURL=fondue-components96.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components96.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fondue-components96.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,20 +1,20 @@
1
- const o = "_root_18649_5", c = "_caret_18649_43", t = "_colorName_18649_58", _ = "_colorIndicator_18649_61", n = "_button_18649_82", r = "_actions_18649_113", a = "_clearIcon_18649_122", s = {
2
- root: o,
3
- caret: c,
4
- colorName: t,
5
- colorIndicator: _,
6
- button: n,
7
- actions: r,
8
- clearIcon: a
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));
6
+ },
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
15
+ };
9
16
  };
10
17
  export {
11
- r as actions,
12
- n as button,
13
- c as caret,
14
- a as clearIcon,
15
- _ as colorIndicator,
16
- t as colorName,
17
- s as default,
18
- o as root
18
+ n as useSingleSelect
19
19
  };
20
20
  //# sourceMappingURL=fondue-components97.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components97.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"fondue-components97.js","sources":["../src/components/Select/hooks/useSingleSelect.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { useCallback, useState } from 'react';\n\nexport const useSingleSelect = (\n onSelect?: (value: string | null) => void,\n value?: string | null,\n defaultValue?: string,\n) => {\n const [selectedItemState, setSelectedItemState] = useState<string | null>(defaultValue ?? null);\n\n const selectedValue = value !== undefined ? value : selectedItemState;\n const selectedItemValues = selectedValue !== null ? [selectedValue] : [];\n\n const selectItem = useCallback(\n (item?: string) => {\n if (item === undefined) {\n return;\n }\n if (value === undefined) {\n setSelectedItemState(item);\n }\n onSelect?.(item);\n },\n [value, onSelect],\n );\n\n const clear = useCallback(() => {\n if (value === undefined) {\n setSelectedItemState(null);\n }\n onSelect?.(null);\n }, [value, onSelect]);\n\n return {\n selectedItemValues,\n selectItem,\n clear,\n };\n};\n"],"names":["useSingleSelect","onSelect","value","defaultValue","selectedItemState","setSelectedItemState","useState","selectedValue","selectedItemValues","selectItem","useCallback","item","clear"],"mappings":";AAIO,MAAMA,IAAkB,CAC3BC,GACAC,GACAC,MACC;AACD,QAAM,CAACC,GAAmBC,CAAoB,IAAIC,EAAwBH,KAAgB,IAAI,GAExFI,IAAgBL,MAAU,SAAYA,IAAQE,GAC9CI,IAAqBD,MAAkB,OAAO,CAACA,CAAa,IAAI,CAAA,GAEhEE,IAAaC;AAAA,IACf,CAACC,MAAkB;AACf,MAAIA,MAAS,WAGTT,MAAU,UACVG,EAAqBM,CAAI,GAE7BV,KAAA,QAAAA,EAAWU;AAAA,IACf;AAAA,IACA,CAACT,GAAOD,CAAQ;AAAA,EAAA,GAGdW,IAAQF,EAAY,MAAM;AAC5B,IAAIR,MAAU,UACVG,EAAqB,IAAI,GAE7BJ,KAAA,QAAAA,EAAW;AAAA,EACf,GAAG,CAACC,GAAOD,CAAQ,CAAC;AAEpB,SAAO;AAAA,IACH,oBAAAO;AAAA,IACA,YAAAC;AAAA,IACA,OAAAG;AAAA,EAAA;AAER;"}
@@ -1,8 +1,154 @@
1
- const o = "_root_1y4f3_2", t = {
2
- root: o
1
+ import { jsxs as d, jsx as n } from "react/jsx-runtime";
2
+ import { IconCaretDown as V } from "@frontify/fondue-icons";
3
+ import * as I from "@radix-ui/react-popover";
4
+ import { useSelect as s } from "downshift";
5
+ import { forwardRef as ee, useRef as te, useCallback as N, useState as ne, useMemo as oe } from "react";
6
+ import { useBadgeItems as re } from "./fondue-components100.js";
7
+ import { useFocusRing as ae } from "./fondue-components101.js";
8
+ import { useSelectData as se } from "./fondue-components102.js";
9
+ import { useSelectionDescription as ie } from "./fondue-components103.js";
10
+ import r from "./fondue-components99.js";
11
+ import { ClearButton as le } from "./fondue-components104.js";
12
+ import { CollapsibleBadges as ce } from "./fondue-components105.js";
13
+ import { SelectMenu as ue } from "./fondue-components106.js";
14
+ import { StatusIcons as ge } from "./fondue-components107.js";
15
+ const O = ({
16
+ children: M,
17
+ selectedItemValues: o,
18
+ onItemSelect: p,
19
+ onClear: P,
20
+ placeholder: c = "",
21
+ status: u = "neutral",
22
+ disabled: f,
23
+ alignMenu: R = "start",
24
+ side: j = "bottom",
25
+ id: k,
26
+ showStringValue: y = !0,
27
+ "data-test-id": b = "fondue-select",
28
+ viewportCollisionPadding: E = "compact",
29
+ onEscapeKeyDown: F,
30
+ multiple: g,
31
+ ...i
32
+ }, a) => {
33
+ const C = te(null), B = N(
34
+ (e) => {
35
+ C.current = e, typeof a == "function" ? a(e) : a && (a.current = e);
36
+ },
37
+ [a]
38
+ ), { inputSlots: H, menuSlots: K, items: w, clearButton: S, getItemByValue: l } = se(M), { onMouseDown: z, onFocus: A, onBlur: q } = ae(), { selectionDescriptionId: D, selectionDescription: m } = ie(
39
+ g,
40
+ o,
41
+ l
42
+ ), G = re(o, l), [J, v] = ne(!1), x = N(
43
+ (e) => {
44
+ const t = l(e);
45
+ if (t)
46
+ return !y && (t != null && t.children) ? t.children : t == null ? void 0 : t.label;
47
+ },
48
+ [l, y]
49
+ ), { getToggleButtonProps: L, getMenuProps: Q, getItemProps: U, reset: W, isOpen: X, highlightedIndex: Y } = s({
50
+ items: w,
51
+ selectedItem: null,
52
+ toggleButtonId: k,
53
+ labelId: "aria-labelledby" in i ? i["aria-labelledby"] : void 0,
54
+ onIsOpenChange: () => {
55
+ v(!1);
56
+ },
57
+ onHighlightedIndexChange: () => {
58
+ v(!0);
59
+ },
60
+ onSelectedItemChange: ({ selectedItem: e }) => {
61
+ p(e == null ? void 0 : e.value);
62
+ },
63
+ itemToString: (e) => e ? e.label : "",
64
+ ...g ? {
65
+ stateReducer: (e, t) => {
66
+ const { changes: h, type: $ } = t;
67
+ switch ($) {
68
+ case s.stateChangeTypes.ToggleButtonKeyDownEnter:
69
+ case s.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
70
+ case s.stateChangeTypes.ItemClick:
71
+ return {
72
+ ...h,
73
+ isOpen: !0,
74
+ highlightedIndex: e.highlightedIndex
75
+ };
76
+ case s.stateChangeTypes.ToggleButtonBlur:
77
+ return {
78
+ ...h,
79
+ selectedItem: e.selectedItem
80
+ };
81
+ }
82
+ return h;
83
+ }
84
+ } : {}
85
+ }), T = u === "error", Z = () => {
86
+ P(), W();
87
+ }, _ = oe(
88
+ () => x(o[0]) || c,
89
+ [x, o, c]
90
+ );
91
+ return /* @__PURE__ */ d(I.Root, { open: X, children: [
92
+ /* @__PURE__ */ n(I.Anchor, { asChild: !0, onMouseDown: z, onFocus: A, onBlur: q, children: /* @__PURE__ */ d(
93
+ "div",
94
+ {
95
+ ref: B,
96
+ className: r.root,
97
+ "data-status": T ? "error" : u,
98
+ "data-disabled": f,
99
+ "data-empty": o.length === 0,
100
+ "data-test-id": b,
101
+ ...f ? {} : (
102
+ // eslint-disable-next-line react-hooks/refs
103
+ L({
104
+ "aria-label": "aria-label" in i ? i["aria-label"] : void 0,
105
+ "aria-describedby": m ? D : void 0,
106
+ ref: B
107
+ })
108
+ ),
109
+ children: [
110
+ m ? /* @__PURE__ */ n("span", { id: D, className: r.srOnly, children: m }) : null,
111
+ g ? /* @__PURE__ */ n("div", { className: r.selectedValue, children: /* @__PURE__ */ n(
112
+ ce,
113
+ {
114
+ items: G,
115
+ placeholder: c,
116
+ onDismiss: (e) => {
117
+ var t;
118
+ p(e), (t = C.current) == null || t.focus();
119
+ },
120
+ selectedCount: o.length
121
+ }
122
+ ) }) : /* @__PURE__ */ n("span", { className: r.selectedValue, children: _ }),
123
+ H,
124
+ S ? /* @__PURE__ */ n(le, { onClear: Z, children: S }) : null,
125
+ /* @__PURE__ */ d("div", { className: r.icons, children: [
126
+ /* @__PURE__ */ n(V, { size: 16, className: r.caret }),
127
+ /* @__PURE__ */ n(ge, { status: u, hasError: T, dataTestId: b })
128
+ ] })
129
+ ]
130
+ }
131
+ ) }),
132
+ /* @__PURE__ */ n(
133
+ ue,
134
+ {
135
+ align: R,
136
+ side: j,
137
+ highlightedIndex: Y,
138
+ getMenuProps: Q,
139
+ getItemProps: U,
140
+ selectedItemValues: o,
141
+ hasInteractedSinceOpening: J,
142
+ viewportCollisionPadding: E,
143
+ onEscapeKeyDown: F,
144
+ children: K
145
+ }
146
+ )
147
+ ] });
3
148
  };
149
+ O.displayName = "Select";
150
+ const Te = ee(O);
4
151
  export {
5
- t as default,
6
- o as root
152
+ Te as SelectBase
7
153
  };
8
154
  //# sourceMappingURL=fondue-components98.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components98.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"fondue-components98.js","sources":["../src/components/Select/components/SelectBase.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 { useSelect } from 'downshift';\nimport { forwardRef, useCallback, useMemo, useRef, useState, type ForwardedRef, type ReactNode } from 'react';\n\nimport { type CommonAriaProps } from '#/helpers/aria';\n\nimport { useBadgeItems } from '../hooks/useBadgeItems';\nimport { useFocusRing } from '../hooks/useFocusRing';\nimport { useSelectData } 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 { StatusIcons } from './StatusIcons';\n\nexport type SelectSharedProps = {\n /**\n * Children of the Select 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 select 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 select 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 select. It will not be respected if there are collisions with the viewport\n * @default \"bottom\"\n */\n side?: 'left' | 'right' | 'bottom' | 'top';\n /**\n * The data test id of the select component\n */\n 'data-test-id'?: string;\n /**\n * Id of the select component\n */\n id?: string;\n /**\n * The value of the select is shown as plain text (from the label prop) when set to true\n * Items child components are used if set to false\n * @default true\n */\n showStringValue?: boolean;\n /**\n * Define the minimum distance between the select menu and the viewport edge\n * @default 'compact'\n */\n viewportCollisionPadding?: SelectMenuViewportCollisionPadding;\n /**\n * Event handler called when the escape key is pressed\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n} & CommonAriaProps;\n\ntype SelectBaseProps = SelectSharedProps & {\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 select allows multiple selections\n */\n multiple: boolean;\n};\n\nconst SelectBaseInput = (\n {\n children,\n selectedItemValues,\n onItemSelect,\n onClear,\n placeholder = '',\n status = 'neutral',\n disabled,\n alignMenu = 'start',\n side = 'bottom',\n id,\n showStringValue = true,\n 'data-test-id': dataTestId = 'fondue-select',\n viewportCollisionPadding = 'compact',\n onEscapeKeyDown,\n multiple,\n ...props\n }: SelectBaseProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n): ReactNode => {\n const internalRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useCallback(\n (node: HTMLDivElement | null): void => {\n internalRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef],\n );\n const { inputSlots, menuSlots, items, clearButton, getItemByValue } = useSelectData(children);\n const { 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 getDisplayedValue = useCallback(\n (itemValue?: string): ReactNode => {\n const selectedItem = getItemByValue(itemValue);\n if (selectedItem) {\n return !showStringValue && selectedItem?.children ? selectedItem.children : selectedItem?.label;\n }\n return undefined;\n },\n [getItemByValue, showStringValue],\n );\n\n const { getToggleButtonProps, getMenuProps, getItemProps, reset, isOpen, highlightedIndex } = useSelect<{\n value: string;\n label: string;\n children?: ReactNode;\n }>({\n items,\n selectedItem: null,\n toggleButtonId: id,\n labelId: 'aria-labelledby' in props ? props['aria-labelledby'] : undefined,\n onIsOpenChange: () => {\n setHasInteractedSinceOpening(false);\n },\n onHighlightedIndexChange: () => {\n setHasInteractedSinceOpening(true);\n },\n onSelectedItemChange: ({ selectedItem }) => {\n onItemSelect(selectedItem?.value);\n },\n itemToString: (item) => (item ? item.label : ''),\n ...(multiple\n ? {\n stateReducer: (state, actionAndChanges) => {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true,\n highlightedIndex: state.highlightedIndex,\n };\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n return {\n ...changes,\n selectedItem: state.selectedItem,\n };\n }\n return changes;\n },\n }\n : {}),\n });\n\n const hasError = status === 'error';\n\n const handleClear = (): void => {\n onClear();\n reset();\n };\n\n const singleSelectValue = useMemo(\n (): ReactNode => getDisplayedValue(selectedItemValues[0]) || placeholder,\n [getDisplayedValue, selectedItemValues, placeholder],\n );\n\n return (\n <RadixPopover.Root open={isOpen}>\n <RadixPopover.Anchor asChild onMouseDown={onMouseDown} onFocus={onFocus} onBlur={onBlur}>\n <div\n ref={triggerRef}\n className={styles.root}\n data-status={hasError ? 'error' : status}\n data-disabled={disabled}\n data-empty={selectedItemValues.length === 0}\n data-test-id={dataTestId}\n {...(disabled\n ? {}\n : // eslint-disable-next-line react-hooks/refs\n getToggleButtonProps({\n 'aria-label': 'aria-label' in props ? props['aria-label'] : undefined,\n 'aria-describedby': selectionDescription ? selectionDescriptionId : undefined,\n ref: triggerRef,\n }))}\n >\n {selectionDescription ? (\n <span id={selectionDescriptionId} className={styles.srOnly}>\n {selectionDescription}\n </span>\n ) : null}\n {multiple ? (\n <div className={styles.selectedValue}>\n <CollapsibleBadges\n items={badgeItems}\n placeholder={placeholder}\n onDismiss={(value) => {\n onItemSelect(value);\n internalRef.current?.focus();\n }}\n selectedCount={selectedItemValues.length}\n />\n </div>\n ) : (\n <span className={styles.selectedValue}>{singleSelectValue}</span>\n )}\n {inputSlots}\n {clearButton ? <ClearButton onClear={handleClear}>{clearButton}</ClearButton> : null}\n <div className={styles.icons}>\n <IconCaretDown size={16} className={styles.caret} />\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 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};\nSelectBaseInput.displayName = 'Select';\n\nexport const SelectBase = forwardRef<HTMLDivElement, SelectBaseProps>(SelectBaseInput);\n"],"names":["SelectBaseInput","children","selectedItemValues","onItemSelect","onClear","placeholder","status","disabled","alignMenu","side","id","showStringValue","dataTestId","viewportCollisionPadding","onEscapeKeyDown","multiple","props","forwardedRef","internalRef","useRef","triggerRef","useCallback","node","inputSlots","menuSlots","items","clearButton","getItemByValue","useSelectData","onMouseDown","onFocus","onBlur","useFocusRing","selectionDescriptionId","selectionDescription","useSelectionDescription","badgeItems","useBadgeItems","hasInteractedSinceOpening","setHasInteractedSinceOpening","useState","getDisplayedValue","itemValue","selectedItem","getToggleButtonProps","getMenuProps","getItemProps","reset","isOpen","highlightedIndex","useSelect","item","state","actionAndChanges","changes","type","hasError","handleClear","singleSelectValue","useMemo","jsxs","RadixPopover","jsx","styles","CollapsibleBadges","value","_a","ClearButton","IconCaretDown","StatusIcons","SelectMenu","SelectBase","forwardRef"],"mappings":"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"}
@@ -1,8 +1,48 @@
1
- const r = (e) => {
2
- if (e)
3
- return `rgba(${e.red}, ${e.green}, ${e.blue}, ${e.alpha ?? 1})`;
1
+ const c = "_root_13ciu_7", e = "_selectedValue_13ciu_63", _ = "_input_13ciu_80", o = "_slot_13ciu_106", t = "_clear_13ciu_156", n = "_clearIcon_13ciu_163", u = "_icons_13ciu_167", i = "_caret_13ciu_173", r = "_iconSuccess_13ciu_201", s = "_iconError_13ciu_207", a = "_menu_13ciu_213", l = "_portal_13ciu_236", p = "_item_13ciu_252", g = "_checkmarkIcon_13ciu_281", m = "_itemValue_13ciu_287", d = "_group_13ciu_301", I = "_groupHeading_13ciu_312", b = "_badgesContainer_13ciu_324", k = "_badgeWrapper_13ciu_336", S = "_srOnly_13ciu_345", V = "_multiSelectInput_13ciu_357", y = {
2
+ root: c,
3
+ selectedValue: e,
4
+ input: _,
5
+ slot: o,
6
+ clear: t,
7
+ clearIcon: n,
8
+ icons: u,
9
+ caret: i,
10
+ iconSuccess: r,
11
+ iconError: s,
12
+ menu: a,
13
+ portal: l,
14
+ item: p,
15
+ checkmarkIcon: g,
16
+ itemValue: m,
17
+ group: d,
18
+ groupHeading: I,
19
+ badgesContainer: b,
20
+ badgeWrapper: k,
21
+ srOnly: S,
22
+ multiSelectInput: V
4
23
  };
5
24
  export {
6
- r as colorToCss
25
+ k as badgeWrapper,
26
+ b as badgesContainer,
27
+ i as caret,
28
+ g as checkmarkIcon,
29
+ t as clear,
30
+ n as clearIcon,
31
+ y as default,
32
+ d as group,
33
+ I as groupHeading,
34
+ s as iconError,
35
+ r as iconSuccess,
36
+ u as icons,
37
+ _ as input,
38
+ p as item,
39
+ m as itemValue,
40
+ a as menu,
41
+ V as multiSelectInput,
42
+ l as portal,
43
+ c as root,
44
+ e as selectedValue,
45
+ o as slot,
46
+ S as srOnly
7
47
  };
8
48
  //# sourceMappingURL=fondue-components99.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components99.js","sources":["../src/components/Badge/utils.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type RgbaColor } from './types';\n\nexport const DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1, name: '' };\n\n/**\n * Converts a color object to a CSS color string.\n * @param {RgbaColor} color - The color object to be converted.\n * @returns {string}\n * @example\n * colorToCss({ red: 255, green: 255, blue: 255, alpha: 1 }); // 'rgba(255, 255, 255, 1)'\n * @example\n * colorToCss({ red: 255, green: 87, blue: 51, alpha: 1 }); // 'rgba(255, 87, 51, 1)'\n * @example\n * colorToCss({ red: 0, green: 0, blue: 0, alpha: 0 }); // 'rgba(0, 0, 0, 0)'\n */\nexport const colorToCss = (color?: RgbaColor) => {\n if (!color) {\n return undefined;\n }\n return `rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha ?? 1})`;\n};\n"],"names":["colorToCss","color"],"mappings":"AAiBO,MAAMA,IAAa,CAACC,MAAsB;AAC7C,MAAKA;AAGL,WAAO,QAAQA,EAAM,GAAG,KAAKA,EAAM,KAAK,KAAKA,EAAM,IAAI,KAAKA,EAAM,SAAS,CAAC;AAChF;"}
1
+ {"version":3,"file":"fondue-components99.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -519,11 +519,11 @@ export declare const Dialog: {
519
519
  displayName: string;
520
520
  };
521
521
  Title: {
522
- ({ children, asChild }: DialogAnnouncementProps): JSX_2.Element;
522
+ ({ children, asChild, screenReaderOnly }: DialogAnnouncementProps): JSX_2.Element;
523
523
  displayName: string;
524
524
  };
525
525
  Description: {
526
- ({ children, asChild }: DialogAnnouncementProps): JSX_2.Element;
526
+ ({ children, asChild, screenReaderOnly }: DialogAnnouncementProps): JSX_2.Element;
527
527
  displayName: string;
528
528
  };
529
529
  Close: {
@@ -541,6 +541,11 @@ export declare const Dialog: {
541
541
  declare type DialogAnnouncementProps = {
542
542
  children?: ReactNode;
543
543
  asChild?: boolean;
544
+ /**
545
+ * Visually hide the element while keeping it accessible to screen readers
546
+ * @default false
547
+ */
548
+ screenReaderOnly?: boolean;
544
549
  };
545
550
 
546
551
  declare type DialogBodyProps = {
@@ -2226,9 +2231,16 @@ declare type TabsRootProps = {
2226
2231
  onActiveTabChange?: (value: string) => void;
2227
2232
  /**
2228
2233
  * Select the used variant
2229
- * default 'default'
2234
+ * @default 'default'
2230
2235
  */
2231
2236
  variant?: 'default' | 'pill';
2237
+ /**
2238
+ * Add a divider line below the tabs
2239
+ * Only available when variant is 'pill'
2240
+ * Useful for tabs placed inside Dialog content
2241
+ * @default false
2242
+ */
2243
+ withDivider?: boolean;
2232
2244
  };
2233
2245
 
2234
2246
  declare type TabsTabProps = {