@wow-two-beta/ui-vue 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.vue_vue_type_script_setup_true_lang-Cl2ejukE.js","sources":["../../src/presentation/layout/box/Box.vue","../../src/presentation/layout/hStack/HStack.vue","../../src/presentation/layout/vStack/VStack.vue","../../src/presentation/layout/grid/Grid.variants.ts","../../src/presentation/layout/grid/Grid.vue","../../src/presentation/layout/container/Container.variants.ts","../../src/presentation/layout/container/Container.vue","../../src/presentation/layout/flex/Flex.vue","../../src/presentation/layout/aspectRatio/AspectRatio.vue","../../src/presentation/layout/spacer/Spacer.vue","../../src/presentation/layout/center/Center.vue","../../src/presentation/layout/divider/Divider.variants.ts","../../src/presentation/layout/divider/Divider.vue","../../src/presentation/layout/scrollArea/ScrollArea.vue","../../src/presentation/layout/cluster/Cluster.vue","../../src/presentation/layout/frame/Frame.vue","../../src/presentation/layout/twoColumn/TwoColumn.vue","../../src/presentation/layout/resizablePanels/ResizablePanels.vue","../../src/presentation/layout/resizablePanels/ResizablePanel.vue","../../src/presentation/layout/resizablePanels/ResizableSeparator.vue","../../src/presentation/layout/pullToRefresh/PullToRefresh.vue","../../src/presentation/layout/appShell/AppShell.vue","../../src/presentation/layout/appShell/AppShellHeader.vue","../../src/presentation/layout/appShell/AppShellSidebar.vue","../../src/presentation/layout/appShell/AppShellMain.vue","../../src/presentation/layout/appShell/AppShellContent.vue","../../src/presentation/layout/appShell/AppShellAside.vue","../../src/presentation/layout/appShell/AppShellFooter.vue","../../src/presentation/layout/overlay/Overlay.variants.ts","../../src/presentation/layout/overlay/Overlay.vue","../../src/presentation/layout/surface/Surface.vue","../../src/presentation/layout/section/Section.variants.ts","../../src/presentation/layout/section/Section.vue","../../src/presentation/layout/navbar/Navbar.variants.ts","../../src/presentation/layout/navbar/Navbar.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\n\nexport interface BoxProps {\n /** The HTML element to render. Default `div`. */\n as?: ElementType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * The lowest-level layout primitive. Renders any element (default `div`)\n * with className passthrough. Use as a styling shell when no other layout\n * atom fits.\n *\n * `inheritAttrs: false` so a caller's `class` goes through `cn` (tailwind-merge\n * resolves the conflict) instead of Vue's blind class concatenation — the same\n * last-wins precedence React's `cn(…, className)` gives.\n */\ndefineOptions({ name: 'Box', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<BoxProps>(), { as: 'div' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() => cn(attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","<script lang=\"ts\">\nimport type { StackProps } from '../stack/Stack.vue';\n\nexport type HStackProps = Omit<StackProps, 'direction'>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\nimport Stack from '../stack/Stack.vue';\n\n/** Stack preset: `direction=\"row\"`. */\ndefineOptions({ name: 'HStack', inheritAttrs: false });\n\n/**\n * No `defineProps` — every `StackProps` key falls through `$attrs` onto the\n * inner `Stack`, which already declares them. `v-bind=\"$attrs\"` sits after\n * `direction` for the same reason React spread `{...props}` after it: the\n * spread wins, and `HStackProps` types `direction` away.\n */\nconst inner = useTemplateRef<InstanceType<typeof Stack>>('inner');\n\n/** The inner `Stack`'s root element — the React original's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <Stack ref=\"inner\" direction=\"row\" v-bind=\"$attrs\"><slot /></Stack>\n</template>\n","<script lang=\"ts\">\nimport type { StackProps } from '../stack/Stack.vue';\n\nexport type VStackProps = Omit<StackProps, 'direction'>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\nimport Stack from '../stack/Stack.vue';\n\n/** Stack preset: `direction=\"column\"` (default). Provided for symmetry with HStack. */\ndefineOptions({ name: 'VStack', inheritAttrs: false });\n\n/** See `HStack` — every `StackProps` key falls through `$attrs` onto the inner `Stack`. */\nconst inner = useTemplateRef<InstanceType<typeof Stack>>('inner');\n\n/** The inner `Stack`'s root element — the React original's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <Stack ref=\"inner\" direction=\"column\" v-bind=\"$attrs\"><slot /></Stack>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const gridVariants = tv({\n base: 'grid',\n variants: {\n columns: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-2',\n '3': 'grid-cols-3',\n '4': 'grid-cols-4',\n '5': 'grid-cols-5',\n '6': 'grid-cols-6',\n '8': 'grid-cols-8',\n '12': 'grid-cols-12',\n },\n gap: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n },\n defaultVariants: {\n columns: '2',\n gap: '4',\n },\n});\n\nexport type GridVariants = VariantProps<typeof gridVariants>;\n\n/** Represents the scalar column count accepted by `Grid` (also the per-breakpoint value). */\nexport type GridColumns = NonNullable<GridVariants['columns']>;\n\n/** Represents the scalar gap step accepted by `Grid` (also the per-breakpoint value). */\nexport type GridGap = NonNullable<GridVariants['gap']>;\n\n/** Defines the responsive breakpoints `Grid` understands (`base` = unprefixed). */\nexport const GridBreakpoint = {\n /** Refers to the unprefixed (mobile-first) breakpoint. */\n Base: 'base',\n /** Refers to the `sm:` breakpoint. */\n Sm: 'sm',\n /** Refers to the `md:` breakpoint. */\n Md: 'md',\n /** Refers to the `lg:` breakpoint. */\n Lg: 'lg',\n /** Refers to the `xl:` breakpoint. */\n Xl: 'xl',\n} as const;\n\nexport type GridBreakpoint = (typeof GridBreakpoint)[keyof typeof GridBreakpoint];\n\n/**\n * Represents a responsive value for `columns` / `gap` — a per-breakpoint map.\n * `base` is the unprefixed value; the rest map to Tailwind's `sm:`–`xl:` prefixes.\n */\nexport type GridResponsive<T extends string> = Partial<Record<GridBreakpoint, T>>;\n\n/* Tailwind can't see interpolated class names, so every responsive permutation\n is spelled out as a complete literal here (base + sm/md/lg/xl prefixes). */\nconst COLUMN_CLASSES: Record<GridBreakpoint, Record<GridColumns, string>> = {\n base: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-2',\n '3': 'grid-cols-3',\n '4': 'grid-cols-4',\n '5': 'grid-cols-5',\n '6': 'grid-cols-6',\n '8': 'grid-cols-8',\n '12': 'grid-cols-12',\n },\n sm: {\n '1': 'sm:grid-cols-1',\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-3',\n '4': 'sm:grid-cols-4',\n '5': 'sm:grid-cols-5',\n '6': 'sm:grid-cols-6',\n '8': 'sm:grid-cols-8',\n '12': 'sm:grid-cols-12',\n },\n md: {\n '1': 'md:grid-cols-1',\n '2': 'md:grid-cols-2',\n '3': 'md:grid-cols-3',\n '4': 'md:grid-cols-4',\n '5': 'md:grid-cols-5',\n '6': 'md:grid-cols-6',\n '8': 'md:grid-cols-8',\n '12': 'md:grid-cols-12',\n },\n lg: {\n '1': 'lg:grid-cols-1',\n '2': 'lg:grid-cols-2',\n '3': 'lg:grid-cols-3',\n '4': 'lg:grid-cols-4',\n '5': 'lg:grid-cols-5',\n '6': 'lg:grid-cols-6',\n '8': 'lg:grid-cols-8',\n '12': 'lg:grid-cols-12',\n },\n xl: {\n '1': 'xl:grid-cols-1',\n '2': 'xl:grid-cols-2',\n '3': 'xl:grid-cols-3',\n '4': 'xl:grid-cols-4',\n '5': 'xl:grid-cols-5',\n '6': 'xl:grid-cols-6',\n '8': 'xl:grid-cols-8',\n '12': 'xl:grid-cols-12',\n },\n};\n\nconst GAP_CLASSES: Record<GridBreakpoint, Record<GridGap, string>> = {\n base: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n sm: {\n '0': 'sm:gap-0',\n '1': 'sm:gap-1',\n '2': 'sm:gap-2',\n '3': 'sm:gap-3',\n '4': 'sm:gap-4',\n '5': 'sm:gap-5',\n '6': 'sm:gap-6',\n '8': 'sm:gap-8',\n '10': 'sm:gap-10',\n '12': 'sm:gap-12',\n },\n md: {\n '0': 'md:gap-0',\n '1': 'md:gap-1',\n '2': 'md:gap-2',\n '3': 'md:gap-3',\n '4': 'md:gap-4',\n '5': 'md:gap-5',\n '6': 'md:gap-6',\n '8': 'md:gap-8',\n '10': 'md:gap-10',\n '12': 'md:gap-12',\n },\n lg: {\n '0': 'lg:gap-0',\n '1': 'lg:gap-1',\n '2': 'lg:gap-2',\n '3': 'lg:gap-3',\n '4': 'lg:gap-4',\n '5': 'lg:gap-5',\n '6': 'lg:gap-6',\n '8': 'lg:gap-8',\n '10': 'lg:gap-10',\n '12': 'lg:gap-12',\n },\n xl: {\n '0': 'xl:gap-0',\n '1': 'xl:gap-1',\n '2': 'xl:gap-2',\n '3': 'xl:gap-3',\n '4': 'xl:gap-4',\n '5': 'xl:gap-5',\n '6': 'xl:gap-6',\n '8': 'xl:gap-8',\n '10': 'xl:gap-10',\n '12': 'xl:gap-12',\n },\n};\n\nconst BREAKPOINT_ORDER: ReadonlyArray<GridBreakpoint> = ['base', 'sm', 'md', 'lg', 'xl'];\n\n/** Resolves a scalar-or-responsive `columns` value to its complete Tailwind class string. */\nexport function resolveGridColumns(\n value: GridColumns | GridResponsive<GridColumns> | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return COLUMN_CLASSES.base[value];\n return BREAKPOINT_ORDER.map((bp) => {\n const v = value[bp];\n return v === undefined ? undefined : COLUMN_CLASSES[bp][v];\n })\n .filter((c): c is string => Boolean(c))\n .join(' ');\n}\n\n/** Resolves a scalar-or-responsive `gap` value to its complete Tailwind class string. */\nexport function resolveGridGap(\n value: GridGap | GridResponsive<GridGap> | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return GAP_CLASSES.base[value];\n return BREAKPOINT_ORDER.map((bp) => {\n const v = value[bp];\n return v === undefined ? undefined : GAP_CLASSES[bp][v];\n })\n .filter((c): c is string => Boolean(c))\n .join(' ');\n}\n","<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\nimport type { GridColumns, GridGap, GridResponsive } from './Grid.variants';\n\nexport interface GridProps {\n as?: ElementType;\n /**\n * The equal-column track count. Scalar (`'3'`) emits `grid-cols-3`; a responsive\n * map (`{ base: '1', md: '2', lg: '3' }`) emits per-breakpoint prefixed\n * classes. Default `'2'`.\n */\n columns?: GridColumns | GridResponsive<GridColumns>;\n\n /**\n * The gap between tracks. Scalar (`'4'`) emits `gap-4`; a responsive map\n * (`{ base: '2', lg: '6' }`) emits per-breakpoint prefixed classes. Default `'4'`.\n */\n gap?: GridGap | GridResponsive<GridGap>;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { resolveGridColumns, resolveGridGap } from './Grid.variants';\n\n/**\n * CSS grid container with column and gap variants. Both `columns` and `gap`\n * accept a scalar value or a responsive `{ base, sm, md, lg, xl }` map. For\n * non-uniform tracks pass an explicit `:style=\"{ gridTemplateColumns }\"` — the\n * variant covers the equal-column case.\n */\ndefineOptions({ name: 'Grid', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<GridProps>(), {\n as: 'div',\n columns: '2',\n gap: '4',\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'grid',\n resolveGridColumns(props.columns),\n resolveGridGap(props.gap),\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the max-width preset of a `Container`. */\nexport const ContainerSize = {\n /** Refers to the small screen max-width. */\n Sm: 'sm',\n /** Refers to the medium screen max-width. */\n Md: 'md',\n /** Refers to the large screen max-width. */\n Lg: 'lg',\n /** Refers to the extra-large screen max-width. */\n Xl: 'xl',\n /** Refers to the 2x extra-large screen max-width. */\n Xxl: '2xl',\n /** Refers to an unconstrained (full) max-width. */\n Full: 'full',\n} as const;\n\nexport type ContainerSize = (typeof ContainerSize)[keyof typeof ContainerSize];\n\nexport const containerVariants = tv({\n base: 'mx-auto w-full px-4',\n variants: {\n size: {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n },\n },\n defaultVariants: {\n size: 'lg',\n },\n});\n\nexport type ContainerVariants = VariantProps<typeof containerVariants>;\n\n/* Compile-time lock: enum values ≡ tv variant keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertContainerSize: AssertExact<\n ContainerSize,\n NonNullable<VariantProps<typeof containerVariants>['size']>\n> = true;\nvoid _assertContainerSize;\n","<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\nimport type { ContainerSize } from './Container.variants';\n\nexport interface ContainerProps {\n as?: ElementType;\n /** The max-width preset. Default `lg`. */\n size?: ContainerSize;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { containerVariants } from './Container.variants';\n\n/**\n * Centered max-width wrapper with horizontal padding. Use at page-level to\n * constrain content width.\n */\ndefineOptions({ name: 'Container', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ContainerProps>(), { as: 'div' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(containerVariants({ size: props.size }), attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\n\nexport interface FlexProps {\n as?: ElementType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Bare flex container — no opinions on direction, gap, or alignment.\n * Use for one-off flex layouts that don't fit `Stack`'s variant matrix.\n */\ndefineOptions({ name: 'Flex', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FlexProps>(), { as: 'div' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() => cn('flex', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","<script lang=\"ts\">\nexport interface AspectRatioProps {\n /** The aspect ratio (width/height). Default 1 (square). */\n ratio?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Constrain children to an aspect ratio (width / height). Children are\n * absolutely positioned and stretched to fill — typically pass a single\n * `<img>`, `<video>`, or `<iframe>` with `class=\"absolute inset-0 w-full h-full\"`.\n */\ndefineOptions({ name: 'AspectRatio', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<AspectRatioProps>(), { ratio: 1 });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() => cn('relative w-full', attrs.class as string | undefined));\n\n/** `normalizeStyle` merges left → right, so a caller's `style` lands last and wins — as React's `{ aspectRatio, ...style }` did. */\nconst styles = computed(() => normalizeStyle([{ aspectRatio: `${props.ratio}` }, attrs.style]));\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\" :style=\"styles\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Orientation` is imported here (not in `<script setup>`) so the one binding\n serves as both the type below and the runtime value used in `withDefaults`. */\nimport { Orientation } from '../../../foundation/utils';\n\nexport interface SpacerProps {\n /** The explicit size (CSS length). When inside a flex/grid parent,\n * the default `flex: 1` already pushes siblings apart. */\n size?: number | string;\n\n /** The axis the fixed `size` applies to. Default `horizontal`. */\n axis?: Orientation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs, useTemplateRef, type CSSProperties } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * A flexible empty box. In a flex parent it expands (`flex: 1`) and pushes\n * siblings to opposite ends. Pass `size` for a fixed gap.\n */\n/* `<spacer>` is an obsolete HTML element. This is a library component — imported,\n never globally registered — so the name cannot shadow the tag, and renaming it\n would break parity with the React package. */\ndefineOptions({ name: 'Spacer', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SpacerProps>(), { axis: Orientation.Horizontal });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst fixed = computed<CSSProperties | undefined>(() => {\n if (props.size === undefined) return undefined;\n const length = typeof props.size === 'number' ? `${props.size}px` : props.size;\n return props.axis === Orientation.Horizontal\n ? { width: length, flexShrink: 0 }\n : { height: length, flexShrink: 0 };\n});\n\nconst classes = computed(() =>\n cn(props.size === undefined && 'flex-1', attrs.class as string | undefined),\n);\n\n/** `normalizeStyle` merges left → right, so a caller's `style` lands last and wins — as React's `{ ...fixed, ...style }` did. */\nconst styles = computed(() => normalizeStyle([fixed.value, attrs.style]));\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" aria-hidden=\"true\" v-bind=\"rest\" :class=\"classes\" :style=\"styles\" />\n</template>\n","<script lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nexport type CenterProps = HTMLAttributes;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/** Flex shorthand that centers its children both axes. */\n/* `<center>` is a deprecated HTML element. This is a library component — imported,\n never globally registered — so the name cannot shadow the tag, and renaming it\n would break parity with the React package. */\ndefineOptions({ name: 'Center', inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn('flex items-center justify-center', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { tv, type VariantProps, Orientation } from '../../../foundation/utils';\n\n/**\n * Provides the rule geometry for `Divider`. A horizontal divider is a full-width\n * top border; a vertical divider is a full-height left border that stretches to\n * its flex/grid parent. The line color is the semantic `border` token.\n */\nexport const dividerVariants = tv({\n base: 'border-border',\n variants: {\n orientation: {\n horizontal: 'w-full border-t',\n vertical: 'self-stretch border-l',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\nexport type DividerVariants = VariantProps<typeof dividerVariants>;\n\n/* Compile-time lock: shared `Orientation` values ≡ tv `orientation` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertDividerOrientation: AssertExact<\n Orientation,\n NonNullable<VariantProps<typeof dividerVariants>['orientation']>\n> = true;\nvoid _assertDividerOrientation;\n\n/** Represents the axis of a `Divider` — the shared {@link Orientation} vocabulary. */\nexport type DividerOrientation = Orientation;\n","<script lang=\"ts\">\nimport type { Orientation } from '../../../foundation/utils';\n\n/** A plain rule — `orientation` is required (no silent default; a rule's axis should always be stated). */\nexport interface PlainDividerProps {\n /**\n * The axis of the rule — the line's OWN direction: `vertical` draws a `│` between side-by-side content;\n * `horizontal` draws a `─` between stacked content.\n */\n orientation: Orientation;\n\n label?: never;\n}\n\n/** A labelled rule — the classic \"or\" separator; always horizontal, so `orientation` does not apply. */\nexport interface LabelledDividerProps {\n /**\n * The centered content overlaid on the (always-horizontal) rule, e.g. `<Divider label=\"or\" />`.\n * React typed this `ReactNode`; a Vue prop renders text, so richer content goes through the\n * same-named `label` slot — which overrides this value but does NOT select the labelled branch.\n */\n label: string | number;\n\n orientation?: never;\n}\n\n/**\n * A thin rule that separates content, using the semantic `border` token. Either a plain rule — pass the\n * required `orientation` (`<Divider :orientation=\"Orientation.Vertical\" />`) — or a labelled horizontal rule —\n * pass `label` (`<Divider label=\"or\" />`), which sits on the surface background.\n */\nexport type DividerProps = PlainDividerProps | LabelledDividerProps;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { dividerVariants } from './Divider.variants';\n\ndefineOptions({ name: 'Divider', inheritAttrs: false });\n\n/** Rich-content override for the `label` prop. Never a discriminator — `label != null` alone picks the branch, as in React. */\ndefineSlots<{ label?(): unknown }>();\n\nconst props = defineProps<DividerProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst isLabelled = computed(() => props.label != null);\n\nconst labelledClasses = computed(() =>\n cn('flex w-full items-center gap-3', attrs.class as string | undefined),\n);\n\nconst plainClasses = computed(() =>\n cn(dividerVariants({ orientation: props.orientation }), attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n v-if=\"isLabelled\"\n ref=\"el\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n v-bind=\"rest\"\n :class=\"labelledClasses\"\n >\n <span class=\"h-px flex-1 bg-border\" />\n <span class=\"text-sm text-muted-foreground\"><slot name=\"label\">{{ props.label }}</slot></span>\n <span class=\"h-px flex-1 bg-border\" />\n </div>\n\n <div\n v-else\n ref=\"el\"\n role=\"separator\"\n :aria-orientation=\"props.orientation\"\n v-bind=\"rest\"\n :class=\"plainClasses\"\n />\n</template>\n","<script lang=\"ts\">\n/**\n * Defines the scroll axis of a `ScrollArea`. Diverges from the shared\n * `Orientation` (adds `Both`), so it stays a local enum.\n */\nexport const ScrollAxis = {\n /** Refers to vertical scrolling only. */\n Vertical: 'vertical',\n /** Refers to horizontal scrolling only. */\n Horizontal: 'horizontal',\n /** Refers to scrolling on both axes. */\n Both: 'both',\n} as const;\n\nexport type ScrollAxis = (typeof ScrollAxis)[keyof typeof ScrollAxis];\n\nexport interface ScrollAreaProps {\n /** The scroll axis. Default `vertical`. */\n axis?: ScrollAxis;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Native scrollable container with stable visuals. For custom-styled\n * scrollbars (track + thumb separately animated) use the L5 ScrollArea\n * organism. This atom exists for the common case.\n */\ndefineOptions({ name: 'ScrollArea', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ScrollAreaProps>(), { axis: ScrollAxis.Vertical });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'relative',\n props.axis === ScrollAxis.Vertical && 'overflow-y-auto overflow-x-hidden',\n props.axis === ScrollAxis.Horizontal && 'overflow-x-auto overflow-y-hidden',\n props.axis === ScrollAxis.Both && 'overflow-auto',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Align` is imported here (not in `<script setup>`) so the one binding serves\n as both the type below and the runtime value used in `withDefaults`. */\nimport { Align } from '../../../foundation/utils';\n\nexport interface ClusterProps {\n /** The gap between children. Default `4`. */\n gap?: '2' | '3' | '4' | '6' | '8';\n\n /** The cross-axis justification. Default `center`. */\n justify?: Align;\n}\n\nconst GAP: Record<NonNullable<ClusterProps['gap']>, string> = {\n '2': 'gap-2', '3': 'gap-3', '4': 'gap-4', '6': 'gap-6', '8': 'gap-8',\n};\nconst JUSTIFY: Record<NonNullable<ClusterProps['justify']>, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Centered wrapping row — for auth-page action clusters, hero CTAs, footer\n * link groups. `Inline` left-aligns; `Cluster` centers by default.\n */\ndefineOptions({ name: 'Cluster', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ClusterProps>(), { gap: '4', justify: Align.Center });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'flex flex-wrap items-center',\n GAP[props.gap],\n JUSTIFY[props.justify],\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Radius` is imported here (not in `<script setup>`) so the one binding serves\n as both the type below and the runtime value used in `withDefaults`. */\nimport { Radius } from '../../../foundation/utils';\n\n/** Defines the surface background of a `Frame`. */\nexport const FrameSurface = {\n /** Refers to a raised card surface. */\n Card: 'card',\n /** Refers to a recessed muted surface. */\n Muted: 'muted',\n /** Refers to no surface fill (transparent). */\n Transparent: 'transparent',\n} as const;\n\nexport type FrameSurface = (typeof FrameSurface)[keyof typeof FrameSurface];\n\nexport interface FrameProps {\n /** The padding. Default `4`. */\n padding?: '0' | '2' | '3' | '4' | '6' | '8';\n\n /** The border radius. Default `md`. */\n radius?: Radius;\n\n /** The surface background — `card` (raised) or `muted` (recessed). Default `card`. */\n surface?: FrameSurface;\n\n /** The border visibility. Default `true`. */\n isBordered?: boolean;\n}\n\nconst PADDING: Record<NonNullable<FrameProps['padding']>, string> = {\n '0': '', '2': 'p-2', '3': 'p-3', '4': 'p-4', '6': 'p-6', '8': 'p-8',\n};\nconst RADIUS: Record<Radius, string> = {\n none: '',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n};\nconst SURFACE: Record<FrameSurface, string> = {\n card: 'bg-card text-card-foreground',\n muted: 'bg-muted text-foreground',\n transparent: '',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Bordered shell with padding + radius — `Card` without slot semantics.\n * Use when you want the visual but not the structured Header/Body/Footer.\n */\n/* `<frame>` is a deprecated HTML element. This is a library component — imported,\n never globally registered — so the name cannot shadow the tag, and renaming it\n would break parity with the React package. */\ndefineOptions({ name: 'Frame', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FrameProps>(), {\n padding: '4',\n radius: Radius.Md,\n surface: FrameSurface.Card,\n isBordered: true,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n SURFACE[props.surface],\n PADDING[props.padding],\n RADIUS[props.radius],\n props.isBordered && 'border border-border',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Side` is imported here (not in `<script setup>`) so the one binding serves\n as both the type below and the runtime value used in `withDefaults`. */\nimport { Side } from '../../../foundation/utils';\n\nexport interface TwoColumnProps {\n /** The aside width — Tailwind class string (e.g. `w-64`). Default `w-64`. */\n asideWidth?: string;\n\n /** The side the aside sits on — `left` or `right`. Default `left`. */\n asideSide?: Side;\n\n /** The gap between aside and main. Default `6`. */\n gap?: '0' | '4' | '6' | '8' | '10';\n}\n\nconst GAP: Record<NonNullable<TwoColumnProps['gap']>, string> = {\n '0': 'gap-0', '4': 'gap-4', '6': 'gap-6', '8': 'gap-8', '10': 'gap-10',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Two-pane layout — fixed-width aside + flexible main. Sidebar+content,\n * filter+results, table-of-contents+article patterns.\n */\ndefineOptions({ name: 'TwoColumn', inheritAttrs: false });\n\n/**\n * React's `aside` / `children` ReactNode props become slots: structural content\n * regions have no prop equivalent in Vue, and a slot is what a template can\n * fill. `aside` was required in React and stays required here.\n */\ndefineSlots<{\n /** The sidebar / aside content. */\n aside(): unknown;\n /** The main content. */\n default(): unknown;\n}>();\n\nconst props = withDefaults(defineProps<TwoColumnProps>(), {\n asideWidth: 'w-64',\n asideSide: Side.Left,\n gap: '6',\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'flex w-full',\n props.asideSide === Side.Right && 'flex-row-reverse',\n GAP[props.gap],\n attrs.class as string | undefined,\n ),\n);\n\nconst asideClasses = computed(() => cn('shrink-0', props.asideWidth));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <aside :class=\"asideClasses\"><slot name=\"aside\" /></aside>\n <main class=\"min-w-0 flex-1\"><slot /></main>\n </div>\n</template>\n","<script lang=\"ts\">\nimport { inject, type InjectionKey } from 'vue';\n/* `Orientation` is imported as a value so the one binding serves as both the\n type below and the runtime default in `withDefaults`. */\nimport { Orientation } from '../../../foundation/utils';\n\n/** The size constraints a `ResizablePanel` contributes to its group. */\nexport interface PanelInfo {\n defaultSize: number;\n minSize: number;\n maxSize: number;\n}\n\n/**\n * The group context. Every member is a live getter or a method — read them,\n * never destructure, or the reactivity is lost at the point of the snapshot.\n */\nexport interface ResizableContextValue {\n readonly orientation: Orientation;\n readonly sizes: ReadonlyArray<number>;\n readonly panels: ReadonlyArray<PanelInfo>;\n\n /**\n * Registration replaces React's `Children.map` index threading: a Vue parent\n * cannot rewrite its slot's children, so each child claims its own slot with an\n * identity token. Order is *registration* order — the same model the house\n * `createCollection` primitive uses — which equals document order for mount,\n * append, and remove.\n */\n registerPanel: (token: symbol, info: PanelInfo) => void;\n updatePanel: (token: symbol, info: PanelInfo) => void;\n unregisterPanel: (token: symbol) => void;\n panelIndex: (token: symbol) => number;\n\n registerSeparator: (token: symbol) => void;\n unregisterSeparator: (token: symbol) => void;\n separatorIndex: (token: symbol) => number;\n\n beginDrag: (separatorIndex: number, event: MouseEvent) => void;\n nudge: (separatorIndex: number, deltaPct: number) => void;\n resetPair: (separatorIndex: number) => void;\n}\n\nexport const resizableContextKey: InjectionKey<ResizableContextValue> =\n Symbol('wow-two.resizablePanels');\n\nexport function useResizableContext(): ResizableContextValue {\n const context = inject(resizableContextKey, null);\n if (!context) throw new Error('ResizablePanels.* must be used inside <ResizablePanels>');\n return context;\n}\n\nexport interface ResizablePanelsProps {\n /** The split axis — `horizontal` (side-by-side panels) or `vertical` (stacked). Default `horizontal`. */\n orientation?: Orientation;\n defaultSizes?: ReadonlyArray<number>;\n sizes?: ReadonlyArray<number>;\n onSizesChange?: (sizes: ReadonlyArray<number>) => void;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onScopeDispose, provide, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled } from '../../../foundation/hooks';\n\n/**\n * Two-or-more resizable panes split by draggable separators. Compose\n * `<ResizablePanel>` and `<ResizableSeparator>` as children — each claims its\n * index from this root through the injected context.\n */\ndefineOptions({ name: 'ResizablePanels', inheritAttrs: false });\n\n/** The panels and separators — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<ResizablePanelsProps>(), {\n orientation: Orientation.Horizontal,\n defaultSizes: undefined,\n sizes: undefined,\n onSizesChange: undefined,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\ninterface PanelEntry {\n token: symbol;\n info: PanelInfo;\n}\n\nconst panelEntries = ref<Array<PanelEntry>>([]);\nconst separatorTokens = ref<Array<symbol>>([]);\nconst panelCount = computed(() => panelEntries.value.length);\n\nconst controlled = useControlled<ReadonlyArray<number>>({\n controlled: () => props.sizes,\n default: props.defaultSizes ?? [],\n onChange: (next) => props.onSizesChange?.(next),\n});\n\n/**\n * React counted its panels before the first render (`Children.forEach`) and\n * seeded state from that. Children register *after* this setup, so the seed is\n * applied here instead — and the same watcher covers React's \"panel count\n * changed → reset to equal sizes\" effect.\n */\nwatch(\n panelCount,\n (count) => {\n if (controlled.value.value.length === count) return;\n if (props.defaultSizes && props.defaultSizes.length === count) {\n controlled.setValue(props.defaultSizes);\n return;\n }\n controlled.setValue(Array<number>(count).fill(100 / Math.max(count, 1)));\n },\n { immediate: true },\n);\n\nfunction findPanel(index: number): PanelInfo | undefined {\n return panelEntries.value[index]?.info;\n}\n\nfunction applyDelta(separatorIndex: number, deltaPct: number): void {\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = findPanel(a);\n const bInfo = findPanel(b);\n if (!aInfo || !bInfo) return;\n const next = controlled.value.value.slice();\n let nextA = next[a]! + deltaPct;\n let nextB = next[b]! - deltaPct;\n\n // Clamp by min/max — adjust deltaPct on overshoot.\n if (nextA < aInfo.minSize) {\n const adj = aInfo.minSize - nextA;\n nextA += adj;\n nextB -= adj;\n }\n if (nextB < bInfo.minSize) {\n const adj = bInfo.minSize - nextB;\n nextB += adj;\n nextA -= adj;\n }\n if (nextA > aInfo.maxSize) {\n const adj = nextA - aInfo.maxSize;\n nextA -= adj;\n nextB += adj;\n }\n if (nextB > bInfo.maxSize) {\n const adj = nextB - bInfo.maxSize;\n nextB -= adj;\n nextA += adj;\n }\n\n next[a] = nextA;\n next[b] = nextB;\n controlled.setValue(next);\n}\n\nlet dragCleanup: (() => void) | null = null;\n\n// Unmounting mid-drag must release the window listeners + body style overrides.\nonScopeDispose(() => dragCleanup?.());\n\nfunction beginDrag(separatorIndex: number, event: MouseEvent): void {\n const container = el.value;\n if (!container) return;\n const startX = event.clientX;\n const startY = event.clientY;\n const rect = container.getBoundingClientRect();\n const total = props.orientation === Orientation.Horizontal ? rect.width : rect.height;\n if (total === 0) return;\n\n const startSizes = controlled.value.value.slice();\n\n const onMove = (e: MouseEvent): void => {\n const deltaPx =\n props.orientation === Orientation.Horizontal ? e.clientX - startX : e.clientY - startY;\n const deltaPct = (deltaPx / total) * 100;\n // Recompute against the start state, not the live state, to prevent drift.\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = findPanel(a);\n const bInfo = findPanel(b);\n if (!aInfo || !bInfo) return;\n let nextA = startSizes[a]! + deltaPct;\n let nextB = startSizes[b]! - deltaPct;\n nextA = Math.max(aInfo.minSize, Math.min(aInfo.maxSize, nextA));\n nextB = Math.max(bInfo.minSize, Math.min(bInfo.maxSize, nextB));\n // Restore the locked total after clamping.\n const sum = nextA + nextB;\n const startSum = startSizes[a]! + startSizes[b]!;\n if (sum !== startSum) {\n const diff = startSum - sum;\n // Push surplus onto whichever side has slack.\n if (nextA + diff <= aInfo.maxSize && nextA + diff >= aInfo.minSize) {\n nextA = nextA + diff;\n } else {\n nextB = nextB + diff;\n }\n }\n const next = startSizes.slice();\n next[a] = nextA;\n next[b] = nextB;\n controlled.setValue(next);\n };\n\n const onUp = (): void => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n dragCleanup = null;\n };\n\n document.body.style.cursor =\n props.orientation === Orientation.Horizontal ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n dragCleanup = onUp;\n}\n\nfunction resetPair(separatorIndex: number): void {\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = findPanel(a);\n const bInfo = findPanel(b);\n if (!aInfo || !bInfo) return;\n const next = controlled.value.value.slice();\n const total = next[a]! + next[b]!;\n next[a] = (total * aInfo.defaultSize) / (aInfo.defaultSize + bInfo.defaultSize);\n next[b] = total - next[a]!;\n controlled.setValue(next);\n}\n\nprovide(resizableContextKey, {\n get orientation() {\n return props.orientation;\n },\n get sizes() {\n return controlled.value.value;\n },\n get panels() {\n return panelEntries.value.map((entry) => entry.info);\n },\n registerPanel: (token, info) => {\n panelEntries.value = [...panelEntries.value, { token, info }];\n },\n updatePanel: (token, info) => {\n panelEntries.value = panelEntries.value.map((entry) =>\n entry.token === token ? { token, info } : entry,\n );\n },\n unregisterPanel: (token) => {\n panelEntries.value = panelEntries.value.filter((entry) => entry.token !== token);\n },\n panelIndex: (token) => panelEntries.value.findIndex((entry) => entry.token === token),\n registerSeparator: (token) => {\n separatorTokens.value = [...separatorTokens.value, token];\n },\n unregisterSeparator: (token) => {\n separatorTokens.value = separatorTokens.value.filter((existing) => existing !== token);\n },\n separatorIndex: (token) => separatorTokens.value.indexOf(token),\n beginDrag,\n nudge: applyDelta,\n resetPair,\n});\n\nconst classes = computed(() =>\n cn(\n 'flex h-full w-full',\n props.orientation === Orientation.Horizontal ? 'flex-row' : 'flex-col',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" :data-orientation=\"props.orientation\" v-bind=\"rest\" :class=\"classes\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ResizablePanelProps {\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, useAttrs, useTemplateRef, watch, type CSSProperties } from 'vue';\nimport { cn, Orientation } from '../../../foundation/utils';\nimport { useResizableContext } from './ResizablePanels.vue';\n\n/**\n * One pane of a `<ResizablePanels>` group.\n *\n * React's `ResizablePanel` was an inert marker the parent swapped for an inner\n * impl through `Children.map`. Vue cannot rewrite slot children, so this is the\n * real component and it claims its index by registering with the group.\n */\ndefineOptions({ name: 'ResizablePanel', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ResizablePanelProps>(), {\n defaultSize: 100,\n minSize: 0,\n maxSize: 100,\n});\n\nconst context = useResizableContext();\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst token = Symbol('wow-two.resizablePanel');\ncontext.registerPanel(token, {\n defaultSize: props.defaultSize,\n minSize: props.minSize,\n maxSize: props.maxSize,\n});\n\nwatch(\n () => [props.defaultSize, props.minSize, props.maxSize] as const,\n ([defaultSize, minSize, maxSize]) => {\n context.updatePanel(token, { defaultSize, minSize, maxSize });\n },\n);\n\nonUnmounted(() => context.unregisterPanel(token));\n\nconst index = computed(() => context.panelIndex(token));\nconst size = computed(() => context.sizes[index.value] ?? props.defaultSize);\n\nconst styles = computed<CSSProperties>(() =>\n context.orientation === Orientation.Horizontal\n ? { width: `${size.value}%`, height: '100%' }\n : { height: `${size.value}%`, width: '100%' },\n);\n\nconst classes = computed(() => cn('overflow-auto', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" :data-panel-index=\"index\" v-bind=\"rest\" :class=\"classes\" :style=\"styles\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ResizableSeparatorProps {\n isDisabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref, useAttrs, useTemplateRef } from 'vue';\nimport { cn, composeEventHandlers, Orientation } from '../../../foundation/utils';\nimport { useResizableContext } from './ResizablePanels.vue';\n\n/** The draggable rule between two `<ResizablePanel>`s. Arrow keys nudge, double-click resets the pair. */\ndefineOptions({ name: 'ResizableSeparator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ResizableSeparatorProps>(), { isDisabled: false });\n\nconst context = useResizableContext();\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst token = Symbol('wow-two.resizableSeparator');\ncontext.registerSeparator(token);\nonUnmounted(() => context.unregisterSeparator(token));\n\nconst index = computed(() => context.separatorIndex(token));\nconst dragging = ref(false);\n\nfunction handleMouseDown(e: MouseEvent): void {\n if (props.isDisabled) return;\n if (e.button !== 0) return;\n e.preventDefault();\n dragging.value = true;\n context.beginDrag(index.value, e);\n const onUp = (): void => {\n dragging.value = false;\n window.removeEventListener('mouseup', onUp);\n };\n window.addEventListener('mouseup', onUp);\n}\n\nfunction handleKeydown(e: KeyboardEvent): void {\n if (props.isDisabled) return;\n const step = e.shiftKey ? 10 : 1;\n if (context.orientation === Orientation.Horizontal) {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n context.nudge(index.value, -step);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n context.nudge(index.value, step);\n }\n } else {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n context.nudge(index.value, -step);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n context.nudge(index.value, step);\n }\n }\n}\n\nfunction handleDblclick(): void {\n if (props.isDisabled) return;\n context.resetPair(index.value);\n}\n\n/** A fallthrough listener may already be a chain; flatten it to one callable. */\nfunction asHandler<E extends Event>(value: unknown): ((event: E) => void) | undefined {\n if (typeof value === 'function') return value as (event: E) => void;\n if (Array.isArray(value)) {\n return (event) => {\n for (const fn of value) if (typeof fn === 'function') fn(event);\n };\n }\n return undefined;\n}\n\n/*\n * React ran the consumer's handler first, then skipped its own when the consumer\n * called `preventDefault()`. Vue's own attr merge would run both unconditionally,\n * so the two are composed by hand through the house helper instead.\n */\nconst onKeydown = computed(() =>\n composeEventHandlers<KeyboardEvent>(asHandler(attrs.onKeydown), handleKeydown),\n);\nconst onDblclick = computed(() =>\n composeEventHandlers<MouseEvent>(asHandler(attrs.onDblclick), handleDblclick),\n);\n\n// Announce the panel BEFORE the separator — ArrowRight/ArrowDown grow it, so size moves with the key.\nconst ariaValueNow = computed(() => Math.round(context.sizes[index.value] ?? 50));\nconst panelBefore = computed(() => context.panels[index.value]);\n\nconst classes = computed(() =>\n cn(\n 'flex shrink-0 items-center justify-center bg-border transition-colors',\n context.orientation === Orientation.Horizontal\n ? 'w-1 cursor-col-resize hover:bg-border-strong data-[dragging]:bg-primary'\n : 'h-1 cursor-row-resize hover:bg-border-strong data-[dragging]:bg-primary',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n props.isDisabled && 'cursor-default opacity-50 hover:bg-border',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class` and the two composed listeners, all re-applied above. */\nconst rest = computed(() => {\n const { class: _class, onKeydown: _keydown, onDblclick: _dblclick, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n role=\"separator\"\n :aria-orientation=\"context.orientation === Orientation.Horizontal ? 'vertical' : 'horizontal'\"\n :aria-valuenow=\"ariaValueNow\"\n :aria-valuemin=\"panelBefore?.minSize ?? 0\"\n :aria-valuemax=\"panelBefore?.maxSize ?? 100\"\n :aria-disabled=\"props.isDisabled || undefined\"\n :tabindex=\"props.isDisabled ? -1 : 0\"\n :data-dragging=\"dragging || undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n @mousedown=\"handleMouseDown\"\n @keydown=\"onKeydown\"\n @dblclick=\"onDblclick\"\n />\n</template>\n","<script lang=\"ts\">\nexport interface PullToRefreshProps {\n onRefresh: () => Promise<void> | void;\n threshold?: number;\n maxPull?: number;\n isDisabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { Announce, Politeness } from '../../../foundation/primitives';\nimport Spinner from '../../feedback/spinner/Spinner.vue';\n\n/**\n * Pull-to-refresh wrapper. Listen to pointer drag at scrollTop=0; once past\n * `threshold`, fire `onRefresh`. Visual indicator: spinner that scales in as\n * the user pulls.\n */\ndefineOptions({ name: 'PullToRefresh', inheritAttrs: false });\n\n/** The scrollable content — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<PullToRefreshProps>(), {\n threshold: 60,\n maxPull: 120,\n isDisabled: false,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst startY = ref<number | null>(null);\nconst pull = ref(0);\nconst refreshing = ref(false);\n\nconst reached = computed(() => pull.value >= props.threshold);\n\nfunction onPointerDown(e: PointerEvent): void {\n if (props.isDisabled || refreshing.value) return;\n const node = el.value;\n if (!node || node.scrollTop > 0) return;\n startY.value = e.clientY;\n}\n\nfunction onPointerMove(e: PointerEvent): void {\n if (startY.value == null) return;\n // Pointer was released outside the container — abandon the gesture.\n if (e.buttons === 0) {\n startY.value = null;\n pull.value = 0;\n return;\n }\n const dy = e.clientY - startY.value;\n if (dy < 0) {\n pull.value = 0;\n return;\n }\n // Resistance: sub-linear growth past threshold.\n const eased = dy < props.threshold ? dy : props.threshold + (dy - props.threshold) * 0.4;\n pull.value = Math.min(props.maxPull, eased);\n}\n\nasync function onPointerUp(): Promise<void> {\n if (startY.value == null) return;\n const didReach = pull.value >= props.threshold;\n startY.value = null;\n if (didReach) {\n refreshing.value = true;\n pull.value = props.threshold;\n try {\n await props.onRefresh();\n } finally {\n refreshing.value = false;\n pull.value = 0;\n }\n } else {\n pull.value = 0;\n }\n}\n\n// Touch: native vertical pan fires pointercancel and kills the gesture.\n// preventDefault touchmove only mid-pull (scrollTop 0, moving down); normal scroll stays native.\nfunction onTouchMove(e: TouchEvent): void {\n const node = el.value;\n if (!node || startY.value == null || !e.cancelable) return;\n if (node.scrollTop > 0) return;\n const touch = e.touches[0];\n if (!touch) return;\n if (touch.clientY - startY.value > 0) e.preventDefault();\n}\n\nonMounted(() => {\n el.value?.addEventListener('touchmove', onTouchMove, { passive: false });\n});\n\nonBeforeUnmount(() => {\n el.value?.removeEventListener('touchmove', onTouchMove);\n});\n\n// Releasing the pointer outside the container must still finish the gesture.\nwatch(pull, (value, _previous, onCleanup) => {\n if (value === 0) return;\n const finish = (): void => {\n void onPointerUp();\n };\n window.addEventListener('pointerup', finish);\n window.addEventListener('pointercancel', finish);\n onCleanup(() => {\n window.removeEventListener('pointerup', finish);\n window.removeEventListener('pointercancel', finish);\n });\n});\n\nconst classes = computed(() =>\n cn('relative h-full overflow-y-auto', attrs.class as string | undefined),\n);\n\n/**\n * Vue does not append `px` to a numeric `:style` value the way React does, so\n * every length below is spelled out.\n */\nconst indicatorStyle = computed(() => ({\n height: `${pull.value}px`,\n transition: startY.value == null ? 'height 200ms ease-out' : 'none',\n}));\n\nconst contentStyle = computed(() => ({\n transform: `translateY(${pull.value}px)`,\n transition: startY.value == null ? 'transform 200ms ease-out' : 'none',\n}));\n\nconst spinnerScaleStyle = computed(() => ({\n transform: `scale(${Math.min(1, pull.value / props.threshold)})`,\n}));\n\nconst spinnerWrapClasses = computed(() =>\n cn('transition-opacity', refreshing.value || reached.value ? 'opacity-100' : 'opacity-60'),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n v-bind=\"rest\"\n :class=\"classes\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\"\n @pointerup=\"onPointerUp\"\n @pointercancel=\"onPointerUp\"\n >\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute inset-x-0 top-0 z-raised flex items-center justify-center\"\n :style=\"indicatorStyle\"\n >\n <div v-if=\"pull > 8\" :class=\"spinnerWrapClasses\" :style=\"spinnerScaleStyle\">\n <Spinner size=\"md\" :tone=\"reached ? 'brand' : 'default'\" />\n </div>\n </div>\n\n <div :style=\"contentStyle\"><slot /></div>\n\n <Announce :politeness=\"Politeness.Polite\">{{ refreshing ? 'Refreshing' : '' }}</Announce>\n </div>\n</template>\n","<script lang=\"ts\">\nimport { inject, type ComputedRef, type InjectionKey, type Ref } from 'vue';\n\n/** Defines the responsive breakpoint at which `AppShell` collapses its sidebar / aside. */\nexport const Breakpoint = {\n /** Refers to the `sm` (640px) breakpoint. */\n Sm: 'sm',\n /** Refers to the `md` (768px) breakpoint. */\n Md: 'md',\n /** Refers to the `lg` (1024px) breakpoint. */\n Lg: 'lg',\n /** Refers to the `xl` (1280px) breakpoint. */\n Xl: 'xl',\n /** Refers to the `2xl` (1536px) breakpoint. */\n Xxl: '2xl',\n} as const;\n\nexport type Breakpoint = (typeof Breakpoint)[keyof typeof Breakpoint];\n\nconst BREAKPOINT_PX: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n/**\n * The value shared with `AppShellSidebar` / `AppShellAside`.\n *\n * React's context held plain values re-created on every render behind a\n * `useMemo`; here every field stays a ref or a computed, so a child reads the\n * live value and the root never re-renders to publish one.\n */\nexport interface AppShellContextValue {\n sidebarWidth: ComputedRef<string>;\n asideWidth: ComputedRef<string>;\n sidebarBreakpoint: ComputedRef<Breakpoint>;\n /** The resolved mobile-sidebar open state. Writable — an assignment routes through `setSidebarOpen`. */\n isSidebarOpen: Ref<boolean>;\n setSidebarOpen: (open: boolean) => void;\n /** True below `sidebarBreakpoint` — the sidebar renders as a `Drawer`. */\n isSidebarCollapsed: ComputedRef<boolean>;\n /** True below `asideBreakpoint` — the aside renders nothing. */\n isAsideHidden: ComputedRef<boolean>;\n}\n\nexport const appShellContextKey: InjectionKey<AppShellContextValue> = Symbol('wow-two.appShell');\n\nexport function useAppShellContext(): AppShellContextValue {\n const context = inject(appShellContextKey, null);\n if (!context) throw new Error('AppShell.* must be used inside <AppShell>');\n return context;\n}\n\n/** Reads the enclosing `AppShell`'s state — widths, breakpoint, and the mobile-sidebar toggle. */\nexport function useAppShell(): AppShellContextValue {\n return useAppShellContext();\n}\n\n/**\n * The prop surface of `AppShell`.\n *\n * `sidebarOpen` and `isSidebarOpen` are the same controlled state under two\n * names: `sidebarOpen` is the `v-model:sidebarOpen` binding target,\n * `isSidebarOpen` React's spelling. `isSidebarOpen` wins when both are set —\n * React's name always resolves first, so an explicit binding is never\n * swallowed by a `v-model` that is also present.\n * React's `onSidebarOpenChange` is the `sidebar-open-change` emit;\n * `update:sidebarOpen` fires alongside it so `v-model` works.\n */\nexport interface AppShellProps {\n /** The sidebar column width, any CSS length. Default `240px`. */\n sidebarWidth?: string;\n\n /** The aside rail width, any CSS length. Default `280px`. */\n asideWidth?: string;\n\n /** The sidebar collapses below this breakpoint. Default `lg`. */\n sidebarBreakpoint?: Breakpoint;\n\n /** The aside hides below this breakpoint. Default `xl`. */\n asideBreakpoint?: Breakpoint;\n\n /** The mobile-sidebar open state, controlled. The `v-model:sidebarOpen` binding target. */\n sidebarOpen?: boolean;\n\n /** The mobile-sidebar open state, controlled — React's spelling, which wins when both are set. */\n isSidebarOpen?: boolean;\n\n /** The initial mobile-sidebar state when uncontrolled. Default `false`. */\n defaultSidebarOpen?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, provide, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled, useMediaQuery } from '../../../foundation/hooks';\n\n/**\n * Top-level page frame. Children: `AppShellHeader` / `AppShellSidebar` /\n * `AppShellMain` / `AppShellAside` / `AppShellFooter`. CSS-grid layout; the\n * sidebar collapses to a `Drawer` below `sidebarBreakpoint`.\n */\ndefineOptions({ name: 'AppShell', inheritAttrs: false });\n\n/** The shell's regions — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\n/**\n * `sidebarOpen: undefined` / `isSidebarOpen: undefined` are load-bearing: Vue\n * coerces an absent `Boolean` prop to `false` unless the declaration *owns* a\n * `default` key, which would strand the uncontrolled path behind a\n * permanently-closed controlled one.\n */\nconst props = withDefaults(defineProps<AppShellProps>(), {\n sidebarWidth: '240px',\n asideWidth: '280px',\n sidebarBreakpoint: 'lg',\n asideBreakpoint: 'xl',\n sidebarOpen: undefined,\n isSidebarOpen: undefined,\n defaultSidebarOpen: false,\n});\n\nconst emit = defineEmits<{\n /** The `v-model:sidebarOpen` half. */\n 'update:sidebarOpen': [open: boolean];\n /** Replaces React's `onSidebarOpenChange`. */\n 'sidebar-open-change': [open: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst controlled = useControlled<boolean>({\n controlled: () =>\n props.isSidebarOpen !== undefined ? props.isSidebarOpen : props.sidebarOpen,\n default: () => props.defaultSidebarOpen,\n onChange: (value) => {\n emit('update:sidebarOpen', value);\n emit('sidebar-open-change', value);\n },\n});\n\nconst isSidebarWide = useMediaQuery(\n () => `(min-width: ${BREAKPOINT_PX[props.sidebarBreakpoint]}px)`,\n);\nconst isAsideWide = useMediaQuery(() => `(min-width: ${BREAKPOINT_PX[props.asideBreakpoint]}px)`);\n\nconst isSidebarCollapsed = computed(() => !isSidebarWide.value);\nconst isAsideHidden = computed(() => !isAsideWide.value);\n\nprovide(appShellContextKey, {\n sidebarWidth: computed(() => props.sidebarWidth),\n asideWidth: computed(() => props.asideWidth),\n sidebarBreakpoint: computed(() => props.sidebarBreakpoint),\n isSidebarOpen: controlled.value,\n setSidebarOpen: controlled.setValue,\n isSidebarCollapsed,\n isAsideHidden,\n});\n\n/** Collapsed drops the sidebar track entirely; header and footer always span the full width. */\nconst gridTemplate = computed(() =>\n isSidebarCollapsed.value\n ? `'header header' auto 'main main' 1fr 'footer footer' auto / 1fr`\n : `'header header' auto 'sidebar main' 1fr 'sidebar footer' auto / ${props.sidebarWidth} 1fr`,\n);\n\nconst classes = computed(() =>\n cn('grid min-h-svh bg-background text-foreground', attrs.class as string | undefined),\n);\n\n/** `gridTemplate` is normalized first so a caller's `style` still wins per-property. */\nconst rootStyle = computed(() =>\n normalizeStyle([{ gridTemplate: gridTemplate.value }, attrs.style]),\n);\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :style=\"rootStyle\" :class=\"classes\">\n <a\n href=\"#app-shell-main\"\n class=\"sr-only focus:not-sr-only focus:fixed focus:left-2 focus:top-2 focus:z-modal focus:rounded-md focus:bg-card focus:px-3 focus:py-2 focus:shadow\"\n >\n Skip to content\n </a>\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellHeader`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellHeaderProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/* Sticky top bar of the shell — the `header` grid area. */\ndefineOptions({ name: 'AppShellHeader', inheritAttrs: false });\n\n/** The header content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'sticky top-0 z-sticky flex h-14 items-center gap-3 border-b border-border bg-card px-4 [grid-area:header]',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <header ref=\"el\" role=\"banner\" v-bind=\"rest\" :class=\"classes\"><slot /></header>\n</template>\n","<script lang=\"ts\">\nimport type { Breakpoint } from './AppShell.vue';\n\n/**\n * The prop surface of `AppShellSidebar`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the `aside`\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellSidebarProps = Record<string, never>;\n\n// Complete class strings per breakpoint — Tailwind can't see interpolated names.\nconst SIDEBAR_STATIC_CLASSES: Record<Breakpoint, string> = {\n sm: 'hidden sm:flex',\n md: 'hidden md:flex',\n lg: 'hidden lg:flex',\n xl: 'hidden xl:flex',\n '2xl': 'hidden 2xl:flex',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport Drawer from '../../overlays/drawer/Drawer.vue';\nimport DrawerContent from '../../overlays/drawer/DrawerContent.vue';\nimport { useAppShellContext } from './AppShell.vue';\n\n/**\n * Side navigation rail — the `sidebar` grid area above `sidebarBreakpoint`, a\n * left-edge `Drawer` below it. The collapsed branch takes only `class` (onto\n * the `nav`), exactly as React's did; the rest of the attrs belong to the\n * `aside` that branch does not render.\n */\ndefineOptions({ name: 'AppShellSidebar', inheritAttrs: false });\n\n/** The navigation content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\nconst context = useAppShellContext();\n\n/* Refs lifted to setup consts so the template auto-unwraps them (a plain injected object does not). */\nconst isCollapsed = context.isSidebarCollapsed;\nconst isSidebarOpen = context.isSidebarOpen;\n\nconst asideClasses = computed(() =>\n cn(\n 'sticky top-14 h-[calc(100svh-3.5rem)] overflow-y-auto border-r border-border bg-card [grid-area:sidebar]',\n SIDEBAR_STATIC_CLASSES[context.sidebarBreakpoint.value],\n attrs.class as string | undefined,\n ),\n);\n\nconst navClasses = computed(() => cn('flex h-full flex-col', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\n/** `null` in the collapsed branch — there is no `aside` then, as there was none in React. */\ndefineExpose({ el });\n</script>\n\n<template>\n <Drawer\n v-if=\"isCollapsed\"\n :open=\"isSidebarOpen\"\n side=\"left\"\n @open-change=\"context.setSidebarOpen\"\n >\n <DrawerContent class=\"w-72 max-w-[80%]\">\n <nav :class=\"navClasses\"><slot /></nav>\n </DrawerContent>\n </Drawer>\n\n <aside v-else ref=\"el\" v-bind=\"rest\" :class=\"asideClasses\">\n <nav class=\"flex h-full w-full flex-col p-3\"><slot /></nav>\n </aside>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellMain`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellMainProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * The primary column — the `main` grid area, and the skip-link's target.\n *\n * `id` and `tabindex` are bound before `v-bind=\"rest\"` so a caller-supplied\n * value still wins, matching React's attribute-then-spread order.\n */\ndefineOptions({ name: 'AppShellMain', inheritAttrs: false });\n\n/** The page content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn('flex flex-col [grid-area:main] focus:outline-none', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <main ref=\"el\" id=\"app-shell-main\" tabindex=\"-1\" v-bind=\"rest\" :class=\"classes\">\n <slot />\n </main>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellContent`.\n *\n * React declared `HTMLAttributes<HTMLDivElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellContentProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/* The scrolling region inside `AppShellMain` — header, sidebar and footer stay put. */\ndefineOptions({ name: 'AppShellContent', inheritAttrs: false });\n\n/** The scrolling content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn('flex-1 overflow-y-auto p-6', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellAside`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellAsideProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useAppShellContext } from './AppShell.vue';\n\n/* Right-hand rail inside `AppShellMain` — renders nothing below `asideBreakpoint`. */\ndefineOptions({ name: 'AppShellAside', inheritAttrs: false });\n\n/** The rail content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\nconst context = useAppShellContext();\n\n/* Ref lifted to a setup const so the template auto-unwraps it (a plain injected object does not). */\nconst isHidden = context.isAsideHidden;\n\nconst classes = computed(() =>\n cn(\n 'sticky top-14 h-[calc(100svh-3.5rem)] shrink-0 overflow-y-auto border-l border-border bg-card p-4',\n attrs.class as string | undefined,\n ),\n);\n\n/** The width is normalized first so a caller's `style` still wins per-property. */\nconst asideStyle = computed(() =>\n normalizeStyle([{ width: context.asideWidth.value }, attrs.style]),\n);\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <aside v-if=\"!isHidden\" ref=\"el\" v-bind=\"rest\" :style=\"asideStyle\" :class=\"classes\">\n <slot />\n </aside>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellFooter`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellFooterProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/* Bottom bar of the shell — the `footer` grid area. */\ndefineOptions({ name: 'AppShellFooter', inheritAttrs: false });\n\n/** The footer content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'border-t border-border bg-card px-4 py-3 text-sm text-muted-foreground [grid-area:footer]',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <footer ref=\"el\" role=\"contentinfo\" v-bind=\"rest\" :class=\"classes\"><slot /></footer>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the internal visibility-gating mode of an `Overlay`. */\nexport const OverlayVisibilityMode = {\n /** Refers to an always-visible overlay. */\n Always: 'always',\n /** Refers to reveal-on-hover (or focus-within) gating. */\n Hover: 'hover',\n /** Refers to reveal-on-focus-within gating. */\n FocusWithin: 'focus-within',\n /** Refers to mount/unmount gating driven by presence data-state. */\n Presence: 'presence',\n} as const;\n\nexport type OverlayVisibilityMode = (typeof OverlayVisibilityMode)[keyof typeof OverlayVisibilityMode];\n\n/** Defines the show/hide animation effect of an `Overlay`. */\nexport const OverlayTransition = {\n /** Refers to no transition. */\n None: 'none',\n /** Refers to an opacity fade. */\n Fade: 'fade',\n /** Refers to a fade combined with a scale. */\n FadeScale: 'fade-scale',\n /** Refers to a fade combined with an upward slide. */\n FadeSlideUp: 'fade-slide-up',\n /** Refers to a fade combined with a downward slide. */\n FadeSlideDown: 'fade-slide-down',\n /** Refers to a fade combined with a leftward slide. */\n FadeSlideLeft: 'fade-slide-left',\n /** Refers to a fade combined with a rightward slide. */\n FadeSlideRight: 'fade-slide-right',\n} as const;\n\nexport type OverlayTransition = (typeof OverlayTransition)[keyof typeof OverlayTransition];\n\n/* Overlay positioning + visibility + transition surface — see Overlay.standard.md + Overlay.spec.md. */\nexport const overlayVariants = tv({\n base: 'absolute',\n variants: {\n position: {\n 'top-right': 'top-[var(--ui-overlay-inset,0.5rem)] right-[var(--ui-overlay-inset,0.5rem)]',\n 'top-left': 'top-[var(--ui-overlay-inset,0.5rem)] left-[var(--ui-overlay-inset,0.5rem)]',\n 'bottom-right': 'bottom-[var(--ui-overlay-inset,0.5rem)] right-[var(--ui-overlay-inset,0.5rem)]',\n 'bottom-left': 'bottom-[var(--ui-overlay-inset,0.5rem)] left-[var(--ui-overlay-inset,0.5rem)]',\n 'top': 'top-[var(--ui-overlay-inset,0.5rem)] left-1/2 -translate-x-1/2',\n 'bottom': 'bottom-[var(--ui-overlay-inset,0.5rem)] left-1/2 -translate-x-1/2',\n 'left': 'left-[var(--ui-overlay-inset,0.5rem)] top-1/2 -translate-y-1/2',\n 'right': 'right-[var(--ui-overlay-inset,0.5rem)] top-1/2 -translate-y-1/2',\n 'center': 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'custom': '', // consumer passed inset object — positioning via inline style\n },\n visibilityMode: {\n 'always': '',\n 'hover': 'opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 group-hover:[transition-duration:var(--ui-overlay-enter,200ms)] group-focus-within:[transition-duration:var(--ui-overlay-enter,200ms)]',\n 'focus-within': 'opacity-0 group-focus-within:opacity-100 group-focus-within:[transition-duration:var(--ui-overlay-enter,200ms)]',\n 'presence': 'data-[state=closed]:opacity-0 data-[state=open]:[transition-duration:var(--ui-overlay-enter,200ms)]',\n },\n transition: {\n 'none': '',\n 'fade': 'transition-opacity duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-scale': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-up': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-down': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-left': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-right': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n },\n },\n compoundVariants: [\n // === HOVER mode + transform-bearing transitions ===\n {\n visibilityMode: 'hover', transition: 'fade-scale',\n class:\n 'scale-95 group-hover:scale-100 group-focus-within:scale-100 ' +\n 'motion-reduce:scale-100 motion-reduce:group-hover:scale-100 motion-reduce:group-focus-within:scale-100',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-up',\n class:\n 'translate-y-1 group-hover:translate-y-0 group-focus-within:translate-y-0 ' +\n 'motion-reduce:translate-y-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-down',\n class:\n '-translate-y-1 group-hover:translate-y-0 group-focus-within:translate-y-0 ' +\n 'motion-reduce:translate-y-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-left',\n class:\n 'translate-x-1 group-hover:translate-x-0 group-focus-within:translate-x-0 ' +\n 'motion-reduce:translate-x-0 motion-reduce:group-hover:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-right',\n class:\n '-translate-x-1 group-hover:translate-x-0 group-focus-within:translate-x-0 ' +\n 'motion-reduce:translate-x-0 motion-reduce:group-hover:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n\n // === FOCUS-WITHIN mode + transform-bearing transitions ===\n {\n visibilityMode: 'focus-within', transition: 'fade-scale',\n class: 'scale-95 group-focus-within:scale-100 motion-reduce:scale-100 motion-reduce:group-focus-within:scale-100',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-up',\n class: 'translate-y-1 group-focus-within:translate-y-0 motion-reduce:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-down',\n class: '-translate-y-1 group-focus-within:translate-y-0 motion-reduce:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-left',\n class: 'translate-x-1 group-focus-within:translate-x-0 motion-reduce:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-right',\n class: '-translate-x-1 group-focus-within:translate-x-0 motion-reduce:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n\n // === PRESENCE mode (data-state-driven) + transform-bearing transitions ===\n {\n visibilityMode: 'presence', transition: 'fade-scale',\n class: 'data-[state=closed]:scale-95 motion-reduce:data-[state=closed]:scale-100',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-up',\n class: 'data-[state=closed]:translate-y-1 motion-reduce:data-[state=closed]:translate-y-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-down',\n class: 'data-[state=closed]:-translate-y-1 motion-reduce:data-[state=closed]:translate-y-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-left',\n class: 'data-[state=closed]:translate-x-1 motion-reduce:data-[state=closed]:translate-x-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-right',\n class: 'data-[state=closed]:-translate-x-1 motion-reduce:data-[state=closed]:translate-x-0',\n },\n ],\n defaultVariants: {\n position: 'top-right',\n visibilityMode: 'always',\n transition: 'none',\n },\n});\n\nexport type OverlayVariants = VariantProps<typeof overlayVariants>;\n\n/* Compile-time lock: enum values ≡ tv variant keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertOverlayVisibilityMode: AssertExact<\n OverlayVisibilityMode,\n NonNullable<VariantProps<typeof overlayVariants>['visibilityMode']>\n> = true;\nconst _assertOverlayTransition: AssertExact<\n OverlayTransition,\n NonNullable<VariantProps<typeof overlayVariants>['transition']>\n> = true;\nvoid _assertOverlayVisibilityMode;\nvoid _assertOverlayTransition;\n","<script lang=\"ts\">\nimport type {\n AbsolutePosition,\n PresenceAnimationDurationProp,\n SizeValue,\n} from '../../../foundation/utils';\nimport { OverlayTransition } from './Overlay.variants';\n\n/* Re-exported for ergonomic consumer imports — same shape as the shared types. */\nexport type OverlayPosition = AbsolutePosition;\n\n/** Defines the visibility trigger of an `Overlay` while mounted. */\nexport const OverlayAppearOn = {\n /** Refers to an always-visible overlay. */\n Always: 'always',\n /** Refers to reveal-on-hover (and focus-within). */\n Hover: 'hover',\n /** Refers to reveal-on-focus-within. */\n FocusWithin: 'focus-within',\n} as const;\n\nexport type OverlayAppearOn = (typeof OverlayAppearOn)[keyof typeof OverlayAppearOn];\n\nexport { OverlayTransition };\nexport type OverlayDuration = PresenceAnimationDurationProp;\n\n/**\n * The prop surface of `Overlay`.\n *\n * React's `className` / `style` props are Vue's `class` / `style` attrs and so\n * are absent here; everything else keeps its React name. Like the original,\n * `Overlay` consumes only those two attrs — no other attribute is forwarded, by\n * design (`Overlay.standard.md` rule 10: it never sets `role` / `aria-*`; the\n * child carries its own semantics).\n */\nexport interface OverlayProps {\n /** The anchor location — preset corner/edge/center, or raw inset object. Default 'top-right'. */\n position?: OverlayPosition;\n\n /** The spacing from edge for preset positions. Default '0.5rem'. Ignored for custom inset object. */\n inset?: SizeValue;\n\n /** The z-index. Default 10. */\n zIndex?: number | string;\n\n /** The visibility trigger while mounted. Default 'always'. Hover / focus-within modes require parent `class=\"group\"`. */\n appearOn?: OverlayAppearOn;\n\n /** The presence — when provided, controls mount/unmount with exit transition (defers unmount until transitionend). */\n isOpen?: boolean;\n\n /** The animation effect for show/hide. Defaults to 'fade' if any visibility gating is active, else 'none'. */\n transition?: OverlayTransition;\n\n /** The duration in ms. Number = symmetric; object = asymmetric enter/exit. Default 200. */\n transitionDuration?: OverlayDuration;\n\n /** The CSS timing function. Default 'ease-out'. */\n transitionEasing?: string;\n\n /** The single-child merge via `Primitive` (no extra wrapper div). Default true. */\n asChild?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs } from 'vue';\nimport {\n cn,\n CssExtensions,\n TransitionExtensions,\n type AbsoluteInsetOverrides,\n type AbsolutePositionPreset,\n} from '../../../foundation/utils';\nimport { Presence, Primitive } from '../../../foundation/primitives';\nimport { overlayVariants, OverlayVisibilityMode } from './Overlay.variants';\n\n/* Renders a positioned overlay anchored to its nearest positioned ancestor — for image-corner controls, badges, hover-revealed actions, and conditionally mounted floating elements. */\ndefineOptions({ name: 'Overlay', inheritAttrs: false });\n\n/** The content — a single element when `asChild` (default), or arbitrary content otherwise. */\ndefineSlots<{ default(): unknown }>();\n\n/**\n * `isOpen: undefined` is load-bearing, not noise: Vue casts an absent `Boolean`\n * prop to `false` unless the declaration *owns* a `default` key, which would make\n * `isOpen !== undefined` always true and force every overlay into presence mode.\n * Declaring the default as `undefined` keeps the three states React had —\n * absent / `true` / `false`.\n */\nconst props = withDefaults(defineProps<OverlayProps>(), {\n position: 'top-right',\n zIndex: 10,\n appearOn: OverlayAppearOn.Always,\n asChild: true,\n isOpen: undefined,\n transition: undefined,\n transitionDuration: undefined,\n transitionEasing: undefined,\n inset: undefined,\n});\n\nconst attrs = useAttrs();\n\nconst isPresenceMode = computed(() => props.isOpen !== undefined);\nconst isCustomPosition = computed(\n () => typeof props.position === 'object' && props.position !== null,\n);\n\nconst effectiveTransition = computed<OverlayTransition>(\n () =>\n props.transition ??\n (isPresenceMode.value || props.appearOn !== OverlayAppearOn.Always\n ? OverlayTransition.Fade\n : OverlayTransition.None),\n);\n\nconst visibilityMode = computed<OverlayVisibilityMode>(() =>\n isPresenceMode.value\n ? OverlayVisibilityMode.Presence\n : props.appearOn === OverlayAppearOn.Hover\n ? OverlayVisibilityMode.Hover\n : props.appearOn === OverlayAppearOn.FocusWithin\n ? OverlayVisibilityMode.FocusWithin\n : OverlayVisibilityMode.Always,\n);\n\nconst classes = computed(() =>\n cn(\n overlayVariants({\n position: isCustomPosition.value\n ? 'custom'\n : (props.position as AbsolutePositionPreset),\n visibilityMode: visibilityMode.value,\n transition: effectiveTransition.value,\n }),\n attrs.class as string | undefined,\n ),\n);\n\n/**\n * A caller's `style` is normalized FIRST so the computed declarations below win —\n * the order of React's `{ ...style, zIndex, '--ui-overlay-*': … }`.\n */\nconst inlineStyle = computed(() => {\n const { enter, exit } = TransitionExtensions.resolveDuration(props.transitionDuration);\n\n const own: Record<string, string | number> = {\n zIndex: props.zIndex,\n // CSS vars consumed by tailwind variants — exit is the baseline\n // transition-duration; enter overrides it on hover / focus-within / open.\n '--ui-overlay-enter': `${enter}ms`,\n '--ui-overlay-exit': `${exit}ms`,\n };\n\n if (props.inset !== undefined) {\n own['--ui-overlay-inset'] = CssExtensions.toCss(props.inset);\n }\n\n if (props.transitionEasing) {\n own.transitionTimingFunction = props.transitionEasing;\n }\n\n if (isCustomPosition.value) {\n const p = props.position as AbsoluteInsetOverrides;\n if (p.top !== undefined) own.top = CssExtensions.toCss(p.top);\n if (p.right !== undefined) own.right = CssExtensions.toCss(p.right);\n if (p.bottom !== undefined) own.bottom = CssExtensions.toCss(p.bottom);\n if (p.left !== undefined) own.left = CssExtensions.toCss(p.left);\n }\n\n return normalizeStyle([attrs.style, own]);\n});\n</script>\n\n<template>\n <!-- Presence clones the single child vnode to drive `data-state` + deferred unmount. -->\n <Presence v-if=\"isPresenceMode\" :is-present=\"props.isOpen === true\">\n <Primitive as=\"div\" :as-child=\"props.asChild\" :class=\"classes\" :style=\"inlineStyle\">\n <slot />\n </Primitive>\n </Presence>\n\n <Primitive\n v-else\n as=\"div\"\n :as-child=\"props.asChild\"\n :class=\"classes\"\n :style=\"inlineStyle\"\n >\n <slot />\n </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type {\n ElementType,\n SurfaceElevation,\n SurfacePadding,\n SurfaceRadius,\n SurfaceTone,\n SurfaceVariant,\n} from '../../../foundation/utils';\n\n/**\n * Represents the prop surface of the `Surface` atom.\n *\n * React declared these by `extends SurfaceVariants`; spelled out here because\n * `defineProps<T>()` needs a type the SFC compiler can resolve to a runtime\n * declaration, and `VariantProps<typeof surfaceVariants>` is opaque to it.\n */\nexport interface SurfaceProps {\n /** The HTML element to render; defaults to `div`. */\n as?: ElementType;\n /** The merge of styles onto the immediate child instead of rendering a wrapper. */\n asChild?: boolean;\n /** The visual recipe — solid · soft · surface · outline · glass · elevated · flat · subtle. */\n variant?: SurfaceVariant;\n /** The color tone the recipe is tinted with. */\n tone?: SurfaceTone;\n /** The corner rounding. */\n radius?: SurfaceRadius;\n /** The inner spacing step. */\n padding?: SurfacePadding;\n /** The shadow depth. */\n elevation?: SurfaceElevation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef, type ComponentPublicInstance } from 'vue';\nimport { Primitive } from '../../../foundation/primitives';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\n\n/**\n * Provides a styled visual surface composed from the `surfaceVariants` matrix.\n *\n * React branched between `Slot` (when `asChild`) and the `as` element. `Primitive`\n * carries both, so one element covers the pair: `asChild` collapses into the single\n * slot child, otherwise `as` renders.\n */\ndefineOptions({ name: 'Surface', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SurfaceProps>(), { as: 'div', asChild: false });\n\nconst attrs = useAttrs();\nconst inner = useTemplateRef<ComponentPublicInstance>('inner');\n\nconst classes = computed(() =>\n cn(\n surfaceVariants({\n variant: props.variant,\n tone: props.tone,\n radius: props.radius,\n padding: props.padding,\n elevation: props.elevation,\n }),\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\n/** `Primitive` renders the real element, so its `$el` is this component's root. */\nconst el = computed(() => (inner.value?.$el ?? null) as HTMLElement | null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <Primitive\n ref=\"inner\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <slot />\n </Primitive>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the vertical-padding scale of the `Section` band. */\nexport const SectionPaddingY = {\n /** Refers to no vertical padding. */\n None: 'none',\n /** Refers to a small vertical rhythm. */\n Sm: 'sm',\n /** Refers to a medium vertical rhythm. */\n Md: 'md',\n /** Refers to a large vertical rhythm. */\n Lg: 'lg',\n /** Refers to an extra-large vertical rhythm. */\n Xl: 'xl',\n} as const;\n\nexport type SectionPaddingY = (typeof SectionPaddingY)[keyof typeof SectionPaddingY];\n\n/** Provides the vertical-rhythm (top/bottom padding) scale for the `Section` band. */\nexport const sectionVariants = tv({\n base: 'w-full',\n variants: {\n /* Vertical padding — the band's top/bottom breathing room. */\n py: {\n none: 'py-0',\n sm: 'py-6',\n md: 'py-10',\n lg: 'py-16',\n xl: 'py-24',\n },\n },\n defaultVariants: {\n py: 'md',\n },\n});\n\nexport type SectionVariants = VariantProps<typeof sectionVariants>;\n\n/* Compile-time lock: enum values ≡ tv `py` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSectionPaddingY: AssertExact<\n SectionPaddingY,\n NonNullable<VariantProps<typeof sectionVariants>['py']>\n> = true;\nvoid _assertSectionPaddingY;\n","<script lang=\"ts\">\nimport type { SurfaceTone } from '../../../foundation/utils';\nimport type { ContainerProps } from '../container';\nimport type { SectionPaddingY } from './Section.variants';\n\nexport interface SectionProps {\n /**\n * The tinted background tone for the band. Applies the shadow-less `subtle`\n * surface treatment (low-alpha tinted fill + `border-border`). Omit for a\n * transparent band (no fill, no border).\n */\n tone?: SurfaceTone;\n\n /** The max-width of the inner centered `Container`. Passthrough to `Container.size`. Default `lg`. */\n containerSize?: ContainerProps['size'];\n\n /** The vertical padding (the band's top/bottom rhythm). Default `md`. */\n py?: SectionPaddingY;\n\n /** The full-bleed mode — renders a `<section>` with no inner `Container` (edge-to-edge content). */\n bleed?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport Container from '../container/Container.vue';\nimport { sectionVariants } from './Section.variants';\n\n/**\n * Full-bleed `<section>` band with an inner centered `Container`. The repetitive\n * marketing \"section band\" pattern: optional tinted (shadow-less) background,\n * passthrough container width, and vertical padding. Pass `bleed` to drop the\n * inner Container for edge-to-edge content.\n */\n/* `<section>` is a live HTML element, but SFC templates are case-sensitive\n (`<Section>` ≠ `<section>`) and this is a library component — imported, never\n globally registered. Renaming it would break parity with the React package. */\ndefineOptions({ name: 'Section', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SectionProps>(), { bleed: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n sectionVariants({ py: props.py }),\n props.tone && surfaceVariants({ variant: 'subtle', tone: props.tone, radius: 'none' }),\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <section ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <slot v-if=\"props.bleed\" />\n <Container v-else :size=\"props.containerSize\"><slot /></Container>\n </section>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the band-height of a `Navbar`. */\nexport const NavbarHeight = {\n /** Refers to a compact bar. */\n Sm: 'sm',\n /** Refers to the default bar height. */\n Md: 'md',\n /** Refers to a tall bar. */\n Lg: 'lg',\n} as const;\n\nexport type NavbarHeight = (typeof NavbarHeight)[keyof typeof NavbarHeight];\n\n/** Provides the header-band chrome (height, sticky positioning) for `Navbar`. */\nexport const navbarVariants = tv({\n base: 'w-full',\n variants: {\n /* Sticks the band to the top of the scroll container when true. */\n sticky: {\n true: 'sticky top-0 z-sticky',\n false: '',\n },\n /* Band height — the bar's vertical size. */\n height: {\n sm: 'h-12',\n md: 'h-14',\n lg: 'h-16',\n },\n },\n defaultVariants: {\n sticky: false,\n height: 'md',\n },\n});\n\nexport type NavbarVariants = VariantProps<typeof navbarVariants>;\n\n/* Compile-time lock: enum values ≡ tv `height` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertNavbarHeight: AssertExact<\n NavbarHeight,\n NonNullable<VariantProps<typeof navbarVariants>['height']>\n> = true;\nvoid _assertNavbarHeight;\n","<script lang=\"ts\">\nimport type { SurfaceTone } from '../../../foundation/utils';\nimport type { ContainerProps } from '../container';\nimport type { NavbarHeight } from './Navbar.variants';\n\nexport interface NavbarProps {\n /** The max-width of the inner centered `Container`. Passthrough to `Container.size`. Default `lg`. */\n containerSize?: ContainerProps['size'];\n /** The band height. Default `md`. */\n height?: NavbarHeight;\n /** The sticky pinning of the bar to the top of the scroll container. Default `false` (non-sticky). */\n sticky?: boolean;\n /**\n * The tinted background tone for the band — applies the shadow-less `subtle`\n * surface treatment. Omit for a transparent bar (relies on `bordered` / page bg).\n */\n tone?: SurfaceTone;\n /** The bottom border under the bar. Default `true`. */\n bordered?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport Container from '../container/Container.vue';\nimport { navbarVariants } from './Navbar.variants';\n\n/**\n * Lightweight header band (`<header>`) with `start` / `center` / `end` slots\n * laid out in a row inside a centered `Container`. The everyday \"navbar +\n * centered content\" need that `AppShell` (a 5-slot dashboard grid w/ sidebar)\n * overshoots. Non-sticky by default; pass `sticky` to pin it.\n */\ndefineOptions({ name: 'Navbar', inheritAttrs: false });\n\n/** React's `start` / `center` / `end` / `children` ReactNode props are content regions — slots in Vue. */\ndefineSlots<{\n /** The leading slot — laid out at the start of the row (brand / logo / nav links). */\n start?(): unknown;\n /** The centre slot — laid out in the middle of the row (search / primary nav). */\n center?(): unknown;\n /** The trailing slot — laid out at the end of the row (actions / avatar / CTA). */\n end?(): unknown;\n /**\n * The raw row content — replaces the `start` / `center` / `end` slot layout when\n * provided. Use for fully custom bars.\n */\n default?(): unknown;\n}>();\n\nconst props = withDefaults(defineProps<NavbarProps>(), { sticky: false, bordered: true });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n navbarVariants({ sticky: props.sticky, height: props.height }),\n props.bordered && 'border-b border-border',\n props.tone\n ? surfaceVariants({ variant: 'subtle', tone: props.tone, radius: 'none' })\n : 'bg-card',\n attrs.class as string | undefined,\n ),\n);\n\n/** Push `end` to the trailing edge when there's no centre slot to absorb the slack. */\nconst endClasses = computed(() =>\n cn('flex min-w-0 items-center gap-3', !slots.center && 'ml-auto'),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <header ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <Container :size=\"props.containerSize\" class=\"flex h-full items-center gap-3\">\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <div v-if=\"$slots.start\" class=\"flex min-w-0 items-center gap-3\">\n <slot name=\"start\" />\n </div>\n <div v-if=\"$slots.center\" class=\"flex min-w-0 flex-1 items-center justify-center gap-3\">\n <slot name=\"center\" />\n </div>\n <div v-if=\"$slots.end\" :class=\"endClasses\">\n <slot name=\"end\" />\n </div>\n </template>\n </Container>\n </header>\n</template>\n"],"names":["_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_renderSlot","Stack","$attrs","_createElementBlock","_createElementVNode","_hoisted_1","_createTextVNode","_toDisplayString","_hoisted_2","GAP","_unref","_createVNode","Spinner","Announce","Drawer","DrawerContent","Container","$slots","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Navbar.vue_vue_type_script_setup_true_lang-Cl2ejukE.js","sources":["../../src/presentation/layout/box/Box.vue","../../src/presentation/layout/hStack/HStack.vue","../../src/presentation/layout/vStack/VStack.vue","../../src/presentation/layout/grid/Grid.variants.ts","../../src/presentation/layout/grid/Grid.vue","../../src/presentation/layout/container/Container.variants.ts","../../src/presentation/layout/container/Container.vue","../../src/presentation/layout/flex/Flex.vue","../../src/presentation/layout/aspectRatio/AspectRatio.vue","../../src/presentation/layout/spacer/Spacer.vue","../../src/presentation/layout/center/Center.vue","../../src/presentation/layout/divider/Divider.variants.ts","../../src/presentation/layout/divider/Divider.vue","../../src/presentation/layout/scrollArea/ScrollArea.vue","../../src/presentation/layout/cluster/Cluster.vue","../../src/presentation/layout/frame/Frame.vue","../../src/presentation/layout/twoColumn/TwoColumn.vue","../../src/presentation/layout/resizablePanels/ResizablePanels.vue","../../src/presentation/layout/resizablePanels/ResizablePanel.vue","../../src/presentation/layout/resizablePanels/ResizableSeparator.vue","../../src/presentation/layout/pullToRefresh/PullToRefresh.vue","../../src/presentation/layout/appShell/AppShell.vue","../../src/presentation/layout/appShell/AppShellHeader.vue","../../src/presentation/layout/appShell/AppShellSidebar.vue","../../src/presentation/layout/appShell/AppShellMain.vue","../../src/presentation/layout/appShell/AppShellContent.vue","../../src/presentation/layout/appShell/AppShellAside.vue","../../src/presentation/layout/appShell/AppShellFooter.vue","../../src/presentation/layout/overlay/Overlay.variants.ts","../../src/presentation/layout/overlay/Overlay.vue","../../src/presentation/layout/surface/Surface.vue","../../src/presentation/layout/section/Section.variants.ts","../../src/presentation/layout/section/Section.vue","../../src/presentation/layout/navbar/Navbar.variants.ts","../../src/presentation/layout/navbar/Navbar.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\n\nexport interface BoxProps {\n /** The HTML element to render. Default `div`. */\n as?: ElementType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * The lowest-level layout primitive. Renders any element (default `div`)\n * with className passthrough. Use as a styling shell when no other layout\n * atom fits.\n *\n * `inheritAttrs: false` so a caller's `class` goes through `cn` (tailwind-merge\n * resolves the conflict) instead of Vue's blind class concatenation — the same\n * last-wins precedence React's `cn(…, className)` gives.\n */\ndefineOptions({ name: 'Box', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<BoxProps>(), { as: 'div' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() => cn(attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","<script lang=\"ts\">\nimport type { StackProps } from '../stack/Stack.vue';\n\nexport type HStackProps = Omit<StackProps, 'direction'>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\nimport Stack from '../stack/Stack.vue';\n\n/** Stack preset: `direction=\"row\"`. */\ndefineOptions({ name: 'HStack', inheritAttrs: false });\n\n/**\n * No `defineProps` — every `StackProps` key falls through `$attrs` onto the\n * inner `Stack`, which already declares them. `v-bind=\"$attrs\"` sits after\n * `direction` for the same reason React spread `{...props}` after it: the\n * spread wins, and `HStackProps` types `direction` away.\n */\nconst inner = useTemplateRef<InstanceType<typeof Stack>>('inner');\n\n/** The inner `Stack`'s root element — the React original's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <Stack ref=\"inner\" direction=\"row\" v-bind=\"$attrs\"><slot /></Stack>\n</template>\n","<script lang=\"ts\">\nimport type { StackProps } from '../stack/Stack.vue';\n\nexport type VStackProps = Omit<StackProps, 'direction'>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\nimport Stack from '../stack/Stack.vue';\n\n/** Stack preset: `direction=\"column\"` (default). Provided for symmetry with HStack. */\ndefineOptions({ name: 'VStack', inheritAttrs: false });\n\n/** See `HStack` — every `StackProps` key falls through `$attrs` onto the inner `Stack`. */\nconst inner = useTemplateRef<InstanceType<typeof Stack>>('inner');\n\n/** The inner `Stack`'s root element — the React original's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <Stack ref=\"inner\" direction=\"column\" v-bind=\"$attrs\"><slot /></Stack>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const gridVariants = tv({\n base: 'grid',\n variants: {\n columns: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-2',\n '3': 'grid-cols-3',\n '4': 'grid-cols-4',\n '5': 'grid-cols-5',\n '6': 'grid-cols-6',\n '8': 'grid-cols-8',\n '12': 'grid-cols-12',\n },\n gap: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n },\n defaultVariants: {\n columns: '2',\n gap: '4',\n },\n});\n\nexport type GridVariants = VariantProps<typeof gridVariants>;\n\n/** Represents the scalar column count accepted by `Grid` (also the per-breakpoint value). */\nexport type GridColumns = NonNullable<GridVariants['columns']>;\n\n/** Represents the scalar gap step accepted by `Grid` (also the per-breakpoint value). */\nexport type GridGap = NonNullable<GridVariants['gap']>;\n\n/** Defines the responsive breakpoints `Grid` understands (`base` = unprefixed). */\nexport const GridBreakpoint = {\n /** Refers to the unprefixed (mobile-first) breakpoint. */\n Base: 'base',\n /** Refers to the `sm:` breakpoint. */\n Sm: 'sm',\n /** Refers to the `md:` breakpoint. */\n Md: 'md',\n /** Refers to the `lg:` breakpoint. */\n Lg: 'lg',\n /** Refers to the `xl:` breakpoint. */\n Xl: 'xl',\n} as const;\n\nexport type GridBreakpoint = (typeof GridBreakpoint)[keyof typeof GridBreakpoint];\n\n/**\n * Represents a responsive value for `columns` / `gap` — a per-breakpoint map.\n * `base` is the unprefixed value; the rest map to Tailwind's `sm:`–`xl:` prefixes.\n */\nexport type GridResponsive<T extends string> = Partial<Record<GridBreakpoint, T>>;\n\n/* Tailwind can't see interpolated class names, so every responsive permutation\n is spelled out as a complete literal here (base + sm/md/lg/xl prefixes). */\nconst COLUMN_CLASSES: Record<GridBreakpoint, Record<GridColumns, string>> = {\n base: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-2',\n '3': 'grid-cols-3',\n '4': 'grid-cols-4',\n '5': 'grid-cols-5',\n '6': 'grid-cols-6',\n '8': 'grid-cols-8',\n '12': 'grid-cols-12',\n },\n sm: {\n '1': 'sm:grid-cols-1',\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-3',\n '4': 'sm:grid-cols-4',\n '5': 'sm:grid-cols-5',\n '6': 'sm:grid-cols-6',\n '8': 'sm:grid-cols-8',\n '12': 'sm:grid-cols-12',\n },\n md: {\n '1': 'md:grid-cols-1',\n '2': 'md:grid-cols-2',\n '3': 'md:grid-cols-3',\n '4': 'md:grid-cols-4',\n '5': 'md:grid-cols-5',\n '6': 'md:grid-cols-6',\n '8': 'md:grid-cols-8',\n '12': 'md:grid-cols-12',\n },\n lg: {\n '1': 'lg:grid-cols-1',\n '2': 'lg:grid-cols-2',\n '3': 'lg:grid-cols-3',\n '4': 'lg:grid-cols-4',\n '5': 'lg:grid-cols-5',\n '6': 'lg:grid-cols-6',\n '8': 'lg:grid-cols-8',\n '12': 'lg:grid-cols-12',\n },\n xl: {\n '1': 'xl:grid-cols-1',\n '2': 'xl:grid-cols-2',\n '3': 'xl:grid-cols-3',\n '4': 'xl:grid-cols-4',\n '5': 'xl:grid-cols-5',\n '6': 'xl:grid-cols-6',\n '8': 'xl:grid-cols-8',\n '12': 'xl:grid-cols-12',\n },\n};\n\nconst GAP_CLASSES: Record<GridBreakpoint, Record<GridGap, string>> = {\n base: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n sm: {\n '0': 'sm:gap-0',\n '1': 'sm:gap-1',\n '2': 'sm:gap-2',\n '3': 'sm:gap-3',\n '4': 'sm:gap-4',\n '5': 'sm:gap-5',\n '6': 'sm:gap-6',\n '8': 'sm:gap-8',\n '10': 'sm:gap-10',\n '12': 'sm:gap-12',\n },\n md: {\n '0': 'md:gap-0',\n '1': 'md:gap-1',\n '2': 'md:gap-2',\n '3': 'md:gap-3',\n '4': 'md:gap-4',\n '5': 'md:gap-5',\n '6': 'md:gap-6',\n '8': 'md:gap-8',\n '10': 'md:gap-10',\n '12': 'md:gap-12',\n },\n lg: {\n '0': 'lg:gap-0',\n '1': 'lg:gap-1',\n '2': 'lg:gap-2',\n '3': 'lg:gap-3',\n '4': 'lg:gap-4',\n '5': 'lg:gap-5',\n '6': 'lg:gap-6',\n '8': 'lg:gap-8',\n '10': 'lg:gap-10',\n '12': 'lg:gap-12',\n },\n xl: {\n '0': 'xl:gap-0',\n '1': 'xl:gap-1',\n '2': 'xl:gap-2',\n '3': 'xl:gap-3',\n '4': 'xl:gap-4',\n '5': 'xl:gap-5',\n '6': 'xl:gap-6',\n '8': 'xl:gap-8',\n '10': 'xl:gap-10',\n '12': 'xl:gap-12',\n },\n};\n\nconst BREAKPOINT_ORDER: ReadonlyArray<GridBreakpoint> = ['base', 'sm', 'md', 'lg', 'xl'];\n\n/** Resolves a scalar-or-responsive `columns` value to its complete Tailwind class string. */\nexport function resolveGridColumns(\n value: GridColumns | GridResponsive<GridColumns> | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return COLUMN_CLASSES.base[value];\n return BREAKPOINT_ORDER.map((bp) => {\n const v = value[bp];\n return v === undefined ? undefined : COLUMN_CLASSES[bp][v];\n })\n .filter((c): c is string => Boolean(c))\n .join(' ');\n}\n\n/** Resolves a scalar-or-responsive `gap` value to its complete Tailwind class string. */\nexport function resolveGridGap(\n value: GridGap | GridResponsive<GridGap> | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return GAP_CLASSES.base[value];\n return BREAKPOINT_ORDER.map((bp) => {\n const v = value[bp];\n return v === undefined ? undefined : GAP_CLASSES[bp][v];\n })\n .filter((c): c is string => Boolean(c))\n .join(' ');\n}\n","<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\nimport type { GridColumns, GridGap, GridResponsive } from './Grid.variants';\n\nexport interface GridProps {\n as?: ElementType;\n /**\n * The equal-column track count. Scalar (`'3'`) emits `grid-cols-3`; a responsive\n * map (`{ base: '1', md: '2', lg: '3' }`) emits per-breakpoint prefixed\n * classes. Default `'2'`.\n */\n columns?: GridColumns | GridResponsive<GridColumns>;\n\n /**\n * The gap between tracks. Scalar (`'4'`) emits `gap-4`; a responsive map\n * (`{ base: '2', lg: '6' }`) emits per-breakpoint prefixed classes. Default `'4'`.\n */\n gap?: GridGap | GridResponsive<GridGap>;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { resolveGridColumns, resolveGridGap } from './Grid.variants';\n\n/**\n * CSS grid container with column and gap variants. Both `columns` and `gap`\n * accept a scalar value or a responsive `{ base, sm, md, lg, xl }` map. For\n * non-uniform tracks pass an explicit `:style=\"{ gridTemplateColumns }\"` — the\n * variant covers the equal-column case.\n */\ndefineOptions({ name: 'Grid', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<GridProps>(), {\n as: 'div',\n columns: '2',\n gap: '4',\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'grid',\n resolveGridColumns(props.columns),\n resolveGridGap(props.gap),\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the max-width preset of a `Container`. */\nexport const ContainerSize = {\n /** Refers to the small screen max-width. */\n Sm: 'sm',\n /** Refers to the medium screen max-width. */\n Md: 'md',\n /** Refers to the large screen max-width. */\n Lg: 'lg',\n /** Refers to the extra-large screen max-width. */\n Xl: 'xl',\n /** Refers to the 2x extra-large screen max-width. */\n Xxl: '2xl',\n /** Refers to an unconstrained (full) max-width. */\n Full: 'full',\n} as const;\n\nexport type ContainerSize = (typeof ContainerSize)[keyof typeof ContainerSize];\n\nexport const containerVariants = tv({\n base: 'mx-auto w-full px-4',\n variants: {\n size: {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n },\n },\n defaultVariants: {\n size: 'lg',\n },\n});\n\nexport type ContainerVariants = VariantProps<typeof containerVariants>;\n\n/* Compile-time lock: enum values ≡ tv variant keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertContainerSize: AssertExact<\n ContainerSize,\n NonNullable<VariantProps<typeof containerVariants>['size']>\n> = true;\nvoid _assertContainerSize;\n","<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\nimport type { ContainerSize } from './Container.variants';\n\nexport interface ContainerProps {\n as?: ElementType;\n /** The max-width preset. Default `lg`. */\n size?: ContainerSize;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { containerVariants } from './Container.variants';\n\n/**\n * Centered max-width wrapper with horizontal padding. Use at page-level to\n * constrain content width.\n */\ndefineOptions({ name: 'Container', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ContainerProps>(), { as: 'div' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(containerVariants({ size: props.size }), attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","<script lang=\"ts\">\nimport type { ElementType } from '../../../foundation/utils';\n\nexport interface FlexProps {\n as?: ElementType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Bare flex container — no opinions on direction, gap, or alignment.\n * Use for one-off flex layouts that don't fit `Stack`'s variant matrix.\n */\ndefineOptions({ name: 'Flex', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FlexProps>(), { as: 'div' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() => cn('flex', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <component :is=\"props.as\" ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></component>\n</template>\n","<script lang=\"ts\">\nexport interface AspectRatioProps {\n /** The aspect ratio (width/height). Default 1 (square). */\n ratio?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Constrain children to an aspect ratio (width / height). Children are\n * absolutely positioned and stretched to fill — typically pass a single\n * `<img>`, `<video>`, or `<iframe>` with `class=\"absolute inset-0 w-full h-full\"`.\n */\ndefineOptions({ name: 'AspectRatio', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<AspectRatioProps>(), { ratio: 1 });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() => cn('relative w-full', attrs.class as string | undefined));\n\n/** `normalizeStyle` merges left → right, so a caller's `style` lands last and wins — as React's `{ aspectRatio, ...style }` did. */\nconst styles = computed(() => normalizeStyle([{ aspectRatio: `${props.ratio}` }, attrs.style]));\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\" :style=\"styles\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Orientation` is imported here (not in `<script setup>`) so the one binding\n serves as both the type below and the runtime value used in `withDefaults`. */\nimport { Orientation } from '../../../foundation/utils';\n\nexport interface SpacerProps {\n /** The explicit size (CSS length). When inside a flex/grid parent,\n * the default `flex: 1` already pushes siblings apart. */\n size?: number | string;\n\n /** The axis the fixed `size` applies to. Default `horizontal`. */\n axis?: Orientation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs, useTemplateRef, type CSSProperties } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * A flexible empty box. In a flex parent it expands (`flex: 1`) and pushes\n * siblings to opposite ends. Pass `size` for a fixed gap.\n */\n/* `<spacer>` is an obsolete HTML element. This is a library component — imported,\n never globally registered — so the name cannot shadow the tag, and renaming it\n would break parity with the React package. */\ndefineOptions({ name: 'Spacer', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SpacerProps>(), { axis: Orientation.Horizontal });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst fixed = computed<CSSProperties | undefined>(() => {\n if (props.size === undefined) return undefined;\n const length = typeof props.size === 'number' ? `${props.size}px` : props.size;\n return props.axis === Orientation.Horizontal\n ? { width: length, flexShrink: 0 }\n : { height: length, flexShrink: 0 };\n});\n\nconst classes = computed(() =>\n cn(props.size === undefined && 'flex-1', attrs.class as string | undefined),\n);\n\n/** `normalizeStyle` merges left → right, so a caller's `style` lands last and wins — as React's `{ ...fixed, ...style }` did. */\nconst styles = computed(() => normalizeStyle([fixed.value, attrs.style]));\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" aria-hidden=\"true\" v-bind=\"rest\" :class=\"classes\" :style=\"styles\" />\n</template>\n","<script lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nexport type CenterProps = HTMLAttributes;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/** Flex shorthand that centers its children both axes. */\n/* `<center>` is a deprecated HTML element. This is a library component — imported,\n never globally registered — so the name cannot shadow the tag, and renaming it\n would break parity with the React package. */\ndefineOptions({ name: 'Center', inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn('flex items-center justify-center', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { tv, type VariantProps, Orientation } from '../../../foundation/utils';\n\n/**\n * Provides the rule geometry for `Divider`. A horizontal divider is a full-width\n * top border; a vertical divider is a full-height left border that stretches to\n * its flex/grid parent. The line color is the semantic `border` token.\n */\nexport const dividerVariants = tv({\n base: 'border-border',\n variants: {\n orientation: {\n horizontal: 'w-full border-t',\n vertical: 'self-stretch border-l',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\nexport type DividerVariants = VariantProps<typeof dividerVariants>;\n\n/* Compile-time lock: shared `Orientation` values ≡ tv `orientation` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertDividerOrientation: AssertExact<\n Orientation,\n NonNullable<VariantProps<typeof dividerVariants>['orientation']>\n> = true;\nvoid _assertDividerOrientation;\n\n/** Represents the axis of a `Divider` — the shared {@link Orientation} vocabulary. */\nexport type DividerOrientation = Orientation;\n","<script lang=\"ts\">\nimport type { Orientation } from '../../../foundation/utils';\n\n/** A plain rule — `orientation` is required (no silent default; a rule's axis should always be stated). */\nexport interface PlainDividerProps {\n /**\n * The axis of the rule — the line's OWN direction: `vertical` draws a `│` between side-by-side content;\n * `horizontal` draws a `─` between stacked content.\n */\n orientation: Orientation;\n\n label?: never;\n}\n\n/** A labelled rule — the classic \"or\" separator; always horizontal, so `orientation` does not apply. */\nexport interface LabelledDividerProps {\n /**\n * The centered content overlaid on the (always-horizontal) rule, e.g. `<Divider label=\"or\" />`.\n * React typed this `ReactNode`; a Vue prop renders text, so richer content goes through the\n * same-named `label` slot — which overrides this value but does NOT select the labelled branch.\n */\n label: string | number;\n\n orientation?: never;\n}\n\n/**\n * A thin rule that separates content, using the semantic `border` token. Either a plain rule — pass the\n * required `orientation` (`<Divider :orientation=\"Orientation.Vertical\" />`) — or a labelled horizontal rule —\n * pass `label` (`<Divider label=\"or\" />`), which sits on the surface background.\n */\nexport type DividerProps = PlainDividerProps | LabelledDividerProps;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { dividerVariants } from './Divider.variants';\n\ndefineOptions({ name: 'Divider', inheritAttrs: false });\n\n/** Rich-content override for the `label` prop. Never a discriminator — `label != null` alone picks the branch, as in React. */\ndefineSlots<{ label?(): unknown }>();\n\nconst props = defineProps<DividerProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst isLabelled = computed(() => props.label != null);\n\nconst labelledClasses = computed(() =>\n cn('flex w-full items-center gap-3', attrs.class as string | undefined),\n);\n\nconst plainClasses = computed(() =>\n cn(dividerVariants({ orientation: props.orientation }), attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n v-if=\"isLabelled\"\n ref=\"el\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n v-bind=\"rest\"\n :class=\"labelledClasses\"\n >\n <span class=\"h-px flex-1 bg-border\" />\n <span class=\"text-sm text-muted-foreground\"><slot name=\"label\">{{ props.label }}</slot></span>\n <span class=\"h-px flex-1 bg-border\" />\n </div>\n\n <div\n v-else\n ref=\"el\"\n role=\"separator\"\n :aria-orientation=\"props.orientation\"\n v-bind=\"rest\"\n :class=\"plainClasses\"\n />\n</template>\n","<script lang=\"ts\">\n/**\n * Defines the scroll axis of a `ScrollArea`. Diverges from the shared\n * `Orientation` (adds `Both`), so it stays a local enum.\n */\nexport const ScrollAxis = {\n /** Refers to vertical scrolling only. */\n Vertical: 'vertical',\n /** Refers to horizontal scrolling only. */\n Horizontal: 'horizontal',\n /** Refers to scrolling on both axes. */\n Both: 'both',\n} as const;\n\nexport type ScrollAxis = (typeof ScrollAxis)[keyof typeof ScrollAxis];\n\nexport interface ScrollAreaProps {\n /** The scroll axis. Default `vertical`. */\n axis?: ScrollAxis;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Native scrollable container with stable visuals. For custom-styled\n * scrollbars (track + thumb separately animated) use the L5 ScrollArea\n * organism. This atom exists for the common case.\n */\ndefineOptions({ name: 'ScrollArea', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ScrollAreaProps>(), { axis: ScrollAxis.Vertical });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'relative',\n props.axis === ScrollAxis.Vertical && 'overflow-y-auto overflow-x-hidden',\n props.axis === ScrollAxis.Horizontal && 'overflow-x-auto overflow-y-hidden',\n props.axis === ScrollAxis.Both && 'overflow-auto',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Align` is imported here (not in `<script setup>`) so the one binding serves\n as both the type below and the runtime value used in `withDefaults`. */\nimport { Align } from '../../../foundation/utils';\n\nexport interface ClusterProps {\n /** The gap between children. Default `4`. */\n gap?: '2' | '3' | '4' | '6' | '8';\n\n /** The cross-axis justification. Default `center`. */\n justify?: Align;\n}\n\nconst GAP: Record<NonNullable<ClusterProps['gap']>, string> = {\n '2': 'gap-2', '3': 'gap-3', '4': 'gap-4', '6': 'gap-6', '8': 'gap-8',\n};\nconst JUSTIFY: Record<NonNullable<ClusterProps['justify']>, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Centered wrapping row — for auth-page action clusters, hero CTAs, footer\n * link groups. `Inline` left-aligns; `Cluster` centers by default.\n */\ndefineOptions({ name: 'Cluster', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ClusterProps>(), { gap: '4', justify: Align.Center });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'flex flex-wrap items-center',\n GAP[props.gap],\n JUSTIFY[props.justify],\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Radius` is imported here (not in `<script setup>`) so the one binding serves\n as both the type below and the runtime value used in `withDefaults`. */\nimport { Radius } from '../../../foundation/utils';\n\n/** Defines the surface background of a `Frame`. */\nexport const FrameSurface = {\n /** Refers to a raised card surface. */\n Card: 'card',\n /** Refers to a recessed muted surface. */\n Muted: 'muted',\n /** Refers to no surface fill (transparent). */\n Transparent: 'transparent',\n} as const;\n\nexport type FrameSurface = (typeof FrameSurface)[keyof typeof FrameSurface];\n\nexport interface FrameProps {\n /** The padding. Default `4`. */\n padding?: '0' | '2' | '3' | '4' | '6' | '8';\n\n /** The border radius. Default `md`. */\n radius?: Radius;\n\n /** The surface background — `card` (raised) or `muted` (recessed). Default `card`. */\n surface?: FrameSurface;\n\n /** The border visibility. Default `true`. */\n isBordered?: boolean;\n}\n\nconst PADDING: Record<NonNullable<FrameProps['padding']>, string> = {\n '0': '', '2': 'p-2', '3': 'p-3', '4': 'p-4', '6': 'p-6', '8': 'p-8',\n};\nconst RADIUS: Record<Radius, string> = {\n none: '',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n};\nconst SURFACE: Record<FrameSurface, string> = {\n card: 'bg-card text-card-foreground',\n muted: 'bg-muted text-foreground',\n transparent: '',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Bordered shell with padding + radius — `Card` without slot semantics.\n * Use when you want the visual but not the structured Header/Body/Footer.\n */\n/* `<frame>` is a deprecated HTML element. This is a library component — imported,\n never globally registered — so the name cannot shadow the tag, and renaming it\n would break parity with the React package. */\ndefineOptions({ name: 'Frame', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FrameProps>(), {\n padding: '4',\n radius: Radius.Md,\n surface: FrameSurface.Card,\n isBordered: true,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n SURFACE[props.surface],\n PADDING[props.padding],\n RADIUS[props.radius],\n props.isBordered && 'border border-border',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/* `Side` is imported here (not in `<script setup>`) so the one binding serves\n as both the type below and the runtime value used in `withDefaults`. */\nimport { Side } from '../../../foundation/utils';\n\nexport interface TwoColumnProps {\n /** The aside width — Tailwind class string (e.g. `w-64`). Default `w-64`. */\n asideWidth?: string;\n\n /** The side the aside sits on — `left` or `right`. Default `left`. */\n asideSide?: Side;\n\n /** The gap between aside and main. Default `6`. */\n gap?: '0' | '4' | '6' | '8' | '10';\n}\n\nconst GAP: Record<NonNullable<TwoColumnProps['gap']>, string> = {\n '0': 'gap-0', '4': 'gap-4', '6': 'gap-6', '8': 'gap-8', '10': 'gap-10',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * Two-pane layout — fixed-width aside + flexible main. Sidebar+content,\n * filter+results, table-of-contents+article patterns.\n */\ndefineOptions({ name: 'TwoColumn', inheritAttrs: false });\n\n/**\n * React's `aside` / `children` ReactNode props become slots: structural content\n * regions have no prop equivalent in Vue, and a slot is what a template can\n * fill. `aside` was required in React and stays required here.\n */\ndefineSlots<{\n /** The sidebar / aside content. */\n aside(): unknown;\n /** The main content. */\n default(): unknown;\n}>();\n\nconst props = withDefaults(defineProps<TwoColumnProps>(), {\n asideWidth: 'w-64',\n asideSide: Side.Left,\n gap: '6',\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'flex w-full',\n props.asideSide === Side.Right && 'flex-row-reverse',\n GAP[props.gap],\n attrs.class as string | undefined,\n ),\n);\n\nconst asideClasses = computed(() => cn('shrink-0', props.asideWidth));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <aside :class=\"asideClasses\"><slot name=\"aside\" /></aside>\n <main class=\"min-w-0 flex-1\"><slot /></main>\n </div>\n</template>\n","<script lang=\"ts\">\nimport { inject, type InjectionKey } from 'vue';\n/* `Orientation` is imported as a value so the one binding serves as both the\n type below and the runtime default in `withDefaults`. */\nimport { Orientation } from '../../../foundation/utils';\n\n/** The size constraints a `ResizablePanel` contributes to its group. */\nexport interface PanelInfo {\n defaultSize: number;\n minSize: number;\n maxSize: number;\n}\n\n/**\n * The group context. Every member is a live getter or a method — read them,\n * never destructure, or the reactivity is lost at the point of the snapshot.\n */\nexport interface ResizableContextValue {\n readonly orientation: Orientation;\n readonly sizes: ReadonlyArray<number>;\n readonly panels: ReadonlyArray<PanelInfo>;\n\n /**\n * Registration replaces React's `Children.map` index threading: a Vue parent\n * cannot rewrite its slot's children, so each child claims its own slot with an\n * identity token. Order is *registration* order — the same model the house\n * `createCollection` primitive uses — which equals document order for mount,\n * append, and remove.\n */\n registerPanel: (token: symbol, info: PanelInfo) => void;\n updatePanel: (token: symbol, info: PanelInfo) => void;\n unregisterPanel: (token: symbol) => void;\n panelIndex: (token: symbol) => number;\n\n registerSeparator: (token: symbol) => void;\n unregisterSeparator: (token: symbol) => void;\n separatorIndex: (token: symbol) => number;\n\n beginDrag: (separatorIndex: number, event: MouseEvent) => void;\n nudge: (separatorIndex: number, deltaPct: number) => void;\n resetPair: (separatorIndex: number) => void;\n}\n\nexport const resizableContextKey: InjectionKey<ResizableContextValue> =\n Symbol('wow-two.resizablePanels');\n\nexport function useResizableContext(): ResizableContextValue {\n const context = inject(resizableContextKey, null);\n if (!context) throw new Error('ResizablePanels.* must be used inside <ResizablePanels>');\n return context;\n}\n\nexport interface ResizablePanelsProps {\n /** The split axis — `horizontal` (side-by-side panels) or `vertical` (stacked). Default `horizontal`. */\n orientation?: Orientation;\n defaultSizes?: ReadonlyArray<number>;\n sizes?: ReadonlyArray<number>;\n onSizesChange?: (sizes: ReadonlyArray<number>) => void;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onScopeDispose, provide, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled } from '../../../foundation/hooks';\n\n/**\n * Two-or-more resizable panes split by draggable separators. Compose\n * `<ResizablePanel>` and `<ResizableSeparator>` as children — each claims its\n * index from this root through the injected context.\n */\ndefineOptions({ name: 'ResizablePanels', inheritAttrs: false });\n\n/** The panels and separators — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<ResizablePanelsProps>(), {\n orientation: Orientation.Horizontal,\n defaultSizes: undefined,\n sizes: undefined,\n onSizesChange: undefined,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\ninterface PanelEntry {\n token: symbol;\n info: PanelInfo;\n}\n\nconst panelEntries = ref<Array<PanelEntry>>([]);\nconst separatorTokens = ref<Array<symbol>>([]);\nconst panelCount = computed(() => panelEntries.value.length);\n\nconst controlled = useControlled<ReadonlyArray<number>>({\n controlled: () => props.sizes,\n default: props.defaultSizes ?? [],\n onChange: (next) => props.onSizesChange?.(next),\n});\n\n/**\n * React counted its panels before the first render (`Children.forEach`) and\n * seeded state from that. Children register *after* this setup, so the seed is\n * applied here instead — and the same watcher covers React's \"panel count\n * changed → reset to equal sizes\" effect.\n */\nwatch(\n panelCount,\n (count) => {\n if (controlled.value.value.length === count) return;\n if (props.defaultSizes && props.defaultSizes.length === count) {\n controlled.setValue(props.defaultSizes);\n return;\n }\n controlled.setValue(Array<number>(count).fill(100 / Math.max(count, 1)));\n },\n { immediate: true },\n);\n\nfunction findPanel(index: number): PanelInfo | undefined {\n return panelEntries.value[index]?.info;\n}\n\nfunction applyDelta(separatorIndex: number, deltaPct: number): void {\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = findPanel(a);\n const bInfo = findPanel(b);\n if (!aInfo || !bInfo) return;\n const next = controlled.value.value.slice();\n let nextA = next[a]! + deltaPct;\n let nextB = next[b]! - deltaPct;\n\n // Clamp by min/max — adjust deltaPct on overshoot.\n if (nextA < aInfo.minSize) {\n const adj = aInfo.minSize - nextA;\n nextA += adj;\n nextB -= adj;\n }\n if (nextB < bInfo.minSize) {\n const adj = bInfo.minSize - nextB;\n nextB += adj;\n nextA -= adj;\n }\n if (nextA > aInfo.maxSize) {\n const adj = nextA - aInfo.maxSize;\n nextA -= adj;\n nextB += adj;\n }\n if (nextB > bInfo.maxSize) {\n const adj = nextB - bInfo.maxSize;\n nextB -= adj;\n nextA += adj;\n }\n\n next[a] = nextA;\n next[b] = nextB;\n controlled.setValue(next);\n}\n\nlet dragCleanup: (() => void) | null = null;\n\n// Unmounting mid-drag must release the window listeners + body style overrides.\nonScopeDispose(() => dragCleanup?.());\n\nfunction beginDrag(separatorIndex: number, event: MouseEvent): void {\n const container = el.value;\n if (!container) return;\n const startX = event.clientX;\n const startY = event.clientY;\n const rect = container.getBoundingClientRect();\n const total = props.orientation === Orientation.Horizontal ? rect.width : rect.height;\n if (total === 0) return;\n\n const startSizes = controlled.value.value.slice();\n\n const onMove = (e: MouseEvent): void => {\n const deltaPx =\n props.orientation === Orientation.Horizontal ? e.clientX - startX : e.clientY - startY;\n const deltaPct = (deltaPx / total) * 100;\n // Recompute against the start state, not the live state, to prevent drift.\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = findPanel(a);\n const bInfo = findPanel(b);\n if (!aInfo || !bInfo) return;\n let nextA = startSizes[a]! + deltaPct;\n let nextB = startSizes[b]! - deltaPct;\n nextA = Math.max(aInfo.minSize, Math.min(aInfo.maxSize, nextA));\n nextB = Math.max(bInfo.minSize, Math.min(bInfo.maxSize, nextB));\n // Restore the locked total after clamping.\n const sum = nextA + nextB;\n const startSum = startSizes[a]! + startSizes[b]!;\n if (sum !== startSum) {\n const diff = startSum - sum;\n // Push surplus onto whichever side has slack.\n if (nextA + diff <= aInfo.maxSize && nextA + diff >= aInfo.minSize) {\n nextA = nextA + diff;\n } else {\n nextB = nextB + diff;\n }\n }\n const next = startSizes.slice();\n next[a] = nextA;\n next[b] = nextB;\n controlled.setValue(next);\n };\n\n const onUp = (): void => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n dragCleanup = null;\n };\n\n document.body.style.cursor =\n props.orientation === Orientation.Horizontal ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n dragCleanup = onUp;\n}\n\nfunction resetPair(separatorIndex: number): void {\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = findPanel(a);\n const bInfo = findPanel(b);\n if (!aInfo || !bInfo) return;\n const next = controlled.value.value.slice();\n const total = next[a]! + next[b]!;\n next[a] = (total * aInfo.defaultSize) / (aInfo.defaultSize + bInfo.defaultSize);\n next[b] = total - next[a]!;\n controlled.setValue(next);\n}\n\nprovide(resizableContextKey, {\n get orientation() {\n return props.orientation;\n },\n get sizes() {\n return controlled.value.value;\n },\n get panels() {\n return panelEntries.value.map((entry) => entry.info);\n },\n registerPanel: (token, info) => {\n panelEntries.value = [...panelEntries.value, { token, info }];\n },\n updatePanel: (token, info) => {\n panelEntries.value = panelEntries.value.map((entry) =>\n entry.token === token ? { token, info } : entry,\n );\n },\n unregisterPanel: (token) => {\n panelEntries.value = panelEntries.value.filter((entry) => entry.token !== token);\n },\n panelIndex: (token) => panelEntries.value.findIndex((entry) => entry.token === token),\n registerSeparator: (token) => {\n separatorTokens.value = [...separatorTokens.value, token];\n },\n unregisterSeparator: (token) => {\n separatorTokens.value = separatorTokens.value.filter((existing) => existing !== token);\n },\n separatorIndex: (token) => separatorTokens.value.indexOf(token),\n beginDrag,\n nudge: applyDelta,\n resetPair,\n});\n\nconst classes = computed(() =>\n cn(\n 'flex h-full w-full',\n props.orientation === Orientation.Horizontal ? 'flex-row' : 'flex-col',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" :data-orientation=\"props.orientation\" v-bind=\"rest\" :class=\"classes\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ResizablePanelProps {\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, useAttrs, useTemplateRef, watch, type CSSProperties } from 'vue';\nimport { cn, Orientation } from '../../../foundation/utils';\nimport { useResizableContext } from './ResizablePanels.vue';\n\n/**\n * One pane of a `<ResizablePanels>` group.\n *\n * React's `ResizablePanel` was an inert marker the parent swapped for an inner\n * impl through `Children.map`. Vue cannot rewrite slot children, so this is the\n * real component and it claims its index by registering with the group.\n */\ndefineOptions({ name: 'ResizablePanel', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ResizablePanelProps>(), {\n defaultSize: 100,\n minSize: 0,\n maxSize: 100,\n});\n\nconst context = useResizableContext();\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst token = Symbol('wow-two.resizablePanel');\ncontext.registerPanel(token, {\n defaultSize: props.defaultSize,\n minSize: props.minSize,\n maxSize: props.maxSize,\n});\n\nwatch(\n () => [props.defaultSize, props.minSize, props.maxSize] as const,\n ([defaultSize, minSize, maxSize]) => {\n context.updatePanel(token, { defaultSize, minSize, maxSize });\n },\n);\n\nonUnmounted(() => context.unregisterPanel(token));\n\nconst index = computed(() => context.panelIndex(token));\nconst size = computed(() => context.sizes[index.value] ?? props.defaultSize);\n\nconst styles = computed<CSSProperties>(() =>\n context.orientation === Orientation.Horizontal\n ? { width: `${size.value}%`, height: '100%' }\n : { height: `${size.value}%`, width: '100%' },\n);\n\nconst classes = computed(() => cn('overflow-auto', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" :data-panel-index=\"index\" v-bind=\"rest\" :class=\"classes\" :style=\"styles\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ResizableSeparatorProps {\n isDisabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref, useAttrs, useTemplateRef } from 'vue';\nimport { cn, composeEventHandlers, Orientation } from '../../../foundation/utils';\nimport { useResizableContext } from './ResizablePanels.vue';\n\n/** The draggable rule between two `<ResizablePanel>`s. Arrow keys nudge, double-click resets the pair. */\ndefineOptions({ name: 'ResizableSeparator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ResizableSeparatorProps>(), { isDisabled: false });\n\nconst context = useResizableContext();\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst token = Symbol('wow-two.resizableSeparator');\ncontext.registerSeparator(token);\nonUnmounted(() => context.unregisterSeparator(token));\n\nconst index = computed(() => context.separatorIndex(token));\nconst dragging = ref(false);\n\nfunction handleMouseDown(e: MouseEvent): void {\n if (props.isDisabled) return;\n if (e.button !== 0) return;\n e.preventDefault();\n dragging.value = true;\n context.beginDrag(index.value, e);\n const onUp = (): void => {\n dragging.value = false;\n window.removeEventListener('mouseup', onUp);\n };\n window.addEventListener('mouseup', onUp);\n}\n\nfunction handleKeydown(e: KeyboardEvent): void {\n if (props.isDisabled) return;\n const step = e.shiftKey ? 10 : 1;\n if (context.orientation === Orientation.Horizontal) {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n context.nudge(index.value, -step);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n context.nudge(index.value, step);\n }\n } else {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n context.nudge(index.value, -step);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n context.nudge(index.value, step);\n }\n }\n}\n\nfunction handleDblclick(): void {\n if (props.isDisabled) return;\n context.resetPair(index.value);\n}\n\n/** A fallthrough listener may already be a chain; flatten it to one callable. */\nfunction asHandler<E extends Event>(value: unknown): ((event: E) => void) | undefined {\n if (typeof value === 'function') return value as (event: E) => void;\n if (Array.isArray(value)) {\n return (event) => {\n for (const fn of value) if (typeof fn === 'function') fn(event);\n };\n }\n return undefined;\n}\n\n/*\n * React ran the consumer's handler first, then skipped its own when the consumer\n * called `preventDefault()`. Vue's own attr merge would run both unconditionally,\n * so the two are composed by hand through the house helper instead.\n */\nconst onKeydown = computed(() =>\n composeEventHandlers<KeyboardEvent>(asHandler(attrs.onKeydown), handleKeydown),\n);\nconst onDblclick = computed(() =>\n composeEventHandlers<MouseEvent>(asHandler(attrs.onDblclick), handleDblclick),\n);\n\n// Announce the panel BEFORE the separator — ArrowRight/ArrowDown grow it, so size moves with the key.\nconst ariaValueNow = computed(() => Math.round(context.sizes[index.value] ?? 50));\nconst panelBefore = computed(() => context.panels[index.value]);\n\nconst classes = computed(() =>\n cn(\n 'flex shrink-0 items-center justify-center bg-border transition-colors',\n context.orientation === Orientation.Horizontal\n ? 'w-1 cursor-col-resize hover:bg-border-strong data-[dragging]:bg-primary'\n : 'h-1 cursor-row-resize hover:bg-border-strong data-[dragging]:bg-primary',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n props.isDisabled && 'cursor-default opacity-50 hover:bg-border',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class` and the two composed listeners, all re-applied above. */\nconst rest = computed(() => {\n const { class: _class, onKeydown: _keydown, onDblclick: _dblclick, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n role=\"separator\"\n :aria-orientation=\"context.orientation === Orientation.Horizontal ? 'vertical' : 'horizontal'\"\n :aria-valuenow=\"ariaValueNow\"\n :aria-valuemin=\"panelBefore?.minSize ?? 0\"\n :aria-valuemax=\"panelBefore?.maxSize ?? 100\"\n :aria-disabled=\"props.isDisabled || undefined\"\n :tabindex=\"props.isDisabled ? -1 : 0\"\n :data-dragging=\"dragging || undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n @mousedown=\"handleMouseDown\"\n @keydown=\"onKeydown\"\n @dblclick=\"onDblclick\"\n />\n</template>\n","<script lang=\"ts\">\nexport interface PullToRefreshProps {\n onRefresh: () => Promise<void> | void;\n threshold?: number;\n maxPull?: number;\n isDisabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { Announce, Politeness } from '../../../foundation/primitives';\nimport Spinner from '../../feedback/spinner/Spinner.vue';\n\n/**\n * Pull-to-refresh wrapper. Listen to pointer drag at scrollTop=0; once past\n * `threshold`, fire `onRefresh`. Visual indicator: spinner that scales in as\n * the user pulls.\n */\ndefineOptions({ name: 'PullToRefresh', inheritAttrs: false });\n\n/** The scrollable content — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<PullToRefreshProps>(), {\n threshold: 60,\n maxPull: 120,\n isDisabled: false,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst startY = ref<number | null>(null);\nconst pull = ref(0);\nconst refreshing = ref(false);\n\nconst reached = computed(() => pull.value >= props.threshold);\n\nfunction onPointerDown(e: PointerEvent): void {\n if (props.isDisabled || refreshing.value) return;\n const node = el.value;\n if (!node || node.scrollTop > 0) return;\n startY.value = e.clientY;\n}\n\nfunction onPointerMove(e: PointerEvent): void {\n if (startY.value == null) return;\n // Pointer was released outside the container — abandon the gesture.\n if (e.buttons === 0) {\n startY.value = null;\n pull.value = 0;\n return;\n }\n const dy = e.clientY - startY.value;\n if (dy < 0) {\n pull.value = 0;\n return;\n }\n // Resistance: sub-linear growth past threshold.\n const eased = dy < props.threshold ? dy : props.threshold + (dy - props.threshold) * 0.4;\n pull.value = Math.min(props.maxPull, eased);\n}\n\nasync function onPointerUp(): Promise<void> {\n if (startY.value == null) return;\n const didReach = pull.value >= props.threshold;\n startY.value = null;\n if (didReach) {\n refreshing.value = true;\n pull.value = props.threshold;\n try {\n await props.onRefresh();\n } finally {\n refreshing.value = false;\n pull.value = 0;\n }\n } else {\n pull.value = 0;\n }\n}\n\n// Touch: native vertical pan fires pointercancel and kills the gesture.\n// preventDefault touchmove only mid-pull (scrollTop 0, moving down); normal scroll stays native.\nfunction onTouchMove(e: TouchEvent): void {\n const node = el.value;\n if (!node || startY.value == null || !e.cancelable) return;\n if (node.scrollTop > 0) return;\n const touch = e.touches[0];\n if (!touch) return;\n if (touch.clientY - startY.value > 0) e.preventDefault();\n}\n\nonMounted(() => {\n el.value?.addEventListener('touchmove', onTouchMove, { passive: false });\n});\n\nonBeforeUnmount(() => {\n el.value?.removeEventListener('touchmove', onTouchMove);\n});\n\n// Releasing the pointer outside the container must still finish the gesture.\nwatch(pull, (value, _previous, onCleanup) => {\n if (value === 0) return;\n const finish = (): void => {\n void onPointerUp();\n };\n window.addEventListener('pointerup', finish);\n window.addEventListener('pointercancel', finish);\n onCleanup(() => {\n window.removeEventListener('pointerup', finish);\n window.removeEventListener('pointercancel', finish);\n });\n});\n\nconst classes = computed(() =>\n cn('relative h-full overflow-y-auto', attrs.class as string | undefined),\n);\n\n/**\n * Vue does not append `px` to a numeric `:style` value the way React does, so\n * every length below is spelled out.\n */\nconst indicatorStyle = computed(() => ({\n height: `${pull.value}px`,\n transition: startY.value == null ? 'height 200ms ease-out' : 'none',\n}));\n\nconst contentStyle = computed(() => ({\n transform: `translateY(${pull.value}px)`,\n transition: startY.value == null ? 'transform 200ms ease-out' : 'none',\n}));\n\nconst spinnerScaleStyle = computed(() => ({\n transform: `scale(${Math.min(1, pull.value / props.threshold)})`,\n}));\n\nconst spinnerWrapClasses = computed(() =>\n cn('transition-opacity', refreshing.value || reached.value ? 'opacity-100' : 'opacity-60'),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n v-bind=\"rest\"\n :class=\"classes\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\"\n @pointerup=\"onPointerUp\"\n @pointercancel=\"onPointerUp\"\n >\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute inset-x-0 top-0 z-raised flex items-center justify-center\"\n :style=\"indicatorStyle\"\n >\n <div v-if=\"pull > 8\" :class=\"spinnerWrapClasses\" :style=\"spinnerScaleStyle\">\n <Spinner size=\"md\" :tone=\"reached ? 'brand' : 'default'\" />\n </div>\n </div>\n\n <div :style=\"contentStyle\"><slot /></div>\n\n <Announce :politeness=\"Politeness.Polite\">{{ refreshing ? 'Refreshing' : '' }}</Announce>\n </div>\n</template>\n","<script lang=\"ts\">\nimport { inject, type ComputedRef, type InjectionKey, type Ref } from 'vue';\n\n/** Defines the responsive breakpoint at which `AppShell` collapses its sidebar / aside. */\nexport const Breakpoint = {\n /** Refers to the `sm` (640px) breakpoint. */\n Sm: 'sm',\n /** Refers to the `md` (768px) breakpoint. */\n Md: 'md',\n /** Refers to the `lg` (1024px) breakpoint. */\n Lg: 'lg',\n /** Refers to the `xl` (1280px) breakpoint. */\n Xl: 'xl',\n /** Refers to the `2xl` (1536px) breakpoint. */\n Xxl: '2xl',\n} as const;\n\nexport type Breakpoint = (typeof Breakpoint)[keyof typeof Breakpoint];\n\nconst BREAKPOINT_PX: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n/**\n * The value shared with `AppShellSidebar` / `AppShellAside`.\n *\n * React's context held plain values re-created on every render behind a\n * `useMemo`; here every field stays a ref or a computed, so a child reads the\n * live value and the root never re-renders to publish one.\n */\nexport interface AppShellContextValue {\n sidebarWidth: ComputedRef<string>;\n asideWidth: ComputedRef<string>;\n sidebarBreakpoint: ComputedRef<Breakpoint>;\n /** The resolved mobile-sidebar open state. Writable — an assignment routes through `setSidebarOpen`. */\n isSidebarOpen: Ref<boolean>;\n setSidebarOpen: (open: boolean) => void;\n /** True below `sidebarBreakpoint` — the sidebar renders as a `Drawer`. */\n isSidebarCollapsed: ComputedRef<boolean>;\n /** True below `asideBreakpoint` — the aside renders nothing. */\n isAsideHidden: ComputedRef<boolean>;\n}\n\nexport const appShellContextKey: InjectionKey<AppShellContextValue> = Symbol('wow-two.appShell');\n\nexport function useAppShellContext(): AppShellContextValue {\n const context = inject(appShellContextKey, null);\n if (!context) throw new Error('AppShell.* must be used inside <AppShell>');\n return context;\n}\n\n/** Reads the enclosing `AppShell`'s state — widths, breakpoint, and the mobile-sidebar toggle. */\nexport function useAppShell(): AppShellContextValue {\n return useAppShellContext();\n}\n\n/**\n * The prop surface of `AppShell`.\n *\n * `sidebarOpen` and `isSidebarOpen` are the same controlled state under two\n * names: `sidebarOpen` is the `v-model:sidebarOpen` binding target,\n * `isSidebarOpen` React's spelling. `isSidebarOpen` wins when both are set —\n * React's name always resolves first, so an explicit binding is never\n * swallowed by a `v-model` that is also present.\n * React's `onSidebarOpenChange` is the `sidebar-open-change` emit;\n * `update:sidebarOpen` fires alongside it so `v-model` works.\n */\nexport interface AppShellProps {\n /** The sidebar column width, any CSS length. Default `240px`. */\n sidebarWidth?: string;\n\n /** The aside rail width, any CSS length. Default `280px`. */\n asideWidth?: string;\n\n /** The sidebar collapses below this breakpoint. Default `lg`. */\n sidebarBreakpoint?: Breakpoint;\n\n /** The aside hides below this breakpoint. Default `xl`. */\n asideBreakpoint?: Breakpoint;\n\n /** The mobile-sidebar open state, controlled. The `v-model:sidebarOpen` binding target. */\n sidebarOpen?: boolean;\n\n /** The mobile-sidebar open state, controlled — React's spelling, which wins when both are set. */\n isSidebarOpen?: boolean;\n\n /** The initial mobile-sidebar state when uncontrolled. Default `false`. */\n defaultSidebarOpen?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, provide, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled, useMediaQuery } from '../../../foundation/hooks';\n\n/**\n * Top-level page frame. Children: `AppShellHeader` / `AppShellSidebar` /\n * `AppShellMain` / `AppShellAside` / `AppShellFooter`. CSS-grid layout; the\n * sidebar collapses to a `Drawer` below `sidebarBreakpoint`.\n */\ndefineOptions({ name: 'AppShell', inheritAttrs: false });\n\n/** The shell's regions — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\n/**\n * `sidebarOpen: undefined` / `isSidebarOpen: undefined` are load-bearing: Vue\n * coerces an absent `Boolean` prop to `false` unless the declaration *owns* a\n * `default` key, which would strand the uncontrolled path behind a\n * permanently-closed controlled one.\n */\nconst props = withDefaults(defineProps<AppShellProps>(), {\n sidebarWidth: '240px',\n asideWidth: '280px',\n sidebarBreakpoint: 'lg',\n asideBreakpoint: 'xl',\n sidebarOpen: undefined,\n isSidebarOpen: undefined,\n defaultSidebarOpen: false,\n});\n\nconst emit = defineEmits<{\n /** The `v-model:sidebarOpen` half. */\n 'update:sidebarOpen': [open: boolean];\n /** Replaces React's `onSidebarOpenChange`. */\n 'sidebar-open-change': [open: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst controlled = useControlled<boolean>({\n controlled: () =>\n props.isSidebarOpen !== undefined ? props.isSidebarOpen : props.sidebarOpen,\n default: () => props.defaultSidebarOpen,\n onChange: (value) => {\n emit('update:sidebarOpen', value);\n emit('sidebar-open-change', value);\n },\n});\n\nconst isSidebarWide = useMediaQuery(\n () => `(min-width: ${BREAKPOINT_PX[props.sidebarBreakpoint]}px)`,\n);\nconst isAsideWide = useMediaQuery(() => `(min-width: ${BREAKPOINT_PX[props.asideBreakpoint]}px)`);\n\nconst isSidebarCollapsed = computed(() => !isSidebarWide.value);\nconst isAsideHidden = computed(() => !isAsideWide.value);\n\nprovide(appShellContextKey, {\n sidebarWidth: computed(() => props.sidebarWidth),\n asideWidth: computed(() => props.asideWidth),\n sidebarBreakpoint: computed(() => props.sidebarBreakpoint),\n isSidebarOpen: controlled.value,\n setSidebarOpen: controlled.setValue,\n isSidebarCollapsed,\n isAsideHidden,\n});\n\n/** Collapsed drops the sidebar track entirely; header and footer always span the full width. */\nconst gridTemplate = computed(() =>\n isSidebarCollapsed.value\n ? `'header header' auto 'main main' 1fr 'footer footer' auto / 1fr`\n : `'header header' auto 'sidebar main' 1fr 'sidebar footer' auto / ${props.sidebarWidth} 1fr`,\n);\n\nconst classes = computed(() =>\n cn('grid min-h-svh bg-background text-foreground', attrs.class as string | undefined),\n);\n\n/** `gridTemplate` is normalized first so a caller's `style` still wins per-property. */\nconst rootStyle = computed(() =>\n normalizeStyle([{ gridTemplate: gridTemplate.value }, attrs.style]),\n);\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :style=\"rootStyle\" :class=\"classes\">\n <a\n href=\"#app-shell-main\"\n class=\"sr-only focus:not-sr-only focus:fixed focus:left-2 focus:top-2 focus:z-modal focus:rounded-md focus:bg-card focus:px-3 focus:py-2 focus:shadow\"\n >\n Skip to content\n </a>\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellHeader`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellHeaderProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/* Sticky top bar of the shell — the `header` grid area. */\ndefineOptions({ name: 'AppShellHeader', inheritAttrs: false });\n\n/** The header content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'sticky top-0 z-sticky flex h-14 items-center gap-3 border-b border-border bg-card px-4 [grid-area:header]',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <header ref=\"el\" role=\"banner\" v-bind=\"rest\" :class=\"classes\"><slot /></header>\n</template>\n","<script lang=\"ts\">\nimport type { Breakpoint } from './AppShell.vue';\n\n/**\n * The prop surface of `AppShellSidebar`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the `aside`\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellSidebarProps = Record<string, never>;\n\n// Complete class strings per breakpoint — Tailwind can't see interpolated names.\nconst SIDEBAR_STATIC_CLASSES: Record<Breakpoint, string> = {\n sm: 'hidden sm:flex',\n md: 'hidden md:flex',\n lg: 'hidden lg:flex',\n xl: 'hidden xl:flex',\n '2xl': 'hidden 2xl:flex',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport Drawer from '../../overlays/drawer/Drawer.vue';\nimport DrawerContent from '../../overlays/drawer/DrawerContent.vue';\nimport { useAppShellContext } from './AppShell.vue';\n\n/**\n * Side navigation rail — the `sidebar` grid area above `sidebarBreakpoint`, a\n * left-edge `Drawer` below it. The collapsed branch takes only `class` (onto\n * the `nav`), exactly as React's did; the rest of the attrs belong to the\n * `aside` that branch does not render.\n */\ndefineOptions({ name: 'AppShellSidebar', inheritAttrs: false });\n\n/** The navigation content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\nconst context = useAppShellContext();\n\n/* Refs lifted to setup consts so the template auto-unwraps them (a plain injected object does not). */\nconst isCollapsed = context.isSidebarCollapsed;\nconst isSidebarOpen = context.isSidebarOpen;\n\nconst asideClasses = computed(() =>\n cn(\n 'sticky top-14 h-[calc(100svh-3.5rem)] overflow-y-auto border-r border-border bg-card [grid-area:sidebar]',\n SIDEBAR_STATIC_CLASSES[context.sidebarBreakpoint.value],\n attrs.class as string | undefined,\n ),\n);\n\nconst navClasses = computed(() => cn('flex h-full flex-col', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\n/** `null` in the collapsed branch — there is no `aside` then, as there was none in React. */\ndefineExpose({ el });\n</script>\n\n<template>\n <Drawer\n v-if=\"isCollapsed\"\n :open=\"isSidebarOpen\"\n side=\"left\"\n @open-change=\"context.setSidebarOpen\"\n >\n <DrawerContent class=\"w-72 max-w-[80%]\">\n <nav :class=\"navClasses\"><slot /></nav>\n </DrawerContent>\n </Drawer>\n\n <aside v-else ref=\"el\" v-bind=\"rest\" :class=\"asideClasses\">\n <nav class=\"flex h-full w-full flex-col p-3\"><slot /></nav>\n </aside>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellMain`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellMainProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * The primary column — the `main` grid area, and the skip-link's target.\n *\n * `id` and `tabindex` are bound before `v-bind=\"rest\"` so a caller-supplied\n * value still wins, matching React's attribute-then-spread order.\n */\ndefineOptions({ name: 'AppShellMain', inheritAttrs: false });\n\n/** The page content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn('flex flex-col [grid-area:main] focus:outline-none', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <main ref=\"el\" id=\"app-shell-main\" tabindex=\"-1\" v-bind=\"rest\" :class=\"classes\">\n <slot />\n </main>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellContent`.\n *\n * React declared `HTMLAttributes<HTMLDivElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellContentProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/* The scrolling region inside `AppShellMain` — header, sidebar and footer stay put. */\ndefineOptions({ name: 'AppShellContent', inheritAttrs: false });\n\n/** The scrolling content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn('flex-1 overflow-y-auto p-6', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellAside`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellAsideProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useAppShellContext } from './AppShell.vue';\n\n/* Right-hand rail inside `AppShellMain` — renders nothing below `asideBreakpoint`. */\ndefineOptions({ name: 'AppShellAside', inheritAttrs: false });\n\n/** The rail content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\nconst context = useAppShellContext();\n\n/* Ref lifted to a setup const so the template auto-unwraps it (a plain injected object does not). */\nconst isHidden = context.isAsideHidden;\n\nconst classes = computed(() =>\n cn(\n 'sticky top-14 h-[calc(100svh-3.5rem)] shrink-0 overflow-y-auto border-l border-border bg-card p-4',\n attrs.class as string | undefined,\n ),\n);\n\n/** The width is normalized first so a caller's `style` still wins per-property. */\nconst asideStyle = computed(() =>\n normalizeStyle([{ width: context.asideWidth.value }, attrs.style]),\n);\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <aside v-if=\"!isHidden\" ref=\"el\" v-bind=\"rest\" :style=\"asideStyle\" :class=\"classes\">\n <slot />\n </aside>\n</template>\n","<script lang=\"ts\">\n/**\n * The prop surface of `AppShellFooter`.\n *\n * React declared `HTMLAttributes<HTMLElement>`; attributes reach the root\n * through `useAttrs` here and `children` is the default slot, which leaves no\n * declared prop.\n */\nexport type AppShellFooterProps = Record<string, never>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\n\n/* Bottom bar of the shell — the `footer` grid area. */\ndefineOptions({ name: 'AppShellFooter', inheritAttrs: false });\n\n/** The footer content — React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'border-t border-border bg-card px-4 py-3 text-sm text-muted-foreground [grid-area:footer]',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <footer ref=\"el\" role=\"contentinfo\" v-bind=\"rest\" :class=\"classes\"><slot /></footer>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the internal visibility-gating mode of an `Overlay`. */\nexport const OverlayVisibilityMode = {\n /** Refers to an always-visible overlay. */\n Always: 'always',\n /** Refers to reveal-on-hover (or focus-within) gating. */\n Hover: 'hover',\n /** Refers to reveal-on-focus-within gating. */\n FocusWithin: 'focus-within',\n /** Refers to mount/unmount gating driven by presence data-state. */\n Presence: 'presence',\n} as const;\n\nexport type OverlayVisibilityMode = (typeof OverlayVisibilityMode)[keyof typeof OverlayVisibilityMode];\n\n/** Defines the show/hide animation effect of an `Overlay`. */\nexport const OverlayTransition = {\n /** Refers to no transition. */\n None: 'none',\n /** Refers to an opacity fade. */\n Fade: 'fade',\n /** Refers to a fade combined with a scale. */\n FadeScale: 'fade-scale',\n /** Refers to a fade combined with an upward slide. */\n FadeSlideUp: 'fade-slide-up',\n /** Refers to a fade combined with a downward slide. */\n FadeSlideDown: 'fade-slide-down',\n /** Refers to a fade combined with a leftward slide. */\n FadeSlideLeft: 'fade-slide-left',\n /** Refers to a fade combined with a rightward slide. */\n FadeSlideRight: 'fade-slide-right',\n} as const;\n\nexport type OverlayTransition = (typeof OverlayTransition)[keyof typeof OverlayTransition];\n\n/* Overlay positioning + visibility + transition surface — see Overlay.standard.md + Overlay.spec.md. */\nexport const overlayVariants = tv({\n base: 'absolute',\n variants: {\n position: {\n 'top-right': 'top-[var(--ui-overlay-inset,0.5rem)] right-[var(--ui-overlay-inset,0.5rem)]',\n 'top-left': 'top-[var(--ui-overlay-inset,0.5rem)] left-[var(--ui-overlay-inset,0.5rem)]',\n 'bottom-right': 'bottom-[var(--ui-overlay-inset,0.5rem)] right-[var(--ui-overlay-inset,0.5rem)]',\n 'bottom-left': 'bottom-[var(--ui-overlay-inset,0.5rem)] left-[var(--ui-overlay-inset,0.5rem)]',\n 'top': 'top-[var(--ui-overlay-inset,0.5rem)] left-1/2 -translate-x-1/2',\n 'bottom': 'bottom-[var(--ui-overlay-inset,0.5rem)] left-1/2 -translate-x-1/2',\n 'left': 'left-[var(--ui-overlay-inset,0.5rem)] top-1/2 -translate-y-1/2',\n 'right': 'right-[var(--ui-overlay-inset,0.5rem)] top-1/2 -translate-y-1/2',\n 'center': 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'custom': '', // consumer passed inset object — positioning via inline style\n },\n visibilityMode: {\n 'always': '',\n 'hover': 'opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 group-hover:[transition-duration:var(--ui-overlay-enter,200ms)] group-focus-within:[transition-duration:var(--ui-overlay-enter,200ms)]',\n 'focus-within': 'opacity-0 group-focus-within:opacity-100 group-focus-within:[transition-duration:var(--ui-overlay-enter,200ms)]',\n 'presence': 'data-[state=closed]:opacity-0 data-[state=open]:[transition-duration:var(--ui-overlay-enter,200ms)]',\n },\n transition: {\n 'none': '',\n 'fade': 'transition-opacity duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-scale': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-up': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-down': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-left': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-right': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n },\n },\n compoundVariants: [\n // === HOVER mode + transform-bearing transitions ===\n {\n visibilityMode: 'hover', transition: 'fade-scale',\n class:\n 'scale-95 group-hover:scale-100 group-focus-within:scale-100 ' +\n 'motion-reduce:scale-100 motion-reduce:group-hover:scale-100 motion-reduce:group-focus-within:scale-100',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-up',\n class:\n 'translate-y-1 group-hover:translate-y-0 group-focus-within:translate-y-0 ' +\n 'motion-reduce:translate-y-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-down',\n class:\n '-translate-y-1 group-hover:translate-y-0 group-focus-within:translate-y-0 ' +\n 'motion-reduce:translate-y-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-left',\n class:\n 'translate-x-1 group-hover:translate-x-0 group-focus-within:translate-x-0 ' +\n 'motion-reduce:translate-x-0 motion-reduce:group-hover:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-right',\n class:\n '-translate-x-1 group-hover:translate-x-0 group-focus-within:translate-x-0 ' +\n 'motion-reduce:translate-x-0 motion-reduce:group-hover:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n\n // === FOCUS-WITHIN mode + transform-bearing transitions ===\n {\n visibilityMode: 'focus-within', transition: 'fade-scale',\n class: 'scale-95 group-focus-within:scale-100 motion-reduce:scale-100 motion-reduce:group-focus-within:scale-100',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-up',\n class: 'translate-y-1 group-focus-within:translate-y-0 motion-reduce:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-down',\n class: '-translate-y-1 group-focus-within:translate-y-0 motion-reduce:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-left',\n class: 'translate-x-1 group-focus-within:translate-x-0 motion-reduce:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-right',\n class: '-translate-x-1 group-focus-within:translate-x-0 motion-reduce:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n\n // === PRESENCE mode (data-state-driven) + transform-bearing transitions ===\n {\n visibilityMode: 'presence', transition: 'fade-scale',\n class: 'data-[state=closed]:scale-95 motion-reduce:data-[state=closed]:scale-100',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-up',\n class: 'data-[state=closed]:translate-y-1 motion-reduce:data-[state=closed]:translate-y-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-down',\n class: 'data-[state=closed]:-translate-y-1 motion-reduce:data-[state=closed]:translate-y-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-left',\n class: 'data-[state=closed]:translate-x-1 motion-reduce:data-[state=closed]:translate-x-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-right',\n class: 'data-[state=closed]:-translate-x-1 motion-reduce:data-[state=closed]:translate-x-0',\n },\n ],\n defaultVariants: {\n position: 'top-right',\n visibilityMode: 'always',\n transition: 'none',\n },\n});\n\nexport type OverlayVariants = VariantProps<typeof overlayVariants>;\n\n/* Compile-time lock: enum values ≡ tv variant keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertOverlayVisibilityMode: AssertExact<\n OverlayVisibilityMode,\n NonNullable<VariantProps<typeof overlayVariants>['visibilityMode']>\n> = true;\nconst _assertOverlayTransition: AssertExact<\n OverlayTransition,\n NonNullable<VariantProps<typeof overlayVariants>['transition']>\n> = true;\nvoid _assertOverlayVisibilityMode;\nvoid _assertOverlayTransition;\n","<script lang=\"ts\">\nimport type {\n AbsolutePosition,\n PresenceAnimationDurationProp,\n SizeValue,\n} from '../../../foundation/utils';\nimport { OverlayTransition } from './Overlay.variants';\n\n/* Re-exported for ergonomic consumer imports — same shape as the shared types. */\nexport type OverlayPosition = AbsolutePosition;\n\n/** Defines the visibility trigger of an `Overlay` while mounted. */\nexport const OverlayAppearOn = {\n /** Refers to an always-visible overlay. */\n Always: 'always',\n /** Refers to reveal-on-hover (and focus-within). */\n Hover: 'hover',\n /** Refers to reveal-on-focus-within. */\n FocusWithin: 'focus-within',\n} as const;\n\nexport type OverlayAppearOn = (typeof OverlayAppearOn)[keyof typeof OverlayAppearOn];\n\nexport { OverlayTransition };\nexport type OverlayDuration = PresenceAnimationDurationProp;\n\n/**\n * The prop surface of `Overlay`.\n *\n * React's `className` / `style` props are Vue's `class` / `style` attrs and so\n * are absent here; everything else keeps its React name. Like the original,\n * `Overlay` consumes only those two attrs — no other attribute is forwarded, by\n * design (`Overlay.standard.md` rule 10: it never sets `role` / `aria-*`; the\n * child carries its own semantics).\n */\nexport interface OverlayProps {\n /** The anchor location — preset corner/edge/center, or raw inset object. Default 'top-right'. */\n position?: OverlayPosition;\n\n /** The spacing from edge for preset positions. Default '0.5rem'. Ignored for custom inset object. */\n inset?: SizeValue;\n\n /** The z-index. Default 10. */\n zIndex?: number | string;\n\n /** The visibility trigger while mounted. Default 'always'. Hover / focus-within modes require parent `class=\"group\"`. */\n appearOn?: OverlayAppearOn;\n\n /** The presence — when provided, controls mount/unmount with exit transition (defers unmount until transitionend). */\n isOpen?: boolean;\n\n /** The animation effect for show/hide. Defaults to 'fade' if any visibility gating is active, else 'none'. */\n transition?: OverlayTransition;\n\n /** The duration in ms. Number = symmetric; object = asymmetric enter/exit. Default 200. */\n transitionDuration?: OverlayDuration;\n\n /** The CSS timing function. Default 'ease-out'. */\n transitionEasing?: string;\n\n /** The single-child merge via `Primitive` (no extra wrapper div). Default true. */\n asChild?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs } from 'vue';\nimport {\n cn,\n CssExtensions,\n TransitionExtensions,\n type AbsoluteInsetOverrides,\n type AbsolutePositionPreset,\n} from '../../../foundation/utils';\nimport { Presence, Primitive } from '../../../foundation/primitives';\nimport { overlayVariants, OverlayVisibilityMode } from './Overlay.variants';\n\n/* Renders a positioned overlay anchored to its nearest positioned ancestor — for image-corner controls, badges, hover-revealed actions, and conditionally mounted floating elements. */\ndefineOptions({ name: 'Overlay', inheritAttrs: false });\n\n/** The content — a single element when `asChild` (default), or arbitrary content otherwise. */\ndefineSlots<{ default(): unknown }>();\n\n/**\n * `isOpen: undefined` is load-bearing, not noise: Vue casts an absent `Boolean`\n * prop to `false` unless the declaration *owns* a `default` key, which would make\n * `isOpen !== undefined` always true and force every overlay into presence mode.\n * Declaring the default as `undefined` keeps the three states React had —\n * absent / `true` / `false`.\n */\nconst props = withDefaults(defineProps<OverlayProps>(), {\n position: 'top-right',\n zIndex: 10,\n appearOn: OverlayAppearOn.Always,\n asChild: true,\n isOpen: undefined,\n transition: undefined,\n transitionDuration: undefined,\n transitionEasing: undefined,\n inset: undefined,\n});\n\nconst attrs = useAttrs();\n\nconst isPresenceMode = computed(() => props.isOpen !== undefined);\nconst isCustomPosition = computed(\n () => typeof props.position === 'object' && props.position !== null,\n);\n\nconst effectiveTransition = computed<OverlayTransition>(\n () =>\n props.transition ??\n (isPresenceMode.value || props.appearOn !== OverlayAppearOn.Always\n ? OverlayTransition.Fade\n : OverlayTransition.None),\n);\n\nconst visibilityMode = computed<OverlayVisibilityMode>(() =>\n isPresenceMode.value\n ? OverlayVisibilityMode.Presence\n : props.appearOn === OverlayAppearOn.Hover\n ? OverlayVisibilityMode.Hover\n : props.appearOn === OverlayAppearOn.FocusWithin\n ? OverlayVisibilityMode.FocusWithin\n : OverlayVisibilityMode.Always,\n);\n\nconst classes = computed(() =>\n cn(\n overlayVariants({\n position: isCustomPosition.value\n ? 'custom'\n : (props.position as AbsolutePositionPreset),\n visibilityMode: visibilityMode.value,\n transition: effectiveTransition.value,\n }),\n attrs.class as string | undefined,\n ),\n);\n\n/**\n * A caller's `style` is normalized FIRST so the computed declarations below win —\n * the order of React's `{ ...style, zIndex, '--ui-overlay-*': … }`.\n */\nconst inlineStyle = computed(() => {\n const { enter, exit } = TransitionExtensions.resolveDuration(props.transitionDuration);\n\n const own: Record<string, string | number> = {\n zIndex: props.zIndex,\n // CSS vars consumed by tailwind variants — exit is the baseline\n // transition-duration; enter overrides it on hover / focus-within / open.\n '--ui-overlay-enter': `${enter}ms`,\n '--ui-overlay-exit': `${exit}ms`,\n };\n\n if (props.inset !== undefined) {\n own['--ui-overlay-inset'] = CssExtensions.toCss(props.inset);\n }\n\n if (props.transitionEasing) {\n own.transitionTimingFunction = props.transitionEasing;\n }\n\n if (isCustomPosition.value) {\n const p = props.position as AbsoluteInsetOverrides;\n if (p.top !== undefined) own.top = CssExtensions.toCss(p.top);\n if (p.right !== undefined) own.right = CssExtensions.toCss(p.right);\n if (p.bottom !== undefined) own.bottom = CssExtensions.toCss(p.bottom);\n if (p.left !== undefined) own.left = CssExtensions.toCss(p.left);\n }\n\n return normalizeStyle([attrs.style, own]);\n});\n</script>\n\n<template>\n <!-- Presence clones the single child vnode to drive `data-state` + deferred unmount. -->\n <Presence v-if=\"isPresenceMode\" :is-present=\"props.isOpen === true\">\n <Primitive as=\"div\" :as-child=\"props.asChild\" :class=\"classes\" :style=\"inlineStyle\">\n <slot />\n </Primitive>\n </Presence>\n\n <Primitive\n v-else\n as=\"div\"\n :as-child=\"props.asChild\"\n :class=\"classes\"\n :style=\"inlineStyle\"\n >\n <slot />\n </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type {\n ElementType,\n SurfaceElevation,\n SurfacePadding,\n SurfaceRadius,\n SurfaceTone,\n SurfaceVariant,\n} from '../../../foundation/utils';\n\n/**\n * Represents the prop surface of the `Surface` atom.\n *\n * React declared these by `extends SurfaceVariants`; spelled out here because\n * `defineProps<T>()` needs a type the SFC compiler can resolve to a runtime\n * declaration, and `VariantProps<typeof surfaceVariants>` is opaque to it.\n */\nexport interface SurfaceProps {\n /** The HTML element to render; defaults to `div`. */\n as?: ElementType;\n /** The merge of styles onto the immediate child instead of rendering a wrapper. */\n asChild?: boolean;\n /** The visual recipe — solid · soft · surface · outline · glass · elevated · flat · subtle. */\n variant?: SurfaceVariant;\n /** The color tone the recipe is tinted with. */\n tone?: SurfaceTone;\n /** The corner rounding. */\n radius?: SurfaceRadius;\n /** The inner spacing step. */\n padding?: SurfacePadding;\n /** The shadow depth. */\n elevation?: SurfaceElevation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef, type ComponentPublicInstance } from 'vue';\nimport { Primitive } from '../../../foundation/primitives';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\n\n/**\n * Provides a styled visual surface composed from the `surfaceVariants` matrix.\n *\n * React branched between `Slot` (when `asChild`) and the `as` element. `Primitive`\n * carries both, so one element covers the pair: `asChild` collapses into the single\n * slot child, otherwise `as` renders.\n */\ndefineOptions({ name: 'Surface', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SurfaceProps>(), { as: 'div', asChild: false });\n\nconst attrs = useAttrs();\nconst inner = useTemplateRef<ComponentPublicInstance>('inner');\n\nconst classes = computed(() =>\n cn(\n surfaceVariants({\n variant: props.variant,\n tone: props.tone,\n radius: props.radius,\n padding: props.padding,\n elevation: props.elevation,\n }),\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\n/** `Primitive` renders the real element, so its `$el` is this component's root. */\nconst el = computed(() => (inner.value?.$el ?? null) as HTMLElement | null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <Primitive\n ref=\"inner\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <slot />\n </Primitive>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the vertical-padding scale of the `Section` band. */\nexport const SectionPaddingY = {\n /** Refers to no vertical padding. */\n None: 'none',\n /** Refers to a small vertical rhythm. */\n Sm: 'sm',\n /** Refers to a medium vertical rhythm. */\n Md: 'md',\n /** Refers to a large vertical rhythm. */\n Lg: 'lg',\n /** Refers to an extra-large vertical rhythm. */\n Xl: 'xl',\n} as const;\n\nexport type SectionPaddingY = (typeof SectionPaddingY)[keyof typeof SectionPaddingY];\n\n/** Provides the vertical-rhythm (top/bottom padding) scale for the `Section` band. */\nexport const sectionVariants = tv({\n base: 'w-full',\n variants: {\n /* Vertical padding — the band's top/bottom breathing room. */\n py: {\n none: 'py-0',\n sm: 'py-6',\n md: 'py-10',\n lg: 'py-16',\n xl: 'py-24',\n },\n },\n defaultVariants: {\n py: 'md',\n },\n});\n\nexport type SectionVariants = VariantProps<typeof sectionVariants>;\n\n/* Compile-time lock: enum values ≡ tv `py` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSectionPaddingY: AssertExact<\n SectionPaddingY,\n NonNullable<VariantProps<typeof sectionVariants>['py']>\n> = true;\nvoid _assertSectionPaddingY;\n","<script lang=\"ts\">\nimport type { SurfaceTone } from '../../../foundation/utils';\nimport type { ContainerProps } from '../container';\nimport type { SectionPaddingY } from './Section.variants';\n\nexport interface SectionProps {\n /**\n * The tinted background tone for the band. Applies the shadow-less `subtle`\n * surface treatment (low-alpha tinted fill + `border-border`). Omit for a\n * transparent band (no fill, no border).\n */\n tone?: SurfaceTone;\n\n /** The max-width of the inner centered `Container`. Passthrough to `Container.size`. Default `lg`. */\n containerSize?: ContainerProps['size'];\n\n /** The vertical padding (the band's top/bottom rhythm). Default `md`. */\n py?: SectionPaddingY;\n\n /** The full-bleed mode — renders a `<section>` with no inner `Container` (edge-to-edge content). */\n bleed?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport Container from '../container/Container.vue';\nimport { sectionVariants } from './Section.variants';\n\n/**\n * Full-bleed `<section>` band with an inner centered `Container`. The repetitive\n * marketing \"section band\" pattern: optional tinted (shadow-less) background,\n * passthrough container width, and vertical padding. Pass `bleed` to drop the\n * inner Container for edge-to-edge content.\n */\n/* `<section>` is a live HTML element, but SFC templates are case-sensitive\n (`<Section>` ≠ `<section>`) and this is a library component — imported, never\n globally registered. Renaming it would break parity with the React package. */\ndefineOptions({ name: 'Section', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SectionProps>(), { bleed: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n sectionVariants({ py: props.py }),\n props.tone && surfaceVariants({ variant: 'subtle', tone: props.tone, radius: 'none' }),\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <section ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <slot v-if=\"props.bleed\" />\n <Container v-else :size=\"props.containerSize\"><slot /></Container>\n </section>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the band-height of a `Navbar`. */\nexport const NavbarHeight = {\n /** Refers to a compact bar. */\n Sm: 'sm',\n /** Refers to the default bar height. */\n Md: 'md',\n /** Refers to a tall bar. */\n Lg: 'lg',\n} as const;\n\nexport type NavbarHeight = (typeof NavbarHeight)[keyof typeof NavbarHeight];\n\n/** Provides the header-band chrome (height, sticky positioning) for `Navbar`. */\nexport const navbarVariants = tv({\n base: 'w-full',\n variants: {\n /* Sticks the band to the top of the scroll container when true. */\n sticky: {\n true: 'sticky top-0 z-sticky',\n false: '',\n },\n /* Band height — the bar's vertical size. */\n height: {\n sm: 'h-12',\n md: 'h-14',\n lg: 'h-16',\n },\n },\n defaultVariants: {\n sticky: false,\n height: 'md',\n },\n});\n\nexport type NavbarVariants = VariantProps<typeof navbarVariants>;\n\n/* Compile-time lock: enum values ≡ tv `height` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertNavbarHeight: AssertExact<\n NavbarHeight,\n NonNullable<VariantProps<typeof navbarVariants>['height']>\n> = true;\nvoid _assertNavbarHeight;\n","<script lang=\"ts\">\nimport type { SurfaceTone } from '../../../foundation/utils';\nimport type { ContainerProps } from '../container';\nimport type { NavbarHeight } from './Navbar.variants';\n\nexport interface NavbarProps {\n /** The max-width of the inner centered `Container`. Passthrough to `Container.size`. Default `lg`. */\n containerSize?: ContainerProps['size'];\n /** The band height. Default `md`. */\n height?: NavbarHeight;\n /** The sticky pinning of the bar to the top of the scroll container. Default `false` (non-sticky). */\n sticky?: boolean;\n /**\n * The tinted background tone for the band — applies the shadow-less `subtle`\n * surface treatment. Omit for a transparent bar (relies on `bordered` / page bg).\n */\n tone?: SurfaceTone;\n /** The bottom border under the bar. Default `true`. */\n bordered?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport Container from '../container/Container.vue';\nimport { navbarVariants } from './Navbar.variants';\n\n/**\n * Lightweight header band (`<header>`) with `start` / `center` / `end` slots\n * laid out in a row inside a centered `Container`. The everyday \"navbar +\n * centered content\" need that `AppShell` (a 5-slot dashboard grid w/ sidebar)\n * overshoots. Non-sticky by default; pass `sticky` to pin it.\n */\ndefineOptions({ name: 'Navbar', inheritAttrs: false });\n\n/** React's `start` / `center` / `end` / `children` ReactNode props are content regions — slots in Vue. */\ndefineSlots<{\n /** The leading slot — laid out at the start of the row (brand / logo / nav links). */\n start?(): unknown;\n /** The centre slot — laid out in the middle of the row (search / primary nav). */\n center?(): unknown;\n /** The trailing slot — laid out at the end of the row (actions / avatar / CTA). */\n end?(): unknown;\n /**\n * The raw row content — replaces the `start` / `center` / `end` slot layout when\n * provided. Use for fully custom bars.\n */\n default?(): unknown;\n}>();\n\nconst props = withDefaults(defineProps<NavbarProps>(), { sticky: false, bordered: true });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLElement>('el');\n\nconst classes = computed(() =>\n cn(\n navbarVariants({ sticky: props.sticky, height: props.height }),\n props.bordered && 'border-b border-border',\n props.tone\n ? surfaceVariants({ variant: 'subtle', tone: props.tone, radius: 'none' })\n : 'bg-card',\n attrs.class as string | undefined,\n ),\n);\n\n/** Push `end` to the trailing edge when there's no centre slot to absorb the slack. */\nconst endClasses = computed(() =>\n cn('flex min-w-0 items-center gap-3', !slots.center && 'ml-auto'),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <header ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <Container :size=\"props.containerSize\" class=\"flex h-full items-center gap-3\">\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <div v-if=\"$slots.start\" class=\"flex min-w-0 items-center gap-3\">\n <slot name=\"start\" />\n </div>\n <div v-if=\"$slots.center\" class=\"flex min-w-0 flex-1 items-center justify-center gap-3\">\n <slot name=\"center\" />\n </div>\n <div v-if=\"$slots.end\" :class=\"endClasses\">\n <slot name=\"end\" />\n </div>\n </template>\n </Container>\n </header>\n</template>\n"],"names":["_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_renderSlot","Stack","$attrs","_createElementBlock","_createElementVNode","_hoisted_1","_createTextVNode","_toDisplayString","_hoisted_2","GAP","_unref","_createVNode","Spinner","Announce","Drawer","DrawerContent","Container","$slots","_Fragment"],"mappings":"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"}
|