{"version":3,"file":"Select.mjs","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["'use client'\n\nimport {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport * as React from 'react'\n\nimport {\n  ChevronDownIcon,\n  ChevronUpIcon,\n  isBezierIcon,\n} from '@channel.io/bezier-icons'\nimport classNames from 'classnames'\n\nimport { getFormFieldSizeClassName } from '~/src/types/props-helpers'\nimport { isEmpty } from '~/src/utils/type'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport { useFormFieldProps } from '~/src/components/FormControl'\nimport { Icon } from '~/src/components/Icon'\nimport { Overlay } from '~/src/components/Overlay'\nimport { Text } from '~/src/components/Text'\n\nimport { type SelectProps, type SelectRef } from './Select.types'\n\nimport styles from './Select.module.scss'\n\nexport const SELECT_DROPDOWN_TEST_ID = 'bezier-select-dropdown'\n\nexport const Select = forwardRef<SelectRef, SelectProps>(function Select(\n  {\n    children,\n    style,\n    className,\n    size: sizeProps,\n    defaultFocus = false,\n    placeholder = '',\n    leftContent,\n    rightContent,\n    iconColor = 'text-neutral-lighter',\n    text,\n    textColor = 'text-neutral',\n    withoutChevron = false,\n    dropdownStyle,\n    dropdownClassName,\n    dropdownContainer,\n    dropdownMarginX,\n    dropdownMarginY = 6,\n    dropdownZIndex = 'overlay',\n    dropdownPosition = 'bottom-left',\n    dropdownKeepInContainer = false,\n    onClickTrigger,\n    onHideDropdown,\n    ...rest\n  },\n  forwardedRef\n) {\n  const {\n    disabled,\n    readOnly,\n    hasError,\n    size: formFieldSize,\n    ...ownProps\n  } = useFormFieldProps(rest)\n\n  const containerRef = useRef<HTMLDivElement>(null)\n  const triggerRef = useRef<HTMLButtonElement>(null)\n\n  const size = sizeProps ?? formFieldSize ?? 'm'\n\n  const [isDropdownOpened, setIsDropdownOpened] = useState(false)\n\n  const handleClickTrigger = useCallback(\n    (event: React.MouseEvent) => {\n      if (!disabled && !readOnly) {\n        setIsDropdownOpened((prevState) => !prevState)\n        onClickTrigger?.(event)\n      }\n    },\n    [disabled, readOnly, onClickTrigger]\n  )\n\n  const handleHideDropdown = useCallback(() => {\n    setIsDropdownOpened(false)\n    onHideDropdown?.()\n  }, [onHideDropdown])\n\n  const getDOMNode = useCallback(() => triggerRef.current, [])\n\n  const handle = useMemo(\n    (): SelectRef => ({\n      handleClickTrigger,\n      handleHideDropdown,\n      getDOMNode,\n    }),\n    [handleClickTrigger, handleHideDropdown, getDOMNode]\n  )\n\n  useEffect(\n    function handleDefaultFocus() {\n      if (defaultFocus && !disabled && !readOnly) {\n        setIsDropdownOpened(true)\n      }\n    },\n    [defaultFocus, disabled, readOnly]\n  )\n\n  useImperativeHandle(forwardedRef, () => handle)\n\n  const hasContent = !isEmpty(text)\n\n  const Content = (() => {\n    if (!hasContent) {\n      return (\n        <Text\n          data-testid=\"bezier-select-trigger-text\"\n          typo=\"14\"\n          truncated\n          color=\"text-neutral-lighter\"\n        >\n          {placeholder}\n        </Text>\n      )\n    }\n\n    if (typeof text === 'string') {\n      return (\n        <Text\n          data-testid=\"bezier-select-trigger-text\"\n          typo=\"14\"\n          truncated\n          color={textColor}\n        >\n          {text}\n        </Text>\n      )\n    }\n\n    return text\n  })()\n\n  return (\n    <div\n      style={style}\n      className={classNames(styles.SelectContainer, className)}\n      ref={containerRef}\n    >\n      <BaseButton\n        className={classNames(\n          styles.SelectTrigger,\n          getFormFieldSizeClassName(size),\n          hasError && styles.invalid,\n          readOnly && styles.readonly,\n          isDropdownOpened && styles.active\n        )}\n        ref={triggerRef}\n        disabled={disabled}\n        onClick={handleClickTrigger}\n        {...ownProps}\n      >\n        <div className={styles.SelectMainContent}>\n          {isBezierIcon(leftContent) ? (\n            <Icon\n              source={leftContent}\n              size=\"xs\"\n              marginRight={6}\n              color={iconColor}\n            />\n          ) : (\n            leftContent\n          )}\n\n          {Content}\n\n          {isBezierIcon(rightContent) ? (\n            <Icon\n              source={rightContent}\n              size=\"xs\"\n              marginRight={6}\n              color={iconColor}\n            />\n          ) : (\n            rightContent\n          )}\n        </div>\n\n        {!withoutChevron && (\n          <Icon\n            source={isDropdownOpened ? ChevronUpIcon : ChevronDownIcon}\n            size=\"xs\"\n            color={readOnly ? 'text-neutral-lighter' : 'text-neutral-light'}\n            marginLeft={6}\n          />\n        )}\n      </BaseButton>\n\n      <Overlay\n        zIndex={dropdownZIndex}\n        style={dropdownStyle}\n        className={classNames(styles.SelectDropdown, dropdownClassName)}\n        withTransition\n        show={isDropdownOpened && !disabled}\n        marginX={dropdownMarginX}\n        marginY={dropdownMarginY}\n        target={triggerRef.current}\n        container={dropdownContainer || containerRef.current}\n        position={dropdownPosition}\n        keepInContainer={dropdownKeepInContainer}\n        data-testid={SELECT_DROPDOWN_TEST_ID}\n        onHide={handleHideDropdown}\n      >\n        {children}\n      </Overlay>\n    </div>\n  )\n})\n"],"names":["SELECT_DROPDOWN_TEST_ID","Select","forwardRef","children","style","className","size","sizeProps","defaultFocus","placeholder","leftContent","rightContent","iconColor","text","textColor","withoutChevron","dropdownStyle","dropdownClassName","dropdownContainer","dropdownMarginX","dropdownMarginY","dropdownZIndex","dropdownPosition","dropdownKeepInContainer","onClickTrigger","onHideDropdown","rest","forwardedRef","_ref","disabled","readOnly","hasError","formFieldSize","ownProps","useFormFieldProps","containerRef","useRef","triggerRef","isDropdownOpened","setIsDropdownOpened","useState","handleClickTrigger","useCallback","event","prevState","handleHideDropdown","getDOMNode","current","handle","useMemo","useEffect","handleDefaultFocus","useImperativeHandle","hasContent","isEmpty","Content","_jsx","Text","typo","truncated","color","_jsxs","classNames","styles","SelectContainer","ref","BaseButton","SelectTrigger","getFormFieldSizeClassName","invalid","readonly","active","onClick","SelectMainContent","isBezierIcon","Icon","source","marginRight","ChevronUpIcon","ChevronDownIcon","marginLeft","Overlay","zIndex","SelectDropdown","withTransition","show","marginX","marginY","target","container","position","keepInContainer","onHide"],"mappings":"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"}