{"version":3,"file":"InternalSelect.cjs","sources":["../../../../../src/components/Select/common/InternalSelect.tsx"],"sourcesContent":["import {\n  Children,\n  FunctionComponent,\n  HTMLAttributes,\n  KeyboardEvent,\n  MouseEvent,\n  ReactNode,\n  forwardRef,\n  isValidElement,\n  useCallback,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport {\n  NoAvailableOptionsFactoryProps,\n  SelectContainerProps,\n  SelectGroupProps,\n  SelectItemProps,\n} from './types';\nimport { Error, FormElementContainer, FormRoot } from '@/components/FormContainer';\nimport { Portal } from '@radix-ui/react-popover';\nimport { Checkbox } from '@/components/Checkbox';\nimport type { CheckboxVariants } from '@/components/Checkbox';\nimport { Container } from '@/components/Container';\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Label } from '@/components/Label';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\nimport type { TextProps } from '@/components/Text';\n\nimport {\n  SelectPopoverContent,\n  SearchBar,\n  SearchBarContainer,\n  SelectList,\n  SelectListContent,\n  SelectPopoverRoot,\n  StyledSelectTrigger,\n  SelectValue,\n  HiddenSelectElement,\n  SelectGroupContainer,\n  SelectGroupName,\n  SelectGroupContent,\n  SelectNoDataContainer,\n  SelectItemDescriptionText,\n  selectStyles,\n} from './SelectComponents';\nimport { OptionContext } from './OptionContext';\nimport { MultiSelectValue } from '../MultiSelectValue';\nimport SingleSelectValue from '../SingleSelectValue';\nimport { useOption, useSearch } from './useOption';\nimport { mergeRefs } from '@/utils/mergeRefs';\nimport { GenericMenuItem } from '@/components/GenericMenu';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport { useInputModality } from '@/hooks/internal';\nimport { cn } from '@/lib/cva';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\n\ntype NormalizedOption = {\n  value: string;\n  disabled?: boolean;\n};\n\ntype RegisterItem = (value: string, nodeProps: SelectItemProps) => void;\n\ninterface NoOptionsDisplayProps {\n  allowCreateOption: boolean;\n  search: string;\n  customText: string;\n  noAvailableOptions: boolean | ((props: NoAvailableOptionsFactoryProps) => ReactNode);\n  onCreateOption: (e: MouseEvent<HTMLDivElement>) => void;\n  onOpenChange: (open: boolean) => void;\n  containerProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst NoOptionsDisplay: React.FC<NoOptionsDisplayProps> = ({\n  allowCreateOption,\n  search,\n  customText,\n  noAvailableOptions,\n  onCreateOption,\n  onOpenChange,\n  containerProps,\n}) => {\n  const getCustomTextWithSearch = (text: string) => text.replaceAll('{search}', search);\n\n  const getDefaultMessage = () =>\n    `No Options found${search.length > 0 ? ` for \"${search}\" ` : ''}`;\n\n  const getNoAvailableOptionsNode = (): ReactNode => {\n    if (typeof noAvailableOptions === 'boolean') {\n      return noAvailableOptions ? getDefaultMessage() : null;\n    }\n\n    // ReactNode\n    return noAvailableOptions({\n      search,\n      close: (): void => onOpenChange(false),\n    });\n  };\n\n  // Determine node to render when there are no options\n  const hasCustomText = customText.length > 0;\n  const hasSearchInput = search.length > 0;\n  const shouldShowCreateOption = allowCreateOption && hasSearchInput;\n\n  let noOptionsNode: ReactNode = null;\n\n  if (shouldShowCreateOption) {\n    noOptionsNode = hasCustomText ? getCustomTextWithSearch(customText) : `Add ${search}`;\n  } else if (hasCustomText) {\n    noOptionsNode = getCustomTextWithSearch(customText);\n  } else {\n    noOptionsNode = getNoAvailableOptionsNode();\n  }\n\n  if (!noOptionsNode) {\n    return null;\n  }\n\n  const handleNoOptionsClick = (e: MouseEvent<HTMLDivElement>) => {\n    if (shouldShowCreateOption) {\n      onCreateOption(e);\n      onOpenChange(false);\n    }\n  };\n\n  const isCustomReactNode = typeof noAvailableOptions === 'function';\n  if (isCustomReactNode) {\n    return (\n      <Container\n        onClick={handleNoOptionsClick}\n        {...containerProps}\n      >\n        {noOptionsNode}\n      </Container>\n    );\n  }\n\n  return (\n    <SelectNoDataContainer\n      onClick={handleNoOptionsClick}\n      $clickable={allowCreateOption}\n      {...containerProps}\n    >\n      {noOptionsNode}\n    </SelectNoDataContainer>\n  );\n};\n\nconst childrenToNormalizedOptions = (\n  children: ReactNode,\n  register: RegisterItem\n): NormalizedOption[] => {\n  return Children.toArray(children).flatMap(child => {\n    if (isValidElement(child) && child && typeof child === 'object') {\n      const type = child.type as FunctionComponent;\n      if (type.displayName === 'Select.Group') {\n        return childrenToNormalizedOptions(child.props.children, register);\n      } else if (type.displayName === 'Select.Item') {\n        const { value, disabled } = child.props;\n        register(value, child.props);\n        return { value, disabled };\n      } else if ('props' in child && child.props.children) {\n        return childrenToNormalizedOptions(child.props.children, register);\n      }\n    }\n    return [];\n  });\n};\n\nexport const InternalSelect = ({\n  label,\n  children,\n  orientation,\n  dir,\n  disabled,\n  id,\n  error,\n  value: selectedValues,\n  onChange,\n  onSelect,\n  open,\n  onOpenChange,\n  name,\n  form,\n  allowCreateOption = false,\n  customText = '',\n  options,\n  sortable = false,\n  placeholder = 'Select an option',\n  maxHeight,\n  multiple,\n  checkbox,\n  selectLabel,\n  showSearch = false,\n  container,\n  useFullWidthItems = false,\n  itemCharacterLimit = '64ch',\n  noAvailableOptions = true,\n  triggerProps,\n  ...props\n}: SelectContainerProps) => {\n  const defaultId = useId();\n  const [search, setSearch] = useState('');\n  const [highlighted, setHighlighted] = useState<string | undefined>();\n  // value -> lowercased rendered text (item + its group heading).\n  const [searchSource, setSearchSource] = useState<Map<string, string>>(() => new Map());\n  const valueNode = useRef<Map<string, SelectItemProps>>(new Map());\n\n  const registerValueNode = useCallback<RegisterItem>((value, nodeProps) => {\n    valueNode.current.set(value, nodeProps);\n  }, []);\n\n  const normalizedOptions = useMemo<NormalizedOption[]>(() => {\n    if (options) {\n      return options.flatMap(option => {\n        if ('options' in option) {\n          return (option.options ?? []).map(item => {\n            registerValueNode(item.value, item);\n            return { value: item.value, disabled: item.disabled };\n          });\n        }\n        registerValueNode(option.value, option);\n        return { value: option.value, disabled: option.disabled };\n      });\n    } else if (children) {\n      return childrenToNormalizedOptions(children, registerValueNode);\n    }\n\n    return [];\n  }, [children, options, registerValueNode]);\n\n  const listNode = useRef<HTMLDivElement | null>(null);\n\n  const captureSearchSource = useCallback(() => {\n    const root = listNode.current;\n    if (!root) {\n      return;\n    }\n    const next = new Map<string, string>();\n    root.querySelectorAll<HTMLElement>('[cui-select-item][data-value]').forEach(el => {\n      const value = el.getAttribute('data-value');\n      if (value === null) {\n        return;\n      }\n      const group = el.closest('[cui-select-group]');\n      const heading = group?.querySelector('[cui-select-group-name]')?.textContent ?? '';\n      next.set(value, `${el.textContent ?? ''} ${heading}`.toLowerCase());\n    });\n    setSearchSource(next);\n  }, []);\n\n  const onSearchChange = (next: string) => {\n    if (search === '' && next !== '') {\n      // recapture searchable text from DOM when a new search begins\n      // to make sure it's not stale (e.g. an item changed its contents for any reason)\n      captureSearchSource();\n    }\n    setSearch(next);\n  };\n\n  const matchedOptions = useMemo(() => {\n    if (search === '') {\n      return normalizedOptions;\n    }\n    const searchLowerCase = search.toLowerCase();\n    return normalizedOptions.filter(item =>\n      (searchSource.get(item.value) ?? '').includes(searchLowerCase)\n    );\n  }, [search, normalizedOptions, searchSource]);\n\n  const visibleValues = useMemo(\n    () => new Set(matchedOptions.map(o => o.value)),\n    [matchedOptions]\n  );\n  const navigableValues = useMemo(\n    () => matchedOptions.filter(o => !o.disabled).map(o => o.value),\n    [matchedOptions]\n  );\n\n  // `highlighted` is the user's last pointer; honor it only while it stays navigable.\n  const effectiveHighlight =\n    highlighted && navigableValues.includes(highlighted)\n      ? highlighted\n      : navigableValues[0];\n\n  const inputRef = useRef<HTMLInputElement>(null);\n  const inputModalityProps = useInputModality();\n  const portalContainer = useResolvedPortalContainer(container);\n\n  const onFocus = () => {\n    inputRef.current?.focus();\n  };\n\n  const clearSearch = () => {\n    setSearch('');\n  };\n\n  const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n    if (!e.defaultPrevented) {\n      if (e.key === 'Enter') {\n        e.preventDefault();\n        if (effectiveHighlight) {\n          onSelect(effectiveHighlight, undefined, e);\n        } else if (matchedOptions.length === 0 && allowCreateOption) {\n          onSelect(search, 'custom', e);\n        }\n      } else if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(e.key)) {\n        e.preventDefault();\n        let nextHighlightedValue = effectiveHighlight;\n        const highlightedIndex = navigableValues.findIndex(\n          value => value === effectiveHighlight\n        );\n        if (e.key === 'ArrowUp') {\n          if (highlightedIndex === 0) {\n            nextHighlightedValue = navigableValues[navigableValues.length - 1];\n          } else {\n            nextHighlightedValue = navigableValues[highlightedIndex - 1];\n          }\n        } else if (e.key === 'ArrowDown') {\n          e.preventDefault();\n          if (highlightedIndex === navigableValues.length - 1) {\n            nextHighlightedValue = navigableValues[0];\n          } else {\n            nextHighlightedValue = navigableValues[highlightedIndex + 1];\n          }\n        } else if (e.key === 'End') {\n          e.preventDefault();\n          nextHighlightedValue = navigableValues[navigableValues.length - 1];\n        } else if (e.key === 'Home') {\n          nextHighlightedValue = navigableValues[0];\n          e.preventDefault();\n        }\n        setHighlighted(nextHighlightedValue);\n      }\n    }\n  };\n  const isHidden = useCallback(\n    (value?: string) => !visibleValues.has(value ?? ''),\n    [visibleValues]\n  );\n\n  const optionContextValue = useMemo(() => {\n    return {\n      search,\n      updateHighlighted: setHighlighted,\n      highlighted: effectiveHighlight,\n      isHidden,\n      onSelect,\n      selectedValues,\n    };\n  }, [search, effectiveHighlight, isHidden, onSelect, selectedValues]);\n\n  const onCreateOption = (e: MouseEvent<HTMLDivElement>) => {\n    e.preventDefault();\n    e.stopPropagation();\n    if (allowCreateOption) {\n      onSelect(search, 'custom', e);\n    }\n  };\n\n  return (\n    <FormRoot\n      $orientation={orientation}\n      $dir={dir}\n      $addLabelPadding\n      {...props}\n    >\n      <FormElementContainer>\n        <SelectPopoverRoot\n          open={open}\n          onOpenChange={onOpenChange}\n          modal={true}\n        >\n          <StyledSelectTrigger\n            id={id ?? defaultId}\n            $error={!!error}\n            disabled={disabled}\n            data-testid=\"select-trigger\"\n            {...triggerProps}\n          >\n            <SelectValue>\n              {selectedValues.length === 0 ? (\n                placeholder\n              ) : multiple ? (\n                <MultiSelectValue\n                  disabled={disabled ?? false}\n                  onSelect={onSelect}\n                  selectedValues={selectedValues}\n                  sortable={!disabled && sortable}\n                  valueNode={valueNode.current}\n                  onChange={onChange}\n                />\n              ) : (\n                <SingleSelectValue\n                  valueNode={\n                    checkbox && selectLabel\n                      ? { label: selectLabel as string, value: selectLabel as string }\n                      : valueNode.current.get(selectedValues[0])\n                  }\n                  value={selectedValues[0]}\n                />\n              )}\n            </SelectValue>\n            <Icon\n              name=\"sort\"\n              size=\"sm\"\n            />\n          </StyledSelectTrigger>\n          {form && (\n            <HiddenSelectElement\n              multiple={multiple}\n              name={name}\n              form={form}\n              value={selectedValues}\n              onChange={() => null}\n            >\n              {normalizedOptions.map(item => (\n                <option\n                  key={item.value}\n                  value={item.value}\n                  disabled={item.disabled}\n                >\n                  {item.value}\n                </option>\n              ))}\n            </HiddenSelectElement>\n          )}\n          <Portal container={portalContainer}>\n            <SelectPopoverContent\n              {...inputModalityProps}\n              sideOffset={5}\n              onFocus={onFocus}\n              onCloseAutoFocus={() => {\n                setSearch('');\n              }}\n              align=\"start\"\n              $useFullWidthItems={useFullWidthItems}\n              $itemCharacterLimit={itemCharacterLimit}\n            >\n              <SelectList>\n                <SearchBarContainer $showSearch={showSearch}>\n                  <SearchBar\n                    ref={inputRef}\n                    value={search}\n                    onChange={e => onSearchChange(e.target.value)}\n                    data-testid=\"select-search-input\"\n                    onKeyDown={onKeyDown}\n                    $showSearch={showSearch}\n                  />\n                  <IconButton\n                    className={cn(\n                      selectStyles['search-close'],\n                      search.length > 0 && selectStyles['search-close_show-close']\n                    )}\n                    htmlType=\"button\"\n                    icon=\"cross\"\n                    onClick={clearSearch}\n                    data-testid=\"select-search-close\"\n                    size=\"xs\"\n                  />\n                </SearchBarContainer>\n                <SelectListContent\n                  ref={listNode}\n                  $maxHeight={maxHeight}\n                >\n                  <OptionContext.Provider value={optionContextValue}>\n                    {options && options.length > 0\n                      ? options.map((props, index) => {\n                          if ('options' in props) {\n                            const { options: itemList = [], ...groupProps } = props;\n                            return (\n                              <SelectGroup\n                                key={`select-${id}-group-${index}`}\n                                {...groupProps}\n                              >\n                                {itemList.map((itemProps, itemIndex) => {\n                                  if (checkbox) {\n                                    return (\n                                      <MultiSelectCheckboxItem\n                                        key={`select-${id}-group-${index}-item-${itemIndex}`}\n                                        {...itemProps}\n                                      />\n                                    );\n                                  }\n                                  return (\n                                    <SelectItem\n                                      key={`select-${id}-group-${index}-item-${itemIndex}`}\n                                      {...itemProps}\n                                    />\n                                  );\n                                })}\n                              </SelectGroup>\n                            );\n                          } else {\n                            if (checkbox) {\n                              return (\n                                <MultiSelectCheckboxItem\n                                  key={`select-${id}-item-${index}`}\n                                  {...props}\n                                />\n                              );\n                            }\n                            return (\n                              <SelectItem\n                                key={`select-${id}-item-${index}`}\n                                {...props}\n                              />\n                            );\n                          }\n                        })\n                      : children}\n                  </OptionContext.Provider>\n                </SelectListContent>\n                {matchedOptions.length === 0 &&\n                  (allowCreateOption || !!noAvailableOptions) && (\n                    <NoOptionsDisplay\n                      allowCreateOption={allowCreateOption}\n                      search={search}\n                      customText={customText}\n                      noAvailableOptions={noAvailableOptions}\n                      onCreateOption={onCreateOption}\n                      onOpenChange={onOpenChange}\n                      containerProps={props}\n                    />\n                  )}\n              </SelectList>\n            </SelectPopoverContent>\n          </Portal>\n        </SelectPopoverRoot>\n        {!!error && error !== true && <Error>{error}</Error>}\n      </FormElementContainer>\n      {label && (\n        <Label\n          htmlFor={id ?? defaultId}\n          disabled={disabled}\n          error={!!error}\n        >\n          {label}\n        </Label>\n      )}\n    </FormRoot>\n  );\n};\n\nexport const SelectGroup = forwardRef<HTMLDivElement, SelectGroupProps>(\n  ({ children, heading, ...props }, forwardedRef) => {\n    useSearch();\n    return (\n      <SelectGroupContainer\n        {...props}\n        cui-select-group=\"\"\n        ref={mergeRefs([\n          forwardedRef,\n          node => {\n            const hidden =\n              node?.querySelectorAll('[cui-select-item]:not([hidden])').length === 0;\n            if (hidden) {\n              node?.setAttribute('hidden', '');\n            } else {\n              node?.removeAttribute('hidden');\n            }\n            node?.setAttribute('aria-hidden', hidden.toString());\n          },\n        ])}\n      >\n        <SelectGroupName cui-select-group-name=\"\">{heading}</SelectGroupName>\n        <SelectGroupContent>{children}</SelectGroupContent>\n      </SelectGroupContainer>\n    );\n  }\n);\n\nSelectGroup.displayName = 'Select.Group';\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(\n  (\n    {\n      disabled = false,\n      children,\n      label,\n      description,\n      separator,\n      onSelect: onSelectProp,\n      value = '',\n      icon,\n      iconDir,\n      onMouseOver: onMouseOverProp,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const { highlighted, updateHighlighted, isHidden, selectedValues, onSelect } =\n      useOption();\n    const onSelectValue = (evt: MouseEvent<HTMLElement>) => {\n      if (!disabled) {\n        onSelect(value, undefined, evt);\n        if (typeof onSelectProp == 'function') {\n          onSelectProp(value, undefined, evt);\n        }\n      }\n    };\n    const onMouseOver = (e: MouseEvent<HTMLDivElement>) => {\n      if (onMouseOverProp) {\n        onMouseOverProp(e);\n      }\n      if (!disabled) {\n        updateHighlighted(value);\n      }\n    };\n\n    // Render hidden rather than unmounting so the text stays in the DOM for search.\n    const hidden = isHidden(value);\n    const isChecked = selectedValues.includes(value);\n\n    return (\n      <>\n        <GenericMenuItem\n          {...props}\n          hidden={hidden}\n          className={cn(selectStyles['select-item'], props.className)}\n          data-value={value}\n          onClick={onSelectValue}\n          onMouseOver={onMouseOver}\n          ref={forwardedRef}\n          data-state={isChecked ? 'checked' : 'unchecked'}\n          data-disabled={disabled ? true : undefined}\n          data-highlighted={highlighted == value ? 'true' : undefined}\n          cui-select-item=\"\"\n        >\n          <IconWrapper\n            icon={icon}\n            iconDir={iconDir}\n            gap=\"xxs\"\n          >\n            {label ? (\n              <>\n                {label}\n                {description && (\n                  <SelectItemDescription>{description}</SelectItemDescription>\n                )}\n              </>\n            ) : (\n              children\n            )}\n          </IconWrapper>\n          <Icon\n            className={cn(\n              selectStyles['check-icon'],\n              isChecked && selectStyles['check-icon_show-check']\n            )}\n            name=\"check\"\n            size=\"sm\"\n          />\n        </GenericMenuItem>\n        {separator && !hidden && <Separator size=\"sm\" />}\n      </>\n    );\n  }\n);\n\nexport type MultiSelectCheckboxItemProps = SelectItemProps & {\n  variant?: CheckboxVariants;\n};\n\nSelectItem.displayName = 'Select.Item';\n\nexport const MultiSelectCheckboxItem = forwardRef<\n  HTMLDivElement,\n  MultiSelectCheckboxItemProps\n>(\n  (\n    {\n      disabled = false,\n      children,\n      icon,\n      iconDir = 'end',\n      label,\n      description,\n      onMouseOver: onMouseOverProp,\n      onSelect: onSelectProp,\n      separator,\n      value = '',\n      variant,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const { highlighted, updateHighlighted, isHidden, selectedValues, onSelect } =\n      useOption();\n\n    const handleMenuItemClick = (evt: MouseEvent<HTMLElement>) => {\n      if (!disabled) {\n        onSelect(value, undefined, evt);\n\n        if (typeof onSelectProp === 'function') {\n          onSelectProp(value, undefined, evt);\n        }\n      }\n    };\n\n    const handleMenuItemMouseOver = (e: MouseEvent<HTMLDivElement>) => {\n      if (onMouseOverProp) {\n        onMouseOverProp(e);\n      }\n      if (!disabled) {\n        updateHighlighted(value);\n      }\n    };\n\n    // Render hidden rather than unmounting so the text stays in the DOM for search.\n    const hidden = isHidden(value);\n    const isChecked = selectedValues.includes(value);\n\n    return (\n      <>\n        <GenericMenuItem\n          {...props}\n          hidden={hidden}\n          className={cn(selectStyles['select-item'], props.className)}\n          data-value={value}\n          onClick={handleMenuItemClick}\n          onMouseOver={handleMenuItemMouseOver}\n          ref={forwardedRef}\n          data-disabled={disabled ? true : undefined}\n          data-highlighted={highlighted == value ? 'true' : undefined}\n          data-testid={`multi-select-checkbox-${value}`}\n          cui-select-item=\"\"\n        >\n          <Container\n            orientation=\"horizontal\"\n            gap=\"xs\"\n            overflow=\"hidden\"\n            isResponsive={false}\n          >\n            <Checkbox\n              checked={isChecked}\n              data-testid=\"multi-select-checkbox\"\n              disabled={disabled}\n              variant={variant ?? 'default'}\n            />\n            <IconWrapper\n              icon={icon}\n              iconDir={iconDir}\n              gap=\"xxs\"\n            >\n              {label ? (\n                <>\n                  {label}\n                  {description && (\n                    <SelectItemDescription>{description}</SelectItemDescription>\n                  )}\n                </>\n              ) : (\n                children\n              )}\n            </IconWrapper>\n          </Container>\n        </GenericMenuItem>\n        {separator && !hidden && <Separator size=\"sm\" />}\n      </>\n    );\n  }\n);\n\nMultiSelectCheckboxItem.displayName = 'Select.Item';\n\nexport const SelectItemDescription = forwardRef<HTMLDivElement, TextProps>(\n  ({ children, ...props }, ref) => {\n    return (\n      <Text\n        ref={ref}\n        component={SelectItemDescriptionText}\n        color=\"muted\"\n        {...props}\n      >\n        {children}\n      </Text>\n    );\n  }\n);\n\nSelectItemDescription.displayName = 'Select.ItemDescription';\n"],"names":["jsx","Container","SelectNoDataContainer","Children","isValidElement","useId","useState","useRef","useCallback","useMemo","useInputModality","useResolvedPortalContainer","jsxs","FormRoot","FormElementContainer","SelectPopoverRoot","StyledSelectTrigger","SelectValue","MultiSelectValue","SingleSelectValue","Icon","HiddenSelectElement","Portal","SelectPopoverContent","SelectList","SearchBarContainer","SearchBar","IconButton","cn","selectStyles","SelectListContent","OptionContext","props","Error","Label","forwardRef","useSearch","SelectGroupContainer","mergeRefs","SelectGroupName","SelectGroupContent","useOption","Fragment","GenericMenuItem","IconWrapper","Separator","Checkbox","Text","SelectItemDescriptionText"],"mappings":"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"}