{"version":3,"sources":["../src/components/Select/Select.tsx"],"sourcesContent":["import { create, StoreApi, useStore } from 'zustand';\nimport {\n  ReactNode,\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  ButtonHTMLAttributes,\n  forwardRef,\n  HTMLAttributes,\n  KeyboardEvent,\n  MouseEvent,\n  ReactElement,\n  isValidElement,\n  Children,\n  cloneElement,\n  useId,\n  CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { CaretDownIcon } from '@phosphor-icons/react/dist/csr/CaretDown';\nimport { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';\nimport { WarningCircleIcon } from '@phosphor-icons/react/dist/csr/WarningCircle';\nimport { cn } from '../../utils/utils';\n\nconst VARIANT_CLASSES = {\n  outlined: 'border-2 rounded-lg focus:border-primary-950',\n  underlined: 'border-b-2 focus:border-primary-950',\n  rounded: 'border-2 rounded-full focus:border-primary-950',\n} as const;\n\nconst SIZE_CLASSES = {\n  small: 'text-sm',\n  medium: 'text-md',\n  large: 'text-lg',\n  'extra-large': 'text-lg',\n} as const;\n\nconst HEIGHT_CLASSES = {\n  small: 'h-8',\n  medium: 'h-9',\n  large: 'h-10',\n  'extra-large': 'h-12',\n} as const;\n\nconst PADDING_CLASSES = {\n  small: 'px-2 py-1',\n  medium: 'px-3 py-2',\n  large: 'px-4 py-3',\n  'extra-large': 'px-5 py-4',\n} as const;\n\ninterface TriggerRect {\n  top: number;\n  left: number;\n  width: number;\n  height: number;\n}\n\ntype SelectAlign = 'start' | 'center' | 'end';\n\ninterface SelectStore {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  value: string;\n  setValue: (value: string) => void;\n  selectedLabel: ReactNode;\n  setSelectedLabel: (label: ReactNode) => void;\n  onValueChange?: (value: string) => void;\n  triggerRect: TriggerRect | null;\n  setTriggerRect: (rect: TriggerRect | null) => void;\n}\n\ntype SelectStoreApi = StoreApi<SelectStore>;\n\nexport function createSelectStore(\n  onValueChange?: (value: string) => void\n): SelectStoreApi {\n  return create<SelectStore>((set) => ({\n    open: false,\n    setOpen: (open) => set({ open }),\n    value: '',\n    setValue: (value) => set({ value }),\n    selectedLabel: '',\n    setSelectedLabel: (label) => set({ selectedLabel: label }),\n    onValueChange,\n    triggerRect: null,\n    setTriggerRect: (rect) => set({ triggerRect: rect }),\n  }));\n}\n\nexport const useSelectStore = (externalStore?: SelectStoreApi) => {\n  if (!externalStore) {\n    throw new Error(\n      'Component must be used within a Select (store is missing)'\n    );\n  }\n\n  return externalStore;\n};\n\nexport function getLabelAsNode(children: ReactNode): ReactNode {\n  if (typeof children === 'string' || typeof children === 'number') {\n    return children;\n  }\n  const flattened = Children.toArray(children);\n\n  if (flattened.length === 1) return flattened[0];\n\n  return <>{flattened}</>;\n}\n\ninterface SelectProps {\n  className?: string;\n  children: ReactNode;\n  defaultValue?: string;\n  value?: string;\n  onValueChange?: (value: string) => void;\n  size?: 'small' | 'medium' | 'large' | 'extra-large';\n  label?: string;\n  helperText?: string;\n  errorMessage?: string;\n  id?: string;\n}\n\nconst injectStore = (\n  children: ReactNode,\n  store: SelectStoreApi,\n  size: string,\n  selectId: string\n): ReactNode => {\n  return Children.map(children, (child) => {\n    if (isValidElement(child)) {\n      const typedChild = child as ReactElement<{\n        store?: SelectStoreApi;\n        children?: ReactNode;\n        size?: string;\n        selectId?: string;\n      }>;\n\n      const newProps: Partial<{\n        store: SelectStoreApi;\n        children: ReactNode;\n        size: string;\n        selectId: string;\n      }> = {\n        store,\n      };\n\n      // Pass size to SelectTrigger, selectId to both Trigger and Content\n      if (typedChild.type === SelectTrigger) {\n        newProps.size = size;\n        newProps.selectId = selectId;\n      }\n\n      if (typedChild.type === SelectContent) {\n        newProps.selectId = selectId;\n      }\n\n      if (typedChild.props.children) {\n        newProps.children = injectStore(\n          typedChild.props.children,\n          store,\n          size,\n          selectId\n        );\n      }\n\n      return cloneElement(typedChild, newProps);\n    }\n    return child;\n  });\n};\n\nconst Select = ({\n  children,\n  defaultValue = '',\n  className,\n  value: propValue,\n  onValueChange,\n  size = 'small',\n  label,\n  helperText,\n  errorMessage,\n  id,\n}: SelectProps) => {\n  const storeRef = useRef<SelectStoreApi | null>(null);\n  storeRef.current ??= createSelectStore(onValueChange);\n  const store = storeRef.current;\n\n  const selectRef = useRef<HTMLDivElement>(null);\n  const { open, setOpen, setValue, selectedLabel } = useStore(store, (s) => s);\n\n  // Generate unique ID if not provided\n  const generatedId = useId();\n  const selectId = id ?? `select-${generatedId}`;\n\n  const findLabelForValue = (\n    children: ReactNode,\n    targetValue: string\n  ): ReactNode | null => {\n    let found: ReactNode | null = null;\n    const search = (nodes: ReactNode) => {\n      Children.forEach(nodes, (child) => {\n        if (!isValidElement(child)) return;\n        const typedChild = child as ReactElement<{\n          value?: string;\n          children?: ReactNode;\n        }>;\n        if (\n          typedChild.type === SelectItem &&\n          typedChild.props.value === targetValue\n        ) {\n          // Use getLabelAsNode to handle both string and ReactNode children\n          found = getLabelAsNode(typedChild.props.children);\n        }\n        if (typedChild.props.children && !found)\n          search(typedChild.props.children);\n      });\n    };\n    search(children);\n    return found;\n  };\n\n  useEffect(() => {\n    if (!selectedLabel && defaultValue) {\n      const label = findLabelForValue(children, defaultValue);\n      if (label) store.setState({ selectedLabel: label });\n    }\n  }, [children, defaultValue, selectedLabel]);\n\n  useEffect(() => {\n    const handleClickOutside = (event: globalThis.MouseEvent) => {\n      const target = event.target as Node;\n      // CheckIcon if click is inside the trigger container\n      const isInsideTrigger = selectRef.current?.contains(target);\n      // CheckIcon if click is inside the portaled content (scoped to this Select instance)\n      const portaledMenu = document.body.querySelector(\n        `[role=\"menu\"][data-select-id=\"${selectId}\"]`\n      );\n      const isInsidePortaledMenu = portaledMenu?.contains(target);\n\n      if (!isInsideTrigger && !isInsidePortaledMenu) {\n        setOpen(false);\n      }\n    };\n\n    const handleArrowKeys = (event: globalThis.KeyboardEvent) => {\n      // Find the portaled menu in the body (scoped to this Select instance)\n      const selectContent = document.body.querySelector(\n        `[role=\"menu\"][data-select-id=\"${selectId}\"]`\n      );\n      if (selectContent) {\n        event.preventDefault();\n        const items = Array.from(\n          selectContent.querySelectorAll(\n            '[role=\"menuitem\"]:not([aria-disabled=\"true\"])'\n          )\n        ).filter((el): el is HTMLElement => el instanceof HTMLElement);\n\n        const focused = document.activeElement as HTMLElement;\n        const currentIndex = items.findIndex((item) => item === focused);\n\n        let nextIndex: number;\n        if (event.key === 'ArrowDown') {\n          nextIndex =\n            currentIndex === -1 ? 0 : (currentIndex + 1) % items.length;\n        } else {\n          nextIndex =\n            currentIndex === -1\n              ? items.length - 1\n              : (currentIndex - 1 + items.length) % items.length;\n        }\n        items[nextIndex]?.focus();\n      }\n    };\n\n    if (open) {\n      document.addEventListener('mousedown', handleClickOutside);\n      document.addEventListener('keydown', handleArrowKeys);\n    }\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n      document.removeEventListener('keydown', handleArrowKeys);\n    };\n  }, [open, selectId, setOpen]);\n\n  useEffect(() => {\n    // Skip when the consumer isn't using controlled mode\n    if (propValue === undefined) return;\n    setValue(propValue);\n    // Resolve the label for the new value; if it can't be resolved (empty\n    // value, or a value with no matching SelectItem), clear the stale label\n    // so the placeholder takes over.\n    const label = findLabelForValue(children, propValue);\n    store.setState({ selectedLabel: label ?? '' });\n  }, [propValue, children]);\n\n  const sizeClasses = SIZE_CLASSES[size];\n\n  return (\n    <div className={cn('w-full', className)}>\n      {/* Label */}\n      {label && (\n        <label\n          htmlFor={selectId}\n          className={cn('block font-bold text-text-900 mb-1.5', sizeClasses)}\n        >\n          {label}\n        </label>\n      )}\n\n      {/* Select Container */}\n      <div className={cn('relative w-full')} ref={selectRef}>\n        {injectStore(children, store, size, selectId)}\n      </div>\n\n      {/* Helper Text or Error Message */}\n      {(helperText || errorMessage) && (\n        <div className=\"mt-1.5 gap-1.5\">\n          {helperText && <p className=\"text-sm text-text-500\">{helperText}</p>}\n          {errorMessage && (\n            <p className=\"flex gap-1 items-center text-sm text-indicator-error\">\n              <WarningCircleIcon size={16} /> {errorMessage}\n            </p>\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nconst SelectValue = ({\n  placeholder,\n  icon,\n  store: externalStore,\n}: {\n  placeholder?: string;\n  /** Optional leading icon rendered before the selected label/placeholder. */\n  icon?: ReactNode;\n  store?: SelectStoreApi;\n}) => {\n  const store = useSelectStore(externalStore);\n\n  const selectedLabel = useStore(store, (s) => s.selectedLabel);\n  const value = useStore(store, (s) => s.value);\n  return (\n    <span className=\"text-inherit flex gap-2 items-center\">\n      {icon}\n      {selectedLabel || placeholder || value}\n    </span>\n  );\n};\n\ninterface SelectTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  className?: string;\n  invalid?: boolean;\n  variant?: 'outlined' | 'underlined' | 'rounded';\n  store?: SelectStoreApi;\n  size?: 'small' | 'medium' | 'large' | 'extra-large';\n  selectId?: string;\n}\n\nconst SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(\n  (\n    {\n      className,\n      invalid = false,\n      variant = 'outlined',\n      store: externalStore,\n      disabled,\n      size = 'medium',\n      selectId,\n      type = 'button',\n      ...props\n    },\n    ref\n  ) => {\n    const store = useSelectStore(externalStore);\n    const open = useStore(store, (s) => s.open);\n    const internalRef = useRef<HTMLButtonElement>(null);\n\n    const setRefs = useCallback(\n      (element: HTMLButtonElement | null) => {\n        internalRef.current = element;\n        if (typeof ref === 'function') {\n          ref(element);\n        } else if (ref) {\n          ref.current = element;\n        }\n      },\n      [ref]\n    );\n\n    const updateTriggerRect = useCallback(() => {\n      if (internalRef.current) {\n        const rect = internalRef.current.getBoundingClientRect();\n        store.setState({\n          triggerRect: {\n            top: rect.top,\n            left: rect.left,\n            width: rect.width,\n            height: rect.height,\n          },\n        });\n      }\n    }, [store]);\n\n    // Update triggerRect on scroll/resize while open\n    useEffect(() => {\n      if (!open) return;\n\n      const handleUpdate = () => {\n        updateTriggerRect();\n      };\n\n      window.addEventListener('scroll', handleUpdate, true);\n      window.addEventListener('resize', handleUpdate);\n\n      return () => {\n        window.removeEventListener('scroll', handleUpdate, true);\n        window.removeEventListener('resize', handleUpdate);\n      };\n    }, [open, updateTriggerRect]);\n\n    const toggleOpen = () => {\n      const newOpen = !open;\n      if (newOpen) {\n        updateTriggerRect();\n      }\n      store.setState({ open: newOpen });\n    };\n\n    const variantClasses = VARIANT_CLASSES[variant];\n    const heightClasses = HEIGHT_CLASSES[size];\n    const paddingClasses = PADDING_CLASSES[size];\n\n    return (\n      <button\n        ref={setRefs}\n        id={selectId}\n        type={type}\n        className={cn(\n          'flex w-full items-center justify-between border-border-300',\n          heightClasses,\n          paddingClasses,\n          invalid &&\n            `${variant == 'underlined' ? 'border-b-2' : 'border-2'} border-indicator-error text-text-600`,\n          disabled\n            ? 'cursor-not-allowed text-text-400 pointer-events-none opacity-50'\n            : 'cursor-pointer hover:bg-background-50 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground',\n          !invalid && !disabled ? 'text-text-700' : '',\n          variantClasses,\n          className\n        )}\n        onClick={toggleOpen}\n        aria-expanded={open}\n        aria-haspopup=\"listbox\"\n        aria-controls={open ? 'select-content' : undefined}\n        {...props}\n      >\n        {props.children}\n        <CaretDownIcon\n          className={cn(\n            'h-[1em] w-[1em] opacity-50 transition-transform',\n            open ? 'rotate-180' : ''\n          )}\n        />\n      </button>\n    );\n  }\n);\nSelectTrigger.displayName = 'SelectTrigger';\n\nfunction applyVerticalPosition(\n  styles: CSSProperties,\n  triggerRect: TriggerRect,\n  side: 'top' | 'bottom',\n  align: SelectAlign,\n  gap: number\n): void {\n  styles.top =\n    side === 'top'\n      ? triggerRect.top - gap\n      : triggerRect.top + triggerRect.height + gap;\n  styles.transform = side === 'top' ? 'translateY(-100%)' : undefined;\n\n  if (align === 'start') {\n    styles.left = triggerRect.left;\n  } else if (align === 'center') {\n    styles.left = triggerRect.left + triggerRect.width / 2;\n    styles.transform =\n      side === 'top' ? 'translate(-50%, -100%)' : 'translateX(-50%)';\n  } else {\n    styles.left = triggerRect.left + triggerRect.width;\n    styles.transform =\n      side === 'top' ? 'translate(-100%, -100%)' : 'translateX(-100%)';\n  }\n}\n\nfunction applyHorizontalPosition(\n  styles: CSSProperties,\n  triggerRect: TriggerRect,\n  side: 'left' | 'right',\n  align: SelectAlign,\n  gap: number\n): void {\n  styles.left =\n    side === 'left'\n      ? triggerRect.left - gap\n      : triggerRect.left + triggerRect.width + gap;\n  styles.transform = side === 'left' ? 'translateX(-100%)' : undefined;\n\n  if (align === 'start') {\n    styles.top = triggerRect.top;\n  } else if (align === 'center') {\n    styles.top = triggerRect.top + triggerRect.height / 2;\n    styles.transform =\n      side === 'left' ? 'translate(-100%, -50%)' : 'translateY(-50%)';\n  } else {\n    styles.top = triggerRect.top + triggerRect.height;\n    styles.transform =\n      side === 'left' ? 'translate(-100%, -100%)' : 'translateY(-100%)';\n  }\n}\n\ninterface SelectContentProps extends HTMLAttributes<HTMLDivElement> {\n  className?: string;\n  align?: 'start' | 'center' | 'end';\n  side?: 'top' | 'right' | 'bottom' | 'left';\n  store?: SelectStoreApi;\n  selectId?: string;\n}\n\nconst SelectContent = forwardRef<HTMLDivElement, SelectContentProps>(\n  (\n    {\n      children,\n      className,\n      align = 'start',\n      side = 'bottom',\n      store: externalStore,\n      selectId,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useSelectStore(externalStore);\n    const open = useStore(store, (s) => s.open);\n    const triggerRect = useStore(store, (s) => s.triggerRect);\n    const [mounted, setMounted] = useState(false);\n\n    useEffect(() => {\n      setMounted(true);\n    }, []);\n\n    if (!open || !mounted) return null;\n\n    // Calculate position based on trigger rect\n    const getPositionStyles = (): CSSProperties => {\n      if (!triggerRect) {\n        return {};\n      }\n\n      const gap = 4;\n      const styles: CSSProperties = {\n        position: 'fixed',\n        zIndex: 9999,\n        width: triggerRect.width,\n      };\n\n      const isVertical = side === 'top' || side === 'bottom';\n\n      if (isVertical) {\n        applyVerticalPosition(styles, triggerRect, side, align, gap);\n      } else {\n        applyHorizontalPosition(styles, triggerRect, side, align, gap);\n      }\n\n      return styles;\n    };\n\n    const content = (\n      <div\n        role=\"menu\"\n        ref={ref}\n        data-select-id={selectId}\n        style={getPositionStyles()}\n        className={cn(\n          'bg-secondary min-w-[210px] max-h-[300px] overflow-y-auto overflow-x-hidden rounded-md border p-1 shadow-md border-border-100',\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n\n    // Render using portal to escape overflow constraints\n    return createPortal(content, document.body);\n  }\n);\nSelectContent.displayName = 'SelectContent';\n\ninterface SelectItemProps extends HTMLAttributes<HTMLDivElement> {\n  value: string;\n  disabled?: boolean;\n  store?: SelectStoreApi;\n  truncate?: boolean;\n}\n\nconst SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(\n  (\n    {\n      className,\n      children,\n      value,\n      disabled = false,\n      store: externalStore,\n      truncate = false,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useSelectStore(externalStore);\n    const {\n      value: selectedValue,\n      setValue,\n      setOpen,\n      setSelectedLabel,\n      onValueChange,\n    } = useStore(store, (s) => s);\n\n    const handleClick = (\n      e: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>\n    ) => {\n      const labelNode = getLabelAsNode(children);\n      if (!disabled) {\n        // Always set the clicked value, even if it's already selected\n        setValue(value);\n        setSelectedLabel(labelNode);\n        setOpen(false);\n        onValueChange?.(value);\n      }\n      props.onClick?.(e as MouseEvent<HTMLDivElement>);\n    };\n\n    return (\n      <div\n        role=\"menuitem\"\n        aria-disabled={disabled}\n        ref={ref}\n        className={`\n          bg-secondary focus-visible:bg-background-50\n          relative flex select-none items-center gap-2 rounded-sm p-3 outline-none transition-colors [&>svg]:size-4 [&>svg]:shrink-0\n          ${className}\n          ${\n            disabled\n              ? 'cursor-not-allowed text-text-400 pointer-events-none opacity-50'\n              : 'cursor-pointer hover:bg-background-50 text-text-700 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground'\n          }\n          ${selectedValue === value && 'bg-background-50'}\n        `}\n        onClick={handleClick}\n        onKeyDown={(e) => {\n          if (e.key === 'Enter' || e.key === ' ') handleClick(e);\n        }}\n        tabIndex={disabled ? -1 : 0}\n        {...props}\n      >\n        <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n          {selectedValue === value && <CheckIcon className=\"\" />}\n        </span>\n        {truncate ? (\n          <span className=\"truncate block max-w-[200px]\">{children}</span>\n        ) : (\n          children\n        )}\n      </div>\n    );\n  }\n);\n\nSelectItem.displayName = 'SelectItem';\n\nexport default Select;\nexport { SelectTrigger, SelectContent, SelectItem, SelectValue };\n"],"mappings":"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","names":["children","label"]}