{"version":3,"file":"index.cjs","sources":["../../../../src/components/AutoComplete/AutoComplete.tsx"],"sourcesContent":["import {\n  Children,\n  FunctionComponent,\n  HTMLAttributes,\n  KeyboardEventHandler,\n  MouseEventHandler,\n  ReactNode,\n  forwardRef,\n  isValidElement,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport { Portal, PopoverProps, Content, Root, Trigger } from '@radix-ui/react-popover';\n\nimport { HorizontalDirection } from '@/types';\nimport { cn } from '@/lib/cva';\nimport { SearchField } from '@/components/SearchField';\nimport { Separator } from '@/components/Separator';\nimport { Icon, type ImageName } from '@/components/Icon';\nimport { GenericMenuItem } from '@/components/GenericMenu';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport { getTextFromNodes } from '@/lib/getTextFromNodes';\nimport { mergeRefs } from '@/utils/mergeRefs';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\n\nimport { useOption, useSearch } from './useOption';\nimport { OptionContext } from './OptionContext';\nimport styles from './AutoComplete.module.css';\n\ntype DivProps = HTMLAttributes<HTMLDivElement>;\ninterface SelectItemComponentProps extends Omit<\n  DivProps,\n  'disabled' | 'onSelect' | 'value' | 'children'\n> {\n  separator?: boolean;\n  disabled?: boolean;\n  onSelect?: (value: string) => void;\n  value: string;\n  icon?: ImageName;\n  iconDir?: HorizontalDirection;\n}\n\ntype SelectItemChildren = {\n  children: ReactNode;\n  label?: never;\n};\n\ntype SelectItemLabel = {\n  children?: never;\n  label: ReactNode;\n};\nexport interface SelectGroupProps extends Omit<\n  HTMLAttributes<HTMLDivElement>,\n  'heading'\n> {\n  heading: ReactNode;\n  value?: never;\n  onSelect?: never;\n}\nexport interface SelectOptionItem extends Omit<SelectItemProps, 'children' | 'label'> {\n  heading?: never;\n  label: ReactNode;\n  [key: `data-${string}`]: string;\n}\n\ninterface SelectGroupOptionItem extends Omit<SelectGroupProps, 'children' | 'label'> {\n  options: SelectOptionItem[];\n  label?: never;\n  [key: `data-${string}`]: string;\n}\n\nexport type AutoCompleteOptionListItem = SelectGroupOptionItem | SelectOptionItem;\n\nexport type SelectItemProps = SelectItemComponentProps &\n  (SelectItemChildren | SelectItemLabel);\ntype SelectOptionType = {\n  options: AutoCompleteOptionListItem[];\n  children?: never;\n};\n\ntype SelectChildrenType = {\n  children: ReactNode;\n  options?: never;\n};\n\ntype SelectOptionProp = SelectOptionType | SelectChildrenType;\n\ninterface Props\n  extends PopoverProps, Omit<DivProps, 'onChange' | 'dir' | 'onSelect' | 'children'> {\n  onSelect?: (value: string) => void;\n  value?: string;\n  placeholder?: string;\n  onOpenChange?: (open: boolean) => void;\n  label?: ReactNode;\n  container?: HTMLElement | null;\n  error?: ReactNode;\n  disabled?: boolean;\n  dir?: 'start' | 'end';\n  orientation?: 'horizontal' | 'vertical';\n  allowCreateOption?: boolean;\n}\ntype SelectItemObject = {\n  disabled?: boolean;\n  value: string;\n  title: string;\n  heading?: string;\n};\n\nexport type AutoCompleteProps = (SelectOptionType & Props) | (SelectChildrenType & Props);\n\n// Popover.Root renders no DOM node (it is a context provider), so the styling\n// that previously lived on `styled(Root)` never applied — the visible popover\n// chrome comes from `.select-list` below. Kept as a bare `Root` re-export so the\n// public `SelectPopoverRoot` export is preserved.\nexport const SelectPopoverRoot = Root;\n\ntype CallbackProps = SelectItemObject & {\n  nodeProps: SelectItemProps;\n};\n\nconst childrenToComboboxItemArray = (\n  children: ReactNode,\n  callback: (props: CallbackProps) => void,\n  heading?: string\n): SelectItemObject[] => {\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 === 'AutoComplete.Group') {\n        const groupChildren = child.props.children;\n        return childrenToComboboxItemArray(\n          groupChildren,\n          callback,\n          getTextFromNodes(child.props.heading).toLowerCase()\n        );\n      } else if (type.displayName === 'AutoComplete.Item') {\n        const title = getTextFromNodes(child).toLowerCase();\n        const value = child.props.value;\n        const disabled = child.props.disabled;\n        callback({\n          disabled,\n          value,\n          title,\n          heading,\n          nodeProps: child.props,\n        });\n        return {\n          disabled,\n          value,\n          title,\n          heading,\n        };\n      } else if ('props' in child && child.props.children) {\n        return childrenToComboboxItemArray(child.props.children, callback, heading);\n      }\n    }\n    return [];\n  });\n};\nexport const AutoComplete = ({\n  onSelect: onSelectProp,\n  options,\n  children,\n  onOpenChange: onOpenChangeProp,\n  disabled,\n  value = '',\n  placeholder = 'Search',\n  container,\n  ...props\n}: AutoCompleteProps) => {\n  const defaultId = useId();\n  const [search, setSearch] = useState('');\n  const [open, setOpen] = useState(false);\n\n  const inputRef = useRef<HTMLInputElement>(null);\n  const portalContainer = useResolvedPortalContainer(container);\n  const [highlighted, setHighlighted] = useState<string | undefined>();\n  const visibleList = useRef<string[]>([]);\n  const navigatable = useRef<string[]>([]);\n  const valueNode = useRef<Map<string, SelectItemProps>>(new Map());\n  const [list, setList] = useState<SelectItemObject[]>([]);\n  const updateElements = useCallback(\n    ({ disabled, value, title, heading, nodeProps }: CallbackProps) => {\n      if (title.includes(search) || heading?.includes(search)) {\n        visibleList.current.push(value);\n        if (!disabled) {\n          navigatable.current.push(value);\n        }\n      }\n      valueNode.current.set(value, nodeProps);\n    },\n    [search]\n  );\n\n  const onFocus = () => {\n    inputRef.current?.focus();\n  };\n\n  const onOpenChange = useCallback(\n    (open: boolean) => {\n      const newOpen = open && !disabled;\n      setOpen(newOpen);\n      if (typeof onOpenChangeProp === 'function') {\n        onOpenChangeProp(newOpen);\n      }\n    },\n    [disabled, onOpenChangeProp]\n  );\n\n  const onSelect = useCallback(\n    (value: string) => {\n      onOpenChange(false);\n      if (typeof onSelectProp === 'function') {\n        onSelectProp(value);\n      }\n    },\n    [onSelectProp, onOpenChange]\n  );\n\n  const onUpdateSearch = useCallback(\n    (search: string) => {\n      setSearch(search);\n      let hasHighlightedValue = false;\n      const visibleItemsList: string[] = [];\n      const navigatableList: string[] = [];\n      const searchLowerCase = search.toLowerCase();\n      list.forEach(item => {\n        if (\n          item.title.includes(searchLowerCase) ||\n          item.heading?.includes(searchLowerCase)\n        ) {\n          if (item.value === highlighted) {\n            hasHighlightedValue = true;\n          }\n          visibleItemsList.push(item.value);\n          if (!item.disabled) {\n            navigatableList.push(item.value);\n          }\n        }\n      });\n      navigatable.current = navigatableList;\n      visibleList.current = visibleItemsList;\n      if (!hasHighlightedValue) {\n        setHighlighted(navigatableList[0] ?? null);\n      }\n    },\n    [highlighted, list]\n  );\n\n  const updateList = useCallback(\n    (children?: ReactNode, options?: AutoCompleteOptionListItem[]) => {\n      const lowerCasedSearch = search.toLowerCase();\n      if (options) {\n        setList(\n          options.flatMap(option => {\n            if ('options' in option) {\n              const heading = getTextFromNodes(option.heading).toLowerCase();\n              return (option.options ?? []).map(item => {\n                valueNode.current.set(item.value, item);\n                const title = getTextFromNodes(item.label).toLowerCase();\n                if (\n                  title.includes(lowerCasedSearch) ||\n                  heading?.includes(lowerCasedSearch)\n                ) {\n                  visibleList.current.push(item.value);\n                  if (!item.disabled) {\n                    navigatable.current.push(item.value);\n                  }\n                }\n                return {\n                  heading,\n                  disabled: item.disabled,\n                  value: item.value,\n                  title,\n                };\n              });\n            } else {\n              valueNode.current.set(option.value, option);\n              const title = getTextFromNodes(option.label).toLowerCase();\n              if (title.includes(lowerCasedSearch)) {\n                visibleList.current.push(option.value);\n                if (!option.disabled) {\n                  navigatable.current.push(option.value);\n                }\n              }\n              return {\n                disabled: option.disabled,\n                value: option.value,\n                title: getTextFromNodes(option.label),\n              };\n            }\n          })\n        );\n      } else if (children) {\n        setList(childrenToComboboxItemArray(children, updateElements));\n      }\n    },\n    [disabled, search, updateElements]\n  );\n\n  useEffect(() => {\n    updateList(children, options);\n  }, [children, options, updateList]);\n\n  const onKeyDown: KeyboardEventHandler<HTMLInputElement> = e => {\n    if (!e.defaultPrevented) {\n      if (e.key === 'Enter') {\n        e.preventDefault();\n        if (highlighted) {\n          onSelect(highlighted);\n        }\n      } else if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(e.key)) {\n        e.preventDefault();\n        let nextHighlightedValue = highlighted;\n        const highlightedIndex = navigatable.current.findIndex(\n          value => value === highlighted\n        );\n        if (e.key === 'ArrowUp') {\n          if (highlightedIndex === 0) {\n            nextHighlightedValue = navigatable.current[navigatable.current.length - 1];\n          } else {\n            nextHighlightedValue = navigatable.current[highlightedIndex - 1];\n          }\n        } else if (e.key === 'ArrowDown') {\n          e.preventDefault();\n          if (highlightedIndex === navigatable.current.length - 1) {\n            nextHighlightedValue = navigatable.current[0];\n          } else {\n            nextHighlightedValue = navigatable.current[highlightedIndex + 1];\n          }\n        } else if (e.key === 'End') {\n          e.preventDefault();\n          nextHighlightedValue = navigatable.current[navigatable.current.length - 1];\n        } else if (e.key === 'Home') {\n          nextHighlightedValue = navigatable.current[0];\n          e.preventDefault();\n        }\n        setHighlighted(nextHighlightedValue);\n      }\n    }\n  };\n  const isHidden = useCallback(\n    (value?: string) => {\n      return !visibleList.current.includes(value ?? '');\n    },\n    [visibleList]\n  );\n\n  const optionContextValue = useMemo(() => {\n    return {\n      search,\n      updateHighlighted: setHighlighted,\n      highlighted,\n      isHidden,\n      onSelect,\n      selectedValue: value,\n    };\n  }, [search, highlighted, isHidden, onSelect, value]);\n\n  const conditionalProps: Partial<SelectOptionProp> = {};\n  if (options) {\n    conditionalProps.options = options;\n  } else {\n    conditionalProps.children = children;\n  }\n\n  const onTriggerClick: MouseEventHandler<HTMLDivElement> = e => {\n    if (open) {\n      e.preventDefault();\n      inputRef.current?.focus();\n    }\n  };\n\n  const onFocusOutside = (\n    e: CustomEvent<{\n      originalEvent: FocusEvent;\n    }>\n  ) => {\n    const contentElement = (e.target as HTMLElement)?.closest('[aria-haspopup=dialog]');\n    const triggerElement = (e.target as HTMLElement)?.closest(\n      '[data-radix-popper-content-wrapper]'\n    );\n\n    if (contentElement || triggerElement) {\n      e.preventDefault();\n    }\n  };\n\n  return (\n    <SelectPopoverRoot\n      open={open}\n      onOpenChange={onOpenChange}\n    >\n      <Trigger\n        asChild\n        disabled={disabled}\n        data-testid=\"autocomplete-trigger\"\n      >\n        <div onClick={onTriggerClick}>\n          <SearchField\n            ref={inputRef}\n            value={search}\n            onChange={onUpdateSearch}\n            onKeyDown={onKeyDown}\n            disabled={disabled}\n            placeholder={placeholder}\n            {...props}\n          />\n        </div>\n      </Trigger>\n      <Portal container={portalContainer}>\n        <Content\n          className={styles['popover-content']}\n          sideOffset={5}\n          onFocus={onFocus}\n          onCloseAutoFocus={() => {\n            onUpdateSearch('');\n            inputRef.current?.focus();\n          }}\n          onOpenAutoFocus={e => {\n            e.preventDefault();\n            setHighlighted(navigatable.current[0]);\n            inputRef.current?.focus();\n          }}\n          align=\"start\"\n          onPointerDownOutside={() => {\n            onOpenChange(false);\n          }}\n          onFocusOutside={onFocusOutside}\n        >\n          <div className={styles['select-list']}>\n            <div className={styles['select-list-content']}>\n              <OptionContext.Provider value={optionContextValue}>\n                {options && options.length > 0\n                  ? options.map((optionProps, index) => {\n                      if ('options' in optionProps) {\n                        const { options: itemList = [], ...groupProps } = optionProps;\n                        return (\n                          <Group\n                            key={`autocomplete-${defaultId}-group-${index}`}\n                            {...groupProps}\n                          >\n                            {itemList.map(\n                              ({ label, ...itemProps }, itemIndex: number) => (\n                                <Item\n                                  key={`autocomplete-${defaultId}-group-${index}-item-${itemIndex}`}\n                                  {...itemProps}\n                                >\n                                  {label}\n                                </Item>\n                              )\n                            )}\n                          </Group>\n                        );\n                      } else {\n                        return (\n                          <Item\n                            key={`autocomplete-${defaultId}-item-${index}`}\n                            {...optionProps}\n                          />\n                        );\n                      }\n                    })\n                  : children}\n              </OptionContext.Provider>\n            </div>\n            {visibleList.current.length === 0 && (\n              <div\n                {...props}\n                className={cn(styles['select-no-data-container'], props.className)}\n              >\n                No Options found{search.length > 0 ? ` for \"${search}\" ` : ''}\n              </div>\n            )}\n          </div>\n        </Content>\n      </Portal>\n    </SelectPopoverRoot>\n  );\n};\n\nexport const Group = forwardRef<HTMLDivElement, SelectGroupProps>(\n  ({ children, heading, className, ...props }, forwardedRef) => {\n    useSearch();\n    return (\n      <div\n        {...props}\n        ref={mergeRefs([\n          forwardedRef,\n          node => {\n            const hidden = node?.querySelectorAll('[cui-autocomplete-item]').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        className={cn(styles['select-group-container'], className)}\n      >\n        <div className={styles['select-group-name']}>{heading}</div>\n        <div className={styles['select-group-content']}>{children}</div>\n      </div>\n    );\n  }\n);\n\nGroup.displayName = 'AutoComplete.Group';\n\nexport const Item = forwardRef<HTMLDivElement, SelectItemProps>(\n  (\n    {\n      disabled = false,\n      children,\n      label,\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, selectedValue, onSelect } =\n      useOption();\n    const onSelectValue = () => {\n      if (!disabled) {\n        onSelect(value);\n        if (typeof onSelectProp == 'function') {\n          onSelectProp(value);\n        }\n      }\n    };\n    const onMouseOver: MouseEventHandler<HTMLDivElement> = e => {\n      if (onMouseOverProp) {\n        onMouseOverProp(e);\n      }\n      if (!disabled) {\n        updateHighlighted(value);\n      }\n    };\n\n    if (isHidden(value)) {\n      return null;\n    }\n    const isChecked = selectedValue === value;\n\n    return (\n      <>\n        <GenericMenuItem\n          {...props}\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-autocomplete-item=\"\"\n        >\n          <IconWrapper\n            icon={icon}\n            iconDir={iconDir}\n          >\n            {label ?? children}\n          </IconWrapper>\n          <Icon\n            className={cn(\n              styles['check-icon'],\n              isChecked && styles['check-icon_show-check']\n            )}\n            name=\"check\"\n            size=\"sm\"\n          />\n        </GenericMenuItem>\n        {separator && <Separator size=\"sm\" />}\n      </>\n    );\n  }\n);\n\nItem.displayName = 'AutoComplete.Item';\n\nAutoComplete.Group = Group;\nAutoComplete.Item = Item;\n"],"names":["Root","Children","isValidElement","getTextFromNodes","useId","useState","useRef","useResolvedPortalContainer","useCallback","disabled","value","open","search","children","options","useEffect","useMemo","jsxs","jsx","Trigger","SearchField","Portal","Content","styles","OptionContext","cn","forwardRef","useSearch","mergeRefs","useOption","Fragment","GenericMenuItem","IconWrapper","Icon","Separator"],"mappings":"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"}