{"version":3,"file":"index.mjs","names":["borderVariants","usePoupeIcons","usePoupeIcons","borderVariants","$slots","$props"],"sources":["../src/components/icon.vue","../src/components/icon.vue","../src/components/variants/consts.ts","../src/components/variants/on-slot.ts","../src/components/variants/index.ts","../src/components/surface.vue","../src/components/surface.vue","../src/components/button.vue","../src/components/button.vue","../src/utils/utils.ts","../src/components/card.vue","../src/components/card.vue","../src/composables/use-icons.ts","../src/composables/use-password.ts","../src/components/input/types.ts","../src/components/input/wrapper.vue","../src/components/input/wrapper.vue","../src/components/placeholder.vue","../src/components/placeholder.vue"],"sourcesContent":["<script lang=\"ts\">\nimport {\n  type IconifyIconProps,\n} from '@iconify/vue';\n\nexport interface IconProps extends Omit<IconifyIconProps, 'icon'> {\n  icon?: IconifyIconProps['icon']\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Icon as IconifyIcon } from '@iconify/vue';\nimport { computed } from 'vue';\nimport { usePoupeIcons } from '../composables/use-icons';\n\nconst props = defineProps<IconProps>();\n\nconst { toIcon } = usePoupeIcons();\n\nconst icon = computed<IconifyIconProps['icon']>(() => toIcon(props.icon));\n</script>\n\n<template>\n  <IconifyIcon\n    v-bind=\"props\"\n    :icon=\"icon\"\n  />\n</template>\n","<script lang=\"ts\">\nimport {\n  type IconifyIconProps,\n} from '@iconify/vue';\n\nexport interface IconProps extends Omit<IconifyIconProps, 'icon'> {\n  icon?: IconifyIconProps['icon']\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Icon as IconifyIcon } from '@iconify/vue';\nimport { computed } from 'vue';\nimport { usePoupeIcons } from '../composables/use-icons';\n\nconst props = defineProps<IconProps>();\n\nconst { toIcon } = usePoupeIcons();\n\nconst icon = computed<IconifyIconProps['icon']>(() => toIcon(props.icon));\n</script>\n\n<template>\n  <IconifyIcon\n    v-bind=\"props\"\n    :icon=\"icon\"\n  />\n</template>\n","export const pe: Record<number, string> = {\n    0: 'pe-0',\n    1: 'pe-1',\n    2: 'pe-2',\n    3: 'pe-3',\n    4: 'pe-4',\n  }, ps: Record<number, string> = {\n    0: 'ps-0',\n    1: 'ps-1',\n    2: 'ps-2',\n    3: 'ps-3',\n    4: 'ps-4',\n    5: 'ps-5',\n    6: 'ps-6',\n  }, px: Record<number, string> = {\n    0: 'px-0',\n    1: 'px-1',\n    2: 'px-2',\n    3: 'px-3',\n    4: 'px-4',\n  }, py: Record<number, string> = {\n    0: 'py-0',\n    1: 'py-1',\n    2: 'py-2',\n    3: 'py-3',\n    4: 'py-4',\n  };\n\n/** Mapping of justify content classes for Tailwind CSS grid and flex layouts */\nexport const justifyClasses: Record<string, string> = {\n  start: 'justify-start',\n  between: 'justify-between',\n  around: 'justify-around',\n  evenly: 'justify-evenly',\n};\n\n/** Mapping of grid column classes for Tailwind CSS grid layouts */\nexport const gridColsClasses: Record<number, string> = {\n  1: 'grid-cols-1',\n  2: 'grid-cols-2',\n  3: 'grid-cols-3',\n  4: 'grid-cols-4',\n  5: 'grid-cols-5',\n  6: 'grid-cols-6',\n  7: 'grid-cols-7',\n};\n","import { unsafeKeys } from '@poupe/css';\n\nimport {\n  type ClassValue,\n} from 'tailwind-variants';\n\n/** @returns a variant applied to the specified slot */\nexport const onSlot = <K extends string> (slot: string | string[], classes: Record<K, ClassValue>) => {\n  const slots = Array.isArray(slot) ? slot : [slot];\n\n  type S = typeof slots[number];\n  type V = Record<S, ClassValue>;\n  type T = Record<K, V>;\n\n  const out: Partial<T> = {};\n  for (const name of unsafeKeys(classes)) {\n    const v: V = {};\n    for (const s of slots) {\n      v[s] = classes[name];\n    }\n    out[name] = v;\n  }\n\n  return out as T;\n};\n","export * from './consts';\nexport * from './on-slot';\n\nexport * from './on-variant';\nexport { twMerge } from 'tailwind-merge';\nexport { tv, type VariantProps } from 'tailwind-variants';\n\nexport const borderVariantsBase = 'border-solid border';\n\nexport const borderVariants = {\n  none: 'border-transparent',\n  current: 'border-current',\n  primary: 'border-primary',\n  secondary: 'border-secondary',\n  tertiary: 'border-tertiary',\n  error: 'border-error',\n  outline: 'border-outline',\n};\n\nexport const borderInFocusVariantsBase = 'ring-solid ring-2 ring-transparent';\n\nexport const borderInFocusVariants = {\n  none: '',\n  current: 'focus-within:ring-current',\n  primary: 'focus-within:ring-primary',\n  secondary: 'focus-within:ring-secondary',\n  tertiary: 'focus-within:ring-tertiary',\n  error: 'focus-within:ring-error',\n  outline: 'focus-within:ring-outline',\n};\n\nexport const roundedVariants = {\n  full: 'rounded-full',\n  none: 'rounded-none',\n\n  xs: 'rounded-sm',\n  sm: 'rounded',\n  md: 'rounded-md',\n  lg: 'rounded-lg',\n  xl: 'rounded-xl',\n  ['2xl']: 'rounded-2xl',\n  ['3xl']: 'rounded-3xl',\n};\n\nexport const shapeVariants = {\n  'none': 'shape-none',\n  // Size-only variant is an alias for the squircle of the same size\n  'xs': 'shape-squircle-extra-small',\n  'sm': 'shape-squircle-small',\n  'md': 'shape-squircle-medium',\n  'lg': 'shape-squircle-large',\n  'xl': 'shape-squircle-extra-large',\n  // Rounded means fully rounded (no size customization)\n  'rounded': 'shape-full',\n  'full': 'shape-full', // Alias for rounded\n  // Explicit squircle variants (same as size-only)\n  'squircle-xs': 'shape-squircle-extra-small',\n  'squircle-sm': 'shape-squircle-small',\n  'squircle-md': 'shape-squircle-medium',\n  'squircle-lg': 'shape-squircle-large',\n  'squircle-xl': 'shape-squircle-extra-large',\n  'squircle-full': 'shape-squircle-full',\n};\n\nexport const shadowVariants = {\n  current: 'shadow-shadow shadow',\n  none: 'shadow-none',\n\n  z1: 'shadow-shadow shadow-z1',\n  z2: 'shadow-shadow shadow-z2',\n  z3: 'shadow-shadow shadow-z3',\n  z4: 'shadow-shadow shadow-z4',\n  z5: 'shadow-shadow shadow-z5',\n  inset: 'inset-shadow-shadow inset-shadow',\n};\n\nexport const colorSurfaceVariants = {\n  primary: 'surface-primary',\n  secondary: 'surface-secondary',\n  tertiary: 'surface-tertiary',\n  error: 'surface-error',\n\n  ['primary-fixed']: 'surface-primary-fixed',\n  ['secondary-fixed']: 'surface-secondary-fixed',\n  ['tertiary-fixed']: 'surface-tertiary-fixed',\n\n  ['primary-container']: 'surface-primary-container',\n  ['secondary-container']: 'surface-secondary-container',\n  ['tertiary-container']: 'surface-tertiary-container',\n  ['error-container']: 'surface-error-container',\n\n  inverse: 'surface-inverse',\n  ['inverse-primary']: 'surface-inverse-primary',\n};\n\nexport const surfaceVariants = {\n  ...colorSurfaceVariants,\n\n  dim: 'surface-dim',\n  base: 'surface',\n  bright: 'surface-bright',\n  variant: 'surface-variant',\n};\n\nexport const containerVariants = {\n  ...colorSurfaceVariants,\n\n  lowest: 'surface-container-lowest',\n  low: 'surface-container-low',\n  base: 'surface-container',\n  high: 'surface-container-high',\n  highest: 'surface-container-highest',\n};\n\nexport const colorSurfaceInteractiveVariants = {\n  primary: 'interactive-surface-primary',\n  secondary: 'interactive-surface-secondary',\n  tertiary: 'interactive-surface-tertiary',\n  error: 'interactive-surface-error',\n\n  ['primary-fixed']: 'interactive-surface-primary-fixed',\n  ['secondary-fixed']: 'interactive-surface-secondary-fixed',\n  ['tertiary-fixed']: 'interactive-surface-tertiary-fixed',\n\n  ['primary-container']: 'interactive-surface-primary-container',\n  ['secondary-container']: 'interactive-surface-secondary-container',\n  ['tertiary-container']: 'interactive-surface-tertiary-container',\n  ['error-container']: 'interactive-surface-error-container',\n\n  inverse: 'interactive-surface-inverse',\n  ['inverse-primary']: 'interactive-surface-inverse-primary',\n};\n\nexport const surfaceInteractiveVariants = {\n  ...colorSurfaceInteractiveVariants,\n\n  dim: 'interactive-surface-dim',\n  base: 'interactive-surface',\n  bright: 'interactive-surface-bright',\n  variant: 'interactive-surface-variant',\n};\n\nexport const containerInteractiveVariants = {\n  ...colorSurfaceInteractiveVariants,\n\n  lowest: 'interactive-surface-container-lowest',\n  low: 'interactive-surface-container-low',\n  base: 'interactive-surface-container',\n  high: 'interactive-surface-container-high',\n  highest: 'interactive-surface-container-highest',\n};\n","<script lang=\"ts\">\nimport {\n  tv,\n  twMerge,\n  type VariantProps,\n\n  borderVariants,\n  borderVariantsBase,\n  containerInteractiveVariants,\n  onSlot,\n  shadowVariants,\n  shapeVariants,\n  surfaceInteractiveVariants,\n} from './variants';\n\n// Define defaults in one place\nconst surfaceDefaults = {\n  tag: 'div',\n  class: '',\n  role: 'surface',\n  tone: 'base',\n  level: 'base',\n  shape: 'none',\n  shadow: 'none',\n  border: 'none',\n  interactive: false,\n  padding: 'none',\n} as const;\n\nexport const surface = tv({\n  slots: {\n    wrapper: 'relative',\n  },\n  variants: {\n    role: {\n      surface: {},\n      container: {},\n    },\n    // Surface tones (for role='surface')\n    tone: {\n      dim: { wrapper: 'surface-dim' },\n      base: { wrapper: 'surface' },\n      bright: { wrapper: 'surface-bright' },\n    },\n    // Container levels (for role='container')\n    level: {\n      lowest: { wrapper: 'surface-container-lowest' },\n      low: { wrapper: 'surface-container-low' },\n      base: { wrapper: 'surface-container' },\n      high: { wrapper: 'surface-container-high' },\n      highest: { wrapper: 'surface-container-highest' },\n    },\n    // Semantic color variants\n    variant: {\n      'primary': { wrapper: 'surface-primary' },\n      'secondary': { wrapper: 'surface-secondary' },\n      'tertiary': { wrapper: 'surface-tertiary' },\n      'error': { wrapper: 'surface-error' },\n      'primary-fixed': { wrapper: 'surface-primary-fixed' },\n      'secondary-fixed': { wrapper: 'surface-secondary-fixed' },\n      'tertiary-fixed': { wrapper: 'surface-tertiary-fixed' },\n      'primary-container': { wrapper: 'surface-primary-container' },\n      'secondary-container': { wrapper: 'surface-secondary-container' },\n      'tertiary-container': { wrapper: 'surface-tertiary-container' },\n      'error-container': { wrapper: 'surface-error-container' },\n      'inverse': { wrapper: 'surface-inverse' },\n      'inverse-primary': { wrapper: 'surface-inverse-primary' },\n    },\n    shape: onSlot('wrapper', shapeVariants),\n    shadow: onSlot('wrapper', shadowVariants),\n    border: onSlot('wrapper', borderVariants),\n    interactive: {\n      true: {\n        wrapper: 'cursor-pointer',\n      },\n      false: {},\n    },\n    padding: {\n      none: {},\n      sm: { wrapper: 'p-2' },\n      md: { wrapper: 'p-4' },\n      lg: { wrapper: 'p-6' },\n      xl: { wrapper: 'p-8' },\n    },\n  },\n  defaultVariants: {\n    role: surfaceDefaults.role,\n    tone: surfaceDefaults.tone,\n    level: surfaceDefaults.level,\n    shape: surfaceDefaults.shape,\n    shadow: surfaceDefaults.shadow,\n    border: surfaceDefaults.border,\n    interactive: surfaceDefaults.interactive,\n    padding: surfaceDefaults.padding,\n  },\n  compoundVariants: [\n    {\n      border: ['primary', 'secondary', 'tertiary', 'error', 'outline', 'current'],\n      class: {\n        wrapper: borderVariantsBase,\n      },\n    },\n  ],\n});\n\nexport type SurfaceVariantProps = VariantProps<typeof surface>;\n\n/** Surface component props */\nexport interface SurfaceProps {\n  /** HTML tag to render */\n  tag?: string\n\n  /** Surface role (surface or container) */\n  role?: NonNullable<SurfaceVariantProps['role']>\n\n  /** Surface tone (for role='surface': dim, base, bright) */\n  tone?: NonNullable<SurfaceVariantProps['tone']>\n\n  /** Container level (for role='container': lowest, low, base, high, highest) */\n  level?: NonNullable<SurfaceVariantProps['level']>\n\n  /** Semantic color variant (primary, secondary, tertiary, error, etc.) */\n  variant?: NonNullable<SurfaceVariantProps['variant']>\n\n  /** Shape variant */\n  shape?: NonNullable<SurfaceVariantProps['shape']>\n\n  /** Shadow elevation */\n  shadow?: NonNullable<SurfaceVariantProps['shadow']>\n\n  /** Border style */\n  border?: NonNullable<SurfaceVariantProps['border']>\n\n  /** Enable interactive states */\n  interactive?: NonNullable<SurfaceVariantProps['interactive']>\n\n  /** Padding size */\n  padding?: NonNullable<SurfaceVariantProps['padding']>\n\n  /** Additional CSS classes */\n  class?: string\n}\n\n// Module augmentation for global defaults\ndeclare module '../composables/use-poupe' {\n  interface PoupeComponentDefaults {\n    surface?: Partial<SurfaceProps>\n  }\n}\n</script>\n\n<script setup lang=\"ts\">\n/* global HTMLElement */\nimport { computed, ref } from 'vue';\nimport { usePoupeMergedProps } from '../composables';\n\n// Define props without withDefaults\nconst directProps = defineProps<SurfaceProps>();\n\n// Expose the rendered root DOM element so consumers (e.g. Button)\n// can attach refs/listeners to the real <button>/<div>/... rather\n// than to a layout-invisible wrapper.\nconst rootElement = ref<HTMLElement | undefined>();\ndefineExpose({ rootElement });\n\n// Merge with global defaults and component defaults\n// This provides three-level merging: global defaults < component defaults < props\nconst props = computed(() =>\n  usePoupeMergedProps(directProps, 'surface', surfaceDefaults),\n);\n\nconst variants = computed(() => {\n  const baseVariants = surface({\n    role: props.value.role,\n    tone: props.value.tone,\n    level: props.value.level,\n    variant: props.value.variant,\n    shape: props.value.shape,\n    shadow: props.value.shadow,\n    border: props.value.border,\n    interactive: props.value.interactive,\n    padding: props.value.padding,\n  });\n\n  // If interactive, use the interactive surface variant\n  if (props.value.interactive) {\n    const role = props.value.role as 'container' | 'surface';\n    const interactiveVariants = role === 'container' ?\n      containerInteractiveVariants :\n      surfaceInteractiveVariants;\n\n    // Determine the color key based on role, tone/level, and variant\n    let colorKey: string | undefined;\n    if (props.value.variant) {\n      colorKey = props.value.variant;\n    } else if (role === 'surface' && props.value.tone) {\n      colorKey = props.value.tone;\n    } else if (role === 'container' && props.value.level) {\n      colorKey = props.value.level;\n    }\n\n    if (colorKey && colorKey in interactiveVariants) {\n      return {\n        wrapper: () => twMerge(\n          baseVariants.wrapper(),\n          interactiveVariants[colorKey as keyof typeof interactiveVariants],\n        ),\n      };\n    }\n  }\n\n  return baseVariants;\n});\n\nconst classes = computed(() =>\n  twMerge(variants.value.wrapper(), props.value.class),\n);\n</script>\n\n<template>\n  <component\n    :is=\"props.tag\"\n    ref=\"rootElement\"\n    :class=\"classes\"\n  >\n    <slot />\n  </component>\n</template>\n","<script lang=\"ts\">\nimport {\n  tv,\n  twMerge,\n  type VariantProps,\n\n  borderVariants,\n  borderVariantsBase,\n  containerInteractiveVariants,\n  onSlot,\n  shadowVariants,\n  shapeVariants,\n  surfaceInteractiveVariants,\n} from './variants';\n\n// Define defaults in one place\nconst surfaceDefaults = {\n  tag: 'div',\n  class: '',\n  role: 'surface',\n  tone: 'base',\n  level: 'base',\n  shape: 'none',\n  shadow: 'none',\n  border: 'none',\n  interactive: false,\n  padding: 'none',\n} as const;\n\nexport const surface = tv({\n  slots: {\n    wrapper: 'relative',\n  },\n  variants: {\n    role: {\n      surface: {},\n      container: {},\n    },\n    // Surface tones (for role='surface')\n    tone: {\n      dim: { wrapper: 'surface-dim' },\n      base: { wrapper: 'surface' },\n      bright: { wrapper: 'surface-bright' },\n    },\n    // Container levels (for role='container')\n    level: {\n      lowest: { wrapper: 'surface-container-lowest' },\n      low: { wrapper: 'surface-container-low' },\n      base: { wrapper: 'surface-container' },\n      high: { wrapper: 'surface-container-high' },\n      highest: { wrapper: 'surface-container-highest' },\n    },\n    // Semantic color variants\n    variant: {\n      'primary': { wrapper: 'surface-primary' },\n      'secondary': { wrapper: 'surface-secondary' },\n      'tertiary': { wrapper: 'surface-tertiary' },\n      'error': { wrapper: 'surface-error' },\n      'primary-fixed': { wrapper: 'surface-primary-fixed' },\n      'secondary-fixed': { wrapper: 'surface-secondary-fixed' },\n      'tertiary-fixed': { wrapper: 'surface-tertiary-fixed' },\n      'primary-container': { wrapper: 'surface-primary-container' },\n      'secondary-container': { wrapper: 'surface-secondary-container' },\n      'tertiary-container': { wrapper: 'surface-tertiary-container' },\n      'error-container': { wrapper: 'surface-error-container' },\n      'inverse': { wrapper: 'surface-inverse' },\n      'inverse-primary': { wrapper: 'surface-inverse-primary' },\n    },\n    shape: onSlot('wrapper', shapeVariants),\n    shadow: onSlot('wrapper', shadowVariants),\n    border: onSlot('wrapper', borderVariants),\n    interactive: {\n      true: {\n        wrapper: 'cursor-pointer',\n      },\n      false: {},\n    },\n    padding: {\n      none: {},\n      sm: { wrapper: 'p-2' },\n      md: { wrapper: 'p-4' },\n      lg: { wrapper: 'p-6' },\n      xl: { wrapper: 'p-8' },\n    },\n  },\n  defaultVariants: {\n    role: surfaceDefaults.role,\n    tone: surfaceDefaults.tone,\n    level: surfaceDefaults.level,\n    shape: surfaceDefaults.shape,\n    shadow: surfaceDefaults.shadow,\n    border: surfaceDefaults.border,\n    interactive: surfaceDefaults.interactive,\n    padding: surfaceDefaults.padding,\n  },\n  compoundVariants: [\n    {\n      border: ['primary', 'secondary', 'tertiary', 'error', 'outline', 'current'],\n      class: {\n        wrapper: borderVariantsBase,\n      },\n    },\n  ],\n});\n\nexport type SurfaceVariantProps = VariantProps<typeof surface>;\n\n/** Surface component props */\nexport interface SurfaceProps {\n  /** HTML tag to render */\n  tag?: string\n\n  /** Surface role (surface or container) */\n  role?: NonNullable<SurfaceVariantProps['role']>\n\n  /** Surface tone (for role='surface': dim, base, bright) */\n  tone?: NonNullable<SurfaceVariantProps['tone']>\n\n  /** Container level (for role='container': lowest, low, base, high, highest) */\n  level?: NonNullable<SurfaceVariantProps['level']>\n\n  /** Semantic color variant (primary, secondary, tertiary, error, etc.) */\n  variant?: NonNullable<SurfaceVariantProps['variant']>\n\n  /** Shape variant */\n  shape?: NonNullable<SurfaceVariantProps['shape']>\n\n  /** Shadow elevation */\n  shadow?: NonNullable<SurfaceVariantProps['shadow']>\n\n  /** Border style */\n  border?: NonNullable<SurfaceVariantProps['border']>\n\n  /** Enable interactive states */\n  interactive?: NonNullable<SurfaceVariantProps['interactive']>\n\n  /** Padding size */\n  padding?: NonNullable<SurfaceVariantProps['padding']>\n\n  /** Additional CSS classes */\n  class?: string\n}\n\n// Module augmentation for global defaults\ndeclare module '../composables/use-poupe' {\n  interface PoupeComponentDefaults {\n    surface?: Partial<SurfaceProps>\n  }\n}\n</script>\n\n<script setup lang=\"ts\">\n/* global HTMLElement */\nimport { computed, ref } from 'vue';\nimport { usePoupeMergedProps } from '../composables';\n\n// Define props without withDefaults\nconst directProps = defineProps<SurfaceProps>();\n\n// Expose the rendered root DOM element so consumers (e.g. Button)\n// can attach refs/listeners to the real <button>/<div>/... rather\n// than to a layout-invisible wrapper.\nconst rootElement = ref<HTMLElement | undefined>();\ndefineExpose({ rootElement });\n\n// Merge with global defaults and component defaults\n// This provides three-level merging: global defaults < component defaults < props\nconst props = computed(() =>\n  usePoupeMergedProps(directProps, 'surface', surfaceDefaults),\n);\n\nconst variants = computed(() => {\n  const baseVariants = surface({\n    role: props.value.role,\n    tone: props.value.tone,\n    level: props.value.level,\n    variant: props.value.variant,\n    shape: props.value.shape,\n    shadow: props.value.shadow,\n    border: props.value.border,\n    interactive: props.value.interactive,\n    padding: props.value.padding,\n  });\n\n  // If interactive, use the interactive surface variant\n  if (props.value.interactive) {\n    const role = props.value.role as 'container' | 'surface';\n    const interactiveVariants = role === 'container' ?\n      containerInteractiveVariants :\n      surfaceInteractiveVariants;\n\n    // Determine the color key based on role, tone/level, and variant\n    let colorKey: string | undefined;\n    if (props.value.variant) {\n      colorKey = props.value.variant;\n    } else if (role === 'surface' && props.value.tone) {\n      colorKey = props.value.tone;\n    } else if (role === 'container' && props.value.level) {\n      colorKey = props.value.level;\n    }\n\n    if (colorKey && colorKey in interactiveVariants) {\n      return {\n        wrapper: () => twMerge(\n          baseVariants.wrapper(),\n          interactiveVariants[colorKey as keyof typeof interactiveVariants],\n        ),\n      };\n    }\n  }\n\n  return baseVariants;\n});\n\nconst classes = computed(() =>\n  twMerge(variants.value.wrapper(), props.value.class),\n);\n</script>\n\n<template>\n  <component\n    :is=\"props.tag\"\n    ref=\"rootElement\"\n    :class=\"classes\"\n  >\n    <slot />\n  </component>\n</template>\n","<script lang=\"ts\">\nimport type { SurfaceProps } from './surface.vue';\n\n/** Material Design 3 button types */\nexport type ButtonType = 'elevated' | 'filled' | 'outlined' | 'text' | 'tonal';\n\n/** Button color variants */\nexport type ButtonVariant = 'base' | 'error' | 'primary' | 'secondary' | 'tertiary';\n\n/** Button size scale */\nexport type ButtonSize = 'base' | 'lg' | 'sm' | 'xl' | 'xs';\n\n/** Button component props */\nexport interface ButtonProps extends Omit<SurfaceProps, 'level' | 'padding' | 'role' | 'tone' | 'variant'> {\n  /** Button label text */\n  label?: string\n\n  /** Material Design 3 button type */\n  type?: ButtonType\n\n  /** Button size */\n  size?: ButtonSize\n\n  /** Semantic color variant for the button */\n  variant?: ButtonVariant\n\n  /** Loading state */\n  loading?: boolean\n\n  /** Disabled state */\n  disabled?: boolean\n\n  /** Full width button */\n  expand?: boolean\n\n  /** Add ellipsis to label */\n  ellipsis?: boolean\n\n  /** Floating Action Button mode */\n  fab?: boolean\n\n  /** Extended FAB (only with fab=true) */\n  extended?: boolean\n\n  /** Icon button mode */\n  iconButton?: boolean\n\n  /** Toggle button mode */\n  toggle?: boolean\n\n  /** Toggle pressed state */\n  pressed?: boolean\n\n  /** Leading icon */\n  icon?: string\n\n  /** Trailing icon */\n  trailingIcon?: string\n\n  /** Icon start slot content */\n  iconStart?: string\n\n  /** Icon end slot content */\n  iconEnd?: string\n}\n\n/** Button default props */\nexport const buttonDefaults: Partial<ButtonProps> = {\n  type: 'filled',\n  size: 'base',\n  variant: 'primary',\n  shape: 'md',\n  disabled: false,\n  loading: false,\n  expand: false,\n  ellipsis: false,\n  fab: false,\n  extended: false,\n  iconButton: false,\n  toggle: false,\n  pressed: false,\n};\n\n// Augment the PoupeComponentDefaults interface\ndeclare module '../composables/use-poupe' {\n  interface PoupeComponentDefaults {\n    button?: {\n      border?: ButtonProps['border']\n      disabled?: ButtonProps['disabled']\n      ellipsis?: ButtonProps['ellipsis']\n      expand?: ButtonProps['expand']\n      extended?: ButtonProps['extended']\n      fab?: ButtonProps['fab']\n      iconButton?: ButtonProps['iconButton']\n      interactive?: ButtonProps['interactive']\n      loading?: ButtonProps['loading']\n      pressed?: ButtonProps['pressed']\n      shadow?: ButtonProps['shadow']\n      shape?: ButtonProps['shape']\n      size?: ButtonProps['size']\n      toggle?: ButtonProps['toggle']\n      type?: ButtonType\n      variant?: ButtonVariant\n    }\n  }\n}\n</script>\n\n<script setup lang=\"ts\">\n/* global MouseEvent, HTMLButtonElement, HTMLElement */\nimport { computed, onMounted, ref, useTemplateRef } from 'vue';\nimport { usePoupeMergedProps, useRipple } from '../composables';\nimport Icon from './icon.vue';\nimport Surface from './surface.vue';\n\n// Define props without withDefaults\nconst directProps = defineProps<ButtonProps>();\n\nconst emit = defineEmits<{\n  click: [event: MouseEvent]\n}>();\n\n// Merge props with global defaults\nconst props = computed(() =>\n  usePoupeMergedProps(directProps, 'button', buttonDefaults),\n);\n\n// Bind useRipple to the rendered <button> (forwarded by Surface),\n// not to an inner wrapper — listeners + bounding-rect measurements\n// must match what the user actually clicks.\nconst surfaceReference = useTemplateRef<{ rootElement: HTMLElement | undefined }>('surfaceReference');\nconst buttonElement = ref<HTMLButtonElement | undefined>();\nonMounted(() => {\n  buttonElement.value = surfaceReference.value?.rootElement as HTMLButtonElement | undefined;\n});\n\nconst isDisabled = computed(() => props.value.disabled);\nconst { ripples, getRippleStyle } = useRipple(buttonElement, {\n  disabled: isDisabled,\n});\n\n// Compute surface props based on button type\nconst surfaceProps = computed<Partial<SurfaceProps>>(() => {\n  const { type, variant, shape, shadow, border, interactive } = props.value;\n\n  // Base props\n  const baseProps: Partial<SurfaceProps> = {\n    shape,\n    padding: 'none',\n    interactive: interactive ?? true,\n  };\n\n  // FAB-specific defaults\n  if (props.value.fab) {\n    baseProps.shape = props.value.extended ? 'lg' : 'full';\n    baseProps.shadow = shadow ?? 'z3';\n  }\n\n  // Icon button defaults\n  if (props.value.iconButton && !props.value.fab) {\n    baseProps.shape = shape ?? 'full';\n  }\n\n  // Map variant to appropriate border color for outlined type\n  const getOutlineBorder = () => {\n    if (border) return border;\n    switch (variant) {\n      case 'primary':\n      case 'secondary':\n      case 'tertiary':\n      case 'error':\n        return variant;\n      default:\n        return 'outline';\n    }\n  };\n\n  // Apply type-specific props\n  switch (type) {\n    case 'text':\n      return {\n        ...baseProps,\n        role: 'surface',\n        tone: 'base',\n        shadow: shadow ?? 'none',\n        border: border ?? 'none',\n      };\n\n    case 'outlined':\n      return {\n        ...baseProps,\n        role: 'surface',\n        tone: 'base',\n        shadow: shadow ?? 'none',\n        border: getOutlineBorder(),\n      };\n\n    case 'filled':\n      return {\n        ...baseProps,\n        variant: variant === 'base' ? undefined : variant,\n        role: variant === 'base' ? 'surface' : undefined,\n        tone: variant === 'base' ? 'base' : undefined,\n        shadow: shadow ?? 'none',\n        border: border ?? 'none',\n      };\n\n    case 'elevated':\n      return {\n        ...baseProps,\n        role: 'surface',\n        tone: 'base',\n        shadow: shadow ?? 'z1',\n        border: border ?? 'none',\n      };\n\n    case 'tonal': {\n      // For tonal buttons, use container variant colors\n      const tonalVariant = variant === 'base' ?\n        undefined :\n        `${variant}-container` as SurfaceProps['variant'];\n      return {\n        ...baseProps,\n        variant: tonalVariant,\n        role: variant === 'base' ? 'container' : undefined,\n        level: variant === 'base' ? 'base' : undefined,\n        shadow: shadow ?? 'none',\n        border: border ?? 'none',\n      };\n    }\n\n    default:\n      return baseProps;\n  }\n});\n\n// Compute button classes\nconst buttonClasses = computed(() => {\n  const { size, expand, disabled, loading, fab, iconButton } = props.value;\n  const classes: string[] = [\n    'inline-flex items-center justify-center gap-2',\n    'transition-all duration-200',\n    'select-none',\n    'font-medium',\n  ];\n\n  // Size classes\n  const sizeClasses: Record<ButtonSize, string> = {\n    xs: 'text-xs h-8 px-2',\n    sm: 'text-sm h-9 px-3',\n    base: 'text-sm h-10 px-6',\n    lg: 'text-base h-12 px-7',\n    xl: 'text-lg h-14 px-8',\n  };\n\n  // FAB size classes\n  const fabSizeClasses: Record<ButtonSize, string> = {\n    xs: 'h-10 w-10',\n    sm: 'h-12 w-12',\n    base: 'h-14 w-14',\n    lg: 'h-16 w-16',\n    xl: 'h-20 w-20',\n  };\n\n  // Extended FAB size classes\n  const extendedFabSizeClasses: Record<ButtonSize, string> = {\n    xs: 'h-10 px-3',\n    sm: 'h-12 px-4',\n    base: 'h-14 px-5',\n    lg: 'h-16 px-6',\n    xl: 'h-20 px-8',\n  };\n\n  // Icon button size classes\n  const iconButtonSizeClasses: Record<ButtonSize, string> = {\n    xs: 'h-8 w-8',\n    sm: 'h-9 w-9',\n    base: 'h-10 w-10',\n    lg: 'h-12 w-12',\n    xl: 'h-14 w-14',\n  };\n\n  // Apply size classes\n  if (fab && !props.value.extended) {\n    classes.push(fabSizeClasses[size]);\n  } else if (fab && props.value.extended) {\n    classes.push(extendedFabSizeClasses[size]);\n  } else if (iconButton) {\n    classes.push(iconButtonSizeClasses[size]);\n  } else {\n    classes.push(sizeClasses[size]);\n  }\n\n  // State classes\n  if (disabled || loading) {\n    classes.push('opacity-38 cursor-not-allowed');\n  }\n\n  if (expand) {\n    classes.push('w-full');\n  }\n\n  return classes.join(' ');\n});\n\n// Compute label\nconst computedLabel = computed(() => {\n  const label = props.value.label || '';\n  return props.value.ellipsis ? `${label}…` : label;\n});\n\n// Icon size based on button size\nconst iconSize = computed(() => {\n  const sizes: Record<ButtonSize, string> = {\n    xs: 'text-base',\n    sm: 'text-lg',\n    base: 'text-xl',\n    lg: 'text-2xl',\n    xl: 'text-3xl',\n  };\n  return sizes[props.value.size];\n});\n</script>\n\n<template>\n  <Surface\n    ref=\"surfaceReference\"\n    v-bind=\"surfaceProps\"\n    tag=\"button\"\n    :class=\"buttonClasses\"\n    :disabled=\"props.disabled || props.loading\"\n    @click=\"emit('click', $event)\"\n  >\n    <!-- Leading icon -->\n    <Icon\n      v-if=\"props.icon || props.iconStart\"\n      :icon=\"props.icon || props.iconStart\"\n      :class=\"iconSize\"\n    />\n\n    <!-- Label -->\n    <span\n      v-if=\"computedLabel && (!props.iconButton || props.extended)\"\n      class=\"leading-none\"\n    >\n      {{ computedLabel }}\n    </span>\n\n    <!-- Default slot -->\n    <slot v-if=\"!computedLabel && !props.iconButton\" />\n\n    <!-- Trailing icon -->\n    <Icon\n      v-if=\"props.trailingIcon || props.iconEnd\"\n      :icon=\"props.trailingIcon || props.iconEnd\"\n      :class=\"iconSize\"\n    />\n\n    <!-- Loading indicator -->\n    <Icon\n      v-if=\"props.loading\"\n      icon=\"svg-spinners:12-dots-scale-rotate\"\n      :class=\"iconSize\"\n    />\n\n    <!-- Ripple particles -->\n    <span\n      v-for=\"r in ripples\"\n      :key=\"r.id\"\n      aria-hidden=\"true\"\n      :style=\"getRippleStyle(r)\"\n    />\n  </Surface>\n</template>\n","<script lang=\"ts\">\nimport type { SurfaceProps } from './surface.vue';\n\n/** Material Design 3 button types */\nexport type ButtonType = 'elevated' | 'filled' | 'outlined' | 'text' | 'tonal';\n\n/** Button color variants */\nexport type ButtonVariant = 'base' | 'error' | 'primary' | 'secondary' | 'tertiary';\n\n/** Button size scale */\nexport type ButtonSize = 'base' | 'lg' | 'sm' | 'xl' | 'xs';\n\n/** Button component props */\nexport interface ButtonProps extends Omit<SurfaceProps, 'level' | 'padding' | 'role' | 'tone' | 'variant'> {\n  /** Button label text */\n  label?: string\n\n  /** Material Design 3 button type */\n  type?: ButtonType\n\n  /** Button size */\n  size?: ButtonSize\n\n  /** Semantic color variant for the button */\n  variant?: ButtonVariant\n\n  /** Loading state */\n  loading?: boolean\n\n  /** Disabled state */\n  disabled?: boolean\n\n  /** Full width button */\n  expand?: boolean\n\n  /** Add ellipsis to label */\n  ellipsis?: boolean\n\n  /** Floating Action Button mode */\n  fab?: boolean\n\n  /** Extended FAB (only with fab=true) */\n  extended?: boolean\n\n  /** Icon button mode */\n  iconButton?: boolean\n\n  /** Toggle button mode */\n  toggle?: boolean\n\n  /** Toggle pressed state */\n  pressed?: boolean\n\n  /** Leading icon */\n  icon?: string\n\n  /** Trailing icon */\n  trailingIcon?: string\n\n  /** Icon start slot content */\n  iconStart?: string\n\n  /** Icon end slot content */\n  iconEnd?: string\n}\n\n/** Button default props */\nexport const buttonDefaults: Partial<ButtonProps> = {\n  type: 'filled',\n  size: 'base',\n  variant: 'primary',\n  shape: 'md',\n  disabled: false,\n  loading: false,\n  expand: false,\n  ellipsis: false,\n  fab: false,\n  extended: false,\n  iconButton: false,\n  toggle: false,\n  pressed: false,\n};\n\n// Augment the PoupeComponentDefaults interface\ndeclare module '../composables/use-poupe' {\n  interface PoupeComponentDefaults {\n    button?: {\n      border?: ButtonProps['border']\n      disabled?: ButtonProps['disabled']\n      ellipsis?: ButtonProps['ellipsis']\n      expand?: ButtonProps['expand']\n      extended?: ButtonProps['extended']\n      fab?: ButtonProps['fab']\n      iconButton?: ButtonProps['iconButton']\n      interactive?: ButtonProps['interactive']\n      loading?: ButtonProps['loading']\n      pressed?: ButtonProps['pressed']\n      shadow?: ButtonProps['shadow']\n      shape?: ButtonProps['shape']\n      size?: ButtonProps['size']\n      toggle?: ButtonProps['toggle']\n      type?: ButtonType\n      variant?: ButtonVariant\n    }\n  }\n}\n</script>\n\n<script setup lang=\"ts\">\n/* global MouseEvent, HTMLButtonElement, HTMLElement */\nimport { computed, onMounted, ref, useTemplateRef } from 'vue';\nimport { usePoupeMergedProps, useRipple } from '../composables';\nimport Icon from './icon.vue';\nimport Surface from './surface.vue';\n\n// Define props without withDefaults\nconst directProps = defineProps<ButtonProps>();\n\nconst emit = defineEmits<{\n  click: [event: MouseEvent]\n}>();\n\n// Merge props with global defaults\nconst props = computed(() =>\n  usePoupeMergedProps(directProps, 'button', buttonDefaults),\n);\n\n// Bind useRipple to the rendered <button> (forwarded by Surface),\n// not to an inner wrapper — listeners + bounding-rect measurements\n// must match what the user actually clicks.\nconst surfaceReference = useTemplateRef<{ rootElement: HTMLElement | undefined }>('surfaceReference');\nconst buttonElement = ref<HTMLButtonElement | undefined>();\nonMounted(() => {\n  buttonElement.value = surfaceReference.value?.rootElement as HTMLButtonElement | undefined;\n});\n\nconst isDisabled = computed(() => props.value.disabled);\nconst { ripples, getRippleStyle } = useRipple(buttonElement, {\n  disabled: isDisabled,\n});\n\n// Compute surface props based on button type\nconst surfaceProps = computed<Partial<SurfaceProps>>(() => {\n  const { type, variant, shape, shadow, border, interactive } = props.value;\n\n  // Base props\n  const baseProps: Partial<SurfaceProps> = {\n    shape,\n    padding: 'none',\n    interactive: interactive ?? true,\n  };\n\n  // FAB-specific defaults\n  if (props.value.fab) {\n    baseProps.shape = props.value.extended ? 'lg' : 'full';\n    baseProps.shadow = shadow ?? 'z3';\n  }\n\n  // Icon button defaults\n  if (props.value.iconButton && !props.value.fab) {\n    baseProps.shape = shape ?? 'full';\n  }\n\n  // Map variant to appropriate border color for outlined type\n  const getOutlineBorder = () => {\n    if (border) return border;\n    switch (variant) {\n      case 'primary':\n      case 'secondary':\n      case 'tertiary':\n      case 'error':\n        return variant;\n      default:\n        return 'outline';\n    }\n  };\n\n  // Apply type-specific props\n  switch (type) {\n    case 'text':\n      return {\n        ...baseProps,\n        role: 'surface',\n        tone: 'base',\n        shadow: shadow ?? 'none',\n        border: border ?? 'none',\n      };\n\n    case 'outlined':\n      return {\n        ...baseProps,\n        role: 'surface',\n        tone: 'base',\n        shadow: shadow ?? 'none',\n        border: getOutlineBorder(),\n      };\n\n    case 'filled':\n      return {\n        ...baseProps,\n        variant: variant === 'base' ? undefined : variant,\n        role: variant === 'base' ? 'surface' : undefined,\n        tone: variant === 'base' ? 'base' : undefined,\n        shadow: shadow ?? 'none',\n        border: border ?? 'none',\n      };\n\n    case 'elevated':\n      return {\n        ...baseProps,\n        role: 'surface',\n        tone: 'base',\n        shadow: shadow ?? 'z1',\n        border: border ?? 'none',\n      };\n\n    case 'tonal': {\n      // For tonal buttons, use container variant colors\n      const tonalVariant = variant === 'base' ?\n        undefined :\n        `${variant}-container` as SurfaceProps['variant'];\n      return {\n        ...baseProps,\n        variant: tonalVariant,\n        role: variant === 'base' ? 'container' : undefined,\n        level: variant === 'base' ? 'base' : undefined,\n        shadow: shadow ?? 'none',\n        border: border ?? 'none',\n      };\n    }\n\n    default:\n      return baseProps;\n  }\n});\n\n// Compute button classes\nconst buttonClasses = computed(() => {\n  const { size, expand, disabled, loading, fab, iconButton } = props.value;\n  const classes: string[] = [\n    'inline-flex items-center justify-center gap-2',\n    'transition-all duration-200',\n    'select-none',\n    'font-medium',\n  ];\n\n  // Size classes\n  const sizeClasses: Record<ButtonSize, string> = {\n    xs: 'text-xs h-8 px-2',\n    sm: 'text-sm h-9 px-3',\n    base: 'text-sm h-10 px-6',\n    lg: 'text-base h-12 px-7',\n    xl: 'text-lg h-14 px-8',\n  };\n\n  // FAB size classes\n  const fabSizeClasses: Record<ButtonSize, string> = {\n    xs: 'h-10 w-10',\n    sm: 'h-12 w-12',\n    base: 'h-14 w-14',\n    lg: 'h-16 w-16',\n    xl: 'h-20 w-20',\n  };\n\n  // Extended FAB size classes\n  const extendedFabSizeClasses: Record<ButtonSize, string> = {\n    xs: 'h-10 px-3',\n    sm: 'h-12 px-4',\n    base: 'h-14 px-5',\n    lg: 'h-16 px-6',\n    xl: 'h-20 px-8',\n  };\n\n  // Icon button size classes\n  const iconButtonSizeClasses: Record<ButtonSize, string> = {\n    xs: 'h-8 w-8',\n    sm: 'h-9 w-9',\n    base: 'h-10 w-10',\n    lg: 'h-12 w-12',\n    xl: 'h-14 w-14',\n  };\n\n  // Apply size classes\n  if (fab && !props.value.extended) {\n    classes.push(fabSizeClasses[size]);\n  } else if (fab && props.value.extended) {\n    classes.push(extendedFabSizeClasses[size]);\n  } else if (iconButton) {\n    classes.push(iconButtonSizeClasses[size]);\n  } else {\n    classes.push(sizeClasses[size]);\n  }\n\n  // State classes\n  if (disabled || loading) {\n    classes.push('opacity-38 cursor-not-allowed');\n  }\n\n  if (expand) {\n    classes.push('w-full');\n  }\n\n  return classes.join(' ');\n});\n\n// Compute label\nconst computedLabel = computed(() => {\n  const label = props.value.label || '';\n  return props.value.ellipsis ? `${label}…` : label;\n});\n\n// Icon size based on button size\nconst iconSize = computed(() => {\n  const sizes: Record<ButtonSize, string> = {\n    xs: 'text-base',\n    sm: 'text-lg',\n    base: 'text-xl',\n    lg: 'text-2xl',\n    xl: 'text-3xl',\n  };\n  return sizes[props.value.size];\n});\n</script>\n\n<template>\n  <Surface\n    ref=\"surfaceReference\"\n    v-bind=\"surfaceProps\"\n    tag=\"button\"\n    :class=\"buttonClasses\"\n    :disabled=\"props.disabled || props.loading\"\n    @click=\"emit('click', $event)\"\n  >\n    <!-- Leading icon -->\n    <Icon\n      v-if=\"props.icon || props.iconStart\"\n      :icon=\"props.icon || props.iconStart\"\n      :class=\"iconSize\"\n    />\n\n    <!-- Label -->\n    <span\n      v-if=\"computedLabel && (!props.iconButton || props.extended)\"\n      class=\"leading-none\"\n    >\n      {{ computedLabel }}\n    </span>\n\n    <!-- Default slot -->\n    <slot v-if=\"!computedLabel && !props.iconButton\" />\n\n    <!-- Trailing icon -->\n    <Icon\n      v-if=\"props.trailingIcon || props.iconEnd\"\n      :icon=\"props.trailingIcon || props.iconEnd\"\n      :class=\"iconSize\"\n    />\n\n    <!-- Loading indicator -->\n    <Icon\n      v-if=\"props.loading\"\n      icon=\"svg-spinners:12-dots-scale-rotate\"\n      :class=\"iconSize\"\n    />\n\n    <!-- Ripple particles -->\n    <span\n      v-for=\"r in ripples\"\n      :key=\"r.id\"\n      aria-hidden=\"true\"\n      :style=\"getRippleStyle(r)\"\n    />\n  </Surface>\n</template>\n","/** @returns a typed array of keys of the object */\nexport const unsafeKeys = Object.keys as <T>(object: T) => Array<keyof T>;\n\n/**\n * Shape of `import.meta` we read at runtime. Vite injects\n * `import.meta.env.DEV` at build time; downstream type-check passes that\n * cross into this file (without `vite/client` augmentation) see `env`\n * as `undefined`, which is the safe no-op for `tryWarn`.\n */\ntype ViteImportMeta = {\n  env?: {\n    DEV?: boolean\n  }\n};\n\n/**\n * Safely log a warning message in development mode.\n * @param message - The warning message to log\n */\nexport function tryWarn(message: string): void {\n  if (typeof console === 'undefined' || !console.warn) return;\n  const { env } = import.meta as ViteImportMeta;\n  if (env?.DEV) console.warn(message);\n}\n","<script lang=\"ts\">\nimport type { SurfaceProps } from './surface.vue';\n\n/** Card component props */\nexport interface CardProps extends Omit<SurfaceProps, 'padding'> {\n  /** Card title displayed in header */\n  title?: string\n\n  /** Convenience prop for surface colors */\n  surface?: 'base' | 'bright' | 'container' | 'dim' |\n    'high' | 'highest' | 'low' |\n    'lowest'\n\n  /** Convenience prop for container colors */\n  container?: 'error' | 'primary' | 'secondary' | 'tertiary'\n}\n\n// Define defaults in one place\nconst cardDefaults = {\n  title: undefined,\n  surface: 'container',\n  container: undefined,\n  shape: 'md',\n  shadow: 'z1',\n} as const;\n\n// Module augmentation for global defaults\ndeclare module '../composables/use-poupe' {\n  interface PoupeComponentDefaults {\n    card?: Partial<CardProps>\n  }\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { usePoupeMergedProps } from '../composables';\nimport { tryWarn } from '../utils/utils';\nimport Surface from './surface.vue';\n\n// Define props without withDefaults\nconst directProps = defineProps<CardProps>();\n\n// Merge with global defaults and component defaults\nconst props = computed(() =>\n  usePoupeMergedProps(directProps, 'card', cardDefaults),\n);\n\n// Helper to map surface convenience prop to role and level/tone\nfunction mapSurfaceToRoleAndLevel(surface: CardProps['surface']) {\n  switch (surface) {\n    case 'lowest':\n    case 'low':\n    case 'container':\n    case 'high':\n    case 'highest':\n      return {\n        role: 'container' as const,\n        level: surface === 'container' ? 'base' as const : surface,\n      };\n    case 'base':\n    case 'dim':\n    case 'bright':\n      return {\n        role: 'surface' as const,\n        tone: surface,\n      };\n    default:\n      return undefined;\n  }\n}\n\n// Compute variant and color from surface/container props\nconst surfaceProps = computed(() => {\n  // Warn if both surface and container are specified\n  if (props.value.surface && props.value.container) {\n    tryWarn(\n      '[PCard] Both \"surface\" and \"container\" props are specified. ' +\n      'The \"container\" prop will take precedence. ' +\n      'Please use only one of these props.',\n    );\n  }\n\n  const result: Partial<SurfaceProps> = {\n    shape: props.value.shape,\n    shadow: props.value.shadow,\n    border: props.value.border,\n    interactive: props.value.interactive,\n    padding: 'none',\n  };\n\n  if (props.value.container) {\n    result.variant = props.value.container;\n  } else if (props.value.surface) {\n    const mapped = mapSurfaceToRoleAndLevel(props.value.surface);\n    if (mapped) {\n      Object.assign(result, mapped);\n    }\n  } else {\n    // Pass through any other Surface props\n    if (props.value.role) result.role = props.value.role;\n    if (props.value.tone) result.tone = props.value.tone;\n    if (props.value.level) result.level = props.value.level;\n    if (props.value.variant) result.variant = props.value.variant;\n  }\n\n  return result;\n});\n\nconst slots = useSlots();\nconst hasHeader = computed(() => props.value.title !== undefined || slots.header !== undefined);\nconst hasFooter = computed(() => slots.footer !== undefined);\n</script>\n\n<template>\n  <Surface v-bind=\"surfaceProps\">\n    <!-- Header -->\n    <div\n      v-if=\"hasHeader\"\n      class=\"px-4 pt-4\"\n    >\n      <slot name=\"header\">\n        <h3\n          v-if=\"props.title\"\n          class=\"text-xl font-medium\"\n        >\n          {{ props.title }}\n        </h3>\n      </slot>\n    </div>\n\n    <!-- Content -->\n    <div class=\"px-4 py-4\">\n      <slot />\n    </div>\n\n    <!-- Footer -->\n    <div\n      v-if=\"hasFooter\"\n      class=\"px-4 pb-4\"\n    >\n      <slot name=\"footer\" />\n    </div>\n  </Surface>\n</template>\n","<script lang=\"ts\">\nimport type { SurfaceProps } from './surface.vue';\n\n/** Card component props */\nexport interface CardProps extends Omit<SurfaceProps, 'padding'> {\n  /** Card title displayed in header */\n  title?: string\n\n  /** Convenience prop for surface colors */\n  surface?: 'base' | 'bright' | 'container' | 'dim' |\n    'high' | 'highest' | 'low' |\n    'lowest'\n\n  /** Convenience prop for container colors */\n  container?: 'error' | 'primary' | 'secondary' | 'tertiary'\n}\n\n// Define defaults in one place\nconst cardDefaults = {\n  title: undefined,\n  surface: 'container',\n  container: undefined,\n  shape: 'md',\n  shadow: 'z1',\n} as const;\n\n// Module augmentation for global defaults\ndeclare module '../composables/use-poupe' {\n  interface PoupeComponentDefaults {\n    card?: Partial<CardProps>\n  }\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { usePoupeMergedProps } from '../composables';\nimport { tryWarn } from '../utils/utils';\nimport Surface from './surface.vue';\n\n// Define props without withDefaults\nconst directProps = defineProps<CardProps>();\n\n// Merge with global defaults and component defaults\nconst props = computed(() =>\n  usePoupeMergedProps(directProps, 'card', cardDefaults),\n);\n\n// Helper to map surface convenience prop to role and level/tone\nfunction mapSurfaceToRoleAndLevel(surface: CardProps['surface']) {\n  switch (surface) {\n    case 'lowest':\n    case 'low':\n    case 'container':\n    case 'high':\n    case 'highest':\n      return {\n        role: 'container' as const,\n        level: surface === 'container' ? 'base' as const : surface,\n      };\n    case 'base':\n    case 'dim':\n    case 'bright':\n      return {\n        role: 'surface' as const,\n        tone: surface,\n      };\n    default:\n      return undefined;\n  }\n}\n\n// Compute variant and color from surface/container props\nconst surfaceProps = computed(() => {\n  // Warn if both surface and container are specified\n  if (props.value.surface && props.value.container) {\n    tryWarn(\n      '[PCard] Both \"surface\" and \"container\" props are specified. ' +\n      'The \"container\" prop will take precedence. ' +\n      'Please use only one of these props.',\n    );\n  }\n\n  const result: Partial<SurfaceProps> = {\n    shape: props.value.shape,\n    shadow: props.value.shadow,\n    border: props.value.border,\n    interactive: props.value.interactive,\n    padding: 'none',\n  };\n\n  if (props.value.container) {\n    result.variant = props.value.container;\n  } else if (props.value.surface) {\n    const mapped = mapSurfaceToRoleAndLevel(props.value.surface);\n    if (mapped) {\n      Object.assign(result, mapped);\n    }\n  } else {\n    // Pass through any other Surface props\n    if (props.value.role) result.role = props.value.role;\n    if (props.value.tone) result.tone = props.value.tone;\n    if (props.value.level) result.level = props.value.level;\n    if (props.value.variant) result.variant = props.value.variant;\n  }\n\n  return result;\n});\n\nconst slots = useSlots();\nconst hasHeader = computed(() => props.value.title !== undefined || slots.header !== undefined);\nconst hasFooter = computed(() => slots.footer !== undefined);\n</script>\n\n<template>\n  <Surface v-bind=\"surfaceProps\">\n    <!-- Header -->\n    <div\n      v-if=\"hasHeader\"\n      class=\"px-4 pt-4\"\n    >\n      <slot name=\"header\">\n        <h3\n          v-if=\"props.title\"\n          class=\"text-xl font-medium\"\n        >\n          {{ props.title }}\n        </h3>\n      </slot>\n    </div>\n\n    <!-- Content -->\n    <div class=\"px-4 py-4\">\n      <slot />\n    </div>\n\n    <!-- Footer -->\n    <div\n      v-if=\"hasFooter\"\n      class=\"px-4 pb-4\"\n    >\n      <slot name=\"footer\" />\n    </div>\n  </Surface>\n</template>\n","import {\n  type DeepReadonly,\n  type MaybeRefOrGetter,\n\n  reactive,\n  readonly,\n  toValue,\n} from 'vue';\n\nimport { type IconifyIcon } from '@iconify/vue';\n\ntype IconValue = IconifyIcon | string;\n\nconst blankIcon: IconValue = {\n    body: '',\n    width: 24,\n    height: 24,\n  }, unknownIcon: IconValue = {\n    body: '<text y=\".9em\" font-size=\"90\" fill=\"currentColor\">�</text>',\n    width: 100,\n    height: 100,\n  };\n\ntype IconNames = 'blankIcon' | 'hidePassword' | 'showPassword' | 'spinner' | 'unknownIcon';\n\nconst defaultIcons: Record<IconNames, IconValue> = {\n  blankIcon,\n  unknownIcon,\n  spinner: 'svg-spinners:6-dots-scale',\n  // input[type=password]\n  showPassword: 'heroicons:eye',\n  hidePassword: 'heroicons:eye-slash',\n};\n\ntype GlobalIcons = Record<string, Record<string, IconValue>> & { poupe: Record<IconNames, IconValue> };\n\nconst globalIcons: GlobalIcons = reactive<GlobalIcons>({\n  poupe: defaultIcons,\n});\n\nconst registerIcons = (namespace: string, icons: Record<string, IconValue>): void => {\n  globalIcons[namespace] = {\n    ...globalIcons[namespace],\n    ...icons,\n  };\n};\n\nconst toIcon = (icon: MaybeRefOrGetter<IconifyIcon | string | undefined>): IconifyIcon | string => {\n  const v = toValue(icon);\n  if (!v)\n    return globalIcons.poupe.blankIcon;\n  if (typeof v !== 'string')\n    return v;\n\n  const i = v.indexOf(':');\n  const icons = globalIcons[i > 0 ? v.slice(0, i) : 'poupe'];\n  if (!icons)\n    return v;\n\n  const name = i === -1 ? v : v.slice(i + 1);\n  if (icons[name])\n    return toIcon(icons[name]);\n\n  const camelCase = name.replaceAll(/[-_]([a-z])/g, (_, c) => c.toUpperCase());\n  if (icons[camelCase])\n    return toIcon(icons[camelCase]);\n\n  return globalIcons.poupe.unknownIcon;\n};\n\nexport const usePoupeIcons = (): {\n  icons: DeepReadonly<typeof globalIcons>\n  registerIcons: typeof registerIcons\n  toIcon: typeof toIcon\n} => ({\n  icons: readonly(globalIcons),\n  toIcon,\n  registerIcons,\n});\n","import { type IconifyIcon } from '@iconify/vue';\nimport { computed, type ComputedRef, type MaybeRefOrGetter, ref, type Ref, toValue } from 'vue';\nimport { usePoupeIcons } from './use-icons';\n\nexport function usePasswordToggle(origType: MaybeRefOrGetter<string>): {\n  passwordToggleIcon: ComputedRef<IconifyIcon | string>\n  showPassword: Ref<boolean>\n  typeAttr: ComputedRef<string>\n} {\n  const { poupe: icons } = usePoupeIcons().icons;\n\n  const showPassword = ref(false);\n\n  return {\n    showPassword,\n    passwordToggleIcon: computed(() => (showPassword.value ? icons.hidePassword : icons.showPassword)),\n    typeAttr: computed(() => showPassword.value ? 'text' : toValue(origType)),\n  };\n}\n","import {\n  type InputHTMLAttributes,\n  type InputTypeHTMLAttribute,\n} from 'vue';\n\nimport {\n  tv,\n  type VariantProps,\n\n  onSlot,\n\n  borderInFocusVariantsBase,\n  borderVariantsBase,\n\n  borderInFocusVariants,\n  borderVariants,\n  containerInteractiveVariants,\n  roundedVariants,\n\n  pe, ps, px, py,\n} from '../variants';\n\nexport type InputValue = InputHTMLAttributes['value'];\nexport type InputType = InputTypeHTMLAttribute;\n\nexport const padding = (n: number) => `${px[n]} ${py[n]}`;\n\nconst paddingSlot = (n: number) => {\n  return {\n    [n]: {\n      start: padding(n),\n      field: padding(n),\n      unit: `${ps[n + 1]} ${pe[n]} ${py[n]}`,\n      end: padding(n),\n    },\n  };\n};\n\nexport const inputWrapperVariants = tv({\n  slots: {\n    wrapper: [\n      'flex flex-1 flex-nowrap rtl:flex-row-reverse overflow-hidden',\n      borderVariantsBase,\n      borderInFocusVariantsBase,\n    ],\n    field: 'flex-1',\n    start: 'flex items-center',\n    input: 'w-full focus:outline-none bg-transparent',\n    unit: 'text-xs font-medium justify-end',\n    end: 'flex items-center',\n  },\n  variants: {\n    surface: onSlot('wrapper', containerInteractiveVariants),\n    border: onSlot('wrapper', borderVariants),\n    outline: onSlot('wrapper', borderInFocusVariants),\n    rounded: onSlot('wrapper', {\n      ...roundedVariants,\n      full: `${roundedVariants.full} px-4`,\n    }),\n    padding: {\n      ...paddingSlot(0),\n      ...paddingSlot(1),\n      ...paddingSlot(2),\n      ...paddingSlot(3),\n      ...paddingSlot(4),\n    },\n    expand: {\n      true: {\n        wrapper: 'w-full',\n      },\n    },\n  },\n  defaultVariants: {\n    surface: 'base',\n    border: 'outline',\n    outline: 'current',\n    rounded: 'full',\n    padding: 2,\n    expand: false,\n  },\n});\n\ntype InputWrapperVariantProps = VariantProps<typeof inputWrapperVariants>;\n\nexport interface InputWrapperProps {\n  class?: string\n  id?: string\n  type?: InputType\n\n  modelValue?: InputValue\n  value?: never\n\n  iconEnd?: string\n  iconStart?: string\n  unit?: string\n\n  border?: InputWrapperVariantProps['border']\n  expand?: InputWrapperVariantProps['expand']\n  outline?: InputWrapperVariantProps['outline']\n  padding?: InputWrapperVariantProps['padding']\n  rounded?: InputWrapperVariantProps['rounded']\n  surface?: InputWrapperVariantProps['surface']\n}\n\nexport const defaultInputWrapperProps: InputWrapperProps = {\n  ...inputWrapperVariants.defaultVariants,\n  type: 'text',\n} as const;\n","<script setup lang=\"ts\">\nimport { Toggle as RekaToggle, useForwardExpose } from 'reka-ui';\nimport { computed } from 'vue';\nimport { twMerge } from '../variants';\n\nimport { usePasswordToggle } from '../../composables/use-password';\n\nimport Icon from '../icon.vue';\n\nimport {\n  type InputValue,\n  type InputWrapperProps,\n\n  defaultInputWrapperProps,\n  inputWrapperVariants,\n} from './types';\n\ndefineOptions({\n  inheritAttrs: false,\n});\n\nconst model = defineModel<InputValue>();\nconst props = withDefaults(defineProps<InputWrapperProps>(), defaultInputWrapperProps);\n\nconst variants = computed(() => inputWrapperVariants(props));\nconst wrapperClasses = computed(() => twMerge(variants.value.wrapper(), props.class));\n\nconst { forwardRef } = useForwardExpose();\nconst { showPassword, passwordToggleIcon, typeAttr } = usePasswordToggle(props.type);\n</script>\n\n<template>\n  <div\n    :class=\"wrapperClasses\"\n  >\n    <!-- [[ start ][ input ][ unit ][ end ]] -->\n    <slot\n      v-if=\"$slots.start || $props.iconStart !== undefined\"\n      name=\"start\"\n      :class=\"variants.start()\"\n      :padding=\"$props.padding\"\n    >\n      <div\n        :class=\"variants.start()\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <icon\n          :icon=\"$props.iconStart\"\n        />\n      </div>\n    </slot>\n\n    <div :class=\"variants.field()\">\n      <slot\n        :ref=\"forwardRef\"\n        name=\"field\"\n        :class=\"variants.input()\"\n        :padding=\"$props.padding\"\n      >\n        <input\n          v-bind=\"$attrs\"\n          :id=\"props.id\"\n          :ref=\"forwardRef\"\n          v-model=\"model\"\n          :class=\"variants.input()\"\n          :type=\"typeAttr\"\n        >\n      </slot>\n    </div>\n\n    <slot\n      v-if=\"$slots.unit || $props.unit\"\n      name=\"unit\"\n      :class=\"variants.unit()\"\n      :padding=\"$props.padding\"\n    >\n      <div\n        :class=\"variants.unit()\"\n        role=\"note\"\n        :aria-label=\"$props.unit\"\n        v-text=\"$props.unit\"\n      />\n    </slot>\n\n    <slot\n      v-if=\"$slots.end || $props.iconEnd !== undefined || $props.type === 'password'\"\n      name=\"end\"\n      :class=\"variants.end()\"\n      :padding=\"$props.padding\"\n    >\n      <div\n        v-if=\"$props.iconEnd !== undefined\"\n        :class=\"variants.end()\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <icon\n          :icon=\"$props.iconEnd\"\n        />\n      </div>\n\n      <reka-toggle\n        v-else-if=\"props.type === 'password'\"\n        v-model=\"showPassword\"\n        :class=\"variants.end()\"\n      >\n        <icon :icon=\"passwordToggleIcon\" />\n      </reka-toggle>\n    </slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Toggle as RekaToggle, useForwardExpose } from 'reka-ui';\nimport { computed } from 'vue';\nimport { twMerge } from '../variants';\n\nimport { usePasswordToggle } from '../../composables/use-password';\n\nimport Icon from '../icon.vue';\n\nimport {\n  type InputValue,\n  type InputWrapperProps,\n\n  defaultInputWrapperProps,\n  inputWrapperVariants,\n} from './types';\n\ndefineOptions({\n  inheritAttrs: false,\n});\n\nconst model = defineModel<InputValue>();\nconst props = withDefaults(defineProps<InputWrapperProps>(), defaultInputWrapperProps);\n\nconst variants = computed(() => inputWrapperVariants(props));\nconst wrapperClasses = computed(() => twMerge(variants.value.wrapper(), props.class));\n\nconst { forwardRef } = useForwardExpose();\nconst { showPassword, passwordToggleIcon, typeAttr } = usePasswordToggle(props.type);\n</script>\n\n<template>\n  <div\n    :class=\"wrapperClasses\"\n  >\n    <!-- [[ start ][ input ][ unit ][ end ]] -->\n    <slot\n      v-if=\"$slots.start || $props.iconStart !== undefined\"\n      name=\"start\"\n      :class=\"variants.start()\"\n      :padding=\"$props.padding\"\n    >\n      <div\n        :class=\"variants.start()\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <icon\n          :icon=\"$props.iconStart\"\n        />\n      </div>\n    </slot>\n\n    <div :class=\"variants.field()\">\n      <slot\n        :ref=\"forwardRef\"\n        name=\"field\"\n        :class=\"variants.input()\"\n        :padding=\"$props.padding\"\n      >\n        <input\n          v-bind=\"$attrs\"\n          :id=\"props.id\"\n          :ref=\"forwardRef\"\n          v-model=\"model\"\n          :class=\"variants.input()\"\n          :type=\"typeAttr\"\n        >\n      </slot>\n    </div>\n\n    <slot\n      v-if=\"$slots.unit || $props.unit\"\n      name=\"unit\"\n      :class=\"variants.unit()\"\n      :padding=\"$props.padding\"\n    >\n      <div\n        :class=\"variants.unit()\"\n        role=\"note\"\n        :aria-label=\"$props.unit\"\n        v-text=\"$props.unit\"\n      />\n    </slot>\n\n    <slot\n      v-if=\"$slots.end || $props.iconEnd !== undefined || $props.type === 'password'\"\n      name=\"end\"\n      :class=\"variants.end()\"\n      :padding=\"$props.padding\"\n    >\n      <div\n        v-if=\"$props.iconEnd !== undefined\"\n        :class=\"variants.end()\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <icon\n          :icon=\"$props.iconEnd\"\n        />\n      </div>\n\n      <reka-toggle\n        v-else-if=\"props.type === 'password'\"\n        v-model=\"showPassword\"\n        :class=\"variants.end()\"\n      >\n        <icon :icon=\"passwordToggleIcon\" />\n      </reka-toggle>\n    </slot>\n  </div>\n</template>\n","<script lang=\"ts\">\nimport {\n  tv,\n  type VariantProps,\n\n  onSlot,\n  roundedVariants,\n  shadowVariants,\n} from './variants';\n\nconst borderVariants = {\n  solid: 'border-solid border',\n  none: 'border-none',\n  dashed: 'border-dashed border',\n};\n\nconst placeholder = tv({\n  slots: {\n    wrapper: 'overflow-hidden',\n    pattern: 'w-full h-full',\n  },\n  variants: {\n    border: onSlot('wrapper', borderVariants),\n    color: {\n      current: {\n        wrapper: 'border-current',\n        pattern: 'stroke-current',\n      },\n      ['outline-variant']: {\n        wrapper: 'border-outline-variant',\n        pattern: 'stroke-outline-variant',\n      },\n      outline: {\n        wrapper: 'border-outline',\n        pattern: 'stroke-outline',\n      },\n      primary: {\n        wrapper: 'border-primary',\n        pattern: 'stroke-primary',\n      },\n      secondary: {\n        wrapper: 'border-secondary',\n        pattern: 'stroke-secondary',\n      },\n      tertiary: {\n        wrapper: 'border-tertiary',\n        pattern: 'stroke-tertiary',\n      },\n      error: {\n        wrapper: 'border-error',\n        pattern: 'stroke-error',\n      },\n    },\n    rounded: onSlot('wrapper', roundedVariants),\n    shadow: onSlot('wrapper', shadowVariants),\n  },\n});\n\ntype PlaceholderVariantProps = VariantProps<typeof placeholder>;\n\n/** Placeholder component props */\nexport type PlaceholderProps = {\n  /** rhombus height. @defaultValue 20 */\n  rh?: number\n  /** rhombus width. @defaultValue 10 */\n  rw?: number\n\n  /** placeholder border. @defaultValue `'dashed'` */\n  border?: PlaceholderVariantProps['border']\n  /** pattern and border color. @defaultValue '`outline-variant`' */\n  color?: PlaceholderVariantProps['color']\n  /** rounded corners. @defaultValue `'xl'` */\n  rounded?: PlaceholderVariantProps['rounded']\n  /** shadow. @defaultValue `'none'` */\n  shadow?: PlaceholderVariantProps['shadow']\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useId } from 'vue';\n\nconst props = withDefaults(defineProps<PlaceholderProps>(), {\n  rw: 10,\n  rh: 20,\n  border: 'dashed' as const,\n  color: 'outline-variant' as const,\n  rounded: 'xl' as const,\n  shadow: 'none' as const,\n});\n\nconst id = useId();\nconst variants = computed(() => placeholder({\n  border: props.border,\n  color: props.color,\n  rounded: props.rounded,\n  shadow: props.shadow,\n}));\n</script>\n\n<template>\n  <div :class=\"variants.wrapper()\">\n    <svg\n      :class=\"variants.pattern()\"\n      aria-hidden=\"true\"\n    >\n      <defs>\n        <pattern\n          :id=\"id\"\n          x=\"0\"\n          y=\"0\"\n          :width=\"rw\"\n          :height=\"rh\"\n          patternUnits=\"userSpaceOnUse\"\n        >\n          <path\n            :d=\"`M0 0 ${rw} ${rh} M${rw} 0 0 ${rh}`\"\n            stroke-width=\"1px\"\n            vector-effect=\"non-scaling-stroke\"\n          />\n        </pattern>\n      </defs>\n\n      <rect\n        stroke=\"none\"\n        :fill=\"`url(#${id})`\"\n        width=\"100%\"\n        height=\"100%\"\n      />\n    </svg>\n\n    <slot />\n  </div>\n</template>\n","<script lang=\"ts\">\nimport {\n  tv,\n  type VariantProps,\n\n  onSlot,\n  roundedVariants,\n  shadowVariants,\n} from './variants';\n\nconst borderVariants = {\n  solid: 'border-solid border',\n  none: 'border-none',\n  dashed: 'border-dashed border',\n};\n\nconst placeholder = tv({\n  slots: {\n    wrapper: 'overflow-hidden',\n    pattern: 'w-full h-full',\n  },\n  variants: {\n    border: onSlot('wrapper', borderVariants),\n    color: {\n      current: {\n        wrapper: 'border-current',\n        pattern: 'stroke-current',\n      },\n      ['outline-variant']: {\n        wrapper: 'border-outline-variant',\n        pattern: 'stroke-outline-variant',\n      },\n      outline: {\n        wrapper: 'border-outline',\n        pattern: 'stroke-outline',\n      },\n      primary: {\n        wrapper: 'border-primary',\n        pattern: 'stroke-primary',\n      },\n      secondary: {\n        wrapper: 'border-secondary',\n        pattern: 'stroke-secondary',\n      },\n      tertiary: {\n        wrapper: 'border-tertiary',\n        pattern: 'stroke-tertiary',\n      },\n      error: {\n        wrapper: 'border-error',\n        pattern: 'stroke-error',\n      },\n    },\n    rounded: onSlot('wrapper', roundedVariants),\n    shadow: onSlot('wrapper', shadowVariants),\n  },\n});\n\ntype PlaceholderVariantProps = VariantProps<typeof placeholder>;\n\n/** Placeholder component props */\nexport type PlaceholderProps = {\n  /** rhombus height. @defaultValue 20 */\n  rh?: number\n  /** rhombus width. @defaultValue 10 */\n  rw?: number\n\n  /** placeholder border. @defaultValue `'dashed'` */\n  border?: PlaceholderVariantProps['border']\n  /** pattern and border color. @defaultValue '`outline-variant`' */\n  color?: PlaceholderVariantProps['color']\n  /** rounded corners. @defaultValue `'xl'` */\n  rounded?: PlaceholderVariantProps['rounded']\n  /** shadow. @defaultValue `'none'` */\n  shadow?: PlaceholderVariantProps['shadow']\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useId } from 'vue';\n\nconst props = withDefaults(defineProps<PlaceholderProps>(), {\n  rw: 10,\n  rh: 20,\n  border: 'dashed' as const,\n  color: 'outline-variant' as const,\n  rounded: 'xl' as const,\n  shadow: 'none' as const,\n});\n\nconst id = useId();\nconst variants = computed(() => placeholder({\n  border: props.border,\n  color: props.color,\n  rounded: props.rounded,\n  shadow: props.shadow,\n}));\n</script>\n\n<template>\n  <div :class=\"variants.wrapper()\">\n    <svg\n      :class=\"variants.pattern()\"\n      aria-hidden=\"true\"\n    >\n      <defs>\n        <pattern\n          :id=\"id\"\n          x=\"0\"\n          y=\"0\"\n          :width=\"rw\"\n          :height=\"rh\"\n          patternUnits=\"userSpaceOnUse\"\n        >\n          <path\n            :d=\"`M0 0 ${rw} ${rh} M${rw} 0 0 ${rh}`\"\n            stroke-width=\"1px\"\n            vector-effect=\"non-scaling-stroke\"\n          />\n        </pattern>\n      </defs>\n\n      <rect\n        stroke=\"none\"\n        :fill=\"`url(#${id})`\"\n        width=\"100%\"\n        height=\"100%\"\n      />\n    </svg>\n\n    <slot />\n  </div>\n</template>\n"],"mappings":"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"}