{"version":3,"file":"index.mjs","names":["inject","inject","inject","inject"],"sources":["../src/registry/module.ts","../src/registry/singleton.ts","../src/components/breadcrumb/context.ts","../src/components/breadcrumb/defaults.ts","../src/components/breadcrumb/render-icon.ts","../src/components/breadcrumb/theme.ts","../src/components/breadcrumb/use-breadcrumb-from-registry.ts","../src/components/breadcrumb/use-breadcrumb-leaf.ts","../src/components/breadcrumb/BreadcrumbList.vue","../src/components/breadcrumb/BreadcrumbList.vue","../src/components/breadcrumb/BreadcrumbItem.vue","../src/components/breadcrumb/BreadcrumbItem.vue","../src/components/breadcrumb/BreadcrumbLink.vue","../src/components/breadcrumb/BreadcrumbLink.vue","../src/components/breadcrumb/BreadcrumbPage.vue","../src/components/breadcrumb/BreadcrumbPage.vue","../src/components/breadcrumb/BreadcrumbSeparator.vue","../src/components/breadcrumb/BreadcrumbSeparator.vue","../src/components/breadcrumb/BreadcrumbEllipsis.vue","../src/components/breadcrumb/BreadcrumbEllipsis.vue","../src/components/breadcrumb/Breadcrumb.vue","../src/components/breadcrumb/Breadcrumb.vue","../src/components/breadcrumb/use-breadcrumb-items.ts","../src/components/breadcrumb/use-breadcrumb.ts","../src/helpers/match.ts","../src/helpers/normalize.ts","../src/helpers/trace.ts","../src/helpers/reset.ts","../src/helpers/submenu.ts","../src/helpers/trail.ts","../src/helpers/url.ts","../src/components/items/theme.ts","../src/components/select-context.ts","../src/components/item/module.ts","../src/components/items/module.ts","../src/components/stepper/context.ts","../src/components/stepper/theme.ts","../src/components/stepper/Stepper.vue","../src/components/stepper/Stepper.vue","../src/components/stepper/StepperItem.vue","../src/components/stepper/StepperItem.vue","../src/components/stepper/StepperTrigger.vue","../src/components/stepper/StepperTrigger.vue","../src/components/stepper/StepperIndicator.vue","../src/components/stepper/StepperIndicator.vue","../src/components/stepper/StepperTitle.vue","../src/components/stepper/StepperTitle.vue","../src/components/stepper/StepperDescription.vue","../src/components/stepper/StepperDescription.vue","../src/components/stepper/StepperSeparator.vue","../src/components/stepper/StepperSeparator.vue","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { computed, ref, shallowReactive } from 'vue';\nimport type { NavigationItemNormalized } from '../types';\nimport type { NavigationRegistryEntry } from './types';\n\ntype Occupant = {\n    token: symbol;\n    entry: NavigationRegistryEntry;\n};\n\nfunction createEmptyEntry(): NavigationRegistryEntry {\n    const items = ref<NavigationItemNormalized[]>([]);\n    return {\n        items,\n        active: computed(() => []),\n        activeTrail: computed(() => []),\n    };\n}\n\ntype NavigationRegistryUnregisterFn = () => void;\n\n/**\n * Reactive, app-wide navigation registry. `<VCNavItems registry>`\n * publishes its resolved output here under a `registry-id`; other navs\n * read it reactively + empty-safe via the resolver context's\n * `registry(id)`.\n *\n * The backing map is `shallowReactive`, so membership changes\n * (register + the returned unregister closure) are tracked dependencies\n * — a consumer reading `get(id)` inside a `computed` / `watchEffect`\n * re-runs when the id's occupancy flips.\n */\nexport class NavigationRegistry {\n    protected map = shallowReactive(\n        new Map<string, Occupant>(),\n    );\n\n    /**\n     * Stable empty entries handed out for absent ids, memoized per id so\n     * the SAME reactive handle is returned every call — a consumer\n     * subscribed to an absent id keeps its dependency and lights up the\n     * moment an occupant registers.\n     */\n    protected empties = new Map<string, NavigationRegistryEntry>();\n\n    /**\n     * Claim `id`. Last-wins: a newer occupant replaces the current one\n     * (dev warning on collision). Returns a token-guarded unregister\n     * closure: it releases `id` ONLY if this registration is still the\n     * occupant. During a route handoff (Vue mounts the new page before\n     * unmounting the old) the departing nav's closure holds a stale token\n     * and cannot evict the incoming occupant.\n     */\n    register(id: string, entry: NavigationRegistryEntry): NavigationRegistryUnregisterFn {\n        if (this.map.has(id)) {\n            // eslint-disable-next-line no-console\n            console.warn(`[vuecs] navigation registry id \"${id}\" reassigned to a new occupant.`);\n        }\n\n        const token = Symbol('vc-nav-registry-token');\n\n        this.map.set(id, { token, entry });\n\n        return () => {\n            const occupant = this.map.get(id);\n            if (occupant && occupant.token === token) {\n                this.map.delete(id);\n            }\n        };\n    }\n\n    /** Reactive, empty-safe read. Never returns `undefined`. */\n    get<META = any>(id: string): NavigationRegistryEntry<META> {\n        const occupant = this.map.get(id);\n        if (occupant) {\n            return occupant.entry as NavigationRegistryEntry<META>;\n        }\n\n        let empty = this.empties.get(id);\n        if (!empty) {\n            empty = createEmptyEntry();\n            this.empties.set(id, empty);\n        }\n\n        return empty as NavigationRegistryEntry<META>;\n    }\n\n    /** True when an occupant currently holds `id`. */\n    has(id: string): boolean {\n        return this.map.has(id);\n    }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { inject, provide } from '@vuecs/core';\nimport type { App } from 'vue';\nimport { NavigationRegistry } from './module';\n\nconst sym = Symbol.for('VCNavigationRegistry');\n\nexport function tryInjectNavigationRegistry(app?: App): NavigationRegistry | undefined {\n    return inject<NavigationRegistry>(sym, app);\n}\n\nexport function injectNavigationRegistry(app?: App): NavigationRegistry {\n    const instance = tryInjectNavigationRegistry(app);\n    if (!instance) {\n        throw new Error('A navigation registry has not been provided.');\n    }\n\n    return instance;\n}\n\nexport function provideNavigationRegistry(\n    registry: NavigationRegistry = new NavigationRegistry(),\n    app?: App,\n): NavigationRegistry {\n    // `provide()` is a no-op when a registry is already present (install-order\n    // safety). Return the *already provided* registry so callers never get an\n    // orphan instance that the navigation components won't inject.\n    const existing = tryInjectNavigationRegistry(app);\n    if (existing) {\n        return existing;\n    }\n\n    provide(sym, registry, app);\n    return registry;\n}\n","import type { InjectionKey } from 'vue';\nimport { inject, provide } from 'vue';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport type { BreadcrumbLeafHandle, BreadcrumbThemeClasses } from './types';\n\n/**\n * Context shared from `<VCBreadcrumb>` to its descendant parts.\n *\n * `themeVariant` (e.g. `{ size: 'sm' }`) propagates to **every** part so a\n * single `<VCBreadcrumb :theme-variant>` resizes the whole trail without\n * repeating the prop. `themeClass` propagates only to parts on the shared\n * `breadcrumb` root key (`<ol>` / link / page / ellipsis); the `<li>` and\n * separator carry their own keys and inherit `themeVariant` only.\n *\n * Optional — parts render bare when mounted outside `<VCBreadcrumb>` (unit\n * tests / ad-hoc composition).\n */\nexport type BreadcrumbContext = {\n    themeClass: () => ThemeClassesOverride<BreadcrumbThemeClasses> | undefined;\n    themeVariant: () => VariantValues | undefined;\n    /** Nearest-ancestor leaf-label override handle (see `useBreadcrumbLeaf`). */\n    leaf: BreadcrumbLeafHandle;\n};\n\nconst BREADCRUMB_CONTEXT_KEY: InjectionKey<BreadcrumbContext> = Symbol('vcBreadcrumbContext');\n\nexport function provideBreadcrumbContext(ctx: BreadcrumbContext): void {\n    provide(BREADCRUMB_CONTEXT_KEY, ctx);\n}\n\nexport function useBreadcrumbContext(): BreadcrumbContext | null {\n    return inject(BREADCRUMB_CONTEXT_KEY, null);\n}\n","import type { BreadcrumbDefaults } from './types';\n\n/**\n * Lowest-priority behavioral defaults for the breadcrumb (i18n layer).\n * `separatorIcon` is empty by default so the `separatorGlyph` renders\n * standalone; an installed icon preset (`icons: [lucide()]`) sets a\n * chevron name here, which then wins over the glyph.\n */\nexport const breadcrumbBehavioralDefaults: BreadcrumbDefaults = {\n    label: 'Breadcrumb',\n    separatorIcon: '',\n    separatorGlyph: '/',\n    ellipsisLabel: 'Show more',\n    ellipsisGlyph: '…',\n};\n","import { h, resolveComponent } from 'vue';\nimport type { VNodeChild } from 'vue';\n\n/**\n * Render an icon string the same way `<VCNavItem>` does (no hard\n * `@vuecs/icon` dependency): Iconify-style names (containing a colon,\n * e.g. `lucide:chevron-right`) go through the globally-registered\n * `<VCIcon>`; legacy class-string icons (`fa fa-home`) render as a\n * literal `<i class>`.\n */\nexport function renderBreadcrumbIcon(icon: string): VNodeChild {\n    if (icon.includes(':')) {\n        return h(resolveComponent('VCIcon'), { name: icon });\n    }\n    return h('i', { class: icon });\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type {\n    BreadcrumbItemThemeClasses,\n    BreadcrumbSeparatorThemeClasses,\n    BreadcrumbThemeClasses,\n} from './types';\n\nexport const breadcrumbThemeDefaults: ComponentThemeDefinition<BreadcrumbThemeClasses> = {\n    classes: {\n        root: 'vc-breadcrumb',\n        list: 'vc-breadcrumb-list',\n        link: 'vc-breadcrumb-link',\n        page: 'vc-breadcrumb-page',\n        ellipsis: 'vc-breadcrumb-ellipsis',\n    },\n};\n\nexport const breadcrumbItemThemeDefaults: ComponentThemeDefinition<BreadcrumbItemThemeClasses> = { classes: { root: 'vc-breadcrumb-item' } };\n\nexport const breadcrumbSeparatorThemeDefaults: ComponentThemeDefinition<BreadcrumbSeparatorThemeClasses> = { classes: { root: 'vc-breadcrumb-separator' } };\n","import { computed, toValue } from 'vue';\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue';\nimport { tryInjectNavigationRegistry } from '../../registry';\nimport type { BreadcrumbItem } from './types';\n\n/**\n * Derive breadcrumb items from a published navigation's `activeTrail`\n * (the ordered root→leaf chain a `<VCNavItems>` exposes via `registry` +\n * `registry-id`). Zero per-page wiring — the trail follows the route and\n * click-selection reactively, and is SSR-correct (it's a pure `computed`).\n *\n * Decoupled on purpose: this is the value-add, not a prerequisite — the\n * plain `<VCBreadcrumb :items>` driver is always the floor. Returns `[]`\n * when no navigation plugin is installed or the id has no occupant yet\n * (`registry.get` is empty-safe).\n *\n * Honest seams: the crumb label comes from the nav item's `name` (a\n * route's dynamic `/:id` title is not in the trail — use\n * `useBreadcrumbLeaf()` for that); url-less section nodes render as\n * non-navigable crumbs.\n */\nexport function useBreadcrumbFromRegistry(\n    id: MaybeRefOrGetter<string>,\n): ComputedRef<BreadcrumbItem[]> {\n    const registry = tryInjectNavigationRegistry();\n    return computed<BreadcrumbItem[]>(() => {\n        if (!registry) {\n            return [];\n        }\n        const entry = registry.get(toValue(id));\n        return entry.activeTrail.value.map((node) => ({\n            label: node.name,\n            to: node.url,\n            icon: node.icon,\n            current: node.active,\n        }));\n    });\n}\n","import { inject, provide } from '@vuecs/core';\nimport type { App } from 'vue';\nimport { useBreadcrumbContext } from './context';\nimport type { BreadcrumbLeafHandle } from './types';\n\nconst BREADCRUMB_LEAF_REGISTRY_SYMBOL = Symbol.for('VCBreadcrumbLeafRegistry');\n\n/** App-scoped map of `:leaf-id` → leaf handle, for the rare two-breadcrumb case. */\nexport type BreadcrumbLeafRegistry = Map<string, BreadcrumbLeafHandle>;\n\nexport function provideBreadcrumbLeafRegistry(\n    registry: BreadcrumbLeafRegistry = new Map(),\n    app?: App,\n): BreadcrumbLeafRegistry {\n    provide(BREADCRUMB_LEAF_REGISTRY_SYMBOL, registry, app);\n    return registry;\n}\n\nexport function injectBreadcrumbLeafRegistry(app?: App): BreadcrumbLeafRegistry | undefined {\n    return inject<BreadcrumbLeafRegistry>(BREADCRUMB_LEAF_REGISTRY_SYMBOL, app);\n}\n\n/**\n * Override the current (leaf) crumb's label — the one imperative seam for\n * dynamic `/:id` page titles. Resolve in page `setup` (e.g. after\n * `useAsyncData`); the override auto-clears when the route changes.\n *\n * Targeting (the \"both\" decision): with no `id`, the nearest ancestor\n * `<VCBreadcrumb>` is targeted (zero config, the 99% case). Pass an `id`\n * matching a `<VCBreadcrumb :leaf-id>` to disambiguate when two\n * breadcrumbs co-exist (e.g. a layout breadcrumb + a section-local one).\n *\n * ```ts\n * const { set } = useBreadcrumbLeaf();\n * const { data } = await useAsyncData(() => fetchUser(route.params.id));\n * watchEffect(() => data.value && set(data.value.name));\n * ```\n */\nexport function useBreadcrumbLeaf(id?: string): BreadcrumbLeafHandle {\n    if (id != null) {\n        const registry = injectBreadcrumbLeafRegistry();\n        // Lazy delegation so the handle works even if the target\n        // `<VCBreadcrumb :leaf-id>` mounts after this call.\n        return {\n            set: (label) => registry?.get(id)?.set(label),\n            clear: () => registry?.get(id)?.clear(),\n        };\n    }\n\n    const ctx = useBreadcrumbContext();\n    if (!ctx) {\n        // Outside a `<VCBreadcrumb>` and no id — no-op rather than throw, so\n        // a page `setup` can call it unconditionally.\n        return { set: () => {}, clear: () => {} };\n    }\n    return ctx.leaf;\n}\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbListProps = {\n    /** HTML tag to render. APG-correct default is an ordered list. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'ol' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbListProps = ExtractPublicPropTypes<typeof breadcrumbListProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbList',\n    inheritAttrs: false,\n    props: breadcrumbListProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n        return () => h(\n            props.as,\n            mergeProps(attrs, { class: theme.value.list || undefined }),\n            slots.default?.(),\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbListProps = {\n    /** HTML tag to render. APG-correct default is an ordered list. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'ol' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbListProps = ExtractPublicPropTypes<typeof breadcrumbListProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbList',\n    inheritAttrs: false,\n    props: breadcrumbListProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n        return () => h(\n            props.as,\n            mergeProps(attrs, { class: theme.value.list || undefined }),\n            slots.default?.(),\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbItemThemeDefaults } from './theme';\nimport type { BreadcrumbItemThemeClasses } from './types';\n\nconst breadcrumbItemProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'li' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbItemThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbItemProps = ExtractPublicPropTypes<typeof breadcrumbItemProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbItem',\n    inheritAttrs: false,\n    props: breadcrumbItemProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        // Only `themeVariant` inherits — the `<li>` carries its own theme key.\n        const themeProps: UseComponentThemeProps<BreadcrumbItemThemeClasses> = {\n            get themeClass() { return props.themeClass; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumbItem', themeProps, breadcrumbItemThemeDefaults);\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 { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbItemThemeDefaults } from './theme';\nimport type { BreadcrumbItemThemeClasses } from './types';\n\nconst breadcrumbItemProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'li' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbItemThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbItemProps = ExtractPublicPropTypes<typeof breadcrumbItemProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbItem',\n    inheritAttrs: false,\n    props: breadcrumbItemProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        // Only `themeVariant` inherits — the `<li>` carries its own theme key.\n        const themeProps: UseComponentThemeProps<BreadcrumbItemThemeClasses> = {\n            get themeClass() { return props.themeClass; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumbItem', themeProps, breadcrumbItemThemeDefaults);\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 { VCLink } from '@vuecs/link';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbLinkProps = {\n    /** Route target (vue-router `to`). Composes `<VCLink>` for router-aware navigation. */\n    to: { type: [String, Object] as PropType<string | Record<string, unknown>>, default: undefined },\n    /** Plain `href` (non-router). */\n    href: { type: String, default: undefined },\n    /**\n     * Mark this crumb as the current page. Emits `aria-current=\"page\"` and\n     * folds the `active` axis into `themeVariant` (W3C APG keeps the current\n     * crumb a real link).\n     */\n    active: { type: Boolean, default: false },\n    /** Genuinely disabled crumb. */\n    disabled: { type: Boolean, default: false },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbLinkProps = ExtractPublicPropTypes<typeof breadcrumbLinkProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbLink',\n    inheritAttrs: false,\n    props: breadcrumbLinkProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return {\n                    ...(ctx?.themeVariant() ?? {}),\n                    active: props.active,\n                    ...(props.themeVariant ?? {}),\n                };\n            },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n\n        return () => h(\n            VCLink,\n            mergeProps(attrs, {\n                'to': props.to,\n                'href': props.href,\n                'active': props.active,\n                'disabled': props.disabled,\n                'class': theme.value.link || undefined,\n                'aria-current': props.active ? 'page' : 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 { VCLink } from '@vuecs/link';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbLinkProps = {\n    /** Route target (vue-router `to`). Composes `<VCLink>` for router-aware navigation. */\n    to: { type: [String, Object] as PropType<string | Record<string, unknown>>, default: undefined },\n    /** Plain `href` (non-router). */\n    href: { type: String, default: undefined },\n    /**\n     * Mark this crumb as the current page. Emits `aria-current=\"page\"` and\n     * folds the `active` axis into `themeVariant` (W3C APG keeps the current\n     * crumb a real link).\n     */\n    active: { type: Boolean, default: false },\n    /** Genuinely disabled crumb. */\n    disabled: { type: Boolean, default: false },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbLinkProps = ExtractPublicPropTypes<typeof breadcrumbLinkProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbLink',\n    inheritAttrs: false,\n    props: breadcrumbLinkProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return {\n                    ...(ctx?.themeVariant() ?? {}),\n                    active: props.active,\n                    ...(props.themeVariant ?? {}),\n                };\n            },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n\n        return () => h(\n            VCLink,\n            mergeProps(attrs, {\n                'to': props.to,\n                'href': props.href,\n                'active': props.active,\n                'disabled': props.disabled,\n                'class': theme.value.link || undefined,\n                'aria-current': props.active ? 'page' : undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbPageProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'span' },\n    /** Mark as the current page (`aria-current=\"page\"`). Set for the last crumb. */\n    current: { type: Boolean, default: false },\n    /**\n     * Genuinely disabled crumb → `aria-disabled=\"true\"`. Distinct from a\n     * url-less section crumb (which is plain non-interactive text, no aria).\n     */\n    disabled: { type: Boolean, default: false },\n    /**\n     * Render as a non-navigable link (`role=\"link\" aria-disabled=\"true\"`),\n     * the shadcn idiom for a current crumb that looks like a link but isn't.\n     * Off by default — APG keeps the current crumb a real link via\n     * `<VCBreadcrumbLink active>`.\n     */\n    asLink: { type: Boolean, default: false },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbPageProps = ExtractPublicPropTypes<typeof breadcrumbPageProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbPage',\n    inheritAttrs: false,\n    props: breadcrumbPageProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return {\n                    ...(ctx?.themeVariant() ?? {}),\n                    current: props.current,\n                    disabled: props.disabled,\n                    ...(props.themeVariant ?? {}),\n                };\n            },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n\n        return () => h(\n            props.as,\n            mergeProps(attrs, {\n                'class': theme.value.page || undefined,\n                'role': props.asLink ? 'link' : undefined,\n                'aria-current': props.current ? 'page' : undefined,\n                'aria-disabled': (props.disabled || props.asLink) ? 'true' : undefined,\n            }),\n            slots.default?.(),\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbPageProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'span' },\n    /** Mark as the current page (`aria-current=\"page\"`). Set for the last crumb. */\n    current: { type: Boolean, default: false },\n    /**\n     * Genuinely disabled crumb → `aria-disabled=\"true\"`. Distinct from a\n     * url-less section crumb (which is plain non-interactive text, no aria).\n     */\n    disabled: { type: Boolean, default: false },\n    /**\n     * Render as a non-navigable link (`role=\"link\" aria-disabled=\"true\"`),\n     * the shadcn idiom for a current crumb that looks like a link but isn't.\n     * Off by default — APG keeps the current crumb a real link via\n     * `<VCBreadcrumbLink active>`.\n     */\n    asLink: { type: Boolean, default: false },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbPageProps = ExtractPublicPropTypes<typeof breadcrumbPageProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbPage',\n    inheritAttrs: false,\n    props: breadcrumbPageProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return {\n                    ...(ctx?.themeVariant() ?? {}),\n                    current: props.current,\n                    disabled: props.disabled,\n                    ...(props.themeVariant ?? {}),\n                };\n            },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n\n        return () => h(\n            props.as,\n            mergeProps(attrs, {\n                'class': theme.value.page || undefined,\n                'role': props.asLink ? 'link' : undefined,\n                'aria-current': props.current ? 'page' : undefined,\n                'aria-disabled': (props.disabled || props.asLink) ? 'true' : undefined,\n            }),\n            slots.default?.(),\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentDefaults, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbBehavioralDefaults } from './defaults';\nimport { renderBreadcrumbIcon } from './render-icon';\nimport { breadcrumbSeparatorThemeDefaults } from './theme';\nimport type { BreadcrumbSeparatorThemeClasses } from './types';\n\nconst breadcrumbSeparatorProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'li' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbSeparatorThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbSeparatorProps = ExtractPublicPropTypes<typeof breadcrumbSeparatorProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbSeparator',\n    inheritAttrs: false,\n    props: breadcrumbSeparatorProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbSeparatorThemeClasses> = {\n            get themeClass() { return props.themeClass; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumbSeparator', themeProps, breadcrumbSeparatorThemeDefaults);\n        const defaults = useComponentDefaults('breadcrumb', {}, breadcrumbBehavioralDefaults);\n\n        const renderContent = () => {\n            if (slots.default) {\n                return slots.default();\n            }\n            const icon = defaults.value.separatorIcon;\n            if (icon) {\n                return renderBreadcrumbIcon(icon);\n            }\n            return defaults.value.separatorGlyph;\n        };\n\n        return () => h(\n            props.as,\n            mergeProps(attrs, {\n                'class': theme.value.root || undefined,\n                'aria-hidden': 'true',\n                'role': 'presentation',\n            }),\n            [renderContent()],\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentDefaults, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbBehavioralDefaults } from './defaults';\nimport { renderBreadcrumbIcon } from './render-icon';\nimport { breadcrumbSeparatorThemeDefaults } from './theme';\nimport type { BreadcrumbSeparatorThemeClasses } from './types';\n\nconst breadcrumbSeparatorProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'li' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbSeparatorThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbSeparatorProps = ExtractPublicPropTypes<typeof breadcrumbSeparatorProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbSeparator',\n    inheritAttrs: false,\n    props: breadcrumbSeparatorProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbSeparatorThemeClasses> = {\n            get themeClass() { return props.themeClass; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumbSeparator', themeProps, breadcrumbSeparatorThemeDefaults);\n        const defaults = useComponentDefaults('breadcrumb', {}, breadcrumbBehavioralDefaults);\n\n        const renderContent = () => {\n            if (slots.default) {\n                return slots.default();\n            }\n            const icon = defaults.value.separatorIcon;\n            if (icon) {\n                return renderBreadcrumbIcon(icon);\n            }\n            return defaults.value.separatorGlyph;\n        };\n\n        return () => h(\n            props.as,\n            mergeProps(attrs, {\n                'class': theme.value.root || undefined,\n                'aria-hidden': 'true',\n                'role': 'presentation',\n            }),\n            [renderContent()],\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentDefaults, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbBehavioralDefaults } from './defaults';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbEllipsisProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'span' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbEllipsisProps = ExtractPublicPropTypes<typeof breadcrumbEllipsisProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbEllipsis',\n    inheritAttrs: false,\n    props: breadcrumbEllipsisProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n        const defaults = useComponentDefaults('breadcrumb', {}, breadcrumbBehavioralDefaults);\n\n        return () => {\n            // When a consumer composes an interactive trigger into the slot\n            // (e.g. a dropdown of the collapsed crumbs), render it as-is — the\n            // trigger carries its own semantics + accessible name, so the\n            // wrapper must NOT be `aria-hidden`. The default static ellipsis\n            // keeps a decorative glyph + an sr-only label announcing the\n            // collapse (the hidden crumbs are otherwise unreachable).\n            if (slots.default) {\n                return h(\n                    props.as,\n                    mergeProps(attrs, { class: theme.value.ellipsis || undefined }),\n                    slots.default(),\n                );\n            }\n            return h(\n                props.as,\n                mergeProps(attrs, { class: theme.value.ellipsis || undefined }),\n                [\n                    h('span', { 'aria-hidden': 'true' }, defaults.value.ellipsisGlyph),\n                    h('span', { class: 'vc-sr-only' }, defaults.value.ellipsisLabel),\n                ],\n            );\n        };\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { useComponentDefaults, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useBreadcrumbContext } from './context';\nimport { breadcrumbBehavioralDefaults } from './defaults';\nimport { breadcrumbThemeDefaults } from './theme';\nimport type { BreadcrumbThemeClasses } from './types';\n\nconst breadcrumbEllipsisProps = {\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'span' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbEllipsisProps = ExtractPublicPropTypes<typeof breadcrumbEllipsisProps>;\n\nexport default defineComponent({\n    name: 'VCBreadcrumbEllipsis',\n    inheritAttrs: false,\n    props: breadcrumbEllipsisProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useBreadcrumbContext();\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() { return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) }; },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n        const defaults = useComponentDefaults('breadcrumb', {}, breadcrumbBehavioralDefaults);\n\n        return () => {\n            // When a consumer composes an interactive trigger into the slot\n            // (e.g. a dropdown of the collapsed crumbs), render it as-is — the\n            // trigger carries its own semantics + accessible name, so the\n            // wrapper must NOT be `aria-hidden`. The default static ellipsis\n            // keeps a decorative glyph + an sr-only label announcing the\n            // collapse (the hidden crumbs are otherwise unreachable).\n            if (slots.default) {\n                return h(\n                    props.as,\n                    mergeProps(attrs, { class: theme.value.ellipsis || undefined }),\n                    slots.default(),\n                );\n            }\n            return h(\n                props.as,\n                mergeProps(attrs, { class: theme.value.ellipsis || undefined }),\n                [\n                    h('span', { 'aria-hidden': 'true' }, defaults.value.ellipsisGlyph),\n                    h('span', { class: 'vc-sr-only' }, defaults.value.ellipsisLabel),\n                ],\n            );\n        };\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { useComponentDefaults, useComponentTheme } from '@vuecs/core';\nimport type {\n    GenericComponentShape,\n    ThemeClassesOverride,\n    UseComponentThemeProps,\n    VariantValues,\n} from '@vuecs/core';\nimport {\n    computed,\n    defineComponent,\n    getCurrentInstance,\n    h,\n    mergeProps,\n    onScopeDispose,\n    ref,\n    watch,\n} from 'vue';\nimport type {\n    Component,\n    ExtractPublicPropTypes,\n    PropType,\n    PublicProps,\n    VNodeChild,\n} from 'vue';\nimport { provideBreadcrumbContext } from './context';\nimport { breadcrumbBehavioralDefaults } from './defaults';\nimport { renderBreadcrumbIcon } from './render-icon';\nimport { breadcrumbThemeDefaults } from './theme';\nimport { useBreadcrumbFromRegistry } from './use-breadcrumb-from-registry';\nimport { injectBreadcrumbLeafRegistry } from './use-breadcrumb-leaf';\nimport type { BreadcrumbItem, BreadcrumbThemeClasses } from './types';\n\nimport VCBreadcrumbList from './BreadcrumbList.vue';\nimport VCBreadcrumbItem from './BreadcrumbItem.vue';\nimport VCBreadcrumbLink from './BreadcrumbLink.vue';\nimport VCBreadcrumbPage from './BreadcrumbPage.vue';\nimport VCBreadcrumbSeparator from './BreadcrumbSeparator.vue';\nimport VCBreadcrumbEllipsis from './BreadcrumbEllipsis.vue';\n\nconst breadcrumbProps = {\n    /**\n     * Crumb data (driver mode). When omitted, the default slot is rendered\n     * as a manual compound (`<VCBreadcrumbList>` etc. by hand).\n     */\n    items: { type: Array as PropType<BreadcrumbItem[]>, default: undefined },\n    /**\n     * Collapse the middle of the trail into a single `<VCBreadcrumbEllipsis>`\n     * when the crumb count exceeds this. `undefined` (default) = never collapse.\n     */\n    maxItems: { type: Number, default: undefined },\n    /** Crumbs to keep before the ellipsis when collapsing. */\n    itemsBeforeCollapse: { type: Number, default: 1 },\n    /** Crumbs to keep after the ellipsis when collapsing. */\n    itemsAfterCollapse: { type: Number, default: 1 },\n    /**\n     * Derive crumbs from a published navigation's `activeTrail` by registry\n     * id (see `<VCNavItems registry registry-id>`). Ignored when `:items` is\n     * set. Auto-follows the route with zero per-page wiring.\n     */\n    registryId: { type: String, default: undefined },\n    /**\n     * Disambiguator for `useBreadcrumbLeaf('id')` when more than one\n     * `<VCBreadcrumb>` is mounted. Omit for the nearest-ancestor default.\n     */\n    leafId: { type: String, default: undefined },\n    /** Root landmark tag. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'nav' },\n    /** Accessible name for the `<nav>` (overrides the `breadcrumb.label` default). */\n    label: { type: String, default: undefined },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbProps = ExtractPublicPropTypes<typeof breadcrumbProps>;\n\n/** Slot props for the driver's `#item` slot — generic over the consumer's item type. */\nexport type BreadcrumbItemSlotProps<Item extends BreadcrumbItem = BreadcrumbItem> = {\n    item: Item;\n    index: number;\n    /** True for the current (last, or `item.current`) crumb. */\n    current: boolean;\n};\n\ntype SequenceEntry =    | {\n    type: 'item'; \n    item: BreadcrumbItem; \n    index: number \n} |\n    { type: 'ellipsis'; hidden: BreadcrumbItem[] };\n\nfunction buildSequence(\n    items: BreadcrumbItem[],\n    maxItems: number | undefined,\n    before: number,\n    after: number,\n): SequenceEntry[] {\n    // Clamp the collapse inputs so bad props can't produce malformed trails:\n    // `maxItems = 0` would otherwise be read as \"never collapse\" via `!maxItems`,\n    // and negative before/after flow straight into `slice()` (reordering crumbs).\n    const safeMaxItems = maxItems == null ? undefined : Math.max(1, Math.trunc(maxItems));\n    const safeBefore = Math.max(0, Math.trunc(before));\n    const safeAfter = Math.max(0, Math.trunc(after));\n\n    if (safeMaxItems == null || items.length <= safeMaxItems || safeBefore + safeAfter >= items.length) {\n        return items.map((item, index) => ({\n            type: 'item',\n            item,\n            index,\n        }));\n    }\n    const head: SequenceEntry[] = items\n        .slice(0, safeBefore)\n        .map((item, index) => ({\n            type: 'item',\n            item,\n            index,\n        }));\n    const tailStart = items.length - safeAfter;\n    const tail: SequenceEntry[] = items\n        .slice(tailStart)\n        .map((item, k) => ({\n            type: 'item',\n            item,\n            index: tailStart + k,\n        }));\n    return [...head, { type: 'ellipsis', hidden: items.slice(safeBefore, tailStart) }, ...tail];\n}\n\nconst VCBreadcrumb = defineComponent({\n    name: 'VCBreadcrumb',\n    inheritAttrs: false,\n    props: breadcrumbProps,\n    emits: ['select'],\n    setup(props, {\n        attrs, \n        emit, \n        slots, \n    }) {\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return props.themeClass; },\n            get themeVariant() { return props.themeVariant; },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n        const defaults = useComponentDefaults('breadcrumb', props, breadcrumbBehavioralDefaults);\n\n        // The leaf-label override (dynamic `/:id` titles). `<VCBreadcrumb>`\n        // owns its own `currentPath` so the override auto-clears on route\n        // change. Soft `$route` read — no static `vue-router` import.\n        const globals = getCurrentInstance()?.appContext.config.globalProperties;\n        const currentPath = computed<string | undefined>(\n            () => (globals?.$route as { path?: string } | undefined)?.path,\n        );\n        const leafOverride = ref<string | undefined>(undefined);\n        watch(currentPath, () => { leafOverride.value = undefined; });\n        const leafHandle = {\n            set: (label: string) => { leafOverride.value = label; },\n            clear: () => { leafOverride.value = undefined; },\n        };\n\n        // Propagate theme-variant (e.g. size) + the root theme-class to parts,\n        // plus the nearest-ancestor leaf handle.\n        provideBreadcrumbContext({\n            themeClass: () => props.themeClass,\n            themeVariant: () => props.themeVariant,\n            leaf: leafHandle,\n        });\n\n        // `:leaf-id` registration (the two-breadcrumb disambiguator).\n        if (props.leafId != null) {\n            const registry = injectBreadcrumbLeafRegistry();\n            if (registry) {\n                const id = props.leafId;\n                registry.set(id, leafHandle);\n                onScopeDispose(() => {\n                    if (registry.get(id) === leafHandle) {\n                        registry.delete(id);\n                    }\n                });\n            }\n        }\n\n        // Effective trail: explicit `:items` wins; else registry-derived\n        // (`:registry-id`); else empty (manual-compound mode uses the slot).\n        const registryItems = useBreadcrumbFromRegistry(() => props.registryId ?? '');\n        const effectiveItems = computed<BreadcrumbItem[]>(() => {\n            const base = props.items ?? (props.registryId != null ? registryItems.value : []);\n            const override = leafOverride.value;\n            if (override == null || base.length === 0) {\n                return base;\n            }\n            const out = base.slice();\n            out[out.length - 1] = { ...out[out.length - 1], label: override };\n            return out;\n        });\n\n        const ariaLabel = computed(() => props.label ?? defaults.value.label);\n\n        const renderLabel = (item: BreadcrumbItem, index: number): VNodeChild => {\n            if (slots['item-label']) {\n                return slots['item-label']({ item, index });\n            }\n            return item.label;\n        };\n\n        const renderCrumbContent = (item: BreadcrumbItem, index: number, current: boolean): VNodeChild => {\n            if (slots.item) {\n                return slots.item({\n                    item, \n                    index, \n                    current, \n                });\n            }\n            return [\n                item.icon ? renderBreadcrumbIcon(item.icon) : null,\n                renderLabel(item, index),\n            ];\n        };\n\n        const renderCrumb = (item: BreadcrumbItem, index: number): VNodeChild => {\n            const items = effectiveItems.value;\n            const current = item.current ?? (index === items.length - 1);\n            const content = renderCrumbContent(item, index, current);\n\n            if (item.disabled) {\n                // Keep the current-page semantics even when the active crumb is\n                // disabled — otherwise it silently loses `aria-current=\"page\"`.\n                return h(VCBreadcrumbPage, { disabled: true, current }, { default: () => content });\n            }\n            if (item.to != null || item.href != null) {\n                return h(\n                    VCBreadcrumbLink,\n                    {\n                        to: item.to, \n                        href: item.href, \n                        active: current, \n                    },\n                    { default: () => content },\n                );\n            }\n            // url-less node: non-navigable text that can still drive `select`.\n            return h(\n                VCBreadcrumbPage,\n                { current, onClick: () => emit('select', item, index) },\n                { default: () => content },\n            );\n        };\n\n        const renderSeparator = (): VNodeChild => h(\n            VCBreadcrumbSeparator,\n            null,\n            slots.separator ? { default: () => slots.separator!() } : undefined,\n        );\n\n        const renderItems = (): VNodeChild[] => {\n            const items = effectiveItems.value;\n            const sequence = buildSequence(\n                items,\n                props.maxItems,\n                props.itemsBeforeCollapse,\n                props.itemsAfterCollapse,\n            );\n            const out: VNodeChild[] = [];\n            sequence.forEach((entry, i) => {\n                if (i > 0) {\n                    out.push(renderSeparator());\n                }\n                if (entry.type === 'ellipsis') {\n                    out.push(h(\n                        VCBreadcrumbItem,\n                        { key: 'ellipsis' },\n                        {\n                            default: () => h(\n                                VCBreadcrumbEllipsis,\n                                null,\n                                slots.ellipsis ? { default: () => slots.ellipsis!({ hidden: entry.hidden }) } : undefined,\n                            ),\n                        },\n                    ));\n                    return;\n                }\n                out.push(h(\n                    VCBreadcrumbItem,\n                    { key: entry.index },\n                    { default: () => renderCrumb(entry.item, entry.index) },\n                ));\n            });\n            return out;\n        };\n\n        return () => {\n            // Documented precedence: explicit `:items` / `:registry-id` drive the\n            // trail; the default slot is the manual-compound escape hatch and only\n            // wins when both data sources are absent.\n            const navChildren = (props.items == null && props.registryId == null && slots.default) ?\n                slots.default() :\n                h(VCBreadcrumbList, null, { default: () => renderItems() });\n            return h(\n                props.as,\n                mergeProps(attrs, {\n                    'class': theme.value.root || undefined,\n                    'aria-label': ariaLabel.value,\n                }),\n                navChildren,\n            );\n        };\n    },\n});\n\n/**\n * `<VCBreadcrumb>`'s slot map, generic over the consumer's `Item` type so\n * the `#item` / `#item-label` slot props infer richer entities passed via\n * `:items`. `default` is the manual-compound escape hatch.\n */\ninterface BreadcrumbSlots<Item extends BreadcrumbItem = BreadcrumbItem> {\n    default?: () => unknown;\n    'item'?: (props: BreadcrumbItemSlotProps<Item>) => unknown;\n    'item-label'?: (props: { item: Item; index: number }) => unknown;\n    'separator'?: () => unknown;\n    'ellipsis'?: (props: { hidden: Item[] }) => unknown;\n}\n\n/**\n * Public props with the `Item`-typed `items` arm and the `select` emit\n * handler spliced in. A cast-to-function component surfaces events through\n * `on*` props, so `@select` only type-checks at the call site when the\n * handler prop is declared here.\n */\ntype BreadcrumbPropsGeneric<Item extends BreadcrumbItem> = & Omit<BreadcrumbProps, 'items'> &\n    {\n        items?: Item[];\n        onSelect?: (item: Item, index: number) => void;\n    } &\n    PublicProps;\n\n/**\n * Generic `<VCBreadcrumb>` type. `Item` is constrained to `BreadcrumbItem`\n * (a named object type, not a `Record` index-signature constraint, so\n * interface-typed items infer cleanly) and defaults to `BreadcrumbItem`.\n */\ntype VCBreadcrumbComponent = <Item extends BreadcrumbItem = BreadcrumbItem>(\n    ...args: Parameters<GenericComponentShape<BreadcrumbPropsGeneric<Item>, BreadcrumbSlots<Item>>>\n) => ReturnType<GenericComponentShape<BreadcrumbPropsGeneric<Item>, BreadcrumbSlots<Item>>>;\n\nexport default VCBreadcrumb as unknown as VCBreadcrumbComponent;\n</script>\n","<script lang=\"ts\">\nimport { useComponentDefaults, useComponentTheme } from '@vuecs/core';\nimport type {\n    GenericComponentShape,\n    ThemeClassesOverride,\n    UseComponentThemeProps,\n    VariantValues,\n} from '@vuecs/core';\nimport {\n    computed,\n    defineComponent,\n    getCurrentInstance,\n    h,\n    mergeProps,\n    onScopeDispose,\n    ref,\n    watch,\n} from 'vue';\nimport type {\n    Component,\n    ExtractPublicPropTypes,\n    PropType,\n    PublicProps,\n    VNodeChild,\n} from 'vue';\nimport { provideBreadcrumbContext } from './context';\nimport { breadcrumbBehavioralDefaults } from './defaults';\nimport { renderBreadcrumbIcon } from './render-icon';\nimport { breadcrumbThemeDefaults } from './theme';\nimport { useBreadcrumbFromRegistry } from './use-breadcrumb-from-registry';\nimport { injectBreadcrumbLeafRegistry } from './use-breadcrumb-leaf';\nimport type { BreadcrumbItem, BreadcrumbThemeClasses } from './types';\n\nimport VCBreadcrumbList from './BreadcrumbList.vue';\nimport VCBreadcrumbItem from './BreadcrumbItem.vue';\nimport VCBreadcrumbLink from './BreadcrumbLink.vue';\nimport VCBreadcrumbPage from './BreadcrumbPage.vue';\nimport VCBreadcrumbSeparator from './BreadcrumbSeparator.vue';\nimport VCBreadcrumbEllipsis from './BreadcrumbEllipsis.vue';\n\nconst breadcrumbProps = {\n    /**\n     * Crumb data (driver mode). When omitted, the default slot is rendered\n     * as a manual compound (`<VCBreadcrumbList>` etc. by hand).\n     */\n    items: { type: Array as PropType<BreadcrumbItem[]>, default: undefined },\n    /**\n     * Collapse the middle of the trail into a single `<VCBreadcrumbEllipsis>`\n     * when the crumb count exceeds this. `undefined` (default) = never collapse.\n     */\n    maxItems: { type: Number, default: undefined },\n    /** Crumbs to keep before the ellipsis when collapsing. */\n    itemsBeforeCollapse: { type: Number, default: 1 },\n    /** Crumbs to keep after the ellipsis when collapsing. */\n    itemsAfterCollapse: { type: Number, default: 1 },\n    /**\n     * Derive crumbs from a published navigation's `activeTrail` by registry\n     * id (see `<VCNavItems registry registry-id>`). Ignored when `:items` is\n     * set. Auto-follows the route with zero per-page wiring.\n     */\n    registryId: { type: String, default: undefined },\n    /**\n     * Disambiguator for `useBreadcrumbLeaf('id')` when more than one\n     * `<VCBreadcrumb>` is mounted. Omit for the nearest-ancestor default.\n     */\n    leafId: { type: String, default: undefined },\n    /** Root landmark tag. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'nav' },\n    /** Accessible name for the `<nav>` (overrides the `breadcrumb.label` default). */\n    label: { type: String, default: undefined },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<BreadcrumbThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type BreadcrumbProps = ExtractPublicPropTypes<typeof breadcrumbProps>;\n\n/** Slot props for the driver's `#item` slot — generic over the consumer's item type. */\nexport type BreadcrumbItemSlotProps<Item extends BreadcrumbItem = BreadcrumbItem> = {\n    item: Item;\n    index: number;\n    /** True for the current (last, or `item.current`) crumb. */\n    current: boolean;\n};\n\ntype SequenceEntry =    | {\n    type: 'item'; \n    item: BreadcrumbItem; \n    index: number \n} |\n    { type: 'ellipsis'; hidden: BreadcrumbItem[] };\n\nfunction buildSequence(\n    items: BreadcrumbItem[],\n    maxItems: number | undefined,\n    before: number,\n    after: number,\n): SequenceEntry[] {\n    // Clamp the collapse inputs so bad props can't produce malformed trails:\n    // `maxItems = 0` would otherwise be read as \"never collapse\" via `!maxItems`,\n    // and negative before/after flow straight into `slice()` (reordering crumbs).\n    const safeMaxItems = maxItems == null ? undefined : Math.max(1, Math.trunc(maxItems));\n    const safeBefore = Math.max(0, Math.trunc(before));\n    const safeAfter = Math.max(0, Math.trunc(after));\n\n    if (safeMaxItems == null || items.length <= safeMaxItems || safeBefore + safeAfter >= items.length) {\n        return items.map((item, index) => ({\n            type: 'item',\n            item,\n            index,\n        }));\n    }\n    const head: SequenceEntry[] = items\n        .slice(0, safeBefore)\n        .map((item, index) => ({\n            type: 'item',\n            item,\n            index,\n        }));\n    const tailStart = items.length - safeAfter;\n    const tail: SequenceEntry[] = items\n        .slice(tailStart)\n        .map((item, k) => ({\n            type: 'item',\n            item,\n            index: tailStart + k,\n        }));\n    return [...head, { type: 'ellipsis', hidden: items.slice(safeBefore, tailStart) }, ...tail];\n}\n\nconst VCBreadcrumb = defineComponent({\n    name: 'VCBreadcrumb',\n    inheritAttrs: false,\n    props: breadcrumbProps,\n    emits: ['select'],\n    setup(props, {\n        attrs, \n        emit, \n        slots, \n    }) {\n        const themeProps: UseComponentThemeProps<BreadcrumbThemeClasses> = {\n            get themeClass() { return props.themeClass; },\n            get themeVariant() { return props.themeVariant; },\n        };\n        const theme = useComponentTheme('breadcrumb', themeProps, breadcrumbThemeDefaults);\n        const defaults = useComponentDefaults('breadcrumb', props, breadcrumbBehavioralDefaults);\n\n        // The leaf-label override (dynamic `/:id` titles). `<VCBreadcrumb>`\n        // owns its own `currentPath` so the override auto-clears on route\n        // change. Soft `$route` read — no static `vue-router` import.\n        const globals = getCurrentInstance()?.appContext.config.globalProperties;\n        const currentPath = computed<string | undefined>(\n            () => (globals?.$route as { path?: string } | undefined)?.path,\n        );\n        const leafOverride = ref<string | undefined>(undefined);\n        watch(currentPath, () => { leafOverride.value = undefined; });\n        const leafHandle = {\n            set: (label: string) => { leafOverride.value = label; },\n            clear: () => { leafOverride.value = undefined; },\n        };\n\n        // Propagate theme-variant (e.g. size) + the root theme-class to parts,\n        // plus the nearest-ancestor leaf handle.\n        provideBreadcrumbContext({\n            themeClass: () => props.themeClass,\n            themeVariant: () => props.themeVariant,\n            leaf: leafHandle,\n        });\n\n        // `:leaf-id` registration (the two-breadcrumb disambiguator).\n        if (props.leafId != null) {\n            const registry = injectBreadcrumbLeafRegistry();\n            if (registry) {\n                const id = props.leafId;\n                registry.set(id, leafHandle);\n                onScopeDispose(() => {\n                    if (registry.get(id) === leafHandle) {\n                        registry.delete(id);\n                    }\n                });\n            }\n        }\n\n        // Effective trail: explicit `:items` wins; else registry-derived\n        // (`:registry-id`); else empty (manual-compound mode uses the slot).\n        const registryItems = useBreadcrumbFromRegistry(() => props.registryId ?? '');\n        const effectiveItems = computed<BreadcrumbItem[]>(() => {\n            const base = props.items ?? (props.registryId != null ? registryItems.value : []);\n            const override = leafOverride.value;\n            if (override == null || base.length === 0) {\n                return base;\n            }\n            const out = base.slice();\n            out[out.length - 1] = { ...out[out.length - 1], label: override };\n            return out;\n        });\n\n        const ariaLabel = computed(() => props.label ?? defaults.value.label);\n\n        const renderLabel = (item: BreadcrumbItem, index: number): VNodeChild => {\n            if (slots['item-label']) {\n                return slots['item-label']({ item, index });\n            }\n            return item.label;\n        };\n\n        const renderCrumbContent = (item: BreadcrumbItem, index: number, current: boolean): VNodeChild => {\n            if (slots.item) {\n                return slots.item({\n                    item, \n                    index, \n                    current, \n                });\n            }\n            return [\n                item.icon ? renderBreadcrumbIcon(item.icon) : null,\n                renderLabel(item, index),\n            ];\n        };\n\n        const renderCrumb = (item: BreadcrumbItem, index: number): VNodeChild => {\n            const items = effectiveItems.value;\n            const current = item.current ?? (index === items.length - 1);\n            const content = renderCrumbContent(item, index, current);\n\n            if (item.disabled) {\n                // Keep the current-page semantics even when the active crumb is\n                // disabled — otherwise it silently loses `aria-current=\"page\"`.\n                return h(VCBreadcrumbPage, { disabled: true, current }, { default: () => content });\n            }\n            if (item.to != null || item.href != null) {\n                return h(\n                    VCBreadcrumbLink,\n                    {\n                        to: item.to, \n                        href: item.href, \n                        active: current, \n                    },\n                    { default: () => content },\n                );\n            }\n            // url-less node: non-navigable text that can still drive `select`.\n            return h(\n                VCBreadcrumbPage,\n                { current, onClick: () => emit('select', item, index) },\n                { default: () => content },\n            );\n        };\n\n        const renderSeparator = (): VNodeChild => h(\n            VCBreadcrumbSeparator,\n            null,\n            slots.separator ? { default: () => slots.separator!() } : undefined,\n        );\n\n        const renderItems = (): VNodeChild[] => {\n            const items = effectiveItems.value;\n            const sequence = buildSequence(\n                items,\n                props.maxItems,\n                props.itemsBeforeCollapse,\n                props.itemsAfterCollapse,\n            );\n            const out: VNodeChild[] = [];\n            sequence.forEach((entry, i) => {\n                if (i > 0) {\n                    out.push(renderSeparator());\n                }\n                if (entry.type === 'ellipsis') {\n                    out.push(h(\n                        VCBreadcrumbItem,\n                        { key: 'ellipsis' },\n                        {\n                            default: () => h(\n                                VCBreadcrumbEllipsis,\n                                null,\n                                slots.ellipsis ? { default: () => slots.ellipsis!({ hidden: entry.hidden }) } : undefined,\n                            ),\n                        },\n                    ));\n                    return;\n                }\n                out.push(h(\n                    VCBreadcrumbItem,\n                    { key: entry.index },\n                    { default: () => renderCrumb(entry.item, entry.index) },\n                ));\n            });\n            return out;\n        };\n\n        return () => {\n            // Documented precedence: explicit `:items` / `:registry-id` drive the\n            // trail; the default slot is the manual-compound escape hatch and only\n            // wins when both data sources are absent.\n            const navChildren = (props.items == null && props.registryId == null && slots.default) ?\n                slots.default() :\n                h(VCBreadcrumbList, null, { default: () => renderItems() });\n            return h(\n                props.as,\n                mergeProps(attrs, {\n                    'class': theme.value.root || undefined,\n                    'aria-label': ariaLabel.value,\n                }),\n                navChildren,\n            );\n        };\n    },\n});\n\n/**\n * `<VCBreadcrumb>`'s slot map, generic over the consumer's `Item` type so\n * the `#item` / `#item-label` slot props infer richer entities passed via\n * `:items`. `default` is the manual-compound escape hatch.\n */\ninterface BreadcrumbSlots<Item extends BreadcrumbItem = BreadcrumbItem> {\n    default?: () => unknown;\n    'item'?: (props: BreadcrumbItemSlotProps<Item>) => unknown;\n    'item-label'?: (props: { item: Item; index: number }) => unknown;\n    'separator'?: () => unknown;\n    'ellipsis'?: (props: { hidden: Item[] }) => unknown;\n}\n\n/**\n * Public props with the `Item`-typed `items` arm and the `select` emit\n * handler spliced in. A cast-to-function component surfaces events through\n * `on*` props, so `@select` only type-checks at the call site when the\n * handler prop is declared here.\n */\ntype BreadcrumbPropsGeneric<Item extends BreadcrumbItem> = & Omit<BreadcrumbProps, 'items'> &\n    {\n        items?: Item[];\n        onSelect?: (item: Item, index: number) => void;\n    } &\n    PublicProps;\n\n/**\n * Generic `<VCBreadcrumb>` type. `Item` is constrained to `BreadcrumbItem`\n * (a named object type, not a `Record` index-signature constraint, so\n * interface-typed items infer cleanly) and defaults to `BreadcrumbItem`.\n */\ntype VCBreadcrumbComponent = <Item extends BreadcrumbItem = BreadcrumbItem>(\n    ...args: Parameters<GenericComponentShape<BreadcrumbPropsGeneric<Item>, BreadcrumbSlots<Item>>>\n) => ReturnType<GenericComponentShape<BreadcrumbPropsGeneric<Item>, BreadcrumbSlots<Item>>>;\n\nexport default VCBreadcrumb as unknown as VCBreadcrumbComponent;\n</script>\n","import { computed, getCurrentInstance } from 'vue';\nimport type { ComputedRef } from 'vue';\nimport type { BreadcrumbItem } from './types';\n\ntype MinimalRouteRecord = { path?: string; meta?: Record<string, unknown> };\ntype MinimalRoute = { path?: string; matched?: MinimalRouteRecord[] };\n\n/**\n * What a route record's `meta.breadcrumb` may hold. A string is shorthand\n * for `{ label }`; a function receives the resolved route. Returning\n * `undefined` / `[]` omits the record from the trail.\n */\nexport type BreadcrumbMeta =    | string |\n    Partial<BreadcrumbItem> |\n    BreadcrumbItem[] |\n    ((route: MinimalRoute) => BreadcrumbItem | BreadcrumbItem[] | undefined);\n\nexport type UseBreadcrumbItemsOptions = {\n    /** Prepend a fixed root crumb (e.g. Home) — there is no synthetic Home by default. */\n    home?: BreadcrumbItem;\n};\n\n/**\n * The route-meta floor: derive breadcrumb items from `vue-router`'s\n * `route.matched`, reading each record's `meta.breadcrumb`. Soft `$route`\n * lookup (no static `vue-router` import) — router-free apps degrade to\n * `[]` (plus the optional `home`). Pure `computed`, so it is SSR-correct\n * and self-heals on back/forward + deep-link without any push/pop.\n */\nexport function useBreadcrumbItems(\n    options: UseBreadcrumbItemsOptions = {},\n): ComputedRef<BreadcrumbItem[]> {\n    const globals = getCurrentInstance()?.appContext.config.globalProperties;\n\n    return computed<BreadcrumbItem[]>(() => {\n        const route = globals?.$route as MinimalRoute | undefined;\n        const out: BreadcrumbItem[] = [];\n        if (options.home) {\n            out.push(options.home);\n        }\n        for (const record of route?.matched ?? []) {\n            const meta = record.meta?.breadcrumb as BreadcrumbMeta | undefined;\n            if (meta == null) {\n                continue;\n            }\n            const resolved = typeof meta === 'function' ? meta(route ?? {}) : meta;\n            if (resolved == null) {\n                continue;\n            }\n            const entries = Array.isArray(resolved) ? resolved : [resolved];\n            for (const entry of entries) {\n                const item = typeof entry === 'string' ? { label: entry } : entry;\n                // Only fall back to the record's `path` as a router `to` when the\n                // meta entry supplies neither `to` nor `href` — forcing `to` onto\n                // an `{ label, href }` entry would break the `BreadcrumbItem`\n                // contract (`href` is the secondary, non-router target).\n                out.push({\n                    ...(item.to == null && item.href == null && record.path ? { to: record.path } : {}),\n                    ...item,\n                } as BreadcrumbItem);\n            }\n        }\n        return out;\n    });\n}\n","import { inject, provide } from '@vuecs/core';\nimport { ref } from 'vue';\nimport type { App, Ref } from 'vue';\nimport type { BreadcrumbItem } from './types';\n\nconst BREADCRUMB_MANAGER_SYMBOL = Symbol.for('VCBreadcrumbManager');\n\n/**\n * Opt-in imperative breadcrumb trail. Derivation (registry / route-meta /\n * explicit `:items`) is the default + recommended path — reach for the\n * manager only for genuinely non-route-driven flows (wizard / stack-style\n * UIs) where you push and pop the trail by hand.\n *\n * Bind the reactive `items` into a breadcrumb: destructure so the template\n * unwraps the ref —\n * `const { items, push, pop } = useBreadcrumb()` → `<VCBreadcrumb :items=\"items\">`.\n */\nexport type BreadcrumbManager = {\n    /** Reactive trail. Destructure before binding so the template unwraps it. */\n    items: Ref<BreadcrumbItem[]>;\n    /** Append a crumb (descend into a child). */\n    push: (item: BreadcrumbItem) => void;\n    /** Remove and return the last crumb (ascend to the parent). */\n    pop: () => BreadcrumbItem | undefined;\n    /** Replace the whole trail. */\n    replace: (items: BreadcrumbItem[]) => void;\n    /** Reset to the initial trail passed at creation. */\n    reset: () => void;\n};\n\nexport function createBreadcrumbManager(initial: BreadcrumbItem[] = []): BreadcrumbManager {\n    // Snapshot the creation-time trail so `reset()` restores the documented\n    // baseline even if the caller mutates the array they passed in later.\n    const baseline = [...initial];\n    const items = ref<BreadcrumbItem[]>([...baseline]);\n    return {\n        items,\n        push: (item) => { items.value = [...items.value, item]; },\n        pop: () => {\n            const next = items.value.slice();\n            const removed = next.pop();\n            items.value = next;\n            return removed;\n        },\n        replace: (value) => { items.value = [...value]; },\n        reset: () => { items.value = [...baseline]; },\n    };\n}\n\n/**\n * Provide an **app-scoped** breadcrumb manager (one per app via\n * `provide`/`inject`, NOT a module singleton — a singleton would leak the\n * trail across concurrent SSR requests). Called from the package\n * `install()`; also callable directly to seed an initial trail.\n */\nexport function provideBreadcrumbManager(\n    manager: BreadcrumbManager = createBreadcrumbManager(),\n    app?: App,\n): BreadcrumbManager {\n    provide(BREADCRUMB_MANAGER_SYMBOL, manager, app);\n    return manager;\n}\n\n/** Inject the app-scoped breadcrumb manager. Throws when none is installed. */\nexport function useBreadcrumb(app?: App): BreadcrumbManager {\n    const manager = inject<BreadcrumbManager>(BREADCRUMB_MANAGER_SYMBOL, app);\n    if (!manager) {\n        throw new Error('A breadcrumb manager has not been provided. Did you `app.use(VCNavigation)`?');\n    }\n    return manager;\n}\n","import type { NavigationItemNormalized } from '../types';\n\ntype ParentMatch = {\n    score: number\n};\n\ntype ItemMatchesFindOptions = {\n    path?: string\n};\n\nfunction calculateItemScoreForPath(\n    item: NavigationItemNormalized,\n    currentPath: string,\n) {\n    if (item.url === '/') {\n        return 1;\n    }\n\n    if (item.activeMatch) {\n        if (item.activeMatch === currentPath) {\n            return 6;\n        } if (currentPath.startsWith(item.activeMatch)) {\n            return 4;\n        }\n    }\n\n    if (item.url) {\n        if (item.url === currentPath) {\n            return 3;\n        } if (currentPath.startsWith(item.url)) {\n            return 2;\n        }\n    }\n\n    return 0;\n}\n\nfunction findItemMatchesIF(\n    items: NavigationItemNormalized[],\n    options: ItemMatchesFindOptions,\n    parent: ParentMatch,\n) {\n    const output : {\n        data: NavigationItemNormalized,\n        score: number\n    }[] = [];\n\n    for (const item of items) {\n        let { score } = parent;\n\n        if (options.path) {\n            score += calculateItemScoreForPath(item, options.path);\n        }\n\n        if (item.default) {\n            score += 1;\n        }\n\n        if (item.children) {\n            const childMatches = findItemMatchesIF(item.children, options, { score });\n\n            output.push(...childMatches);\n        }\n\n        output.push({ data: item, score });\n    }\n\n    return output.sort((a, b) => b.score - a.score);\n}\n\nexport function findBestItemMatches(\n    items: NavigationItemNormalized[],\n    options: ItemMatchesFindOptions = {},\n) : NavigationItemNormalized[] {\n    const result = findItemMatchesIF(items, options, { score: 0 });\n    const [first] = result;\n    if (!first) {\n        return [];\n    }\n\n    return result\n        .filter((match) => match.score === first.score)\n        .map((match) => match.data);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NavigationItem, NavigationItemNormalized } from '../types';\n\nfunction normalizeItemIF(\n    item: NavigationItem,\n    trace: string[],\n) : NavigationItemNormalized {\n    const output : NavigationItemNormalized = {\n        ...item,\n        children: [],\n        trace: [\n            ...trace,\n            item.name,\n        ],\n        meta: item.meta || {},\n    };\n\n    if (!item.children) {\n        return output;\n    }\n\n    for (let i = 0; i < item.children.length; i++) {\n        output.children.push(normalizeItemIF(item.children[i], output.trace));\n    }\n\n    return output;\n}\n\nexport function normalizeItem(\n    item: NavigationItem,\n) : NavigationItemNormalized {\n    return normalizeItemIF(item, []);\n}\n\nexport function normalizeItems(\n    items: NavigationItem[],\n) : NavigationItemNormalized[] {\n    return items.map((item) => normalizeItem(item));\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isTraceEqual(\n    a: string[],\n    b: string[],\n): boolean {\n    if (a.length !== b.length) {\n        return false;\n    }\n\n    for (const [i, element] of a.entries()) {\n        if (element !== b[i]) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nexport function isTracePartOf(item: string[], parent: string[]) {\n    for (const [i, element] of item.entries()) {\n        if (parent[i] !== element) {\n            return false;\n        }\n    }\n\n    return true;\n}\n","import type { NavigationItemNormalized } from '../types';\nimport { isTraceEqual, isTracePartOf } from './trace';\n\nfunction resetItemsByTraceIF(\n    items: NavigationItemNormalized[],\n    trace: string[],\n) {\n    for (const item of items) {\n        const isEqual = isTraceEqual(item.trace, trace);\n        item.active = isEqual;\n        item.display = true;\n\n        if (isEqual) {\n            item.activeWithin = false;\n            item.displayChildren = true;\n        } else {\n            const isAncestor = isTracePartOf(item.trace, trace);\n            item.activeWithin = isAncestor;\n            item.displayChildren = isAncestor;\n        }\n\n        item.children = resetItemsByTraceIF(item.children, trace);\n    }\n\n    return items;\n}\n\nexport function resetItemsByTrace(\n    items: NavigationItemNormalized[],\n    trace: string[],\n) {\n    return resetItemsByTraceIF(items, trace);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n    NavigationOrientation,\n    NavigationSubmenu,\n    NavigationSubmenuMode,\n} from '../types';\n\n/**\n * Resolve the effective submenu presentation. An explicit `collapse` /\n * `dropdown` wins; `auto` derives from orientation — only an explicit\n * `horizontal` opts into the dropdown (NavigationMenu) path, everything\n * else collapses (Collapsible).\n */\nexport function resolveSubmenuMode(\n    submenu: NavigationSubmenu | undefined,\n    orientation: NavigationOrientation | undefined,\n): NavigationSubmenuMode {\n    if (submenu === 'collapse' || submenu === 'dropdown') {\n        return submenu;\n    }\n\n    return orientation === 'horizontal' ? 'dropdown' : 'collapse';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NavigationItemNormalized } from '../types';\n\n/**\n * Walk a normalized tree along `trace` (an ordered list of item names,\n * root → leaf) and collect the item at each depth. Returns the ordered\n * active trail: `[0]` is the top-level section, `.at(-1)` is the leaf.\n */\nexport function collectTrail(\n    items: NavigationItemNormalized[],\n    trace: string[],\n): NavigationItemNormalized[] {\n    const output: NavigationItemNormalized[] = [];\n\n    let level = items;\n    for (const name of trace) {\n        const found = level.find((item) => item.name === name);\n        if (!found) {\n            break;\n        }\n\n        output.push(found);\n        level = found.children;\n    }\n\n    return output;\n}\n\n/**\n * Depth-first collect of every item in the tree matching `predicate`.\n */\nexport function flattenWhere(\n    items: NavigationItemNormalized[],\n    predicate: (item: NavigationItemNormalized) => boolean,\n): NavigationItemNormalized[] {\n    const output: NavigationItemNormalized[] = [];\n\n    for (const item of items) {\n        if (predicate(item)) {\n            output.push(item);\n        }\n\n        if (item.children.length > 0) {\n            output.push(...flattenWhere(item.children, predicate));\n        }\n    }\n\n    return output;\n}\n","export function isAbsoluteURL(str: string): boolean {\n    return str.substring(0, 7) === 'http://' ||\n        str.substring(0, 8) === 'https://';\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\n\n/**\n * Default classes for the `navigation` theme entry. Shared between\n * `<VCNavItems>` (the container) and `<VCNavItem>` (the per-row\n * component) — both call `useComponentTheme('navigation', …)` with\n * the same slot defaults, so the source of truth lives here.\n */\nexport const navigationThemeDefaults: ComponentThemeDefinition<NavigationThemeClasses> = {\n    classes: {\n        group: 'vc-nav-items',\n        item: 'vc-nav-item',\n        itemNested: 'vc-nav-item-nested',\n        separator: 'vc-nav-separator',\n        link: 'vc-nav-link',\n        linkRoot: 'vc-nav-link-root',\n        linkIcon: 'vc-nav-link-icon',\n        linkText: 'vc-nav-link-text',\n        trigger: 'vc-nav-trigger',\n        content: 'vc-nav-content',\n        viewport: 'vc-nav-viewport',\n    },\n    variants: {\n        // `list` is the default vertical/stacked look; `pills` renders the\n        // items as a joined pill group (the nav-pills style). Structural CSS\n        // for these markers ships in the package `assets/index.css`; palette\n        // colors stay the theme's responsibility.\n        variant: {\n            list: {},\n            pills: {\n                group: 'vc-nav-items--pills',\n                item: 'vc-nav-item--pills',\n                link: 'vc-nav-link--pills',\n            },\n        },\n        orientation: {\n            horizontal: {},\n            vertical: { group: 'vc-nav-items--vertical' },\n        },\n    },\n    defaultVariants: {\n        variant: 'list',\n        orientation: 'horizontal',\n    },\n};\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { NavigationItemNormalized } from '../types';\n\n/**\n * Channels a `<VCNavItem>`'s already-normalized + scored `children` down\n * to the nested `<VCNavItems>` that renders its submenu.\n *\n * The top-level nav scores the WHOLE tree once; nested lists must render\n * those results as-is rather than re-resolving / re-scoring a subtree\n * (which would clobber traces and lose whole-tree active context). The\n * nested `<VCNavItems>` reads this when it has no own `data` prop —\n * presence of the injected nodes is what marks it as a nested renderer\n * rather than a resolving root. Each `<VCNavItem>` re-provides its own\n * children, so the value is correctly scoped per nesting level.\n */\nexport const NAVIGATION_NODES_KEY: InjectionKey<ComputedRef<NavigationItemNormalized[]>> = Symbol('vc-navigation-nodes');\n\n/**\n * Bridges a clicked `<VCNavItem>` up to the owning root `<VCNavItems>`.\n *\n * A url-less item can't navigate, so a click instead \"selects\" it: the\n * root nav records the item's trace and folds it into its active-state\n * derivation, publishing it through the registry's `active` / `activeTrail`.\n * Dependent navs then react with zero app wiring — exactly as they would\n * for a route-driven active change.\n */\nexport type NavigationSelectContext = {\n    /** Invoke to mark `item` as the selected (active) item of the root nav. */\n    select: (item: NavigationItemNormalized) => void;\n};\n\nexport const NAVIGATION_SELECT_KEY: InjectionKey<NavigationSelectContext> = Symbol('vc-navigation-select');\n","import { hasNormalizedSlot, normalizeSlot, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport type { LinkProperties } from '@vuecs/link';\nimport { VCLink } from '@vuecs/link';\nimport type {\n    Component,\n    ExtractPublicPropTypes,\n    PropType,\n    SlotsType,\n    VNodeChild,\n} from 'vue';\nimport {\n    computed,\n    defineComponent,\n    h,\n    inject,\n    provide,\n    ref,\n    resolveComponent,\n    watch,\n} from 'vue';\nimport {\n    CollapsibleContent,\n    CollapsibleRoot,\n    CollapsibleTrigger,\n    NavigationMenuContent,\n    NavigationMenuItem,\n    NavigationMenuLink,\n    NavigationMenuTrigger,\n} from 'reka-ui';\nimport type {\n    NavigationItemNormalized,\n    NavigationOrientation,\n    NavigationSubmenuMode,\n} from '../../types';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\nimport { isAbsoluteURL } from '../../helpers';\nimport { ElementType, SlotName } from '../../constants';\nimport type {\n    NavItemLinkSlotProps,\n    NavItemSeparatorSlotProps,\n    NavItemSubItemsSlotProps,\n    NavItemSubSlotProps,\n    NavItemSubTitleSlotProps,\n} from '../type';\nimport { navigationThemeDefaults } from '../items/theme';\nimport { NAVIGATION_NODES_KEY, NAVIGATION_SELECT_KEY } from '../select-context';\n\nconst navItemProps = {\n    data: {\n        type: Object as PropType<NavigationItemNormalized>,\n        required: true,\n    },\n    variant: {\n        type: String,\n        default: undefined,\n    },\n    orientation: {\n        type: String as PropType<NavigationOrientation>,\n        default: undefined,\n    },\n    /**\n     * Resolved submenu presentation handed down by the parent\n     * `<VCNavItems>`. `collapse` renders groups as an inline\n     * Reka `Collapsible`; `dropdown` renders them as Reka\n     * `NavigationMenu` flyouts.\n     */\n    submenu: {\n        type: String as PropType<NavigationSubmenuMode>,\n        default: 'collapse',\n    },\n    /**\n     * The tag (or component) this item renders as — its own wrapper\n     * (`<li>` by default). Receives `<VCNavItems>`' `itemAs`. Honored in\n     * collapse mode only.\n     */\n    as: {\n        type: [String, Object, Function] as PropType<string | Component>,\n        default: 'li',\n    },\n    /**\n     * The list-container tag for this item's nested submenu\n     * `<VCNavItems>` (`<ul>` by default). Receives `<VCNavItems>`' `as`.\n     * Honored in collapse mode only.\n     */\n    itemsAs: {\n        type: [String, Object, Function] as PropType<string | Component>,\n        default: 'ul',\n    },\n    themeClass: {\n        type: Object as PropType<ThemeClassesOverride<NavigationThemeClasses>>,\n        default: undefined,\n    },\n    themeVariant: {\n        type: Object as PropType<VariantValues>,\n        default: undefined,\n    },\n};\n\nexport type NavItemProps = ExtractPublicPropTypes<typeof navItemProps>;\n\nexport const VCNavItem = defineComponent({\n    name: 'VCNavItem',\n    props: navItemProps,\n    slots: Object as SlotsType<{\n        separator: NavItemSeparatorSlotProps;\n        link: NavItemLinkSlotProps;\n        sub: NavItemSubSlotProps;\n        'sub-title': NavItemSubTitleSlotProps;\n        'sub-items': NavItemSubItemsSlotProps;\n    }>,\n    setup(props, { slots }) {\n        const itemsNode = resolveComponent('VCNavItems');\n\n        const themeProps: UseComponentThemeProps<NavigationThemeClasses> = {\n            get themeClass() {\n                return props.themeClass;\n            },\n            get themeVariant() {\n                return {\n                    ...(props.themeVariant ?? {}),\n                    ...(props.variant !== undefined ? { variant: props.variant } : {}),\n                };\n            },\n        };\n\n        const theme = useComponentTheme('navigation', themeProps, navigationThemeDefaults);\n\n        // `data` is `required: true`, so it's always present at runtime. The\n        // non-null assertion is needed because `defineComponent` widens\n        // required props declared via a separate `const` props object to\n        // `| undefined` in `setup` under strict (a Vue/TS inference quirk —\n        // inline prop objects don't exhibit it). Asserting here keeps every\n        // downstream `data.value` read clean instead of scattering `!`.\n        const data = computed(() => props.data!);\n        const hasChildren = computed(() => data.value.children &&\n            data.value.children.length > 0);\n\n        // Channel this item's already-scored children down to the nested\n        // `<VCNavItems>` that renders its submenu, so the child list renders\n        // them as-is instead of re-resolving / re-scoring a subtree. Scoped\n        // per item — each `<VCNavItem>` re-provides its own children.\n        provide(NAVIGATION_NODES_KEY, computed(() => data.value.children));\n\n        // Local expand state — seeded from the resolved `displayChildren`\n        // (driven by active-trail matching upstream) and resynced whenever\n        // that recomputes, so a path change auto-opens the active branch.\n        const open = ref(!!data.value.displayChildren);\n        watch(() => data.value.displayChildren, (value) => {\n            open.value = !!value;\n        });\n\n        // Selection bubbles up to the owning root `<VCNavItems>`, which folds\n        // this item's trace into its active state and republishes through the\n        // registry. The primary use is url-less section switchers (a top-nav\n        // tab that swaps a dependent sidebar without navigating). Items with\n        // a real url also navigate; the route change then supersedes the\n        // selection upstream.\n        const selectContext = inject(NAVIGATION_SELECT_KEY, null);\n        const select = () => {\n            selectContext?.select(data.value);\n        };\n\n        const toggle = () => {\n            open.value = !open.value;\n        };\n\n        // Iconify-style icon strings (e.g. `fa6-solid:home`, `lucide:plus`)\n        // contain a colon. Render via the globally-registered <VCIcon> so\n        // they resolve through the Iconify pipeline rather than landing as\n        // raw CSS classes on a literal <i>. Legacy class-string icons\n        // (`fa fa-home`, `material-icons home`) keep their <i class> rendering.\n        const renderIcon = (icon: string): VNodeChild => {\n            if (icon.includes(':')) {\n                return h(resolveComponent('VCIcon'), { name: icon });\n            }\n            return h('i', { class: icon });\n        };\n\n        const renderTitleInner = (resolved: NavigationThemeClasses): VNodeChild[] => [\n            ...(data.value.icon ?\n                [h('div', { class: resolved.linkIcon || undefined }, [\n                    renderIcon(data.value.icon),\n                ])] :\n                []),\n            h('div', { class: resolved.linkText || undefined }, [\n                data.value.name,\n            ]),\n        ];\n\n        const renderLeaf = (resolved: NavigationThemeClasses): VNodeChild => {\n            if (hasNormalizedSlot(SlotName.LINK, slots)) {\n                return normalizeSlot(SlotName.LINK, {\n                    data: data.value,\n                    select,\n                    isActive: data.value.active,\n                }, slots);\n            }\n\n            const linkProps: LinkProperties = {\n                active: data.value.active,\n                disabled: false,\n                prefetch: true,\n            };\n\n            if (data.value.url) {\n                if (\n                    isAbsoluteURL(data.value.url) ||\n                    data.value.url.startsWith('#')\n                ) {\n                    linkProps.href = data.value.url;\n                    if (data.value.urlTarget) {\n                        linkProps.target = data.value.urlTarget;\n                    }\n                } else {\n                    linkProps.to = data.value.url;\n                }\n            }\n\n            return h(VCLink, {\n                class: [resolved.link],\n                'data-vc-collection-item': '',\n                ...linkProps,\n                onClicked: select,\n            }, { default: () => renderTitleInner(resolved) });\n        };\n\n        const renderChildren = (): VNodeChild => {\n            if (hasNormalizedSlot(SlotName.SUB_ITEMS, slots)) {\n                return normalizeSlot(SlotName.SUB_ITEMS, {\n                    data: data.value,\n                    select,\n                    toggle,\n                });\n            }\n\n            // A dropdown group's flyout panel is plain content — a list of\n            // links — NOT another menu bar. Recursing with `submenu=\"dropdown\"`\n            // would nest a second `NavigationMenuRoot` inside this root's\n            // `NavigationMenuContent`; Reka's NavigationMenu is built around a\n            // SINGLE root per bar, and nesting roots breaks the hover state\n            // machine (the panel only opens on the first hover and never\n            // reopens). Rendering the panel contents in `collapse` mode keeps\n            // them a plain `<ul>` of links, so deeper groups degrade to inline\n            // collapsibles within the flyout instead of buggy sub-roots.\n            // No `data`: the nested list reads this item's children via the\n            // NAVIGATION_NODES_KEY inject provided in setup above.\n            return h(itemsNode, {\n                variant: props.variant,\n                orientation: props.orientation,\n                submenu: props.submenu === 'dropdown' ? 'collapse' : props.submenu,\n                as: props.itemsAs,\n                itemAs: props.as,\n                themeClass: props.themeClass,\n                themeVariant: props.themeVariant,\n            });\n        };\n\n        return () => {\n            const resolved = theme.value;\n            const isDropdown = props.submenu === 'dropdown';\n            const isActive = data.value.active || data.value.activeWithin;\n\n            // type: separator\n            if (data.value.type === ElementType.SEPARATOR) {\n                const body = hasNormalizedSlot(SlotName.SEPARATOR, slots) ?\n                    normalizeSlot(SlotName.SEPARATOR, { data: data.value }, slots) :\n                    h('div', { class: resolved.separator || undefined }, data.value.name);\n\n                if (isDropdown) {\n                    return h(NavigationMenuItem, { class: [resolved.item] }, { default: () => body });\n                }\n                return h(props.as, { class: [resolved.item] }, [body]);\n            }\n\n            // type: link (no children)\n            if (!hasChildren.value) {\n                const leaf = renderLeaf(resolved);\n\n                if (isDropdown) {\n                    return h(NavigationMenuItem, {\n                        class: [resolved.item],\n                        'data-active': data.value.active ? '' : undefined,\n                    }, {\n                        default: () => h(NavigationMenuLink, {\n                            active: data.value.active,\n                            asChild: true,\n                        }, { default: () => leaf }),\n                    });\n                }\n\n                return h(props.as, {\n                    class: [resolved.item, { active: data.value.active }],\n                    'data-active': data.value.active ? '' : undefined,\n                }, [leaf]);\n            }\n\n            // type: group with children — full-override slot bypasses the\n            // Collapsible / NavigationMenu machinery entirely.\n            if (hasNormalizedSlot(SlotName.SUB, slots)) {\n                const body = normalizeSlot(SlotName.SUB, {\n                    data: data.value,\n                    select,\n                    toggle,\n                }, slots);\n\n                if (isDropdown) {\n                    return h(NavigationMenuItem, {\n                        class: [resolved.item, resolved.itemNested],\n                        'data-active': isActive ? '' : undefined,\n                    }, { default: () => body });\n                }\n                return h(props.as, {\n                    class: [resolved.item, resolved.itemNested, { active: isActive }],\n                    'data-active': isActive ? '' : undefined,\n                }, [body]);\n            }\n\n            const title = hasNormalizedSlot(SlotName.SUB_TITLE, slots) ?\n                normalizeSlot(SlotName.SUB_TITLE, {\n                    data: data.value,\n                    select,\n                    toggle,\n                }) :\n                renderTitleInner(resolved);\n\n            // dropdown: Reka NavigationMenu flyout\n            if (isDropdown) {\n                return h(NavigationMenuItem, {\n                    class: [resolved.item, resolved.itemNested],\n                    'data-active': isActive ? '' : undefined,\n                }, {\n                    default: () => [\n                        h(NavigationMenuTrigger, {\n                            class: resolved.trigger || undefined,\n                            'data-vc-collection-item': '',\n                            'data-active': isActive ? '' : undefined,\n                        }, { default: () => title }),\n                        // Re-invoke `renderChildren()` per mount: Reka's\n                        // NavigationMenuContent unmounts on close and remounts on\n                        // reopen (unmountOnHide). A VNode can only be rendered\n                        // once, so handing back a pre-computed tree renders an\n                        // EMPTY flyout on the second open. The thunk produces a\n                        // fresh subtree each time the content mounts.\n                        h(NavigationMenuContent, { class: resolved.content || undefined }, { default: () => renderChildren() }),\n                    ],\n                });\n            }\n\n            // collapse: inline Reka Collapsible\n            return h(CollapsibleRoot, {\n                as: props.as,\n                class: [\n                    resolved.item,\n                    resolved.itemNested,\n                    { active: data.value.active || open.value },\n                ],\n                'data-active': isActive ? '' : undefined,\n                open: open.value,\n                'onUpdate:open': (value: boolean) => {\n                    open.value = value;\n                },\n            }, {\n                default: () => [\n                    h(CollapsibleTrigger, {\n                        class: resolved.trigger || undefined,\n                        'data-vc-collection-item': '',\n                        'data-active': isActive ? '' : undefined,\n                    }, { default: () => title }),\n                    h(CollapsibleContent, { class: resolved.content || undefined }, { default: () => renderChildren() }),\n                ],\n            });\n        };\n    },\n});\n","import {\n    hasNormalizedSlot,\n    isPromise,\n    normalizeSlot,\n    useArrowNavigation,\n    useComponentTheme,\n} from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport type {\n    Component,\n    ExtractPublicPropTypes,\n    PropType,\n    SlotsType,\n    VNodeArrayChildren,\n    VNodeChild,\n    WatchSource,\n} from 'vue';\nimport {\n    computed,\n    defineComponent,\n    getCurrentInstance,\n    h,\n    inject,\n    onMounted,\n    onUnmounted,\n    provide,\n    ref,\n    watch,\n    watchEffect,\n} from 'vue';\nimport { NavigationMenuList, NavigationMenuRoot } from 'reka-ui';\nimport { SlotName } from '../../constants';\nimport type {\n    NavigationItem,\n    NavigationItemNormalized,\n    NavigationOrientation,\n    NavigationResolver,\n    NavigationSubmenu,\n} from '../../types';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\nimport {\n    collectTrail,\n    findBestItemMatches,\n    flattenWhere,\n    normalizeItems,\n    resetItemsByTrace,\n    resolveSubmenuMode,\n} from '../../helpers';\nimport { NavigationRegistry, tryInjectNavigationRegistry } from '../../registry';\nimport { VCNavItem } from '../item';\nimport { NAVIGATION_NODES_KEY, NAVIGATION_SELECT_KEY } from '../select-context';\nimport type { NavItemsItemSlotProps } from '../type';\nimport { navigationThemeDefaults } from './theme';\n\nconst navItemsProps = {\n    /**\n     * The source of this nav's items. Plain array, sync fn, or async fn.\n     * A fn receives a NavigationResolverContext and may read reactive\n     * state freely — the nav re-runs it automatically when that state\n     * changes.\n     *\n     * When omitted, the nav checks whether it is a nested submenu of a\n     * parent `<VCNavItem>` (via the {@link NAVIGATION_NODES_KEY} inject)\n     * and, if so, renders that parent's already-scored children as-is.\n     */\n    data: {\n        type: [Array, Function] as PropType<NavigationItem[] | NavigationResolver>,\n        default: undefined,\n    },\n    /** Opt in to publishing this nav's resolved output into the registry. */\n    registry: { type: Boolean, default: false },\n    /** The key under which to publish. Required when `registry` is true. */\n    registryId: { type: String, default: undefined },\n    /**\n     * Current path for active-state matching. When omitted, the nav softly\n     * reads vue-router's current route (via the `$route` global property)\n     * if a router is installed; router-free apps simply get `undefined`.\n     */\n    path: { type: String, default: undefined },\n    /**\n     * Extra reactive deps that should retrigger the resolver — for state\n     * read only AFTER the first `await` in an async resolver (auto-track\n     * can't see past an await).\n     */\n    watch: { type: Array as PropType<WatchSource[]>, default: undefined },\n    variant: { type: String, default: undefined },\n    orientation: { type: String as PropType<NavigationOrientation>, default: undefined },\n    /**\n     * How items with children render their submenu. `auto` derives from\n     * orientation (horizontal → dropdown, otherwise collapse).\n     */\n    submenu: { type: String as PropType<NavigationSubmenu>, default: 'auto' },\n    /**\n     * The tag (or component) for this nav's list container. Defaults to\n     * `'ul'`. Forwarded unchanged to every nesting level so the whole tree\n     * renders the same container tag. Honored in collapse mode only —\n     * dropdown mode keeps Reka's NavigationMenu primitives.\n     */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'ul' },\n    /**\n     * The tag (or component) for each item wrapper. Defaults to `'li'`.\n     * Forwarded unchanged to every nesting level. Honored in collapse mode\n     * only — dropdown mode keeps Reka's NavigationMenu primitives.\n     */\n    itemAs: { type: [String, Object, Function] as PropType<string | Component>, default: 'li' },\n    themeClass: { type: Object as PropType<ThemeClassesOverride<NavigationThemeClasses>>, default: undefined },\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type NavItemsProps = ExtractPublicPropTypes<typeof navItemsProps>;\n\nexport const VCNavItems = defineComponent({\n    name: 'VCNavItems',\n    props: navItemsProps,\n    slots: Object as SlotsType<{\n        item: NavItemsItemSlotProps;\n    }>,\n    setup(props, { slots, expose }) {\n        // Merge the convenience `variant` prop into themeVariant before\n        // resolution so themes can drive slot classes off it. Getter keeps\n        // it reactive (computed() inside useComponentTheme tracks the read).\n        const themeProps: UseComponentThemeProps<NavigationThemeClasses> = {\n            get themeClass() {\n                return props.themeClass;\n            },\n            get themeVariant() {\n                return {\n                    ...(props.themeVariant ?? {}),\n                    ...(props.variant !== undefined ? { variant: props.variant } : {}),\n                    ...(props.orientation !== undefined ? { orientation: props.orientation } : {}),\n                };\n            },\n        };\n\n        const theme = useComponentTheme('navigation', themeProps, navigationThemeDefaults);\n\n        const rootRef = ref<HTMLUListElement | null>(null);\n\n        const onKeyDown = (event: KeyboardEvent) => {\n            useArrowNavigation(\n                event,\n                event.target as HTMLElement | null,\n                rootRef.value,\n                {\n                    arrowKeyOptions: 'vertical',\n                    focus: true,\n                    loop: true,\n                },\n            );\n        };\n\n        // Registry is empty-safe: a standalone nav (no plugin installed)\n        // falls back to a local empty registry so `registry(id)` still works.\n        const registry = tryInjectNavigationRegistry() ?? new NavigationRegistry();\n\n        // Soft vue-router lookup: vue-router installs a reactive `$route`\n        // getter on `globalProperties`. Reading it inside a computed tracks\n        // route changes without a static `vue-router` import, so router-free\n        // apps degrade to `undefined` instead of failing to resolve the\n        // module. An explicit `:path` prop always wins.\n        const globals = getCurrentInstance()?.appContext.config.globalProperties;\n        const currentPath = computed<string | undefined>(() => {\n            if (typeof props.path !== 'undefined') {\n                return props.path;\n            }\n            const route = globals?.$route as { path?: string } | undefined;\n            return route?.path;\n        });\n\n        // Nested submenu detection: a parent `<VCNavItem>` provides its\n        // already-scored children via NAVIGATION_NODES_KEY. When this nav\n        // has no own `data` and such nodes are present, it is a nested\n        // renderer — it skips resolving / scoring / select / registry and\n        // just renders the provided subtree. An explicit `data` always\n        // wins (treated as a resolving root even when nested in markup).\n        const injectedNodes = inject(NAVIGATION_NODES_KEY, null);\n        const isNested = computed(() => typeof props.data === 'undefined' && injectedNodes !== null);\n\n        // --- click-driven selection (url-less section switchers) ---\n        // A url-less item can't navigate, so a click \"selects\" it instead:\n        // we record its trace and fold it into active-state derivation\n        // below, publishing it through the registry like a route change.\n        // Only a root nav holds this state and provides the bridge —\n        // nested `<VCNavItems>` let the click bubble up to their owning root.\n        const selectedTrace = ref<string[] | null>(null);\n        if (!isNested.value) {\n            provide(NAVIGATION_SELECT_KEY, {\n                select: (item) => {\n                    selectedTrace.value = item.trace;\n                },\n            });\n            // A real navigation supersedes a prior selection: once the\n            // route changes, hand active-state back to path matching.\n            watch(currentPath, () => {\n                selectedTrace.value = null;\n            });\n        }\n\n        // --- resolver + reactivity (root mode only; nested bypasses) ---\n        const raw = ref<NavigationItem[]>([]);\n        // Monotonic run token: overlapping async resolvers can settle out of\n        // order, so only the latest invocation is allowed to write `raw.value`\n        // — a slower earlier run must not clobber a fresher result.\n        let runToken = 0;\n\n        async function run() {\n            const token = ++runToken;\n            const value = typeof props.data === 'function' ?\n                props.data({\n                    path: currentPath.value,\n                    registry: (id: string) => registry.get(id),\n                }) :\n                (props.data ?? []);\n\n            if (!isPromise(value)) {\n                raw.value = value ?? [];\n                return;\n            }\n\n            try {\n                const awaited = (await value) ?? [];\n                if (token === runToken) {\n                    raw.value = awaited;\n                }\n            } catch (error) {\n                // Without this, a rejected resolver surfaces as an unhandled\n                // rejection from the watcher effect. Only the latest run logs.\n                if (token === runToken) {\n                    // eslint-disable-next-line no-console\n                    console.error('[vuecs] <VCNavItems> resolver rejected:', error);\n                }\n            }\n        }\n\n        if (!isNested.value) {\n            // Auto-track: reactive reads in `run` BEFORE the first await retrigger it.\n            watchEffect(run);\n            // Escape hatch for state read AFTER an await:\n            if (props.watch) {\n                watch(props.watch, run);\n            }\n        }\n\n        // Imperative escape hatch:\n        expose({ refresh: run });\n\n        // --- normalized + tree-wide scored derivation ---\n        const resolved = computed<{ items: NavigationItemNormalized[]; trace: string[] }>(() => {\n            if (isNested.value && injectedNodes) {\n                return { items: injectedNodes.value, trace: [] };\n            }\n\n            const normalized = normalizeItems(raw.value);\n            const [match] = findBestItemMatches(normalized, { path: currentPath.value });\n            // A click-driven selection (url-less switcher) overrides the\n            // path match until the next real navigation clears it.\n            const trace = selectedTrace.value ?? (match ? match.trace : []);\n            // sets per item: .active (exact) AND .activeWithin (ancestor)\n            resetItemsByTrace(normalized, trace);\n            return { items: normalized, trace };\n        });\n\n        const tree = computed(() => resolved.value.items);\n        const active = computed(() => flattenWhere(tree.value, (item) => !!item.active));\n        const activeTrail = computed(() => collectTrail(tree.value, resolved.value.trace));\n\n        // --- registry publish (opt-in, lifecycle-bound) ---\n        if (props.registry) {\n            let unsubscribeFn : (() => void) | undefined;\n\n            const entry = {\n                items: tree,\n                active,\n                activeTrail,\n            };\n\n            onMounted(() => {\n                if (!props.registryId) {\n                    // eslint-disable-next-line no-console\n                    console.warn('[vuecs] <VCNavItems registry> requires a `registry-id`.');\n                    return;\n                }\n                unsubscribeFn = registry.register(props.registryId, entry);\n            });\n            onUnmounted(() => {\n                if (!props.registryId || !unsubscribeFn) {\n                    return;\n                }\n\n                unsubscribeFn();\n            });\n        }\n\n        const submenuMode = computed(() => resolveSubmenuMode(props.submenu, props.orientation));\n\n        return () => {\n            const resolvedTheme = theme.value;\n            const vNodes: VNodeArrayChildren = [];\n\n            for (let i = 0; i < tree.value.length; i++) {\n                const item = tree.value[i];\n                if (!item.display && !item.displayChildren) {\n                    continue;\n                }\n\n                let vNode: VNodeChild;\n                if (hasNormalizedSlot(SlotName.ITEM, slots)) {\n                    vNode = normalizeSlot(SlotName.ITEM, { data: item }, slots);\n                } else {\n                    vNode = h(\n                        VCNavItem,\n                        {\n                            key: item.trace.join('/') || i,\n                            data: item,\n                            variant: props.variant,\n                            orientation: props.orientation,\n                            submenu: submenuMode.value,\n                            as: props.itemAs,\n                            itemsAs: props.as,\n                            themeClass: props.themeClass,\n                            themeVariant: props.themeVariant,\n                        },\n                    );\n                }\n\n                vNodes.push(vNode);\n            }\n\n            // Dropdown mode wraps the list in Reka's NavigationMenu so group\n            // triggers get flyout machinery (hover-grace, edge-aware content,\n            // arrow-key nav). Collapse mode stays a plain <ul> and wires our\n            // own arrow-navigation on the root.\n            if (submenuMode.value === 'dropdown') {\n                return h(\n                    NavigationMenuRoot,\n                    { orientation: 'horizontal' },\n                    {\n                        default: () => h(\n                            NavigationMenuList,\n                            { class: resolvedTheme.group || undefined },\n                            { default: () => vNodes },\n                        ),\n                    },\n                );\n            }\n\n            const isRoot = !isNested.value;\n\n            return h(\n                props.as,\n                {\n                    class: resolvedTheme.group || undefined,\n                    ...(isRoot ?\n                        { ref: rootRef, onKeydown: onKeyDown } :\n                        {}),\n                },\n                vNodes,\n            );\n        };\n    },\n});\n","import type { InjectionKey } from 'vue';\nimport { inject, provide } from 'vue';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport type { StepperThemeClasses } from './types';\n\n/**\n * Context shared from `<VCStepper>` to its descendant parts so that\n * theme-class and theme-variant values applied to the root propagate\n * automatically to indicator / title / description / separator / item /\n * trigger without the consumer having to repeat the props on every\n * child. Per-instance values on a child still win over inherited ones.\n *\n * Optional — children render bare (without inherited theme values) when\n * mounted outside `<VCStepper>` for unit tests / Storybook.\n */\nexport type StepperContext = {\n    themeClass: () => ThemeClassesOverride<StepperThemeClasses> | undefined;\n    themeVariant: () => VariantValues | undefined;\n};\n\nconst STEPPER_CONTEXT_KEY: InjectionKey<StepperContext> = Symbol('vcStepperContext');\n\nexport function provideStepperContext(ctx: StepperContext): void {\n    provide(STEPPER_CONTEXT_KEY, ctx);\n}\n\nexport function useStepperContext(): StepperContext | null {\n    return inject(STEPPER_CONTEXT_KEY, null);\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { StepperThemeClasses } from './types';\n\nexport const stepperThemeDefaults: ComponentThemeDefinition<StepperThemeClasses> = {\n    classes: {\n        root: 'vc-stepper',\n        item: 'vc-stepper-item',\n        trigger: 'vc-stepper-trigger',\n        indicator: 'vc-stepper-indicator',\n        title: 'vc-stepper-title',\n        description: 'vc-stepper-description',\n        separator: 'vc-stepper-separator',\n    },\n};\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { provideStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperProps = {\n    /** Active step (1-based). v-modeled. */\n    modelValue: { type: Number, default: undefined },\n    /** Initial active step for uncontrolled usage. */\n    defaultValue: { type: Number, default: 1 },\n    /** Layout direction. */\n    orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n    /** Reading direction. Falls back to the ConfigManager's `dir` value when omitted. */\n    dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n    /** When `true`, steps must be completed in order — Reka blocks navigation past the next incomplete step. */\n    linear: { type: Boolean, default: true },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperProps = ExtractPublicPropTypes<typeof stepperProps>;\n\nexport default defineComponent({\n    name: 'VCStepper',\n    inheritAttrs: false,\n    props: stepperProps,\n    emits: ['update:modelValue'],\n    setup(props, {\n        attrs,\n        slots,\n        emit,\n    }) {\n        // Propagate theme-class + theme-variant to descendant indicator /\n        // title / description / separator / item / trigger parts so a single\n        // `<VCStepper :theme-variant=\"{ size: 'sm' }\">` resizes the whole\n        // stepper, and `:theme-class=\"{ indicator: 'ring-2' }\">` skins every\n        // indicator. Children fall back to their own per-instance values\n        // when the consumer wants to override them.\n        provideStepperContext({\n            themeClass: () => props.themeClass,\n            themeVariant: () => props.themeVariant,\n        });\n        const theme = useComponentTheme('stepper', props, stepperThemeDefaults);\n        return () => h(\n            StepperRoot,\n            mergeProps(attrs, {\n                modelValue: props.modelValue,\n                defaultValue: props.defaultValue,\n                orientation: props.orientation,\n                dir: props.dir,\n                linear: props.linear,\n                'onUpdate:modelValue': (value: number | undefined) => emit('update:modelValue', value),\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 { StepperRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { provideStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperProps = {\n    /** Active step (1-based). v-modeled. */\n    modelValue: { type: Number, default: undefined },\n    /** Initial active step for uncontrolled usage. */\n    defaultValue: { type: Number, default: 1 },\n    /** Layout direction. */\n    orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n    /** Reading direction. Falls back to the ConfigManager's `dir` value when omitted. */\n    dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n    /** When `true`, steps must be completed in order — Reka blocks navigation past the next incomplete step. */\n    linear: { type: Boolean, default: true },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperProps = ExtractPublicPropTypes<typeof stepperProps>;\n\nexport default defineComponent({\n    name: 'VCStepper',\n    inheritAttrs: false,\n    props: stepperProps,\n    emits: ['update:modelValue'],\n    setup(props, {\n        attrs,\n        slots,\n        emit,\n    }) {\n        // Propagate theme-class + theme-variant to descendant indicator /\n        // title / description / separator / item / trigger parts so a single\n        // `<VCStepper :theme-variant=\"{ size: 'sm' }\">` resizes the whole\n        // stepper, and `:theme-class=\"{ indicator: 'ring-2' }\">` skins every\n        // indicator. Children fall back to their own per-instance values\n        // when the consumer wants to override them.\n        provideStepperContext({\n            themeClass: () => props.themeClass,\n            themeVariant: () => props.themeVariant,\n        });\n        const theme = useComponentTheme('stepper', props, stepperThemeDefaults);\n        return () => h(\n            StepperRoot,\n            mergeProps(attrs, {\n                modelValue: props.modelValue,\n                defaultValue: props.defaultValue,\n                orientation: props.orientation,\n                dir: props.dir,\n                linear: props.linear,\n                'onUpdate:modelValue': (value: number | undefined) => emit('update:modelValue', value),\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, SlotsType } from 'vue';\nimport { StepperItem } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nexport type StepperItemSlotProps = {\n    state: 'active' | 'completed' | 'inactive';\n};\n\nconst stepperItemProps = {\n    /** 1-based step index. Required by Reka — used to determine completion / active state. */\n    step: { type: Number, required: true },\n    /** Block interaction with this step. */\n    disabled: { type: Boolean, default: false },\n    /** Force completion state. Reka derives this automatically when `false`. */\n    completed: { type: Boolean, default: false },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperItemProps = ExtractPublicPropTypes<typeof stepperItemProps>;\n\nexport default defineComponent({\n    name: 'VCStepperItem',\n    inheritAttrs: false,\n    props: stepperItemProps,\n    slots: Object as SlotsType<{\n        default: StepperItemSlotProps;\n    }>,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperItem,\n            // `step` is required on StepperItem; vue-tsc loses that\n            // through `mergeProps`'s untyped `Data` return, so we pass\n            // it as a direct prop (and merge attrs separately for\n            // pass-through HTML attrs / data-* / class composition).\n            // The `group` utility scopes child\n            // `group-data-[state=...]:` selectors in theme-tailwind so\n            // child indicators / titles can react to the parent step's\n            // state without explicit attribute wiring on every child.\n            {\n                // `step` is `required: true`; the `!` counters the\n                // separate-const props widening to `| undefined` under strict.\n                step: props.step!,\n                disabled: props.disabled,\n                completed: props.completed,\n                ...mergeProps(attrs, { class: ['group', theme.value.item || undefined] }),\n            },\n            { default: ({ state }: StepperItemSlotProps) => slots.default?.({ state }) },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { StepperItem } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nexport type StepperItemSlotProps = {\n    state: 'active' | 'completed' | 'inactive';\n};\n\nconst stepperItemProps = {\n    /** 1-based step index. Required by Reka — used to determine completion / active state. */\n    step: { type: Number, required: true },\n    /** Block interaction with this step. */\n    disabled: { type: Boolean, default: false },\n    /** Force completion state. Reka derives this automatically when `false`. */\n    completed: { type: Boolean, default: false },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperItemProps = ExtractPublicPropTypes<typeof stepperItemProps>;\n\nexport default defineComponent({\n    name: 'VCStepperItem',\n    inheritAttrs: false,\n    props: stepperItemProps,\n    slots: Object as SlotsType<{\n        default: StepperItemSlotProps;\n    }>,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperItem,\n            // `step` is required on StepperItem; vue-tsc loses that\n            // through `mergeProps`'s untyped `Data` return, so we pass\n            // it as a direct prop (and merge attrs separately for\n            // pass-through HTML attrs / data-* / class composition).\n            // The `group` utility scopes child\n            // `group-data-[state=...]:` selectors in theme-tailwind so\n            // child indicators / titles can react to the parent step's\n            // state without explicit attribute wiring on every child.\n            {\n                // `step` is `required: true`; the `!` counters the\n                // separate-const props widening to `| undefined` under strict.\n                step: props.step!,\n                disabled: props.disabled,\n                completed: props.completed,\n                ...mergeProps(attrs, { class: ['group', theme.value.item || undefined] }),\n            },\n            { default: ({ state }: StepperItemSlotProps) => slots.default?.({ state }) },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTrigger } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTriggerProps = {\n    /** Render the consumer's slot child as the trigger root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'button' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTriggerProps = ExtractPublicPropTypes<typeof stepperTriggerProps>;\n\nexport default defineComponent({\n    name: 'VCStepperTrigger',\n    inheritAttrs: false,\n    props: stepperTriggerProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperTrigger,\n            mergeProps(\n                // Default to type=\"button\" only when rendering a real\n                // <button>; otherwise it'd submit any wrapping <form>.\n                // Consumer's `attrs` still wins because mergeProps gives\n                // later objects precedence on `type`.\n                props.as === 'button' ? { type: 'button' } : {},\n                attrs,\n                {\n                    as: props.as,\n                    asChild: props.asChild,\n                    class: theme.value.trigger || undefined,\n                },\n            ),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTrigger } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTriggerProps = {\n    /** Render the consumer's slot child as the trigger root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'button' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTriggerProps = ExtractPublicPropTypes<typeof stepperTriggerProps>;\n\nexport default defineComponent({\n    name: 'VCStepperTrigger',\n    inheritAttrs: false,\n    props: stepperTriggerProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperTrigger,\n            mergeProps(\n                // Default to type=\"button\" only when rendering a real\n                // <button>; otherwise it'd submit any wrapping <form>.\n                // Consumer's `attrs` still wins because mergeProps gives\n                // later objects precedence on `type`.\n                props.as === 'button' ? { type: 'button' } : {},\n                attrs,\n                {\n                    as: props.as,\n                    asChild: props.asChild,\n                    class: theme.value.trigger || undefined,\n                },\n            ),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperIndicator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperIndicatorProps = {\n    /** Render the consumer's slot child as the indicator root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperIndicatorProps = ExtractPublicPropTypes<typeof stepperIndicatorProps>;\n\nexport default defineComponent({\n    name: 'VCStepperIndicator',\n    inheritAttrs: false,\n    props: stepperIndicatorProps,\n    setup(props, { attrs, slots }) {\n        // Inherit theme-variant (notably `size`) from the parent <VCStepper>\n        // so the consumer doesn't have to repeat `:theme-variant` on every\n        // indicator. Per-instance `props.themeVariant` still wins.\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperIndicator,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.indicator || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperIndicator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperIndicatorProps = {\n    /** Render the consumer's slot child as the indicator root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperIndicatorProps = ExtractPublicPropTypes<typeof stepperIndicatorProps>;\n\nexport default defineComponent({\n    name: 'VCStepperIndicator',\n    inheritAttrs: false,\n    props: stepperIndicatorProps,\n    setup(props, { attrs, slots }) {\n        // Inherit theme-variant (notably `size`) from the parent <VCStepper>\n        // so the consumer doesn't have to repeat `:theme-variant` on every\n        // indicator. Per-instance `props.themeVariant` still wins.\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperIndicator,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.indicator || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTitle } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTitleProps = {\n    /** Render the consumer's slot child as the title root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'h4' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTitleProps = ExtractPublicPropTypes<typeof stepperTitleProps>;\n\nexport default defineComponent({\n    name: 'VCStepperTitle',\n    inheritAttrs: false,\n    props: stepperTitleProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperTitle,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.title || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTitle } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTitleProps = {\n    /** Render the consumer's slot child as the title root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'h4' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTitleProps = ExtractPublicPropTypes<typeof stepperTitleProps>;\n\nexport default defineComponent({\n    name: 'VCStepperTitle',\n    inheritAttrs: false,\n    props: stepperTitleProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperTitle,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.title || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperDescription } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperDescriptionProps = {\n    /** Render the consumer's slot child as the description root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'p' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperDescriptionProps = ExtractPublicPropTypes<typeof stepperDescriptionProps>;\n\nexport default defineComponent({\n    name: 'VCStepperDescription',\n    inheritAttrs: false,\n    props: stepperDescriptionProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperDescription,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.description || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperDescription } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperDescriptionProps = {\n    /** Render the consumer's slot child as the description root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'p' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperDescriptionProps = ExtractPublicPropTypes<typeof stepperDescriptionProps>;\n\nexport default defineComponent({\n    name: 'VCStepperDescription',\n    inheritAttrs: false,\n    props: stepperDescriptionProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperDescription,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.description || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperSeparator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperSeparatorProps = {\n    /** Render the consumer's slot child as the separator root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperSeparatorProps = ExtractPublicPropTypes<typeof stepperSeparatorProps>;\n\nexport default defineComponent({\n    name: 'VCStepperSeparator',\n    inheritAttrs: false,\n    props: stepperSeparatorProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperSeparator,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.separator || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperSeparator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperSeparatorProps = {\n    /** Render the consumer's slot child as the separator root (Reka `asChild` pattern). */\n    asChild: { type: Boolean, default: false },\n    /** HTML tag to render. */\n    as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n    /** Theme-class overrides for this component instance. */\n    themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n    /** Theme-variant values for this component instance. */\n    themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperSeparatorProps = ExtractPublicPropTypes<typeof stepperSeparatorProps>;\n\nexport default defineComponent({\n    name: 'VCStepperSeparator',\n    inheritAttrs: false,\n    props: stepperSeparatorProps,\n    setup(props, { attrs, slots }) {\n        const ctx = useStepperContext();\n        const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n            get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n            get themeVariant() {\n                return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n            },\n        };\n        const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n        return () => h(\n            StepperSeparator,\n            mergeProps(attrs, {\n                as: props.as,\n                asChild: props.asChild,\n                class: theme.value.separator || undefined,\n            }),\n            { default: () => slots.default?.() },\n        );\n    },\n});\n</script>\n","import { installDefaultsManager, installThemeManager } from '@vuecs/core';\nimport type { App, Component, Plugin } from 'vue';\n\nimport '../assets/index.css';\nimport './vue';\nimport { NavigationRegistry, provideNavigationRegistry } from './registry';\n\nimport {\n    VCBreadcrumb,\n    VCBreadcrumbEllipsis,\n    VCBreadcrumbItem,\n    VCBreadcrumbLink,\n    VCBreadcrumbList,\n    VCBreadcrumbPage,\n    VCBreadcrumbSeparator,\n    VCNavItem,\n    VCNavItems,\n    VCStepper,\n    VCStepperDescription,\n    VCStepperIndicator,\n    VCStepperItem,\n    VCStepperSeparator,\n    VCStepperTitle,\n    VCStepperTrigger,\n    provideBreadcrumbLeafRegistry,\n    provideBreadcrumbManager,\n} from './components';\nimport type { Options } from './types';\n\nexport * from './components';\nexport * from './registry';\nexport * from './types';\n\nexport function install(instance: App, options: Options = {}): void {\n    provideNavigationRegistry(new NavigationRegistry(), instance);\n    // App-scoped breadcrumb manager + leaf registry (not module singletons —\n    // a singleton would leak the trail across concurrent SSR requests).\n    provideBreadcrumbManager(undefined, instance);\n    provideBreadcrumbLeafRegistry(undefined, instance);\n\n    installThemeManager(instance, options);\n    installDefaultsManager(instance, options);\n\n    Object.entries({\n        VCBreadcrumb,\n        VCBreadcrumbList,\n        VCBreadcrumbItem,\n        VCBreadcrumbLink,\n        VCBreadcrumbPage,\n        VCBreadcrumbSeparator,\n        VCBreadcrumbEllipsis,\n        VCNavItem,\n        VCNavItems,\n        VCStepper,\n        VCStepperItem,\n        VCStepperTrigger,\n        VCStepperIndicator,\n        VCStepperTitle,\n        VCStepperDescription,\n        VCStepperSeparator,\n        // `VCBreadcrumb` is exported as a generic-over-`Item` function type,\n        // which isn't structurally a Vue `Component` — cast back for registration.\n    }).forEach(([componentName, component]) => {\n        instance.component(componentName, component as Component);\n    });\n}\n\nexport default { install } satisfies Plugin<[Options?]>;\n"],"mappings":"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"}