{"version":3,"file":"Combobox.cjs","sources":["../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import {\n  createVarsResolver,\n  ExtendComponent,\n  Factory,\n  getFontSize,\n  getSize,\n  RaikouSize,\n  RaikouThemeComponent,\n  rem,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { __PopoverProps, Popover } from '../Popover';\nimport { ComboboxProvider } from './Combobox.context';\nimport { ComboboxChevron } from './ComboboxChevron/ComboboxChevron';\nimport { ComboboxClearButton } from './ComboboxClearButton/ComboboxClearButton';\nimport { ComboboxDropdown } from './ComboboxDropdown/ComboboxDropdown';\nimport { ComboboxDropdownTarget } from './ComboboxDropdownTarget/ComboboxDropdownTarget';\nimport { ComboboxEmpty } from './ComboboxEmpty/ComboboxEmpty';\nimport { ComboboxEventsTarget } from './ComboboxEventsTarget/ComboboxEventsTarget';\nimport { ComboboxFooter } from './ComboboxFooter/ComboboxFooter';\nimport { ComboboxGroup } from './ComboboxGroup/ComboboxGroup';\nimport { ComboboxHeader } from './ComboboxHeader/ComboboxHeader';\nimport { ComboboxHiddenInput } from './ComboboxHiddenInput/ComboboxHiddenInput';\nimport { ComboboxOption, ComboboxOptionProps } from './ComboboxOption/ComboboxOption';\nimport { ComboboxOptions } from './ComboboxOptions/ComboboxOptions';\nimport { ComboboxSearch } from './ComboboxSearch/ComboboxSearch';\nimport { ComboboxTarget } from './ComboboxTarget/ComboboxTarget';\nimport { ComboboxStore, useCombobox } from './use-combobox/use-combobox';\nimport {\n  ComboboxDropdownEmptyStyle,\n  ComboboxDropdownFooterStyle,\n  ComboboxDropdownGroupLabelStyle,\n  ComboboxDropdownGroupStyle,\n  ComboboxDropdownHeaderStyle,\n  ComboboxDropdownOptionsStyle,\n  ComboboxDropdownOptionStyle,\n  ComboboxDropdownSearchStyle,\n  ComboboxDropdownStyle,\n} from './Combobox.css';\n\nexport type ComboboxStylesNames =\n  | 'options'\n  | 'dropdown'\n  | 'option'\n  | 'search'\n  | 'empty'\n  | 'footer'\n  | 'header'\n  | 'group'\n  | 'groupLabel';\n\nexport type ComboboxCSSVariables = {\n  options: '--combobox-option-fz' | '--combobox-option-padding';\n  dropdown: '--combobox-padding' | '--combobox-option-fz' | '--combobox-option-padding';\n};\n\nexport interface ComboboxProps extends __PopoverProps, StylesApiProps<ComboboxFactory> {\n  __staticSelector?: string;\n\n  /** Combobox content */\n  children?: React.ReactNode;\n\n  /** Combobox store, can be used to control combobox state */\n  store?: ComboboxStore;\n\n  /** Called when item is selected with `Enter` key or by clicking it */\n  onOptionSubmit?: (value: string, optionProps: ComboboxOptionProps) => void;\n\n  /** Controls items `font-size` and `padding`, `'sm'` by default */\n  size?: RaikouSize | (string & {});\n\n  /** Controls `padding` of the dropdown, `4` by default */\n  dropdownPadding?: React.CSSProperties['padding'];\n\n  /** Determines whether selection should be reset when option is hovered, `false` by default */\n  resetSelectionOnOptionHover?: boolean;\n\n  /** Determines whether Combobox value can be changed */\n  readOnly?: boolean;\n}\n\nexport type ComboboxFactory = Factory<{\n  props: ComboboxProps;\n  ref: HTMLDivElement;\n  stylesNames: ComboboxStylesNames;\n  vars: ComboboxCSSVariables;\n  staticComponents: {\n    Target: typeof ComboboxTarget;\n    Dropdown: typeof ComboboxDropdown;\n    Options: typeof ComboboxOptions;\n    Option: typeof ComboboxOption;\n    Search: typeof ComboboxSearch;\n    Empty: typeof ComboboxEmpty;\n    Chevron: typeof ComboboxChevron;\n    Footer: typeof ComboboxFooter;\n    Header: typeof ComboboxHeader;\n    EventsTarget: typeof ComboboxEventsTarget;\n    DropdownTarget: typeof ComboboxDropdownTarget;\n    Group: typeof ComboboxGroup;\n    ClearButton: typeof ComboboxClearButton;\n    HiddenInput: typeof ComboboxHiddenInput;\n  };\n}>;\n\nconst defaultProps: Partial<ComboboxProps> = {\n  keepMounted: true,\n  withinPortal: true,\n  resetSelectionOnOptionHover: false,\n  width: 'target',\n  transitionProps: { transition: 'fade', duration: 0 },\n};\n\nconst varsResolver = createVarsResolver<ComboboxFactory>((_, { size, dropdownPadding }) => ({\n  options: {\n    '--combobox-option-fz': getFontSize(size),\n    '--combobox-option-padding': getSize(size, 'combobox-option-padding'),\n  },\n\n  dropdown: {\n    '--combobox-padding': dropdownPadding === undefined ? undefined : rem(dropdownPadding),\n    '--combobox-option-fz': getFontSize(size),\n    '--combobox-option-padding': getSize(size, 'combobox-option-padding'),\n  },\n}));\n\nexport function Combobox(_props: ComboboxProps) {\n  const props = useProps('Combobox', defaultProps, _props);\n  const {\n    classNames,\n    styles,\n    unstyled,\n    children,\n    store: controlledStore,\n    vars,\n    onOptionSubmit,\n    onClose,\n    size,\n    dropdownPadding,\n    resetSelectionOnOptionHover,\n    __staticSelector,\n    readOnly,\n    ...others\n  } = props;\n\n  const uncontrolledStore = useCombobox();\n  const store = controlledStore || uncontrolledStore;\n\n  const getStyles = useStyles<ComboboxFactory>({\n    name: __staticSelector || 'Combobox',\n    classes: {\n      options: ComboboxDropdownOptionsStyle,\n      dropdown: ComboboxDropdownStyle,\n      option: ComboboxDropdownOptionStyle,\n      search: ComboboxDropdownSearchStyle,\n      empty: ComboboxDropdownEmptyStyle,\n      footer: ComboboxDropdownFooterStyle,\n      header: ComboboxDropdownHeaderStyle,\n      group: ComboboxDropdownGroupStyle,\n      groupLabel: ComboboxDropdownGroupLabelStyle,\n    },\n    props,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const onDropdownClose = () => {\n    onClose?.();\n    store.closeDropdown();\n  };\n\n  return (\n    <ComboboxProvider\n      value={{\n        getStyles,\n        store,\n        onOptionSubmit,\n        size: size!,\n        resetSelectionOnOptionHover,\n        readOnly,\n      }}\n    >\n      <Popover\n        opened={store.dropdownOpened}\n        {...others}\n        onChange={(_opened) => !_opened && onDropdownClose()}\n        withRoles={false}\n        unstyled={unstyled}\n      >\n        {children}\n      </Popover>\n    </ComboboxProvider>\n  );\n}\n\nconst extendCombobox = (c: ExtendComponent<ComboboxFactory>): RaikouThemeComponent => c;\n\nCombobox.extend = extendCombobox;\nCombobox.displayName = '@raikou/core/Combobox';\nCombobox.Target = ComboboxTarget;\nCombobox.Dropdown = ComboboxDropdown;\nCombobox.Options = ComboboxOptions;\nCombobox.Option = ComboboxOption;\nCombobox.Search = ComboboxSearch;\nCombobox.Empty = ComboboxEmpty;\nCombobox.Chevron = ComboboxChevron;\nCombobox.Footer = ComboboxFooter;\nCombobox.Header = ComboboxHeader;\nCombobox.EventsTarget = ComboboxEventsTarget;\nCombobox.DropdownTarget = ComboboxDropdownTarget;\nCombobox.Group = ComboboxGroup;\nCombobox.ClearButton = ComboboxClearButton;\nCombobox.HiddenInput = ComboboxHiddenInput;\n"],"names":["createVarsResolver","getFontSize","getSize","rem","useProps","useCombobox","useStyles","ComboboxDropdownOptionsStyle","ComboboxDropdownStyle","ComboboxDropdownOptionStyle","ComboboxDropdownSearchStyle","ComboboxDropdownEmptyStyle","ComboboxDropdownFooterStyle","ComboboxDropdownHeaderStyle","ComboboxDropdownGroupStyle","ComboboxDropdownGroupLabelStyle","jsx","ComboboxProvider","Popover","ComboboxTarget","ComboboxDropdown","ComboboxOptions","ComboboxOption","ComboboxSearch","ComboboxEmpty","ComboboxChevron","ComboboxFooter","ComboboxHeader","ComboboxEventsTarget","ComboboxDropdownTarget","ComboboxGroup","ComboboxClearButton","ComboboxHiddenInput"],"mappings":"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"}