@sproutsocial/seeds-react-menu 1.18.3 → 1.18.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MenuContext.tsx","../../src/MenuItem/styles.tsx","../../src/MenuItem/useOptionProps.tsx","../../src/MenuItem/MenuItem.tsx","../../src/MenuItem/MenuItemTypes.ts","../../src/MenuHeader/MenuHeader.tsx","../../src/MenuHeader/styles.tsx","../../src/MenuContent/styles.tsx","../../src/hooks/useMenuChildren.tsx","../../src/MenuContent/MenuContent.tsx","../../src/MenuContent/DefaultMenuEmptyState.tsx","../../src/MenuFooter/MenuFooter.tsx","../../src/MenuFooter/styles.tsx","../../src/MenuGroup/MenuGroup.tsx","../../src/MenuGroup/styles.tsx","../../src/MenuRoot/MenuRoot.tsx","../../src/MenuLabel.tsx","../../src/MenuToggleButton/MenuToggleButton.tsx","../../src/MenuSearchInput/MenuSearchInput.tsx","../../src/hooks/useItemFiltering.tsx","../../src/utils/downshiftDefaults.ts","../../src/MenuTokenInput.tsx","../../src/MenuSearchTokenInput/MenuSearchTokenInput.tsx","../../src/SubmenuItem/SubmenuItem.tsx","../../src/ListboxToggleButton.tsx","../../src/ActionMenu/ActionMenu.tsx","../../src/hooks/useDownshiftDefaults.tsx","../../src/reducers/useComboboxStateReducer.tsx","../../src/utils/reduceReducers.ts","../../src/reducers/useSelectStateReducer.tsx","../../src/utils/getMultiSelectOverrides.ts","../../src/SingleSelectMenu/SingleSelectMenu.tsx","../../src/MultiSelectMenu/MultiSelectMenu.tsx","../../src/Autocomplete/Autocomplete.tsx","../../src/Autocomplete/SingleAutocomplete.tsx","../../src/Autocomplete/MultiAutocomplete.tsx","../../src/Autocomplete/AutocompleteInput.tsx","../../src/Autocomplete/AutocompleteTokenInput.tsx","../../src/Autocomplete/AutocompleteSelect.tsx","../../src/NestedMenu/NestedMenu.tsx","../../src/reducers/nestedMenuStateReducer.tsx","../../src/NestedMenu/NestedMenuContext.tsx","../../src/NestedMenu/NestedMenuContent.tsx","../../src/NestedMenu/NestedMenuItem.tsx","../../src/NestedMenu/NestedMenuHeader.tsx","../../src/NestedMenu/NestedMenuRoot.tsx","../../src/NestedMenu/NestedMenuPopout.tsx"],"sourcesContent":["import React, { createContext, useMemo, useContext } from \"react\";\nimport type {\n UseComboboxReturnValue,\n UseComboboxProps,\n UseSelectReturnValue,\n UseSelectProps,\n UseMultipleSelectionReturnValue,\n UseMultipleSelectionProps,\n} from \"downshift\";\nimport type { TypeTokenInputProps } from \"@sproutsocial/seeds-react-token-input\";\nimport type {\n TypeInternalItemProps,\n TypeNotEmptyChildren,\n TypeDownshiftMergedInputProps,\n} from \"./types\";\n\nexport interface TypeDownshiftComboboxProps\n extends Partial<UseComboboxProps<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftSelectProps\n extends Partial<UseSelectProps<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftMultiSelectProps\n extends Partial<\n Omit<\n UseMultipleSelectionProps<TypeInternalItemProps>,\n \"stateReducer\" | \"onStateChange\" | \"getA11yStatusMessage\"\n >\n > {\n // Multi Select Props with conflicting useSelect prop names\n /** Optional override to the built-in getA11yStatusMessage function for multiple selection*/\n getA11yMultiStatusMessage?: UseMultipleSelectionProps<TypeInternalItemProps>[\"getA11yStatusMessage\"];\n /** Optional override to the built-in onStateChange function for multiple selection*/\n onMultiSelectStateChange?: UseMultipleSelectionProps<TypeInternalItemProps>[\"onStateChange\"];\n /** Optional override to the built-in stateReducer function for multiple selection*/\n multiSelectStateReducer?: UseMultipleSelectionProps<TypeInternalItemProps>[\"stateReducer\"];\n}\n\nexport interface TypeDownshiftComboboxReturnValue\n extends Partial<UseComboboxReturnValue<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftSelectReturnValue\n extends Partial<UseSelectReturnValue<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftMultiSelectReturnValue\n extends Partial<UseMultipleSelectionReturnValue<TypeInternalItemProps>> {}\n\ntype TypeDonwshiftSharedReturnValue =\n | \"getLabelProps\"\n | \"getToggleButtonProps\"\n | \"getMenuProps\";\ntype TypeDonwshiftSharedProps =\n | \"onHighlightedIndexChange\"\n | \"onIsOpenChange\"\n | \"onSelectedItemChange\"\n | \"onStateChange\"\n | \"stateReducer\";\n\nexport interface TypeMenuContextBaseProps {\n itemsMap?: { [key: string]: TypeInternalItemProps };\n isListbox?: boolean;\n hiddenItemsMap?: Record<string, boolean>;\n hiddenItemsCount?: number;\n setHiddenItemsMap?: React.Dispatch<\n React.SetStateAction<Record<string, boolean>>\n >;\n subMenuId?: string;\n setSubMenuId?: (id: string) => void;\n contentRef?: React.RefObject<HTMLUListElement>;\n}\n\ninterface TypeAllDownshiftProps\n extends Omit<\n TypeDownshiftComboboxReturnValue,\n TypeDonwshiftSharedReturnValue\n >,\n Omit<TypeDownshiftComboboxProps, TypeDonwshiftSharedProps>,\n Omit<TypeDownshiftSelectReturnValue, TypeDonwshiftSharedReturnValue>,\n Omit<TypeDownshiftSelectProps, TypeDonwshiftSharedProps>,\n TypeDownshiftMultiSelectReturnValue,\n TypeDownshiftMultiSelectProps {\n onHighlightedIndexChange?:\n | TypeDownshiftComboboxProps[\"onHighlightedIndexChange\"]\n | TypeDownshiftSelectProps[\"onHighlightedIndexChange\"];\n onIsOpenChange?:\n | TypeDownshiftComboboxProps[\"onIsOpenChange\"]\n | TypeDownshiftSelectProps[\"onIsOpenChange\"];\n onSelectedItemChange?:\n | TypeDownshiftComboboxProps[\"onSelectedItemChange\"]\n | TypeDownshiftSelectProps[\"onSelectedItemChange\"];\n onStateChange?:\n | TypeDownshiftComboboxProps[\"onStateChange\"]\n | TypeDownshiftSelectProps[\"onStateChange\"];\n stateReducer?:\n | TypeDownshiftComboboxProps[\"stateReducer\"]\n | TypeDownshiftSelectProps[\"stateReducer\"];\n getLabelProps?:\n | TypeDownshiftComboboxReturnValue[\"getLabelProps\"]\n | TypeDownshiftSelectReturnValue[\"getLabelProps\"];\n getToggleButtonProps?:\n | TypeDownshiftComboboxReturnValue[\"getToggleButtonProps\"]\n | TypeDownshiftSelectReturnValue[\"getToggleButtonProps\"];\n getMenuProps?:\n | TypeDownshiftComboboxReturnValue[\"getMenuProps\"]\n | TypeDownshiftSelectReturnValue[\"getMenuProps\"];\n}\nexport interface TypeMenuContextProps\n extends TypeAllDownshiftProps,\n TypeMenuContextBaseProps {\n items: TypeInternalItemProps[];\n itemsMap?: { [key: string]: TypeInternalItemProps };\n selectedItemIds?: { [key: string]: boolean };\n isListbox?: boolean;\n hasVisibleItems?: boolean;\n autoCloseOnEmpty?: boolean;\n}\n\nexport interface TypeMenuContext extends TypeMenuContextProps {\n itemsMap: { [key: string]: TypeInternalItemProps };\n isItemSelected: (id: string) => boolean;\n getInputComponentProps: (\n props: Pick<TypeTokenInputProps, \"inputProps\"> &\n Parameters<Required<TypeMenuContextProps>[\"getInputProps\"]>[0]\n ) => Omit<TypeDownshiftMergedInputProps<TypeTokenInputProps>, \"onClick\">;\n isInitialized?: boolean;\n}\n\nexport interface TypeMenuProviderProps {\n children: TypeNotEmptyChildren;\n menuContext: TypeMenuContext;\n}\n\nexport interface TypeMenuToggleContext extends TypeMenuContext {\n ref?:\n | React.RefObject<any>\n | ((arg0: React.ElementRef<any> | HTMLElement) => void);\n toggle?: () => void;\n show?: () => void;\n hide?: () => void;\n ariaProps?: Record<string, any>;\n}\n\nexport interface TypeMenuToggleProviderProps extends TypeMenuProviderProps {\n menuContext: TypeMenuToggleContext;\n}\n\n/**\n * Object for Initializing the Menu Context\n */\nexport const defaultMenuContext: TypeMenuContext = {\n items: [],\n itemsMap: {},\n isItemSelected: () => false,\n getInputComponentProps: () => ({}),\n hasVisibleItems: false,\n isInitialized: false,\n};\n\nexport const getSelectedItemIds = <\n T extends TypeMenuContextProps[\"selectedItems\"] | undefined,\n R = T extends undefined ? undefined : Record<string, boolean>\n>(\n selectedItems?: T\n): R =>\n selectedItems?.reduce(\n (selected, item) => ({ ...selected, [item.id]: true }),\n {} as Record<string, boolean>\n ) as R;\n\nexport const checkIfItemSelected = ({\n id,\n selectedItem,\n selectedItemIds,\n}: {\n id: string;\n selectedItem?: TypeInternalItemProps | null;\n selectedItemIds?: TypeMenuContextProps[\"selectedItemIds\"];\n}) => (selectedItemIds ? !!selectedItemIds[id] : selectedItem?.id === id);\n\n/**\n * Hook for initializing Menu context\n */\nexport const useMenu = ({\n items = [],\n isListbox = false,\n isOpen = false,\n itemsMap: itemsMapFromProps,\n selectedItemIds: selectedItemIdsFromProps,\n selectedItem,\n selectedItems,\n getInputProps,\n contentRef: contentRefFromProps,\n autoCloseOnEmpty,\n hiddenItemsCount,\n ...rest\n}: Partial<TypeMenuContextProps> = {}): TypeMenuContext => {\n const contentRef = contentRefFromProps || React.createRef<HTMLUListElement>();\n const menuProps = useMemo(() => ({ ...rest }), [rest]);\n const itemsMap = useMemo(\n () =>\n itemsMapFromProps ||\n items.reduce((map, item) => {\n map[`${item.id}`] = {\n ...item,\n };\n return map;\n }, {} as TypeMenuContext[\"itemsMap\"]),\n [items, itemsMapFromProps]\n );\n\n const selectedItemIds = useMemo(\n () => selectedItemIdsFromProps || getSelectedItemIds(selectedItems),\n [selectedItems, selectedItemIdsFromProps]\n );\n\n const isItemSelected = React.useCallback(\n (id: string) => checkIfItemSelected({ id, selectedItem, selectedItemIds }),\n [selectedItem?.id, selectedItemIds]\n );\n\n const getInputComponentProps = React.useCallback<\n TypeMenuContext[\"getInputComponentProps\"]\n >(\n ({ inputProps, ...props }) => {\n if (!getInputProps) return {};\n const {\n [\"aria-activedescendant\"]: activedescendant,\n [\"aria-autocomplete\"]: autocomplete,\n [\"aria-controls\"]: controls,\n [\"aria-expanded\"]: expanded,\n [\"aria-labelledby\"]: labelledby,\n role,\n autoComplete,\n onClick,\n value,\n ...restProps\n } = getInputProps(props);\n return {\n ...restProps,\n inputProps: {\n [\"aria-activedescendant\"]: activedescendant,\n [\"aria-autocomplete\"]: autocomplete,\n [\"aria-controls\"]: controls,\n [\"aria-expanded\"]: expanded,\n [\"aria-labelledby\"]: labelledby,\n role,\n autoComplete,\n onClick,\n value,\n ...inputProps,\n },\n };\n },\n [getInputProps]\n );\n\n const hasVisibleItems = useMemo(() => {\n return (hiddenItemsCount ?? 0) < items.length;\n }, [items, hiddenItemsCount]);\n\n return {\n isOpen,\n isListbox,\n items,\n itemsMap,\n selectedItem,\n selectedItems,\n selectedItemIds,\n isItemSelected,\n getInputProps,\n getInputComponentProps,\n contentRef,\n hasVisibleItems,\n autoCloseOnEmpty,\n isInitialized: true,\n ...menuProps,\n };\n};\n\n/**\n * MenuToggleContext factory, sets the type and the initial object\n * @description Context for the Menu Toggle\n */\nexport const MenuToggleContext =\n createContext<TypeMenuToggleContext>(defaultMenuContext);\n\n/**\n * MenuToggleProvider Component sets the context values into the provider\n * @description Context Provider for the Menu Toggle\n */\nexport const MenuToggleProvider = ({\n children,\n menuContext,\n}: TypeMenuToggleProviderProps) => {\n return (\n <MenuToggleContext.Provider value={{ ...menuContext }}>\n {children}\n </MenuToggleContext.Provider>\n );\n};\n\n/**\n * Utility hook for consuming MenuToggleContext\n */\nexport const useMenuToggleContext = () => {\n const menuContextValue = useContext(MenuToggleContext);\n\n if (menuContextValue === null) {\n throw new Error(\n \"useMenuToggleContext must be used within a <MenuToggleContext.Provider />\"\n );\n }\n\n return menuContextValue;\n};\n\n/**\n * MenuContentContext factory, sets the type and the initial object\n * @description Context for the Menu Content\n */\nexport const MenuContentContext =\n createContext<TypeMenuContext>(defaultMenuContext);\n\n/**\n * MenuContentProvider Component sets the context values into the provider\n * @description Context Provider for the Menu Content\n */\nexport const MenuContentProvider = ({\n children,\n menuContext,\n}: TypeMenuProviderProps) => {\n return (\n <MenuContentContext.Provider value={{ ...menuContext }}>\n {children}\n </MenuContentContext.Provider>\n );\n};\n\n/**\n * Utility hook for consuming MenuContentContext\n */\nexport const useMenuContentContext = () => {\n const menuContextValue = useContext(MenuContentContext);\n\n if (menuContextValue === null) {\n throw new Error(\n \"useMenuContentContext must be used within a <MenuContentContext.Provider />\"\n );\n }\n\n return menuContextValue;\n};\n","import styled, { css } from \"styled-components\";\nimport { focusRing, disabled } from \"@sproutsocial/seeds-react-mixins\";\nimport { color, border, flexbox, grid, layout, space } from \"styled-system\";\nimport {\n CheckboxContainer,\n InputWrapper,\n PillInput,\n checkboxContainerHoverStyles,\n inputWrapperHoverStyles,\n pillInputHoverStyles,\n} from \"@sproutsocial/seeds-react-checkbox\";\n\nconst highlightedStyles = css`\n cursor: pointer;\n border: 1px solid ${({ 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\nconst activeStyles = css`\n border: 1px solid ${({ theme }) => theme.colors.listItem.border.base};\n background-color: ${({ theme }) => theme.colors.menuItem.background.active};\n color: ${({ theme }) => theme.colors.text.body};\n text-decoration: none;\n`;\n\nconst selectedStyles = css`\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n`;\n\nexport const MenuItemContainer = styled.li`\n box-sizing: border-box;\n list-style-type: none;\n margin-left: ${({ theme }) => theme.space[300]};\n margin-right: ${({ theme }) => theme.space[300]};\n\n &:first-child {\n margin-top: ${({ theme }) => theme.space[300]};\n }\n\n &:last-child {\n margin-bottom: ${({ theme }) => theme.space[300]};\n }\n`;\n\nexport const StyledMenuItem = styled.button<{\n $highlighted: boolean;\n $active?: boolean;\n $selected?: boolean;\n}>`\n display: block;\n box-sizing: border-box;\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\n /* Highlighted */\n ${({ $highlighted }) => $highlighted && highlightedStyles}\n\n /* Hovered, but not focused */\n &:hover {\n ${highlightedStyles}\n ${CheckboxContainer} {\n ${checkboxContainerHoverStyles}\n }\n ${InputWrapper} {\n ${inputWrapperHoverStyles}\n }\n ${PillInput} {\n ${pillInputHoverStyles}\n }\n }\n\n /* focused */\n &:focus {\n ${focusRing}\n }\n\n /* Active */\n ${({ $active }) => $active && activeStyles}\n\n /* Pressed state*/\n &:active {\n ${activeStyles}\n }\n\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n ${disabled}\n }\n\n ${({ $selected }) => $selected && selectedStyles}\n\n ${border}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n`;\n\nexport const MenuItemRow = styled.div`\n display: flex;\n align-items: center;\n pointer-events: none;\n`;\nexport const MenuItemAction = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const MenuItemActionLeft = styled(MenuItemAction)`\n margin-right: ${({ theme }) => theme.space[300]};\n`;\n\nexport const MenuItemActionRight = styled(MenuItemAction)`\n margin-left: ${({ theme }) => theme.space[300]};\n`;\n\nexport const MenuItemText = styled.div`\n word-break: break-word;\n flex-grow: 1;\n min-width: 0;\n`;\n","import React, { useContext, useMemo } from \"react\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Checkbox } from \"@sproutsocial/seeds-react-checkbox\";\nimport { Switch } from \"@sproutsocial/seeds-react-switch\";\nimport { Radio } from \"@sproutsocial/seeds-react-radio\";\nimport { useTheme } from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { useMenuContentContext } from \"../MenuContext\";\n\nimport type { TypeMenuItemProps, InputType } from \"./MenuItemTypes\";\nimport { MenuItemActionLeft, MenuItemRow, MenuItemText } from \"./styles\";\n\n/**\n * SelectionIndicator - handles logic for appropriate rendering of inputs\n * @returns Checkbox | Icon | Radio | Switch\n */\nexport const SelectionIndicator = ({\n id,\n inputType = \"icon\",\n \"aria-labelledby\": labeledBy,\n selected,\n}: {\n id: string;\n \"aria-labelledby\": string;\n selected: boolean;\n inputType: InputType;\n}) => {\n const { space } = useTheme();\n\n const inputStub = (e: React.SyntheticEvent) => {\n e.stopPropagation();\n };\n\n switch (inputType) {\n case \"checkbox\":\n return (\n <Checkbox\n tabIndex={-1}\n onChange={() => {}}\n checked={selected}\n aria-labelledby={labeledBy}\n id={`MenuItem-${inputType}-${id}`}\n />\n );\n case \"switch\":\n return (\n <Switch\n tabIndex={-1}\n onClick={inputStub}\n checked={!!selected}\n aria-labelledby={labeledBy}\n id={`MenuItem-${inputType}-${id}`}\n />\n );\n case \"radio\":\n return (\n <Radio\n tabIndex={-1}\n checked={selected}\n id={`MenuItem-${inputType}-${id}`}\n name={`MenuItem-${inputType}`}\n aria-labelledby={labeledBy}\n />\n );\n case \"icon\":\n if (selected) {\n return <Icon name=\"check-solid\" aria-hidden size=\"small\" />;\n } else {\n return <Box width={space[\"400\"]}></Box>;\n }\n default:\n return null;\n }\n};\n\n/**\n * useOptionProps - props needed for the option menu items\n */\nexport const useOptionProps = ({\n id,\n children,\n inputType = \"icon\",\n inputLabelId,\n ...props\n}: TypeMenuItemProps) => {\n const { selectedItem, selectedItemIds, isListbox, isItemSelected } =\n useMenuContentContext();\n const selected = useMemo(\n () => isItemSelected(id),\n [selectedItem?.id, selectedItemIds]\n );\n\n const label = inputLabelId || `menu-item-child-${id}`;\n\n return isListbox\n ? {\n active: selected,\n [\"aria-selected\"]: selected,\n children: (\n <MenuItemRow>\n <MenuItemActionLeft>\n <SelectionIndicator\n id={id}\n aria-labelledby={label}\n inputType={inputType}\n selected={!!selected}\n />\n </MenuItemActionLeft>\n <MenuItemText id={label}>{children}</MenuItemText>\n </MenuItemRow>\n ),\n ...props,\n }\n : {};\n};\n","import { useMenuContentContext } from \"../MenuContext\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport type { TypeMenuItemProps } from \"./MenuItemTypes\";\nimport { MenuItemContainer, StyledMenuItem } from \"./styles\";\nimport { useOptionProps } from \"./useOptionProps\";\n\n// TODO: decide if we want to support inputs on menuitems\n// const roles = {\n// checkbox: \"menuitemcheckbox\",\n// switch: \"menuitemcheckbox\",\n// radio: \"menuitemradio\",\n// } as const;\n\nconst MenuItem = ({\n id,\n children,\n onClick,\n onKeyDown,\n disabled = false,\n active,\n innerRef,\n href,\n color,\n ...props\n}: TypeMenuItemProps) => {\n const {\n getItemProps,\n itemsMap,\n highlightedIndex,\n isListbox,\n hiddenItemsMap = {},\n } = useMenuContentContext();\n const { ...optionProps } = useOptionProps({\n id,\n children,\n ...props,\n });\n const item = (itemsMap[id] || { index: 0, id }) as TypeInternalItemProps;\n\n const highlighted = highlightedIndex === item?.index;\n\n const downshiftItemProps =\n getItemProps?.({\n ...(isListbox ? {} : { role: \"menuitem\" }),\n item,\n index: item.index,\n // The disabled prop no longer supported in downshift. Use isItemDisabled instead.\n // disabled,\n onClick,\n onKeyDown,\n ref: innerRef,\n }) ?? {};\n\n // downshift's useSelect adds aria-selected to every item, but aria-selected\n // is only valid on role=\"option\" (listbox). For menuitem / menuitemcheckbox /\n // menuitemradio it fails axe's aria-allowed-attr rule — menu items use\n // aria-checked for state, not aria-selected.\n if (!isListbox && \"aria-selected\" in downshiftItemProps) {\n delete downshiftItemProps[\"aria-selected\"];\n }\n\n return hiddenItemsMap[item.id] ? (\n <></>\n ) : (\n <MenuItemContainer role=\"none\">\n <StyledMenuItem\n id={id}\n $highlighted={highlighted}\n $active={active}\n {...downshiftItemProps}\n // use anchor tag if href is provided and button for menuitem\n as={isListbox ? undefined : href ? \"a\" : \"button\"}\n type={href ? undefined : \"button\"}\n href={href}\n children={children}\n // Keyboard nav uses the arrow keys, not tab.\n tabIndex={-1}\n {...optionProps}\n {...props}\n />\n </MenuItemContainer>\n );\n};\n\nMenuItem.__MENU_PRIMITIVE_TYPE = \"MenuItem\";\n\nexport { MenuItem };\n","import type { GetItemPropsOptions } from \"downshift\";\nimport type { TypeMenuItemRoles } from \"../constants\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport type {\n TypeBorderSystemProps,\n TypeColorSystemProps,\n TypeFlexboxSystemProps,\n TypeGridSystemProps,\n TypeLayoutSystemProps,\n TypePositionSystemProps,\n TypeSpaceSystemProps,\n TypeTypographySystemProps,\n} from \"@sproutsocial/seeds-react-system-props\";\n\nexport interface TypeMenuItemStyledProps\n extends TypeBorderSystemProps,\n TypeColorSystemProps,\n TypeFlexboxSystemProps,\n TypeGridSystemProps,\n TypeLayoutSystemProps,\n TypePositionSystemProps,\n TypeSpaceSystemProps,\n TypeTypographySystemProps {}\n\nexport const INPUT_TYPES = {\n CHECKBOX: \"checkbox\",\n RADIO: \"radio\",\n SWITCH: \"switch\",\n ICON: \"icon\",\n} as const;\nexport type InputType = (typeof INPUT_TYPES)[keyof typeof INPUT_TYPES];\n\nexport interface TypeMenuItemProps\n extends TypeMenuItemStyledProps,\n Omit<\n GetItemPropsOptions<TypeInternalItemProps>,\n | \"as\"\n | \"item\"\n | \"ref\"\n | keyof TypeMenuItemStyledProps\n | keyof TypeInternalItemProps\n >,\n Omit<TypeInternalItemProps, \"index\"> {\n children: React.ReactNode;\n disabled?: boolean;\n role?: TypeMenuItemRoles;\n innerRef?: React.Ref<any>;\n $highlighted?: boolean;\n\n // props for options\n active?: boolean;\n inputType?: InputType;\n inputLabelId?: string;\n}\n","import React from \"react\";\nimport {\n MenuHeaderContainer,\n MenuTitleText,\n MenuChildrenContainer,\n MenuHeaderFeatures,\n} from \"./styles\";\nimport type { TypeMenuHeaderProps } from \"./MenuHeaderTypes\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader\n *\n * @description MenuHeader is a container used to hold header content within a Menu.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menufooter MenuFooter}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput MenuSearchInput}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput MenuSearchTokenInput}\n */\n\nconst MenuHeader = ({\n children,\n title,\n leftAction,\n rightAction,\n ...rest\n}: TypeMenuHeaderProps) => {\n const showTopRow = title || leftAction || rightAction;\n return (\n <>\n <MenuHeaderContainer $leftAction={!!leftAction} {...rest}>\n {showTopRow && (\n <MenuHeaderFeatures $leftAction={!!leftAction}>\n {leftAction && leftAction}\n {title && (\n <MenuTitleText $leftAction={!!leftAction}>{title}</MenuTitleText>\n )}\n\n {rightAction && <div className=\"right-action\">{rightAction}</div>}\n </MenuHeaderFeatures>\n )}\n\n {children && <MenuChildrenContainer>{children}</MenuChildrenContainer>}\n </MenuHeaderContainer>\n </>\n );\n};\n\nexport { MenuHeader };\n","import styled from \"styled-components\";\nimport {\n border,\n color,\n flexbox,\n grid,\n layout,\n position,\n space,\n} from \"styled-system\";\nimport type { TypeMenuHeaderProps } from \"./MenuHeaderTypes\";\n\ninterface TypeMenuHeaderContainerProps extends TypeMenuHeaderProps {\n $leftAction?: boolean;\n}\n\nexport const MenuHeaderContainer = styled.div<TypeMenuHeaderContainerProps>`\n border-color: ${({ theme }) => theme.colors.container.border.base};\n border-bottom-width: 1px;\n border-bottom-style: solid;\n box-sizing: border-box;\n width: 100%;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n display: flex;\n flex-direction: column;\n padding: ${({ theme }) => theme.space[350]} ${({ theme }) => theme.space[400]};\n\n ${border}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n ${position}\n`;\n\nexport const MenuTitleText = styled.h3<TypeMenuHeaderContainerProps>`\n color: ${({ theme }) => theme.colors.text.headline};\n font-weight: ${({ theme }) => theme.fontWeights.bold};\n margin: 0px;\n flex-grow: 1;\n\n ${({ theme }) => theme.typography[200]}\n\n ${({ $leftAction, theme }) =>\n $leftAction &&\n `\n padding-left: ${theme.space[350]};\n `}\n`;\n\nexport const MenuChildrenContainer = styled.div`\n grid-column: 1 / -1;\n margin-top: ${({ theme }) => theme.space[300]};\n\n &:first-child {\n margin-top: 0;\n }\n`;\n\nexport const MenuHeaderFeatures = styled.div<TypeMenuHeaderContainerProps>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n\n .right-action {\n margin-left: auto; /* Pushes the right action to the right */\n display: flex;\n justify-content: flex-end;\n flex-shrink: 0; /* Prevents it from shrinking */\n max-width: 40%; /* Prevents it from taking too much space */\n text-align: right;\n }\n\n > a,\n > button {\n display: flex;\n align-items: center;\n word-break: break-word;\n }\n`;\n","import styled from \"styled-components\";\nimport {\n border,\n color,\n flexbox,\n grid,\n layout,\n position,\n space,\n} from \"styled-system\";\nimport type { TypeMenuContentProps } from \"./MenuContentTypes\";\n\nexport const StyledMenuContent = styled.ul<TypeMenuContentProps>`\n margin: 0;\n padding: 0;\n overflow: auto;\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n\n ${border}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n ${position}\n`;\n","import React, { type ReactNode, useMemo } from \"react\";\nimport { MenuItem, type TypeMenuItemProps } from \"../MenuItem\";\nimport type {\n TypeSubmenuItemProps,\n TypeSubmenuValidMenuComponentProps,\n} from \"../SubmenuItem\";\nimport type { TypeMenuContext } from \"../MenuContext\";\nimport type { TypeMenuGroupProps } from \"../MenuGroup\";\nimport type { TypeMenuRootProps } from \"../MenuRoot\";\nimport type {\n TypeNotEmptyChildren,\n TypeChildrenOrItems,\n TypeInternalItemProps,\n} from \"../types\";\nimport { MenuContent, type TypeMenuContentProps } from \"../MenuContent\";\n\nexport interface TypeMapMenuItemsProps<\n I extends TypeMenuItemProps = TypeMenuItemProps\n> {\n menuItems: I[];\n MenuItemComponent?: React.ComponentType<I>;\n}\nexport type TypeItemElement<I extends TypeMenuItemProps = TypeMenuItemProps> =\n React.ReactElement<\n | TypeMenuItemProps\n | TypeSubmenuItemProps<I, TypeSubmenuValidMenuComponentProps<I>>\n >;\nexport type TypeMenuGroupElement<\n I extends TypeMenuItemProps = TypeMenuItemProps\n> = React.ReactElement<TypeMenuGroupProps<I>>;\nexport type TypeMenuContentElement<\n I extends TypeMenuItemProps = TypeMenuItemProps\n> = React.ReactElement<TypeMenuContentProps<I>>;\n\nexport interface TypeMenuChildren {\n type: \"item\" | \"group\" | \"content\";\n element: TypeItemElement | TypeMenuGroupElement | TypeMenuContentElement;\n}\n\n// https://stackoverflow.com/questions/69119016/find-specific-children-components-regardless-of-depth-in-react\nconst walkAllChildren = (\n children: ReactNode,\n callback: (element: ReactNode, parents: readonly ReactNode[]) => void\n) => {\n const walk = (element: ReactNode, parents: readonly ReactNode[]) => {\n if (element === null || element === undefined) return;\n callback(element, parents);\n const newParents = [...parents, element];\n if (React.isValidElement(element) && element.props?.children) {\n React.Children.toArray(element.props.children).forEach((child) => {\n walk(child, newParents);\n });\n }\n };\n const parents: ReactNode[] = [];\n React.Children.toArray(children).forEach((child) => {\n walk(child, parents);\n });\n};\n\n// get the name from our custom __MENU_PRIMITIVE_TYPE property\nconst getComponentName = (element: ReactNode): string | undefined => {\n if (\n element &&\n typeof element === \"object\" &&\n \"type\" in element &&\n (typeof element.type === \"function\" || typeof element.type === \"object\") &&\n \"__MENU_PRIMITIVE_TYPE\" in element.type &&\n typeof element.type.__MENU_PRIMITIVE_TYPE === \"string\"\n ) {\n return element.type.__MENU_PRIMITIVE_TYPE;\n }\n};\n\n// Add a menu item to the provided allMenuItems array and menuItemsMap object\nconst addMenuItem = ({\n itemProps,\n allMenuItems,\n menuItemsMap,\n}: {\n itemProps: Omit<TypeInternalItemProps, \"index\">;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n const item = {\n ...itemProps,\n index: allMenuItems.length,\n };\n allMenuItems.push(item);\n menuItemsMap[`${item.id}`] = item;\n};\n\n// Add items from a MenuGroup element to the allMenuItems array and menuItemsMap object\nconst addItemsFromGroup = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n groupElement: menuGroup,\n allMenuItems,\n menuItemsMap,\n}: {\n groupElement: TypeMenuGroupElement<I>;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n const menuItems = menuGroup.props.menuItems;\n if (menuItems) {\n menuItems.forEach((menuItem) => {\n addMenuItem({\n itemProps: {\n id: menuItem.id,\n disabled: menuItem.disabled,\n menuItemProps: menuItem,\n menuGroupProps: menuGroup.props,\n },\n allMenuItems,\n menuItemsMap,\n });\n });\n } else if (menuGroup.props.children) {\n // Convert children to array to handle both arrays and iterables\n const children = React.Children.toArray(menuGroup.props.children);\n children.forEach((menuItem) => {\n // Only process React elements that have props\n if (React.isValidElement(menuItem)) {\n addMenuItem({\n itemProps: {\n id: menuItem.props.id,\n disabled: menuItem.props.disabled,\n menuItemProps: menuItem.props,\n menuGroupProps: menuGroup.props,\n },\n allMenuItems,\n menuItemsMap,\n });\n }\n });\n }\n};\n\n// Add items from a MenuContent element to the allMenuItems array and menuItemsMap object\nconst addItemsFromContent = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n contentElement: menuContent,\n allMenuItems,\n menuItemsMap,\n}: {\n contentElement: TypeMenuContentElement<I>;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n /**\n * No need to add items inside of MenuContent if it does not have menuItems\n * since we already traversed the children and menuContentProps are not needed.\n */\n if (!(\"menuItems\" in menuContent.props)) return;\n // Add items from menuItems prop if it isn't empty\n if (menuContent.props.menuItems) {\n menuContent.props.menuItems.forEach((menuItem) => {\n addMenuItem({\n itemProps: {\n id: menuItem.id,\n disabled: menuItem.disabled,\n menuItemProps: menuItem,\n },\n allMenuItems,\n menuItemsMap,\n });\n });\n }\n};\n\n// Traverse the children of a Menu component and add items to the allMenuItems array and menuItemsMap object\nconst setMenuItemsFromChildren = ({\n children,\n allMenuItems,\n menuItemsMap,\n}: {\n children: ReactNode;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n walkAllChildren(children, (element) => {\n switch (getComponentName(element)) {\n case \"MenuItem\":\n // Cast element to the TypeItemElement since we know it's one of the three.\n // This is needed for the addMenuItem function.\n const menuItem = element as TypeItemElement;\n // Items in groups would have already been added to the map.\n if (menuItemsMap[`${menuItem.props.id}`]) return;\n addMenuItem({\n itemProps: {\n id: menuItem.props.id,\n disabled: menuItem.props.disabled,\n menuItemProps: menuItem.props,\n },\n allMenuItems,\n menuItemsMap,\n });\n break;\n case \"MenuGroup\":\n addItemsFromGroup({\n // Cast element to the TypeMenuGroupElement since we know it's a group and is needed for addItemsFromGroup.\n groupElement: element as TypeMenuGroupElement,\n allMenuItems,\n menuItemsMap,\n });\n break;\n case \"MenuContent\":\n addItemsFromContent({\n // Cast element to the TypeMenuContentElement since we know it's a content and is needed for addItemsFromContent.\n contentElement: element as TypeMenuContentElement,\n allMenuItems,\n menuItemsMap,\n });\n break;\n default:\n break;\n }\n });\n};\n\n// Returns a fragment containing a `MenuItemComponent` for each item in `menuItems`.\nexport const mapMenuItems = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n menuItems,\n MenuItemComponent = MenuItem,\n}: TypeMapMenuItemsProps<I>) => {\n return (\n <>\n {menuItems.map((menuItemProps) => (\n <MenuItemComponent key={menuItemProps.id} {...menuItemProps} />\n ))}\n </>\n );\n};\n\ntype TypeUseMenuChildrenProps<I extends TypeMenuItemProps = TypeMenuItemProps> =\n {\n children?: TypeMenuRootProps[\"children\"];\n menuItems?: I[];\n MenuItemComponent?: React.ComponentType<I>;\n };\n\n// Return a MenuContent using the provided menuItems\nexport const getChildrenFromMenuItems = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n menuItems,\n MenuItemComponent,\n}: {\n menuItems: I[];\n MenuItemComponent?: React.ComponentType<I>;\n}) => (\n <MenuContent menuItems={menuItems} MenuItemComponent={MenuItemComponent} />\n);\n\n// Hook to get all menu items and children for a Menu component\nexport const useMenuChildren = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n}: TypeUseMenuChildrenProps<I>) => {\n const { allMenuItems, menuItemsMap, children } = useMemo(() => {\n let children: TypeNotEmptyChildren = <></>;\n const menuItemsMap: TypeMenuContext[\"itemsMap\"] = {};\n const allMenuItems: TypeMenuContext[\"items\"] = [];\n\n // If a menuItems prop was passed to the Menu, we can bypass the children traversal.\n if (menuItems && menuItems.length) {\n menuItems.forEach((menuItem) => {\n addMenuItem({ itemProps: menuItem, allMenuItems, menuItemsMap });\n });\n children = getChildrenFromMenuItems({ menuItems, MenuItemComponent });\n } else if (childrenProp) {\n children = childrenProp;\n setMenuItemsFromChildren({\n children: childrenProp,\n allMenuItems,\n menuItemsMap,\n });\n }\n\n return { allMenuItems, menuItemsMap, children };\n }, [childrenProp, menuItems, MenuItemComponent]);\n\n return { allMenuItems, menuItemsMap, children };\n};\n","import type { TypeMenuContentProps } from \"./MenuContentTypes\";\nimport { StyledMenuContent } from \"./styles\";\nimport { useMenuContentContext } from \"../MenuContext\";\nimport { mapMenuItems } from \"../hooks/useMenuChildren\";\nimport { useCallback } from \"react\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport { DefaultMenuEmptyState } from \"./DefaultMenuEmptyState\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menucontent\n *\n * @description MenuContent is used to contain lists or grouped lists of {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems}.\n *\n * @example\n * <ActionMenu>\n * <MenuHeader>Header</MenuHeader>\n * <MenuContent>\n * <MenuGroup id=\"1\">\n * <MenuItem>Item 1</MenuItem>\n * </MenuGroup>\n * <MenuGroup id=\"2\">\n * <MenuItem>Item 2</MenuItem>\n * </MenuGroup>\n * </MenuContent>\n * <MenuFooter>Footer</MenuFooter>\n * </ActionMenu>\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItem}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup MenuGroup}\n */\n\nconst MenuContent = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n id = \"menu_content\",\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n onKeyDown,\n innerRef = null,\n emptyStateElement,\n ...rest\n}: TypeMenuContentProps<I>) => {\n const {\n getToggleButtonProps,\n getMenuProps,\n isListbox,\n hasVisibleItems,\n autoCloseOnEmpty,\n isInitialized,\n } = useMenuContentContext();\n const toggleButtonProps = getToggleButtonProps?.();\n\n const children =\n childrenProp || !menuItems || !menuItems.length\n ? childrenProp\n : mapMenuItems({ menuItems, MenuItemComponent });\n\n if (isInitialized && !hasVisibleItems && !autoCloseOnEmpty) {\n return emptyStateElement ?? <DefaultMenuEmptyState />;\n }\n\n // Hides the content if there are no children and it shouldn't show the empty state\n if (!children) {\n return null;\n }\n\n // Memoize the onKeyDown handler to prevent unnecessary re-renders\n const handleKeyDown = useCallback(\n (e) => {\n toggleButtonProps?.[\"onKeyDown\"]?.(e);\n onKeyDown?.(e);\n },\n [onKeyDown, toggleButtonProps?.[\"onKeyDown\"]]\n );\n\n return (\n <StyledMenuContent\n autoFocus\n id={id}\n tabIndex={0}\n // apply onKeyDown logic for downshift keyboard accessibility support\n onKeyDown={handleKeyDown}\n // apply active descendent updates to container for proper accessibility\n aria-activedescendant={toggleButtonProps?.[\"aria-activedescendant\"]}\n {...getMenuProps?.(\n {\n ...(isListbox ? { ref: innerRef } : { ref: innerRef, role: \"menu\" }),\n },\n // Suppress ref error for now\n { suppressRefError: true }\n )}\n {...rest}\n >\n {children}\n </StyledMenuContent>\n );\n};\n\nMenuContent.__MENU_PRIMITIVE_TYPE = \"MenuContent\";\n\nexport { MenuContent };\n","import styled from \"styled-components\";\nimport { Box, type TypeBoxProps } from \"@sproutsocial/seeds-react-box\";\n\nexport interface TypeDefaultMenuEmptyStateProps extends TypeBoxProps {\n children?: React.ReactNode;\n}\n\nconst StyledEmptyState = styled(Box)`\n padding: ${({ theme }) => theme.space[350]};\n text-align: center;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n`;\n\nconst DefaultMenuEmptyState = ({\n children = \"No items found\",\n ...props\n}: TypeDefaultMenuEmptyStateProps) => {\n return <StyledEmptyState {...props}>{children}</StyledEmptyState>;\n};\n\nexport { DefaultMenuEmptyState };\n","import React from \"react\";\nimport type { TypeMenuFooterProps } from \"./MenuFooterTypes\";\nimport { StyledMenuFooterBox } from \"./styles\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menufooter\n *\n * @description MenuFooter is a container used to hold footer content within a Menu.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader MenuHeader}\n */\n\nexport const MenuFooter = ({ children, ...rest }: TypeMenuFooterProps) => {\n return <StyledMenuFooterBox {...rest}>{children}</StyledMenuFooterBox>;\n};\n","import styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nexport const StyledMenuFooterBox = styled(Box)`\n padding: ${({ theme }) => theme.space[350]} ${({ theme }) => theme.space[400]};\n border-top: 1px solid ${(p) => p.theme.colors.container.border.base};\n`;\n","import React from \"react\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeMenuGroupProps } from \"./MenuGroupTypes\";\nimport { StyledMenuGroup, StyledTitle, StyledMenuGroupUl } from \"./styles\";\nimport { mapMenuItems } from \"../hooks/useMenuChildren\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup\n *\n * @description MenuGroup is used to group lists of {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems}.\n *\n * @example\n * <ActionMenu>\n * <MenuContent>\n * <MenuGroup title=\"Group 1\" id=\"1\">\n * <MenuItem>Item 1</MenuItem>\n * </MenuGroup>\n * <MenuGroup title=\"Group 2\" id=\"2\">\n * <MenuItem>Item 2</MenuItem>\n * </MenuGroup>\n * </MenuContent>\n * </ActionMenu>\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItem}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menucontent MenuContent}\n */\n\nconst MenuGroup = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n titleAs = \"div\",\n children: childrenProp,\n title,\n color,\n isSingleSelect,\n id,\n menuItems,\n MenuItemComponent,\n ...rest\n}: TypeMenuGroupProps<I>) => {\n // Generate a unique ID for the title\n const titleId = `menu-group-title-${Math.random().toString(36).slice(2, 11)}`;\n\n const children =\n childrenProp || !menuItems || !menuItems.length\n ? childrenProp\n : mapMenuItems({ menuItems, MenuItemComponent });\n\n if (!children) {\n return null;\n }\n return (\n // role=\"none\" on the outer <li>: this wrapper is purely visual (it exists\n // for the border-bottom divider between groups in the parent menu <ul>).\n // The ARIA group semantics live on the inner <ul> below — axe rejects\n // role=\"group\" on <li>, and a native <ul> here would trigger the `list`\n // rule because its children are <li role=\"none\"> menuitem wrappers.\n //\n // TODO(DS-4273): drop the list-based DOM entirely (MenuContent/MenuGroup\n // as <div>, no <ul>/<li>, no role=\"none\" wrappers). This is the followup\n // to DS-4271's minimal ARIA patch.\n <StyledMenuGroup\n role=\"none\"\n id={id}\n isSingleSelect={isSingleSelect}\n // TODO: fix this type since `color` should be valid here. TS can't resolve the correct type.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n color={color}\n {...rest}\n >\n {title && (\n <StyledTitle as={titleAs} id={titleId}>\n {title}\n </StyledTitle>\n )}\n <StyledMenuGroupUl\n role=\"group\"\n aria-labelledby={title ? titleId : undefined}\n >\n {children}\n </StyledMenuGroupUl>\n </StyledMenuGroup>\n );\n};\n\nMenuGroup.__MENU_PRIMITIVE_TYPE = \"MenuGroup\";\n\nexport { MenuGroup };\n","import styled from \"styled-components\";\nimport Text from \"@sproutsocial/seeds-react-text\";\nimport {\n border,\n layout,\n position,\n flexbox,\n grid,\n color,\n space,\n} from \"styled-system\";\nimport type { TypeMenuGroupBaseProps } from \"./MenuGroupTypes\";\n\nexport const StyledMenuGroup = styled.li<TypeMenuGroupBaseProps>`\n &:not(:last-child) {\n border-bottom: 1px solid\n ${({ theme }) => theme.colors.container.border.base};\n }\n list-style: none;\n margin: 0;\n\n ${border}\n ${position}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n`;\n\nexport const StyledTitle = styled(Text.SmallSubHeadline)`\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n margin: ${({ theme }) => theme.space[400]} ${({ theme }) => theme.space[400]}\n 0px ${({ theme }) => theme.space[400]};\n`;\n\nexport const StyledMenuGroupUl = styled.ul`\n margin: 0;\n padding: 0;\n`;\n","import React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n type RefObject,\n} from \"react\";\nimport styled from \"styled-components\";\nimport {\n Popout,\n type TypePopoutProps,\n type EnumPlacements,\n} from \"@sproutsocial/seeds-react-popout\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\n\nimport {\n MenuContentProvider,\n MenuToggleProvider,\n type TypeMenuContextProps,\n type TypeMenuProviderProps,\n useMenu,\n} from \"../MenuContext\";\nimport { MOTION_DURATION_FAST } from \"@sproutsocial/seeds-motion/unitless\";\n\nexport interface TypeMenuRootOwnProps {\n /** The element that is or contains an element that will toggle the menu when clicked.\n * May contain labels, buttons, inputs or other content as needed. */\n menuToggleElement: React.ReactElement<any>;\n /** Props to pass through to the underlying Popout.\n * Any Popout prop is valid except those explicitly omitted. */\n popoutProps?: Partial<\n Omit<TypePopoutProps, \"isOpen\" | \"setIsOpen\" | \"content\" | \"children\">\n >;\n /** The width of the Popout content.\n * Defaults to 200px or the width of the toggle element, whichever is greater.*/\n width?: TypePopoutProps[\"width\"];\n}\nexport interface TypeMenuRootProps\n extends Partial<TypeMenuContextProps>,\n Pick<TypeMenuProviderProps, \"children\">,\n TypeMenuRootOwnProps {}\n\nexport const CustomPopoutContent = styled(Popout.Content)`\n padding: 0;\n margin-left: 0;\n margin-right: 0;\n overflow: hidden;\n`;\n\nexport const menuPlacementOrigin: {\n [key in EnumPlacements]?: { originX: number; originY: number };\n} = {\n top: { originX: 0.5, originY: 1 },\n [\"top-start\"]: { originX: 0, originY: 1 },\n [\"top-end\"]: { originX: 1, originY: 1 },\n bottom: { originX: 0.5, originY: 0 },\n [\"bottom-start\"]: { originX: 0, originY: 0 },\n [\"bottom-end\"]: { originX: 1, originY: 0 },\n left: { originX: 1, originY: 0.5 },\n [\"left-start\"]: { originX: 1, originY: 0 },\n [\"left-end\"]: { originX: 1, originY: 1 },\n right: { originX: 0, originY: 0.5 },\n [\"right-start\"]: { originX: 0, originY: 0 },\n [\"right-end\"]: { originX: 0, originY: 1 },\n};\n\nexport const menuAnimationConfig = {\n variants: {\n initial: (\n custom: { placement: EnumPlacements } = { placement: \"bottom\" }\n ) => ({\n ...menuPlacementOrigin[custom.placement],\n scale: 0,\n opacity: 0,\n }),\n animate: (\n custom: { placement: EnumPlacements } = { placement: \"bottom\" }\n ) => ({\n ...menuPlacementOrigin[custom.placement],\n opacity: 1,\n scale: 1,\n\n transition: {\n type: \"tween\",\n duration: MOTION_DURATION_FAST,\n ease: \"circOut\",\n },\n }),\n exit: {\n opacity: 0,\n scale: 1,\n transition: {\n type: \"tween\",\n duration: MOTION_DURATION_FAST,\n ease: \"circIn\",\n },\n },\n },\n initial: \"initial\",\n animate: \"animate\",\n exit: \"exit\",\n};\n\nexport interface TypeMenuPopoutProps\n extends Pick<Partial<TypeMenuContextProps>, \"openMenu\" | \"closeMenu\">,\n TypePopoutProps {}\n\nexport const MenuPopout = ({\n content,\n width = \"300px\",\n isOpen,\n openMenu,\n closeMenu,\n focusLockProps,\n ...popoutProps\n}: TypeMenuPopoutProps) => {\n const setIsOpen = useCallback(\n (newIsOpen: boolean) => {\n newIsOpen ? openMenu?.() : closeMenu?.();\n },\n [openMenu, closeMenu]\n );\n\n return (\n <Popout\n isOpen={!!isOpen}\n setIsOpen={setIsOpen}\n content={(props) => (\n <CustomPopoutContent width={popoutProps.fullWidth ? \"initial\" : width}>\n {typeof content === \"function\" ? content(props) : content}\n </CustomPopoutContent>\n )}\n focusLockProps={{\n // correct jerking motion when scrolling while the Popout is open\n // returnFocus: false,\n crossFrame: false,\n ...focusLockProps,\n }}\n disableWrapperAria\n animationConfig={menuAnimationConfig}\n {...popoutProps}\n />\n );\n};\n\n/**\n * @description MenuRoot is a utility component used to handle React Context for our Menus. This component should rarely, if ever, be used directly unless building a custom menu type.\n */\n\nexport const MenuRoot = ({\n children,\n menuToggleElement,\n popoutProps: { placement = \"bottom\", focusLockProps, ...popoutProps } = {},\n width,\n ...contextProps\n}: TypeMenuRootProps) => {\n const {\n isOpen,\n openMenu,\n closeMenu,\n inputValue,\n getMenuProps,\n autoCloseOnEmpty = false,\n } = contextProps;\n\n const toggleElementRef = React.useRef<HTMLElement>(null);\n const [finalWidth, setFinalWidth] = React.useState<typeof width>();\n\n const min_width = 200;\n\n useLayoutEffect(() => {\n if (width) {\n setFinalWidth(width);\n } else if (toggleElementRef.current?.offsetWidth) {\n const toggleWidth = toggleElementRef.current.offsetWidth;\n setFinalWidth(Math.max(toggleWidth, min_width));\n } else {\n setFinalWidth(min_width);\n }\n }, [width, toggleElementRef.current?.offsetWidth]);\n\n const menuContext = useMenu(contextProps);\n\n // Hack to suppress error: \"downshift: You forgot to call the getMenuProps getter function on your component / element.\"\n getMenuProps?.({}, { suppressRefError: true });\n\n useEffect(() => {\n if (!inputValue || !autoCloseOnEmpty) return;\n\n if (!menuContext.hasVisibleItems && isOpen) {\n closeMenu?.();\n }\n }, [menuContext.hasVisibleItems, isOpen, inputValue, autoCloseOnEmpty]);\n\n return (\n <MenuPopout\n placement={placement}\n isOpen={!!isOpen}\n openMenu={openMenu}\n closeMenu={closeMenu}\n content={\n <MenuContentProvider menuContext={menuContext}>\n {children}\n </MenuContentProvider>\n }\n width={finalWidth}\n {...popoutProps}\n >\n {(toggleProps) => (\n <MenuToggleProvider\n menuContext={{\n ...menuContext,\n ...toggleProps,\n ref: mergeRefs<HTMLElement>(\n toggleProps.ref,\n toggleElementRef\n ) as RefObject<HTMLElement>,\n }}\n >\n {menuToggleElement}\n </MenuToggleProvider>\n )}\n </MenuPopout>\n );\n};\n","import React from \"react\";\nimport { Label, type TypeLabelProps } from \"@sproutsocial/seeds-react-label\";\nimport { useMenuToggleContext } from \"./MenuContext\";\n\nexport interface TypeMenuLabelProps extends Omit<TypeLabelProps, \"htmlFor\"> {\n // The children and required types are redundant, but they power the MenuLabel PropTable.\n children: React.ReactNode;\n /** Whether making a selection in the associated menu is required. */\n required?: boolean;\n /** ID of the associated form element. This prop is never valid to pass into MenuLabel\n * because MenuLabel passes its own htmlFor prop to the underlying Label component.*/\n htmlFor?: never;\n}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menulabel\n *\n * @description MenuLabel extends Label to create an accessible label for a Menu's toggle element.\n * A MenuLabel will automatically be associated with the corresponding menuToggleElement,\n * so an `htmlFor` prop is not necessary or allowed.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menutogglebutton MenuToggleButton}\n * @see {@link https://seeds.sproutsocial.com/components/label/ Label}\n */\nexport const MenuLabel = ({\n children,\n required = false,\n ...rest\n}: TypeMenuLabelProps) => {\n const { getLabelProps } = useMenuToggleContext();\n return (\n // This fallback id should never be used, but it is here to satisfy TypeScript since getLabelProps could be undefined.\n <Label\n htmlFor=\"fallback_menu_label\"\n required={required}\n {...getLabelProps?.()}\n {...rest}\n >\n {children}\n </Label>\n );\n};\n","import { Button, type TypeButtonProps } from \"@sproutsocial/seeds-react-button\";\nimport { useMenuToggleContext } from \"../MenuContext\";\nimport type React from \"react\";\n\nexport interface TypeMenuToggleButtonProps extends TypeButtonProps {}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menutogglebutton\n * @param props - MenuToggleButton accepts all the same props as Button.\n * @description MenuToggleButton extends the Button component to create a toggle for a menu.\n * @see {@link https://seeds.sproutsocial.com/components/button/ Button}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menulabel MenuLabel}\n */\nexport const MenuToggleButton = (props: TypeMenuToggleButtonProps) => {\n const { getToggleButtonProps, isListbox, getDropdownProps, ref, ariaProps } =\n useMenuToggleContext();\n\n const {\n onClick: userOnClick,\n onKeyDown: userOnKeyDown,\n onBlur: userOnBlur,\n ...restProps\n } = props;\n\n const defaultDropdownProps = {\n ref,\n onClick: userOnClick,\n onKeyDown: userOnKeyDown,\n onBlur: userOnBlur,\n };\n\n const dropdownProps =\n getDropdownProps?.({\n ...defaultDropdownProps,\n preventKeyAction: true,\n }) ?? defaultDropdownProps;\n\n const toggleButtonProps = getToggleButtonProps?.({\n ...dropdownProps,\n refKey: \"innerRef\",\n ...ariaProps,\n ...(isListbox ? {} : { role: \"button\", \"aria-haspopup\": \"menu\" }),\n });\n\n // Clean up default downshift aria attributes\n // If there is not an active descendant, remove the attribute\n if (toggleButtonProps && toggleButtonProps[\"aria-activedescendant\"] === \"\") {\n toggleButtonProps[\"aria-activedescendant\"] = undefined;\n }\n // If the menu is closed, remove the aria-controls attribute\n if (toggleButtonProps && toggleButtonProps[\"aria-expanded\"] === false) {\n // @ts-expect-error downshift types require aria-controls even though it is not required\n toggleButtonProps[\"aria-controls\"] = undefined;\n }\n // Remove aria-labelledby, we add our own Label component\n if (toggleButtonProps) {\n toggleButtonProps[\"aria-labelledby\"] = undefined;\n }\n\n return (\n <Button appearance=\"secondary\" {...toggleButtonProps} {...restProps} />\n );\n};\n","import React from \"react\";\nimport { Input, type TypeInputProps } from \"@sproutsocial/seeds-react-input\";\nimport {\n useItemFiltering,\n type TypeGetIsItemVisibleFn,\n} from \"../hooks/useItemFiltering\";\nimport {\n useMenuContentContext,\n type TypeDownshiftSelectReturnValue,\n} from \"../MenuContext\";\n\nexport interface TypeMenuSearchInputProps extends TypeInputProps {\n /** A function that can be passed to override the default filtering logic */\n getIsItemVisible?: TypeGetIsItemVisibleFn;\n}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput\n *\n * @description MenuSearchInput is search input that can be added to the MenuHeader to filter the items.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader MenuHeader}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput MenuSearchTokenInput}\n */\nexport const MenuSearchInput = ({\n getIsItemVisible,\n inputProps,\n onChange,\n \"aria-label\": ariaLabel,\n ...restInputProps\n}: TypeMenuSearchInputProps) => {\n const {\n items,\n itemToString,\n setHiddenItemsMap,\n isOpen,\n getToggleButtonProps,\n } = useMenuContentContext();\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems: items,\n itemToString,\n getIsItemVisible,\n setHiddenItemsMap,\n });\n\n React.useEffect(() => {\n // handles when open/close state changes or if input is controlled\n updateFilteredItems({ inputValue: restInputProps.value || \"\" });\n }, [isOpen, restInputProps.value]);\n\n const toggleButtonProps: Partial<\n ReturnType<Required<TypeDownshiftSelectReturnValue>[\"getToggleButtonProps\"]>\n > = getToggleButtonProps?.() || {};\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n // prevents selecting items with space key when input is focused\n if (e.key === \" \") return;\n toggleButtonProps.onKeyDown?.(e);\n },\n [toggleButtonProps.onKeyDown]\n );\n\n return (\n <Input\n onChange={(e, value) => {\n updateFilteredItems({ inputValue: value });\n onChange?.(e, value);\n }}\n // apply onKeyDown logic for downshift keyboard accessibility support\n onKeyDown={handleKeyDown}\n autoComplete={false}\n ariaLabel={ariaLabel}\n inputProps={{\n [\"aria-autocomplete\"]: \"list\",\n [\"aria-activedescendant\"]: toggleButtonProps[\"aria-activedescendant\"],\n [\"aria-controls\"]: toggleButtonProps[\"aria-controls\"],\n ...inputProps,\n }}\n {...restInputProps}\n />\n );\n};\n","import React from \"react\";\nimport type { TypeMenuContext } from \"../MenuContext\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { itemToString as defaultItemToString } from \"../utils/downshiftDefaults\";\n\n/* Receives the internal Downshift version of the item, which is different from TypeMenuItemProps*/\nexport type TypeGetIsItemVisibleFn = (\n item: TypeInternalItemProps,\n inputValue: string\n) => boolean;\n\n/**\n * @description A function to get the default getIsItemVisible function\n *\n * @param itemToString - A function to convert an item to a string\n *\n * @returns The default getIsItemVisible function\n */\nexport const getDefaultGetIsItemVisible =\n (\n itemToString: TypeMenuContext[\"itemToString\"] = defaultItemToString\n ): TypeGetIsItemVisibleFn =>\n (item, inputValue) =>\n itemToString(item).toLowerCase().includes(inputValue.toLowerCase());\n\nexport type TypeGetShouldFilterFn = (arg: { inputValue?: string }) => boolean;\n\nexport const defaultGetShouldFilter: TypeGetShouldFilterFn = ({ inputValue }) =>\n Boolean(inputValue);\n\nexport interface TypeItemFilteringProps {\n allMenuItems: TypeInternalItemProps[];\n itemToString?: TypeMenuContext[\"itemToString\"];\n getIsItemVisible?: TypeGetIsItemVisibleFn;\n getShouldFilter?: TypeGetShouldFilterFn;\n setHiddenItemsMap?: TypeMenuContext[\"setHiddenItemsMap\"];\n}\n\nexport const useItemFiltering = ({\n allMenuItems,\n itemToString,\n getIsItemVisible = getDefaultGetIsItemVisible(itemToString),\n getShouldFilter = defaultGetShouldFilter,\n setHiddenItemsMap: setHiddenItemsMapProp,\n}: TypeItemFilteringProps) => {\n const [hiddenItemsMap, setHiddenItemsMap] = React.useState<\n Required<TypeMenuContext>[\"hiddenItemsMap\"]\n >({});\n\n const updateFilteredItems = React.useCallback(\n ({ inputValue }) => {\n const newHiddenItems = getShouldFilter({ inputValue })\n ? allMenuItems.reduce((map, item) => {\n const isItemVisible = getIsItemVisible(item, inputValue);\n return isItemVisible ? map : { ...map, [item.id]: true };\n }, {} as typeof hiddenItemsMap)\n : {};\n\n setHiddenItemsMap(newHiddenItems);\n setHiddenItemsMapProp?.(newHiddenItems);\n },\n [allMenuItems, getIsItemVisible, getShouldFilter]\n );\n\n return {\n getIsItemVisible,\n updateFilteredItems,\n };\n};\n","import type { TypeInternalItemProps } from \"../types\";\n\nexport const itemToString = (item: TypeInternalItemProps | null) => {\n return item ? item.id : \"\";\n};\n\nexport const itemToKey = (item: TypeInternalItemProps | null) => {\n return item ? item.id : \"\";\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n TokenInput,\n type TypeTokenInputProps,\n type TypeTokenSpec,\n} from \"@sproutsocial/seeds-react-token-input\";\nimport type { TypeInternalItemProps } from \"./types\";\nimport { MenuContentContext, MenuToggleContext } from \"./MenuContext\";\n\nconst StyledTokenInputWrapper = styled.div`\n > div {\n padding: 4px;\n }\n\n input {\n line-height: 21px;\n margin: 0;\n padding: 2px 4px;\n }\n\n .TokenInput-token button {\n margin-top: 0;\n padding: 1px 4px;\n }\n`;\n\nexport interface TypeMenuTokenInputProps extends TypeTokenInputProps {\n /** A function that can be passed to override the default token props */\n getTokenProps?: (itemId: string) => Partial<TypeTokenSpec>;\n /** Specify the menu context to use. MenuToggleContext is the default.\n * This prop is only needed for specialized use cases. */\n MenuContext?: typeof MenuToggleContext | typeof MenuContentContext;\n}\n\n/**\n * @description MenuTokenInput is the basis of the MenuSearchTokenInput and AutocompleteTokenInput components\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput MenuSearchInput}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput MenuSearchTokenInput}\n */\nexport const MenuTokenInput = ({\n inputProps = {},\n getTokenProps,\n onKeyDown,\n MenuContext = MenuToggleContext,\n ...tokenInputProps\n}: TypeMenuTokenInputProps) => {\n const {\n itemToString,\n getSelectedItemProps,\n removeSelectedItem,\n setActiveIndex,\n selectedItems = [],\n } = React.useContext(MenuContext);\n\n const removeToken = (tokenId: string) => {\n const tokenToRemove = selectedItems?.find((item) => item.id === tokenId);\n tokenToRemove && removeSelectedItem?.(tokenToRemove);\n };\n\n return (\n <StyledTokenInputWrapper>\n <TokenInput\n onKeyDown={(e, value) => {\n // set active index to last item when arrow left is pressed and input is empty\n if (e.key === \"ArrowLeft\" && !value && selectedItems.length) {\n setActiveIndex?.(selectedItems.length - 1);\n }\n onKeyDown?.(e, value);\n }}\n inputProps={{\n autoComplete: \"off\",\n type: \"search\",\n ...inputProps,\n }}\n tokens={selectedItems.map((item, index) => {\n const {\n tokenProps: { ref, onKeyDown, ...restTokenProps } = {\n ref: undefined,\n onKeyDown: undefined,\n },\n ...rest\n } = getTokenProps?.(item.id) || {};\n return {\n id: item.id,\n value: itemToString?.(item) || item.id,\n tokenProps: {\n ...getSelectedItemProps?.({\n selectedItem: item,\n index,\n ref,\n refKey: \"innerRef\",\n onKeyDown,\n }),\n // nullify the onclick provided from downshift\n // TokenInput deletes the token on click\n onClick: undefined,\n tabIndex: 0,\n ...restTokenProps,\n },\n ...rest,\n };\n })}\n onRemoveToken={removeToken}\n {...tokenInputProps}\n />\n </StyledTokenInputWrapper>\n );\n};\n","import React from \"react\";\nimport {\n useItemFiltering,\n type TypeGetIsItemVisibleFn,\n} from \"../hooks/useItemFiltering\";\nimport {\n MenuContentContext,\n useMenuContentContext,\n type TypeDownshiftSelectReturnValue,\n} from \"../MenuContext\";\nimport {\n MenuTokenInput,\n type TypeMenuTokenInputProps,\n} from \"../MenuTokenInput\";\n\nexport interface TypeMenuSearchTokenInputProps extends TypeMenuTokenInputProps {\n /** A function that can be passed to override the default filtering logic */\n getIsItemVisible?: TypeGetIsItemVisibleFn;\n}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput\n *\n * @description MenuSearchTokenInput is a token input that can be added to the MenuHeader to filter the items.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader MenuHeader}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput MenuSearchInput}\n */\nexport const MenuSearchTokenInput = ({\n getIsItemVisible,\n getTokenProps,\n onChange,\n inputProps: { value: inputPropsValue, ...inputProps } = {},\n value,\n ...tokenInputProps\n}: TypeMenuSearchTokenInputProps) => {\n const {\n items,\n itemToString,\n setHiddenItemsMap,\n isOpen,\n getToggleButtonProps,\n } = useMenuContentContext();\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems: items,\n itemToString,\n getIsItemVisible,\n setHiddenItemsMap,\n });\n\n // set controlled value\n const controlledValue =\n value || inputPropsValue !== undefined ? `${inputPropsValue}` : undefined;\n\n // internal state helps to keep track of the input value since it sometimes resets on its own\n const [internalValue, setInternalValue] = React.useState(\n controlledValue || \"\"\n );\n\n // any time state is updated, also update the filtered items\n const updateFilteredState = React.useCallback(\n // defaults to an empty string if no value is passed\n (value: string = \"\") => {\n setInternalValue(value);\n updateFilteredItems({ inputValue: value });\n },\n [updateFilteredItems]\n );\n\n React.useEffect(() => {\n // handles when input is controlled to keep internal state updated\n updateFilteredState(controlledValue);\n }, [controlledValue]);\n\n React.useEffect(() => {\n // handles when open/close state changes\n updateFilteredState(controlledValue);\n }, [isOpen]);\n\n const toggleButtonProps: Partial<\n ReturnType<Required<TypeDownshiftSelectReturnValue>[\"getToggleButtonProps\"]>\n > = getToggleButtonProps?.() || {};\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n // prevents selecting items with space key when input is focused\n if (e.key === \" \") return;\n toggleButtonProps.onKeyDown?.(e);\n },\n [toggleButtonProps.onKeyDown]\n );\n\n return (\n <MenuTokenInput\n onChange={(e, value) => {\n updateFilteredState(value);\n onChange?.(e, value);\n }}\n // apply onKeyDown logic for downshift keyboard accessibility support\n onKeyDown={handleKeyDown}\n inputProps={{\n value: internalValue,\n [\"aria-activedescendant\"]: toggleButtonProps[\"aria-activedescendant\"],\n [\"aria-controls\"]: toggleButtonProps[\"aria-controls\"],\n ...inputProps,\n }}\n MenuContext={MenuContentContext}\n {...tokenInputProps}\n />\n );\n};\n","import React from \"react\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { getChildrenFromMenuItems } from \"../hooks/useMenuChildren\";\nimport { useMenuContentContext, useMenuToggleContext } from \"../MenuContext\";\nimport {\n MenuItem,\n MenuItemActionRight,\n type TypeMenuItemProps,\n} from \"../MenuItem\";\nimport type {\n TypeSubmenuItemProps,\n TypeSubmenuValidMenuComponentProps,\n} from \"./SubmenuItemTypes\";\n\nconst SubmenuItemTrigger = ({\n id,\n children,\n innerRef,\n ...rest\n}: TypeMenuItemProps) => {\n const { getToggleButtonProps, getDropdownProps, ref, ariaProps } =\n useMenuToggleContext();\n const toggleRef =\n ref && innerRef\n ? mergeRefs([ref, innerRef].filter(Boolean))\n : ref || innerRef;\n return (\n <MenuItem\n {...rest}\n {...getToggleButtonProps?.(\n {\n ...(getDropdownProps?.({\n ref: toggleRef,\n preventKeyAction: true,\n }) || { ref: toggleRef }),\n refKey: \"innerRef\",\n role: \"menuitem\",\n ...ariaProps,\n },\n { suppressRefError: true }\n )}\n id={id}\n >\n <Box display=\"flex\" justifyContent=\"space-between\">\n {children}\n <MenuItemActionRight>\n <Icon name=\"chevron-right-outline\" />\n </MenuItemActionRight>\n </Box>\n </MenuItem>\n );\n};\n\nconst doesRefContainEventTarget = (\n ref: React.RefObject<HTMLElement | undefined>,\n event: MouseEvent\n) => {\n return (\n ref.current &&\n event.target instanceof Node &&\n ref.current.contains(event.target)\n );\n};\n\nconst SubmenuItem = <\n I extends TypeMenuItemProps,\n P extends TypeSubmenuValidMenuComponentProps<I>\n>({\n MenuComponent,\n menuProps: {\n children: menuChildren,\n menuItems,\n MenuItemComponent,\n popoutProps: { popperProps, ...popoutProps } = {},\n onStateChange,\n ...menuProps\n },\n // isOpen,\n // onToggleSubmenu,\n id,\n children,\n ...rest\n}: TypeSubmenuItemProps<I, P>) => {\n const {\n highlightedIndex,\n setHighlightedIndex,\n itemsMap,\n isOpen: parentIsOpen,\n } = useMenuContentContext();\n const [submenuIsFocused, setSubmenuIsFocused] = React.useState(false);\n const [submenuIsOpen, setSubmenuIsOpen] = React.useState(false);\n const [submenuIsActive, setSubmenuIsActive] = React.useState(false);\n const submenuItemRef = React.useRef<HTMLElement>(null);\n const submenuRef = React.useRef<HTMLDivElement>(null);\n\n // get children for both use cases so it can be wrapped in a submenu div\n const menuContent = menuItems\n ? getChildrenFromMenuItems({ menuItems, MenuItemComponent })\n : menuChildren;\n\n const item = (itemsMap[id] || {\n index: 0,\n id,\n }) as TypeInternalItemProps;\n\n // React.useEffect(() => {\n // debugger;\n // // reset isOpen on render\n // setSubmenuIsOpen(false);\n // setSubmenuIsActive(false);\n // }, []);\n\n React.useEffect(() => {\n if (highlightedIndex === item.index) {\n // Open submenu when item becomes highlighted\n !submenuIsOpen && setSubmenuIsOpen(true);\n } else if (submenuIsOpen && highlightedIndex !== -1) {\n // Close submenu when another item is highlighted\n setSubmenuIsOpen(false);\n setSubmenuIsActive(false);\n }\n }, [highlightedIndex, item.index, submenuIsOpen, setSubmenuIsOpen]);\n\n const onSubmenuStateChange = React.useCallback(\n (state) => {\n if (state.isOpen !== undefined) {\n // Ensures the menu opens and closes when the state changes\n setSubmenuIsOpen(state.isOpen);\n if (!state.isOpen) {\n // Reset the submenu focus and highlighted index when the submenu closes\n setSubmenuIsFocused(false);\n setHighlightedIndex?.(-1);\n }\n }\n onStateChange?.(state);\n },\n [onStateChange, setSubmenuIsOpen]\n );\n\n // Callback for navigating the submenu wit harrow keys\n const onSubmenuKeydown = (e: KeyboardEvent): void => {\n switch (e.key) {\n case \"ArrowRight\":\n case \" \":\n case \"Enter\":\n // Focus the submenu if item highlighted and right arrow key is pressed\n if (!submenuIsFocused && submenuIsOpen) {\n // stop propagation to avoid interacting with other components\n e.stopPropagation();\n setSubmenuIsFocused(true);\n }\n break;\n case \"ArrowLeft\":\n // Return focus to the parent menu if submenu is focused and left arrow key is pressed\n if (submenuIsFocused) {\n // stop propagation to avoid interacting with other components\n e.stopPropagation();\n setSubmenuIsFocused(false);\n }\n break;\n default:\n break;\n }\n };\n\n const onMenuItemClick = () => {\n const newIsActive = !submenuIsActive;\n // Lock the submenu in an active open state when clicked\n // or close the menu and unlock if it is open\n setSubmenuIsActive(newIsActive);\n setSubmenuIsOpen(newIsActive);\n };\n\n const onBodyClick = (e: MouseEvent): void => {\n // Prevent closing the parent menu when clicking on the submenu item\n if (doesRefContainEventTarget(submenuItemRef, e)) {\n e.stopPropagation();\n onMenuItemClick();\n }\n // Prevent closing other popouts when clicking on inside the submenu\n // This doesn't work because it's overridden by the logic in Popout the closes when clicked outside\n // if (doesRefContainEventTarget(submenuRef, e)) {\n // e.stopPropagation();\n // }\n };\n\n React.useEffect(() => {\n if (document && document.body) {\n document.body.addEventListener(\"click\", onBodyClick, {\n capture: true,\n });\n document.body.addEventListener(\"keydown\", onSubmenuKeydown, {\n capture: true,\n });\n return () => {\n document.body.removeEventListener(\"click\", onBodyClick, {\n capture: true,\n });\n document.body.removeEventListener(\"keydown\", onSubmenuKeydown, {\n capture: true,\n });\n };\n }\n }, [document, onSubmenuKeydown]);\n\n const subMenuContent = (\n <div\n ref={submenuRef}\n onKeyDown={(e) => {\n // prevent keydown on submenu triggering the parent menu\n e.stopPropagation();\n }}\n tabIndex={-1}\n >\n {menuContent}\n </div>\n );\n\n return (\n <MenuComponent\n {...({\n ...menuProps,\n children: subMenuContent,\n menuToggleElement: (\n <SubmenuItemTrigger\n innerRef={submenuItemRef}\n id={id}\n children={children}\n active={submenuIsActive}\n {...rest}\n />\n ),\n isOpen: submenuIsOpen,\n onStateChange: onSubmenuStateChange,\n popoutProps: {\n placement: \"right\",\n popperProps: {\n modifiers: {\n offset: {\n offset: \"0,18\",\n },\n },\n ...popperProps,\n },\n focusOnContent: submenuIsFocused,\n ...popoutProps,\n },\n } as P)}\n />\n );\n};\n\nSubmenuItem.__MENU_PRIMITIVE_TYPE = \"MenuItem\";\n\nexport { SubmenuItem };\n","import styled, { css } from \"styled-components\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport {\n MenuToggleButton,\n type TypeMenuToggleButtonProps,\n} from \"./MenuToggleButton\";\nimport { useMenuToggleContext } from \"./MenuContext\";\n\nexport interface TypeListboxToggleButtonProps\n extends TypeMenuToggleButtonProps {\n invalid?: boolean;\n size?: \"small\" | \"default\" | \"large\";\n}\n\nexport const StyledListboxToggleButton = styled(\n MenuToggleButton\n)<TypeListboxToggleButtonProps>`\n background-color: ${(props) => props.theme.colors.form.background.base};\n border: 1px solid ${(props) => props.theme.colors.form.border.base};\n border-radius: ${(props) => props.theme.radii[500]};\n transition: border-color ${(props) => props.theme.duration.fast}\n ${(props) => props.theme.easing.ease_in},\n box-shadow ${(props) => props.theme.duration.fast}\n ${(props) => props.theme.easing.ease_in};\n font-weight: ${(props) => props.theme.fontWeights.normal};\n &:active {\n transform: none;\n }\n\n padding: ${(props) => {\n switch (props.size) {\n case \"large\":\n return `${props.theme.space[400]} ${props.theme.space[400]} ${props.theme.space[400]} ${props.theme.space[400]}`;\n\n case \"small\":\n return `${props.theme.space[200]} ${props.theme.space[200]} ${props.theme.space[200]} ${props.theme.space[200]}`;\n\n case \"default\":\n default:\n return `${props.theme.space[300]} ${props.theme.space[300]} ${props.theme.space[300]} ${props.theme.space[300]}`;\n }\n }};\n font-size: ${(props) => {\n switch (props.size) {\n case \"large\":\n return props.theme.typography[300].fontSize;\n\n case \"small\":\n case \"default\":\n default:\n return props.theme.typography[200].fontSize;\n }\n }};\n\n ${(props) =>\n props.invalid &&\n css`\n border-color: ${(props) => props.theme.colors.form.border.error};\n `}\n`;\n\nexport interface TypeStyledChevronProps {\n $isOpen?: boolean;\n invalid?: boolean;\n}\n\nconst StyledChevron = styled.div<TypeStyledChevronProps>`\n margin-left: ${({ theme }) => theme.space[300]};\n ${({ $isOpen }) =>\n $isOpen &&\n `\n\t\ttransform: rotate(-180deg);\n\t`}\n transition: transform 0.15s;\n\n ${({ invalid }) =>\n invalid &&\n css`\n color: ${(props) => props.theme.colors.icon.error};\n `}\n`;\n\nconst StyledInnerButton = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nexport const ListboxToggleButton = ({\n children,\n size = \"default\",\n ...buttonProps\n}: TypeListboxToggleButtonProps) => {\n const { isOpen } = useMenuToggleContext();\n return (\n <StyledListboxToggleButton\n appearance=\"unstyled\"\n size={size}\n {...buttonProps}\n >\n <StyledInnerButton>\n {children}\n <StyledChevron $isOpen={isOpen} invalid={buttonProps.invalid}>\n <Icon name=\"chevron-down-outline\" fixedWidth aria-hidden />\n </StyledChevron>\n </StyledInnerButton>\n </StyledListboxToggleButton>\n );\n};\n","import React, { useEffect } from \"react\";\nimport {\n useSelect,\n type UseSelectState,\n type UseSelectStateChange,\n} from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { itemToString } from \"../utils/downshiftDefaults\";\nimport { MenuRoot } from \"../MenuRoot\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\n\nimport type { TypeActionMenuProps } from \"./ActionMenuTypes\";\n\n// Manually fire the onClick handler when Enter or Space is pressed\nconst handleStateChange = (\n changes: UseSelectStateChange<TypeInternalItemProps>,\n currentSelectedItem: UseSelectState<TypeInternalItemProps>[\"selectedItem\"]\n) => {\n // if not Enter or Space key, do nothing\n if (\n !(\n changes.type === useSelect.stateChangeTypes.ToggleButtonKeyDownEnter ||\n changes.type === useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton\n )\n ) {\n return;\n }\n\n const selectedItem = changes.selectedItem || currentSelectedItem;\n\n // if selectedItem empty, do nothing\n if (!selectedItem) return;\n\n // if selectedItem is disabled, do nothing\n if (selectedItem.disabled) {\n return;\n }\n\n // Determine if Enter key was pressed\n const isEnterKeyDown =\n changes.type === useSelect.stateChangeTypes.ToggleButtonKeyDownEnter;\n\n // selectedItem props\n const selectedItemProps = selectedItem.menuItemProps;\n\n if (selectedItemProps?.onClick) {\n // Create a synthetic event to pass into the onClick\n const syntheticKeyboardEvent = new KeyboardEvent(\"keydown\", {\n key: isEnterKeyDown ? \"Enter\" : \" \",\n code: isEnterKeyDown ? \"Enter\" : \"Space\",\n bubbles: true,\n cancelable: true,\n view: window,\n });\n\n // Manually call the onClick handler with a simulated event\n // Cast it to React.MouseEvent to match onClick expectations\n selectedItemProps?.onClick?.(\n syntheticKeyboardEvent as unknown as React.MouseEvent<HTMLElement>\n );\n }\n\n if (selectedItemProps?.href) {\n if (selectedItemProps.target) {\n window.open(selectedItemProps.href, selectedItemProps.target);\n } else {\n window.location.href = selectedItemProps?.href;\n }\n }\n};\n\n/**\n * @link https://seeds.sproutsocial.com/components/action-menu/\n *\n * @description An ActionMenu contains a list of clickable items like buttons or links. ActionMenus do not hold a selection.\n *\n * **To select menu items:**\n * @see {@link https://seeds.sproutsocial.com/components/single-select-menu SingleSelectMenu}\n * @see {@link https://seeds.sproutsocial.com/components/multi-select-menu MultiSelectMenu}\n */\nexport const ActionMenu = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n stateReducer: externalStateReducer,\n MenuRootComponent = MenuRoot,\n ...useSelectProps\n}: TypeActionMenuProps<I>) => {\n const { allMenuItems, menuItemsMap, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n });\n const [currentSelectedItem, setCurrentSelectedItem] =\n React.useState<UseSelectState<TypeInternalItemProps>[\"selectedItem\"]>(null);\n\n const { isOpen, ...useSelectReturnProps } = useSelect({\n ...defaultDownshiftProps.select,\n items: allMenuItems,\n itemToString,\n onStateChange: (changes) => handleStateChange(changes, currentSelectedItem),\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n externalStateReducer\n ),\n ...useSelectProps,\n });\n\n useEffect(() => {\n setCurrentSelectedItem(useSelectReturnProps.selectedItem);\n }, [useSelectReturnProps.selectedItem]);\n\n return (\n <MenuRootComponent\n {...{\n isListbox: false,\n items: allMenuItems,\n itemsMap: menuItemsMap,\n itemToString,\n isOpen,\n ...useSelectProps,\n ...useSelectReturnProps,\n ...restDefaults,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n\nexport default ActionMenu;\n","import React from \"react\";\nimport type {\n UseComboboxProps,\n UseSelectProps,\n UseMultipleSelectionProps,\n} from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport type {\n TypeMenuContextBaseProps,\n TypeDownshiftMultiSelectProps,\n} from \"../MenuContext\";\nimport {\n useComboboxStateReducer,\n useComboboxStateReducerForMulti,\n} from \"../reducers/useComboboxStateReducer\";\nimport {\n useSelectStateReducer,\n useSelectStateReducerForMulti,\n} from \"../reducers/useSelectStateReducer\";\nimport { getMultiSelectOverrides } from \"../utils/getMultiSelectOverrides\";\n\nexport const defaultUseSelectProps: Partial<\n UseSelectProps<TypeInternalItemProps>\n> = {\n stateReducer: useSelectStateReducer,\n};\n\nexport const defaultUseComboboxProps: Partial<\n UseComboboxProps<TypeInternalItemProps>\n> = {\n stateReducer: useComboboxStateReducer,\n};\n\nexport const defaultUseSelectPropsForMulti: Partial<\n UseSelectProps<TypeInternalItemProps>\n> = {\n stateReducer: useSelectStateReducerForMulti,\n};\n\nexport const defaultUseComboboxPropsForMulti: Partial<\n UseComboboxProps<TypeInternalItemProps>\n> = {\n stateReducer: useComboboxStateReducerForMulti,\n};\n\nexport interface TypeUseDownshiftDefaultsReturn\n extends Pick<\n Required<TypeMenuContextBaseProps>,\n \"hiddenItemsMap\" | \"setHiddenItemsMap\" | \"hiddenItemsCount\"\n > {\n defaultDownshiftProps: {\n select: Partial<UseSelectProps<TypeInternalItemProps>>;\n combobox: Partial<UseComboboxProps<TypeInternalItemProps>>;\n multi: Partial<UseMultipleSelectionProps<TypeInternalItemProps>>;\n };\n}\n\nexport const itemToKey = (item: TypeInternalItemProps | null) => item?.id;\n\nexport const useDownshiftDefaults = ({\n isCombobox = false,\n isMulti = false,\n multiSelectProps = {},\n}: {\n isCombobox?: boolean;\n isMulti?: boolean;\n multiSelectProps?: TypeDownshiftMultiSelectProps;\n} = {}): TypeUseDownshiftDefaultsReturn => {\n const [hiddenItemsMap, setHiddenItemsMap] = React.useState<\n Record<string, boolean>\n >({});\n const hiddenItemsCount = React.useMemo(\n () => Object.keys(hiddenItemsMap).filter(Boolean).length,\n [hiddenItemsMap]\n );\n const isItemDisabled = React.useCallback<\n Required<UseSelectProps<TypeInternalItemProps>>[\"isItemDisabled\"]\n >(\n (item) => Boolean(item.disabled || hiddenItemsMap[item.id]),\n [hiddenItemsMap]\n );\n\n return {\n hiddenItemsMap,\n hiddenItemsCount,\n setHiddenItemsMap,\n defaultDownshiftProps: {\n select: !isCombobox\n ? {\n itemToKey,\n // disabling while item.hidden so that hidden items are ignored by downshift\n isItemDisabled,\n ...(isMulti\n ? defaultUseSelectPropsForMulti\n : defaultUseSelectProps),\n }\n : {},\n combobox: isCombobox\n ? {\n itemToKey,\n // disabling while item.hidden so that hidden items are ignored by downshift\n isItemDisabled,\n ...(isMulti\n ? defaultUseComboboxPropsForMulti\n : defaultUseComboboxProps),\n }\n : {},\n multi: isMulti\n ? {\n itemToKey,\n // handles the prop name mapping for multi select\n ...getMultiSelectOverrides(multiSelectProps),\n }\n : {},\n },\n };\n};\n","import { useCombobox } from \"downshift\";\nimport type { UseComboboxProps } from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\n\nexport const useComboboxStateReducer: Required<\n UseComboboxProps<TypeInternalItemProps>\n>[\"stateReducer\"] = (state, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n /** If downshift is blurred by tabbing within the menu, stay open */\n case useCombobox.stateChangeTypes.InputBlur:\n return {\n ...changes,\n // keep menu open on blur\n isOpen: true,\n };\n\n /** Return standard change payload */\n default:\n return changes;\n }\n};\n\nexport const useComboboxStateReducerForMulti: Required<\n UseComboboxProps<TypeInternalItemProps>\n>[\"stateReducer\"] = reduceReducers(\n useComboboxStateReducer,\n (state, actionAndChanges) => {\n const { changes, type } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputBlur:\n return {\n ...changes,\n ...(changes.selectedItem && {\n inputValue: \"\",\n }),\n };\n default:\n return changes;\n }\n }\n);\n","export type TypeReducer<S extends Object, A extends { changes: Partial<S> }> = (\n state: S,\n action: A\n) => Partial<S>;\nexport const reduceReducers =\n <S extends Object, A extends { changes: Partial<S> }>(\n ...reducers: (undefined | TypeReducer<S, A>)[]\n ): TypeReducer<S, A> =>\n (state, action) =>\n reducers.reduce(\n (changes, nextReducer) =>\n nextReducer\n ? nextReducer(state, {\n ...action,\n changes,\n })\n : changes,\n action.changes as Partial<S>\n );\n","import { useSelect } from \"downshift\";\nimport type { UseSelectProps } from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\n\nexport const useSelectStateReducer: Required<\n UseSelectProps<TypeInternalItemProps>\n>[\"stateReducer\"] = (state, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n switch (type) {\n /** If downshift is blurred by tabbing within the menu, stay open */\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n return {\n ...changes,\n // keep menu open on blur\n isOpen: true,\n };\n\n /** Return standard change payload */\n default:\n return changes;\n }\n};\n\nexport const useSelectStateReducerForMulti: Required<\n UseSelectProps<TypeInternalItemProps>\n>[\"stateReducer\"] = reduceReducers(\n useSelectStateReducer,\n (state, actionAndChanges) => {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep the menu open after selection.\n // TODO: Confirm that keeping highlightedIndex the same is the desired UX\n // highlightedIndex: 0, // with the first option highlighted.\n highlightedIndex: state.highlightedIndex, // keep highlightedIndex the same instead of returning to 0\n };\n }\n return changes;\n }\n);\n","import type { TypeDownshiftMultiSelectProps } from \"../MenuContext\";\n\nexport const getMultiSelectOverrides = ({\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps\n}: TypeDownshiftMultiSelectProps) =>\n Object.entries({\n ...useSelectProps,\n getA11yStatusMessage: getA11yMultiStatusMessage,\n onStateChange: onMultiSelectStateChange,\n stateReducer: multiSelectStateReducer,\n }).reduce(\n (a, [k, v]) => (v ? ((a[k] = v), a) : a),\n {} as {\n getA11yStatusMessage?: TypeDownshiftMultiSelectProps[\"getA11yMultiStatusMessage\"];\n onStateChange?: TypeDownshiftMultiSelectProps[\"onMultiSelectStateChange\"];\n stateReducer?: TypeDownshiftMultiSelectProps[\"multiSelectStateReducer\"];\n }\n );\n","import React from \"react\";\nimport { useSelect } from \"downshift\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { itemToString } from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { MenuRoot, type TypeMenuRootProps } from \"../MenuRoot\";\nimport type { TypeSingleSelectMenuProps } from \"./SingleSelectMenuTypes\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/single-select-menu/\n *\n * @description A SingleSelectMenu allows a single selection of a {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItem} from a list or groups or lists.\n *\n * @see {@link https://seeds.sproutsocial.com/components/action-menu/ ActionMenu} for triggering actions from a menu\n * @see {@link https://seeds.sproutsocial.com/components/multi-select-menu/ MultiSelectMenu} for selecting multiple items\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup MenuGroup}'s isSingleSelect prop to create a single select group within a MultiSelectMenu\n */\n\nexport const SingleSelectMenu = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n stateReducer: externalStateReducer,\n menuItems,\n MenuItemComponent,\n MenuRootComponent = MenuRoot,\n ...useSelectProps\n}: TypeSingleSelectMenuProps<I>) => {\n /** Get a list of menuItems from the children */\n const { allMenuItems, menuItemsMap, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n });\n\n /**\n * Destructure Downshift props and call the core useSelect with items and state handler\n */\n const { isOpen, ...useSelectReturnProps } = useSelect({\n ...defaultDownshiftProps.select,\n items: allMenuItems,\n itemToString,\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n externalStateReducer\n ),\n ...useSelectProps,\n });\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n items: allMenuItems,\n itemsMap: menuItemsMap,\n itemToString,\n isOpen,\n ...useSelectProps,\n ...useSelectReturnProps,\n ...restDefaults,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import React from \"react\";\nimport { useSelect, useMultipleSelection } from \"downshift\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { itemToString } from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { MenuRoot, type TypeMenuRootProps } from \"../MenuRoot\";\nimport { type TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeMultiSelectMenuProps } from \"./MultiSelectMenuTypes\";\nimport type { TypeInternalItemProps } from \"../types\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/multi-select-menu/\n *\n * @description A MultiSelectMenu allows multiple {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems} to be selected from a list or groups of lists.\n *\n * @see {@link https://seeds.sproutsocial.com/components/single-select-menu/ SingleSelectMenu}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup MenuGroup}\n */\n\nexport const MultiSelectMenu = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n onSelectedItemChange: externalOnSelectedItemChange,\n stateReducer: externalStateReducer,\n MenuRootComponent = MenuRoot,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps\n}: TypeMultiSelectMenuProps<I>) => {\n const { allMenuItems, menuItemsMap, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n isMulti: true,\n // handles the prop name mapping for multi select\n multiSelectProps: {\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps,\n },\n });\n\n const {\n getSelectedItemProps,\n addSelectedItem,\n removeSelectedItem,\n selectedItems,\n getDropdownProps,\n ...useMultipleSelectionReturnProps\n } = useMultipleSelection<TypeInternalItemProps>(defaultDownshiftProps.multi);\n\n const { isOpen, ...useSelectReturnProps } = useSelect({\n ...defaultDownshiftProps.select,\n items: allMenuItems,\n itemToString,\n selectedItem: null,\n defaultHighlightedIndex: 0,\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n externalStateReducer\n ),\n onSelectedItemChange: (changes) => {\n const { type, selectedItem: newSelectedItem } = changes;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n if (!newSelectedItem) break;\n if (selectedItems?.find((item) => item?.id === newSelectedItem.id)) {\n removeSelectedItem(newSelectedItem);\n } else {\n addSelectedItem(newSelectedItem);\n }\n // If the newly selected item's group is single select, remove any other selected items in that group.\n if (newSelectedItem.menuGroupProps?.isSingleSelect) {\n const groupItems = selectedItems.filter(\n (item) =>\n item.menuGroupProps?.id === newSelectedItem.menuGroupProps?.id\n );\n groupItems.forEach((item) => removeSelectedItem(item));\n }\n break;\n default:\n break;\n }\n\n // Call the consumer's onSelectedItemChange callback\n externalOnSelectedItemChange?.(changes);\n },\n ...useSelectProps,\n });\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n items: allMenuItems,\n itemsMap: menuItemsMap,\n itemToString,\n isOpen,\n getSelectedItemProps,\n addSelectedItem,\n removeSelectedItem,\n selectedItems,\n getDropdownProps,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps,\n ...useSelectReturnProps,\n ...useMultipleSelectionReturnProps,\n ...restDefaults,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import React from \"react\";\n\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeAutocompleteProps } from \"./AutocompleteTypes\";\nimport { SingleAutocomplete } from \"./SingleAutocomplete\";\nimport { MultiAutocomplete } from \"./MultiAutocomplete\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/autocomplete/\n *\n * @description A Autocomplete allows selecting {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems} from a list or groups of lists to populate an input.\n *\n */\nexport const Autocomplete = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n multiSelect = false,\n ...rest\n}: TypeAutocompleteProps<I>) => {\n if (multiSelect) {\n return <MultiAutocomplete {...rest} />;\n }\n\n return <SingleAutocomplete {...rest} />;\n};\n","import React from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { itemToString as defaultItemToString } from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { useItemFiltering } from \"../hooks/useItemFiltering\";\nimport { MenuRoot } from \"../MenuRoot\";\n\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeSingleAutocompleteProps } from \"./AutocompleteTypes\";\n\nexport const SingleAutocomplete = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n stateReducer: externalStateReducer,\n menuItems,\n MenuRootComponent = MenuRoot,\n MenuItemComponent,\n itemToString = defaultItemToString,\n getIsItemVisible,\n autoCloseOnEmpty = true,\n ...useComboboxProps\n}: TypeSingleAutocompleteProps<I>) => {\n /** Get a list of menuItems and children */\n const { allMenuItems, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n\n const downshiftDefaults = useDownshiftDefaults({ isCombobox: true });\n\n const { setHiddenItemsMap, defaultDownshiftProps, hiddenItemsCount } =\n downshiftDefaults;\n\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems,\n itemToString,\n getIsItemVisible,\n setHiddenItemsMap,\n });\n\n /**\n * Destructure Downshift props and call the core useCombobox with items and state handler\n */\n const useComboboxReturnProps = useCombobox({\n ...defaultDownshiftProps.combobox,\n items: allMenuItems,\n itemToString,\n onInputValueChange: updateFilteredItems,\n stateReducer: reduceReducers(\n defaultDownshiftProps.combobox.stateReducer,\n externalStateReducer\n ),\n ...useComboboxProps,\n });\n\n const { isOpen, closeMenu, inputValue } = useComboboxReturnProps;\n const { popoutProps: userPopoutProps } = useComboboxProps;\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n autoCloseOnEmpty,\n items: allMenuItems,\n itemToString,\n ...useComboboxProps,\n ...useComboboxReturnProps,\n ...downshiftDefaults,\n }}\n popoutProps={{\n focusOnContent: false,\n ...userPopoutProps,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import React from \"react\";\nimport { useCombobox, useMultipleSelection } from \"downshift\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport {\n itemToString as defaultItemToString,\n itemToKey as defaultItemToKey,\n} from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport {\n useItemFiltering,\n getDefaultGetIsItemVisible,\n defaultGetShouldFilter,\n type TypeGetShouldFilterFn,\n} from \"../hooks/useItemFiltering\";\nimport { getSelectedItemIds } from \"../MenuContext\";\nimport { MenuRoot } from \"../MenuRoot\";\n\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeMultiAutocompleteProps } from \"./AutocompleteTypes\";\n\nexport const MultiAutocomplete = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n stateReducer: externalStateReducer,\n menuItems,\n MenuItemComponent,\n MenuRootComponent = MenuRoot,\n itemToString = defaultItemToString,\n itemToKey = defaultItemToKey,\n getIsItemVisible = getDefaultGetIsItemVisible(itemToString),\n showSelectedItemsInDropdown = false,\n initialSelectedItems = [],\n onStateChange,\n onSelectedItemsChange,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n autoCloseOnEmpty = true,\n selectedItems: selectedItemsProp,\n ...useComboboxProps\n}: TypeMultiAutocompleteProps<I>) => {\n /** Get a list of menuItems and children */\n const { allMenuItems, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const [selectedItemsState, setSelectedItemsState] =\n React.useState(initialSelectedItems);\n const selectedItems = React.useMemo(\n () => selectedItemsProp || selectedItemsState,\n [selectedItemsProp, selectedItemsState]\n );\n const selectedItemIds = React.useMemo(\n () => getSelectedItemIds(selectedItems),\n [selectedItems]\n );\n\n // function that checks that item should be visible based on the selected items\n const getIsItemVisibleMulti = React.useCallback<typeof getIsItemVisible>(\n (item, inputValue) => {\n return (\n (showSelectedItemsInDropdown || !selectedItemIds[item.id]) &&\n getIsItemVisible(item, inputValue)\n );\n },\n [selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]\n );\n\n // function that checks that item should be filtered\n const getShouldFilterMulti = React.useCallback<TypeGetShouldFilterFn>(\n (args) => {\n return (\n (!showSelectedItemsInDropdown &&\n Object.keys(selectedItemIds).length > 0) ||\n defaultGetShouldFilter(args)\n );\n },\n [selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]\n );\n\n const downshiftDefaults = useDownshiftDefaults({\n isCombobox: true,\n isMulti: true,\n // handles the prop name mapping for multi select\n multiSelectProps: {\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useComboboxProps,\n },\n });\n\n const { setHiddenItemsMap, defaultDownshiftProps, hiddenItemsCount } =\n downshiftDefaults;\n\n // used to handle filtering of items\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems,\n itemToString,\n getIsItemVisible: getIsItemVisibleMulti,\n getShouldFilter: getShouldFilterMulti,\n setHiddenItemsMap,\n });\n\n // update the filtered items when the selectedItemIds changes\n React.useEffect(() => {\n // the inputValue should be empty whenever the selected items change\n // if the inputValue is needed here then it will need to be stored on a new state\n updateFilteredItems({ inputValue: \"\" });\n }, [selectedItemIds]);\n\n const useMultipleSelectionReturnProps = useMultipleSelection({\n ...defaultDownshiftProps.multi,\n itemToKey,\n selectedItems: selectedItemsProp || selectedItems,\n onSelectedItemsChange: ({ selectedItems, ...changes }) => {\n setSelectedItemsState(selectedItems);\n onSelectedItemsChange &&\n onSelectedItemsChange({ selectedItems, ...changes });\n },\n });\n\n /**\n * Destructure Downshift props and call the core useCombobox with items and state handler\n */\n\n const useComboboxReturnProps = useCombobox<(typeof allMenuItems)[number]>({\n ...defaultDownshiftProps.combobox,\n items: allMenuItems,\n itemToString,\n itemToKey,\n stateReducer: reduceReducers(\n defaultDownshiftProps.combobox.stateReducer,\n externalStateReducer\n ),\n onStateChange(changes) {\n const { type, selectedItem: newSelectedItem, inputValue } = changes;\n switch (type) {\n // Add the selected item to the selected items list\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n if (newSelectedItem) {\n const newSelectedItems = [...selectedItems, newSelectedItem];\n setSelectedItemsState(newSelectedItems);\n onSelectedItemsChange &&\n onSelectedItemsChange({\n selectedItems: newSelectedItems,\n type: useMultipleSelection.stateChangeTypes\n .FunctionSetSelectedItems,\n });\n }\n break;\n default:\n break;\n }\n // Update the filtered items based on the input value\n if (inputValue !== undefined) updateFilteredItems({ inputValue });\n onStateChange && onStateChange(changes);\n },\n ...useComboboxProps,\n });\n\n const { popoutProps: userPopoutProps } = useComboboxProps;\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n autoCloseOnEmpty,\n items: allMenuItems,\n itemToString,\n initialSelectedItems,\n onStateChange,\n onSelectedItemsChange,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useComboboxProps,\n ...useComboboxReturnProps,\n ...useMultipleSelectionReturnProps,\n ...downshiftDefaults,\n }}\n popoutProps={{\n focusOnContent: false,\n ...userPopoutProps,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import { useContext } from \"react\";\nimport { Input, type TypeInputProps } from \"@sproutsocial/seeds-react-input\";\nimport type { TypeDownshiftMergedInputProps } from \"../types\";\nimport { useMenuToggleContext } from \"../MenuContext\";\n\nexport interface TypeAutocompleteInputProps\n extends TypeDownshiftMergedInputProps<TypeInputProps> {}\n\nexport const AutocompleteInput = ({\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n inputProps,\n ...rest\n}: TypeAutocompleteInputProps) => {\n const { getInputComponentProps, inputValue, ref, ariaProps } =\n useMenuToggleContext();\n\n return (\n <Input\n id=\"autocomplete_input\"\n name=\"autocomplete_input\"\n {...getInputComponentProps({\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n value: inputValue,\n ref,\n refKey: \"innerRef\",\n inputProps,\n ...ariaProps,\n })}\n autoComplete={false}\n value={inputValue}\n {...rest}\n />\n );\n};\n","import React, { useContext } from \"react\";\nimport type { TypeDownshiftMergedInputProps } from \"../types\";\nimport {\n MenuTokenInput,\n type TypeMenuTokenInputProps,\n} from \"../MenuTokenInput\";\nimport { useMenuToggleContext } from \"../MenuContext\";\n\nexport interface TypeAutocompleteTokenInputProps\n extends TypeDownshiftMergedInputProps<TypeMenuTokenInputProps> {}\n\nexport const AutocompleteTokenInput = ({\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n inputProps,\n getTokenProps,\n ...rest\n}: TypeAutocompleteTokenInputProps) => {\n const {\n getInputComponentProps,\n getDropdownProps,\n inputValue,\n isOpen,\n ref,\n ariaProps,\n } = useMenuToggleContext();\n\n return (\n <MenuTokenInput\n id=\"autocomplete_input\"\n name=\"autocomplete_input\"\n {...getInputComponentProps({\n ...(getDropdownProps?.({ ref, preventKeyAction: isOpen }) || { ref }),\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n value: inputValue,\n refKey: \"innerRef\",\n inputProps,\n ...ariaProps,\n })}\n {...rest}\n />\n );\n};\n","import Icon from \"@sproutsocial/seeds-react-icon\";\nimport React from \"react\";\n\nimport {\n AutocompleteInput,\n type TypeAutocompleteInputProps,\n} from \"./AutocompleteInput\";\nimport styled from \"styled-components\";\nimport { Accessory } from \"@sproutsocial/seeds-react-input\";\n\nconst StyledAutocompleteInput = styled(AutocompleteInput)`\n ${Accessory} {\n pointer-events: none;\n }\n`;\n\nexport const AutocompleteSelect = (props: TypeAutocompleteInputProps) => {\n return (\n <StyledAutocompleteInput\n elemAfter={<Icon name=\"chevron-down\" />}\n {...props}\n />\n );\n};\n","import { useEffect, useState, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { useSelect } from \"downshift\";\nimport uniqueId from \"lodash.uniqueid\";\n\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { nestedMenuStateReducer } from \"../reducers/nestedMenuStateReducer\";\nimport {\n defaultMenuContext,\n type TypeMenuContext,\n type TypeDownshiftSelectProps,\n} from \"../MenuContext\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type {\n TypeNestedMenuItemProps,\n TypeNestedMenuProps,\n} from \"./NestedMenuTypes\";\nimport { NestedMenuContent } from \"./NestedMenuContent\";\nimport { NestedMenuProvider } from \"./NestedMenuContext\";\nimport { NestedMenuHeader } from \"./NestedMenuHeader\";\nimport { NestedMenuItem } from \"./NestedMenuItem\";\nimport { MOTION_DURATION_FAST } from \"@sproutsocial/seeds-motion/unitless\";\nimport { NestedMenuRoot } from \"./NestedMenuRoot\";\nimport { NestedMenuPopout } from \"./NestedMenuPopout\";\n\n// TODO: #React18 - Once we drop React 16 and 17 support, we can use useId from React directly.\nconst useId = () => {\n const [id, setId] = useState<string>();\n useEffect(() => {\n const uId = uniqueId();\n setId(uId);\n }, []);\n return id;\n};\n\nexport const NestedMenu = <\n I extends TypeMenuItemProps = TypeNestedMenuItemProps\n>({\n initialMenuId,\n menus,\n onBackButtonClick,\n backArrowLabel,\n menuToggleElement,\n popoutProps: {\n scheduleUpdateRef: externalPopoutUpdateRef,\n ...restPopoutProps\n } = {},\n width = \"300px\",\n stateReducer: rootExternalStateReducer,\n id: externalNestedMenuId,\n ...useSelectProps\n}: TypeNestedMenuProps<I>) => {\n /**\n * Handling the Open/Close and accessibility of the NestedMenu itself\n */\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n });\n const uniqueId = useId();\n const nestedMenuId = externalNestedMenuId ?? `nested-menu-${uniqueId}`;\n const [hasLoadedOnce, setHasLoadedOnce] = useState(false);\n const useSelectReturnProps = useSelect({\n ...defaultDownshiftProps.select,\n id: nestedMenuId,\n items: [],\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n rootExternalStateReducer\n ),\n ...useSelectProps,\n });\n\n const rootMenuContextProps = {\n ...useSelectProps,\n ...useSelectReturnProps,\n ...restDefaults,\n };\n\n useEffect(() => {\n if (!useSelectReturnProps.isOpen) {\n setHasLoadedOnce(false);\n } else {\n !hasLoadedOnce && setHasLoadedOnce(true);\n }\n }, [useSelectReturnProps.isOpen]);\n\n // onNestedIsOpenChange handles closing the popout based on the selected menu's built in open/close logic.\n const onNestedIsOpenChange: TypeDownshiftSelectProps[\"onIsOpenChange\"] = ({\n isOpen: newIsOpen,\n }) => {\n // Close the popout when a child menu's close logic is triggered\n !newIsOpen && useSelectReturnProps.closeMenu?.();\n };\n\n const nestedMenuPropsFromRoot: Partial<TypeDownshiftSelectProps> = {\n // The selected menu needs to receive this id so that the toggle element can be properly associated with it.\n id: nestedMenuId,\n onIsOpenChange: onNestedIsOpenChange,\n };\n\n // Hack to suppress error: \"downshift: You forgot to call the getMenuProps getter function on your component / element.\"\n rootMenuContextProps.getMenuProps?.({}, { suppressRefError: true });\n\n /**\n * Handling the state of the NestedMenu content\n */\n const [selectedMenuPath, setSelectedMenuPath] = useState([initialMenuId]);\n const [activeMenuContext, setActiveMenuContext] =\n useState<TypeMenuContext>(defaultMenuContext);\n const [currentMenuId, setCurrentMenuId] = useState(initialMenuId);\n const [isAdding, setIsAdding] = useState(false);\n const popoutUpdateRef = useRef<() => void | undefined>();\n const toggleElementRef = useRef<HTMLElement>(null);\n\n const setSelectedMenuId = (id: string) => {\n setIsAdding(true);\n setSelectedMenuPath((currentPath) => [...currentPath, id]);\n };\n\n // Set the currentMenuId reactively after the selectedMenuPath changes, so that\n // isAdding has time to be set before the animation starts.\n useEffect(() => {\n if (selectedMenuPath.length > 0) {\n const newMenuId = selectedMenuPath[selectedMenuPath.length - 1];\n setCurrentMenuId(newMenuId);\n }\n }, [selectedMenuPath.join(\"-\")]);\n\n const resetSelectedMenuPath = () => {\n setSelectedMenuPath([initialMenuId]);\n setCurrentMenuId(initialMenuId);\n };\n\n const goBack = () => {\n setIsAdding(false);\n setSelectedMenuPath((currentPath) => currentPath.slice(0, -1));\n // user-defined callback\n onBackButtonClick?.(currentMenuId);\n };\n\n const {\n MenuComponent,\n menuProps,\n MenuHeaderComponent = NestedMenuHeader,\n menuHeaderProps = {},\n } = menus[currentMenuId] || {};\n\n const {\n children,\n menuItems,\n MenuItemComponent,\n stateReducer: externalStateReducer,\n ...restMenuProps\n } = menuProps || {};\n\n const stateReducer = reduceReducers(\n nestedMenuStateReducer,\n externalStateReducer\n );\n\n const animationSpeed = MOTION_DURATION_FAST;\n\n const contentVariants = {\n arrive: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n // Start from left if is first render of root, else use default\n x: !custom?.hasLoadedOnce ? \"200%\" : custom?.isAdding ? \"200%\" : \"-200%\",\n }),\n enter: (custom = { hasLoadedOnce: false }) => ({\n opacity: 1,\n x: 0,\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circOut\",\n delay: !custom.hasLoadedOnce ? animationSpeed : 0,\n },\n }),\n leave: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n x: custom?.isAdding ? \"-200%\" : \"200%\",\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circIn\",\n },\n }),\n };\n\n // This is suggested even though they are exactly the same\n const menuVariants = {\n arrive: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n // Start from left if is first render of root, else use default\n x: !custom?.hasLoadedOnce ? \"200%\" : custom?.isAdding ? \"200%\" : \"-200%\",\n }),\n enter: (custom = { hasLoadedOnce: false }) => ({\n opacity: 1,\n x: 0,\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circOut\",\n delay: !custom.hasLoadedOnce ? animationSpeed : 0,\n },\n }),\n leave: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n x: custom?.isAdding ? \"-200%\" : \"200%\",\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circIn\",\n },\n }),\n };\n\n const nestedMenuProps = {\n ...nestedMenuPropsFromRoot,\n menuToggleElement,\n stateReducer,\n MenuRootComponent: NestedMenuRoot,\n // This ensures that onNestedIsOpenChange will be triggered if the selected menu attempts to close itself.\n initialIsOpen: true,\n children: (\n // Handles the smooth animating of the content\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentMenuId}\n variants={contentVariants}\n initial=\"arrive\"\n animate=\"enter\"\n exit=\"leave\"\n custom={{ isAdding, hasLoadedOnce }}\n >\n {MenuHeaderComponent && (\n <MenuHeaderComponent\n backArrowLabel={backArrowLabel}\n {...menuHeaderProps}\n />\n )}\n {/*children takes precedence over menuItems if both are passed.*/}\n {children && children}\n {menuItems && !children && (\n <NestedMenuContent\n menuItems={menuItems}\n MenuItemComponent={MenuItemComponent ?? NestedMenuItem}\n />\n )}\n </motion.div>\n </AnimatePresence>\n ),\n ...restMenuProps,\n };\n\n // Update the popout position when the nestedMenuProps.children change.\n useEffect(() => {\n popoutUpdateRef.current?.();\n }, [nestedMenuProps.children]);\n\n return (\n <NestedMenuProvider\n {...{\n selectedMenuPath,\n setSelectedMenuPath,\n setSelectedMenuId,\n resetSelectedMenuPath,\n goBack,\n rootMenuContextProps,\n activeMenuContext,\n setActiveMenuContext,\n animationSpeed,\n }}\n >\n <NestedMenuPopout\n content={\n MenuComponent && (\n // Handles the rerender of the component\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={`${currentMenuId}-content`}\n variants={menuVariants}\n initial=\"arrive\"\n animate=\"enter\"\n exit=\"leave\"\n custom={{ isAdding, hasLoadedOnce }}\n >\n <MenuComponent {...nestedMenuProps} />\n </motion.div>\n </AnimatePresence>\n )\n }\n menuToggleElement={menuToggleElement}\n width={width}\n toggleElementRef={toggleElementRef}\n scheduleUpdateRef={(callback) => {\n popoutUpdateRef.current = callback;\n externalPopoutUpdateRef?.(callback);\n }}\n {...restPopoutProps}\n />\n </NestedMenuProvider>\n );\n};\n","import { useCombobox, useSelect } from \"downshift\";\n\nexport const nestedMenuStateReducer = (_state, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n const hasChildMenu = !!changes?.selectedItem?.menuItemProps?.childMenuId;\n if (!hasChildMenu) {\n return changes;\n }\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true,\n highlightedIndex: 0,\n };\n default:\n return changes;\n }\n};\n","import React, { createContext, useContext } from \"react\";\nimport type { TypeNotEmptyChildren } from \"../types\";\nimport {\n defaultMenuContext,\n type TypeMenuContext,\n type TypeMenuContextProps,\n} from \"../MenuContext\";\nimport { MOTION_DURATION_FAST } from \"@sproutsocial/seeds-motion/unitless\";\n\nexport interface TypeNestedMenuContext {\n selectedMenuPath: string[];\n setSelectedMenuId?: (id: string) => void;\n setSelectedMenuPath?: (path: string[]) => void;\n resetSelectedMenuPath?: () => void;\n goBack?: () => void;\n rootMenuContextProps: Omit<TypeMenuContextProps, \"items\">;\n activeMenuContext: TypeMenuContext;\n setActiveMenuContext: (context: TypeMenuContext) => void;\n animationSpeed: number;\n}\n\nconst defaultNestedMenuContext: TypeNestedMenuContext = {\n selectedMenuPath: [],\n setSelectedMenuId: () => {},\n setSelectedMenuPath: () => {},\n resetSelectedMenuPath: () => {},\n goBack: () => {},\n rootMenuContextProps: {},\n activeMenuContext: defaultMenuContext,\n setActiveMenuContext: () => {},\n animationSpeed: MOTION_DURATION_FAST,\n};\n\nexport interface TypeNestedMenuProviderProps extends TypeNestedMenuContext {\n children: TypeNotEmptyChildren;\n}\n\n/**\n * NestedMenuContext factory, sets the type and the initial object\n */\nexport const NestedMenuContext = createContext<TypeNestedMenuContext>(\n defaultNestedMenuContext\n);\n\n/**\n * Provider Component sets the context values in the provider\n */\nexport const NestedMenuProvider = ({\n children,\n ...nestedMenuProps\n}: TypeNestedMenuProviderProps) => {\n return (\n <NestedMenuContext.Provider value={nestedMenuProps}>\n {children}\n </NestedMenuContext.Provider>\n );\n};\n\n/**\n * Utility hook for consuming NestedMenuContext\n */\nexport const useNestedMenuContext = (): TypeNestedMenuContext => {\n const nestedMenuContextValue = useContext(NestedMenuContext);\n\n if (nestedMenuContextValue === null) {\n throw new Error(\n \"useNestedMenuContext must be used within a <NestedMenuContext.Provider />\"\n );\n }\n\n return nestedMenuContextValue;\n};\n","import { MenuContent, type TypeMenuContentProps } from \"../MenuContent/index\";\nimport { useMenuContentContext } from \"../MenuContext\";\nimport type { TypeChildrenOrItems, TypeInternalItemProps } from \"../types\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport type { TypeMenuItemProps } from \"../MenuItem/index\";\nimport type { TypeNestedMenuItemProps } from \"./NestedMenuTypes\";\nimport { useEffect, useRef } from \"react\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\nimport { NestedMenuItem } from \"./NestedMenuItem\";\n\nconst NestedMenuContent = <\n I extends TypeMenuItemProps = TypeNestedMenuItemProps\n>({\n innerRef: innerRefProp = null,\n onKeyDown: onKeyDownProp,\n children,\n menuItems,\n MenuItemComponent = NestedMenuItem,\n ...props\n}: TypeMenuContentProps<I>) => {\n const { highlightedIndex, items } = useMenuContentContext();\n const { setSelectedMenuId, selectedMenuPath, goBack } =\n useNestedMenuContext();\n const internalRef = useRef<HTMLUListElement>(null);\n // Merge our ref and the consumer's ref so they will both be updated\n const innerRef = mergeRefs<HTMLUListElement>(internalRef, innerRefProp);\n\n const contentProps = children\n ? { children }\n : ({ menuItems, MenuItemComponent } as TypeChildrenOrItems<I>);\n\n // Focus the content on mount so that keyboard nav is available immediately\n useEffect(() => {\n internalRef?.current?.focus();\n }, []);\n\n const onKeyDown = (e) => {\n // Call the consumer's onKeyDown handler first\n onKeyDownProp?.(e);\n\n // Handle navigating into and out of child menus\n switch (e.key) {\n case \"ArrowRight\":\n case \" \":\n case \"Enter\":\n if (highlightedIndex !== undefined && highlightedIndex !== -1) {\n const item = items[\n highlightedIndex\n ] as TypeInternalItemProps<TypeNestedMenuItemProps>;\n if (item?.menuItemProps?.childMenuId !== undefined) {\n setSelectedMenuId?.(item?.menuItemProps?.childMenuId);\n }\n }\n break;\n case \"ArrowLeft\":\n if (selectedMenuPath.length > 1) {\n goBack?.();\n }\n break;\n }\n };\n\n return (\n <MenuContent\n onKeyDown={onKeyDown}\n innerRef={innerRef}\n {...contentProps}\n {...props}\n />\n );\n};\n\nNestedMenuContent.__MENU_PRIMITIVE_TYPE = \"MenuContent\";\n\nexport { NestedMenuContent };\n","import { MenuItem, MenuItemActionRight } from \"../MenuItem/index\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport type { TypeNestedMenuItemProps } from \"./NestedMenuTypes\";\n\nconst NestedMenuItem = ({\n children,\n childMenuId,\n onClick: onClickProp,\n ...rest\n}: TypeNestedMenuItemProps) => {\n const { setSelectedMenuId } = useNestedMenuContext();\n // This method of passing onClick is necessary because passing undefined for onClick\n // behaves differently from not passing anything at all.\n const onClickProps =\n childMenuId || onClickProp\n ? {\n onClick: (e) => {\n onClickProp?.(e);\n if (childMenuId) {\n setSelectedMenuId?.(childMenuId);\n }\n },\n }\n : {};\n\n return (\n <MenuItem {...onClickProps} {...rest}>\n <Box display=\"flex\" justifyContent=\"space-between\">\n {children}\n {childMenuId && (\n <MenuItemActionRight>\n <Icon name=\"arrow-right-outline\" />\n </MenuItemActionRight>\n )}\n </Box>\n </MenuItem>\n );\n};\n\nNestedMenuItem.__MENU_PRIMITIVE_TYPE = \"MenuItem\";\n\nexport { NestedMenuItem };\n","import { MenuHeader } from \"../MenuHeader/index\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport { Button } from \"@sproutsocial/seeds-react-button\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport type { TypeNestedMenuHeaderProps } from \"./NestedMenuTypes\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nexport const NestedMenuHeader = ({\n backArrowLabel,\n ...props\n}: TypeNestedMenuHeaderProps) => {\n const { goBack, selectedMenuPath, animationSpeed } = useNestedMenuContext();\n const showBackArrow = selectedMenuPath.length > 1;\n return (\n <MenuHeader\n leftAction={\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={`${selectedMenuPath}-header--button`}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: { duration: animationSpeed },\n }}\n >\n {showBackArrow ? (\n <Button onClick={goBack} ariaLabel={backArrowLabel}>\n <Icon name=\"arrow-left\" />\n </Button>\n ) : undefined}\n </motion.div>\n </AnimatePresence>\n }\n {...props}\n />\n );\n};\n","import React from \"react\";\nimport { type TypeMenuRootProps } from \"../MenuRoot\";\nimport { MenuContentProvider, useMenu } from \"../MenuContext\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\n\nexport const NestedMenuRoot = ({\n children,\n menuToggleElement,\n ...contextProps\n}: TypeMenuRootProps) => {\n const menuContext = useMenu(contextProps);\n const { setActiveMenuContext, selectedMenuPath } = useNestedMenuContext();\n\n React.useEffect(() => {\n setActiveMenuContext(menuContext);\n }, [\n selectedMenuPath[selectedMenuPath.length - 1],\n menuContext.selectedItem,\n menuContext.selectedItems?.length,\n ]);\n\n return (\n <MenuContentProvider menuContext={menuContext}>\n {children}\n </MenuContentProvider>\n );\n};\n","import { type RefObject } from \"react\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport {\n MenuPopout,\n type TypeMenuPopoutProps,\n type TypeMenuRootProps,\n} from \"../MenuRoot\";\nimport { MenuToggleProvider } from \"../MenuContext\";\nimport { motion } from \"motion/react\";\nimport styled from \"styled-components\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\n\nconst StyledDiv = styled(motion.div)`\n overflow: hidden;\n`;\n\nexport const NestedMenuPopout = ({\n content,\n menuToggleElement,\n width,\n onClose,\n toggleElementRef,\n focusLockProps,\n ...popoutProps\n}: Omit<TypeMenuPopoutProps, \"children\"> & {\n menuToggleElement: TypeMenuRootProps[\"menuToggleElement\"];\n toggleElementRef: RefObject<HTMLElement>;\n}) => {\n const { activeMenuContext, rootMenuContextProps, resetSelectedMenuPath } =\n useNestedMenuContext();\n\n return (\n <MenuPopout\n lockPlacement\n // Reset the selected menu path after the close animation completes\n onClose={() => {\n onClose?.();\n // Manually focus the toggle element and then reset state\n setTimeout(() => {\n toggleElementRef.current?.focus();\n resetSelectedMenuPath?.();\n }, 200);\n }}\n isOpen={!!rootMenuContextProps.isOpen}\n openMenu={rootMenuContextProps.openMenu}\n closeMenu={rootMenuContextProps.closeMenu}\n width={width}\n content={(props) => (\n <StyledDiv layout=\"position\">\n {typeof content === \"function\" ? content(props) : content}\n </StyledDiv>\n )}\n focusLockProps={{\n crossFrame: false,\n ...focusLockProps,\n }}\n {...popoutProps}\n >\n {(toggleProps) => (\n <MenuToggleProvider\n // rootMenuContextProps overrides activeMenuContext since it handles open/close logic\n menuContext={{\n ...activeMenuContext,\n ...rootMenuContextProps,\n ...toggleProps,\n ref: mergeRefs<HTMLElement>(\n toggleProps.ref,\n toggleElementRef\n ) as RefObject<HTMLElement>,\n }}\n >\n {menuToggleElement}\n </MenuToggleProvider>\n )}\n </MenuPopout>\n );\n};\n"],"mappings":"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","names":["useMemo","jsx","space","useMemo","jsx","disabled","color","styled","border","color","flexbox","grid","layout","space","Fragment","jsx","jsxs","styled","border","color","flexbox","grid","layout","position","space","React","useMemo","Fragment","jsx","parents","React","useMemo","children","menuItemsMap","allMenuItems","styled","Box","jsx","jsx","styled","Box","jsx","styled","border","layout","position","flexbox","grid","color","space","jsx","jsxs","color","React","useCallback","styled","jsx","styled","useCallback","React","jsx","jsx","React","React","itemToString","React","jsx","itemToString","React","React","styled","jsx","styled","itemToString","React","onKeyDown","React","jsx","itemToString","React","value","React","Icon","Box","mergeRefs","jsx","jsxs","mergeRefs","Box","Icon","React","styled","css","Icon","jsx","jsxs","styled","css","props","Icon","React","useEffect","useSelect","React","itemToKey","React","jsx","useSelect","React","useEffect","useSelect","jsx","useSelect","useSelect","jsx","useSelect","useCombobox","jsx","itemToString","useCombobox","React","useCombobox","useMultipleSelection","jsx","itemToString","itemToKey","React","useMultipleSelection","selectedItems","useCombobox","jsx","Input","jsx","Input","jsx","Icon","styled","jsx","Icon","useEffect","useRef","AnimatePresence","motion","useSelect","useCombobox","useSelect","createContext","useContext","MOTION_DURATION_FAST","jsx","createContext","useContext","useEffect","mergeRefs","Icon","Box","jsx","jsxs","jsx","mergeRefs","useEffect","Button","Icon","jsx","MOTION_DURATION_FAST","React","jsx","React","motion","styled","mergeRefs","jsx","jsx","jsxs","useEffect","uniqueId","useSelect","useRef","MOTION_DURATION_FAST","AnimatePresence","motion"]}
1
+ {"version":3,"sources":["../../src/MenuContext.tsx","../../src/MenuItem/styles.tsx","../../src/MenuItem/useOptionProps.tsx","../../src/MenuItem/MenuItem.tsx","../../src/MenuItem/MenuItemTypes.ts","../../src/MenuHeader/MenuHeader.tsx","../../src/MenuHeader/styles.tsx","../../src/MenuContent/styles.tsx","../../src/hooks/useMenuChildren.tsx","../../src/MenuContent/MenuContent.tsx","../../src/MenuContent/DefaultMenuEmptyState.tsx","../../src/MenuFooter/MenuFooter.tsx","../../src/MenuFooter/styles.tsx","../../src/MenuGroup/MenuGroup.tsx","../../src/MenuGroup/styles.tsx","../../src/MenuRoot/MenuRoot.tsx","../../src/MenuLabel.tsx","../../src/MenuToggleButton/MenuToggleButton.tsx","../../src/MenuSearchInput/MenuSearchInput.tsx","../../src/hooks/useItemFiltering.tsx","../../src/utils/downshiftDefaults.ts","../../src/MenuTokenInput.tsx","../../src/MenuSearchTokenInput/MenuSearchTokenInput.tsx","../../src/SubmenuItem/SubmenuItem.tsx","../../src/ListboxToggleButton.tsx","../../src/ActionMenu/ActionMenu.tsx","../../src/hooks/useDownshiftDefaults.tsx","../../src/reducers/useComboboxStateReducer.tsx","../../src/utils/reduceReducers.ts","../../src/reducers/useSelectStateReducer.tsx","../../src/utils/getMultiSelectOverrides.ts","../../src/SingleSelectMenu/SingleSelectMenu.tsx","../../src/MultiSelectMenu/MultiSelectMenu.tsx","../../src/Autocomplete/Autocomplete.tsx","../../src/Autocomplete/SingleAutocomplete.tsx","../../src/Autocomplete/MultiAutocomplete.tsx","../../src/Autocomplete/AutocompleteInput.tsx","../../src/Autocomplete/AutocompleteTokenInput.tsx","../../src/Autocomplete/AutocompleteSelect.tsx","../../src/NestedMenu/NestedMenu.tsx","../../src/reducers/nestedMenuStateReducer.tsx","../../src/NestedMenu/NestedMenuContext.tsx","../../src/NestedMenu/NestedMenuContent.tsx","../../src/NestedMenu/NestedMenuItem.tsx","../../src/NestedMenu/NestedMenuHeader.tsx","../../src/NestedMenu/NestedMenuRoot.tsx","../../src/NestedMenu/NestedMenuPopout.tsx"],"sourcesContent":["import React, { createContext, useMemo, useContext } from \"react\";\nimport type {\n UseComboboxReturnValue,\n UseComboboxProps,\n UseSelectReturnValue,\n UseSelectProps,\n UseMultipleSelectionReturnValue,\n UseMultipleSelectionProps,\n} from \"downshift\";\nimport type { TypeTokenInputProps } from \"@sproutsocial/seeds-react-token-input\";\nimport type {\n TypeInternalItemProps,\n TypeNotEmptyChildren,\n TypeDownshiftMergedInputProps,\n} from \"./types\";\n\nexport interface TypeDownshiftComboboxProps\n extends Partial<UseComboboxProps<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftSelectProps\n extends Partial<UseSelectProps<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftMultiSelectProps\n extends Partial<\n Omit<\n UseMultipleSelectionProps<TypeInternalItemProps>,\n \"stateReducer\" | \"onStateChange\" | \"getA11yStatusMessage\"\n >\n > {\n // Multi Select Props with conflicting useSelect prop names\n /** Optional override to the built-in getA11yStatusMessage function for multiple selection*/\n getA11yMultiStatusMessage?: UseMultipleSelectionProps<TypeInternalItemProps>[\"getA11yStatusMessage\"];\n /** Optional override to the built-in onStateChange function for multiple selection*/\n onMultiSelectStateChange?: UseMultipleSelectionProps<TypeInternalItemProps>[\"onStateChange\"];\n /** Optional override to the built-in stateReducer function for multiple selection*/\n multiSelectStateReducer?: UseMultipleSelectionProps<TypeInternalItemProps>[\"stateReducer\"];\n}\n\nexport interface TypeDownshiftComboboxReturnValue\n extends Partial<UseComboboxReturnValue<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftSelectReturnValue\n extends Partial<UseSelectReturnValue<TypeInternalItemProps>> {}\n\nexport interface TypeDownshiftMultiSelectReturnValue\n extends Partial<UseMultipleSelectionReturnValue<TypeInternalItemProps>> {}\n\ntype TypeDonwshiftSharedReturnValue =\n | \"getLabelProps\"\n | \"getToggleButtonProps\"\n | \"getMenuProps\";\ntype TypeDonwshiftSharedProps =\n | \"onHighlightedIndexChange\"\n | \"onIsOpenChange\"\n | \"onSelectedItemChange\"\n | \"onStateChange\"\n | \"stateReducer\";\n\nexport interface TypeMenuContextBaseProps {\n itemsMap?: { [key: string]: TypeInternalItemProps };\n isListbox?: boolean;\n hiddenItemsMap?: Record<string, boolean>;\n hiddenItemsCount?: number;\n setHiddenItemsMap?: React.Dispatch<\n React.SetStateAction<Record<string, boolean>>\n >;\n subMenuId?: string;\n setSubMenuId?: (id: string) => void;\n contentRef?: React.RefObject<HTMLUListElement>;\n}\n\ninterface TypeAllDownshiftProps\n extends Omit<\n TypeDownshiftComboboxReturnValue,\n TypeDonwshiftSharedReturnValue\n >,\n Omit<TypeDownshiftComboboxProps, TypeDonwshiftSharedProps>,\n Omit<TypeDownshiftSelectReturnValue, TypeDonwshiftSharedReturnValue>,\n Omit<TypeDownshiftSelectProps, TypeDonwshiftSharedProps>,\n TypeDownshiftMultiSelectReturnValue,\n TypeDownshiftMultiSelectProps {\n onHighlightedIndexChange?:\n | TypeDownshiftComboboxProps[\"onHighlightedIndexChange\"]\n | TypeDownshiftSelectProps[\"onHighlightedIndexChange\"];\n onIsOpenChange?:\n | TypeDownshiftComboboxProps[\"onIsOpenChange\"]\n | TypeDownshiftSelectProps[\"onIsOpenChange\"];\n onSelectedItemChange?:\n | TypeDownshiftComboboxProps[\"onSelectedItemChange\"]\n | TypeDownshiftSelectProps[\"onSelectedItemChange\"];\n onStateChange?:\n | TypeDownshiftComboboxProps[\"onStateChange\"]\n | TypeDownshiftSelectProps[\"onStateChange\"];\n stateReducer?:\n | TypeDownshiftComboboxProps[\"stateReducer\"]\n | TypeDownshiftSelectProps[\"stateReducer\"];\n getLabelProps?:\n | TypeDownshiftComboboxReturnValue[\"getLabelProps\"]\n | TypeDownshiftSelectReturnValue[\"getLabelProps\"];\n getToggleButtonProps?:\n | TypeDownshiftComboboxReturnValue[\"getToggleButtonProps\"]\n | TypeDownshiftSelectReturnValue[\"getToggleButtonProps\"];\n getMenuProps?:\n | TypeDownshiftComboboxReturnValue[\"getMenuProps\"]\n | TypeDownshiftSelectReturnValue[\"getMenuProps\"];\n}\nexport interface TypeMenuContextProps\n extends TypeAllDownshiftProps,\n TypeMenuContextBaseProps {\n items: TypeInternalItemProps[];\n itemsMap?: { [key: string]: TypeInternalItemProps };\n selectedItemIds?: { [key: string]: boolean };\n isListbox?: boolean;\n hasVisibleItems?: boolean;\n autoCloseOnEmpty?: boolean;\n}\n\nexport interface TypeMenuContext extends TypeMenuContextProps {\n itemsMap: { [key: string]: TypeInternalItemProps };\n isItemSelected: (id: string) => boolean;\n getInputComponentProps: (\n props: Pick<TypeTokenInputProps, \"inputProps\"> &\n Parameters<Required<TypeMenuContextProps>[\"getInputProps\"]>[0]\n ) => Omit<TypeDownshiftMergedInputProps<TypeTokenInputProps>, \"onClick\">;\n isInitialized?: boolean;\n}\n\nexport interface TypeMenuProviderProps {\n children: TypeNotEmptyChildren;\n menuContext: TypeMenuContext;\n}\n\nexport interface TypeMenuToggleContext extends TypeMenuContext {\n ref?:\n | React.RefObject<any>\n | ((arg0: React.ElementRef<any> | HTMLElement) => void);\n toggle?: () => void;\n show?: () => void;\n hide?: () => void;\n ariaProps?: Record<string, any>;\n}\n\nexport interface TypeMenuToggleProviderProps extends TypeMenuProviderProps {\n menuContext: TypeMenuToggleContext;\n}\n\n/**\n * Object for Initializing the Menu Context\n */\nexport const defaultMenuContext: TypeMenuContext = {\n items: [],\n itemsMap: {},\n isItemSelected: () => false,\n getInputComponentProps: () => ({}),\n hasVisibleItems: false,\n isInitialized: false,\n};\n\nexport const getSelectedItemIds = <\n T extends TypeMenuContextProps[\"selectedItems\"] | undefined,\n R = T extends undefined ? undefined : Record<string, boolean>\n>(\n selectedItems?: T\n): R =>\n selectedItems?.reduce(\n (selected, item) => ({ ...selected, [item.id]: true }),\n {} as Record<string, boolean>\n ) as R;\n\nexport const checkIfItemSelected = ({\n id,\n selectedItem,\n selectedItemIds,\n}: {\n id: string;\n selectedItem?: TypeInternalItemProps | null;\n selectedItemIds?: TypeMenuContextProps[\"selectedItemIds\"];\n}) => (selectedItemIds ? !!selectedItemIds[id] : selectedItem?.id === id);\n\n/**\n * Hook for initializing Menu context\n */\nexport const useMenu = ({\n items = [],\n isListbox = false,\n isOpen = false,\n itemsMap: itemsMapFromProps,\n selectedItemIds: selectedItemIdsFromProps,\n selectedItem,\n selectedItems,\n getInputProps,\n contentRef: contentRefFromProps,\n autoCloseOnEmpty,\n hiddenItemsCount,\n ...rest\n}: Partial<TypeMenuContextProps> = {}): TypeMenuContext => {\n const contentRef = contentRefFromProps || React.createRef<HTMLUListElement>();\n const menuProps = useMemo(() => ({ ...rest }), [rest]);\n const itemsMap = useMemo(\n () =>\n itemsMapFromProps ||\n items.reduce((map, item) => {\n map[`${item.id}`] = {\n ...item,\n };\n return map;\n }, {} as TypeMenuContext[\"itemsMap\"]),\n [items, itemsMapFromProps]\n );\n\n const selectedItemIds = useMemo(\n () => selectedItemIdsFromProps || getSelectedItemIds(selectedItems),\n [selectedItems, selectedItemIdsFromProps]\n );\n\n const isItemSelected = React.useCallback(\n (id: string) => checkIfItemSelected({ id, selectedItem, selectedItemIds }),\n [selectedItem?.id, selectedItemIds]\n );\n\n const getInputComponentProps = React.useCallback<\n TypeMenuContext[\"getInputComponentProps\"]\n >(\n ({ inputProps, ...props }) => {\n if (!getInputProps) return {};\n const {\n [\"aria-activedescendant\"]: activedescendant,\n [\"aria-autocomplete\"]: autocomplete,\n [\"aria-controls\"]: controls,\n [\"aria-expanded\"]: expanded,\n [\"aria-labelledby\"]: labelledby,\n role,\n autoComplete,\n onClick,\n value,\n ...restProps\n } = getInputProps(props);\n return {\n ...restProps,\n inputProps: {\n [\"aria-activedescendant\"]: activedescendant,\n [\"aria-autocomplete\"]: autocomplete,\n [\"aria-controls\"]: controls,\n [\"aria-expanded\"]: expanded,\n [\"aria-labelledby\"]: labelledby,\n role,\n autoComplete,\n onClick,\n value,\n ...inputProps,\n },\n };\n },\n [getInputProps]\n );\n\n const hasVisibleItems = useMemo(() => {\n return (hiddenItemsCount ?? 0) < items.length;\n }, [items, hiddenItemsCount]);\n\n return {\n isOpen,\n isListbox,\n items,\n itemsMap,\n selectedItem,\n selectedItems,\n selectedItemIds,\n isItemSelected,\n getInputProps,\n getInputComponentProps,\n contentRef,\n hasVisibleItems,\n autoCloseOnEmpty,\n isInitialized: true,\n ...menuProps,\n };\n};\n\n/**\n * MenuToggleContext factory, sets the type and the initial object\n * @description Context for the Menu Toggle\n */\nexport const MenuToggleContext =\n createContext<TypeMenuToggleContext>(defaultMenuContext);\n\n/**\n * MenuToggleProvider Component sets the context values into the provider\n * @description Context Provider for the Menu Toggle\n */\nexport const MenuToggleProvider = ({\n children,\n menuContext,\n}: TypeMenuToggleProviderProps) => {\n return (\n <MenuToggleContext.Provider value={{ ...menuContext }}>\n {children}\n </MenuToggleContext.Provider>\n );\n};\n\n/**\n * Utility hook for consuming MenuToggleContext\n */\nexport const useMenuToggleContext = () => {\n const menuContextValue = useContext(MenuToggleContext);\n\n if (menuContextValue === null) {\n throw new Error(\n \"useMenuToggleContext must be used within a <MenuToggleContext.Provider />\"\n );\n }\n\n return menuContextValue;\n};\n\n/**\n * MenuContentContext factory, sets the type and the initial object\n * @description Context for the Menu Content\n */\nexport const MenuContentContext =\n createContext<TypeMenuContext>(defaultMenuContext);\n\n/**\n * MenuContentProvider Component sets the context values into the provider\n * @description Context Provider for the Menu Content\n */\nexport const MenuContentProvider = ({\n children,\n menuContext,\n}: TypeMenuProviderProps) => {\n return (\n <MenuContentContext.Provider value={{ ...menuContext }}>\n {children}\n </MenuContentContext.Provider>\n );\n};\n\n/**\n * Utility hook for consuming MenuContentContext\n */\nexport const useMenuContentContext = () => {\n const menuContextValue = useContext(MenuContentContext);\n\n if (menuContextValue === null) {\n throw new Error(\n \"useMenuContentContext must be used within a <MenuContentContext.Provider />\"\n );\n }\n\n return menuContextValue;\n};\n","import styled, { css } from \"styled-components\";\nimport { focusRing, disabled } from \"@sproutsocial/seeds-react-mixins\";\nimport { color, border, flexbox, grid, layout, space } from \"styled-system\";\nimport {\n CheckboxContainer,\n InputWrapper,\n PillInput,\n checkboxContainerHoverStyles,\n inputWrapperHoverStyles,\n pillInputHoverStyles,\n} from \"@sproutsocial/seeds-react-checkbox\";\n\nconst highlightedStyles = css`\n cursor: pointer;\n border: 1px solid ${({ 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\nconst activeStyles = css`\n border: 1px solid ${({ theme }) => theme.colors.listItem.border.base};\n background-color: ${({ theme }) => theme.colors.menuItem.background.active};\n color: ${({ theme }) => theme.colors.text.body};\n text-decoration: none;\n`;\n\nconst selectedStyles = css`\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n`;\n\nexport const MenuItemContainer = styled.li`\n box-sizing: border-box;\n list-style-type: none;\n margin-left: ${({ theme }) => theme.space[300]};\n margin-right: ${({ theme }) => theme.space[300]};\n\n &:first-child {\n margin-top: ${({ theme }) => theme.space[300]};\n }\n\n &:last-child {\n margin-bottom: ${({ theme }) => theme.space[300]};\n }\n`;\n\nexport const StyledMenuItem = styled.button<{\n $highlighted: boolean;\n $active?: boolean;\n $selected?: boolean;\n}>`\n display: block;\n box-sizing: border-box;\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\n /* Highlighted */\n ${({ $highlighted }) => $highlighted && highlightedStyles}\n\n /* Hovered, but not focused */\n &:hover {\n ${highlightedStyles}\n ${CheckboxContainer} {\n ${checkboxContainerHoverStyles}\n }\n ${InputWrapper} {\n ${inputWrapperHoverStyles}\n }\n ${PillInput} {\n ${pillInputHoverStyles}\n }\n }\n\n /* focused */\n &:focus {\n ${focusRing}\n }\n\n /* Active */\n ${({ $active }) => $active && activeStyles}\n\n /* Pressed state*/\n &:active {\n ${activeStyles}\n }\n\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n ${disabled}\n }\n\n ${({ $selected }) => $selected && selectedStyles}\n\n ${border}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n`;\n\nexport const MenuItemRow = styled.div`\n display: flex;\n align-items: center;\n pointer-events: none;\n`;\nexport const MenuItemAction = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const MenuItemActionLeft = styled(MenuItemAction)`\n margin-right: ${({ theme }) => theme.space[300]};\n`;\n\nexport const MenuItemActionRight = styled(MenuItemAction)`\n margin-left: ${({ theme }) => theme.space[300]};\n`;\n\nexport const MenuItemText = styled.div`\n word-break: break-word;\n flex-grow: 1;\n min-width: 0;\n`;\n","import React, { useContext, useMemo } from \"react\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Checkbox } from \"@sproutsocial/seeds-react-checkbox\";\nimport { Switch } from \"@sproutsocial/seeds-react-switch\";\nimport { Radio } from \"@sproutsocial/seeds-react-radio\";\nimport { useTheme } from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { useMenuContentContext } from \"../MenuContext\";\n\nimport type { TypeMenuItemProps, InputType } from \"./MenuItemTypes\";\nimport { MenuItemActionLeft, MenuItemRow, MenuItemText } from \"./styles\";\n\n/**\n * SelectionIndicator - handles logic for appropriate rendering of inputs\n * @returns Checkbox | Icon | Radio | Switch\n */\nexport const SelectionIndicator = ({\n id,\n inputType = \"icon\",\n \"aria-labelledby\": labeledBy,\n selected,\n}: {\n id: string;\n \"aria-labelledby\": string;\n selected: boolean;\n inputType: InputType;\n}) => {\n const { space } = useTheme();\n\n const inputStub = (e: React.SyntheticEvent) => {\n e.stopPropagation();\n };\n\n switch (inputType) {\n case \"checkbox\":\n return (\n <Checkbox\n tabIndex={-1}\n onChange={() => {}}\n checked={selected}\n aria-labelledby={labeledBy}\n id={`MenuItem-${inputType}-${id}`}\n />\n );\n case \"switch\":\n return (\n <Switch\n tabIndex={-1}\n onClick={inputStub}\n checked={!!selected}\n aria-labelledby={labeledBy}\n id={`MenuItem-${inputType}-${id}`}\n />\n );\n case \"radio\":\n return (\n <Radio\n tabIndex={-1}\n checked={selected}\n id={`MenuItem-${inputType}-${id}`}\n name={`MenuItem-${inputType}`}\n aria-labelledby={labeledBy}\n />\n );\n case \"icon\":\n if (selected) {\n return <Icon name=\"check-solid\" aria-hidden size=\"small\" />;\n } else {\n return <Box width={space[\"400\"]}></Box>;\n }\n default:\n return null;\n }\n};\n\n/**\n * useOptionProps - props needed for the option menu items\n */\nexport const useOptionProps = ({\n id,\n children,\n inputType = \"icon\",\n inputLabelId,\n ...props\n}: TypeMenuItemProps) => {\n const { selectedItem, selectedItemIds, isListbox, isItemSelected } =\n useMenuContentContext();\n const selected = useMemo(\n () => isItemSelected(id),\n [selectedItem?.id, selectedItemIds]\n );\n\n const label = inputLabelId || `menu-item-child-${id}`;\n\n return isListbox\n ? {\n active: selected,\n [\"aria-selected\"]: selected,\n children: (\n <MenuItemRow>\n <MenuItemActionLeft>\n <SelectionIndicator\n id={id}\n aria-labelledby={label}\n inputType={inputType}\n selected={!!selected}\n />\n </MenuItemActionLeft>\n <MenuItemText id={label}>{children}</MenuItemText>\n </MenuItemRow>\n ),\n ...props,\n }\n : {};\n};\n","import { useMenuContentContext } from \"../MenuContext\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport type { TypeMenuItemProps } from \"./MenuItemTypes\";\nimport { MenuItemContainer, StyledMenuItem } from \"./styles\";\nimport { useOptionProps } from \"./useOptionProps\";\n\n// TODO: decide if we want to support inputs on menuitems\n// const roles = {\n// checkbox: \"menuitemcheckbox\",\n// switch: \"menuitemcheckbox\",\n// radio: \"menuitemradio\",\n// } as const;\n\nconst MenuItem = ({\n id,\n children,\n onClick,\n onKeyDown,\n disabled = false,\n active,\n innerRef,\n href,\n color,\n ...props\n}: TypeMenuItemProps) => {\n const {\n getItemProps,\n itemsMap,\n highlightedIndex,\n isListbox,\n hiddenItemsMap = {},\n } = useMenuContentContext();\n const { ...optionProps } = useOptionProps({\n id,\n children,\n ...props,\n });\n const item = (itemsMap[id] || { index: 0, id }) as TypeInternalItemProps;\n\n const highlighted = highlightedIndex === item?.index;\n\n const downshiftItemProps =\n getItemProps?.({\n ...(isListbox ? {} : { role: \"menuitem\" }),\n item,\n index: item.index,\n // The disabled prop no longer supported in downshift. Use isItemDisabled instead.\n // disabled,\n onClick,\n onKeyDown,\n ref: innerRef,\n }) ?? {};\n\n // downshift's useSelect adds aria-selected to every item, but aria-selected\n // is only valid on role=\"option\" (listbox). For menuitem / menuitemcheckbox /\n // menuitemradio it fails axe's aria-allowed-attr rule — menu items use\n // aria-checked for state, not aria-selected.\n if (!isListbox && \"aria-selected\" in downshiftItemProps) {\n delete downshiftItemProps[\"aria-selected\"];\n }\n\n return hiddenItemsMap[item.id] ? (\n <></>\n ) : (\n <MenuItemContainer role=\"none\">\n <StyledMenuItem\n id={id}\n $highlighted={highlighted}\n $active={active}\n {...downshiftItemProps}\n // use anchor tag if href is provided and button for menuitem\n as={isListbox ? undefined : href ? \"a\" : \"button\"}\n type={href ? undefined : \"button\"}\n href={href}\n children={children}\n // Keyboard nav uses the arrow keys, not tab.\n tabIndex={-1}\n {...optionProps}\n {...props}\n />\n </MenuItemContainer>\n );\n};\n\nMenuItem.__MENU_PRIMITIVE_TYPE = \"MenuItem\";\n\nexport { MenuItem };\n","import type { GetItemPropsOptions } from \"downshift\";\nimport type { TypeMenuItemRoles } from \"../constants\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport type {\n TypeBorderSystemProps,\n TypeColorSystemProps,\n TypeFlexboxSystemProps,\n TypeGridSystemProps,\n TypeLayoutSystemProps,\n TypePositionSystemProps,\n TypeSpaceSystemProps,\n TypeTypographySystemProps,\n} from \"@sproutsocial/seeds-react-system-props\";\n\nexport interface TypeMenuItemStyledProps\n extends TypeBorderSystemProps,\n TypeColorSystemProps,\n TypeFlexboxSystemProps,\n TypeGridSystemProps,\n TypeLayoutSystemProps,\n TypePositionSystemProps,\n TypeSpaceSystemProps,\n TypeTypographySystemProps {}\n\nexport const INPUT_TYPES = {\n CHECKBOX: \"checkbox\",\n RADIO: \"radio\",\n SWITCH: \"switch\",\n ICON: \"icon\",\n} as const;\nexport type InputType = (typeof INPUT_TYPES)[keyof typeof INPUT_TYPES];\n\nexport interface TypeMenuItemProps\n extends TypeMenuItemStyledProps,\n Omit<\n GetItemPropsOptions<TypeInternalItemProps>,\n | \"as\"\n | \"item\"\n | \"ref\"\n | keyof TypeMenuItemStyledProps\n | keyof TypeInternalItemProps\n >,\n Omit<TypeInternalItemProps, \"index\"> {\n children: React.ReactNode;\n disabled?: boolean;\n role?: TypeMenuItemRoles;\n innerRef?: React.Ref<any>;\n $highlighted?: boolean;\n\n // props for options\n active?: boolean;\n inputType?: InputType;\n inputLabelId?: string;\n}\n","import React from \"react\";\nimport {\n MenuHeaderContainer,\n MenuTitleText,\n MenuChildrenContainer,\n MenuHeaderFeatures,\n} from \"./styles\";\nimport type { TypeMenuHeaderProps } from \"./MenuHeaderTypes\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader\n *\n * @description MenuHeader is a container used to hold header content within a Menu.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menufooter MenuFooter}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput MenuSearchInput}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput MenuSearchTokenInput}\n */\n\nconst MenuHeader = ({\n children,\n title,\n leftAction,\n rightAction,\n ...rest\n}: TypeMenuHeaderProps) => {\n const showTopRow = title || leftAction || rightAction;\n return (\n <>\n <MenuHeaderContainer $leftAction={!!leftAction} {...rest}>\n {showTopRow && (\n <MenuHeaderFeatures $leftAction={!!leftAction}>\n {leftAction && leftAction}\n {title && (\n <MenuTitleText $leftAction={!!leftAction}>{title}</MenuTitleText>\n )}\n\n {rightAction && <div className=\"right-action\">{rightAction}</div>}\n </MenuHeaderFeatures>\n )}\n\n {children && <MenuChildrenContainer>{children}</MenuChildrenContainer>}\n </MenuHeaderContainer>\n </>\n );\n};\n\nexport { MenuHeader };\n","import styled from \"styled-components\";\nimport {\n border,\n color,\n flexbox,\n grid,\n layout,\n position,\n space,\n} from \"styled-system\";\nimport type { TypeMenuHeaderProps } from \"./MenuHeaderTypes\";\n\ninterface TypeMenuHeaderContainerProps extends TypeMenuHeaderProps {\n $leftAction?: boolean;\n}\n\nexport const MenuHeaderContainer = styled.div<TypeMenuHeaderContainerProps>`\n border-color: ${({ theme }) => theme.colors.container.border.base};\n border-bottom-width: 1px;\n border-bottom-style: solid;\n box-sizing: border-box;\n width: 100%;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n display: flex;\n flex-direction: column;\n padding: ${({ theme }) => theme.space[350]} ${({ theme }) => theme.space[400]};\n\n ${border}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n ${position}\n`;\n\nexport const MenuTitleText = styled.h3<TypeMenuHeaderContainerProps>`\n color: ${({ theme }) => theme.colors.text.headline};\n font-weight: ${({ theme }) => theme.fontWeights.bold};\n margin: 0px;\n flex-grow: 1;\n\n ${({ theme }) => theme.typography[200]}\n\n ${({ $leftAction, theme }) =>\n $leftAction &&\n `\n padding-left: ${theme.space[350]};\n `}\n`;\n\nexport const MenuChildrenContainer = styled.div`\n grid-column: 1 / -1;\n margin-top: ${({ theme }) => theme.space[300]};\n\n &:first-child {\n margin-top: 0;\n }\n`;\n\nexport const MenuHeaderFeatures = styled.div<TypeMenuHeaderContainerProps>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n\n .right-action {\n margin-left: auto; /* Pushes the right action to the right */\n display: flex;\n justify-content: flex-end;\n flex-shrink: 0; /* Prevents it from shrinking */\n max-width: 40%; /* Prevents it from taking too much space */\n text-align: right;\n }\n\n > a,\n > button {\n display: flex;\n align-items: center;\n word-break: break-word;\n }\n`;\n","import styled from \"styled-components\";\nimport {\n border,\n color,\n flexbox,\n grid,\n layout,\n position,\n space,\n} from \"styled-system\";\nimport type { TypeMenuContentProps } from \"./MenuContentTypes\";\n\nexport const StyledMenuContent = styled.ul<TypeMenuContentProps>`\n margin: 0;\n padding: 0;\n overflow: auto;\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n\n ${border}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n ${position}\n`;\n","import React, { type ReactNode, useMemo } from \"react\";\nimport { MenuItem, type TypeMenuItemProps } from \"../MenuItem\";\nimport type {\n TypeSubmenuItemProps,\n TypeSubmenuValidMenuComponentProps,\n} from \"../SubmenuItem\";\nimport type { TypeMenuContext } from \"../MenuContext\";\nimport type { TypeMenuGroupProps } from \"../MenuGroup\";\nimport type { TypeMenuRootProps } from \"../MenuRoot\";\nimport type {\n TypeNotEmptyChildren,\n TypeChildrenOrItems,\n TypeInternalItemProps,\n} from \"../types\";\nimport { MenuContent, type TypeMenuContentProps } from \"../MenuContent\";\n\nexport interface TypeMapMenuItemsProps<\n I extends TypeMenuItemProps = TypeMenuItemProps\n> {\n menuItems: I[];\n MenuItemComponent?: React.ComponentType<I>;\n}\nexport type TypeItemElement<I extends TypeMenuItemProps = TypeMenuItemProps> =\n React.ReactElement<\n | TypeMenuItemProps\n | TypeSubmenuItemProps<I, TypeSubmenuValidMenuComponentProps<I>>\n >;\nexport type TypeMenuGroupElement<\n I extends TypeMenuItemProps = TypeMenuItemProps\n> = React.ReactElement<TypeMenuGroupProps<I>>;\nexport type TypeMenuContentElement<\n I extends TypeMenuItemProps = TypeMenuItemProps\n> = React.ReactElement<TypeMenuContentProps<I>>;\n\nexport interface TypeMenuChildren {\n type: \"item\" | \"group\" | \"content\";\n element: TypeItemElement | TypeMenuGroupElement | TypeMenuContentElement;\n}\n\n// https://stackoverflow.com/questions/69119016/find-specific-children-components-regardless-of-depth-in-react\nconst walkAllChildren = (\n children: ReactNode,\n callback: (element: ReactNode, parents: readonly ReactNode[]) => void\n) => {\n const walk = (element: ReactNode, parents: readonly ReactNode[]) => {\n if (element === null || element === undefined) return;\n callback(element, parents);\n const newParents = [...parents, element];\n if (React.isValidElement(element) && element.props?.children) {\n React.Children.toArray(element.props.children).forEach((child) => {\n walk(child, newParents);\n });\n }\n };\n const parents: ReactNode[] = [];\n React.Children.toArray(children).forEach((child) => {\n walk(child, parents);\n });\n};\n\n// get the name from our custom __MENU_PRIMITIVE_TYPE property\nconst getComponentName = (element: ReactNode): string | undefined => {\n if (\n element &&\n typeof element === \"object\" &&\n \"type\" in element &&\n (typeof element.type === \"function\" || typeof element.type === \"object\") &&\n \"__MENU_PRIMITIVE_TYPE\" in element.type &&\n typeof element.type.__MENU_PRIMITIVE_TYPE === \"string\"\n ) {\n return element.type.__MENU_PRIMITIVE_TYPE;\n }\n};\n\n// Add a menu item to the provided allMenuItems array and menuItemsMap object\nconst addMenuItem = ({\n itemProps,\n allMenuItems,\n menuItemsMap,\n}: {\n itemProps: Omit<TypeInternalItemProps, \"index\">;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n const item = {\n ...itemProps,\n index: allMenuItems.length,\n };\n allMenuItems.push(item);\n menuItemsMap[`${item.id}`] = item;\n};\n\n// Add items from a MenuGroup element to the allMenuItems array and menuItemsMap object\nconst addItemsFromGroup = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n groupElement: menuGroup,\n allMenuItems,\n menuItemsMap,\n}: {\n groupElement: TypeMenuGroupElement<I>;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n const menuItems = menuGroup.props.menuItems;\n if (menuItems) {\n menuItems.forEach((menuItem) => {\n addMenuItem({\n itemProps: {\n id: menuItem.id,\n disabled: menuItem.disabled,\n menuItemProps: menuItem,\n menuGroupProps: menuGroup.props,\n },\n allMenuItems,\n menuItemsMap,\n });\n });\n } else if (menuGroup.props.children) {\n // Convert children to array to handle both arrays and iterables\n const children = React.Children.toArray(menuGroup.props.children);\n children.forEach((menuItem) => {\n // Only process React elements that have props\n if (React.isValidElement(menuItem)) {\n addMenuItem({\n itemProps: {\n id: menuItem.props.id,\n disabled: menuItem.props.disabled,\n menuItemProps: menuItem.props,\n menuGroupProps: menuGroup.props,\n },\n allMenuItems,\n menuItemsMap,\n });\n }\n });\n }\n};\n\n// Add items from a MenuContent element to the allMenuItems array and menuItemsMap object\nconst addItemsFromContent = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n contentElement: menuContent,\n allMenuItems,\n menuItemsMap,\n}: {\n contentElement: TypeMenuContentElement<I>;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n /**\n * No need to add items inside of MenuContent if it does not have menuItems\n * since we already traversed the children and menuContentProps are not needed.\n */\n if (!(\"menuItems\" in menuContent.props)) return;\n // Add items from menuItems prop if it isn't empty\n if (menuContent.props.menuItems) {\n menuContent.props.menuItems.forEach((menuItem) => {\n addMenuItem({\n itemProps: {\n id: menuItem.id,\n disabled: menuItem.disabled,\n menuItemProps: menuItem,\n },\n allMenuItems,\n menuItemsMap,\n });\n });\n }\n};\n\n// Traverse the children of a Menu component and add items to the allMenuItems array and menuItemsMap object\nconst setMenuItemsFromChildren = ({\n children,\n allMenuItems,\n menuItemsMap,\n}: {\n children: ReactNode;\n allMenuItems: TypeMenuContext[\"items\"];\n menuItemsMap: TypeMenuContext[\"itemsMap\"];\n}) => {\n walkAllChildren(children, (element) => {\n switch (getComponentName(element)) {\n case \"MenuItem\":\n // Cast element to the TypeItemElement since we know it's one of the three.\n // This is needed for the addMenuItem function.\n const menuItem = element as TypeItemElement;\n // Items in groups would have already been added to the map.\n if (menuItemsMap[`${menuItem.props.id}`]) return;\n addMenuItem({\n itemProps: {\n id: menuItem.props.id,\n disabled: menuItem.props.disabled,\n menuItemProps: menuItem.props,\n },\n allMenuItems,\n menuItemsMap,\n });\n break;\n case \"MenuGroup\":\n addItemsFromGroup({\n // Cast element to the TypeMenuGroupElement since we know it's a group and is needed for addItemsFromGroup.\n groupElement: element as TypeMenuGroupElement,\n allMenuItems,\n menuItemsMap,\n });\n break;\n case \"MenuContent\":\n addItemsFromContent({\n // Cast element to the TypeMenuContentElement since we know it's a content and is needed for addItemsFromContent.\n contentElement: element as TypeMenuContentElement,\n allMenuItems,\n menuItemsMap,\n });\n break;\n default:\n break;\n }\n });\n};\n\n// Returns a fragment containing a `MenuItemComponent` for each item in `menuItems`.\nexport const mapMenuItems = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n menuItems,\n MenuItemComponent = MenuItem,\n}: TypeMapMenuItemsProps<I>) => {\n return (\n <>\n {menuItems.map((menuItemProps) => (\n <MenuItemComponent key={menuItemProps.id} {...menuItemProps} />\n ))}\n </>\n );\n};\n\ntype TypeUseMenuChildrenProps<I extends TypeMenuItemProps = TypeMenuItemProps> =\n {\n children?: TypeMenuRootProps[\"children\"];\n menuItems?: I[];\n MenuItemComponent?: React.ComponentType<I>;\n };\n\n// Return a MenuContent using the provided menuItems\nexport const getChildrenFromMenuItems = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n menuItems,\n MenuItemComponent,\n}: {\n menuItems: I[];\n MenuItemComponent?: React.ComponentType<I>;\n}) => (\n <MenuContent menuItems={menuItems} MenuItemComponent={MenuItemComponent} />\n);\n\n// Hook to get all menu items and children for a Menu component\nexport const useMenuChildren = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n}: TypeUseMenuChildrenProps<I>) => {\n const { allMenuItems, menuItemsMap, children } = useMemo(() => {\n let children: TypeNotEmptyChildren = <></>;\n const menuItemsMap: TypeMenuContext[\"itemsMap\"] = {};\n const allMenuItems: TypeMenuContext[\"items\"] = [];\n\n // If a menuItems prop was passed to the Menu, we can bypass the children traversal.\n if (menuItems && menuItems.length) {\n menuItems.forEach((menuItem) => {\n addMenuItem({ itemProps: menuItem, allMenuItems, menuItemsMap });\n });\n children = getChildrenFromMenuItems({ menuItems, MenuItemComponent });\n } else if (childrenProp) {\n children = childrenProp;\n setMenuItemsFromChildren({\n children: childrenProp,\n allMenuItems,\n menuItemsMap,\n });\n }\n\n return { allMenuItems, menuItemsMap, children };\n }, [childrenProp, menuItems, MenuItemComponent]);\n\n return { allMenuItems, menuItemsMap, children };\n};\n","import type { TypeMenuContentProps } from \"./MenuContentTypes\";\nimport { StyledMenuContent } from \"./styles\";\nimport { useMenuContentContext } from \"../MenuContext\";\nimport { mapMenuItems } from \"../hooks/useMenuChildren\";\nimport { useCallback } from \"react\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport { DefaultMenuEmptyState } from \"./DefaultMenuEmptyState\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menucontent\n *\n * @description MenuContent is used to contain lists or grouped lists of {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems}.\n *\n * @example\n * <ActionMenu>\n * <MenuHeader>Header</MenuHeader>\n * <MenuContent>\n * <MenuGroup id=\"1\">\n * <MenuItem>Item 1</MenuItem>\n * </MenuGroup>\n * <MenuGroup id=\"2\">\n * <MenuItem>Item 2</MenuItem>\n * </MenuGroup>\n * </MenuContent>\n * <MenuFooter>Footer</MenuFooter>\n * </ActionMenu>\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItem}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup MenuGroup}\n */\n\nconst MenuContent = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n id = \"menu_content\",\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n onKeyDown,\n innerRef = null,\n emptyStateElement,\n ...rest\n}: TypeMenuContentProps<I>) => {\n const {\n getToggleButtonProps,\n getMenuProps,\n isListbox,\n hasVisibleItems,\n autoCloseOnEmpty,\n isInitialized,\n } = useMenuContentContext();\n const toggleButtonProps = getToggleButtonProps?.();\n\n const children =\n childrenProp || !menuItems || !menuItems.length\n ? childrenProp\n : mapMenuItems({ menuItems, MenuItemComponent });\n\n if (isInitialized && !hasVisibleItems && !autoCloseOnEmpty) {\n return emptyStateElement ?? <DefaultMenuEmptyState />;\n }\n\n // Hides the content if there are no children and it shouldn't show the empty state\n if (!children) {\n return null;\n }\n\n // Memoize the onKeyDown handler to prevent unnecessary re-renders\n const handleKeyDown = useCallback(\n (e) => {\n toggleButtonProps?.[\"onKeyDown\"]?.(e);\n onKeyDown?.(e);\n },\n [onKeyDown, toggleButtonProps?.[\"onKeyDown\"]]\n );\n\n return (\n <StyledMenuContent\n autoFocus\n id={id}\n tabIndex={0}\n // apply onKeyDown logic for downshift keyboard accessibility support\n onKeyDown={handleKeyDown}\n // apply active descendent updates to container for proper accessibility\n aria-activedescendant={toggleButtonProps?.[\"aria-activedescendant\"]}\n {...getMenuProps?.(\n {\n ...(isListbox ? { ref: innerRef } : { ref: innerRef, role: \"menu\" }),\n },\n // Suppress ref error for now\n { suppressRefError: true }\n )}\n {...rest}\n >\n {children}\n </StyledMenuContent>\n );\n};\n\nMenuContent.__MENU_PRIMITIVE_TYPE = \"MenuContent\";\n\nexport { MenuContent };\n","import styled from \"styled-components\";\nimport { Box, type TypeBoxProps } from \"@sproutsocial/seeds-react-box\";\n\nexport interface TypeDefaultMenuEmptyStateProps extends TypeBoxProps {\n children?: React.ReactNode;\n}\n\nconst StyledEmptyState = styled(Box)`\n padding: ${({ theme }) => theme.space[350]};\n text-align: center;\n font-size: ${({ theme }) => theme.typography[200].fontSize};\n`;\n\nconst DefaultMenuEmptyState = ({\n children = \"No items found\",\n ...props\n}: TypeDefaultMenuEmptyStateProps) => {\n return <StyledEmptyState {...props}>{children}</StyledEmptyState>;\n};\n\nexport { DefaultMenuEmptyState };\n","import React from \"react\";\nimport type { TypeMenuFooterProps } from \"./MenuFooterTypes\";\nimport { StyledMenuFooterBox } from \"./styles\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menufooter\n *\n * @description MenuFooter is a container used to hold footer content within a Menu.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader MenuHeader}\n */\n\nexport const MenuFooter = ({ children, ...rest }: TypeMenuFooterProps) => {\n return <StyledMenuFooterBox {...rest}>{children}</StyledMenuFooterBox>;\n};\n","import styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nexport const StyledMenuFooterBox = styled(Box)`\n padding: ${({ theme }) => theme.space[350]} ${({ theme }) => theme.space[400]};\n border-top: 1px solid ${(p) => p.theme.colors.container.border.base};\n`;\n","import React from \"react\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeMenuGroupProps } from \"./MenuGroupTypes\";\nimport { StyledMenuGroup, StyledTitle, StyledMenuGroupUl } from \"./styles\";\nimport { mapMenuItems } from \"../hooks/useMenuChildren\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup\n *\n * @description MenuGroup is used to group lists of {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems}.\n *\n * @example\n * <ActionMenu>\n * <MenuContent>\n * <MenuGroup title=\"Group 1\" id=\"1\">\n * <MenuItem>Item 1</MenuItem>\n * </MenuGroup>\n * <MenuGroup title=\"Group 2\" id=\"2\">\n * <MenuItem>Item 2</MenuItem>\n * </MenuGroup>\n * </MenuContent>\n * </ActionMenu>\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItem}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menucontent MenuContent}\n */\n\nconst MenuGroup = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n titleAs = \"div\",\n children: childrenProp,\n title,\n color,\n isSingleSelect,\n id,\n menuItems,\n MenuItemComponent,\n ...rest\n}: TypeMenuGroupProps<I>) => {\n // Generate a unique ID for the title\n const titleId = `menu-group-title-${Math.random().toString(36).slice(2, 11)}`;\n\n const children =\n childrenProp || !menuItems || !menuItems.length\n ? childrenProp\n : mapMenuItems({ menuItems, MenuItemComponent });\n\n if (!children) {\n return null;\n }\n return (\n // role=\"none\" on the outer <li>: this wrapper is purely visual (it exists\n // for the border-bottom divider between groups in the parent menu <ul>).\n // The ARIA group semantics live on the inner <ul> below — axe rejects\n // role=\"group\" on <li>, and a native <ul> here would trigger the `list`\n // rule because its children are <li role=\"none\"> menuitem wrappers.\n //\n // TODO(DS-4273): drop the list-based DOM entirely (MenuContent/MenuGroup\n // as <div>, no <ul>/<li>, no role=\"none\" wrappers). This is the followup\n // to DS-4271's minimal ARIA patch.\n <StyledMenuGroup\n role=\"none\"\n id={id}\n isSingleSelect={isSingleSelect}\n // TODO: fix this type since `color` should be valid here. TS can't resolve the correct type.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n color={color}\n {...rest}\n >\n {title && (\n <StyledTitle as={titleAs} id={titleId}>\n {title}\n </StyledTitle>\n )}\n <StyledMenuGroupUl\n role=\"group\"\n aria-labelledby={title ? titleId : undefined}\n >\n {children}\n </StyledMenuGroupUl>\n </StyledMenuGroup>\n );\n};\n\nMenuGroup.__MENU_PRIMITIVE_TYPE = \"MenuGroup\";\n\nexport { MenuGroup };\n","import styled from \"styled-components\";\nimport Text from \"@sproutsocial/seeds-react-text\";\nimport {\n border,\n layout,\n position,\n flexbox,\n grid,\n color,\n space,\n} from \"styled-system\";\nimport type { TypeMenuGroupBaseProps } from \"./MenuGroupTypes\";\n\nexport const StyledMenuGroup = styled.li<TypeMenuGroupBaseProps>`\n &:not(:last-child) {\n border-bottom: 1px solid\n ${({ theme }) => theme.colors.container.border.base};\n }\n list-style: none;\n margin: 0;\n\n ${border}\n ${position}\n ${color}\n ${flexbox}\n ${grid}\n ${layout}\n ${space}\n`;\n\nexport const StyledTitle = styled(Text.SmallSubHeadline)`\n font-size: ${({ theme }) => theme.typography[100].fontSize};\n margin: ${({ theme }) => theme.space[400]} ${({ theme }) => theme.space[400]}\n 0px ${({ theme }) => theme.space[400]};\n`;\n\nexport const StyledMenuGroupUl = styled.ul`\n margin: 0;\n padding: 0;\n`;\n","import React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n type RefObject,\n} from \"react\";\nimport styled from \"styled-components\";\nimport {\n Popout,\n type TypePopoutProps,\n type EnumPlacements,\n} from \"@sproutsocial/seeds-react-popout\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\n\nimport {\n MenuContentProvider,\n MenuToggleProvider,\n type TypeMenuContextProps,\n type TypeMenuProviderProps,\n useMenu,\n} from \"../MenuContext\";\nimport { MOTION_DURATION_FAST } from \"@sproutsocial/seeds-motion/unitless\";\n\nexport interface TypeMenuRootOwnProps {\n /** The element that is or contains an element that will toggle the menu when clicked.\n * May contain labels, buttons, inputs or other content as needed. */\n menuToggleElement: React.ReactElement<any>;\n /** Props to pass through to the underlying Popout.\n * Any Popout prop is valid except those explicitly omitted. */\n popoutProps?: Partial<\n Omit<TypePopoutProps, \"isOpen\" | \"setIsOpen\" | \"content\" | \"children\">\n >;\n /** The width of the Popout content.\n * Defaults to 200px or the width of the toggle element, whichever is greater.*/\n width?: TypePopoutProps[\"width\"];\n}\nexport interface TypeMenuRootProps\n extends Partial<TypeMenuContextProps>,\n Pick<TypeMenuProviderProps, \"children\">,\n TypeMenuRootOwnProps {}\n\nexport const CustomPopoutContent = styled(Popout.Content)`\n padding: 0;\n margin-left: 0;\n margin-right: 0;\n overflow: hidden;\n`;\n\nexport const menuPlacementOrigin: {\n [key in EnumPlacements]?: { originX: number; originY: number };\n} = {\n top: { originX: 0.5, originY: 1 },\n [\"top-start\"]: { originX: 0, originY: 1 },\n [\"top-end\"]: { originX: 1, originY: 1 },\n bottom: { originX: 0.5, originY: 0 },\n [\"bottom-start\"]: { originX: 0, originY: 0 },\n [\"bottom-end\"]: { originX: 1, originY: 0 },\n left: { originX: 1, originY: 0.5 },\n [\"left-start\"]: { originX: 1, originY: 0 },\n [\"left-end\"]: { originX: 1, originY: 1 },\n right: { originX: 0, originY: 0.5 },\n [\"right-start\"]: { originX: 0, originY: 0 },\n [\"right-end\"]: { originX: 0, originY: 1 },\n};\n\nexport const menuAnimationConfig = {\n variants: {\n initial: (\n custom: { placement: EnumPlacements } = { placement: \"bottom\" }\n ) => ({\n ...menuPlacementOrigin[custom.placement],\n scale: 0,\n opacity: 0,\n }),\n animate: (\n custom: { placement: EnumPlacements } = { placement: \"bottom\" }\n ) => ({\n ...menuPlacementOrigin[custom.placement],\n opacity: 1,\n scale: 1,\n\n transition: {\n type: \"tween\",\n duration: MOTION_DURATION_FAST,\n ease: \"circOut\",\n },\n }),\n exit: {\n opacity: 0,\n scale: 1,\n transition: {\n type: \"tween\",\n duration: MOTION_DURATION_FAST,\n ease: \"circIn\",\n },\n },\n },\n initial: \"initial\",\n animate: \"animate\",\n exit: \"exit\",\n};\n\nexport interface TypeMenuPopoutProps\n extends Pick<Partial<TypeMenuContextProps>, \"openMenu\" | \"closeMenu\">,\n TypePopoutProps {}\n\nexport const MenuPopout = ({\n content,\n width = \"300px\",\n isOpen,\n openMenu,\n closeMenu,\n focusLockProps,\n ...popoutProps\n}: TypeMenuPopoutProps) => {\n const setIsOpen = useCallback(\n (newIsOpen: boolean) => {\n newIsOpen ? openMenu?.() : closeMenu?.();\n },\n [openMenu, closeMenu]\n );\n\n return (\n <Popout\n isOpen={!!isOpen}\n setIsOpen={setIsOpen}\n content={(props) => (\n <CustomPopoutContent width={popoutProps.fullWidth ? \"initial\" : width}>\n {typeof content === \"function\" ? content(props) : content}\n </CustomPopoutContent>\n )}\n focusLockProps={{\n // correct jerking motion when scrolling while the Popout is open\n // returnFocus: false,\n crossFrame: false,\n ...focusLockProps,\n }}\n disableWrapperAria\n animationConfig={menuAnimationConfig}\n {...popoutProps}\n />\n );\n};\n\n/**\n * @description MenuRoot is a utility component used to handle React Context for our Menus. This component should rarely, if ever, be used directly unless building a custom menu type.\n */\n\nexport const MenuRoot = ({\n children,\n menuToggleElement,\n popoutProps: { placement = \"bottom\", focusLockProps, ...popoutProps } = {},\n width,\n ...contextProps\n}: TypeMenuRootProps) => {\n const {\n isOpen,\n openMenu,\n closeMenu,\n inputValue,\n getMenuProps,\n autoCloseOnEmpty = false,\n } = contextProps;\n\n const toggleElementRef = React.useRef<HTMLElement>(null);\n const [finalWidth, setFinalWidth] = React.useState<typeof width>();\n\n const min_width = 200;\n\n useLayoutEffect(() => {\n if (width) {\n setFinalWidth(width);\n } else if (toggleElementRef.current?.offsetWidth) {\n const toggleWidth = toggleElementRef.current.offsetWidth;\n setFinalWidth(Math.max(toggleWidth, min_width));\n } else {\n setFinalWidth(min_width);\n }\n }, [width, toggleElementRef.current?.offsetWidth]);\n\n const menuContext = useMenu(contextProps);\n\n // Hack to suppress error: \"downshift: You forgot to call the getMenuProps getter function on your component / element.\"\n getMenuProps?.({}, { suppressRefError: true });\n\n useEffect(() => {\n if (!inputValue || !autoCloseOnEmpty) return;\n\n if (!menuContext.hasVisibleItems && isOpen) {\n closeMenu?.();\n }\n }, [menuContext.hasVisibleItems, isOpen, inputValue, autoCloseOnEmpty]);\n\n return (\n <MenuPopout\n placement={placement}\n isOpen={!!isOpen}\n openMenu={openMenu}\n closeMenu={closeMenu}\n content={\n <MenuContentProvider menuContext={menuContext}>\n {children}\n </MenuContentProvider>\n }\n width={finalWidth}\n {...popoutProps}\n >\n {(toggleProps) => (\n <MenuToggleProvider\n menuContext={{\n ...menuContext,\n ...toggleProps,\n ref: mergeRefs<HTMLElement>(\n toggleProps.ref,\n toggleElementRef\n ) as RefObject<HTMLElement>,\n }}\n >\n {menuToggleElement}\n </MenuToggleProvider>\n )}\n </MenuPopout>\n );\n};\n","import React from \"react\";\nimport { Label, type TypeLabelProps } from \"@sproutsocial/seeds-react-label\";\nimport { useMenuToggleContext } from \"./MenuContext\";\n\nexport interface TypeMenuLabelProps extends Omit<TypeLabelProps, \"htmlFor\"> {\n // The children and required types are redundant, but they power the MenuLabel PropTable.\n children: React.ReactNode;\n /** Whether making a selection in the associated menu is required. */\n required?: boolean;\n /** ID of the associated form element. This prop is never valid to pass into MenuLabel\n * because MenuLabel passes its own htmlFor prop to the underlying Label component.*/\n htmlFor?: never;\n}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menulabel\n *\n * @description MenuLabel extends Label to create an accessible label for a Menu's toggle element.\n * A MenuLabel will automatically be associated with the corresponding menuToggleElement,\n * so an `htmlFor` prop is not necessary or allowed.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menutogglebutton MenuToggleButton}\n * @see {@link https://seeds.sproutsocial.com/components/label/ Label}\n */\nexport const MenuLabel = ({\n children,\n required = false,\n ...rest\n}: TypeMenuLabelProps) => {\n const { getLabelProps } = useMenuToggleContext();\n return (\n // This fallback id should never be used, but it is here to satisfy TypeScript since getLabelProps could be undefined.\n <Label\n htmlFor=\"fallback_menu_label\"\n required={required}\n {...getLabelProps?.()}\n {...rest}\n >\n {children}\n </Label>\n );\n};\n","import { Button, type TypeButtonProps } from \"@sproutsocial/seeds-react-button\";\nimport { useMenuToggleContext } from \"../MenuContext\";\nimport type React from \"react\";\n\nexport interface TypeMenuToggleButtonProps extends TypeButtonProps {}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menutogglebutton\n * @param props - MenuToggleButton accepts all the same props as Button.\n * @description MenuToggleButton extends the Button component to create a toggle for a menu.\n * @see {@link https://seeds.sproutsocial.com/components/button/ Button}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menulabel MenuLabel}\n */\nexport const MenuToggleButton = (props: TypeMenuToggleButtonProps) => {\n const { getToggleButtonProps, isListbox, getDropdownProps, ref, ariaProps } =\n useMenuToggleContext();\n\n const {\n onClick: userOnClick,\n onKeyDown: userOnKeyDown,\n onBlur: userOnBlur,\n ...restProps\n } = props;\n\n const defaultDropdownProps = {\n ref,\n onClick: userOnClick,\n onKeyDown: userOnKeyDown,\n onBlur: userOnBlur,\n };\n\n const dropdownProps =\n getDropdownProps?.({\n ...defaultDropdownProps,\n preventKeyAction: true,\n }) ?? defaultDropdownProps;\n\n const toggleButtonProps = getToggleButtonProps?.({\n ...dropdownProps,\n refKey: \"innerRef\",\n ...ariaProps,\n ...(isListbox ? {} : { role: \"button\", \"aria-haspopup\": \"menu\" }),\n });\n\n // Clean up default downshift aria attributes\n // If there is not an active descendant, remove the attribute\n if (toggleButtonProps && toggleButtonProps[\"aria-activedescendant\"] === \"\") {\n toggleButtonProps[\"aria-activedescendant\"] = undefined;\n }\n // If the menu is closed, remove the aria-controls attribute\n if (toggleButtonProps && toggleButtonProps[\"aria-expanded\"] === false) {\n // @ts-expect-error downshift types require aria-controls even though it is not required\n toggleButtonProps[\"aria-controls\"] = undefined;\n }\n // Remove aria-labelledby, we add our own Label component\n if (toggleButtonProps) {\n toggleButtonProps[\"aria-labelledby\"] = undefined;\n }\n\n return (\n <Button appearance=\"secondary\" {...toggleButtonProps} {...restProps} />\n );\n};\n","import React from \"react\";\nimport { Input, type TypeInputProps } from \"@sproutsocial/seeds-react-input\";\nimport {\n useItemFiltering,\n type TypeGetIsItemVisibleFn,\n} from \"../hooks/useItemFiltering\";\nimport {\n useMenuContentContext,\n type TypeDownshiftSelectReturnValue,\n} from \"../MenuContext\";\n\nexport interface TypeMenuSearchInputProps extends TypeInputProps {\n /** A function that can be passed to override the default filtering logic */\n getIsItemVisible?: TypeGetIsItemVisibleFn;\n}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput\n *\n * @description MenuSearchInput is search input that can be added to the MenuHeader to filter the items.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader MenuHeader}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput MenuSearchTokenInput}\n */\nexport const MenuSearchInput = ({\n getIsItemVisible,\n inputProps,\n onChange,\n \"aria-label\": ariaLabel,\n ...restInputProps\n}: TypeMenuSearchInputProps) => {\n const {\n items,\n itemToString,\n setHiddenItemsMap,\n isOpen,\n getToggleButtonProps,\n } = useMenuContentContext();\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems: items,\n itemToString,\n getIsItemVisible,\n setHiddenItemsMap,\n });\n\n React.useEffect(() => {\n // handles when open/close state changes or if input is controlled\n updateFilteredItems({ inputValue: restInputProps.value || \"\" });\n }, [isOpen, restInputProps.value]);\n\n const toggleButtonProps: Partial<\n ReturnType<Required<TypeDownshiftSelectReturnValue>[\"getToggleButtonProps\"]>\n > = getToggleButtonProps?.() || {};\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n // prevents selecting items with space key when input is focused\n if (e.key === \" \") return;\n toggleButtonProps.onKeyDown?.(e);\n },\n [toggleButtonProps.onKeyDown]\n );\n\n return (\n <Input\n onChange={(e, value) => {\n updateFilteredItems({ inputValue: value });\n onChange?.(e, value);\n }}\n // apply onKeyDown logic for downshift keyboard accessibility support\n onKeyDown={handleKeyDown}\n autoComplete={false}\n ariaLabel={ariaLabel}\n inputProps={{\n [\"aria-autocomplete\"]: \"list\",\n [\"aria-activedescendant\"]: toggleButtonProps[\"aria-activedescendant\"],\n [\"aria-controls\"]: toggleButtonProps[\"aria-controls\"],\n ...inputProps,\n }}\n {...restInputProps}\n />\n );\n};\n","import React from \"react\";\nimport type { TypeMenuContext } from \"../MenuContext\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { itemToString as defaultItemToString } from \"../utils/downshiftDefaults\";\n\n/* Receives the internal Downshift version of the item, which is different from TypeMenuItemProps*/\nexport type TypeGetIsItemVisibleFn = (\n item: TypeInternalItemProps,\n inputValue: string\n) => boolean;\n\n/**\n * @description A function to get the default getIsItemVisible function\n *\n * @param itemToString - A function to convert an item to a string\n *\n * @returns The default getIsItemVisible function\n */\nexport const getDefaultGetIsItemVisible =\n (\n itemToString: TypeMenuContext[\"itemToString\"] = defaultItemToString\n ): TypeGetIsItemVisibleFn =>\n (item, inputValue) =>\n itemToString(item).toLowerCase().includes(inputValue.toLowerCase());\n\nexport type TypeGetShouldFilterFn = (arg: { inputValue?: string }) => boolean;\n\nexport const defaultGetShouldFilter: TypeGetShouldFilterFn = ({ inputValue }) =>\n Boolean(inputValue);\n\nexport interface TypeItemFilteringProps {\n allMenuItems: TypeInternalItemProps[];\n itemToString?: TypeMenuContext[\"itemToString\"];\n getIsItemVisible?: TypeGetIsItemVisibleFn;\n getShouldFilter?: TypeGetShouldFilterFn;\n setHiddenItemsMap?: TypeMenuContext[\"setHiddenItemsMap\"];\n}\n\nexport const useItemFiltering = ({\n allMenuItems,\n itemToString,\n getIsItemVisible = getDefaultGetIsItemVisible(itemToString),\n getShouldFilter = defaultGetShouldFilter,\n setHiddenItemsMap: setHiddenItemsMapProp,\n}: TypeItemFilteringProps) => {\n const [hiddenItemsMap, setHiddenItemsMap] = React.useState<\n Required<TypeMenuContext>[\"hiddenItemsMap\"]\n >({});\n\n const updateFilteredItems = React.useCallback(\n ({ inputValue }) => {\n const newHiddenItems = getShouldFilter({ inputValue })\n ? allMenuItems.reduce((map, item) => {\n const isItemVisible = getIsItemVisible(item, inputValue);\n return isItemVisible ? map : { ...map, [item.id]: true };\n }, {} as typeof hiddenItemsMap)\n : {};\n\n setHiddenItemsMap(newHiddenItems);\n setHiddenItemsMapProp?.(newHiddenItems);\n },\n [allMenuItems, getIsItemVisible, getShouldFilter]\n );\n\n return {\n getIsItemVisible,\n updateFilteredItems,\n };\n};\n","import type { TypeInternalItemProps } from \"../types\";\n\nexport const itemToString = (item: TypeInternalItemProps | null) => {\n return item ? item.id : \"\";\n};\n\nexport const itemToKey = (item: TypeInternalItemProps | null) => {\n return item ? item.id : \"\";\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n TokenInput,\n type TypeTokenInputProps,\n type TypeTokenSpec,\n} from \"@sproutsocial/seeds-react-token-input\";\nimport type { TypeInternalItemProps } from \"./types\";\nimport { MenuContentContext, MenuToggleContext } from \"./MenuContext\";\n\nconst StyledTokenInputWrapper = styled.div`\n > div {\n padding: 4px;\n }\n\n input {\n line-height: 21px;\n margin: 0;\n padding: 2px 4px;\n }\n\n .TokenInput-token button {\n margin-top: 0;\n padding: 1px 4px;\n }\n`;\n\nexport interface TypeMenuTokenInputProps extends TypeTokenInputProps {\n /** A function that can be passed to override the default token props */\n getTokenProps?: (itemId: string) => Partial<TypeTokenSpec>;\n /** Specify the menu context to use. MenuToggleContext is the default.\n * This prop is only needed for specialized use cases. */\n MenuContext?: typeof MenuToggleContext | typeof MenuContentContext;\n}\n\n/**\n * @description MenuTokenInput is the basis of the MenuSearchTokenInput and AutocompleteTokenInput components\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput MenuSearchInput}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput MenuSearchTokenInput}\n */\nexport const MenuTokenInput = ({\n inputProps = {},\n getTokenProps,\n onKeyDown,\n MenuContext = MenuToggleContext,\n ...tokenInputProps\n}: TypeMenuTokenInputProps) => {\n const {\n itemToString,\n getSelectedItemProps,\n removeSelectedItem,\n setActiveIndex,\n selectedItems = [],\n } = React.useContext(MenuContext);\n\n const removeToken = (tokenId: string) => {\n const tokenToRemove = selectedItems?.find((item) => item.id === tokenId);\n tokenToRemove && removeSelectedItem?.(tokenToRemove);\n };\n\n return (\n <StyledTokenInputWrapper>\n <TokenInput\n onKeyDown={(e, value) => {\n // set active index to last item when arrow left is pressed and input is empty\n if (e.key === \"ArrowLeft\" && !value && selectedItems.length) {\n setActiveIndex?.(selectedItems.length - 1);\n }\n onKeyDown?.(e, value);\n }}\n inputProps={{\n autoComplete: \"off\",\n type: \"search\",\n ...inputProps,\n }}\n tokens={selectedItems.map((item, index) => {\n const {\n tokenProps: { ref, onKeyDown, ...restTokenProps } = {\n ref: undefined,\n onKeyDown: undefined,\n },\n ...rest\n } = getTokenProps?.(item.id) || {};\n return {\n id: item.id,\n value: itemToString?.(item) || item.id,\n tokenProps: {\n ...getSelectedItemProps?.({\n selectedItem: item,\n index,\n ref,\n refKey: \"innerRef\",\n onKeyDown,\n }),\n // nullify the onclick provided from downshift\n // TokenInput deletes the token on click\n onClick: undefined,\n tabIndex: 0,\n ...restTokenProps,\n },\n ...rest,\n };\n })}\n onRemoveToken={removeToken}\n {...tokenInputProps}\n />\n </StyledTokenInputWrapper>\n );\n};\n","import React from \"react\";\nimport {\n useItemFiltering,\n type TypeGetIsItemVisibleFn,\n} from \"../hooks/useItemFiltering\";\nimport {\n MenuContentContext,\n useMenuContentContext,\n type TypeDownshiftSelectReturnValue,\n} from \"../MenuContext\";\nimport {\n MenuTokenInput,\n type TypeMenuTokenInputProps,\n} from \"../MenuTokenInput\";\n\nexport interface TypeMenuSearchTokenInputProps extends TypeMenuTokenInputProps {\n /** A function that can be passed to override the default filtering logic */\n getIsItemVisible?: TypeGetIsItemVisibleFn;\n}\n\n/**\n * @link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchtokeninput\n *\n * @description MenuSearchTokenInput is a token input that can be added to the MenuHeader to filter the items.\n *\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuheader MenuHeader}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menusearchinput MenuSearchInput}\n */\nexport const MenuSearchTokenInput = ({\n getIsItemVisible,\n getTokenProps,\n onChange,\n inputProps: { value: inputPropsValue, ...inputProps } = {},\n value,\n ...tokenInputProps\n}: TypeMenuSearchTokenInputProps) => {\n const {\n items,\n itemToString,\n setHiddenItemsMap,\n isOpen,\n getToggleButtonProps,\n } = useMenuContentContext();\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems: items,\n itemToString,\n getIsItemVisible,\n setHiddenItemsMap,\n });\n\n // set controlled value\n const controlledValue =\n value || inputPropsValue !== undefined ? `${inputPropsValue}` : undefined;\n\n // internal state helps to keep track of the input value since it sometimes resets on its own\n const [internalValue, setInternalValue] = React.useState(\n controlledValue || \"\"\n );\n\n // any time state is updated, also update the filtered items\n const updateFilteredState = React.useCallback(\n // defaults to an empty string if no value is passed\n (value: string = \"\") => {\n setInternalValue(value);\n updateFilteredItems({ inputValue: value });\n },\n [updateFilteredItems]\n );\n\n React.useEffect(() => {\n // handles when input is controlled to keep internal state updated\n updateFilteredState(controlledValue);\n }, [controlledValue]);\n\n React.useEffect(() => {\n // handles when open/close state changes\n updateFilteredState(controlledValue);\n }, [isOpen]);\n\n const toggleButtonProps: Partial<\n ReturnType<Required<TypeDownshiftSelectReturnValue>[\"getToggleButtonProps\"]>\n > = getToggleButtonProps?.() || {};\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n // prevents selecting items with space key when input is focused\n if (e.key === \" \") return;\n toggleButtonProps.onKeyDown?.(e);\n },\n [toggleButtonProps.onKeyDown]\n );\n\n return (\n <MenuTokenInput\n onChange={(e, value) => {\n updateFilteredState(value);\n onChange?.(e, value);\n }}\n // apply onKeyDown logic for downshift keyboard accessibility support\n onKeyDown={handleKeyDown}\n inputProps={{\n value: internalValue,\n [\"aria-activedescendant\"]: toggleButtonProps[\"aria-activedescendant\"],\n [\"aria-controls\"]: toggleButtonProps[\"aria-controls\"],\n ...inputProps,\n }}\n MenuContext={MenuContentContext}\n {...tokenInputProps}\n />\n );\n};\n","import React from \"react\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { getChildrenFromMenuItems } from \"../hooks/useMenuChildren\";\nimport { useMenuContentContext, useMenuToggleContext } from \"../MenuContext\";\nimport {\n MenuItem,\n MenuItemActionRight,\n type TypeMenuItemProps,\n} from \"../MenuItem\";\nimport type {\n TypeSubmenuItemProps,\n TypeSubmenuValidMenuComponentProps,\n} from \"./SubmenuItemTypes\";\n\nconst SubmenuItemTrigger = ({\n id,\n children,\n innerRef,\n ...rest\n}: TypeMenuItemProps) => {\n const { getToggleButtonProps, getDropdownProps, ref, ariaProps } =\n useMenuToggleContext();\n const toggleRef =\n ref && innerRef\n ? mergeRefs([ref, innerRef].filter(Boolean))\n : ref || innerRef;\n return (\n <MenuItem\n {...rest}\n {...getToggleButtonProps?.(\n {\n ...(getDropdownProps?.({\n ref: toggleRef,\n preventKeyAction: true,\n }) || { ref: toggleRef }),\n refKey: \"innerRef\",\n role: \"menuitem\",\n ...ariaProps,\n },\n { suppressRefError: true }\n )}\n id={id}\n >\n <Box display=\"flex\" justifyContent=\"space-between\">\n {children}\n <MenuItemActionRight>\n <Icon name=\"chevron-right-outline\" />\n </MenuItemActionRight>\n </Box>\n </MenuItem>\n );\n};\n\nconst doesRefContainEventTarget = (\n ref: React.RefObject<HTMLElement | undefined>,\n event: MouseEvent\n) => {\n return (\n ref.current &&\n event.target instanceof Node &&\n ref.current.contains(event.target)\n );\n};\n\nconst SubmenuItem = <\n I extends TypeMenuItemProps,\n P extends TypeSubmenuValidMenuComponentProps<I>\n>({\n MenuComponent,\n menuProps: {\n children: menuChildren,\n menuItems,\n MenuItemComponent,\n popoutProps: { popperProps, ...popoutProps } = {},\n onStateChange,\n ...menuProps\n },\n // isOpen,\n // onToggleSubmenu,\n id,\n children,\n ...rest\n}: TypeSubmenuItemProps<I, P>) => {\n const {\n highlightedIndex,\n setHighlightedIndex,\n itemsMap,\n isOpen: parentIsOpen,\n } = useMenuContentContext();\n const [submenuIsFocused, setSubmenuIsFocused] = React.useState(false);\n const [submenuIsOpen, setSubmenuIsOpen] = React.useState(false);\n const [submenuIsActive, setSubmenuIsActive] = React.useState(false);\n const submenuItemRef = React.useRef<HTMLElement>(null);\n const submenuRef = React.useRef<HTMLDivElement>(null);\n\n // get children for both use cases so it can be wrapped in a submenu div\n const menuContent = menuItems\n ? getChildrenFromMenuItems({ menuItems, MenuItemComponent })\n : menuChildren;\n\n const item = (itemsMap[id] || {\n index: 0,\n id,\n }) as TypeInternalItemProps;\n\n // React.useEffect(() => {\n // debugger;\n // // reset isOpen on render\n // setSubmenuIsOpen(false);\n // setSubmenuIsActive(false);\n // }, []);\n\n React.useEffect(() => {\n if (highlightedIndex === item.index) {\n // Open submenu when item becomes highlighted\n !submenuIsOpen && setSubmenuIsOpen(true);\n } else if (submenuIsOpen && highlightedIndex !== -1) {\n // Close submenu when another item is highlighted\n setSubmenuIsOpen(false);\n setSubmenuIsActive(false);\n }\n }, [highlightedIndex, item.index, submenuIsOpen, setSubmenuIsOpen]);\n\n const onSubmenuStateChange = React.useCallback(\n (state) => {\n if (state.isOpen !== undefined) {\n // Ensures the menu opens and closes when the state changes\n setSubmenuIsOpen(state.isOpen);\n if (!state.isOpen) {\n // Reset the submenu focus and highlighted index when the submenu closes\n setSubmenuIsFocused(false);\n setHighlightedIndex?.(-1);\n }\n }\n onStateChange?.(state);\n },\n [onStateChange, setSubmenuIsOpen]\n );\n\n // Callback for navigating the submenu wit harrow keys\n const onSubmenuKeydown = (e: KeyboardEvent): void => {\n switch (e.key) {\n case \"ArrowRight\":\n case \" \":\n case \"Enter\":\n // Focus the submenu if item highlighted and right arrow key is pressed\n if (!submenuIsFocused && submenuIsOpen) {\n // stop propagation to avoid interacting with other components\n e.stopPropagation();\n setSubmenuIsFocused(true);\n }\n break;\n case \"ArrowLeft\":\n // Return focus to the parent menu if submenu is focused and left arrow key is pressed\n if (submenuIsFocused) {\n // stop propagation to avoid interacting with other components\n e.stopPropagation();\n setSubmenuIsFocused(false);\n }\n break;\n default:\n break;\n }\n };\n\n const onMenuItemClick = () => {\n const newIsActive = !submenuIsActive;\n // Lock the submenu in an active open state when clicked\n // or close the menu and unlock if it is open\n setSubmenuIsActive(newIsActive);\n setSubmenuIsOpen(newIsActive);\n };\n\n const onBodyClick = (e: MouseEvent): void => {\n // Prevent closing the parent menu when clicking on the submenu item\n if (doesRefContainEventTarget(submenuItemRef, e)) {\n e.stopPropagation();\n onMenuItemClick();\n }\n // Prevent closing other popouts when clicking on inside the submenu\n // This doesn't work because it's overridden by the logic in Popout the closes when clicked outside\n // if (doesRefContainEventTarget(submenuRef, e)) {\n // e.stopPropagation();\n // }\n };\n\n React.useEffect(() => {\n if (document && document.body) {\n document.body.addEventListener(\"click\", onBodyClick, {\n capture: true,\n });\n document.body.addEventListener(\"keydown\", onSubmenuKeydown, {\n capture: true,\n });\n return () => {\n document.body.removeEventListener(\"click\", onBodyClick, {\n capture: true,\n });\n document.body.removeEventListener(\"keydown\", onSubmenuKeydown, {\n capture: true,\n });\n };\n }\n }, [document, onSubmenuKeydown]);\n\n const subMenuContent = (\n <div\n ref={submenuRef}\n onKeyDown={(e) => {\n // prevent keydown on submenu triggering the parent menu\n e.stopPropagation();\n }}\n tabIndex={-1}\n >\n {menuContent}\n </div>\n );\n\n return (\n <MenuComponent\n {...({\n ...menuProps,\n children: subMenuContent,\n menuToggleElement: (\n <SubmenuItemTrigger\n innerRef={submenuItemRef}\n id={id}\n children={children}\n active={submenuIsActive}\n {...rest}\n />\n ),\n isOpen: submenuIsOpen,\n onStateChange: onSubmenuStateChange,\n popoutProps: {\n placement: \"right\",\n popperProps: {\n modifiers: {\n offset: {\n offset: \"0,18\",\n },\n },\n ...popperProps,\n },\n focusOnContent: submenuIsFocused,\n ...popoutProps,\n },\n } as P)}\n />\n );\n};\n\nSubmenuItem.__MENU_PRIMITIVE_TYPE = \"MenuItem\";\n\nexport { SubmenuItem };\n","import styled, { css } from \"styled-components\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport {\n MenuToggleButton,\n type TypeMenuToggleButtonProps,\n} from \"./MenuToggleButton\";\nimport { useMenuToggleContext } from \"./MenuContext\";\n\nexport interface TypeListboxToggleButtonProps\n extends TypeMenuToggleButtonProps {\n invalid?: boolean;\n size?: \"small\" | \"default\" | \"large\";\n}\n\nexport const StyledListboxToggleButton = styled(\n MenuToggleButton\n)<TypeListboxToggleButtonProps>`\n background-color: ${(props) => props.theme.colors.form.background.base};\n border: 1px solid ${(props) => props.theme.colors.form.border.base};\n border-radius: ${(props) => props.theme.radii[500]};\n transition: border-color ${(props) => props.theme.duration.fast}\n ${(props) => props.theme.easing.ease_in},\n box-shadow ${(props) => props.theme.duration.fast}\n ${(props) => props.theme.easing.ease_in};\n font-weight: ${(props) => props.theme.fontWeights.normal};\n &:active {\n transform: none;\n }\n\n padding: ${(props) => {\n switch (props.size) {\n case \"large\":\n return `${props.theme.space[400]} ${props.theme.space[400]} ${props.theme.space[400]} ${props.theme.space[400]}`;\n\n case \"small\":\n return `${props.theme.space[200]} ${props.theme.space[200]} ${props.theme.space[200]} ${props.theme.space[200]}`;\n\n case \"default\":\n default:\n return `${props.theme.space[300]} ${props.theme.space[300]} ${props.theme.space[300]} ${props.theme.space[300]}`;\n }\n }};\n font-size: ${(props) => {\n switch (props.size) {\n case \"large\":\n return props.theme.typography[300].fontSize;\n\n case \"small\":\n case \"default\":\n default:\n return props.theme.typography[200].fontSize;\n }\n }};\n\n ${(props) =>\n props.invalid &&\n css`\n border-color: ${(props) => props.theme.colors.form.border.error};\n `}\n`;\n\nexport interface TypeStyledChevronProps {\n $isOpen?: boolean;\n invalid?: boolean;\n}\n\nconst StyledChevron = styled.div<TypeStyledChevronProps>`\n margin-left: ${({ theme }) => theme.space[300]};\n ${({ $isOpen }) =>\n $isOpen &&\n `\n\t\ttransform: rotate(-180deg);\n\t`}\n transition: transform 0.15s;\n\n ${({ invalid }) =>\n invalid &&\n css`\n color: ${(props) => props.theme.colors.icon.error};\n `}\n`;\n\nconst StyledInnerButton = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nexport const ListboxToggleButton = ({\n children,\n size = \"default\",\n ...buttonProps\n}: TypeListboxToggleButtonProps) => {\n const { isOpen } = useMenuToggleContext();\n return (\n <StyledListboxToggleButton\n appearance=\"unstyled\"\n size={size}\n {...buttonProps}\n >\n <StyledInnerButton>\n {children}\n <StyledChevron $isOpen={isOpen} invalid={buttonProps.invalid}>\n <Icon name=\"chevron-down-outline\" fixedWidth aria-hidden />\n </StyledChevron>\n </StyledInnerButton>\n </StyledListboxToggleButton>\n );\n};\n","import React, { useEffect } from \"react\";\nimport {\n useSelect,\n type UseSelectState,\n type UseSelectStateChange,\n} from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { itemToString } from \"../utils/downshiftDefaults\";\nimport { MenuRoot } from \"../MenuRoot\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\n\nimport type { TypeActionMenuProps } from \"./ActionMenuTypes\";\n\n// Manually fire the onClick handler when Enter or Space is pressed\nconst handleStateChange = (\n changes: UseSelectStateChange<TypeInternalItemProps>,\n currentSelectedItem: UseSelectState<TypeInternalItemProps>[\"selectedItem\"]\n) => {\n // if not Enter or Space key, do nothing\n if (\n !(\n changes.type === useSelect.stateChangeTypes.ToggleButtonKeyDownEnter ||\n changes.type === useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton\n )\n ) {\n return;\n }\n\n const selectedItem = changes.selectedItem || currentSelectedItem;\n\n // if selectedItem empty, do nothing\n if (!selectedItem) return;\n\n // if selectedItem is disabled, do nothing\n if (selectedItem.disabled) {\n return;\n }\n\n // Determine if Enter key was pressed\n const isEnterKeyDown =\n changes.type === useSelect.stateChangeTypes.ToggleButtonKeyDownEnter;\n\n // selectedItem props\n const selectedItemProps = selectedItem.menuItemProps;\n\n if (selectedItemProps?.onClick) {\n // Create a synthetic event to pass into the onClick\n const syntheticKeyboardEvent = new KeyboardEvent(\"keydown\", {\n key: isEnterKeyDown ? \"Enter\" : \" \",\n code: isEnterKeyDown ? \"Enter\" : \"Space\",\n bubbles: true,\n cancelable: true,\n view: window,\n });\n\n // Manually call the onClick handler with a simulated event\n // Cast it to React.MouseEvent to match onClick expectations\n selectedItemProps?.onClick?.(\n syntheticKeyboardEvent as unknown as React.MouseEvent<HTMLElement>\n );\n }\n\n if (selectedItemProps?.href) {\n if (selectedItemProps.target) {\n window.open(selectedItemProps.href, selectedItemProps.target);\n } else {\n window.location.href = selectedItemProps?.href;\n }\n }\n};\n\n/**\n * @link https://seeds.sproutsocial.com/components/action-menu/\n *\n * @description An ActionMenu contains a list of clickable items like buttons or links. ActionMenus do not hold a selection.\n *\n * **To select menu items:**\n * @see {@link https://seeds.sproutsocial.com/components/single-select-menu SingleSelectMenu}\n * @see {@link https://seeds.sproutsocial.com/components/multi-select-menu MultiSelectMenu}\n */\nexport const ActionMenu = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n stateReducer: externalStateReducer,\n MenuRootComponent = MenuRoot,\n ...useSelectProps\n}: TypeActionMenuProps<I>) => {\n const { allMenuItems, menuItemsMap, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n });\n const [currentSelectedItem, setCurrentSelectedItem] =\n React.useState<UseSelectState<TypeInternalItemProps>[\"selectedItem\"]>(null);\n\n const { isOpen, ...useSelectReturnProps } = useSelect({\n ...defaultDownshiftProps.select,\n items: allMenuItems,\n itemToString,\n onStateChange: (changes) => handleStateChange(changes, currentSelectedItem),\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n externalStateReducer\n ),\n ...useSelectProps,\n });\n\n useEffect(() => {\n setCurrentSelectedItem(useSelectReturnProps.selectedItem);\n }, [useSelectReturnProps.selectedItem]);\n\n return (\n <MenuRootComponent\n {...{\n isListbox: false,\n items: allMenuItems,\n itemsMap: menuItemsMap,\n itemToString,\n isOpen,\n ...useSelectProps,\n ...useSelectReturnProps,\n ...restDefaults,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n\nexport default ActionMenu;\n","import React from \"react\";\nimport type {\n UseComboboxProps,\n UseSelectProps,\n UseMultipleSelectionProps,\n} from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport type {\n TypeMenuContextBaseProps,\n TypeDownshiftMultiSelectProps,\n} from \"../MenuContext\";\nimport {\n useComboboxStateReducer,\n useComboboxStateReducerForMulti,\n} from \"../reducers/useComboboxStateReducer\";\nimport {\n useSelectStateReducer,\n useSelectStateReducerForMulti,\n} from \"../reducers/useSelectStateReducer\";\nimport { getMultiSelectOverrides } from \"../utils/getMultiSelectOverrides\";\n\nexport const defaultUseSelectProps: Partial<\n UseSelectProps<TypeInternalItemProps>\n> = {\n stateReducer: useSelectStateReducer,\n};\n\nexport const defaultUseComboboxProps: Partial<\n UseComboboxProps<TypeInternalItemProps>\n> = {\n stateReducer: useComboboxStateReducer,\n};\n\nexport const defaultUseSelectPropsForMulti: Partial<\n UseSelectProps<TypeInternalItemProps>\n> = {\n stateReducer: useSelectStateReducerForMulti,\n};\n\nexport const defaultUseComboboxPropsForMulti: Partial<\n UseComboboxProps<TypeInternalItemProps>\n> = {\n stateReducer: useComboboxStateReducerForMulti,\n};\n\nexport interface TypeUseDownshiftDefaultsReturn\n extends Pick<\n Required<TypeMenuContextBaseProps>,\n \"hiddenItemsMap\" | \"setHiddenItemsMap\" | \"hiddenItemsCount\"\n > {\n defaultDownshiftProps: {\n select: Partial<UseSelectProps<TypeInternalItemProps>>;\n combobox: Partial<UseComboboxProps<TypeInternalItemProps>>;\n multi: Partial<UseMultipleSelectionProps<TypeInternalItemProps>>;\n };\n}\n\nexport const itemToKey = (item: TypeInternalItemProps | null) => item?.id;\n\nexport const useDownshiftDefaults = ({\n isCombobox = false,\n isMulti = false,\n multiSelectProps = {},\n}: {\n isCombobox?: boolean;\n isMulti?: boolean;\n multiSelectProps?: TypeDownshiftMultiSelectProps;\n} = {}): TypeUseDownshiftDefaultsReturn => {\n const [hiddenItemsMap, setHiddenItemsMap] = React.useState<\n Record<string, boolean>\n >({});\n const hiddenItemsCount = React.useMemo(\n () => Object.keys(hiddenItemsMap).filter(Boolean).length,\n [hiddenItemsMap]\n );\n const isItemDisabled = React.useCallback<\n Required<UseSelectProps<TypeInternalItemProps>>[\"isItemDisabled\"]\n >(\n (item) => Boolean(item.disabled || hiddenItemsMap[item.id]),\n [hiddenItemsMap]\n );\n\n return {\n hiddenItemsMap,\n hiddenItemsCount,\n setHiddenItemsMap,\n defaultDownshiftProps: {\n select: !isCombobox\n ? {\n itemToKey,\n // disabling while item.hidden so that hidden items are ignored by downshift\n isItemDisabled,\n ...(isMulti\n ? defaultUseSelectPropsForMulti\n : defaultUseSelectProps),\n }\n : {},\n combobox: isCombobox\n ? {\n itemToKey,\n // disabling while item.hidden so that hidden items are ignored by downshift\n isItemDisabled,\n ...(isMulti\n ? defaultUseComboboxPropsForMulti\n : defaultUseComboboxProps),\n }\n : {},\n multi: isMulti\n ? {\n itemToKey,\n // handles the prop name mapping for multi select\n ...getMultiSelectOverrides(multiSelectProps),\n }\n : {},\n },\n };\n};\n","import { useCombobox } from \"downshift\";\nimport type { UseComboboxProps } from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\n\nexport const useComboboxStateReducer: Required<\n UseComboboxProps<TypeInternalItemProps>\n>[\"stateReducer\"] = (state, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n /** If downshift is blurred by tabbing within the menu, stay open */\n case useCombobox.stateChangeTypes.InputBlur:\n return {\n ...changes,\n // keep menu open on blur\n isOpen: true,\n };\n\n /** Return standard change payload */\n default:\n return changes;\n }\n};\n\nexport const useComboboxStateReducerForMulti: Required<\n UseComboboxProps<TypeInternalItemProps>\n>[\"stateReducer\"] = reduceReducers(\n useComboboxStateReducer,\n (state, actionAndChanges) => {\n const { changes, type } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputBlur:\n return {\n ...changes,\n ...(changes.selectedItem && {\n inputValue: \"\",\n }),\n };\n default:\n return changes;\n }\n }\n);\n","export type TypeReducer<S extends Object, A extends { changes: Partial<S> }> = (\n state: S,\n action: A\n) => Partial<S>;\nexport const reduceReducers =\n <S extends Object, A extends { changes: Partial<S> }>(\n ...reducers: (undefined | TypeReducer<S, A>)[]\n ): TypeReducer<S, A> =>\n (state, action) =>\n reducers.reduce(\n (changes, nextReducer) =>\n nextReducer\n ? nextReducer(state, {\n ...action,\n changes,\n })\n : changes,\n action.changes as Partial<S>\n );\n","import { useSelect } from \"downshift\";\nimport type { UseSelectProps } from \"downshift\";\nimport type { TypeInternalItemProps } from \"../types\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\n\nexport const useSelectStateReducer: Required<\n UseSelectProps<TypeInternalItemProps>\n>[\"stateReducer\"] = (state, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n switch (type) {\n /** If downshift is blurred by tabbing within the menu, stay open */\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n return {\n ...changes,\n // keep menu open on blur\n isOpen: true,\n };\n\n /** Return standard change payload */\n default:\n return changes;\n }\n};\n\nexport const useSelectStateReducerForMulti: Required<\n UseSelectProps<TypeInternalItemProps>\n>[\"stateReducer\"] = reduceReducers(\n useSelectStateReducer,\n (state, actionAndChanges) => {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep the menu open after selection.\n // TODO: Confirm that keeping highlightedIndex the same is the desired UX\n // highlightedIndex: 0, // with the first option highlighted.\n highlightedIndex: state.highlightedIndex, // keep highlightedIndex the same instead of returning to 0\n };\n }\n return changes;\n }\n);\n","import type { TypeDownshiftMultiSelectProps } from \"../MenuContext\";\n\nexport const getMultiSelectOverrides = ({\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps\n}: TypeDownshiftMultiSelectProps) =>\n Object.entries({\n ...useSelectProps,\n getA11yStatusMessage: getA11yMultiStatusMessage,\n onStateChange: onMultiSelectStateChange,\n stateReducer: multiSelectStateReducer,\n }).reduce(\n (a, [k, v]) => (v ? ((a[k] = v), a) : a),\n {} as {\n getA11yStatusMessage?: TypeDownshiftMultiSelectProps[\"getA11yMultiStatusMessage\"];\n onStateChange?: TypeDownshiftMultiSelectProps[\"onMultiSelectStateChange\"];\n stateReducer?: TypeDownshiftMultiSelectProps[\"multiSelectStateReducer\"];\n }\n );\n","import React from \"react\";\nimport { useSelect } from \"downshift\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { itemToString } from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { MenuRoot, type TypeMenuRootProps } from \"../MenuRoot\";\nimport type { TypeSingleSelectMenuProps } from \"./SingleSelectMenuTypes\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/single-select-menu/\n *\n * @description A SingleSelectMenu allows a single selection of a {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItem} from a list or groups or lists.\n *\n * @see {@link https://seeds.sproutsocial.com/components/action-menu/ ActionMenu} for triggering actions from a menu\n * @see {@link https://seeds.sproutsocial.com/components/multi-select-menu/ MultiSelectMenu} for selecting multiple items\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup MenuGroup}'s isSingleSelect prop to create a single select group within a MultiSelectMenu\n */\n\nexport const SingleSelectMenu = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n stateReducer: externalStateReducer,\n menuItems,\n MenuItemComponent,\n MenuRootComponent = MenuRoot,\n ...useSelectProps\n}: TypeSingleSelectMenuProps<I>) => {\n /** Get a list of menuItems from the children */\n const { allMenuItems, menuItemsMap, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n });\n\n /**\n * Destructure Downshift props and call the core useSelect with items and state handler\n */\n const { isOpen, ...useSelectReturnProps } = useSelect({\n ...defaultDownshiftProps.select,\n items: allMenuItems,\n itemToString,\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n externalStateReducer\n ),\n ...useSelectProps,\n });\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n items: allMenuItems,\n itemsMap: menuItemsMap,\n itemToString,\n isOpen,\n ...useSelectProps,\n ...useSelectReturnProps,\n ...restDefaults,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import React from \"react\";\nimport { useSelect, useMultipleSelection } from \"downshift\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { itemToString } from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { MenuRoot, type TypeMenuRootProps } from \"../MenuRoot\";\nimport { type TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeMultiSelectMenuProps } from \"./MultiSelectMenuTypes\";\nimport type { TypeInternalItemProps } from \"../types\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/multi-select-menu/\n *\n * @description A MultiSelectMenu allows multiple {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems} to be selected from a list or groups of lists.\n *\n * @see {@link https://seeds.sproutsocial.com/components/single-select-menu/ SingleSelectMenu}\n * @see {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menugroup MenuGroup}\n */\n\nexport const MultiSelectMenu = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n onSelectedItemChange: externalOnSelectedItemChange,\n stateReducer: externalStateReducer,\n MenuRootComponent = MenuRoot,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps\n}: TypeMultiSelectMenuProps<I>) => {\n const { allMenuItems, menuItemsMap, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n isMulti: true,\n // handles the prop name mapping for multi select\n multiSelectProps: {\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps,\n },\n });\n\n const {\n getSelectedItemProps,\n addSelectedItem,\n removeSelectedItem,\n selectedItems,\n getDropdownProps,\n ...useMultipleSelectionReturnProps\n } = useMultipleSelection<TypeInternalItemProps>(defaultDownshiftProps.multi);\n\n const { isOpen, ...useSelectReturnProps } = useSelect({\n ...defaultDownshiftProps.select,\n items: allMenuItems,\n itemToString,\n selectedItem: null,\n defaultHighlightedIndex: 0,\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n externalStateReducer\n ),\n onSelectedItemChange: (changes) => {\n const { type, selectedItem: newSelectedItem } = changes;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n if (!newSelectedItem) break;\n if (selectedItems?.find((item) => item?.id === newSelectedItem.id)) {\n removeSelectedItem(newSelectedItem);\n } else {\n addSelectedItem(newSelectedItem);\n }\n // If the newly selected item's group is single select, remove any other selected items in that group.\n if (newSelectedItem.menuGroupProps?.isSingleSelect) {\n const groupItems = selectedItems.filter(\n (item) =>\n item.menuGroupProps?.id === newSelectedItem.menuGroupProps?.id\n );\n groupItems.forEach((item) => removeSelectedItem(item));\n }\n break;\n default:\n break;\n }\n\n // Call the consumer's onSelectedItemChange callback\n externalOnSelectedItemChange?.(changes);\n },\n ...useSelectProps,\n });\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n items: allMenuItems,\n itemsMap: menuItemsMap,\n itemToString,\n isOpen,\n getSelectedItemProps,\n addSelectedItem,\n removeSelectedItem,\n selectedItems,\n getDropdownProps,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useSelectProps,\n ...useSelectReturnProps,\n ...useMultipleSelectionReturnProps,\n ...restDefaults,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import React from \"react\";\n\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeAutocompleteProps } from \"./AutocompleteTypes\";\nimport { SingleAutocomplete } from \"./SingleAutocomplete\";\nimport { MultiAutocomplete } from \"./MultiAutocomplete\";\n\n/**\n * @link https://seeds.sproutsocial.com/components/autocomplete/\n *\n * @description A Autocomplete allows selecting {@link https://seeds.sproutsocial.com/components/seeds-react-menu/#menuitem MenuItems} from a list or groups of lists to populate an input.\n *\n */\nexport const Autocomplete = <I extends TypeMenuItemProps = TypeMenuItemProps>({\n multiSelect = false,\n ...rest\n}: TypeAutocompleteProps<I>) => {\n if (multiSelect) {\n return <MultiAutocomplete {...rest} />;\n }\n\n return <SingleAutocomplete {...rest} />;\n};\n","import React from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport { itemToString as defaultItemToString } from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { useItemFiltering } from \"../hooks/useItemFiltering\";\nimport { MenuRoot } from \"../MenuRoot\";\n\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeSingleAutocompleteProps } from \"./AutocompleteTypes\";\n\nexport const SingleAutocomplete = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n stateReducer: externalStateReducer,\n menuItems,\n MenuRootComponent = MenuRoot,\n MenuItemComponent,\n itemToString = defaultItemToString,\n getIsItemVisible,\n autoCloseOnEmpty = true,\n ...useComboboxProps\n}: TypeSingleAutocompleteProps<I>) => {\n /** Get a list of menuItems and children */\n const { allMenuItems, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n\n const downshiftDefaults = useDownshiftDefaults({ isCombobox: true });\n\n const { setHiddenItemsMap, defaultDownshiftProps, hiddenItemsCount } =\n downshiftDefaults;\n\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems,\n itemToString,\n getIsItemVisible,\n setHiddenItemsMap,\n });\n\n /**\n * Destructure Downshift props and call the core useCombobox with items and state handler\n */\n const useComboboxReturnProps = useCombobox({\n ...defaultDownshiftProps.combobox,\n items: allMenuItems,\n itemToString,\n onInputValueChange: updateFilteredItems,\n stateReducer: reduceReducers(\n defaultDownshiftProps.combobox.stateReducer,\n externalStateReducer\n ),\n ...useComboboxProps,\n });\n\n const { isOpen, closeMenu, inputValue } = useComboboxReturnProps;\n const { popoutProps: userPopoutProps } = useComboboxProps;\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n autoCloseOnEmpty,\n items: allMenuItems,\n itemToString,\n ...useComboboxProps,\n ...useComboboxReturnProps,\n ...downshiftDefaults,\n }}\n popoutProps={{\n focusOnContent: false,\n ...userPopoutProps,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import React from \"react\";\nimport { useCombobox, useMultipleSelection } from \"downshift\";\nimport { useMenuChildren } from \"../hooks/useMenuChildren\";\nimport {\n itemToString as defaultItemToString,\n itemToKey as defaultItemToKey,\n} from \"../utils/downshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport {\n useItemFiltering,\n getDefaultGetIsItemVisible,\n defaultGetShouldFilter,\n type TypeGetShouldFilterFn,\n} from \"../hooks/useItemFiltering\";\nimport { getSelectedItemIds } from \"../MenuContext\";\nimport { MenuRoot } from \"../MenuRoot\";\n\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type { TypeMultiAutocompleteProps } from \"./AutocompleteTypes\";\n\nexport const MultiAutocomplete = <\n I extends TypeMenuItemProps = TypeMenuItemProps\n>({\n children: childrenProp,\n stateReducer: externalStateReducer,\n menuItems,\n MenuItemComponent,\n MenuRootComponent = MenuRoot,\n itemToString = defaultItemToString,\n itemToKey = defaultItemToKey,\n getIsItemVisible = getDefaultGetIsItemVisible(itemToString),\n showSelectedItemsInDropdown = false,\n initialSelectedItems = [],\n onStateChange,\n onSelectedItemsChange,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n autoCloseOnEmpty = true,\n selectedItems: selectedItemsProp,\n ...useComboboxProps\n}: TypeMultiAutocompleteProps<I>) => {\n /** Get a list of menuItems and children */\n const { allMenuItems, children } = useMenuChildren({\n children: childrenProp,\n menuItems,\n MenuItemComponent,\n });\n const [selectedItemsState, setSelectedItemsState] =\n React.useState(initialSelectedItems);\n const selectedItems = React.useMemo(\n () => selectedItemsProp || selectedItemsState,\n [selectedItemsProp, selectedItemsState]\n );\n const selectedItemIds = React.useMemo(\n () => getSelectedItemIds(selectedItems),\n [selectedItems]\n );\n\n // function that checks that item should be visible based on the selected items\n const getIsItemVisibleMulti = React.useCallback<typeof getIsItemVisible>(\n (item, inputValue) => {\n return (\n (showSelectedItemsInDropdown || !selectedItemIds[item.id]) &&\n getIsItemVisible(item, inputValue)\n );\n },\n [selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]\n );\n\n // function that checks that item should be filtered\n const getShouldFilterMulti = React.useCallback<TypeGetShouldFilterFn>(\n (args) => {\n return (\n (!showSelectedItemsInDropdown &&\n Object.keys(selectedItemIds).length > 0) ||\n defaultGetShouldFilter(args)\n );\n },\n [selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]\n );\n\n const downshiftDefaults = useDownshiftDefaults({\n isCombobox: true,\n isMulti: true,\n // handles the prop name mapping for multi select\n multiSelectProps: {\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useComboboxProps,\n },\n });\n\n const { setHiddenItemsMap, defaultDownshiftProps, hiddenItemsCount } =\n downshiftDefaults;\n\n // used to handle filtering of items\n const { updateFilteredItems } = useItemFiltering({\n allMenuItems,\n itemToString,\n getIsItemVisible: getIsItemVisibleMulti,\n getShouldFilter: getShouldFilterMulti,\n setHiddenItemsMap,\n });\n\n // update the filtered items when the selectedItemIds changes\n React.useEffect(() => {\n // the inputValue should be empty whenever the selected items change\n // if the inputValue is needed here then it will need to be stored on a new state\n updateFilteredItems({ inputValue: \"\" });\n }, [selectedItemIds]);\n\n const useMultipleSelectionReturnProps = useMultipleSelection({\n ...defaultDownshiftProps.multi,\n itemToKey,\n selectedItems: selectedItemsProp || selectedItems,\n onSelectedItemsChange: ({ selectedItems, ...changes }) => {\n setSelectedItemsState(selectedItems);\n onSelectedItemsChange &&\n onSelectedItemsChange({ selectedItems, ...changes });\n },\n });\n\n /**\n * Destructure Downshift props and call the core useCombobox with items and state handler\n */\n\n const useComboboxReturnProps = useCombobox<(typeof allMenuItems)[number]>({\n ...defaultDownshiftProps.combobox,\n items: allMenuItems,\n itemToString,\n itemToKey,\n stateReducer: reduceReducers(\n defaultDownshiftProps.combobox.stateReducer,\n externalStateReducer\n ),\n onStateChange(changes) {\n const { type, selectedItem: newSelectedItem, inputValue } = changes;\n switch (type) {\n // Add the selected item to the selected items list\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n if (newSelectedItem) {\n const newSelectedItems = [...selectedItems, newSelectedItem];\n setSelectedItemsState(newSelectedItems);\n onSelectedItemsChange &&\n onSelectedItemsChange({\n selectedItems: newSelectedItems,\n type: useMultipleSelection.stateChangeTypes\n .FunctionSetSelectedItems,\n });\n }\n break;\n default:\n break;\n }\n // Update the filtered items based on the input value\n if (inputValue !== undefined) updateFilteredItems({ inputValue });\n onStateChange && onStateChange(changes);\n },\n ...useComboboxProps,\n });\n\n const { popoutProps: userPopoutProps } = useComboboxProps;\n\n return (\n <MenuRootComponent\n {...{\n isListbox: true,\n autoCloseOnEmpty,\n items: allMenuItems,\n itemToString,\n initialSelectedItems,\n onStateChange,\n onSelectedItemsChange,\n getA11yMultiStatusMessage,\n onMultiSelectStateChange,\n multiSelectStateReducer,\n ...useComboboxProps,\n ...useComboboxReturnProps,\n ...useMultipleSelectionReturnProps,\n ...downshiftDefaults,\n }}\n popoutProps={{\n focusOnContent: false,\n ...userPopoutProps,\n }}\n >\n {children}\n </MenuRootComponent>\n );\n};\n","import { useContext } from \"react\";\nimport { Input, type TypeInputProps } from \"@sproutsocial/seeds-react-input\";\nimport type { TypeDownshiftMergedInputProps } from \"../types\";\nimport { useMenuToggleContext } from \"../MenuContext\";\n\nexport interface TypeAutocompleteInputProps\n extends TypeDownshiftMergedInputProps<TypeInputProps> {}\n\nexport const AutocompleteInput = ({\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n inputProps,\n ...rest\n}: TypeAutocompleteInputProps) => {\n const { getInputComponentProps, inputValue, ref, ariaProps } =\n useMenuToggleContext();\n\n return (\n <Input\n id=\"autocomplete_input\"\n name=\"autocomplete_input\"\n {...getInputComponentProps({\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n value: inputValue,\n ref,\n refKey: \"innerRef\",\n inputProps,\n ...ariaProps,\n })}\n autoComplete={false}\n value={inputValue}\n {...rest}\n />\n );\n};\n","import React, { useContext } from \"react\";\nimport type { TypeDownshiftMergedInputProps } from \"../types\";\nimport {\n MenuTokenInput,\n type TypeMenuTokenInputProps,\n} from \"../MenuTokenInput\";\nimport { useMenuToggleContext } from \"../MenuContext\";\n\nexport interface TypeAutocompleteTokenInputProps\n extends TypeDownshiftMergedInputProps<TypeMenuTokenInputProps> {}\n\nexport const AutocompleteTokenInput = ({\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n inputProps,\n getTokenProps,\n ...rest\n}: TypeAutocompleteTokenInputProps) => {\n const {\n getInputComponentProps,\n getDropdownProps,\n inputValue,\n isOpen,\n ref,\n ariaProps,\n } = useMenuToggleContext();\n\n return (\n <MenuTokenInput\n id=\"autocomplete_input\"\n name=\"autocomplete_input\"\n {...getInputComponentProps({\n ...(getDropdownProps?.({ ref, preventKeyAction: isOpen }) || { ref }),\n onKeyDown,\n onChange,\n onInput,\n onBlur,\n onClick,\n value: inputValue,\n refKey: \"innerRef\",\n inputProps,\n ...ariaProps,\n })}\n {...rest}\n />\n );\n};\n","import Icon from \"@sproutsocial/seeds-react-icon\";\nimport React from \"react\";\n\nimport {\n AutocompleteInput,\n type TypeAutocompleteInputProps,\n} from \"./AutocompleteInput\";\nimport styled from \"styled-components\";\nimport { Accessory } from \"@sproutsocial/seeds-react-input\";\n\nconst StyledAutocompleteInput = styled(AutocompleteInput)`\n ${Accessory} {\n pointer-events: none;\n }\n`;\n\nexport const AutocompleteSelect = (props: TypeAutocompleteInputProps) => {\n return (\n <StyledAutocompleteInput\n elemAfter={<Icon name=\"chevron-down\" />}\n {...props}\n />\n );\n};\n","import { useEffect, useState, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { useSelect } from \"downshift\";\nimport uniqueId from \"lodash.uniqueid\";\n\nimport { useDownshiftDefaults } from \"../hooks/useDownshiftDefaults\";\nimport { reduceReducers } from \"../utils/reduceReducers\";\nimport { nestedMenuStateReducer } from \"../reducers/nestedMenuStateReducer\";\nimport {\n defaultMenuContext,\n type TypeMenuContext,\n type TypeDownshiftSelectProps,\n} from \"../MenuContext\";\nimport type { TypeMenuItemProps } from \"../MenuItem\";\nimport type {\n TypeNestedMenuItemProps,\n TypeNestedMenuProps,\n} from \"./NestedMenuTypes\";\nimport { NestedMenuContent } from \"./NestedMenuContent\";\nimport { NestedMenuProvider } from \"./NestedMenuContext\";\nimport { NestedMenuHeader } from \"./NestedMenuHeader\";\nimport { NestedMenuItem } from \"./NestedMenuItem\";\nimport { MOTION_DURATION_FAST } from \"@sproutsocial/seeds-motion/unitless\";\nimport { NestedMenuRoot } from \"./NestedMenuRoot\";\nimport { NestedMenuPopout } from \"./NestedMenuPopout\";\n\n// TODO: #React18 - Once we drop React 16 and 17 support, we can use useId from React directly.\nconst useId = () => {\n const [id, setId] = useState<string>();\n useEffect(() => {\n const uId = uniqueId();\n setId(uId);\n }, []);\n return id;\n};\n\nexport const NestedMenu = <\n I extends TypeMenuItemProps = TypeNestedMenuItemProps\n>({\n initialMenuId,\n menus,\n onBackButtonClick,\n backArrowLabel,\n menuToggleElement,\n popoutProps: {\n scheduleUpdateRef: externalPopoutUpdateRef,\n ...restPopoutProps\n } = {},\n width = \"300px\",\n stateReducer: rootExternalStateReducer,\n id: externalNestedMenuId,\n ...useSelectProps\n}: TypeNestedMenuProps<I>) => {\n /**\n * Handling the Open/Close and accessibility of the NestedMenu itself\n */\n const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({\n isCombobox: false,\n });\n const uniqueId = useId();\n const nestedMenuId = externalNestedMenuId ?? `nested-menu-${uniqueId}`;\n const [hasLoadedOnce, setHasLoadedOnce] = useState(false);\n const useSelectReturnProps = useSelect({\n ...defaultDownshiftProps.select,\n id: nestedMenuId,\n items: [],\n stateReducer: reduceReducers(\n defaultDownshiftProps.select.stateReducer,\n rootExternalStateReducer\n ),\n ...useSelectProps,\n });\n\n const rootMenuContextProps = {\n ...useSelectProps,\n ...useSelectReturnProps,\n ...restDefaults,\n };\n\n useEffect(() => {\n if (!useSelectReturnProps.isOpen) {\n setHasLoadedOnce(false);\n } else {\n !hasLoadedOnce && setHasLoadedOnce(true);\n }\n }, [useSelectReturnProps.isOpen]);\n\n // onNestedIsOpenChange handles closing the popout based on the selected menu's built in open/close logic.\n const onNestedIsOpenChange: TypeDownshiftSelectProps[\"onIsOpenChange\"] = ({\n isOpen: newIsOpen,\n }) => {\n // Close the popout when a child menu's close logic is triggered\n !newIsOpen && useSelectReturnProps.closeMenu?.();\n };\n\n const nestedMenuPropsFromRoot: Partial<TypeDownshiftSelectProps> = {\n // The selected menu needs to receive this id so that the toggle element can be properly associated with it.\n id: nestedMenuId,\n onIsOpenChange: onNestedIsOpenChange,\n };\n\n // Hack to suppress error: \"downshift: You forgot to call the getMenuProps getter function on your component / element.\"\n rootMenuContextProps.getMenuProps?.({}, { suppressRefError: true });\n\n /**\n * Handling the state of the NestedMenu content\n */\n const [selectedMenuPath, setSelectedMenuPath] = useState([initialMenuId]);\n const [activeMenuContext, setActiveMenuContext] =\n useState<TypeMenuContext>(defaultMenuContext);\n const [currentMenuId, setCurrentMenuId] = useState(initialMenuId);\n const [isAdding, setIsAdding] = useState(false);\n const popoutUpdateRef = useRef<() => void | undefined>();\n const toggleElementRef = useRef<HTMLElement>(null);\n\n const setSelectedMenuId = (id: string) => {\n setIsAdding(true);\n setSelectedMenuPath((currentPath) => [...currentPath, id]);\n };\n\n // Set the currentMenuId reactively after the selectedMenuPath changes, so that\n // isAdding has time to be set before the animation starts.\n useEffect(() => {\n if (selectedMenuPath.length > 0) {\n const newMenuId = selectedMenuPath[selectedMenuPath.length - 1];\n setCurrentMenuId(newMenuId);\n }\n }, [selectedMenuPath.join(\"-\")]);\n\n const resetSelectedMenuPath = () => {\n setSelectedMenuPath([initialMenuId]);\n setCurrentMenuId(initialMenuId);\n };\n\n const goBack = () => {\n setIsAdding(false);\n setSelectedMenuPath((currentPath) => currentPath.slice(0, -1));\n // user-defined callback\n onBackButtonClick?.(currentMenuId);\n };\n\n const {\n MenuComponent,\n menuProps,\n MenuHeaderComponent = NestedMenuHeader,\n menuHeaderProps = {},\n } = menus[currentMenuId] || {};\n\n const {\n children,\n menuItems,\n MenuItemComponent,\n stateReducer: externalStateReducer,\n ...restMenuProps\n } = menuProps || {};\n\n const stateReducer = reduceReducers(\n nestedMenuStateReducer,\n externalStateReducer\n );\n\n const animationSpeed = MOTION_DURATION_FAST;\n\n const contentVariants = {\n arrive: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n // Start from left if is first render of root, else use default\n x: !custom?.hasLoadedOnce ? \"200%\" : custom?.isAdding ? \"200%\" : \"-200%\",\n }),\n enter: (custom = { hasLoadedOnce: false }) => ({\n opacity: 1,\n x: 0,\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circOut\",\n delay: !custom.hasLoadedOnce ? animationSpeed : 0,\n },\n }),\n leave: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n x: custom?.isAdding ? \"-200%\" : \"200%\",\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circIn\",\n },\n }),\n };\n\n // This is suggested even though they are exactly the same\n const menuVariants = {\n arrive: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n // Start from left if is first render of root, else use default\n x: !custom?.hasLoadedOnce ? \"200%\" : custom?.isAdding ? \"200%\" : \"-200%\",\n }),\n enter: (custom = { hasLoadedOnce: false }) => ({\n opacity: 1,\n x: 0,\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circOut\",\n delay: !custom.hasLoadedOnce ? animationSpeed : 0,\n },\n }),\n leave: (custom = { hasLoadedOnce: false, isAdding: false }) => ({\n opacity: 0,\n x: custom?.isAdding ? \"-200%\" : \"200%\",\n transition: {\n type: \"tween\",\n duration: animationSpeed,\n ease: \"circIn\",\n },\n }),\n };\n\n const nestedMenuProps = {\n ...nestedMenuPropsFromRoot,\n menuToggleElement,\n stateReducer,\n MenuRootComponent: NestedMenuRoot,\n // This ensures that onNestedIsOpenChange will be triggered if the selected menu attempts to close itself.\n initialIsOpen: true,\n children: (\n // Handles the smooth animating of the content\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentMenuId}\n variants={contentVariants}\n initial=\"arrive\"\n animate=\"enter\"\n exit=\"leave\"\n custom={{ isAdding, hasLoadedOnce }}\n >\n {MenuHeaderComponent && (\n <MenuHeaderComponent\n backArrowLabel={backArrowLabel}\n {...menuHeaderProps}\n />\n )}\n {/*children takes precedence over menuItems if both are passed.*/}\n {children && children}\n {menuItems && !children && (\n <NestedMenuContent\n menuItems={menuItems}\n MenuItemComponent={MenuItemComponent ?? NestedMenuItem}\n />\n )}\n </motion.div>\n </AnimatePresence>\n ),\n ...restMenuProps,\n };\n\n // Update the popout position when the nestedMenuProps.children change.\n useEffect(() => {\n popoutUpdateRef.current?.();\n }, [nestedMenuProps.children]);\n\n return (\n <NestedMenuProvider\n {...{\n selectedMenuPath,\n setSelectedMenuPath,\n setSelectedMenuId,\n resetSelectedMenuPath,\n goBack,\n rootMenuContextProps,\n activeMenuContext,\n setActiveMenuContext,\n animationSpeed,\n }}\n >\n <NestedMenuPopout\n content={\n MenuComponent && (\n // Handles the rerender of the component\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={`${currentMenuId}-content`}\n variants={menuVariants}\n initial=\"arrive\"\n animate=\"enter\"\n exit=\"leave\"\n custom={{ isAdding, hasLoadedOnce }}\n >\n <MenuComponent {...nestedMenuProps} />\n </motion.div>\n </AnimatePresence>\n )\n }\n menuToggleElement={menuToggleElement}\n width={width}\n toggleElementRef={toggleElementRef}\n scheduleUpdateRef={(callback) => {\n popoutUpdateRef.current = callback;\n externalPopoutUpdateRef?.(callback);\n }}\n {...restPopoutProps}\n />\n </NestedMenuProvider>\n );\n};\n","import { useCombobox, useSelect } from \"downshift\";\n\nexport const nestedMenuStateReducer = (_state, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n const hasChildMenu = !!changes?.selectedItem?.menuItemProps?.childMenuId;\n if (!hasChildMenu) {\n return changes;\n }\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true,\n highlightedIndex: 0,\n };\n default:\n return changes;\n }\n};\n","import React, { createContext, useContext } from \"react\";\nimport type { TypeNotEmptyChildren } from \"../types\";\nimport {\n defaultMenuContext,\n type TypeMenuContext,\n type TypeMenuContextProps,\n} from \"../MenuContext\";\nimport { MOTION_DURATION_FAST } from \"@sproutsocial/seeds-motion/unitless\";\n\nexport interface TypeNestedMenuContext {\n selectedMenuPath: string[];\n setSelectedMenuId?: (id: string) => void;\n setSelectedMenuPath?: (path: string[]) => void;\n resetSelectedMenuPath?: () => void;\n goBack?: () => void;\n rootMenuContextProps: Omit<TypeMenuContextProps, \"items\">;\n activeMenuContext: TypeMenuContext;\n setActiveMenuContext: (context: TypeMenuContext) => void;\n animationSpeed: number;\n}\n\nconst defaultNestedMenuContext: TypeNestedMenuContext = {\n selectedMenuPath: [],\n setSelectedMenuId: () => {},\n setSelectedMenuPath: () => {},\n resetSelectedMenuPath: () => {},\n goBack: () => {},\n rootMenuContextProps: {},\n activeMenuContext: defaultMenuContext,\n setActiveMenuContext: () => {},\n animationSpeed: MOTION_DURATION_FAST,\n};\n\nexport interface TypeNestedMenuProviderProps extends TypeNestedMenuContext {\n children: TypeNotEmptyChildren;\n}\n\n/**\n * NestedMenuContext factory, sets the type and the initial object\n */\nexport const NestedMenuContext = createContext<TypeNestedMenuContext>(\n defaultNestedMenuContext\n);\n\n/**\n * Provider Component sets the context values in the provider\n */\nexport const NestedMenuProvider = ({\n children,\n ...nestedMenuProps\n}: TypeNestedMenuProviderProps) => {\n return (\n <NestedMenuContext.Provider value={nestedMenuProps}>\n {children}\n </NestedMenuContext.Provider>\n );\n};\n\n/**\n * Utility hook for consuming NestedMenuContext\n */\nexport const useNestedMenuContext = (): TypeNestedMenuContext => {\n const nestedMenuContextValue = useContext(NestedMenuContext);\n\n if (nestedMenuContextValue === null) {\n throw new Error(\n \"useNestedMenuContext must be used within a <NestedMenuContext.Provider />\"\n );\n }\n\n return nestedMenuContextValue;\n};\n","import { MenuContent, type TypeMenuContentProps } from \"../MenuContent/index\";\nimport { useMenuContentContext } from \"../MenuContext\";\nimport type { TypeChildrenOrItems, TypeInternalItemProps } from \"../types\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport type { TypeMenuItemProps } from \"../MenuItem/index\";\nimport type { TypeNestedMenuItemProps } from \"./NestedMenuTypes\";\nimport { useEffect, useRef } from \"react\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\nimport { NestedMenuItem } from \"./NestedMenuItem\";\n\nconst NestedMenuContent = <\n I extends TypeMenuItemProps = TypeNestedMenuItemProps\n>({\n innerRef: innerRefProp = null,\n onKeyDown: onKeyDownProp,\n children,\n menuItems,\n MenuItemComponent = NestedMenuItem,\n ...props\n}: TypeMenuContentProps<I>) => {\n const { highlightedIndex, items } = useMenuContentContext();\n const { setSelectedMenuId, selectedMenuPath, goBack } =\n useNestedMenuContext();\n const internalRef = useRef<HTMLUListElement>(null);\n // Merge our ref and the consumer's ref so they will both be updated\n const innerRef = mergeRefs<HTMLUListElement>(internalRef, innerRefProp);\n\n const contentProps = children\n ? { children }\n : ({ menuItems, MenuItemComponent } as TypeChildrenOrItems<I>);\n\n // Focus the content on mount so that keyboard nav is available immediately\n useEffect(() => {\n internalRef?.current?.focus();\n }, []);\n\n const onKeyDown = (e) => {\n // Call the consumer's onKeyDown handler first\n onKeyDownProp?.(e);\n\n // Handle navigating into and out of child menus\n switch (e.key) {\n case \"ArrowRight\":\n case \" \":\n case \"Enter\":\n if (highlightedIndex !== undefined && highlightedIndex !== -1) {\n const item = items[\n highlightedIndex\n ] as TypeInternalItemProps<TypeNestedMenuItemProps>;\n if (item?.menuItemProps?.childMenuId !== undefined) {\n setSelectedMenuId?.(item?.menuItemProps?.childMenuId);\n }\n }\n break;\n case \"ArrowLeft\":\n if (selectedMenuPath.length > 1) {\n goBack?.();\n }\n break;\n }\n };\n\n return (\n <MenuContent\n onKeyDown={onKeyDown}\n innerRef={innerRef}\n {...contentProps}\n {...props}\n />\n );\n};\n\nNestedMenuContent.__MENU_PRIMITIVE_TYPE = \"MenuContent\";\n\nexport { NestedMenuContent };\n","import { MenuItem, MenuItemActionRight } from \"../MenuItem/index\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport type { TypeNestedMenuItemProps } from \"./NestedMenuTypes\";\n\nconst NestedMenuItem = ({\n children,\n childMenuId,\n onClick: onClickProp,\n ...rest\n}: TypeNestedMenuItemProps) => {\n const { setSelectedMenuId } = useNestedMenuContext();\n // This method of passing onClick is necessary because passing undefined for onClick\n // behaves differently from not passing anything at all.\n const onClickProps =\n childMenuId || onClickProp\n ? {\n onClick: (e) => {\n onClickProp?.(e);\n if (childMenuId) {\n setSelectedMenuId?.(childMenuId);\n }\n },\n }\n : {};\n\n return (\n <MenuItem {...onClickProps} {...rest}>\n <Box display=\"flex\" justifyContent=\"space-between\">\n {children}\n {childMenuId && (\n <MenuItemActionRight>\n <Icon name=\"arrow-right-outline\" />\n </MenuItemActionRight>\n )}\n </Box>\n </MenuItem>\n );\n};\n\nNestedMenuItem.__MENU_PRIMITIVE_TYPE = \"MenuItem\";\n\nexport { NestedMenuItem };\n","import { MenuHeader } from \"../MenuHeader/index\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport { Button } from \"@sproutsocial/seeds-react-button\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport type { TypeNestedMenuHeaderProps } from \"./NestedMenuTypes\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nexport const NestedMenuHeader = ({\n backArrowLabel,\n ...props\n}: TypeNestedMenuHeaderProps) => {\n const { goBack, selectedMenuPath, animationSpeed } = useNestedMenuContext();\n const showBackArrow = selectedMenuPath.length > 1;\n return (\n <MenuHeader\n leftAction={\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={`${selectedMenuPath}-header--button`}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: { duration: animationSpeed },\n }}\n >\n {showBackArrow ? (\n <Button onClick={goBack} ariaLabel={backArrowLabel}>\n <Icon name=\"arrow-left\" />\n </Button>\n ) : undefined}\n </motion.div>\n </AnimatePresence>\n }\n {...props}\n />\n );\n};\n","import React from \"react\";\nimport { type TypeMenuRootProps } from \"../MenuRoot\";\nimport { MenuContentProvider, useMenu } from \"../MenuContext\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\n\nexport const NestedMenuRoot = ({\n children,\n menuToggleElement,\n ...contextProps\n}: TypeMenuRootProps) => {\n const menuContext = useMenu(contextProps);\n const { setActiveMenuContext, selectedMenuPath } = useNestedMenuContext();\n\n React.useEffect(() => {\n setActiveMenuContext(menuContext);\n }, [\n selectedMenuPath[selectedMenuPath.length - 1],\n menuContext.selectedItem,\n menuContext.selectedItems?.length,\n ]);\n\n return (\n <MenuContentProvider menuContext={menuContext}>\n {children}\n </MenuContentProvider>\n );\n};\n","import { type RefObject, useEffect, useRef } from \"react\";\nimport { useNestedMenuContext } from \"./NestedMenuContext\";\nimport {\n MenuPopout,\n type TypeMenuPopoutProps,\n type TypeMenuRootProps,\n} from \"../MenuRoot\";\nimport { MenuToggleProvider } from \"../MenuContext\";\nimport { motion } from \"motion/react\";\nimport styled from \"styled-components\";\nimport { mergeRefs } from \"@sproutsocial/seeds-react-utilities\";\n\nconst StyledDiv = styled(motion.div)`\n overflow: hidden;\n`;\n\n/** How long to wait after closing before returning focus to the toggle. */\nconst RETURN_FOCUS_DELAY = 200;\n/** How long to wait before retrying an attempt that was undone. */\nconst RETURN_FOCUS_RETRY_DELAY = 50;\n/** Upper bound on retrying, so an unfocusable toggle cannot retry forever. */\nconst RETURN_FOCUS_BUDGET = 1000;\n\nexport const NestedMenuPopout = ({\n content,\n menuToggleElement,\n width,\n onClose,\n toggleElementRef,\n focusLockProps,\n ...popoutProps\n}: Omit<TypeMenuPopoutProps, \"children\"> & {\n menuToggleElement: TypeMenuRootProps[\"menuToggleElement\"];\n toggleElementRef: RefObject<HTMLElement>;\n}) => {\n const { activeMenuContext, rootMenuContextProps, resetSelectedMenuPath } =\n useNestedMenuContext();\n\n const closeTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const retryTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(\n () => () => {\n clearTimeout(closeTimerRef.current);\n clearTimeout(retryTimerRef.current);\n },\n []\n );\n\n /**\n * Move focus back to the toggle, retrying until it takes effect.\n *\n * The popout's focus lock stays mounted for the length of the close\n * animation, and while it is mounted it traps focus: a focus() call landing\n * outside the menu is immediately pulled back in. On a slow machine the\n * first attempt can fall inside that window, and once the lock unmounts\n * focus is left on <body> with nothing to restore it. Retrying covers that\n * instead of lengthening the initial delay, which can only ever guess at how\n * long the animation took.\n *\n * An attempt that takes effect stops the retries, so this never keeps\n * pulling focus back from somewhere the user deliberately moved it.\n */\n const attemptReturnFocus = (deadline: number) => {\n const toggleElement = toggleElementRef.current;\n\n if (toggleElement) {\n if (document.activeElement === toggleElement) {\n return;\n }\n toggleElement.focus();\n if (document.activeElement === toggleElement) {\n return;\n }\n }\n\n if (Date.now() < deadline) {\n retryTimerRef.current = setTimeout(\n () => attemptReturnFocus(deadline),\n RETURN_FOCUS_RETRY_DELAY\n );\n }\n };\n\n return (\n <MenuPopout\n lockPlacement\n // Reset the selected menu path after the close animation completes\n onClose={() => {\n onClose?.();\n // Manually focus the toggle element and then reset state\n closeTimerRef.current = setTimeout(() => {\n attemptReturnFocus(Date.now() + RETURN_FOCUS_BUDGET);\n resetSelectedMenuPath?.();\n }, RETURN_FOCUS_DELAY);\n }}\n isOpen={!!rootMenuContextProps.isOpen}\n openMenu={rootMenuContextProps.openMenu}\n closeMenu={rootMenuContextProps.closeMenu}\n width={width}\n content={(props) => (\n <StyledDiv layout=\"position\">\n {typeof content === \"function\" ? content(props) : content}\n </StyledDiv>\n )}\n focusLockProps={{\n crossFrame: false,\n ...focusLockProps,\n }}\n {...popoutProps}\n >\n {(toggleProps) => (\n <MenuToggleProvider\n // rootMenuContextProps overrides activeMenuContext since it handles open/close logic\n menuContext={{\n ...activeMenuContext,\n ...rootMenuContextProps,\n ...toggleProps,\n ref: mergeRefs<HTMLElement>(\n toggleProps.ref,\n toggleElementRef\n ) as RefObject<HTMLElement>,\n }}\n >\n {menuToggleElement}\n </MenuToggleProvider>\n )}\n </MenuPopout>\n );\n};\n"],"mappings":"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","names":["useMemo","jsx","space","useMemo","jsx","disabled","color","styled","border","color","flexbox","grid","layout","space","Fragment","jsx","jsxs","styled","border","color","flexbox","grid","layout","position","space","React","useMemo","Fragment","jsx","parents","React","useMemo","children","menuItemsMap","allMenuItems","styled","Box","jsx","jsx","styled","Box","jsx","styled","border","layout","position","flexbox","grid","color","space","jsx","jsxs","color","React","useCallback","styled","jsx","styled","useCallback","React","jsx","jsx","React","React","itemToString","React","jsx","itemToString","React","React","styled","jsx","styled","itemToString","React","onKeyDown","React","jsx","itemToString","React","value","React","Icon","Box","mergeRefs","jsx","jsxs","mergeRefs","Box","Icon","React","styled","css","Icon","jsx","jsxs","styled","css","props","Icon","React","useEffect","useSelect","React","itemToKey","React","jsx","useSelect","React","useEffect","useSelect","jsx","useSelect","useSelect","jsx","useSelect","useCombobox","jsx","itemToString","useCombobox","React","useCombobox","useMultipleSelection","jsx","itemToString","itemToKey","React","useMultipleSelection","selectedItems","useCombobox","jsx","Input","jsx","Input","jsx","Icon","styled","jsx","Icon","useEffect","useRef","AnimatePresence","motion","useSelect","useCombobox","useSelect","createContext","useContext","MOTION_DURATION_FAST","jsx","createContext","useContext","useEffect","mergeRefs","Icon","Box","jsx","jsxs","jsx","mergeRefs","useEffect","Button","Icon","jsx","MOTION_DURATION_FAST","React","jsx","React","useEffect","useRef","motion","styled","mergeRefs","jsx","useRef","useEffect","jsx","jsxs","useEffect","uniqueId","useSelect","useRef","MOTION_DURATION_FAST","AnimatePresence","motion"]}