@sproutsocial/seeds-react-menu 1.16.16 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.turbo/turbo-build.log +14 -14
  2. package/CHANGELOG.md +21 -0
  3. package/dist/esm/v3/index.js +90 -56
  4. package/dist/esm/v3/index.js.map +1 -1
  5. package/dist/v3/index.d.mts +18 -0
  6. package/dist/v3/index.d.ts +18 -0
  7. package/dist/v3/index.js +90 -56
  8. package/dist/v3/index.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/ActionMenu/ActionMenu.stories.tsx +1 -1
  11. package/src/Autocomplete/Autocomplete.stories.tsx +1 -1
  12. package/src/MenuContent/MenuContent.stories.tsx +1 -1
  13. package/src/MenuFooter/MenuFooter.stories.tsx +1 -1
  14. package/src/MenuGroup/MenuGroup.stories.tsx +1 -1
  15. package/src/MenuHeader/MenuHeader.stories.tsx +1 -1
  16. package/src/MenuItem/MenuItem.stories.tsx +1 -1
  17. package/src/MenuToggleButton/MenuToggleButton.stories.tsx +1 -1
  18. package/src/MultiSelectMenu/MultiSelectMenu.stories.tsx +1 -1
  19. package/src/NestedMenu/NestedMenu.stories.tsx +1 -1
  20. package/src/SingleSelectMenu/SingleSelectMenu.stories.tsx +1 -1
  21. package/src/SubmenuItem/SubmenuItem.stories.tsx +1 -1
  22. package/src/v2/Autocomplete/Autocomplete.stories.tsx +1 -1
  23. package/src/v2/Select/Select.stories.tsx +1 -1
  24. package/src/v3/ActionMenu.stories.tsx +1 -1
  25. package/src/v3/MenuButton.stories.tsx +1 -1
  26. package/src/v3/ModalStories.stories.tsx +1 -1
  27. package/src/v3/MultiCombobox.stories.tsx +1 -1
  28. package/src/v3/MultiCombobox.tsx +7 -0
  29. package/src/v3/MultiSearchableSelect.stories.tsx +1 -1
  30. package/src/v3/MultiSearchableSelect.tsx +7 -0
  31. package/src/v3/MultiSelect.stories.tsx +1 -1
  32. package/src/v3/MultiSelect.tsx +9 -1
  33. package/src/v3/SingleCombobox.stories.tsx +1 -1
  34. package/src/v3/SingleCombobox.tsx +7 -0
  35. package/src/v3/SingleSearchableSelect.stories.tsx +1 -1
  36. package/src/v3/SingleSearchableSelect.tsx +7 -0
  37. package/src/v3/SingleSelect.stories.tsx +1 -1
  38. package/src/v3/SingleSelect.tsx +9 -1
  39. package/src/v3/__tests__/ariaLabels.test.tsx +133 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/v3/SingleSelect.tsx","../../../src/v3/SeedsPortal.tsx","../../../src/v3/Common/SelectItem.tsx","../../../src/v3/Common/groupItems.ts","../../../src/v3/Common/SelectStyles.tsx","../../../src/v3/Common/SelectIcons.tsx","../../../src/v3/MultiSelect.tsx","../../../src/v3/SingleCombobox.tsx","../../../src/v3/Common/useSuppressEscapeClear.ts","../../../src/v3/Common/ComboboxItem.tsx","../../../src/v3/Common/ComboboxStyles.tsx","../../../src/v3/Common/VirtualizedComboboxList.tsx","../../../src/v3/Common/sentinels.ts","../../../src/v3/MultiCombobox.tsx","../../../src/v3/SingleSearchableSelect.tsx","../../../src/v3/MultiSearchableSelect.tsx","../../../src/v3/ActionMenu.tsx","../../../src/v3/ActionMenuStyles.tsx","../../../src/v3/MenuButton.tsx","../../../src/v3/MenuButtonStyles.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Select } from \"@base-ui/react/select\";\nimport styled from \"styled-components\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport SelectItem from \"./Common/SelectItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n Field,\n SelectTrigger,\n SelectIcon,\n SelectGroup,\n SelectGroupLabel,\n SelectSeparator,\n SelectPositioner,\n SelectPopup,\n} from \"./Common/SelectStyles\";\nimport { StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// <Listbox(?!\\.|B)\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst StyledValue = styled(Select.Value)`\n flex: 1;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &[data-placeholder] {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n`;\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface SingleSelectBaseProps {\n id?: string;\n placeholder?: string;\n includePlaceholderItem?: boolean;\n disabled?: boolean;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface SingleSelectDataProps<T extends DataWithId>\n extends SingleSelectBaseProps {\n data: T[];\n itemToString: (item: T | null) => string;\n renderItem?: (item: T) => React.ReactNode;\n inputType?: \"icon\" | \"radio\";\n selectedItemId?: T[\"id\"] | null;\n defaultSelectedItemId?: T[\"id\"] | null;\n onSelectedItemIdChange?: (id: T[\"id\"] | null) => void;\n renderSelection?: (item: T) => React.ReactNode;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n children?: never;\n}\n\ninterface SingleSelectChildrenProps extends SingleSelectBaseProps {\n children: React.ReactNode;\n selectedItemId?: string | number | null;\n defaultSelectedItemId?: string | number | null;\n onSelectedItemIdChange?: (id: string | number | null) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n inputType?: never;\n renderSelection?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n}\n\nexport type SingleSelectProps<T extends DataWithId> =\n | SingleSelectDataProps<T>\n | SingleSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SingleSelect<T extends DataWithId>(\n props: SingleSelectProps<T>\n) {\n const { id, placeholder, includePlaceholderItem, fullWidth = true } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const selectedItemId = props.selectedItemId;\n const defaultSelectedItemId = props.defaultSelectedItemId;\n const onSelectedItemIdChange = props.onSelectedItemIdChange;\n\n const data = isChildrenMode ? [] : (props as SingleSelectDataProps<T>).data;\n const itemToString = isChildrenMode\n ? () => \"\"\n : (props as SingleSelectDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).renderItem;\n const inputType = isChildrenMode\n ? \"icon\"\n : (props as SingleSelectDataProps<T>).inputType ?? \"icon\";\n const renderSelection = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).renderSelection;\n const groupBy = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as SingleSelectChildrenProps).children\n : undefined;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const items = React.useMemo(() => {\n const dataItems = data.map((item) => ({\n value: String(item.id),\n label: itemToString(item),\n }));\n if (includePlaceholderItem) {\n return [{ value: null, label: placeholder ?? \"\" }, ...dataItems];\n }\n return dataItems;\n }, [data, itemToString, includePlaceholderItem, placeholder]);\n\n const dataWithPlaceholder = includePlaceholderItem\n ? [{ id: null, value: null, label: placeholder ?? \"\" }, ...data]\n : data;\n\n const isControlled = selectedItemId !== undefined;\n const [internalValue, setInternalValue] = React.useState<string | null>(\n defaultSelectedItemId != null ? String(defaultSelectedItemId) : null\n );\n const value = isControlled\n ? selectedItemId != null\n ? String(selectedItemId)\n : null\n : internalValue;\n\n const selectedItem = React.useMemo(\n () =>\n value != null ? data.find((d) => String(d.id) === value) ?? null : null,\n [data, value]\n );\n\n function handleValueChange(newValue: string | null) {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n if (onSelectedItemIdChange) {\n if (newValue == null) {\n onSelectedItemIdChange(null);\n } else {\n const item = data.find((d) => String(d.id) === newValue);\n onSelectedItemIdChange(item ? item.id : null);\n }\n }\n }\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Select.Root\n items={items}\n value={value}\n disabled={props.disabled}\n onValueChange={handleValueChange}\n id={id}\n >\n <SelectTrigger\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n <StyledValue placeholder={placeholder}>\n {renderSelection && selectedItem\n ? renderSelection(selectedItem)\n : undefined}\n </StyledValue>\n <SelectIcon>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SelectIcon>\n </SelectTrigger>\n <Select.Portal container={portalContainer}>\n <SelectPositioner sideOffset={8} alignItemWithTrigger={false}>\n <SelectPopup>\n <Select.ScrollUpArrow />\n <Select.List>\n {children ? (\n children\n ) : groupBy ? (\n groupItems(data, groupBy).map((group, index, arr) => (\n <React.Fragment key={group.value}>\n <SelectGroup>\n <SelectGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </SelectGroupLabel>\n {group.items.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n ))}\n </SelectGroup>\n {index < arr.length - 1 && <SelectSeparator />}\n </React.Fragment>\n ))\n ) : (\n <>\n {includePlaceholderItem && (\n <SelectItem\n key={\"placeholder\"}\n value={null}\n label={placeholder ?? \"\"}\n />\n )}\n {data.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n ))}\n </>\n )}\n </Select.List>\n <Select.ScrollDownArrow />\n </SelectPopup>\n </SelectPositioner>\n </Select.Portal>\n </Select.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { DisablePortalToBodyContext } from \"@sproutsocial/seeds-react-portal\";\n\n/**\n * Returns the portal container to use for Base UI's Select.Portal /\n * Combobox.Portal. When inside a Modal V2 or Drawer (which set\n * DisablePortalToBodyContext=true), returns a ref'd div rendered inline so\n * the popup stays inside the Radix Dialog's focus/pointer boundary.\n * Otherwise returns undefined, letting Base UI portal to document.body.\n *\n * Module Federation note: when a remote chunk loads its own copy of\n * seeds-react-portal, the context object identity differs from the host's\n * copy, so DisablePortalToBodyContext will always read false in the remote\n * even when a Modal/Drawer/PeekIn has provided true. As a fallback we walk\n * the DOM from the containerRef anchor and treat any [role=\"dialog\"] ancestor\n * as an in-dialog boundary, matching the same behaviour the context would have\n * triggered.\n *\n * Usage:\n * const { containerRef, portalContainer } = useSeedsPortalContainer();\n * <div ref={containerRef} style={{ position: \"relative\" }} />\n * <Select.Portal container={portalContainer}>...</Select.Portal>\n */\nexport function useSeedsPortalContainer() {\n const disablePortalToBody = React.useContext(DisablePortalToBodyContext);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [portalContainer, setPortalContainer] = React.useState<\n HTMLElement | undefined\n >(undefined);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n // Primary signal: context set by Modal V2 / Drawer / PeekIn in the same\n // module federation chunk.\n const insideDialog =\n disablePortalToBody ||\n // Fallback for cross-chunk MFE scenarios where context identity differs:\n // detect the dialog boundary directly from the DOM.\n !!containerRef.current.closest(\"[role='dialog']\");\n\n if (insideDialog) {\n // Portal to the Radix Dialog content element so the popup escapes the\n // ModalBody scroll container while staying inside the Dialog boundary\n // (required for Radix focus/pointer-events containment).\n const dialogContent =\n containerRef.current.closest<HTMLElement>(\"[role='dialog']\");\n setPortalContainer(dialogContent ?? containerRef.current);\n }\n }, [disablePortalToBody]);\n\n return { containerRef, portalContainer, disablePortalToBody };\n}\n","import * as React from \"react\";\nimport { Select } from \"@base-ui/react/select\";\nimport styled from \"styled-components\";\nimport Radio from \"@sproutsocial/seeds-react-radio\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nexport const StyledItem = styled(Select.Item)`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: 14px;\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n\n &[data-selected] {\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const StyledItemIndicator = styled(Select.ItemIndicator)`\n display: flex;\n align-items: center;\n width: 16px;\n color: ${({ theme }) => theme.colors.text.body};\n visibility: hidden;\n\n &[data-selected] {\n visibility: visible;\n }\n`;\n\nexport const StyledItemText = styled(Select.ItemText)``;\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nfunction CheckIcon() {\n return <Icon name=\"check-outline\" fixedWidth aria-hidden />;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\ninterface SelectItemProps {\n value: string | null;\n label: string;\n disabled?: boolean;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n renderItem?: () => React.ReactNode;\n hidden?: boolean;\n}\n\nexport default function SelectItem({\n value,\n label,\n disabled,\n inputType = \"icon\",\n renderItem,\n hidden,\n}: SelectItemProps) {\n return (\n <StyledItem\n value={value}\n disabled={disabled}\n style={hidden ? { display: \"none\" } : undefined}\n data-qa-menu-item={label}\n >\n {inputType === \"radio\" ? (\n <StyledItemIndicator\n keepMounted\n render={(_props, state) => (\n <Radio\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`radio-${value}`}\n name=\"select-item\"\n />\n )}\n />\n ) : inputType === \"checkbox\" ? (\n <StyledItemIndicator\n keepMounted\n render={(_props, state) => (\n <Checkbox\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`checkbox-${value}`}\n name=\"select-item\"\n />\n )}\n />\n ) : inputType === \"icon\" ? (\n <StyledItemIndicator keepMounted>\n <CheckIcon />\n </StyledItemIndicator>\n ) : null}\n <StyledItemText>{renderItem ? renderItem() : label}</StyledItemText>\n </StyledItem>\n );\n}\n","export function groupItems<T>(\n data: T[],\n groupBy: (item: T) => string\n): Array<{ value: string; items: T[] }> {\n const map = new Map<string, T[]>();\n for (const item of data) {\n const key = groupBy(item);\n if (!map.has(key)) map.set(key, []);\n map.get(key)!.push(item);\n }\n return Array.from(map.entries()).map(([value, items]) => ({ value, items }));\n}\n","import { Select } from \"@base-ui/react/select\";\nimport styled, { css } from \"styled-components\";\nimport { focusRing } from \"@sproutsocial/seeds-react-mixins\";\nimport { StyledChevron } from \"./SelectIcons\";\n\nconst invalidStyles = css`\n border-color: ${({ theme }) => theme.colors.form.border.error};\n\n ${StyledChevron} {\n color: ${({ theme }) => theme.colors.icon.error};\n }\n`;\n\nexport const Field = styled.div<{ $fullWidth?: boolean }>`\n display: ${({ $fullWidth }) =>\n $fullWidth === false ? \"inline-flex\" : \"flex\"};\n flex-direction: column;\n gap: ${({ theme }) => theme.space[200]};\n ${({ $fullWidth }) => $fullWidth !== false && \"width: 100%;\"}\n`;\n\nexport const SelectLabel = styled(Select.Label)`\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const SelectTrigger = styled(Select.Trigger)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]}`};\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-popup-open] {\n ${focusRing}\n }\n\n &[data-popup-open] [data-chevron] {\n transform: rotate(-180deg);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const SelectValue = styled(Select.Value)`\n min-width: 0;\n overflow: hidden;\n`;\n\nexport const SelectIcon = styled(Select.Icon)`\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.colors.icon.base};\n flex-shrink: 0;\n`;\n\nexport const SelectGroup = styled(Select.Group)`\n display: block;\n`;\n\nexport const SelectGroupLabel = styled(Select.GroupLabel)`\n padding: ${({ theme }) =>\n `${theme.space[300]} ${theme.space[300]} ${theme.space[200]}`};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${({ theme }) => theme.colors.text.subtext};\n`;\n\nexport const SelectSeparator = styled(Select.Separator)`\n height: 1px;\n margin: ${({ theme }) => `${theme.space[200]} ${theme.space[300]}`};\n background: ${({ theme }) => theme.colors.container.border.base};\n`;\n\nexport const SelectPositioner = styled(Select.Positioner)`\n width: var(--anchor-width);\n z-index: 7;\n`;\n\nexport const SelectPopup = styled(Select.Popup)`\n font-family: ${({ theme }) => theme.fontFamily};\n background: ${({ theme }) => theme.colors.container.background.base};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n border-radius: ${({ theme }) => theme.radii[500]};\n box-shadow: ${({ theme }) => theme.shadows.low};\n outline: none;\n max-height: min(var(--available-height, 400px), 400px);\n overflow-y: auto;\n padding: ${({ theme }) => theme.space[200]};\n\n &[data-open] {\n animation: select-popup-in 120ms ease-out;\n }\n\n &[data-closed] {\n animation: select-popup-out 100ms ease-in;\n }\n\n @keyframes select-popup-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes select-popup-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n`;\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\n\nexport interface StyledChevronProps {\n $isOpen?: boolean;\n}\n\nexport const StyledChevron = styled.div<StyledChevronProps>`\n display: flex;\n align-items: center;\n transition: transform 0.15s;\n ${({ $isOpen }) => $isOpen && \"transform: rotate(-180deg);\"}\n`;\n\nexport function ChevronIcon() {\n return <Icon name=\"chevron-down-outline\" fixedWidth aria-hidden />;\n}\n\nexport function ClearIcon() {\n return <Icon name=\"circle-x-outline\" fixedWidth aria-hidden size=\"mini\" />;\n}\n\nexport function CheckIcon() {\n return <Icon name=\"check-outline\" fixedWidth aria-hidden />;\n}\n","import * as React from \"react\";\nimport { Select } from \"@base-ui/react/select\";\nimport styled from \"styled-components\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport SelectItem from \"./Common/SelectItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n Field,\n SelectTrigger,\n SelectValue,\n SelectIcon,\n SelectGroup,\n SelectGroupLabel,\n SelectSeparator,\n SelectPositioner,\n SelectPopup,\n} from \"./Common/SelectStyles\";\nimport { StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst SelectionText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\n// The styles in here need cleaned up, but in MultiSearchableSelect are correct\nconst Placeholder = styled.div`\n color: ${({ theme }) => theme.colors.text.subtext};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n line-height: 16px;\n padding-top: 2px;\n padding-bottom: 2px;\n margin: 2px 8px 0px 0px;\n`;\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface MultiSelectBaseProps {\n id?: string;\n placeholder?: string;\n disabled?: boolean;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface MultiSelectDataProps<T extends DataWithId>\n extends MultiSelectBaseProps {\n data: T[];\n itemToString: (item: T) => string;\n renderItem?: (item: T) => React.ReactNode;\n customRenderSelections?: (item: T) => string;\n renderSelection?: (items: T[]) => React.ReactNode;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n maxSelections?: number;\n selectedItemIds?: Array<T[\"id\"]>;\n defaultSelectedItemIds?: Array<T[\"id\"]>;\n onSelectedItemIdsChange?: (ids: Array<T[\"id\"]>) => void;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n removeSelectedItems?: boolean;\n children?: never;\n}\n\ninterface MultiSelectChildrenProps extends MultiSelectBaseProps {\n children: React.ReactNode;\n selectedItemIds?: Array<string | number>;\n defaultSelectedItemIds?: Array<string | number>;\n onSelectedItemIdsChange?: (ids: Array<string | number>) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n customRenderSelections?: never;\n renderSelection?: never;\n inputType?: never;\n maxSelections?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n removeSelectedItems?: never;\n}\n\nexport type MultiSelectProps<T extends DataWithId> =\n | MultiSelectDataProps<T>\n | MultiSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function MultiSelect<T extends DataWithId>(props: MultiSelectProps<T>) {\n const { id, placeholder = \"Select...\", fullWidth = true } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const data = isChildrenMode ? [] : (props as MultiSelectDataProps<T>).data;\n const itemToString = isChildrenMode\n ? () => \"\"\n : (props as MultiSelectDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).renderItem;\n const customRenderSelections = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).customRenderSelections;\n const maxSelections = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).maxSelections;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).renderSelection;\n const removeSelectedItems = isChildrenMode\n ? false\n : (props as MultiSelectDataProps<T>).removeSelectedItems ?? false;\n const inputType = isChildrenMode\n ? \"checkbox\"\n : removeSelectedItems\n ? \"none\"\n : (props as MultiSelectDataProps<T>).inputType ?? \"checkbox\";\n const selectedItemIds = props.selectedItemIds;\n const defaultSelectedItemIds = props.defaultSelectedItemIds;\n const onSelectedItemIdsChange = props.onSelectedItemIdsChange;\n const groupBy = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as MultiSelectChildrenProps).children\n : undefined;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n\n const isControlled = selectedItemIds !== undefined;\n\n const [internalValue, setInternalValue] = React.useState<string[]>(\n () => defaultSelectedItemIds?.map(String) ?? []\n );\n\n const value = isControlled ? selectedItemIds!.map(String) : internalValue;\n\n const items = React.useMemo(\n () =>\n data.map((item) => ({\n value: String(item.id),\n label: itemToString(item),\n })),\n [data, itemToString]\n );\n\n const selectedItems = React.useMemo(\n () =>\n value\n .map((v) => data.find((d) => String(d.id) === v))\n .filter((d): d is T => d != null),\n [data, value]\n );\n\n function handleValueChange(newValues: string[]) {\n if (!isControlled) {\n setInternalValue(newValues);\n }\n if (onSelectedItemIdsChange) {\n const ids = newValues.map((v) => {\n const item = data.find((d) => String(d.id) === v);\n return item ? item.id : v;\n });\n onSelectedItemIdsChange(ids as Array<T[\"id\"]>);\n }\n }\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Select.Root\n multiple\n items={items}\n value={value}\n onValueChange={handleValueChange}\n disabled={props.disabled}\n id={id}\n >\n <SelectTrigger\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n <SelectValue>\n {() => {\n if (renderSelection) return renderSelection(selectedItems);\n if (selectedItems.length === 0)\n return <Placeholder>{placeholder}</Placeholder>;\n\n const visibleItems =\n maxSelections != null\n ? selectedItems.slice(0, maxSelections)\n : selectedItems;\n const overflowCount =\n maxSelections != null && selectedItems.length > maxSelections\n ? selectedItems.length - maxSelections\n : 0;\n\n const text = visibleItems\n .map((item) =>\n customRenderSelections\n ? customRenderSelections(item)\n : itemToString(item)\n )\n .join(\", \");\n\n return (\n <SelectionText>\n {text}\n {overflowCount > 0 ? `, +${overflowCount}` : \"\"}\n </SelectionText>\n );\n }}\n </SelectValue>\n <SelectIcon>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SelectIcon>\n </SelectTrigger>\n <Select.Portal container={portalContainer}>\n <SelectPositioner sideOffset={8} alignItemWithTrigger={false}>\n <SelectPopup>\n <Select.ScrollUpArrow />\n <Select.List>\n {children\n ? children\n : groupBy\n ? groupItems(data, groupBy).map((group, index, arr) => (\n <React.Fragment key={group.value}>\n <SelectGroup>\n <SelectGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </SelectGroupLabel>\n {group.items.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n hidden={\n removeSelectedItems &&\n value.includes(String(item.id))\n }\n renderItem={\n renderItem ? () => renderItem(item) : undefined\n }\n />\n ))}\n </SelectGroup>\n {index < arr.length - 1 && <SelectSeparator />}\n </React.Fragment>\n ))\n : data.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n hidden={\n removeSelectedItems && value.includes(String(item.id))\n }\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n ))}\n </Select.List>\n <Select.ScrollDownArrow />\n </SelectPopup>\n </SelectPositioner>\n </Select.Portal>\n </Select.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport { useSuppressEscapeClear } from \"./Common/useSuppressEscapeClear\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxInputGroup,\n ComboboxInput,\n ComboboxActionButtons,\n ComboboxClear,\n ComboboxTrigger,\n ComboboxPositioner,\n ComboboxPopup,\n ComboboxList,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n} from \"./Common/ComboboxStyles\";\nimport { ClearIcon, StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface SingleComboboxBaseProps {\n id?: string;\n placeholder?: string;\n emptyText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface SingleComboboxDataBaseProps<T extends DataWithId>\n extends SingleComboboxBaseProps {\n data: T[];\n itemToString: (item: T | null) => string;\n renderItem?: (item: T) => React.ReactNode;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n selectedItemId?: T[\"id\"] | null;\n defaultSelectedItemId?: T[\"id\"] | null;\n onSelectedItemIdChange?: (id: T[\"id\"] | null) => void;\n children?: never;\n}\n\ninterface SingleComboboxDataProps<T extends DataWithId>\n extends SingleComboboxDataBaseProps<T> {\n isVirtualized?: false;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n}\n\ninterface SingleComboboxVirtualizedProps<T extends DataWithId>\n extends SingleComboboxDataBaseProps<T> {\n isVirtualized: true;\n groupBy?: never;\n renderGroupHeading?: never;\n}\n\ninterface SingleComboboxChildrenProps extends SingleComboboxBaseProps {\n children: React.ReactNode;\n selectedItemId?: string | number | null;\n defaultSelectedItemId?: string | number | null;\n onSelectedItemIdChange?: (id: string | number | null) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n inputType?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n isVirtualized?: never;\n}\n\nexport type SingleComboboxProps<T extends DataWithId> =\n | SingleComboboxDataProps<T>\n | SingleComboboxVirtualizedProps<T>\n | SingleComboboxChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SingleCombobox<T extends DataWithId>(\n props: SingleComboboxProps<T>\n) {\n const {\n id,\n placeholder = \"Search...\",\n emptyText = \"No results found.\",\n filter,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n type DataProps =\n | SingleComboboxDataProps<T>\n | SingleComboboxVirtualizedProps<T>;\n\n const data = isChildrenMode ? ([] as T[]) : (props as DataProps).data;\n const itemToString = isChildrenMode\n ? (_item: T | null) => \"\"\n : (props as DataProps).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as DataProps).renderItem;\n const inputType = isChildrenMode\n ? \"icon\"\n : (props as DataProps).inputType ?? \"icon\";\n const isVirtualized = isChildrenMode\n ? false\n : (props as DataProps).isVirtualized ?? false;\n const groupBy = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleComboboxDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleComboboxDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as SingleComboboxChildrenProps).children\n : undefined;\n\n const selectedItemId = props.selectedItemId;\n const defaultSelectedItemId = props.defaultSelectedItemId;\n const onSelectedItemIdChange = props.onSelectedItemIdChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n\n const onInputKeyDownCapture = useSuppressEscapeClear(open);\n\n const isControlled = selectedItemId !== undefined;\n\n const idToItem = React.useCallback(\n (id: T[\"id\"] | null | undefined): T | null => {\n if (id == null) return null;\n return data.find((d) => String(d.id) === String(id)) ?? null;\n },\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T | null>(() =>\n idToItem(defaultSelectedItemId as T[\"id\"] | null)\n );\n\n const value = isControlled\n ? idToItem(selectedItemId as T[\"id\"] | null)\n : internalValue;\n\n function handleValueChange(newItem: T | null) {\n if (!isControlled) {\n setInternalValue(newItem);\n }\n if (onSelectedItemIdChange) {\n onSelectedItemIdChange(newItem ? newItem.id : null);\n }\n }\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(data, groupBy) : null),\n [data, groupBy]\n );\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n id={id}\n value={value}\n onValueChange={handleValueChange}\n itemToStringLabel={itemToString}\n isItemEqualToValue={(a, b) => a != null && b != null && a.id === b.id}\n items={\n isVirtualized ? data : groups ?? (isChildrenMode ? undefined : data)\n }\n virtualized={isVirtualized}\n disabled={props.disabled}\n filter={filter}\n open={open}\n onOpenChange={setOpen}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n >\n <ComboboxInputGroup\n $isInvalid={isInvalid}\n onKeyDownCapture={onInputKeyDownCapture}\n >\n <ComboboxInput\n placeholder={placeholder}\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n />\n <ComboboxActionButtons>\n <ComboboxClear aria-label=\"Clear selection\">\n <ClearIcon />\n </ComboboxClear>\n <ComboboxTrigger aria-label=\"Open popup\">\n <StyledChevron $isOpen={open}>\n <ChevronIcon />\n </StyledChevron>\n </ComboboxTrigger>\n </ComboboxActionButtons>\n </ComboboxInputGroup>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <ComboboxPopup\n style={\n isVirtualized\n ? { display: \"flex\", flexDirection: \"column\" }\n : undefined\n }\n >\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={groups}\n data={data}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n renderGroupHeading={renderGroupHeading}\n />\n ) : children ? (\n children\n ) : groups ? (\n (group: { value: string; items: T[] }, index: number) => (\n <React.Fragment key={group.value}>\n <ComboboxGroup items={group.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n )\n ) : (\n (item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )\n )}\n </ComboboxList>\n </ComboboxPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\n\n// When the popup is closed, Base UI's ComboboxInput onKeyDown handler clears\n// both the typed input value and the committed selection on Escape (an\n// ARIA-permitted but destructive interpretation of the combobox pattern). We\n// suppress that path by stopping the synthetic event in capture phase before\n// it reaches the input's React bubble-phase handler. The popup-open Escape\n// (handled by Base UI's document listener in useDismiss) and the parent\n// Modal/Dialog Escape (handled by Radix's document-capture listener, which\n// runs before any React synthetic dispatch) are both unaffected.\nexport function useSuppressEscapeClear(open: boolean) {\n return React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Escape\" && !open) {\n event.stopPropagation();\n }\n },\n [open]\n );\n}\n","import * as React from \"react\";\nimport Radio from \"@sproutsocial/seeds-react-radio\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport {\n ComboboxItem as StyledItem,\n ComboboxItemIndicator,\n} from \"./ComboboxStyles\";\nimport { CheckIcon } from \"./SelectIcons\";\n\ninterface ComboboxItemProps<T> {\n value: T;\n itemId: string;\n label: string;\n disabled?: boolean;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n renderItem?: () => React.ReactNode;\n index?: number;\n \"data-index\"?: number;\n style?: React.CSSProperties;\n}\n\nfunction ComboboxItemInner<T>(\n {\n value,\n itemId,\n label,\n disabled,\n inputType = \"icon\",\n renderItem,\n index,\n \"data-index\": dataIndex,\n style,\n }: ComboboxItemProps<T>,\n ref: React.Ref<HTMLDivElement>\n) {\n return (\n <StyledItem\n value={value}\n index={index}\n data-index={dataIndex}\n style={style}\n ref={ref}\n disabled={disabled}\n data-qa-menu-item={label}\n >\n {inputType === \"radio\" ? (\n <ComboboxItemIndicator\n keepMounted\n render={(_props, state) => (\n <Radio\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`radio-${itemId}`}\n name=\"combobox-item\"\n />\n )}\n />\n ) : inputType === \"checkbox\" ? (\n <ComboboxItemIndicator\n keepMounted\n render={(_props, state) => (\n <Checkbox\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`checkbox-${itemId}`}\n name=\"combobox-item\"\n />\n )}\n />\n ) : inputType === \"icon\" ? (\n <ComboboxItemIndicator keepMounted>\n <CheckIcon />\n </ComboboxItemIndicator>\n ) : null}\n <span>{renderItem ? renderItem() : label}</span>\n </StyledItem>\n );\n}\n\nconst ComboboxItem = React.forwardRef(ComboboxItemInner) as <T>(\n props: ComboboxItemProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement;\n\nexport default ComboboxItem;\n","import { Combobox } from \"@base-ui/react/combobox\";\nimport styled, { css } from \"styled-components\";\nimport { focusRing } from \"@sproutsocial/seeds-react-mixins\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport { StyledChevron } from \"./SelectIcons\";\n\nconst invalidStyles = css`\n border-color: ${({ theme }) => theme.colors.form.border.error};\n\n ${StyledChevron} {\n color: ${({ theme }) => theme.colors.icon.error};\n }\n`;\n\nexport const ComboboxLabel = styled.label`\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const ComboboxInputGroup = styled(Combobox.InputGroup)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-within {\n ${focusRing}\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const ComboboxInput = styled(Combobox.Input)`\n flex: 1;\n min-width: 30px;\n padding: ${({ theme }) => theme.space[300]};\n border: none !important;\n background: transparent;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n line-height: ${({ theme }) => theme.typography[200].lineHeight};\n color: ${({ theme }) => theme.colors.text.body};\n outline: none;\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nexport const ComboboxTokenInput = styled(Combobox.Input)`\n flex: 1;\n min-width: 60px;\n padding: ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[300]}\n ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[350]};\n border: none !important;\n background: transparent;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n line-height: ${({ theme }) => theme.typography[200].lineHeight};\n color: ${({ theme }) => theme.colors.text.body};\n outline: none;\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nexport const ComboboxActionButtons = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n margin-left: auto;\n gap: ${({ theme }) => theme.space[100]};\n`;\n\nexport const ComboboxClear = styled(Combobox.Clear).attrs({ tabIndex: 0 })`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.colors.icon.base};\n cursor: pointer;\n border-radius: ${({ theme }) => theme.radii[300]};\n padding: 0;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.body};\n }\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-empty] {\n display: none;\n }\n`;\n\nexport const ComboboxTrigger = styled(Combobox.Trigger)`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.colors.icon.base};\n cursor: default;\n padding: 0;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.body};\n }\n`;\n\nexport const ComboboxPositioner = styled(Combobox.Positioner)`\n width: var(--anchor-width);\n z-index: 7;\n`;\n\nexport const ComboboxPopup = styled(Combobox.Popup)`\n font-family: ${({ theme }) => theme.fontFamily};\n background: ${({ theme }) => theme.colors.container.background.base};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n border-radius: ${({ theme }) => theme.radii[500]};\n box-shadow: ${({ theme }) => theme.shadows.medium};\n outline: none;\n width: 100%;\n max-height: min(var(--available-height, 400px), 400px);\n overflow-y: auto;\n padding: 0;\n\n &[data-open] {\n animation: combobox-popup-in 120ms ease-out;\n }\n\n &[data-closed] {\n animation: combobox-popup-out 100ms ease-in;\n }\n\n @keyframes combobox-popup-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes combobox-popup-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n`;\n\nexport const ComboboxList = styled(Combobox.List)`\n padding: ${({ theme }) => theme.space[200]};\n\n &:empty {\n padding: 0;\n }\n`;\n\nexport const ComboboxStatus = styled(Combobox.Status)`\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[350]}`};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.subtext};\n\n &:empty {\n padding: 0;\n }\n`;\n\nexport const ComboboxEmpty = styled(Combobox.Empty)`\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[350]}`};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.subtext};\n\n &:empty {\n padding: 0;\n }\n`;\n\nexport const ComboboxItem = styled(Combobox.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n\n &[data-selected] {\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const ComboboxItemIndicator = styled(Combobox.ItemIndicator)`\n display: flex;\n align-items: center;\n width: ${({ theme }) => theme.space[400]};\n color: ${({ theme }) => theme.colors.text.body};\n visibility: hidden;\n\n &[data-selected] {\n visibility: visible;\n }\n`;\n\nexport const ComboboxGroup = styled(Combobox.Group)`\n display: block;\n`;\n\nexport const ComboboxGroupLabel = styled(Combobox.GroupLabel)`\n padding: ${({ theme }) =>\n `${theme.space[300]} ${theme.space[300]} ${theme.space[200]}`};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${({ theme }) => theme.colors.text.subtext};\n`;\n\nexport const ComboboxSeparator = styled.div`\n height: 1px;\n margin: ${({ theme }) => `${theme.space[200]} ${theme.space[300]}`};\n background: ${({ theme }) => theme.colors.container.border.base};\n`;\n\nexport const ComboboxGroupHeaderItem = styled(Combobox.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${({ theme }) => theme.colors.text.subtext};\n cursor: default;\n outline: none;\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n color: ${({ theme }) => theme.colors.text.body};\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n }\n`;\n\nexport const ComboboxSelectAllItem = styled(Combobox.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n border-bottom: 1px solid ${({ theme }) => theme.colors.container.border.base};\n margin-bottom: ${({ theme }) => theme.space[200]};\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n`;\n\nexport function ComboboxGroupHeaderCheckbox({\n $state,\n id,\n}: {\n $state: \"none\" | \"partial\" | \"all\";\n id: string;\n}) {\n return (\n <Checkbox\n id={id}\n checked={$state === \"all\"}\n indeterminate={$state === \"partial\"}\n onChange={() => {}}\n tabIndex={-1}\n />\n );\n}\n\n// Multi-select Token components\nexport const ComboboxToken = styled(Combobox.Chips)`\n display: flex;\n width: 100%;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.space[200]};\n`;\n\nexport const ComboboxTokenInputGroup = styled(Combobox.InputGroup)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n padding: ${({ theme }) =>\n `${theme.space[200]} ${theme.space[300]} ${theme.space[200]} ${theme.space[200]}`};\n gap: ${({ theme }) => theme.space[200]};\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-within {\n ${focusRing}\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const Token = styled.span`\n display: inline-flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[200]};\n padding: ${({ theme }) => `${theme.space[200]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n background: ${({ theme }) => theme.colors.container.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.normal};\n line-height: 1;\n white-space: nowrap;\n transition: all ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_inout};\n\n &:hover {\n box-shadow: ${({ theme }) => theme.shadows.low};\n border-color: ${({ theme }) => theme.colors.container.border.base};\n }\n`;\n\nexport const TokenRemove = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n padding: 0;\n line-height: 1;\n\n &:focus-visible {\n ${focusRing}\n }\n`;\n\n// Searchable select components\n\nexport const SearchableSelectTrigger = styled(Combobox.Trigger)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[350]};\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n user-select: none;\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-popup-open] [data-chevron] {\n transform: rotate(-180deg);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const SearchableSelectTriggerIcon = styled(Combobox.Icon)`\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.colors.icon.base};\n flex-shrink: 0;\n`;\n\nexport const SearchableSelectPlaceholder = styled.span`\n color: ${({ theme }) => theme.colors.text.subtext};\n padding: ${({ theme }) => theme.space[200]} 0;\n`;\n\nexport const SearchableSelectPopup = ComboboxPopup;\n\nexport const SearchableSelectSearchContainer = styled.div`\n padding: ${({ theme }) => theme.space[300]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.container.border.base};\n flex-shrink: 0;\n`;\n\nexport const SearchableSelectInput = styled(Combobox.Input)`\n width: 100%;\n height: ${({ theme }) => theme.space[500]};\n padding: 0 ${({ theme }) => theme.space[300]};\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n background: ${({ theme }) => theme.colors.container.background.base};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n outline: none;\n box-sizing: border-box;\n\n &:focus {\n ${focusRing}\n }\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n`;\n\nexport const SearchableSelectList = styled(Combobox.List)`\n overflow-y: auto;\n padding: ${({ theme }) => theme.space[200]};\n flex: 1;\n min-height: 0;\n &:empty {\n padding: 0;\n }\n`;\n\nexport const SearchableSelectTokenTrigger = styled(Combobox.Trigger)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n padding: ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[300]};\n gap: ${({ theme }) => theme.space[200]};\n cursor: default;\n text-align: left;\n outline: none;\n user-select: none;\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-popup-open] {\n border-color: ${({ theme }) => theme.colors.blue[600]};\n }\n\n &[data-popup-open] [data-chevron] {\n transform: rotate(-180deg);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport ComboboxItem from \"./ComboboxItem\";\nimport {\n ComboboxGroupHeaderItem,\n ComboboxGroupHeaderCheckbox,\n ComboboxSelectAllItem,\n} from \"./ComboboxStyles\";\nimport type { DataWithId } from \"./types\";\nimport {\n isPlaceholderSentinel,\n isCreatableSentinel,\n type CreatableSentinel,\n} from \"./sentinels\";\n\nexport const ITEM_HEIGHT = 32;\n\ninterface GroupHeaderSentinel {\n __groupHeader: true;\n groupName: string;\n}\n\ninterface SelectAllSentinel {\n __selectAll: true;\n}\n\nexport function isGroupHeaderSentinel(v: unknown): v is GroupHeaderSentinel {\n return typeof v === \"object\" && v !== null && \"__groupHeader\" in v;\n}\n\nexport function isSelectAllSentinel(v: unknown): v is SelectAllSentinel {\n return typeof v === \"object\" && v !== null && \"__selectAll\" in v;\n}\n\nexport type FlatSentinelRow<T> =\n | T\n | GroupHeaderSentinel\n | SelectAllSentinel\n | CreatableSentinel;\n\ninterface VirtualizedComboboxListProps<T extends DataWithId> {\n open: boolean;\n virtualizerRef: React.RefObject<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>;\n value: T | T[] | null;\n groups: Array<{ value: string; items: T[] }> | null;\n // `data` contains only real items (no sentinels). Sentinel rows (placeholder,\n // group headers, select-all) come exclusively from `filteredItems` via\n // Combobox.useFilteredItems. This means `data.length` is the correct count\n // of selectable items for select-all logic.\n data: T[];\n itemToString: (item: T) => string;\n inputType: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n renderItem?: (item: T) => React.ReactNode;\n renderGroupHeading?: (label: string) => React.ReactNode;\n isGroupHeaderDisabled?: (groupName: string) => boolean;\n renderCreatableItem?: (\n sentinel: CreatableSentinel,\n style: React.CSSProperties,\n index: number,\n measureRef: (el: Element | null) => void\n ) => React.ReactNode;\n}\n\nexport default function VirtualizedComboboxList<T extends DataWithId>({\n open,\n virtualizerRef,\n value,\n groups,\n data,\n itemToString,\n inputType,\n renderItem,\n renderGroupHeading,\n isGroupHeaderDisabled,\n renderCreatableItem,\n}: VirtualizedComboboxListProps<T>) {\n type Row = FlatSentinelRow<T>;\n\n const filteredItems = Combobox.useFilteredItems<Row>();\n const scrollElementRef = React.useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n enabled: open,\n count: filteredItems.length,\n getScrollElement: () => scrollElementRef.current,\n estimateSize: () => ITEM_HEIGHT,\n overscan: 20,\n paddingStart: 4,\n paddingEnd: 4,\n scrollPaddingStart: 4,\n scrollPaddingEnd: 4,\n });\n\n React.useImperativeHandle(virtualizerRef, () => virtualizer);\n\n const handleScrollRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n scrollElementRef.current = el;\n if (el) requestAnimationFrame(() => virtualizer.measure());\n },\n [virtualizer]\n );\n\n if (!filteredItems.length) return null;\n\n const selectedArray = Array.isArray(value)\n ? value\n : value != null\n ? [value]\n : [];\n\n const totalSize = virtualizer.getTotalSize();\n\n return (\n <div\n role=\"presentation\"\n ref={handleScrollRef}\n style={{\n flex: 1,\n minHeight: 0,\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }}\n >\n <div\n role=\"presentation\"\n style={{ position: \"relative\", width: \"100%\", height: totalSize }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = filteredItems[virtualItem.index];\n if (row == null) return null;\n\n const baseStyle: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualItem.start}px)`,\n boxSizing: \"border-box\",\n };\n\n if (isPlaceholderSentinel(row)) {\n return (\n <ComboboxItem\n key=\"placeholder\"\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={row as unknown as T}\n itemId=\"placeholder\"\n label={row.label}\n inputType={inputType}\n style={baseStyle}\n ref={virtualizer.measureElement}\n />\n );\n }\n\n if (isSelectAllSentinel(row)) {\n const selectedCount = selectedArray.length;\n const totalCount = data.length;\n const state =\n selectedCount === 0\n ? \"none\"\n : selectedCount === totalCount\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxSelectAllItem\n key={virtualItem.key}\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={row}\n style={baseStyle}\n ref={virtualizer.measureElement}\n >\n <ComboboxGroupHeaderCheckbox $state={state} id=\"__selectAll\" />\n Select all\n </ComboboxSelectAllItem>\n );\n }\n\n if (isGroupHeaderSentinel(row)) {\n const group = groups?.find((g) => g.value === row.groupName);\n const groupItems = group?.items ?? [];\n const selectedCount = groupItems.filter((item) =>\n selectedArray.some((s) => s.id === item.id)\n ).length;\n const state =\n selectedCount === 0\n ? \"none\"\n : selectedCount === groupItems.length\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxGroupHeaderItem\n key={virtualItem.key}\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={row}\n disabled={isGroupHeaderDisabled?.(row.groupName)}\n style={baseStyle}\n ref={virtualizer.measureElement}\n >\n <ComboboxGroupHeaderCheckbox\n $state={state}\n id={`__header-${row.groupName}`}\n />\n {renderGroupHeading\n ? renderGroupHeading(row.groupName)\n : row.groupName}\n </ComboboxGroupHeaderItem>\n );\n }\n\n if (isCreatableSentinel(row)) {\n if (renderCreatableItem) {\n return renderCreatableItem(\n row,\n baseStyle,\n virtualItem.index,\n virtualizer.measureElement\n );\n }\n return null;\n }\n\n const item = row as T;\n return (\n <ComboboxItem\n key={virtualItem.key}\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : () => itemToString(item)\n }\n style={baseStyle}\n ref={virtualizer.measureElement}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","// ─── Shared sentinel types & predicates ────────────────────────────────────\n// Sentinels are non-data rows injected into virtualized lists for special UI\n// items (placeholder, group headers, select-all). They carry no `.id` field\n// and must never be counted toward real data totals.\n\nexport interface PlaceholderSentinel {\n __placeholder: true;\n label: string;\n}\n\nexport function makePlaceholderSentinel(label: string): PlaceholderSentinel {\n return { __placeholder: true, label };\n}\n\nexport function isPlaceholderSentinel(v: unknown): v is PlaceholderSentinel {\n return typeof v === \"object\" && v !== null && \"__placeholder\" in v;\n}\n\nexport interface CreatableSentinel {\n __creatable: true;\n label: string;\n}\n\nexport function makeCreatableSentinel(label: string): CreatableSentinel {\n return { __creatable: true, label };\n}\n\nexport function isCreatableSentinel(v: unknown): v is CreatableSentinel {\n return typeof v === \"object\" && v !== null && \"__creatable\" in v;\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport { useSuppressEscapeClear } from \"./Common/useSuppressEscapeClear\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n isCreatableSentinel,\n makeCreatableSentinel,\n type CreatableSentinel,\n} from \"./Common/sentinels\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxTokenInputGroup,\n ComboboxTokenInput,\n ComboboxToken,\n ComboboxActionButtons,\n ComboboxClear,\n ComboboxTrigger,\n ComboboxPositioner,\n ComboboxPopup,\n ComboboxList,\n ComboboxEmpty,\n ComboboxStatus,\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n Token,\n TokenRemove,\n ComboboxGroupHeaderItem,\n ComboboxGroupHeaderCheckbox,\n ComboboxSelectAllItem,\n} from \"./Common/ComboboxStyles\";\nimport { ClearIcon, StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\nimport Icon from \"@sproutsocial/seeds-react-icon\";\n\n// ─── Sentinels ────────────────────────────────────────────────────────────────\n\ninterface GroupHeaderSentinel {\n __groupHeader: true;\n groupName: string;\n}\n\nfunction makeGroupHeaderSentinel(groupName: string): GroupHeaderSentinel {\n return { __groupHeader: true, groupName };\n}\n\nfunction isGroupHeaderSentinel(v: unknown): v is GroupHeaderSentinel {\n return typeof v === \"object\" && v !== null && \"__groupHeader\" in v;\n}\n\ninterface SelectAllSentinel {\n __selectAll: true;\n}\n\nconst SELECT_ALL_SENTINEL: SelectAllSentinel = { __selectAll: true };\n\nfunction isSelectAllSentinel(v: unknown): v is SelectAllSentinel {\n return typeof v === \"object\" && v !== null && \"__selectAll\" in v;\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface MultiComboboxBaseProps {\n id?: string;\n placeholder?: string;\n emptyText?: string;\n isLoading?: boolean;\n loadingText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n inputValue?: string;\n onInputValueChange?: (value: string) => void;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface MultiComboboxDataProps<T extends DataWithId>\n extends MultiComboboxBaseProps {\n data: T[];\n itemToString: (item: T) => string;\n renderItem?: (item: T) => React.ReactNode;\n renderToken?: (item: T) => React.ReactNode;\n renderSelection?: (items: T[]) => React.ReactNode;\n inputType?: \"icon\" | \"checkbox\" | \"none\";\n selectedItemIds?: Array<T[\"id\"]>;\n defaultSelectedItemIds?: Array<T[\"id\"]>;\n onSelectedItemIdsChange?: (ids: Array<T[\"id\"]>) => void;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n isGroupHeaderDisabled?: (groupName: string) => boolean;\n selectHeadings?: boolean;\n selectAll?: boolean | string;\n isVirtualized?: boolean;\n removeSelectedItems?: boolean;\n maxTokens?: number;\n creatable?: boolean;\n onCreate?: (value: string) => T;\n children?: never;\n}\n\ninterface MultiComboboxChildrenProps extends MultiComboboxBaseProps {\n children: React.ReactNode;\n selectedItemIds?: Array<string | number>;\n defaultSelectedItemIds?: Array<string | number>;\n onSelectedItemIdsChange?: (ids: Array<string | number>) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n renderToken?: never;\n renderSelection?: never;\n inputType?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n isGroupHeaderDisabled?: never;\n selectHeadings?: never;\n selectAll?: never;\n removeSelectedItems?: never;\n creatable?: never;\n onCreate?: never;\n}\n\nexport type MultiComboboxProps<T extends DataWithId> =\n | MultiComboboxDataProps<T>\n | MultiComboboxChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n// ─── Virtualized list ─────────────────────────────────────────────────────────\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function MultiCombobox<T extends DataWithId>(\n props: MultiComboboxProps<T>\n) {\n const {\n id,\n placeholder = \"Search...\",\n emptyText = \"No results found.\",\n isLoading = false,\n loadingText = \"Loading...\",\n filter,\n inputValue,\n onInputValueChange,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const data = isChildrenMode\n ? ([] as T[])\n : (props as MultiComboboxDataProps<T>).data;\n const itemToString = isChildrenMode\n ? (_item: T) => \"\"\n : (props as MultiComboboxDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderItem;\n const renderToken = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderToken;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderSelection;\n const maxTokens = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).maxTokens;\n const removeSelectedItems = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).removeSelectedItems ?? false;\n const inputType = isChildrenMode\n ? \"checkbox\"\n : removeSelectedItems\n ? \"none\"\n : (props as MultiComboboxDataProps<T>).inputType ?? \"checkbox\";\n const groupBy = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderGroupHeading;\n const isGroupHeaderDisabled = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).isGroupHeaderDisabled;\n const selectHeadings = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).selectHeadings ?? false;\n const selectAllProp = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).selectAll ?? false;\n const selectAll = Boolean(selectAllProp);\n const selectAllLabel =\n typeof selectAllProp === \"string\" ? selectAllProp : \"Select all\";\n const isVirtualized = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).isVirtualized ?? false;\n const creatableProp = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).creatable ?? false;\n const onCreateProp = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).onCreate;\n const children = isChildrenMode\n ? (props as MultiComboboxChildrenProps).children\n : undefined;\n\n const selectedItemIds = props.selectedItemIds;\n const defaultSelectedItemIds = props.defaultSelectedItemIds;\n const onSelectedItemIdsChange = props.onSelectedItemIdsChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const [internalInputValue, setInternalInputValue] = React.useState(\"\");\n const skipNextInputChangeRef = React.useRef(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const onInputKeyDownCapture = useSuppressEscapeClear(open);\n\n const isControlled = selectedItemIds !== undefined;\n\n const idsToItems = React.useCallback(\n (ids: Array<T[\"id\"]>): T[] =>\n ids\n .map((id) => data.find((d) => d.id === id))\n .filter((d): d is T => d != null),\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T[]>(() =>\n defaultSelectedItemIds\n ? idsToItems(defaultSelectedItemIds as Array<T[\"id\"]>)\n : []\n );\n\n const value = isControlled\n ? idsToItems(selectedItemIds as Array<T[\"id\"]>)\n : internalValue;\n\n const visibleData = React.useMemo(\n () =>\n removeSelectedItems\n ? data.filter((item) => !value.some((v) => v.id === item.id))\n : data,\n [data, value, removeSelectedItems]\n );\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(visibleData, groupBy) : null),\n [visibleData, groupBy]\n );\n\n const currentInputValue = inputValue ?? internalInputValue;\n\n const creatableSentinel = React.useMemo<CreatableSentinel | null>(() => {\n if (!creatableProp) return null;\n const trimmed = currentInputValue.trim();\n if (!trimmed) return null;\n const lowered = trimmed.toLocaleLowerCase();\n const exactExists = data.some(\n (d) => itemToString(d).trim().toLocaleLowerCase() === lowered\n );\n if (exactExists) return null;\n return makeCreatableSentinel(trimmed);\n }, [creatableProp, currentInputValue, data, itemToString]);\n\n // ─── Sentinel flat list ───────────────────────────────────────────────────\n // Used when selectHeadings or selectAll. selectAll implies selectHeadings —\n // group headers are always selectable when the list is flattened.\n\n type FlatRow =\n | T\n | GroupHeaderSentinel\n | SelectAllSentinel\n | CreatableSentinel;\n\n const flatItems = React.useMemo<FlatRow[] | null>(() => {\n if (!selectHeadings && !selectAll) return null;\n if (!groups && !selectAll) return null;\n const rows: FlatRow[] = [];\n if (selectAll) rows.push(SELECT_ALL_SENTINEL);\n if (groups) {\n for (const group of groups) {\n rows.push(makeGroupHeaderSentinel(group.value));\n rows.push(...group.items);\n }\n } else {\n rows.push(...visibleData);\n }\n return rows;\n }, [groups, visibleData, selectHeadings, selectAll]);\n\n function setSelectedItems(items: T[]) {\n if (!isControlled) setInternalValue(items);\n if (onSelectedItemIdsChange)\n onSelectedItemIdsChange(items.map((item) => item.id));\n }\n\n function handleValueChange(next: FlatRow[]) {\n const creatableClicked = next.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = next.filter(\n (v): v is T =>\n !isGroupHeaderSentinel(v) &&\n !isSelectAllSentinel(v) &&\n !isCreatableSentinel(v)\n );\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n onInputValueChange?.(\"\");\n return;\n }\n\n const selectAllClicked = next.filter(isSelectAllSentinel);\n const groupSentinels = next.filter(isGroupHeaderSentinel);\n const realItems = next.filter(\n (v): v is T => !isGroupHeaderSentinel(v) && !isSelectAllSentinel(v)\n );\n\n if (selectAllClicked.length > 0) {\n const allSelected = data.every((d) =>\n realItems.some((s) => s.id === d.id)\n );\n setSelectedItems(allSelected ? [] : [...data]);\n return;\n }\n\n if (groupSentinels.length === 0) {\n setSelectedItems(realItems);\n return;\n }\n\n let updated = [...realItems];\n for (const sentinel of groupSentinels) {\n if (isGroupHeaderDisabled?.(sentinel.groupName)) continue;\n const group = groups?.find((g) => g.value === sentinel.groupName);\n if (!group) continue;\n const allSelected = group.items.every((item) =>\n updated.some((s) => s.id === item.id)\n );\n if (allSelected) {\n updated = updated.filter(\n (s) => !group.items.some((item) => item.id === s.id)\n );\n } else {\n const missing = group.items.filter(\n (item) => !updated.some((s) => s.id === item.id)\n );\n updated = [...updated, ...missing];\n }\n }\n setSelectedItems(updated);\n }\n\n function handleSimpleValueChange(newItems: FlatRow[]) {\n const creatableClicked = newItems.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = newItems.filter((v): v is T => !isCreatableSentinel(v));\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n onInputValueChange?.(\"\");\n return;\n }\n setSelectedItems(newItems as T[]);\n }\n\n function removeItem(item: T, e: React.MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n setSelectedItems(value.filter((v) => v.id !== item.id));\n inputRef.current?.focus();\n }\n\n // ─── Render sentinel item ─────────────────────────────────────────────────\n\n function renderSentinelRow(row: FlatRow) {\n if (isSelectAllSentinel(row)) {\n const totalCount = data.length;\n const selectedCount = value.length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === totalCount\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxSelectAllItem key=\"__selectAll\" value={row}>\n <ComboboxGroupHeaderCheckbox $state={state} id=\"__selectAll\" />\n {selectAllLabel}\n </ComboboxSelectAllItem>\n );\n }\n\n if (isGroupHeaderSentinel(row)) {\n const group = groups?.find((g) => g.value === row.groupName);\n const groupItemsList = group?.items ?? [];\n const selectedCount = groupItemsList.filter((item) =>\n value.some((s) => s.id === item.id)\n ).length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === groupItemsList.length\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxGroupHeaderItem\n key={`__header-${row.groupName}`}\n value={row}\n disabled={isGroupHeaderDisabled?.(row.groupName)}\n >\n <ComboboxGroupHeaderCheckbox\n $state={state}\n id={`__header-${row.groupName}`}\n />\n {renderGroupHeading\n ? renderGroupHeading(row.groupName)\n : row.groupName}\n </ComboboxGroupHeaderItem>\n );\n }\n\n if (isCreatableSentinel(row)) {\n return renderCreatableItem(row);\n }\n\n const item = row as T;\n return (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : () => itemToString(item)\n }\n />\n );\n }\n\n function renderCreatableItem(\n sentinel: CreatableSentinel,\n style?: React.CSSProperties,\n index?: number,\n measureRef?: (el: Element | null) => void\n ) {\n return (\n <ComboboxItem\n key=\"__creatable\"\n value={sentinel}\n itemId=\"__creatable\"\n label={`Create \"${sentinel.label}\"`}\n inputType=\"none\"\n renderItem={() => (\n <>\n <Icon name=\"plus-outline\" size=\"mini\" />\n {`Create \"${sentinel.label}\"`}\n </>\n )}\n style={style}\n index={index}\n data-index={index}\n ref={measureRef}\n />\n );\n }\n\n // ─── Items passed to Combobox.Root ────────────────────────────────────────\n // When selectHeadings: flatItems (flat array of group header sentinels + items).\n // When selectAll only: prepend SELECT_ALL_SENTINEL to data so Base UI tracks\n // it, while Combobox.List still uses the normal grouped render.\n // The sentinel is never in flatItems — it is always rendered manually above\n // Combobox.List, so we must not prepend it when flatItems is used.\n\n const baseItems =\n flatItems ?? groups ?? (isChildrenMode ? undefined : visibleData);\n const rootItems =\n creatableSentinel && Array.isArray(baseItems)\n ? ([...baseItems, creatableSentinel] as FlatRow[])\n : baseItems;\n\n const hasSentinels = selectAll || selectHeadings;\n\n const rootValue = hasSentinels\n ? ([...value] as FlatRow[])\n : (value as unknown as T[]);\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n multiple\n id={id}\n virtualized={isVirtualized}\n open={open}\n disabled={props.disabled}\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && eventDetails.reason === \"item-press\") {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n filter={\n creatableProp\n ? (item: unknown, query: string) => {\n if (isCreatableSentinel(item)) return true;\n if (filter) return filter(item, query);\n // Default Base UI filter: match against itemToStringLabel\n if (isGroupHeaderSentinel(item) || isSelectAllSentinel(item))\n return true;\n const label = itemToString(item as T);\n return label.toLowerCase().includes(query.toLowerCase());\n }\n : filter\n }\n inputValue={\n creatableProp ? currentInputValue : inputValue ?? internalInputValue\n }\n onInputValueChange={(v, eventDetails) => {\n // Preserve search query when an item is selected. Base UI fires\n // 'input-clear' on item-press; ignore it while the popup stays open.\n if (eventDetails.reason === \"input-clear\" && open) return;\n\n if (creatableProp) {\n if (skipNextInputChangeRef.current) {\n skipNextInputChangeRef.current = false;\n return;\n }\n setInternalInputValue(v);\n onInputValueChange?.(v);\n } else {\n if (inputValue === undefined) {\n setInternalInputValue(v);\n }\n onInputValueChange?.(v);\n }\n }}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n // Only handle keyboard wrap-around: when navigation loops from\n // the last item to the first (or vice versa), the wrapped item\n // is outside the virtualized window and standard scroll-into-\n // view can't find it.\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n value={rootValue}\n onValueChange={\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (hasSentinels ? handleValueChange : handleSimpleValueChange) as any\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n itemToStringLabel={(item: any) => {\n if (\n !item ||\n isGroupHeaderSentinel(item) ||\n isSelectAllSentinel(item) ||\n isCreatableSentinel(item)\n )\n return \"\";\n return itemToString(item as T);\n }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isItemEqualToValue={(a: any, b: any) => {\n if (isCreatableSentinel(a) && isCreatableSentinel(b))\n return a.label === b.label;\n if (isGroupHeaderSentinel(a) && isGroupHeaderSentinel(b))\n return a.groupName === b.groupName;\n if (isSelectAllSentinel(a) && isSelectAllSentinel(b)) return true;\n if (\n !isGroupHeaderSentinel(a) &&\n !isSelectAllSentinel(a) &&\n !isCreatableSentinel(a) &&\n !isGroupHeaderSentinel(b) &&\n !isSelectAllSentinel(b) &&\n !isCreatableSentinel(b)\n )\n return (a as T).id === (b as T).id;\n return false;\n }}\n items={rootItems}\n >\n <ComboboxTokenInputGroup\n $isInvalid={isInvalid}\n onKeyDownCapture={onInputKeyDownCapture}\n >\n <ComboboxToken>\n {renderSelection\n ? renderSelection(value)\n : (() => {\n const visibleTokens =\n maxTokens != null ? value.slice(0, maxTokens) : value;\n const overflow =\n maxTokens != null ? value.length - maxTokens : 0;\n return (\n <>\n {visibleTokens.map((item) => (\n <Token key={item.id}>\n {renderToken ? renderToken(item) : itemToString(item)}\n <TokenRemove\n aria-label={`Remove ${itemToString(item)}`}\n onPointerDown={(e) => e.preventDefault()}\n onClick={(e) => removeItem(item, e)}\n >\n <Icon name=\"x-outline\" size=\"mini\" />\n </TokenRemove>\n </Token>\n ))}\n {overflow > 0 && (\n <Token key=\"__overflow\">+{overflow}</Token>\n )}\n </>\n );\n })()}\n <ComboboxTokenInput\n ref={inputRef}\n id={id}\n placeholder={value.length > 0 ? \"\" : placeholder}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n />\n <ComboboxActionButtons>\n <ComboboxClear aria-label=\"Clear all\">\n <ClearIcon />\n </ComboboxClear>\n <ComboboxTrigger aria-label=\"Open popup\">\n <StyledChevron $isOpen={open}>\n <ChevronIcon />\n </StyledChevron>\n </ComboboxTrigger>\n </ComboboxActionButtons>\n </ComboboxToken>\n </ComboboxTokenInputGroup>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <ComboboxPopup\n aria-busy={isLoading || undefined}\n style={\n isVirtualized\n ? { display: \"flex\", flexDirection: \"column\" }\n : undefined\n }\n >\n <ComboboxStatus>{isLoading ? loadingText : null}</ComboboxStatus>\n <ComboboxEmpty>{isLoading ? null : emptyText}</ComboboxEmpty>\n <ComboboxList\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={groups}\n data={visibleData}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n renderGroupHeading={renderGroupHeading}\n isGroupHeaderDisabled={isGroupHeaderDisabled}\n renderCreatableItem={\n creatableProp\n ? (sentinel, style, index, measureRef) =>\n renderCreatableItem(\n sentinel,\n style,\n index,\n measureRef\n )\n : undefined\n }\n />\n ) : children ? (\n children\n ) : flatItems ? (\n (row: FlatRow) => renderSentinelRow(row)\n ) : groups ? (\n (\n group: { value: string; items: T[] } | CreatableSentinel,\n index: number\n ) => {\n if (isCreatableSentinel(group)) {\n return renderCreatableItem(group);\n }\n const g = group as { value: string; items: T[] };\n return (\n <React.Fragment key={g.value}>\n <ComboboxGroup items={g.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(g.value)\n : g.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n );\n }\n ) : (\n (item: T | CreatableSentinel) => {\n if (isCreatableSentinel(item)) {\n return renderCreatableItem(item);\n }\n const dataItem = item as T;\n return (\n <ComboboxItem\n key={dataItem.id}\n value={dataItem}\n itemId={String(dataItem.id)}\n label={itemToString(dataItem)}\n disabled={dataItem.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(dataItem)\n : () => itemToString(dataItem)\n }\n />\n );\n }\n )}\n </ComboboxList>\n </ComboboxPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport type { PlaceholderSentinel } from \"./Common/sentinels\";\nimport {\n makePlaceholderSentinel,\n isPlaceholderSentinel,\n} from \"./Common/sentinels\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n ComboboxPositioner,\n ComboboxEmpty,\n ComboboxStatus,\n SearchableSelectTrigger,\n SearchableSelectTriggerIcon,\n SearchableSelectPlaceholder,\n SearchableSelectPopup,\n SearchableSelectSearchContainer,\n SearchableSelectInput,\n SearchableSelectList,\n} from \"./Common/ComboboxStyles\";\nimport { StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface SingleSearchableSelectBaseProps {\n id?: string;\n placeholder?: string;\n includePlaceholderItem?: boolean;\n searchPlaceholder?: string;\n emptyText?: string;\n isLoading?: boolean;\n loadingText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface SingleSearchableSelectDataBaseProps<T extends DataWithId>\n extends SingleSearchableSelectBaseProps {\n data: T[];\n itemToString: (item: T | null) => string;\n renderItem?: (item: T) => React.ReactNode;\n renderSelection?: (item: T) => React.ReactNode;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n selectedItemId?: T[\"id\"] | null;\n defaultSelectedItemId?: T[\"id\"] | null;\n onSelectedItemIdChange?: (id: T[\"id\"] | null) => void;\n children?: never;\n}\n\ninterface SingleSearchableSelectDataProps<T extends DataWithId>\n extends SingleSearchableSelectDataBaseProps<T> {\n isVirtualized?: false;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n}\n\ninterface SingleSearchableSelectVirtualizedProps<T extends DataWithId>\n extends SingleSearchableSelectDataBaseProps<T> {\n isVirtualized: true;\n groupBy?: never;\n renderGroupHeading?: never;\n}\n\ninterface SingleSearchableSelectChildrenProps\n extends SingleSearchableSelectBaseProps {\n children: React.ReactNode;\n selectedItemId?: string | number | null;\n defaultSelectedItemId?: string | number | null;\n onSelectedItemIdChange?: (id: string | number | null) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n renderSelection?: never;\n inputType?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n isVirtualized?: never;\n}\n\nexport type SingleSearchableSelectProps<T extends DataWithId> =\n | SingleSearchableSelectDataProps<T>\n | SingleSearchableSelectVirtualizedProps<T>\n | SingleSearchableSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SingleSearchableSelect<T extends DataWithId>(\n props: SingleSearchableSelectProps<T>\n) {\n const {\n id,\n placeholder = \"Select...\",\n includePlaceholderItem,\n searchPlaceholder = \"Search...\",\n emptyText = \"No results found.\",\n isLoading = false,\n loadingText = \"Loading...\",\n filter,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n type DataProps =\n | SingleSearchableSelectDataProps<T>\n | SingleSearchableSelectVirtualizedProps<T>;\n\n const data = isChildrenMode ? ([] as T[]) : (props as DataProps).data;\n const itemToString = isChildrenMode\n ? (_item: T | null) => \"\"\n : (props as DataProps).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as DataProps).renderItem;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as DataProps).renderSelection;\n const inputType = isChildrenMode\n ? \"icon\"\n : (props as DataProps).inputType ?? \"icon\";\n const isVirtualized = isChildrenMode\n ? false\n : (props as DataProps).isVirtualized ?? false;\n const groupBy = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleSearchableSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleSearchableSelectDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as SingleSearchableSelectChildrenProps).children\n : undefined;\n\n const selectedItemId = props.selectedItemId;\n const defaultSelectedItemId = props.defaultSelectedItemId;\n const onSelectedItemIdChange = props.onSelectedItemIdChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n\n const isControlled = selectedItemId !== undefined;\n\n const idToItem = React.useCallback(\n (id: T[\"id\"] | null | undefined): T | null => {\n if (id == null) return null;\n return data.find((d) => String(d.id) === String(id)) ?? null;\n },\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T | null>(() =>\n idToItem(defaultSelectedItemId as T[\"id\"] | null)\n );\n\n const value = isControlled\n ? idToItem(selectedItemId as T[\"id\"] | null)\n : internalValue;\n\n type ItemOrSentinel = T | PlaceholderSentinel;\n\n function handleValueChange(newItem: ItemOrSentinel | null) {\n const realItem =\n newItem == null || isPlaceholderSentinel(newItem) ? null : newItem;\n if (!isControlled) setInternalValue(realItem);\n if (onSelectedItemIdChange) {\n onSelectedItemIdChange(realItem ? realItem.id : null);\n }\n }\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(data, groupBy) : null),\n [data, groupBy]\n );\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n id={id}\n value={value}\n disabled={props.disabled}\n onValueChange={handleValueChange as (item: T | null) => void}\n itemToStringLabel={(item: T | null) =>\n isPlaceholderSentinel(item) ? item.label : itemToString(item)\n }\n isItemEqualToValue={(a, b) => {\n if (isPlaceholderSentinel(a) && isPlaceholderSentinel(b)) return true;\n if (isPlaceholderSentinel(a)) return b == null;\n if (isPlaceholderSentinel(b)) return a == null;\n return a != null && b != null && a.id === b.id;\n }}\n items={\n isVirtualized\n ? includePlaceholderItem\n ? [makePlaceholderSentinel(placeholder) as unknown as T, ...data]\n : data\n : groups ?? (isChildrenMode ? undefined : data)\n }\n virtualized={isVirtualized}\n filter={filter}\n open={open}\n onOpenChange={setOpen}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n >\n <SearchableSelectTrigger\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n <SearchableSelectPlaceholder>\n <Combobox.Value placeholder={placeholder}>\n {value\n ? renderSelection\n ? renderSelection(value)\n : itemToString(value)\n : placeholder}\n </Combobox.Value>\n </SearchableSelectPlaceholder>\n <SearchableSelectTriggerIcon>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SearchableSelectTriggerIcon>\n </SearchableSelectTrigger>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <SearchableSelectPopup\n aria-busy={isLoading || undefined}\n style={{ display: \"flex\", flexDirection: \"column\" }}\n >\n <SearchableSelectSearchContainer>\n <SearchableSelectInput\n placeholder={searchPlaceholder}\n autoFocus\n />\n </SearchableSelectSearchContainer>\n <ComboboxStatus>{isLoading ? loadingText : null}</ComboboxStatus>\n <ComboboxEmpty>{isLoading ? null : emptyText}</ComboboxEmpty>\n <SearchableSelectList\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={null}\n data={data}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n />\n ) : children ? (\n children\n ) : groups ? (\n (group: { value: string; items: T[] }, index: number) => (\n <React.Fragment key={group.value}>\n <ComboboxGroup items={group.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n )\n ) : (\n <>\n {includePlaceholderItem && (\n <ComboboxItem\n key=\"placeholder\"\n value={\n makePlaceholderSentinel(placeholder) as unknown as T\n }\n itemId=\"placeholder\"\n label={placeholder}\n inputType={inputType}\n />\n )}\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : undefined\n }\n />\n )}\n </Combobox.Collection>\n </>\n )}\n </SearchableSelectList>\n </SearchableSelectPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n isCreatableSentinel,\n makeCreatableSentinel,\n type CreatableSentinel,\n} from \"./Common/sentinels\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n ComboboxPositioner,\n ComboboxEmpty,\n ComboboxStatus,\n ComboboxGroupHeaderItem,\n ComboboxGroupHeaderCheckbox,\n ComboboxSelectAllItem,\n SearchableSelectTokenTrigger,\n SearchableSelectPlaceholder,\n SearchableSelectTriggerIcon,\n SearchableSelectPopup,\n SearchableSelectSearchContainer,\n SearchableSelectInput,\n SearchableSelectList,\n} from \"./Common/ComboboxStyles\";\nimport { ClearIcon, StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\nimport Icon from \"@sproutsocial/seeds-react-icon\";\nimport styled from \"styled-components\";\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst SelectionText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\n// ─── Sentinels ────────────────────────────────────────────────────────────────\n\ninterface GroupHeaderSentinel {\n __groupHeader: true;\n groupName: string;\n}\n\nfunction makeGroupHeaderSentinel(groupName: string): GroupHeaderSentinel {\n return { __groupHeader: true, groupName };\n}\n\nfunction isGroupHeaderSentinel(v: unknown): v is GroupHeaderSentinel {\n return typeof v === \"object\" && v !== null && \"__groupHeader\" in v;\n}\n\ninterface SelectAllSentinel {\n __selectAll: true;\n}\n\nconst SELECT_ALL_SENTINEL: SelectAllSentinel = { __selectAll: true };\n\nfunction isSelectAllSentinel(v: unknown): v is SelectAllSentinel {\n return typeof v === \"object\" && v !== null && \"__selectAll\" in v;\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface MultiSearchableSelectBaseProps {\n id?: string;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n isLoading?: boolean;\n loadingText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface MultiSearchableSelectDataProps<T extends DataWithId>\n extends MultiSearchableSelectBaseProps {\n data: T[];\n itemToString: (item: T) => string;\n renderItem?: (item: T) => React.ReactNode;\n customRenderSelections?: (item: T) => string;\n renderSelection?: (items: T[]) => React.ReactNode;\n inputType?: \"icon\" | \"checkbox\" | \"none\";\n maxSelections?: number;\n selectedItemIds?: Array<T[\"id\"]>;\n defaultSelectedItemIds?: Array<T[\"id\"]>;\n onSelectedItemIdsChange?: (ids: Array<T[\"id\"]>) => void;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n selectHeadings?: boolean;\n selectAll?: boolean;\n isVirtualized?: boolean;\n removeSelectedItems?: boolean;\n creatable?: boolean;\n onCreate?: (value: string) => T;\n children?: never;\n}\n\ninterface MultiSearchableSelectChildrenProps\n extends MultiSearchableSelectBaseProps {\n children: React.ReactNode;\n selectedItemIds?: Array<string | number>;\n defaultSelectedItemIds?: Array<string | number>;\n onSelectedItemIdsChange?: (ids: Array<string | number>) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n customRenderSelections?: never;\n renderSelection?: never;\n inputType?: never;\n maxSelections?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n selectHeadings?: never;\n selectAll?: never;\n isVirtualized?: never;\n removeSelectedItems?: never;\n creatable?: never;\n onCreate?: never;\n}\n\nexport type MultiSearchableSelectProps<T extends DataWithId> =\n | MultiSearchableSelectDataProps<T>\n | MultiSearchableSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function MultiSearchableSelect<T extends DataWithId>(\n props: MultiSearchableSelectProps<T>\n) {\n const {\n id,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No results found.\",\n isLoading = false,\n loadingText = \"Loading...\",\n filter,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const data = isChildrenMode\n ? ([] as T[])\n : (props as MultiSearchableSelectDataProps<T>).data;\n const itemToString = isChildrenMode\n ? (_item: T) => \"\"\n : (props as MultiSearchableSelectDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).renderItem;\n const customRenderSelections = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).customRenderSelections;\n const maxSelections = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).maxSelections;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).renderSelection;\n const removeSelectedItems = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).removeSelectedItems ?? false;\n const inputType = isChildrenMode\n ? \"checkbox\"\n : removeSelectedItems\n ? \"none\"\n : (props as MultiSearchableSelectDataProps<T>).inputType ?? \"checkbox\";\n const groupBy = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).renderGroupHeading;\n const selectHeadings = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).selectHeadings ?? false;\n const selectAll = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).selectAll ?? false;\n const isVirtualized = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).isVirtualized ?? false;\n const creatableProp = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).creatable ?? false;\n const onCreateProp = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).onCreate;\n const children = isChildrenMode\n ? (props as MultiSearchableSelectChildrenProps).children\n : undefined;\n\n const selectedItemIds = props.selectedItemIds;\n const defaultSelectedItemIds = props.defaultSelectedItemIds;\n const onSelectedItemIdsChange = props.onSelectedItemIdsChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const [internalInputValue, setInternalInputValue] = React.useState(\"\");\n const skipNextInputChangeRef = React.useRef(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n\n const isControlled = selectedItemIds !== undefined;\n\n const idsToItems = React.useCallback(\n (ids: Array<T[\"id\"]>): T[] =>\n ids\n .map((id) => data.find((d) => d.id === id))\n .filter((d): d is T => d != null),\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T[]>(() =>\n defaultSelectedItemIds\n ? idsToItems(defaultSelectedItemIds as Array<T[\"id\"]>)\n : []\n );\n\n const value = isControlled\n ? idsToItems(selectedItemIds as Array<T[\"id\"]>)\n : internalValue;\n\n const visibleData = React.useMemo(\n () =>\n removeSelectedItems\n ? data.filter((item) => !value.some((v) => v.id === item.id))\n : data,\n [data, value, removeSelectedItems]\n );\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(visibleData, groupBy) : null),\n [visibleData, groupBy]\n );\n\n const currentInputValue = internalInputValue;\n\n const creatableSentinel = React.useMemo<CreatableSentinel | null>(() => {\n if (!creatableProp) return null;\n const trimmed = currentInputValue.trim();\n if (!trimmed) return null;\n const lowered = trimmed.toLocaleLowerCase();\n const exactExists = data.some(\n (d) => itemToString(d).trim().toLocaleLowerCase() === lowered\n );\n if (exactExists) return null;\n return makeCreatableSentinel(trimmed);\n }, [creatableProp, currentInputValue, data, itemToString]);\n\n // ─── Sentinel flat list ───────────────────────────────────────────────────\n\n type FlatRow =\n | T\n | GroupHeaderSentinel\n | SelectAllSentinel\n | CreatableSentinel;\n\n const flatItems = React.useMemo<FlatRow[] | null>(() => {\n if (!groups || (!selectHeadings && !selectAll)) return null;\n const rows: FlatRow[] = [];\n if (selectAll) rows.push(SELECT_ALL_SENTINEL);\n for (const group of groups) {\n rows.push(makeGroupHeaderSentinel(group.value));\n rows.push(...group.items);\n }\n return rows;\n }, [groups, selectHeadings, selectAll]);\n\n function setSelectedItems(items: T[]) {\n if (!isControlled) setInternalValue(items);\n if (onSelectedItemIdsChange)\n onSelectedItemIdsChange(items.map((item) => item.id));\n }\n\n function handleValueChange(next: FlatRow[]) {\n const creatableClicked = next.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = next.filter(\n (v): v is T =>\n !isGroupHeaderSentinel(v) &&\n !isSelectAllSentinel(v) &&\n !isCreatableSentinel(v)\n );\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n return;\n }\n\n const selectAllClicked = next.filter(isSelectAllSentinel);\n const groupSentinels = next.filter(isGroupHeaderSentinel);\n const realItems = next.filter(\n (v): v is T =>\n !isGroupHeaderSentinel(v) &&\n !isSelectAllSentinel(v) &&\n !isCreatableSentinel(v)\n );\n\n if (selectAllClicked.length > 0) {\n const allSelected = data.every((d) =>\n realItems.some((s) => s.id === d.id)\n );\n setSelectedItems(allSelected ? [] : [...data]);\n return;\n }\n\n if (groupSentinels.length === 0) {\n setSelectedItems(realItems);\n return;\n }\n\n let updated = [...realItems];\n for (const sentinel of groupSentinels) {\n const group = groups?.find((g) => g.value === sentinel.groupName);\n if (!group) continue;\n const allSelected = group.items.every((item) =>\n updated.some((s) => s.id === item.id)\n );\n if (allSelected) {\n updated = updated.filter(\n (s) => !group.items.some((item) => item.id === s.id)\n );\n } else {\n const missing = group.items.filter(\n (item) => !updated.some((s) => s.id === item.id)\n );\n updated = [...updated, ...missing];\n }\n }\n setSelectedItems(updated);\n }\n\n function handleSimpleValueChange(newItems: FlatRow[]) {\n const creatableClicked = newItems.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = newItems.filter((v): v is T => !isCreatableSentinel(v));\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n return;\n }\n setSelectedItems(newItems as T[]);\n }\n\n // ─── Render sentinel row ──────────────────────────────────────────────────\n\n function renderSentinelRow(row: FlatRow) {\n if (isSelectAllSentinel(row)) {\n const totalCount = data.length;\n const selectedCount = value.length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === totalCount\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxSelectAllItem key=\"__selectAll\" value={row}>\n <ComboboxGroupHeaderCheckbox $state={state} id=\"__selectAll\" />\n Select all\n </ComboboxSelectAllItem>\n );\n }\n\n if (isGroupHeaderSentinel(row)) {\n const group = groups?.find((g) => g.value === row.groupName);\n const groupItemsList = group?.items ?? [];\n const selectedCount = groupItemsList.filter((item) =>\n value.some((s) => s.id === item.id)\n ).length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === groupItemsList.length\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxGroupHeaderItem key={`__header-${row.groupName}`} value={row}>\n <ComboboxGroupHeaderCheckbox\n $state={state}\n id={`__header-${row.groupName}`}\n />\n {renderGroupHeading\n ? renderGroupHeading(row.groupName)\n : row.groupName}\n </ComboboxGroupHeaderItem>\n );\n }\n\n if (isCreatableSentinel(row)) {\n return renderCreatableItem(row);\n }\n\n const item = row as T;\n return (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : () => itemToString(item)\n }\n />\n );\n }\n\n function renderCreatableItem(\n sentinel: CreatableSentinel,\n style?: React.CSSProperties,\n index?: number,\n measureRef?: (el: Element | null) => void\n ) {\n return (\n <ComboboxItem\n key=\"__creatable\"\n value={sentinel}\n itemId=\"__creatable\"\n label={`Create \"${sentinel.label}\"`}\n inputType=\"none\"\n renderItem={() => (\n <>\n <Icon name=\"plus-outline\" size=\"mini\" />\n {`Create \"${sentinel.label}\"`}\n </>\n )}\n style={style}\n index={index}\n data-index={index}\n ref={measureRef}\n />\n );\n }\n\n const baseItems =\n flatItems ?? groups ?? (isChildrenMode ? undefined : visibleData);\n const rootItems =\n creatableSentinel && Array.isArray(baseItems)\n ? ([...baseItems, creatableSentinel] as FlatRow[])\n : baseItems;\n const hasSentinels = selectAll || selectHeadings;\n const rootValue = hasSentinels\n ? ([...value] as FlatRow[])\n : (value as unknown as T[]);\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n multiple\n id={id}\n virtualized={isVirtualized}\n filter={\n creatableProp\n ? (item: unknown, query: string) => {\n if (isCreatableSentinel(item)) return true;\n if (filter) return filter(item, query);\n if (isGroupHeaderSentinel(item) || isSelectAllSentinel(item))\n return true;\n const label = itemToString(item as T);\n return label.toLowerCase().includes(query.toLowerCase());\n }\n : filter\n }\n inputValue={internalInputValue}\n onInputValueChange={(v, eventDetails) => {\n // Preserve search query when an item is selected. Base UI fires\n // 'input-clear' on item-press; ignore it while the popup stays open.\n if (eventDetails.reason === \"input-clear\" && open) return;\n if (skipNextInputChangeRef.current) {\n skipNextInputChangeRef.current = false;\n return;\n }\n setInternalInputValue(v);\n }}\n open={open}\n disabled={props.disabled}\n onOpenChange={setOpen}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n value={rootValue}\n onValueChange={\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (hasSentinels ? handleValueChange : handleSimpleValueChange) as any\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n itemToStringLabel={(item: any) => {\n if (\n !item ||\n isGroupHeaderSentinel(item) ||\n isSelectAllSentinel(item) ||\n isCreatableSentinel(item)\n )\n return \"\";\n return itemToString(item as T);\n }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isItemEqualToValue={(a: any, b: any) => {\n if (isCreatableSentinel(a) && isCreatableSentinel(b))\n return a.label === b.label;\n if (isGroupHeaderSentinel(a) && isGroupHeaderSentinel(b))\n return a.groupName === b.groupName;\n if (isSelectAllSentinel(a) && isSelectAllSentinel(b)) return true;\n if (\n !isGroupHeaderSentinel(a) &&\n !isSelectAllSentinel(a) &&\n !isCreatableSentinel(a) &&\n !isGroupHeaderSentinel(b) &&\n !isSelectAllSentinel(b) &&\n !isCreatableSentinel(b)\n )\n return (a as T).id === (b as T).id;\n return false;\n }}\n items={rootItems}\n >\n <SearchableSelectTokenTrigger\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n {renderSelection ? (\n renderSelection(value)\n ) : value.length > 0 ? (\n (() => {\n const visibleItems =\n maxSelections != null ? value.slice(0, maxSelections) : value;\n const overflowCount =\n maxSelections != null && value.length > maxSelections\n ? value.length - maxSelections\n : 0;\n const text = visibleItems\n .map((item) =>\n customRenderSelections\n ? customRenderSelections(item)\n : itemToString(item)\n )\n .join(\", \");\n return (\n <SelectionText>\n {text}\n {overflowCount > 0 ? `, +${overflowCount}` : \"\"}\n </SelectionText>\n );\n })()\n ) : (\n <SearchableSelectPlaceholder>\n {placeholder}\n </SearchableSelectPlaceholder>\n )}\n <SearchableSelectTriggerIcon style={{ marginLeft: \"auto\" }}>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SearchableSelectTriggerIcon>\n </SearchableSelectTokenTrigger>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <SearchableSelectPopup\n aria-busy={isLoading || undefined}\n style={{ display: \"flex\", flexDirection: \"column\" }}\n >\n <SearchableSelectSearchContainer>\n <SearchableSelectInput\n placeholder={searchPlaceholder}\n autoFocus\n />\n </SearchableSelectSearchContainer>\n <ComboboxStatus>{isLoading ? loadingText : null}</ComboboxStatus>\n <ComboboxEmpty>{isLoading ? null : emptyText}</ComboboxEmpty>\n <SearchableSelectList\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={groups}\n data={visibleData}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n renderGroupHeading={renderGroupHeading}\n renderCreatableItem={\n creatableProp\n ? (sentinel, style, index, measureRef) =>\n renderCreatableItem(\n sentinel,\n style,\n index,\n measureRef\n )\n : undefined\n }\n />\n ) : children ? (\n children\n ) : flatItems ? (\n (row: FlatRow) => renderSentinelRow(row)\n ) : groups ? (\n (\n group: { value: string; items: T[] } | CreatableSentinel,\n index: number\n ) => {\n if (isCreatableSentinel(group)) {\n return renderCreatableItem(group);\n }\n const g = group as { value: string; items: T[] };\n return (\n <React.Fragment key={g.value}>\n <ComboboxGroup items={g.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(g.value)\n : g.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n );\n }\n ) : (\n (item: T | CreatableSentinel) => {\n if (isCreatableSentinel(item)) {\n return renderCreatableItem(item);\n }\n const dataItem = item as T;\n return (\n <ComboboxItem\n key={dataItem.id}\n value={dataItem}\n itemId={String(dataItem.id)}\n label={itemToString(dataItem)}\n disabled={dataItem.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(dataItem)\n : () => itemToString(dataItem)\n }\n />\n );\n }\n )}\n </SearchableSelectList>\n </SearchableSelectPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Menu, type MenuRootChangeEventDetails } from \"@base-ui/react/menu\";\nimport Radio from \"@sproutsocial/seeds-react-radio\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport {\n ActionMenuTrigger,\n ActionMenuPositioner,\n ActionMenuPopup,\n ActionMenuGroup,\n ActionMenuGroupLabel,\n ActionMenuSeparator,\n StyledMenuItem,\n StyledCheckboxItem,\n StyledCheckboxItemIndicator,\n StyledRadioItem,\n StyledRadioItemIndicator,\n StyledLinkItem,\n StyledSubmenuTrigger,\n} from \"./ActionMenuStyles\";\n\n// ─── ActionMenu ───────────────────────────────────────────────────────────────\n\nexport interface ActionMenuProps {\n /** The button element that opens the menu */\n trigger: React.ReactElement;\n /** Menu items and groups */\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Uncontrolled default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (\n open: boolean,\n eventDetails: MenuRootChangeEventDetails\n ) => void;\n /** Disable the trigger */\n disabled?: boolean;\n}\n\nexport function ActionMenu({\n trigger,\n children,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n}: ActionMenuProps) {\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n\n return (\n <Menu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <ActionMenuTrigger render={trigger} disabled={disabled} />\n <Menu.Portal container={portalContainer}>\n <ActionMenuPositioner sideOffset={8}>\n <ActionMenuPopup>{children}</ActionMenuPopup>\n </ActionMenuPositioner>\n </Menu.Portal>\n </Menu.Root>\n );\n}\n\n// ─── MenuGroup ────────────────────────────────────────────────────────────────\n\nexport interface MenuGroupProps {\n children: React.ReactNode;\n /** Optional group label shown above items */\n label?: string;\n /** Render a separator line after this group */\n showSeparator?: boolean;\n}\n\nexport function MenuGroup({\n children,\n label,\n showSeparator = false,\n}: MenuGroupProps) {\n return (\n <>\n <ActionMenuGroup>\n {label && <ActionMenuGroupLabel>{label}</ActionMenuGroupLabel>}\n {children}\n </ActionMenuGroup>\n {showSeparator && <ActionMenuSeparator />}\n </>\n );\n}\n\n// ─── MenuRadioGroup ───────────────────────────────────────────────────────────\n\nexport interface MenuRadioGroupProps {\n children: React.ReactNode;\n /** Controlled selected value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Called when selected value changes */\n onValueChange?: (value: string) => void;\n}\n\nexport function MenuRadioGroup({\n children,\n value,\n defaultValue,\n onValueChange,\n}: MenuRadioGroupProps) {\n return (\n <Menu.RadioGroup\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </Menu.RadioGroup>\n );\n}\n\n// ─── MenuItem ─────────────────────────────────────────────────────────────────\n\ninterface MenuItemActionProps {\n type?: \"action\";\n children: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLElement>;\n disabled?: boolean;\n /** Close the menu when this item is clicked. Defaults to true. */\n closeOnClick?: boolean;\n /** Render as a link */\n href?: string;\n target?: string;\n}\n\ninterface MenuItemCheckboxProps {\n type: \"checkbox\";\n children: React.ReactNode;\n /** Controlled checked state */\n checked?: boolean;\n /** Uncontrolled default checked state */\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n /** Close the menu when clicked. Defaults to false for checkbox items. */\n closeOnClick?: boolean;\n id?: string;\n}\n\ninterface MenuItemRadioProps {\n type: \"radio\";\n /** Value submitted to the parent MenuRadioGroup */\n value: string;\n children: React.ReactNode;\n disabled?: boolean;\n /** Close the menu when clicked. Defaults to false for radio items. */\n closeOnClick?: boolean;\n}\n\nexport type MenuItemProps =\n | MenuItemActionProps\n | MenuItemCheckboxProps\n | MenuItemRadioProps;\n\nexport function MenuItem(props: MenuItemProps) {\n const generatedId = React.useId();\n\n if (props.type === \"checkbox\") {\n const {\n children,\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n closeOnClick = false,\n id,\n } = props;\n const itemId = id ?? `checkbox-menu-item-${generatedId}`;\n return (\n <StyledCheckboxItem\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n closeOnClick={closeOnClick}\n >\n <StyledCheckboxItemIndicator\n keepMounted\n render={(_indicatorProps, state) => (\n <Checkbox\n checked={state.checked}\n onChange={() => {}}\n tabIndex={-1}\n id={itemId}\n name=\"menu-checkbox-item\"\n />\n )}\n />\n {children}\n </StyledCheckboxItem>\n );\n }\n\n if (props.type === \"radio\") {\n const { children, value, disabled, closeOnClick = false } = props;\n return (\n <StyledRadioItem\n value={value}\n disabled={disabled}\n closeOnClick={closeOnClick}\n >\n <StyledRadioItemIndicator\n keepMounted\n render={(_indicatorProps, state) => (\n <Radio\n checked={state.checked}\n onChange={() => {}}\n tabIndex={-1}\n id={`radio-menu-item-${value}`}\n name=\"menu-radio-item\"\n />\n )}\n />\n {children}\n </StyledRadioItem>\n );\n }\n\n // Default: action item\n const {\n children,\n onClick,\n disabled,\n closeOnClick = true,\n href,\n target,\n } = props as MenuItemActionProps;\n\n if (href) {\n return (\n <StyledLinkItem href={href} target={target} closeOnClick={closeOnClick}>\n {children}\n </StyledLinkItem>\n );\n }\n\n return (\n <StyledMenuItem\n onClick={onClick}\n disabled={disabled}\n closeOnClick={closeOnClick}\n >\n {children}\n </StyledMenuItem>\n );\n}\n\n// ─── MenuSub ──────────────────────────────────────────────────────────────────\n\nexport interface MenuSubProps {\n /** The MenuSubTrigger element that opens the submenu */\n trigger: React.ReactNode;\n /** Submenu items */\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Uncontrolled default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (\n open: boolean,\n eventDetails: MenuRootChangeEventDetails\n ) => void;\n /**\n * When true, pressing Escape closes the entire menu tree.\n * When false (default), Escape only closes the submenu.\n */\n closeParentOnEsc?: boolean;\n}\n\nexport function MenuSub({\n trigger,\n children,\n open,\n defaultOpen,\n onOpenChange,\n closeParentOnEsc = false,\n}: MenuSubProps) {\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n\n return (\n <Menu.SubmenuRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n closeParentOnEsc={closeParentOnEsc}\n >\n <div ref={containerRef} style={{ position: \"relative\" }} />\n {trigger}\n <Menu.Portal container={portalContainer}>\n <ActionMenuPositioner sideOffset={getOffset} alignOffset={getOffset}>\n <ActionMenuPopup>{children}</ActionMenuPopup>\n </ActionMenuPositioner>\n </Menu.Portal>\n </Menu.SubmenuRoot>\n );\n}\nfunction getOffset({ side }: { side: Menu.Positioner.Props[\"side\"] }) {\n return side === \"top\" || side === \"bottom\" ? 4 : -8;\n}\n\n// ─── MenuSubTrigger ───────────────────────────────────────────────────────────\n\nexport interface MenuSubTriggerProps {\n children: React.ReactNode;\n disabled?: boolean;\n /** Custom label for keyboard text navigation */\n label?: string;\n /**\n * Whether the submenu opens on hover.\n * @default true\n */\n openOnHover?: boolean;\n}\n\nexport function MenuSubTrigger({\n children,\n disabled,\n label,\n openOnHover = true,\n}: MenuSubTriggerProps) {\n return (\n <StyledSubmenuTrigger\n disabled={disabled}\n label={label}\n openOnHover={openOnHover}\n >\n {children}\n <Icon name=\"chevron-right-outline\" fixedWidth aria-hidden />\n </StyledSubmenuTrigger>\n );\n}\n","import { Menu } from \"@base-ui/react/menu\";\nimport styled, { css } from \"styled-components\";\nimport { focusRing } from \"@sproutsocial/seeds-react-mixins\";\n\nexport const ActionMenuTrigger = styled(Menu.Trigger)``;\n\nexport const ActionMenuPositioner = styled(Menu.Positioner)`\n min-width: var(--anchor-width);\n z-index: 7;\n`;\n\n// Opt out of Base UI Drawer's swipe-to-dismiss pointer capture when the menu\n// is rendered inside a Drawer. Without this, the Drawer's viewport captures\n// pointermove/up on portaled popups and MenuItem clicks never fire.\nexport const ActionMenuPopup = styled(Menu.Popup).attrs({\n \"data-base-ui-swipe-ignore\": \"\",\n})`\n font-family: ${({ theme }) => theme.fontFamily};\n background: ${({ theme }) => theme.colors.container.background.base};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n border-radius: ${({ theme }) => theme.radii[500]};\n box-shadow: ${({ theme }) => theme.shadows.low};\n outline: none;\n max-height: min(var(--available-height, 400px), 400px);\n overflow-y: auto;\n padding: ${({ theme }) => theme.space[300]};\n\n &[data-open] {\n animation: action-menu-popup-in 120ms ease-out;\n }\n\n &[data-closed] {\n animation: action-menu-popup-out 100ms ease-in;\n }\n\n @keyframes action-menu-popup-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes action-menu-popup-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n`;\n\nexport const ActionMenuGroup = styled(Menu.Group)`\n display: block;\n`;\n\nexport const ActionMenuGroupLabel = styled(Menu.GroupLabel)`\n padding: ${({ theme }) => `${theme.space[300]}`};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const ActionMenuSeparator = styled(Menu.Separator)`\n height: 1px;\n margin: ${({ theme }) => `${theme.space[300]} -${theme.space[300]}`};\n background: ${({ theme }) => theme.colors.container.border.base};\n`;\n\nconst menuItemStyles = css`\n box-sizing: border-box;\n display: block;\n width: 100%;\n border-radius: ${({ theme }) => theme.radii[500]};\n background-color: ${({ theme }) => theme.colors.listItem.background.base};\n border: 1px solid ${({ theme }) => theme.colors.listItem.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n font-family: ${({ theme }) => theme.fontFamily};\n font-weight: ${({ theme }) => theme.fontWeights.normal};\n text-align: left;\n text-decoration: none;\n padding: ${({ theme }) => theme.space[300]};\n outline: 0;\n ${({ theme }) => theme.typography[200]};\n transition: all ${({ theme }) => theme.duration.fast};\n cursor: pointer;\n user-select: none;\n\n &[data-highlighted] {\n border-color: ${({ theme }) => theme.colors.listItem.border.base};\n background-color: ${({ theme }) => theme.colors.listItem.background.hover};\n color: ${({ theme }) => theme.colors.text.body};\n text-decoration: none;\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n opacity: 0.4;\n }\n`;\n\nexport const StyledMenuItem = styled(Menu.Item)`\n ${menuItemStyles}\n`;\n\nexport const StyledCheckboxItem = styled(Menu.CheckboxItem)`\n ${menuItemStyles}\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n`;\n\nexport const StyledRadioItem = styled(Menu.RadioItem)`\n ${menuItemStyles}\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n`;\n\nexport const StyledCheckboxItemIndicator = styled(Menu.CheckboxItemIndicator)`\n display: flex;\n align-items: center;\n width: 16px;\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const StyledRadioItemIndicator = styled(Menu.RadioItemIndicator)`\n display: flex;\n align-items: center;\n width: 16px;\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const StyledSubmenuTrigger = styled(Menu.SubmenuTrigger)`\n ${menuItemStyles}\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n justify-content: space-between;\n\n &[data-popup-open] {\n border-color: ${({ theme }) => theme.colors.listItem.border.base};\n background-color: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n`;\n\nexport const StyledLinkItem = styled(Menu.LinkItem)`\n ${menuItemStyles}\n`;\n","import * as React from \"react\";\nimport { type TypeButtonProps } from \"@sproutsocial/seeds-react-button\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n MenuButtonContainer,\n MainButton,\n TriggerButton,\n} from \"./MenuButtonStyles\";\n\n// ─── MenuButton ─────────────────────────────────────────────────────────────\n\nexport interface MenuButtonProps extends TypeButtonProps {\n /**\n * Menu item content rendered inside the dropdown half — the children of an\n * ActionMenu (MenuItems / MenuGroups).\n */\n actionMenu: React.ReactNode;\n /**\n * Accessible label for the chevron-only trigger button. Required so consumers\n * supply a localizable label rather than relying on a hardcoded fallback.\n */\n menuButtonAriaLabel: string;\n}\n\n/**\n * A \"split button\": a primary Button rendered immediately next to an ActionMenu\n * whose trigger is an identical Button showing only a chevron-down icon. The\n * two read as one control — the main button's right corners and the trigger's\n * left corners are squared off with a 1px gap between them.\n */\nexport function MenuButton({\n actionMenu,\n appearance = \"primary\",\n size,\n disabled,\n menuButtonAriaLabel,\n children,\n ...rest\n}: MenuButtonProps) {\n return (\n <MenuButtonContainer>\n <MainButton\n appearance={appearance}\n size={size}\n disabled={disabled}\n {...rest}\n >\n {children}\n </MainButton>\n <ActionMenu\n disabled={disabled}\n trigger={\n <TriggerButton\n appearance={appearance}\n size={size}\n disabled={disabled}\n ariaLabel={menuButtonAriaLabel}\n >\n <Icon name=\"chevron-down-outline\" fixedWidth aria-hidden />\n </TriggerButton>\n }\n >\n {actionMenu}\n </ActionMenu>\n </MenuButtonContainer>\n );\n}\n","import styled from \"styled-components\";\nimport { Button } from \"@sproutsocial/seeds-react-button\";\n\n// A 1px gap separates the two halves of the split button (fixed pixel value\n// per the design, not a theme token).\nexport const MenuButtonContainer = styled.div`\n display: inline-flex;\n gap: 1px;\n`;\n\n// Square off the inner (right) corners of the main button so it reads as one\n// control with the trigger. The `&&` specificity bump beats the base Button\n// Container's own `border-radius` (equal-specificity, source-order dependent).\nexport const MainButton = styled(Button)`\n && {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n`;\n\n// Square off the inner (left) corners of the chevron trigger button. The\n// chevron rotates 180° while the menu is open: base-ui's Menu.Trigger sets\n// `data-popup-open` on this element (the base Button spreads it onto its root\n// DOM node), mirroring the open-state selector convention in ActionMenuStyles.\nexport const TriggerButton = styled(Button)`\n && {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .Icon-svg {\n transition: transform ${({ theme }) => theme.duration.fast} ease;\n }\n\n &[data-popup-open] .Icon-svg {\n transform: rotate(180deg);\n }\n`;\n"],"mappings":"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","names":["React","Select","styled","Select","styled","styled","Icon","jsx","CheckIcon","styled","Select","Fragment","jsx","jsxs","styled","Select","React","Select","styled","jsx","jsxs","styled","Select","React","Combobox","React","React","Radio","Checkbox","styled","css","focusRing","Checkbox","jsx","invalidStyles","css","styled","focusRing","Checkbox","jsx","jsxs","Radio","Checkbox","CheckIcon","ComboboxItem","React","Combobox","jsx","jsxs","Combobox","groupItems","item","jsx","jsxs","id","Combobox","React","Combobox","Icon","Fragment","jsx","jsxs","isGroupHeaderSentinel","isSelectAllSentinel","id","realItems","item","Combobox","React","Combobox","Fragment","jsx","jsxs","id","Combobox","React","Combobox","Icon","styled","Fragment","jsx","jsxs","SelectionText","makeGroupHeaderSentinel","isGroupHeaderSentinel","SELECT_ALL_SENTINEL","isSelectAllSentinel","id","realItems","item","Combobox","React","Menu","Radio","Checkbox","Icon","styled","css","Fragment","jsx","jsxs","Menu","children","disabled","closeOnClick","Checkbox","Radio","Icon","Icon","styled","jsx","jsxs","Icon"]}
1
+ {"version":3,"sources":["../../../src/v3/SingleSelect.tsx","../../../src/v3/SeedsPortal.tsx","../../../src/v3/Common/SelectItem.tsx","../../../src/v3/Common/groupItems.ts","../../../src/v3/Common/SelectStyles.tsx","../../../src/v3/Common/SelectIcons.tsx","../../../src/v3/MultiSelect.tsx","../../../src/v3/SingleCombobox.tsx","../../../src/v3/Common/useSuppressEscapeClear.ts","../../../src/v3/Common/ComboboxItem.tsx","../../../src/v3/Common/ComboboxStyles.tsx","../../../src/v3/Common/VirtualizedComboboxList.tsx","../../../src/v3/Common/sentinels.ts","../../../src/v3/MultiCombobox.tsx","../../../src/v3/SingleSearchableSelect.tsx","../../../src/v3/MultiSearchableSelect.tsx","../../../src/v3/ActionMenu.tsx","../../../src/v3/ActionMenuStyles.tsx","../../../src/v3/MenuButton.tsx","../../../src/v3/MenuButtonStyles.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Select } from \"@base-ui/react/select\";\nimport styled from \"styled-components\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport SelectItem from \"./Common/SelectItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n Field,\n SelectTrigger,\n SelectIcon,\n SelectGroup,\n SelectGroupLabel,\n SelectSeparator,\n SelectPositioner,\n SelectPopup,\n} from \"./Common/SelectStyles\";\nimport { StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// <Listbox(?!\\.|B)\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst StyledValue = styled(Select.Value)`\n flex: 1;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &[data-placeholder] {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n`;\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface SingleSelectBaseProps {\n id?: string;\n placeholder?: string;\n includePlaceholderItem?: boolean;\n disabled?: boolean;\n \"aria-label\"?: string;\n /** Id of a visible label. Preferred over `aria-label`. */\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface SingleSelectDataProps<T extends DataWithId>\n extends SingleSelectBaseProps {\n data: T[];\n itemToString: (item: T | null) => string;\n renderItem?: (item: T) => React.ReactNode;\n inputType?: \"icon\" | \"radio\";\n selectedItemId?: T[\"id\"] | null;\n defaultSelectedItemId?: T[\"id\"] | null;\n onSelectedItemIdChange?: (id: T[\"id\"] | null) => void;\n renderSelection?: (item: T) => React.ReactNode;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n children?: never;\n}\n\ninterface SingleSelectChildrenProps extends SingleSelectBaseProps {\n children: React.ReactNode;\n selectedItemId?: string | number | null;\n defaultSelectedItemId?: string | number | null;\n onSelectedItemIdChange?: (id: string | number | null) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n inputType?: never;\n renderSelection?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n}\n\nexport type SingleSelectProps<T extends DataWithId> =\n | SingleSelectDataProps<T>\n | SingleSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SingleSelect<T extends DataWithId>(\n props: SingleSelectProps<T>\n) {\n const { id, placeholder, includePlaceholderItem, fullWidth = true } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const selectedItemId = props.selectedItemId;\n const defaultSelectedItemId = props.defaultSelectedItemId;\n const onSelectedItemIdChange = props.onSelectedItemIdChange;\n\n const data = isChildrenMode ? [] : (props as SingleSelectDataProps<T>).data;\n const itemToString = isChildrenMode\n ? () => \"\"\n : (props as SingleSelectDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).renderItem;\n const inputType = isChildrenMode\n ? \"icon\"\n : (props as SingleSelectDataProps<T>).inputType ?? \"icon\";\n const renderSelection = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).renderSelection;\n const groupBy = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as SingleSelectDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as SingleSelectChildrenProps).children\n : undefined;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const items = React.useMemo(() => {\n const dataItems = data.map((item) => ({\n value: String(item.id),\n label: itemToString(item),\n }));\n if (includePlaceholderItem) {\n return [{ value: null, label: placeholder ?? \"\" }, ...dataItems];\n }\n return dataItems;\n }, [data, itemToString, includePlaceholderItem, placeholder]);\n\n const dataWithPlaceholder = includePlaceholderItem\n ? [{ id: null, value: null, label: placeholder ?? \"\" }, ...data]\n : data;\n\n const isControlled = selectedItemId !== undefined;\n const [internalValue, setInternalValue] = React.useState<string | null>(\n defaultSelectedItemId != null ? String(defaultSelectedItemId) : null\n );\n const value = isControlled\n ? selectedItemId != null\n ? String(selectedItemId)\n : null\n : internalValue;\n\n const selectedItem = React.useMemo(\n () =>\n value != null ? data.find((d) => String(d.id) === value) ?? null : null,\n [data, value]\n );\n\n function handleValueChange(newValue: string | null) {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n if (onSelectedItemIdChange) {\n if (newValue == null) {\n onSelectedItemIdChange(null);\n } else {\n const item = data.find((d) => String(d.id) === newValue);\n onSelectedItemIdChange(item ? item.id : null);\n }\n }\n }\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Select.Root\n items={items}\n value={value}\n disabled={props.disabled}\n onValueChange={handleValueChange}\n id={id}\n >\n <SelectTrigger\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n <StyledValue placeholder={placeholder}>\n {renderSelection && selectedItem\n ? renderSelection(selectedItem)\n : undefined}\n </StyledValue>\n <SelectIcon>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SelectIcon>\n </SelectTrigger>\n <Select.Portal container={portalContainer}>\n <SelectPositioner sideOffset={8} alignItemWithTrigger={false}>\n <SelectPopup>\n <Select.ScrollUpArrow />\n <Select.List\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {children ? (\n children\n ) : groupBy ? (\n groupItems(data, groupBy).map((group, index, arr) => (\n <React.Fragment key={group.value}>\n <SelectGroup>\n <SelectGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </SelectGroupLabel>\n {group.items.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n ))}\n </SelectGroup>\n {index < arr.length - 1 && <SelectSeparator />}\n </React.Fragment>\n ))\n ) : (\n <>\n {includePlaceholderItem && (\n <SelectItem\n key={\"placeholder\"}\n value={null}\n label={placeholder ?? \"\"}\n />\n )}\n {data.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n ))}\n </>\n )}\n </Select.List>\n <Select.ScrollDownArrow />\n </SelectPopup>\n </SelectPositioner>\n </Select.Portal>\n </Select.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { DisablePortalToBodyContext } from \"@sproutsocial/seeds-react-portal\";\n\n/**\n * Returns the portal container to use for Base UI's Select.Portal /\n * Combobox.Portal. When inside a Modal V2 or Drawer (which set\n * DisablePortalToBodyContext=true), returns a ref'd div rendered inline so\n * the popup stays inside the Radix Dialog's focus/pointer boundary.\n * Otherwise returns undefined, letting Base UI portal to document.body.\n *\n * Module Federation note: when a remote chunk loads its own copy of\n * seeds-react-portal, the context object identity differs from the host's\n * copy, so DisablePortalToBodyContext will always read false in the remote\n * even when a Modal/Drawer/PeekIn has provided true. As a fallback we walk\n * the DOM from the containerRef anchor and treat any [role=\"dialog\"] ancestor\n * as an in-dialog boundary, matching the same behaviour the context would have\n * triggered.\n *\n * Usage:\n * const { containerRef, portalContainer } = useSeedsPortalContainer();\n * <div ref={containerRef} style={{ position: \"relative\" }} />\n * <Select.Portal container={portalContainer}>...</Select.Portal>\n */\nexport function useSeedsPortalContainer() {\n const disablePortalToBody = React.useContext(DisablePortalToBodyContext);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [portalContainer, setPortalContainer] = React.useState<\n HTMLElement | undefined\n >(undefined);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n // Primary signal: context set by Modal V2 / Drawer / PeekIn in the same\n // module federation chunk.\n const insideDialog =\n disablePortalToBody ||\n // Fallback for cross-chunk MFE scenarios where context identity differs:\n // detect the dialog boundary directly from the DOM.\n !!containerRef.current.closest(\"[role='dialog']\");\n\n if (insideDialog) {\n // Portal to the Radix Dialog content element so the popup escapes the\n // ModalBody scroll container while staying inside the Dialog boundary\n // (required for Radix focus/pointer-events containment).\n const dialogContent =\n containerRef.current.closest<HTMLElement>(\"[role='dialog']\");\n setPortalContainer(dialogContent ?? containerRef.current);\n }\n }, [disablePortalToBody]);\n\n return { containerRef, portalContainer, disablePortalToBody };\n}\n","import * as React from \"react\";\nimport { Select } from \"@base-ui/react/select\";\nimport styled from \"styled-components\";\nimport Radio from \"@sproutsocial/seeds-react-radio\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nexport const StyledItem = styled(Select.Item)`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: 14px;\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n\n &[data-selected] {\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const StyledItemIndicator = styled(Select.ItemIndicator)`\n display: flex;\n align-items: center;\n width: 16px;\n color: ${({ theme }) => theme.colors.text.body};\n visibility: hidden;\n\n &[data-selected] {\n visibility: visible;\n }\n`;\n\nexport const StyledItemText = styled(Select.ItemText)``;\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nfunction CheckIcon() {\n return <Icon name=\"check-outline\" fixedWidth aria-hidden />;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\ninterface SelectItemProps {\n value: string | null;\n label: string;\n disabled?: boolean;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n renderItem?: () => React.ReactNode;\n hidden?: boolean;\n}\n\nexport default function SelectItem({\n value,\n label,\n disabled,\n inputType = \"icon\",\n renderItem,\n hidden,\n}: SelectItemProps) {\n return (\n <StyledItem\n value={value}\n disabled={disabled}\n style={hidden ? { display: \"none\" } : undefined}\n data-qa-menu-item={label}\n >\n {inputType === \"radio\" ? (\n <StyledItemIndicator\n keepMounted\n render={(_props, state) => (\n <Radio\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`radio-${value}`}\n name=\"select-item\"\n />\n )}\n />\n ) : inputType === \"checkbox\" ? (\n <StyledItemIndicator\n keepMounted\n render={(_props, state) => (\n <Checkbox\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`checkbox-${value}`}\n name=\"select-item\"\n />\n )}\n />\n ) : inputType === \"icon\" ? (\n <StyledItemIndicator keepMounted>\n <CheckIcon />\n </StyledItemIndicator>\n ) : null}\n <StyledItemText>{renderItem ? renderItem() : label}</StyledItemText>\n </StyledItem>\n );\n}\n","export function groupItems<T>(\n data: T[],\n groupBy: (item: T) => string\n): Array<{ value: string; items: T[] }> {\n const map = new Map<string, T[]>();\n for (const item of data) {\n const key = groupBy(item);\n if (!map.has(key)) map.set(key, []);\n map.get(key)!.push(item);\n }\n return Array.from(map.entries()).map(([value, items]) => ({ value, items }));\n}\n","import { Select } from \"@base-ui/react/select\";\nimport styled, { css } from \"styled-components\";\nimport { focusRing } from \"@sproutsocial/seeds-react-mixins\";\nimport { StyledChevron } from \"./SelectIcons\";\n\nconst invalidStyles = css`\n border-color: ${({ theme }) => theme.colors.form.border.error};\n\n ${StyledChevron} {\n color: ${({ theme }) => theme.colors.icon.error};\n }\n`;\n\nexport const Field = styled.div<{ $fullWidth?: boolean }>`\n display: ${({ $fullWidth }) =>\n $fullWidth === false ? \"inline-flex\" : \"flex\"};\n flex-direction: column;\n gap: ${({ theme }) => theme.space[200]};\n ${({ $fullWidth }) => $fullWidth !== false && \"width: 100%;\"}\n`;\n\nexport const SelectLabel = styled(Select.Label)`\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const SelectTrigger = styled(Select.Trigger)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]}`};\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-popup-open] {\n ${focusRing}\n }\n\n &[data-popup-open] [data-chevron] {\n transform: rotate(-180deg);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const SelectValue = styled(Select.Value)`\n min-width: 0;\n overflow: hidden;\n`;\n\nexport const SelectIcon = styled(Select.Icon)`\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.colors.icon.base};\n flex-shrink: 0;\n`;\n\nexport const SelectGroup = styled(Select.Group)`\n display: block;\n`;\n\nexport const SelectGroupLabel = styled(Select.GroupLabel)`\n padding: ${({ theme }) =>\n `${theme.space[300]} ${theme.space[300]} ${theme.space[200]}`};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${({ theme }) => theme.colors.text.subtext};\n`;\n\nexport const SelectSeparator = styled(Select.Separator)`\n height: 1px;\n margin: ${({ theme }) => `${theme.space[200]} ${theme.space[300]}`};\n background: ${({ theme }) => theme.colors.container.border.base};\n`;\n\nexport const SelectPositioner = styled(Select.Positioner)`\n width: var(--anchor-width);\n z-index: 7;\n`;\n\nexport const SelectPopup = styled(Select.Popup)`\n font-family: ${({ theme }) => theme.fontFamily};\n background: ${({ theme }) => theme.colors.container.background.base};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n border-radius: ${({ theme }) => theme.radii[500]};\n box-shadow: ${({ theme }) => theme.shadows.low};\n outline: none;\n max-height: min(var(--available-height, 400px), 400px);\n overflow-y: auto;\n padding: ${({ theme }) => theme.space[200]};\n\n &[data-open] {\n animation: select-popup-in 120ms ease-out;\n }\n\n &[data-closed] {\n animation: select-popup-out 100ms ease-in;\n }\n\n @keyframes select-popup-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes select-popup-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n`;\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\n\nexport interface StyledChevronProps {\n $isOpen?: boolean;\n}\n\nexport const StyledChevron = styled.div<StyledChevronProps>`\n display: flex;\n align-items: center;\n transition: transform 0.15s;\n ${({ $isOpen }) => $isOpen && \"transform: rotate(-180deg);\"}\n`;\n\nexport function ChevronIcon() {\n return <Icon name=\"chevron-down-outline\" fixedWidth aria-hidden />;\n}\n\nexport function ClearIcon() {\n return <Icon name=\"circle-x-outline\" fixedWidth aria-hidden size=\"mini\" />;\n}\n\nexport function CheckIcon() {\n return <Icon name=\"check-outline\" fixedWidth aria-hidden />;\n}\n","import * as React from \"react\";\nimport { Select } from \"@base-ui/react/select\";\nimport styled from \"styled-components\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport SelectItem from \"./Common/SelectItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n Field,\n SelectTrigger,\n SelectValue,\n SelectIcon,\n SelectGroup,\n SelectGroupLabel,\n SelectSeparator,\n SelectPositioner,\n SelectPopup,\n} from \"./Common/SelectStyles\";\nimport { StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst SelectionText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\n// The styles in here need cleaned up, but in MultiSearchableSelect are correct\nconst Placeholder = styled.div`\n color: ${({ theme }) => theme.colors.text.subtext};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n line-height: 16px;\n padding-top: 2px;\n padding-bottom: 2px;\n margin: 2px 8px 0px 0px;\n`;\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface MultiSelectBaseProps {\n id?: string;\n placeholder?: string;\n disabled?: boolean;\n \"aria-label\"?: string;\n /** Id of a visible label. Preferred over `aria-label`. */\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface MultiSelectDataProps<T extends DataWithId>\n extends MultiSelectBaseProps {\n data: T[];\n itemToString: (item: T) => string;\n renderItem?: (item: T) => React.ReactNode;\n customRenderSelections?: (item: T) => string;\n renderSelection?: (items: T[]) => React.ReactNode;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n maxSelections?: number;\n selectedItemIds?: Array<T[\"id\"]>;\n defaultSelectedItemIds?: Array<T[\"id\"]>;\n onSelectedItemIdsChange?: (ids: Array<T[\"id\"]>) => void;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n removeSelectedItems?: boolean;\n children?: never;\n}\n\ninterface MultiSelectChildrenProps extends MultiSelectBaseProps {\n children: React.ReactNode;\n selectedItemIds?: Array<string | number>;\n defaultSelectedItemIds?: Array<string | number>;\n onSelectedItemIdsChange?: (ids: Array<string | number>) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n customRenderSelections?: never;\n renderSelection?: never;\n inputType?: never;\n maxSelections?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n removeSelectedItems?: never;\n}\n\nexport type MultiSelectProps<T extends DataWithId> =\n | MultiSelectDataProps<T>\n | MultiSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function MultiSelect<T extends DataWithId>(props: MultiSelectProps<T>) {\n const { id, placeholder = \"Select...\", fullWidth = true } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const data = isChildrenMode ? [] : (props as MultiSelectDataProps<T>).data;\n const itemToString = isChildrenMode\n ? () => \"\"\n : (props as MultiSelectDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).renderItem;\n const customRenderSelections = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).customRenderSelections;\n const maxSelections = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).maxSelections;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).renderSelection;\n const removeSelectedItems = isChildrenMode\n ? false\n : (props as MultiSelectDataProps<T>).removeSelectedItems ?? false;\n const inputType = isChildrenMode\n ? \"checkbox\"\n : removeSelectedItems\n ? \"none\"\n : (props as MultiSelectDataProps<T>).inputType ?? \"checkbox\";\n const selectedItemIds = props.selectedItemIds;\n const defaultSelectedItemIds = props.defaultSelectedItemIds;\n const onSelectedItemIdsChange = props.onSelectedItemIdsChange;\n const groupBy = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as MultiSelectDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as MultiSelectChildrenProps).children\n : undefined;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n\n const isControlled = selectedItemIds !== undefined;\n\n const [internalValue, setInternalValue] = React.useState<string[]>(\n () => defaultSelectedItemIds?.map(String) ?? []\n );\n\n const value = isControlled ? selectedItemIds!.map(String) : internalValue;\n\n const items = React.useMemo(\n () =>\n data.map((item) => ({\n value: String(item.id),\n label: itemToString(item),\n })),\n [data, itemToString]\n );\n\n const selectedItems = React.useMemo(\n () =>\n value\n .map((v) => data.find((d) => String(d.id) === v))\n .filter((d): d is T => d != null),\n [data, value]\n );\n\n function handleValueChange(newValues: string[]) {\n if (!isControlled) {\n setInternalValue(newValues);\n }\n if (onSelectedItemIdsChange) {\n const ids = newValues.map((v) => {\n const item = data.find((d) => String(d.id) === v);\n return item ? item.id : v;\n });\n onSelectedItemIdsChange(ids as Array<T[\"id\"]>);\n }\n }\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Select.Root\n multiple\n items={items}\n value={value}\n onValueChange={handleValueChange}\n disabled={props.disabled}\n id={id}\n >\n <SelectTrigger\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n <SelectValue>\n {() => {\n if (renderSelection) return renderSelection(selectedItems);\n if (selectedItems.length === 0)\n return <Placeholder>{placeholder}</Placeholder>;\n\n const visibleItems =\n maxSelections != null\n ? selectedItems.slice(0, maxSelections)\n : selectedItems;\n const overflowCount =\n maxSelections != null && selectedItems.length > maxSelections\n ? selectedItems.length - maxSelections\n : 0;\n\n const text = visibleItems\n .map((item) =>\n customRenderSelections\n ? customRenderSelections(item)\n : itemToString(item)\n )\n .join(\", \");\n\n return (\n <SelectionText>\n {text}\n {overflowCount > 0 ? `, +${overflowCount}` : \"\"}\n </SelectionText>\n );\n }}\n </SelectValue>\n <SelectIcon>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SelectIcon>\n </SelectTrigger>\n <Select.Portal container={portalContainer}>\n <SelectPositioner sideOffset={8} alignItemWithTrigger={false}>\n <SelectPopup>\n <Select.ScrollUpArrow />\n <Select.List\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {children\n ? children\n : groupBy\n ? groupItems(data, groupBy).map((group, index, arr) => (\n <React.Fragment key={group.value}>\n <SelectGroup>\n <SelectGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </SelectGroupLabel>\n {group.items.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n hidden={\n removeSelectedItems &&\n value.includes(String(item.id))\n }\n renderItem={\n renderItem ? () => renderItem(item) : undefined\n }\n />\n ))}\n </SelectGroup>\n {index < arr.length - 1 && <SelectSeparator />}\n </React.Fragment>\n ))\n : data.map((item) => (\n <SelectItem\n key={item.id}\n value={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n hidden={\n removeSelectedItems && value.includes(String(item.id))\n }\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n ))}\n </Select.List>\n <Select.ScrollDownArrow />\n </SelectPopup>\n </SelectPositioner>\n </Select.Portal>\n </Select.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport { useSuppressEscapeClear } from \"./Common/useSuppressEscapeClear\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxInputGroup,\n ComboboxInput,\n ComboboxActionButtons,\n ComboboxClear,\n ComboboxTrigger,\n ComboboxPositioner,\n ComboboxPopup,\n ComboboxList,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n} from \"./Common/ComboboxStyles\";\nimport { ClearIcon, StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface SingleComboboxBaseProps {\n id?: string;\n placeholder?: string;\n emptyText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n \"aria-label\"?: string;\n /** Id of a visible label. Preferred over `aria-label`. */\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface SingleComboboxDataBaseProps<T extends DataWithId>\n extends SingleComboboxBaseProps {\n data: T[];\n itemToString: (item: T | null) => string;\n renderItem?: (item: T) => React.ReactNode;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n selectedItemId?: T[\"id\"] | null;\n defaultSelectedItemId?: T[\"id\"] | null;\n onSelectedItemIdChange?: (id: T[\"id\"] | null) => void;\n children?: never;\n}\n\ninterface SingleComboboxDataProps<T extends DataWithId>\n extends SingleComboboxDataBaseProps<T> {\n isVirtualized?: false;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n}\n\ninterface SingleComboboxVirtualizedProps<T extends DataWithId>\n extends SingleComboboxDataBaseProps<T> {\n isVirtualized: true;\n groupBy?: never;\n renderGroupHeading?: never;\n}\n\ninterface SingleComboboxChildrenProps extends SingleComboboxBaseProps {\n children: React.ReactNode;\n selectedItemId?: string | number | null;\n defaultSelectedItemId?: string | number | null;\n onSelectedItemIdChange?: (id: string | number | null) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n inputType?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n isVirtualized?: never;\n}\n\nexport type SingleComboboxProps<T extends DataWithId> =\n | SingleComboboxDataProps<T>\n | SingleComboboxVirtualizedProps<T>\n | SingleComboboxChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SingleCombobox<T extends DataWithId>(\n props: SingleComboboxProps<T>\n) {\n const {\n id,\n placeholder = \"Search...\",\n emptyText = \"No results found.\",\n filter,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n type DataProps =\n | SingleComboboxDataProps<T>\n | SingleComboboxVirtualizedProps<T>;\n\n const data = isChildrenMode ? ([] as T[]) : (props as DataProps).data;\n const itemToString = isChildrenMode\n ? (_item: T | null) => \"\"\n : (props as DataProps).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as DataProps).renderItem;\n const inputType = isChildrenMode\n ? \"icon\"\n : (props as DataProps).inputType ?? \"icon\";\n const isVirtualized = isChildrenMode\n ? false\n : (props as DataProps).isVirtualized ?? false;\n const groupBy = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleComboboxDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleComboboxDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as SingleComboboxChildrenProps).children\n : undefined;\n\n const selectedItemId = props.selectedItemId;\n const defaultSelectedItemId = props.defaultSelectedItemId;\n const onSelectedItemIdChange = props.onSelectedItemIdChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n\n const onInputKeyDownCapture = useSuppressEscapeClear(open);\n\n const isControlled = selectedItemId !== undefined;\n\n const idToItem = React.useCallback(\n (id: T[\"id\"] | null | undefined): T | null => {\n if (id == null) return null;\n return data.find((d) => String(d.id) === String(id)) ?? null;\n },\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T | null>(() =>\n idToItem(defaultSelectedItemId as T[\"id\"] | null)\n );\n\n const value = isControlled\n ? idToItem(selectedItemId as T[\"id\"] | null)\n : internalValue;\n\n function handleValueChange(newItem: T | null) {\n if (!isControlled) {\n setInternalValue(newItem);\n }\n if (onSelectedItemIdChange) {\n onSelectedItemIdChange(newItem ? newItem.id : null);\n }\n }\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(data, groupBy) : null),\n [data, groupBy]\n );\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n id={id}\n value={value}\n onValueChange={handleValueChange}\n itemToStringLabel={itemToString}\n isItemEqualToValue={(a, b) => a != null && b != null && a.id === b.id}\n items={\n isVirtualized ? data : groups ?? (isChildrenMode ? undefined : data)\n }\n virtualized={isVirtualized}\n disabled={props.disabled}\n filter={filter}\n open={open}\n onOpenChange={setOpen}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n >\n <ComboboxInputGroup\n $isInvalid={isInvalid}\n onKeyDownCapture={onInputKeyDownCapture}\n >\n <ComboboxInput\n placeholder={placeholder}\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n />\n <ComboboxActionButtons>\n <ComboboxClear aria-label=\"Clear selection\">\n <ClearIcon />\n </ComboboxClear>\n <ComboboxTrigger aria-label=\"Open popup\">\n <StyledChevron $isOpen={open}>\n <ChevronIcon />\n </StyledChevron>\n </ComboboxTrigger>\n </ComboboxActionButtons>\n </ComboboxInputGroup>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <ComboboxPopup\n style={\n isVirtualized\n ? { display: \"flex\", flexDirection: \"column\" }\n : undefined\n }\n >\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={groups}\n data={data}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n renderGroupHeading={renderGroupHeading}\n />\n ) : children ? (\n children\n ) : groups ? (\n (group: { value: string; items: T[] }, index: number) => (\n <React.Fragment key={group.value}>\n <ComboboxGroup items={group.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n )\n ) : (\n (item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )\n )}\n </ComboboxList>\n </ComboboxPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\n\n// When the popup is closed, Base UI's ComboboxInput onKeyDown handler clears\n// both the typed input value and the committed selection on Escape (an\n// ARIA-permitted but destructive interpretation of the combobox pattern). We\n// suppress that path by stopping the synthetic event in capture phase before\n// it reaches the input's React bubble-phase handler. The popup-open Escape\n// (handled by Base UI's document listener in useDismiss) and the parent\n// Modal/Dialog Escape (handled by Radix's document-capture listener, which\n// runs before any React synthetic dispatch) are both unaffected.\nexport function useSuppressEscapeClear(open: boolean) {\n return React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Escape\" && !open) {\n event.stopPropagation();\n }\n },\n [open]\n );\n}\n","import * as React from \"react\";\nimport Radio from \"@sproutsocial/seeds-react-radio\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport {\n ComboboxItem as StyledItem,\n ComboboxItemIndicator,\n} from \"./ComboboxStyles\";\nimport { CheckIcon } from \"./SelectIcons\";\n\ninterface ComboboxItemProps<T> {\n value: T;\n itemId: string;\n label: string;\n disabled?: boolean;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n renderItem?: () => React.ReactNode;\n index?: number;\n \"data-index\"?: number;\n style?: React.CSSProperties;\n}\n\nfunction ComboboxItemInner<T>(\n {\n value,\n itemId,\n label,\n disabled,\n inputType = \"icon\",\n renderItem,\n index,\n \"data-index\": dataIndex,\n style,\n }: ComboboxItemProps<T>,\n ref: React.Ref<HTMLDivElement>\n) {\n return (\n <StyledItem\n value={value}\n index={index}\n data-index={dataIndex}\n style={style}\n ref={ref}\n disabled={disabled}\n data-qa-menu-item={label}\n >\n {inputType === \"radio\" ? (\n <ComboboxItemIndicator\n keepMounted\n render={(_props, state) => (\n <Radio\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`radio-${itemId}`}\n name=\"combobox-item\"\n />\n )}\n />\n ) : inputType === \"checkbox\" ? (\n <ComboboxItemIndicator\n keepMounted\n render={(_props, state) => (\n <Checkbox\n checked={state.selected}\n onChange={() => {}}\n tabIndex={-1}\n id={`checkbox-${itemId}`}\n name=\"combobox-item\"\n />\n )}\n />\n ) : inputType === \"icon\" ? (\n <ComboboxItemIndicator keepMounted>\n <CheckIcon />\n </ComboboxItemIndicator>\n ) : null}\n <span>{renderItem ? renderItem() : label}</span>\n </StyledItem>\n );\n}\n\nconst ComboboxItem = React.forwardRef(ComboboxItemInner) as <T>(\n props: ComboboxItemProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement;\n\nexport default ComboboxItem;\n","import { Combobox } from \"@base-ui/react/combobox\";\nimport styled, { css } from \"styled-components\";\nimport { focusRing } from \"@sproutsocial/seeds-react-mixins\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport { StyledChevron } from \"./SelectIcons\";\n\nconst invalidStyles = css`\n border-color: ${({ theme }) => theme.colors.form.border.error};\n\n ${StyledChevron} {\n color: ${({ theme }) => theme.colors.icon.error};\n }\n`;\n\nexport const ComboboxLabel = styled.label`\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const ComboboxInputGroup = styled(Combobox.InputGroup)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-within {\n ${focusRing}\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const ComboboxInput = styled(Combobox.Input)`\n flex: 1;\n min-width: 30px;\n padding: ${({ theme }) => theme.space[300]};\n border: none !important;\n background: transparent;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n line-height: ${({ theme }) => theme.typography[200].lineHeight};\n color: ${({ theme }) => theme.colors.text.body};\n outline: none;\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nexport const ComboboxTokenInput = styled(Combobox.Input)`\n flex: 1;\n min-width: 60px;\n padding: ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[300]}\n ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[350]};\n border: none !important;\n background: transparent;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n line-height: ${({ theme }) => theme.typography[200].lineHeight};\n color: ${({ theme }) => theme.colors.text.body};\n outline: none;\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nexport const ComboboxActionButtons = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n margin-left: auto;\n gap: ${({ theme }) => theme.space[100]};\n`;\n\nexport const ComboboxClear = styled(Combobox.Clear).attrs({ tabIndex: 0 })`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.colors.icon.base};\n cursor: pointer;\n border-radius: ${({ theme }) => theme.radii[300]};\n padding: 0;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.body};\n }\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-empty] {\n display: none;\n }\n`;\n\nexport const ComboboxTrigger = styled(Combobox.Trigger)`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.colors.icon.base};\n cursor: default;\n padding: 0;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.body};\n }\n`;\n\nexport const ComboboxPositioner = styled(Combobox.Positioner)`\n width: var(--anchor-width);\n z-index: 7;\n`;\n\nexport const ComboboxPopup = styled(Combobox.Popup)`\n font-family: ${({ theme }) => theme.fontFamily};\n background: ${({ theme }) => theme.colors.container.background.base};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n border-radius: ${({ theme }) => theme.radii[500]};\n box-shadow: ${({ theme }) => theme.shadows.medium};\n outline: none;\n width: 100%;\n max-height: min(var(--available-height, 400px), 400px);\n overflow-y: auto;\n padding: 0;\n\n &[data-open] {\n animation: combobox-popup-in 120ms ease-out;\n }\n\n &[data-closed] {\n animation: combobox-popup-out 100ms ease-in;\n }\n\n @keyframes combobox-popup-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes combobox-popup-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n`;\n\nexport const ComboboxList = styled(Combobox.List)`\n padding: ${({ theme }) => theme.space[200]};\n\n &:empty {\n padding: 0;\n }\n`;\n\nexport const ComboboxStatus = styled(Combobox.Status)`\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[350]}`};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.subtext};\n\n &:empty {\n padding: 0;\n }\n`;\n\nexport const ComboboxEmpty = styled(Combobox.Empty)`\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[350]}`};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.subtext};\n\n &:empty {\n padding: 0;\n }\n`;\n\nexport const ComboboxItem = styled(Combobox.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n\n &[data-selected] {\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const ComboboxItemIndicator = styled(Combobox.ItemIndicator)`\n display: flex;\n align-items: center;\n width: ${({ theme }) => theme.space[400]};\n color: ${({ theme }) => theme.colors.text.body};\n visibility: hidden;\n\n &[data-selected] {\n visibility: visible;\n }\n`;\n\nexport const ComboboxGroup = styled(Combobox.Group)`\n display: block;\n`;\n\nexport const ComboboxGroupLabel = styled(Combobox.GroupLabel)`\n padding: ${({ theme }) =>\n `${theme.space[300]} ${theme.space[300]} ${theme.space[200]}`};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${({ theme }) => theme.colors.text.subtext};\n`;\n\nexport const ComboboxSeparator = styled.div`\n height: 1px;\n margin: ${({ theme }) => `${theme.space[200]} ${theme.space[300]}`};\n background: ${({ theme }) => theme.colors.container.border.base};\n`;\n\nexport const ComboboxGroupHeaderItem = styled(Combobox.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${({ theme }) => theme.colors.text.subtext};\n cursor: default;\n outline: none;\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n color: ${({ theme }) => theme.colors.text.body};\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n }\n`;\n\nexport const ComboboxSelectAllItem = styled(Combobox.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => `${theme.space[300]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n border-bottom: 1px solid ${({ theme }) => theme.colors.container.border.base};\n margin-bottom: ${({ theme }) => theme.space[200]};\n\n &[data-highlighted] {\n background: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n`;\n\nexport function ComboboxGroupHeaderCheckbox({\n $state,\n id,\n}: {\n $state: \"none\" | \"partial\" | \"all\";\n id: string;\n}) {\n return (\n <Checkbox\n id={id}\n checked={$state === \"all\"}\n indeterminate={$state === \"partial\"}\n onChange={() => {}}\n tabIndex={-1}\n />\n );\n}\n\n// Multi-select Token components\nexport const ComboboxToken = styled(Combobox.Chips)`\n display: flex;\n width: 100%;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.space[200]};\n`;\n\nexport const ComboboxTokenInputGroup = styled(Combobox.InputGroup)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n padding: ${({ theme }) =>\n `${theme.space[200]} ${theme.space[300]} ${theme.space[200]} ${theme.space[200]}`};\n gap: ${({ theme }) => theme.space[200]};\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-within {\n ${focusRing}\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const Token = styled.span`\n display: inline-flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[200]};\n padding: ${({ theme }) => `${theme.space[200]} ${theme.space[300]}`};\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n background: ${({ theme }) => theme.colors.container.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n font-weight: ${({ theme }) => theme.fontWeights.normal};\n line-height: 1;\n white-space: nowrap;\n transition: all ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_inout};\n\n &:hover {\n box-shadow: ${({ theme }) => theme.shadows.low};\n border-color: ${({ theme }) => theme.colors.container.border.base};\n }\n`;\n\nexport const TokenRemove = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n padding: 0;\n line-height: 1;\n\n &:focus-visible {\n ${focusRing}\n }\n`;\n\n// Searchable select components\n\nexport const SearchableSelectTrigger = styled(Combobox.Trigger)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.space[300]};\n padding: ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[350]};\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n cursor: default;\n outline: none;\n user-select: none;\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-popup-open] [data-chevron] {\n transform: rotate(-180deg);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n\nexport const SearchableSelectTriggerIcon = styled(Combobox.Icon)`\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.colors.icon.base};\n flex-shrink: 0;\n`;\n\nexport const SearchableSelectPlaceholder = styled.span`\n color: ${({ theme }) => theme.colors.text.subtext};\n padding: ${({ theme }) => theme.space[200]} 0;\n`;\n\nexport const SearchableSelectPopup = ComboboxPopup;\n\nexport const SearchableSelectSearchContainer = styled.div`\n padding: ${({ theme }) => theme.space[300]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.container.border.base};\n flex-shrink: 0;\n`;\n\nexport const SearchableSelectInput = styled(Combobox.Input)`\n width: 100%;\n height: ${({ theme }) => theme.space[500]};\n padding: 0 ${({ theme }) => theme.space[300]};\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n background: ${({ theme }) => theme.colors.container.background.base};\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n outline: none;\n box-sizing: border-box;\n\n &:focus {\n ${focusRing}\n }\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.subtext};\n }\n`;\n\nexport const SearchableSelectList = styled(Combobox.List)`\n overflow-y: auto;\n padding: ${({ theme }) => theme.space[200]};\n flex: 1;\n min-height: 0;\n &:empty {\n padding: 0;\n }\n`;\n\nexport const SearchableSelectTokenTrigger = styled(Combobox.Trigger)<{\n $isInvalid?: boolean;\n}>`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n min-width: 160px;\n border-radius: ${({ theme }) => theme.radii[500]};\n border: 1px solid ${({ theme }) => theme.colors.form.border.base};\n background: ${({ theme }) => theme.colors.form.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n padding: ${({ theme }) => theme.space[200]} ${({ theme }) => theme.space[300]};\n gap: ${({ theme }) => theme.space[200]};\n cursor: default;\n text-align: left;\n outline: none;\n user-select: none;\n transition: border-color ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in},\n box-shadow ${({ theme }) => theme.duration.fast}\n ${({ theme }) => theme.easing.ease_in};\n\n &:focus-visible {\n ${focusRing}\n }\n\n &[data-popup-open] {\n border-color: ${({ theme }) => theme.colors.blue[600]};\n }\n\n &[data-popup-open] [data-chevron] {\n transform: rotate(-180deg);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n ${({ $isInvalid }) => $isInvalid && invalidStyles}\n`;\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport ComboboxItem from \"./ComboboxItem\";\nimport {\n ComboboxGroupHeaderItem,\n ComboboxGroupHeaderCheckbox,\n ComboboxSelectAllItem,\n} from \"./ComboboxStyles\";\nimport type { DataWithId } from \"./types\";\nimport {\n isPlaceholderSentinel,\n isCreatableSentinel,\n type CreatableSentinel,\n} from \"./sentinels\";\n\nexport const ITEM_HEIGHT = 32;\n\ninterface GroupHeaderSentinel {\n __groupHeader: true;\n groupName: string;\n}\n\ninterface SelectAllSentinel {\n __selectAll: true;\n}\n\nexport function isGroupHeaderSentinel(v: unknown): v is GroupHeaderSentinel {\n return typeof v === \"object\" && v !== null && \"__groupHeader\" in v;\n}\n\nexport function isSelectAllSentinel(v: unknown): v is SelectAllSentinel {\n return typeof v === \"object\" && v !== null && \"__selectAll\" in v;\n}\n\nexport type FlatSentinelRow<T> =\n | T\n | GroupHeaderSentinel\n | SelectAllSentinel\n | CreatableSentinel;\n\ninterface VirtualizedComboboxListProps<T extends DataWithId> {\n open: boolean;\n virtualizerRef: React.RefObject<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>;\n value: T | T[] | null;\n groups: Array<{ value: string; items: T[] }> | null;\n // `data` contains only real items (no sentinels). Sentinel rows (placeholder,\n // group headers, select-all) come exclusively from `filteredItems` via\n // Combobox.useFilteredItems. This means `data.length` is the correct count\n // of selectable items for select-all logic.\n data: T[];\n itemToString: (item: T) => string;\n inputType: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n renderItem?: (item: T) => React.ReactNode;\n renderGroupHeading?: (label: string) => React.ReactNode;\n isGroupHeaderDisabled?: (groupName: string) => boolean;\n renderCreatableItem?: (\n sentinel: CreatableSentinel,\n style: React.CSSProperties,\n index: number,\n measureRef: (el: Element | null) => void\n ) => React.ReactNode;\n}\n\nexport default function VirtualizedComboboxList<T extends DataWithId>({\n open,\n virtualizerRef,\n value,\n groups,\n data,\n itemToString,\n inputType,\n renderItem,\n renderGroupHeading,\n isGroupHeaderDisabled,\n renderCreatableItem,\n}: VirtualizedComboboxListProps<T>) {\n type Row = FlatSentinelRow<T>;\n\n const filteredItems = Combobox.useFilteredItems<Row>();\n const scrollElementRef = React.useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n enabled: open,\n count: filteredItems.length,\n getScrollElement: () => scrollElementRef.current,\n estimateSize: () => ITEM_HEIGHT,\n overscan: 20,\n paddingStart: 4,\n paddingEnd: 4,\n scrollPaddingStart: 4,\n scrollPaddingEnd: 4,\n });\n\n React.useImperativeHandle(virtualizerRef, () => virtualizer);\n\n const handleScrollRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n scrollElementRef.current = el;\n if (el) requestAnimationFrame(() => virtualizer.measure());\n },\n [virtualizer]\n );\n\n if (!filteredItems.length) return null;\n\n const selectedArray = Array.isArray(value)\n ? value\n : value != null\n ? [value]\n : [];\n\n const totalSize = virtualizer.getTotalSize();\n\n return (\n <div\n role=\"presentation\"\n ref={handleScrollRef}\n style={{\n flex: 1,\n minHeight: 0,\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }}\n >\n <div\n role=\"presentation\"\n style={{ position: \"relative\", width: \"100%\", height: totalSize }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = filteredItems[virtualItem.index];\n if (row == null) return null;\n\n const baseStyle: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualItem.start}px)`,\n boxSizing: \"border-box\",\n };\n\n if (isPlaceholderSentinel(row)) {\n return (\n <ComboboxItem\n key=\"placeholder\"\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={row as unknown as T}\n itemId=\"placeholder\"\n label={row.label}\n inputType={inputType}\n style={baseStyle}\n ref={virtualizer.measureElement}\n />\n );\n }\n\n if (isSelectAllSentinel(row)) {\n const selectedCount = selectedArray.length;\n const totalCount = data.length;\n const state =\n selectedCount === 0\n ? \"none\"\n : selectedCount === totalCount\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxSelectAllItem\n key={virtualItem.key}\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={row}\n style={baseStyle}\n ref={virtualizer.measureElement}\n >\n <ComboboxGroupHeaderCheckbox $state={state} id=\"__selectAll\" />\n Select all\n </ComboboxSelectAllItem>\n );\n }\n\n if (isGroupHeaderSentinel(row)) {\n const group = groups?.find((g) => g.value === row.groupName);\n const groupItems = group?.items ?? [];\n const selectedCount = groupItems.filter((item) =>\n selectedArray.some((s) => s.id === item.id)\n ).length;\n const state =\n selectedCount === 0\n ? \"none\"\n : selectedCount === groupItems.length\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxGroupHeaderItem\n key={virtualItem.key}\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={row}\n disabled={isGroupHeaderDisabled?.(row.groupName)}\n style={baseStyle}\n ref={virtualizer.measureElement}\n >\n <ComboboxGroupHeaderCheckbox\n $state={state}\n id={`__header-${row.groupName}`}\n />\n {renderGroupHeading\n ? renderGroupHeading(row.groupName)\n : row.groupName}\n </ComboboxGroupHeaderItem>\n );\n }\n\n if (isCreatableSentinel(row)) {\n if (renderCreatableItem) {\n return renderCreatableItem(\n row,\n baseStyle,\n virtualItem.index,\n virtualizer.measureElement\n );\n }\n return null;\n }\n\n const item = row as T;\n return (\n <ComboboxItem\n key={virtualItem.key}\n index={virtualItem.index}\n data-index={virtualItem.index}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : () => itemToString(item)\n }\n style={baseStyle}\n ref={virtualizer.measureElement}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","// ─── Shared sentinel types & predicates ────────────────────────────────────\n// Sentinels are non-data rows injected into virtualized lists for special UI\n// items (placeholder, group headers, select-all). They carry no `.id` field\n// and must never be counted toward real data totals.\n\nexport interface PlaceholderSentinel {\n __placeholder: true;\n label: string;\n}\n\nexport function makePlaceholderSentinel(label: string): PlaceholderSentinel {\n return { __placeholder: true, label };\n}\n\nexport function isPlaceholderSentinel(v: unknown): v is PlaceholderSentinel {\n return typeof v === \"object\" && v !== null && \"__placeholder\" in v;\n}\n\nexport interface CreatableSentinel {\n __creatable: true;\n label: string;\n}\n\nexport function makeCreatableSentinel(label: string): CreatableSentinel {\n return { __creatable: true, label };\n}\n\nexport function isCreatableSentinel(v: unknown): v is CreatableSentinel {\n return typeof v === \"object\" && v !== null && \"__creatable\" in v;\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport { useSuppressEscapeClear } from \"./Common/useSuppressEscapeClear\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n isCreatableSentinel,\n makeCreatableSentinel,\n type CreatableSentinel,\n} from \"./Common/sentinels\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxTokenInputGroup,\n ComboboxTokenInput,\n ComboboxToken,\n ComboboxActionButtons,\n ComboboxClear,\n ComboboxTrigger,\n ComboboxPositioner,\n ComboboxPopup,\n ComboboxList,\n ComboboxEmpty,\n ComboboxStatus,\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n Token,\n TokenRemove,\n ComboboxGroupHeaderItem,\n ComboboxGroupHeaderCheckbox,\n ComboboxSelectAllItem,\n} from \"./Common/ComboboxStyles\";\nimport { ClearIcon, StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\nimport Icon from \"@sproutsocial/seeds-react-icon\";\n\n// ─── Sentinels ────────────────────────────────────────────────────────────────\n\ninterface GroupHeaderSentinel {\n __groupHeader: true;\n groupName: string;\n}\n\nfunction makeGroupHeaderSentinel(groupName: string): GroupHeaderSentinel {\n return { __groupHeader: true, groupName };\n}\n\nfunction isGroupHeaderSentinel(v: unknown): v is GroupHeaderSentinel {\n return typeof v === \"object\" && v !== null && \"__groupHeader\" in v;\n}\n\ninterface SelectAllSentinel {\n __selectAll: true;\n}\n\nconst SELECT_ALL_SENTINEL: SelectAllSentinel = { __selectAll: true };\n\nfunction isSelectAllSentinel(v: unknown): v is SelectAllSentinel {\n return typeof v === \"object\" && v !== null && \"__selectAll\" in v;\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface MultiComboboxBaseProps {\n id?: string;\n placeholder?: string;\n emptyText?: string;\n isLoading?: boolean;\n loadingText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n inputValue?: string;\n onInputValueChange?: (value: string) => void;\n \"aria-label\"?: string;\n /** Id of a visible label. Preferred over `aria-label`. */\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface MultiComboboxDataProps<T extends DataWithId>\n extends MultiComboboxBaseProps {\n data: T[];\n itemToString: (item: T) => string;\n renderItem?: (item: T) => React.ReactNode;\n renderToken?: (item: T) => React.ReactNode;\n renderSelection?: (items: T[]) => React.ReactNode;\n inputType?: \"icon\" | \"checkbox\" | \"none\";\n selectedItemIds?: Array<T[\"id\"]>;\n defaultSelectedItemIds?: Array<T[\"id\"]>;\n onSelectedItemIdsChange?: (ids: Array<T[\"id\"]>) => void;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n isGroupHeaderDisabled?: (groupName: string) => boolean;\n selectHeadings?: boolean;\n selectAll?: boolean | string;\n isVirtualized?: boolean;\n removeSelectedItems?: boolean;\n maxTokens?: number;\n creatable?: boolean;\n onCreate?: (value: string) => T;\n children?: never;\n}\n\ninterface MultiComboboxChildrenProps extends MultiComboboxBaseProps {\n children: React.ReactNode;\n selectedItemIds?: Array<string | number>;\n defaultSelectedItemIds?: Array<string | number>;\n onSelectedItemIdsChange?: (ids: Array<string | number>) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n renderToken?: never;\n renderSelection?: never;\n inputType?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n isGroupHeaderDisabled?: never;\n selectHeadings?: never;\n selectAll?: never;\n removeSelectedItems?: never;\n creatable?: never;\n onCreate?: never;\n}\n\nexport type MultiComboboxProps<T extends DataWithId> =\n | MultiComboboxDataProps<T>\n | MultiComboboxChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n// ─── Virtualized list ─────────────────────────────────────────────────────────\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function MultiCombobox<T extends DataWithId>(\n props: MultiComboboxProps<T>\n) {\n const {\n id,\n placeholder = \"Search...\",\n emptyText = \"No results found.\",\n isLoading = false,\n loadingText = \"Loading...\",\n filter,\n inputValue,\n onInputValueChange,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const data = isChildrenMode\n ? ([] as T[])\n : (props as MultiComboboxDataProps<T>).data;\n const itemToString = isChildrenMode\n ? (_item: T) => \"\"\n : (props as MultiComboboxDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderItem;\n const renderToken = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderToken;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderSelection;\n const maxTokens = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).maxTokens;\n const removeSelectedItems = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).removeSelectedItems ?? false;\n const inputType = isChildrenMode\n ? \"checkbox\"\n : removeSelectedItems\n ? \"none\"\n : (props as MultiComboboxDataProps<T>).inputType ?? \"checkbox\";\n const groupBy = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).renderGroupHeading;\n const isGroupHeaderDisabled = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).isGroupHeaderDisabled;\n const selectHeadings = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).selectHeadings ?? false;\n const selectAllProp = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).selectAll ?? false;\n const selectAll = Boolean(selectAllProp);\n const selectAllLabel =\n typeof selectAllProp === \"string\" ? selectAllProp : \"Select all\";\n const isVirtualized = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).isVirtualized ?? false;\n const creatableProp = isChildrenMode\n ? false\n : (props as MultiComboboxDataProps<T>).creatable ?? false;\n const onCreateProp = isChildrenMode\n ? undefined\n : (props as MultiComboboxDataProps<T>).onCreate;\n const children = isChildrenMode\n ? (props as MultiComboboxChildrenProps).children\n : undefined;\n\n const selectedItemIds = props.selectedItemIds;\n const defaultSelectedItemIds = props.defaultSelectedItemIds;\n const onSelectedItemIdsChange = props.onSelectedItemIdsChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const [internalInputValue, setInternalInputValue] = React.useState(\"\");\n const skipNextInputChangeRef = React.useRef(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const onInputKeyDownCapture = useSuppressEscapeClear(open);\n\n const isControlled = selectedItemIds !== undefined;\n\n const idsToItems = React.useCallback(\n (ids: Array<T[\"id\"]>): T[] =>\n ids\n .map((id) => data.find((d) => d.id === id))\n .filter((d): d is T => d != null),\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T[]>(() =>\n defaultSelectedItemIds\n ? idsToItems(defaultSelectedItemIds as Array<T[\"id\"]>)\n : []\n );\n\n const value = isControlled\n ? idsToItems(selectedItemIds as Array<T[\"id\"]>)\n : internalValue;\n\n const visibleData = React.useMemo(\n () =>\n removeSelectedItems\n ? data.filter((item) => !value.some((v) => v.id === item.id))\n : data,\n [data, value, removeSelectedItems]\n );\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(visibleData, groupBy) : null),\n [visibleData, groupBy]\n );\n\n const currentInputValue = inputValue ?? internalInputValue;\n\n const creatableSentinel = React.useMemo<CreatableSentinel | null>(() => {\n if (!creatableProp) return null;\n const trimmed = currentInputValue.trim();\n if (!trimmed) return null;\n const lowered = trimmed.toLocaleLowerCase();\n const exactExists = data.some(\n (d) => itemToString(d).trim().toLocaleLowerCase() === lowered\n );\n if (exactExists) return null;\n return makeCreatableSentinel(trimmed);\n }, [creatableProp, currentInputValue, data, itemToString]);\n\n // ─── Sentinel flat list ───────────────────────────────────────────────────\n // Used when selectHeadings or selectAll. selectAll implies selectHeadings —\n // group headers are always selectable when the list is flattened.\n\n type FlatRow =\n | T\n | GroupHeaderSentinel\n | SelectAllSentinel\n | CreatableSentinel;\n\n const flatItems = React.useMemo<FlatRow[] | null>(() => {\n if (!selectHeadings && !selectAll) return null;\n if (!groups && !selectAll) return null;\n const rows: FlatRow[] = [];\n if (selectAll) rows.push(SELECT_ALL_SENTINEL);\n if (groups) {\n for (const group of groups) {\n rows.push(makeGroupHeaderSentinel(group.value));\n rows.push(...group.items);\n }\n } else {\n rows.push(...visibleData);\n }\n return rows;\n }, [groups, visibleData, selectHeadings, selectAll]);\n\n function setSelectedItems(items: T[]) {\n if (!isControlled) setInternalValue(items);\n if (onSelectedItemIdsChange)\n onSelectedItemIdsChange(items.map((item) => item.id));\n }\n\n function handleValueChange(next: FlatRow[]) {\n const creatableClicked = next.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = next.filter(\n (v): v is T =>\n !isGroupHeaderSentinel(v) &&\n !isSelectAllSentinel(v) &&\n !isCreatableSentinel(v)\n );\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n onInputValueChange?.(\"\");\n return;\n }\n\n const selectAllClicked = next.filter(isSelectAllSentinel);\n const groupSentinels = next.filter(isGroupHeaderSentinel);\n const realItems = next.filter(\n (v): v is T => !isGroupHeaderSentinel(v) && !isSelectAllSentinel(v)\n );\n\n if (selectAllClicked.length > 0) {\n const allSelected = data.every((d) =>\n realItems.some((s) => s.id === d.id)\n );\n setSelectedItems(allSelected ? [] : [...data]);\n return;\n }\n\n if (groupSentinels.length === 0) {\n setSelectedItems(realItems);\n return;\n }\n\n let updated = [...realItems];\n for (const sentinel of groupSentinels) {\n if (isGroupHeaderDisabled?.(sentinel.groupName)) continue;\n const group = groups?.find((g) => g.value === sentinel.groupName);\n if (!group) continue;\n const allSelected = group.items.every((item) =>\n updated.some((s) => s.id === item.id)\n );\n if (allSelected) {\n updated = updated.filter(\n (s) => !group.items.some((item) => item.id === s.id)\n );\n } else {\n const missing = group.items.filter(\n (item) => !updated.some((s) => s.id === item.id)\n );\n updated = [...updated, ...missing];\n }\n }\n setSelectedItems(updated);\n }\n\n function handleSimpleValueChange(newItems: FlatRow[]) {\n const creatableClicked = newItems.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = newItems.filter((v): v is T => !isCreatableSentinel(v));\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n onInputValueChange?.(\"\");\n return;\n }\n setSelectedItems(newItems as T[]);\n }\n\n function removeItem(item: T, e: React.MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n setSelectedItems(value.filter((v) => v.id !== item.id));\n inputRef.current?.focus();\n }\n\n // ─── Render sentinel item ─────────────────────────────────────────────────\n\n function renderSentinelRow(row: FlatRow) {\n if (isSelectAllSentinel(row)) {\n const totalCount = data.length;\n const selectedCount = value.length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === totalCount\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxSelectAllItem key=\"__selectAll\" value={row}>\n <ComboboxGroupHeaderCheckbox $state={state} id=\"__selectAll\" />\n {selectAllLabel}\n </ComboboxSelectAllItem>\n );\n }\n\n if (isGroupHeaderSentinel(row)) {\n const group = groups?.find((g) => g.value === row.groupName);\n const groupItemsList = group?.items ?? [];\n const selectedCount = groupItemsList.filter((item) =>\n value.some((s) => s.id === item.id)\n ).length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === groupItemsList.length\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxGroupHeaderItem\n key={`__header-${row.groupName}`}\n value={row}\n disabled={isGroupHeaderDisabled?.(row.groupName)}\n >\n <ComboboxGroupHeaderCheckbox\n $state={state}\n id={`__header-${row.groupName}`}\n />\n {renderGroupHeading\n ? renderGroupHeading(row.groupName)\n : row.groupName}\n </ComboboxGroupHeaderItem>\n );\n }\n\n if (isCreatableSentinel(row)) {\n return renderCreatableItem(row);\n }\n\n const item = row as T;\n return (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : () => itemToString(item)\n }\n />\n );\n }\n\n function renderCreatableItem(\n sentinel: CreatableSentinel,\n style?: React.CSSProperties,\n index?: number,\n measureRef?: (el: Element | null) => void\n ) {\n return (\n <ComboboxItem\n key=\"__creatable\"\n value={sentinel}\n itemId=\"__creatable\"\n label={`Create \"${sentinel.label}\"`}\n inputType=\"none\"\n renderItem={() => (\n <>\n <Icon name=\"plus-outline\" size=\"mini\" />\n {`Create \"${sentinel.label}\"`}\n </>\n )}\n style={style}\n index={index}\n data-index={index}\n ref={measureRef}\n />\n );\n }\n\n // ─── Items passed to Combobox.Root ────────────────────────────────────────\n // When selectHeadings: flatItems (flat array of group header sentinels + items).\n // When selectAll only: prepend SELECT_ALL_SENTINEL to data so Base UI tracks\n // it, while Combobox.List still uses the normal grouped render.\n // The sentinel is never in flatItems — it is always rendered manually above\n // Combobox.List, so we must not prepend it when flatItems is used.\n\n const baseItems =\n flatItems ?? groups ?? (isChildrenMode ? undefined : visibleData);\n const rootItems =\n creatableSentinel && Array.isArray(baseItems)\n ? ([...baseItems, creatableSentinel] as FlatRow[])\n : baseItems;\n\n const hasSentinels = selectAll || selectHeadings;\n\n const rootValue = hasSentinels\n ? ([...value] as FlatRow[])\n : (value as unknown as T[]);\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n multiple\n id={id}\n virtualized={isVirtualized}\n open={open}\n disabled={props.disabled}\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && eventDetails.reason === \"item-press\") {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n filter={\n creatableProp\n ? (item: unknown, query: string) => {\n if (isCreatableSentinel(item)) return true;\n if (filter) return filter(item, query);\n // Default Base UI filter: match against itemToStringLabel\n if (isGroupHeaderSentinel(item) || isSelectAllSentinel(item))\n return true;\n const label = itemToString(item as T);\n return label.toLowerCase().includes(query.toLowerCase());\n }\n : filter\n }\n inputValue={\n creatableProp ? currentInputValue : inputValue ?? internalInputValue\n }\n onInputValueChange={(v, eventDetails) => {\n // Preserve search query when an item is selected. Base UI fires\n // 'input-clear' on item-press; ignore it while the popup stays open.\n if (eventDetails.reason === \"input-clear\" && open) return;\n\n if (creatableProp) {\n if (skipNextInputChangeRef.current) {\n skipNextInputChangeRef.current = false;\n return;\n }\n setInternalInputValue(v);\n onInputValueChange?.(v);\n } else {\n if (inputValue === undefined) {\n setInternalInputValue(v);\n }\n onInputValueChange?.(v);\n }\n }}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n // Only handle keyboard wrap-around: when navigation loops from\n // the last item to the first (or vice versa), the wrapped item\n // is outside the virtualized window and standard scroll-into-\n // view can't find it.\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n value={rootValue}\n onValueChange={\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (hasSentinels ? handleValueChange : handleSimpleValueChange) as any\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n itemToStringLabel={(item: any) => {\n if (\n !item ||\n isGroupHeaderSentinel(item) ||\n isSelectAllSentinel(item) ||\n isCreatableSentinel(item)\n )\n return \"\";\n return itemToString(item as T);\n }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isItemEqualToValue={(a: any, b: any) => {\n if (isCreatableSentinel(a) && isCreatableSentinel(b))\n return a.label === b.label;\n if (isGroupHeaderSentinel(a) && isGroupHeaderSentinel(b))\n return a.groupName === b.groupName;\n if (isSelectAllSentinel(a) && isSelectAllSentinel(b)) return true;\n if (\n !isGroupHeaderSentinel(a) &&\n !isSelectAllSentinel(a) &&\n !isCreatableSentinel(a) &&\n !isGroupHeaderSentinel(b) &&\n !isSelectAllSentinel(b) &&\n !isCreatableSentinel(b)\n )\n return (a as T).id === (b as T).id;\n return false;\n }}\n items={rootItems}\n >\n <ComboboxTokenInputGroup\n $isInvalid={isInvalid}\n onKeyDownCapture={onInputKeyDownCapture}\n >\n <ComboboxToken>\n {renderSelection\n ? renderSelection(value)\n : (() => {\n const visibleTokens =\n maxTokens != null ? value.slice(0, maxTokens) : value;\n const overflow =\n maxTokens != null ? value.length - maxTokens : 0;\n return (\n <>\n {visibleTokens.map((item) => (\n <Token key={item.id}>\n {renderToken ? renderToken(item) : itemToString(item)}\n <TokenRemove\n aria-label={`Remove ${itemToString(item)}`}\n onPointerDown={(e) => e.preventDefault()}\n onClick={(e) => removeItem(item, e)}\n >\n <Icon name=\"x-outline\" size=\"mini\" />\n </TokenRemove>\n </Token>\n ))}\n {overflow > 0 && (\n <Token key=\"__overflow\">+{overflow}</Token>\n )}\n </>\n );\n })()}\n <ComboboxTokenInput\n ref={inputRef}\n id={id}\n placeholder={value.length > 0 ? \"\" : placeholder}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n />\n <ComboboxActionButtons>\n <ComboboxClear aria-label=\"Clear all\">\n <ClearIcon />\n </ComboboxClear>\n <ComboboxTrigger aria-label=\"Open popup\">\n <StyledChevron $isOpen={open}>\n <ChevronIcon />\n </StyledChevron>\n </ComboboxTrigger>\n </ComboboxActionButtons>\n </ComboboxToken>\n </ComboboxTokenInputGroup>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <ComboboxPopup\n aria-busy={isLoading || undefined}\n style={\n isVirtualized\n ? { display: \"flex\", flexDirection: \"column\" }\n : undefined\n }\n >\n <ComboboxStatus>{isLoading ? loadingText : null}</ComboboxStatus>\n <ComboboxEmpty>{isLoading ? null : emptyText}</ComboboxEmpty>\n <ComboboxList\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={groups}\n data={visibleData}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n renderGroupHeading={renderGroupHeading}\n isGroupHeaderDisabled={isGroupHeaderDisabled}\n renderCreatableItem={\n creatableProp\n ? (sentinel, style, index, measureRef) =>\n renderCreatableItem(\n sentinel,\n style,\n index,\n measureRef\n )\n : undefined\n }\n />\n ) : children ? (\n children\n ) : flatItems ? (\n (row: FlatRow) => renderSentinelRow(row)\n ) : groups ? (\n (\n group: { value: string; items: T[] } | CreatableSentinel,\n index: number\n ) => {\n if (isCreatableSentinel(group)) {\n return renderCreatableItem(group);\n }\n const g = group as { value: string; items: T[] };\n return (\n <React.Fragment key={g.value}>\n <ComboboxGroup items={g.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(g.value)\n : g.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n );\n }\n ) : (\n (item: T | CreatableSentinel) => {\n if (isCreatableSentinel(item)) {\n return renderCreatableItem(item);\n }\n const dataItem = item as T;\n return (\n <ComboboxItem\n key={dataItem.id}\n value={dataItem}\n itemId={String(dataItem.id)}\n label={itemToString(dataItem)}\n disabled={dataItem.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(dataItem)\n : () => itemToString(dataItem)\n }\n />\n );\n }\n )}\n </ComboboxList>\n </ComboboxPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport type { PlaceholderSentinel } from \"./Common/sentinels\";\nimport {\n makePlaceholderSentinel,\n isPlaceholderSentinel,\n} from \"./Common/sentinels\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n ComboboxPositioner,\n ComboboxEmpty,\n ComboboxStatus,\n SearchableSelectTrigger,\n SearchableSelectTriggerIcon,\n SearchableSelectPlaceholder,\n SearchableSelectPopup,\n SearchableSelectSearchContainer,\n SearchableSelectInput,\n SearchableSelectList,\n} from \"./Common/ComboboxStyles\";\nimport { StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface SingleSearchableSelectBaseProps {\n id?: string;\n placeholder?: string;\n includePlaceholderItem?: boolean;\n searchPlaceholder?: string;\n emptyText?: string;\n isLoading?: boolean;\n loadingText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n \"aria-label\"?: string;\n /** Id of a visible label. Preferred over `aria-label`. */\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface SingleSearchableSelectDataBaseProps<T extends DataWithId>\n extends SingleSearchableSelectBaseProps {\n data: T[];\n itemToString: (item: T | null) => string;\n renderItem?: (item: T) => React.ReactNode;\n renderSelection?: (item: T) => React.ReactNode;\n inputType?: \"icon\" | \"radio\" | \"checkbox\" | \"none\";\n selectedItemId?: T[\"id\"] | null;\n defaultSelectedItemId?: T[\"id\"] | null;\n onSelectedItemIdChange?: (id: T[\"id\"] | null) => void;\n children?: never;\n}\n\ninterface SingleSearchableSelectDataProps<T extends DataWithId>\n extends SingleSearchableSelectDataBaseProps<T> {\n isVirtualized?: false;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n}\n\ninterface SingleSearchableSelectVirtualizedProps<T extends DataWithId>\n extends SingleSearchableSelectDataBaseProps<T> {\n isVirtualized: true;\n groupBy?: never;\n renderGroupHeading?: never;\n}\n\ninterface SingleSearchableSelectChildrenProps\n extends SingleSearchableSelectBaseProps {\n children: React.ReactNode;\n selectedItemId?: string | number | null;\n defaultSelectedItemId?: string | number | null;\n onSelectedItemIdChange?: (id: string | number | null) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n renderSelection?: never;\n inputType?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n isVirtualized?: never;\n}\n\nexport type SingleSearchableSelectProps<T extends DataWithId> =\n | SingleSearchableSelectDataProps<T>\n | SingleSearchableSelectVirtualizedProps<T>\n | SingleSearchableSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SingleSearchableSelect<T extends DataWithId>(\n props: SingleSearchableSelectProps<T>\n) {\n const {\n id,\n placeholder = \"Select...\",\n includePlaceholderItem,\n searchPlaceholder = \"Search...\",\n emptyText = \"No results found.\",\n isLoading = false,\n loadingText = \"Loading...\",\n filter,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n type DataProps =\n | SingleSearchableSelectDataProps<T>\n | SingleSearchableSelectVirtualizedProps<T>;\n\n const data = isChildrenMode ? ([] as T[]) : (props as DataProps).data;\n const itemToString = isChildrenMode\n ? (_item: T | null) => \"\"\n : (props as DataProps).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as DataProps).renderItem;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as DataProps).renderSelection;\n const inputType = isChildrenMode\n ? \"icon\"\n : (props as DataProps).inputType ?? \"icon\";\n const isVirtualized = isChildrenMode\n ? false\n : (props as DataProps).isVirtualized ?? false;\n const groupBy = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleSearchableSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : isVirtualized\n ? undefined\n : (props as SingleSearchableSelectDataProps<T>).renderGroupHeading;\n const children = isChildrenMode\n ? (props as SingleSearchableSelectChildrenProps).children\n : undefined;\n\n const selectedItemId = props.selectedItemId;\n const defaultSelectedItemId = props.defaultSelectedItemId;\n const onSelectedItemIdChange = props.onSelectedItemIdChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n\n const isControlled = selectedItemId !== undefined;\n\n const idToItem = React.useCallback(\n (id: T[\"id\"] | null | undefined): T | null => {\n if (id == null) return null;\n return data.find((d) => String(d.id) === String(id)) ?? null;\n },\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T | null>(() =>\n idToItem(defaultSelectedItemId as T[\"id\"] | null)\n );\n\n const value = isControlled\n ? idToItem(selectedItemId as T[\"id\"] | null)\n : internalValue;\n\n type ItemOrSentinel = T | PlaceholderSentinel;\n\n function handleValueChange(newItem: ItemOrSentinel | null) {\n const realItem =\n newItem == null || isPlaceholderSentinel(newItem) ? null : newItem;\n if (!isControlled) setInternalValue(realItem);\n if (onSelectedItemIdChange) {\n onSelectedItemIdChange(realItem ? realItem.id : null);\n }\n }\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(data, groupBy) : null),\n [data, groupBy]\n );\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n id={id}\n value={value}\n disabled={props.disabled}\n onValueChange={handleValueChange as (item: T | null) => void}\n itemToStringLabel={(item: T | null) =>\n isPlaceholderSentinel(item) ? item.label : itemToString(item)\n }\n isItemEqualToValue={(a, b) => {\n if (isPlaceholderSentinel(a) && isPlaceholderSentinel(b)) return true;\n if (isPlaceholderSentinel(a)) return b == null;\n if (isPlaceholderSentinel(b)) return a == null;\n return a != null && b != null && a.id === b.id;\n }}\n items={\n isVirtualized\n ? includePlaceholderItem\n ? [makePlaceholderSentinel(placeholder) as unknown as T, ...data]\n : data\n : groups ?? (isChildrenMode ? undefined : data)\n }\n virtualized={isVirtualized}\n filter={filter}\n open={open}\n onOpenChange={setOpen}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n >\n <SearchableSelectTrigger\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n <SearchableSelectPlaceholder>\n <Combobox.Value placeholder={placeholder}>\n {value\n ? renderSelection\n ? renderSelection(value)\n : itemToString(value)\n : placeholder}\n </Combobox.Value>\n </SearchableSelectPlaceholder>\n <SearchableSelectTriggerIcon>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SearchableSelectTriggerIcon>\n </SearchableSelectTrigger>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <SearchableSelectPopup\n aria-busy={isLoading || undefined}\n style={{ display: \"flex\", flexDirection: \"column\" }}\n >\n <SearchableSelectSearchContainer>\n <SearchableSelectInput\n placeholder={searchPlaceholder}\n autoFocus\n />\n </SearchableSelectSearchContainer>\n <ComboboxStatus>{isLoading ? loadingText : null}</ComboboxStatus>\n <ComboboxEmpty>{isLoading ? null : emptyText}</ComboboxEmpty>\n <SearchableSelectList\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={null}\n data={data}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n />\n ) : children ? (\n children\n ) : groups ? (\n (group: { value: string; items: T[] }, index: number) => (\n <React.Fragment key={group.value}>\n <ComboboxGroup items={group.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(group.value)\n : group.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n )\n ) : (\n <>\n {includePlaceholderItem && (\n <ComboboxItem\n key=\"placeholder\"\n value={\n makePlaceholderSentinel(placeholder) as unknown as T\n }\n itemId=\"placeholder\"\n label={placeholder}\n inputType={inputType}\n />\n )}\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : undefined\n }\n />\n )}\n </Combobox.Collection>\n </>\n )}\n </SearchableSelectList>\n </SearchableSelectPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Combobox } from \"@base-ui/react/combobox\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport VirtualizedComboboxList from \"./Common/VirtualizedComboboxList\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport ComboboxItem from \"./Common/ComboboxItem\";\nimport type { DataWithId } from \"./Common/types\";\nimport { groupItems } from \"./Common/groupItems\";\nimport {\n isCreatableSentinel,\n makeCreatableSentinel,\n type CreatableSentinel,\n} from \"./Common/sentinels\";\nimport { Field } from \"./Common/SelectStyles\";\nimport {\n ComboboxGroup,\n ComboboxGroupLabel,\n ComboboxSeparator,\n ComboboxPositioner,\n ComboboxEmpty,\n ComboboxStatus,\n ComboboxGroupHeaderItem,\n ComboboxGroupHeaderCheckbox,\n ComboboxSelectAllItem,\n SearchableSelectTokenTrigger,\n SearchableSelectPlaceholder,\n SearchableSelectTriggerIcon,\n SearchableSelectPopup,\n SearchableSelectSearchContainer,\n SearchableSelectInput,\n SearchableSelectList,\n} from \"./Common/ComboboxStyles\";\nimport { ClearIcon, StyledChevron, ChevronIcon } from \"./Common/SelectIcons\";\nimport Icon from \"@sproutsocial/seeds-react-icon\";\nimport styled from \"styled-components\";\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst SelectionText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\n// ─── Sentinels ────────────────────────────────────────────────────────────────\n\ninterface GroupHeaderSentinel {\n __groupHeader: true;\n groupName: string;\n}\n\nfunction makeGroupHeaderSentinel(groupName: string): GroupHeaderSentinel {\n return { __groupHeader: true, groupName };\n}\n\nfunction isGroupHeaderSentinel(v: unknown): v is GroupHeaderSentinel {\n return typeof v === \"object\" && v !== null && \"__groupHeader\" in v;\n}\n\ninterface SelectAllSentinel {\n __selectAll: true;\n}\n\nconst SELECT_ALL_SENTINEL: SelectAllSentinel = { __selectAll: true };\n\nfunction isSelectAllSentinel(v: unknown): v is SelectAllSentinel {\n return typeof v === \"object\" && v !== null && \"__selectAll\" in v;\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\ninterface MultiSearchableSelectBaseProps {\n id?: string;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n isLoading?: boolean;\n loadingText?: string;\n disabled?: boolean;\n filter?: ((item: unknown, query: string) => boolean) | null;\n \"aria-label\"?: string;\n /** Id of a visible label. Preferred over `aria-label`. */\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n isInvalid?: boolean;\n required?: boolean;\n fullWidth?: boolean;\n}\n\ninterface MultiSearchableSelectDataProps<T extends DataWithId>\n extends MultiSearchableSelectBaseProps {\n data: T[];\n itemToString: (item: T) => string;\n renderItem?: (item: T) => React.ReactNode;\n customRenderSelections?: (item: T) => string;\n renderSelection?: (items: T[]) => React.ReactNode;\n inputType?: \"icon\" | \"checkbox\" | \"none\";\n maxSelections?: number;\n selectedItemIds?: Array<T[\"id\"]>;\n defaultSelectedItemIds?: Array<T[\"id\"]>;\n onSelectedItemIdsChange?: (ids: Array<T[\"id\"]>) => void;\n groupBy?: (item: T) => string;\n renderGroupHeading?: (label: string) => React.ReactNode;\n selectHeadings?: boolean;\n selectAll?: boolean;\n isVirtualized?: boolean;\n removeSelectedItems?: boolean;\n creatable?: boolean;\n onCreate?: (value: string) => T;\n children?: never;\n}\n\ninterface MultiSearchableSelectChildrenProps\n extends MultiSearchableSelectBaseProps {\n children: React.ReactNode;\n selectedItemIds?: Array<string | number>;\n defaultSelectedItemIds?: Array<string | number>;\n onSelectedItemIdsChange?: (ids: Array<string | number>) => void;\n data?: never;\n itemToString?: never;\n renderItem?: never;\n customRenderSelections?: never;\n renderSelection?: never;\n inputType?: never;\n maxSelections?: never;\n groupBy?: never;\n renderGroupHeading?: never;\n selectHeadings?: never;\n selectAll?: never;\n isVirtualized?: never;\n removeSelectedItems?: never;\n creatable?: never;\n onCreate?: never;\n}\n\nexport type MultiSearchableSelectProps<T extends DataWithId> =\n | MultiSearchableSelectDataProps<T>\n | MultiSearchableSelectChildrenProps;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function MultiSearchableSelect<T extends DataWithId>(\n props: MultiSearchableSelectProps<T>\n) {\n const {\n id,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No results found.\",\n isLoading = false,\n loadingText = \"Loading...\",\n filter,\n fullWidth = true,\n } = props;\n const ariaDescribedBy = props[\"aria-describedby\"];\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const isInvalid = props.isInvalid;\n\n const isChildrenMode = \"children\" in props && props.children != null;\n\n const data = isChildrenMode\n ? ([] as T[])\n : (props as MultiSearchableSelectDataProps<T>).data;\n const itemToString = isChildrenMode\n ? (_item: T) => \"\"\n : (props as MultiSearchableSelectDataProps<T>).itemToString;\n const renderItem = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).renderItem;\n const customRenderSelections = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).customRenderSelections;\n const maxSelections = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).maxSelections;\n const renderSelection = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).renderSelection;\n const removeSelectedItems = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).removeSelectedItems ?? false;\n const inputType = isChildrenMode\n ? \"checkbox\"\n : removeSelectedItems\n ? \"none\"\n : (props as MultiSearchableSelectDataProps<T>).inputType ?? \"checkbox\";\n const groupBy = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).groupBy;\n const renderGroupHeading = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).renderGroupHeading;\n const selectHeadings = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).selectHeadings ?? false;\n const selectAll = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).selectAll ?? false;\n const isVirtualized = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).isVirtualized ?? false;\n const creatableProp = isChildrenMode\n ? false\n : (props as MultiSearchableSelectDataProps<T>).creatable ?? false;\n const onCreateProp = isChildrenMode\n ? undefined\n : (props as MultiSearchableSelectDataProps<T>).onCreate;\n const children = isChildrenMode\n ? (props as MultiSearchableSelectChildrenProps).children\n : undefined;\n\n const selectedItemIds = props.selectedItemIds;\n const defaultSelectedItemIds = props.defaultSelectedItemIds;\n const onSelectedItemIdsChange = props.onSelectedItemIdsChange;\n\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n const [open, setOpen] = React.useState(false);\n const [internalInputValue, setInternalInputValue] = React.useState(\"\");\n const skipNextInputChangeRef = React.useRef(false);\n const virtualizerRef = React.useRef<ReturnType<\n typeof useVirtualizer<HTMLDivElement, Element>\n > | null>(null);\n\n const isControlled = selectedItemIds !== undefined;\n\n const idsToItems = React.useCallback(\n (ids: Array<T[\"id\"]>): T[] =>\n ids\n .map((id) => data.find((d) => d.id === id))\n .filter((d): d is T => d != null),\n [data]\n );\n\n const [internalValue, setInternalValue] = React.useState<T[]>(() =>\n defaultSelectedItemIds\n ? idsToItems(defaultSelectedItemIds as Array<T[\"id\"]>)\n : []\n );\n\n const value = isControlled\n ? idsToItems(selectedItemIds as Array<T[\"id\"]>)\n : internalValue;\n\n const visibleData = React.useMemo(\n () =>\n removeSelectedItems\n ? data.filter((item) => !value.some((v) => v.id === item.id))\n : data,\n [data, value, removeSelectedItems]\n );\n\n const groups = React.useMemo(\n () => (groupBy ? groupItems(visibleData, groupBy) : null),\n [visibleData, groupBy]\n );\n\n const currentInputValue = internalInputValue;\n\n const creatableSentinel = React.useMemo<CreatableSentinel | null>(() => {\n if (!creatableProp) return null;\n const trimmed = currentInputValue.trim();\n if (!trimmed) return null;\n const lowered = trimmed.toLocaleLowerCase();\n const exactExists = data.some(\n (d) => itemToString(d).trim().toLocaleLowerCase() === lowered\n );\n if (exactExists) return null;\n return makeCreatableSentinel(trimmed);\n }, [creatableProp, currentInputValue, data, itemToString]);\n\n // ─── Sentinel flat list ───────────────────────────────────────────────────\n\n type FlatRow =\n | T\n | GroupHeaderSentinel\n | SelectAllSentinel\n | CreatableSentinel;\n\n const flatItems = React.useMemo<FlatRow[] | null>(() => {\n if (!groups || (!selectHeadings && !selectAll)) return null;\n const rows: FlatRow[] = [];\n if (selectAll) rows.push(SELECT_ALL_SENTINEL);\n for (const group of groups) {\n rows.push(makeGroupHeaderSentinel(group.value));\n rows.push(...group.items);\n }\n return rows;\n }, [groups, selectHeadings, selectAll]);\n\n function setSelectedItems(items: T[]) {\n if (!isControlled) setInternalValue(items);\n if (onSelectedItemIdsChange)\n onSelectedItemIdsChange(items.map((item) => item.id));\n }\n\n function handleValueChange(next: FlatRow[]) {\n const creatableClicked = next.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = next.filter(\n (v): v is T =>\n !isGroupHeaderSentinel(v) &&\n !isSelectAllSentinel(v) &&\n !isCreatableSentinel(v)\n );\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n return;\n }\n\n const selectAllClicked = next.filter(isSelectAllSentinel);\n const groupSentinels = next.filter(isGroupHeaderSentinel);\n const realItems = next.filter(\n (v): v is T =>\n !isGroupHeaderSentinel(v) &&\n !isSelectAllSentinel(v) &&\n !isCreatableSentinel(v)\n );\n\n if (selectAllClicked.length > 0) {\n const allSelected = data.every((d) =>\n realItems.some((s) => s.id === d.id)\n );\n setSelectedItems(allSelected ? [] : [...data]);\n return;\n }\n\n if (groupSentinels.length === 0) {\n setSelectedItems(realItems);\n return;\n }\n\n let updated = [...realItems];\n for (const sentinel of groupSentinels) {\n const group = groups?.find((g) => g.value === sentinel.groupName);\n if (!group) continue;\n const allSelected = group.items.every((item) =>\n updated.some((s) => s.id === item.id)\n );\n if (allSelected) {\n updated = updated.filter(\n (s) => !group.items.some((item) => item.id === s.id)\n );\n } else {\n const missing = group.items.filter(\n (item) => !updated.some((s) => s.id === item.id)\n );\n updated = [...updated, ...missing];\n }\n }\n setSelectedItems(updated);\n }\n\n function handleSimpleValueChange(newItems: FlatRow[]) {\n const creatableClicked = newItems.find(isCreatableSentinel);\n if (creatableClicked) {\n const newItem = onCreateProp?.(creatableClicked.label);\n const realItems = newItems.filter((v): v is T => !isCreatableSentinel(v));\n setSelectedItems(newItem ? [...realItems, newItem] : realItems);\n skipNextInputChangeRef.current = true;\n setInternalInputValue(\"\");\n return;\n }\n setSelectedItems(newItems as T[]);\n }\n\n // ─── Render sentinel row ──────────────────────────────────────────────────\n\n function renderSentinelRow(row: FlatRow) {\n if (isSelectAllSentinel(row)) {\n const totalCount = data.length;\n const selectedCount = value.length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === totalCount\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxSelectAllItem key=\"__selectAll\" value={row}>\n <ComboboxGroupHeaderCheckbox $state={state} id=\"__selectAll\" />\n Select all\n </ComboboxSelectAllItem>\n );\n }\n\n if (isGroupHeaderSentinel(row)) {\n const group = groups?.find((g) => g.value === row.groupName);\n const groupItemsList = group?.items ?? [];\n const selectedCount = groupItemsList.filter((item) =>\n value.some((s) => s.id === item.id)\n ).length;\n const state: \"none\" | \"partial\" | \"all\" =\n selectedCount === 0\n ? \"none\"\n : selectedCount === groupItemsList.length\n ? \"all\"\n : \"partial\";\n return (\n <ComboboxGroupHeaderItem key={`__header-${row.groupName}`} value={row}>\n <ComboboxGroupHeaderCheckbox\n $state={state}\n id={`__header-${row.groupName}`}\n />\n {renderGroupHeading\n ? renderGroupHeading(row.groupName)\n : row.groupName}\n </ComboboxGroupHeaderItem>\n );\n }\n\n if (isCreatableSentinel(row)) {\n return renderCreatableItem(row);\n }\n\n const item = row as T;\n return (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem ? () => renderItem(item) : () => itemToString(item)\n }\n />\n );\n }\n\n function renderCreatableItem(\n sentinel: CreatableSentinel,\n style?: React.CSSProperties,\n index?: number,\n measureRef?: (el: Element | null) => void\n ) {\n return (\n <ComboboxItem\n key=\"__creatable\"\n value={sentinel}\n itemId=\"__creatable\"\n label={`Create \"${sentinel.label}\"`}\n inputType=\"none\"\n renderItem={() => (\n <>\n <Icon name=\"plus-outline\" size=\"mini\" />\n {`Create \"${sentinel.label}\"`}\n </>\n )}\n style={style}\n index={index}\n data-index={index}\n ref={measureRef}\n />\n );\n }\n\n const baseItems =\n flatItems ?? groups ?? (isChildrenMode ? undefined : visibleData);\n const rootItems =\n creatableSentinel && Array.isArray(baseItems)\n ? ([...baseItems, creatableSentinel] as FlatRow[])\n : baseItems;\n const hasSentinels = selectAll || selectHeadings;\n const rootValue = hasSentinels\n ? ([...value] as FlatRow[])\n : (value as unknown as T[]);\n\n return (\n <Field $fullWidth={fullWidth}>\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <Combobox.Root\n multiple\n id={id}\n virtualized={isVirtualized}\n filter={\n creatableProp\n ? (item: unknown, query: string) => {\n if (isCreatableSentinel(item)) return true;\n if (filter) return filter(item, query);\n if (isGroupHeaderSentinel(item) || isSelectAllSentinel(item))\n return true;\n const label = itemToString(item as T);\n return label.toLowerCase().includes(query.toLowerCase());\n }\n : filter\n }\n inputValue={internalInputValue}\n onInputValueChange={(v, eventDetails) => {\n // Preserve search query when an item is selected. Base UI fires\n // 'input-clear' on item-press; ignore it while the popup stays open.\n if (eventDetails.reason === \"input-clear\" && open) return;\n if (skipNextInputChangeRef.current) {\n skipNextInputChangeRef.current = false;\n return;\n }\n setInternalInputValue(v);\n }}\n open={open}\n disabled={props.disabled}\n onOpenChange={setOpen}\n onItemHighlighted={\n isVirtualized\n ? (item, { reason, index }) => {\n const virt = virtualizerRef.current;\n if (!item || !virt) return;\n const isStart = index === 0;\n const isEnd = index === virt.options.count - 1;\n if (reason === \"keyboard\" && (isStart || isEnd)) {\n queueMicrotask(() => {\n virt.scrollToIndex(index, {\n align: isStart ? \"start\" : \"end\",\n });\n });\n }\n }\n : undefined\n }\n value={rootValue}\n onValueChange={\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (hasSentinels ? handleValueChange : handleSimpleValueChange) as any\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n itemToStringLabel={(item: any) => {\n if (\n !item ||\n isGroupHeaderSentinel(item) ||\n isSelectAllSentinel(item) ||\n isCreatableSentinel(item)\n )\n return \"\";\n return itemToString(item as T);\n }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isItemEqualToValue={(a: any, b: any) => {\n if (isCreatableSentinel(a) && isCreatableSentinel(b))\n return a.label === b.label;\n if (isGroupHeaderSentinel(a) && isGroupHeaderSentinel(b))\n return a.groupName === b.groupName;\n if (isSelectAllSentinel(a) && isSelectAllSentinel(b)) return true;\n if (\n !isGroupHeaderSentinel(a) &&\n !isSelectAllSentinel(a) &&\n !isCreatableSentinel(a) &&\n !isGroupHeaderSentinel(b) &&\n !isSelectAllSentinel(b) &&\n !isCreatableSentinel(b)\n )\n return (a as T).id === (b as T).id;\n return false;\n }}\n items={rootItems}\n >\n <SearchableSelectTokenTrigger\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={isInvalid || undefined}\n aria-required={props.required || undefined}\n $isInvalid={isInvalid}\n >\n {renderSelection ? (\n renderSelection(value)\n ) : value.length > 0 ? (\n (() => {\n const visibleItems =\n maxSelections != null ? value.slice(0, maxSelections) : value;\n const overflowCount =\n maxSelections != null && value.length > maxSelections\n ? value.length - maxSelections\n : 0;\n const text = visibleItems\n .map((item) =>\n customRenderSelections\n ? customRenderSelections(item)\n : itemToString(item)\n )\n .join(\", \");\n return (\n <SelectionText>\n {text}\n {overflowCount > 0 ? `, +${overflowCount}` : \"\"}\n </SelectionText>\n );\n })()\n ) : (\n <SearchableSelectPlaceholder>\n {placeholder}\n </SearchableSelectPlaceholder>\n )}\n <SearchableSelectTriggerIcon style={{ marginLeft: \"auto\" }}>\n <StyledChevron data-chevron>\n <ChevronIcon />\n </StyledChevron>\n </SearchableSelectTriggerIcon>\n </SearchableSelectTokenTrigger>\n\n <Combobox.Portal container={portalContainer}>\n <ComboboxPositioner sideOffset={4}>\n <SearchableSelectPopup\n aria-busy={isLoading || undefined}\n style={{ display: \"flex\", flexDirection: \"column\" }}\n >\n <SearchableSelectSearchContainer>\n <SearchableSelectInput\n placeholder={searchPlaceholder}\n autoFocus\n />\n </SearchableSelectSearchContainer>\n <ComboboxStatus>{isLoading ? loadingText : null}</ComboboxStatus>\n <ComboboxEmpty>{isLoading ? null : emptyText}</ComboboxEmpty>\n <SearchableSelectList\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n style={\n isVirtualized\n ? {\n padding: 0,\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : undefined\n }\n >\n {isVirtualized ? (\n <VirtualizedComboboxList\n open={open}\n virtualizerRef={virtualizerRef}\n value={value}\n groups={groups}\n data={visibleData}\n itemToString={itemToString}\n inputType={inputType}\n renderItem={renderItem}\n renderGroupHeading={renderGroupHeading}\n renderCreatableItem={\n creatableProp\n ? (sentinel, style, index, measureRef) =>\n renderCreatableItem(\n sentinel,\n style,\n index,\n measureRef\n )\n : undefined\n }\n />\n ) : children ? (\n children\n ) : flatItems ? (\n (row: FlatRow) => renderSentinelRow(row)\n ) : groups ? (\n (\n group: { value: string; items: T[] } | CreatableSentinel,\n index: number\n ) => {\n if (isCreatableSentinel(group)) {\n return renderCreatableItem(group);\n }\n const g = group as { value: string; items: T[] };\n return (\n <React.Fragment key={g.value}>\n <ComboboxGroup items={g.items}>\n <ComboboxGroupLabel>\n {renderGroupHeading\n ? renderGroupHeading(g.value)\n : g.value}\n </ComboboxGroupLabel>\n <Combobox.Collection>\n {(item: T) => (\n <ComboboxItem\n key={item.id}\n value={item}\n itemId={String(item.id)}\n label={itemToString(item)}\n disabled={item.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(item)\n : () => itemToString(item)\n }\n />\n )}\n </Combobox.Collection>\n </ComboboxGroup>\n {index < groups.length - 1 && <ComboboxSeparator />}\n </React.Fragment>\n );\n }\n ) : (\n (item: T | CreatableSentinel) => {\n if (isCreatableSentinel(item)) {\n return renderCreatableItem(item);\n }\n const dataItem = item as T;\n return (\n <ComboboxItem\n key={dataItem.id}\n value={dataItem}\n itemId={String(dataItem.id)}\n label={itemToString(dataItem)}\n disabled={dataItem.disabled}\n inputType={inputType}\n renderItem={\n renderItem\n ? () => renderItem(dataItem)\n : () => itemToString(dataItem)\n }\n />\n );\n }\n )}\n </SearchableSelectList>\n </SearchableSelectPopup>\n </ComboboxPositioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field>\n );\n}\n","import * as React from \"react\";\nimport { Menu, type MenuRootChangeEventDetails } from \"@base-ui/react/menu\";\nimport Radio from \"@sproutsocial/seeds-react-radio\";\nimport Checkbox from \"@sproutsocial/seeds-react-checkbox\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { useSeedsPortalContainer } from \"./SeedsPortal\";\nimport {\n ActionMenuTrigger,\n ActionMenuPositioner,\n ActionMenuPopup,\n ActionMenuGroup,\n ActionMenuGroupLabel,\n ActionMenuSeparator,\n StyledMenuItem,\n StyledCheckboxItem,\n StyledCheckboxItemIndicator,\n StyledRadioItem,\n StyledRadioItemIndicator,\n StyledLinkItem,\n StyledSubmenuTrigger,\n} from \"./ActionMenuStyles\";\n\n// ─── ActionMenu ───────────────────────────────────────────────────────────────\n\nexport interface ActionMenuProps {\n /** The button element that opens the menu */\n trigger: React.ReactElement;\n /** Menu items and groups */\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Uncontrolled default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (\n open: boolean,\n eventDetails: MenuRootChangeEventDetails\n ) => void;\n /** Disable the trigger */\n disabled?: boolean;\n}\n\nexport function ActionMenu({\n trigger,\n children,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n}: ActionMenuProps) {\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n\n return (\n <Menu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n <div ref={containerRef} style={{ position: \"relative\" }} />\n <ActionMenuTrigger render={trigger} disabled={disabled} />\n <Menu.Portal container={portalContainer}>\n <ActionMenuPositioner sideOffset={8}>\n <ActionMenuPopup>{children}</ActionMenuPopup>\n </ActionMenuPositioner>\n </Menu.Portal>\n </Menu.Root>\n );\n}\n\n// ─── MenuGroup ────────────────────────────────────────────────────────────────\n\nexport interface MenuGroupProps {\n children: React.ReactNode;\n /** Optional group label shown above items */\n label?: string;\n /** Render a separator line after this group */\n showSeparator?: boolean;\n}\n\nexport function MenuGroup({\n children,\n label,\n showSeparator = false,\n}: MenuGroupProps) {\n return (\n <>\n <ActionMenuGroup>\n {label && <ActionMenuGroupLabel>{label}</ActionMenuGroupLabel>}\n {children}\n </ActionMenuGroup>\n {showSeparator && <ActionMenuSeparator />}\n </>\n );\n}\n\n// ─── MenuRadioGroup ───────────────────────────────────────────────────────────\n\nexport interface MenuRadioGroupProps {\n children: React.ReactNode;\n /** Controlled selected value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Called when selected value changes */\n onValueChange?: (value: string) => void;\n}\n\nexport function MenuRadioGroup({\n children,\n value,\n defaultValue,\n onValueChange,\n}: MenuRadioGroupProps) {\n return (\n <Menu.RadioGroup\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </Menu.RadioGroup>\n );\n}\n\n// ─── MenuItem ─────────────────────────────────────────────────────────────────\n\ninterface MenuItemActionProps {\n type?: \"action\";\n children: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLElement>;\n disabled?: boolean;\n /** Close the menu when this item is clicked. Defaults to true. */\n closeOnClick?: boolean;\n /** Render as a link */\n href?: string;\n target?: string;\n}\n\ninterface MenuItemCheckboxProps {\n type: \"checkbox\";\n children: React.ReactNode;\n /** Controlled checked state */\n checked?: boolean;\n /** Uncontrolled default checked state */\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n /** Close the menu when clicked. Defaults to false for checkbox items. */\n closeOnClick?: boolean;\n id?: string;\n}\n\ninterface MenuItemRadioProps {\n type: \"radio\";\n /** Value submitted to the parent MenuRadioGroup */\n value: string;\n children: React.ReactNode;\n disabled?: boolean;\n /** Close the menu when clicked. Defaults to false for radio items. */\n closeOnClick?: boolean;\n}\n\nexport type MenuItemProps =\n | MenuItemActionProps\n | MenuItemCheckboxProps\n | MenuItemRadioProps;\n\nexport function MenuItem(props: MenuItemProps) {\n const generatedId = React.useId();\n\n if (props.type === \"checkbox\") {\n const {\n children,\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n closeOnClick = false,\n id,\n } = props;\n const itemId = id ?? `checkbox-menu-item-${generatedId}`;\n return (\n <StyledCheckboxItem\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n closeOnClick={closeOnClick}\n >\n <StyledCheckboxItemIndicator\n keepMounted\n render={(_indicatorProps, state) => (\n <Checkbox\n checked={state.checked}\n onChange={() => {}}\n tabIndex={-1}\n id={itemId}\n name=\"menu-checkbox-item\"\n />\n )}\n />\n {children}\n </StyledCheckboxItem>\n );\n }\n\n if (props.type === \"radio\") {\n const { children, value, disabled, closeOnClick = false } = props;\n return (\n <StyledRadioItem\n value={value}\n disabled={disabled}\n closeOnClick={closeOnClick}\n >\n <StyledRadioItemIndicator\n keepMounted\n render={(_indicatorProps, state) => (\n <Radio\n checked={state.checked}\n onChange={() => {}}\n tabIndex={-1}\n id={`radio-menu-item-${value}`}\n name=\"menu-radio-item\"\n />\n )}\n />\n {children}\n </StyledRadioItem>\n );\n }\n\n // Default: action item\n const {\n children,\n onClick,\n disabled,\n closeOnClick = true,\n href,\n target,\n } = props as MenuItemActionProps;\n\n if (href) {\n return (\n <StyledLinkItem href={href} target={target} closeOnClick={closeOnClick}>\n {children}\n </StyledLinkItem>\n );\n }\n\n return (\n <StyledMenuItem\n onClick={onClick}\n disabled={disabled}\n closeOnClick={closeOnClick}\n >\n {children}\n </StyledMenuItem>\n );\n}\n\n// ─── MenuSub ──────────────────────────────────────────────────────────────────\n\nexport interface MenuSubProps {\n /** The MenuSubTrigger element that opens the submenu */\n trigger: React.ReactNode;\n /** Submenu items */\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Uncontrolled default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (\n open: boolean,\n eventDetails: MenuRootChangeEventDetails\n ) => void;\n /**\n * When true, pressing Escape closes the entire menu tree.\n * When false (default), Escape only closes the submenu.\n */\n closeParentOnEsc?: boolean;\n}\n\nexport function MenuSub({\n trigger,\n children,\n open,\n defaultOpen,\n onOpenChange,\n closeParentOnEsc = false,\n}: MenuSubProps) {\n const { containerRef, portalContainer } = useSeedsPortalContainer();\n\n return (\n <Menu.SubmenuRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n closeParentOnEsc={closeParentOnEsc}\n >\n <div ref={containerRef} style={{ position: \"relative\" }} />\n {trigger}\n <Menu.Portal container={portalContainer}>\n <ActionMenuPositioner sideOffset={getOffset} alignOffset={getOffset}>\n <ActionMenuPopup>{children}</ActionMenuPopup>\n </ActionMenuPositioner>\n </Menu.Portal>\n </Menu.SubmenuRoot>\n );\n}\nfunction getOffset({ side }: { side: Menu.Positioner.Props[\"side\"] }) {\n return side === \"top\" || side === \"bottom\" ? 4 : -8;\n}\n\n// ─── MenuSubTrigger ───────────────────────────────────────────────────────────\n\nexport interface MenuSubTriggerProps {\n children: React.ReactNode;\n disabled?: boolean;\n /** Custom label for keyboard text navigation */\n label?: string;\n /**\n * Whether the submenu opens on hover.\n * @default true\n */\n openOnHover?: boolean;\n}\n\nexport function MenuSubTrigger({\n children,\n disabled,\n label,\n openOnHover = true,\n}: MenuSubTriggerProps) {\n return (\n <StyledSubmenuTrigger\n disabled={disabled}\n label={label}\n openOnHover={openOnHover}\n >\n {children}\n <Icon name=\"chevron-right-outline\" fixedWidth aria-hidden />\n </StyledSubmenuTrigger>\n );\n}\n","import { Menu } from \"@base-ui/react/menu\";\nimport styled, { css } from \"styled-components\";\nimport { focusRing } from \"@sproutsocial/seeds-react-mixins\";\n\nexport const ActionMenuTrigger = styled(Menu.Trigger)``;\n\nexport const ActionMenuPositioner = styled(Menu.Positioner)`\n min-width: var(--anchor-width);\n z-index: 7;\n`;\n\n// Opt out of Base UI Drawer's swipe-to-dismiss pointer capture when the menu\n// is rendered inside a Drawer. Without this, the Drawer's viewport captures\n// pointermove/up on portaled popups and MenuItem clicks never fire.\nexport const ActionMenuPopup = styled(Menu.Popup).attrs({\n \"data-base-ui-swipe-ignore\": \"\",\n})`\n font-family: ${({ theme }) => theme.fontFamily};\n background: ${({ theme }) => theme.colors.container.background.base};\n border: 1px solid ${({ theme }) => theme.colors.container.border.base};\n border-radius: ${({ theme }) => theme.radii[500]};\n box-shadow: ${({ theme }) => theme.shadows.low};\n outline: none;\n max-height: min(var(--available-height, 400px), 400px);\n overflow-y: auto;\n padding: ${({ theme }) => theme.space[300]};\n\n &[data-open] {\n animation: action-menu-popup-in 120ms ease-out;\n }\n\n &[data-closed] {\n animation: action-menu-popup-out 100ms ease-in;\n }\n\n @keyframes action-menu-popup-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes action-menu-popup-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n`;\n\nexport const ActionMenuGroup = styled(Menu.Group)`\n display: block;\n`;\n\nexport const ActionMenuGroupLabel = styled(Menu.GroupLabel)`\n padding: ${({ theme }) => `${theme.space[300]}`};\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const ActionMenuSeparator = styled(Menu.Separator)`\n height: 1px;\n margin: ${({ theme }) => `${theme.space[300]} -${theme.space[300]}`};\n background: ${({ theme }) => theme.colors.container.border.base};\n`;\n\nconst menuItemStyles = css`\n box-sizing: border-box;\n display: block;\n width: 100%;\n border-radius: ${({ theme }) => theme.radii[500]};\n background-color: ${({ theme }) => theme.colors.listItem.background.base};\n border: 1px solid ${({ theme }) => theme.colors.listItem.background.base};\n color: ${({ theme }) => theme.colors.text.body};\n font-family: ${({ theme }) => theme.fontFamily};\n font-weight: ${({ theme }) => theme.fontWeights.normal};\n text-align: left;\n text-decoration: none;\n padding: ${({ theme }) => theme.space[300]};\n outline: 0;\n ${({ theme }) => theme.typography[200]};\n transition: all ${({ theme }) => theme.duration.fast};\n cursor: pointer;\n user-select: none;\n\n &[data-highlighted] {\n border-color: ${({ theme }) => theme.colors.listItem.border.base};\n background-color: ${({ theme }) => theme.colors.listItem.background.hover};\n color: ${({ theme }) => theme.colors.text.body};\n text-decoration: none;\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n opacity: 0.4;\n }\n`;\n\nexport const StyledMenuItem = styled(Menu.Item)`\n ${menuItemStyles}\n`;\n\nexport const StyledCheckboxItem = styled(Menu.CheckboxItem)`\n ${menuItemStyles}\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n`;\n\nexport const StyledRadioItem = styled(Menu.RadioItem)`\n ${menuItemStyles}\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n`;\n\nexport const StyledCheckboxItemIndicator = styled(Menu.CheckboxItemIndicator)`\n display: flex;\n align-items: center;\n width: 16px;\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const StyledRadioItemIndicator = styled(Menu.RadioItemIndicator)`\n display: flex;\n align-items: center;\n width: 16px;\n color: ${({ theme }) => theme.colors.text.body};\n`;\n\nexport const StyledSubmenuTrigger = styled(Menu.SubmenuTrigger)`\n ${menuItemStyles}\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space[300]};\n justify-content: space-between;\n\n &[data-popup-open] {\n border-color: ${({ theme }) => theme.colors.listItem.border.base};\n background-color: ${({ theme }) => theme.colors.listItem.background.hover};\n }\n`;\n\nexport const StyledLinkItem = styled(Menu.LinkItem)`\n ${menuItemStyles}\n`;\n","import * as React from \"react\";\nimport { type TypeButtonProps } from \"@sproutsocial/seeds-react-button\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n MenuButtonContainer,\n MainButton,\n TriggerButton,\n} from \"./MenuButtonStyles\";\n\n// ─── MenuButton ─────────────────────────────────────────────────────────────\n\nexport interface MenuButtonProps extends TypeButtonProps {\n /**\n * Menu item content rendered inside the dropdown half — the children of an\n * ActionMenu (MenuItems / MenuGroups).\n */\n actionMenu: React.ReactNode;\n /**\n * Accessible label for the chevron-only trigger button. Required so consumers\n * supply a localizable label rather than relying on a hardcoded fallback.\n */\n menuButtonAriaLabel: string;\n}\n\n/**\n * A \"split button\": a primary Button rendered immediately next to an ActionMenu\n * whose trigger is an identical Button showing only a chevron-down icon. The\n * two read as one control — the main button's right corners and the trigger's\n * left corners are squared off with a 1px gap between them.\n */\nexport function MenuButton({\n actionMenu,\n appearance = \"primary\",\n size,\n disabled,\n menuButtonAriaLabel,\n children,\n ...rest\n}: MenuButtonProps) {\n return (\n <MenuButtonContainer>\n <MainButton\n appearance={appearance}\n size={size}\n disabled={disabled}\n {...rest}\n >\n {children}\n </MainButton>\n <ActionMenu\n disabled={disabled}\n trigger={\n <TriggerButton\n appearance={appearance}\n size={size}\n disabled={disabled}\n ariaLabel={menuButtonAriaLabel}\n >\n <Icon name=\"chevron-down-outline\" fixedWidth aria-hidden />\n </TriggerButton>\n }\n >\n {actionMenu}\n </ActionMenu>\n </MenuButtonContainer>\n );\n}\n","import styled from \"styled-components\";\nimport { Button } from \"@sproutsocial/seeds-react-button\";\n\n// A 1px gap separates the two halves of the split button (fixed pixel value\n// per the design, not a theme token).\nexport const MenuButtonContainer = styled.div`\n display: inline-flex;\n gap: 1px;\n`;\n\n// Square off the inner (right) corners of the main button so it reads as one\n// control with the trigger. The `&&` specificity bump beats the base Button\n// Container's own `border-radius` (equal-specificity, source-order dependent).\nexport const MainButton = styled(Button)`\n && {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n`;\n\n// Square off the inner (left) corners of the chevron trigger button. The\n// chevron rotates 180° while the menu is open: base-ui's Menu.Trigger sets\n// `data-popup-open` on this element (the base Button spreads it onto its root\n// DOM node), mirroring the open-state selector convention in ActionMenuStyles.\nexport const TriggerButton = styled(Button)`\n && {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .Icon-svg {\n transition: transform ${({ theme }) => theme.duration.fast} ease;\n }\n\n &[data-popup-open] .Icon-svg {\n transform: rotate(180deg);\n }\n`;\n"],"mappings":"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","names":["React","Select","styled","Select","styled","styled","Icon","jsx","CheckIcon","styled","Select","Fragment","jsx","jsxs","styled","Select","React","Select","styled","jsx","jsxs","styled","Select","React","Combobox","React","React","Radio","Checkbox","styled","css","focusRing","Checkbox","jsx","invalidStyles","css","styled","focusRing","Checkbox","jsx","jsxs","Radio","Checkbox","CheckIcon","ComboboxItem","React","Combobox","jsx","jsxs","Combobox","groupItems","item","jsx","jsxs","id","Combobox","React","Combobox","Icon","Fragment","jsx","jsxs","isGroupHeaderSentinel","isSelectAllSentinel","id","realItems","item","Combobox","React","Combobox","Fragment","jsx","jsxs","id","Combobox","React","Combobox","Icon","styled","Fragment","jsx","jsxs","SelectionText","makeGroupHeaderSentinel","isGroupHeaderSentinel","SELECT_ALL_SENTINEL","isSelectAllSentinel","id","realItems","item","Combobox","React","Menu","Radio","Checkbox","Icon","styled","css","Fragment","jsx","jsxs","Menu","children","disabled","closeOnClick","Checkbox","Radio","Icon","Icon","styled","jsx","jsxs","Icon"]}