@vibe/core 4.4.0-alpha-26200.0 → 4.4.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 (53) hide show
  1. package/dist/components/Dropdown/Dropdown.types.d.ts +0 -12
  2. package/dist/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.d.ts +1 -5
  3. package/dist/components/Dropdown/components/Trigger/DropdownInput.d.ts +2 -4
  4. package/dist/components/Dropdown/context/DropdownContext.types.d.ts +0 -6
  5. package/dist/components/Dropdown/hooks/useDropdownMultiCombobox.d.ts +1 -1
  6. package/dist/components/Modal/Modal/Modal.types.d.ts +6 -0
  7. package/dist/metadata/components.json +11 -18
  8. package/dist/metadata.json +11 -18
  9. package/dist/mocked_classnames/components/Dropdown/Dropdown.types.d.ts +0 -12
  10. package/dist/mocked_classnames/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.d.ts +1 -5
  11. package/dist/mocked_classnames/components/Dropdown/components/Trigger/DropdownInput.d.ts +2 -4
  12. package/dist/mocked_classnames/components/Dropdown/context/DropdownContext.types.d.ts +0 -6
  13. package/dist/mocked_classnames/components/Dropdown/hooks/useDropdownMultiCombobox.d.ts +1 -1
  14. package/dist/mocked_classnames/components/Modal/Modal/Modal.types.d.ts +6 -0
  15. package/dist/mocked_classnames/src/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.js +1 -1
  16. package/dist/mocked_classnames/src/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.js.map +1 -1
  17. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/DropdownInput.js +1 -1
  18. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/DropdownInput.js.map +1 -1
  19. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/MultiSelectTrigger.js +1 -1
  20. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/MultiSelectTrigger.js.map +1 -1
  21. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/SingleSelectTrigger.js +1 -1
  22. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/SingleSelectTrigger.js.map +1 -1
  23. package/dist/mocked_classnames/src/components/Dropdown/components/Trigger/Trigger.module.scss.js +1 -1
  24. package/dist/mocked_classnames/src/components/Dropdown/hooks/useDropdownCombobox.js +1 -1
  25. package/dist/mocked_classnames/src/components/Dropdown/hooks/useDropdownCombobox.js.map +1 -1
  26. package/dist/mocked_classnames/src/components/Dropdown/hooks/useDropdownMultiCombobox.js +1 -1
  27. package/dist/mocked_classnames/src/components/Dropdown/hooks/useDropdownMultiCombobox.js.map +1 -1
  28. package/dist/mocked_classnames/src/components/Dropdown/modes/DropdownMultiComboboxController.js +1 -1
  29. package/dist/mocked_classnames/src/components/Dropdown/modes/DropdownMultiComboboxController.js.map +1 -1
  30. package/dist/mocked_classnames/src/components/Modal/Modal/Modal.js +1 -1
  31. package/dist/mocked_classnames/src/components/Modal/Modal/Modal.js.map +1 -1
  32. package/dist/mocked_classnames/src/components/Modal/Modal/Modal.module.scss.js +1 -1
  33. package/dist/src/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.js +1 -1
  34. package/dist/src/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.js.map +1 -1
  35. package/dist/src/components/Dropdown/components/Trigger/DropdownInput.js +1 -1
  36. package/dist/src/components/Dropdown/components/Trigger/DropdownInput.js.map +1 -1
  37. package/dist/src/components/Dropdown/components/Trigger/MultiSelectTrigger.js +1 -1
  38. package/dist/src/components/Dropdown/components/Trigger/MultiSelectTrigger.js.map +1 -1
  39. package/dist/src/components/Dropdown/components/Trigger/SingleSelectTrigger.js +1 -1
  40. package/dist/src/components/Dropdown/components/Trigger/SingleSelectTrigger.js.map +1 -1
  41. package/dist/src/components/Dropdown/components/Trigger/Trigger.module.scss.js +1 -1
  42. package/dist/src/components/Dropdown/hooks/useDropdownCombobox.js +1 -1
  43. package/dist/src/components/Dropdown/hooks/useDropdownCombobox.js.map +1 -1
  44. package/dist/src/components/Dropdown/hooks/useDropdownMultiCombobox.js +1 -1
  45. package/dist/src/components/Dropdown/hooks/useDropdownMultiCombobox.js.map +1 -1
  46. package/dist/src/components/Dropdown/modes/DropdownMultiComboboxController.js +1 -1
  47. package/dist/src/components/Dropdown/modes/DropdownMultiComboboxController.js.map +1 -1
  48. package/dist/src/components/Modal/Modal/Modal.js +1 -1
  49. package/dist/src/components/Modal/Modal/Modal.js.map +1 -1
  50. package/dist/src/components/Modal/Modal/Modal.module.scss.js +1 -1
  51. package/package.json +2 -2
  52. package/dist/metadata/examples/DropdownMultiSelectA11y.md +0 -50
  53. package/dist/metadata/examples/DropdownSearchableSingleSelect.md +0 -379
@@ -15,18 +15,6 @@ interface MultiSelectSpecifics<Item extends BaseItemData<Record<string, unknown>
15
15
  * Callback fired when an option is removed in multi-select mode. Only available when multi is true.
16
16
  */
17
17
  onOptionRemove?: (option: Item) => void;
18
- /**
19
- * If true, selected items are shown as a comma-separated text summary inside the input instead of chips.
20
- * Satisfies WCAG 4.1.2 by exposing the combobox value to assistive technologies on focus.
21
- * Only applies when searchable=true.
22
- */
23
- textInput?: boolean;
24
- /**
25
- * If true, chips are always visible and support keyboard navigation: pressing Backspace or Left arrow
26
- * from the input moves focus to the last chip; Left/Right navigates between chips; Delete/Backspace
27
- * removes the focused chip. Only applies when searchable=true.
28
- */
29
- interactiveChips?: boolean;
30
18
  /**
31
19
  * The function to call to render the selected value on single select mode.
32
20
  */
@@ -7,10 +7,6 @@ type MultiSelectedValuesProps<Item> = {
7
7
  disabled?: boolean;
8
8
  readOnly?: boolean;
9
9
  minVisibleCount?: number;
10
- /** Extra props (tabIndex, onKeyDown, etc.) to spread on each visible chip container. */
11
- getChipContainerProps?: (item: Item, index: number) => Record<string, any>;
12
- /** Ref forwarded to the +N overflow Chips element, for external keyboard focus management. */
13
- badgeRef?: React.Ref<HTMLDivElement>;
14
10
  };
15
- declare function MultiSelectedValues<Item extends BaseItemData<Record<string, unknown>>>({ selectedItems, onRemove, renderInput, disabled, readOnly, minVisibleCount, getChipContainerProps, badgeRef }: MultiSelectedValuesProps<Item>): React.JSX.Element;
11
+ declare function MultiSelectedValues<Item extends BaseItemData<Record<string, unknown>>>({ selectedItems, onRemove, renderInput, disabled, readOnly, minVisibleCount }: MultiSelectedValuesProps<Item>): React.JSX.Element;
16
12
  export default MultiSelectedValues;
@@ -1,8 +1,6 @@
1
- import React, { type RefObject } from "react";
2
- declare const DropdownInput: ({ inputSize, fullWidth, onKeyDown: externalKeyDown, inputRef: externalInputRef }: {
1
+ import React from "react";
2
+ declare const DropdownInput: ({ inputSize, fullWidth }: {
3
3
  inputSize?: "small" | "medium" | "large";
4
4
  fullWidth?: boolean;
5
- onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
6
- inputRef?: RefObject<HTMLInputElement>;
7
5
  }) => React.JSX.Element;
8
6
  export default DropdownInput;
@@ -29,12 +29,6 @@ export interface DropdownContextProps<Item extends BaseItemData<Record<string, u
29
29
  contextOnOptionRemove?: (option: Item) => void;
30
30
  addSelectedItem?: (item: Item) => void;
31
31
  removeSelectedItem?: (item: Item) => void;
32
- getSelectedItemProps?: (options: {
33
- selectedItem: any;
34
- index: number;
35
- }) => Record<string, any>;
36
32
  isFocused?: boolean;
37
- textInput?: boolean;
38
- interactiveChips?: boolean;
39
33
  }
40
34
  export {};
@@ -1,6 +1,6 @@
1
1
  import { type DropdownGroupOption } from "../Dropdown.types";
2
2
  import { type BaseItemData } from "../../BaseItem";
3
- declare function useDropdownMultiCombobox<T extends BaseItemData<Record<string, unknown>>>(options: DropdownGroupOption<T>, selectedItems: T[], setSelectedItems: (items: T[]) => void, isMenuOpen: boolean, autoFocus?: boolean, defaultValue?: T[], value?: T[], inputValueProp?: string, onChange?: (options: T[]) => void, onInputChange?: (value: string | null) => void, onMenuOpen?: () => void, onMenuClose?: () => void, onOptionSelect?: (option: T) => void, filterOption?: (option: T, inputValue: string) => boolean, showSelectedOptions?: boolean, id?: string, onOptionRemove?: (option: T) => void, textInput?: boolean, interactiveChips?: boolean): {
3
+ declare function useDropdownMultiCombobox<T extends BaseItemData<Record<string, unknown>>>(options: DropdownGroupOption<T>, selectedItems: T[], setSelectedItems: (items: T[]) => void, isMenuOpen: boolean, autoFocus?: boolean, defaultValue?: T[], value?: T[], inputValueProp?: string, onChange?: (options: T[]) => void, onInputChange?: (value: string | null) => void, onMenuOpen?: () => void, onMenuClose?: () => void, onOptionSelect?: (option: T) => void, filterOption?: (option: T, inputValue: string) => boolean, showSelectedOptions?: boolean, id?: string): {
4
4
  isOpen: boolean;
5
5
  inputValue: string;
6
6
  highlightedIndex: number;
@@ -103,6 +103,12 @@ export interface ModalProps extends VibeComponentProps {
103
103
  * The z-index to be used for the modal and overlay.
104
104
  */
105
105
  zIndex?: number;
106
+ /**
107
+ * When true, the modal uses `position: fixed` for centering, anchoring it to the viewport
108
+ * rather than its portal container. Use this when the modal is portaled into `document.body`
109
+ * and the page has `direction: rtl` — the default `position: relative` centering breaks under RTL.
110
+ */
111
+ useFixedPosition?: boolean;
106
112
  /**
107
113
  * If provided, overrides the automatically generated aria-labelledby, that is assigned when used with ModalHeader.
108
114
  */
@@ -6320,24 +6320,6 @@
6320
6320
  "name": "(option: Item) => void"
6321
6321
  }
6322
6322
  },
6323
- "textInput": {
6324
- "defaultValue": null,
6325
- "description": "If true, selected items are shown as a comma-separated text summary inside the input instead of chips.\nSatisfies WCAG 4.1.2 by exposing the combobox value to assistive technologies on focus.\nOnly applies when searchable=true.",
6326
- "name": "textInput",
6327
- "required": false,
6328
- "type": {
6329
- "name": "boolean"
6330
- }
6331
- },
6332
- "interactiveChips": {
6333
- "defaultValue": null,
6334
- "description": "If true, chips are always visible and support keyboard navigation: pressing Backspace or Left arrow\nfrom the input moves focus to the last chip; Left/Right navigates between chips; Delete/Backspace\nremoves the focused chip. Only applies when searchable=true.",
6335
- "name": "interactiveChips",
6336
- "required": false,
6337
- "type": {
6338
- "name": "boolean"
6339
- }
6340
- },
6341
6323
  "valueRenderer": {
6342
6324
  "defaultValue": null,
6343
6325
  "description": "The function to call to render the selected value on single select mode.",
@@ -13042,6 +13024,17 @@
13042
13024
  "name": "number"
13043
13025
  }
13044
13026
  },
13027
+ "useFixedPosition": {
13028
+ "defaultValue": {
13029
+ "value": "false"
13030
+ },
13031
+ "description": "When true, the modal uses `position: fixed` for centering, anchoring it to the viewport\nrather than its portal container. Use this when the modal is portaled into `document.body`\nand the page has `direction: rtl` — the default `position: relative` centering breaks under RTL.",
13032
+ "name": "useFixedPosition",
13033
+ "required": false,
13034
+ "type": {
13035
+ "name": "boolean"
13036
+ }
13037
+ },
13045
13038
  "aria-labelledby": {
13046
13039
  "defaultValue": null,
13047
13040
  "description": "If provided, overrides the automatically generated aria-labelledby, that is assigned when used with ModalHeader.",
@@ -6320,24 +6320,6 @@
6320
6320
  "name": "(option: Item) => void"
6321
6321
  }
6322
6322
  },
6323
- "textInput": {
6324
- "defaultValue": null,
6325
- "description": "If true, selected items are shown as a comma-separated text summary inside the input instead of chips.\nSatisfies WCAG 4.1.2 by exposing the combobox value to assistive technologies on focus.\nOnly applies when searchable=true.",
6326
- "name": "textInput",
6327
- "required": false,
6328
- "type": {
6329
- "name": "boolean"
6330
- }
6331
- },
6332
- "interactiveChips": {
6333
- "defaultValue": null,
6334
- "description": "If true, chips are always visible and support keyboard navigation: pressing Backspace or Left arrow\nfrom the input moves focus to the last chip; Left/Right navigates between chips; Delete/Backspace\nremoves the focused chip. Only applies when searchable=true.",
6335
- "name": "interactiveChips",
6336
- "required": false,
6337
- "type": {
6338
- "name": "boolean"
6339
- }
6340
- },
6341
6323
  "valueRenderer": {
6342
6324
  "defaultValue": null,
6343
6325
  "description": "The function to call to render the selected value on single select mode.",
@@ -13042,6 +13024,17 @@
13042
13024
  "name": "number"
13043
13025
  }
13044
13026
  },
13027
+ "useFixedPosition": {
13028
+ "defaultValue": {
13029
+ "value": "false"
13030
+ },
13031
+ "description": "When true, the modal uses `position: fixed` for centering, anchoring it to the viewport\nrather than its portal container. Use this when the modal is portaled into `document.body`\nand the page has `direction: rtl` — the default `position: relative` centering breaks under RTL.",
13032
+ "name": "useFixedPosition",
13033
+ "required": false,
13034
+ "type": {
13035
+ "name": "boolean"
13036
+ }
13037
+ },
13045
13038
  "aria-labelledby": {
13046
13039
  "defaultValue": null,
13047
13040
  "description": "If provided, overrides the automatically generated aria-labelledby, that is assigned when used with ModalHeader.",
@@ -15,18 +15,6 @@ interface MultiSelectSpecifics<Item extends BaseItemData<Record<string, unknown>
15
15
  * Callback fired when an option is removed in multi-select mode. Only available when multi is true.
16
16
  */
17
17
  onOptionRemove?: (option: Item) => void;
18
- /**
19
- * If true, selected items are shown as a comma-separated text summary inside the input instead of chips.
20
- * Satisfies WCAG 4.1.2 by exposing the combobox value to assistive technologies on focus.
21
- * Only applies when searchable=true.
22
- */
23
- textInput?: boolean;
24
- /**
25
- * If true, chips are always visible and support keyboard navigation: pressing Backspace or Left arrow
26
- * from the input moves focus to the last chip; Left/Right navigates between chips; Delete/Backspace
27
- * removes the focused chip. Only applies when searchable=true.
28
- */
29
- interactiveChips?: boolean;
30
18
  /**
31
19
  * The function to call to render the selected value on single select mode.
32
20
  */
@@ -7,10 +7,6 @@ type MultiSelectedValuesProps<Item> = {
7
7
  disabled?: boolean;
8
8
  readOnly?: boolean;
9
9
  minVisibleCount?: number;
10
- /** Extra props (tabIndex, onKeyDown, etc.) to spread on each visible chip container. */
11
- getChipContainerProps?: (item: Item, index: number) => Record<string, any>;
12
- /** Ref forwarded to the +N overflow Chips element, for external keyboard focus management. */
13
- badgeRef?: React.Ref<HTMLDivElement>;
14
10
  };
15
- declare function MultiSelectedValues<Item extends BaseItemData<Record<string, unknown>>>({ selectedItems, onRemove, renderInput, disabled, readOnly, minVisibleCount, getChipContainerProps, badgeRef }: MultiSelectedValuesProps<Item>): React.JSX.Element;
11
+ declare function MultiSelectedValues<Item extends BaseItemData<Record<string, unknown>>>({ selectedItems, onRemove, renderInput, disabled, readOnly, minVisibleCount }: MultiSelectedValuesProps<Item>): React.JSX.Element;
16
12
  export default MultiSelectedValues;
@@ -1,8 +1,6 @@
1
- import React, { type RefObject } from "react";
2
- declare const DropdownInput: ({ inputSize, fullWidth, onKeyDown: externalKeyDown, inputRef: externalInputRef }: {
1
+ import React from "react";
2
+ declare const DropdownInput: ({ inputSize, fullWidth }: {
3
3
  inputSize?: "small" | "medium" | "large";
4
4
  fullWidth?: boolean;
5
- onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
6
- inputRef?: RefObject<HTMLInputElement>;
7
5
  }) => React.JSX.Element;
8
6
  export default DropdownInput;
@@ -29,12 +29,6 @@ export interface DropdownContextProps<Item extends BaseItemData<Record<string, u
29
29
  contextOnOptionRemove?: (option: Item) => void;
30
30
  addSelectedItem?: (item: Item) => void;
31
31
  removeSelectedItem?: (item: Item) => void;
32
- getSelectedItemProps?: (options: {
33
- selectedItem: any;
34
- index: number;
35
- }) => Record<string, any>;
36
32
  isFocused?: boolean;
37
- textInput?: boolean;
38
- interactiveChips?: boolean;
39
33
  }
40
34
  export {};
@@ -1,6 +1,6 @@
1
1
  import { type DropdownGroupOption } from "../Dropdown.types";
2
2
  import { type BaseItemData } from "../../BaseItem";
3
- declare function useDropdownMultiCombobox<T extends BaseItemData<Record<string, unknown>>>(options: DropdownGroupOption<T>, selectedItems: T[], setSelectedItems: (items: T[]) => void, isMenuOpen: boolean, autoFocus?: boolean, defaultValue?: T[], value?: T[], inputValueProp?: string, onChange?: (options: T[]) => void, onInputChange?: (value: string | null) => void, onMenuOpen?: () => void, onMenuClose?: () => void, onOptionSelect?: (option: T) => void, filterOption?: (option: T, inputValue: string) => boolean, showSelectedOptions?: boolean, id?: string, onOptionRemove?: (option: T) => void, textInput?: boolean, interactiveChips?: boolean): {
3
+ declare function useDropdownMultiCombobox<T extends BaseItemData<Record<string, unknown>>>(options: DropdownGroupOption<T>, selectedItems: T[], setSelectedItems: (items: T[]) => void, isMenuOpen: boolean, autoFocus?: boolean, defaultValue?: T[], value?: T[], inputValueProp?: string, onChange?: (options: T[]) => void, onInputChange?: (value: string | null) => void, onMenuOpen?: () => void, onMenuClose?: () => void, onOptionSelect?: (option: T) => void, filterOption?: (option: T, inputValue: string) => boolean, showSelectedOptions?: boolean, id?: string): {
4
4
  isOpen: boolean;
5
5
  inputValue: string;
6
6
  highlightedIndex: number;
@@ -103,6 +103,12 @@ export interface ModalProps extends VibeComponentProps {
103
103
  * The z-index to be used for the modal and overlay.
104
104
  */
105
105
  zIndex?: number;
106
+ /**
107
+ * When true, the modal uses `position: fixed` for centering, anchoring it to the viewport
108
+ * rather than its portal container. Use this when the modal is portaled into `document.body`
109
+ * and the page has `direction: rtl` — the default `position: relative` centering breaks under RTL.
110
+ */
111
+ useFixedPosition?: boolean;
106
112
  /**
107
113
  * If provided, overrides the automatically generated aria-labelledby, that is assigned when used with ModalHeader.
108
114
  */
@@ -1,2 +1,2 @@
1
- import{defineProperty as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as n}from"../../../../../_virtual/_tslib.js";import t,{useRef as r,useMemo as o,createRef as i}from"react";import a from"../../../Chips/Chips.js";import{Flex as l}from"@vibe/layout/mockedClassNames";import{DialogContentContainer as s,Dialog as c}from"@vibe/dialog/mockedClassNames";import d from"../../../../hooks/useItemsOverflow/useItemsOverflow.js";import u from"./MultiSelectedValues.module.scss.js";import m from"classnames";import p from"../Trigger/DropdownChip.js";function f(f){var h=f.selectedItems,g=f.onRemove,v=f.renderInput,C=f.disabled,b=f.readOnly,w=f.minVisibleCount,y=void 0===w?0:w,E=f.getChipContainerProps,k=f.badgeRef,D=r(null),N=r(null),O=o((function(){return h.map((function(){return i()}))}),[h]),j=d({containerRef:D,itemRefs:O,gap:4,deductedSpaceRef:N,deductedWidth:v?48:0,minVisibleCount:1===h.length?1:y}),W=j.visibleCount,I=j.hasMeasured,P=o((function(){var e=h.length>W?h.slice(W):[];return{hiddenItems:e,hiddenCount:e.length}}),[h,W]),R=P.hiddenItems,M=P.hiddenCount,x=o((function(){return function(){return t.createElement(s,null,t.createElement(l,{direction:"column",gap:"xs",align:"start",className:u.hiddenChipsDialog},R.map((function(e){return t.createElement(p,{key:"dropdown-chip-dialog-".concat(e.value),item:e,onDelete:function(){return g(e)},className:u.dialogChip,disabled:C,readOnly:b})}))))}}),[R,g,C,b]),T=o((function(){return h.map((function(r,o){var i=W>o,a=i&&E?E(r,o):{},l=a.ref,s=n(a,["ref"]);return t.createElement("div",Object.assign({key:"dropdown-chip-visible-".concat(r.value),ref:function(e){O[o].current=e,"function"==typeof l&&l(e)},className:m(e(e({},u.chipWrapperWithOverflow,void 0!==y),u.hiddenChip,!i)),"aria-hidden":!i,"data-testid":"dropdown-chip-".concat(r.value)},s),t.createElement(p,{item:r,onDelete:function(){return g(r)},disabled:C,readOnly:b,className:u.visibleChip}))}))}),[h,W,g,O,C,b,y,E]);return(null==h?void 0:h.length)?t.createElement(l,{align:"center",wrap:!1,gap:"xs",ref:D,className:m(u.containerWrapper,e(e({},u.singleChip,1===h.length),u.measuring,!I))},T,t.createElement(l,{gap:"xs",className:u.inputAndCounterWrapper},M>0&&t.createElement("div",{ref:N,onClick:function(e){e.stopPropagation()},onKeyDown:function(e){var n,t;e.stopPropagation(),"ArrowLeft"===e.key&&(e.preventDefault(),null===(t=null===(n=O[W-1])||void 0===n?void 0:n.current)||void 0===t||t.focus())},onMouseDown:function(e){e.stopPropagation()}},t.createElement(c,{content:x,showTrigger:["click","enter"],hideTrigger:["clickoutside","enter"],position:"bottom",moveBy:{main:4},hideWhenReferenceHidden:!0,addKeyboardHideShowTriggersByDefault:!0},t.createElement(a,{ref:k,label:"+ ".concat(M),readOnly:!0,noMargin:!0,"aria-label":"+".concat(M,". ").concat(h.length-M," items are visible out of ").concat(h.length),"data-testid":"dropdown-overflow-counter",className:u.overflowCounter,onClick:function(){},onMouseDown:function(e){e.preventDefault()}}))),v&&t.createElement("div",{className:u.inputWrapper},v()))):null}export{f as default};
1
+ import{defineProperty as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import n,{useRef as t,useMemo as o,createRef as r}from"react";import i from"../../../Chips/Chips.js";import{Flex as a}from"@vibe/layout/mockedClassNames";import{DialogContentContainer as l,Dialog as s}from"@vibe/dialog/mockedClassNames";import c from"../../../../hooks/useItemsOverflow/useItemsOverflow.js";import d from"./MultiSelectedValues.module.scss.js";import u from"classnames";import m from"../Trigger/DropdownChip.js";function p(p){var f=p.selectedItems,h=p.onRemove,g=p.renderInput,v=p.disabled,C=p.readOnly,b=p.minVisibleCount,w=void 0===b?0:b,y=t(null),E=t(null),N=o((function(){return f.map((function(){return r()}))}),[f]),k=c({containerRef:y,itemRefs:N,gap:4,deductedSpaceRef:E,deductedWidth:g?48:0,minVisibleCount:1===f.length?1:w}),D=k.visibleCount,O=k.hasMeasured,W=o((function(){var e=f.length>D?f.slice(D):[];return{hiddenItems:e,hiddenCount:e.length}}),[f,D]),I=W.hiddenItems,j=W.hiddenCount,M=o((function(){return function(){return n.createElement(l,null,n.createElement(a,{direction:"column",gap:"xs",align:"start",className:d.hiddenChipsDialog},I.map((function(e){return n.createElement(m,{key:"dropdown-chip-dialog-".concat(e.value),item:e,onDelete:function(){return h(e)},className:d.dialogChip,disabled:v,readOnly:C})}))))}}),[I,h,v,C]),P=o((function(){return f.map((function(t,o){var r=D>o;return n.createElement("div",{key:"dropdown-chip-visible-".concat(t.value),ref:N[o],className:u(e(e({},d.chipWrapperWithOverflow,void 0!==w),d.hiddenChip,!r)),"aria-hidden":!r,"data-testid":"dropdown-chip-".concat(t.value)},n.createElement(m,{item:t,onDelete:function(){return h(t)},disabled:v,readOnly:C,className:d.visibleChip}))}))}),[f,D,h,N,v,C,w]);return(null==f?void 0:f.length)?n.createElement(a,{align:"center",wrap:!1,gap:"xs",ref:y,className:u(d.containerWrapper,e(e({},d.singleChip,1===f.length),d.measuring,!O))},P,n.createElement(a,{gap:"xs",className:d.inputAndCounterWrapper},j>0&&n.createElement("div",{ref:E,onClick:function(e){e.stopPropagation()},onKeyDown:function(e){e.stopPropagation()},onMouseDown:function(e){e.stopPropagation()}},n.createElement(s,{content:M,showTrigger:["click","enter"],hideTrigger:["clickoutside","enter"],position:"bottom",moveBy:{main:4},hideWhenReferenceHidden:!0,addKeyboardHideShowTriggersByDefault:!0},n.createElement(i,{label:"+ ".concat(j),readOnly:!0,noMargin:!0,"aria-label":"+".concat(j,". ").concat(f.length-j," items are visible out of ").concat(f.length),"data-testid":"dropdown-overflow-counter",className:d.overflowCounter,onClick:function(){},onMouseDown:function(e){e.preventDefault()}}))),g&&n.createElement("div",{className:d.inputWrapper},g()))):null}export{p as default};
2
2
  //# sourceMappingURL=MultiSelectedValues.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectedValues.js","sources":["../../../../../../../src/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.tsx"],"sourcesContent":["import React, { useRef, useMemo, createRef } from \"react\";\nimport { type BaseItemData } from \"../../../BaseItem\";\nimport { Chips } from \"../../../Chips\";\nimport { Flex } from \"@vibe/layout\";\nimport { DialogContentContainer, Dialog } from \"@vibe/dialog\";\nimport useItemsOverflow from \"../../../../hooks/useItemsOverflow/useItemsOverflow\";\nimport styles from \"./MultiSelectedValues.module.scss\";\nimport cx from \"classnames\";\nimport DropdownChip from \"../Trigger/DropdownChip\";\n\nconst INPUT_DEDUCTED_WIDTH = 48;\n\ntype MultiSelectedValuesProps<Item> = {\n selectedItems: Item[];\n onRemove: (item: Item) => void;\n renderInput?: () => React.ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n minVisibleCount?: number;\n /** Extra props (tabIndex, onKeyDown, etc.) to spread on each visible chip container. */\n getChipContainerProps?: (item: Item, index: number) => Record<string, any>;\n /** Ref forwarded to the +N overflow Chips element, for external keyboard focus management. */\n badgeRef?: React.Ref<HTMLDivElement>;\n};\n\nfunction MultiSelectedValues<Item extends BaseItemData<Record<string, unknown>>>({\n selectedItems,\n onRemove,\n renderInput,\n disabled,\n readOnly,\n minVisibleCount = 0,\n getChipContainerProps,\n badgeRef\n}: MultiSelectedValuesProps<Item>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const deductedSpaceRef = useRef<HTMLDivElement>(null);\n\n const itemRefs = useMemo(() => selectedItems.map(() => createRef<HTMLDivElement>()), [selectedItems]);\n\n const { visibleCount, hasMeasured } = useItemsOverflow({\n containerRef,\n itemRefs,\n gap: 4,\n deductedSpaceRef,\n deductedWidth: renderInput ? INPUT_DEDUCTED_WIDTH : 0,\n minVisibleCount: selectedItems.length === 1 ? 1 : minVisibleCount\n });\n\n const { hiddenItems, hiddenCount } = useMemo(() => {\n const hiddenItems = selectedItems.length > visibleCount ? selectedItems.slice(visibleCount) : [];\n return {\n hiddenItems,\n hiddenCount: hiddenItems.length\n };\n }, [selectedItems, visibleCount]);\n\n const dialogContent = useMemo(() => {\n return () => (\n <DialogContentContainer>\n <Flex direction=\"column\" gap=\"xs\" align=\"start\" className={styles.hiddenChipsDialog}>\n {hiddenItems.map(item => {\n return (\n <DropdownChip\n key={`dropdown-chip-dialog-${item.value}`}\n item={item}\n onDelete={() => onRemove(item)}\n className={styles.dialogChip}\n disabled={disabled}\n readOnly={readOnly}\n />\n );\n })}\n </Flex>\n </DialogContentContainer>\n );\n }, [hiddenItems, onRemove, disabled, readOnly]);\n\n const chipElements = useMemo(() => {\n return selectedItems.map((item, index) => {\n const isVisible = index < visibleCount;\n const extraProps = isVisible && getChipContainerProps ? getChipContainerProps(item, index) : {};\n const { ref: extraRef, ...extraAttrs } = extraProps;\n\n return (\n <div\n key={`dropdown-chip-visible-${item.value}`}\n ref={el => {\n (itemRefs[index] as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof extraRef === \"function\") extraRef(el);\n }}\n className={cx({\n [styles.chipWrapperWithOverflow]: minVisibleCount !== undefined,\n [styles.hiddenChip]: !isVisible\n })}\n aria-hidden={!isVisible}\n data-testid={`dropdown-chip-${item.value}`}\n {...extraAttrs}\n >\n <DropdownChip\n item={item}\n onDelete={() => onRemove(item)}\n disabled={disabled}\n readOnly={readOnly}\n className={styles.visibleChip}\n />\n </div>\n );\n });\n }, [selectedItems, visibleCount, onRemove, itemRefs, disabled, readOnly, minVisibleCount, getChipContainerProps]);\n\n if (!selectedItems?.length) return null;\n\n const isSingleChip = selectedItems.length === 1;\n\n return (\n <Flex\n align=\"center\"\n wrap={false}\n gap=\"xs\"\n ref={containerRef}\n className={cx(styles.containerWrapper, {\n [styles.singleChip]: isSingleChip,\n [styles.measuring]: !hasMeasured\n })}\n >\n {chipElements}\n\n <Flex gap=\"xs\" className={styles.inputAndCounterWrapper}>\n {hiddenCount > 0 && (\n <div\n ref={deductedSpaceRef}\n onClick={e => {\n e.stopPropagation();\n }}\n onKeyDown={e => {\n e.stopPropagation();\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n (itemRefs[visibleCount - 1] as React.MutableRefObject<HTMLDivElement | null>)?.current?.focus();\n }\n }}\n onMouseDown={e => {\n e.stopPropagation();\n }}\n >\n <Dialog\n content={dialogContent}\n showTrigger={[\"click\", \"enter\"]}\n hideTrigger={[\"clickoutside\", \"enter\"]}\n position=\"bottom\"\n moveBy={{ main: 4 }}\n hideWhenReferenceHidden\n addKeyboardHideShowTriggersByDefault\n >\n <Chips\n ref={badgeRef}\n label={`+ ${hiddenCount}`}\n readOnly\n noMargin\n aria-label={`+${hiddenCount}. ${selectedItems.length - hiddenCount} items are visible out of ${\n selectedItems.length\n }`}\n data-testid=\"dropdown-overflow-counter\"\n className={styles.overflowCounter}\n onClick={() => {}}\n onMouseDown={e => {\n e.preventDefault();\n }}\n />\n </Dialog>\n </div>\n )}\n {renderInput && <div className={styles.inputWrapper}>{renderInput()}</div>}\n </Flex>\n </Flex>\n );\n}\n\nexport default MultiSelectedValues;\n"],"names":["MultiSelectedValues","_ref","selectedItems","onRemove","renderInput","disabled","readOnly","_ref$minVisibleCount","minVisibleCount","getChipContainerProps","badgeRef","containerRef","useRef","deductedSpaceRef","itemRefs","useMemo","map","createRef","_useItemsOverflow","useItemsOverflow","gap","deductedWidth","length","visibleCount","hasMeasured","_useMemo","hiddenItems","slice","hiddenCount","dialogContent","React","DialogContentContainer","createElement","Flex","direction","align","className","styles","hiddenChipsDialog","item","DropdownChip","key","concat","value","onDelete","dialogChip","chipElements","index","isVisible","extraProps","extraRef","ref","extraAttrs","__rest","Object","assign","el","current","cx","_defineProperty","chipWrapperWithOverflow","undefined","hiddenChip","visibleChip","wrap","containerWrapper","singleChip","measuring","inputAndCounterWrapper","onClick","e","stopPropagation","onKeyDown","preventDefault","_b","_a","focus","onMouseDown","Dialog","content","showTrigger","hideTrigger","position","moveBy","main","hideWhenReferenceHidden","addKeyboardHideShowTriggersByDefault","Chips","label","noMargin","overflowCounter","inputWrapper"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelectedValues.js","sources":["../../../../../../../src/components/Dropdown/components/MultiSelectedValues/MultiSelectedValues.tsx"],"sourcesContent":["import React, { useRef, useMemo, createRef } from \"react\";\nimport { type BaseItemData } from \"../../../BaseItem\";\nimport { Chips } from \"../../../Chips\";\nimport { Flex } from \"@vibe/layout\";\nimport { DialogContentContainer, Dialog } from \"@vibe/dialog\";\nimport useItemsOverflow from \"../../../../hooks/useItemsOverflow/useItemsOverflow\";\nimport styles from \"./MultiSelectedValues.module.scss\";\nimport cx from \"classnames\";\nimport DropdownChip from \"../Trigger/DropdownChip\";\n\nconst INPUT_DEDUCTED_WIDTH = 48;\n\ntype MultiSelectedValuesProps<Item> = {\n selectedItems: Item[];\n onRemove: (item: Item) => void;\n renderInput?: () => React.ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n minVisibleCount?: number;\n};\n\nfunction MultiSelectedValues<Item extends BaseItemData<Record<string, unknown>>>({\n selectedItems,\n onRemove,\n renderInput,\n disabled,\n readOnly,\n minVisibleCount = 0\n}: MultiSelectedValuesProps<Item>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const deductedSpaceRef = useRef<HTMLDivElement>(null);\n\n const itemRefs = useMemo(() => selectedItems.map(() => createRef<HTMLDivElement>()), [selectedItems]);\n\n const { visibleCount, hasMeasured } = useItemsOverflow({\n containerRef,\n itemRefs,\n gap: 4,\n deductedSpaceRef,\n deductedWidth: renderInput ? INPUT_DEDUCTED_WIDTH : 0,\n minVisibleCount: selectedItems.length === 1 ? 1 : minVisibleCount\n });\n\n const { hiddenItems, hiddenCount } = useMemo(() => {\n const hiddenItems = selectedItems.length > visibleCount ? selectedItems.slice(visibleCount) : [];\n return {\n hiddenItems,\n hiddenCount: hiddenItems.length\n };\n }, [selectedItems, visibleCount]);\n\n const dialogContent = useMemo(() => {\n return () => (\n <DialogContentContainer>\n <Flex direction=\"column\" gap=\"xs\" align=\"start\" className={styles.hiddenChipsDialog}>\n {hiddenItems.map(item => {\n return (\n <DropdownChip\n key={`dropdown-chip-dialog-${item.value}`}\n item={item}\n onDelete={() => onRemove(item)}\n className={styles.dialogChip}\n disabled={disabled}\n readOnly={readOnly}\n />\n );\n })}\n </Flex>\n </DialogContentContainer>\n );\n }, [hiddenItems, onRemove, disabled, readOnly]);\n\n const chipElements = useMemo(() => {\n return selectedItems.map((item, index) => {\n const isVisible = index < visibleCount;\n\n return (\n <div\n key={`dropdown-chip-visible-${item.value}`}\n ref={itemRefs[index]}\n className={cx({\n [styles.chipWrapperWithOverflow]: minVisibleCount !== undefined,\n [styles.hiddenChip]: !isVisible\n })}\n aria-hidden={!isVisible}\n data-testid={`dropdown-chip-${item.value}`}\n >\n <DropdownChip\n item={item}\n onDelete={() => onRemove(item)}\n disabled={disabled}\n readOnly={readOnly}\n className={styles.visibleChip}\n />\n </div>\n );\n });\n }, [selectedItems, visibleCount, onRemove, itemRefs, disabled, readOnly, minVisibleCount]);\n\n if (!selectedItems?.length) return null;\n\n const isSingleChip = selectedItems.length === 1;\n\n return (\n <Flex\n align=\"center\"\n wrap={false}\n gap=\"xs\"\n ref={containerRef}\n className={cx(styles.containerWrapper, {\n [styles.singleChip]: isSingleChip,\n [styles.measuring]: !hasMeasured\n })}\n >\n {chipElements}\n\n <Flex gap=\"xs\" className={styles.inputAndCounterWrapper}>\n {hiddenCount > 0 && (\n <div\n ref={deductedSpaceRef}\n onClick={e => {\n e.stopPropagation();\n }}\n onKeyDown={e => {\n e.stopPropagation();\n }}\n onMouseDown={e => {\n e.stopPropagation();\n }}\n >\n <Dialog\n content={dialogContent}\n showTrigger={[\"click\", \"enter\"]}\n hideTrigger={[\"clickoutside\", \"enter\"]}\n position=\"bottom\"\n moveBy={{ main: 4 }}\n hideWhenReferenceHidden\n addKeyboardHideShowTriggersByDefault\n >\n <Chips\n label={`+ ${hiddenCount}`}\n readOnly\n noMargin\n aria-label={`+${hiddenCount}. ${selectedItems.length - hiddenCount} items are visible out of ${\n selectedItems.length\n }`}\n data-testid=\"dropdown-overflow-counter\"\n className={styles.overflowCounter}\n onClick={() => {}}\n onMouseDown={e => {\n e.preventDefault();\n }}\n />\n </Dialog>\n </div>\n )}\n {renderInput && <div className={styles.inputWrapper}>{renderInput()}</div>}\n </Flex>\n </Flex>\n );\n}\n\nexport default MultiSelectedValues;\n"],"names":["MultiSelectedValues","_ref","selectedItems","onRemove","renderInput","disabled","readOnly","_ref$minVisibleCount","minVisibleCount","containerRef","useRef","deductedSpaceRef","itemRefs","useMemo","map","createRef","_useItemsOverflow","useItemsOverflow","gap","deductedWidth","length","visibleCount","hasMeasured","_useMemo","hiddenItems","slice","hiddenCount","dialogContent","React","DialogContentContainer","createElement","Flex","direction","align","className","styles","hiddenChipsDialog","item","DropdownChip","key","concat","value","onDelete","dialogChip","chipElements","index","isVisible","ref","cx","_defineProperty","chipWrapperWithOverflow","undefined","hiddenChip","visibleChip","wrap","containerWrapper","singleChip","measuring","inputAndCounterWrapper","onClick","e","stopPropagation","onKeyDown","onMouseDown","Dialog","content","showTrigger","hideTrigger","position","moveBy","main","hideWhenReferenceHidden","addKeyboardHideShowTriggersByDefault","Chips","label","noMargin","overflowCounter","preventDefault","inputWrapper"],"mappings":"igBAqBA,SAASA,EAAmBC,GAOK,IAN/BC,EAAaD,EAAbC,cACAC,EAAQF,EAARE,SACAC,EAAWH,EAAXG,YACAC,EAAQJ,EAARI,SACAC,EAAQL,EAARK,SAAQC,EAAAN,EACRO,gBAAAA,OAAkB,IAAHD,EAAG,EAACA,EAEbE,EAAeC,EAAuB,MACtCC,EAAmBD,EAAuB,MAE1CE,EAAWC,GAAQ,WAAA,OAAMX,EAAcY,KAAI,WAAA,OAAMC,SAA8B,CAACb,IAEtFc,EAAsCC,EAAiB,CACrDR,aAAAA,EACAG,SAAAA,EACAM,IAAK,EACLP,iBAAAA,EACAQ,cAAef,EA7BU,GA6B2B,EACpDI,gBAA0C,IAAzBN,EAAckB,OAAe,EAAIZ,IAN5Ca,EAAYL,EAAZK,aAAcC,EAAWN,EAAXM,YAStBC,EAAqCV,GAAQ,WAC3C,IAAMW,EAActB,EAAckB,OAASC,EAAenB,EAAcuB,MAAMJ,GAAgB,GAC9F,MAAO,CACLG,YAAAA,EACAE,YAAaF,EAAYJ,OAE7B,GAAG,CAAClB,EAAemB,IANXG,EAAWD,EAAXC,YAAaE,EAAWH,EAAXG,YAQfC,EAAgBd,GAAQ,WAC5B,OAAO,WAAA,OACLe,gBAACC,EAAsB,KACrBD,EAACE,cAAAC,EAAK,CAAAC,UAAU,SAASd,IAAI,KAAKe,MAAM,QAAQC,UAAWC,EAAOC,mBAC/DZ,EAAYV,KAAI,SAAAuB,GACf,OACET,EAACE,cAAAQ,GACCC,4BAAGC,OAA0BH,EAAKI,OAClCJ,KAAMA,EACNK,SAAU,WAAA,OAAMvC,EAASkC,EAAK,EAC9BH,UAAWC,EAAOQ,WAClBtC,SAAUA,EACVC,SAAUA,GAGf,MAIR,GAAE,CAACkB,EAAarB,EAAUE,EAAUC,IAE/BsC,EAAe/B,GAAQ,WAC3B,OAAOX,EAAcY,KAAI,SAACuB,EAAMQ,GAC9B,IAAMC,EAAoBzB,EAARwB,EAElB,OACEjB,uBACEW,6BAAGC,OAA2BH,EAAKI,OACnCM,IAAKnC,EAASiC,GACdX,UAAWc,EAAEC,EAAAA,EAAA,CAAA,EACVd,EAAOe,6BAA8CC,IAApB3C,GACjC2B,EAAOiB,YAAcN,IACtB,eACYA,EAAS,cAAAN,iBAAAA,OACOH,EAAKI,QAEnCb,EAAAE,cAACQ,EAAY,CACXD,KAAMA,EACNK,SAAU,WAAA,OAAMvC,EAASkC,EAAK,EAC9BhC,SAAUA,EACVC,SAAUA,EACV4B,UAAWC,EAAOkB,cAI1B,GACF,GAAG,CAACnD,EAAemB,EAAclB,EAAUS,EAAUP,EAAUC,EAAUE,IAEzE,OAAKN,aAAA,EAAAA,EAAekB,QAKlBQ,EAACE,cAAAC,EACC,CAAAE,MAAM,SACNqB,MAAM,EACNpC,IAAI,KACJ6B,IAAKtC,EACLyB,UAAWc,EAAGb,EAAOoB,iBAAgBN,EAAAA,EAAA,CAAA,EAClCd,EAAOqB,WATgC,IAAzBtD,EAAckB,QAU5Be,EAAOsB,WAAanC,KAGtBsB,EAEDhB,EAACE,cAAAC,EAAK,CAAAb,IAAI,KAAKgB,UAAWC,EAAOuB,wBAC9BhC,EAAc,GACbE,EACEE,cAAA,MAAA,CAAAiB,IAAKpC,EACLgD,QAAS,SAAAC,GACPA,EAAEC,iBACH,EACDC,UAAW,SAAAF,GACTA,EAAEC,iBACH,EACDE,YAAa,SAAAH,GACXA,EAAEC,iBACJ,GAEAjC,EAAAE,cAACkC,EACC,CAAAC,QAAStC,EACTuC,YAAa,CAAC,QAAS,SACvBC,YAAa,CAAC,eAAgB,SAC9BC,SAAS,SACTC,OAAQ,CAAEC,KAAM,GAChBC,2BACAC,sCAAoC,GAEpC5C,EAACE,cAAA2C,GACCC,MAAKlC,KAAAA,OAAOd,GACZpB,UAAQ,EACRqE,UACY,EAAA,iBAAAnC,OAAId,EAAWc,MAAAA,OAAKtC,EAAckB,OAASM,EAAWc,8BAAAA,OAChEtC,EAAckB,sBAEJ,4BACZc,UAAWC,EAAOyC,gBAClBjB,QAAS,WAAQ,EACjBI,YAAa,SAAAH,GACXA,EAAEiB,gBACJ,MAKPzE,GAAewB,EAAAE,cAAA,MAAA,CAAKI,UAAWC,EAAO2C,cAAe1E,OAzDzB,IA6DrC"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import l,{useRef as t}from"react";import a from"classnames";import{BaseInput as r}from"@vibe/base/mockedClassNames";import o from"./Trigger.module.scss.js";import{useDropdownContext as s}from"../../context/DropdownContext.js";import{Text as i}from"@vibe/typography/mockedClassNames";var n=function(n){var m,p=n.inputSize,d=n.fullWidth,c=n.onKeyDown,u=n.inputRef,b=s(),f=b.inputValue,g=b.autoFocus,v=b.disabled,h=b.readOnly,y=b.placeholder,x=b.multi,j=b.selectedItem,O=b.selectedItems,P=void 0===O?[]:O,w=b.inputAriaLabel,C=b.searchable,D=b.size,E=b.label,F=b.isOpen,N=b.getDropdownProps,z=b.getLabelProps,I=b.getInputProps,K=b.interactiveChips,S=t(null),W=null!=u?u:S,k=x?P.length>0:!!j,A=N?N({preventKeyAction:K?!(!f||0>=f.length):F}):{};return l.createElement(l.Fragment,null,C?l.createElement(r,Object.assign({},I(Object.assign({"aria-labelledby":E?z().id:void 0,"aria-label":w||(E||null===(m=z())||void 0===m?void 0:m.id),placeholder:k?"":y,ref:W,onKeyDown:c},A)),{inputRole:"combobox",value:f||"",autoFocus:g,size:p||D,className:a(o.inputWrapper,e(e(e(e(e({},o.hasSelected,!x&&j&&!f),o.small,"small"===p),o.multi,x&&k),o.multiSelected,x&&k&&"small"===p),o.fullWidth,d)),disabled:v,readOnly:h})):l.createElement(l.Fragment,null,!k&&y&&l.createElement(i,{color:"secondary",className:a(o.placeholderText,e({},o.disabled,!!v)),type:"small"===D?"text2":"text1"},y)))};export{n as default};
1
+ import{defineProperty as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import l,{useRef as t}from"react";import a from"classnames";import{BaseInput as r}from"@vibe/base/mockedClassNames";import o from"./Trigger.module.scss.js";import{useDropdownContext as s}from"../../context/DropdownContext.js";import{Text as i}from"@vibe/typography/mockedClassNames";var m=function(m){var n,d=m.inputSize,p=m.fullWidth,c=s(),u=c.inputValue,b=c.autoFocus,f=c.disabled,g=c.readOnly,v=c.placeholder,h=c.multi,y=c.selectedItem,x=c.selectedItems,j=void 0===x?[]:x,O=c.inputAriaLabel,P=c.searchable,E=c.size,F=c.label,N=c.isOpen,z=c.getDropdownProps,C=c.getLabelProps,I=c.getInputProps,S=t(null),W=h?j.length>0:!!y,k=z?z({preventKeyAction:N}):{};return l.createElement(l.Fragment,null,P?l.createElement(r,Object.assign({},I(Object.assign({"aria-labelledby":F?C().id:void 0,"aria-label":O||(F||null===(n=C())||void 0===n?void 0:n.id),placeholder:W?"":v,ref:S},k)),{inputRole:"combobox",value:u||"",autoFocus:b,size:d||E,className:a(o.inputWrapper,e(e(e(e(e({},o.hasSelected,!h&&y&&!u),o.small,"small"===d),o.multi,h&&W),o.multiSelected,h&&W&&"small"===d),o.fullWidth,p)),disabled:f,readOnly:g})):l.createElement(l.Fragment,null,!W&&v&&l.createElement(i,{color:"secondary",className:a(o.placeholderText,e({},o.disabled,!!f)),type:"small"===E?"text2":"text1"},v)))};export{m as default};
2
2
  //# sourceMappingURL=DropdownInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownInput.js","sources":["../../../../../../../src/components/Dropdown/components/Trigger/DropdownInput.tsx"],"sourcesContent":["import React, { useRef, type RefObject } from \"react\";\nimport cx from \"classnames\";\nimport { BaseInput } from \"@vibe/base\";\nimport styles from \"./Trigger.module.scss\";\nimport { useDropdownContext } from \"../../context/DropdownContext\";\nimport { type BaseItemData } from \"../../../BaseItem\";\nimport { Text } from \"@vibe/typography\";\n\nconst DropdownInput = ({\n inputSize,\n fullWidth,\n onKeyDown: externalKeyDown,\n inputRef: externalInputRef\n}: {\n inputSize?: \"small\" | \"medium\" | \"large\";\n fullWidth?: boolean;\n onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;\n inputRef?: RefObject<HTMLInputElement>;\n}) => {\n const {\n inputValue,\n autoFocus,\n disabled,\n readOnly,\n placeholder,\n multi,\n selectedItem,\n selectedItems = [],\n inputAriaLabel,\n searchable,\n size,\n label,\n isOpen,\n getDropdownProps,\n getLabelProps,\n getInputProps,\n interactiveChips\n } = useDropdownContext<BaseItemData>();\n\n const internalRef = useRef<HTMLInputElement>(null);\n const inputRef = externalInputRef ?? internalRef;\n const hasSelection = multi ? selectedItems.length > 0 : !!selectedItem;\n // interactiveChips: menu is always open, so isOpen would permanently suppress Backspace chip-nav.\n // Instead suppress only when the input has text (Backspace should delete chars, not navigate chips).\n const preventKeyAction = interactiveChips ? !!(inputValue && inputValue.length > 0) : isOpen;\n const multipleSelectionDropdownProps = getDropdownProps ? getDropdownProps({ preventKeyAction }) : {};\n\nreturn (\n <>\n {searchable ? (\n <BaseInput\n {...getInputProps({\n \"aria-labelledby\": label ? getLabelProps().id : undefined,\n \"aria-label\": inputAriaLabel || (label ? undefined : getLabelProps()?.id),\n placeholder: hasSelection ? \"\" : placeholder,\n ref: inputRef,\n onKeyDown: externalKeyDown,\n ...multipleSelectionDropdownProps\n })}\n inputRole=\"combobox\"\n value={inputValue || \"\"}\n autoFocus={autoFocus}\n size={inputSize || size}\n className={cx(styles.inputWrapper, {\n [styles.hasSelected]: !multi && selectedItem && !inputValue,\n [styles.small]: inputSize === \"small\",\n [styles.multi]: multi && hasSelection,\n [styles.multiSelected]: multi && hasSelection && inputSize === \"small\",\n [styles.fullWidth]: fullWidth\n })}\n disabled={disabled}\n readOnly={readOnly}\n />\n ) : (\n <>\n {!hasSelection && placeholder && (\n <Text\n color=\"secondary\"\n className={cx(styles.placeholderText, {\n [styles.disabled]: !!disabled\n })}\n type={size === \"small\" ? \"text2\" : \"text1\"}\n >\n {placeholder}\n </Text>\n )}\n </>\n )}\n </>\n );\n};\n\nexport default DropdownInput;\n"],"names":["DropdownInput","_ref","inputSize","fullWidth","externalKeyDown","onKeyDown","externalInputRef","inputRef","_useDropdownContext","useDropdownContext","inputValue","autoFocus","disabled","readOnly","placeholder","multi","selectedItem","_useDropdownContext$s","selectedItems","inputAriaLabel","searchable","size","label","isOpen","getDropdownProps","getLabelProps","getInputProps","interactiveChips","internalRef","useRef","hasSelection","length","multipleSelectionDropdownProps","preventKeyAction","React","BaseInput","Object","assign","id","undefined","_a","ref","inputRole","value","className","cx","styles","inputWrapper","_defineProperty","hasSelected","small","multiSelected","createElement","Text","color","placeholderText","type"],"mappings":"iXAQA,IAAMA,EAAgB,SAAHC,GAUd,MATHC,EAASD,EAATC,UACAC,EAASF,EAATE,UACWC,EAAeH,EAA1BI,UACUC,EAAgBL,EAA1BM,SAOAC,EAkBIC,IAjBFC,EAAUF,EAAVE,WACAC,EAASH,EAATG,UACAC,EAAQJ,EAARI,SACAC,EAAQL,EAARK,SACAC,EAAWN,EAAXM,YACAC,EAAKP,EAALO,MACAC,EAAYR,EAAZQ,aAAYC,EAAAT,EACZU,cAAAA,OAAgB,IAAHD,EAAG,GAAEA,EAClBE,EAAcX,EAAdW,eACAC,EAAUZ,EAAVY,WACAC,EAAIb,EAAJa,KACAC,EAAKd,EAALc,MACAC,EAAMf,EAANe,OACAC,EAAgBhB,EAAhBgB,iBACAC,EAAajB,EAAbiB,cACAC,EAAalB,EAAbkB,cACAC,EAAgBnB,EAAhBmB,iBAGIC,EAAcC,EAAyB,MACvCtB,EAAWD,QAAAA,EAAoBsB,EAC/BE,EAAef,EAAQG,EAAca,OAAS,IAAMf,EAIpDgB,EAAiCR,EAAmBA,EAAiB,CAAES,iBADpDN,KAAsBjB,GAAkC,GAApBA,EAAWqB,QAAcR,IACa,CAAA,EAErG,OACIW,gCACGd,EACCc,gBAACC,EAASC,OAAAC,OAAA,CAAA,EACJX,EACFU,OAAAC,OAAA,CAAA,kBAAmBf,EAAQG,IAAgBa,QAAKC,EAChD,aAAcpB,IAAmBG,GAAmC,QAAfkB,EAAAf,WAAe,IAAAe,OAA3BD,EAA2BC,EAAEF,IACtExB,YAAagB,EAAe,GAAKhB,EACjC2B,IAAKlC,EACLF,UAAWD,GACR4B,IAEL,CAAAU,UAAU,WACVC,MAAOjC,GAAc,GACrBC,UAAWA,EACXU,KAAMnB,GAAamB,EACnBuB,UAAWC,EAAGC,EAAOC,aAAYC,EAAAA,EAAAA,EAAAA,EAAAA,EAC9BF,CAAAA,EAAAA,EAAOG,aAAelC,GAASC,IAAiBN,GAChDoC,EAAOI,MAAsB,UAAdhD,GACf4C,EAAO/B,MAAQA,GAASe,GACxBgB,EAAOK,cAAgBpC,GAASe,GAA8B,UAAd5B,GAChD4C,EAAO3C,UAAYA,IAEtBS,SAAUA,EACVC,SAAUA,KAGZqB,iCACIJ,GAAgBhB,GAChBoB,EAAAkB,cAACC,EAAI,CACHC,MAAM,YACNV,UAAWC,EAAGC,EAAOS,gBAAeP,EACjCF,GAAAA,EAAOlC,WAAaA,IAEvB4C,KAAe,UAATnC,EAAmB,QAAU,SAElCP,IAOf"}
1
+ {"version":3,"file":"DropdownInput.js","sources":["../../../../../../../src/components/Dropdown/components/Trigger/DropdownInput.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport cx from \"classnames\";\nimport { BaseInput } from \"@vibe/base\";\nimport styles from \"./Trigger.module.scss\";\nimport { useDropdownContext } from \"../../context/DropdownContext\";\nimport { type BaseItemData } from \"../../../BaseItem\";\nimport { Text } from \"@vibe/typography\";\n\nconst DropdownInput = ({ inputSize, fullWidth }: { inputSize?: \"small\" | \"medium\" | \"large\"; fullWidth?: boolean }) => {\n const {\n inputValue,\n autoFocus,\n disabled,\n readOnly,\n placeholder,\n multi,\n selectedItem,\n selectedItems = [],\n inputAriaLabel,\n searchable,\n size,\n label,\n isOpen,\n getDropdownProps,\n getLabelProps,\n getInputProps\n } = useDropdownContext<BaseItemData>();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const hasSelection = multi ? selectedItems.length > 0 : !!selectedItem;\n const multipleSelectionDropdownProps = getDropdownProps ? getDropdownProps({ preventKeyAction: isOpen }) : {};\n\n return (\n <>\n {searchable ? (\n <BaseInput\n {...getInputProps({\n \"aria-labelledby\": label ? getLabelProps().id : undefined,\n \"aria-label\": inputAriaLabel || (label ? undefined : getLabelProps()?.id),\n placeholder: hasSelection ? \"\" : placeholder,\n ref: inputRef,\n ...multipleSelectionDropdownProps\n })}\n inputRole=\"combobox\"\n value={inputValue || \"\"}\n autoFocus={autoFocus}\n size={inputSize || size}\n className={cx(styles.inputWrapper, {\n [styles.hasSelected]: !multi && selectedItem && !inputValue,\n [styles.small]: inputSize === \"small\",\n [styles.multi]: multi && hasSelection,\n [styles.multiSelected]: multi && hasSelection && inputSize === \"small\",\n [styles.fullWidth]: fullWidth\n })}\n disabled={disabled}\n readOnly={readOnly}\n />\n ) : (\n <>\n {!hasSelection && placeholder && (\n <Text\n color=\"secondary\"\n className={cx(styles.placeholderText, {\n [styles.disabled]: !!disabled\n })}\n type={size === \"small\" ? \"text2\" : \"text1\"}\n >\n {placeholder}\n </Text>\n )}\n </>\n )}\n </>\n );\n};\n\nexport default DropdownInput;\n"],"names":["DropdownInput","_ref","inputSize","fullWidth","_useDropdownContext","useDropdownContext","inputValue","autoFocus","disabled","readOnly","placeholder","multi","selectedItem","_useDropdownContext$s","selectedItems","inputAriaLabel","searchable","size","label","isOpen","getDropdownProps","getLabelProps","getInputProps","inputRef","useRef","hasSelection","length","multipleSelectionDropdownProps","preventKeyAction","React","BaseInput","Object","assign","id","undefined","ref","inputRole","value","className","cx","styles","inputWrapper","_defineProperty","hasSelected","small","multiSelected","createElement","Text","color","placeholderText","type"],"mappings":"iXAQA,IAAMA,EAAgB,SAAHC,GAAmG,MAA7FC,EAASD,EAATC,UAAWC,EAASF,EAATE,UAClCC,EAiBIC,IAhBFC,EAAUF,EAAVE,WACAC,EAASH,EAATG,UACAC,EAAQJ,EAARI,SACAC,EAAQL,EAARK,SACAC,EAAWN,EAAXM,YACAC,EAAKP,EAALO,MACAC,EAAYR,EAAZQ,aAAYC,EAAAT,EACZU,cAAAA,OAAgB,IAAHD,EAAG,GAAEA,EAClBE,EAAcX,EAAdW,eACAC,EAAUZ,EAAVY,WACAC,EAAIb,EAAJa,KACAC,EAAKd,EAALc,MACAC,EAAMf,EAANe,OACAC,EAAgBhB,EAAhBgB,iBACAC,EAAajB,EAAbiB,cACAC,EAAalB,EAAbkB,cAGIC,EAAWC,EAAyB,MACpCC,EAAed,EAAQG,EAAcY,OAAS,IAAMd,EACpDe,EAAiCP,EAAmBA,EAAiB,CAAEQ,iBAAkBT,IAAY,CAAA,EAE3G,OACEU,gCACGb,EACCa,gBAACC,EAASC,OAAAC,OAAA,CAAA,EACJV,EACFS,OAAAC,OAAA,CAAA,kBAAmBd,EAAQG,IAAgBY,QAAKC,EAChD,aAAcnB,IAAmBG,aAAoBG,sBAAZa,IAA6BD,IACtEvB,YAAae,EAAe,GAAKf,EACjCyB,IAAKZ,GACFI,IAEL,CAAAS,UAAU,WACVC,MAAO/B,GAAc,GACrBC,UAAWA,EACXU,KAAMf,GAAae,EACnBqB,UAAWC,EAAGC,EAAOC,aAAYC,EAAAA,EAAAA,EAAAA,EAAAA,EAC9BF,CAAAA,EAAAA,EAAOG,aAAehC,GAASC,IAAiBN,GAChDkC,EAAOI,MAAsB,UAAd1C,GACfsC,EAAO7B,MAAQA,GAASc,GACxBe,EAAOK,cAAgBlC,GAASc,GAA8B,UAAdvB,GAChDsC,EAAOrC,UAAYA,IAEtBK,SAAUA,EACVC,SAAUA,KAGZoB,iCACIJ,GAAgBf,GAChBmB,EAAAiB,cAACC,EAAI,CACHC,MAAM,YACNV,UAAWC,EAAGC,EAAOS,gBAAeP,EACjCF,GAAAA,EAAOhC,WAAaA,IAEvB0C,KAAe,UAATjC,EAAmB,QAAU,SAElCP,IAOf"}
@@ -1,2 +1,2 @@
1
- import e,{useRef as t}from"react";import{Flex as l}from"@vibe/layout/mockedClassNames";import r from"../MultiSelectedValues/MultiSelectedValues.js";import n from"./DropdownInput.js";import{useDropdownContext as i}from"../../context/DropdownContext.js";import a from"./TriggerActions.js";import o from"./Trigger.module.scss.js";import{getStyle as m}from"@vibe/shared";import u from"classnames";import s from"./DropdownChip.js";var d=function(){var d,c=i(),p=c.selectedItems,v=void 0===p?[]:p,f=c.contextOnOptionRemove,g=c.getSelectedItemProps,b=c.multiline,E=c.disabled,h=c.readOnly,y=c.error,I=c.size,C=c.searchable,j=c.getToggleButtonProps,x=c.label,w=c.getLabelProps,O=c["aria-label"],S=c.minVisibleCount,D=c.textInput,V=c.interactiveChips,W=v.length>0&&(!D||h),k=t(null);return e.createElement(l,{justify:"space-between",align:"center"},e.createElement("div",Object.assign({className:u(o.triggerWrapper,m(o,I))},C?{}:j({"aria-haspopup":"dialog","aria-labelledby":x?w().id:void 0,"aria-label":O||(x||null===(d=w())||void 0===d?void 0:d.id),"aria-disabled":E?"true":void 0,"aria-invalid":y?"true":void 0,"aria-readonly":h?"true":void 0})),D?e.createElement(n,null):V&&C&&!h?0===v.length?e.createElement(n,null):e.createElement("div",{className:o.multiWrapper,onKeyDown:function(e){"ArrowLeft"===e.key&&e.target instanceof HTMLInputElement&&!e.target.value&&k.current&&k.current.focus()}},e.createElement(r,{disabled:E,readOnly:h,selectedItems:v,onRemove:function(e){return null==f?void 0:f(e)},renderInput:function(){return e.createElement(n,{inputSize:"small",fullWidth:!0})},getChipContainerProps:function(e,t){var l;return null!==(l=null==g?void 0:g({selectedItem:e,index:t}))&&void 0!==l?l:{}},badgeRef:k,minVisibleCount:S})):W?e.createElement("div",{className:o.multiWrapper},b?e.createElement(l,{gap:"xs",wrap:!0},v.map((function(t,r){var i,a;return e.createElement(l,{key:(null!==(a=null!==(i=t.id)&&void 0!==i?i:t.value)&&void 0!==a?a:r)+""},e.createElement("div",{style:{flexShrink:0}},e.createElement(s,{item:t,onDelete:function(){null==f||f(t)},readOnly:h,disabled:E})),r===v.length-1&&e.createElement(n,{inputSize:"small"}))}))):e.createElement(r,{disabled:E,readOnly:h,selectedItems:v,onRemove:function(e){null==f||f(e)},renderInput:C?function(){return e.createElement(n,{inputSize:"small",fullWidth:!0})}:void 0,minVisibleCount:S})):e.createElement(n,null)),e.createElement(a,null))};export{d as default};
1
+ import e from"react";import{Flex as t}from"@vibe/layout/mockedClassNames";import r from"../MultiSelectedValues/MultiSelectedValues.js";import l from"./DropdownInput.js";import{useDropdownContext as i}from"../../context/DropdownContext.js";import a from"./TriggerActions.js";import n from"./Trigger.module.scss.js";import{getStyle as o}from"@vibe/shared";import m from"classnames";import s from"./DropdownChip.js";var d=function(){var d,u=i(),c=u.selectedItems,p=void 0===c?[]:c,v=u.contextOnOptionRemove,f=u.multiline,b=u.disabled,g=u.readOnly,E=u.error,y=u.searchable,h=u.getToggleButtonProps,j=u.label,x=u.getLabelProps,O=u["aria-label"],w=u.minVisibleCount;return e.createElement(t,{justify:"space-between",align:"center"},e.createElement("div",Object.assign({className:m(n.triggerWrapper,o(n,u.size))},y?{}:h({"aria-haspopup":"dialog","aria-labelledby":j?x().id:void 0,"aria-label":O||(j||null===(d=x())||void 0===d?void 0:d.id),"aria-disabled":b?"true":void 0,"aria-invalid":E?"true":void 0,"aria-readonly":g?"true":void 0})),p.length>0?e.createElement("div",{className:n.multiWrapper},f?e.createElement(t,{gap:"xs",wrap:!0},p.map((function(r,i){var a,n;return e.createElement(t,{key:(null!==(n=null!==(a=r.id)&&void 0!==a?a:r.value)&&void 0!==n?n:i)+""},e.createElement("div",{style:{flexShrink:0}},e.createElement(s,{item:r,onDelete:function(){null==v||v(r)},readOnly:g,disabled:b})),i===p.length-1&&e.createElement(l,{inputSize:"small"}))}))):e.createElement(r,{disabled:b,readOnly:g,selectedItems:p,onRemove:function(e){null==v||v(e)},renderInput:y?function(){return e.createElement(l,{inputSize:"small",fullWidth:!0})}:void 0,minVisibleCount:w})):e.createElement(l,null)),e.createElement(a,null))};export{d as default};
2
2
  //# sourceMappingURL=MultiSelectTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectTrigger.js","sources":["../../../../../../../src/components/Dropdown/components/Trigger/MultiSelectTrigger.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport { Flex } from \"@vibe/layout\";\nimport MultiSelectedValues from \"../MultiSelectedValues/MultiSelectedValues\";\nimport DropdownInput from \"./DropdownInput\";\nimport { useDropdownContext } from \"../../context/DropdownContext\";\nimport { type BaseItemData } from \"../../../BaseItem\";\nimport TriggerActions from \"./TriggerActions\";\nimport styles from \"./Trigger.module.scss\";\nimport { getStyle } from \"@vibe/shared\";\nimport cx from \"classnames\";\nimport DropdownChip from \"./DropdownChip\";\n\nconst MultiSelectTrigger = () => {\n const {\n selectedItems = [],\n contextOnOptionRemove,\n getSelectedItemProps,\n multiline,\n disabled,\n readOnly,\n error,\n size,\n searchable,\n getToggleButtonProps,\n label,\n getLabelProps,\n \"aria-label\": ariaLabel,\n minVisibleCount,\n textInput,\n interactiveChips\n } = useDropdownContext<BaseItemData>();\n\n const showChips = selectedItems.length > 0 && (!textInput || readOnly);\n const overflowBadgeRef = useRef<HTMLDivElement>(null);\n\n const renderTriggerContent = () => {\n if (textInput) {\n return <DropdownInput />;\n }\n\n if (interactiveChips && searchable && !readOnly) {\n if (selectedItems.length === 0) {\n return <DropdownInput />;\n }\n return (\n <div\n className={styles.multiWrapper}\n onKeyDown={e => {\n if (\n e.key === \"ArrowLeft\" &&\n e.target instanceof HTMLInputElement &&\n !e.target.value &&\n overflowBadgeRef.current\n ) {\n overflowBadgeRef.current.focus();\n }\n }}\n >\n <MultiSelectedValues\n disabled={disabled}\n readOnly={readOnly}\n selectedItems={selectedItems}\n onRemove={item => contextOnOptionRemove?.(item)}\n renderInput={() => <DropdownInput inputSize=\"small\" fullWidth />}\n getChipContainerProps={(item, index) =>\n getSelectedItemProps?.({ selectedItem: item, index }) ?? {}\n }\n badgeRef={overflowBadgeRef}\n minVisibleCount={minVisibleCount}\n />\n </div>\n );\n }\n\n // Default chips mode: original behavior.\n if (showChips) {\n return (\n <div className={styles.multiWrapper}>\n {!multiline ? (\n <MultiSelectedValues\n disabled={disabled}\n readOnly={readOnly}\n selectedItems={selectedItems}\n onRemove={item => {\n contextOnOptionRemove?.(item);\n }}\n renderInput={searchable ? () => <DropdownInput inputSize=\"small\" fullWidth /> : undefined}\n minVisibleCount={minVisibleCount}\n />\n ) : (\n <Flex gap=\"xs\" wrap>\n {selectedItems.map((item, index) => (\n <Flex key={String(item.id ?? item.value ?? index)}>\n <div style={{ flexShrink: 0 }}>\n <DropdownChip\n item={item}\n onDelete={() => {\n contextOnOptionRemove?.(item);\n }}\n readOnly={readOnly}\n disabled={disabled}\n />\n </div>\n {index === selectedItems.length - 1 && <DropdownInput inputSize=\"small\" />}\n </Flex>\n ))}\n </Flex>\n )}\n </div>\n );\n }\n\n return <DropdownInput />;\n };\n\n return (\n <Flex justify=\"space-between\" align=\"center\">\n <div\n className={cx(styles.triggerWrapper, getStyle(styles, size))}\n {...(!searchable\n ? getToggleButtonProps({\n \"aria-haspopup\": \"dialog\",\n \"aria-labelledby\": label ? getLabelProps().id : undefined,\n \"aria-label\": ariaLabel || (label ? undefined : getLabelProps()?.id),\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"aria-invalid\": error ? \"true\" : undefined,\n \"aria-readonly\": readOnly ? \"true\" : undefined\n })\n : {})}\n >\n {renderTriggerContent()}\n </div>\n <TriggerActions />\n </Flex>\n );\n};\n\nexport default MultiSelectTrigger;\n"],"names":["MultiSelectTrigger","_useDropdownContext","useDropdownContext","_useDropdownContext$s","selectedItems","contextOnOptionRemove","getSelectedItemProps","multiline","disabled","readOnly","error","size","searchable","getToggleButtonProps","label","getLabelProps","ariaLabel","minVisibleCount","textInput","interactiveChips","showChips","length","overflowBadgeRef","useRef","React","createElement","Flex","justify","align","Object","assign","className","cx","styles","triggerWrapper","getStyle","id","undefined","_a","DropdownInput","multiWrapper","onKeyDown","e","key","target","HTMLInputElement","value","current","focus","MultiSelectedValues","onRemove","item","renderInput","inputSize","fullWidth","getChipContainerProps","index","selectedItem","badgeRef","gap","wrap","map","_b","String","style","flexShrink","DropdownChip","onDelete","TriggerActions"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelectTrigger.js","sources":["../../../../../../../src/components/Dropdown/components/Trigger/MultiSelectTrigger.tsx"],"sourcesContent":["import React from \"react\";\nimport { Flex } from \"@vibe/layout\";\nimport MultiSelectedValues from \"../MultiSelectedValues/MultiSelectedValues\";\nimport DropdownInput from \"./DropdownInput\";\nimport { useDropdownContext } from \"../../context/DropdownContext\";\nimport { type BaseItemData } from \"../../../BaseItem\";\nimport TriggerActions from \"./TriggerActions\";\nimport styles from \"./Trigger.module.scss\";\nimport { getStyle } from \"@vibe/shared\";\nimport cx from \"classnames\";\nimport DropdownChip from \"./DropdownChip\";\n\nconst MultiSelectTrigger = () => {\n const {\n selectedItems = [],\n contextOnOptionRemove,\n multiline,\n disabled,\n readOnly,\n error,\n size,\n searchable,\n getToggleButtonProps,\n label,\n getLabelProps,\n \"aria-label\": ariaLabel,\n minVisibleCount\n } = useDropdownContext<BaseItemData>();\n\n return (\n <Flex justify=\"space-between\" align=\"center\">\n <div\n className={cx(styles.triggerWrapper, getStyle(styles, size))}\n {...(!searchable\n ? getToggleButtonProps({\n \"aria-haspopup\": \"dialog\",\n \"aria-labelledby\": label ? getLabelProps().id : undefined,\n \"aria-label\": ariaLabel || (label ? undefined : getLabelProps()?.id),\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"aria-invalid\": error ? \"true\" : undefined,\n \"aria-readonly\": readOnly ? \"true\" : undefined\n })\n : {})}\n >\n {selectedItems.length > 0 ? (\n <div className={styles.multiWrapper}>\n {!multiline ? (\n <MultiSelectedValues\n disabled={disabled}\n readOnly={readOnly}\n selectedItems={selectedItems}\n onRemove={item => {\n contextOnOptionRemove?.(item);\n }}\n renderInput={searchable ? () => <DropdownInput inputSize=\"small\" fullWidth /> : undefined}\n minVisibleCount={minVisibleCount}\n />\n ) : (\n <Flex gap=\"xs\" wrap>\n {selectedItems.map((item, index) => (\n <Flex key={String(item.id ?? item.value ?? index)}>\n <div style={{ flexShrink: 0 }}>\n <DropdownChip\n item={item}\n onDelete={() => {\n contextOnOptionRemove?.(item);\n }}\n readOnly={readOnly}\n disabled={disabled}\n />\n </div>\n {index === selectedItems.length - 1 && <DropdownInput inputSize=\"small\" />}\n </Flex>\n ))}\n </Flex>\n )}\n </div>\n ) : (\n <DropdownInput />\n )}\n </div>\n <TriggerActions />\n </Flex>\n );\n};\n\nexport default MultiSelectTrigger;\n"],"names":["MultiSelectTrigger","_useDropdownContext","useDropdownContext","_useDropdownContext$s","selectedItems","contextOnOptionRemove","multiline","disabled","readOnly","error","searchable","getToggleButtonProps","label","getLabelProps","ariaLabel","minVisibleCount","React","createElement","Flex","justify","align","Object","assign","className","cx","styles","triggerWrapper","getStyle","size","id","undefined","_a","length","multiWrapper","gap","wrap","map","item","index","key","_b","value","String","style","flexShrink","DropdownChip","onDelete","DropdownInput","inputSize","MultiSelectedValues","onRemove","renderInput","fullWidth","TriggerActions"],"mappings":"6ZAYA,IAAMA,EAAqB,iBACzBC,EAcIC,IAAkCC,EAAAF,EAbpCG,cAAAA,OAAgB,IAAHD,EAAG,GAAEA,EAClBE,EAAqBJ,EAArBI,sBACAC,EAASL,EAATK,UACAC,EAAQN,EAARM,SACAC,EAAQP,EAARO,SACAC,EAAKR,EAALQ,MAEAC,EAAUT,EAAVS,WACAC,EAAoBV,EAApBU,qBACAC,EAAKX,EAALW,MACAC,EAAaZ,EAAbY,cACcC,EAASb,EAAvB,cACAc,EAAed,EAAfc,gBAGF,OACEC,EAACC,cAAAC,EAAK,CAAAC,QAAQ,gBAAgBC,MAAM,UAClCJ,EAAAC,cAAA,MAAAI,OAAAC,OAAA,CACEC,UAAWC,EAAGC,EAAOC,eAAgBC,EAASF,EAZ9CxB,EAAJ2B,QAaUlB,EASF,CAAA,EARAC,EAAqB,CACnB,gBAAiB,SACjB,kBAAmBC,EAAQC,IAAgBgB,QAAKC,EAChD,aAAchB,IAAcF,GAAmC,QAAfmB,EAAAlB,WAAe,IAAAkB,OAA3BD,EAA2BC,EAAEF,IACjE,gBAAiBtB,EAAW,YAASuB,EACrC,eAAgBrB,EAAQ,YAASqB,EACjC,gBAAiBtB,EAAW,YAASsB,KAI1C1B,EAAc4B,OAAS,EACtBhB,uBAAKO,UAAWE,EAAOQ,cACnB3B,EAYAU,EAACC,cAAAC,EAAK,CAAAgB,IAAI,KAAKC,MAAI,GAChB/B,EAAcgC,KAAI,SAACC,EAAMC,WAAU,OAClCtB,EAACC,cAAAC,GAAKqB,KAAiC,QAArBC,EAAW,UAAXH,EAAKR,UAAM,IAAAE,EAAAA,EAAAM,EAAKI,aAAK,IAAAD,EAAAA,EAAIF,GAAhCI,IACT1B,EAAAC,cAAA,MAAA,CAAK0B,MAAO,CAAEC,WAAY,IACxB5B,EAACC,cAAA4B,GACCR,KAAMA,EACNS,SAAU,WACRzC,SAAAA,EAAwBgC,EACzB,EACD7B,SAAUA,EACVD,SAAUA,KAGb+B,IAAUlC,EAAc4B,OAAS,GAAKhB,EAAAC,cAAC8B,EAAa,CAACC,UAAU,UAEnE,KA1BHhC,EAACC,cAAAgC,GACC1C,SAAUA,EACVC,SAAUA,EACVJ,cAAeA,EACf8C,SAAU,SAAAb,GACRhC,SAAAA,EAAwBgC,EACzB,EACDc,YAAazC,EAAa,WAAA,OAAMM,EAAAC,cAAC8B,EAAc,CAAAC,UAAU,QAAQI,cAAY,OAAGtB,EAChFf,gBAAiBA,KAuBvBC,EAACC,cAAA8B,EAAgB,OAGrB/B,EAAAC,cAACoC,EAAc,MAGrB"}
@@ -1,2 +1,2 @@
1
- import e from"react";import r from"classnames";import t from"../../../BaseItem/BaseItem.js";import a from"./DropdownInput.js";import i from"./Trigger.module.scss.js";import{useDropdownContext as o}from"../../context/DropdownContext.js";import{Flex as l}from"@vibe/layout/mockedClassNames";import s from"./TriggerActions.js";import{getStyle as m}from"@vibe/shared";var n=function(){var n,d,c=o(),p=c.selectedItem,v=c.searchable,u=c.size,b=c.valueRenderer,g=c.getToggleButtonProps,f=c.disabled,j=c.readOnly,E=c.error,y=c.label,I=c.getLabelProps,O=c["aria-label"];return e.createElement(l,{justify:"space-between",align:"center"},e.createElement("div",Object.assign({className:r(i.triggerWrapper,m(i,u))},v?{}:g({"aria-haspopup":"dialog","aria-labelledby":y?I().id:void 0,"aria-label":O||(y||null===(n=I())||void 0===n?void 0:n.id),"aria-disabled":f?"true":void 0,"aria-invalid":E?"true":void 0,"aria-readonly":j?"true":void 0})),e.createElement(a,null),!v&&p&&e.createElement("div",{className:r(i.selectedItem,m(i,u))},e.createElement(t,{component:"div",itemRenderer:b,size:u,readOnly:!0,item:Object.assign(Object.assign({},p),{disabled:f,startElement:"indent"===(null===(d=p.startElement)||void 0===d?void 0:d.type)?void 0:p.startElement})}))),e.createElement(s,null))};export{n as default};
1
+ import{defineProperty as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import r from"react";import t from"classnames";import a from"../../../BaseItem/BaseItem.js";import i from"./DropdownInput.js";import l from"./Trigger.module.scss.js";import{useDropdownContext as o}from"../../context/DropdownContext.js";import{Flex as s}from"@vibe/layout/mockedClassNames";import n from"./TriggerActions.js";import{getStyle as m}from"@vibe/shared";var d=function(){var d,p,c=o(),u=c.inputValue,v=c.selectedItem,b=c.searchable,g=c.size,f=c.valueRenderer,j=c.isFocused,E=c.getToggleButtonProps,y=c.disabled,I=c.readOnly,O=c.error,B=c.label,P=c.getLabelProps,h=c["aria-label"];return r.createElement(s,{justify:"space-between",align:"center"},r.createElement("div",Object.assign({className:t(l.triggerWrapper,m(l,g))},b?{}:E({"aria-haspopup":"dialog","aria-labelledby":B?P().id:void 0,"aria-label":h||(B||null===(d=P())||void 0===d?void 0:d.id),"aria-disabled":y?"true":void 0,"aria-invalid":O?"true":void 0,"aria-readonly":I?"true":void 0})),r.createElement(i,null),!u&&v&&r.createElement("div",{className:t(l.selectedItem,e({},l.faded,j&&b),m(l,g))},r.createElement(a,{component:"div",itemRenderer:f,size:g,readOnly:!0,item:Object.assign(Object.assign({},v),{disabled:y,startElement:"indent"===(null===(p=v.startElement)||void 0===p?void 0:p.type)?void 0:v.startElement})}))),r.createElement(n,null))};export{d as default};
2
2
  //# sourceMappingURL=SingleSelectTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSelectTrigger.js","sources":["../../../../../../../src/components/Dropdown/components/Trigger/SingleSelectTrigger.tsx"],"sourcesContent":["import React from \"react\";\nimport cx from \"classnames\";\nimport { BaseItem, type BaseItemData } from \"../../../BaseItem\";\nimport DropdownInput from \"./DropdownInput\";\nimport styles from \"./Trigger.module.scss\";\nimport { useDropdownContext } from \"../../context/DropdownContext\";\nimport { Flex } from \"@vibe/layout\";\nimport TriggerActions from \"./TriggerActions\";\nimport { getStyle } from \"@vibe/shared\";\n\nconst SingleSelectTrigger = () => {\n const {\n selectedItem,\n searchable,\n size,\n valueRenderer,\n getToggleButtonProps,\n disabled,\n readOnly,\n error,\n label,\n getLabelProps,\n \"aria-label\": ariaLabel\n } = useDropdownContext<BaseItemData>();\n\n return (\n <Flex justify=\"space-between\" align=\"center\">\n <div\n className={cx(styles.triggerWrapper, getStyle(styles, size))}\n {...(!searchable\n ? getToggleButtonProps({\n \"aria-haspopup\": \"dialog\",\n \"aria-labelledby\": label ? getLabelProps().id : undefined,\n \"aria-label\": ariaLabel || (label ? undefined : getLabelProps()?.id),\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"aria-invalid\": error ? \"true\" : undefined,\n \"aria-readonly\": readOnly ? \"true\" : undefined\n })\n : {})}\n >\n <DropdownInput />\n\n {/* Non-searchable single select shows the selection via this overlay. In searchable mode the\n selected value lives inside the input itself, so the overlay must not render. */}\n {!searchable && selectedItem && (\n <div className={cx(styles.selectedItem, getStyle(styles, size))}>\n <BaseItem\n component=\"div\"\n itemRenderer={valueRenderer}\n size={size}\n readOnly\n item={{\n ...selectedItem,\n disabled,\n startElement: selectedItem.startElement?.type === \"indent\" ? undefined : selectedItem.startElement\n }}\n />\n </div>\n )}\n </div>\n <TriggerActions />\n </Flex>\n );\n};\n\nexport default SingleSelectTrigger;\n"],"names":["SingleSelectTrigger","_useDropdownContext","useDropdownContext","selectedItem","searchable","size","valueRenderer","getToggleButtonProps","disabled","readOnly","error","label","getLabelProps","ariaLabel","React","createElement","Flex","justify","align","Object","assign","className","cx","styles","triggerWrapper","getStyle","id","undefined","_a","DropdownInput","BaseItem","component","itemRenderer","item","startElement","_b","type","TriggerActions"],"mappings":"4WAUA,IAAMA,EAAsB,mBAC1BC,EAYIC,IAXFC,EAAYF,EAAZE,aACAC,EAAUH,EAAVG,WACAC,EAAIJ,EAAJI,KACAC,EAAaL,EAAbK,cACAC,EAAoBN,EAApBM,qBACAC,EAAQP,EAARO,SACAC,EAAQR,EAARQ,SACAC,EAAKT,EAALS,MACAC,EAAKV,EAALU,MACAC,EAAaX,EAAbW,cACcC,EAASZ,EAAvB,cAGF,OACEa,EAACC,cAAAC,EAAK,CAAAC,QAAQ,gBAAgBC,MAAM,UAClCJ,EAAAC,cAAA,MAAAI,OAAAC,OAAA,CACEC,UAAWC,EAAGC,EAAOC,eAAgBC,EAASF,EAAQlB,KAChDD,EASF,CAAA,EARAG,EAAqB,CACnB,gBAAiB,SACjB,kBAAmBI,EAAQC,IAAgBc,QAAKC,EAChD,aAAcd,IAAcF,GAAmC,QAAfiB,EAAAhB,WAAe,IAAAgB,OAA3BD,EAA2BC,EAAEF,IACjE,gBAAiBlB,EAAW,YAASmB,EACrC,eAAgBjB,EAAQ,YAASiB,EACjC,gBAAiBlB,EAAW,YAASkB,KAI3Cb,EAAAC,cAACc,EAAgB,OAIfzB,GAAcD,GACdW,EAAKC,cAAA,MAAA,CAAAM,UAAWC,EAAGC,EAAOpB,aAAcsB,EAASF,EAAQlB,KACvDS,EAACC,cAAAe,GACCC,UAAU,MACVC,aAAc1B,EACdD,KAAMA,EACNI,UAAQ,EACRwB,KACKd,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAjB,GACH,CAAAK,SAAAA,EACA0B,aAAkD,oBAApCC,EAAAhC,EAAa+B,mCAAcE,WAAoBT,EAAYxB,EAAa+B,mBAMhGpB,EAAAC,cAACsB,EAAc,MAGrB"}
1
+ {"version":3,"file":"SingleSelectTrigger.js","sources":["../../../../../../../src/components/Dropdown/components/Trigger/SingleSelectTrigger.tsx"],"sourcesContent":["import React from \"react\";\nimport cx from \"classnames\";\nimport { BaseItem, type BaseItemData } from \"../../../BaseItem\";\nimport DropdownInput from \"./DropdownInput\";\nimport styles from \"./Trigger.module.scss\";\nimport { useDropdownContext } from \"../../context/DropdownContext\";\nimport { Flex } from \"@vibe/layout\";\nimport TriggerActions from \"./TriggerActions\";\nimport { getStyle } from \"@vibe/shared\";\n\nconst SingleSelectTrigger = () => {\n const {\n inputValue,\n selectedItem,\n searchable,\n size,\n valueRenderer,\n isFocused,\n getToggleButtonProps,\n disabled,\n readOnly,\n error,\n label,\n getLabelProps,\n \"aria-label\": ariaLabel\n } = useDropdownContext<BaseItemData>();\n\n return (\n <Flex justify=\"space-between\" align=\"center\">\n <div\n className={cx(styles.triggerWrapper, getStyle(styles, size))}\n {...(!searchable\n ? getToggleButtonProps({\n \"aria-haspopup\": \"dialog\",\n \"aria-labelledby\": label ? getLabelProps().id : undefined,\n \"aria-label\": ariaLabel || (label ? undefined : getLabelProps()?.id),\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"aria-invalid\": error ? \"true\" : undefined,\n \"aria-readonly\": readOnly ? \"true\" : undefined\n })\n : {})}\n >\n <DropdownInput />\n\n {!inputValue && selectedItem && (\n <div\n className={cx(\n styles.selectedItem,\n {\n [styles.faded]: isFocused && searchable\n },\n getStyle(styles, size)\n )}\n >\n <BaseItem\n component=\"div\"\n itemRenderer={valueRenderer}\n size={size}\n readOnly\n item={{\n ...selectedItem,\n disabled,\n startElement: selectedItem.startElement?.type === \"indent\" ? undefined : selectedItem.startElement\n }}\n />\n </div>\n )}\n </div>\n <TriggerActions />\n </Flex>\n );\n};\n\nexport default SingleSelectTrigger;\n"],"names":["SingleSelectTrigger","_useDropdownContext","useDropdownContext","inputValue","selectedItem","searchable","size","valueRenderer","isFocused","getToggleButtonProps","disabled","readOnly","error","label","getLabelProps","ariaLabel","React","createElement","Flex","justify","align","Object","assign","className","cx","styles","triggerWrapper","getStyle","id","undefined","_a","DropdownInput","_defineProperty","faded","BaseItem","component","itemRenderer","item","startElement","_b","type","TriggerActions"],"mappings":"kcAUA,IAAMA,EAAsB,mBAC1BC,EAcIC,IAbFC,EAAUF,EAAVE,WACAC,EAAYH,EAAZG,aACAC,EAAUJ,EAAVI,WACAC,EAAIL,EAAJK,KACAC,EAAaN,EAAbM,cACAC,EAASP,EAATO,UACAC,EAAoBR,EAApBQ,qBACAC,EAAQT,EAARS,SACAC,EAAQV,EAARU,SACAC,EAAKX,EAALW,MACAC,EAAKZ,EAALY,MACAC,EAAab,EAAba,cACcC,EAASd,EAAvB,cAGF,OACEe,EAACC,cAAAC,EAAK,CAAAC,QAAQ,gBAAgBC,MAAM,UAClCJ,EAAAC,cAAA,MAAAI,OAAAC,OAAA,CACEC,UAAWC,EAAGC,EAAOC,eAAgBC,EAASF,EAAQnB,KAChDD,EASF,CAAA,EARAI,EAAqB,CACnB,gBAAiB,SACjB,kBAAmBI,EAAQC,IAAgBc,QAAKC,EAChD,aAAcd,IAAcF,GAAmC,QAAfiB,EAAAhB,WAAe,IAAAgB,OAA3BD,EAA2BC,EAAEF,IACjE,gBAAiBlB,EAAW,YAASmB,EACrC,eAAgBjB,EAAQ,YAASiB,EACjC,gBAAiBlB,EAAW,YAASkB,KAI3Cb,EAAAC,cAACc,EAAgB,OAEf5B,GAAcC,GACdY,EAAAC,cAAA,MAAA,CACEM,UAAWC,EACTC,EAAOrB,aAAY4B,EAAA,CAAA,EAEhBP,EAAOQ,MAAQzB,GAAaH,GAE/BsB,EAASF,EAAQnB,KAGnBU,EAACC,cAAAiB,GACCC,UAAU,MACVC,aAAc7B,EACdD,KAAMA,EACNK,UAAQ,EACR0B,KACKhB,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAlB,GACH,CAAAM,SAAAA,EACA4B,aAAkD,oBAApCC,EAAAnC,EAAakC,mCAAcE,WAAoBX,EAAYzB,EAAakC,mBAMhGtB,EAAAC,cAACwB,EAAc,MAGrB"}
@@ -1,2 +1,2 @@
1
- var e={triggerWrapper:"triggerWrapper",small:"small",placeholderText:"placeholderText",medium:"medium",large:"large",inputWrapper:"inputWrapper",multiSelected:"multiSelected",fullWidth:"fullWidth",selectedItem:"selectedItem",disabled:"disabled",multiWrapper:"multiWrapper",actionsWrapper:"actionsWrapper"};!function(e){const n="s_id-fbad5fd6e82d_4_3_0";if("undefined"!=typeof document){const r=document.head||document.getElementsByTagName("head")[0];if(r.querySelector("#"+n))return;const t=document.createElement("style");t.id=n,r.firstChild?r.insertBefore(t,r.firstChild):r.appendChild(t),t.appendChild(document.createTextNode(e))}else globalThis.injectedStyles&&(globalThis.injectedStyles[n]=e)}("/* stylelint-disable */\n/* stylelint-enable */\n.triggerWrapper {\n flex-grow: 1;\n position: relative;\n min-width: 1px;\n display: flex;\n align-items: center;\n cursor: pointer;\n outline: none;\n}\n.triggerWrapper.small {\n min-height: 32px;\n}\n.triggerWrapper.small .placeholderText {\n padding-inline-start: var(--space-8);\n}\n.triggerWrapper.medium {\n min-height: 40px;\n}\n.triggerWrapper.large {\n min-height: 48px;\n}\n.triggerWrapper .inputWrapper {\n border: none;\n width: 100%;\n background: transparent;\n}\n.triggerWrapper .inputWrapper.small {\n height: 24px;\n min-height: 24px;\n}\n.triggerWrapper .inputWrapper.multiSelected {\n width: 48px;\n flex-shrink: 0;\n padding: 0 var(--space-4);\n}\n.triggerWrapper .inputWrapper.multiSelected.fullWidth {\n width: 100%;\n flex-grow: 1;\n}\n.triggerWrapper .selectedItem {\n position: relative;\n pointer-events: none;\n inset: 0;\n padding-inline-start: 0;\n width: 100%;\n -webkit-font-smoothing: var(--font-smoothing-webkit);\n -moz-osx-font-smoothing: var(--font-smoothing-moz);\n}\n.triggerWrapper .selectedItem.small {\n min-height: 32px;\n height: 32px;\n}\n.triggerWrapper .selectedItem.medium {\n min-height: 40px;\n height: 40px;\n}\n.triggerWrapper .selectedItem.large {\n min-height: 48px;\n height: 48px;\n}\n.triggerWrapper .placeholderText {\n padding-inline-start: var(--space-12);\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n cursor: pointer;\n color: var(--placeholder-color);\n -webkit-font-smoothing: var(--font-smoothing-webkit);\n -moz-osx-font-smoothing: var(--font-smoothing-moz);\n}\n.triggerWrapper .placeholderText.disabled {\n color: var(--disabled-text-color);\n}\n.multiWrapper {\n padding: var(--space-4) 0 var(--space-4) var(--space-8);\n width: 100%;\n}\n.actionsWrapper {\n padding: 0 var(--space-4);\n}");export{e as default};
1
+ var e={triggerWrapper:"triggerWrapper",small:"small",placeholderText:"placeholderText",medium:"medium",large:"large",inputWrapper:"inputWrapper",multiSelected:"multiSelected",fullWidth:"fullWidth",hasSelected:"hasSelected",selectedItem:"selectedItem",faded:"faded",disabled:"disabled",multiWrapper:"multiWrapper",actionsWrapper:"actionsWrapper"};!function(e){const n="s_id-ac180f0c654f_4_3_0";if("undefined"!=typeof document){const r=document.head||document.getElementsByTagName("head")[0];if(r.querySelector("#"+n))return;const t=document.createElement("style");t.id=n,r.firstChild?r.insertBefore(t,r.firstChild):r.appendChild(t),t.appendChild(document.createTextNode(e))}else globalThis.injectedStyles&&(globalThis.injectedStyles[n]=e)}("/* stylelint-disable */\n/* stylelint-enable */\n.triggerWrapper {\n flex-grow: 1;\n position: relative;\n min-width: 1px;\n display: flex;\n align-items: center;\n cursor: pointer;\n outline: none;\n}\n.triggerWrapper.small {\n min-height: 32px;\n}\n.triggerWrapper.small .placeholderText {\n padding-inline-start: var(--space-8);\n}\n.triggerWrapper.medium {\n min-height: 40px;\n}\n.triggerWrapper.large {\n min-height: 48px;\n}\n.triggerWrapper .inputWrapper {\n border: none;\n width: 100%;\n background: transparent;\n}\n.triggerWrapper .inputWrapper.small {\n height: 24px;\n min-height: 24px;\n}\n.triggerWrapper .inputWrapper.multiSelected {\n width: 48px;\n flex-shrink: 0;\n padding: 0 var(--space-4);\n}\n.triggerWrapper .inputWrapper.multiSelected.fullWidth {\n width: 100%;\n flex-grow: 1;\n}\n.triggerWrapper .inputWrapper.hasSelected {\n position: absolute;\n inset: 0;\n cursor: pointer;\n}\n.triggerWrapper .selectedItem {\n position: relative;\n pointer-events: none;\n inset: 0;\n padding-inline-start: 0;\n width: 100%;\n -webkit-font-smoothing: var(--font-smoothing-webkit);\n -moz-osx-font-smoothing: var(--font-smoothing-moz);\n}\n.triggerWrapper .selectedItem.small {\n min-height: 32px;\n height: 32px;\n}\n.triggerWrapper .selectedItem.medium {\n min-height: 40px;\n height: 40px;\n}\n.triggerWrapper .selectedItem.large {\n min-height: 48px;\n height: 48px;\n}\n.triggerWrapper .selectedItem.faded {\n opacity: 0.6;\n}\n.triggerWrapper .placeholderText {\n padding-inline-start: var(--space-12);\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n cursor: pointer;\n color: var(--placeholder-color);\n -webkit-font-smoothing: var(--font-smoothing-webkit);\n -moz-osx-font-smoothing: var(--font-smoothing-moz);\n}\n.triggerWrapper .placeholderText.disabled {\n color: var(--disabled-text-color);\n}\n.multiWrapper {\n padding: var(--space-4) 0 var(--space-4) var(--space-8);\n width: 100%;\n}\n.actionsWrapper {\n padding: 0 var(--space-4);\n}");export{e as default};
2
2
  //# sourceMappingURL=Trigger.module.scss.js.map
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import{useState as n,useRef as t,useMemo as l,useCallback as u}from"react";import{useCombobox as i}from"downshift";import o from"./useDropdownFiltering.js";function r(r,s,a,p,g,c,d,f,h,m,I,v,O,b,y){var C=n(g||null),P=e(C,2),T=P[0],M=P[1],j=t(null),w=void 0!==c?c:T,V=l((function(){return w?[w]:[]}),[w]),D=o(r,O,b,V),x=D.filteredOptions,B=D.filterOptions,K=l((function(){return x.flatMap((function(e){return e.options}))}),[x]),S=i({items:K,itemToString:function(e){var n;return null!==(n=null==e?void 0:e.label)&&void 0!==n?n:""},itemToKey:function(e){return void 0!==(null==e?void 0:e.value)?e.value+"":""},isItemDisabled:function(e){return!!e.disabled},initialInputValue:d||(null==w?void 0:w.label)||"",selectedItem:w,isOpen:s,initialIsOpen:a,id:y,onIsOpenChange:function(e){var n=e.isOpen;n||B(""),n?null==I||I():null==m||m()},onInputValueChange:u((function(e){var n=e.inputValue;e.type===i.stateChangeTypes.InputChange&&B(n||""),null==h||h(n)}),[h,B]),onSelectedItemChange:u((function(e){var n=e.selectedItem;void 0===c&&M(n||null),n?(null==v||v(n),null==f||f(n),B("")):(null==f||f(null),B(""))}),[c,v,B,f]),onStateChange:u((function(e){var n,t=e.type;!p||t!==i.stateChangeTypes.ItemClick&&t!==i.stateChangeTypes.InputKeyDownEnter||null===(n=j.current)||void 0===n||n.blur()}),[p]),stateReducer:function(e,n){switch(n.type){case i.stateChangeTypes.InputKeyDownEnter:case i.stateChangeTypes.ItemClick:return Object.assign(Object.assign({},n.changes),{isOpen:!p});default:return n.changes}}}),k=S.getInputProps,E=S.reset;return{isOpen:S.isOpen,inputValue:S.inputValue,highlightedIndex:S.highlightedIndex,selectedItem:w,getToggleButtonProps:S.getToggleButtonProps,getLabelProps:S.getLabelProps,getMenuProps:S.getMenuProps,getInputProps:function(e){return k(Object.assign(Object.assign({},e),{ref:j}))},getItemProps:S.getItemProps,reset:function(){void 0===c&&M(null),E(),B("")},filteredOptions:x,openMenu:S.openMenu,toggleMenu:S.toggleMenu,closeMenu:S.closeMenu}}export{r as default};
1
+ import{slicedToArray as e}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import{useState as n,useRef as t,useMemo as l,useCallback as u}from"react";import{useCombobox as i}from"downshift";import s from"./useDropdownFiltering.js";function o(o,r,a,p,g,c,d,f,h,m,I,v,O,b,C){var y=n(g||null),P=e(y,2),T=P[0],M=P[1],j=t(null),V=void 0!==c?c:T,w=l((function(){return V?[V]:[]}),[V]),B=s(o,O,b,w),D=B.filteredOptions,S=B.filterOptions,x=l((function(){return D.flatMap((function(e){return e.options}))}),[D]),K=i({items:x,itemToString:function(e){var n;return null!==(n=null==e?void 0:e.label)&&void 0!==n?n:""},itemToKey:function(e){return void 0!==(null==e?void 0:e.value)?e.value+"":""},isItemDisabled:function(e){return!!e.disabled},initialInputValue:d||"",selectedItem:V,isOpen:r,initialIsOpen:a,id:C,onIsOpenChange:function(e){e.isOpen?null==I||I():null==m||m()},onInputValueChange:u((function(e){var n=e.inputValue;S(n||""),null==h||h(n)}),[h,S]),onSelectedItemChange:u((function(e){var n=e.selectedItem;void 0===c&&M(n||null),n?(null==v||v(n),null==f||f(n),S("")):(null==f||f(null),S(""))}),[c,v,S,f]),onStateChange:u((function(e){var n,t=e.type;!p||t!==i.stateChangeTypes.ItemClick&&t!==i.stateChangeTypes.InputKeyDownEnter||null===(n=j.current)||void 0===n||n.blur()}),[p]),stateReducer:function(e,n){switch(n.type){case i.stateChangeTypes.InputKeyDownEnter:case i.stateChangeTypes.ItemClick:return Object.assign(Object.assign({},n.changes),{inputValue:null,isOpen:!p});case i.stateChangeTypes.InputBlur:case i.stateChangeTypes.ControlledPropUpdatedSelectedItem:return Object.assign(Object.assign({},n.changes),{inputValue:null});default:return n.changes}}}),k=K.getInputProps,E=K.reset;return{isOpen:K.isOpen,inputValue:K.inputValue,highlightedIndex:K.highlightedIndex,selectedItem:V,getToggleButtonProps:K.getToggleButtonProps,getLabelProps:K.getLabelProps,getMenuProps:K.getMenuProps,getInputProps:function(e){return k(Object.assign(Object.assign({},e),{ref:j}))},getItemProps:K.getItemProps,reset:function(){void 0===c&&M(null),E(),S("")},filteredOptions:D,openMenu:K.openMenu,toggleMenu:K.toggleMenu,closeMenu:K.closeMenu}}export{o as default};
2
2
  //# sourceMappingURL=useDropdownCombobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDropdownCombobox.js","sources":["../../../../../../src/components/Dropdown/hooks/useDropdownCombobox.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { useCombobox } from \"downshift\";\nimport useDropdownFiltering from \"./useDropdownFiltering\";\nimport { type BaseItemData } from \"../../BaseItem\";\nimport { type DropdownGroupOption } from \"../Dropdown.types\";\n\nfunction useDropdownCombobox<T extends BaseItemData<Record<string, unknown>>>(\n options: DropdownGroupOption<T>,\n isMenuOpen?: boolean,\n autoFocus?: boolean,\n closeMenuOnSelect?: boolean,\n defaultValue?: T,\n value?: T,\n inputValueProp?: string,\n onChange?: (option: T | T[] | null) => void,\n onInputChange?: (value: string | null) => void,\n onMenuOpen?: () => void,\n onMenuClose?: () => void,\n onOptionSelect?: (option: T) => void,\n filterOption?: (option: T, inputValue: string) => boolean,\n showSelectedOptions?: boolean,\n id?: string\n) {\n const [currentSelectedItem, setCurrentSelectedItem] = useState<T | null>(defaultValue || null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const selectedItem = value !== undefined ? value : currentSelectedItem;\n\n const memoizedSelectedItemForFiltering = useMemo(() => {\n return selectedItem ? [selectedItem] : [];\n }, [selectedItem]);\n\n const { filteredOptions, filterOptions } = useDropdownFiltering<T>(\n options,\n filterOption,\n showSelectedOptions,\n memoizedSelectedItemForFiltering\n );\n\n const flatOptions = useMemo(() => filteredOptions.flatMap(group => group.options), [filteredOptions]);\n const {\n isOpen,\n inputValue,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n reset,\n openMenu,\n toggleMenu,\n closeMenu\n } = useCombobox<T>({\n items: flatOptions,\n itemToString: item => item?.label ?? \"\",\n itemToKey: item => (item?.value !== undefined ? String(item.value) : \"\"),\n isItemDisabled: item => Boolean(item.disabled),\n // Seed the input with the selected item's label so a defaultValue/value is visible (and exposed to\n // assistive technologies) on mount, now that the selection lives inside the input rather than in an overlay.\n initialInputValue: inputValueProp || selectedItem?.label || \"\",\n selectedItem: selectedItem,\n isOpen: isMenuOpen,\n initialIsOpen: autoFocus,\n id,\n onIsOpenChange: ({ isOpen }) => {\n // Reset the text filter when the menu closes so reopening always shows the full option list,\n // even though the input keeps displaying the selected item's label.\n if (!isOpen) {\n filterOptions(\"\");\n }\n isOpen ? onMenuClose?.() : onMenuOpen?.();\n },\n\n onInputValueChange: useCallback(\n ({ inputValue, type }) => {\n // Only filter on actual user typing. Downshift also writes the selected item's label into the\n // input on selection/blur — those changes must not filter the list.\n if (type === useCombobox.stateChangeTypes.InputChange) {\n filterOptions(inputValue || \"\");\n }\n onInputChange?.(inputValue);\n },\n [onInputChange, filterOptions]\n ),\n onSelectedItemChange: useCallback(\n ({ selectedItem }) => {\n if (value === undefined) {\n setCurrentSelectedItem(selectedItem || null);\n }\n if (selectedItem) {\n onOptionSelect?.(selectedItem);\n onChange?.(selectedItem);\n filterOptions(\"\");\n } else {\n onChange?.(null);\n filterOptions(\"\");\n }\n },\n [value, onOptionSelect, filterOptions, onChange]\n ),\n onStateChange: useCallback(\n ({ type }) => {\n // Blur input after selection via click or Enter key\n if (\n closeMenuOnSelect &&\n (type === useCombobox.stateChangeTypes.ItemClick || type === useCombobox.stateChangeTypes.InputKeyDownEnter)\n ) {\n inputRef.current?.blur();\n }\n },\n [closeMenuOnSelect]\n ),\n stateReducer: (state, actionAndChanges) => {\n switch (actionAndChanges.type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n // Keep Downshift's default inputValue (the selected item's label) so the selection lives inside\n // the input and is exposed to assistive technologies. Only override the open state.\n return { ...actionAndChanges.changes, isOpen: !closeMenuOnSelect };\n\n default:\n return actionAndChanges.changes;\n }\n }\n });\n\n return {\n isOpen,\n inputValue,\n highlightedIndex,\n selectedItem,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps: (options?: Parameters<typeof getInputProps>[0]) => getInputProps({ ...options, ref: inputRef }),\n getItemProps,\n reset: () => {\n if (value === undefined) {\n setCurrentSelectedItem(null);\n }\n reset();\n filterOptions(\"\");\n },\n filteredOptions,\n openMenu,\n toggleMenu,\n closeMenu\n };\n}\n\nexport default useDropdownCombobox;\n"],"names":["useDropdownCombobox","options","isMenuOpen","autoFocus","closeMenuOnSelect","defaultValue","value","inputValueProp","onChange","onInputChange","onMenuOpen","onMenuClose","onOptionSelect","filterOption","showSelectedOptions","id","_useState","useState","_useState2","_slicedToArray","currentSelectedItem","setCurrentSelectedItem","inputRef","useRef","selectedItem","undefined","memoizedSelectedItemForFiltering","useMemo","_useDropdownFiltering","useDropdownFiltering","filteredOptions","filterOptions","flatOptions","flatMap","group","_useCombobox","useCombobox","items","itemToString","item","_a","label","itemToKey","String","isItemDisabled","disabled","initialInputValue","isOpen","initialIsOpen","onIsOpenChange","_ref","onInputValueChange","useCallback","_ref2","inputValue","type","stateChangeTypes","InputChange","onSelectedItemChange","_ref3","onStateChange","_ref4","ItemClick","InputKeyDownEnter","current","blur","stateReducer","state","actionAndChanges","Object","assign","changes","getInputProps","reset","highlightedIndex","getToggleButtonProps","getLabelProps","getMenuProps","ref","getItemProps","openMenu","toggleMenu","closeMenu"],"mappings":"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"}
1
+ {"version":3,"file":"useDropdownCombobox.js","sources":["../../../../../../src/components/Dropdown/hooks/useDropdownCombobox.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { useCombobox } from \"downshift\";\nimport useDropdownFiltering from \"./useDropdownFiltering\";\nimport { type BaseItemData } from \"../../BaseItem\";\nimport { type DropdownGroupOption } from \"../Dropdown.types\";\n\nfunction useDropdownCombobox<T extends BaseItemData<Record<string, unknown>>>(\n options: DropdownGroupOption<T>,\n isMenuOpen?: boolean,\n autoFocus?: boolean,\n closeMenuOnSelect?: boolean,\n defaultValue?: T,\n value?: T,\n inputValueProp?: string,\n onChange?: (option: T | T[] | null) => void,\n onInputChange?: (value: string | null) => void,\n onMenuOpen?: () => void,\n onMenuClose?: () => void,\n onOptionSelect?: (option: T) => void,\n filterOption?: (option: T, inputValue: string) => boolean,\n showSelectedOptions?: boolean,\n id?: string\n) {\n const [currentSelectedItem, setCurrentSelectedItem] = useState<T | null>(defaultValue || null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const selectedItem = value !== undefined ? value : currentSelectedItem;\n\n const memoizedSelectedItemForFiltering = useMemo(() => {\n return selectedItem ? [selectedItem] : [];\n }, [selectedItem]);\n\n const { filteredOptions, filterOptions } = useDropdownFiltering<T>(\n options,\n filterOption,\n showSelectedOptions,\n memoizedSelectedItemForFiltering\n );\n\n const flatOptions = useMemo(() => filteredOptions.flatMap(group => group.options), [filteredOptions]);\n const {\n isOpen,\n inputValue,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n reset,\n openMenu,\n toggleMenu,\n closeMenu\n } = useCombobox<T>({\n items: flatOptions,\n itemToString: item => item?.label ?? \"\",\n itemToKey: item => (item?.value !== undefined ? String(item.value) : \"\"),\n isItemDisabled: item => Boolean(item.disabled),\n initialInputValue: inputValueProp || \"\",\n selectedItem: selectedItem,\n isOpen: isMenuOpen,\n initialIsOpen: autoFocus,\n id,\n onIsOpenChange: ({ isOpen }) => {\n isOpen ? onMenuClose?.() : onMenuOpen?.();\n },\n\n onInputValueChange: useCallback(\n ({ inputValue }) => {\n filterOptions(inputValue || \"\");\n onInputChange?.(inputValue);\n },\n [onInputChange, filterOptions]\n ),\n onSelectedItemChange: useCallback(\n ({ selectedItem }) => {\n if (value === undefined) {\n setCurrentSelectedItem(selectedItem || null);\n }\n if (selectedItem) {\n onOptionSelect?.(selectedItem);\n onChange?.(selectedItem);\n filterOptions(\"\");\n } else {\n onChange?.(null);\n filterOptions(\"\");\n }\n },\n [value, onOptionSelect, filterOptions, onChange]\n ),\n onStateChange: useCallback(\n ({ type }) => {\n // Blur input after selection via click or Enter key\n if (\n closeMenuOnSelect &&\n (type === useCombobox.stateChangeTypes.ItemClick || type === useCombobox.stateChangeTypes.InputKeyDownEnter)\n ) {\n inputRef.current?.blur();\n }\n },\n [closeMenuOnSelect]\n ),\n stateReducer: (state, actionAndChanges) => {\n switch (actionAndChanges.type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n return { ...actionAndChanges.changes, inputValue: null, isOpen: !closeMenuOnSelect };\n case useCombobox.stateChangeTypes.InputBlur:\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return { ...actionAndChanges.changes, inputValue: null };\n\n default:\n return actionAndChanges.changes;\n }\n }\n });\n\n return {\n isOpen,\n inputValue,\n highlightedIndex,\n selectedItem,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps: (options?: Parameters<typeof getInputProps>[0]) => getInputProps({ ...options, ref: inputRef }),\n getItemProps,\n reset: () => {\n if (value === undefined) {\n setCurrentSelectedItem(null);\n }\n reset();\n filterOptions(\"\");\n },\n filteredOptions,\n openMenu,\n toggleMenu,\n closeMenu\n };\n}\n\nexport default useDropdownCombobox;\n"],"names":["useDropdownCombobox","options","isMenuOpen","autoFocus","closeMenuOnSelect","defaultValue","value","inputValueProp","onChange","onInputChange","onMenuOpen","onMenuClose","onOptionSelect","filterOption","showSelectedOptions","id","_useState","useState","_useState2","_slicedToArray","currentSelectedItem","setCurrentSelectedItem","inputRef","useRef","selectedItem","undefined","memoizedSelectedItemForFiltering","useMemo","_useDropdownFiltering","useDropdownFiltering","filteredOptions","filterOptions","flatOptions","flatMap","group","_useCombobox","useCombobox","items","itemToString","item","_a","label","itemToKey","String","isItemDisabled","disabled","initialInputValue","isOpen","initialIsOpen","onIsOpenChange","_ref","onInputValueChange","useCallback","_ref2","inputValue","onSelectedItemChange","_ref3","onStateChange","_ref4","type","stateChangeTypes","ItemClick","InputKeyDownEnter","current","blur","stateReducer","state","actionAndChanges","Object","assign","changes","InputBlur","ControlledPropUpdatedSelectedItem","getInputProps","reset","highlightedIndex","getToggleButtonProps","getLabelProps","getMenuProps","ref","getItemProps","openMenu","toggleMenu","closeMenu"],"mappings":"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"}