@mirohq/design-system-combobox 1.5.39-reactdismissablelayer.0 → 1.6.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.
package/dist/main.js CHANGED
@@ -70,7 +70,7 @@ const ComboboxProvider = ({
70
70
  prop: openProp,
71
71
  defaultProp: defaultOpen,
72
72
  onChange: (state) => {
73
- if (state === true) {
73
+ if (state) {
74
74
  externalOpenedRef.current = true;
75
75
  onOpen == null ? void 0 : onOpen();
76
76
  } else {
@@ -79,25 +79,15 @@ const ComboboxProvider = ({
79
79
  }
80
80
  }
81
81
  });
82
- const [value, setValue] = reactUseControllableState.useControllableState(
83
- {
84
- prop: valueProp,
85
- defaultProp: defaultValueProp,
86
- // Only the initial state can be undefined — nothing selects "no value" —
87
- // so the public handler never has to widen its parameter.
88
- onChange: (state) => {
89
- if (state !== void 0) {
90
- onValueChange == null ? void 0 : onValueChange(state);
91
- }
92
- }
93
- }
94
- );
82
+ const [value, setValue] = reactUseControllableState.useControllableState({
83
+ prop: valueProp,
84
+ defaultProp: defaultValueProp,
85
+ onChange: onValueChange
86
+ });
95
87
  const [searchValue = "", setSearchValue] = reactUseControllableState.useControllableState({
96
88
  prop: searchValueProp,
97
89
  defaultProp: "",
98
- // Clearing through the setter reads as undefined, which the search is
99
- // free to treat as empty — so the public handler stays on plain strings.
100
- onChange: (state) => onSearchValueChange == null ? void 0 : onSearchValueChange(state != null ? state : "")
90
+ onChange: onSearchValueChange
101
91
  });
102
92
  const [size, setSize] = React.useState();
103
93
  const [placeholder, setPlaceholder] = React.useState();
@@ -620,7 +610,8 @@ const GroupLabel = React.forwardRef((props, forwardRef) => /* @__PURE__ */ jsxRu
620
610
 
621
611
  const Value = ({
622
612
  unselectAriaLabel,
623
- multiple = true
613
+ multiple = true,
614
+ items
624
615
  }) => {
625
616
  const {
626
617
  value = [],
@@ -646,8 +637,9 @@ const Value = ({
646
637
  );
647
638
  const getItemText = React.useCallback(
648
639
  (itemValue) => {
649
- const itemData = itemsMap.get(itemValue);
650
- if (itemData === void 0 || itemData.displayedText === "") {
640
+ var _a, _b;
641
+ const displayedText = (_b = items == null ? void 0 : items.get(itemValue)) != null ? _b : (_a = itemsMap.get(itemValue)) == null ? void 0 : _a.displayedText;
642
+ if (displayedText === void 0 || displayedText === "") {
651
643
  return null;
652
644
  }
653
645
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -659,14 +651,21 @@ const Value = ({
659
651
  e.stopPropagation();
660
652
  },
661
653
  removable: canRemoveItem,
662
- removeAriaLabel: "".concat(unselectAriaLabel, " ").concat(itemData.displayedText),
654
+ removeAriaLabel: "".concat(unselectAriaLabel, " ").concat(displayedText),
663
655
  "data-testid": process.env.NODE_ENV === "test" ? "combobox-value-".concat(itemValue) : void 0,
664
- children: itemData.displayedText
656
+ children: displayedText
665
657
  },
666
658
  itemValue
667
659
  );
668
660
  },
669
- [canRemoveItem, isDisabled, itemsMap, onItemRemove, unselectAriaLabel]
661
+ [
662
+ canRemoveItem,
663
+ isDisabled,
664
+ items,
665
+ itemsMap,
666
+ onItemRemove,
667
+ unselectAriaLabel
668
+ ]
670
669
  );
671
670
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: multiple && Array.isArray(value) ? value.map(getItemText) : getItemText(value) });
672
671
  };
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":["../src/utils.ts","../src/hooks/use-combobox-context.tsx","../src/partials/trigger-action-button.styled.tsx","../src/partials/input-action-button.tsx","../src/partials/input.styled.tsx","../src/partials/input.tsx","../src/partials/trigger.tsx","../src/partials/content.styled.tsx","../src/hooks/use-document-fragment.ts","../src/hooks/use-invisible-content.tsx","../src/partials/content.tsx","../src/partials/item.styled.tsx","../src/hooks/use-group-context.tsx","../src/partials/item.tsx","../src/partials/portal.tsx","../src/partials/group.styled.tsx","../src/partials/group.tsx","../src/partials/group-label.styled.tsx","../src/partials/group-label.tsx","../src/partials/value.tsx","../src/partials/separator.styled.tsx","../src/partials/separator.tsx","../src/combobox.styled.tsx","../src/partials/no-result.styled.tsx","../src/partials/no-result.tsx","../src/partials/search-input.tsx","../src/partials/composite-item.styled.tsx","../src/partials/composite-item.tsx","../src/combobox.tsx"],"sourcesContent":["export function searchQueryMatch(\n displayedText: string,\n searchValue: string\n): boolean {\n return displayedText.toLowerCase().includes(searchValue.toLowerCase())\n}\n","import React, {\n createContext,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { useControllableState } from '@radix-ui/react-use-controllable-state'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\nimport type { Direction } from '../types'\nimport type { StyledBaseInputProps } from '../partials/input.styled'\nimport { searchQueryMatch } from '../utils'\n\ninterface ItemData {\n displayedText: string\n groupId: string | undefined\n}\n\ninterface ComboboxProviderSharedProps extends FormElementProps {\n value?: string[] | string\n direction?: Direction\n autoFilter: boolean\n}\n\ninterface ComboboxContextProps extends ComboboxProviderSharedProps {\n setOpenState: React.Dispatch<React.SetStateAction<boolean | undefined>>\n openState: boolean\n externalOpenedRef: React.RefObject<boolean>\n\n setValue: React.Dispatch<React.SetStateAction<string[] | string | undefined>>\n\n triggerRef: React.RefObject<HTMLInputElement>\n inputRef: React.RefObject<HTMLInputElement>\n contentRef: React.RefObject<HTMLDivElement>\n\n searchValue: string\n setSearchValue: React.Dispatch<React.SetStateAction<string | undefined>>\n\n placeholder?: string\n setPlaceholder: React.Dispatch<React.SetStateAction<string | undefined>>\n\n size: StyledBaseInputProps['size']\n setSize: React.Dispatch<React.SetStateAction<StyledBaseInputProps['size']>>\n\n /**\n * includes all visible and hidden items to render Chips and get filtered items\n */\n itemsMap: Map<string, ItemData>\n setItemsMap: React.Dispatch<React.SetStateAction<Map<string, ItemData>>>\n\n /**\n * @returns filtered items based on itemsMap\n * @returns empty array when searchValue is empty or auto filtering is disabled\n */\n filteredItems: ItemData[]\n}\n\ninterface ComboboxProviderProps extends ComboboxProviderSharedProps {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n\n defaultValue?: string[] | string\n onValueChange?: (value: string[] | string) => void\n\n searchValue?: string\n onSearchValueChange?: (value: string) => void\n}\n\nconst ComboboxContext = createContext<ComboboxContextProps>({} as any)\n\nexport const ComboboxProvider = ({\n children,\n open: openProp,\n defaultOpen,\n onOpen,\n onClose,\n valid,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange,\n searchValue: searchValueProp,\n onSearchValueChange,\n autoFilter,\n ...restProps\n}: ComboboxProviderProps): JSX.Element => {\n const triggerRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const externalOpenedRef = useRef(false)\n\n // todo MDS-1141: remove default false value\n const [openState = false, setOpenState] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: state => {\n if (state === true) {\n externalOpenedRef.current = true\n onOpen?.()\n } else {\n externalOpenedRef.current = false\n onClose?.()\n }\n },\n })\n const [value, setValue] = useControllableState<string | string[] | undefined>(\n {\n prop: valueProp,\n defaultProp: defaultValueProp,\n // Only the initial state can be undefined — nothing selects \"no value\" —\n // so the public handler never has to widen its parameter.\n onChange: state => {\n if (state !== undefined) {\n onValueChange?.(state)\n }\n },\n }\n )\n\n // todo MDS-1141: remove default empty value\n const [searchValue = '', setSearchValue] = useControllableState<\n string | undefined\n >({\n prop: searchValueProp,\n defaultProp: '',\n // Clearing through the setter reads as undefined, which the search is\n // free to treat as empty — so the public handler stays on plain strings.\n onChange: state => onSearchValueChange?.(state ?? ''),\n })\n\n const [size, setSize] = useState<StyledBaseInputProps['size']>()\n const [placeholder, setPlaceholder] = useState<string | undefined>()\n\n const [itemsMap, setItemsMap] = useState<Map<string, ItemData>>(new Map())\n\n const { valid: formFieldValid } = useFormFieldContext()\n\n const filteredItems = useMemo(() => {\n if (searchValue.length > 0) {\n return Array.from(itemsMap.values()).filter(item =>\n searchQueryMatch(item.displayedText, searchValue)\n )\n }\n\n return []\n }, [itemsMap, searchValue])\n\n return (\n <ComboboxContext.Provider\n value={{\n ...restProps,\n valid: valid ?? formFieldValid,\n openState,\n setOpenState,\n externalOpenedRef,\n value,\n setValue,\n triggerRef,\n inputRef,\n contentRef,\n autoFilter,\n searchValue,\n setSearchValue,\n itemsMap,\n setItemsMap,\n filteredItems,\n placeholder,\n setPlaceholder,\n size,\n setSize,\n }}\n >\n {children}\n </ComboboxContext.Provider>\n )\n}\n\nexport const useComboboxContext = (): ComboboxContextProps =>\n useContext(ComboboxContext)\n","import type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\n\nexport const StyledActionButton = styled(BaseInput.ActionButton, {\n position: 'absolute',\n right: '$100',\n\n variants: {\n size: {\n medium: {\n top: '1px',\n },\n large: {\n top: '5px',\n },\n 'x-large': {\n top: '9px',\n },\n },\n },\n\n defaultVariants: {\n size: 'large',\n },\n})\n\nexport type StyledActionButtonProps = StrictComponentProps<\n typeof StyledActionButton\n>\n","import React, { useCallback } from 'react'\nimport { IconChevronDown, IconCross } from '@mirohq/design-system-icons'\nimport { Trigger as RadixTrigger } from '@radix-ui/react-popover'\n\nimport type { StyledActionButtonProps } from './trigger-action-button.styled'\nimport { StyledActionButton } from './trigger-action-button.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport type InputActionButtonProps = Omit<StyledActionButtonProps, 'label'> & {\n openActionLabel: string\n closeActionLabel: string\n clearable?: boolean\n clearActionLabel?: string\n}\n\nexport const InputActionButton = ({\n openActionLabel,\n closeActionLabel,\n clearActionLabel,\n clearable,\n size,\n}: InputActionButtonProps): React.ReactNode => {\n const { openState, setOpenState, value = [], setValue } = useComboboxContext()\n\n const isEmpty = value.length === 0\n\n const onToggleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (openState) {\n // open action will be performed by radix since it's RadixTrigger\n setOpenState(false)\n }\n\n event.stopPropagation()\n },\n [setOpenState, openState]\n )\n\n const onClearClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n setValue([])\n\n event.stopPropagation()\n },\n [setValue]\n )\n\n if (isEmpty || clearable === false || clearActionLabel === undefined) {\n return (\n <RadixTrigger asChild aria-haspopup='listbox'>\n <StyledActionButton\n label={openState ? closeActionLabel : openActionLabel}\n size={size}\n onClick={onToggleClick}\n aria-hidden\n tabIndex={-1}\n >\n <IconChevronDown size='small' />\n </StyledActionButton>\n </RadixTrigger>\n )\n }\n\n return (\n <StyledActionButton\n label={clearActionLabel}\n size={size}\n onClick={onClearClick}\n >\n <IconCross size='small' />\n </StyledActionButton>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport type { ComponentPropsWithRef } from 'react'\n\nexport const StyledBaseInput = styled(BaseInput, {\n flexWrap: 'wrap',\n flexGrow: 1,\n gap: '$50',\n\n '&[data-valid], &[data-invalid]': {\n // we don't need a bigger padding here as Input component will render its own icon\n paddingRight: '$100',\n },\n\n '& input': {\n minWidth: '$8',\n flexBasis: 0,\n flexGrow: 1,\n },\n\n variants: {\n size: {\n medium: {\n minHeight: '$8',\n height: 'auto',\n padding: '3px $100',\n paddingRight: '$500',\n fontSize: '$175',\n },\n large: {\n minHeight: '$10',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n },\n 'x-large': {\n minHeight: '$12',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n fontSize: '$200',\n lineHeight: '$500',\n },\n },\n },\n})\n\nexport type StyledBaseInputProps = ComponentPropsWithRef<typeof StyledBaseInput>\n","import { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type {\n BaseInputProps,\n BaseInputStyledProps,\n} from '@mirohq/design-system-base-input'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport { mergeRefs, stringAttrValue } from '@mirohq/design-system-utils'\nimport React, { useEffect } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { InputActionButton } from './input-action-button'\nimport { StyledBaseInput } from './input.styled'\n\nexport type InputProps = Omit<BaseInputStyledProps, 'size'> & {\n /**\n * The size of the input.\n * @default 'large'\n */\n size?: BaseInputProps['size']\n\n /**\n * The content that will be rendered inside the Combobox.Input when no value or\n * defaultValue is set.\n */\n placeholder?: string\n\n /**\n * The label text for Input's action button when Combobox is empty and closed. Will be rendered in a Tooltip.\n */\n openActionLabel: string\n\n /**\n * The label text for Input's action button when Combobox is empty and open. Will be rendered in a Tooltip.\n */\n closeActionLabel: string\n\n /**\n * Show a button to clear the Combobox value.\n * @default true\n */\n clearable?: boolean\n} & (\n | { clearable: false; clearActionLabel?: never }\n | {\n /**\n * The label text for Input's action button when Combobox has values selected. Will be rendered in a Tooltip.\n */\n clearActionLabel: string\n }\n )\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n onFocus,\n id,\n children,\n size = 'large',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n placeholder,\n openActionLabel,\n closeActionLabel,\n clearable = true,\n clearActionLabel,\n onChange,\n css,\n // @ts-expect-error className required when extending the component with styled()\n className,\n ...restProps\n },\n ref\n ): React.ReactNode => {\n const {\n 'aria-disabled': ariaDisabled,\n valid: comboboxValid,\n disabled,\n value = [],\n readOnly,\n triggerRef,\n inputRef,\n searchValue,\n setSearchValue,\n setSize,\n setPlaceholder,\n } = useComboboxContext()\n\n const {\n formElementId,\n ariaDescribedBy: formFieldContextDescribedBy,\n ariaInvalid: formFieldAriaInvalid,\n valid: formFieldValid,\n } = useFormFieldContext()\n\n useEffect(() => {\n setSize(size)\n }, [size, setSize])\n\n useEffect(() => {\n setPlaceholder(placeholder)\n }, [setPlaceholder, placeholder])\n\n const valid = formFieldValid ?? comboboxValid\n\n const scrollIntoView = (\n event: React.FocusEvent<HTMLInputElement>\n ): void => {\n const trigger = triggerRef?.current\n const baseInput = inputRef?.current?.parentElement\n\n if (baseInput != null && trigger != null) {\n event.preventDefault()\n baseInput.scrollTo({\n top: trigger.scrollHeight,\n })\n }\n\n if (onFocus !== undefined) {\n onFocus(event)\n }\n }\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(e.target.value)\n onChange?.(e)\n }\n\n return (\n <StyledBaseInput\n aria-disabled={ariaDisabled}\n valid={valid}\n disabled={disabled}\n readOnly={readOnly}\n size={size}\n onChange={onInputChange}\n css={css}\n // @ts-expect-error className required when extending the component with styled()\n className={className}\n >\n <BaseInput.Input\n {...restProps}\n ref={mergeRefs([inputRef, ref])}\n value={searchValue}\n id={id ?? formElementId}\n aria-describedby={stringAttrValue(\n ariaDescribedBy,\n formFieldContextDescribedBy\n )}\n aria-invalid={ariaInvalid ?? formFieldAriaInvalid}\n placeholder={\n children === null || children === undefined || value.length === 0\n ? placeholder\n : undefined\n }\n onFocus={scrollIntoView}\n />\n {children}\n <InputActionButton\n openActionLabel={openActionLabel}\n closeActionLabel={closeActionLabel}\n clearActionLabel={clearActionLabel}\n clearable={clearable}\n size={size}\n />\n </StyledBaseInput>\n )\n }\n)\n","import { Combobox as AriakitComboboxTrigger } from '@ariakit/react'\nimport { booleanify, mergeRefs } from '@mirohq/design-system-utils'\nimport { Anchor as RadixAnchor } from '@radix-ui/react-popover'\nimport type { ElementRef } from 'react'\nimport React from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { InputProps } from './input'\nimport { Input } from './input'\n\ninterface TriggerAsChildProps {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild: true\n /**\n * The content that will be rendered inside the Combobox.Trigger in stead of the Combobox.Input, when asChild is true.\n */\n children: React.ReactNode\n}\n\ntype TriggerDefaultProps = InputProps & {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild?: false\n}\n\nexport type TriggerProps = TriggerAsChildProps | TriggerDefaultProps\n\nexport const Trigger = React.forwardRef<ElementRef<'div'>, TriggerProps>(\n (props, forwardRef) => {\n const comboboxContextProps = useComboboxContext()\n\n const {\n 'aria-disabled': ariaDisabled,\n disabled,\n readOnly,\n triggerRef,\n setOpenState,\n } = comboboxContextProps\n\n return (\n <RadixAnchor\n ref={mergeRefs([triggerRef, forwardRef])}\n onClick={() => {\n if (\n !booleanify(disabled) &&\n !booleanify(ariaDisabled) &&\n !booleanify(readOnly)\n ) {\n setOpenState(true)\n }\n }}\n >\n <AriakitComboboxTrigger\n // Ariakit's default `canShow` reads `event.currentTarget.value.length`\n // which crashes when the trigger is a non-input element (e.g. asChild\n // with a div or chip). Setting these to `true` bypasses `canShow`\n // entirely. Open state is already managed by RadixAnchor's onClick.\n // See: https://ariakit.org/reference/combobox#showonclick\n showOnClick\n showOnKeyPress\n render={({ ref: ariakitTriggerRef, ...ariakitProps }) => (\n <Primitive.span asChild ref={ariakitTriggerRef} {...ariakitProps}>\n {props.asChild === true ? props.children : <Input {...props} />}\n </Primitive.span>\n )}\n />\n </RadixAnchor>\n )\n }\n)\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n contentStyles,\n itemsContainerStyles,\n} from '@mirohq/design-system-base-select'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledItemsContainer = styled(Primitive.div, itemsContainerStyles)\n\nexport const StyledContent = styled(RadixPopover.Content, {\n ...contentStyles,\n width: 'var(--radix-popover-trigger-width)',\n overflowY: 'auto',\n boxSizing: 'border-box',\n})\n\nexport type StyledContentProps = StrictComponentProps<typeof StyledContent>\n","import React from 'react'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\n\nexport const useDocumentFragment = (): DocumentFragment | undefined => {\n const [fragment, setFragment] = React.useState<DocumentFragment>()\n\n // we need `useLayoutEffect` here because `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment())\n }, [])\n\n return fragment\n}\n","import React, { useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useDocumentFragment } from './use-document-fragment'\n\n/**\n * Render content in DocumentFragment so items can send its text value to context,\n * otherwise we will have empty chips.\n * Content won't be visible in DOM.\n */\nexport const useInvisibleContent = (): ((\n children: React.ReactNode\n) => React.ReactElement | null) => {\n const fragment = useDocumentFragment()\n\n return useCallback(\n (children: React.ReactNode): React.ReactElement | null =>\n fragment !== undefined\n ? createPortal(<div>{children}</div>, fragment)\n : null,\n [fragment]\n )\n}\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { mergeRefs } from '@mirohq/design-system-utils'\nimport { ScrollArea } from '@mirohq/design-system-scroll-area'\nimport { theme } from '@mirohq/design-system-stitches'\nimport type { CSSProperties } from '@stitches/react'\nimport {\n ComboboxList as AriakitComboboxList,\n useComboboxContext as useAriakitComboboxContext,\n} from '@ariakit/react'\n\nimport { StyledContent, StyledItemsContainer } from './content.styled'\nimport type { StyledContentProps } from './content.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type {\n Align,\n Overflow,\n PointerDownOutsideEvent,\n Side,\n Sticky,\n} from '../types'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\n\nexport const CONTENT_OFFSET = parseInt(theme.space[50])\nconst RADIX_CONTENT_AVAILABLE_HEIGHT =\n 'var(--radix-popover-content-available-height)'\n\nconst isInsideRef = (\n element: Element | null,\n ref: React.RefObject<Element>\n): boolean => (element != null && ref.current?.contains(element)) ?? false\n\nexport interface ContentProps extends StyledContentProps {\n /**\n * Combobox's content.\n */\n children?: ReactNode\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onCloseAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves into the component after opening.\n * It can be prevented by calling event.preventDefault().\n */\n onOpenAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n\n /**\n * Event handler called when a pointer event occurs outside the bounds of the\n * component. It can be prevented by calling event.preventDefault.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void\n\n /**\n * The preferred side of the anchor to render against when open. Will be\n * reversed when collisions occur and avoidCollisions is enabled.\n * @default 'bottom'\n */\n side?: Side\n\n /**\n * The distance in pixels from the anchor.\n * @default CONTENT_OFFSET\n */\n sideOffset?: number\n\n /**\n * The preferred alignment against the anchor. May change when collisions\n * occur.\n * @default 'center'\n */\n align?: Align\n\n /**\n * An offset in pixels from the \"start\" or \"end\" alignment options.\n * @default 0\n */\n alignOffset?: number\n\n /**\n * When true, overrides the side and align preferences to prevent collisions\n * with boundary edges.\n * @default true\n */\n avoidCollisions?: boolean\n\n /**\n * The element used as the collision boundary. By default this is the\n * viewport, though you can provide additional element(s) to be included in\n * this check.\n */\n collisionBoundary?: Element | null\n\n /**\n * The distance in pixels from the boundary edges where collision detection\n * should occur. Accepts a number (same for all sides), or a partial padding\n * object, for example: { top: 20, left: 20 }.\n * @default 0\n */\n collisionPadding?: number | Partial<Record<Side, number>>\n\n /**\n * The sticky behavior on the align axis. \"partial\" will keep the content in the\n * boundary as long as the trigger is at least partially in the boundary whilst\n * \"always\" will keep the content in the boundary regardless.\n * @default 'partial'\n */\n sticky?: Sticky\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n * @default true\n */\n hideWhenDetached?: boolean\n\n /**\n * The max height for the content.\n */\n maxHeight?: CSSProperties['maxHeight']\n\n /**\n * Setting overflow as \"visible\" means that the content can extend beyond\n * its collision boundary without any clipping or scrolling being\n * applied.\n * When set to \"auto,\" a scrollbar is added if the content exceeds its\n * boundaries. If no maxHeight is defined, it will be automatically adjusted\n * to fit the remaining space between the trigger and the boundary edge.\n * @default 'visible'\n */\n overflow?: Overflow\n}\n\nexport const Content = React.forwardRef<\n ElementRef<typeof StyledContent>,\n ContentProps\n>(\n (\n {\n side = 'bottom',\n sideOffset = CONTENT_OFFSET,\n align = 'center',\n alignOffset = 0,\n collisionPadding = 0,\n avoidCollisions = true,\n sticky = 'partial',\n hideWhenDetached = true,\n overflow = 'visible',\n maxHeight,\n children,\n onOpenAutoFocus,\n ...restProps\n },\n forwardRef\n ) => {\n const { triggerRef, contentRef, direction, openState, externalOpenedRef } =\n useComboboxContext()\n const ariakitStore = useAriakitComboboxContext()\n\n const getInvisibleContent = useInvisibleContent()\n\n if (!openState) {\n return getInvisibleContent(children)\n }\n\n const content = <StyledItemsContainer>{children}</StyledItemsContainer>\n\n return (\n <StyledContent\n {...restProps}\n dir={direction}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionPadding={collisionPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n onOpenAutoFocus={event => {\n if (onOpenAutoFocus != null) {\n onOpenAutoFocus(event)\n return\n }\n\n event?.preventDefault()\n\n // Skip auto-focus when opened via defaultOpen — Radix's onChange\n // doesn't fire for the initial default, so externalOpenedRef stays false.\n // This avoids moving focus when no user interaction has occurred.\n if (externalOpenedRef.current !== true) return\n\n // Focus the base element (input or custom trigger) so arrow keys\n // work immediately without requiring an extra keypress.\n const baseElement = ariakitStore?.getState().baseElement\n\n baseElement?.focus()\n }}\n ref={mergeRefs([forwardRef, contentRef])}\n onInteractOutside={event => {\n const target = event.target as Element | null\n const isTrigger = isInsideRef(target, triggerRef)\n const isContent = isInsideRef(target, contentRef)\n\n if (isTrigger || isContent) {\n event.preventDefault()\n }\n }}\n >\n {/* we have to specify role here otherwise it would be overwritten by Radix.Content */}\n <AriakitComboboxList role='listbox'>\n {overflow === 'auto' ? (\n <ScrollArea type='always' dir={direction}>\n <ScrollArea.Viewport\n css={{\n maxHeight:\n maxHeight !== undefined\n ? `min(${RADIX_CONTENT_AVAILABLE_HEIGHT}, ${\n typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : maxHeight\n })`\n : RADIX_CONTENT_AVAILABLE_HEIGHT,\n }}\n >\n {content}\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea>\n ) : (\n content\n )}\n </AriakitComboboxList>\n </StyledContent>\n )\n }\n)\n","import { ComboboxItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledItem = styled(ComboboxItem, itemStyles)\n\nexport type StyledItemProps = StrictComponentProps<typeof StyledItem>\n","import React, { createContext, useContext } from 'react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\ninterface GroupProviderSharedProps extends FormElementProps {\n groupId?: string\n}\n\ninterface GroupContextProps extends GroupProviderSharedProps {}\n\ninterface GroupProviderProps extends GroupProviderSharedProps {\n children: React.ReactNode\n}\n\nconst GroupContext = createContext<GroupContextProps>({} as any)\n\nexport const GroupProvider = ({\n children,\n ...restProps\n}: GroupProviderProps): JSX.Element => (\n <GroupContext.Provider\n value={{\n ...restProps,\n }}\n >\n {children}\n </GroupContext.Provider>\n)\n\nexport const useGroupContext = (): GroupContextProps => useContext(GroupContext)\n","import React, { useMemo } from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { ComboboxItemCheck as AriakitComboboxItemCheck } from '@ariakit/react'\nimport { mergeProps } from '@react-aria/utils'\nimport { useAriaDisabled } from '@mirohq/design-system-use-aria-disabled'\nimport { IconCheckMark } from '@mirohq/design-system-icons'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\nimport { StyledItemCheck } from '@mirohq/design-system-base-select'\n\nimport { StyledItem } from './item.styled'\nimport type { StyledItemProps } from './item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { useGroupContext } from '../hooks/use-group-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface ItemProps extends StyledItemProps {\n /**\n * The value given as data when submitted with a name.\n */\n value: string\n\n /**\n * When true, prevents the user from interacting with the item.\n * @default false\n */\n disabled?: boolean\n\n /**\n * Optional text used for typeahead purposes. By default the typeahead\n * behavior will use the Combobox's item text. Use this when the content is\n * complex, or you have non-textual content inside.\n */\n textValue?: string\n\n /**\n * Item's content.\n */\n children?: ReactNode\n}\n\nexport const Item = React.forwardRef<ElementRef<typeof StyledItem>, ItemProps>(\n (\n { disabled = false, value, textValue, children, ...restProps },\n forwardRef\n ) => {\n const { 'aria-disabled': ariaDisabled, ...restAriaDisabledProps } =\n useAriaDisabled(restProps, { allowArrows: true })\n const {\n searchValue,\n autoFilter,\n setItemsMap,\n triggerRef,\n inputRef,\n value: comboboxValue = [],\n } = useComboboxContext()\n\n const { groupId } = useGroupContext()\n\n const displayedText = useMemo((): string => {\n if (textValue !== undefined) {\n return textValue\n }\n\n return typeof children === 'string' ? children : ''\n }, [textValue, children])\n\n useLayoutEffect(() => {\n setItemsMap(\n prevState => new Map(prevState.set(value, { displayedText, groupId }))\n )\n\n return () => {\n setItemsMap(prevState => {\n prevState.delete(value)\n return new Map(prevState)\n })\n }\n }, [setItemsMap, groupId, value, displayedText])\n\n if (\n autoFilter &&\n searchValue.length > 0 &&\n !searchQueryMatch(displayedText, searchValue)\n ) {\n return null\n }\n\n const scrollIntoView = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (\n inputRef?.current?.parentElement != null &&\n triggerRef?.current != null\n ) {\n inputRef.current.parentElement.scrollTo({\n top: triggerRef.current.scrollHeight,\n })\n }\n\n if (restProps.onClick !== undefined) {\n restProps.onClick(event)\n }\n }\n\n // todo MDS-1142 find a better way to fix blinking.\n // We need to use custom state because Ariakit changes its state internally on click even for controlled Combobox\n // and it case `aria-selected` value and checkmark to blink.\n const isSelected = Array.isArray(comboboxValue)\n ? comboboxValue.includes(value)\n : comboboxValue === value\n\n return (\n <StyledItem\n {...mergeProps(restProps, restAriaDisabledProps)}\n focusable\n hideOnClick={false}\n accessibleWhenDisabled={booleanify(ariaDisabled)}\n disabled={booleanify(ariaDisabled) || disabled}\n ref={forwardRef}\n value={value}\n onClick={scrollIntoView}\n aria-selected={isSelected}\n >\n <AriakitComboboxItemCheck\n checked={isSelected}\n render={({ style, ...props }) => (\n // AriakitComboboxItemCheck adds its owm inline styles which we want to omit here\n <StyledItemCheck {...props} />\n )}\n >\n <IconCheckMark\n size='small'\n data-testid={\n process.env.NODE_ENV === 'test'\n ? 'combobox-item-check'\n : undefined\n }\n />\n </AriakitComboboxItemCheck>\n {children}\n </StyledItem>\n )\n }\n)\n","import React from 'react'\nimport type { PopoverPortalProps } from '@radix-ui/react-popover'\nimport { Portal as RadixPortal } from '@radix-ui/react-popover'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface PortalProps extends PopoverPortalProps {\n /**\n * Specify a container element to portal the content into.\n */\n container?: HTMLElement | null\n}\n\nexport const Portal = ({\n forceMount: forceMountProp,\n ...restProps\n}: PortalProps): React.ReactNode => {\n const { openState } = useComboboxContext()\n\n // We always need to render content with items to be able to render Chips in Value,\n // but without forceMount Radix will not render Portal when Popover is closed\n const forceMount = !openState || forceMountProp\n\n return <RadixPortal forceMount={forceMount} {...restProps} />\n}\n","import { Group as AriakitGroup } from '@ariakit/react'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledGroup = styled(AriakitGroup, {})\n\nexport type StyledGroupProps = StrictComponentProps<typeof StyledGroup>\n","import React from 'react'\nimport type { ElementRef } from 'react'\nimport { useId } from '@mirohq/design-system-use-id'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { StyledGroupProps } from './group.styled'\nimport { StyledGroup } from './group.styled'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\nimport { GroupProvider } from '../hooks/use-group-context'\n\nexport type GroupProps = StyledGroupProps\n\nexport const Group = React.forwardRef<\n ElementRef<typeof StyledGroup>,\n GroupProps\n>(({ children, ...rest }, forwardRef) => {\n const { autoFilter, searchValue, filteredItems } = useComboboxContext()\n\n const id = useId()\n const getInvisibleContent = useInvisibleContent()\n\n let hasVisibleContent = true\n\n if (autoFilter && searchValue.length > 0) {\n hasVisibleContent = filteredItems.some(item => item.groupId === id)\n }\n\n return (\n <GroupProvider groupId={id}>\n {hasVisibleContent ? (\n <StyledGroup {...rest} ref={forwardRef}>\n {children}\n </StyledGroup>\n ) : (\n getInvisibleContent(children)\n )}\n </GroupProvider>\n )\n})\n","import { GroupLabel } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { groupLabelStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledGroupLabel = styled(GroupLabel, groupLabelStyles)\n\nexport type StyledGroupLabelProps = StrictComponentProps<\n typeof StyledGroupLabel\n>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { StyledGroupLabel } from './group-label.styled'\nimport type { StyledGroupLabelProps } from './group-label.styled'\n\nexport interface GroupLabelProps extends StyledGroupLabelProps {}\n\nexport const GroupLabel = React.forwardRef<\n ElementRef<typeof StyledGroupLabel>,\n GroupLabelProps\n>((props, forwardRef) => <StyledGroupLabel {...props} ref={forwardRef} />)\n","import React, { useCallback } from 'react'\nimport type { FC } from 'react'\nimport { Chip } from '@mirohq/design-system-chip'\nimport { booleanify } from '@mirohq/design-system-utils'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface ValueProps {\n /**\n * The label to make the remove button recognizable by the screen readers.\n */\n unselectAriaLabel: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n}\n\nexport const Value: FC<ValueProps> = ({\n unselectAriaLabel,\n multiple = true,\n}) => {\n const {\n value = [],\n setValue,\n disabled,\n readOnly,\n 'aria-disabled': ariaDisabled,\n itemsMap,\n } = useComboboxContext()\n const canRemoveItem =\n !booleanify(ariaDisabled) && !booleanify(disabled) && !booleanify(readOnly)\n const isDisabled = booleanify(ariaDisabled) || booleanify(disabled)\n\n const onItemRemove = useCallback(\n (item: string): void => {\n if (multiple) {\n setValue(prevValue =>\n (prevValue as string[]).filter(value => value !== item)\n )\n } else {\n setValue('')\n }\n },\n [setValue, multiple]\n )\n\n const getItemText = useCallback(\n (itemValue: string) => {\n const itemData = itemsMap.get(itemValue)\n if (itemData === undefined || itemData.displayedText === '') {\n return null\n }\n\n return (\n <Chip\n key={itemValue}\n disabled={isDisabled}\n onRemove={e => {\n onItemRemove(itemValue)\n e.stopPropagation()\n }}\n removable={canRemoveItem}\n removeAriaLabel={`${unselectAriaLabel} ${itemData.displayedText}`}\n data-testid={\n process.env.NODE_ENV === 'test'\n ? `combobox-value-${itemValue}`\n : undefined\n }\n >\n {itemData.displayedText}\n </Chip>\n )\n },\n [canRemoveItem, isDisabled, itemsMap, onItemRemove, unselectAriaLabel]\n )\n\n return (\n <>\n {multiple && Array.isArray(value)\n ? value.map(getItemText)\n : getItemText(value as string)}\n </>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { separatorStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledSeparator = styled(Primitive.div, separatorStyles)\n\nexport type StyledSeparatorProps = StrictComponentProps<typeof StyledSeparator>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { StyledSeparator } from './separator.styled'\nimport type { StyledSeparatorProps } from './separator.styled'\n\nexport interface SeparatorProps extends StyledSeparatorProps {}\n\nexport const Separator = React.forwardRef<\n ElementRef<typeof StyledSeparator>,\n SeparatorProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue } = useComboboxContext()\n\n if (autoFilter && searchValue.length > 0) {\n return null\n }\n\n return <StyledSeparator {...props} ref={forwardRef} aria-hidden />\n})\n","import type { ComponentPropsWithRef } from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledNativeSelect = styled(Primitive.select, {\n // if we support autoComplete, we would have to use visually-hidden styles here\n display: 'none',\n})\n\nexport const StyledComboboxContent = styled(Primitive.div, {\n position: 'relative',\n width: '100%',\n})\n\nexport type StyledComboboxProps = ComponentPropsWithRef<\n typeof StyledComboboxContent\n>\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledNoResult = styled(Primitive.div, {\n padding: '$100',\n})\n\nexport type StyledNoResultProps = StrictComponentProps<typeof StyledNoResult>\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\n\nimport type { StyledNoResultProps } from './no-result.styled'\nimport { StyledNoResult } from './no-result.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface NoResultProps extends StyledNoResultProps {\n /**\n * The content.\n */\n children?: ReactNode\n}\n\nexport const NoResult = React.forwardRef<\n ElementRef<typeof StyledNoResult>,\n NoResultProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue, filteredItems, itemsMap } =\n useComboboxContext()\n\n // when filtering is disabled or idle, just checking if there are any items provided\n const noActiveFiltering =\n !autoFilter || (autoFilter && searchValue.length === 0)\n\n const isVisible = noActiveFiltering\n ? itemsMap.size === 0\n : filteredItems.length === 0\n\n if (isVisible) {\n return <StyledNoResult {...props} ref={forwardRef} />\n }\n\n return null\n})\n","import React, { useCallback } from 'react'\nimport { InputSearch } from '@mirohq/design-system-input'\nimport { styled } from '@mirohq/design-system-stitches'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nconst StyledInputSearch = styled(InputSearch, {\n '&&': {\n border: '1px solid $border-neutrals',\n backgroundColor: '$background-control',\n },\n})\n\nexport const SearchInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<typeof InputSearch>\n>((props, ref) => {\n const { setSearchValue, contentRef } = useComboboxContext()\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(event.target.value)\n props.onChange?.(event)\n },\n [props, setSearchValue]\n )\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ): void => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n // Select first item that is not disabled\n const firstItem = contentRef.current?.querySelector<HTMLElement>(\n '[role=\"option\"]:not([aria-disabled=\"true\"])'\n )\n firstItem?.focus()\n }\n\n props.onKeyDown?.(event)\n }\n\n return (\n <StyledInputSearch\n {...props}\n ref={ref}\n onKeyDown={handleKeyDown}\n onChange={handleSearchChange}\n />\n )\n})\n","import type { ComponentProps } from 'react'\nimport { CompositeItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledCompositeItem = styled(CompositeItem, {\n ...itemStyles,\n display: 'flex',\n width: '100%',\n})\n\nexport type StyledCompositeItemProps = ComponentProps<\n typeof StyledCompositeItem\n>\n","import React from 'react'\nimport type { ReactElement } from 'react'\nimport {\n CompositeItem as AriakitCompositeItem,\n useCompositeContext,\n} from '@ariakit/react'\n\nimport { StyledCompositeItem } from './composite-item.styled'\nimport type { StyledCompositeItemProps } from './composite-item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface CompositeItemProps\n extends Pick<StyledCompositeItemProps, 'disabled' | 'role' | 'children'> {\n /**\n * When true, the element receives real DOM focus and participates in\n * Tab key cycling between composite items.\n */\n tabbable?: boolean\n /**\n * When true (default), the child element becomes the composite item directly\n * via Ariakit's `render` prop — it receives focus and keyboard handling.\n * The child must be a single React element.\n *\n * When false, a styled wrapper acts as the composite item and children are\n * rendered inside it. The wrapper uses the same item styles as Combobox.Item\n * (hover, focus, active states) but without selection semantics.\n * @default true\n */\n asChild?: boolean\n\n /**\n * When provided, the item participates in the combobox's auto-filter logic.\n * The item will be hidden when the search query does not match this text.\n * When omitted, the item is always visible regardless of search state.\n */\n textValue?: string\n\n /**\n * Whether to close the combobox when this item is clicked.\n * @default false\n */\n hideOnClick?: boolean\n}\n\nexport const CompositeItem = ({\n asChild = true,\n role = 'menuitem',\n textValue,\n disabled = false,\n tabbable,\n hideOnClick = false,\n children,\n}: CompositeItemProps): JSX.Element | null => {\n const { searchValue, autoFilter, setOpenState } = useComboboxContext()\n\n // Ariakit's combobox uses virtualFocus, which redirects real DOM focus\n // to the trigger on every item focus. For tabbable items we prevent this\n // so the element keeps real focus — enabling natural Tab/Shift+Tab cycling.\n // We still sync the composite's activeId so arrow navigation continues\n // from the correct position.\n const compositeStore = useCompositeContext()\n const preventVirtualFocus = React.useCallback(\n (e: React.FocusEvent) => {\n const id = e.currentTarget.id\n if (id !== '') {\n compositeStore?.setActiveId(id)\n }\n e.preventDefault()\n },\n [compositeStore]\n )\n\n const tabbableRef = React.useCallback(\n (el: HTMLElement | null) => {\n if (tabbable === true && el != null) {\n el.tabIndex = 0\n }\n },\n [tabbable]\n )\n\n const handleClick = React.useCallback(() => {\n if (hideOnClick) {\n setOpenState(false)\n }\n }, [hideOnClick, setOpenState])\n\n if (\n textValue !== undefined &&\n autoFilter &&\n searchValue !== '' &&\n !searchQueryMatch(textValue, searchValue)\n ) {\n return null\n }\n\n const compositeProps = {\n disabled: disabled,\n accessibleWhenDisabled: disabled,\n role,\n onClick: handleClick,\n onFocus: tabbable === true ? preventVirtualFocus : undefined,\n } as const\n\n if (asChild) {\n return (\n <AriakitCompositeItem\n {...compositeProps}\n ref={tabbableRef}\n render={children as ReactElement}\n />\n )\n }\n\n return (\n <StyledCompositeItem {...compositeProps} ref={tabbableRef}>\n {children}\n </StyledCompositeItem>\n )\n}\n\nCompositeItem.displayName = 'CompositeItem'\n","import React, { useEffect } from 'react'\nimport type { ElementRef, ForwardRefExoticComponent } from 'react'\nimport { ComboboxProvider as AriakitComboboxProvider } from '@ariakit/react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n BaseTooltipProvider,\n useBaseTooltipContext,\n} from '@mirohq/design-system-base-tooltip'\nimport { usePrevious } from '@mirohq/design-system-use-previous'\n\nimport { Trigger } from './partials/trigger'\nimport { Content } from './partials/content'\nimport { Input } from './partials/input'\nimport { Item } from './partials/item'\nimport { Portal } from './partials/portal'\nimport { Group } from './partials/group'\nimport { GroupLabel } from './partials/group-label'\nimport { Value } from './partials/value'\nimport { Separator } from './partials/separator'\nimport { StyledComboboxContent, StyledNativeSelect } from './combobox.styled'\nimport type { StyledComboboxProps } from './combobox.styled'\nimport {\n ComboboxProvider,\n useComboboxContext,\n} from './hooks/use-combobox-context'\nimport type { Direction } from './types'\nimport { NoResult } from './partials/no-result'\nimport { SearchInput } from './partials/search-input'\nimport { CompositeItem } from './partials/composite-item'\n\nexport interface ComboboxProps extends FormElementProps, StyledComboboxProps {\n /**\n * The value of the combobox when initially rendered. Use when you do not need\n * to control the state of the combobox.\n */\n defaultValue?: string[] | string\n\n /**\n * The controlled value of the combobox. Should be used in conjunction with\n * onValueChange.\n */\n value?: string[] | string\n\n /**\n * Event handler called when the value changes.\n */\n onValueChange?: (value: string[] | string) => void\n\n /**\n * The controlled search value to filter items. Should be used in conjunction with\n * onSearchValueChange.\n */\n searchValue?: string\n\n /**\n * Event handler called when the trigger input value changes.\n */\n onSearchValueChange?: (value: string) => void\n\n /**\n * The open state of the combobox when it is initially rendered. Use when you do\n * not need to control its open state.\n * @default false\n */\n defaultOpen?: boolean\n\n /**\n * The controlled open state of the combobox. Must be used in conjunction with\n * onOpen and onClose.\n */\n open?: boolean\n\n /**\n * Event handler called when the combobox opens.\n */\n onOpen?: () => void\n\n /**\n * Event handler called when the combobox closes.\n */\n onClose?: () => void\n\n /**\n * The reading direction of the combobox when applicable. If omitted, inherits\n * globally from DirectionProvider or assumes LTR (left-to-right) reading\n * mode.\n * @default 'ltr'\n */\n direction?: Direction\n\n /**\n * The content of the combobox\n */\n children?: React.ReactNode\n\n /**\n * Enables/disabled automatic filtering.\n * @default true\n */\n autoFilter?: boolean\n\n /**\n * The name of the combobox. Submitted with its owning form as part of a\n * name/value pair.\n */\n name?: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n}\n\nconst Root = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n multiple = true,\n value: valueProp,\n onValueChange,\n name,\n children,\n ...restProps\n },\n forwardRef\n ) => {\n const {\n openState,\n setOpenState,\n value = [],\n setValue,\n required,\n readOnly,\n 'aria-disabled': ariaDisabled,\n disabled,\n direction,\n triggerRef,\n } = useComboboxContext()\n\n const {\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n formElementRef,\n } = useFormFieldContext<HTMLSelectElement>()\n\n useEffect(() => {\n setRequired?.(required)\n setDisabled?.(disabled)\n setAriaDisabled?.(ariaDisabled)\n setReadOnly?.(readOnly)\n }, [\n readOnly,\n disabled,\n ariaDisabled,\n required,\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n ])\n\n const { ignoreNextTooltip } = useBaseTooltipContext()\n const prevOpen = usePrevious(openState)\n\n useEffect(() => {\n if (prevOpen === true && !openState) {\n ignoreNextTooltip()\n }\n }, [ignoreNextTooltip, openState, prevOpen])\n\n const onSetSelectedValue = (newValue: string | string[]): void => {\n // If no defaultValue is provided the newValue is always an array so we need validate the types\n if (!multiple && Array.isArray(newValue)) {\n setValue(newValue[0])\n } else if (multiple && !Array.isArray(newValue)) {\n setValue([newValue])\n } else {\n setValue(newValue)\n }\n }\n\n const onOpenChange = (value: boolean): void => {\n if (!booleanify(readOnly)) {\n setOpenState(value)\n }\n }\n\n const isFormControl = Boolean(triggerRef.current?.closest('form'))\n\n const getOptionValue = (\n itemValue: string | string[]\n ): JSX.Element | JSX.Element[] => {\n if (multiple && Array.isArray(itemValue)) {\n return (value as string[]).map(itemValue => (\n <option key={itemValue} value={itemValue}>\n {itemValue}\n </option>\n ))\n } else {\n return (\n <option key={itemValue as string} value={itemValue}>\n {itemValue}\n </option>\n )\n }\n }\n\n return (\n <RadixPopover.Root open={openState} onOpenChange={onOpenChange}>\n <AriakitComboboxProvider\n open={openState}\n setOpen={onOpenChange}\n selectedValue={value}\n setSelectedValue={onSetSelectedValue}\n >\n <StyledComboboxContent\n ref={forwardRef}\n {...restProps}\n dir={direction}\n data-form-element='select'\n >\n {children}\n </StyledComboboxContent>\n </AriakitComboboxProvider>\n {isFormControl && (\n <StyledNativeSelect\n multiple={multiple}\n autoComplete='off'\n name={name}\n tabIndex={-1}\n aria-hidden='true'\n ref={formElementRef}\n required={required}\n disabled={disabled}\n aria-disabled={ariaDisabled}\n value={value}\n // since we don't support autoComplete there is no way this select value will change,\n // although we still need to provide `onChange` since we use `value` and not `defaultValue`\n onChange={() => {}}\n >\n {value.length === 0 ? (\n <option value='' />\n ) : (\n // since we don't support autoComplete we can render here only selected values\n getOptionValue(value)\n )}\n </StyledNativeSelect>\n )}\n </RadixPopover.Root>\n )\n }\n)\n\nexport const Combobox = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n 'aria-disabled': ariaDisabled,\n defaultOpen = false,\n open,\n valid,\n disabled,\n readOnly,\n required,\n value,\n defaultValue,\n onOpen,\n onClose,\n searchValue,\n onSearchValueChange,\n onValueChange,\n direction = 'ltr',\n autoFilter = true,\n ...restProps\n },\n forwardRef\n ) => (\n <ComboboxProvider\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n searchValue={searchValue}\n onSearchValueChange={onSearchValueChange}\n defaultOpen={defaultOpen}\n open={open}\n onOpen={onOpen}\n onClose={onClose}\n valid={valid}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-disabled={ariaDisabled}\n direction={direction}\n autoFilter={autoFilter}\n >\n <BaseTooltipProvider>\n <Root {...restProps} value={value} ref={forwardRef} />\n </BaseTooltipProvider>\n </ComboboxProvider>\n )\n) as ForwardRefExoticComponent<ComboboxProps> & Partials\n\nexport interface Partials {\n Portal: typeof Portal\n Trigger: typeof Trigger\n Input: typeof Input\n Content: typeof Content\n Item: typeof Item\n CompositeItem: typeof CompositeItem\n Group: typeof Group\n GroupLabel: typeof GroupLabel\n Value: typeof Value\n Separator: typeof Separator\n NoResult: typeof NoResult\n SearchInput: typeof SearchInput\n}\n\nCombobox.Portal = Portal\nCombobox.Trigger = Trigger\nCombobox.Input = Input\nCombobox.Content = Content\nCombobox.Item = Item\nCombobox.CompositeItem = CompositeItem\nCombobox.Group = Group\nCombobox.GroupLabel = GroupLabel\nCombobox.Value = Value\nCombobox.Separator = Separator\nCombobox.NoResult = NoResult\nCombobox.SearchInput = SearchInput\n"],"names":["createContext","useRef","useControllableState","useState","useFormFieldContext","useMemo","jsx","useContext","styled","BaseInput","useCallback","RadixTrigger","IconChevronDown","IconCross","useEffect","jsxs","mergeRefs","stringAttrValue","RadixAnchor","booleanify","AriakitComboboxTrigger","Primitive","itemsContainerStyles","RadixPopover","contentStyles","useLayoutEffect","createPortal","theme","useAriakitComboboxContext","AriakitComboboxList","ScrollArea","ComboboxItem","itemStyles","useAriaDisabled","mergeProps","AriakitComboboxItemCheck","StyledItemCheck","IconCheckMark","RadixPortal","AriakitGroup","useId","GroupLabel","groupLabelStyles","value","Chip","Fragment","separatorStyles","InputSearch","CompositeItem","useCompositeContext","AriakitCompositeItem","useBaseTooltipContext","usePrevious","itemValue","AriakitComboboxProvider","BaseTooltipProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,SAAS,gBAAA,CACd,eACA,WAAA,EACS;AACT,EAAA,OAAO,cAAc,WAAA,EAAY,CAAE,QAAA,CAAS,WAAA,CAAY,aAAa,CAAA;AACvE;;ACoEA,MAAM,eAAA,GAAkBA,mBAAA,CAAoC,EAAS,CAAA;AAE9D,MAAM,mBAAmB,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,IAAA,EAAM,QAAA;AAAA,EACN,WAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA;AAAA,EACA,WAAA,EAAa,eAAA;AAAA,EACb,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA0C;AACxC,EAAA,MAAM,UAAA,GAAaC,aAAyB,IAAI,CAAA;AAChD,EAAA,MAAM,QAAA,GAAWA,aAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAaA,aAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,aAAO,KAAK,CAAA;AAGtC,EAAA,MAAM,CAAC,SAAA,GAAY,KAAA,EAAO,YAAY,IAAIC,8CAAA,CAAqB;AAAA,IAC7D,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,WAAA;AAAA,IACb,UAAU,CAAA,KAAA,KAAS;AACjB,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,QAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,EAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,QAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,8CAAA;AAAA,IACxB;AAAA,MACE,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,gBAAA;AAAA;AAAA;AAAA,MAGb,UAAU,CAAA,KAAA,KAAS;AACjB,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAgB,KAAA,CAAA;AAAA,QAClB;AAAA,MACF;AAAA;AACF,GACF;AAGA,EAAA,MAAM,CAAC,WAAA,GAAc,EAAA,EAAI,cAAc,IAAIA,8CAAA,CAEzC;AAAA,IACA,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA;AAAA;AAAA,IAGb,QAAA,EAAU,CAAA,KAAA,KAAS,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAsB,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAA;AAAA,GACnD,CAAA;AAED,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,cAAA,EAAuC;AAC/D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,cAAA,EAA6B;AAEnE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIA,cAAA,iBAAgC,IAAI,KAAK,CAAA;AAEzE,EAAA,MAAM,EAAE,KAAA,EAAO,cAAA,EAAe,GAAIC,wCAAA,EAAoB;AAEtD,EAAA,MAAM,aAAA,GAAgBC,cAAQ,MAAM;AAClC,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,OAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,QAAO,CAAA,IAAA,KAC1C,gBAAA,CAAiB,IAAA,CAAK,aAAA,EAAe,WAAW;AAAA,OAClD;AAAA,IACF;AAEA,IAAA,OAAO,EAAC;AAAA,EACV,CAAA,EAAG,CAAC,QAAA,EAAU,WAAW,CAAC,CAAA;AAE1B,EAAA,uBACEC,cAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,GAAG,SAAA;AAAA,QACH,OAAO,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,cAAA;AAAA,QAChB,SAAA;AAAA,QACA,YAAA;AAAA,QACA,iBAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ,CAAA;AAEO,MAAM,kBAAA,GAAqB,MAChCC,gBAAA,CAAW,eAAe;;AClLrB,MAAM,kBAAA,GAAqBC,2BAAA,CAAOC,+BAAA,CAAU,YAAA,EAAc;AAAA,EAC/D,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,MAAA;AAAA,EAEP,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,MAAA,EAAQ;AAAA,QACN,GAAA,EAAK;AAAA,OACP;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAA,EAAK;AAAA,OACP;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA;AACP;AACF,GACF;AAAA,EAEA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;;ACVM,MAAM,oBAAoB,CAAC;AAAA,EAChC,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAA+C;AAC7C,EAAA,MAAM,EAAE,WAAW,YAAA,EAAc,KAAA,GAAQ,EAAC,EAAG,QAAA,KAAa,kBAAA,EAAmB;AAE7E,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,KAAW,CAAA;AAEjC,EAAA,MAAM,aAAA,GAAgBC,iBAAA;AAAA,IACpB,CAAC,KAAA,KAA+C;AAC9C,MAAA,IAAI,SAAA,EAAW;AAEb,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAEA,MAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,cAAc,SAAS;AAAA,GAC1B;AAEA,EAAA,MAAM,YAAA,GAAeA,iBAAA;AAAA,IACnB,CAAC,KAAA,KAA+C;AAC9C,MAAA,QAAA,CAAS,EAAE,CAAA;AAEX,MAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,IAAI,OAAA,IAAW,SAAA,KAAc,KAAA,IAAS,gBAAA,KAAqB,MAAA,EAAW;AACpE,IAAA,uBACEJ,cAAA,CAACK,oBAAA,EAAA,EAAa,OAAA,EAAO,IAAA,EAAC,iBAAc,SAAA,EAClC,QAAA,kBAAAL,cAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,YAAY,gBAAA,GAAmB,eAAA;AAAA,QACtC,IAAA;AAAA,QACA,OAAA,EAAS,aAAA;AAAA,QACT,aAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU,EAAA;AAAA,QAEV,QAAA,kBAAAA,cAAA,CAACM,iCAAA,EAAA,EAAgB,IAAA,EAAK,OAAA,EAAQ;AAAA;AAAA,KAChC,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEN,cAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,gBAAA;AAAA,MACP,IAAA;AAAA,MACA,OAAA,EAAS,YAAA;AAAA,MAET,QAAA,kBAAAA,cAAA,CAACO,2BAAA,EAAA,EAAU,IAAA,EAAK,OAAA,EAAQ;AAAA;AAAA,GAC1B;AAEJ,CAAA;;ACpEO,MAAM,eAAA,GAAkBL,4BAAOC,+BAAA,EAAW;AAAA,EAC/C,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,GAAA,EAAK,KAAA;AAAA,EAEL,gCAAA,EAAkC;AAAA;AAAA,IAEhC,YAAA,EAAc;AAAA,GAChB;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,QAAA,EAAU,IAAA;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EAEA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,UAAA;AAAA,QACT,YAAA,EAAc,MAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,KAAA;AAAA,QACX,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,UAAA;AAAA,QACT,YAAA,EAAc;AAAA,OAChB;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW,KAAA;AAAA,QACX,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,UAAA;AAAA,QACT,YAAA,EAAc,MAAA;AAAA,QACd,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EAAY;AAAA;AACd;AACF;AAEJ,CAAC,CAAA;;ACMM,MAAM,QAAQ,KAAA,CAAM,UAAA;AAAA,EACzB,CACE;AAAA,IACE,OAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA,GAAO,OAAA;AAAA,IACP,kBAAA,EAAoB,eAAA;AAAA,IACpB,cAAA,EAAgB,WAAA;AAAA,IAChB,WAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA,GAAY,IAAA;AAAA,IACZ,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA;AAAA,IAEA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACoB;AACpB,IAAA,MAAM;AAAA,MACJ,eAAA,EAAiB,YAAA;AAAA,MACjB,KAAA,EAAO,aAAA;AAAA,MACP,QAAA;AAAA,MACA,QAAQ,EAAC;AAAA,MACT,QAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAmB;AAEvB,IAAA,MAAM;AAAA,MACJ,aAAA;AAAA,MACA,eAAA,EAAiB,2BAAA;AAAA,MACjB,WAAA,EAAa,oBAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACLL,wCAAA,EAAoB;AAExB,IAAAU,eAAA,CAAU,MAAM;AACd,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IACd,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,IAAAA,eAAA,CAAU,MAAM;AACd,MAAA,cAAA,CAAe,WAAW,CAAA;AAAA,IAC5B,CAAA,EAAG,CAAC,cAAA,EAAgB,WAAW,CAAC,CAAA;AAEhC,IAAA,MAAM,QAAQ,cAAA,IAAA,IAAA,GAAA,cAAA,GAAkB,aAAA;AAEhC,IAAA,MAAM,cAAA,GAAiB,CACrB,KAAA,KACS;AA1Gf,MAAA,IAAA,EAAA;AA2GM,MAAA,MAAM,UAAU,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA;AAC5B,MAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,aAAA;AAErC,MAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,OAAA,IAAW,IAAA,EAAM;AACxC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,SAAA,CAAU,QAAA,CAAS;AAAA,UACjB,KAAK,OAAA,CAAQ;AAAA,SACd,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,YAAY,MAAA,EAAW;AACzB,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAiD;AACtE,MAAA,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAC7B,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,CAAA,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACEC,eAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,eAAA,EAAe,YAAA;AAAA,QACf,KAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA,EAAU,aAAA;AAAA,QACV,GAAA;AAAA,QAEA,SAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAT,cAAA;AAAA,YAACG,+BAAA,CAAU,KAAA;AAAA,YAAV;AAAA,cACE,GAAG,SAAA;AAAA,cACJ,GAAA,EAAKO,2BAAA,CAAU,CAAC,QAAA,EAAU,GAAG,CAAC,CAAA;AAAA,cAC9B,KAAA,EAAO,WAAA;AAAA,cACP,IAAI,EAAA,IAAA,IAAA,GAAA,EAAA,GAAM,aAAA;AAAA,cACV,kBAAA,EAAkBC,iCAAA;AAAA,gBAChB,eAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,gBAAc,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,oBAAA;AAAA,cAC7B,WAAA,EACE,aAAa,IAAA,IAAQ,QAAA,KAAa,UAAa,KAAA,CAAM,MAAA,KAAW,IAC5D,WAAA,GACA,MAAA;AAAA,cAEN,OAAA,EAAS;AAAA;AAAA,WACX;AAAA,UACC,QAAA;AAAA,0BACDX,cAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,eAAA;AAAA,cACA,gBAAA;AAAA,cACA,gBAAA;AAAA,cACA,SAAA;AAAA,cACA;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;;ACxIO,MAAM,UAAU,KAAA,CAAM,UAAA;AAAA,EAC3B,CAAC,OAAO,UAAA,KAAe;AACrB,IAAA,MAAM,uBAAuB,kBAAA,EAAmB;AAEhD,IAAA,MAAM;AAAA,MACJ,eAAA,EAAiB,YAAA;AAAA,MACjB,QAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,oBAAA;AAEJ,IAAA,uBACEA,cAAA;AAAA,MAACY,mBAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAKF,2BAAA,CAAU,CAAC,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,QACvC,SAAS,MAAM;AACb,UAAA,IACE,CAACG,4BAAA,CAAW,QAAQ,CAAA,IACpB,CAACA,4BAAA,CAAW,YAAY,CAAA,IACxB,CAACA,4BAAA,CAAW,QAAQ,CAAA,EACpB;AACA,YAAA,YAAA,CAAa,IAAI,CAAA;AAAA,UACnB;AAAA,QACF,CAAA;AAAA,QAEA,QAAA,kBAAAb,cAAA;AAAA,UAACc,cAAA;AAAA,UAAA;AAAA,YAMC,WAAA,EAAW,IAAA;AAAA,YACX,cAAA,EAAc,IAAA;AAAA,YACd,MAAA,EAAQ,CAAC,EAAE,GAAA,EAAK,iBAAA,EAAmB,GAAG,YAAA,EAAa,qBACjDd,cAAA,CAACe,+BAAA,CAAU,IAAA,EAAV,EAAe,OAAA,EAAO,IAAA,EAAC,GAAA,EAAK,iBAAA,EAAoB,GAAG,YAAA,EACjD,QAAA,EAAA,KAAA,CAAM,OAAA,KAAY,IAAA,GAAO,KAAA,CAAM,QAAA,mBAAWf,cAAA,CAAC,KAAA,EAAA,EAAO,GAAG,KAAA,EAAO,CAAA,EAC/D;AAAA;AAAA;AAEJ;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;;AChEO,MAAM,oBAAA,GAAuBE,2BAAA,CAAOa,+BAAA,CAAU,GAAA,EAAKC,2CAAoB,CAAA;AAEvE,MAAM,aAAA,GAAgBd,2BAAA,CAAOe,uBAAA,CAAa,OAAA,EAAS;AAAA,EACxD,GAAGC,oCAAA;AAAA,EACH,KAAA,EAAO,oCAAA;AAAA,EACP,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAC,CAAA;;ACbM,MAAM,sBAAsB,MAAoC;AACrE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,MAAM,QAAA,EAA2B;AAGjE,EAAAC,2CAAA,CAAgB,MAAM;AACpB,IAAA,WAAA,CAAY,IAAI,kBAAkB,CAAA;AAAA,EACpC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,QAAA;AACT,CAAA;;ACFO,MAAM,sBAAsB,MAEA;AACjC,EAAA,MAAM,WAAW,mBAAA,EAAoB;AAErC,EAAA,OAAOf,iBAAA;AAAA,IACL,CAAC,QAAA,KACC,QAAA,KAAa,MAAA,GACTgB,qBAAA,gCAAc,KAAA,EAAA,EAAK,QAAA,EAAS,CAAA,EAAQ,QAAQ,CAAA,GAC5C,IAAA;AAAA,IACN,CAAC,QAAQ;AAAA,GACX;AACF,CAAA;;ACCO,MAAM,cAAA,GAAiB,QAAA,CAASC,0BAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA;AACtD,MAAM,8BAAA,GACJ,+CAAA;AAEF,MAAM,WAAA,GAAc,CAClB,OAAA,EACA,GAAA,KACS;AA9BX,EAAA,IAAA,EAAA,EAAA,EAAA;AA8Be,EAAA,OAAA,CAAA,EAAA,GAAA,OAAA,IAAW,UAAQ,EAAA,GAAA,GAAA,CAAI,OAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,CAAS,cAAzC,IAAA,GAAA,EAAA,GAAsD,KAAA;AAAA,CAAA;AA+G9D,MAAM,UAAU,KAAA,CAAM,UAAA;AAAA,EAI3B,CACE;AAAA,IACE,IAAA,GAAO,QAAA;AAAA,IACP,UAAA,GAAa,cAAA;AAAA,IACb,KAAA,GAAQ,QAAA;AAAA,IACR,WAAA,GAAc,CAAA;AAAA,IACd,gBAAA,GAAmB,CAAA;AAAA,IACnB,eAAA,GAAkB,IAAA;AAAA,IAClB,MAAA,GAAS,SAAA;AAAA,IACT,gBAAA,GAAmB,IAAA;AAAA,IACnB,QAAA,GAAW,SAAA;AAAA,IACX,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAG;AAAA,KAEL,UAAA,KACG;AACH,IAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAY,WAAW,SAAA,EAAW,iBAAA,KACpD,kBAAA,EAAmB;AACrB,IAAA,MAAM,eAAeC,wBAAA,EAA0B;AAE/C,IAAA,MAAM,sBAAsB,mBAAA,EAAoB;AAEhD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,oBAAoB,QAAQ,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,OAAA,mBAAUtB,cAAA,CAAC,oBAAA,EAAA,EAAsB,QAAA,EAAS,CAAA;AAEhD,IAAA,uBACEA,cAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACE,GAAG,SAAA;AAAA,QACJ,GAAA,EAAK,SAAA;AAAA,QACL,IAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,MAAA;AAAA,QACA,gBAAA;AAAA,QACA,iBAAiB,CAAA,KAAA,KAAS;AACxB,UAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,YAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,YAAA;AAAA,UACF;AAEA,UAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,cAAA,EAAA;AAKP,UAAA,IAAI,iBAAA,CAAkB,YAAY,IAAA,EAAM;AAIxC,UAAA,MAAM,WAAA,GAAc,6CAAc,QAAA,EAAA,CAAW,WAAA;AAE7C,UAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,KAAA,EAAA;AAAA,QACf,CAAA;AAAA,QACA,GAAA,EAAKU,2BAAA,CAAU,CAAC,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,QACvC,mBAAmB,CAAA,KAAA,KAAS;AAC1B,UAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,UAAA,MAAM,SAAA,GAAY,WAAA,CAAY,MAAA,EAAQ,UAAU,CAAA;AAChD,UAAA,MAAM,SAAA,GAAY,WAAA,CAAY,MAAA,EAAQ,UAAU,CAAA;AAEhD,UAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,YAAA,KAAA,CAAM,cAAA,EAAe;AAAA,UACvB;AAAA,QACF,CAAA;AAAA,QAGA,QAAA,kBAAAV,cAAA,CAACuB,kBAAA,EAAA,EAAoB,IAAA,EAAK,SAAA,EACvB,QAAA,EAAA,QAAA,KAAa,MAAA,mBACZd,eAAA,CAACe,iCAAA,EAAA,EAAW,IAAA,EAAK,QAAA,EAAS,GAAA,EAAK,SAAA,EAC7B,QAAA,EAAA;AAAA,0BAAAxB,cAAA;AAAA,YAACwB,iCAAA,CAAW,QAAA;AAAA,YAAX;AAAA,cACC,GAAA,EAAK;AAAA,gBACH,SAAA,EACE,SAAA,KAAc,MAAA,GACV,MAAA,CAAO,MAAA,CAAA,8BAAA,EAA8B,IAAA,CAAA,CACnC,MAAA,CAAA,OAAO,SAAA,KAAc,QAAA,GACjB,EAAA,CAAG,MAAA,CAAA,SAAA,EAAS,IAAA,CAAA,GACZ,WACN,GAAA,CAAA,GACA;AAAA,eACR;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACAxB,cAAA,CAACwB,iCAAA,CAAW,SAAA,EAAX,EAAqB,WAAA,EAAY,YAChC,QAAA,kBAAAxB,cAAA,CAACwB,iCAAA,CAAW,KAAA,EAAX,EAAiB,CAAA,EACpB;AAAA,SAAA,EACF,IAEA,OAAA,EAEJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;;ACjPO,MAAM,UAAA,GAAatB,2BAAA,CAAOuB,kBAAA,EAAcC,iCAAU,CAAA;;ACQzD,MAAM,YAAA,GAAehC,mBAAA,CAAiC,EAAS,CAAA;AAExD,MAAM,gBAAgB,CAAC;AAAA,EAC5B,QAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEM,cAAA;AAAA,EAAC,YAAA,CAAa,QAAA;AAAA,EAAb;AAAA,IACC,KAAA,EAAO;AAAA,MACL,GAAG;AAAA,KACL;AAAA,IAEC;AAAA;AACH,CAAA;AAGK,MAAM,eAAA,GAAkB,MAAyBC,gBAAA,CAAW,YAAY,CAAA;;ACaxE,MAAM,OAAO,KAAA,CAAM,UAAA;AAAA,EACxB,CACE,EAAE,QAAA,GAAW,KAAA,EAAO,KAAA,EAAO,WAAW,QAAA,EAAU,GAAG,SAAA,EAAU,EAC7D,UAAA,KACG;AACH,IAAA,MAAM,EAAE,eAAA,EAAiB,YAAA,EAAc,GAAG,qBAAA,EAAsB,GAC9D0B,2CAAA,CAAgB,SAAA,EAAW,EAAE,WAAA,EAAa,IAAA,EAAM,CAAA;AAClD,IAAA,MAAM;AAAA,MACJ,WAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,gBAAgB;AAAC,QACtB,kBAAA,EAAmB;AAEvB,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,eAAA,EAAgB;AAEpC,IAAA,MAAM,aAAA,GAAgB5B,cAAQ,MAAc;AAC1C,MAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,QAAA,OAAO,SAAA;AAAA,MACT;AAEA,MAAA,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,EAAA;AAAA,IACnD,CAAA,EAAG,CAAC,SAAA,EAAW,QAAQ,CAAC,CAAA;AAExB,IAAAoB,2CAAA,CAAgB,MAAM;AACpB,MAAA,WAAA;AAAA,QACE,CAAA,SAAA,KAAa,IAAI,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,CAAC;AAAA,OACvE;AAEA,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,CAAA,SAAA,KAAa;AACvB,UAAA,SAAA,CAAU,OAAO,KAAK,CAAA;AACtB,UAAA,OAAO,IAAI,IAAI,SAAS,CAAA;AAAA,QAC1B,CAAC,CAAA;AAAA,MACH,CAAA;AAAA,IACF,GAAG,CAAC,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,aAAa,CAAC,CAAA;AAE/C,IAAA,IACE,UAAA,IACA,YAAY,MAAA,GAAS,CAAA,IACrB,CAAC,gBAAA,CAAiB,aAAA,EAAe,WAAW,CAAA,EAC5C;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAkD;AAxF9E,MAAA,IAAA,EAAA;AAyFM,MAAA,IAAA,CAAA,CACE,0CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,kBAAiB,IAAA,IAAA,CACpC,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,YAAW,IAAA,EACvB;AACA,QAAA,QAAA,CAAS,OAAA,CAAQ,cAAc,QAAA,CAAS;AAAA,UACtC,GAAA,EAAK,WAAW,OAAA,CAAQ;AAAA,SACzB,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,SAAA,CAAU,YAAY,MAAA,EAAW;AACnC,QAAA,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAKA,IAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,aAAa,IAC1C,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA,GAC5B,aAAA,KAAkB,KAAA;AAEtB,IAAA,uBACEV,eAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACE,GAAGmB,gBAAA,CAAW,SAAA,EAAW,qBAAqB,CAAA;AAAA,QAC/C,SAAA,EAAS,IAAA;AAAA,QACT,WAAA,EAAa,KAAA;AAAA,QACb,sBAAA,EAAwBf,6BAAW,YAAY,CAAA;AAAA,QAC/C,QAAA,EAAUA,4BAAA,CAAW,YAAY,CAAA,IAAK,QAAA;AAAA,QACtC,GAAA,EAAK,UAAA;AAAA,QACL,KAAA;AAAA,QACA,OAAA,EAAS,cAAA;AAAA,QACT,eAAA,EAAe,UAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAb,cAAA;AAAA,YAAC6B,uBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,UAAA;AAAA,cACT,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA;AAAA,gCAEzB7B,cAAA,CAAC8B,sCAAA,EAAA,EAAiB,GAAG,KAAA,EAAO;AAAA,eAAA;AAAA,cAG9B,QAAA,kBAAA9B,cAAA;AAAA,gBAAC+B,+BAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,OAAA;AAAA,kBACL,aAAA,EACE,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,SACrB,qBAAA,GACA;AAAA;AAAA;AAER;AAAA,WACF;AAAA,UACC;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;;ACjIO,MAAM,SAAS,CAAC;AAAA,EACrB,UAAA,EAAY,cAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAoC;AAClC,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,kBAAA,EAAmB;AAIzC,EAAA,MAAM,UAAA,GAAa,CAAC,SAAA,IAAa,cAAA;AAEjC,EAAA,uBAAO/B,cAAA,CAACgC,mBAAA,EAAA,EAAY,UAAA,EAAyB,GAAG,SAAA,EAAW,CAAA;AAC7D,CAAA;;ACpBO,MAAM,WAAA,GAAc9B,2BAAA,CAAO+B,WAAA,EAAc,EAAE,CAAA;;ACQ3C,MAAM,KAAA,GAAQ,MAAM,UAAA,CAGzB,CAAC,EAAE,QAAA,EAAU,GAAG,IAAA,EAAK,EAAG,UAAA,KAAe;AACvC,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAa,aAAA,KAAkB,kBAAA,EAAmB;AAEtE,EAAA,MAAM,KAAKC,uBAAA,EAAM;AACjB,EAAA,MAAM,sBAAsB,mBAAA,EAAoB;AAEhD,EAAA,IAAI,iBAAA,GAAoB,IAAA;AAExB,EAAA,IAAI,UAAA,IAAc,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACxC,IAAA,iBAAA,GAAoB,aAAA,CAAc,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,EACpE;AAEA,EAAA,uBACElC,cAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,EAAA,EACrB,8CACCA,cAAA,CAAC,WAAA,EAAA,EAAa,GAAG,IAAA,EAAM,KAAK,UAAA,EACzB,QAAA,EACH,CAAA,GAEA,mBAAA,CAAoB,QAAQ,CAAA,EAEhC,CAAA;AAEJ,CAAC,CAAA;;ACjCM,MAAM,gBAAA,GAAmBE,2BAAA,CAAOiC,gBAAA,EAAYC,uCAAgB,CAAA;;ACG5D,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,CAG9B,CAAC,KAAA,EAAO,UAAA,qBAAepC,cAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,GAAA,EAAK,UAAA,EAAY,CAAE,CAAA;;ACSlE,MAAM,QAAwB,CAAC;AAAA,EACpC,iBAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAM;AACJ,EAAA,MAAM;AAAA,IACJ,QAAQ,EAAC;AAAA,IACT,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA,EAAiB,YAAA;AAAA,IACjB;AAAA,MACE,kBAAA,EAAmB;AACvB,EAAA,MAAM,aAAA,GACJ,CAACa,4BAAA,CAAW,YAAY,CAAA,IAAK,CAACA,4BAAA,CAAW,QAAQ,CAAA,IAAK,CAACA,4BAAA,CAAW,QAAQ,CAAA;AAC5E,EAAA,MAAM,UAAA,GAAaA,4BAAA,CAAW,YAAY,CAAA,IAAKA,6BAAW,QAAQ,CAAA;AAElE,EAAA,MAAM,YAAA,GAAeT,iBAAA;AAAA,IACnB,CAAC,IAAA,KAAuB;AACtB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA;AAAA,UAAS,eACN,SAAA,CAAuB,MAAA,CAAO,CAAAiC,MAAAA,KAASA,WAAU,IAAI;AAAA,SACxD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,EAAE,CAAA;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU,QAAQ;AAAA,GACrB;AAEA,EAAA,MAAM,WAAA,GAAcjC,iBAAA;AAAA,IAClB,CAAC,SAAA,KAAsB;AACrB,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AACvC,MAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,CAAS,aAAA,KAAkB,EAAA,EAAI;AAC3D,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,uBACEJ,cAAA;AAAA,QAACsC,qBAAA;AAAA,QAAA;AAAA,UAEC,QAAA,EAAU,UAAA;AAAA,UACV,UAAU,CAAA,CAAA,KAAK;AACb,YAAA,YAAA,CAAa,SAAS,CAAA;AACtB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,UACpB,CAAA;AAAA,UACA,SAAA,EAAW,aAAA;AAAA,UACX,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAA,iBAAA,EAAiB,GAAA,CAAA,CAAI,MAAA,CAAA,QAAA,CAAS,aAAA,CAAA;AAAA,UAClD,eACE,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,MAAA,GACrB,kBAAkB,MAAA,CAAA,SAAA,CAAA,GAClB,MAAA;AAAA,UAGL,QAAA,EAAA,QAAA,CAAS;AAAA,SAAA;AAAA,QAdL;AAAA,OAeP;AAAA,IAEJ,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,UAAA,EAAY,QAAA,EAAU,cAAc,iBAAiB;AAAA,GACvE;AAEA,EAAA,uBACEtC,cAAA,CAAAuC,mBAAA,EAAA,EACG,QAAA,EAAA,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAC5B,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA,GACrB,WAAA,CAAY,KAAe,CAAA,EACjC,CAAA;AAEJ,CAAA;;ACjFO,MAAM,eAAA,GAAkBrC,2BAAA,CAAOa,+BAAA,CAAU,GAAA,EAAKyB,sCAAe,CAAA;;ACI7D,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,CAG7B,CAAC,OAAO,UAAA,KAAe;AACvB,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAY,GAAI,kBAAA,EAAmB;AAEvD,EAAA,IAAI,UAAA,IAAc,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACxC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,sCAAQ,eAAA,EAAA,EAAiB,GAAG,OAAO,GAAA,EAAK,UAAA,EAAY,eAAW,IAAA,EAAC,CAAA;AAClE,CAAC,CAAA;;AChBM,MAAM,kBAAA,GAAqBtC,2BAAA,CAAOa,+BAAA,CAAU,MAAA,EAAQ;AAAA;AAAA,EAEzD,OAAA,EAAS;AACX,CAAC,CAAA;AAEM,MAAM,qBAAA,GAAwBb,2BAAA,CAAOa,+BAAA,CAAU,GAAA,EAAK;AAAA,EACzD,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAC,CAAA;;ACRM,MAAM,cAAA,GAAiBb,2BAAA,CAAOa,+BAAA,CAAU,GAAA,EAAK;AAAA,EAClD,OAAA,EAAS;AACX,CAAC,CAAA;;ACQM,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,CAG5B,CAAC,OAAO,UAAA,KAAe;AACvB,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAa,aAAA,EAAe,QAAA,KAC9C,kBAAA,EAAmB;AAGrB,EAAA,MAAM,iBAAA,GACJ,CAAC,UAAA,IAAe,UAAA,IAAc,YAAY,MAAA,KAAW,CAAA;AAEvD,EAAA,MAAM,YAAY,iBAAA,GACd,QAAA,CAAS,IAAA,KAAS,CAAA,GAClB,cAAc,MAAA,KAAW,CAAA;AAE7B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOf,cAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,KAAA,EAAO,KAAK,UAAA,EAAY,CAAA;AAAA,EACrD;AAEA,EAAA,OAAO,IAAA;AACT,CAAC,CAAA;;AC5BD,MAAM,iBAAA,GAAoBE,4BAAOuC,6BAAA,EAAa;AAAA,EAC5C,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,4BAAA;AAAA,IACR,eAAA,EAAiB;AAAA;AAErB,CAAC,CAAA;AAEM,MAAM,WAAA,GAAc,KAAA,CAAM,UAAA,CAG/B,CAAC,OAAO,GAAA,KAAQ;AAChB,EAAA,MAAM,EAAE,cAAA,EAAgB,UAAA,EAAW,GAAI,kBAAA,EAAmB;AAE1D,EAAA,MAAM,kBAAA,GAAqBrC,iBAAA;AAAA,IACzB,CAAC,KAAA,KAAqD;AApB1D,MAAA,IAAA,EAAA;AAqBM,MAAA,cAAA,CAAe,KAAA,CAAM,OAAO,KAAK,CAAA;AACjC,MAAA,CAAA,EAAA,GAAA,KAAA,CAAM,aAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAiB,KAAA,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,OAAO,cAAc;AAAA,GACxB;AAEA,EAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,KACS;AA7Bb,IAAA,IAAA,EAAA,EAAA,EAAA;AA8BI,IAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,UAAA,CAAW,OAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,aAAA;AAAA,QACpC;AAAA,OAAA;AAEF,MAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,KAAA,EAAA;AAAA,IACb;AAEA,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,cAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAkB,KAAA,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACEJ,cAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX,QAAA,EAAU;AAAA;AAAA,GACZ;AAEJ,CAAC,CAAA;;AC7CM,MAAM,mBAAA,GAAsBE,4BAAOwC,mBAAA,EAAe;AAAA,EACvD,GAAGhB,iCAAA;AAAA,EACH,OAAA,EAAS,MAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAC,CAAA;;ACoCM,MAAM,gBAAgB,CAAC;AAAA,EAC5B,OAAA,GAAU,IAAA;AAAA,EACV,IAAA,GAAO,UAAA;AAAA,EACP,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,KAA8C;AAC5C,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,YAAA,KAAiB,kBAAA,EAAmB;AAOrE,EAAA,MAAM,iBAAiBiB,yBAAA,EAAoB;AAC3C,EAAA,MAAM,sBAAsB,KAAA,CAAM,WAAA;AAAA,IAChC,CAAC,CAAA,KAAwB;AACvB,MAAA,MAAM,EAAA,GAAK,EAAE,aAAA,CAAc,EAAA;AAC3B,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,WAAA,CAAY,EAAA,CAAA;AAAA,MAC9B;AACA,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,WAAA;AAAA,IACxB,CAAC,EAAA,KAA2B;AAC1B,MAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,EAAA,IAAM,IAAA,EAAM;AACnC,QAAA,EAAA,CAAG,QAAA,GAAW,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,CAAY,MAAM;AAC1C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,YAAY,CAAC,CAAA;AAE9B,EAAA,IACE,SAAA,KAAc,UACd,UAAA,IACA,WAAA,KAAgB,MAChB,CAAC,gBAAA,CAAiB,SAAA,EAAW,WAAW,CAAA,EACxC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,QAAA;AAAA,IACA,sBAAA,EAAwB,QAAA;AAAA,IACxB,IAAA;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,IACT,OAAA,EAAS,QAAA,KAAa,IAAA,GAAO,mBAAA,GAAsB;AAAA,GACrD;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACE3C,cAAA;AAAA,MAAC4C,mBAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,GAAA,EAAK,WAAA;AAAA,QACL,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AAEA,EAAA,sCACG,mBAAA,EAAA,EAAqB,GAAG,cAAA,EAAgB,GAAA,EAAK,aAC3C,QAAA,EACH,CAAA;AAEJ,CAAA;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;ACL5B,MAAM,OAAO,KAAA,CAAM,UAAA;AAAA,EAIjB,CACE;AAAA,IACE,QAAA,GAAW,IAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,UAAA,KACG;AAnIP,IAAA,IAAA,EAAA;AAoII,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAQ,EAAC;AAAA,MACT,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA,EAAiB,YAAA;AAAA,MACjB,QAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAmB;AAEvB,IAAA,MAAM;AAAA,MACJ,WAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,QACE9C,wCAAA,EAAuC;AAE3C,IAAAU,eAAA,CAAU,MAAM;AACd,MAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAc,QAAA,CAAA;AACd,MAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAc,QAAA,CAAA;AACd,MAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAkB,YAAA,CAAA;AAClB,MAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAc,QAAA,CAAA;AAAA,IAChB,CAAA,EAAG;AAAA,MACD,QAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAIqC,6CAAA,EAAsB;AACpD,IAAA,MAAM,QAAA,GAAWC,oCAAY,SAAS,CAAA;AAEtC,IAAAtC,eAAA,CAAU,MAAM;AACd,MAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,CAAC,SAAA,EAAW;AACnC,QAAA,iBAAA,EAAkB;AAAA,MACpB;AAAA,IACF,CAAA,EAAG,CAAC,iBAAA,EAAmB,SAAA,EAAW,QAAQ,CAAC,CAAA;AAE3C,IAAA,MAAM,kBAAA,GAAqB,CAAC,QAAA,KAAsC;AAEhE,MAAA,IAAI,CAAC,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACxC,QAAA,QAAA,CAAS,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,MACtB,WAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,QAAA,QAAA,CAAS,CAAC,QAAQ,CAAC,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC6B,MAAAA,KAAyB;AAC7C,MAAA,IAAI,CAACxB,4BAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,QAAA,YAAA,CAAawB,MAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,gBAAgB,OAAA,CAAA,CAAQ,EAAA,GAAA,UAAA,CAAW,OAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,QAAQ,MAAA,CAAO,CAAA;AAEjE,IAAA,MAAM,cAAA,GAAiB,CACrB,SAAA,KACgC;AAChC,MAAA,IAAI,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACxC,QAAA,OAAQ,KAAA,CAAmB,GAAA,CAAI,CAAAU,UAAAA,qBAC7B/C,cAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO+C,UAAAA,EAC5B,QAAA,EAAAA,UAAAA,EAAAA,EADUA,UAEb,CACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,uBACE/C,cAAA,CAAC,QAAA,EAAA,EAAiC,KAAA,EAAO,SAAA,EACtC,uBADU,SAEb,CAAA;AAAA,MAEJ;AAAA,IACF,CAAA;AAEA,IAAA,uCACGiB,uBAAA,CAAa,IAAA,EAAb,EAAkB,IAAA,EAAM,WAAW,YAAA,EAClC,QAAA,EAAA;AAAA,sBAAAjB,cAAA;AAAA,QAACgD,sBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS,YAAA;AAAA,UACT,aAAA,EAAe,KAAA;AAAA,UACf,gBAAA,EAAkB,kBAAA;AAAA,UAElB,QAAA,kBAAAhD,cAAA;AAAA,YAAC,qBAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,UAAA;AAAA,cACJ,GAAG,SAAA;AAAA,cACJ,GAAA,EAAK,SAAA;AAAA,cACL,mBAAA,EAAkB,QAAA;AAAA,cAEjB;AAAA;AAAA;AACH;AAAA,OACF;AAAA,MACC,aAAA,oBACCA,cAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UACA,YAAA,EAAa,KAAA;AAAA,UACb,IAAA;AAAA,UACA,QAAA,EAAU,EAAA;AAAA,UACV,aAAA,EAAY,MAAA;AAAA,UACZ,GAAA,EAAK,cAAA;AAAA,UACL,QAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA,EAAe,YAAA;AAAA,UACf,KAAA;AAAA,UAGA,UAAU,MAAM;AAAA,UAAC,CAAA;AAAA,UAEhB,gBAAM,MAAA,KAAW,CAAA,mBAChBA,cAAA,CAAC,QAAA,EAAA,EAAO,OAAM,EAAA,EAAG,CAAA;AAAA;AAAA,YAGjB,eAAe,KAAK;AAAA;AAAA;AAAA;AAExB,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF,CAAA;AAEO,MAAM,WAAW,KAAA,CAAM,UAAA;AAAA,EAI5B,CACE;AAAA,IACE,eAAA,EAAiB,YAAA;AAAA,IACjB,WAAA,GAAc,KAAA;AAAA,IACd,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,UAAA,GAAa,IAAA;AAAA,IACb,GAAG;AAAA,KAEL,UAAA,qBAEAA,cAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,YAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA,EAAe,YAAA;AAAA,MACf,SAAA;AAAA,MACA,UAAA;AAAA,MAEA,QAAA,kBAAAA,cAAA,CAACiD,+CACC,QAAA,kBAAAjD,cAAA,CAAC,IAAA,EAAA,EAAM,GAAG,SAAA,EAAW,KAAA,EAAc,GAAA,EAAK,UAAA,EAAY,CAAA,EACtD;AAAA;AAAA;AAGN;AAiBA,QAAA,CAAS,MAAA,GAAS,MAAA;AAClB,QAAA,CAAS,OAAA,GAAU,OAAA;AACnB,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,QAAA,CAAS,OAAA,GAAU,OAAA;AACnB,QAAA,CAAS,IAAA,GAAO,IAAA;AAChB,QAAA,CAAS,aAAA,GAAgB,aAAA;AACzB,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,QAAA,CAAS,UAAA,GAAa,UAAA;AACtB,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,QAAA,CAAS,SAAA,GAAY,SAAA;AACrB,QAAA,CAAS,QAAA,GAAW,QAAA;AACpB,QAAA,CAAS,WAAA,GAAc,WAAA;;;;;;;;;;"}
1
+ {"version":3,"file":"main.js","sources":["../src/utils.ts","../src/hooks/use-combobox-context.tsx","../src/partials/trigger-action-button.styled.tsx","../src/partials/input-action-button.tsx","../src/partials/input.styled.tsx","../src/partials/input.tsx","../src/partials/trigger.tsx","../src/partials/content.styled.tsx","../src/hooks/use-document-fragment.ts","../src/hooks/use-invisible-content.tsx","../src/partials/content.tsx","../src/partials/item.styled.tsx","../src/hooks/use-group-context.tsx","../src/partials/item.tsx","../src/partials/portal.tsx","../src/partials/group.styled.tsx","../src/partials/group.tsx","../src/partials/group-label.styled.tsx","../src/partials/group-label.tsx","../src/partials/value.tsx","../src/partials/separator.styled.tsx","../src/partials/separator.tsx","../src/combobox.styled.tsx","../src/partials/no-result.styled.tsx","../src/partials/no-result.tsx","../src/partials/search-input.tsx","../src/partials/composite-item.styled.tsx","../src/partials/composite-item.tsx","../src/combobox.tsx"],"sourcesContent":["export function searchQueryMatch(\n displayedText: string,\n searchValue: string\n): boolean {\n return displayedText.toLowerCase().includes(searchValue.toLowerCase())\n}\n","import React, {\n createContext,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { useControllableState } from '@radix-ui/react-use-controllable-state'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\nimport type { Direction } from '../types'\nimport type { StyledBaseInputProps } from '../partials/input.styled'\nimport { searchQueryMatch } from '../utils'\n\ninterface ItemData {\n displayedText: string\n groupId: string | undefined\n}\n\ninterface ComboboxProviderSharedProps extends FormElementProps {\n value?: string[] | string\n direction?: Direction\n autoFilter: boolean\n}\n\ninterface ComboboxContextProps extends ComboboxProviderSharedProps {\n setOpenState: React.Dispatch<React.SetStateAction<boolean | undefined>>\n openState: boolean\n externalOpenedRef: React.RefObject<boolean>\n\n setValue: React.Dispatch<React.SetStateAction<string[] | string | undefined>>\n\n triggerRef: React.RefObject<HTMLInputElement>\n inputRef: React.RefObject<HTMLInputElement>\n contentRef: React.RefObject<HTMLDivElement>\n\n searchValue: string\n setSearchValue: React.Dispatch<React.SetStateAction<string | undefined>>\n\n placeholder?: string\n setPlaceholder: React.Dispatch<React.SetStateAction<string | undefined>>\n\n size: StyledBaseInputProps['size']\n setSize: React.Dispatch<React.SetStateAction<StyledBaseInputProps['size']>>\n\n /**\n * includes all visible and hidden items to render Chips and get filtered items\n */\n itemsMap: Map<string, ItemData>\n setItemsMap: React.Dispatch<React.SetStateAction<Map<string, ItemData>>>\n\n /**\n * @returns filtered items based on itemsMap\n * @returns empty array when searchValue is empty or auto filtering is disabled\n */\n filteredItems: ItemData[]\n}\n\ninterface ComboboxProviderProps extends ComboboxProviderSharedProps {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n\n defaultValue?: string[] | string\n onValueChange?: (value: string[] | string) => void\n\n searchValue?: string\n onSearchValueChange?: (value: string) => void\n}\n\nconst ComboboxContext = createContext<ComboboxContextProps>({} as any)\n\nexport const ComboboxProvider = ({\n children,\n open: openProp,\n defaultOpen,\n onOpen,\n onClose,\n valid,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange,\n searchValue: searchValueProp,\n onSearchValueChange,\n autoFilter,\n ...restProps\n}: ComboboxProviderProps): JSX.Element => {\n const triggerRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const externalOpenedRef = useRef(false)\n\n // todo MDS-1141: remove default false value\n const [openState = false, setOpenState] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: state => {\n if (state) {\n externalOpenedRef.current = true\n onOpen?.()\n } else {\n externalOpenedRef.current = false\n onClose?.()\n }\n },\n })\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValueProp,\n onChange: onValueChange,\n })\n\n // todo MDS-1141: remove default false value\n const [searchValue = '', setSearchValue] = useControllableState({\n prop: searchValueProp,\n defaultProp: '',\n onChange: onSearchValueChange,\n })\n\n const [size, setSize] = useState<StyledBaseInputProps['size']>()\n const [placeholder, setPlaceholder] = useState<string | undefined>()\n\n const [itemsMap, setItemsMap] = useState<Map<string, ItemData>>(new Map())\n\n const { valid: formFieldValid } = useFormFieldContext()\n\n const filteredItems = useMemo(() => {\n if (searchValue.length > 0) {\n return Array.from(itemsMap.values()).filter(item =>\n searchQueryMatch(item.displayedText, searchValue)\n )\n }\n\n return []\n }, [itemsMap, searchValue])\n\n return (\n <ComboboxContext.Provider\n value={{\n ...restProps,\n valid: valid ?? formFieldValid,\n openState,\n setOpenState,\n externalOpenedRef,\n value,\n setValue,\n triggerRef,\n inputRef,\n contentRef,\n autoFilter,\n searchValue,\n setSearchValue,\n itemsMap,\n setItemsMap,\n filteredItems,\n placeholder,\n setPlaceholder,\n size,\n setSize,\n }}\n >\n {children}\n </ComboboxContext.Provider>\n )\n}\n\nexport const useComboboxContext = (): ComboboxContextProps =>\n useContext(ComboboxContext)\n","import type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\n\nexport const StyledActionButton = styled(BaseInput.ActionButton, {\n position: 'absolute',\n right: '$100',\n\n variants: {\n size: {\n medium: {\n top: '1px',\n },\n large: {\n top: '5px',\n },\n 'x-large': {\n top: '9px',\n },\n },\n },\n\n defaultVariants: {\n size: 'large',\n },\n})\n\nexport type StyledActionButtonProps = StrictComponentProps<\n typeof StyledActionButton\n>\n","import React, { useCallback } from 'react'\nimport { IconChevronDown, IconCross } from '@mirohq/design-system-icons'\nimport { Trigger as RadixTrigger } from '@radix-ui/react-popover'\n\nimport type { StyledActionButtonProps } from './trigger-action-button.styled'\nimport { StyledActionButton } from './trigger-action-button.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport type InputActionButtonProps = Omit<StyledActionButtonProps, 'label'> & {\n openActionLabel: string\n closeActionLabel: string\n clearable?: boolean\n clearActionLabel?: string\n}\n\nexport const InputActionButton = ({\n openActionLabel,\n closeActionLabel,\n clearActionLabel,\n clearable,\n size,\n}: InputActionButtonProps): React.ReactNode => {\n const { openState, setOpenState, value = [], setValue } = useComboboxContext()\n\n const isEmpty = value.length === 0\n\n const onToggleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (openState) {\n // open action will be performed by radix since it's RadixTrigger\n setOpenState(false)\n }\n\n event.stopPropagation()\n },\n [setOpenState, openState]\n )\n\n const onClearClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n setValue([])\n\n event.stopPropagation()\n },\n [setValue]\n )\n\n if (isEmpty || clearable === false || clearActionLabel === undefined) {\n return (\n <RadixTrigger asChild aria-haspopup='listbox'>\n <StyledActionButton\n label={openState ? closeActionLabel : openActionLabel}\n size={size}\n onClick={onToggleClick}\n aria-hidden\n tabIndex={-1}\n >\n <IconChevronDown size='small' />\n </StyledActionButton>\n </RadixTrigger>\n )\n }\n\n return (\n <StyledActionButton\n label={clearActionLabel}\n size={size}\n onClick={onClearClick}\n >\n <IconCross size='small' />\n </StyledActionButton>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport type { ComponentPropsWithRef } from 'react'\n\nexport const StyledBaseInput = styled(BaseInput, {\n flexWrap: 'wrap',\n flexGrow: 1,\n gap: '$50',\n\n '&[data-valid], &[data-invalid]': {\n // we don't need a bigger padding here as Input component will render its own icon\n paddingRight: '$100',\n },\n\n '& input': {\n minWidth: '$8',\n flexBasis: 0,\n flexGrow: 1,\n },\n\n variants: {\n size: {\n medium: {\n minHeight: '$8',\n height: 'auto',\n padding: '3px $100',\n paddingRight: '$500',\n fontSize: '$175',\n },\n large: {\n minHeight: '$10',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n },\n 'x-large': {\n minHeight: '$12',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n fontSize: '$200',\n lineHeight: '$500',\n },\n },\n },\n})\n\nexport type StyledBaseInputProps = ComponentPropsWithRef<typeof StyledBaseInput>\n","import { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type {\n BaseInputProps,\n BaseInputStyledProps,\n} from '@mirohq/design-system-base-input'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport { mergeRefs, stringAttrValue } from '@mirohq/design-system-utils'\nimport React, { useEffect } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { InputActionButton } from './input-action-button'\nimport { StyledBaseInput } from './input.styled'\n\nexport type InputProps = Omit<BaseInputStyledProps, 'size'> & {\n /**\n * The size of the input.\n * @default 'large'\n */\n size?: BaseInputProps['size']\n\n /**\n * The content that will be rendered inside the Combobox.Input when no value or\n * defaultValue is set.\n */\n placeholder?: string\n\n /**\n * The label text for Input's action button when Combobox is empty and closed. Will be rendered in a Tooltip.\n */\n openActionLabel: string\n\n /**\n * The label text for Input's action button when Combobox is empty and open. Will be rendered in a Tooltip.\n */\n closeActionLabel: string\n\n /**\n * Show a button to clear the Combobox value.\n * @default true\n */\n clearable?: boolean\n} & (\n | { clearable: false; clearActionLabel?: never }\n | {\n /**\n * The label text for Input's action button when Combobox has values selected. Will be rendered in a Tooltip.\n */\n clearActionLabel: string\n }\n )\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n onFocus,\n id,\n children,\n size = 'large',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n placeholder,\n openActionLabel,\n closeActionLabel,\n clearable = true,\n clearActionLabel,\n onChange,\n css,\n // @ts-expect-error className required when extending the component with styled()\n className,\n ...restProps\n },\n ref\n ): React.ReactNode => {\n const {\n 'aria-disabled': ariaDisabled,\n valid: comboboxValid,\n disabled,\n value = [],\n readOnly,\n triggerRef,\n inputRef,\n searchValue,\n setSearchValue,\n setSize,\n setPlaceholder,\n } = useComboboxContext()\n\n const {\n formElementId,\n ariaDescribedBy: formFieldContextDescribedBy,\n ariaInvalid: formFieldAriaInvalid,\n valid: formFieldValid,\n } = useFormFieldContext()\n\n useEffect(() => {\n setSize(size)\n }, [size, setSize])\n\n useEffect(() => {\n setPlaceholder(placeholder)\n }, [setPlaceholder, placeholder])\n\n const valid = formFieldValid ?? comboboxValid\n\n const scrollIntoView = (\n event: React.FocusEvent<HTMLInputElement>\n ): void => {\n const trigger = triggerRef?.current\n const baseInput = inputRef?.current?.parentElement\n\n if (baseInput != null && trigger != null) {\n event.preventDefault()\n baseInput.scrollTo({\n top: trigger.scrollHeight,\n })\n }\n\n if (onFocus !== undefined) {\n onFocus(event)\n }\n }\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(e.target.value)\n onChange?.(e)\n }\n\n return (\n <StyledBaseInput\n aria-disabled={ariaDisabled}\n valid={valid}\n disabled={disabled}\n readOnly={readOnly}\n size={size}\n onChange={onInputChange}\n css={css}\n // @ts-expect-error className required when extending the component with styled()\n className={className}\n >\n <BaseInput.Input\n {...restProps}\n ref={mergeRefs([inputRef, ref])}\n value={searchValue}\n id={id ?? formElementId}\n aria-describedby={stringAttrValue(\n ariaDescribedBy,\n formFieldContextDescribedBy\n )}\n aria-invalid={ariaInvalid ?? formFieldAriaInvalid}\n placeholder={\n children === null || children === undefined || value.length === 0\n ? placeholder\n : undefined\n }\n onFocus={scrollIntoView}\n />\n {children}\n <InputActionButton\n openActionLabel={openActionLabel}\n closeActionLabel={closeActionLabel}\n clearActionLabel={clearActionLabel}\n clearable={clearable}\n size={size}\n />\n </StyledBaseInput>\n )\n }\n)\n","import { Combobox as AriakitComboboxTrigger } from '@ariakit/react'\nimport { booleanify, mergeRefs } from '@mirohq/design-system-utils'\nimport { Anchor as RadixAnchor } from '@radix-ui/react-popover'\nimport type { ElementRef } from 'react'\nimport React from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { InputProps } from './input'\nimport { Input } from './input'\n\ninterface TriggerAsChildProps {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild: true\n /**\n * The content that will be rendered inside the Combobox.Trigger in stead of the Combobox.Input, when asChild is true.\n */\n children: React.ReactNode\n}\n\ntype TriggerDefaultProps = InputProps & {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild?: false\n}\n\nexport type TriggerProps = TriggerAsChildProps | TriggerDefaultProps\n\nexport const Trigger = React.forwardRef<ElementRef<'div'>, TriggerProps>(\n (props, forwardRef) => {\n const comboboxContextProps = useComboboxContext()\n\n const {\n 'aria-disabled': ariaDisabled,\n disabled,\n readOnly,\n triggerRef,\n setOpenState,\n } = comboboxContextProps\n\n return (\n <RadixAnchor\n ref={mergeRefs([triggerRef, forwardRef])}\n onClick={() => {\n if (\n !booleanify(disabled) &&\n !booleanify(ariaDisabled) &&\n !booleanify(readOnly)\n ) {\n setOpenState(true)\n }\n }}\n >\n <AriakitComboboxTrigger\n // Ariakit's default `canShow` reads `event.currentTarget.value.length`\n // which crashes when the trigger is a non-input element (e.g. asChild\n // with a div or chip). Setting these to `true` bypasses `canShow`\n // entirely. Open state is already managed by RadixAnchor's onClick.\n // See: https://ariakit.org/reference/combobox#showonclick\n showOnClick\n showOnKeyPress\n render={({ ref: ariakitTriggerRef, ...ariakitProps }) => (\n <Primitive.span asChild ref={ariakitTriggerRef} {...ariakitProps}>\n {props.asChild === true ? props.children : <Input {...props} />}\n </Primitive.span>\n )}\n />\n </RadixAnchor>\n )\n }\n)\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n contentStyles,\n itemsContainerStyles,\n} from '@mirohq/design-system-base-select'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledItemsContainer = styled(Primitive.div, itemsContainerStyles)\n\nexport const StyledContent = styled(RadixPopover.Content, {\n ...contentStyles,\n width: 'var(--radix-popover-trigger-width)',\n overflowY: 'auto',\n boxSizing: 'border-box',\n})\n\nexport type StyledContentProps = StrictComponentProps<typeof StyledContent>\n","import React from 'react'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\n\nexport const useDocumentFragment = (): DocumentFragment | undefined => {\n const [fragment, setFragment] = React.useState<DocumentFragment>()\n\n // we need `useLayoutEffect` here because `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment())\n }, [])\n\n return fragment\n}\n","import React, { useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useDocumentFragment } from './use-document-fragment'\n\n/**\n * Render content in DocumentFragment so items can send its text value to context,\n * otherwise we will have empty chips.\n * Content won't be visible in DOM.\n */\nexport const useInvisibleContent = (): ((\n children: React.ReactNode\n) => React.ReactElement | null) => {\n const fragment = useDocumentFragment()\n\n return useCallback(\n (children: React.ReactNode): React.ReactElement | null =>\n fragment !== undefined\n ? createPortal(<div>{children}</div>, fragment)\n : null,\n [fragment]\n )\n}\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { mergeRefs } from '@mirohq/design-system-utils'\nimport { ScrollArea } from '@mirohq/design-system-scroll-area'\nimport { theme } from '@mirohq/design-system-stitches'\nimport type { CSSProperties } from '@stitches/react'\nimport {\n ComboboxList as AriakitComboboxList,\n useComboboxContext as useAriakitComboboxContext,\n} from '@ariakit/react'\n\nimport { StyledContent, StyledItemsContainer } from './content.styled'\nimport type { StyledContentProps } from './content.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type {\n Align,\n Overflow,\n PointerDownOutsideEvent,\n Side,\n Sticky,\n} from '../types'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\n\nexport const CONTENT_OFFSET = parseInt(theme.space[50])\nconst RADIX_CONTENT_AVAILABLE_HEIGHT =\n 'var(--radix-popover-content-available-height)'\n\nconst isInsideRef = (\n element: Element | null,\n ref: React.RefObject<Element>\n): boolean => (element != null && ref.current?.contains(element)) ?? false\n\nexport interface ContentProps extends StyledContentProps {\n /**\n * Combobox's content.\n */\n children?: ReactNode\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onCloseAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves into the component after opening.\n * It can be prevented by calling event.preventDefault().\n */\n onOpenAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n\n /**\n * Event handler called when a pointer event occurs outside the bounds of the\n * component. It can be prevented by calling event.preventDefault.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void\n\n /**\n * The preferred side of the anchor to render against when open. Will be\n * reversed when collisions occur and avoidCollisions is enabled.\n * @default 'bottom'\n */\n side?: Side\n\n /**\n * The distance in pixels from the anchor.\n * @default CONTENT_OFFSET\n */\n sideOffset?: number\n\n /**\n * The preferred alignment against the anchor. May change when collisions\n * occur.\n * @default 'center'\n */\n align?: Align\n\n /**\n * An offset in pixels from the \"start\" or \"end\" alignment options.\n * @default 0\n */\n alignOffset?: number\n\n /**\n * When true, overrides the side and align preferences to prevent collisions\n * with boundary edges.\n * @default true\n */\n avoidCollisions?: boolean\n\n /**\n * The element used as the collision boundary. By default this is the\n * viewport, though you can provide additional element(s) to be included in\n * this check.\n */\n collisionBoundary?: Element | null\n\n /**\n * The distance in pixels from the boundary edges where collision detection\n * should occur. Accepts a number (same for all sides), or a partial padding\n * object, for example: { top: 20, left: 20 }.\n * @default 0\n */\n collisionPadding?: number | Partial<Record<Side, number>>\n\n /**\n * The sticky behavior on the align axis. \"partial\" will keep the content in the\n * boundary as long as the trigger is at least partially in the boundary whilst\n * \"always\" will keep the content in the boundary regardless.\n * @default 'partial'\n */\n sticky?: Sticky\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n * @default true\n */\n hideWhenDetached?: boolean\n\n /**\n * The max height for the content.\n */\n maxHeight?: CSSProperties['maxHeight']\n\n /**\n * Setting overflow as \"visible\" means that the content can extend beyond\n * its collision boundary without any clipping or scrolling being\n * applied.\n * When set to \"auto,\" a scrollbar is added if the content exceeds its\n * boundaries. If no maxHeight is defined, it will be automatically adjusted\n * to fit the remaining space between the trigger and the boundary edge.\n * @default 'visible'\n */\n overflow?: Overflow\n}\n\nexport const Content = React.forwardRef<\n ElementRef<typeof StyledContent>,\n ContentProps\n>(\n (\n {\n side = 'bottom',\n sideOffset = CONTENT_OFFSET,\n align = 'center',\n alignOffset = 0,\n collisionPadding = 0,\n avoidCollisions = true,\n sticky = 'partial',\n hideWhenDetached = true,\n overflow = 'visible',\n maxHeight,\n children,\n onOpenAutoFocus,\n ...restProps\n },\n forwardRef\n ) => {\n const { triggerRef, contentRef, direction, openState, externalOpenedRef } =\n useComboboxContext()\n const ariakitStore = useAriakitComboboxContext()\n\n const getInvisibleContent = useInvisibleContent()\n\n if (!openState) {\n return getInvisibleContent(children)\n }\n\n const content = <StyledItemsContainer>{children}</StyledItemsContainer>\n\n return (\n <StyledContent\n {...restProps}\n dir={direction}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionPadding={collisionPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n onOpenAutoFocus={event => {\n if (onOpenAutoFocus != null) {\n onOpenAutoFocus(event)\n return\n }\n\n event?.preventDefault()\n\n // Skip auto-focus when opened via defaultOpen — Radix's onChange\n // doesn't fire for the initial default, so externalOpenedRef stays false.\n // This avoids moving focus when no user interaction has occurred.\n if (externalOpenedRef.current !== true) return\n\n // Focus the base element (input or custom trigger) so arrow keys\n // work immediately without requiring an extra keypress.\n const baseElement = ariakitStore?.getState().baseElement\n\n baseElement?.focus()\n }}\n ref={mergeRefs([forwardRef, contentRef])}\n onInteractOutside={event => {\n const target = event.target as Element | null\n const isTrigger = isInsideRef(target, triggerRef)\n const isContent = isInsideRef(target, contentRef)\n\n if (isTrigger || isContent) {\n event.preventDefault()\n }\n }}\n >\n {/* we have to specify role here otherwise it would be overwritten by Radix.Content */}\n <AriakitComboboxList role='listbox'>\n {overflow === 'auto' ? (\n <ScrollArea type='always' dir={direction}>\n <ScrollArea.Viewport\n css={{\n maxHeight:\n maxHeight !== undefined\n ? `min(${RADIX_CONTENT_AVAILABLE_HEIGHT}, ${\n typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : maxHeight\n })`\n : RADIX_CONTENT_AVAILABLE_HEIGHT,\n }}\n >\n {content}\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea>\n ) : (\n content\n )}\n </AriakitComboboxList>\n </StyledContent>\n )\n }\n)\n","import { ComboboxItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledItem = styled(ComboboxItem, itemStyles)\n\nexport type StyledItemProps = StrictComponentProps<typeof StyledItem>\n","import React, { createContext, useContext } from 'react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\ninterface GroupProviderSharedProps extends FormElementProps {\n groupId?: string\n}\n\ninterface GroupContextProps extends GroupProviderSharedProps {}\n\ninterface GroupProviderProps extends GroupProviderSharedProps {\n children: React.ReactNode\n}\n\nconst GroupContext = createContext<GroupContextProps>({} as any)\n\nexport const GroupProvider = ({\n children,\n ...restProps\n}: GroupProviderProps): JSX.Element => (\n <GroupContext.Provider\n value={{\n ...restProps,\n }}\n >\n {children}\n </GroupContext.Provider>\n)\n\nexport const useGroupContext = (): GroupContextProps => useContext(GroupContext)\n","import React, { useMemo } from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { ComboboxItemCheck as AriakitComboboxItemCheck } from '@ariakit/react'\nimport { mergeProps } from '@react-aria/utils'\nimport { useAriaDisabled } from '@mirohq/design-system-use-aria-disabled'\nimport { IconCheckMark } from '@mirohq/design-system-icons'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\nimport { StyledItemCheck } from '@mirohq/design-system-base-select'\n\nimport { StyledItem } from './item.styled'\nimport type { StyledItemProps } from './item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { useGroupContext } from '../hooks/use-group-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface ItemProps extends StyledItemProps {\n /**\n * The value given as data when submitted with a name.\n */\n value: string\n\n /**\n * When true, prevents the user from interacting with the item.\n * @default false\n */\n disabled?: boolean\n\n /**\n * Optional text used for typeahead purposes. By default the typeahead\n * behavior will use the Combobox's item text. Use this when the content is\n * complex, or you have non-textual content inside.\n */\n textValue?: string\n\n /**\n * Item's content.\n */\n children?: ReactNode\n}\n\nexport const Item = React.forwardRef<ElementRef<typeof StyledItem>, ItemProps>(\n (\n { disabled = false, value, textValue, children, ...restProps },\n forwardRef\n ) => {\n const { 'aria-disabled': ariaDisabled, ...restAriaDisabledProps } =\n useAriaDisabled(restProps, { allowArrows: true })\n const {\n searchValue,\n autoFilter,\n setItemsMap,\n triggerRef,\n inputRef,\n value: comboboxValue = [],\n } = useComboboxContext()\n\n const { groupId } = useGroupContext()\n\n const displayedText = useMemo((): string => {\n if (textValue !== undefined) {\n return textValue\n }\n\n return typeof children === 'string' ? children : ''\n }, [textValue, children])\n\n useLayoutEffect(() => {\n setItemsMap(\n prevState => new Map(prevState.set(value, { displayedText, groupId }))\n )\n\n return () => {\n setItemsMap(prevState => {\n prevState.delete(value)\n return new Map(prevState)\n })\n }\n }, [setItemsMap, groupId, value, displayedText])\n\n if (\n autoFilter &&\n searchValue.length > 0 &&\n !searchQueryMatch(displayedText, searchValue)\n ) {\n return null\n }\n\n const scrollIntoView = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (\n inputRef?.current?.parentElement != null &&\n triggerRef?.current != null\n ) {\n inputRef.current.parentElement.scrollTo({\n top: triggerRef.current.scrollHeight,\n })\n }\n\n if (restProps.onClick !== undefined) {\n restProps.onClick(event)\n }\n }\n\n // todo MDS-1142 find a better way to fix blinking.\n // We need to use custom state because Ariakit changes its state internally on click even for controlled Combobox\n // and it case `aria-selected` value and checkmark to blink.\n const isSelected = Array.isArray(comboboxValue)\n ? comboboxValue.includes(value)\n : comboboxValue === value\n\n return (\n <StyledItem\n {...mergeProps(restProps, restAriaDisabledProps)}\n focusable\n hideOnClick={false}\n accessibleWhenDisabled={booleanify(ariaDisabled)}\n disabled={booleanify(ariaDisabled) || disabled}\n ref={forwardRef}\n value={value}\n onClick={scrollIntoView}\n aria-selected={isSelected}\n >\n <AriakitComboboxItemCheck\n checked={isSelected}\n render={({ style, ...props }) => (\n // AriakitComboboxItemCheck adds its owm inline styles which we want to omit here\n <StyledItemCheck {...props} />\n )}\n >\n <IconCheckMark\n size='small'\n data-testid={\n process.env.NODE_ENV === 'test'\n ? 'combobox-item-check'\n : undefined\n }\n />\n </AriakitComboboxItemCheck>\n {children}\n </StyledItem>\n )\n }\n)\n","import React from 'react'\nimport type { PopoverPortalProps } from '@radix-ui/react-popover'\nimport { Portal as RadixPortal } from '@radix-ui/react-popover'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface PortalProps extends PopoverPortalProps {\n /**\n * Specify a container element to portal the content into.\n */\n container?: HTMLElement | null\n}\n\nexport const Portal = ({\n forceMount: forceMountProp,\n ...restProps\n}: PortalProps): React.ReactNode => {\n const { openState } = useComboboxContext()\n\n // We always need to render content with items to be able to render Chips in Value,\n // but without forceMount Radix will not render Portal when Popover is closed\n const forceMount = !openState || forceMountProp\n\n return <RadixPortal forceMount={forceMount} {...restProps} />\n}\n","import { Group as AriakitGroup } from '@ariakit/react'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledGroup = styled(AriakitGroup, {})\n\nexport type StyledGroupProps = StrictComponentProps<typeof StyledGroup>\n","import React from 'react'\nimport type { ElementRef } from 'react'\nimport { useId } from '@mirohq/design-system-use-id'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { StyledGroupProps } from './group.styled'\nimport { StyledGroup } from './group.styled'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\nimport { GroupProvider } from '../hooks/use-group-context'\n\nexport type GroupProps = StyledGroupProps\n\nexport const Group = React.forwardRef<\n ElementRef<typeof StyledGroup>,\n GroupProps\n>(({ children, ...rest }, forwardRef) => {\n const { autoFilter, searchValue, filteredItems } = useComboboxContext()\n\n const id = useId()\n const getInvisibleContent = useInvisibleContent()\n\n let hasVisibleContent = true\n\n if (autoFilter && searchValue.length > 0) {\n hasVisibleContent = filteredItems.some(item => item.groupId === id)\n }\n\n return (\n <GroupProvider groupId={id}>\n {hasVisibleContent ? (\n <StyledGroup {...rest} ref={forwardRef}>\n {children}\n </StyledGroup>\n ) : (\n getInvisibleContent(children)\n )}\n </GroupProvider>\n )\n})\n","import { GroupLabel } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { groupLabelStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledGroupLabel = styled(GroupLabel, groupLabelStyles)\n\nexport type StyledGroupLabelProps = StrictComponentProps<\n typeof StyledGroupLabel\n>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { StyledGroupLabel } from './group-label.styled'\nimport type { StyledGroupLabelProps } from './group-label.styled'\n\nexport interface GroupLabelProps extends StyledGroupLabelProps {}\n\nexport const GroupLabel = React.forwardRef<\n ElementRef<typeof StyledGroupLabel>,\n GroupLabelProps\n>((props, forwardRef) => <StyledGroupLabel {...props} ref={forwardRef} />)\n","import React, { useCallback } from 'react'\nimport type { FC } from 'react'\nimport { Chip } from '@mirohq/design-system-chip'\nimport { booleanify } from '@mirohq/design-system-utils'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface ValueProps {\n /**\n * The label to make the remove button recognizable by the screen readers.\n */\n unselectAriaLabel: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n\n /**\n * Explicit value-to-label source for the selected chips. Labels are otherwise\n * read from the rendered `Combobox.Item`s, which only cover what is mounted —\n * so a selection that is virtualized out of view, filtered out, or on another\n * page of remotely fetched data would render no chip at all. Pass the labels\n * you already hold to keep every selection visible.\n */\n items?: ReadonlyMap<string, string>\n}\n\nexport const Value: FC<ValueProps> = ({\n unselectAriaLabel,\n multiple = true,\n items,\n}) => {\n const {\n value = [],\n setValue,\n disabled,\n readOnly,\n 'aria-disabled': ariaDisabled,\n itemsMap,\n } = useComboboxContext()\n const canRemoveItem =\n !booleanify(ariaDisabled) && !booleanify(disabled) && !booleanify(readOnly)\n const isDisabled = booleanify(ariaDisabled) || booleanify(disabled)\n\n const onItemRemove = useCallback(\n (item: string): void => {\n if (multiple) {\n setValue(prevValue =>\n (prevValue as string[]).filter(value => value !== item)\n )\n } else {\n setValue('')\n }\n },\n [setValue, multiple]\n )\n\n const getItemText = useCallback(\n (itemValue: string) => {\n const displayedText =\n items?.get(itemValue) ?? itemsMap.get(itemValue)?.displayedText\n if (displayedText === undefined || displayedText === '') {\n return null\n }\n\n return (\n <Chip\n key={itemValue}\n disabled={isDisabled}\n onRemove={e => {\n onItemRemove(itemValue)\n e.stopPropagation()\n }}\n removable={canRemoveItem}\n removeAriaLabel={`${unselectAriaLabel} ${displayedText}`}\n data-testid={\n process.env.NODE_ENV === 'test'\n ? `combobox-value-${itemValue}`\n : undefined\n }\n >\n {displayedText}\n </Chip>\n )\n },\n [\n canRemoveItem,\n isDisabled,\n items,\n itemsMap,\n onItemRemove,\n unselectAriaLabel,\n ]\n )\n\n return (\n <>\n {multiple && Array.isArray(value)\n ? value.map(getItemText)\n : getItemText(value as string)}\n </>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { separatorStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledSeparator = styled(Primitive.div, separatorStyles)\n\nexport type StyledSeparatorProps = StrictComponentProps<typeof StyledSeparator>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { StyledSeparator } from './separator.styled'\nimport type { StyledSeparatorProps } from './separator.styled'\n\nexport interface SeparatorProps extends StyledSeparatorProps {}\n\nexport const Separator = React.forwardRef<\n ElementRef<typeof StyledSeparator>,\n SeparatorProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue } = useComboboxContext()\n\n if (autoFilter && searchValue.length > 0) {\n return null\n }\n\n return <StyledSeparator {...props} ref={forwardRef} aria-hidden />\n})\n","import type { ComponentPropsWithRef } from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledNativeSelect = styled(Primitive.select, {\n // if we support autoComplete, we would have to use visually-hidden styles here\n display: 'none',\n})\n\nexport const StyledComboboxContent = styled(Primitive.div, {\n position: 'relative',\n width: '100%',\n})\n\nexport type StyledComboboxProps = ComponentPropsWithRef<\n typeof StyledComboboxContent\n>\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledNoResult = styled(Primitive.div, {\n padding: '$100',\n})\n\nexport type StyledNoResultProps = StrictComponentProps<typeof StyledNoResult>\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\n\nimport type { StyledNoResultProps } from './no-result.styled'\nimport { StyledNoResult } from './no-result.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface NoResultProps extends StyledNoResultProps {\n /**\n * The content.\n */\n children?: ReactNode\n}\n\nexport const NoResult = React.forwardRef<\n ElementRef<typeof StyledNoResult>,\n NoResultProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue, filteredItems, itemsMap } =\n useComboboxContext()\n\n // when filtering is disabled or idle, just checking if there are any items provided\n const noActiveFiltering =\n !autoFilter || (autoFilter && searchValue.length === 0)\n\n const isVisible = noActiveFiltering\n ? itemsMap.size === 0\n : filteredItems.length === 0\n\n if (isVisible) {\n return <StyledNoResult {...props} ref={forwardRef} />\n }\n\n return null\n})\n","import React, { useCallback } from 'react'\nimport { InputSearch } from '@mirohq/design-system-input'\nimport { styled } from '@mirohq/design-system-stitches'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nconst StyledInputSearch = styled(InputSearch, {\n '&&': {\n border: '1px solid $border-neutrals',\n backgroundColor: '$background-control',\n },\n})\n\nexport const SearchInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<typeof InputSearch>\n>((props, ref) => {\n const { setSearchValue, contentRef } = useComboboxContext()\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(event.target.value)\n props.onChange?.(event)\n },\n [props, setSearchValue]\n )\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ): void => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n // Select first item that is not disabled\n const firstItem = contentRef.current?.querySelector<HTMLElement>(\n '[role=\"option\"]:not([aria-disabled=\"true\"])'\n )\n firstItem?.focus()\n }\n\n props.onKeyDown?.(event)\n }\n\n return (\n <StyledInputSearch\n {...props}\n ref={ref}\n onKeyDown={handleKeyDown}\n onChange={handleSearchChange}\n />\n )\n})\n","import type { ComponentProps } from 'react'\nimport { CompositeItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledCompositeItem = styled(CompositeItem, {\n ...itemStyles,\n display: 'flex',\n width: '100%',\n})\n\nexport type StyledCompositeItemProps = ComponentProps<\n typeof StyledCompositeItem\n>\n","import React from 'react'\nimport type { ReactElement } from 'react'\nimport {\n CompositeItem as AriakitCompositeItem,\n useCompositeContext,\n} from '@ariakit/react'\n\nimport { StyledCompositeItem } from './composite-item.styled'\nimport type { StyledCompositeItemProps } from './composite-item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface CompositeItemProps\n extends Pick<StyledCompositeItemProps, 'disabled' | 'role' | 'children'> {\n /**\n * When true, the element receives real DOM focus and participates in\n * Tab key cycling between composite items.\n */\n tabbable?: boolean\n /**\n * When true (default), the child element becomes the composite item directly\n * via Ariakit's `render` prop — it receives focus and keyboard handling.\n * The child must be a single React element.\n *\n * When false, a styled wrapper acts as the composite item and children are\n * rendered inside it. The wrapper uses the same item styles as Combobox.Item\n * (hover, focus, active states) but without selection semantics.\n * @default true\n */\n asChild?: boolean\n\n /**\n * When provided, the item participates in the combobox's auto-filter logic.\n * The item will be hidden when the search query does not match this text.\n * When omitted, the item is always visible regardless of search state.\n */\n textValue?: string\n\n /**\n * Whether to close the combobox when this item is clicked.\n * @default false\n */\n hideOnClick?: boolean\n}\n\nexport const CompositeItem = ({\n asChild = true,\n role = 'menuitem',\n textValue,\n disabled = false,\n tabbable,\n hideOnClick = false,\n children,\n}: CompositeItemProps): JSX.Element | null => {\n const { searchValue, autoFilter, setOpenState } = useComboboxContext()\n\n // Ariakit's combobox uses virtualFocus, which redirects real DOM focus\n // to the trigger on every item focus. For tabbable items we prevent this\n // so the element keeps real focus — enabling natural Tab/Shift+Tab cycling.\n // We still sync the composite's activeId so arrow navigation continues\n // from the correct position.\n const compositeStore = useCompositeContext()\n const preventVirtualFocus = React.useCallback(\n (e: React.FocusEvent) => {\n const id = e.currentTarget.id\n if (id !== '') {\n compositeStore?.setActiveId(id)\n }\n e.preventDefault()\n },\n [compositeStore]\n )\n\n const tabbableRef = React.useCallback(\n (el: HTMLElement | null) => {\n if (tabbable === true && el != null) {\n el.tabIndex = 0\n }\n },\n [tabbable]\n )\n\n const handleClick = React.useCallback(() => {\n if (hideOnClick) {\n setOpenState(false)\n }\n }, [hideOnClick, setOpenState])\n\n if (\n textValue !== undefined &&\n autoFilter &&\n searchValue !== '' &&\n !searchQueryMatch(textValue, searchValue)\n ) {\n return null\n }\n\n const compositeProps = {\n disabled: disabled,\n accessibleWhenDisabled: disabled,\n role,\n onClick: handleClick,\n onFocus: tabbable === true ? preventVirtualFocus : undefined,\n } as const\n\n if (asChild) {\n return (\n <AriakitCompositeItem\n {...compositeProps}\n ref={tabbableRef}\n render={children as ReactElement}\n />\n )\n }\n\n return (\n <StyledCompositeItem {...compositeProps} ref={tabbableRef}>\n {children}\n </StyledCompositeItem>\n )\n}\n\nCompositeItem.displayName = 'CompositeItem'\n","import React, { useEffect } from 'react'\nimport type { ElementRef, ForwardRefExoticComponent } from 'react'\nimport { ComboboxProvider as AriakitComboboxProvider } from '@ariakit/react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n BaseTooltipProvider,\n useBaseTooltipContext,\n} from '@mirohq/design-system-base-tooltip'\nimport { usePrevious } from '@mirohq/design-system-use-previous'\n\nimport { Trigger } from './partials/trigger'\nimport { Content } from './partials/content'\nimport { Input } from './partials/input'\nimport { Item } from './partials/item'\nimport { Portal } from './partials/portal'\nimport { Group } from './partials/group'\nimport { GroupLabel } from './partials/group-label'\nimport { Value } from './partials/value'\nimport { Separator } from './partials/separator'\nimport { StyledComboboxContent, StyledNativeSelect } from './combobox.styled'\nimport type { StyledComboboxProps } from './combobox.styled'\nimport {\n ComboboxProvider,\n useComboboxContext,\n} from './hooks/use-combobox-context'\nimport type { Direction } from './types'\nimport { NoResult } from './partials/no-result'\nimport { SearchInput } from './partials/search-input'\nimport { CompositeItem } from './partials/composite-item'\n\nexport interface ComboboxProps extends FormElementProps, StyledComboboxProps {\n /**\n * The value of the combobox when initially rendered. Use when you do not need\n * to control the state of the combobox.\n */\n defaultValue?: string[] | string\n\n /**\n * The controlled value of the combobox. Should be used in conjunction with\n * onValueChange.\n */\n value?: string[] | string\n\n /**\n * Event handler called when the value changes.\n */\n onValueChange?: (value: string[] | string) => void\n\n /**\n * The controlled search value to filter items. Should be used in conjunction with\n * onSearchValueChange.\n */\n searchValue?: string\n\n /**\n * Event handler called when the trigger input value changes.\n */\n onSearchValueChange?: (value: string) => void\n\n /**\n * The open state of the combobox when it is initially rendered. Use when you do\n * not need to control its open state.\n * @default false\n */\n defaultOpen?: boolean\n\n /**\n * The controlled open state of the combobox. Must be used in conjunction with\n * onOpen and onClose.\n */\n open?: boolean\n\n /**\n * Event handler called when the combobox opens.\n */\n onOpen?: () => void\n\n /**\n * Event handler called when the combobox closes.\n */\n onClose?: () => void\n\n /**\n * The reading direction of the combobox when applicable. If omitted, inherits\n * globally from DirectionProvider or assumes LTR (left-to-right) reading\n * mode.\n * @default 'ltr'\n */\n direction?: Direction\n\n /**\n * The content of the combobox\n */\n children?: React.ReactNode\n\n /**\n * Enables/disabled automatic filtering.\n * @default true\n */\n autoFilter?: boolean\n\n /**\n * The name of the combobox. Submitted with its owning form as part of a\n * name/value pair.\n */\n name?: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n}\n\nconst Root = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n multiple = true,\n value: valueProp,\n onValueChange,\n name,\n children,\n ...restProps\n },\n forwardRef\n ) => {\n const {\n openState,\n setOpenState,\n value = [],\n setValue,\n required,\n readOnly,\n 'aria-disabled': ariaDisabled,\n disabled,\n direction,\n triggerRef,\n } = useComboboxContext()\n\n const {\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n formElementRef,\n } = useFormFieldContext<HTMLSelectElement>()\n\n useEffect(() => {\n setRequired?.(required)\n setDisabled?.(disabled)\n setAriaDisabled?.(ariaDisabled)\n setReadOnly?.(readOnly)\n }, [\n readOnly,\n disabled,\n ariaDisabled,\n required,\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n ])\n\n const { ignoreNextTooltip } = useBaseTooltipContext()\n const prevOpen = usePrevious(openState)\n\n useEffect(() => {\n if (prevOpen === true && !openState) {\n ignoreNextTooltip()\n }\n }, [ignoreNextTooltip, openState, prevOpen])\n\n const onSetSelectedValue = (newValue: string | string[]): void => {\n // If no defaultValue is provided the newValue is always an array so we need validate the types\n if (!multiple && Array.isArray(newValue)) {\n setValue(newValue[0])\n } else if (multiple && !Array.isArray(newValue)) {\n setValue([newValue])\n } else {\n setValue(newValue)\n }\n }\n\n const onOpenChange = (value: boolean): void => {\n if (!booleanify(readOnly)) {\n setOpenState(value)\n }\n }\n\n const isFormControl = Boolean(triggerRef.current?.closest('form'))\n\n const getOptionValue = (\n itemValue: string | string[]\n ): JSX.Element | JSX.Element[] => {\n if (multiple && Array.isArray(itemValue)) {\n return (value as string[]).map(itemValue => (\n <option key={itemValue} value={itemValue}>\n {itemValue}\n </option>\n ))\n } else {\n return (\n <option key={itemValue as string} value={itemValue}>\n {itemValue}\n </option>\n )\n }\n }\n\n return (\n <RadixPopover.Root open={openState} onOpenChange={onOpenChange}>\n <AriakitComboboxProvider\n open={openState}\n setOpen={onOpenChange}\n selectedValue={value}\n setSelectedValue={onSetSelectedValue}\n >\n <StyledComboboxContent\n ref={forwardRef}\n {...restProps}\n dir={direction}\n data-form-element='select'\n >\n {children}\n </StyledComboboxContent>\n </AriakitComboboxProvider>\n {isFormControl && (\n <StyledNativeSelect\n multiple={multiple}\n autoComplete='off'\n name={name}\n tabIndex={-1}\n aria-hidden='true'\n ref={formElementRef}\n required={required}\n disabled={disabled}\n aria-disabled={ariaDisabled}\n value={value}\n // since we don't support autoComplete there is no way this select value will change,\n // although we still need to provide `onChange` since we use `value` and not `defaultValue`\n onChange={() => {}}\n >\n {value.length === 0 ? (\n <option value='' />\n ) : (\n // since we don't support autoComplete we can render here only selected values\n getOptionValue(value)\n )}\n </StyledNativeSelect>\n )}\n </RadixPopover.Root>\n )\n }\n)\n\nexport const Combobox = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n 'aria-disabled': ariaDisabled,\n defaultOpen = false,\n open,\n valid,\n disabled,\n readOnly,\n required,\n value,\n defaultValue,\n onOpen,\n onClose,\n searchValue,\n onSearchValueChange,\n onValueChange,\n direction = 'ltr',\n autoFilter = true,\n ...restProps\n },\n forwardRef\n ) => (\n <ComboboxProvider\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n searchValue={searchValue}\n onSearchValueChange={onSearchValueChange}\n defaultOpen={defaultOpen}\n open={open}\n onOpen={onOpen}\n onClose={onClose}\n valid={valid}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-disabled={ariaDisabled}\n direction={direction}\n autoFilter={autoFilter}\n >\n <BaseTooltipProvider>\n <Root {...restProps} value={value} ref={forwardRef} />\n </BaseTooltipProvider>\n </ComboboxProvider>\n )\n) as ForwardRefExoticComponent<ComboboxProps> & Partials\n\nexport interface Partials {\n Portal: typeof Portal\n Trigger: typeof Trigger\n Input: typeof Input\n Content: typeof Content\n Item: typeof Item\n CompositeItem: typeof CompositeItem\n Group: typeof Group\n GroupLabel: typeof GroupLabel\n Value: typeof Value\n Separator: typeof Separator\n NoResult: typeof NoResult\n SearchInput: typeof SearchInput\n}\n\nCombobox.Portal = Portal\nCombobox.Trigger = Trigger\nCombobox.Input = Input\nCombobox.Content = Content\nCombobox.Item = Item\nCombobox.CompositeItem = CompositeItem\nCombobox.Group = Group\nCombobox.GroupLabel = GroupLabel\nCombobox.Value = Value\nCombobox.Separator = Separator\nCombobox.NoResult = NoResult\nCombobox.SearchInput = SearchInput\n"],"names":["createContext","useRef","useControllableState","useState","useFormFieldContext","useMemo","jsx","useContext","styled","BaseInput","useCallback","RadixTrigger","IconChevronDown","IconCross","useEffect","jsxs","mergeRefs","stringAttrValue","RadixAnchor","booleanify","AriakitComboboxTrigger","Primitive","itemsContainerStyles","RadixPopover","contentStyles","useLayoutEffect","createPortal","theme","useAriakitComboboxContext","AriakitComboboxList","ScrollArea","ComboboxItem","itemStyles","useAriaDisabled","mergeProps","AriakitComboboxItemCheck","StyledItemCheck","IconCheckMark","RadixPortal","AriakitGroup","useId","GroupLabel","groupLabelStyles","value","Chip","Fragment","separatorStyles","InputSearch","CompositeItem","useCompositeContext","AriakitCompositeItem","useBaseTooltipContext","usePrevious","itemValue","AriakitComboboxProvider","BaseTooltipProvider"],"mappings":"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"}
package/dist/module.js CHANGED
@@ -50,7 +50,7 @@ const ComboboxProvider = ({
50
50
  prop: openProp,
51
51
  defaultProp: defaultOpen,
52
52
  onChange: (state) => {
53
- if (state === true) {
53
+ if (state) {
54
54
  externalOpenedRef.current = true;
55
55
  onOpen == null ? void 0 : onOpen();
56
56
  } else {
@@ -59,25 +59,15 @@ const ComboboxProvider = ({
59
59
  }
60
60
  }
61
61
  });
62
- const [value, setValue] = useControllableState(
63
- {
64
- prop: valueProp,
65
- defaultProp: defaultValueProp,
66
- // Only the initial state can be undefined — nothing selects "no value" —
67
- // so the public handler never has to widen its parameter.
68
- onChange: (state) => {
69
- if (state !== void 0) {
70
- onValueChange == null ? void 0 : onValueChange(state);
71
- }
72
- }
73
- }
74
- );
62
+ const [value, setValue] = useControllableState({
63
+ prop: valueProp,
64
+ defaultProp: defaultValueProp,
65
+ onChange: onValueChange
66
+ });
75
67
  const [searchValue = "", setSearchValue] = useControllableState({
76
68
  prop: searchValueProp,
77
69
  defaultProp: "",
78
- // Clearing through the setter reads as undefined, which the search is
79
- // free to treat as empty — so the public handler stays on plain strings.
80
- onChange: (state) => onSearchValueChange == null ? void 0 : onSearchValueChange(state != null ? state : "")
70
+ onChange: onSearchValueChange
81
71
  });
82
72
  const [size, setSize] = useState();
83
73
  const [placeholder, setPlaceholder] = useState();
@@ -600,7 +590,8 @@ const GroupLabel = React.forwardRef((props, forwardRef) => /* @__PURE__ */ jsx(S
600
590
 
601
591
  const Value = ({
602
592
  unselectAriaLabel,
603
- multiple = true
593
+ multiple = true,
594
+ items
604
595
  }) => {
605
596
  const {
606
597
  value = [],
@@ -626,8 +617,9 @@ const Value = ({
626
617
  );
627
618
  const getItemText = useCallback(
628
619
  (itemValue) => {
629
- const itemData = itemsMap.get(itemValue);
630
- if (itemData === void 0 || itemData.displayedText === "") {
620
+ var _a, _b;
621
+ const displayedText = (_b = items == null ? void 0 : items.get(itemValue)) != null ? _b : (_a = itemsMap.get(itemValue)) == null ? void 0 : _a.displayedText;
622
+ if (displayedText === void 0 || displayedText === "") {
631
623
  return null;
632
624
  }
633
625
  return /* @__PURE__ */ jsx(
@@ -639,14 +631,21 @@ const Value = ({
639
631
  e.stopPropagation();
640
632
  },
641
633
  removable: canRemoveItem,
642
- removeAriaLabel: "".concat(unselectAriaLabel, " ").concat(itemData.displayedText),
634
+ removeAriaLabel: "".concat(unselectAriaLabel, " ").concat(displayedText),
643
635
  "data-testid": process.env.NODE_ENV === "test" ? "combobox-value-".concat(itemValue) : void 0,
644
- children: itemData.displayedText
636
+ children: displayedText
645
637
  },
646
638
  itemValue
647
639
  );
648
640
  },
649
- [canRemoveItem, isDisabled, itemsMap, onItemRemove, unselectAriaLabel]
641
+ [
642
+ canRemoveItem,
643
+ isDisabled,
644
+ items,
645
+ itemsMap,
646
+ onItemRemove,
647
+ unselectAriaLabel
648
+ ]
650
649
  );
651
650
  return /* @__PURE__ */ jsx(Fragment, { children: multiple && Array.isArray(value) ? value.map(getItemText) : getItemText(value) });
652
651
  };
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sources":["../src/utils.ts","../src/hooks/use-combobox-context.tsx","../src/partials/trigger-action-button.styled.tsx","../src/partials/input-action-button.tsx","../src/partials/input.styled.tsx","../src/partials/input.tsx","../src/partials/trigger.tsx","../src/partials/content.styled.tsx","../src/hooks/use-document-fragment.ts","../src/hooks/use-invisible-content.tsx","../src/partials/content.tsx","../src/partials/item.styled.tsx","../src/hooks/use-group-context.tsx","../src/partials/item.tsx","../src/partials/portal.tsx","../src/partials/group.styled.tsx","../src/partials/group.tsx","../src/partials/group-label.styled.tsx","../src/partials/group-label.tsx","../src/partials/value.tsx","../src/partials/separator.styled.tsx","../src/partials/separator.tsx","../src/combobox.styled.tsx","../src/partials/no-result.styled.tsx","../src/partials/no-result.tsx","../src/partials/search-input.tsx","../src/partials/composite-item.styled.tsx","../src/partials/composite-item.tsx","../src/combobox.tsx"],"sourcesContent":["export function searchQueryMatch(\n displayedText: string,\n searchValue: string\n): boolean {\n return displayedText.toLowerCase().includes(searchValue.toLowerCase())\n}\n","import React, {\n createContext,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { useControllableState } from '@radix-ui/react-use-controllable-state'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\nimport type { Direction } from '../types'\nimport type { StyledBaseInputProps } from '../partials/input.styled'\nimport { searchQueryMatch } from '../utils'\n\ninterface ItemData {\n displayedText: string\n groupId: string | undefined\n}\n\ninterface ComboboxProviderSharedProps extends FormElementProps {\n value?: string[] | string\n direction?: Direction\n autoFilter: boolean\n}\n\ninterface ComboboxContextProps extends ComboboxProviderSharedProps {\n setOpenState: React.Dispatch<React.SetStateAction<boolean | undefined>>\n openState: boolean\n externalOpenedRef: React.RefObject<boolean>\n\n setValue: React.Dispatch<React.SetStateAction<string[] | string | undefined>>\n\n triggerRef: React.RefObject<HTMLInputElement>\n inputRef: React.RefObject<HTMLInputElement>\n contentRef: React.RefObject<HTMLDivElement>\n\n searchValue: string\n setSearchValue: React.Dispatch<React.SetStateAction<string | undefined>>\n\n placeholder?: string\n setPlaceholder: React.Dispatch<React.SetStateAction<string | undefined>>\n\n size: StyledBaseInputProps['size']\n setSize: React.Dispatch<React.SetStateAction<StyledBaseInputProps['size']>>\n\n /**\n * includes all visible and hidden items to render Chips and get filtered items\n */\n itemsMap: Map<string, ItemData>\n setItemsMap: React.Dispatch<React.SetStateAction<Map<string, ItemData>>>\n\n /**\n * @returns filtered items based on itemsMap\n * @returns empty array when searchValue is empty or auto filtering is disabled\n */\n filteredItems: ItemData[]\n}\n\ninterface ComboboxProviderProps extends ComboboxProviderSharedProps {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n\n defaultValue?: string[] | string\n onValueChange?: (value: string[] | string) => void\n\n searchValue?: string\n onSearchValueChange?: (value: string) => void\n}\n\nconst ComboboxContext = createContext<ComboboxContextProps>({} as any)\n\nexport const ComboboxProvider = ({\n children,\n open: openProp,\n defaultOpen,\n onOpen,\n onClose,\n valid,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange,\n searchValue: searchValueProp,\n onSearchValueChange,\n autoFilter,\n ...restProps\n}: ComboboxProviderProps): JSX.Element => {\n const triggerRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const externalOpenedRef = useRef(false)\n\n // todo MDS-1141: remove default false value\n const [openState = false, setOpenState] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: state => {\n if (state === true) {\n externalOpenedRef.current = true\n onOpen?.()\n } else {\n externalOpenedRef.current = false\n onClose?.()\n }\n },\n })\n const [value, setValue] = useControllableState<string | string[] | undefined>(\n {\n prop: valueProp,\n defaultProp: defaultValueProp,\n // Only the initial state can be undefined — nothing selects \"no value\" —\n // so the public handler never has to widen its parameter.\n onChange: state => {\n if (state !== undefined) {\n onValueChange?.(state)\n }\n },\n }\n )\n\n // todo MDS-1141: remove default empty value\n const [searchValue = '', setSearchValue] = useControllableState<\n string | undefined\n >({\n prop: searchValueProp,\n defaultProp: '',\n // Clearing through the setter reads as undefined, which the search is\n // free to treat as empty — so the public handler stays on plain strings.\n onChange: state => onSearchValueChange?.(state ?? ''),\n })\n\n const [size, setSize] = useState<StyledBaseInputProps['size']>()\n const [placeholder, setPlaceholder] = useState<string | undefined>()\n\n const [itemsMap, setItemsMap] = useState<Map<string, ItemData>>(new Map())\n\n const { valid: formFieldValid } = useFormFieldContext()\n\n const filteredItems = useMemo(() => {\n if (searchValue.length > 0) {\n return Array.from(itemsMap.values()).filter(item =>\n searchQueryMatch(item.displayedText, searchValue)\n )\n }\n\n return []\n }, [itemsMap, searchValue])\n\n return (\n <ComboboxContext.Provider\n value={{\n ...restProps,\n valid: valid ?? formFieldValid,\n openState,\n setOpenState,\n externalOpenedRef,\n value,\n setValue,\n triggerRef,\n inputRef,\n contentRef,\n autoFilter,\n searchValue,\n setSearchValue,\n itemsMap,\n setItemsMap,\n filteredItems,\n placeholder,\n setPlaceholder,\n size,\n setSize,\n }}\n >\n {children}\n </ComboboxContext.Provider>\n )\n}\n\nexport const useComboboxContext = (): ComboboxContextProps =>\n useContext(ComboboxContext)\n","import type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\n\nexport const StyledActionButton = styled(BaseInput.ActionButton, {\n position: 'absolute',\n right: '$100',\n\n variants: {\n size: {\n medium: {\n top: '1px',\n },\n large: {\n top: '5px',\n },\n 'x-large': {\n top: '9px',\n },\n },\n },\n\n defaultVariants: {\n size: 'large',\n },\n})\n\nexport type StyledActionButtonProps = StrictComponentProps<\n typeof StyledActionButton\n>\n","import React, { useCallback } from 'react'\nimport { IconChevronDown, IconCross } from '@mirohq/design-system-icons'\nimport { Trigger as RadixTrigger } from '@radix-ui/react-popover'\n\nimport type { StyledActionButtonProps } from './trigger-action-button.styled'\nimport { StyledActionButton } from './trigger-action-button.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport type InputActionButtonProps = Omit<StyledActionButtonProps, 'label'> & {\n openActionLabel: string\n closeActionLabel: string\n clearable?: boolean\n clearActionLabel?: string\n}\n\nexport const InputActionButton = ({\n openActionLabel,\n closeActionLabel,\n clearActionLabel,\n clearable,\n size,\n}: InputActionButtonProps): React.ReactNode => {\n const { openState, setOpenState, value = [], setValue } = useComboboxContext()\n\n const isEmpty = value.length === 0\n\n const onToggleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (openState) {\n // open action will be performed by radix since it's RadixTrigger\n setOpenState(false)\n }\n\n event.stopPropagation()\n },\n [setOpenState, openState]\n )\n\n const onClearClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n setValue([])\n\n event.stopPropagation()\n },\n [setValue]\n )\n\n if (isEmpty || clearable === false || clearActionLabel === undefined) {\n return (\n <RadixTrigger asChild aria-haspopup='listbox'>\n <StyledActionButton\n label={openState ? closeActionLabel : openActionLabel}\n size={size}\n onClick={onToggleClick}\n aria-hidden\n tabIndex={-1}\n >\n <IconChevronDown size='small' />\n </StyledActionButton>\n </RadixTrigger>\n )\n }\n\n return (\n <StyledActionButton\n label={clearActionLabel}\n size={size}\n onClick={onClearClick}\n >\n <IconCross size='small' />\n </StyledActionButton>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport type { ComponentPropsWithRef } from 'react'\n\nexport const StyledBaseInput = styled(BaseInput, {\n flexWrap: 'wrap',\n flexGrow: 1,\n gap: '$50',\n\n '&[data-valid], &[data-invalid]': {\n // we don't need a bigger padding here as Input component will render its own icon\n paddingRight: '$100',\n },\n\n '& input': {\n minWidth: '$8',\n flexBasis: 0,\n flexGrow: 1,\n },\n\n variants: {\n size: {\n medium: {\n minHeight: '$8',\n height: 'auto',\n padding: '3px $100',\n paddingRight: '$500',\n fontSize: '$175',\n },\n large: {\n minHeight: '$10',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n },\n 'x-large': {\n minHeight: '$12',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n fontSize: '$200',\n lineHeight: '$500',\n },\n },\n },\n})\n\nexport type StyledBaseInputProps = ComponentPropsWithRef<typeof StyledBaseInput>\n","import { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type {\n BaseInputProps,\n BaseInputStyledProps,\n} from '@mirohq/design-system-base-input'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport { mergeRefs, stringAttrValue } from '@mirohq/design-system-utils'\nimport React, { useEffect } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { InputActionButton } from './input-action-button'\nimport { StyledBaseInput } from './input.styled'\n\nexport type InputProps = Omit<BaseInputStyledProps, 'size'> & {\n /**\n * The size of the input.\n * @default 'large'\n */\n size?: BaseInputProps['size']\n\n /**\n * The content that will be rendered inside the Combobox.Input when no value or\n * defaultValue is set.\n */\n placeholder?: string\n\n /**\n * The label text for Input's action button when Combobox is empty and closed. Will be rendered in a Tooltip.\n */\n openActionLabel: string\n\n /**\n * The label text for Input's action button when Combobox is empty and open. Will be rendered in a Tooltip.\n */\n closeActionLabel: string\n\n /**\n * Show a button to clear the Combobox value.\n * @default true\n */\n clearable?: boolean\n} & (\n | { clearable: false; clearActionLabel?: never }\n | {\n /**\n * The label text for Input's action button when Combobox has values selected. Will be rendered in a Tooltip.\n */\n clearActionLabel: string\n }\n )\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n onFocus,\n id,\n children,\n size = 'large',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n placeholder,\n openActionLabel,\n closeActionLabel,\n clearable = true,\n clearActionLabel,\n onChange,\n css,\n // @ts-expect-error className required when extending the component with styled()\n className,\n ...restProps\n },\n ref\n ): React.ReactNode => {\n const {\n 'aria-disabled': ariaDisabled,\n valid: comboboxValid,\n disabled,\n value = [],\n readOnly,\n triggerRef,\n inputRef,\n searchValue,\n setSearchValue,\n setSize,\n setPlaceholder,\n } = useComboboxContext()\n\n const {\n formElementId,\n ariaDescribedBy: formFieldContextDescribedBy,\n ariaInvalid: formFieldAriaInvalid,\n valid: formFieldValid,\n } = useFormFieldContext()\n\n useEffect(() => {\n setSize(size)\n }, [size, setSize])\n\n useEffect(() => {\n setPlaceholder(placeholder)\n }, [setPlaceholder, placeholder])\n\n const valid = formFieldValid ?? comboboxValid\n\n const scrollIntoView = (\n event: React.FocusEvent<HTMLInputElement>\n ): void => {\n const trigger = triggerRef?.current\n const baseInput = inputRef?.current?.parentElement\n\n if (baseInput != null && trigger != null) {\n event.preventDefault()\n baseInput.scrollTo({\n top: trigger.scrollHeight,\n })\n }\n\n if (onFocus !== undefined) {\n onFocus(event)\n }\n }\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(e.target.value)\n onChange?.(e)\n }\n\n return (\n <StyledBaseInput\n aria-disabled={ariaDisabled}\n valid={valid}\n disabled={disabled}\n readOnly={readOnly}\n size={size}\n onChange={onInputChange}\n css={css}\n // @ts-expect-error className required when extending the component with styled()\n className={className}\n >\n <BaseInput.Input\n {...restProps}\n ref={mergeRefs([inputRef, ref])}\n value={searchValue}\n id={id ?? formElementId}\n aria-describedby={stringAttrValue(\n ariaDescribedBy,\n formFieldContextDescribedBy\n )}\n aria-invalid={ariaInvalid ?? formFieldAriaInvalid}\n placeholder={\n children === null || children === undefined || value.length === 0\n ? placeholder\n : undefined\n }\n onFocus={scrollIntoView}\n />\n {children}\n <InputActionButton\n openActionLabel={openActionLabel}\n closeActionLabel={closeActionLabel}\n clearActionLabel={clearActionLabel}\n clearable={clearable}\n size={size}\n />\n </StyledBaseInput>\n )\n }\n)\n","import { Combobox as AriakitComboboxTrigger } from '@ariakit/react'\nimport { booleanify, mergeRefs } from '@mirohq/design-system-utils'\nimport { Anchor as RadixAnchor } from '@radix-ui/react-popover'\nimport type { ElementRef } from 'react'\nimport React from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { InputProps } from './input'\nimport { Input } from './input'\n\ninterface TriggerAsChildProps {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild: true\n /**\n * The content that will be rendered inside the Combobox.Trigger in stead of the Combobox.Input, when asChild is true.\n */\n children: React.ReactNode\n}\n\ntype TriggerDefaultProps = InputProps & {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild?: false\n}\n\nexport type TriggerProps = TriggerAsChildProps | TriggerDefaultProps\n\nexport const Trigger = React.forwardRef<ElementRef<'div'>, TriggerProps>(\n (props, forwardRef) => {\n const comboboxContextProps = useComboboxContext()\n\n const {\n 'aria-disabled': ariaDisabled,\n disabled,\n readOnly,\n triggerRef,\n setOpenState,\n } = comboboxContextProps\n\n return (\n <RadixAnchor\n ref={mergeRefs([triggerRef, forwardRef])}\n onClick={() => {\n if (\n !booleanify(disabled) &&\n !booleanify(ariaDisabled) &&\n !booleanify(readOnly)\n ) {\n setOpenState(true)\n }\n }}\n >\n <AriakitComboboxTrigger\n // Ariakit's default `canShow` reads `event.currentTarget.value.length`\n // which crashes when the trigger is a non-input element (e.g. asChild\n // with a div or chip). Setting these to `true` bypasses `canShow`\n // entirely. Open state is already managed by RadixAnchor's onClick.\n // See: https://ariakit.org/reference/combobox#showonclick\n showOnClick\n showOnKeyPress\n render={({ ref: ariakitTriggerRef, ...ariakitProps }) => (\n <Primitive.span asChild ref={ariakitTriggerRef} {...ariakitProps}>\n {props.asChild === true ? props.children : <Input {...props} />}\n </Primitive.span>\n )}\n />\n </RadixAnchor>\n )\n }\n)\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n contentStyles,\n itemsContainerStyles,\n} from '@mirohq/design-system-base-select'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledItemsContainer = styled(Primitive.div, itemsContainerStyles)\n\nexport const StyledContent = styled(RadixPopover.Content, {\n ...contentStyles,\n width: 'var(--radix-popover-trigger-width)',\n overflowY: 'auto',\n boxSizing: 'border-box',\n})\n\nexport type StyledContentProps = StrictComponentProps<typeof StyledContent>\n","import React from 'react'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\n\nexport const useDocumentFragment = (): DocumentFragment | undefined => {\n const [fragment, setFragment] = React.useState<DocumentFragment>()\n\n // we need `useLayoutEffect` here because `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment())\n }, [])\n\n return fragment\n}\n","import React, { useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useDocumentFragment } from './use-document-fragment'\n\n/**\n * Render content in DocumentFragment so items can send its text value to context,\n * otherwise we will have empty chips.\n * Content won't be visible in DOM.\n */\nexport const useInvisibleContent = (): ((\n children: React.ReactNode\n) => React.ReactElement | null) => {\n const fragment = useDocumentFragment()\n\n return useCallback(\n (children: React.ReactNode): React.ReactElement | null =>\n fragment !== undefined\n ? createPortal(<div>{children}</div>, fragment)\n : null,\n [fragment]\n )\n}\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { mergeRefs } from '@mirohq/design-system-utils'\nimport { ScrollArea } from '@mirohq/design-system-scroll-area'\nimport { theme } from '@mirohq/design-system-stitches'\nimport type { CSSProperties } from '@stitches/react'\nimport {\n ComboboxList as AriakitComboboxList,\n useComboboxContext as useAriakitComboboxContext,\n} from '@ariakit/react'\n\nimport { StyledContent, StyledItemsContainer } from './content.styled'\nimport type { StyledContentProps } from './content.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type {\n Align,\n Overflow,\n PointerDownOutsideEvent,\n Side,\n Sticky,\n} from '../types'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\n\nexport const CONTENT_OFFSET = parseInt(theme.space[50])\nconst RADIX_CONTENT_AVAILABLE_HEIGHT =\n 'var(--radix-popover-content-available-height)'\n\nconst isInsideRef = (\n element: Element | null,\n ref: React.RefObject<Element>\n): boolean => (element != null && ref.current?.contains(element)) ?? false\n\nexport interface ContentProps extends StyledContentProps {\n /**\n * Combobox's content.\n */\n children?: ReactNode\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onCloseAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves into the component after opening.\n * It can be prevented by calling event.preventDefault().\n */\n onOpenAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n\n /**\n * Event handler called when a pointer event occurs outside the bounds of the\n * component. It can be prevented by calling event.preventDefault.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void\n\n /**\n * The preferred side of the anchor to render against when open. Will be\n * reversed when collisions occur and avoidCollisions is enabled.\n * @default 'bottom'\n */\n side?: Side\n\n /**\n * The distance in pixels from the anchor.\n * @default CONTENT_OFFSET\n */\n sideOffset?: number\n\n /**\n * The preferred alignment against the anchor. May change when collisions\n * occur.\n * @default 'center'\n */\n align?: Align\n\n /**\n * An offset in pixels from the \"start\" or \"end\" alignment options.\n * @default 0\n */\n alignOffset?: number\n\n /**\n * When true, overrides the side and align preferences to prevent collisions\n * with boundary edges.\n * @default true\n */\n avoidCollisions?: boolean\n\n /**\n * The element used as the collision boundary. By default this is the\n * viewport, though you can provide additional element(s) to be included in\n * this check.\n */\n collisionBoundary?: Element | null\n\n /**\n * The distance in pixels from the boundary edges where collision detection\n * should occur. Accepts a number (same for all sides), or a partial padding\n * object, for example: { top: 20, left: 20 }.\n * @default 0\n */\n collisionPadding?: number | Partial<Record<Side, number>>\n\n /**\n * The sticky behavior on the align axis. \"partial\" will keep the content in the\n * boundary as long as the trigger is at least partially in the boundary whilst\n * \"always\" will keep the content in the boundary regardless.\n * @default 'partial'\n */\n sticky?: Sticky\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n * @default true\n */\n hideWhenDetached?: boolean\n\n /**\n * The max height for the content.\n */\n maxHeight?: CSSProperties['maxHeight']\n\n /**\n * Setting overflow as \"visible\" means that the content can extend beyond\n * its collision boundary without any clipping or scrolling being\n * applied.\n * When set to \"auto,\" a scrollbar is added if the content exceeds its\n * boundaries. If no maxHeight is defined, it will be automatically adjusted\n * to fit the remaining space between the trigger and the boundary edge.\n * @default 'visible'\n */\n overflow?: Overflow\n}\n\nexport const Content = React.forwardRef<\n ElementRef<typeof StyledContent>,\n ContentProps\n>(\n (\n {\n side = 'bottom',\n sideOffset = CONTENT_OFFSET,\n align = 'center',\n alignOffset = 0,\n collisionPadding = 0,\n avoidCollisions = true,\n sticky = 'partial',\n hideWhenDetached = true,\n overflow = 'visible',\n maxHeight,\n children,\n onOpenAutoFocus,\n ...restProps\n },\n forwardRef\n ) => {\n const { triggerRef, contentRef, direction, openState, externalOpenedRef } =\n useComboboxContext()\n const ariakitStore = useAriakitComboboxContext()\n\n const getInvisibleContent = useInvisibleContent()\n\n if (!openState) {\n return getInvisibleContent(children)\n }\n\n const content = <StyledItemsContainer>{children}</StyledItemsContainer>\n\n return (\n <StyledContent\n {...restProps}\n dir={direction}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionPadding={collisionPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n onOpenAutoFocus={event => {\n if (onOpenAutoFocus != null) {\n onOpenAutoFocus(event)\n return\n }\n\n event?.preventDefault()\n\n // Skip auto-focus when opened via defaultOpen — Radix's onChange\n // doesn't fire for the initial default, so externalOpenedRef stays false.\n // This avoids moving focus when no user interaction has occurred.\n if (externalOpenedRef.current !== true) return\n\n // Focus the base element (input or custom trigger) so arrow keys\n // work immediately without requiring an extra keypress.\n const baseElement = ariakitStore?.getState().baseElement\n\n baseElement?.focus()\n }}\n ref={mergeRefs([forwardRef, contentRef])}\n onInteractOutside={event => {\n const target = event.target as Element | null\n const isTrigger = isInsideRef(target, triggerRef)\n const isContent = isInsideRef(target, contentRef)\n\n if (isTrigger || isContent) {\n event.preventDefault()\n }\n }}\n >\n {/* we have to specify role here otherwise it would be overwritten by Radix.Content */}\n <AriakitComboboxList role='listbox'>\n {overflow === 'auto' ? (\n <ScrollArea type='always' dir={direction}>\n <ScrollArea.Viewport\n css={{\n maxHeight:\n maxHeight !== undefined\n ? `min(${RADIX_CONTENT_AVAILABLE_HEIGHT}, ${\n typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : maxHeight\n })`\n : RADIX_CONTENT_AVAILABLE_HEIGHT,\n }}\n >\n {content}\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea>\n ) : (\n content\n )}\n </AriakitComboboxList>\n </StyledContent>\n )\n }\n)\n","import { ComboboxItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledItem = styled(ComboboxItem, itemStyles)\n\nexport type StyledItemProps = StrictComponentProps<typeof StyledItem>\n","import React, { createContext, useContext } from 'react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\ninterface GroupProviderSharedProps extends FormElementProps {\n groupId?: string\n}\n\ninterface GroupContextProps extends GroupProviderSharedProps {}\n\ninterface GroupProviderProps extends GroupProviderSharedProps {\n children: React.ReactNode\n}\n\nconst GroupContext = createContext<GroupContextProps>({} as any)\n\nexport const GroupProvider = ({\n children,\n ...restProps\n}: GroupProviderProps): JSX.Element => (\n <GroupContext.Provider\n value={{\n ...restProps,\n }}\n >\n {children}\n </GroupContext.Provider>\n)\n\nexport const useGroupContext = (): GroupContextProps => useContext(GroupContext)\n","import React, { useMemo } from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { ComboboxItemCheck as AriakitComboboxItemCheck } from '@ariakit/react'\nimport { mergeProps } from '@react-aria/utils'\nimport { useAriaDisabled } from '@mirohq/design-system-use-aria-disabled'\nimport { IconCheckMark } from '@mirohq/design-system-icons'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\nimport { StyledItemCheck } from '@mirohq/design-system-base-select'\n\nimport { StyledItem } from './item.styled'\nimport type { StyledItemProps } from './item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { useGroupContext } from '../hooks/use-group-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface ItemProps extends StyledItemProps {\n /**\n * The value given as data when submitted with a name.\n */\n value: string\n\n /**\n * When true, prevents the user from interacting with the item.\n * @default false\n */\n disabled?: boolean\n\n /**\n * Optional text used for typeahead purposes. By default the typeahead\n * behavior will use the Combobox's item text. Use this when the content is\n * complex, or you have non-textual content inside.\n */\n textValue?: string\n\n /**\n * Item's content.\n */\n children?: ReactNode\n}\n\nexport const Item = React.forwardRef<ElementRef<typeof StyledItem>, ItemProps>(\n (\n { disabled = false, value, textValue, children, ...restProps },\n forwardRef\n ) => {\n const { 'aria-disabled': ariaDisabled, ...restAriaDisabledProps } =\n useAriaDisabled(restProps, { allowArrows: true })\n const {\n searchValue,\n autoFilter,\n setItemsMap,\n triggerRef,\n inputRef,\n value: comboboxValue = [],\n } = useComboboxContext()\n\n const { groupId } = useGroupContext()\n\n const displayedText = useMemo((): string => {\n if (textValue !== undefined) {\n return textValue\n }\n\n return typeof children === 'string' ? children : ''\n }, [textValue, children])\n\n useLayoutEffect(() => {\n setItemsMap(\n prevState => new Map(prevState.set(value, { displayedText, groupId }))\n )\n\n return () => {\n setItemsMap(prevState => {\n prevState.delete(value)\n return new Map(prevState)\n })\n }\n }, [setItemsMap, groupId, value, displayedText])\n\n if (\n autoFilter &&\n searchValue.length > 0 &&\n !searchQueryMatch(displayedText, searchValue)\n ) {\n return null\n }\n\n const scrollIntoView = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (\n inputRef?.current?.parentElement != null &&\n triggerRef?.current != null\n ) {\n inputRef.current.parentElement.scrollTo({\n top: triggerRef.current.scrollHeight,\n })\n }\n\n if (restProps.onClick !== undefined) {\n restProps.onClick(event)\n }\n }\n\n // todo MDS-1142 find a better way to fix blinking.\n // We need to use custom state because Ariakit changes its state internally on click even for controlled Combobox\n // and it case `aria-selected` value and checkmark to blink.\n const isSelected = Array.isArray(comboboxValue)\n ? comboboxValue.includes(value)\n : comboboxValue === value\n\n return (\n <StyledItem\n {...mergeProps(restProps, restAriaDisabledProps)}\n focusable\n hideOnClick={false}\n accessibleWhenDisabled={booleanify(ariaDisabled)}\n disabled={booleanify(ariaDisabled) || disabled}\n ref={forwardRef}\n value={value}\n onClick={scrollIntoView}\n aria-selected={isSelected}\n >\n <AriakitComboboxItemCheck\n checked={isSelected}\n render={({ style, ...props }) => (\n // AriakitComboboxItemCheck adds its owm inline styles which we want to omit here\n <StyledItemCheck {...props} />\n )}\n >\n <IconCheckMark\n size='small'\n data-testid={\n process.env.NODE_ENV === 'test'\n ? 'combobox-item-check'\n : undefined\n }\n />\n </AriakitComboboxItemCheck>\n {children}\n </StyledItem>\n )\n }\n)\n","import React from 'react'\nimport type { PopoverPortalProps } from '@radix-ui/react-popover'\nimport { Portal as RadixPortal } from '@radix-ui/react-popover'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface PortalProps extends PopoverPortalProps {\n /**\n * Specify a container element to portal the content into.\n */\n container?: HTMLElement | null\n}\n\nexport const Portal = ({\n forceMount: forceMountProp,\n ...restProps\n}: PortalProps): React.ReactNode => {\n const { openState } = useComboboxContext()\n\n // We always need to render content with items to be able to render Chips in Value,\n // but without forceMount Radix will not render Portal when Popover is closed\n const forceMount = !openState || forceMountProp\n\n return <RadixPortal forceMount={forceMount} {...restProps} />\n}\n","import { Group as AriakitGroup } from '@ariakit/react'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledGroup = styled(AriakitGroup, {})\n\nexport type StyledGroupProps = StrictComponentProps<typeof StyledGroup>\n","import React from 'react'\nimport type { ElementRef } from 'react'\nimport { useId } from '@mirohq/design-system-use-id'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { StyledGroupProps } from './group.styled'\nimport { StyledGroup } from './group.styled'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\nimport { GroupProvider } from '../hooks/use-group-context'\n\nexport type GroupProps = StyledGroupProps\n\nexport const Group = React.forwardRef<\n ElementRef<typeof StyledGroup>,\n GroupProps\n>(({ children, ...rest }, forwardRef) => {\n const { autoFilter, searchValue, filteredItems } = useComboboxContext()\n\n const id = useId()\n const getInvisibleContent = useInvisibleContent()\n\n let hasVisibleContent = true\n\n if (autoFilter && searchValue.length > 0) {\n hasVisibleContent = filteredItems.some(item => item.groupId === id)\n }\n\n return (\n <GroupProvider groupId={id}>\n {hasVisibleContent ? (\n <StyledGroup {...rest} ref={forwardRef}>\n {children}\n </StyledGroup>\n ) : (\n getInvisibleContent(children)\n )}\n </GroupProvider>\n )\n})\n","import { GroupLabel } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { groupLabelStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledGroupLabel = styled(GroupLabel, groupLabelStyles)\n\nexport type StyledGroupLabelProps = StrictComponentProps<\n typeof StyledGroupLabel\n>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { StyledGroupLabel } from './group-label.styled'\nimport type { StyledGroupLabelProps } from './group-label.styled'\n\nexport interface GroupLabelProps extends StyledGroupLabelProps {}\n\nexport const GroupLabel = React.forwardRef<\n ElementRef<typeof StyledGroupLabel>,\n GroupLabelProps\n>((props, forwardRef) => <StyledGroupLabel {...props} ref={forwardRef} />)\n","import React, { useCallback } from 'react'\nimport type { FC } from 'react'\nimport { Chip } from '@mirohq/design-system-chip'\nimport { booleanify } from '@mirohq/design-system-utils'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface ValueProps {\n /**\n * The label to make the remove button recognizable by the screen readers.\n */\n unselectAriaLabel: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n}\n\nexport const Value: FC<ValueProps> = ({\n unselectAriaLabel,\n multiple = true,\n}) => {\n const {\n value = [],\n setValue,\n disabled,\n readOnly,\n 'aria-disabled': ariaDisabled,\n itemsMap,\n } = useComboboxContext()\n const canRemoveItem =\n !booleanify(ariaDisabled) && !booleanify(disabled) && !booleanify(readOnly)\n const isDisabled = booleanify(ariaDisabled) || booleanify(disabled)\n\n const onItemRemove = useCallback(\n (item: string): void => {\n if (multiple) {\n setValue(prevValue =>\n (prevValue as string[]).filter(value => value !== item)\n )\n } else {\n setValue('')\n }\n },\n [setValue, multiple]\n )\n\n const getItemText = useCallback(\n (itemValue: string) => {\n const itemData = itemsMap.get(itemValue)\n if (itemData === undefined || itemData.displayedText === '') {\n return null\n }\n\n return (\n <Chip\n key={itemValue}\n disabled={isDisabled}\n onRemove={e => {\n onItemRemove(itemValue)\n e.stopPropagation()\n }}\n removable={canRemoveItem}\n removeAriaLabel={`${unselectAriaLabel} ${itemData.displayedText}`}\n data-testid={\n process.env.NODE_ENV === 'test'\n ? `combobox-value-${itemValue}`\n : undefined\n }\n >\n {itemData.displayedText}\n </Chip>\n )\n },\n [canRemoveItem, isDisabled, itemsMap, onItemRemove, unselectAriaLabel]\n )\n\n return (\n <>\n {multiple && Array.isArray(value)\n ? value.map(getItemText)\n : getItemText(value as string)}\n </>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { separatorStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledSeparator = styled(Primitive.div, separatorStyles)\n\nexport type StyledSeparatorProps = StrictComponentProps<typeof StyledSeparator>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { StyledSeparator } from './separator.styled'\nimport type { StyledSeparatorProps } from './separator.styled'\n\nexport interface SeparatorProps extends StyledSeparatorProps {}\n\nexport const Separator = React.forwardRef<\n ElementRef<typeof StyledSeparator>,\n SeparatorProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue } = useComboboxContext()\n\n if (autoFilter && searchValue.length > 0) {\n return null\n }\n\n return <StyledSeparator {...props} ref={forwardRef} aria-hidden />\n})\n","import type { ComponentPropsWithRef } from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledNativeSelect = styled(Primitive.select, {\n // if we support autoComplete, we would have to use visually-hidden styles here\n display: 'none',\n})\n\nexport const StyledComboboxContent = styled(Primitive.div, {\n position: 'relative',\n width: '100%',\n})\n\nexport type StyledComboboxProps = ComponentPropsWithRef<\n typeof StyledComboboxContent\n>\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledNoResult = styled(Primitive.div, {\n padding: '$100',\n})\n\nexport type StyledNoResultProps = StrictComponentProps<typeof StyledNoResult>\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\n\nimport type { StyledNoResultProps } from './no-result.styled'\nimport { StyledNoResult } from './no-result.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface NoResultProps extends StyledNoResultProps {\n /**\n * The content.\n */\n children?: ReactNode\n}\n\nexport const NoResult = React.forwardRef<\n ElementRef<typeof StyledNoResult>,\n NoResultProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue, filteredItems, itemsMap } =\n useComboboxContext()\n\n // when filtering is disabled or idle, just checking if there are any items provided\n const noActiveFiltering =\n !autoFilter || (autoFilter && searchValue.length === 0)\n\n const isVisible = noActiveFiltering\n ? itemsMap.size === 0\n : filteredItems.length === 0\n\n if (isVisible) {\n return <StyledNoResult {...props} ref={forwardRef} />\n }\n\n return null\n})\n","import React, { useCallback } from 'react'\nimport { InputSearch } from '@mirohq/design-system-input'\nimport { styled } from '@mirohq/design-system-stitches'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nconst StyledInputSearch = styled(InputSearch, {\n '&&': {\n border: '1px solid $border-neutrals',\n backgroundColor: '$background-control',\n },\n})\n\nexport const SearchInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<typeof InputSearch>\n>((props, ref) => {\n const { setSearchValue, contentRef } = useComboboxContext()\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(event.target.value)\n props.onChange?.(event)\n },\n [props, setSearchValue]\n )\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ): void => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n // Select first item that is not disabled\n const firstItem = contentRef.current?.querySelector<HTMLElement>(\n '[role=\"option\"]:not([aria-disabled=\"true\"])'\n )\n firstItem?.focus()\n }\n\n props.onKeyDown?.(event)\n }\n\n return (\n <StyledInputSearch\n {...props}\n ref={ref}\n onKeyDown={handleKeyDown}\n onChange={handleSearchChange}\n />\n )\n})\n","import type { ComponentProps } from 'react'\nimport { CompositeItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledCompositeItem = styled(CompositeItem, {\n ...itemStyles,\n display: 'flex',\n width: '100%',\n})\n\nexport type StyledCompositeItemProps = ComponentProps<\n typeof StyledCompositeItem\n>\n","import React from 'react'\nimport type { ReactElement } from 'react'\nimport {\n CompositeItem as AriakitCompositeItem,\n useCompositeContext,\n} from '@ariakit/react'\n\nimport { StyledCompositeItem } from './composite-item.styled'\nimport type { StyledCompositeItemProps } from './composite-item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface CompositeItemProps\n extends Pick<StyledCompositeItemProps, 'disabled' | 'role' | 'children'> {\n /**\n * When true, the element receives real DOM focus and participates in\n * Tab key cycling between composite items.\n */\n tabbable?: boolean\n /**\n * When true (default), the child element becomes the composite item directly\n * via Ariakit's `render` prop — it receives focus and keyboard handling.\n * The child must be a single React element.\n *\n * When false, a styled wrapper acts as the composite item and children are\n * rendered inside it. The wrapper uses the same item styles as Combobox.Item\n * (hover, focus, active states) but without selection semantics.\n * @default true\n */\n asChild?: boolean\n\n /**\n * When provided, the item participates in the combobox's auto-filter logic.\n * The item will be hidden when the search query does not match this text.\n * When omitted, the item is always visible regardless of search state.\n */\n textValue?: string\n\n /**\n * Whether to close the combobox when this item is clicked.\n * @default false\n */\n hideOnClick?: boolean\n}\n\nexport const CompositeItem = ({\n asChild = true,\n role = 'menuitem',\n textValue,\n disabled = false,\n tabbable,\n hideOnClick = false,\n children,\n}: CompositeItemProps): JSX.Element | null => {\n const { searchValue, autoFilter, setOpenState } = useComboboxContext()\n\n // Ariakit's combobox uses virtualFocus, which redirects real DOM focus\n // to the trigger on every item focus. For tabbable items we prevent this\n // so the element keeps real focus — enabling natural Tab/Shift+Tab cycling.\n // We still sync the composite's activeId so arrow navigation continues\n // from the correct position.\n const compositeStore = useCompositeContext()\n const preventVirtualFocus = React.useCallback(\n (e: React.FocusEvent) => {\n const id = e.currentTarget.id\n if (id !== '') {\n compositeStore?.setActiveId(id)\n }\n e.preventDefault()\n },\n [compositeStore]\n )\n\n const tabbableRef = React.useCallback(\n (el: HTMLElement | null) => {\n if (tabbable === true && el != null) {\n el.tabIndex = 0\n }\n },\n [tabbable]\n )\n\n const handleClick = React.useCallback(() => {\n if (hideOnClick) {\n setOpenState(false)\n }\n }, [hideOnClick, setOpenState])\n\n if (\n textValue !== undefined &&\n autoFilter &&\n searchValue !== '' &&\n !searchQueryMatch(textValue, searchValue)\n ) {\n return null\n }\n\n const compositeProps = {\n disabled: disabled,\n accessibleWhenDisabled: disabled,\n role,\n onClick: handleClick,\n onFocus: tabbable === true ? preventVirtualFocus : undefined,\n } as const\n\n if (asChild) {\n return (\n <AriakitCompositeItem\n {...compositeProps}\n ref={tabbableRef}\n render={children as ReactElement}\n />\n )\n }\n\n return (\n <StyledCompositeItem {...compositeProps} ref={tabbableRef}>\n {children}\n </StyledCompositeItem>\n )\n}\n\nCompositeItem.displayName = 'CompositeItem'\n","import React, { useEffect } from 'react'\nimport type { ElementRef, ForwardRefExoticComponent } from 'react'\nimport { ComboboxProvider as AriakitComboboxProvider } from '@ariakit/react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n BaseTooltipProvider,\n useBaseTooltipContext,\n} from '@mirohq/design-system-base-tooltip'\nimport { usePrevious } from '@mirohq/design-system-use-previous'\n\nimport { Trigger } from './partials/trigger'\nimport { Content } from './partials/content'\nimport { Input } from './partials/input'\nimport { Item } from './partials/item'\nimport { Portal } from './partials/portal'\nimport { Group } from './partials/group'\nimport { GroupLabel } from './partials/group-label'\nimport { Value } from './partials/value'\nimport { Separator } from './partials/separator'\nimport { StyledComboboxContent, StyledNativeSelect } from './combobox.styled'\nimport type { StyledComboboxProps } from './combobox.styled'\nimport {\n ComboboxProvider,\n useComboboxContext,\n} from './hooks/use-combobox-context'\nimport type { Direction } from './types'\nimport { NoResult } from './partials/no-result'\nimport { SearchInput } from './partials/search-input'\nimport { CompositeItem } from './partials/composite-item'\n\nexport interface ComboboxProps extends FormElementProps, StyledComboboxProps {\n /**\n * The value of the combobox when initially rendered. Use when you do not need\n * to control the state of the combobox.\n */\n defaultValue?: string[] | string\n\n /**\n * The controlled value of the combobox. Should be used in conjunction with\n * onValueChange.\n */\n value?: string[] | string\n\n /**\n * Event handler called when the value changes.\n */\n onValueChange?: (value: string[] | string) => void\n\n /**\n * The controlled search value to filter items. Should be used in conjunction with\n * onSearchValueChange.\n */\n searchValue?: string\n\n /**\n * Event handler called when the trigger input value changes.\n */\n onSearchValueChange?: (value: string) => void\n\n /**\n * The open state of the combobox when it is initially rendered. Use when you do\n * not need to control its open state.\n * @default false\n */\n defaultOpen?: boolean\n\n /**\n * The controlled open state of the combobox. Must be used in conjunction with\n * onOpen and onClose.\n */\n open?: boolean\n\n /**\n * Event handler called when the combobox opens.\n */\n onOpen?: () => void\n\n /**\n * Event handler called when the combobox closes.\n */\n onClose?: () => void\n\n /**\n * The reading direction of the combobox when applicable. If omitted, inherits\n * globally from DirectionProvider or assumes LTR (left-to-right) reading\n * mode.\n * @default 'ltr'\n */\n direction?: Direction\n\n /**\n * The content of the combobox\n */\n children?: React.ReactNode\n\n /**\n * Enables/disabled automatic filtering.\n * @default true\n */\n autoFilter?: boolean\n\n /**\n * The name of the combobox. Submitted with its owning form as part of a\n * name/value pair.\n */\n name?: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n}\n\nconst Root = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n multiple = true,\n value: valueProp,\n onValueChange,\n name,\n children,\n ...restProps\n },\n forwardRef\n ) => {\n const {\n openState,\n setOpenState,\n value = [],\n setValue,\n required,\n readOnly,\n 'aria-disabled': ariaDisabled,\n disabled,\n direction,\n triggerRef,\n } = useComboboxContext()\n\n const {\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n formElementRef,\n } = useFormFieldContext<HTMLSelectElement>()\n\n useEffect(() => {\n setRequired?.(required)\n setDisabled?.(disabled)\n setAriaDisabled?.(ariaDisabled)\n setReadOnly?.(readOnly)\n }, [\n readOnly,\n disabled,\n ariaDisabled,\n required,\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n ])\n\n const { ignoreNextTooltip } = useBaseTooltipContext()\n const prevOpen = usePrevious(openState)\n\n useEffect(() => {\n if (prevOpen === true && !openState) {\n ignoreNextTooltip()\n }\n }, [ignoreNextTooltip, openState, prevOpen])\n\n const onSetSelectedValue = (newValue: string | string[]): void => {\n // If no defaultValue is provided the newValue is always an array so we need validate the types\n if (!multiple && Array.isArray(newValue)) {\n setValue(newValue[0])\n } else if (multiple && !Array.isArray(newValue)) {\n setValue([newValue])\n } else {\n setValue(newValue)\n }\n }\n\n const onOpenChange = (value: boolean): void => {\n if (!booleanify(readOnly)) {\n setOpenState(value)\n }\n }\n\n const isFormControl = Boolean(triggerRef.current?.closest('form'))\n\n const getOptionValue = (\n itemValue: string | string[]\n ): JSX.Element | JSX.Element[] => {\n if (multiple && Array.isArray(itemValue)) {\n return (value as string[]).map(itemValue => (\n <option key={itemValue} value={itemValue}>\n {itemValue}\n </option>\n ))\n } else {\n return (\n <option key={itemValue as string} value={itemValue}>\n {itemValue}\n </option>\n )\n }\n }\n\n return (\n <RadixPopover.Root open={openState} onOpenChange={onOpenChange}>\n <AriakitComboboxProvider\n open={openState}\n setOpen={onOpenChange}\n selectedValue={value}\n setSelectedValue={onSetSelectedValue}\n >\n <StyledComboboxContent\n ref={forwardRef}\n {...restProps}\n dir={direction}\n data-form-element='select'\n >\n {children}\n </StyledComboboxContent>\n </AriakitComboboxProvider>\n {isFormControl && (\n <StyledNativeSelect\n multiple={multiple}\n autoComplete='off'\n name={name}\n tabIndex={-1}\n aria-hidden='true'\n ref={formElementRef}\n required={required}\n disabled={disabled}\n aria-disabled={ariaDisabled}\n value={value}\n // since we don't support autoComplete there is no way this select value will change,\n // although we still need to provide `onChange` since we use `value` and not `defaultValue`\n onChange={() => {}}\n >\n {value.length === 0 ? (\n <option value='' />\n ) : (\n // since we don't support autoComplete we can render here only selected values\n getOptionValue(value)\n )}\n </StyledNativeSelect>\n )}\n </RadixPopover.Root>\n )\n }\n)\n\nexport const Combobox = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n 'aria-disabled': ariaDisabled,\n defaultOpen = false,\n open,\n valid,\n disabled,\n readOnly,\n required,\n value,\n defaultValue,\n onOpen,\n onClose,\n searchValue,\n onSearchValueChange,\n onValueChange,\n direction = 'ltr',\n autoFilter = true,\n ...restProps\n },\n forwardRef\n ) => (\n <ComboboxProvider\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n searchValue={searchValue}\n onSearchValueChange={onSearchValueChange}\n defaultOpen={defaultOpen}\n open={open}\n onOpen={onOpen}\n onClose={onClose}\n valid={valid}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-disabled={ariaDisabled}\n direction={direction}\n autoFilter={autoFilter}\n >\n <BaseTooltipProvider>\n <Root {...restProps} value={value} ref={forwardRef} />\n </BaseTooltipProvider>\n </ComboboxProvider>\n )\n) as ForwardRefExoticComponent<ComboboxProps> & Partials\n\nexport interface Partials {\n Portal: typeof Portal\n Trigger: typeof Trigger\n Input: typeof Input\n Content: typeof Content\n Item: typeof Item\n CompositeItem: typeof CompositeItem\n Group: typeof Group\n GroupLabel: typeof GroupLabel\n Value: typeof Value\n Separator: typeof Separator\n NoResult: typeof NoResult\n SearchInput: typeof SearchInput\n}\n\nCombobox.Portal = Portal\nCombobox.Trigger = Trigger\nCombobox.Input = Input\nCombobox.Content = Content\nCombobox.Item = Item\nCombobox.CompositeItem = CompositeItem\nCombobox.Group = Group\nCombobox.GroupLabel = GroupLabel\nCombobox.Value = Value\nCombobox.Separator = Separator\nCombobox.NoResult = NoResult\nCombobox.SearchInput = SearchInput\n"],"names":["RadixTrigger","RadixAnchor","AriakitComboboxTrigger","useAriakitComboboxContext","AriakitComboboxList","AriakitComboboxItemCheck","RadixPortal","AriakitGroup","GroupLabel","value","CompositeItem","AriakitCompositeItem","itemValue","AriakitComboboxProvider"],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sources":["../src/utils.ts","../src/hooks/use-combobox-context.tsx","../src/partials/trigger-action-button.styled.tsx","../src/partials/input-action-button.tsx","../src/partials/input.styled.tsx","../src/partials/input.tsx","../src/partials/trigger.tsx","../src/partials/content.styled.tsx","../src/hooks/use-document-fragment.ts","../src/hooks/use-invisible-content.tsx","../src/partials/content.tsx","../src/partials/item.styled.tsx","../src/hooks/use-group-context.tsx","../src/partials/item.tsx","../src/partials/portal.tsx","../src/partials/group.styled.tsx","../src/partials/group.tsx","../src/partials/group-label.styled.tsx","../src/partials/group-label.tsx","../src/partials/value.tsx","../src/partials/separator.styled.tsx","../src/partials/separator.tsx","../src/combobox.styled.tsx","../src/partials/no-result.styled.tsx","../src/partials/no-result.tsx","../src/partials/search-input.tsx","../src/partials/composite-item.styled.tsx","../src/partials/composite-item.tsx","../src/combobox.tsx"],"sourcesContent":["export function searchQueryMatch(\n displayedText: string,\n searchValue: string\n): boolean {\n return displayedText.toLowerCase().includes(searchValue.toLowerCase())\n}\n","import React, {\n createContext,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { useControllableState } from '@radix-ui/react-use-controllable-state'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\nimport type { Direction } from '../types'\nimport type { StyledBaseInputProps } from '../partials/input.styled'\nimport { searchQueryMatch } from '../utils'\n\ninterface ItemData {\n displayedText: string\n groupId: string | undefined\n}\n\ninterface ComboboxProviderSharedProps extends FormElementProps {\n value?: string[] | string\n direction?: Direction\n autoFilter: boolean\n}\n\ninterface ComboboxContextProps extends ComboboxProviderSharedProps {\n setOpenState: React.Dispatch<React.SetStateAction<boolean | undefined>>\n openState: boolean\n externalOpenedRef: React.RefObject<boolean>\n\n setValue: React.Dispatch<React.SetStateAction<string[] | string | undefined>>\n\n triggerRef: React.RefObject<HTMLInputElement>\n inputRef: React.RefObject<HTMLInputElement>\n contentRef: React.RefObject<HTMLDivElement>\n\n searchValue: string\n setSearchValue: React.Dispatch<React.SetStateAction<string | undefined>>\n\n placeholder?: string\n setPlaceholder: React.Dispatch<React.SetStateAction<string | undefined>>\n\n size: StyledBaseInputProps['size']\n setSize: React.Dispatch<React.SetStateAction<StyledBaseInputProps['size']>>\n\n /**\n * includes all visible and hidden items to render Chips and get filtered items\n */\n itemsMap: Map<string, ItemData>\n setItemsMap: React.Dispatch<React.SetStateAction<Map<string, ItemData>>>\n\n /**\n * @returns filtered items based on itemsMap\n * @returns empty array when searchValue is empty or auto filtering is disabled\n */\n filteredItems: ItemData[]\n}\n\ninterface ComboboxProviderProps extends ComboboxProviderSharedProps {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n\n defaultValue?: string[] | string\n onValueChange?: (value: string[] | string) => void\n\n searchValue?: string\n onSearchValueChange?: (value: string) => void\n}\n\nconst ComboboxContext = createContext<ComboboxContextProps>({} as any)\n\nexport const ComboboxProvider = ({\n children,\n open: openProp,\n defaultOpen,\n onOpen,\n onClose,\n valid,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange,\n searchValue: searchValueProp,\n onSearchValueChange,\n autoFilter,\n ...restProps\n}: ComboboxProviderProps): JSX.Element => {\n const triggerRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const externalOpenedRef = useRef(false)\n\n // todo MDS-1141: remove default false value\n const [openState = false, setOpenState] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: state => {\n if (state) {\n externalOpenedRef.current = true\n onOpen?.()\n } else {\n externalOpenedRef.current = false\n onClose?.()\n }\n },\n })\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValueProp,\n onChange: onValueChange,\n })\n\n // todo MDS-1141: remove default false value\n const [searchValue = '', setSearchValue] = useControllableState({\n prop: searchValueProp,\n defaultProp: '',\n onChange: onSearchValueChange,\n })\n\n const [size, setSize] = useState<StyledBaseInputProps['size']>()\n const [placeholder, setPlaceholder] = useState<string | undefined>()\n\n const [itemsMap, setItemsMap] = useState<Map<string, ItemData>>(new Map())\n\n const { valid: formFieldValid } = useFormFieldContext()\n\n const filteredItems = useMemo(() => {\n if (searchValue.length > 0) {\n return Array.from(itemsMap.values()).filter(item =>\n searchQueryMatch(item.displayedText, searchValue)\n )\n }\n\n return []\n }, [itemsMap, searchValue])\n\n return (\n <ComboboxContext.Provider\n value={{\n ...restProps,\n valid: valid ?? formFieldValid,\n openState,\n setOpenState,\n externalOpenedRef,\n value,\n setValue,\n triggerRef,\n inputRef,\n contentRef,\n autoFilter,\n searchValue,\n setSearchValue,\n itemsMap,\n setItemsMap,\n filteredItems,\n placeholder,\n setPlaceholder,\n size,\n setSize,\n }}\n >\n {children}\n </ComboboxContext.Provider>\n )\n}\n\nexport const useComboboxContext = (): ComboboxContextProps =>\n useContext(ComboboxContext)\n","import type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\n\nexport const StyledActionButton = styled(BaseInput.ActionButton, {\n position: 'absolute',\n right: '$100',\n\n variants: {\n size: {\n medium: {\n top: '1px',\n },\n large: {\n top: '5px',\n },\n 'x-large': {\n top: '9px',\n },\n },\n },\n\n defaultVariants: {\n size: 'large',\n },\n})\n\nexport type StyledActionButtonProps = StrictComponentProps<\n typeof StyledActionButton\n>\n","import React, { useCallback } from 'react'\nimport { IconChevronDown, IconCross } from '@mirohq/design-system-icons'\nimport { Trigger as RadixTrigger } from '@radix-ui/react-popover'\n\nimport type { StyledActionButtonProps } from './trigger-action-button.styled'\nimport { StyledActionButton } from './trigger-action-button.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport type InputActionButtonProps = Omit<StyledActionButtonProps, 'label'> & {\n openActionLabel: string\n closeActionLabel: string\n clearable?: boolean\n clearActionLabel?: string\n}\n\nexport const InputActionButton = ({\n openActionLabel,\n closeActionLabel,\n clearActionLabel,\n clearable,\n size,\n}: InputActionButtonProps): React.ReactNode => {\n const { openState, setOpenState, value = [], setValue } = useComboboxContext()\n\n const isEmpty = value.length === 0\n\n const onToggleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (openState) {\n // open action will be performed by radix since it's RadixTrigger\n setOpenState(false)\n }\n\n event.stopPropagation()\n },\n [setOpenState, openState]\n )\n\n const onClearClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n setValue([])\n\n event.stopPropagation()\n },\n [setValue]\n )\n\n if (isEmpty || clearable === false || clearActionLabel === undefined) {\n return (\n <RadixTrigger asChild aria-haspopup='listbox'>\n <StyledActionButton\n label={openState ? closeActionLabel : openActionLabel}\n size={size}\n onClick={onToggleClick}\n aria-hidden\n tabIndex={-1}\n >\n <IconChevronDown size='small' />\n </StyledActionButton>\n </RadixTrigger>\n )\n }\n\n return (\n <StyledActionButton\n label={clearActionLabel}\n size={size}\n onClick={onClearClick}\n >\n <IconCross size='small' />\n </StyledActionButton>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport type { ComponentPropsWithRef } from 'react'\n\nexport const StyledBaseInput = styled(BaseInput, {\n flexWrap: 'wrap',\n flexGrow: 1,\n gap: '$50',\n\n '&[data-valid], &[data-invalid]': {\n // we don't need a bigger padding here as Input component will render its own icon\n paddingRight: '$100',\n },\n\n '& input': {\n minWidth: '$8',\n flexBasis: 0,\n flexGrow: 1,\n },\n\n variants: {\n size: {\n medium: {\n minHeight: '$8',\n height: 'auto',\n padding: '3px $100',\n paddingRight: '$500',\n fontSize: '$175',\n },\n large: {\n minHeight: '$10',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n },\n 'x-large': {\n minHeight: '$12',\n height: 'auto',\n padding: '5px $100',\n paddingRight: '$500',\n fontSize: '$200',\n lineHeight: '$500',\n },\n },\n },\n})\n\nexport type StyledBaseInputProps = ComponentPropsWithRef<typeof StyledBaseInput>\n","import { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport type {\n BaseInputProps,\n BaseInputStyledProps,\n} from '@mirohq/design-system-base-input'\nimport { BaseInput } from '@mirohq/design-system-base-input'\nimport { mergeRefs, stringAttrValue } from '@mirohq/design-system-utils'\nimport React, { useEffect } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { InputActionButton } from './input-action-button'\nimport { StyledBaseInput } from './input.styled'\n\nexport type InputProps = Omit<BaseInputStyledProps, 'size'> & {\n /**\n * The size of the input.\n * @default 'large'\n */\n size?: BaseInputProps['size']\n\n /**\n * The content that will be rendered inside the Combobox.Input when no value or\n * defaultValue is set.\n */\n placeholder?: string\n\n /**\n * The label text for Input's action button when Combobox is empty and closed. Will be rendered in a Tooltip.\n */\n openActionLabel: string\n\n /**\n * The label text for Input's action button when Combobox is empty and open. Will be rendered in a Tooltip.\n */\n closeActionLabel: string\n\n /**\n * Show a button to clear the Combobox value.\n * @default true\n */\n clearable?: boolean\n} & (\n | { clearable: false; clearActionLabel?: never }\n | {\n /**\n * The label text for Input's action button when Combobox has values selected. Will be rendered in a Tooltip.\n */\n clearActionLabel: string\n }\n )\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n onFocus,\n id,\n children,\n size = 'large',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n placeholder,\n openActionLabel,\n closeActionLabel,\n clearable = true,\n clearActionLabel,\n onChange,\n css,\n // @ts-expect-error className required when extending the component with styled()\n className,\n ...restProps\n },\n ref\n ): React.ReactNode => {\n const {\n 'aria-disabled': ariaDisabled,\n valid: comboboxValid,\n disabled,\n value = [],\n readOnly,\n triggerRef,\n inputRef,\n searchValue,\n setSearchValue,\n setSize,\n setPlaceholder,\n } = useComboboxContext()\n\n const {\n formElementId,\n ariaDescribedBy: formFieldContextDescribedBy,\n ariaInvalid: formFieldAriaInvalid,\n valid: formFieldValid,\n } = useFormFieldContext()\n\n useEffect(() => {\n setSize(size)\n }, [size, setSize])\n\n useEffect(() => {\n setPlaceholder(placeholder)\n }, [setPlaceholder, placeholder])\n\n const valid = formFieldValid ?? comboboxValid\n\n const scrollIntoView = (\n event: React.FocusEvent<HTMLInputElement>\n ): void => {\n const trigger = triggerRef?.current\n const baseInput = inputRef?.current?.parentElement\n\n if (baseInput != null && trigger != null) {\n event.preventDefault()\n baseInput.scrollTo({\n top: trigger.scrollHeight,\n })\n }\n\n if (onFocus !== undefined) {\n onFocus(event)\n }\n }\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(e.target.value)\n onChange?.(e)\n }\n\n return (\n <StyledBaseInput\n aria-disabled={ariaDisabled}\n valid={valid}\n disabled={disabled}\n readOnly={readOnly}\n size={size}\n onChange={onInputChange}\n css={css}\n // @ts-expect-error className required when extending the component with styled()\n className={className}\n >\n <BaseInput.Input\n {...restProps}\n ref={mergeRefs([inputRef, ref])}\n value={searchValue}\n id={id ?? formElementId}\n aria-describedby={stringAttrValue(\n ariaDescribedBy,\n formFieldContextDescribedBy\n )}\n aria-invalid={ariaInvalid ?? formFieldAriaInvalid}\n placeholder={\n children === null || children === undefined || value.length === 0\n ? placeholder\n : undefined\n }\n onFocus={scrollIntoView}\n />\n {children}\n <InputActionButton\n openActionLabel={openActionLabel}\n closeActionLabel={closeActionLabel}\n clearActionLabel={clearActionLabel}\n clearable={clearable}\n size={size}\n />\n </StyledBaseInput>\n )\n }\n)\n","import { Combobox as AriakitComboboxTrigger } from '@ariakit/react'\nimport { booleanify, mergeRefs } from '@mirohq/design-system-utils'\nimport { Anchor as RadixAnchor } from '@radix-ui/react-popover'\nimport type { ElementRef } from 'react'\nimport React from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { InputProps } from './input'\nimport { Input } from './input'\n\ninterface TriggerAsChildProps {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild: true\n /**\n * The content that will be rendered inside the Combobox.Trigger in stead of the Combobox.Input, when asChild is true.\n */\n children: React.ReactNode\n}\n\ntype TriggerDefaultProps = InputProps & {\n /**\n * Render the trigger as a custom component, passed in as a child\n */\n asChild?: false\n}\n\nexport type TriggerProps = TriggerAsChildProps | TriggerDefaultProps\n\nexport const Trigger = React.forwardRef<ElementRef<'div'>, TriggerProps>(\n (props, forwardRef) => {\n const comboboxContextProps = useComboboxContext()\n\n const {\n 'aria-disabled': ariaDisabled,\n disabled,\n readOnly,\n triggerRef,\n setOpenState,\n } = comboboxContextProps\n\n return (\n <RadixAnchor\n ref={mergeRefs([triggerRef, forwardRef])}\n onClick={() => {\n if (\n !booleanify(disabled) &&\n !booleanify(ariaDisabled) &&\n !booleanify(readOnly)\n ) {\n setOpenState(true)\n }\n }}\n >\n <AriakitComboboxTrigger\n // Ariakit's default `canShow` reads `event.currentTarget.value.length`\n // which crashes when the trigger is a non-input element (e.g. asChild\n // with a div or chip). Setting these to `true` bypasses `canShow`\n // entirely. Open state is already managed by RadixAnchor's onClick.\n // See: https://ariakit.org/reference/combobox#showonclick\n showOnClick\n showOnKeyPress\n render={({ ref: ariakitTriggerRef, ...ariakitProps }) => (\n <Primitive.span asChild ref={ariakitTriggerRef} {...ariakitProps}>\n {props.asChild === true ? props.children : <Input {...props} />}\n </Primitive.span>\n )}\n />\n </RadixAnchor>\n )\n }\n)\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n contentStyles,\n itemsContainerStyles,\n} from '@mirohq/design-system-base-select'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledItemsContainer = styled(Primitive.div, itemsContainerStyles)\n\nexport const StyledContent = styled(RadixPopover.Content, {\n ...contentStyles,\n width: 'var(--radix-popover-trigger-width)',\n overflowY: 'auto',\n boxSizing: 'border-box',\n})\n\nexport type StyledContentProps = StrictComponentProps<typeof StyledContent>\n","import React from 'react'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\n\nexport const useDocumentFragment = (): DocumentFragment | undefined => {\n const [fragment, setFragment] = React.useState<DocumentFragment>()\n\n // we need `useLayoutEffect` here because `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment())\n }, [])\n\n return fragment\n}\n","import React, { useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useDocumentFragment } from './use-document-fragment'\n\n/**\n * Render content in DocumentFragment so items can send its text value to context,\n * otherwise we will have empty chips.\n * Content won't be visible in DOM.\n */\nexport const useInvisibleContent = (): ((\n children: React.ReactNode\n) => React.ReactElement | null) => {\n const fragment = useDocumentFragment()\n\n return useCallback(\n (children: React.ReactNode): React.ReactElement | null =>\n fragment !== undefined\n ? createPortal(<div>{children}</div>, fragment)\n : null,\n [fragment]\n )\n}\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { mergeRefs } from '@mirohq/design-system-utils'\nimport { ScrollArea } from '@mirohq/design-system-scroll-area'\nimport { theme } from '@mirohq/design-system-stitches'\nimport type { CSSProperties } from '@stitches/react'\nimport {\n ComboboxList as AriakitComboboxList,\n useComboboxContext as useAriakitComboboxContext,\n} from '@ariakit/react'\n\nimport { StyledContent, StyledItemsContainer } from './content.styled'\nimport type { StyledContentProps } from './content.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type {\n Align,\n Overflow,\n PointerDownOutsideEvent,\n Side,\n Sticky,\n} from '../types'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\n\nexport const CONTENT_OFFSET = parseInt(theme.space[50])\nconst RADIX_CONTENT_AVAILABLE_HEIGHT =\n 'var(--radix-popover-content-available-height)'\n\nconst isInsideRef = (\n element: Element | null,\n ref: React.RefObject<Element>\n): boolean => (element != null && ref.current?.contains(element)) ?? false\n\nexport interface ContentProps extends StyledContentProps {\n /**\n * Combobox's content.\n */\n children?: ReactNode\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onCloseAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves into the component after opening.\n * It can be prevented by calling event.preventDefault().\n */\n onOpenAutoFocus?: (event: Event) => void\n\n /**\n * Event handler called when focus moves to the trigger after closing. It can\n * be prevented by calling event.preventDefault.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n\n /**\n * Event handler called when a pointer event occurs outside the bounds of the\n * component. It can be prevented by calling event.preventDefault.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void\n\n /**\n * The preferred side of the anchor to render against when open. Will be\n * reversed when collisions occur and avoidCollisions is enabled.\n * @default 'bottom'\n */\n side?: Side\n\n /**\n * The distance in pixels from the anchor.\n * @default CONTENT_OFFSET\n */\n sideOffset?: number\n\n /**\n * The preferred alignment against the anchor. May change when collisions\n * occur.\n * @default 'center'\n */\n align?: Align\n\n /**\n * An offset in pixels from the \"start\" or \"end\" alignment options.\n * @default 0\n */\n alignOffset?: number\n\n /**\n * When true, overrides the side and align preferences to prevent collisions\n * with boundary edges.\n * @default true\n */\n avoidCollisions?: boolean\n\n /**\n * The element used as the collision boundary. By default this is the\n * viewport, though you can provide additional element(s) to be included in\n * this check.\n */\n collisionBoundary?: Element | null\n\n /**\n * The distance in pixels from the boundary edges where collision detection\n * should occur. Accepts a number (same for all sides), or a partial padding\n * object, for example: { top: 20, left: 20 }.\n * @default 0\n */\n collisionPadding?: number | Partial<Record<Side, number>>\n\n /**\n * The sticky behavior on the align axis. \"partial\" will keep the content in the\n * boundary as long as the trigger is at least partially in the boundary whilst\n * \"always\" will keep the content in the boundary regardless.\n * @default 'partial'\n */\n sticky?: Sticky\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n * @default true\n */\n hideWhenDetached?: boolean\n\n /**\n * The max height for the content.\n */\n maxHeight?: CSSProperties['maxHeight']\n\n /**\n * Setting overflow as \"visible\" means that the content can extend beyond\n * its collision boundary without any clipping or scrolling being\n * applied.\n * When set to \"auto,\" a scrollbar is added if the content exceeds its\n * boundaries. If no maxHeight is defined, it will be automatically adjusted\n * to fit the remaining space between the trigger and the boundary edge.\n * @default 'visible'\n */\n overflow?: Overflow\n}\n\nexport const Content = React.forwardRef<\n ElementRef<typeof StyledContent>,\n ContentProps\n>(\n (\n {\n side = 'bottom',\n sideOffset = CONTENT_OFFSET,\n align = 'center',\n alignOffset = 0,\n collisionPadding = 0,\n avoidCollisions = true,\n sticky = 'partial',\n hideWhenDetached = true,\n overflow = 'visible',\n maxHeight,\n children,\n onOpenAutoFocus,\n ...restProps\n },\n forwardRef\n ) => {\n const { triggerRef, contentRef, direction, openState, externalOpenedRef } =\n useComboboxContext()\n const ariakitStore = useAriakitComboboxContext()\n\n const getInvisibleContent = useInvisibleContent()\n\n if (!openState) {\n return getInvisibleContent(children)\n }\n\n const content = <StyledItemsContainer>{children}</StyledItemsContainer>\n\n return (\n <StyledContent\n {...restProps}\n dir={direction}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionPadding={collisionPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n onOpenAutoFocus={event => {\n if (onOpenAutoFocus != null) {\n onOpenAutoFocus(event)\n return\n }\n\n event?.preventDefault()\n\n // Skip auto-focus when opened via defaultOpen — Radix's onChange\n // doesn't fire for the initial default, so externalOpenedRef stays false.\n // This avoids moving focus when no user interaction has occurred.\n if (externalOpenedRef.current !== true) return\n\n // Focus the base element (input or custom trigger) so arrow keys\n // work immediately without requiring an extra keypress.\n const baseElement = ariakitStore?.getState().baseElement\n\n baseElement?.focus()\n }}\n ref={mergeRefs([forwardRef, contentRef])}\n onInteractOutside={event => {\n const target = event.target as Element | null\n const isTrigger = isInsideRef(target, triggerRef)\n const isContent = isInsideRef(target, contentRef)\n\n if (isTrigger || isContent) {\n event.preventDefault()\n }\n }}\n >\n {/* we have to specify role here otherwise it would be overwritten by Radix.Content */}\n <AriakitComboboxList role='listbox'>\n {overflow === 'auto' ? (\n <ScrollArea type='always' dir={direction}>\n <ScrollArea.Viewport\n css={{\n maxHeight:\n maxHeight !== undefined\n ? `min(${RADIX_CONTENT_AVAILABLE_HEIGHT}, ${\n typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : maxHeight\n })`\n : RADIX_CONTENT_AVAILABLE_HEIGHT,\n }}\n >\n {content}\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea>\n ) : (\n content\n )}\n </AriakitComboboxList>\n </StyledContent>\n )\n }\n)\n","import { ComboboxItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledItem = styled(ComboboxItem, itemStyles)\n\nexport type StyledItemProps = StrictComponentProps<typeof StyledItem>\n","import React, { createContext, useContext } from 'react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\n\ninterface GroupProviderSharedProps extends FormElementProps {\n groupId?: string\n}\n\ninterface GroupContextProps extends GroupProviderSharedProps {}\n\ninterface GroupProviderProps extends GroupProviderSharedProps {\n children: React.ReactNode\n}\n\nconst GroupContext = createContext<GroupContextProps>({} as any)\n\nexport const GroupProvider = ({\n children,\n ...restProps\n}: GroupProviderProps): JSX.Element => (\n <GroupContext.Provider\n value={{\n ...restProps,\n }}\n >\n {children}\n </GroupContext.Provider>\n)\n\nexport const useGroupContext = (): GroupContextProps => useContext(GroupContext)\n","import React, { useMemo } from 'react'\nimport type { ElementRef, ReactNode } from 'react'\nimport { ComboboxItemCheck as AriakitComboboxItemCheck } from '@ariakit/react'\nimport { mergeProps } from '@react-aria/utils'\nimport { useAriaDisabled } from '@mirohq/design-system-use-aria-disabled'\nimport { IconCheckMark } from '@mirohq/design-system-icons'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport { useLayoutEffect } from '@mirohq/design-system-use-layout-effect'\nimport { StyledItemCheck } from '@mirohq/design-system-base-select'\n\nimport { StyledItem } from './item.styled'\nimport type { StyledItemProps } from './item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { useGroupContext } from '../hooks/use-group-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface ItemProps extends StyledItemProps {\n /**\n * The value given as data when submitted with a name.\n */\n value: string\n\n /**\n * When true, prevents the user from interacting with the item.\n * @default false\n */\n disabled?: boolean\n\n /**\n * Optional text used for typeahead purposes. By default the typeahead\n * behavior will use the Combobox's item text. Use this when the content is\n * complex, or you have non-textual content inside.\n */\n textValue?: string\n\n /**\n * Item's content.\n */\n children?: ReactNode\n}\n\nexport const Item = React.forwardRef<ElementRef<typeof StyledItem>, ItemProps>(\n (\n { disabled = false, value, textValue, children, ...restProps },\n forwardRef\n ) => {\n const { 'aria-disabled': ariaDisabled, ...restAriaDisabledProps } =\n useAriaDisabled(restProps, { allowArrows: true })\n const {\n searchValue,\n autoFilter,\n setItemsMap,\n triggerRef,\n inputRef,\n value: comboboxValue = [],\n } = useComboboxContext()\n\n const { groupId } = useGroupContext()\n\n const displayedText = useMemo((): string => {\n if (textValue !== undefined) {\n return textValue\n }\n\n return typeof children === 'string' ? children : ''\n }, [textValue, children])\n\n useLayoutEffect(() => {\n setItemsMap(\n prevState => new Map(prevState.set(value, { displayedText, groupId }))\n )\n\n return () => {\n setItemsMap(prevState => {\n prevState.delete(value)\n return new Map(prevState)\n })\n }\n }, [setItemsMap, groupId, value, displayedText])\n\n if (\n autoFilter &&\n searchValue.length > 0 &&\n !searchQueryMatch(displayedText, searchValue)\n ) {\n return null\n }\n\n const scrollIntoView = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (\n inputRef?.current?.parentElement != null &&\n triggerRef?.current != null\n ) {\n inputRef.current.parentElement.scrollTo({\n top: triggerRef.current.scrollHeight,\n })\n }\n\n if (restProps.onClick !== undefined) {\n restProps.onClick(event)\n }\n }\n\n // todo MDS-1142 find a better way to fix blinking.\n // We need to use custom state because Ariakit changes its state internally on click even for controlled Combobox\n // and it case `aria-selected` value and checkmark to blink.\n const isSelected = Array.isArray(comboboxValue)\n ? comboboxValue.includes(value)\n : comboboxValue === value\n\n return (\n <StyledItem\n {...mergeProps(restProps, restAriaDisabledProps)}\n focusable\n hideOnClick={false}\n accessibleWhenDisabled={booleanify(ariaDisabled)}\n disabled={booleanify(ariaDisabled) || disabled}\n ref={forwardRef}\n value={value}\n onClick={scrollIntoView}\n aria-selected={isSelected}\n >\n <AriakitComboboxItemCheck\n checked={isSelected}\n render={({ style, ...props }) => (\n // AriakitComboboxItemCheck adds its owm inline styles which we want to omit here\n <StyledItemCheck {...props} />\n )}\n >\n <IconCheckMark\n size='small'\n data-testid={\n process.env.NODE_ENV === 'test'\n ? 'combobox-item-check'\n : undefined\n }\n />\n </AriakitComboboxItemCheck>\n {children}\n </StyledItem>\n )\n }\n)\n","import React from 'react'\nimport type { PopoverPortalProps } from '@radix-ui/react-popover'\nimport { Portal as RadixPortal } from '@radix-ui/react-popover'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface PortalProps extends PopoverPortalProps {\n /**\n * Specify a container element to portal the content into.\n */\n container?: HTMLElement | null\n}\n\nexport const Portal = ({\n forceMount: forceMountProp,\n ...restProps\n}: PortalProps): React.ReactNode => {\n const { openState } = useComboboxContext()\n\n // We always need to render content with items to be able to render Chips in Value,\n // but without forceMount Radix will not render Portal when Popover is closed\n const forceMount = !openState || forceMountProp\n\n return <RadixPortal forceMount={forceMount} {...restProps} />\n}\n","import { Group as AriakitGroup } from '@ariakit/react'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledGroup = styled(AriakitGroup, {})\n\nexport type StyledGroupProps = StrictComponentProps<typeof StyledGroup>\n","import React from 'react'\nimport type { ElementRef } from 'react'\nimport { useId } from '@mirohq/design-system-use-id'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport type { StyledGroupProps } from './group.styled'\nimport { StyledGroup } from './group.styled'\nimport { useInvisibleContent } from '../hooks/use-invisible-content'\nimport { GroupProvider } from '../hooks/use-group-context'\n\nexport type GroupProps = StyledGroupProps\n\nexport const Group = React.forwardRef<\n ElementRef<typeof StyledGroup>,\n GroupProps\n>(({ children, ...rest }, forwardRef) => {\n const { autoFilter, searchValue, filteredItems } = useComboboxContext()\n\n const id = useId()\n const getInvisibleContent = useInvisibleContent()\n\n let hasVisibleContent = true\n\n if (autoFilter && searchValue.length > 0) {\n hasVisibleContent = filteredItems.some(item => item.groupId === id)\n }\n\n return (\n <GroupProvider groupId={id}>\n {hasVisibleContent ? (\n <StyledGroup {...rest} ref={forwardRef}>\n {children}\n </StyledGroup>\n ) : (\n getInvisibleContent(children)\n )}\n </GroupProvider>\n )\n})\n","import { GroupLabel } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { groupLabelStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledGroupLabel = styled(GroupLabel, groupLabelStyles)\n\nexport type StyledGroupLabelProps = StrictComponentProps<\n typeof StyledGroupLabel\n>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { StyledGroupLabel } from './group-label.styled'\nimport type { StyledGroupLabelProps } from './group-label.styled'\n\nexport interface GroupLabelProps extends StyledGroupLabelProps {}\n\nexport const GroupLabel = React.forwardRef<\n ElementRef<typeof StyledGroupLabel>,\n GroupLabelProps\n>((props, forwardRef) => <StyledGroupLabel {...props} ref={forwardRef} />)\n","import React, { useCallback } from 'react'\nimport type { FC } from 'react'\nimport { Chip } from '@mirohq/design-system-chip'\nimport { booleanify } from '@mirohq/design-system-utils'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface ValueProps {\n /**\n * The label to make the remove button recognizable by the screen readers.\n */\n unselectAriaLabel: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n\n /**\n * Explicit value-to-label source for the selected chips. Labels are otherwise\n * read from the rendered `Combobox.Item`s, which only cover what is mounted —\n * so a selection that is virtualized out of view, filtered out, or on another\n * page of remotely fetched data would render no chip at all. Pass the labels\n * you already hold to keep every selection visible.\n */\n items?: ReadonlyMap<string, string>\n}\n\nexport const Value: FC<ValueProps> = ({\n unselectAriaLabel,\n multiple = true,\n items,\n}) => {\n const {\n value = [],\n setValue,\n disabled,\n readOnly,\n 'aria-disabled': ariaDisabled,\n itemsMap,\n } = useComboboxContext()\n const canRemoveItem =\n !booleanify(ariaDisabled) && !booleanify(disabled) && !booleanify(readOnly)\n const isDisabled = booleanify(ariaDisabled) || booleanify(disabled)\n\n const onItemRemove = useCallback(\n (item: string): void => {\n if (multiple) {\n setValue(prevValue =>\n (prevValue as string[]).filter(value => value !== item)\n )\n } else {\n setValue('')\n }\n },\n [setValue, multiple]\n )\n\n const getItemText = useCallback(\n (itemValue: string) => {\n const displayedText =\n items?.get(itemValue) ?? itemsMap.get(itemValue)?.displayedText\n if (displayedText === undefined || displayedText === '') {\n return null\n }\n\n return (\n <Chip\n key={itemValue}\n disabled={isDisabled}\n onRemove={e => {\n onItemRemove(itemValue)\n e.stopPropagation()\n }}\n removable={canRemoveItem}\n removeAriaLabel={`${unselectAriaLabel} ${displayedText}`}\n data-testid={\n process.env.NODE_ENV === 'test'\n ? `combobox-value-${itemValue}`\n : undefined\n }\n >\n {displayedText}\n </Chip>\n )\n },\n [\n canRemoveItem,\n isDisabled,\n items,\n itemsMap,\n onItemRemove,\n unselectAriaLabel,\n ]\n )\n\n return (\n <>\n {multiple && Array.isArray(value)\n ? value.map(getItemText)\n : getItemText(value as string)}\n </>\n )\n}\n","import { styled } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { separatorStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledSeparator = styled(Primitive.div, separatorStyles)\n\nexport type StyledSeparatorProps = StrictComponentProps<typeof StyledSeparator>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { StyledSeparator } from './separator.styled'\nimport type { StyledSeparatorProps } from './separator.styled'\n\nexport interface SeparatorProps extends StyledSeparatorProps {}\n\nexport const Separator = React.forwardRef<\n ElementRef<typeof StyledSeparator>,\n SeparatorProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue } = useComboboxContext()\n\n if (autoFilter && searchValue.length > 0) {\n return null\n }\n\n return <StyledSeparator {...props} ref={forwardRef} aria-hidden />\n})\n","import type { ComponentPropsWithRef } from 'react'\nimport { Primitive } from '@mirohq/design-system-primitive'\nimport { styled } from '@mirohq/design-system-stitches'\n\nexport const StyledNativeSelect = styled(Primitive.select, {\n // if we support autoComplete, we would have to use visually-hidden styles here\n display: 'none',\n})\n\nexport const StyledComboboxContent = styled(Primitive.div, {\n position: 'relative',\n width: '100%',\n})\n\nexport type StyledComboboxProps = ComponentPropsWithRef<\n typeof StyledComboboxContent\n>\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { Primitive } from '@mirohq/design-system-primitive'\n\nexport const StyledNoResult = styled(Primitive.div, {\n padding: '$100',\n})\n\nexport type StyledNoResultProps = StrictComponentProps<typeof StyledNoResult>\n","import React from 'react'\nimport type { ElementRef, ReactNode } from 'react'\n\nimport type { StyledNoResultProps } from './no-result.styled'\nimport { StyledNoResult } from './no-result.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nexport interface NoResultProps extends StyledNoResultProps {\n /**\n * The content.\n */\n children?: ReactNode\n}\n\nexport const NoResult = React.forwardRef<\n ElementRef<typeof StyledNoResult>,\n NoResultProps\n>((props, forwardRef) => {\n const { autoFilter, searchValue, filteredItems, itemsMap } =\n useComboboxContext()\n\n // when filtering is disabled or idle, just checking if there are any items provided\n const noActiveFiltering =\n !autoFilter || (autoFilter && searchValue.length === 0)\n\n const isVisible = noActiveFiltering\n ? itemsMap.size === 0\n : filteredItems.length === 0\n\n if (isVisible) {\n return <StyledNoResult {...props} ref={forwardRef} />\n }\n\n return null\n})\n","import React, { useCallback } from 'react'\nimport { InputSearch } from '@mirohq/design-system-input'\nimport { styled } from '@mirohq/design-system-stitches'\n\nimport { useComboboxContext } from '../hooks/use-combobox-context'\n\nconst StyledInputSearch = styled(InputSearch, {\n '&&': {\n border: '1px solid $border-neutrals',\n backgroundColor: '$background-control',\n },\n})\n\nexport const SearchInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<typeof InputSearch>\n>((props, ref) => {\n const { setSearchValue, contentRef } = useComboboxContext()\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n setSearchValue(event.target.value)\n props.onChange?.(event)\n },\n [props, setSearchValue]\n )\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ): void => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n // Select first item that is not disabled\n const firstItem = contentRef.current?.querySelector<HTMLElement>(\n '[role=\"option\"]:not([aria-disabled=\"true\"])'\n )\n firstItem?.focus()\n }\n\n props.onKeyDown?.(event)\n }\n\n return (\n <StyledInputSearch\n {...props}\n ref={ref}\n onKeyDown={handleKeyDown}\n onChange={handleSearchChange}\n />\n )\n})\n","import type { ComponentProps } from 'react'\nimport { CompositeItem } from '@ariakit/react'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { itemStyles } from '@mirohq/design-system-base-select'\n\nexport const StyledCompositeItem = styled(CompositeItem, {\n ...itemStyles,\n display: 'flex',\n width: '100%',\n})\n\nexport type StyledCompositeItemProps = ComponentProps<\n typeof StyledCompositeItem\n>\n","import React from 'react'\nimport type { ReactElement } from 'react'\nimport {\n CompositeItem as AriakitCompositeItem,\n useCompositeContext,\n} from '@ariakit/react'\n\nimport { StyledCompositeItem } from './composite-item.styled'\nimport type { StyledCompositeItemProps } from './composite-item.styled'\nimport { useComboboxContext } from '../hooks/use-combobox-context'\nimport { searchQueryMatch } from '../utils'\n\nexport interface CompositeItemProps\n extends Pick<StyledCompositeItemProps, 'disabled' | 'role' | 'children'> {\n /**\n * When true, the element receives real DOM focus and participates in\n * Tab key cycling between composite items.\n */\n tabbable?: boolean\n /**\n * When true (default), the child element becomes the composite item directly\n * via Ariakit's `render` prop — it receives focus and keyboard handling.\n * The child must be a single React element.\n *\n * When false, a styled wrapper acts as the composite item and children are\n * rendered inside it. The wrapper uses the same item styles as Combobox.Item\n * (hover, focus, active states) but without selection semantics.\n * @default true\n */\n asChild?: boolean\n\n /**\n * When provided, the item participates in the combobox's auto-filter logic.\n * The item will be hidden when the search query does not match this text.\n * When omitted, the item is always visible regardless of search state.\n */\n textValue?: string\n\n /**\n * Whether to close the combobox when this item is clicked.\n * @default false\n */\n hideOnClick?: boolean\n}\n\nexport const CompositeItem = ({\n asChild = true,\n role = 'menuitem',\n textValue,\n disabled = false,\n tabbable,\n hideOnClick = false,\n children,\n}: CompositeItemProps): JSX.Element | null => {\n const { searchValue, autoFilter, setOpenState } = useComboboxContext()\n\n // Ariakit's combobox uses virtualFocus, which redirects real DOM focus\n // to the trigger on every item focus. For tabbable items we prevent this\n // so the element keeps real focus — enabling natural Tab/Shift+Tab cycling.\n // We still sync the composite's activeId so arrow navigation continues\n // from the correct position.\n const compositeStore = useCompositeContext()\n const preventVirtualFocus = React.useCallback(\n (e: React.FocusEvent) => {\n const id = e.currentTarget.id\n if (id !== '') {\n compositeStore?.setActiveId(id)\n }\n e.preventDefault()\n },\n [compositeStore]\n )\n\n const tabbableRef = React.useCallback(\n (el: HTMLElement | null) => {\n if (tabbable === true && el != null) {\n el.tabIndex = 0\n }\n },\n [tabbable]\n )\n\n const handleClick = React.useCallback(() => {\n if (hideOnClick) {\n setOpenState(false)\n }\n }, [hideOnClick, setOpenState])\n\n if (\n textValue !== undefined &&\n autoFilter &&\n searchValue !== '' &&\n !searchQueryMatch(textValue, searchValue)\n ) {\n return null\n }\n\n const compositeProps = {\n disabled: disabled,\n accessibleWhenDisabled: disabled,\n role,\n onClick: handleClick,\n onFocus: tabbable === true ? preventVirtualFocus : undefined,\n } as const\n\n if (asChild) {\n return (\n <AriakitCompositeItem\n {...compositeProps}\n ref={tabbableRef}\n render={children as ReactElement}\n />\n )\n }\n\n return (\n <StyledCompositeItem {...compositeProps} ref={tabbableRef}>\n {children}\n </StyledCompositeItem>\n )\n}\n\nCompositeItem.displayName = 'CompositeItem'\n","import React, { useEffect } from 'react'\nimport type { ElementRef, ForwardRefExoticComponent } from 'react'\nimport { ComboboxProvider as AriakitComboboxProvider } from '@ariakit/react'\nimport type { FormElementProps } from '@mirohq/design-system-base-form'\nimport { useFormFieldContext } from '@mirohq/design-system-base-form'\nimport { booleanify } from '@mirohq/design-system-utils'\nimport * as RadixPopover from '@radix-ui/react-popover'\nimport {\n BaseTooltipProvider,\n useBaseTooltipContext,\n} from '@mirohq/design-system-base-tooltip'\nimport { usePrevious } from '@mirohq/design-system-use-previous'\n\nimport { Trigger } from './partials/trigger'\nimport { Content } from './partials/content'\nimport { Input } from './partials/input'\nimport { Item } from './partials/item'\nimport { Portal } from './partials/portal'\nimport { Group } from './partials/group'\nimport { GroupLabel } from './partials/group-label'\nimport { Value } from './partials/value'\nimport { Separator } from './partials/separator'\nimport { StyledComboboxContent, StyledNativeSelect } from './combobox.styled'\nimport type { StyledComboboxProps } from './combobox.styled'\nimport {\n ComboboxProvider,\n useComboboxContext,\n} from './hooks/use-combobox-context'\nimport type { Direction } from './types'\nimport { NoResult } from './partials/no-result'\nimport { SearchInput } from './partials/search-input'\nimport { CompositeItem } from './partials/composite-item'\n\nexport interface ComboboxProps extends FormElementProps, StyledComboboxProps {\n /**\n * The value of the combobox when initially rendered. Use when you do not need\n * to control the state of the combobox.\n */\n defaultValue?: string[] | string\n\n /**\n * The controlled value of the combobox. Should be used in conjunction with\n * onValueChange.\n */\n value?: string[] | string\n\n /**\n * Event handler called when the value changes.\n */\n onValueChange?: (value: string[] | string) => void\n\n /**\n * The controlled search value to filter items. Should be used in conjunction with\n * onSearchValueChange.\n */\n searchValue?: string\n\n /**\n * Event handler called when the trigger input value changes.\n */\n onSearchValueChange?: (value: string) => void\n\n /**\n * The open state of the combobox when it is initially rendered. Use when you do\n * not need to control its open state.\n * @default false\n */\n defaultOpen?: boolean\n\n /**\n * The controlled open state of the combobox. Must be used in conjunction with\n * onOpen and onClose.\n */\n open?: boolean\n\n /**\n * Event handler called when the combobox opens.\n */\n onOpen?: () => void\n\n /**\n * Event handler called when the combobox closes.\n */\n onClose?: () => void\n\n /**\n * The reading direction of the combobox when applicable. If omitted, inherits\n * globally from DirectionProvider or assumes LTR (left-to-right) reading\n * mode.\n * @default 'ltr'\n */\n direction?: Direction\n\n /**\n * The content of the combobox\n */\n children?: React.ReactNode\n\n /**\n * Enables/disabled automatic filtering.\n * @default true\n */\n autoFilter?: boolean\n\n /**\n * The name of the combobox. Submitted with its owning form as part of a\n * name/value pair.\n */\n name?: string\n\n /**\n * Allow single or multiple selection.\n * @default true\n */\n multiple?: boolean\n}\n\nconst Root = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n multiple = true,\n value: valueProp,\n onValueChange,\n name,\n children,\n ...restProps\n },\n forwardRef\n ) => {\n const {\n openState,\n setOpenState,\n value = [],\n setValue,\n required,\n readOnly,\n 'aria-disabled': ariaDisabled,\n disabled,\n direction,\n triggerRef,\n } = useComboboxContext()\n\n const {\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n formElementRef,\n } = useFormFieldContext<HTMLSelectElement>()\n\n useEffect(() => {\n setRequired?.(required)\n setDisabled?.(disabled)\n setAriaDisabled?.(ariaDisabled)\n setReadOnly?.(readOnly)\n }, [\n readOnly,\n disabled,\n ariaDisabled,\n required,\n setRequired,\n setDisabled,\n setAriaDisabled,\n setReadOnly,\n ])\n\n const { ignoreNextTooltip } = useBaseTooltipContext()\n const prevOpen = usePrevious(openState)\n\n useEffect(() => {\n if (prevOpen === true && !openState) {\n ignoreNextTooltip()\n }\n }, [ignoreNextTooltip, openState, prevOpen])\n\n const onSetSelectedValue = (newValue: string | string[]): void => {\n // If no defaultValue is provided the newValue is always an array so we need validate the types\n if (!multiple && Array.isArray(newValue)) {\n setValue(newValue[0])\n } else if (multiple && !Array.isArray(newValue)) {\n setValue([newValue])\n } else {\n setValue(newValue)\n }\n }\n\n const onOpenChange = (value: boolean): void => {\n if (!booleanify(readOnly)) {\n setOpenState(value)\n }\n }\n\n const isFormControl = Boolean(triggerRef.current?.closest('form'))\n\n const getOptionValue = (\n itemValue: string | string[]\n ): JSX.Element | JSX.Element[] => {\n if (multiple && Array.isArray(itemValue)) {\n return (value as string[]).map(itemValue => (\n <option key={itemValue} value={itemValue}>\n {itemValue}\n </option>\n ))\n } else {\n return (\n <option key={itemValue as string} value={itemValue}>\n {itemValue}\n </option>\n )\n }\n }\n\n return (\n <RadixPopover.Root open={openState} onOpenChange={onOpenChange}>\n <AriakitComboboxProvider\n open={openState}\n setOpen={onOpenChange}\n selectedValue={value}\n setSelectedValue={onSetSelectedValue}\n >\n <StyledComboboxContent\n ref={forwardRef}\n {...restProps}\n dir={direction}\n data-form-element='select'\n >\n {children}\n </StyledComboboxContent>\n </AriakitComboboxProvider>\n {isFormControl && (\n <StyledNativeSelect\n multiple={multiple}\n autoComplete='off'\n name={name}\n tabIndex={-1}\n aria-hidden='true'\n ref={formElementRef}\n required={required}\n disabled={disabled}\n aria-disabled={ariaDisabled}\n value={value}\n // since we don't support autoComplete there is no way this select value will change,\n // although we still need to provide `onChange` since we use `value` and not `defaultValue`\n onChange={() => {}}\n >\n {value.length === 0 ? (\n <option value='' />\n ) : (\n // since we don't support autoComplete we can render here only selected values\n getOptionValue(value)\n )}\n </StyledNativeSelect>\n )}\n </RadixPopover.Root>\n )\n }\n)\n\nexport const Combobox = React.forwardRef<\n ElementRef<typeof StyledComboboxContent>,\n ComboboxProps\n>(\n (\n {\n 'aria-disabled': ariaDisabled,\n defaultOpen = false,\n open,\n valid,\n disabled,\n readOnly,\n required,\n value,\n defaultValue,\n onOpen,\n onClose,\n searchValue,\n onSearchValueChange,\n onValueChange,\n direction = 'ltr',\n autoFilter = true,\n ...restProps\n },\n forwardRef\n ) => (\n <ComboboxProvider\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n searchValue={searchValue}\n onSearchValueChange={onSearchValueChange}\n defaultOpen={defaultOpen}\n open={open}\n onOpen={onOpen}\n onClose={onClose}\n valid={valid}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-disabled={ariaDisabled}\n direction={direction}\n autoFilter={autoFilter}\n >\n <BaseTooltipProvider>\n <Root {...restProps} value={value} ref={forwardRef} />\n </BaseTooltipProvider>\n </ComboboxProvider>\n )\n) as ForwardRefExoticComponent<ComboboxProps> & Partials\n\nexport interface Partials {\n Portal: typeof Portal\n Trigger: typeof Trigger\n Input: typeof Input\n Content: typeof Content\n Item: typeof Item\n CompositeItem: typeof CompositeItem\n Group: typeof Group\n GroupLabel: typeof GroupLabel\n Value: typeof Value\n Separator: typeof Separator\n NoResult: typeof NoResult\n SearchInput: typeof SearchInput\n}\n\nCombobox.Portal = Portal\nCombobox.Trigger = Trigger\nCombobox.Input = Input\nCombobox.Content = Content\nCombobox.Item = Item\nCombobox.CompositeItem = CompositeItem\nCombobox.Group = Group\nCombobox.GroupLabel = GroupLabel\nCombobox.Value = Value\nCombobox.Separator = Separator\nCombobox.NoResult = NoResult\nCombobox.SearchInput = SearchInput\n"],"names":["RadixTrigger","RadixAnchor","AriakitComboboxTrigger","useAriakitComboboxContext","AriakitComboboxList","AriakitComboboxItemCheck","RadixPortal","AriakitGroup","GroupLabel","value","CompositeItem","AriakitCompositeItem","itemValue","AriakitComboboxProvider"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -261,6 +261,14 @@ interface ValueProps {
261
261
  * @default true
262
262
  */
263
263
  multiple?: boolean;
264
+ /**
265
+ * Explicit value-to-label source for the selected chips. Labels are otherwise
266
+ * read from the rendered `Combobox.Item`s, which only cover what is mounted —
267
+ * so a selection that is virtualized out of view, filtered out, or on another
268
+ * page of remotely fetched data would render no chip at all. Pass the labels
269
+ * you already hold to keep every selection visible.
270
+ */
271
+ items?: ReadonlyMap<string, string>;
264
272
  }
265
273
  declare const Value: FC<ValueProps>;
266
274
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mirohq/design-system-combobox",
3
- "version": "1.5.39-reactdismissablelayer.0",
3
+ "version": "1.6.0",
4
4
  "description": "",
5
5
  "author": "Miro",
6
6
  "source": "src/index.ts",
@@ -28,23 +28,23 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@ariakit/react": "0.4.18",
31
- "@radix-ui/react-popover": "^1.1.23",
32
- "@radix-ui/react-use-controllable-state": "1.2.6",
31
+ "@radix-ui/react-popover": "^1.0.7",
32
+ "@radix-ui/react-use-controllable-state": "1.1.1",
33
33
  "@react-aria/utils": "^3.31.0",
34
- "@mirohq/design-system-base-input": "^1.4.4-reactdismissablelayer.0",
35
- "@mirohq/design-system-base-select": "^1.3.33-reactdismissablelayer.0",
36
34
  "@mirohq/design-system-base-form": "^2.0.0",
35
+ "@mirohq/design-system-base-select": "^1.3.32",
36
+ "@mirohq/design-system-chip": "^1.2.60",
37
37
  "@mirohq/design-system-base-tooltip": "^1.2.1",
38
- "@mirohq/design-system-chip": "^1.2.61-reactdismissablelayer.0",
39
- "@mirohq/design-system-icons": "^1.46.1-reactdismissablelayer.0",
40
- "@mirohq/design-system-input": "^1.6.10-reactdismissablelayer.0",
41
- "@mirohq/design-system-scroll-area": "^1.2.37-reactdismissablelayer.0",
38
+ "@mirohq/design-system-base-input": "^1.4.3",
39
+ "@mirohq/design-system-icons": "^1.46.0",
40
+ "@mirohq/design-system-input": "^1.6.9",
42
41
  "@mirohq/design-system-stitches": "^3.3.32",
43
- "@mirohq/design-system-use-aria-disabled": "^1.1.4",
42
+ "@mirohq/design-system-scroll-area": "^1.2.36",
44
43
  "@mirohq/design-system-use-id": "^1.1.1",
45
- "@mirohq/design-system-use-layout-effect": "^1.1.1",
44
+ "@mirohq/design-system-primitive": "^2.2.1",
45
+ "@mirohq/design-system-use-aria-disabled": "^1.1.4",
46
46
  "@mirohq/design-system-utils": "^1.3.0",
47
- "@mirohq/design-system-primitive": "^2.2.2-reactdismissablelayer.0",
47
+ "@mirohq/design-system-use-layout-effect": "^1.1.1",
48
48
  "@mirohq/design-system-use-previous": "^1.1.1"
49
49
  },
50
50
  "scripts": {