{"version":3,"file":"index.cjs","sources":["../../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import {\n  createContext,\n  useState,\n  HTMLAttributes,\n  useContext,\n  useEffect,\n  forwardRef,\n} from 'react';\n\nimport { cn, cva } from '@/lib/cva';\nimport { Icon, type ImageName } from '@/components/Icon';\nimport type { HorizontalDirection } from '@/types';\nimport { EmptyButton } from '@/components/EmptyButton';\n\nimport { IconWrapper } from './IconWrapper';\nimport { CollapsibleProps } from './Collapsible.types';\nimport styles from './Collapsible.module.css';\n\ntype ContextProps = {\n  open: boolean;\n  onOpenChange: () => void;\n};\n\nconst NavContext = createContext<ContextProps>({\n  open: false,\n  onOpenChange: () => null,\n});\n\nexport const Collapsible = ({\n  open: openProp,\n  onOpenChange: onOpenChangeProp,\n  children,\n  className,\n  ...props\n}: CollapsibleProps) => {\n  const [open, setOpen] = useState(openProp ?? false);\n  const onOpenChange = () => {\n    setOpen(open => {\n      if (typeof onOpenChangeProp === 'function') {\n        onOpenChangeProp(!open);\n      }\n      return !open;\n    });\n  };\n\n  useEffect(() => {\n    setOpen(open => openProp ?? open);\n  }, [openProp]);\n\n  const value = {\n    open: openProp ?? open,\n    onOpenChange,\n  };\n  return (\n    <div\n      {...props}\n      className={cn(styles.collapsible, className)}\n    >\n      <NavContext.Provider value={value}>{children}</NavContext.Provider>\n    </div>\n  );\n};\n\nconst headerVariants = cva(styles.collapsible__header, {\n  variants: {\n    indicatorDir: {\n      start: styles['collapsible__header_indicator-dir_start'],\n      end: styles['collapsible__header_indicator-dir_end'],\n    },\n  },\n  defaultVariants: {\n    indicatorDir: 'start',\n  },\n});\n\ninterface CollapsipleHeaderProps extends HTMLAttributes<HTMLDivElement> {\n  icon?: ImageName;\n  iconDir?: HorizontalDirection;\n  indicatorDir?: HorizontalDirection;\n  wrapInTrigger?: boolean;\n}\n\nconst CollapsipleHeader = forwardRef<HTMLDivElement, CollapsipleHeaderProps>(\n  (\n    {\n      indicatorDir = 'start',\n      icon,\n      iconDir,\n      children,\n      wrapInTrigger,\n      onClick: onClickProp,\n      className,\n      ...props\n    }: CollapsipleHeaderProps,\n    ref\n  ) => {\n    const { onOpenChange } = useContext(NavContext);\n    return (\n      <div\n        ref={ref}\n        onClick={e => {\n          if (wrapInTrigger && typeof onOpenChange === 'function') {\n            onOpenChange();\n          }\n          if (typeof onClickProp === 'function') {\n            onClickProp(e);\n          }\n        }}\n        data-collapsible-header\n        {...props}\n        className={cn(headerVariants({ indicatorDir }), className)}\n      >\n        {indicatorDir === 'start' && <Collapsible.Trigger />}\n        {children && (\n          <IconWrapper\n            icon={icon}\n            iconDir={iconDir}\n          >\n            {children}\n          </IconWrapper>\n        )}\n        {indicatorDir === 'end' && <Collapsible.Trigger />}\n      </div>\n    );\n  }\n);\n\nCollapsipleHeader.displayName = 'CollapsibleHeader';\nCollapsible.Header = CollapsipleHeader;\n\ninterface CollapsipleTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n  icon?: ImageName;\n  iconDir?: HorizontalDirection;\n  indicatorDir?: HorizontalDirection;\n}\n\nconst CollapsipleTrigger = ({\n  onClick: onClickProp,\n  children,\n  indicatorDir = 'start',\n  icon,\n  iconDir = 'start',\n  className,\n  ...props\n}: CollapsipleTriggerProps) => {\n  const { open, onOpenChange } = useContext(NavContext);\n  const onClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n    e.preventDefault();\n    e.stopPropagation();\n    if (onClickProp) {\n      onClickProp(e);\n    }\n    onOpenChange();\n  };\n\n  return (\n    <EmptyButton\n      onClick={onClick}\n      aria-label=\"trigger children\"\n      {...props}\n      className={cn(styles.collapsible__trigger, className)}\n    >\n      {indicatorDir === 'start' && (\n        <Icon\n          data-trigger-icon\n          name=\"chevron-right\"\n          data-open={open.toString()}\n          size=\"sm\"\n        />\n      )}\n      {children && (\n        <IconWrapper\n          icon={icon}\n          iconDir={iconDir}\n        >\n          {children}\n        </IconWrapper>\n      )}\n      {indicatorDir === 'end' && (\n        <Icon\n          data-trigger-icon\n          name=\"chevron-right\"\n          data-open={open.toString()}\n          size=\"sm\"\n        />\n      )}\n    </EmptyButton>\n  );\n};\n\nCollapsipleTrigger.displayName = 'CollapsibleTrigger';\nCollapsible.Trigger = CollapsipleTrigger;\n\nconst contentVariants = cva(styles.collapsible__content, {\n  variants: {\n    indicatorDir: {\n      start: styles['collapsible__content_indicator-dir_start'],\n      end: styles['collapsible__content_indicator-dir_end'],\n    },\n  },\n});\n\nconst CollapsipleContent = ({\n  indicatorDir,\n  className,\n  ...props\n}: HTMLAttributes<HTMLDivElement> & { indicatorDir?: HorizontalDirection }) => {\n  const { open } = useContext(NavContext);\n  if (!open) {\n    return;\n  }\n  return (\n    <div\n      {...props}\n      className={cn(contentVariants({ indicatorDir }), className)}\n    />\n  );\n};\n\nCollapsipleContent.displayName = 'CollapsibleContent';\nCollapsible.Content = CollapsipleContent;\n"],"names":["createContext","useState","open","useEffect","jsx","cn","styles","cva","forwardRef","useContext","jsxs","IconWrapper","EmptyButton","Icon"],"mappings":"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"}