{"version":3,"file":"Autocomplete.cjs","sources":["../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useId, useUncontrolled } from '@raikou/hooks';\nimport {\n  BoxProps,\n  ElementProps,\n  factory,\n  Factory,\n  StylesApiProps,\n  useProps,\n  useResolvedStylesApi,\n} from '../../core';\nimport {\n  Combobox,\n  ComboboxLikeProps,\n  ComboboxLikeRenderOptionInput,\n  ComboboxLikeStylesNames,\n  ComboboxStringData,\n  ComboboxStringItem,\n  getOptionsLockup,\n  getParsedComboboxData,\n  OptionsDropdown,\n  useCombobox,\n} from '../Combobox';\nimport { __BaseInputProps, __InputStylesNames, InputVariant } from '../Input';\nimport { InputBase } from '../InputBase';\nimport { ScrollAreaProps } from '../ScrollArea';\n\nexport type AutocompleteStylesNames = __InputStylesNames | ComboboxLikeStylesNames;\n\nexport interface AutocompleteProps\n  extends BoxProps,\n    __BaseInputProps,\n    Omit<ComboboxLikeProps, 'data'>,\n    StylesApiProps<AutocompleteFactory>,\n    ElementProps<'input', 'onChange' | 'size'> {\n  /** Data displayed in the dropdown */\n  data?: ComboboxStringData;\n\n  /** Controlled component value */\n  value?: string;\n\n  /** Uncontrolled component default value */\n  defaultValue?: string;\n\n  /** Called when value changes */\n  onChange?: (value: string) => void;\n\n  /** A function to render content of the option, replaces the default content of the option */\n  renderOption?: (input: ComboboxLikeRenderOptionInput<ComboboxStringItem>) => React.ReactNode;\n\n  /** Props passed down to the underlying `ScrollArea` component in the dropdown */\n  scrollAreaProps?: ScrollAreaProps;\n}\n\nexport type AutocompleteFactory = Factory<{\n  props: AutocompleteProps;\n  ref: HTMLInputElement;\n  stylesNames: AutocompleteStylesNames;\n  variant: InputVariant;\n}>;\n\nconst defaultProps: Partial<AutocompleteProps> = {};\n\nexport const Autocomplete = factory<AutocompleteFactory>((_props, ref) => {\n  const props = useProps('Autocomplete', defaultProps, _props);\n  const {\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    dropdownOpened,\n    defaultDropdownOpened,\n    onDropdownClose,\n    onDropdownOpen,\n    onFocus,\n    onBlur,\n    onClick,\n    onChange,\n    data,\n    value,\n    defaultValue,\n    selectFirstOptionOnChange,\n    onOptionSubmit,\n    comboboxProps,\n    readOnly,\n    disabled,\n    filter,\n    limit,\n    withScrollArea,\n    maxDropdownHeight,\n    size,\n    id,\n    renderOption,\n    autoComplete,\n    scrollAreaProps,\n    ...others\n  } = props;\n\n  const _id = useId(id);\n  const parsedData = getParsedComboboxData(data);\n  const optionsLockup = getOptionsLockup(parsedData);\n\n  const [_value, setValue] = useUncontrolled({\n    value,\n    defaultValue,\n    finalValue: '',\n    onChange,\n  });\n\n  const combobox = useCombobox({\n    opened: dropdownOpened,\n    defaultOpened: defaultDropdownOpened,\n    onDropdownOpen,\n    onDropdownClose: () => {\n      onDropdownClose?.();\n      combobox.resetSelectedOption();\n    },\n  });\n\n  const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<AutocompleteFactory>({\n    props,\n    styles,\n    classNames,\n  });\n\n  useEffect(() => {\n    if (selectFirstOptionOnChange) {\n      combobox.selectFirstOption();\n    }\n  }, [selectFirstOptionOnChange, _value]);\n\n  return (\n    <Combobox\n      store={combobox}\n      __staticSelector=\"Autocomplete\"\n      classNames={resolvedClassNames}\n      styles={resolvedStyles}\n      unstyled={unstyled}\n      readOnly={readOnly}\n      onOptionSubmit={(val) => {\n        onOptionSubmit?.(val);\n        setValue(optionsLockup[val].label);\n        combobox.closeDropdown();\n      }}\n      size={size}\n      {...comboboxProps}\n    >\n      <Combobox.Target autoComplete={autoComplete}>\n        <InputBase\n          ref={ref}\n          {...others}\n          size={size}\n          __staticSelector=\"Autocomplete\"\n          disabled={disabled}\n          readOnly={readOnly}\n          value={_value}\n          onChange={(event) => {\n            setValue(event.currentTarget.value);\n            combobox.openDropdown();\n            selectFirstOptionOnChange && combobox.selectFirstOption();\n          }}\n          onFocus={(event) => {\n            combobox.openDropdown();\n            onFocus?.(event);\n          }}\n          onBlur={(event) => {\n            combobox.closeDropdown();\n            onBlur?.(event);\n          }}\n          onClick={(event) => {\n            combobox.openDropdown();\n            onClick?.(event);\n          }}\n          classNames={resolvedClassNames}\n          styles={resolvedStyles}\n          unstyled={unstyled}\n          id={_id}\n        />\n      </Combobox.Target>\n      <OptionsDropdown\n        data={parsedData}\n        hidden={readOnly || disabled}\n        filter={filter}\n        search={_value}\n        limit={limit}\n        hiddenWhenEmpty\n        withScrollArea={withScrollArea}\n        maxDropdownHeight={maxDropdownHeight}\n        unstyled={unstyled}\n        labelId={others.label ? `${_id}-label` : undefined}\n        aria-label={others.label ? undefined : others['aria-label']}\n        renderOption={renderOption}\n        scrollAreaProps={scrollAreaProps}\n      />\n    </Combobox>\n  );\n});\n\nAutocomplete.displayName = '@raikou/core/Autocomplete';\n"],"names":["factory","useProps","useId","getParsedComboboxData","getOptionsLockup","useUncontrolled","useCombobox","useResolvedStylesApi","useEffect","jsxs","Combobox","jsx","InputBase","OptionsDropdown"],"mappings":"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"}