{"version":3,"file":"index.cjs","sources":["../../../../src/components/SplitButton/SplitButton.tsx"],"sourcesContent":["import { CSSProperties, useEffect, useMemo, useRef, useState } from 'react';\nimport { Dropdown } from '@/components/Dropdown';\nimport { BaseButton } from '@/components/Button/BaseButton';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport { Icon } from '@/components/Icon';\nimport { cn, cva } from '@/lib/cva';\nimport { SplitButtonProps, Menu } from './SplitButton.types';\nimport styles from './SplitButton.module.css';\n\nconst triggerVariants = cva(styles['split-button'], {\n  variants: {\n    type: {\n      primary: styles['split-button_type_primary'],\n      secondary: styles['split-button_type_secondary'],\n    },\n    fillWidth: {\n      true: styles['split-button_fill-width'],\n    },\n    disabled: {\n      true: styles['split-button_disabled'],\n    },\n  },\n  defaultVariants: {\n    type: 'primary',\n  },\n});\n\nconst primaryVariants = cva(styles['split-button__primary'], {\n  variants: {\n    fillWidth: {\n      true: styles['split-button__primary_fill-width'],\n    },\n  },\n});\n\nexport const SplitButton = ({\n  type = 'primary',\n  htmlType,\n  disabled,\n  menu,\n  dir,\n  open,\n  defaultOpen,\n  onOpenChange,\n  modal,\n  side,\n  fillWidth,\n  children,\n  icon,\n  iconDir = 'start',\n  className,\n  ...props\n}: SplitButtonProps) => {\n  const ref = useRef<HTMLDivElement>(null);\n  const [width, setWidth] = useState(0);\n\n  useEffect(() => {\n    const targetDiv = ref.current;\n    if (!targetDiv) {\n      return;\n    }\n\n    const resizeObserver = new ResizeObserver(entries => {\n      for (const entry of entries) {\n        setWidth(entry.target.clientWidth);\n      }\n    });\n\n    resizeObserver.observe(targetDiv);\n\n    return () => {\n      resizeObserver.unobserve(targetDiv);\n    };\n  }, []);\n\n  const contentStyle = useMemo(\n    () =>\n      ({\n        '--split-button-dropdown-min-width': `${width}px`,\n      }) as CSSProperties,\n    [width]\n  );\n\n  return (\n    <Dropdown\n      dir={dir}\n      open={open}\n      defaultOpen={defaultOpen}\n      onOpenChange={onOpenChange}\n      modal={modal}\n    >\n      <div\n        ref={ref}\n        className={cn(triggerVariants({ type, fillWidth, disabled }))}\n      >\n        <BaseButton\n          disabled={disabled}\n          {...props}\n          type={htmlType}\n          className={cn(primaryVariants({ fillWidth }), className)}\n        >\n          <IconWrapper\n            className={styles['split-button__button-data']}\n            icon={icon}\n            iconDir={iconDir}\n          >\n            {children}\n          </IconWrapper>\n        </BaseButton>\n        <Dropdown.Trigger\n          disabled={disabled}\n          asChild\n          data-testid=\"split-button-dropdown\"\n          className={styles['split-button__secondary']}\n        >\n          <span>\n            <Icon\n              name=\"chevron-down\"\n              size=\"sm\"\n            />\n          </span>\n        </Dropdown.Trigger>\n      </div>\n      <Dropdown.Content\n        side={side}\n        sideOffset={4}\n        align=\"end\"\n        className={styles['split-button__dropdown-content']}\n        style={contentStyle}\n      >\n        {menu.map((item: Menu, index: number) => (\n          <MenuContentItem\n            key={`split-menu-option-${index}`}\n            parentKey={`split-menu-option-${index}`}\n            {...item}\n          />\n        ))}\n      </Dropdown.Content>\n    </Dropdown>\n  );\n};\n\nconst MenuContentItem = ({\n  items = [],\n  type = 'item',\n  label,\n  icon,\n  iconDir = 'start',\n  parentKey,\n  ...props\n}: Menu & { parentKey: string }) => {\n  if (type === 'item') {\n    return (\n      <Dropdown.Item {...props}>\n        <IconWrapper\n          icon={icon}\n          iconDir={iconDir}\n        >\n          {label}\n        </IconWrapper>\n      </Dropdown.Item>\n    );\n  }\n  if (type === 'group') {\n    return (\n      <Dropdown.Group>\n        {items.map((item, index) => (\n          <MenuContentItem\n            key={`${parentKey}-group-${index}`}\n            parentKey={`${parentKey}-group-${index}`}\n            {...item}\n          />\n        ))}\n      </Dropdown.Group>\n    );\n  }\n  if (type === 'sub-menu') {\n    return (\n      <Dropdown.Sub>\n        <Dropdown.Trigger\n          sub\n          {...props}\n        >\n          <IconWrapper\n            icon={icon}\n            iconDir={iconDir}\n          >\n            {label}\n          </IconWrapper>\n        </Dropdown.Trigger>\n        <Dropdown.Content sub>\n          {items.map((item, index) => (\n            <MenuContentItem\n              key={`${parentKey}-sub-menu-${index}`}\n              parentKey={`${parentKey}-sub-menu-${index}`}\n              {...item}\n            />\n          ))}\n        </Dropdown.Content>\n      </Dropdown.Sub>\n    );\n  }\n};\n"],"names":["cva","styles","useRef","useState","useEffect","useMemo","jsxs","Dropdown","cn","jsx","BaseButton","IconWrapper","Icon"],"mappings":"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"}