@vuecs/elements 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +21 -0
  3. package/dist/components/alert/Alert.vue.d.ts +177 -0
  4. package/dist/components/alert/Alert.vue.d.ts.map +1 -0
  5. package/dist/components/alert/AlertClose.vue.d.ts +110 -0
  6. package/dist/components/alert/AlertClose.vue.d.ts.map +1 -0
  7. package/dist/components/alert/AlertDescription.vue.d.ts +56 -0
  8. package/dist/components/alert/AlertDescription.vue.d.ts.map +1 -0
  9. package/dist/components/alert/AlertTitle.vue.d.ts +71 -0
  10. package/dist/components/alert/AlertTitle.vue.d.ts.map +1 -0
  11. package/dist/components/alert/index.d.ts +11 -0
  12. package/dist/components/alert/index.d.ts.map +1 -0
  13. package/dist/components/alert/theme.d.ts +6 -0
  14. package/dist/components/alert/theme.d.ts.map +1 -0
  15. package/dist/components/alert/types.d.ts +44 -0
  16. package/dist/components/alert/types.d.ts.map +1 -0
  17. package/dist/components/aspect-ratio/AspectRatio.vue.d.ts +63 -0
  18. package/dist/components/aspect-ratio/AspectRatio.vue.d.ts.map +1 -0
  19. package/dist/components/aspect-ratio/index.d.ts +5 -0
  20. package/dist/components/aspect-ratio/index.d.ts.map +1 -0
  21. package/dist/components/aspect-ratio/theme.d.ts +4 -0
  22. package/dist/components/aspect-ratio/theme.d.ts.map +1 -0
  23. package/dist/components/aspect-ratio/types.d.ts +11 -0
  24. package/dist/components/aspect-ratio/types.d.ts.map +1 -0
  25. package/dist/components/avatar/Avatar.vue.d.ts +174 -0
  26. package/dist/components/avatar/Avatar.vue.d.ts.map +1 -0
  27. package/dist/components/avatar/index.d.ts +5 -0
  28. package/dist/components/avatar/index.d.ts.map +1 -0
  29. package/dist/components/avatar/theme.d.ts +4 -0
  30. package/dist/components/avatar/theme.d.ts.map +1 -0
  31. package/dist/components/avatar/types.d.ts +16 -0
  32. package/dist/components/avatar/types.d.ts.map +1 -0
  33. package/dist/components/badge/Badge.vue.d.ts +104 -0
  34. package/dist/components/badge/Badge.vue.d.ts.map +1 -0
  35. package/dist/components/badge/index.d.ts +5 -0
  36. package/dist/components/badge/index.d.ts.map +1 -0
  37. package/dist/components/badge/theme.d.ts +4 -0
  38. package/dist/components/badge/theme.d.ts.map +1 -0
  39. package/dist/components/badge/types.d.ts +14 -0
  40. package/dist/components/badge/types.d.ts.map +1 -0
  41. package/dist/components/card/Card.vue.d.ts +120 -0
  42. package/dist/components/card/Card.vue.d.ts.map +1 -0
  43. package/dist/components/card/CardBody.vue.d.ts +79 -0
  44. package/dist/components/card/CardBody.vue.d.ts.map +1 -0
  45. package/dist/components/card/CardDescription.vue.d.ts +79 -0
  46. package/dist/components/card/CardDescription.vue.d.ts.map +1 -0
  47. package/dist/components/card/CardFooter.vue.d.ts +79 -0
  48. package/dist/components/card/CardFooter.vue.d.ts.map +1 -0
  49. package/dist/components/card/CardHeader.vue.d.ts +79 -0
  50. package/dist/components/card/CardHeader.vue.d.ts.map +1 -0
  51. package/dist/components/card/CardTitle.vue.d.ts +79 -0
  52. package/dist/components/card/CardTitle.vue.d.ts.map +1 -0
  53. package/dist/components/card/context.d.ts +17 -0
  54. package/dist/components/card/context.d.ts.map +1 -0
  55. package/dist/components/card/index.d.ts +16 -0
  56. package/dist/components/card/index.d.ts.map +1 -0
  57. package/dist/components/card/theme.d.ts +9 -0
  58. package/dist/components/card/theme.d.ts.map +1 -0
  59. package/dist/components/card/types.d.ts +38 -0
  60. package/dist/components/card/types.d.ts.map +1 -0
  61. package/dist/components/collapse/Collapse.vue.d.ts +153 -0
  62. package/dist/components/collapse/Collapse.vue.d.ts.map +1 -0
  63. package/dist/components/collapse/CollapseContent.vue.d.ts +97 -0
  64. package/dist/components/collapse/CollapseContent.vue.d.ts.map +1 -0
  65. package/dist/components/collapse/CollapseTrigger.vue.d.ts +106 -0
  66. package/dist/components/collapse/CollapseTrigger.vue.d.ts.map +1 -0
  67. package/dist/components/collapse/index.d.ts +9 -0
  68. package/dist/components/collapse/index.d.ts.map +1 -0
  69. package/dist/components/collapse/theme.d.ts +6 -0
  70. package/dist/components/collapse/theme.d.ts.map +1 -0
  71. package/dist/components/collapse/types.d.ts +32 -0
  72. package/dist/components/collapse/types.d.ts.map +1 -0
  73. package/dist/components/index.d.ts +10 -0
  74. package/dist/components/index.d.ts.map +1 -0
  75. package/dist/components/separator/Separator.vue.d.ts +106 -0
  76. package/dist/components/separator/Separator.vue.d.ts.map +1 -0
  77. package/dist/components/separator/index.d.ts +5 -0
  78. package/dist/components/separator/index.d.ts.map +1 -0
  79. package/dist/components/separator/theme.d.ts +4 -0
  80. package/dist/components/separator/theme.d.ts.map +1 -0
  81. package/dist/components/separator/types.d.ts +11 -0
  82. package/dist/components/separator/types.d.ts.map +1 -0
  83. package/dist/components/tag/Tag.vue.d.ts +145 -0
  84. package/dist/components/tag/Tag.vue.d.ts.map +1 -0
  85. package/dist/components/tag/Tags.vue.d.ts +115 -0
  86. package/dist/components/tag/Tags.vue.d.ts.map +1 -0
  87. package/dist/components/tag/index.d.ts +7 -0
  88. package/dist/components/tag/index.d.ts.map +1 -0
  89. package/dist/components/tag/theme.d.ts +5 -0
  90. package/dist/components/tag/theme.d.ts.map +1 -0
  91. package/dist/components/tag/types.d.ts +41 -0
  92. package/dist/components/tag/types.d.ts.map +1 -0
  93. package/dist/components/visually-hidden/VisuallyHidden.vue.d.ts +29 -0
  94. package/dist/components/visually-hidden/VisuallyHidden.vue.d.ts.map +1 -0
  95. package/dist/components/visually-hidden/index.d.ts +3 -0
  96. package/dist/components/visually-hidden/index.d.ts.map +1 -0
  97. package/dist/index.d.ts +19 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.mjs +1080 -0
  100. package/dist/index.mjs.map +1 -0
  101. package/dist/style.css +213 -0
  102. package/dist/vue.d.ts +45 -0
  103. package/dist/vue.d.ts.map +1 -0
  104. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/components/alert/theme.ts","../src/components/alert/Alert.vue","../src/components/alert/Alert.vue","../src/components/alert/AlertTitle.vue","../src/components/alert/AlertTitle.vue","../src/components/alert/AlertDescription.vue","../src/components/alert/AlertDescription.vue","../src/components/alert/AlertClose.vue","../src/components/alert/AlertClose.vue","../src/components/aspect-ratio/theme.ts","../src/components/aspect-ratio/AspectRatio.vue","../src/components/aspect-ratio/AspectRatio.vue","../src/components/avatar/theme.ts","../src/components/avatar/Avatar.vue","../src/components/avatar/Avatar.vue","../src/components/badge/theme.ts","../src/components/badge/Badge.vue","../src/components/badge/Badge.vue","../src/components/card/context.ts","../src/components/card/theme.ts","../src/components/card/Card.vue","../src/components/card/Card.vue","../src/components/card/CardHeader.vue","../src/components/card/CardHeader.vue","../src/components/card/CardTitle.vue","../src/components/card/CardTitle.vue","../src/components/card/CardDescription.vue","../src/components/card/CardDescription.vue","../src/components/card/CardBody.vue","../src/components/card/CardBody.vue","../src/components/card/CardFooter.vue","../src/components/card/CardFooter.vue","../src/components/collapse/theme.ts","../src/components/collapse/Collapse.vue","../src/components/collapse/Collapse.vue","../src/components/collapse/CollapseTrigger.vue","../src/components/collapse/CollapseTrigger.vue","../src/components/collapse/CollapseContent.vue","../src/components/collapse/CollapseContent.vue","../src/components/separator/theme.ts","../src/components/separator/Separator.vue","../src/components/separator/Separator.vue","../src/components/tag/theme.ts","../src/components/tag/Tag.vue","../src/components/tag/Tag.vue","../src/components/tag/Tags.vue","../src/components/tag/Tags.vue","../src/components/visually-hidden/VisuallyHidden.vue","../src/components/visually-hidden/VisuallyHidden.vue","../src/index.ts"],"sourcesContent":["import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type {\n AlertDescriptionThemeClasses,\n AlertThemeClasses,\n AlertTitleThemeClasses,\n} from './types';\n\nexport const alertThemeDefaults: ComponentThemeDefinition<AlertThemeClasses> = {\n classes: {\n root: 'vc-alert',\n icon: 'vc-alert-icon',\n content: 'vc-alert-content',\n closeIcon: 'vc-alert-close-icon',\n close: 'vc-alert-close',\n },\n};\n\nexport const alertTitleThemeDefaults: ComponentThemeDefinition<AlertTitleThemeClasses> = { classes: { root: 'vc-alert-title' } };\n\nexport const alertDescriptionThemeDefaults: ComponentThemeDefinition<AlertDescriptionThemeClasses> = { classes: { root: 'vc-alert-description' } };\n","<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n h,\n mergeProps,\n resolveComponent,\n} from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport {\n themableProps,\n useComponentDefaults,\n useComponentTheme,\n useThemeProps,\n} from '@vuecs/core';\nimport { alertThemeDefaults } from './theme';\nimport type {\n AlertColor,\n AlertDefaults,\n AlertSize,\n AlertThemeClasses,\n AlertVariant,\n} from './types';\n\nconst alertProps = {\n /** Semantic color. Drives the `color` theme variant + auto-resolves the default icon + ARIA role. */\n color: { type: String as PropType<AlertColor>, default: undefined },\n /** Visual treatment — solid / soft / outline. */\n variant: { type: String as PropType<AlertVariant>, default: undefined },\n /** Padding / font-size tier. */\n size: { type: String as PropType<AlertSize>, default: undefined },\n /**\n * Iconify name for the leading icon (e.g. `'lucide:triangle-alert'`).\n * When omitted, resolves from the active icon preset based on `color`\n * (`errorIcon` / `warningIcon` / `successIcon` / `infoIcon`). Pass an\n * empty string to suppress the icon entirely.\n */\n icon: { type: String, default: undefined },\n /**\n * ARIA role. Defaults to `'alert'` for `error` / `warning` (assertive)\n * and `'status'` for `info` / `success` / `neutral` (polite) — matches\n * WAI-ARIA's intended semantics. Override for custom interaction\n * patterns (e.g. `role=\"log\"` for chat-style toasts).\n */\n role: { type: String, default: undefined },\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n ...themableProps<AlertThemeClasses>(),\n};\n\nexport type AlertProps = ExtractPublicPropTypes<typeof alertProps>;\n\nconst alertBehavioralDefaults: AlertDefaults = {\n primaryIcon: '',\n neutralIcon: '',\n infoIcon: '',\n successIcon: '',\n warningIcon: '',\n errorIcon: '',\n};\n\n/**\n * `<VCAlert>` is presentational — it does NOT own visibility state. Wrap\n * with `v-if` for instant dismissal, or compose with `<VCCollapse v-model:open>`\n * for an animated height-collapse on dismiss. `<VCAlertClose>` emits `click`;\n * the consumer wires the click to whichever visibility ref drives the wrap.\n *\n * This intentionally diverges from the overlay families (Modal / Popover)\n * which own their open state through Reka primitives — Alert has no portal\n * or unmount-cascade machinery, so coupling visibility to internal state\n * breaks composition with outer animation parents (the Collapse case).\n */\nexport default defineComponent({\n name: 'VCAlert',\n inheritAttrs: false,\n props: alertProps,\n setup(props, { attrs, slots }) {\n const themeProps = useThemeProps(props, 'color', 'variant', 'size');\n const theme = useComponentTheme('alert', themeProps, alertThemeDefaults);\n const defaults = useComponentDefaults('alert', {}, alertBehavioralDefaults);\n\n // Resolved icon name — explicit `:icon` wins over color-derived preset default.\n const iconName = computed(() => {\n if (props.icon !== undefined) return props.icon;\n switch (props.color) {\n case 'error': return defaults.value.errorIcon;\n case 'warning': return defaults.value.warningIcon;\n case 'success': return defaults.value.successIcon;\n case 'info': return defaults.value.infoIcon;\n case 'primary': return defaults.value.primaryIcon;\n case 'neutral': return defaults.value.neutralIcon;\n default: return '';\n }\n });\n\n // Severity-derived ARIA role with explicit override.\n const resolvedRole = computed(() => {\n if (props.role) return props.role;\n return props.color === 'error' || props.color === 'warning' ? 'alert' : 'status';\n });\n\n // Hoisted out of the render fn — resolves once per component\n // instance instead of per render. `resolveComponent` reads the\n // app-wide component registry; if `@vuecs/icon` isn't installed\n // it returns the lookup string ('VCIcon'), which we detect below.\n const VCIcon = resolveComponent('VCIcon');\n const hasIconComponent = typeof VCIcon !== 'string';\n\n return () => {\n const iconValue = iconName.value;\n const showIcon = !!iconValue && hasIconComponent;\n\n return h(\n props.as,\n mergeProps(attrs, {\n role: resolvedRole.value,\n class: theme.value.root || undefined,\n }),\n [\n showIcon ? h('span', { class: theme.value.icon || undefined, 'aria-hidden': 'true' }, [\n h(VCIcon as Component, { name: iconValue }),\n ]) : null,\n h('div', { class: theme.value.content || undefined }, slots.default?.()),\n ],\n );\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n h,\n mergeProps,\n resolveComponent,\n} from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport {\n themableProps,\n useComponentDefaults,\n useComponentTheme,\n useThemeProps,\n} from '@vuecs/core';\nimport { alertThemeDefaults } from './theme';\nimport type {\n AlertColor,\n AlertDefaults,\n AlertSize,\n AlertThemeClasses,\n AlertVariant,\n} from './types';\n\nconst alertProps = {\n /** Semantic color. Drives the `color` theme variant + auto-resolves the default icon + ARIA role. */\n color: { type: String as PropType<AlertColor>, default: undefined },\n /** Visual treatment — solid / soft / outline. */\n variant: { type: String as PropType<AlertVariant>, default: undefined },\n /** Padding / font-size tier. */\n size: { type: String as PropType<AlertSize>, default: undefined },\n /**\n * Iconify name for the leading icon (e.g. `'lucide:triangle-alert'`).\n * When omitted, resolves from the active icon preset based on `color`\n * (`errorIcon` / `warningIcon` / `successIcon` / `infoIcon`). Pass an\n * empty string to suppress the icon entirely.\n */\n icon: { type: String, default: undefined },\n /**\n * ARIA role. Defaults to `'alert'` for `error` / `warning` (assertive)\n * and `'status'` for `info` / `success` / `neutral` (polite) — matches\n * WAI-ARIA's intended semantics. Override for custom interaction\n * patterns (e.g. `role=\"log\"` for chat-style toasts).\n */\n role: { type: String, default: undefined },\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n ...themableProps<AlertThemeClasses>(),\n};\n\nexport type AlertProps = ExtractPublicPropTypes<typeof alertProps>;\n\nconst alertBehavioralDefaults: AlertDefaults = {\n primaryIcon: '',\n neutralIcon: '',\n infoIcon: '',\n successIcon: '',\n warningIcon: '',\n errorIcon: '',\n};\n\n/**\n * `<VCAlert>` is presentational — it does NOT own visibility state. Wrap\n * with `v-if` for instant dismissal, or compose with `<VCCollapse v-model:open>`\n * for an animated height-collapse on dismiss. `<VCAlertClose>` emits `click`;\n * the consumer wires the click to whichever visibility ref drives the wrap.\n *\n * This intentionally diverges from the overlay families (Modal / Popover)\n * which own their open state through Reka primitives — Alert has no portal\n * or unmount-cascade machinery, so coupling visibility to internal state\n * breaks composition with outer animation parents (the Collapse case).\n */\nexport default defineComponent({\n name: 'VCAlert',\n inheritAttrs: false,\n props: alertProps,\n setup(props, { attrs, slots }) {\n const themeProps = useThemeProps(props, 'color', 'variant', 'size');\n const theme = useComponentTheme('alert', themeProps, alertThemeDefaults);\n const defaults = useComponentDefaults('alert', {}, alertBehavioralDefaults);\n\n // Resolved icon name — explicit `:icon` wins over color-derived preset default.\n const iconName = computed(() => {\n if (props.icon !== undefined) return props.icon;\n switch (props.color) {\n case 'error': return defaults.value.errorIcon;\n case 'warning': return defaults.value.warningIcon;\n case 'success': return defaults.value.successIcon;\n case 'info': return defaults.value.infoIcon;\n case 'primary': return defaults.value.primaryIcon;\n case 'neutral': return defaults.value.neutralIcon;\n default: return '';\n }\n });\n\n // Severity-derived ARIA role with explicit override.\n const resolvedRole = computed(() => {\n if (props.role) return props.role;\n return props.color === 'error' || props.color === 'warning' ? 'alert' : 'status';\n });\n\n // Hoisted out of the render fn — resolves once per component\n // instance instead of per render. `resolveComponent` reads the\n // app-wide component registry; if `@vuecs/icon` isn't installed\n // it returns the lookup string ('VCIcon'), which we detect below.\n const VCIcon = resolveComponent('VCIcon');\n const hasIconComponent = typeof VCIcon !== 'string';\n\n return () => {\n const iconValue = iconName.value;\n const showIcon = !!iconValue && hasIconComponent;\n\n return h(\n props.as,\n mergeProps(attrs, {\n role: resolvedRole.value,\n class: theme.value.root || undefined,\n }),\n [\n showIcon ? h('span', { class: theme.value.icon || undefined, 'aria-hidden': 'true' }, [\n h(VCIcon as Component, { name: iconValue }),\n ]) : null,\n h('div', { class: theme.value.content || undefined }, slots.default?.()),\n ],\n );\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { alertTitleThemeDefaults } from './theme';\nimport type { AlertTitleThemeClasses } from './types';\n\nconst alertTitleProps = {\n /**\n * HTML tag to render.\n *\n * Vuecs convention: defaults to `'h4'` (semantically-correct alert\n * heading). Override via `:as` for nested-heading hierarchies.\n */\n as: { type: String, default: 'h4' },\n ...themableProps<AlertTitleThemeClasses>(),\n};\n\nexport type AlertTitleProps = ExtractPublicPropTypes<typeof alertTitleProps>;\n\nexport default defineComponent({\n name: 'VCAlertTitle',\n inheritAttrs: false,\n props: alertTitleProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'alertTitle',\n useThemeProps(props),\n alertTitleThemeDefaults,\n );\n return () => h(\n props.as,\n mergeProps(attrs, { class: theme.value.root || undefined }),\n slots.default?.(),\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { alertTitleThemeDefaults } from './theme';\nimport type { AlertTitleThemeClasses } from './types';\n\nconst alertTitleProps = {\n /**\n * HTML tag to render.\n *\n * Vuecs convention: defaults to `'h4'` (semantically-correct alert\n * heading). Override via `:as` for nested-heading hierarchies.\n */\n as: { type: String, default: 'h4' },\n ...themableProps<AlertTitleThemeClasses>(),\n};\n\nexport type AlertTitleProps = ExtractPublicPropTypes<typeof alertTitleProps>;\n\nexport default defineComponent({\n name: 'VCAlertTitle',\n inheritAttrs: false,\n props: alertTitleProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'alertTitle',\n useThemeProps(props),\n alertTitleThemeDefaults,\n );\n return () => h(\n props.as,\n mergeProps(attrs, { class: theme.value.root || undefined }),\n slots.default?.(),\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { alertDescriptionThemeDefaults } from './theme';\nimport type { AlertDescriptionThemeClasses } from './types';\n\nconst alertDescriptionProps = {\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n ...themableProps<AlertDescriptionThemeClasses>(),\n};\n\nexport type AlertDescriptionProps = ExtractPublicPropTypes<typeof alertDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCAlertDescription',\n inheritAttrs: false,\n props: alertDescriptionProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'alertDescription',\n useThemeProps(props),\n alertDescriptionThemeDefaults,\n );\n return () => h(\n props.as,\n mergeProps(attrs, { class: theme.value.root || undefined }),\n slots.default?.(),\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { alertDescriptionThemeDefaults } from './theme';\nimport type { AlertDescriptionThemeClasses } from './types';\n\nconst alertDescriptionProps = {\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n ...themableProps<AlertDescriptionThemeClasses>(),\n};\n\nexport type AlertDescriptionProps = ExtractPublicPropTypes<typeof alertDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCAlertDescription',\n inheritAttrs: false,\n props: alertDescriptionProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'alertDescription',\n useThemeProps(props),\n alertDescriptionThemeDefaults,\n );\n return () => h(\n props.as,\n mergeProps(attrs, { class: theme.value.root || undefined }),\n slots.default?.(),\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { alertThemeDefaults } from './theme';\nimport type { AlertThemeClasses } from './types';\n\nconst alertCloseProps = {\n /** HTML tag to render. */\n as: { type: String, default: 'button' },\n /**\n * Force the corner-X presentation (reads the theme's `closeIcon` slot).\n * When false (default), the slot-presence heuristic decides:\n * - slotless → corner-X (`closeIcon`)\n * - slotted → labeled-button (`close`)\n *\n * Same convention as `<VCModalClose>` / `<VCPopoverClose>` / `<VCToastClose>`.\n */\n icon: { type: Boolean, default: false },\n /** Per-instance theme override — flat slot key map. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<AlertThemeClasses>>, default: undefined },\n /** Per-instance variant values. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type AlertCloseProps = ExtractPublicPropTypes<typeof alertCloseProps>;\n\n/**\n * Styled close button. Emits `click` — the consumer wires the click to\n * whichever ref controls Alert visibility (a `v-if` for instant unmount\n * or a `<VCCollapse v-model:open>` for an animated dismiss). Unlike\n * `<VCModalClose>` / `<VCToastClose>` — which dispatch into Reka's\n * primitive context — `<VCAlertClose>` doesn't auto-set any state. That\n * keeps Alert presentational and lets `<VCCollapse>` compositions own\n * the unmount cascade (mount-time content is needed for the height\n * animation to play).\n */\nexport default defineComponent({\n name: 'VCAlertClose',\n inheritAttrs: false,\n props: alertCloseProps,\n setup(props, { slots, attrs }) {\n const theme = useComponentTheme('alert', props, alertThemeDefaults);\n\n return () => {\n const hasSlot = !!slots.default;\n const slotKey = props.icon || !hasSlot ? 'closeIcon' : 'close';\n // Provide a default aria-label whenever we're in icon-mode\n // (slotless OR explicit `:icon` with custom icon-only slot\n // content like an `<svg>`). In labelled-text mode the slot\n // content already serves as the accessible name.\n const ariaLabel = (attrs['aria-label'] as string | undefined) ??\n (slotKey === 'closeIcon' ? 'Close' : undefined);\n\n return h(\n props.as,\n mergeProps(attrs, {\n type: props.as === 'button' ? 'button' : undefined,\n class: theme.value[slotKey] || undefined,\n 'aria-label': ariaLabel,\n }),\n { default: () => slots.default?.() ?? '×' },\n );\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { alertThemeDefaults } from './theme';\nimport type { AlertThemeClasses } from './types';\n\nconst alertCloseProps = {\n /** HTML tag to render. */\n as: { type: String, default: 'button' },\n /**\n * Force the corner-X presentation (reads the theme's `closeIcon` slot).\n * When false (default), the slot-presence heuristic decides:\n * - slotless → corner-X (`closeIcon`)\n * - slotted → labeled-button (`close`)\n *\n * Same convention as `<VCModalClose>` / `<VCPopoverClose>` / `<VCToastClose>`.\n */\n icon: { type: Boolean, default: false },\n /** Per-instance theme override — flat slot key map. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<AlertThemeClasses>>, default: undefined },\n /** Per-instance variant values. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type AlertCloseProps = ExtractPublicPropTypes<typeof alertCloseProps>;\n\n/**\n * Styled close button. Emits `click` — the consumer wires the click to\n * whichever ref controls Alert visibility (a `v-if` for instant unmount\n * or a `<VCCollapse v-model:open>` for an animated dismiss). Unlike\n * `<VCModalClose>` / `<VCToastClose>` — which dispatch into Reka's\n * primitive context — `<VCAlertClose>` doesn't auto-set any state. That\n * keeps Alert presentational and lets `<VCCollapse>` compositions own\n * the unmount cascade (mount-time content is needed for the height\n * animation to play).\n */\nexport default defineComponent({\n name: 'VCAlertClose',\n inheritAttrs: false,\n props: alertCloseProps,\n setup(props, { slots, attrs }) {\n const theme = useComponentTheme('alert', props, alertThemeDefaults);\n\n return () => {\n const hasSlot = !!slots.default;\n const slotKey = props.icon || !hasSlot ? 'closeIcon' : 'close';\n // Provide a default aria-label whenever we're in icon-mode\n // (slotless OR explicit `:icon` with custom icon-only slot\n // content like an `<svg>`). In labelled-text mode the slot\n // content already serves as the accessible name.\n const ariaLabel = (attrs['aria-label'] as string | undefined) ??\n (slotKey === 'closeIcon' ? 'Close' : undefined);\n\n return h(\n props.as,\n mergeProps(attrs, {\n type: props.as === 'button' ? 'button' : undefined,\n class: theme.value[slotKey] || undefined,\n 'aria-label': ariaLabel,\n }),\n { default: () => slots.default?.() ?? '×' },\n );\n };\n },\n});\n</script>\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { AspectRatioThemeClasses } from './types';\n\nexport const aspectRatioThemeDefaults: ComponentThemeDefinition<AspectRatioThemeClasses> = { classes: { root: 'vc-aspect-ratio' } };\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { AspectRatio } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { aspectRatioThemeDefaults } from './theme';\nimport type { AspectRatioThemeClasses } from './types';\n\nconst aspectRatioProps = {\n /** Desired ratio — width / height (e.g. `16/9`, `4/3`, `1`). */\n ratio: { type: Number, default: 1 },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<AspectRatioThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type AspectRatioProps = ExtractPublicPropTypes<typeof aspectRatioProps>;\n\nexport default defineComponent({\n name: 'VCAspectRatio',\n inheritAttrs: false,\n props: aspectRatioProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme('aspectRatio', props, aspectRatioThemeDefaults);\n return () => h(AspectRatio, mergeProps(attrs, {\n ratio: props.ratio,\n class: theme.value.root || undefined,\n }), { default: () => slots.default?.() });\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { AspectRatio } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { aspectRatioThemeDefaults } from './theme';\nimport type { AspectRatioThemeClasses } from './types';\n\nconst aspectRatioProps = {\n /** Desired ratio — width / height (e.g. `16/9`, `4/3`, `1`). */\n ratio: { type: Number, default: 1 },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<AspectRatioThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type AspectRatioProps = ExtractPublicPropTypes<typeof aspectRatioProps>;\n\nexport default defineComponent({\n name: 'VCAspectRatio',\n inheritAttrs: false,\n props: aspectRatioProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme('aspectRatio', props, aspectRatioThemeDefaults);\n return () => h(AspectRatio, mergeProps(attrs, {\n ratio: props.ratio,\n class: theme.value.root || undefined,\n }), { default: () => slots.default?.() });\n },\n});\n</script>\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { AvatarThemeClasses } from './types';\n\nexport const avatarThemeDefaults: ComponentThemeDefinition<AvatarThemeClasses> = {\n classes: {\n root: 'vc-avatar',\n image: 'vc-avatar-image',\n fallback: 'vc-avatar-fallback',\n },\n};\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { AvatarFallback, AvatarImage, AvatarRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { avatarThemeDefaults } from './theme';\nimport type { AvatarSize, AvatarThemeClasses } from './types';\n\nexport type AvatarFallbackSlotProps = {\n /** Resolved theme class for the fallback wrapper. */\n class: string;\n};\n\nconst avatarProps = {\n /** Image source. When omitted, the fallback renders immediately. */\n src: { type: String, default: undefined },\n /**\n * Image alt text. Defaults to `''` so the rendered `<img>` always\n * carries the attribute (decorative-image semantics) — pass a\n * meaningful string when the avatar conveys identity.\n */\n alt: { type: String, default: '' },\n /**\n * Delay (ms) before the fallback appears. Useful to avoid a flicker\n * on fast connections — gives the image a brief window to load before\n * the placeholder shows. Forwarded to Reka's `AvatarFallback`.\n *\n * Vuecs convention: keep this at `undefined` rather than mirroring a\n * concrete Reka default. Reka's `AvatarFallback` treats `delayMs: 0`\n * as \"wait forever\" instead of \"render immediately\"; the spread-guard\n * in `setup()` works around that quirk so omitting the prop renders\n * the fallback right away. This is the ONE place where the\n * Reka-wrapping convention's natural-forwarding rule is bent.\n */\n delayMs: { type: Number, default: undefined },\n /**\n * Size variant — resolved by the active theme. `sm` ≈ 32px, `md` ≈\n * 40px (default), `lg` ≈ 56px. For arbitrary pixel sizes, use\n * `themeClass={ root: extend('h-12 w-12') }` instead.\n */\n size: { type: String as PropType<AvatarSize>, default: undefined },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<AvatarThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type AvatarProps = ExtractPublicPropTypes<typeof avatarProps>;\n\nexport default defineComponent({\n name: 'VCAvatar',\n inheritAttrs: false,\n props: avatarProps,\n slots: Object as SlotsType<{\n fallback: AvatarFallbackSlotProps;\n }>,\n setup(props, { attrs, slots }) {\n const themeProps: UseComponentThemeProps<AvatarThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.size !== undefined ? { size: props.size } : {}),\n };\n },\n };\n const theme = useComponentTheme('avatar', themeProps, avatarThemeDefaults);\n return () => {\n const resolved = theme.value;\n const children = [];\n if (props.src) {\n children.push(h(AvatarImage, {\n src: props.src,\n alt: props.alt,\n class: resolved.image || undefined,\n }));\n }\n children.push(h(AvatarFallback, {\n // Reka's AvatarFallback treats `delayMs: 0` as \"wait\n // forever\" — only forward when the consumer set a strictly\n // positive value. Omitted (or 0/negative) → fallback\n // renders immediately.\n ...(typeof props.delayMs === 'number' && props.delayMs > 0 ?\n { delayMs: props.delayMs } :\n {}),\n class: resolved.fallback || undefined,\n }, { default: () => slots.fallback?.({ class: resolved.fallback }) ?? '' }));\n return h(AvatarRoot, mergeProps(attrs, { class: resolved.root || undefined }), { default: () => children });\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { AvatarFallback, AvatarImage, AvatarRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { avatarThemeDefaults } from './theme';\nimport type { AvatarSize, AvatarThemeClasses } from './types';\n\nexport type AvatarFallbackSlotProps = {\n /** Resolved theme class for the fallback wrapper. */\n class: string;\n};\n\nconst avatarProps = {\n /** Image source. When omitted, the fallback renders immediately. */\n src: { type: String, default: undefined },\n /**\n * Image alt text. Defaults to `''` so the rendered `<img>` always\n * carries the attribute (decorative-image semantics) — pass a\n * meaningful string when the avatar conveys identity.\n */\n alt: { type: String, default: '' },\n /**\n * Delay (ms) before the fallback appears. Useful to avoid a flicker\n * on fast connections — gives the image a brief window to load before\n * the placeholder shows. Forwarded to Reka's `AvatarFallback`.\n *\n * Vuecs convention: keep this at `undefined` rather than mirroring a\n * concrete Reka default. Reka's `AvatarFallback` treats `delayMs: 0`\n * as \"wait forever\" instead of \"render immediately\"; the spread-guard\n * in `setup()` works around that quirk so omitting the prop renders\n * the fallback right away. This is the ONE place where the\n * Reka-wrapping convention's natural-forwarding rule is bent.\n */\n delayMs: { type: Number, default: undefined },\n /**\n * Size variant — resolved by the active theme. `sm` ≈ 32px, `md` ≈\n * 40px (default), `lg` ≈ 56px. For arbitrary pixel sizes, use\n * `themeClass={ root: extend('h-12 w-12') }` instead.\n */\n size: { type: String as PropType<AvatarSize>, default: undefined },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<AvatarThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type AvatarProps = ExtractPublicPropTypes<typeof avatarProps>;\n\nexport default defineComponent({\n name: 'VCAvatar',\n inheritAttrs: false,\n props: avatarProps,\n slots: Object as SlotsType<{\n fallback: AvatarFallbackSlotProps;\n }>,\n setup(props, { attrs, slots }) {\n const themeProps: UseComponentThemeProps<AvatarThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.size !== undefined ? { size: props.size } : {}),\n };\n },\n };\n const theme = useComponentTheme('avatar', themeProps, avatarThemeDefaults);\n return () => {\n const resolved = theme.value;\n const children = [];\n if (props.src) {\n children.push(h(AvatarImage, {\n src: props.src,\n alt: props.alt,\n class: resolved.image || undefined,\n }));\n }\n children.push(h(AvatarFallback, {\n // Reka's AvatarFallback treats `delayMs: 0` as \"wait\n // forever\" — only forward when the consumer set a strictly\n // positive value. Omitted (or 0/negative) → fallback\n // renders immediately.\n ...(typeof props.delayMs === 'number' && props.delayMs > 0 ?\n { delayMs: props.delayMs } :\n {}),\n class: resolved.fallback || undefined,\n }, { default: () => slots.fallback?.({ class: resolved.fallback }) ?? '' }));\n return h(AvatarRoot, mergeProps(attrs, { class: resolved.root || undefined }), { default: () => children });\n };\n },\n});\n</script>\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { BadgeThemeClasses } from './types';\n\nexport const badgeThemeDefaults: ComponentThemeDefinition<BadgeThemeClasses> = { classes: { root: 'vc-badge' } };\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { badgeThemeDefaults } from './theme';\nimport type {\n BadgeColor,\n BadgeSize,\n BadgeThemeClasses,\n BadgeVariant,\n} from './types';\n\nconst badgeProps = {\n /** Color variant key — resolved by the active theme. */\n color: { type: String as PropType<BadgeColor>, default: undefined },\n /** Style variant key — resolved by the active theme (e.g. `solid`, `soft`, `outline`). */\n variant: { type: String as PropType<BadgeVariant>, default: undefined },\n /** Size variant key — resolved by the active theme. */\n size: { type: String as PropType<BadgeSize>, default: undefined },\n /** HTML tag to render. */\n tag: { type: String, default: 'span' },\n ...themableProps<BadgeThemeClasses>(),\n};\n\nexport type BadgeProps = ExtractPublicPropTypes<typeof badgeProps>;\n\nexport default defineComponent({\n name: 'VCBadge',\n inheritAttrs: false,\n props: badgeProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'badge',\n useThemeProps(props, 'color', 'variant', 'size'),\n badgeThemeDefaults,\n );\n return () => h(\n props.tag,\n mergeProps(attrs, { class: theme.value.root || undefined }),\n slots.default?.(),\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { badgeThemeDefaults } from './theme';\nimport type {\n BadgeColor,\n BadgeSize,\n BadgeThemeClasses,\n BadgeVariant,\n} from './types';\n\nconst badgeProps = {\n /** Color variant key — resolved by the active theme. */\n color: { type: String as PropType<BadgeColor>, default: undefined },\n /** Style variant key — resolved by the active theme (e.g. `solid`, `soft`, `outline`). */\n variant: { type: String as PropType<BadgeVariant>, default: undefined },\n /** Size variant key — resolved by the active theme. */\n size: { type: String as PropType<BadgeSize>, default: undefined },\n /** HTML tag to render. */\n tag: { type: String, default: 'span' },\n ...themableProps<BadgeThemeClasses>(),\n};\n\nexport type BadgeProps = ExtractPublicPropTypes<typeof badgeProps>;\n\nexport default defineComponent({\n name: 'VCBadge',\n inheritAttrs: false,\n props: badgeProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'badge',\n useThemeProps(props, 'color', 'variant', 'size'),\n badgeThemeDefaults,\n );\n return () => h(\n props.tag,\n mergeProps(attrs, { class: theme.value.root || undefined }),\n slots.default?.(),\n );\n },\n});\n</script>\n","import type { InjectionKey } from 'vue';\nimport { inject, provide } from 'vue';\nimport type { VariantValues } from '@vuecs/core';\n\n/**\n * Context shared from `<VCCard>` to its descendant parts so that the\n * variant axes applied to the root (notably `padding`) propagate\n * automatically to header / body / footer / title / description without\n * the consumer repeating the prop on every child. Per-instance values\n * on a child still win over inherited ones.\n *\n * Optional — children render bare when mounted outside `<VCCard>` (for\n * unit tests or ad-hoc composition).\n */\nexport type CardContext = {\n themeVariant: () => VariantValues | undefined;\n};\n\nconst CARD_CONTEXT_KEY: InjectionKey<CardContext> = Symbol('vcCardContext');\n\nexport function provideCardContext(ctx: CardContext): void {\n provide(CARD_CONTEXT_KEY, ctx);\n}\n\nexport function useCardContext(): CardContext | null {\n return inject(CARD_CONTEXT_KEY, null);\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type {\n CardBodyThemeClasses,\n CardDescriptionThemeClasses,\n CardFooterThemeClasses,\n CardHeaderThemeClasses,\n CardThemeClasses,\n CardTitleThemeClasses,\n} from './types';\n\nexport const cardThemeDefaults: ComponentThemeDefinition<CardThemeClasses> = { classes: { root: 'vc-card' } };\n\nexport const cardHeaderThemeDefaults: ComponentThemeDefinition<CardHeaderThemeClasses> = { classes: { root: 'vc-card-header' } };\n\nexport const cardTitleThemeDefaults: ComponentThemeDefinition<CardTitleThemeClasses> = { classes: { root: 'vc-card-title' } };\n\nexport const cardDescriptionThemeDefaults: ComponentThemeDefinition<CardDescriptionThemeClasses> = { classes: { root: 'vc-card-description' } };\n\nexport const cardBodyThemeDefaults: ComponentThemeDefinition<CardBodyThemeClasses> = { classes: { root: 'vc-card-body' } };\n\nexport const cardFooterThemeDefaults: ComponentThemeDefinition<CardFooterThemeClasses> = { classes: { root: 'vc-card-footer' } };\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { provideCardContext } from './context';\nimport { cardThemeDefaults } from './theme';\nimport type { CardPadding, CardThemeClasses, CardVariant } from './types';\n\nconst cardProps = {\n /** Visual style variant — resolved by the active theme. */\n variant: { type: String as PropType<CardVariant>, default: undefined },\n /** Inner padding scale; propagates to child parts via card context. */\n padding: { type: String as PropType<CardPadding>, default: undefined },\n /** Adds hover / focus styling — useful for link-cards. */\n interactive: { type: Boolean, default: undefined },\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the card root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CardThemeClasses>(),\n};\n\nexport type CardProps = ExtractPublicPropTypes<typeof cardProps>;\n\nexport default defineComponent({\n name: 'VCCard',\n inheritAttrs: false,\n props: cardProps,\n setup(props, { attrs, slots }) {\n const themeProps = useThemeProps(props, 'variant', 'padding', 'interactive');\n const theme = useComponentTheme('card', themeProps, cardThemeDefaults);\n\n provideCardContext({ themeVariant: () => themeProps.themeVariant });\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { provideCardContext } from './context';\nimport { cardThemeDefaults } from './theme';\nimport type { CardPadding, CardThemeClasses, CardVariant } from './types';\n\nconst cardProps = {\n /** Visual style variant — resolved by the active theme. */\n variant: { type: String as PropType<CardVariant>, default: undefined },\n /** Inner padding scale; propagates to child parts via card context. */\n padding: { type: String as PropType<CardPadding>, default: undefined },\n /** Adds hover / focus styling — useful for link-cards. */\n interactive: { type: Boolean, default: undefined },\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the card root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CardThemeClasses>(),\n};\n\nexport type CardProps = ExtractPublicPropTypes<typeof cardProps>;\n\nexport default defineComponent({\n name: 'VCCard',\n inheritAttrs: false,\n props: cardProps,\n setup(props, { attrs, slots }) {\n const themeProps = useThemeProps(props, 'variant', 'padding', 'interactive');\n const theme = useComponentTheme('card', themeProps, cardThemeDefaults);\n\n provideCardContext({ themeVariant: () => themeProps.themeVariant });\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardHeaderThemeDefaults } from './theme';\nimport type { CardHeaderThemeClasses } from './types';\n\nconst cardHeaderProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'header' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardHeaderThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardHeaderProps = ExtractPublicPropTypes<typeof cardHeaderProps>;\n\nexport default defineComponent({\n name: 'VCCardHeader',\n inheritAttrs: false,\n props: cardHeaderProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardHeaderThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardHeader', themeProps, cardHeaderThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardHeaderThemeDefaults } from './theme';\nimport type { CardHeaderThemeClasses } from './types';\n\nconst cardHeaderProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'header' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardHeaderThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardHeaderProps = ExtractPublicPropTypes<typeof cardHeaderProps>;\n\nexport default defineComponent({\n name: 'VCCardHeader',\n inheritAttrs: false,\n props: cardHeaderProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardHeaderThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardHeader', themeProps, cardHeaderThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardTitleThemeDefaults } from './theme';\nimport type { CardTitleThemeClasses } from './types';\n\nconst cardTitleProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'h3' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardTitleThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardTitleProps = ExtractPublicPropTypes<typeof cardTitleProps>;\n\nexport default defineComponent({\n name: 'VCCardTitle',\n inheritAttrs: false,\n props: cardTitleProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardTitleThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardTitle', themeProps, cardTitleThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardTitleThemeDefaults } from './theme';\nimport type { CardTitleThemeClasses } from './types';\n\nconst cardTitleProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'h3' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardTitleThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardTitleProps = ExtractPublicPropTypes<typeof cardTitleProps>;\n\nexport default defineComponent({\n name: 'VCCardTitle',\n inheritAttrs: false,\n props: cardTitleProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardTitleThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardTitle', themeProps, cardTitleThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardDescriptionThemeDefaults } from './theme';\nimport type { CardDescriptionThemeClasses } from './types';\n\nconst cardDescriptionProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'p' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardDescriptionThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardDescriptionProps = ExtractPublicPropTypes<typeof cardDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCCardDescription',\n inheritAttrs: false,\n props: cardDescriptionProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardDescriptionThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardDescription', themeProps, cardDescriptionThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardDescriptionThemeDefaults } from './theme';\nimport type { CardDescriptionThemeClasses } from './types';\n\nconst cardDescriptionProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'p' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardDescriptionThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardDescriptionProps = ExtractPublicPropTypes<typeof cardDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCCardDescription',\n inheritAttrs: false,\n props: cardDescriptionProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardDescriptionThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardDescription', themeProps, cardDescriptionThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardBodyThemeDefaults } from './theme';\nimport type { CardBodyThemeClasses } from './types';\n\nconst cardBodyProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardBodyThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardBodyProps = ExtractPublicPropTypes<typeof cardBodyProps>;\n\nexport default defineComponent({\n name: 'VCCardBody',\n inheritAttrs: false,\n props: cardBodyProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardBodyThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardBody', themeProps, cardBodyThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardBodyThemeDefaults } from './theme';\nimport type { CardBodyThemeClasses } from './types';\n\nconst cardBodyProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardBodyThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardBodyProps = ExtractPublicPropTypes<typeof cardBodyProps>;\n\nexport default defineComponent({\n name: 'VCCardBody',\n inheritAttrs: false,\n props: cardBodyProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardBodyThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardBody', themeProps, cardBodyThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardFooterThemeDefaults } from './theme';\nimport type { CardFooterThemeClasses } from './types';\n\nconst cardFooterProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'footer' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardFooterThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardFooterProps = ExtractPublicPropTypes<typeof cardFooterProps>;\n\nexport default defineComponent({\n name: 'VCCardFooter',\n inheritAttrs: false,\n props: cardFooterProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardFooterThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardFooter', themeProps, cardFooterThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { useCardContext } from './context';\nimport { cardFooterThemeDefaults } from './theme';\nimport type { CardFooterThemeClasses } from './types';\n\nconst cardFooterProps = {\n /** HTML tag to render. Use `:as-child` to compose onto an existing component. */\n as: { type: String, default: 'footer' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<CardFooterThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type CardFooterProps = ExtractPublicPropTypes<typeof cardFooterProps>;\n\nexport default defineComponent({\n name: 'VCCardFooter',\n inheritAttrs: false,\n props: cardFooterProps,\n setup(props, { attrs, slots }) {\n const ctx = useCardContext();\n const themeProps: UseComponentThemeProps<CardFooterThemeClasses> = {\n get themeClass() { return props.themeClass; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('cardFooter', themeProps, cardFooterThemeDefaults);\n\n return () => h(\n Primitive,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type {\n CollapseContentThemeClasses,\n CollapseThemeClasses,\n CollapseTriggerThemeClasses,\n} from './types';\n\nexport const collapseThemeDefaults: ComponentThemeDefinition<CollapseThemeClasses> = { classes: { root: 'vc-collapse' } };\n\nexport const collapseTriggerThemeDefaults: ComponentThemeDefinition<CollapseTriggerThemeClasses> = {\n classes: {\n root: 'vc-collapse-trigger',\n chevron: 'vc-collapse-chevron',\n },\n};\n\nexport const collapseContentThemeDefaults: ComponentThemeDefinition<CollapseContentThemeClasses> = { classes: { root: 'vc-collapse-content' } };\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { CollapsibleRoot } from 'reka-ui';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { collapseThemeDefaults } from './theme';\nimport type { CollapseThemeClasses } from './types';\n\nconst collapseProps = {\n /** Controlled open state. Leave undefined for uncontrolled (driven by `defaultOpen`). */\n open: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n /** Initial open state when `open` is undefined. Reka default: `false`. */\n defaultOpen: { type: Boolean, default: false },\n /** Disable interaction (trigger ignores clicks; pane stays in its current state). */\n disabled: { type: Boolean, default: false },\n /**\n * Unmount the content element when closed. When `false`, the element is\n * kept in the DOM with `hidden` set — useful for preserving state inside\n * the pane (form inputs, animations) across collapse/expand cycles.\n * Reka default: `true`.\n */\n unmountOnHide: { type: Boolean, default: true },\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CollapseThemeClasses>(),\n};\n\nexport type CollapseProps = ExtractPublicPropTypes<typeof collapseProps>;\n\nexport default defineComponent({\n name: 'VCCollapse',\n inheritAttrs: false,\n props: collapseProps,\n emits: ['update:open'],\n setup(props, {\n attrs, \n slots, \n emit, \n }) {\n const theme = useComponentTheme(\n 'collapse',\n useThemeProps(props),\n collapseThemeDefaults,\n );\n\n return () => h(\n CollapsibleRoot,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n open: props.open,\n defaultOpen: props.defaultOpen,\n disabled: props.disabled,\n unmountOnHide: props.unmountOnHide,\n class: theme.value.root || undefined,\n 'onUpdate:open': (open: boolean) => emit('update:open', open),\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { CollapsibleRoot } from 'reka-ui';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { collapseThemeDefaults } from './theme';\nimport type { CollapseThemeClasses } from './types';\n\nconst collapseProps = {\n /** Controlled open state. Leave undefined for uncontrolled (driven by `defaultOpen`). */\n open: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n /** Initial open state when `open` is undefined. Reka default: `false`. */\n defaultOpen: { type: Boolean, default: false },\n /** Disable interaction (trigger ignores clicks; pane stays in its current state). */\n disabled: { type: Boolean, default: false },\n /**\n * Unmount the content element when closed. When `false`, the element is\n * kept in the DOM with `hidden` set — useful for preserving state inside\n * the pane (form inputs, animations) across collapse/expand cycles.\n * Reka default: `true`.\n */\n unmountOnHide: { type: Boolean, default: true },\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CollapseThemeClasses>(),\n};\n\nexport type CollapseProps = ExtractPublicPropTypes<typeof collapseProps>;\n\nexport default defineComponent({\n name: 'VCCollapse',\n inheritAttrs: false,\n props: collapseProps,\n emits: ['update:open'],\n setup(props, {\n attrs, \n slots, \n emit, \n }) {\n const theme = useComponentTheme(\n 'collapse',\n useThemeProps(props),\n collapseThemeDefaults,\n );\n\n return () => h(\n CollapsibleRoot,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n open: props.open,\n defaultOpen: props.defaultOpen,\n disabled: props.disabled,\n unmountOnHide: props.unmountOnHide,\n class: theme.value.root || undefined,\n 'onUpdate:open': (open: boolean) => emit('update:open', open),\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { \n defineComponent, \n h, \n mergeProps, \n resolveComponent, \n} from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { CollapsibleTrigger } from 'reka-ui';\nimport {\n themableProps,\n useComponentDefaults,\n useComponentTheme,\n useThemeProps,\n} from '@vuecs/core';\nimport { collapseTriggerThemeDefaults } from './theme';\nimport type {\n CollapseChevron,\n CollapseTriggerDefaults,\n CollapseTriggerThemeClasses,\n} from './types';\n\nconst collapseTriggerProps = {\n /**\n * Auto-render a rotating chevron next to the consumer's trigger content\n * (`'auto'`, default) or render plain trigger content only (`'none'`).\n * The chevron icon name comes from `ComponentDefaults['collapseTrigger'].chevronIcon`\n * — usually wired by an icon preset (`@vuecs/icons-lucide` ships\n * `'lucide:chevron-down'`).\n */\n chevron: { type: String as PropType<CollapseChevron>, default: undefined },\n /** HTML tag (or component) to render as. Reka default: `'button'`. */\n as: { type: String, default: 'button' },\n /** Render the consumer's slot child as the trigger (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CollapseTriggerThemeClasses>(),\n};\n\nexport type CollapseTriggerProps = ExtractPublicPropTypes<typeof collapseTriggerProps>;\n\nconst collapseTriggerBehavioralDefaults: CollapseTriggerDefaults = { chevronIcon: '' };\n\nexport default defineComponent({\n name: 'VCCollapseTrigger',\n inheritAttrs: false,\n props: collapseTriggerProps,\n setup(props, { attrs, slots }) {\n const themeProps = useThemeProps(props, 'chevron');\n const theme = useComponentTheme('collapseTrigger', themeProps, collapseTriggerThemeDefaults);\n const defaults = useComponentDefaults('collapseTrigger', {}, collapseTriggerBehavioralDefaults);\n\n // Hoisted out of the render fn — resolves once per component\n // instance. `@vuecs/icon` is an optional peer; when not\n // installed, `resolveComponent` returns the lookup string\n // ('VCIcon'), so we cache the boolean check too.\n const VCIcon = resolveComponent('VCIcon');\n const hasIconComponent = typeof VCIcon !== 'string';\n\n return () => {\n const chevron = props.chevron ?? 'auto';\n const { chevronIcon } = defaults.value;\n // Skip the auto-chevron when `asChild` is set: Reka's asChild\n // merges trigger behavior onto the slot's *first* child only.\n // An auto-injected chevron would render as a sibling of that\n // child — outside the interactive element, breaking layout\n // and ARIA semantics. Consumers using `asChild` are expected\n // to render their own icon inside the custom child.\n const showChevron = !props.asChild &&\n chevron === 'auto' &&\n !!chevronIcon &&\n hasIconComponent;\n\n return h(\n CollapsibleTrigger,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n {\n default: () => [\n slots.default?.(),\n showChevron ? h(VCIcon as Component, {\n name: chevronIcon,\n class: theme.value.chevron || undefined,\n 'aria-hidden': 'true',\n }) : null,\n ],\n },\n );\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { \n defineComponent, \n h, \n mergeProps, \n resolveComponent, \n} from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { CollapsibleTrigger } from 'reka-ui';\nimport {\n themableProps,\n useComponentDefaults,\n useComponentTheme,\n useThemeProps,\n} from '@vuecs/core';\nimport { collapseTriggerThemeDefaults } from './theme';\nimport type {\n CollapseChevron,\n CollapseTriggerDefaults,\n CollapseTriggerThemeClasses,\n} from './types';\n\nconst collapseTriggerProps = {\n /**\n * Auto-render a rotating chevron next to the consumer's trigger content\n * (`'auto'`, default) or render plain trigger content only (`'none'`).\n * The chevron icon name comes from `ComponentDefaults['collapseTrigger'].chevronIcon`\n * — usually wired by an icon preset (`@vuecs/icons-lucide` ships\n * `'lucide:chevron-down'`).\n */\n chevron: { type: String as PropType<CollapseChevron>, default: undefined },\n /** HTML tag (or component) to render as. Reka default: `'button'`. */\n as: { type: String, default: 'button' },\n /** Render the consumer's slot child as the trigger (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CollapseTriggerThemeClasses>(),\n};\n\nexport type CollapseTriggerProps = ExtractPublicPropTypes<typeof collapseTriggerProps>;\n\nconst collapseTriggerBehavioralDefaults: CollapseTriggerDefaults = { chevronIcon: '' };\n\nexport default defineComponent({\n name: 'VCCollapseTrigger',\n inheritAttrs: false,\n props: collapseTriggerProps,\n setup(props, { attrs, slots }) {\n const themeProps = useThemeProps(props, 'chevron');\n const theme = useComponentTheme('collapseTrigger', themeProps, collapseTriggerThemeDefaults);\n const defaults = useComponentDefaults('collapseTrigger', {}, collapseTriggerBehavioralDefaults);\n\n // Hoisted out of the render fn — resolves once per component\n // instance. `@vuecs/icon` is an optional peer; when not\n // installed, `resolveComponent` returns the lookup string\n // ('VCIcon'), so we cache the boolean check too.\n const VCIcon = resolveComponent('VCIcon');\n const hasIconComponent = typeof VCIcon !== 'string';\n\n return () => {\n const chevron = props.chevron ?? 'auto';\n const { chevronIcon } = defaults.value;\n // Skip the auto-chevron when `asChild` is set: Reka's asChild\n // merges trigger behavior onto the slot's *first* child only.\n // An auto-injected chevron would render as a sibling of that\n // child — outside the interactive element, breaking layout\n // and ARIA semantics. Consumers using `asChild` are expected\n // to render their own icon inside the custom child.\n const showChevron = !props.asChild &&\n chevron === 'auto' &&\n !!chevronIcon &&\n hasIconComponent;\n\n return h(\n CollapsibleTrigger,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.root || undefined,\n }),\n {\n default: () => [\n slots.default?.(),\n showChevron ? h(VCIcon as Component, {\n name: chevronIcon,\n class: theme.value.chevron || undefined,\n 'aria-hidden': 'true',\n }) : null,\n ],\n },\n );\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { CollapsibleContent } from 'reka-ui';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { collapseContentThemeDefaults } from './theme';\nimport type { CollapseContentThemeClasses } from './types';\n\nconst collapseContentProps = {\n /**\n * Force the content to stay mounted while closed. Use when you need\n * Vue/transition-group control of the unmount cascade. Reka default: `false`.\n */\n forceMount: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the pane root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CollapseContentThemeClasses>(),\n};\n\nexport type CollapseContentProps = ExtractPublicPropTypes<typeof collapseContentProps>;\n\nexport default defineComponent({\n name: 'VCCollapseContent',\n inheritAttrs: false,\n props: collapseContentProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'collapseContent',\n useThemeProps(props),\n collapseContentThemeDefaults,\n );\n\n return () => h(\n CollapsibleContent,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n forceMount: props.forceMount || undefined,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { CollapsibleContent } from 'reka-ui';\nimport { themableProps, useComponentTheme, useThemeProps } from '@vuecs/core';\nimport { collapseContentThemeDefaults } from './theme';\nimport type { CollapseContentThemeClasses } from './types';\n\nconst collapseContentProps = {\n /**\n * Force the content to stay mounted while closed. Use when you need\n * Vue/transition-group control of the unmount cascade. Reka default: `false`.\n */\n forceMount: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: String, default: 'div' },\n /** Render the consumer's slot child as the pane root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n ...themableProps<CollapseContentThemeClasses>(),\n};\n\nexport type CollapseContentProps = ExtractPublicPropTypes<typeof collapseContentProps>;\n\nexport default defineComponent({\n name: 'VCCollapseContent',\n inheritAttrs: false,\n props: collapseContentProps,\n setup(props, { attrs, slots }) {\n const theme = useComponentTheme(\n 'collapseContent',\n useThemeProps(props),\n collapseContentThemeDefaults,\n );\n\n return () => h(\n CollapsibleContent,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n forceMount: props.forceMount || undefined,\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { SeparatorThemeClasses } from './types';\n\nexport const separatorThemeDefaults: ComponentThemeDefinition<SeparatorThemeClasses> = { classes: { root: 'vc-separator' } };\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Separator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { separatorThemeDefaults } from './theme';\nimport type { SeparatorThemeClasses } from './types';\n\nconst separatorProps = {\n /** Layout direction. */\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n /**\n * When `true`, removes the separator from the a11y tree (`role=\"none\"`).\n * Pass `:decorative=\"false\"` to expose it with `role=\"separator\"` +\n * `aria-orientation`.\n *\n * Vuecs convention: defaults to `true` (Reka has no explicit default\n * — undefined falls through to `role=\"separator\"`). Most consumer\n * usages of `<VCSeparator>` are visual dividers, so the safer\n * a11y default is \"decorative\".\n */\n decorative: { type: Boolean, default: true },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<SeparatorThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type SeparatorProps = ExtractPublicPropTypes<typeof separatorProps>;\n\nexport default defineComponent({\n name: 'VCSeparator',\n inheritAttrs: false,\n props: separatorProps,\n setup(props, { attrs }) {\n const theme = useComponentTheme('separator', props, separatorThemeDefaults);\n return () => h(Separator, mergeProps(attrs, {\n orientation: props.orientation,\n decorative: props.decorative,\n class: theme.value.root || undefined,\n }));\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { Separator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { separatorThemeDefaults } from './theme';\nimport type { SeparatorThemeClasses } from './types';\n\nconst separatorProps = {\n /** Layout direction. */\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n /**\n * When `true`, removes the separator from the a11y tree (`role=\"none\"`).\n * Pass `:decorative=\"false\"` to expose it with `role=\"separator\"` +\n * `aria-orientation`.\n *\n * Vuecs convention: defaults to `true` (Reka has no explicit default\n * — undefined falls through to `role=\"separator\"`). Most consumer\n * usages of `<VCSeparator>` are visual dividers, so the safer\n * a11y default is \"decorative\".\n */\n decorative: { type: Boolean, default: true },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<SeparatorThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type SeparatorProps = ExtractPublicPropTypes<typeof separatorProps>;\n\nexport default defineComponent({\n name: 'VCSeparator',\n inheritAttrs: false,\n props: separatorProps,\n setup(props, { attrs }) {\n const theme = useComponentTheme('separator', props, separatorThemeDefaults);\n return () => h(Separator, mergeProps(attrs, {\n orientation: props.orientation,\n decorative: props.decorative,\n class: theme.value.root || undefined,\n }));\n },\n});\n</script>\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { TagThemeClasses, TagsThemeClasses } from './types';\n\nexport const tagThemeDefaults: ComponentThemeDefinition<TagThemeClasses> = {\n classes: {\n root: 'vc-tag',\n icon: 'vc-tag-icon',\n remove: 'vc-tag-remove',\n },\n};\n\nexport const tagsThemeDefaults: ComponentThemeDefinition<TagsThemeClasses> = {\n classes: {\n root: 'vc-tags',\n item: 'vc-tags-item',\n },\n};\n","<script lang=\"ts\">\nimport { \n defineComponent, \n h, \n mergeProps, \n resolveComponent, \n} from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { tagThemeDefaults } from './theme';\nimport type { TagSize, TagThemeClasses } from './types';\n\nexport type TagSlotProps = {\n /** Resolved theme class for the matching slot. */\n class: string;\n};\n\nexport type TagRemoveSlotProps = TagSlotProps & {\n /** Invoke to fire the chip's `remove` event with its bound value. */\n remove: () => void;\n};\n\nexport type TagDefaultSlotProps = {\n /** Resolved label string (`label ?? String(value) ?? ''`). */\n label: string;\n};\n\nconst tagProps = {\n /** Bound value — emitted on remove, also used by `<VCTags>` as the chip key. */\n value: { type: [String, Number] as PropType<string | number>, default: undefined },\n /** Display label. Default slot wins if both are passed. */\n label: { type: String, default: undefined },\n /** Iconify-style icon name forwarded to the leading `icon` slot. */\n icon: { type: String, default: undefined },\n /** When `true`, renders the trailing remove button. */\n removable: { type: Boolean, default: false },\n /** Size variant key — resolved by the active theme. */\n size: { type: String as PropType<TagSize>, default: undefined },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<TagThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type TagProps = ExtractPublicPropTypes<typeof tagProps>;\n\nexport default defineComponent({\n name: 'VCTag',\n inheritAttrs: false,\n props: tagProps,\n emits: ['remove'],\n slots: Object as SlotsType<{\n default: TagDefaultSlotProps;\n icon: TagSlotProps;\n remove: TagRemoveSlotProps;\n }>,\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n // Resolve `<VCIcon>` once at setup. `resolveComponent`\n // returns the literal lookup string when `@vuecs/icon` isn't\n // installed (optional peer); guard so the bare `:icon=\"...\"`\n // path falls back to the raw text content instead of\n // rendering an unknown `<VCIcon>` element.\n const VCIcon = resolveComponent('VCIcon');\n const hasIconComponent = typeof VCIcon !== 'string';\n const themeProps: UseComponentThemeProps<TagThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.size !== undefined ? { size: props.size } : {}),\n };\n },\n };\n const theme = useComponentTheme('tag', themeProps, tagThemeDefaults);\n return () => {\n const resolved = theme.value;\n const label = props.label ?? (props.value !== undefined ? String(props.value) : '');\n const children = [];\n\n if (props.icon || slots.icon) {\n const iconSlot = slots.icon;\n // Slot wins. Otherwise mount `<VCIcon>` if available;\n // when `@vuecs/icon` isn't installed (`VCIcon` is the\n // raw lookup string), render the icon name as plain\n // text so the chip is still visually distinct rather\n // than crashing with an unknown component error.\n let iconNode: unknown;\n if (iconSlot) iconNode = iconSlot({ class: resolved.icon });\n else if (hasIconComponent) iconNode = [h(VCIcon, { name: props.icon })];\n else iconNode = [props.icon];\n children.push(h('span', { class: resolved.icon || undefined }, iconNode as never));\n }\n\n children.push(slots.default ?\n slots.default({ label }) :\n [label]);\n\n if (props.removable) {\n const remove = () => emit('remove', props.value);\n children.push(slots.remove ?\n slots.remove({ class: resolved.remove, remove }) :\n h('button', {\n type: 'button',\n 'aria-label': label ? `Remove ${label}` : 'Remove',\n class: resolved.remove || undefined,\n onClick: (event: Event) => {\n event.stopPropagation();\n remove();\n },\n }, '×'));\n }\n\n return h('span', mergeProps(attrs, { class: resolved.root || undefined }), children);\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { \n defineComponent, \n h, \n mergeProps, \n resolveComponent, \n} from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type {\n ThemeClassesOverride,\n UseComponentThemeProps,\n VariantValues,\n} from '@vuecs/core';\nimport { tagThemeDefaults } from './theme';\nimport type { TagSize, TagThemeClasses } from './types';\n\nexport type TagSlotProps = {\n /** Resolved theme class for the matching slot. */\n class: string;\n};\n\nexport type TagRemoveSlotProps = TagSlotProps & {\n /** Invoke to fire the chip's `remove` event with its bound value. */\n remove: () => void;\n};\n\nexport type TagDefaultSlotProps = {\n /** Resolved label string (`label ?? String(value) ?? ''`). */\n label: string;\n};\n\nconst tagProps = {\n /** Bound value — emitted on remove, also used by `<VCTags>` as the chip key. */\n value: { type: [String, Number] as PropType<string | number>, default: undefined },\n /** Display label. Default slot wins if both are passed. */\n label: { type: String, default: undefined },\n /** Iconify-style icon name forwarded to the leading `icon` slot. */\n icon: { type: String, default: undefined },\n /** When `true`, renders the trailing remove button. */\n removable: { type: Boolean, default: false },\n /** Size variant key — resolved by the active theme. */\n size: { type: String as PropType<TagSize>, default: undefined },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<TagThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type TagProps = ExtractPublicPropTypes<typeof tagProps>;\n\nexport default defineComponent({\n name: 'VCTag',\n inheritAttrs: false,\n props: tagProps,\n emits: ['remove'],\n slots: Object as SlotsType<{\n default: TagDefaultSlotProps;\n icon: TagSlotProps;\n remove: TagRemoveSlotProps;\n }>,\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n // Resolve `<VCIcon>` once at setup. `resolveComponent`\n // returns the literal lookup string when `@vuecs/icon` isn't\n // installed (optional peer); guard so the bare `:icon=\"...\"`\n // path falls back to the raw text content instead of\n // rendering an unknown `<VCIcon>` element.\n const VCIcon = resolveComponent('VCIcon');\n const hasIconComponent = typeof VCIcon !== 'string';\n const themeProps: UseComponentThemeProps<TagThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.size !== undefined ? { size: props.size } : {}),\n };\n },\n };\n const theme = useComponentTheme('tag', themeProps, tagThemeDefaults);\n return () => {\n const resolved = theme.value;\n const label = props.label ?? (props.value !== undefined ? String(props.value) : '');\n const children = [];\n\n if (props.icon || slots.icon) {\n const iconSlot = slots.icon;\n // Slot wins. Otherwise mount `<VCIcon>` if available;\n // when `@vuecs/icon` isn't installed (`VCIcon` is the\n // raw lookup string), render the icon name as plain\n // text so the chip is still visually distinct rather\n // than crashing with an unknown component error.\n let iconNode: unknown;\n if (iconSlot) iconNode = iconSlot({ class: resolved.icon });\n else if (hasIconComponent) iconNode = [h(VCIcon, { name: props.icon })];\n else iconNode = [props.icon];\n children.push(h('span', { class: resolved.icon || undefined }, iconNode as never));\n }\n\n children.push(slots.default ?\n slots.default({ label }) :\n [label]);\n\n if (props.removable) {\n const remove = () => emit('remove', props.value);\n children.push(slots.remove ?\n slots.remove({ class: resolved.remove, remove }) :\n h('button', {\n type: 'button',\n 'aria-label': label ? `Remove ${label}` : 'Remove',\n class: resolved.remove || undefined,\n onClick: (event: Event) => {\n event.stopPropagation();\n remove();\n },\n }, '×'));\n }\n\n return h('span', mergeProps(attrs, { class: resolved.root || undefined }), children);\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport VCTag from './Tag.vue';\nimport { tagsThemeDefaults } from './theme';\nimport type { TagItem, TagSize, TagsThemeClasses } from './types';\n\nexport type TagsItem = TagItem | string | number;\n\nexport type TagsSlotProps = {\n item: TagItem;\n index: number;\n /** Resolved per-item wrapper class. */\n class: string;\n};\n\nconst tagsProps = {\n /**\n * Items to render. Strings/numbers are coerced to `{ value, label: String(value) }`.\n * Objects follow the `TagItem` shape (structurally compatible with `FormOption`).\n */\n items: { type: Array as PropType<TagsItem[]>, default: () => [] },\n /** When `true`, every chip renders its remove button (per-item `disabled` opts out). */\n removable: { type: Boolean, default: false },\n /** Default size forwarded to every chip; per-item `size` overrides. */\n size: { type: String as PropType<TagSize>, default: undefined },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<TagsThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type TagsProps = ExtractPublicPropTypes<typeof tagsProps>;\n\nfunction normalize(item: TagsItem): TagItem {\n if (typeof item === 'string' || typeof item === 'number') {\n return { value: item, label: String(item) };\n }\n return item;\n}\n\nexport default defineComponent({\n name: 'VCTags',\n inheritAttrs: false,\n props: tagsProps,\n emits: ['remove'],\n slots: Object as SlotsType<{\n item: TagsSlotProps;\n }>,\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n const theme = useComponentTheme('tags', props, tagsThemeDefaults);\n return () => {\n const resolved = theme.value;\n const children = props.items.map((raw, index) => {\n const item = normalize(raw);\n if (slots.item) {\n return slots.item({\n item,\n index,\n class: resolved.item,\n });\n }\n return h(VCTag, {\n key: item.value,\n value: item.value,\n label: item.label,\n icon: item.icon,\n size: item.size ?? props.size,\n removable: props.removable && !item.disabled,\n class: resolved.item || undefined,\n onRemove: (value: string | number | undefined) => emit('remove', value, item),\n });\n });\n return h('div', mergeProps(attrs, { class: resolved.root || undefined }), children);\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport VCTag from './Tag.vue';\nimport { tagsThemeDefaults } from './theme';\nimport type { TagItem, TagSize, TagsThemeClasses } from './types';\n\nexport type TagsItem = TagItem | string | number;\n\nexport type TagsSlotProps = {\n item: TagItem;\n index: number;\n /** Resolved per-item wrapper class. */\n class: string;\n};\n\nconst tagsProps = {\n /**\n * Items to render. Strings/numbers are coerced to `{ value, label: String(value) }`.\n * Objects follow the `TagItem` shape (structurally compatible with `FormOption`).\n */\n items: { type: Array as PropType<TagsItem[]>, default: () => [] },\n /** When `true`, every chip renders its remove button (per-item `disabled` opts out). */\n removable: { type: Boolean, default: false },\n /** Default size forwarded to every chip; per-item `size` overrides. */\n size: { type: String as PropType<TagSize>, default: undefined },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<TagsThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type TagsProps = ExtractPublicPropTypes<typeof tagsProps>;\n\nfunction normalize(item: TagsItem): TagItem {\n if (typeof item === 'string' || typeof item === 'number') {\n return { value: item, label: String(item) };\n }\n return item;\n}\n\nexport default defineComponent({\n name: 'VCTags',\n inheritAttrs: false,\n props: tagsProps,\n emits: ['remove'],\n slots: Object as SlotsType<{\n item: TagsSlotProps;\n }>,\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n const theme = useComponentTheme('tags', props, tagsThemeDefaults);\n return () => {\n const resolved = theme.value;\n const children = props.items.map((raw, index) => {\n const item = normalize(raw);\n if (slots.item) {\n return slots.item({\n item,\n index,\n class: resolved.item,\n });\n }\n return h(VCTag, {\n key: item.value,\n value: item.value,\n label: item.label,\n icon: item.icon,\n size: item.size ?? props.size,\n removable: props.removable && !item.disabled,\n class: resolved.item || undefined,\n onRemove: (value: string | number | undefined) => emit('remove', value, item),\n });\n });\n return h('div', mergeProps(attrs, { class: resolved.root || undefined }), children);\n };\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { VisuallyHidden } from 'reka-ui';\n\nconst visuallyHiddenProps = {\n /** HTML tag to render. */\n as: { type: String, default: 'span' },\n};\n\nexport type VisuallyHiddenProps = ExtractPublicPropTypes<typeof visuallyHiddenProps>;\n\nexport default defineComponent({\n name: 'VCVisuallyHidden',\n inheritAttrs: false,\n props: visuallyHiddenProps,\n setup(props, { attrs, slots }) {\n return () => h(\n VisuallyHidden,\n mergeProps(attrs, { as: props.as }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes } from 'vue';\nimport { VisuallyHidden } from 'reka-ui';\n\nconst visuallyHiddenProps = {\n /** HTML tag to render. */\n as: { type: String, default: 'span' },\n};\n\nexport type VisuallyHiddenProps = ExtractPublicPropTypes<typeof visuallyHiddenProps>;\n\nexport default defineComponent({\n name: 'VCVisuallyHidden',\n inheritAttrs: false,\n props: visuallyHiddenProps,\n setup(props, { attrs, slots }) {\n return () => h(\n VisuallyHidden,\n mergeProps(attrs, { as: props.as }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","import type { App, Plugin } from 'vue';\nimport { installDefaultsManager, installThemeManager } from '@vuecs/core';\nimport type { CoreOptions } from '@vuecs/core';\n\nimport '../assets/alert.css';\nimport '../assets/aspect-ratio.css';\nimport '../assets/avatar.css';\nimport '../assets/badge.css';\nimport '../assets/card.css';\nimport '../assets/collapse.css';\nimport '../assets/separator.css';\nimport '../assets/tag.css';\nimport './vue';\n\nimport {\n VCAlert,\n VCAlertClose,\n VCAlertDescription,\n VCAlertTitle,\n VCAspectRatio,\n VCAvatar,\n VCBadge,\n VCCard,\n VCCardBody,\n VCCardDescription,\n VCCardFooter,\n VCCardHeader,\n VCCardTitle,\n VCCollapse,\n VCCollapseContent,\n VCCollapseTrigger,\n VCSeparator,\n VCTag,\n VCTags,\n VCVisuallyHidden,\n} from './components';\n\nexport * from './components';\n\nexport type Options = CoreOptions;\n\nexport function install(app: App, options: Options = {}): void {\n installThemeManager(app, options);\n installDefaultsManager(app, options);\n\n Object.entries({\n VCSeparator,\n VCTag,\n VCTags,\n VCAvatar,\n VCAspectRatio,\n VCVisuallyHidden,\n VCBadge,\n VCCard,\n VCCardHeader,\n VCCardTitle,\n VCCardDescription,\n VCCardBody,\n VCCardFooter,\n VCCollapse,\n VCCollapseTrigger,\n VCCollapseContent,\n VCAlert,\n VCAlertTitle,\n VCAlertDescription,\n VCAlertClose,\n }).forEach(([name, component]) => {\n app.component(name, component);\n });\n}\n\nexport default { install } satisfies Plugin<[Options?]>;\n"],"mappings":"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"}
package/dist/style.css ADDED
@@ -0,0 +1,213 @@
1
+ .vc-alert {
2
+ align-items: flex-start;
3
+ gap: .75rem;
4
+ display: flex;
5
+ position: relative;
6
+ }
7
+
8
+ .vc-alert-icon {
9
+ flex-shrink: 0;
10
+ justify-content: center;
11
+ align-items: center;
12
+ margin-top: .125rem;
13
+ display: inline-flex;
14
+ }
15
+
16
+ .vc-alert-content {
17
+ flex-direction: column;
18
+ flex: auto;
19
+ gap: .25rem;
20
+ min-width: 0;
21
+ display: flex;
22
+ }
23
+
24
+ .vc-alert-title {
25
+ margin: 0;
26
+ font-weight: 600;
27
+ line-height: 1.3;
28
+ }
29
+
30
+ .vc-alert-description {
31
+ margin: 0;
32
+ line-height: 1.45;
33
+ }
34
+
35
+ .vc-alert-close-icon {
36
+ cursor: pointer;
37
+ border-radius: var(--vc-radius-sm, .25rem);
38
+ background: none;
39
+ border: 0;
40
+ justify-content: center;
41
+ align-items: center;
42
+ padding: .25rem;
43
+ line-height: 1;
44
+ display: inline-flex;
45
+ position: absolute;
46
+ top: .5rem;
47
+ right: .5rem;
48
+ }
49
+
50
+ .vc-alert-close-icon:focus-visible {
51
+ outline-offset: 2px;
52
+ outline: 2px solid;
53
+ }
54
+
55
+ .vc-alert-close {
56
+ cursor: pointer;
57
+ background: none;
58
+ border: 0;
59
+ }
60
+
61
+ .vc-alert-close:focus-visible {
62
+ outline-offset: 2px;
63
+ outline: 2px solid;
64
+ }
65
+ .vc-aspect-ratio > * {
66
+ width: 100%;
67
+ height: 100%;
68
+ display: block;
69
+ }
70
+ .vc-avatar {
71
+ user-select: none;
72
+ vertical-align: middle;
73
+ border-radius: 9999px;
74
+ justify-content: center;
75
+ align-items: center;
76
+ width: 2.5rem;
77
+ height: 2.5rem;
78
+ display: inline-flex;
79
+ overflow: hidden;
80
+ }
81
+
82
+ .vc-avatar-image {
83
+ object-fit: cover;
84
+ width: 100%;
85
+ height: 100%;
86
+ }
87
+
88
+ .vc-avatar-fallback {
89
+ justify-content: center;
90
+ align-items: center;
91
+ width: 100%;
92
+ height: 100%;
93
+ font-size: .875rem;
94
+ font-weight: 500;
95
+ line-height: 1;
96
+ display: inline-flex;
97
+ }
98
+
99
+ .vc-avatar-sm {
100
+ width: 2rem;
101
+ height: 2rem;
102
+ }
103
+
104
+ .vc-avatar-md {
105
+ width: 2.5rem;
106
+ height: 2.5rem;
107
+ }
108
+
109
+ .vc-avatar-lg {
110
+ width: 3.5rem;
111
+ height: 3.5rem;
112
+ }
113
+ .vc-badge {
114
+ border-radius: 9999px;
115
+ align-items: center;
116
+ gap: .25rem;
117
+ padding: .125rem .5rem;
118
+ font-size: .75rem;
119
+ font-weight: 500;
120
+ line-height: 1.25;
121
+ display: inline-flex;
122
+ }
123
+ .vc-card {
124
+ box-sizing: border-box;
125
+ flex-direction: column;
126
+ display: flex;
127
+ }
128
+
129
+ .vc-card-header, .vc-card-body, .vc-card-footer {
130
+ box-sizing: border-box;
131
+ display: block;
132
+ }
133
+
134
+ .vc-card-header {
135
+ flex-direction: column;
136
+ gap: .25rem;
137
+ display: flex;
138
+ }
139
+
140
+ .vc-card-title {
141
+ margin: 0;
142
+ font-weight: 600;
143
+ line-height: 1.25;
144
+ }
145
+
146
+ .vc-card-description {
147
+ margin: 0;
148
+ line-height: 1.4;
149
+ }
150
+ .vc-collapse-chevron {
151
+ transition: transform .2s;
152
+ }
153
+
154
+ [data-state="open"] > .vc-collapse-chevron {
155
+ transform: rotate(180deg);
156
+ }
157
+ .vc-separator {
158
+ background-color: var(--vc-color-border, #e5e7eb);
159
+ border: 0;
160
+ flex-shrink: 0;
161
+ }
162
+
163
+ .vc-separator[data-orientation="horizontal"] {
164
+ width: 100%;
165
+ height: 1px;
166
+ }
167
+
168
+ .vc-separator[data-orientation="vertical"] {
169
+ align-self: stretch;
170
+ width: 1px;
171
+ height: 100%;
172
+ }
173
+ .vc-tag {
174
+ border-radius: 9999px;
175
+ align-items: center;
176
+ gap: .25rem;
177
+ padding: .125rem .5rem;
178
+ font-size: .75rem;
179
+ line-height: 1.25;
180
+ display: inline-flex;
181
+ }
182
+
183
+ .vc-tag-icon {
184
+ align-items: center;
185
+ display: inline-flex;
186
+ }
187
+
188
+ .vc-tag-remove {
189
+ -webkit-appearance: none;
190
+ appearance: none;
191
+ width: 1em;
192
+ height: 1em;
193
+ color: inherit;
194
+ cursor: pointer;
195
+ background-color: #0000;
196
+ border: 0;
197
+ border-radius: 9999px;
198
+ justify-content: center;
199
+ align-items: center;
200
+ padding: 0;
201
+ line-height: 1;
202
+ display: inline-flex;
203
+ }
204
+
205
+ .vc-tag-remove:hover {
206
+ background-color: color-mix(in srgb, currentColor 15%, transparent);
207
+ }
208
+
209
+ .vc-tags {
210
+ flex-wrap: wrap;
211
+ gap: .375rem;
212
+ display: flex;
213
+ }
package/dist/vue.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ import type VCAlert from './components/alert/Alert.vue';
2
+ import type VCAlertClose from './components/alert/AlertClose.vue';
3
+ import type VCAlertDescription from './components/alert/AlertDescription.vue';
4
+ import type VCAlertTitle from './components/alert/AlertTitle.vue';
5
+ import type VCAspectRatio from './components/aspect-ratio/AspectRatio.vue';
6
+ import type VCAvatar from './components/avatar/Avatar.vue';
7
+ import type VCBadge from './components/badge/Badge.vue';
8
+ import type VCCard from './components/card/Card.vue';
9
+ import type VCCardBody from './components/card/CardBody.vue';
10
+ import type VCCardDescription from './components/card/CardDescription.vue';
11
+ import type VCCardFooter from './components/card/CardFooter.vue';
12
+ import type VCCardHeader from './components/card/CardHeader.vue';
13
+ import type VCCardTitle from './components/card/CardTitle.vue';
14
+ import type VCCollapse from './components/collapse/Collapse.vue';
15
+ import type VCCollapseContent from './components/collapse/CollapseContent.vue';
16
+ import type VCCollapseTrigger from './components/collapse/CollapseTrigger.vue';
17
+ import type VCSeparator from './components/separator/Separator.vue';
18
+ import type VCTag from './components/tag/Tag.vue';
19
+ import type VCTags from './components/tag/Tags.vue';
20
+ import type VCVisuallyHidden from './components/visually-hidden/VisuallyHidden.vue';
21
+ declare module '@vue/runtime-core' {
22
+ interface GlobalComponents {
23
+ VCSeparator: typeof VCSeparator;
24
+ VCTag: typeof VCTag;
25
+ VCTags: typeof VCTags;
26
+ VCAvatar: typeof VCAvatar;
27
+ VCAspectRatio: typeof VCAspectRatio;
28
+ VCVisuallyHidden: typeof VCVisuallyHidden;
29
+ VCBadge: typeof VCBadge;
30
+ VCCard: typeof VCCard;
31
+ VCCardHeader: typeof VCCardHeader;
32
+ VCCardTitle: typeof VCCardTitle;
33
+ VCCardDescription: typeof VCCardDescription;
34
+ VCCardBody: typeof VCCardBody;
35
+ VCCardFooter: typeof VCCardFooter;
36
+ VCCollapse: typeof VCCollapse;
37
+ VCCollapseTrigger: typeof VCCollapseTrigger;
38
+ VCCollapseContent: typeof VCCollapseContent;
39
+ VCAlert: typeof VCAlert;
40
+ VCAlertTitle: typeof VCAlertTitle;
41
+ VCAlertDescription: typeof VCAlertDescription;
42
+ VCAlertClose: typeof VCAlertClose;
43
+ }
44
+ }
45
+ //# sourceMappingURL=vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../src/vue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,kBAAkB,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,YAAY,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,aAAa,MAAM,2CAA2C,CAAC;AAC3E,OAAO,KAAK,QAAQ,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,iBAAiB,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,YAAY,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,YAAY,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,WAAW,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,iBAAiB,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,iBAAiB,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,WAAW,MAAM,sCAAsC,CAAC;AACpE,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,gBAAgB,MAAM,iDAAiD,CAAC;AAEpF,OAAO,QAAQ,mBAAmB,CAAC;IAC/B,UAAiB,gBAAgB;QAC7B,WAAW,EAAE,OAAO,WAAW,CAAC;QAChC,KAAK,EAAE,OAAO,KAAK,CAAC;QACpB,MAAM,EAAE,OAAO,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAO,QAAQ,CAAC;QAC1B,aAAa,EAAE,OAAO,aAAa,CAAC;QACpC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;QAC1C,OAAO,EAAE,OAAO,OAAO,CAAC;QACxB,MAAM,EAAE,OAAO,MAAM,CAAC;QACtB,YAAY,EAAE,OAAO,YAAY,CAAC;QAClC,WAAW,EAAE,OAAO,WAAW,CAAC;QAChC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;QAC5C,UAAU,EAAE,OAAO,UAAU,CAAC;QAC9B,YAAY,EAAE,OAAO,YAAY,CAAC;QAClC,UAAU,EAAE,OAAO,UAAU,CAAC;QAC9B,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;QAC5C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;QAC5C,OAAO,EAAE,OAAO,OAAO,CAAC;QACxB,YAAY,EAAE,OAAO,YAAY,CAAC;QAClC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;QAC9C,YAAY,EAAE,OAAO,YAAY,CAAC;KACrC;CACJ"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@vuecs/elements",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Atomic, presentation-only UI elements for vuecs (Separator, Tag, Tags, Avatar, AspectRatio, VisuallyHidden, Badge).",
6
+ "exports": {
7
+ "./package.json": "./package.json",
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "style": "./dist/style.css",
11
+ "import": "./dist/index.mjs"
12
+ },
13
+ "./style.css": "./dist/style.css",
14
+ "./dist/style.css": "./dist/style.css"
15
+ },
16
+ "style": "./dist/style.css",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "keywords": [
21
+ "vue",
22
+ "vuecs",
23
+ "elements",
24
+ "tag",
25
+ "badge",
26
+ "avatar",
27
+ "separator",
28
+ "aspect-ratio",
29
+ "reka-ui"
30
+ ],
31
+ "author": {
32
+ "name": "Peter Placzek",
33
+ "email": "contact@tada5hi.net",
34
+ "url": "https://tada5hi.net"
35
+ },
36
+ "license": "Apache-2.0",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/tada5hi/vuecs.git",
40
+ "directory": "packages/elements"
41
+ },
42
+ "scripts": {
43
+ "build:js": "tsdown",
44
+ "build:types": "vue-tsc --declaration --emitDeclarationOnly -p tsconfig.build.json",
45
+ "build": "rimraf dist && npm run build:js && npm run build:types",
46
+ "test": "vitest --config test/vitest.config.ts --run",
47
+ "test:coverage": "vitest --config test/vitest.config.ts --run --coverage"
48
+ },
49
+ "dependencies": {
50
+ "reka-ui": "^2.9.7"
51
+ },
52
+ "devDependencies": {
53
+ "@vue/test-utils": "^2.4.6",
54
+ "@vuecs/core": "^3.0.0",
55
+ "jsdom": "^29.0.2",
56
+ "vue": "^3.5.34"
57
+ },
58
+ "peerDependencies": {
59
+ "@vuecs/core": "^3.0.0",
60
+ "vue": "^3.x"
61
+ },
62
+ "engines": {
63
+ "node": ">=22.0.0"
64
+ },
65
+ "publishConfig": {
66
+ "access": "public"
67
+ }
68
+ }