{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-7INXXQVK.cjs","../src/components/ui/button/button-styles.ts","../src/components/ui/button/button.tsx","../src/components/ui/button/split-button.tsx","../src/components/ui/button/index.ts"],"names":["Button","jsx","cva","jsxs"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-7INXXQVK.cjs","sourcesContent":[null,"// Shared style atoms for `Button` and `SplitButton`. Extracted to keep a single\n// source of truth for surface colors, outline borders, and split-divider colors.\n\n// Each variant pairs `disabled:` (real `<button disabled>`) with `aria-disabled:`\n// (used for `<Link aria-disabled>` since anchors don't support `:disabled`).\nexport const buttonSurfaceClasses = {\n  accent:\n    \"bg-ods-accent text-ods-text-on-accent hover:bg-ods-accent-hover active:bg-ods-accent-active disabled:bg-ods-disabled aria-disabled:bg-ods-disabled\",\n  outline:\n    \"bg-ods-card text-ods-text-primary hover:bg-ods-bg-hover active:bg-ods-bg-active disabled:bg-ods-card disabled:text-ods-text-disabled aria-disabled:bg-ods-card aria-disabled:text-ods-text-disabled\",\n  transparent:\n    \"bg-transparent text-ods-text-primary hover:bg-ods-bg-hover active:bg-ods-bg-active disabled:bg-transparent disabled:text-ods-text-disabled aria-disabled:bg-transparent aria-disabled:text-ods-text-disabled\",\n  destructive:\n    \"bg-ods-error text-ods-text-on-accent hover:bg-ods-error-hover active:bg-ods-error-active disabled:bg-ods-disabled aria-disabled:bg-ods-disabled\",\n  warning:\n    \"bg-ods-warning text-ods-text-on-accent hover:bg-ods-warning-hover active:bg-ods-warning-active disabled:bg-ods-disabled aria-disabled:bg-ods-disabled\",\n  // A self-contained glyph (play badge, unmute glyph) that already carries its\n  // own scrim: no button surface at all, in any state. Distinct from\n  // `transparent`, whose hover/active fills would paint a rectangle behind the\n  // glyph — which is why call sites were undoing them with\n  // `hover:bg-transparent active:bg-transparent`.\n  glyph:\n    \"bg-transparent text-ods-text-primary hover:bg-transparent active:bg-transparent disabled:bg-transparent disabled:text-ods-text-disabled aria-disabled:bg-transparent aria-disabled:text-ods-text-disabled\",\n  // Chrome that sits ON media (video cards, image lightboxes): a scrim disc so\n  // the glyph stays legible over an arbitrary frame. Promoted to a variant\n  // because the walkthrough card, its theater and the bite cards were each\n  // stacking the same classes at the call site.\n  overlay:\n    \"rounded-full bg-ods-overlay text-ods-text-primary backdrop-blur-sm hover:text-ods-accent active:text-ods-accent-active disabled:text-ods-text-disabled aria-disabled:text-ods-text-disabled\",\n} as const\n\nexport const outlineBorderClasses =\n  \"border border-ods-border hover:border-ods-border-hover active:border-ods-border-active disabled:border-ods-border aria-disabled:border-ods-border\"\n\n// Glyph scale for the split-layout button family: 16px below md, 24px from md.\n//\n// Shared because the same page-header action renders through EITHER of the two\n// split layouts depending on its shape — `SplitButton` for two click targets, and\n// `Button` + `splitIcon` for one with a decorative trailing glyph — and the two sit\n// side by side in the same row. They used to disagree: `SplitButton` carried this\n// responsive scale while the `Button` split slots re-declared a flat 20px, so a\n// \"submenu\" action's icons rendered 4px smaller than its neighbour's on desktop.\n// `Button`'s own flat `[&_svg]:h-5` stays as it is for ordinary (non-split) buttons.\nexport const splitGlyphSizeClasses = \"[&_svg]:h-4 [&_svg]:w-4 md:[&_svg]:h-6 md:[&_svg]:w-6\"\n\n// Color of the vertical seam between the main and icon halves (split layouts).\nexport const splitDividerColorClasses = {\n  accent: \"border-ods-accent-active\",\n  outline: \"border-ods-border\",\n  transparent: \"border-ods-border\",\n  destructive: \"border-ods-error-active\",\n  warning: \"border-ods-warning-active\",\n} as const\n\nexport type ButtonSurfaceVariant = keyof typeof buttonSurfaceClasses\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport Link from '../../../embed-shims/next-link';\n\nimport { cn } from '../../../utils/cn';\nimport {\n  buttonSurfaceClasses,\n  outlineBorderClasses,\n  splitDividerColorClasses,\n  splitGlyphSizeClasses,\n} from './button-styles';\n\n// Default layout: centered single content area, padding/gap on the button itself.\nconst buttonVariants = cva(\n  [\n    'relative inline-flex items-center justify-center gap-[var(--spacing-system-xsf)]',\n    'rounded-md whitespace-nowrap',\n    'transition-colors duration-200',\n    'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus',\n    'disabled:pointer-events-none',\n    '[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:h-5 [&_svg]:w-5',\n  ],\n  {\n    variants: {\n      variant: {\n        accent: buttonSurfaceClasses.accent,\n        outline: cn(buttonSurfaceClasses.outline, outlineBorderClasses),\n        transparent: buttonSurfaceClasses.transparent,\n        destructive: buttonSurfaceClasses.destructive,\n        warning: buttonSurfaceClasses.warning,\n        glyph: buttonSurfaceClasses.glyph,\n        overlay: buttonSurfaceClasses.overlay,\n      },\n      size: {\n        default: 'py-[var(--spacing-system-sf)] px-[var(--spacing-system-m)] text-h3 md:h-12 h-11',\n        small: 'p-[var(--spacing-system-xs)] text-h5 h-6 md:h-8',\n        'small-legacy': 'py-[var(--spacing-system-xs)] px-[var(--spacing-system-m)] h-10 text-[14px] font-bold', // Temporary alias for \"small\" — deprecated; grep size=\"small-legacy\" (lib + hub) and migrate the remaining consumers before removal\n        // 24px pill for slim strips (announcement/promo bars, inline banner\n        // actions — Primer banner / Polaris banner / Vercel-bar convention).\n        // The label matches the strip's MESSAGE type ramp exactly (DM Sans\n        // regular, 13px -> md:14px, snug leading — the announcement bar's\n        // subtitle styling): in-strip CTAs must never read louder than the\n        // message beside them, so this deliberately uses neither the\n        // mono-uppercase control style of \"small\" nor a heavier weight.\n        // Pinned h-6 across breakpoints (24px = the WCAG 2.5.8 target-size\n        // floor) with horizontal-dominant padding and a 14px glyph.\n        compact: 'py-0 px-[var(--spacing-system-sf)] text-h6 font-normal h-6 [&_svg]:h-3.5 [&_svg]:w-3.5',\n        icon: 'p-[var(--spacing-system-sf)] h-11 w-11 md:h-12 md:w-12 [&_svg]:h-4 [&_svg]:w-4 md:[&_svg]:h-6 md:[&_svg]:w-6',\n        // Quiet 32px icon target with a 16px glyph, fixed across breakpoints\n        // (Carbon ghost sm / Primer medium / shadcn icon-sm all pin 32px;\n        // ≥ the 24px WCAG 2.5.8 target floor). For icon actions that read as\n        // metadata rather than CTAs — author-page social rows, share rows.\n        // Pair with variant=\"transparent\" for the ghost treatment.\n        'icon-sm': 'p-[var(--spacing-system-xxs)] h-8 w-8 [&_svg]:h-4 [&_svg]:w-4',\n        // 20px inline glyph for affordances that sit INSIDE a line of text —\n        // an info hint beside a badge, a copy glyph after an id. `icon-sm`'s\n        // 32px target is correct for a metadata row but visually swamps a\n        // 10px badge or a 14px label, so hosts were reaching for className\n        // overrides to shrink it. Below the WCAG 2.5.8 target floor on purpose:\n        // this is only for glyphs whose information is ALSO available another\n        // way (tooltip content mirrored into an aria-describedby node), never\n        // for a sole means of performing an action.\n        'icon-inline': 'p-0 h-5 w-5 min-h-0 min-w-0 shrink-0 [&_svg]:h-3.5 [&_svg]:w-3.5',\n        // Bare 56px media glyph (play / unmute over video). A size variant so\n        // hosts stop re-implementing a <button> to escape the 20px svg cap.\n        'icon-glyph': 'p-0 h-14 w-14 [&_svg]:h-14 [&_svg]:w-14',\n      },\n      // Label typography axis (Figma 133-740). `bold` is the classic h3-bold\n      // label; `regular` swaps the DEFAULT size's label to the h4 step\n      // (DM Sans 500, neutral tracking) — added for navigation buttons.\n      // `small` keeps its mono-uppercase h5 label on both fonts per the spec.\n      font: {\n        bold: '',\n        regular: '',\n      },\n      fullWidth: {\n        true: 'w-full',\n        false: '',\n      },\n      noPaddingX: {\n        true: 'px-0',\n        false: '',\n      },\n    },\n    compoundVariants: [\n      { size: 'small', class: '[&_svg]:h-4 [&_svg]:w-4' },\n      // Comes after the size classes, so cn()'s tailwind-merge resolves the\n      // ods-typography group in favour of text-h4.\n      { size: 'default', font: 'regular', class: 'text-h4' },\n    ],\n    defaultVariants: {\n      variant: 'accent',\n      size: 'default',\n      font: 'bold',\n      fullWidth: false,\n      noPaddingX: false,\n    },\n  },\n);\n\n// Split layout (used when `splitIcon` is provided): outer button has no padding;\n// inner slots own padding/gap so the divider can span full button height.\nconst splitShellVariants = cva(\n  [\n    'group relative inline-flex items-stretch overflow-hidden rounded-md whitespace-nowrap',\n    'transition-colors duration-200',\n    'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus',\n    'disabled:pointer-events-none',\n  ],\n  {\n    variants: {\n      variant: {\n        accent: buttonSurfaceClasses.accent,\n        outline: cn(buttonSurfaceClasses.outline, outlineBorderClasses),\n        transparent: buttonSurfaceClasses.transparent,\n        destructive: buttonSurfaceClasses.destructive,\n        warning: buttonSurfaceClasses.warning,\n      },\n      size: {\n        default: 'h-12',\n        small: 'h-6 md:h-8 text-h5',\n      },\n      // Same label-typography axis as the normal layout — `regular` swaps the\n      // default size's h3-bold label for the h4 (DM Sans 500) step.\n      font: { bold: '', regular: '' },\n      fullWidth: { true: 'w-full', false: '' },\n    },\n    compoundVariants: [\n      { size: 'default', font: 'bold', class: 'text-h3' },\n      { size: 'default', font: 'regular', class: 'text-h4' },\n    ],\n    defaultVariants: { variant: 'accent', size: 'default', font: 'bold', fullWidth: false },\n  },\n);\n\nconst splitSlotVariants = cva(\n  // Glyph size lives per-size, not in the base: cva concatenates base + variant\n  // without tailwind-merge, so a base `[&_svg]:h-5` and a variant `[&_svg]:h-4`\n  // would both ship and the winner would come down to stylesheet order.\n  ['inline-flex items-center justify-center', '[&_svg]:shrink-0'],\n  {\n    variants: {\n      slot: {\n        main: 'gap-[var(--spacing-system-xsf)]',\n        icon: 'border-l',\n      },\n      size: { default: splitGlyphSizeClasses, small: '[&_svg]:h-4 [&_svg]:w-4' },\n      variant: { accent: '', outline: '', transparent: '', destructive: '', warning: '' },\n    },\n    compoundVariants: [\n      { slot: 'main', size: 'default', class: 'px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)]' },\n      { slot: 'main', size: 'small', class: 'px-[var(--spacing-system-xs)]' },\n      { slot: 'icon', size: 'default', class: 'w-10' },\n      { slot: 'icon', size: 'small', class: 'w-6 md:w-8' },\n      {\n        slot: 'icon',\n        variant: 'accent',\n        class: cn(\n          splitDividerColorClasses.accent,\n          'group-disabled:border-ods-disabled group-aria-disabled:border-ods-disabled',\n        ),\n      },\n      { slot: 'icon', variant: 'outline', class: splitDividerColorClasses.outline },\n      { slot: 'icon', variant: 'transparent', class: splitDividerColorClasses.transparent },\n      {\n        slot: 'icon',\n        variant: 'destructive',\n        class: cn(\n          splitDividerColorClasses.destructive,\n          'group-disabled:border-ods-disabled group-aria-disabled:border-ods-disabled',\n        ),\n      },\n      {\n        slot: 'icon',\n        variant: 'warning',\n        class: cn(\n          splitDividerColorClasses.warning,\n          'group-disabled:border-ods-disabled group-aria-disabled:border-ods-disabled',\n        ),\n      },\n    ],\n    defaultVariants: { slot: 'main', size: 'default', variant: 'accent' },\n  },\n);\n\n/** @deprecated Use `size=\"small\"` instead. Temporary alias kept for backward compatibility; will be removed in the future. */\ntype DeprecatedButtonSize = 'small-legacy';\n\ntype ButtonSize =\n  | Exclude<VariantProps<typeof buttonVariants>['size'], 'small-legacy' | null | undefined>\n  | DeprecatedButtonSize;\n\ninterface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    Omit<VariantProps<typeof buttonVariants>, 'size'> {\n  asChild?: boolean;\n  href?: string;\n  openInNewTab?: boolean;\n  prefetch?: boolean;\n  /**\n   * Pre-resolved anchor bundle (from `useNavLink({ href, targetPlatform })`).\n   * When set, renders the Button as `<Link>` with `href` / `target` / `rel`\n   * / `onClick` spread from this object. Lets callers thread the unified\n   * nav decision directly without `<Button asChild><a {...linkProps}/>`\n   * gymnastics. Wins over the separate `href` / `openInNewTab` props.\n   */\n  linkProps?: {\n    href: string;\n    target?: '_blank';\n    rel?: 'noopener noreferrer';\n    onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n  } | null;\n  leftIcon?: React.ReactNode;\n  rightIcon?: React.ReactNode;\n  /**\n   * Renders a vertical divider and trailing icon area inside the button.\n   * The whole button stays a single click target — the icon is decorative\n   * (`aria-hidden`). For two independent click targets, use `<SplitButton>`.\n   * Only honored when `size` is `\"default\"` or `\"small\"`.\n   */\n  splitIcon?: React.ReactNode;\n  loading?: boolean;\n  size?: ButtonSize;\n}\n\nconst Spinner = () => (\n  <svg className=\"animate-spin\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n    <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n    <path\n      className=\"opacity-75\"\n      fill=\"currentColor\"\n      d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n    />\n  </svg>\n);\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n  {\n    className,\n    variant,\n    size,\n    font,\n    fullWidth,\n    noPaddingX,\n    asChild,\n    href,\n    openInNewTab,\n    prefetch,\n    linkProps,\n    leftIcon,\n    rightIcon,\n    splitIcon,\n    loading,\n    children,\n    disabled,\n    onClick,\n    ...props\n  },\n  ref,\n) {\n  const isDisabled = disabled || loading;\n\n  // splitIcon is only supported for default/small sizes. With other sizes\n  // (icon, small-legacy) we silently fall back to the normal layout.\n  const useSplitLayout = !!splitIcon && (size === 'default' || size === 'small' || size === undefined);\n\n  if (useSplitLayout) {\n    const safeSize = (size ?? 'default') as 'default' | 'small';\n    const safeVariant = (variant ?? 'accent') as 'accent' | 'outline' | 'transparent' | 'destructive' | 'warning';\n    const shellClasses = cn(splitShellVariants({ variant: safeVariant, size: safeSize, font, fullWidth }), className);\n    const mainSlotClass = splitSlotVariants({ slot: 'main', size: safeSize, variant: safeVariant });\n    const iconSlotClass = splitSlotVariants({ slot: 'icon', size: safeSize, variant: safeVariant });\n\n    const splitContent = (\n      <>\n        <span className={cn('contents', loading && 'invisible')}>\n          <span className={mainSlotClass}>\n            {leftIcon && <span className=\"inline-flex items-center\">{leftIcon}</span>}\n            {children}\n            {rightIcon && <span className=\"inline-flex items-center\">{rightIcon}</span>}\n          </span>\n          <span aria-hidden=\"true\" className={iconSlotClass}>\n            {splitIcon}\n          </span>\n        </span>\n        {loading && (\n          <span className=\"absolute inset-0 inline-flex items-center justify-center text-ods-text-primary\">\n            <Spinner />\n          </span>\n        )}\n      </>\n    );\n\n    // `linkProps` (the pre-resolved bundle from `useNavLink({ href, targetPlatform })`)\n    // wins over the legacy `href` + `openInNewTab` props so callers can thread\n    // the unified nav decision directly. Either path produces the same `<Link>`.\n    const splitAnchor =\n      linkProps ??\n      (href\n        ? {\n            href,\n            target: openInNewTab ? ('_blank' as const) : undefined,\n            rel: openInNewTab ? ('noopener noreferrer' as const) : undefined,\n            onClick: onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined,\n          }\n        : null);\n    if (splitAnchor) {\n      return (\n        <Link\n          href={splitAnchor.href}\n          prefetch={prefetch}\n          target={splitAnchor.target}\n          rel={splitAnchor.rel}\n          // The Link branches don't spread {...props} (button attrs don't\n          // belong on an anchor), but the accessible name MUST survive —\n          // icon-only link buttons have no text content.\n          aria-label={props['aria-label']}\n          aria-disabled={isDisabled || undefined}\n          tabIndex={isDisabled ? -1 : undefined}\n          className={cn(shellClasses, isDisabled && 'pointer-events-none')}\n          onClick={splitAnchor.onClick}\n        >\n          {splitContent}\n        </Link>\n      );\n    }\n\n    return (\n      <button ref={ref} className={shellClasses} disabled={isDisabled} onClick={onClick} {...props}>\n        {splitContent}\n      </button>\n    );\n  }\n\n  const classes = cn(buttonVariants({ variant, size, font, fullWidth, noPaddingX }), className);\n\n  // asChild: consumer fully controls the rendered element; we just stamp our classes.\n  if (asChild) {\n    return (\n      <Slot ref={ref} className={classes} {...props}>\n        {children}\n      </Slot>\n    );\n  }\n\n  // Real content stays in layout (preserving width) but goes invisible while loading.\n  // The spinner is absolutely positioned so it never shifts the button's size.\n  const content = (\n    <>\n      <span className={cn('contents', loading && 'invisible')}>\n        {leftIcon && <span className=\"inline-flex items-center\">{leftIcon}</span>}\n        {children}\n        {rightIcon && <span className=\"inline-flex items-center\">{rightIcon}</span>}\n      </span>\n      {loading && (\n        <span className=\"absolute inset-0 inline-flex items-center justify-center text-ods-text-primary\">\n          <Spinner />\n        </span>\n      )}\n    </>\n  );\n\n  // Same `linkProps`-wins-over-href resolution as the splitIcon branch.\n  const anchor =\n    linkProps ??\n    (href\n      ? {\n          href,\n          target: openInNewTab ? ('_blank' as const) : undefined,\n          rel: openInNewTab ? ('noopener noreferrer' as const) : undefined,\n          onClick: onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined,\n        }\n      : null);\n  if (anchor) {\n    return (\n      <Link\n        href={anchor.href}\n        prefetch={prefetch}\n        target={anchor.target}\n        rel={anchor.rel}\n        // See the splitAnchor branch — keep the accessible name on the\n        // anchor render (icon-only link buttons have no text content).\n        aria-label={props['aria-label']}\n        aria-disabled={isDisabled || undefined}\n        tabIndex={isDisabled ? -1 : undefined}\n        className={cn(classes, isDisabled && 'pointer-events-none')}\n        onClick={anchor.onClick}\n      >\n        {content}\n      </Link>\n    );\n  }\n\n  return (\n    <button ref={ref} className={classes} disabled={isDisabled} onClick={onClick} {...props}>\n      {content}\n    </button>\n  );\n});\n\nexport { Button, buttonVariants, type ButtonProps };\n","\"use client\"\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport Link from \"../../../embed-shims/next-link\"\nimport React from \"react\"\n\nimport { cn } from \"../../../utils/cn\"\nimport { buttonSurfaceClasses, splitDividerColorClasses, splitGlyphSizeClasses } from \"./button-styles\"\n\n// Two independent interactive halves: each a `<button>` or `<a>`. The seam is\n// a 1px border on the left edge of the icon half, colored per variant. For a\n// single-target variant (decorative trailing icon), use `<Button splitIcon>`.\n\nconst splitHalfBase = [\n  \"relative inline-flex items-center justify-center gap-[var(--spacing-system-xsf)]\",\n  \"whitespace-nowrap transition-colors duration-200\",\n  \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus focus-visible:z-10\",\n  \"disabled:pointer-events-none\",\n  \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n]\n\nconst splitHalfVariants = cva(splitHalfBase, {\n  variants: {\n    variant: {\n      accent: buttonSurfaceClasses.accent,\n      outline: buttonSurfaceClasses.outline, // Outline border lives in compoundVariants so we can omit the seam edge.\n      transparent: buttonSurfaceClasses.transparent,\n      destructive: buttonSurfaceClasses.destructive,\n      warning: buttonSurfaceClasses.warning,\n    },\n    size: {\n      default: `h-10 md:h-12 px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)] text-h3 ${splitGlyphSizeClasses}`,\n      small: \"h-6 md:h-8 px-[var(--spacing-system-xs)] text-h5 [&_svg]:h-3 [&_svg]:w-3 md:[&_svg]:h-4 md:[&_svg]:w-4\",\n    },\n    side: { main: \"\", icon: \"\" },\n    soloOnMobile: { true: \"\", false: \"\" },\n  },\n  compoundVariants: [\n    // Rounded corners + per-variant seam. The icon-side's left border is the divider.\n    { variant: \"accent\", side: \"main\", class: \"rounded-l-md\" },\n    { variant: \"accent\", side: \"icon\", class: cn(\n      \"rounded-r-md border-l\",\n      splitDividerColorClasses.accent,\n      \"disabled:border-ods-disabled aria-disabled:border-ods-disabled\",\n    ) },\n    { variant: \"destructive\", side: \"main\", class: \"rounded-l-md\" },\n    { variant: \"destructive\", side: \"icon\", class: cn(\n      \"rounded-r-md border-l\",\n      splitDividerColorClasses.destructive,\n      \"disabled:border-ods-disabled aria-disabled:border-ods-disabled\",\n    ) },\n    { variant: \"warning\", side: \"main\", class: \"rounded-l-md\" },\n    { variant: \"warning\", side: \"icon\", class: cn(\n      \"rounded-r-md border-l\",\n      splitDividerColorClasses.warning,\n      \"disabled:border-ods-disabled aria-disabled:border-ods-disabled\",\n    ) },\n    { variant: \"outline\", side: \"main\", class: \"rounded-l-md border-y border-l border-ods-border\" },\n    { variant: \"outline\", side: \"icon\", class: \"rounded-r-md border border-ods-border\" },\n    { variant: \"transparent\", side: \"main\", class: \"rounded-md\" },\n    { variant: \"transparent\", side: \"icon\", class: cn(\"rounded-md\", splitDividerColorClasses.transparent) },\n\n    // Icon half: per Figma, narrower than main height (default: 40×48; small: 32×32).\n    { side: \"icon\", size: \"default\", class: \"w-10 px-0\" },\n    { side: \"icon\", size: \"small\", class: \"w-6 md:w-8 px-0\" },\n\n    { side: \"icon\", soloOnMobile: true, class: \"max-md:hidden\" },\n    { side: \"main\", soloOnMobile: true, class: \"max-md:rounded-r-md\" },\n    { variant: \"outline\", side: \"main\", soloOnMobile: true, class: \"max-md:border-r\" },\n  ],\n  defaultVariants: { variant: \"accent\", size: \"default\", side: \"main\", soloOnMobile: false },\n})\n\ntype SplitButtonVariant = NonNullable<VariantProps<typeof splitHalfVariants>[\"variant\"]>\ntype SplitButtonSize = NonNullable<VariantProps<typeof splitHalfVariants>[\"size\"]>\n\ninterface SplitButtonIconAction {\n  icon: React.ReactNode\n  /** The icon half is interactive but has no visible text — needs an accessible name. */\n  \"aria-label\": string\n  onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>\n  href?: string\n  /**\n   * Opens `href` with `target=\"_blank\"`. Also marks the half as a new-tab\n   * affordance, which hides it below `md` (set it for `onClick` handlers that\n   * open a new tab/window themselves).\n   */\n  openInNewTab?: boolean\n  prefetch?: boolean\n  disabled?: boolean\n}\n\ninterface SplitButtonProps {\n  variant?: SplitButtonVariant\n  size?: SplitButtonSize\n  fullWidth?: boolean\n  className?: string\n\n  children: React.ReactNode\n  onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>\n  href?: string\n  openInNewTab?: boolean\n  prefetch?: boolean\n  leftIcon?: React.ReactNode\n  rightIcon?: React.ReactNode\n  /** Disables both halves. Equivalent to `mainDisabled && iconAction.disabled`. */\n  disabled?: boolean\n  /** Disables only the main half. Combine with `iconAction.disabled` for finer control. */\n  mainDisabled?: boolean\n  type?: \"button\" | \"submit\" | \"reset\"\n  \"aria-label\"?: string\n  groupAriaLabel?: string\n\n  iconAction: SplitButtonIconAction\n}\n\ninterface HalfOptions {\n  variant: SplitButtonVariant\n  size: SplitButtonSize\n  side: \"main\" | \"icon\"\n  soloOnMobile?: boolean\n  href?: string\n  openInNewTab?: boolean\n  prefetch?: boolean\n  onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>\n  disabled?: boolean\n  /** Stretch this half to fill the group's free space (the icon half stays fixed-width). */\n  grow?: boolean\n  type?: \"button\" | \"submit\" | \"reset\"\n  ariaLabel?: string\n  children: React.ReactNode\n}\n\nfunction Half({ variant, size, side, soloOnMobile, href, openInNewTab, prefetch, onClick, disabled, grow, type = \"button\", ariaLabel, children }: HalfOptions) {\n  const classes = cn(splitHalfVariants({ variant, size, side, soloOnMobile }), grow && \"flex-1\")\n\n  if (href) {\n    return (\n      <Link\n        href={href}\n        prefetch={prefetch}\n        target={openInNewTab ? \"_blank\" : undefined}\n        rel={openInNewTab ? \"noopener noreferrer\" : undefined}\n        aria-disabled={disabled || undefined}\n        tabIndex={disabled ? -1 : undefined}\n        aria-label={ariaLabel}\n        className={cn(classes, disabled && \"pointer-events-none\")}\n        onClick={onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined}\n      >\n        {children}\n      </Link>\n    )\n  }\n\n  return (\n    <button\n      type={type}\n      className={classes}\n      disabled={disabled}\n      aria-label={ariaLabel}\n      onClick={onClick as React.MouseEventHandler<HTMLButtonElement>}\n    >\n      {children}\n    </button>\n  )\n}\n\nconst SplitButton = React.forwardRef<HTMLDivElement, SplitButtonProps>(function SplitButton(\n  {\n    variant = \"accent\",\n    size = \"default\",\n    fullWidth = false,\n    className,\n    children,\n    onClick,\n    href,\n    openInNewTab,\n    prefetch,\n    leftIcon,\n    rightIcon,\n    disabled,\n    mainDisabled,\n    type,\n    iconAction,\n    \"aria-label\": ariaLabel,\n    groupAriaLabel,\n  },\n  ref,\n) {\n  const soloOnMobile = !!iconAction.openInNewTab\n\n  return (\n    <div\n      ref={ref}\n      role=\"group\"\n      aria-label={groupAriaLabel}\n      className={cn(\"inline-flex items-stretch\", fullWidth && \"w-full\", className)}\n    >\n      <Half\n        variant={variant}\n        size={size}\n        side=\"main\"\n        soloOnMobile={soloOnMobile}\n        href={href}\n        openInNewTab={openInNewTab}\n        prefetch={prefetch}\n        onClick={onClick}\n        disabled={disabled || mainDisabled}\n        grow={fullWidth}\n        type={type}\n        ariaLabel={ariaLabel}\n      >\n        {leftIcon && <span className=\"inline-flex items-center\">{leftIcon}</span>}\n        <span>{children}</span>\n        {rightIcon && <span className=\"inline-flex items-center\">{rightIcon}</span>}\n      </Half>\n      <Half\n        variant={variant}\n        size={size}\n        side=\"icon\"\n        soloOnMobile={soloOnMobile}\n        href={iconAction.href}\n        openInNewTab={iconAction.openInNewTab}\n        prefetch={iconAction.prefetch}\n        onClick={iconAction.onClick}\n        disabled={disabled || iconAction.disabled}\n        ariaLabel={iconAction[\"aria-label\"]}\n      >\n        <span className=\"inline-flex items-center\">{iconAction.icon}</span>\n      </Half>\n    </div>\n  )\n})\n\nexport { SplitButton, type SplitButtonProps, type SplitButtonIconAction }\n","export * from './button'\nexport * from './split-button'\n"]}