@wow-two-beta/ui-vue 0.0.3 → 0.0.5
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.
- package/dist/chunks/{BackToTopButton.vue_vue_type_script_setup_true_lang-CkxLllEO.js → BackToTopButton.vue_vue_type_script_setup_true_lang-iLYlhK05.js} +11 -5
- package/dist/chunks/BackToTopButton.vue_vue_type_script_setup_true_lang-iLYlhK05.js.map +1 -0
- package/dist/chunks/{Backdrop.vue_vue_type_script_setup_true_lang-DZUhGY9p.js → Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js} +2 -2
- package/dist/chunks/{Backdrop.vue_vue_type_script_setup_true_lang-DZUhGY9p.js.map → Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js.map} +1 -1
- package/dist/chunks/{BottomSheet.vue_vue_type_script_setup_true_lang-CmNoI4BE.js → BottomSheet.vue_vue_type_script_setup_true_lang-CmNaGird.js} +8 -8
- package/dist/chunks/{BottomSheet.vue_vue_type_script_setup_true_lang-CmNoI4BE.js.map → BottomSheet.vue_vue_type_script_setup_true_lang-CmNaGird.js.map} +1 -1
- package/dist/chunks/{ChatComposer.vue_vue_type_script_setup_true_lang-lNcRhKIv.js → ChatComposer.vue_vue_type_script_setup_true_lang-DfeVsj9h.js} +1024 -579
- package/dist/chunks/ChatComposer.vue_vue_type_script_setup_true_lang-DfeVsj9h.js.map +1 -0
- package/dist/chunks/{DateExtensions-QahSUlRy.js → DateExtensions-C6a-h8ji.js} +12 -22
- package/dist/chunks/{DateExtensions-QahSUlRy.js.map → DateExtensions-C6a-h8ji.js.map} +1 -1
- package/dist/chunks/{DismissableLayer.vue_vue_type_script_setup_true_lang-6nRnzsJW.js → DismissableLayer.vue_vue_type_script_setup_true_lang-ptH1ttBL.js} +3 -3
- package/dist/chunks/DismissableLayer.vue_vue_type_script_setup_true_lang-ptH1ttBL.js.map +1 -0
- package/dist/chunks/{DrawerContent.vue_vue_type_script_setup_true_lang-DvvrJdF0.js → DrawerContent.vue_vue_type_script_setup_true_lang-4n5w3lg2.js} +5 -5
- package/dist/chunks/{DrawerContent.vue_vue_type_script_setup_true_lang-DvvrJdF0.js.map → DrawerContent.vue_vue_type_script_setup_true_lang-4n5w3lg2.js.map} +1 -1
- package/dist/chunks/{ModalContent.vue_vue_type_script_setup_true_lang-CLACSqKg.js → ModalContent.vue_vue_type_script_setup_true_lang-Co5jaeXk.js} +5 -5
- package/dist/chunks/{ModalContent.vue_vue_type_script_setup_true_lang-CLACSqKg.js.map → ModalContent.vue_vue_type_script_setup_true_lang-Co5jaeXk.js.map} +1 -1
- package/dist/chunks/{Navbar.vue_vue_type_script_setup_true_lang-Cl2ejukE.js → Navbar.vue_vue_type_script_setup_true_lang-Cy0zvm5d.js} +7 -7
- package/dist/chunks/Navbar.vue_vue_type_script_setup_true_lang-Cy0zvm5d.js.map +1 -0
- package/dist/chunks/{NotificationItem.vue_vue_type_script_setup_true_lang-KC5Iusce.js → NotificationItem.vue_vue_type_script_setup_true_lang-DySfo3fD.js} +5 -5
- package/dist/chunks/{NotificationItem.vue_vue_type_script_setup_true_lang-KC5Iusce.js.map → NotificationItem.vue_vue_type_script_setup_true_lang-DySfo3fD.js.map} +1 -1
- package/dist/chunks/{OptionTileGroup.vue_vue_type_script_setup_true_lang-BGSmXM_u.js → OptionTileGroup.vue_vue_type_script_setup_true_lang-CKSVGCby.js} +51 -30
- package/dist/chunks/OptionTileGroup.vue_vue_type_script_setup_true_lang-CKSVGCby.js.map +1 -0
- package/dist/chunks/{PopoverContent.vue_vue_type_script_setup_true_lang-D-OiGICS.js → PopoverContent.vue_vue_type_script_setup_true_lang-DYd617X5.js} +4 -4
- package/dist/chunks/{PopoverContent.vue_vue_type_script_setup_true_lang-D-OiGICS.js.map → PopoverContent.vue_vue_type_script_setup_true_lang-DYd617X5.js.map} +1 -1
- package/dist/chunks/{Presence-C7IJvh_P.js → Presence-DE4MlrJz.js} +45 -27
- package/dist/chunks/Presence-DE4MlrJz.js.map +1 -0
- package/dist/chunks/{SortableHandle.vue_vue_type_script_setup_true_lang-CWCXGjZG.js → SortableHandle.vue_vue_type_script_setup_true_lang-8WPwGZ5e.js} +141 -130
- package/dist/chunks/SortableHandle.vue_vue_type_script_setup_true_lang-8WPwGZ5e.js.map +1 -0
- package/dist/chunks/{SurfaceStyles-ChdpGRBO.js → SurfaceStyles-B6W7zdMi.js} +2 -2
- package/dist/chunks/{SurfaceStyles-ChdpGRBO.js.map → SurfaceStyles-B6W7zdMi.js.map} +1 -1
- package/dist/chunks/{TableOfContents.vue_vue_type_script_setup_true_lang-HVL4lg_f.js → TableOfContents.vue_vue_type_script_setup_true_lang-C9eM0AoG.js} +18 -20
- package/dist/chunks/TableOfContents.vue_vue_type_script_setup_true_lang-C9eM0AoG.js.map +1 -0
- package/dist/chunks/{Tones-CI65uuq9.js → Tones-WKBNZ_u2.js} +39 -17
- package/dist/chunks/Tones-WKBNZ_u2.js.map +1 -0
- package/dist/chunks/{index-BD7H9CkO.js → index-CEoYQiWL.js} +3 -3
- package/dist/chunks/{index-BD7H9CkO.js.map → index-CEoYQiWL.js.map} +1 -1
- package/dist/chunks/{index-Cbydgcdk.js → index-op-kbVUk.js} +3 -3
- package/dist/chunks/{index-Cbydgcdk.js.map → index-op-kbVUk.js.map} +1 -1
- package/dist/foundation/primitives/index.js +3 -3
- package/dist/foundation/primitives/presence/Presence.d.ts +4 -0
- package/dist/foundation/utils/index.js +3 -3
- package/dist/index.js +111 -109
- package/dist/presentation/actions/index.js +2 -2
- package/dist/presentation/actions/speedDial/SpeedDialAction.vue.d.ts +6 -5
- package/dist/presentation/actions/speedDial/index.d.ts +3 -5
- package/dist/presentation/display/audioWaveform/AudioWaveform.vue.d.ts +1 -0
- package/dist/presentation/display/diffViewer/DiffViewer.vue.d.ts +2 -0
- package/dist/presentation/display/eventCalendar/EventCalendar.vue.d.ts +1 -0
- package/dist/presentation/display/frameGlyph/FrameGlyph.vue.d.ts +2 -0
- package/dist/presentation/display/gantt/Gantt.vue.d.ts +1 -0
- package/dist/presentation/display/heatmapCalendar/HeatmapCalendar.vue.d.ts +1 -0
- package/dist/presentation/display/index.js +98 -96
- package/dist/presentation/display/list/ListContext.d.ts +16 -0
- package/dist/presentation/display/list/ListItem.vue.d.ts +7 -1
- package/dist/presentation/display/list/index.d.ts +1 -0
- package/dist/presentation/display/metricChip/MetricChip.vue.d.ts +1 -1
- package/dist/presentation/display/moduleGlyphs/CellsGlyph.vue.d.ts +1 -0
- package/dist/presentation/display/radiusGlyph/RadiusGlyph.vue.d.ts +1 -0
- package/dist/presentation/display/reactionBar/ReactionBar.vue.d.ts +1 -0
- package/dist/presentation/feedback/index.js +1 -1
- package/dist/presentation/feedback/tour/Tour.vue.d.ts +1 -0
- package/dist/presentation/forms/TimeColumns.vue.d.ts +22 -0
- package/dist/presentation/forms/dateField/DateField.vue.d.ts +12 -0
- package/dist/presentation/forms/dateTimeField/DateTimeField.vue.d.ts +17 -0
- package/dist/presentation/forms/index.js +2 -2
- package/dist/presentation/forms/multiSelect/MultiSelect.vue.d.ts +8 -0
- package/dist/presentation/forms/multiSelect/MultiSelectContext.d.ts +9 -0
- package/dist/presentation/forms/multiSelect/MultiSelectTags.vue.d.ts +10 -0
- package/dist/presentation/forms/multiSelect/MultiSelectTrigger.vue.d.ts +5 -0
- package/dist/presentation/forms/timeField/TimeField.vue.d.ts +20 -5
- package/dist/presentation/forms/timePicker/TimePicker.vue.d.ts +5 -5
- package/dist/presentation/layout/index.js +1 -1
- package/dist/presentation/nav/index.js +1 -1
- package/dist/presentation/overlays/index.js +5 -5
- package/package.json +3 -2
- package/dist/chunks/BackToTopButton.vue_vue_type_script_setup_true_lang-CkxLllEO.js.map +0 -1
- package/dist/chunks/ChatComposer.vue_vue_type_script_setup_true_lang-lNcRhKIv.js.map +0 -1
- package/dist/chunks/DismissableLayer.vue_vue_type_script_setup_true_lang-6nRnzsJW.js.map +0 -1
- package/dist/chunks/Navbar.vue_vue_type_script_setup_true_lang-Cl2ejukE.js.map +0 -1
- package/dist/chunks/OptionTileGroup.vue_vue_type_script_setup_true_lang-BGSmXM_u.js.map +0 -1
- package/dist/chunks/Presence-C7IJvh_P.js.map +0 -1
- package/dist/chunks/SortableHandle.vue_vue_type_script_setup_true_lang-CWCXGjZG.js.map +0 -1
- package/dist/chunks/TableOfContents.vue_vue_type_script_setup_true_lang-HVL4lg_f.js.map +0 -1
- package/dist/chunks/Tones-CI65uuq9.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationItem.vue_vue_type_script_setup_true_lang-KC5Iusce.js","sources":["../../src/presentation/feedback/skeleton/Skeleton.variants.ts","../../src/presentation/feedback/skeleton/Skeleton.vue","../../src/presentation/feedback/progressBar/ProgressBar.variants.ts","../../src/presentation/feedback/progressBar/ProgressBar.vue","../../src/presentation/feedback/progressCircle/ProgressCircle.vue","../../src/presentation/feedback/alertSimple/AlertSimple.variants.ts","../../src/presentation/feedback/alertSimple/AlertSimple.vue","../../src/presentation/feedback/bannerSimple/BannerSimple.variants.ts","../../src/presentation/feedback/bannerSimple/BannerSimple.vue","../../src/presentation/feedback/toastSimple/ToastSimple.vue","../../src/presentation/feedback/toastSimple/ToastSimple.variants.ts","../../src/presentation/feedback/alert/Alert.vue","../../src/presentation/feedback/banner/Banner.vue","../../src/presentation/feedback/toast/Toast.vue","../../src/presentation/feedback/callout/Callout.vue","../../src/presentation/feedback/inlineSpinner/InlineSpinner.vue","../../src/presentation/feedback/loadingState/LoadingState.vue","../../src/presentation/feedback/progressSteps/ProgressSteps.vue","../../src/presentation/feedback/statusIndicator/StatusIndicator.vue","../../src/presentation/feedback/meterBar/MeterBar.vue","../../src/presentation/feedback/trendIndicator/TrendIndicator.vue","../../src/presentation/feedback/toaster/Toaster.vue","../../src/presentation/feedback/feedbackToasts/FeedbackToasts.vue","../../src/presentation/feedback/loadingOverlay/LoadingOverlay.vue","../../src/presentation/feedback/undoBar/UndoBar.vue","../../src/presentation/feedback/onboardingChecklist/OnboardingChecklist.vue","../../src/presentation/feedback/onboardingChecklist/OnboardingChecklistTask.vue","../../src/presentation/feedback/tour/Tour.vue","../../src/presentation/feedback/typingIndicator/TypingIndicator.vue","../../src/presentation/feedback/presenceIndicator/PresenceIndicator.vue","../../src/presentation/feedback/liveCursor/LiveCursor.vue","../../src/presentation/feedback/notificationCenter/NotificationCenter.vue","../../src/presentation/feedback/notificationCenter/NotificationItem.vue"],"sourcesContent":["import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the Skeleton placeholder shape. */\nexport const SkeletonShape = {\n /** Refers to a rounded rectangle block. */\n Rect: 'rect',\n /** Refers to a text line (fixed height, small radius). */\n Text: 'text',\n /** Refers to a circle (avatar / icon placeholder). */\n Circle: 'circle',\n} as const;\n\nexport type SkeletonShape = (typeof SkeletonShape)[keyof typeof SkeletonShape];\n\nexport const skeletonVariants = tv({\n base: 'animate-pulse bg-muted',\n variants: {\n shape: {\n rect: 'rounded-md',\n text: 'h-4 rounded-sm',\n circle: 'rounded-full',\n },\n },\n defaultVariants: {\n shape: 'rect',\n },\n});\n\nexport type SkeletonVariants = VariantProps<typeof skeletonVariants>;\n\n/* Compile-time lock: SkeletonShape values ≡ tv shape keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSkeletonShape: AssertExact<\n SkeletonShape,\n NonNullable<VariantProps<typeof skeletonVariants>['shape']>\n> = true;\nvoid _assertSkeletonShape;\n","<script lang=\"ts\">\nimport type { SkeletonShape } from './Skeleton.variants';\n\nexport interface SkeletonProps {\n /** The placeholder shape. */\n shape?: SkeletonShape;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { skeletonVariants } from './Skeleton.variants';\n\n/**\n * Loading placeholder. Use sized via `class` (e.g. `w-32 h-4`) for text\n * lines, or as a full block with `shape=\"rect\"`.\n */\ndefineOptions({ name: 'Skeleton', inheritAttrs: false });\n\nconst props = defineProps<SkeletonProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(skeletonVariants({ shape: props.shape }), 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\" aria-hidden=\"true\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { ProgressTone, Size, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const progressTrackVariants = tv({\n base: 'h-2 w-full overflow-hidden rounded-full bg-muted',\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nexport const progressFillVariants = tv({\n base: 'h-full rounded-full transition-[width] duration-300',\n variants: {\n tone: {\n brand: 'bg-primary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n neutral: 'bg-muted-foreground',\n },\n },\n defaultVariants: {\n tone: 'brand',\n },\n});\n\nexport type ProgressBarVariants = VariantProps<typeof progressTrackVariants> &\n VariantProps<typeof progressFillVariants>;\n\n/* Compile-time lock: adopted enum values ≡ tv axis keys (drift = type error).\n `Size` is the 5-member registry enum; the track only wires 3 (sm/md/lg), so\n the assert is one-directional (tv keys ⊆ Size) — widening a narrower prop is\n allowed for beta. */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertProgressSize: NonNullable<\n VariantProps<typeof progressTrackVariants>['size']\n> extends Size\n ? true\n : never = true;\nvoid _assertProgressSize;\nconst _assertProgressTone: AssertExact<\n ProgressTone,\n NonNullable<VariantProps<typeof progressFillVariants>['tone']>\n> = true;\nvoid _assertProgressTone;\n","<script lang=\"ts\">\nimport type { ProgressTone, Size } from '../../../foundation/utils';\n\nexport interface ProgressBarProps {\n /** The track thickness. */\n size?: Size;\n /** The fill tone palette. */\n tone?: ProgressTone;\n /** The current value 0–100. Pass `undefined` for indeterminate. */\n value?: number;\n max?: number;\n /** The accessible label for the progress. */\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport {\n progressFillVariants,\n progressTrackVariants,\n type ProgressBarVariants,\n} from './ProgressBar.variants';\n\n/**\n * Linear progress indicator. Set `value` (0–`max`) for determinate; omit\n * for indeterminate.\n */\ndefineOptions({ name: 'ProgressBar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ProgressBarProps>(), { max: 100 });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst determinate = computed(() => typeof props.value === 'number');\n\nconst pct = computed(() =>\n determinate.value ? Math.min(100, Math.max(0, ((props.value ?? 0) / props.max) * 100)) : undefined,\n);\n\nconst classes = computed(() =>\n cn(\n progressTrackVariants({\n /* `size` is the 5-member `Size`; the track defines only sm/md/lg.\n Cast to the tv key type — an out-of-range value falls through to\n the tv default. */\n size: props.size as ProgressBarVariants['size'],\n }),\n attrs.class as string | undefined,\n ),\n);\n\nconst fillClasses = computed(() =>\n cn(\n progressFillVariants({ tone: props.tone }),\n !determinate.value && 'w-1/3 animate-[indeterminate_1.4s_ease-in-out_infinite]',\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\n ref=\"el\"\n role=\"progressbar\"\n :aria-label=\"props.label\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :aria-valuenow=\"determinate ? props.value : undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <div :class=\"fillClasses\" :style=\"determinate ? { width: `${pct}%` } : undefined\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ProgressTone } from '../../../foundation/utils';\n\nexport interface ProgressCircleProps {\n /** The current value 0–100. Omit for indeterminate. */\n value?: number;\n max?: number;\n size?: number;\n thickness?: number;\n /** The ring tone palette. */\n tone?: ProgressTone;\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, ProgressTone as ProgressToneToken } from '../../../foundation/utils';\n\nconst TONE_CLASS: Record<ProgressTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n neutral: 'text-muted-foreground',\n};\n\n/**\n * Circular progress indicator (SVG). Determinate when `value` is set;\n * indeterminate (rotating) when omitted.\n */\ndefineOptions({ name: 'ProgressCircle', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ProgressCircleProps>(), {\n max: 100,\n size: 40,\n thickness: 4,\n tone: ProgressToneToken.Brand,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst determinate = computed(() => typeof props.value === 'number');\nconst radius = computed(() => (props.size - props.thickness) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\nconst pct = computed(() =>\n determinate.value ? Math.min(100, Math.max(0, ((props.value ?? 0) / props.max) * 100)) : 25,\n);\nconst offset = computed(() => circumference.value - (pct.value / 100) * circumference.value);\n\nconst classes = computed(() =>\n cn(\n 'inline-block',\n !determinate.value && 'animate-spin',\n TONE_CLASS[props.tone],\n attrs.class as string | undefined,\n ),\n);\n\n/**\n * Vue does not auto-suffix numeric style values with `px` the way React does,\n * so the React original's `style={{ width: size, height: size }}` is spelled out.\n */\nconst boxStyle = computed(() => ({ width: `${props.size}px`, height: `${props.size}px` }));\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 role=\"progressbar\"\n :aria-label=\"props.label\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :aria-valuenow=\"determinate ? props.value : undefined\"\n :style=\"boxStyle\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <svg :width=\"props.size\" :height=\"props.size\" :viewBox=\"`0 0 ${props.size} ${props.size}`\">\n <circle\n :cx=\"props.size / 2\"\n :cy=\"props.size / 2\"\n :r=\"radius\"\n stroke=\"currentColor\"\n :stroke-width=\"props.thickness\"\n fill=\"none\"\n :opacity=\"0.2\"\n />\n <circle\n :cx=\"props.size / 2\"\n :cy=\"props.size / 2\"\n :r=\"radius\"\n stroke=\"currentColor\"\n :stroke-width=\"props.thickness\"\n stroke-linecap=\"round\"\n fill=\"none\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"offset\"\n :transform=\"`rotate(-90 ${props.size / 2} ${props.size / 2})`\"\n :style=\"{ transition: 'stroke-dashoffset 300ms ease' }\"\n />\n </svg>\n </div>\n</template>\n","import { Severity, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const alertSimpleVariants = tv({\n base: 'rounded-md border px-4 py-3 text-sm',\n variants: {\n severity: {\n info: 'border-info-soft bg-info-soft text-info-soft-foreground',\n success: 'border-success-soft bg-success-soft text-success-soft-foreground',\n warning: 'border-warning-soft bg-warning-soft text-warning-soft-foreground',\n danger: 'border-destructive-soft bg-destructive-soft text-destructive-soft-foreground',\n neutral: 'border-border bg-muted text-foreground',\n },\n },\n defaultVariants: {\n severity: 'info',\n },\n});\n\nexport type AlertSimpleVariants = VariantProps<typeof alertSimpleVariants>;\n\n/* Compile-time lock: Severity values ≡ tv severity keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSeverity: AssertExact<\n Severity,\n NonNullable<VariantProps<typeof alertSimpleVariants>['severity']>\n> = true;\nvoid _assertSeverity;\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface AlertSimpleProps {\n /** The semantic severity palette. */\n severity?: Severity;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { alertSimpleVariants } from './AlertSimple.variants';\n\n/**\n * Atomic alert — a styled colored container that takes free-form children.\n * No internal slots; consumer composes title/description/actions inline.\n *\n * For the structured Icon + Title + Description + Actions composition use\n * the `Alert` molecule (L4).\n *\n * `role=\"status\"` is the live-region contract; bound before `v-bind=\"rest\"`\n * so a caller-supplied `role` (e.g. `\"alert\"`) still wins.\n */\ndefineOptions({ name: 'AlertSimple', inheritAttrs: false });\n\nconst props = defineProps<AlertSimpleProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(alertSimpleVariants({ severity: props.severity }), 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\" role=\"status\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { Severity, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const bannerSimpleVariants = tv({\n base: 'w-full px-6 py-3 text-sm',\n variants: {\n severity: {\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-destructive text-destructive-foreground',\n neutral: 'bg-inverse text-inverse-foreground',\n },\n },\n defaultVariants: {\n severity: 'info',\n },\n});\n\nexport type BannerSimpleVariants = VariantProps<typeof bannerSimpleVariants>;\n\n/* Compile-time lock: Severity values ≡ tv severity keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSeverity: AssertExact<\n Severity,\n NonNullable<VariantProps<typeof bannerSimpleVariants>['severity']>\n> = true;\nvoid _assertSeverity;\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface BannerSimpleProps {\n /** The semantic severity palette. */\n severity?: Severity;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { bannerSimpleVariants } from './BannerSimple.variants';\n\n/**\n * Full-width banner — typically pinned to the top of the app to broadcast\n * status. Atom; for structured slotted layout use `Banner` (L4).\n *\n * `role=\"status\"` is the live-region contract; bound before `v-bind=\"rest\"`\n * so a caller-supplied `role` still wins.\n */\ndefineOptions({ name: 'BannerSimple', inheritAttrs: false });\n\nconst props = defineProps<BannerSimpleProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(bannerSimpleVariants({ severity: props.severity }), 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\" role=\"status\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\n/** Represents the prop surface of `ToastSimple`. */\nexport interface ToastSimpleProps {\n /** The semantic severity palette. */\n severity?: Severity;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport type { Tone } from '../../../foundation/utils';\nimport type { ToastSimpleVariants } from './ToastSimple.variants';\n\n/** Maps the toast `severity` keyword to a SurfaceStyles `tone`. */\nconst SEVERITY_TO_TONE: Record<NonNullable<ToastSimpleVariants['severity']>, Tone> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n neutral: 'neutral',\n};\n\n/**\n * Provides the atomic toast card — single tone-driven notification with free-form children.\n *\n * `role=\"status\"` + `aria-live=\"polite\"` are the live-region contract; `role` is\n * bound before `v-bind=\"rest\"` so a caller-supplied `role` still wins.\n */\ndefineOptions({ name: 'ToastSimple', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToastSimpleProps>(), { severity: 'neutral' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'pointer-events-auto text-sm',\n surfaceVariants({\n variant: 'surface',\n tone: SEVERITY_TO_TONE[props.severity],\n radius: 'md',\n padding: 'md',\n elevation: 3,\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\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" role=\"status\" aria-live=\"polite\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { Severity, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const toastSimpleVariants = tv({\n base: 'pointer-events-auto rounded-md border bg-popover text-popover-foreground shadow-lg px-4 py-3 text-sm',\n variants: {\n severity: {\n info: 'border-info-soft',\n success: 'border-success-soft',\n warning: 'border-warning-soft',\n danger: 'border-destructive-soft',\n neutral: 'border-border',\n },\n },\n defaultVariants: {\n severity: 'neutral',\n },\n});\n\nexport type ToastSimpleVariants = VariantProps<typeof toastSimpleVariants>;\n\n/* Compile-time lock: Severity values ≡ tv severity keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSeverity: AssertExact<\n Severity,\n NonNullable<VariantProps<typeof toastSimpleVariants>['severity']>\n> = true;\nvoid _assertSeverity;\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface AlertProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n /** The body text below the title. Rich content → the `description` slot. */\n description?: string;\n /** The right-side action slot (typically Button(s)). Rich content → the `actions` slot. */\n actions?: string;\n /** The accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport AlertSimple from '../alertSimple/AlertSimple.vue';\n\nconst CloseIcon = X;\n\n/**\n * Slotted Alert — Icon + Title + Description + Actions on top of `AlertSimple`.\n * Pair: `AlertSimple` (atom, free-form children) + `Alert` (this molecule).\n *\n * Each of React's four `ReactNode` props keeps its string form and gains a\n * same-named slot for rich content; the slot wins when both are supplied.\n */\ndefineOptions({ name: 'Alert', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<AlertProps>(), { closeLabel: 'Dismiss' });\n\n/** Replaces React's `onClose`; omitting `@close` omits the close button. */\nconst emit = defineEmits<{\n /** Fires when the close button is activated. */\n close: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst inner = useTemplateRef<InstanceType<typeof AlertSimple>>('inner');\n\n/**\n * Mirrors React's `onClose && <button/>` guard — the close button renders only\n * when the consumer bound `@close`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasClose = () => Boolean(instance?.vnode.props?.onClose);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() => cn('flex items-start gap-3', attrs.class as string | undefined));\n\nconst descriptionClasses = computed(() =>\n cn('text-sm', hasTitle.value && 'mt-0.5 opacity-90'),\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/** Re-exposes the underlying `AlertSimple` root element, matching React's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <AlertSimple ref=\"inner\" :severity=\"props.severity\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasIcon\" class=\"mt-0.5 shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"hasTitle\" class=\"font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div v-if=\"hasDescription\" :class=\"descriptionClasses\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n <div v-if=\"hasActions\" class=\"mt-2 flex flex-wrap items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n <slot />\n </div>\n <button\n v-if=\"hasClose()\"\n type=\"button\"\n :aria-label=\"props.closeLabel\"\n class=\"-mr-1 grid h-6 w-6 shrink-0 place-items-center rounded text-current opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n @click=\"emit('close')\"\n >\n <Icon :icon=\"CloseIcon\" :size=\"14\" />\n </button>\n </AlertSimple>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface BannerProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n /** The body text beside the title. Rich content → the `description` slot. */\n description?: string;\n /** The right-side action area (typically Button(s)). Rich content → the `actions` slot. */\n actions?: string;\n /** The accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport BannerSimple from '../bannerSimple/BannerSimple.vue';\n\nconst CloseIcon = X;\n\n/**\n * Slotted full-width banner. Pair with `BannerSimple` (atomic, free-form\n * children) when you don't need the structured slots.\n *\n * Each of React's four `ReactNode` props keeps its string form and gains a\n * same-named slot for rich content; the slot wins when both are supplied.\n */\ndefineOptions({ name: 'Banner', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<BannerProps>(), { closeLabel: 'Dismiss' });\n\n/** Replaces React's `onClose`; omitting `@close` omits the close button. */\nconst emit = defineEmits<{\n /** Fires when the close button is activated. */\n close: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst inner = useTemplateRef<InstanceType<typeof BannerSimple>>('inner');\n\n/**\n * Mirrors React's `onClose && <button/>` guard — the close button renders only\n * when the consumer bound `@close`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasClose = () => Boolean(instance?.vnode.props?.onClose);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() => cn('flex items-center gap-4', 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/** Re-exposes the underlying `BannerSimple` root element, matching React's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <BannerSimple ref=\"inner\" :severity=\"props.severity\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasIcon\" class=\"shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"flex min-w-0 flex-1 items-baseline gap-3\">\n <span v-if=\"hasTitle\" class=\"font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </span>\n <span v-if=\"hasDescription\" class=\"opacity-90\">\n <slot name=\"description\">{{ props.description }}</slot>\n </span>\n <slot />\n </div>\n <div v-if=\"hasActions\" class=\"flex shrink-0 items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n <button\n v-if=\"hasClose()\"\n type=\"button\"\n :aria-label=\"props.closeLabel\"\n class=\"-mr-2 grid h-7 w-7 shrink-0 place-items-center rounded text-current opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n @click=\"emit('close')\"\n >\n <Icon :icon=\"CloseIcon\" :size=\"16\" />\n </button>\n </BannerSimple>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface ToastProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n /** The body text below the title. Rich content → the `description` slot. */\n description?: string;\n /** The action area below the body. Rich content → the `actions` slot. */\n actions?: string;\n /** The accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport ToastSimple from '../toastSimple/ToastSimple.vue';\n\nconst CloseIcon = X;\n\n/**\n * Slotted toast — visual only (no queue / portal / lifecycle, those land\n * with `Toaster` at L5). Pair: `ToastSimple` (atomic) + `Toast` (molecule).\n *\n * Each of React's four `ReactNode` props keeps its string form and gains a\n * same-named slot for rich content; the slot wins when both are supplied.\n */\ndefineOptions({ name: 'Toast', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToastProps>(), { closeLabel: 'Dismiss' });\n\n/** Replaces React's `onClose`; omitting `@close` omits the close button. */\nconst emit = defineEmits<{\n /** Fires when the close button is activated. */\n close: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst inner = useTemplateRef<InstanceType<typeof ToastSimple>>('inner');\n\n/**\n * Mirrors React's `onClose && <button/>` guard — the close button renders only\n * when the consumer bound `@close`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasClose = () => Boolean(instance?.vnode.props?.onClose);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() => cn('flex items-start gap-3', attrs.class as string | undefined));\n\nconst descriptionClasses = computed(() =>\n cn('text-sm', hasTitle.value && 'mt-0.5 text-muted-foreground'),\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/** Re-exposes the underlying `ToastSimple` root element, matching React's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <ToastSimple ref=\"inner\" :severity=\"props.severity\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasIcon\" class=\"mt-0.5 shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"hasTitle\" class=\"font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div v-if=\"hasDescription\" :class=\"descriptionClasses\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n <div v-if=\"hasActions\" class=\"mt-2 flex flex-wrap items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n <slot />\n </div>\n <button\n v-if=\"hasClose()\"\n type=\"button\"\n :aria-label=\"props.closeLabel\"\n class=\"-mr-1 grid h-6 w-6 shrink-0 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n @click=\"emit('close')\"\n >\n <Icon :icon=\"CloseIcon\" :size=\"14\" />\n </button>\n </ToastSimple>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface CalloutProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Severity as SeverityToken } from '../../../foundation/utils';\n\nconst SEVERITY: Record<Severity, string> = {\n info: 'border-l-info text-foreground',\n success: 'border-l-success text-foreground',\n warning: 'border-l-warning text-foreground',\n danger: 'border-l-destructive text-foreground',\n neutral: 'border-l-border text-foreground',\n};\n\n/**\n * Quieter cousin of `Alert` — colored left rule, no fill. Use for inline\n * doc-style notes, supplementary content (think MDX callouts).\n *\n * React's `children` becomes the default slot; `icon` / `title` keep their\n * string form and gain same-named slots for rich content.\n */\ndefineOptions({ name: 'Callout', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CalloutProps>(), { severity: SeverityToken.Info });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\n\nconst classes = computed(() =>\n cn(\n 'flex items-start gap-3 rounded-md border-l-4 bg-card px-4 py-3 text-sm',\n SEVERITY[props.severity],\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\">\n <span v-if=\"hasIcon\" class=\"mt-0.5 shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"hasTitle\" class=\"mb-0.5 font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <slot />\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { SpinnerProps } from '../spinner/Spinner.vue';\n\nexport interface InlineSpinnerProps {\n size?: SpinnerProps['size'];\n tone?: SpinnerProps['tone'];\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport Spinner from '../spinner/Spinner.vue';\n\n/**\n * Spinner + label inline. Drops cleanly into buttons, list rows, anywhere\n * a \"loading…\" affordance is needed mid-flow.\n *\n * React's `children` (default `\"Loading…\"`) becomes the default slot with the\n * same fallback content.\n */\ndefineOptions({ name: 'InlineSpinner', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<InlineSpinnerProps>(), { size: 'sm', tone: 'default' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'inline-flex items-center gap-2 text-sm text-muted-foreground',\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 <span ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <Spinner :size=\"props.size\" :tone=\"props.tone\" />\n <slot>Loading…</slot>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\nexport interface LoadingStateProps {\n /** The heading copy. Default `\"Loading…\"`. Rich content → the `title` slot. */\n title?: string;\n\n /** The body text below the title. Rich content → the `description` slot. */\n description?: string;\n\n /** The size of the spinner. Default `lg`. */\n size?: Size;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\nimport Spinner from '../spinner/Spinner.vue';\n\n/**\n * Centered loading affordance for full sections / pages — Spinner + title +\n * description stacked. Use inline `InlineSpinner` for in-row loading.\n *\n * `role=\"status\"` is the live-region contract; bound before `v-bind=\"rest\"`\n * so a caller-supplied `role` still wins.\n */\ndefineOptions({ name: 'LoadingState', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<LoadingStateProps>(), {\n title: 'Loading…',\n size: SizeToken.Lg,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\nconst classes = computed(() =>\n cn(\n 'flex flex-col items-center justify-center gap-3 py-12 text-center',\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\" role=\"status\" v-bind=\"rest\" :class=\"classes\">\n <Spinner :size=\"props.size\" tone=\"brand\" />\n <div v-if=\"hasTitle\" class=\"text-sm font-medium text-foreground\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"text-sm text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Orientation } from '../../../foundation/utils';\n\nexport interface ProgressStepsProps {\n /** The step labels in order. */\n steps: ReadonlyArray<string>;\n\n /** The index of the active step (0-based). Steps before are marked complete. */\n current: number;\n\n /** The layout direction. Default `horizontal`. */\n orientation?: Orientation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { Check } from 'lucide-vue-next';\nimport { cn, Orientation as OrientationToken } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\nconst CheckIcon = Check;\n\n/**\n * Visual N-of-M progress dots / pills with connectors. No state machine —\n * the consumer drives `current`. For full wizard-with-content semantics use\n * the L5 `Stepper` organism.\n */\ndefineOptions({ name: 'ProgressSteps', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ProgressStepsProps>(), {\n orientation: OrientationToken.Horizontal,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLOListElement>('el');\n\nconst isHorizontal = computed(() => props.orientation === OrientationToken.Horizontal);\n\nconst classes = computed(() =>\n cn(\n 'flex',\n isHorizontal.value ? 'flex-row items-center gap-2' : 'flex-col gap-3',\n attrs.class as string | undefined,\n ),\n);\n\n/** The per-index step status, driving both the marker and the connector tone. */\nconst statusAt = (i: number) => (i < props.current ? 'complete' : i === props.current ? 'current' : 'upcoming');\n\nconst itemClasses = (i: number) =>\n cn('flex items-center gap-2', isHorizontal.value && i < props.steps.length - 1 && 'flex-1');\n\nconst markerClasses = (i: number) => {\n const status = statusAt(i);\n return cn(\n 'grid h-7 w-7 place-items-center rounded-full text-xs font-medium',\n status === 'complete' && 'bg-primary text-primary-foreground',\n status === 'current' && 'border-2 border-primary text-primary',\n status === 'upcoming' && 'border border-border text-muted-foreground',\n );\n};\n\nconst labelClasses = (i: number) =>\n cn('text-sm', statusAt(i) === 'upcoming' ? 'text-muted-foreground' : 'text-foreground');\n\nconst connectorClasses = (i: number) => cn('h-px flex-1', i < props.current ? 'bg-primary' : 'bg-border');\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 <ol ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <li v-for=\"(label, i) in props.steps\" :key=\"i\" :class=\"itemClasses(i)\">\n <span :class=\"markerClasses(i)\" :aria-current=\"statusAt(i) === 'current' ? 'step' : undefined\">\n <Icon v-if=\"statusAt(i) === 'complete'\" :icon=\"CheckIcon\" :size=\"14\" />\n <template v-else>{{ i + 1 }}</template>\n </span>\n <span :class=\"labelClasses(i)\">{{ label }}</span>\n <span\n v-if=\"isHorizontal && i < props.steps.length - 1\"\n :class=\"connectorClasses(i)\"\n aria-hidden=\"true\"\n />\n </li>\n </ol>\n</template>\n","<script lang=\"ts\">\nimport type { StatusTone } from '../../../foundation/utils';\n\nexport interface StatusIndicatorProps {\n /** The semantic status tone. */\n tone?: StatusTone;\n\n /**\n * The bold first-line label (e.g. \"All systems normal\"). Rich content → the\n * `label` slot. Required in React; optional here so the slot form is usable —\n * supply one or the other.\n */\n label?: string;\n\n /** The smaller secondary line (e.g. \"Updated 2m ago\"). Rich content → the `description` slot. */\n description?: string;\n\n /** The optional pulsing ring for \"live\" indication. */\n hasPulse?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, StatusTone as StatusToneToken } from '../../../foundation/utils';\n\nconst TONE: Record<StatusTone, string> = {\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-info',\n neutral: 'bg-muted-foreground',\n};\n\n/**\n * Two-line status indicator — colored dot + bold label + smaller helper.\n * Use on monitoring / status pages. For an inline single-line indicator use\n * `display/Status`.\n */\ndefineOptions({ name: 'StatusIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<StatusIndicatorProps>(), { tone: StatusToneToken.Success });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\nconst dotClasses = computed(() => cn('inline-block h-2.5 w-2.5 rounded-full', TONE[props.tone]));\n\nconst pulseClasses = computed(() =>\n cn('absolute inset-0 inline-block rounded-full opacity-75 animate-ping', TONE[props.tone]),\n);\n\nconst classes = computed(() =>\n cn('flex items-start gap-3', 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\">\n <span class=\"relative mt-1 inline-flex\">\n <span :class=\"dotClasses\" />\n <span v-if=\"props.hasPulse\" :class=\"pulseClasses\" />\n </span>\n <div class=\"min-w-0 flex-1\">\n <div class=\"text-sm font-medium text-foreground\">\n <slot name=\"label\">{{ props.label }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"text-xs text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\nexport interface MeterBarProps {\n /** The current value 0–`max`. */\n value: number;\n max?: number;\n /** The threshold values that change the fill tone. Pass `[good, warn]` —\n * `value <= good` → success, `<= warn` → warning, otherwise destructive.\n * Defaults: `[max * 0.7, max * 0.9]`. */\n thresholds?: [number, number];\n\n /** The bar thickness. */\n size?: Size;\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\n\n/* Only the sm/md/lg steps carry a thickness; other `Size` members fall through\n to the `md` default at the lookup below. */\nconst SIZE: Partial<Record<Size, string>> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n};\n\n/**\n * Like `ProgressBar` but the fill color reflects threshold zones — green /\n * amber / red. Use for usage gauges, capacity, score meters.\n */\ndefineOptions({ name: 'MeterBar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<MeterBarProps>(), { max: 100, size: SizeToken.Md });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst tone = computed(() => {\n const [good, warn] = props.thresholds ?? [props.max * 0.7, props.max * 0.9];\n return props.value <= good ? 'bg-success' : props.value <= warn ? 'bg-warning' : 'bg-destructive';\n});\n\nconst pct = computed(() => Math.min(100, Math.max(0, (props.value / props.max) * 100)));\n\nconst classes = computed(() =>\n cn(\n 'w-full overflow-hidden rounded-full bg-muted',\n SIZE[props.size] ?? SIZE.md,\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\n ref=\"el\"\n role=\"meter\"\n :aria-label=\"props.label\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :aria-valuenow=\"props.value\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <div\n :class=\"cn('h-full rounded-full transition-[width] duration-300', tone)\"\n :style=\"{ width: `${pct}%` }\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\nexport interface TrendIndicatorProps {\n /** The numeric delta — sign drives direction. */\n value: number;\n\n /** The optional value formatter (default: `${sign}${value}%`). Rich content → the `value` slot. */\n format?: (value: number) => string;\n\n /** The inverse-direction flag — when `true`, an increase reads as bad (e.g. error rate, churn). */\n isInverse?: boolean;\n\n /** The small trailing label, e.g. \"vs last week\". Rich content → the `label` slot. */\n label?: string;\n\n /** The text + icon scale. */\n size?: Size;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { Minus, TrendingDown, TrendingUp } from 'lucide-vue-next';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\n/* Only xs/sm/md carry a scale; other `Size` members fall through to `md` at\n the lookup below. */\nconst SIZE_TEXT: Partial<Record<Size, string>> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n};\nconst SIZE_ICON: Partial<Record<Size, number>> = {\n xs: 12,\n sm: 14,\n md: 16,\n};\n\nconst ARROW = {\n up: TrendingUp,\n down: TrendingDown,\n flat: Minus,\n};\n\n/**\n * Up / down / flat arrow + value + optional label. Used inside `Stat` and\n * dashboard tiles. Pass `isInverse` for metrics where higher is worse.\n */\ndefineOptions({ name: 'TrendIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TrendIndicatorProps>(), { size: SizeToken.Sm });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst direction = computed<'up' | 'down' | 'flat'>(() =>\n props.value > 0 ? 'up' : props.value < 0 ? 'down' : 'flat',\n);\n\nconst positive = computed(() =>\n direction.value === 'flat' ? false : (direction.value === 'up') !== Boolean(props.isInverse),\n);\n\nconst tone = computed(() =>\n direction.value === 'flat'\n ? 'text-muted-foreground'\n : positive.value\n ? 'text-success'\n : 'text-destructive',\n);\n\nconst arrow = computed(() => ARROW[direction.value]);\n\nconst display = computed(() =>\n props.format ? props.format(props.value) : `${props.value > 0 ? '+' : ''}${props.value}%`,\n);\n\nconst iconSize = computed(() => SIZE_ICON[props.size] ?? SIZE_ICON.md);\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\n\nconst classes = computed(() =>\n cn(\n 'inline-flex items-center gap-1 font-medium',\n SIZE_TEXT[props.size] ?? SIZE_TEXT.md,\n tone.value,\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 <span ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <Icon :icon=\"arrow\" :size=\"iconSize\" />\n <slot name=\"value\" :value=\"props.value\" :display=\"display\">{{ display }}</slot>\n <span v-if=\"hasLabel\" class=\"text-muted-foreground\">\n <slot name=\"label\">{{ props.label }}</slot>\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { VNode } from 'vue';\nimport type { OverlayPosition } from '../../../foundation/utils';\nimport type { ToastSimpleVariants } from '../toastSimple/ToastSimple.variants';\n\nexport type ToastSeverity = NonNullable<ToastSimpleVariants['severity']>;\n\n/**\n * A renderable slice of a toast. React's `ReactNode` becomes `string | VNode`:\n * these travel through the imperative `toaster.toast()` payload, not through a\n * slot, so a caller who wants markup builds it with `h()`.\n */\nexport type ToastNode = string | VNode;\n\nexport interface ToastOptions {\n title?: ToastNode;\n description?: ToastNode;\n icon?: ToastNode;\n severity?: ToastSeverity;\n /** ms before auto-dismiss. Default: Toaster's `defaultDuration`. `Infinity` = sticky. */\n duration?: number;\n action?: ToastNode;\n /** Fully custom body — replaces the default `Toast` chrome (icon/title/description/close). The toast still animates + auto-dismisses; the content owns its own close via the returned id. */\n content?: ToastNode;\n /** Fired when the toast is removed — auto-dismiss, close button, `dismiss(id)`, or `dismissAll()` (NOT on a dedup-update). For undo cleanup / analytics. */\n onDismiss?: () => void;\n /** Dedup key — a `toast` whose `key` is already showing updates that toast in place (refreshing its timer) instead of stacking a duplicate. */\n key?: string;\n}\n\n/** Content for a `toaster.promise` phase — a title string, or a full partial options object. */\nexport type ToastContent = string | Partial<ToastOptions>;\n\n/** Options for `toaster.promise` — loading / success / error content (success + error may be a fn of the settled value). */\nexport interface ToastPromiseOptions<T> {\n loading: ToastContent;\n success: ToastContent | ((value: T) => ToastContent);\n error: ToastContent | ((err: unknown) => ToastContent);\n /** Auto-dismiss (ms) for the settled toast; defaults to the Toaster's `defaultDuration`. */\n duration?: number;\n}\n\nfunction normalizeContent(content: ToastContent): Partial<ToastOptions> {\n return typeof content === 'string' ? { title: content } : content;\n}\n\ninterface ToastEntry extends ToastOptions {\n id: string;\n /** Bumped on every `update` / dedup so the viewport can reset that toast's auto-dismiss timer. */\n nonce: number;\n}\n\ntype Listener = (toasts: ReadonlyArray<ToastEntry>) => void;\n\nclass ToasterStore {\n private items: ReadonlyArray<ToastEntry> = [];\n private listeners = new Set<Listener>();\n private idSeq = 0;\n\n toast(opts: ToastOptions): string {\n if (opts.key !== undefined) {\n const existing = this.items.find((t) => t.key === opts.key);\n if (existing) {\n this.update(existing.id, opts);\n return existing.id;\n }\n }\n const id = `t_${++this.idSeq}`;\n this.items = [...this.items, { id, ...opts, nonce: 0 }];\n this.emit();\n return id;\n }\n\n /** Merges a patch into an existing toast (content + severity + duration), refreshing its timer. */\n update(id: string, patch: Partial<ToastOptions>): void {\n this.items = this.items.map((t) => (t.id === id ? { ...t, ...patch, nonce: t.nonce + 1 } : t));\n this.emit();\n }\n\n /** Shows a sticky loading toast, then updates it in place to success / error when `promise` settles. Returns `promise`. */\n promise<T>(promise: Promise<T>, opts: ToastPromiseOptions<T>): Promise<T> {\n const id = this.toast({ ...normalizeContent(opts.loading), severity: 'info', duration: Infinity });\n const settle = (content: ToastContent, severity: ToastSeverity) =>\n this.update(id, { ...normalizeContent(content), severity, duration: opts.duration });\n promise.then(\n (value) => settle(typeof opts.success === 'function' ? opts.success(value) : opts.success, 'success'),\n (err) => settle(typeof opts.error === 'function' ? opts.error(err) : opts.error, 'danger'),\n );\n return promise;\n }\n\n dismiss(id: string): void {\n const entry = this.items.find((t) => t.id === id);\n this.items = this.items.filter((t) => t.id !== id);\n entry?.onDismiss?.();\n this.emit();\n }\n\n dismissAll(): void {\n const gone = this.items;\n this.items = [];\n for (const t of gone) t.onDismiss?.();\n this.emit();\n }\n\n subscribe(fn: Listener): () => void {\n this.listeners.add(fn);\n fn(this.items);\n return () => {\n this.listeners.delete(fn);\n };\n }\n\n private emit() {\n for (const fn of this.listeners) fn(this.items);\n }\n}\n\nexport const toaster = new ToasterStore();\n\n/**\n * The imperative toast API, bound to the app-wide store. Plain object rather\n * than React's `useMemo` — the store is a module singleton, so there is nothing\n * per-instance to memoize.\n */\nexport function useToaster() {\n return {\n toast: (opts: ToastOptions) => toaster.toast(opts),\n update: (id: string, patch: Partial<ToastOptions>) => toaster.update(id, patch),\n promise: <T,>(promise: Promise<T>, opts: ToastPromiseOptions<T>) => toaster.promise(promise, opts),\n dismiss: (id: string) => toaster.dismiss(id),\n dismissAll: () => toaster.dismissAll(),\n };\n}\n\nconst POSITION_CLASSES: Record<OverlayPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\n/**\n * Enter/exit animation per position, gated on `data-state` (set by `Presence`)\n * and `motion-safe:` so reduced-motion users get an instant swap. Corner\n * toasts slide along their horizontal edge; centered toasts slide along the\n * vertical axis they're anchored to. Exit anims are shorter (`--duration-fast`).\n */\nconst MOTION_CLASSES: Record<OverlayPosition, string> = {\n 'top-right':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-right) motion-safe:data-[state=closed]:animate-(--animate-slide-out-right) motion-reduce:animate-none',\n 'top-left':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-left) motion-safe:data-[state=closed]:animate-(--animate-slide-out-left) motion-reduce:animate-none',\n 'top-center':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-top) motion-safe:data-[state=closed]:animate-(--animate-slide-out-top) motion-reduce:animate-none',\n 'bottom-right':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-right) motion-safe:data-[state=closed]:animate-(--animate-slide-out-right) motion-reduce:animate-none',\n 'bottom-left':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-left) motion-safe:data-[state=closed]:animate-(--animate-slide-out-left) motion-reduce:animate-none',\n 'bottom-center':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-bottom) motion-safe:data-[state=closed]:animate-(--animate-slide-out-bottom) motion-reduce:animate-none',\n};\n\nexport interface ToasterProps {\n position?: OverlayPosition;\n max?: number;\n /** The default auto-dismiss delay in ms; per-toast `duration` overrides. Default 5000. `Infinity` to disable. */\n defaultDuration?: number;\n canPauseOnHover?: boolean;\n gap?: number;\n}\n\ninterface VisibleToast extends ToastEntry {\n resolvedDuration: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n defineComponent,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n useAttrs,\n watch,\n type PropType,\n} from 'vue';\nimport { cn, OverlayPosition as OverlayPositionToken } from '../../../foundation/utils';\nimport { Announce, Portal, Presence } from '../../../foundation/primitives';\nimport Toast from '../toast/Toast.vue';\n\n/** Renders a `ToastNode` — either a plain string or a caller-built VNode. */\nconst ToastNodeView = defineComponent({\n name: 'ToastNodeView',\n props: { node: { type: [String, Object] as PropType<ToastNode>, required: true } },\n setup: (nodeProps) => () => nodeProps.node,\n});\n\n/**\n * Viewport that subscribes to the global `toaster` store and renders toasts\n * via the L4 `Toast` molecule. Mount once, per app.\n *\n * React's `className` arrives as the ordinary `class` attr and lands on the\n * stack container, the same node it landed on in React.\n */\ndefineOptions({ name: 'Toaster', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToasterProps>(), {\n position: OverlayPositionToken.BottomRight,\n max: 5,\n defaultDuration: 5000,\n canPauseOnHover: true,\n gap: 8,\n});\n\nconst attrs = useAttrs();\n\nconst items = shallowRef<ReadonlyArray<ToastEntry>>([]);\nconst paused = ref(false);\n\n/* `useRef` counterparts — mutated across ticks, never rendered. */\nconst timers = new Map<string, number>();\nconst remaining = new Map<string, number>();\nconst startedAt = new Map<string, number>();\nconst nonces = new Map<string, number>();\n\nlet unsubscribe: (() => void) | undefined;\nonMounted(() => {\n unsubscribe = toaster.subscribe((next) => {\n items.value = next;\n });\n});\n\n// Visible window (FIFO).\nconst visible = computed<ReadonlyArray<VisibleToast>>(() =>\n items.value.slice(0, props.max).map((t) => ({\n ...t,\n resolvedDuration: t.duration ?? props.defaultDuration,\n })),\n);\nconst visibleIds = computed(() => new Set(visible.value.map((v) => v.id)));\n\n// Toasts that just left `visible` (dismissed, or pushed out of the FIFO\n// window) but must still play their exit animation. Kept mounted with\n// `data-state=\"closed\"` until `Presence` unmounts the child — the `@vue:unmounted`\n// hook below then prunes the entry here.\nconst exiting = shallowRef<ReadonlyArray<VisibleToast>>([]);\nlet prevVisible: ReadonlyArray<VisibleToast> = [];\n\nwatch(\n visibleIds,\n (ids) => {\n const gone = prevVisible.filter((p) => !ids.has(p.id));\n prevVisible = visible.value;\n const current = exiting.value;\n const known = new Set(current.map((e) => e.id));\n // Add newly-gone toasts; drop any that re-entered `visible`.\n const merged = [...current, ...gone.filter((g) => !known.has(g.id))].filter(\n (e) => !ids.has(e.id),\n );\n if (merged.length !== current.length || !merged.every((e, i) => e.id === current[i]?.id)) {\n exiting.value = merged;\n }\n },\n { immediate: true, flush: 'post' },\n);\n\nconst removeExiting = (id: string) => {\n exiting.value = exiting.value.filter((e) => e.id !== id);\n};\n\n// Visible (present) first, then the ones animating out.\nconst rendered = computed<Array<VisibleToast & { present: boolean }>>(() => [\n ...visible.value.map((v) => ({ ...v, present: true })),\n ...exiting.value.map((e) => ({ ...e, present: false })),\n]);\n\nconst latestTitle = computed(() => {\n const last = visible.value[visible.value.length - 1];\n if (typeof last?.title === 'string') return last.title;\n if (typeof last?.description === 'string') return last.description;\n return '';\n});\n\n// Schedule auto-dismiss timers.\nwatch(\n [items, () => props.max, () => props.defaultDuration, paused],\n () => {\n const ids = visibleIds.value;\n // Clear timers for items that are no longer visible.\n for (const [id, handle] of timers) {\n if (!ids.has(id)) {\n window.clearTimeout(handle);\n timers.delete(id);\n remaining.delete(id);\n startedAt.delete(id);\n }\n }\n for (const id of nonces.keys()) {\n if (!ids.has(id)) nonces.delete(id);\n }\n if (paused.value) return;\n // A content update / dedup bumps `nonce` — clear that toast's timer so it reschedules fresh.\n for (const v of visible.value) {\n const seen = nonces.get(v.id);\n if (seen !== undefined && seen !== v.nonce) {\n const handle = timers.get(v.id);\n if (handle !== undefined) window.clearTimeout(handle);\n timers.delete(v.id);\n remaining.delete(v.id);\n startedAt.delete(v.id);\n }\n nonces.set(v.id, v.nonce);\n }\n for (const v of visible.value) {\n if (v.resolvedDuration === Infinity) continue;\n if (timers.has(v.id)) continue;\n const left = remaining.get(v.id) ?? v.resolvedDuration;\n const handle = window.setTimeout(() => {\n toaster.dismiss(v.id);\n }, left);\n timers.set(v.id, handle);\n startedAt.set(v.id, Date.now());\n remaining.set(v.id, left);\n }\n },\n { immediate: true, flush: 'post' },\n);\n\n// Cleanup on unmount.\nonUnmounted(() => {\n unsubscribe?.();\n for (const handle of timers.values()) window.clearTimeout(handle);\n timers.clear();\n});\n\nconst handlePause = () => {\n if (!props.canPauseOnHover || paused.value) return;\n paused.value = true;\n for (const [id, handle] of timers) {\n window.clearTimeout(handle);\n const start = startedAt.get(id) ?? Date.now();\n const previous = remaining.get(id) ?? 0;\n const elapsed = Date.now() - start;\n remaining.set(id, Math.max(0, previous - elapsed));\n }\n timers.clear();\n};\n\nconst handleResume = () => {\n if (!props.canPauseOnHover || !paused.value) return;\n paused.value = false;\n};\n\nconst stackClasses = computed(() =>\n cn(\n 'pointer-events-none fixed z-toast flex flex-col',\n POSITION_CLASSES[props.position],\n attrs.class as string | undefined,\n ),\n);\n\nconst itemClasses = computed(() => cn('pointer-events-auto w-80', MOTION_CLASSES[props.position]));\n\n/** Vue does not auto-suffix numeric style values with `px` the way React does. */\nconst stackStyle = computed(() => ({ gap: `${props.gap}px` }));\n</script>\n\n<template>\n <Portal>\n <div\n v-if=\"rendered.length > 0\"\n aria-label=\"Notifications\"\n :style=\"stackStyle\"\n :class=\"stackClasses\"\n @mouseenter=\"handlePause\"\n @mouseleave=\"handleResume\"\n @focus=\"handlePause\"\n @blur=\"handleResume\"\n >\n <Presence v-for=\"t in rendered\" :key=\"t.id\" :is-present=\"t.present\">\n <!--\n `Presence` clones `data-state` onto this node and keeps it mounted\n until the exit animation ends; the `@vue:unmounted` hook is that\n \"exit finished\" signal (the read-only `Presence` API exposes no\n callback), replacing React's unmount-only `onRemoved` effect.\n -->\n <div :class=\"itemClasses\" @vue:unmounted=\"t.present ? undefined : removeExiting(t.id)\">\n <ToastNodeView v-if=\"t.content\" :node=\"t.content\" />\n <Toast v-else :severity=\"t.severity\" @close=\"toaster.dismiss(t.id)\">\n <template v-if=\"t.icon\" #icon><ToastNodeView :node=\"t.icon\" /></template>\n <template v-if=\"t.title\" #title><ToastNodeView :node=\"t.title\" /></template>\n <template v-if=\"t.description\" #description>\n <ToastNodeView :node=\"t.description\" />\n </template>\n <template v-if=\"t.action\" #actions><ToastNodeView :node=\"t.action\" /></template>\n </Toast>\n </div>\n </Presence>\n </div>\n <Announce politeness=\"polite\">{{ latestTitle }}</Announce>\n </Portal>\n</template>\n","<script lang=\"ts\">\nimport type { FeedbackBus, PublishedNotice } from '../../../feedback';\nimport type { ToasterProps, ToastOptions } from '../toaster';\n\n/**\n * The prop surface of `FeedbackToasts` — `bus`, plus every `Toaster` prop.\n *\n * The `ToasterProps` heritage is marked `@vue-ignore` so only `bus` becomes a\n * runtime prop and the rest arrive as attrs; the template hands those to\n * `<Toaster>`, which declares them and resolves them back into props. Consumers\n * still get the full checked surface, because the heritage is real to\n * TypeScript — it is only the SFC compiler's runtime-props pass that skips it.\n */\nexport interface FeedbackToastsProps extends /* @vue-ignore */ ToasterProps {\n /** The bus to render. Default: the app-wide `feedbackBus` singleton (what `notify()` publishes on). */\n bus?: FeedbackBus;\n}\n\n/** Maps a bus notice onto the imperative toast payload. `NoticeTone` is a subset of the toast `Severity` vocabulary, and `NoticeNode` is `ToastNode` — drift in either is a compile error. */\nfunction toToastOptions(notice: PublishedNotice): ToastOptions {\n return {\n title: notice.title,\n description: notice.description,\n severity: notice.tone,\n duration: notice.durationMs,\n action: notice.action,\n };\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, watch } from 'vue';\nimport { feedbackBus } from '../../../feedback';\nimport Toaster from '../toaster/Toaster.vue';\nimport { toaster } from '../toaster';\n\n/**\n * The `/feedback` bus → `Toaster` adapter: subscribes to the bus and forwards every notice into\n * the imperative `toaster.toast()` API, rendering the toast viewport itself (all `ToasterProps`\n * pass through). Mount once per app **in place of** a bare `<Toaster/>` — mounting both would\n * render every toast twice. Explicit opt-in wiring: nothing toasts until this (or another\n * subscriber) is mounted; notices published before mount are dropped, so mount it at the app root.\n */\ndefineOptions({ name: 'FeedbackToasts', inheritAttrs: false });\n\nconst props = defineProps<FeedbackToastsProps>();\n\nconst attrs = useAttrs();\n\n/** React defaulted this in the destructure; a `computed` keeps the fallback reactive so a swapped `bus` re-subscribes. */\nconst bus = computed(() => props.bus ?? feedbackBus);\n\n/*\n * React's `useEffect(() => bus.subscribe(...), [bus])`: `onCleanup` receives the\n * unsubscribe, so a changed `bus` drops the old subscription before opening the\n * new one, and scope disposal drops the last.\n */\nwatch(\n bus,\n (current, _previous, onCleanup) => {\n // Client-only, as the effect was: a server render has no viewport to forward into.\n if (typeof document === 'undefined') return;\n onCleanup(\n current.subscribe((notice) => {\n toaster.toast(toToastOptions(notice));\n }),\n );\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <!-- Every non-`bus` attr is a `Toaster` prop by construction — see `FeedbackToastsProps`. -->\n <Toaster v-bind=\"attrs\" />\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\nimport type { SpinnerTone } from '../spinner/Spinner.variants';\n\nexport interface LoadingOverlayProps {\n /** The mount state. Default `true`. */\n isOpen?: boolean;\n\n /** The caption under the spinner. Default `\"Loading…\"`. Rich content → the `label` slot. */\n label?: string;\n\n /** The inline-positioning toggle — positions the scrim absolutely inside the parent (parent must be `position: relative`). */\n isInline?: boolean;\n\n /** The backdrop-blur toggle. */\n hasBlur?: boolean;\n\n /** The spinner diameter step. Default `lg`. */\n spinnerSize?: Size;\n\n /** The spinner color tone. Default `brand`. */\n spinnerTone?: SpinnerTone;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\nimport { Presence } from '../../../foundation/primitives';\nimport Backdrop from '../../overlays/backdrop/Backdrop.vue';\nimport Spinner from '../spinner/Spinner.vue';\nimport { SpinnerTone as SpinnerToneToken } from '../spinner/Spinner.variants';\n\n/**\n * Scrim + centered spinner — blocks interaction with a region during a long task.\n * `isInline` scopes the scrim to a `position: relative` parent; default covers the\n * viewport via `Backdrop`.\n *\n * React split the scrim into a `forwardRef` `LoadingScrim` so the two branches\n * could share it and `Presence` had a spreadable node to clone. Vue's `Presence`\n * clones whatever single element it is given, so the two branches collapse into\n * one `<div>` whose position/elevation classes switch on `isInline` — same DOM,\n * one component fewer.\n */\ndefineOptions({ name: 'LoadingOverlay', inheritAttrs: false });\n\n/** Extra content below the label — React's `children`. */\ndefineSlots<{ default?(): unknown; label?(): unknown }>();\n\nconst props = withDefaults(defineProps<LoadingOverlayProps>(), {\n isOpen: true,\n label: 'Loading…',\n isInline: false,\n hasBlur: false,\n spinnerSize: SizeToken.Lg,\n spinnerTone: SpinnerToneToken.Brand,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\n\n/** React fell back to `\"Loading\"` whenever `label` was not a plain string; here the same guard covers a caller who blanks the caption. */\nconst spinnerLabel = computed(() => props.label || 'Loading');\n\n/*\n * `data-state` is injected by <Presence>; the fade tokens are gated on it so\n * enter plays on mount and exit plays before Presence defers the unmount.\n * The inline scrim carries the tint and the blur itself; the viewport one is\n * click-through and leaves both to the portalled `Backdrop` behind it.\n */\nconst classes = computed(() =>\n cn(\n 'flex flex-col items-center justify-center gap-3',\n 'motion-safe:data-[state=open]:animate-(--animate-fade-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-fade-out)',\n 'motion-reduce:animate-none',\n props.isInline\n ? ['absolute inset-0 z-banner bg-background/70', props.hasBlur && 'backdrop-blur-sm']\n : 'fixed inset-0 z-modal pointer-events-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 <!-- `Backdrop` self-wraps in `Presence`; driving `is-open` with `isOpen` lets its\n fade-out play before it defers its own unmount. -->\n <Backdrop\n v-if=\"!props.isInline\"\n :is-open=\"props.isOpen\"\n :is-blurred=\"props.hasBlur\"\n class=\"bg-background/70\"\n />\n <Presence :is-present=\"props.isOpen\">\n <div ref=\"el\" role=\"status\" v-bind=\"rest\" :class=\"classes\">\n <Spinner :size=\"props.spinnerSize\" :tone=\"props.spinnerTone\" :label=\"spinnerLabel\" />\n <div v-if=\"hasLabel\" class=\"text-sm text-foreground\">\n <slot name=\"label\">{{ props.label }}</slot>\n </div>\n <slot />\n </div>\n </Presence>\n</template>\n","<script lang=\"ts\">\nimport type { OverlayPosition } from '../../../foundation/utils';\n\nexport interface UndoBarProps {\n isOpen: boolean;\n /** The snackbar copy. Rich content → the `message` slot. Required in React; optional here so the slot form is usable — supply one or the other. */\n message?: string;\n undoLabel?: string;\n /** The auto-dismiss delay in ms; `Infinity` = sticky. Default 5000. */\n duration?: number;\n canPauseOnHover?: boolean;\n position?: OverlayPosition;\n hasCountdown?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onUnmounted, ref, useAttrs, watch } from 'vue';\nimport { cn, OverlayPosition as OverlayPositionToken, surfaceVariants } from '../../../foundation/utils';\nimport { Portal, Presence } from '../../../foundation/primitives';\n\nconst POSITION: Record<OverlayPosition, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n};\n\n/**\n * Snackbar with a single \"Undo\" action. Auto-dismisses after `duration`;\n * pause-on-hover preserves remaining time. For multi-toast queues use the L5\n * `Toaster` instead.\n *\n * React's `className` arrives as the ordinary `class` attr and is merged onto\n * the panel, not the positioning wrapper — the same node it landed on in React.\n */\ndefineOptions({ name: 'UndoBar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<UndoBarProps>(), {\n undoLabel: 'Undo',\n duration: 5000,\n canPauseOnHover: true,\n position: OverlayPositionToken.BottomCenter,\n hasCountdown: false,\n});\n\nconst emit = defineEmits<{\n /** Replaces React's `onOpenChange`. Fires with `false` on auto-dismiss and after undo. */\n 'open-change': [open: boolean];\n /** Replaces React's `onUndo`; omitting `@undo` omits the undo button. */\n undo: [];\n}>();\n\nconst attrs = useAttrs();\nconst instance = getCurrentInstance();\n\n/**\n * Mirrors React's `onUndo && <button/>` guard — the undo button renders only\n * when the consumer bound `@undo`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasUndo = () => Boolean(instance?.vnode.props?.onUndo);\n\nconst progress = ref(1);\nconst paused = ref(false);\n\n/* `useRef` counterparts — read/written across ticks, never rendered. */\nlet start = 0;\nlet remaining = props.duration;\nlet raf: number | null = null;\n\n/**\n * The React `useEffect` timer, dep-for-dep: `[isOpen, duration, paused, hasCountdown]`.\n * `flush: 'post'` is the `useEffect` analogue, and `onCleanup` replays the\n * teardown that banks the elapsed time back into `remaining`.\n */\nwatch(\n [() => props.isOpen, () => props.duration, paused, () => props.hasCountdown],\n ([isOpen, duration, isPaused, hasCountdown], _previous, onCleanup) => {\n if (!isOpen) {\n remaining = duration;\n progress.value = 1;\n return;\n }\n if (duration === Infinity) {\n progress.value = 1;\n return;\n }\n if (isPaused) return;\n /* `immediate: true` runs this watcher on the server too, and an UndoBar is rendered\n `is-open`. Neither `window` nor `requestAnimationFrame` exists there — start no clock;\n the same watcher arms it on the client, where the countdown is the only thing it drives. */\n if (typeof window === 'undefined' || typeof requestAnimationFrame === 'undefined') return;\n\n start = performance.now();\n if (!hasCountdown) {\n // No visible countdown — a single timeout, no per-frame re-renders.\n const handle = window.setTimeout(() => {\n emit('open-change', false);\n }, remaining);\n onCleanup(() => {\n window.clearTimeout(handle);\n const elapsed = performance.now() - start;\n remaining = Math.max(0, remaining - elapsed);\n });\n return;\n }\n const tick = (now: number) => {\n const elapsed = now - start;\n const left = Math.max(0, remaining - elapsed);\n progress.value = left / duration;\n if (left <= 0) {\n emit('open-change', false);\n return;\n }\n raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n onCleanup(() => {\n if (raf != null) cancelAnimationFrame(raf);\n const elapsed = performance.now() - start;\n remaining = Math.max(0, remaining - elapsed);\n });\n },\n { immediate: true, flush: 'post' },\n);\n\nonUnmounted(() => {\n if (raf != null) cancelAnimationFrame(raf);\n});\n\nconst setPaused = (value: boolean) => {\n if (props.canPauseOnHover) paused.value = value;\n};\n\nconst onUndoClick = () => {\n emit('undo');\n emit('open-change', false);\n};\n\nconst wrapperClasses = computed(() => cn('fixed z-toast', POSITION[props.position]));\n\n/**\n * `Presence` clones `data-state` onto this node, and the enter/exit tokens are\n * gated on it. slide-in-bottom/out-bottom carry their own fade; `motion-safe`\n * so reduced-motion users get no movement.\n */\nconst panelClasses = computed(() =>\n cn(\n 'relative flex items-center gap-3 overflow-hidden text-sm',\n surfaceVariants({ variant: 'surface', radius: 'md', padding: 'sm', elevation: 3 }),\n 'px-4 py-2.5',\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-bottom)',\n 'motion-safe:data-[state=closed]:animate-(--animate-slide-out-bottom)',\n 'motion-reduce:animate-none',\n attrs.class as string | undefined,\n ),\n);\n\nconst showCountdown = computed(() => props.hasCountdown && props.duration !== Infinity);\n</script>\n\n<template>\n <!--\n Static positioning wrapper holds the fixed corner + (for `*-center`) the\n centering `-translate-x-1/2`; the inner panel carries the slide keyframe,\n whose own `translateY` would otherwise clobber that centering translate if\n both sat on one node. `Portal` stays mounted; `Presence` owns the panel's\n mount so the exit (slide-out + fade) plays before unmount, cloning\n `data-state` onto the panel for its motion.\n -->\n <Portal>\n <div :class=\"wrapperClasses\">\n <Presence :is-present=\"props.isOpen\">\n <div\n role=\"status\"\n aria-live=\"polite\"\n :class=\"panelClasses\"\n @mouseenter=\"setPaused(true)\"\n @mouseleave=\"setPaused(false)\"\n @focus=\"setPaused(true)\"\n @blur=\"setPaused(false)\"\n >\n <span class=\"flex-1\">\n <slot name=\"message\">{{ props.message }}</slot>\n </span>\n <button\n v-if=\"hasUndo()\"\n type=\"button\"\n class=\"font-medium text-primary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm px-1\"\n @click=\"onUndoClick\"\n >\n {{ props.undoLabel }}\n </button>\n <div v-if=\"showCountdown\" class=\"absolute bottom-0 left-0 h-0.5 w-full bg-border\">\n <div\n class=\"h-full bg-primary transition-[width] duration-100 ease-linear\"\n :style=\"{ width: `${progress * 100}%` }\"\n />\n </div>\n </div>\n </Presence>\n </div>\n </Portal>\n</template>\n","<script lang=\"ts\">\nimport { inject, type InjectionKey } from 'vue';\n\nexport interface OnboardingContextValue {\n /** A live getter — read it, never destructure it. */\n readonly open: boolean;\n setOpen: (open: boolean) => void;\n}\n\n/**\n * The record a `OnboardingChecklistTask` hands the root on mount. `isDone` is a\n * live getter over the task's own prop, so the root's progress computeds track\n * it without the task re-registering on every toggle.\n */\nexport interface OnboardingTaskRecord {\n readonly isDone: boolean;\n}\n\nexport interface OnboardingRegistry {\n register: (task: OnboardingTaskRecord) => void;\n unregister: (task: OnboardingTaskRecord) => void;\n}\n\nexport const onboardingContextKey: InjectionKey<OnboardingContextValue> =\n Symbol('wow-two.onboardingChecklist');\n\n/**\n * Replaces React's `Children.toArray` + `isValidElement` child-walking, which\n * has no Vue counterpart: slots are functions, so the root cannot inspect its\n * children's props. Tasks register themselves instead.\n */\nexport const onboardingRegistryKey: InjectionKey<OnboardingRegistry> = Symbol(\n 'wow-two.onboardingChecklist.registry',\n);\n\nexport interface OnboardingChecklistProps {\n /** The card heading. Rich content → the `title` slot. */\n title?: string;\n defaultOpen?: boolean;\n canDismissOnComplete?: boolean;\n /** The delay in ms after 100% before unmounting. */\n dismissDelay?: number;\n}\n\nexport function useOnboardingChecklist(): OnboardingContextValue {\n const context = inject(onboardingContextKey, null);\n if (!context) throw new Error('useOnboardingChecklist must be used inside <OnboardingChecklist>');\n return context;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, shallowRef, useAttrs, useTemplateRef, watch } from 'vue';\nimport { ChevronDown } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\nconst ChevronDownIcon = ChevronDown;\n\n/**\n * Onboarding task card. The default slot holds `OnboardingChecklistTask`\n * components; progress is auto-derived from the `isDone` prop each one\n * registers with this root.\n */\ndefineOptions({ name: 'OnboardingChecklist', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<OnboardingChecklistProps>(), {\n title: 'Get started',\n defaultOpen: true,\n canDismissOnComplete: false,\n dismissDelay: 2000,\n});\n\nconst emit = defineEmits<{\n /** Replaces React's `onDismiss`. Fires once, `dismissDelay` ms after the last task completes. */\n dismiss: [];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst open = ref(props.defaultOpen);\nconst dismissed = ref(false);\n\nconst tasks = shallowRef<ReadonlyArray<OnboardingTaskRecord>>([]);\n\nprovide<OnboardingRegistry>(onboardingRegistryKey, {\n register: (task) => {\n if (!tasks.value.includes(task)) tasks.value = [...tasks.value, task];\n },\n unregister: (task) => {\n tasks.value = tasks.value.filter((existing) => existing !== task);\n },\n});\n\nprovide<OnboardingContextValue>(onboardingContextKey, {\n get open() {\n return open.value;\n },\n setOpen: (value: boolean) => {\n open.value = value;\n },\n});\n\nconst total = computed(() => tasks.value.length);\nconst done = computed(() => tasks.value.filter((task) => task.isDone).length);\nconst complete = computed(() => total.value > 0 && done.value === total.value);\n\nwatch(\n [complete, () => props.canDismissOnComplete, () => props.dismissDelay, dismissed],\n ([isComplete, canDismiss, delay, isDismissed], _previous, onCleanup) => {\n if (!canDismiss || !isComplete || isDismissed) return;\n const handle = window.setTimeout(() => {\n dismissed.value = true;\n emit('dismiss');\n }, delay);\n onCleanup(() => window.clearTimeout(handle));\n },\n { immediate: true, flush: 'post' },\n);\n\nconst classes = computed(() =>\n cn(\n 'overflow-hidden rounded-lg border border-border bg-card shadow-sm',\n attrs.class as string | undefined,\n ),\n);\n\nconst fillClasses = computed(() =>\n cn('h-full bg-primary transition-[width] duration-300', complete.value && 'bg-success'),\n);\n\nconst fillStyle = computed(() => ({\n width: total.value ? `${(done.value / total.value) * 100}%` : '0%',\n}));\n\nconst chevronClasses = computed(() =>\n cn('text-muted-foreground transition-transform', open.value && 'rotate-180'),\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 v-if=\"!dismissed\" ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <button\n type=\"button\"\n :aria-expanded=\"open\"\n class=\"flex w-full items-center gap-3 px-4 py-3 text-left transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n @click=\"open = !open\"\n >\n <div class=\"flex-1\">\n <div class=\"text-sm font-medium text-foreground\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div class=\"mt-1 text-xs text-muted-foreground\">{{ done }} of {{ total }} tasks complete</div>\n <div class=\"mt-2 h-1.5 overflow-hidden rounded-full bg-border\">\n <div :class=\"fillClasses\" :style=\"fillStyle\" />\n </div>\n </div>\n <Icon :icon=\"ChevronDownIcon\" :size=\"16\" :class=\"chevronClasses\" />\n </button>\n <!--\n Tasks register on mount, so they must stay mounted for `total` / `done` to\n be correct while collapsed — `v-show`, not `v-if`, unlike React's `{open && …}`\n which could re-derive counts from the children array without rendering them.\n -->\n <ul v-show=\"open\" role=\"list\" class=\"border-t border-border\">\n <slot />\n </ul>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface OnboardingChecklistTaskProps {\n /** The task label. Rich content → the `label` slot. Required in React; optional here so the slot form is usable — supply one or the other. */\n label?: string;\n /** The secondary line under the label. Rich content → the `description` slot. */\n description?: string;\n isDone?: boolean;\n /** The trailing call-to-action, hidden once done. Rich content → the `action` slot. */\n action?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onMounted, onUnmounted, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { Check } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport { onboardingRegistryKey, type OnboardingTaskRecord } from './OnboardingChecklist.vue';\n\nconst CheckIcon = Check;\n\n/** A single checklist row. Registers itself with the enclosing `OnboardingChecklist` so it counts toward progress. */\ndefineOptions({ name: 'OnboardingChecklistTask', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<OnboardingChecklistTaskProps>(), { isDone: false });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLLIElement>('el');\n\n/**\n * `isDone` is exposed as a getter so the root's progress computeds re-evaluate\n * on toggle without this task re-registering.\n */\nconst record: OnboardingTaskRecord = {\n get isDone() {\n return props.isDone;\n },\n};\n\nconst registry = inject(onboardingRegistryKey, null);\nonMounted(() => registry?.register(record));\nonUnmounted(() => registry?.unregister(record));\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasAction = computed(() => Boolean(props.action) || Boolean(slots.action));\n\nconst classes = computed(() =>\n cn(\n 'flex items-start gap-3 px-4 py-3 transition-colors',\n props.isDone && 'opacity-60',\n attrs.class as string | undefined,\n ),\n);\n\nconst markerClasses = computed(() =>\n cn(\n 'mt-0.5 grid h-5 w-5 shrink-0 place-items-center rounded-full border',\n props.isDone ? 'border-success bg-success text-success-foreground' : 'border-border',\n ),\n);\n\nconst labelClasses = computed(() =>\n cn('text-sm font-medium text-foreground', props.isDone && 'line-through'),\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 <li ref=\"el\" :data-done=\"props.isDone || undefined\" v-bind=\"rest\" :class=\"classes\">\n <span aria-hidden=\"true\" :class=\"markerClasses\">\n <Icon v-if=\"props.isDone\" :icon=\"CheckIcon\" :size=\"12\" />\n </span>\n <div class=\"min-w-0 flex-1\">\n <div :class=\"labelClasses\">\n <slot name=\"label\">{{ props.label }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"mt-0.5 text-xs text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n </div>\n <div v-if=\"hasAction && !props.isDone\" class=\"shrink-0\">\n <slot name=\"action\">{{ props.action }}</slot>\n </div>\n </li>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue';\n\n/** Defines the side a Tour tooltip is placed on, relative to its target. */\nexport const Placement = {\n /** Refers to placement above the target. */\n Top: 'top',\n /** Refers to placement to the right of the target. */\n Right: 'right',\n /** Refers to placement below the target. */\n Bottom: 'bottom',\n /** Refers to placement to the left of the target. */\n Left: 'left',\n} as const;\n\nexport type Placement = (typeof Placement)[keyof typeof Placement];\n\nexport interface TourStep {\n /** A CSS selector, or a template ref holding the element to spotlight. */\n target: string | Ref<HTMLElement | null>;\n title?: string;\n body?: string;\n placement?: Placement;\n}\n\nexport interface TourProps {\n isOpen?: boolean;\n defaultOpen?: boolean;\n steps: ReadonlyArray<TourStep>;\n currentStep?: number;\n defaultCurrentStep?: number;\n padding?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, shallowRef, watch } from 'vue';\nimport { cn, Key } from '../../../foundation/utils';\nimport { useControlled, useId, useReducedMotion } from '../../../foundation/hooks';\nimport { Announce, Portal, Presence } from '../../../foundation/primitives';\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nfunction rectFromTarget(target: TourStep['target']): Rect | null {\n const el = typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target.value;\n if (!el) return null;\n const r = el.getBoundingClientRect();\n return { top: r.top, left: r.left, width: r.width, height: r.height };\n}\n\nfunction placementCoords(rect: Rect, placement: NonNullable<TourStep['placement']>, gap = 12) {\n switch (placement) {\n case Placement.Top:\n return { top: rect.top - gap, left: rect.left + rect.width / 2, transform: 'translate(-50%, -100%)' };\n case Placement.Right:\n return { top: rect.top + rect.height / 2, left: rect.left + rect.width + gap, transform: 'translate(0, -50%)' };\n case Placement.Bottom:\n return { top: rect.top + rect.height + gap, left: rect.left + rect.width / 2, transform: 'translate(-50%, 0)' };\n case Placement.Left:\n return { top: rect.top + rect.height / 2, left: rect.left - gap, transform: 'translate(-100%, -50%)' };\n }\n}\n\n/**\n * Multi-step product tour. Renders an SVG mask with a cutout around each\n * step's target + a floating tooltip with Next / Prev / Skip / Done.\n *\n * `TourStep.title` / `.body` narrow React's `ReactNode` to `string`: steps are\n * plain data passed as a prop, not slot content, and the announcement already\n * required a string.\n */\ndefineOptions({ name: 'Tour', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TourProps>(), {\n defaultOpen: false,\n defaultCurrentStep: 0,\n padding: 8,\n /* `isOpen` is the controlled-mode signal, and `useControlled` keys on `=== undefined`.\n A `boolean` prop is Boolean-castable, so without this explicit `undefined` Vue turns an\n ABSENT `isOpen` into `false` — which reads as \"controlled, and closed\", pinning the tour\n shut and making `defaultOpen` dead. `currentStep` needs no such default: `number` is not\n Boolean-castable, so it already arrives as `undefined`. */\n isOpen: undefined,\n});\n\nconst emit = defineEmits<{\n /** Replaces React's `onOpenChange`. */\n 'open-change': [open: boolean];\n /** Replaces React's `onStepChange`. */\n 'step-change': [index: number];\n /** Replaces React's `onComplete`. Fires when Done is pressed on the last step. */\n complete: [];\n /** Replaces React's `onSkip`. Fires on Skip and on Escape. */\n skip: [];\n}>();\n\nconst openCtl = useControlled<boolean>({\n controlled: () => props.isOpen,\n default: () => props.defaultOpen,\n onChange: (value) => emit('open-change', value),\n});\nconst stepCtl = useControlled<number>({\n controlled: () => props.currentStep,\n default: () => props.defaultCurrentStep,\n onChange: (value) => emit('step-change', value),\n});\n\nconst open = computed(() => openCtl.value.value);\nconst stepIndex = computed(() => stepCtl.value.value);\n\nconst rect = shallowRef<Rect | null>(null);\nconst titleId = useId('tour-title');\nconst descId = useId('tour-desc');\nconst maskId = useId('tour-mask');\nconst reducedMotion = useReducedMotion();\n\nconst step = computed(() => props.steps[stepIndex.value]);\n\n/* Keep the Portal (scrim + tooltip) mounted while the pop-out plays — the\n component hard-unmounts on `!open`, which would kill the exit. Opening\n flips this true synchronously; closing defers the unmount until the\n tooltip's exit animation ends (`@animationend` below). Under reduced\n motion no animation fires, so drop it on the next frame instead. */\nconst mounted = ref(open.value);\nwatch(\n [open, reducedMotion],\n ([isOpen, isReduced], _previous, onCleanup) => {\n if (isOpen) {\n mounted.value = true;\n return;\n }\n if (!isReduced) return;\n const raf = requestAnimationFrame(() => {\n mounted.value = false;\n });\n onCleanup(() => cancelAnimationFrame(raf));\n },\n { immediate: true, flush: 'post' },\n);\n\n// Update rect when step changes / window scrolls / resizes.\nwatch(\n [open, step],\n ([isOpen, currentStepValue], _previous, onCleanup) => {\n if (!isOpen || !currentStepValue) return;\n /* `immediate: true` runs this on the server too, where there is no rAF and no `window`.\n The spotlight rect is measured from live DOM, so there is nothing to compute there —\n bail, and let the same watcher measure on the client. */\n if (typeof requestAnimationFrame === 'undefined' || typeof window === 'undefined') return;\n\n const update = () => {\n rect.value = rectFromTarget(currentStepValue.target);\n };\n // Defer to next frame so the target can mount / scroll into view.\n const handle = requestAnimationFrame(update);\n\n window.addEventListener('resize', update, { passive: true });\n window.addEventListener('scroll', update, { passive: true, capture: true });\n onCleanup(() => {\n cancelAnimationFrame(handle);\n window.removeEventListener('resize', update);\n window.removeEventListener('scroll', update, true);\n });\n },\n { immediate: true, flush: 'post' },\n);\n\n// Escape handling.\nwatch(\n open,\n (isOpen, _previous, onCleanup) => {\n if (!isOpen) return;\n // Same `immediate: true` SSR pass — there is no `document` to listen on there.\n if (typeof document === 'undefined') return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === Key.Escape) {\n event.preventDefault();\n openCtl.setValue(false);\n emit('skip');\n }\n };\n document.addEventListener('keydown', onKey);\n onCleanup(() => document.removeEventListener('keydown', onKey));\n },\n { immediate: true, flush: 'post' },\n);\n\nconst goNext = () => {\n if (stepIndex.value >= props.steps.length - 1) {\n openCtl.setValue(false);\n emit('complete');\n } else {\n stepCtl.setValue(stepIndex.value + 1);\n }\n};\n\nconst goPrev = () => {\n if (stepIndex.value > 0) stepCtl.setValue(stepIndex.value - 1);\n};\n\nconst skip = () => {\n openCtl.setValue(false);\n emit('skip');\n};\n\nconst placement = computed(() => step.value?.placement ?? Placement.Bottom);\n\nconst tooltipCoords = computed(() =>\n rect.value ? placementCoords(rect.value, placement.value) : null,\n);\n\n/** Vue does not auto-suffix numeric style values with `px` the way React does. */\nconst tooltipStyle = computed(() => {\n const coords = tooltipCoords.value;\n if (!coords) return undefined;\n return {\n position: 'fixed' as const,\n top: `${coords.top}px`,\n left: `${coords.left}px`,\n transform: coords.transform,\n };\n});\n\nconst announcement = computed(() =>\n step.value?.title\n ? `Step ${stepIndex.value + 1} of ${props.steps.length}: ${step.value.title}`\n : '',\n);\n\nconst bodyClasses = computed(() =>\n cn('text-sm text-muted-foreground', step.value?.title && 'mt-1.5'),\n);\n\n/**\n * `Presence` clones `data-state` onto this node, so the pop (fade + slight\n * scale) runs gated on that state. `motion-safe` so reduced-motion users get\n * no movement.\n */\nconst tooltipClasses = cn(\n 'z-popover w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n 'motion-safe:data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-pop-out)',\n 'motion-reduce:animate-none',\n);\n\n/** Drops the Portal once the exit animation completes. */\nconst onTooltipAnimationEnd = () => {\n if (!open.value) mounted.value = false;\n};\n</script>\n\n<template>\n <Portal v-if=\"mounted && step\">\n <!-- SVG mask backdrop with cutout around target. Skipped while the\n target is unresolvable so a bare scrim never blocks the page.\n Gated on `open` (not `mounted`) so the scrim clears immediately on\n close while the tooltip plays its pop-out before unmount. -->\n <svg\n v-if=\"open && rect\"\n aria-hidden=\"true\"\n class=\"pointer-events-auto fixed inset-0 z-modal h-full w-full\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <mask :id=\"maskId\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n :x=\"rect.left - props.padding\"\n :y=\"rect.top - props.padding\"\n :width=\"rect.width + props.padding * 2\"\n :height=\"rect.height + props.padding * 2\"\n :rx=\"6\"\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill=\"rgba(0,0,0,0.55)\" :mask=\"`url(#${maskId})`\" />\n </svg>\n\n <!-- Tooltip — wrapped in `Presence` so its pop-out plays before the\n component unmounts. `Presence` clones `data-state` (\"open\" | \"closed\")\n onto the panel, so the pop tokens run gated on that state; the exit's\n `@animationend` drops `mounted`. -->\n <Presence v-if=\"tooltipCoords\" :is-present=\"open\">\n <div\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descId\"\n :style=\"tooltipStyle\"\n :class=\"tooltipClasses\"\n @animationend=\"onTooltipAnimationEnd\"\n >\n <div v-if=\"step.title\" :id=\"titleId\" class=\"text-sm font-semibold\">{{ step.title }}</div>\n <div v-if=\"step.body\" :id=\"descId\" :class=\"bodyClasses\">{{ step.body }}</div>\n <div class=\"mt-3 flex items-center justify-between gap-3\">\n <span class=\"text-xs text-muted-foreground\">\n {{ stepIndex + 1 }} / {{ props.steps.length }}\n </span>\n <div class=\"flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground hover:text-foreground\"\n @click=\"skip\"\n >\n Skip\n </button>\n <button\n v-if=\"stepIndex > 0\"\n type=\"button\"\n class=\"inline-flex h-7 items-center rounded-md border border-border bg-background px-2.5 text-xs font-medium hover:bg-muted\"\n @click=\"goPrev\"\n >\n Back\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n @click=\"goNext\"\n >\n {{ stepIndex >= props.steps.length - 1 ? 'Done' : 'Next' }}\n </button>\n </div>\n </div>\n </div>\n </Presence>\n\n <Announce politeness=\"polite\">{{ announcement }}</Announce>\n </Portal>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\n/** Defines the TypingIndicator dot tone. */\nexport const TypingTone = {\n /** Refers to the muted-foreground tone. */\n Muted: 'muted',\n /** Refers to the primary / brand tone. */\n Primary: 'primary',\n /** Refers to the full-emphasis foreground tone. */\n Foreground: 'foreground',\n} as const;\n\nexport type TypingTone = (typeof TypingTone)[keyof typeof TypingTone];\n\nexport interface TypingIndicatorProps {\n /** The optional name(s) of who is typing — rendered as a leading label. Rich content → the `who` slot. */\n who?: string;\n\n /** The visual size of the bouncing dots. */\n size?: Size;\n\n /** The color of the dots; defaults to muted. */\n tone?: TypingTone;\n\n /** The subtle-mode flag — tones down dot opacity at rest (between bounces). */\n isSubtle?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\n\n/* Only sm/md/lg carry a dot size; other `Size` members fall through to `md`. */\nconst SIZE: Partial<Record<Size, string>> = {\n sm: 'h-1 w-1',\n md: 'h-1.5 w-1.5',\n lg: 'h-2 w-2',\n};\n\nconst TONE: Record<TypingTone, string> = {\n muted: 'bg-muted-foreground',\n primary: 'bg-primary',\n foreground: 'bg-foreground',\n};\n\n/**\n * Three-dot \"someone is typing\" indicator. Honors `prefers-reduced-motion`\n * via Tailwind's `motion-safe:` / `motion-reduce:` modifiers — dots stay\n * visible at full opacity when motion is reduced.\n */\ndefineOptions({ name: 'TypingIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TypingIndicatorProps>(), {\n size: SizeToken.Md,\n tone: TypingTone.Muted,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst hasWho = computed(() => Boolean(props.who) || Boolean(slots.who));\n\nconst dot = computed(() =>\n cn(\n 'inline-block rounded-full motion-safe:animate-bounce',\n SIZE[props.size] ?? SIZE.md,\n TONE[props.tone],\n props.isSubtle && 'motion-safe:opacity-60',\n ),\n);\n\n/** Only the string `who` prop can name the typist; the slot form falls back to the generic label. */\nconst ariaLabel = computed(() => (props.who ? `${props.who} is typing` : 'Typing'));\n\nconst classes = computed(() =>\n cn('inline-flex items-center gap-2 text-xs text-muted-foreground', 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 <span ref=\"el\" role=\"status\" aria-live=\"polite\" :aria-label=\"ariaLabel\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasWho\" class=\"truncate\">\n <slot name=\"who\">{{ props.who }}</slot>\n </span>\n <span class=\"inline-flex items-end gap-1\" aria-hidden=\"true\">\n <span :class=\"dot\" :style=\"{ animationDelay: '0ms' }\" />\n <span :class=\"dot\" :style=\"{ animationDelay: '150ms' }\" />\n <span :class=\"dot\" :style=\"{ animationDelay: '300ms' }\" />\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { CornerPosition, Size } from '../../../foundation/utils';\n\n/** Defines a person's presence state. */\nexport const PresenceStatus = {\n /** Refers to actively available. */\n Online: 'online',\n /** Refers to present but inactive. */\n Idle: 'idle',\n /** Refers to present but do-not-disturb. */\n Busy: 'busy',\n /** Refers to not connected. */\n Offline: 'offline',\n /** Refers to connected but appearing offline. */\n Invisible: 'invisible',\n} as const;\n\nexport type PresenceStatus = (typeof PresenceStatus)[keyof typeof PresenceStatus];\n\nexport interface PresenceIndicatorProps {\n status?: PresenceStatus;\n /** The dot diameter. */\n size?: Size;\n\n /** The pulsing-ring toggle (only meaningful for `online`). */\n hasPulse?: boolean;\n\n /** The corner position on a parent (use inside an Avatar wrapper). */\n position?: CornerPosition;\n\n /** The accessible-label override. Defaults to status name. */\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\n\nconst STATUS_BG: Record<PresenceStatus, string> = {\n online: 'bg-success',\n idle: 'bg-warning',\n busy: 'bg-destructive',\n offline: 'bg-muted-foreground',\n invisible: 'bg-transparent border border-muted-foreground',\n};\n\n/* Only xs/sm/md/lg carry a dot size; other `Size` members fall through to `sm`. */\nconst SIZE: Partial<Record<Size, string>> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n};\n\nconst POS: Record<CornerPosition, string> = {\n 'top-right': 'absolute top-0 right-0',\n 'top-left': 'absolute top-0 left-0',\n 'bottom-right': 'absolute bottom-0 right-0',\n 'bottom-left': 'absolute bottom-0 left-0',\n};\n\nconst STATUS_LABEL: Record<PresenceStatus, string> = {\n online: 'Online',\n idle: 'Idle',\n busy: 'Busy',\n offline: 'Offline',\n invisible: 'Invisible',\n};\n\n/**\n * Colored dot encoding a person's presence (online / idle / busy / offline /\n * invisible). Includes a `ring-background` so it pops cleanly when overlaid\n * on an `Avatar`. Pass `position` to absolutely place on a positioned parent.\n */\ndefineOptions({ name: 'PresenceIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<PresenceIndicatorProps>(), {\n status: PresenceStatus.Online,\n size: SizeToken.Sm,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst showPulse = computed(() => Boolean(props.hasPulse) && props.status === PresenceStatus.Online);\n\nconst classes = computed(() =>\n cn(\n 'inline-flex rounded-full ring-2 ring-background',\n STATUS_BG[props.status],\n SIZE[props.size] ?? SIZE.sm,\n props.position && POS[props.position],\n 'relative',\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 <span\n ref=\"el\"\n role=\"status\"\n :aria-label=\"props.label ?? STATUS_LABEL[props.status]\"\n :data-status=\"props.status\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <span\n v-if=\"showPulse\"\n aria-hidden=\"true\"\n :class=\"cn('absolute inset-0 rounded-full opacity-75 motion-safe:animate-ping', STATUS_BG.online)\"\n />\n </span>\n</template>\n","<script lang=\"ts\">\nexport interface LiveCursorProps {\n /** The pixel offset from the parent's top-left corner. */\n x: number;\n y: number;\n /** The display name shown beside the pointer. Rich content → the `name` slot. */\n name?: string;\n\n /** The CSS color used for the pointer fill and label background. */\n color?: string;\n\n /** The smooth-movement toggle between updates. Defaults to true; auto-disables with reduced motion. */\n isSmooth?: boolean;\n\n /** The pixel offset for the label relative to the pointer. */\n labelOffset?: { x?: number; y?: number };\n\n /** The pointer-only toggle — hides the label and shows only the pointer. */\n isPointerOnly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef, type CSSProperties } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useReducedMotion } from '../../../foundation/hooks';\n\n/**\n * Remote-user cursor for collaborative canvases. Wrap in a `relative` parent;\n * places itself absolutely at `(x, y)`, smoothing movement unless reduced-motion.\n */\ndefineOptions({ name: 'LiveCursor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<LiveCursorProps>(), {\n color: 'var(--color-primary)',\n isSmooth: true,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst reducedMotion = useReducedMotion();\nconst useTransition = computed(() => props.isSmooth && !reducedMotion.value);\n\nconst lx = computed(() => props.labelOffset?.x ?? 12);\nconst ly = computed(() => props.labelOffset?.y ?? 16);\n\nconst hasName = computed(() => Boolean(props.name) || Boolean(slots.name));\n\nconst wrapperStyle = computed<CSSProperties>(() => ({\n transform: `translate3d(${props.x}px, ${props.y}px, 0)`,\n transition: useTransition.value ? 'transform 80ms linear' : undefined,\n}));\n\nconst labelStyle = computed<CSSProperties>(() => ({\n backgroundColor: props.color,\n transform: `translate(${lx.value}px, ${ly.value}px)`,\n}));\n\nconst classes = computed(() =>\n cn(\n 'pointer-events-none absolute left-0 top-0 z-tooltip select-none',\n attrs.class as string | undefined,\n ),\n);\n\n/**\n * Everything but `class` and `style` — both are re-applied by hand. The array\n * `:style` binding reproduces React's `{ ...wrapperStyle, ...style }` merge\n * (caller wins) while tolerating the string form Vue also allows for `style`.\n */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\nconst callerStyle = computed(() => attrs.style as CSSProperties | string | undefined);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n aria-hidden=\"true\"\n v-bind=\"rest\"\n :class=\"classes\"\n :style=\"[wrapperStyle, callerStyle ?? {}]\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"drop-shadow-sm\"\n >\n <path\n d=\"M5 3 L5 19 L9.5 14.5 L12.5 21 L15.5 19.5 L12.5 13 L19 13 Z\"\n :fill=\"props.color\"\n stroke=\"white\"\n stroke-width=\"1.25\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span\n v-if=\"hasName && !props.isPointerOnly\"\n class=\"absolute whitespace-nowrap rounded-md px-1.5 py-0.5 text-[11px] font-medium leading-none text-white shadow-sm\"\n :style=\"labelStyle\"\n >\n <slot name=\"name\">{{ props.name }}</slot>\n </span>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface NotificationCenterProps {\n /** The header title. Default `\"Notifications\"`. Rich content → the `title` slot. */\n title?: string;\n\n /** The badge / count rendered next to the title. Rich content → the `count` slot. */\n count?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { Bell } from 'lucide-vue-next';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport { renderableChildren } from '../../../foundation/primitives';\n\n/**\n * Notification panel — header (title + count + actions), a scrolling list of\n * `NotificationItem` children, and an optional footer.\n *\n * React's `headerActions` / `emptyState` / `footer` were `ReactNode` props with\n * no string form worth keeping; they are slots only. `title` / `count` keep\n * their prop form and gain same-named slots.\n */\ndefineOptions({ name: 'NotificationCenter', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<NotificationCenterProps>(), { title: 'Notifications' });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/**\n * Replaces React's `Children.toArray(children).filter(isValidElement)`. Called\n * per render rather than cached — a slot's content is only knowable at render\n * time, and `renderableChildren` drops the comment/whitespace vnodes that would\n * otherwise read as content.\n */\nconst isEmpty = () => renderableChildren(slots.default?.()).length === 0;\n\nconst classes = computed(() =>\n cn(\n 'flex w-80 flex-col',\n surfaceVariants({ variant: 'surface', radius: 'md' }),\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\" role=\"region\" aria-label=\"Notifications\" v-bind=\"rest\" :class=\"classes\">\n <header class=\"flex items-center justify-between gap-2 border-b border-border px-3 py-2.5\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-sm font-semibold\">\n <slot name=\"title\">{{ props.title }}</slot>\n </span>\n <span\n v-if=\"props.count != null || $slots.count\"\n class=\"inline-flex items-center justify-center rounded-full bg-primary px-1.5 text-[10px] font-semibold leading-5 text-primary-foreground\"\n >\n <slot name=\"count\">{{ props.count }}</slot>\n </span>\n </div>\n <slot name=\"headerActions\" />\n </header>\n <div class=\"max-h-96 overflow-y-auto py-1\">\n <template v-if=\"isEmpty()\">\n <slot name=\"emptyState\">\n <div\n class=\"flex flex-col items-center gap-2 px-4 py-10 text-center text-muted-foreground\"\n >\n <Bell class=\"h-6 w-6\" />\n <p class=\"text-sm\">You're all caught up.</p>\n </div>\n </slot>\n </template>\n <div v-else class=\"flex flex-col\"><slot /></div>\n </div>\n <div\n v-if=\"$slots.footer\"\n class=\"border-t border-border px-3 py-2 text-center text-xs\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface NotificationItemProps {\n /** The leading icon / avatar. Rich content → the `icon` slot. */\n icon?: string;\n\n /** The primary title. Rich content → the `title` slot. Required in React; optional here so the slot form is usable — supply one or the other. */\n title?: string;\n\n /** The body / description. Rich content → the `description` slot. */\n description?: string;\n\n /** The timestamp / relative time label. Rich content → the `timestamp` slot. */\n timestamp?: string;\n\n /** The unread flag (bold + leading dot). */\n isUnread?: boolean;\n\n /** The trailing actions. Rich content → the `actions` slot. */\n actions?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn, Key } from '../../../foundation/utils';\n\n/** A single notification row inside `NotificationCenter`. */\ndefineOptions({ name: 'NotificationItem', inheritAttrs: false });\n\nconst props = defineProps<NotificationItemProps>();\n\nconst emit = defineEmits<{\n /**\n * Replaces React's `onSelect`; binding it makes the row interactive\n * (`role=\"button\"`, `tabindex=\"0\"`, Enter/Space activation).\n *\n * Declared as an emit even though `select` is also a DOM event name — the\n * React prop was a custom callback, not the native `select`, and an emit is\n * the only way to keep the name. A `@select` binding reaches this emit, not\n * the (never-fired-on-a-div) native event.\n */\n select: [];\n /** Replaces React's `onDismiss`; when bound, a dismiss button renders on hover. */\n dismiss: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/**\n * Mirror React's `!!onSelect` / `onDismiss &&` guards. Read through a call, not\n * a cached computed: `instance.vnode` is replaced on every re-render.\n */\nconst interactive = () => Boolean(instance?.vnode.props?.onSelect);\nconst hasDismiss = () => Boolean(instance?.vnode.props?.onDismiss);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTimestamp = computed(() => Boolean(props.timestamp) || Boolean(slots.timestamp));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() =>\n cn(\n 'group/notif relative flex gap-3 rounded-md px-3 py-2.5 text-sm',\n interactive() &&\n 'cursor-pointer hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n props.isUnread && 'bg-primary-soft/30',\n attrs.class as string | undefined,\n ),\n);\n\nconst titleClasses = computed(() =>\n cn('truncate text-foreground', props.isUnread ? 'font-semibold' : 'font-medium'),\n);\n\nconst bodyClasses = computed(() => cn('min-w-0 flex-1', !hasIcon.value && 'pl-3'));\n\nconst onKeyDown = (event: KeyboardEvent) => {\n if (!interactive()) return;\n if (event.target !== event.currentTarget) return;\n if (event.key === Key.Enter || event.key === Key.Space) {\n event.preventDefault();\n emit('select');\n }\n};\n\nconst onDismissClick = (event: MouseEvent) => {\n event.stopPropagation();\n emit('dismiss');\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 :role=\"interactive() ? 'button' : undefined\"\n :tabindex=\"interactive() ? 0 : undefined\"\n :data-unread=\"props.isUnread ? '' : undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n @click=\"emit('select')\"\n @keydown=\"onKeyDown\"\n >\n <span\n v-if=\"props.isUnread\"\n aria-hidden=\"true\"\n class=\"absolute left-1 top-3 inline-block h-2 w-2 rounded-full bg-primary\"\n />\n <div v-if=\"hasIcon\" class=\"shrink-0 self-start pl-3\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </div>\n <div :class=\"bodyClasses\">\n <div class=\"flex items-baseline gap-2\">\n <span :class=\"titleClasses\">\n <slot name=\"title\">{{ props.title }}</slot>\n </span>\n <span\n v-if=\"hasTimestamp\"\n class=\"ml-auto whitespace-nowrap text-xs text-muted-foreground\"\n >\n <slot name=\"timestamp\">{{ props.timestamp }}</slot>\n </span>\n </div>\n <div v-if=\"hasDescription\" class=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n <div v-if=\"hasActions\" class=\"mt-1.5 flex items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n </div>\n <button\n v-if=\"hasDismiss()\"\n type=\"button\"\n aria-label=\"Dismiss notification\"\n :class=\"\n cn(\n 'absolute right-2 top-2 inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground opacity-0',\n 'group-hover/notif:opacity-100 group-focus-within/notif:opacity-100',\n 'hover:bg-background hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )\n \"\n @click=\"onDismissClick\"\n >\n <X class=\"h-3.5 w-3.5\" />\n </button>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","_renderSlot","_createElementVNode","_normalizeStyle","_createBlock","AlertSimple","_hoisted_1","_createTextVNode","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_createVNode","_unref","Icon","BannerSimple","_hoisted_5","ToastSimple","Spinner","OrientationToken","_Fragment","_normalizeClass","Portal","_renderList","Toast","Announce","Toaster","Backdrop","_withDirectives","_hoisted_6","rect","placement","_hoisted_7","_hoisted_8","$slots"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NotificationItem.vue_vue_type_script_setup_true_lang-DySfo3fD.js","sources":["../../src/presentation/feedback/skeleton/Skeleton.variants.ts","../../src/presentation/feedback/skeleton/Skeleton.vue","../../src/presentation/feedback/progressBar/ProgressBar.variants.ts","../../src/presentation/feedback/progressBar/ProgressBar.vue","../../src/presentation/feedback/progressCircle/ProgressCircle.vue","../../src/presentation/feedback/alertSimple/AlertSimple.variants.ts","../../src/presentation/feedback/alertSimple/AlertSimple.vue","../../src/presentation/feedback/bannerSimple/BannerSimple.variants.ts","../../src/presentation/feedback/bannerSimple/BannerSimple.vue","../../src/presentation/feedback/toastSimple/ToastSimple.vue","../../src/presentation/feedback/toastSimple/ToastSimple.variants.ts","../../src/presentation/feedback/alert/Alert.vue","../../src/presentation/feedback/banner/Banner.vue","../../src/presentation/feedback/toast/Toast.vue","../../src/presentation/feedback/callout/Callout.vue","../../src/presentation/feedback/inlineSpinner/InlineSpinner.vue","../../src/presentation/feedback/loadingState/LoadingState.vue","../../src/presentation/feedback/progressSteps/ProgressSteps.vue","../../src/presentation/feedback/statusIndicator/StatusIndicator.vue","../../src/presentation/feedback/meterBar/MeterBar.vue","../../src/presentation/feedback/trendIndicator/TrendIndicator.vue","../../src/presentation/feedback/toaster/Toaster.vue","../../src/presentation/feedback/feedbackToasts/FeedbackToasts.vue","../../src/presentation/feedback/loadingOverlay/LoadingOverlay.vue","../../src/presentation/feedback/undoBar/UndoBar.vue","../../src/presentation/feedback/onboardingChecklist/OnboardingChecklist.vue","../../src/presentation/feedback/onboardingChecklist/OnboardingChecklistTask.vue","../../src/presentation/feedback/tour/Tour.vue","../../src/presentation/feedback/typingIndicator/TypingIndicator.vue","../../src/presentation/feedback/presenceIndicator/PresenceIndicator.vue","../../src/presentation/feedback/liveCursor/LiveCursor.vue","../../src/presentation/feedback/notificationCenter/NotificationCenter.vue","../../src/presentation/feedback/notificationCenter/NotificationItem.vue"],"sourcesContent":["import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the Skeleton placeholder shape. */\nexport const SkeletonShape = {\n /** Refers to a rounded rectangle block. */\n Rect: 'rect',\n /** Refers to a text line (fixed height, small radius). */\n Text: 'text',\n /** Refers to a circle (avatar / icon placeholder). */\n Circle: 'circle',\n} as const;\n\nexport type SkeletonShape = (typeof SkeletonShape)[keyof typeof SkeletonShape];\n\nexport const skeletonVariants = tv({\n base: 'animate-pulse bg-muted',\n variants: {\n shape: {\n rect: 'rounded-md',\n text: 'h-4 rounded-sm',\n circle: 'rounded-full',\n },\n },\n defaultVariants: {\n shape: 'rect',\n },\n});\n\nexport type SkeletonVariants = VariantProps<typeof skeletonVariants>;\n\n/* Compile-time lock: SkeletonShape values ≡ tv shape keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSkeletonShape: AssertExact<\n SkeletonShape,\n NonNullable<VariantProps<typeof skeletonVariants>['shape']>\n> = true;\nvoid _assertSkeletonShape;\n","<script lang=\"ts\">\nimport type { SkeletonShape } from './Skeleton.variants';\n\nexport interface SkeletonProps {\n /** The placeholder shape. */\n shape?: SkeletonShape;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { skeletonVariants } from './Skeleton.variants';\n\n/**\n * Loading placeholder. Use sized via `class` (e.g. `w-32 h-4`) for text\n * lines, or as a full block with `shape=\"rect\"`.\n */\ndefineOptions({ name: 'Skeleton', inheritAttrs: false });\n\nconst props = defineProps<SkeletonProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(skeletonVariants({ shape: props.shape }), 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\" aria-hidden=\"true\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { ProgressTone, Size, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const progressTrackVariants = tv({\n base: 'h-2 w-full overflow-hidden rounded-full bg-muted',\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nexport const progressFillVariants = tv({\n base: 'h-full rounded-full transition-[width] duration-300',\n variants: {\n tone: {\n brand: 'bg-primary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n neutral: 'bg-muted-foreground',\n },\n },\n defaultVariants: {\n tone: 'brand',\n },\n});\n\nexport type ProgressBarVariants = VariantProps<typeof progressTrackVariants> &\n VariantProps<typeof progressFillVariants>;\n\n/* Compile-time lock: adopted enum values ≡ tv axis keys (drift = type error).\n `Size` is the 5-member registry enum; the track only wires 3 (sm/md/lg), so\n the assert is one-directional (tv keys ⊆ Size) — widening a narrower prop is\n allowed for beta. */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertProgressSize: NonNullable<\n VariantProps<typeof progressTrackVariants>['size']\n> extends Size\n ? true\n : never = true;\nvoid _assertProgressSize;\nconst _assertProgressTone: AssertExact<\n ProgressTone,\n NonNullable<VariantProps<typeof progressFillVariants>['tone']>\n> = true;\nvoid _assertProgressTone;\n","<script lang=\"ts\">\nimport type { ProgressTone, Size } from '../../../foundation/utils';\n\nexport interface ProgressBarProps {\n /** The track thickness. */\n size?: Size;\n /** The fill tone palette. */\n tone?: ProgressTone;\n /** The current value 0–100. Pass `undefined` for indeterminate. */\n value?: number;\n max?: number;\n /** The accessible label for the progress. */\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport {\n progressFillVariants,\n progressTrackVariants,\n type ProgressBarVariants,\n} from './ProgressBar.variants';\n\n/**\n * Linear progress indicator. Set `value` (0–`max`) for determinate; omit\n * for indeterminate.\n */\ndefineOptions({ name: 'ProgressBar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ProgressBarProps>(), { max: 100 });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst determinate = computed(() => typeof props.value === 'number');\n\nconst pct = computed(() =>\n determinate.value ? Math.min(100, Math.max(0, ((props.value ?? 0) / props.max) * 100)) : undefined,\n);\n\nconst classes = computed(() =>\n cn(\n progressTrackVariants({\n /* `size` is the 5-member `Size`; the track defines only sm/md/lg.\n Cast to the tv key type — an out-of-range value falls through to\n the tv default. */\n size: props.size as ProgressBarVariants['size'],\n }),\n attrs.class as string | undefined,\n ),\n);\n\nconst fillClasses = computed(() =>\n cn(\n progressFillVariants({ tone: props.tone }),\n !determinate.value && 'w-1/3 animate-[indeterminate_1.4s_ease-in-out_infinite]',\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\n ref=\"el\"\n role=\"progressbar\"\n :aria-label=\"props.label\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :aria-valuenow=\"determinate ? props.value : undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <div :class=\"fillClasses\" :style=\"determinate ? { width: `${pct}%` } : undefined\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ProgressTone } from '../../../foundation/utils';\n\nexport interface ProgressCircleProps {\n /** The current value 0–100. Omit for indeterminate. */\n value?: number;\n max?: number;\n size?: number;\n thickness?: number;\n /** The ring tone palette. */\n tone?: ProgressTone;\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, ProgressTone as ProgressToneToken } from '../../../foundation/utils';\n\nconst TONE_CLASS: Record<ProgressTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n neutral: 'text-muted-foreground',\n};\n\n/**\n * Circular progress indicator (SVG). Determinate when `value` is set;\n * indeterminate (rotating) when omitted.\n */\ndefineOptions({ name: 'ProgressCircle', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ProgressCircleProps>(), {\n max: 100,\n size: 40,\n thickness: 4,\n tone: ProgressToneToken.Brand,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst determinate = computed(() => typeof props.value === 'number');\nconst radius = computed(() => (props.size - props.thickness) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\nconst pct = computed(() =>\n determinate.value ? Math.min(100, Math.max(0, ((props.value ?? 0) / props.max) * 100)) : 25,\n);\nconst offset = computed(() => circumference.value - (pct.value / 100) * circumference.value);\n\nconst classes = computed(() =>\n cn(\n 'inline-block',\n !determinate.value && 'animate-spin',\n TONE_CLASS[props.tone],\n attrs.class as string | undefined,\n ),\n);\n\n/**\n * Vue does not auto-suffix numeric style values with `px` the way React does,\n * so the React original's `style={{ width: size, height: size }}` is spelled out.\n */\nconst boxStyle = computed(() => ({ width: `${props.size}px`, height: `${props.size}px` }));\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 role=\"progressbar\"\n :aria-label=\"props.label\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :aria-valuenow=\"determinate ? props.value : undefined\"\n :style=\"boxStyle\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <svg :width=\"props.size\" :height=\"props.size\" :viewBox=\"`0 0 ${props.size} ${props.size}`\">\n <circle\n :cx=\"props.size / 2\"\n :cy=\"props.size / 2\"\n :r=\"radius\"\n stroke=\"currentColor\"\n :stroke-width=\"props.thickness\"\n fill=\"none\"\n :opacity=\"0.2\"\n />\n <circle\n :cx=\"props.size / 2\"\n :cy=\"props.size / 2\"\n :r=\"radius\"\n stroke=\"currentColor\"\n :stroke-width=\"props.thickness\"\n stroke-linecap=\"round\"\n fill=\"none\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"offset\"\n :transform=\"`rotate(-90 ${props.size / 2} ${props.size / 2})`\"\n :style=\"{ transition: 'stroke-dashoffset 300ms ease' }\"\n />\n </svg>\n </div>\n</template>\n","import { Severity, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const alertSimpleVariants = tv({\n base: 'rounded-md border px-4 py-3 text-sm',\n variants: {\n severity: {\n info: 'border-info-soft bg-info-soft text-info-soft-foreground',\n success: 'border-success-soft bg-success-soft text-success-soft-foreground',\n warning: 'border-warning-soft bg-warning-soft text-warning-soft-foreground',\n danger: 'border-destructive-soft bg-destructive-soft text-destructive-soft-foreground',\n neutral: 'border-border bg-muted text-foreground',\n },\n },\n defaultVariants: {\n severity: 'info',\n },\n});\n\nexport type AlertSimpleVariants = VariantProps<typeof alertSimpleVariants>;\n\n/* Compile-time lock: Severity values ≡ tv severity keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSeverity: AssertExact<\n Severity,\n NonNullable<VariantProps<typeof alertSimpleVariants>['severity']>\n> = true;\nvoid _assertSeverity;\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface AlertSimpleProps {\n /** The semantic severity palette. */\n severity?: Severity;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { alertSimpleVariants } from './AlertSimple.variants';\n\n/**\n * Atomic alert — a styled colored container that takes free-form children.\n * No internal slots; consumer composes title/description/actions inline.\n *\n * For the structured Icon + Title + Description + Actions composition use\n * the `Alert` molecule (L4).\n *\n * `role=\"status\"` is the live-region contract; bound before `v-bind=\"rest\"`\n * so a caller-supplied `role` (e.g. `\"alert\"`) still wins.\n */\ndefineOptions({ name: 'AlertSimple', inheritAttrs: false });\n\nconst props = defineProps<AlertSimpleProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(alertSimpleVariants({ severity: props.severity }), 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\" role=\"status\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { Severity, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const bannerSimpleVariants = tv({\n base: 'w-full px-6 py-3 text-sm',\n variants: {\n severity: {\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-destructive text-destructive-foreground',\n neutral: 'bg-inverse text-inverse-foreground',\n },\n },\n defaultVariants: {\n severity: 'info',\n },\n});\n\nexport type BannerSimpleVariants = VariantProps<typeof bannerSimpleVariants>;\n\n/* Compile-time lock: Severity values ≡ tv severity keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSeverity: AssertExact<\n Severity,\n NonNullable<VariantProps<typeof bannerSimpleVariants>['severity']>\n> = true;\nvoid _assertSeverity;\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface BannerSimpleProps {\n /** The semantic severity palette. */\n severity?: Severity;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { bannerSimpleVariants } from './BannerSimple.variants';\n\n/**\n * Full-width banner — typically pinned to the top of the app to broadcast\n * status. Atom; for structured slotted layout use `Banner` (L4).\n *\n * `role=\"status\"` is the live-region contract; bound before `v-bind=\"rest\"`\n * so a caller-supplied `role` still wins.\n */\ndefineOptions({ name: 'BannerSimple', inheritAttrs: false });\n\nconst props = defineProps<BannerSimpleProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(bannerSimpleVariants({ severity: props.severity }), 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\" role=\"status\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\n/** Represents the prop surface of `ToastSimple`. */\nexport interface ToastSimpleProps {\n /** The semantic severity palette. */\n severity?: Severity;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport type { Tone } from '../../../foundation/utils';\nimport type { ToastSimpleVariants } from './ToastSimple.variants';\n\n/** Maps the toast `severity` keyword to a SurfaceStyles `tone`. */\nconst SEVERITY_TO_TONE: Record<NonNullable<ToastSimpleVariants['severity']>, Tone> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n neutral: 'neutral',\n};\n\n/**\n * Provides the atomic toast card — single tone-driven notification with free-form children.\n *\n * `role=\"status\"` + `aria-live=\"polite\"` are the live-region contract; `role` is\n * bound before `v-bind=\"rest\"` so a caller-supplied `role` still wins.\n */\ndefineOptions({ name: 'ToastSimple', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToastSimpleProps>(), { severity: 'neutral' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'pointer-events-auto text-sm',\n surfaceVariants({\n variant: 'surface',\n tone: SEVERITY_TO_TONE[props.severity],\n radius: 'md',\n padding: 'md',\n elevation: 3,\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\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" role=\"status\" aria-live=\"polite\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","import { Severity, tv, type VariantProps } from '../../../foundation/utils';\n\nexport const toastSimpleVariants = tv({\n base: 'pointer-events-auto rounded-md border bg-popover text-popover-foreground shadow-lg px-4 py-3 text-sm',\n variants: {\n severity: {\n info: 'border-info-soft',\n success: 'border-success-soft',\n warning: 'border-warning-soft',\n danger: 'border-destructive-soft',\n neutral: 'border-border',\n },\n },\n defaultVariants: {\n severity: 'neutral',\n },\n});\n\nexport type ToastSimpleVariants = VariantProps<typeof toastSimpleVariants>;\n\n/* Compile-time lock: Severity values ≡ tv severity keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSeverity: AssertExact<\n Severity,\n NonNullable<VariantProps<typeof toastSimpleVariants>['severity']>\n> = true;\nvoid _assertSeverity;\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface AlertProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n /** The body text below the title. Rich content → the `description` slot. */\n description?: string;\n /** The right-side action slot (typically Button(s)). Rich content → the `actions` slot. */\n actions?: string;\n /** The accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport AlertSimple from '../alertSimple/AlertSimple.vue';\n\nconst CloseIcon = X;\n\n/**\n * Slotted Alert — Icon + Title + Description + Actions on top of `AlertSimple`.\n * Pair: `AlertSimple` (atom, free-form children) + `Alert` (this molecule).\n *\n * Each of React's four `ReactNode` props keeps its string form and gains a\n * same-named slot for rich content; the slot wins when both are supplied.\n */\ndefineOptions({ name: 'Alert', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<AlertProps>(), { closeLabel: 'Dismiss' });\n\n/** Replaces React's `onClose`; omitting `@close` omits the close button. */\nconst emit = defineEmits<{\n /** Fires when the close button is activated. */\n close: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst inner = useTemplateRef<InstanceType<typeof AlertSimple>>('inner');\n\n/**\n * Mirrors React's `onClose && <button/>` guard — the close button renders only\n * when the consumer bound `@close`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasClose = () => Boolean(instance?.vnode.props?.onClose);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() => cn('flex items-start gap-3', attrs.class as string | undefined));\n\nconst descriptionClasses = computed(() =>\n cn('text-sm', hasTitle.value && 'mt-0.5 opacity-90'),\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/** Re-exposes the underlying `AlertSimple` root element, matching React's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <AlertSimple ref=\"inner\" :severity=\"props.severity\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasIcon\" class=\"mt-0.5 shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"hasTitle\" class=\"font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div v-if=\"hasDescription\" :class=\"descriptionClasses\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n <div v-if=\"hasActions\" class=\"mt-2 flex flex-wrap items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n <slot />\n </div>\n <button\n v-if=\"hasClose()\"\n type=\"button\"\n :aria-label=\"props.closeLabel\"\n class=\"-mr-1 grid h-6 w-6 shrink-0 place-items-center rounded text-current opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n @click=\"emit('close')\"\n >\n <Icon :icon=\"CloseIcon\" :size=\"14\" />\n </button>\n </AlertSimple>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface BannerProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n /** The body text beside the title. Rich content → the `description` slot. */\n description?: string;\n /** The right-side action area (typically Button(s)). Rich content → the `actions` slot. */\n actions?: string;\n /** The accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport BannerSimple from '../bannerSimple/BannerSimple.vue';\n\nconst CloseIcon = X;\n\n/**\n * Slotted full-width banner. Pair with `BannerSimple` (atomic, free-form\n * children) when you don't need the structured slots.\n *\n * Each of React's four `ReactNode` props keeps its string form and gains a\n * same-named slot for rich content; the slot wins when both are supplied.\n */\ndefineOptions({ name: 'Banner', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<BannerProps>(), { closeLabel: 'Dismiss' });\n\n/** Replaces React's `onClose`; omitting `@close` omits the close button. */\nconst emit = defineEmits<{\n /** Fires when the close button is activated. */\n close: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst inner = useTemplateRef<InstanceType<typeof BannerSimple>>('inner');\n\n/**\n * Mirrors React's `onClose && <button/>` guard — the close button renders only\n * when the consumer bound `@close`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasClose = () => Boolean(instance?.vnode.props?.onClose);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() => cn('flex items-center gap-4', 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/** Re-exposes the underlying `BannerSimple` root element, matching React's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <BannerSimple ref=\"inner\" :severity=\"props.severity\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasIcon\" class=\"shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"flex min-w-0 flex-1 items-baseline gap-3\">\n <span v-if=\"hasTitle\" class=\"font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </span>\n <span v-if=\"hasDescription\" class=\"opacity-90\">\n <slot name=\"description\">{{ props.description }}</slot>\n </span>\n <slot />\n </div>\n <div v-if=\"hasActions\" class=\"flex shrink-0 items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n <button\n v-if=\"hasClose()\"\n type=\"button\"\n :aria-label=\"props.closeLabel\"\n class=\"-mr-2 grid h-7 w-7 shrink-0 place-items-center rounded text-current opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n @click=\"emit('close')\"\n >\n <Icon :icon=\"CloseIcon\" :size=\"16\" />\n </button>\n </BannerSimple>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface ToastProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n /** The body text below the title. Rich content → the `description` slot. */\n description?: string;\n /** The action area below the body. Rich content → the `actions` slot. */\n actions?: string;\n /** The accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport ToastSimple from '../toastSimple/ToastSimple.vue';\n\nconst CloseIcon = X;\n\n/**\n * Slotted toast — visual only (no queue / portal / lifecycle, those land\n * with `Toaster` at L5). Pair: `ToastSimple` (atomic) + `Toast` (molecule).\n *\n * Each of React's four `ReactNode` props keeps its string form and gains a\n * same-named slot for rich content; the slot wins when both are supplied.\n */\ndefineOptions({ name: 'Toast', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToastProps>(), { closeLabel: 'Dismiss' });\n\n/** Replaces React's `onClose`; omitting `@close` omits the close button. */\nconst emit = defineEmits<{\n /** Fires when the close button is activated. */\n close: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst inner = useTemplateRef<InstanceType<typeof ToastSimple>>('inner');\n\n/**\n * Mirrors React's `onClose && <button/>` guard — the close button renders only\n * when the consumer bound `@close`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasClose = () => Boolean(instance?.vnode.props?.onClose);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() => cn('flex items-start gap-3', attrs.class as string | undefined));\n\nconst descriptionClasses = computed(() =>\n cn('text-sm', hasTitle.value && 'mt-0.5 text-muted-foreground'),\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/** Re-exposes the underlying `ToastSimple` root element, matching React's forwarded ref. */\nconst el = computed(() => inner.value?.el ?? null);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <ToastSimple ref=\"inner\" :severity=\"props.severity\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasIcon\" class=\"mt-0.5 shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"hasTitle\" class=\"font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div v-if=\"hasDescription\" :class=\"descriptionClasses\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n <div v-if=\"hasActions\" class=\"mt-2 flex flex-wrap items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n <slot />\n </div>\n <button\n v-if=\"hasClose()\"\n type=\"button\"\n :aria-label=\"props.closeLabel\"\n class=\"-mr-1 grid h-6 w-6 shrink-0 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n @click=\"emit('close')\"\n >\n <Icon :icon=\"CloseIcon\" :size=\"14\" />\n </button>\n </ToastSimple>\n</template>\n","<script lang=\"ts\">\nimport type { Severity } from '../../../foundation/utils';\n\nexport interface CalloutProps {\n /** The semantic severity palette. */\n severity?: Severity;\n /** The optional leading icon. Rich content → the `icon` slot. */\n icon?: string;\n /** The bold heading line. Rich content → the `title` slot. */\n title?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Severity as SeverityToken } from '../../../foundation/utils';\n\nconst SEVERITY: Record<Severity, string> = {\n info: 'border-l-info text-foreground',\n success: 'border-l-success text-foreground',\n warning: 'border-l-warning text-foreground',\n danger: 'border-l-destructive text-foreground',\n neutral: 'border-l-border text-foreground',\n};\n\n/**\n * Quieter cousin of `Alert` — colored left rule, no fill. Use for inline\n * doc-style notes, supplementary content (think MDX callouts).\n *\n * React's `children` becomes the default slot; `icon` / `title` keep their\n * string form and gain same-named slots for rich content.\n */\ndefineOptions({ name: 'Callout', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CalloutProps>(), { severity: SeverityToken.Info });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\n\nconst classes = computed(() =>\n cn(\n 'flex items-start gap-3 rounded-md border-l-4 bg-card px-4 py-3 text-sm',\n SEVERITY[props.severity],\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\">\n <span v-if=\"hasIcon\" class=\"mt-0.5 shrink-0\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"hasTitle\" class=\"mb-0.5 font-medium\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <slot />\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { SpinnerProps } from '../spinner/Spinner.vue';\n\nexport interface InlineSpinnerProps {\n size?: SpinnerProps['size'];\n tone?: SpinnerProps['tone'];\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport Spinner from '../spinner/Spinner.vue';\n\n/**\n * Spinner + label inline. Drops cleanly into buttons, list rows, anywhere\n * a \"loading…\" affordance is needed mid-flow.\n *\n * React's `children` (default `\"Loading…\"`) becomes the default slot with the\n * same fallback content.\n */\ndefineOptions({ name: 'InlineSpinner', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<InlineSpinnerProps>(), { size: 'sm', tone: 'default' });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst classes = computed(() =>\n cn(\n 'inline-flex items-center gap-2 text-sm text-muted-foreground',\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 <span ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <Spinner :size=\"props.size\" :tone=\"props.tone\" />\n <slot>Loading…</slot>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\nexport interface LoadingStateProps {\n /** The heading copy. Default `\"Loading…\"`. Rich content → the `title` slot. */\n title?: string;\n\n /** The body text below the title. Rich content → the `description` slot. */\n description?: string;\n\n /** The size of the spinner. Default `lg`. */\n size?: Size;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\nimport Spinner from '../spinner/Spinner.vue';\n\n/**\n * Centered loading affordance for full sections / pages — Spinner + title +\n * description stacked. Use inline `InlineSpinner` for in-row loading.\n *\n * `role=\"status\"` is the live-region contract; bound before `v-bind=\"rest\"`\n * so a caller-supplied `role` still wins.\n */\ndefineOptions({ name: 'LoadingState', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<LoadingStateProps>(), {\n title: 'Loading…',\n size: SizeToken.Lg,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasTitle = computed(() => Boolean(props.title) || Boolean(slots.title));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\nconst classes = computed(() =>\n cn(\n 'flex flex-col items-center justify-center gap-3 py-12 text-center',\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\" role=\"status\" v-bind=\"rest\" :class=\"classes\">\n <Spinner :size=\"props.size\" tone=\"brand\" />\n <div v-if=\"hasTitle\" class=\"text-sm font-medium text-foreground\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"text-sm text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Orientation } from '../../../foundation/utils';\n\nexport interface ProgressStepsProps {\n /** The step labels in order. */\n steps: ReadonlyArray<string>;\n\n /** The index of the active step (0-based). Steps before are marked complete. */\n current: number;\n\n /** The layout direction. Default `horizontal`. */\n orientation?: Orientation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { Check } from 'lucide-vue-next';\nimport { cn, Orientation as OrientationToken } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\nconst CheckIcon = Check;\n\n/**\n * Visual N-of-M progress dots / pills with connectors. No state machine —\n * the consumer drives `current`. For full wizard-with-content semantics use\n * the L5 `Stepper` organism.\n */\ndefineOptions({ name: 'ProgressSteps', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ProgressStepsProps>(), {\n orientation: OrientationToken.Horizontal,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLOListElement>('el');\n\nconst isHorizontal = computed(() => props.orientation === OrientationToken.Horizontal);\n\nconst classes = computed(() =>\n cn(\n 'flex',\n isHorizontal.value ? 'flex-row items-center gap-2' : 'flex-col gap-3',\n attrs.class as string | undefined,\n ),\n);\n\n/** The per-index step status, driving both the marker and the connector tone. */\nconst statusAt = (i: number) => (i < props.current ? 'complete' : i === props.current ? 'current' : 'upcoming');\n\nconst itemClasses = (i: number) =>\n cn('flex items-center gap-2', isHorizontal.value && i < props.steps.length - 1 && 'flex-1');\n\nconst markerClasses = (i: number) => {\n const status = statusAt(i);\n return cn(\n 'grid h-7 w-7 place-items-center rounded-full text-xs font-medium',\n status === 'complete' && 'bg-primary text-primary-foreground',\n status === 'current' && 'border-2 border-primary text-primary',\n status === 'upcoming' && 'border border-border text-muted-foreground',\n );\n};\n\nconst labelClasses = (i: number) =>\n cn('text-sm', statusAt(i) === 'upcoming' ? 'text-muted-foreground' : 'text-foreground');\n\nconst connectorClasses = (i: number) => cn('h-px flex-1', i < props.current ? 'bg-primary' : 'bg-border');\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 <ol ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <li v-for=\"(label, i) in props.steps\" :key=\"i\" :class=\"itemClasses(i)\">\n <span :class=\"markerClasses(i)\" :aria-current=\"statusAt(i) === 'current' ? 'step' : undefined\">\n <Icon v-if=\"statusAt(i) === 'complete'\" :icon=\"CheckIcon\" :size=\"14\" />\n <template v-else>{{ i + 1 }}</template>\n </span>\n <span :class=\"labelClasses(i)\">{{ label }}</span>\n <span\n v-if=\"isHorizontal && i < props.steps.length - 1\"\n :class=\"connectorClasses(i)\"\n aria-hidden=\"true\"\n />\n </li>\n </ol>\n</template>\n","<script lang=\"ts\">\nimport type { StatusTone } from '../../../foundation/utils';\n\nexport interface StatusIndicatorProps {\n /** The semantic status tone. */\n tone?: StatusTone;\n\n /**\n * The bold first-line label (e.g. \"All systems normal\"). Rich content → the\n * `label` slot. Required in React; optional here so the slot form is usable —\n * supply one or the other.\n */\n label?: string;\n\n /** The smaller secondary line (e.g. \"Updated 2m ago\"). Rich content → the `description` slot. */\n description?: string;\n\n /** The optional pulsing ring for \"live\" indication. */\n hasPulse?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, StatusTone as StatusToneToken } from '../../../foundation/utils';\n\nconst TONE: Record<StatusTone, string> = {\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-info',\n neutral: 'bg-muted-foreground',\n};\n\n/**\n * Two-line status indicator — colored dot + bold label + smaller helper.\n * Use on monitoring / status pages. For an inline single-line indicator use\n * `display/Status`.\n */\ndefineOptions({ name: 'StatusIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<StatusIndicatorProps>(), { tone: StatusToneToken.Success });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\nconst dotClasses = computed(() => cn('inline-block h-2.5 w-2.5 rounded-full', TONE[props.tone]));\n\nconst pulseClasses = computed(() =>\n cn('absolute inset-0 inline-block rounded-full opacity-75 animate-ping', TONE[props.tone]),\n);\n\nconst classes = computed(() =>\n cn('flex items-start gap-3', 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\">\n <span class=\"relative mt-1 inline-flex\">\n <span :class=\"dotClasses\" />\n <span v-if=\"props.hasPulse\" :class=\"pulseClasses\" />\n </span>\n <div class=\"min-w-0 flex-1\">\n <div class=\"text-sm font-medium text-foreground\">\n <slot name=\"label\">{{ props.label }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"text-xs text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\nexport interface MeterBarProps {\n /** The current value 0–`max`. */\n value: number;\n max?: number;\n /** The threshold values that change the fill tone. Pass `[good, warn]` —\n * `value <= good` → success, `<= warn` → warning, otherwise destructive.\n * Defaults: `[max * 0.7, max * 0.9]`. */\n thresholds?: [number, number];\n\n /** The bar thickness. */\n size?: Size;\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\n\n/* Only the sm/md/lg steps carry a thickness; other `Size` members fall through\n to the `md` default at the lookup below. */\nconst SIZE: Partial<Record<Size, string>> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n};\n\n/**\n * Like `ProgressBar` but the fill color reflects threshold zones — green /\n * amber / red. Use for usage gauges, capacity, score meters.\n */\ndefineOptions({ name: 'MeterBar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<MeterBarProps>(), { max: 100, size: SizeToken.Md });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst tone = computed(() => {\n const [good, warn] = props.thresholds ?? [props.max * 0.7, props.max * 0.9];\n return props.value <= good ? 'bg-success' : props.value <= warn ? 'bg-warning' : 'bg-destructive';\n});\n\nconst pct = computed(() => Math.min(100, Math.max(0, (props.value / props.max) * 100)));\n\nconst classes = computed(() =>\n cn(\n 'w-full overflow-hidden rounded-full bg-muted',\n SIZE[props.size] ?? SIZE.md,\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\n ref=\"el\"\n role=\"meter\"\n :aria-label=\"props.label\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :aria-valuenow=\"props.value\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <div\n :class=\"cn('h-full rounded-full transition-[width] duration-300', tone)\"\n :style=\"{ width: `${pct}%` }\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\nexport interface TrendIndicatorProps {\n /** The numeric delta — sign drives direction. */\n value: number;\n\n /** The optional value formatter (default: `${sign}${value}%`). Rich content → the `value` slot. */\n format?: (value: number) => string;\n\n /** The inverse-direction flag — when `true`, an increase reads as bad (e.g. error rate, churn). */\n isInverse?: boolean;\n\n /** The small trailing label, e.g. \"vs last week\". Rich content → the `label` slot. */\n label?: string;\n\n /** The text + icon scale. */\n size?: Size;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { Minus, TrendingDown, TrendingUp } from 'lucide-vue-next';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\n/* Only xs/sm/md carry a scale; other `Size` members fall through to `md` at\n the lookup below. */\nconst SIZE_TEXT: Partial<Record<Size, string>> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n};\nconst SIZE_ICON: Partial<Record<Size, number>> = {\n xs: 12,\n sm: 14,\n md: 16,\n};\n\nconst ARROW = {\n up: TrendingUp,\n down: TrendingDown,\n flat: Minus,\n};\n\n/**\n * Up / down / flat arrow + value + optional label. Used inside `Stat` and\n * dashboard tiles. Pass `isInverse` for metrics where higher is worse.\n */\ndefineOptions({ name: 'TrendIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TrendIndicatorProps>(), { size: SizeToken.Sm });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst direction = computed<'up' | 'down' | 'flat'>(() =>\n props.value > 0 ? 'up' : props.value < 0 ? 'down' : 'flat',\n);\n\nconst positive = computed(() =>\n direction.value === 'flat' ? false : (direction.value === 'up') !== Boolean(props.isInverse),\n);\n\nconst tone = computed(() =>\n direction.value === 'flat'\n ? 'text-muted-foreground'\n : positive.value\n ? 'text-success'\n : 'text-destructive',\n);\n\nconst arrow = computed(() => ARROW[direction.value]);\n\nconst display = computed(() =>\n props.format ? props.format(props.value) : `${props.value > 0 ? '+' : ''}${props.value}%`,\n);\n\nconst iconSize = computed(() => SIZE_ICON[props.size] ?? SIZE_ICON.md);\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\n\nconst classes = computed(() =>\n cn(\n 'inline-flex items-center gap-1 font-medium',\n SIZE_TEXT[props.size] ?? SIZE_TEXT.md,\n tone.value,\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 <span ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <Icon :icon=\"arrow\" :size=\"iconSize\" />\n <slot name=\"value\" :value=\"props.value\" :display=\"display\">{{ display }}</slot>\n <span v-if=\"hasLabel\" class=\"text-muted-foreground\">\n <slot name=\"label\">{{ props.label }}</slot>\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { VNode } from 'vue';\nimport type { OverlayPosition } from '../../../foundation/utils';\nimport type { ToastSimpleVariants } from '../toastSimple/ToastSimple.variants';\n\nexport type ToastSeverity = NonNullable<ToastSimpleVariants['severity']>;\n\n/**\n * A renderable slice of a toast. React's `ReactNode` becomes `string | VNode`:\n * these travel through the imperative `toaster.toast()` payload, not through a\n * slot, so a caller who wants markup builds it with `h()`.\n */\nexport type ToastNode = string | VNode;\n\nexport interface ToastOptions {\n title?: ToastNode;\n description?: ToastNode;\n icon?: ToastNode;\n severity?: ToastSeverity;\n /** ms before auto-dismiss. Default: Toaster's `defaultDuration`. `Infinity` = sticky. */\n duration?: number;\n action?: ToastNode;\n /** Fully custom body — replaces the default `Toast` chrome (icon/title/description/close). The toast still animates + auto-dismisses; the content owns its own close via the returned id. */\n content?: ToastNode;\n /** Fired when the toast is removed — auto-dismiss, close button, `dismiss(id)`, or `dismissAll()` (NOT on a dedup-update). For undo cleanup / analytics. */\n onDismiss?: () => void;\n /** Dedup key — a `toast` whose `key` is already showing updates that toast in place (refreshing its timer) instead of stacking a duplicate. */\n key?: string;\n}\n\n/** Content for a `toaster.promise` phase — a title string, or a full partial options object. */\nexport type ToastContent = string | Partial<ToastOptions>;\n\n/** Options for `toaster.promise` — loading / success / error content (success + error may be a fn of the settled value). */\nexport interface ToastPromiseOptions<T> {\n loading: ToastContent;\n success: ToastContent | ((value: T) => ToastContent);\n error: ToastContent | ((err: unknown) => ToastContent);\n /** Auto-dismiss (ms) for the settled toast; defaults to the Toaster's `defaultDuration`. */\n duration?: number;\n}\n\nfunction normalizeContent(content: ToastContent): Partial<ToastOptions> {\n return typeof content === 'string' ? { title: content } : content;\n}\n\ninterface ToastEntry extends ToastOptions {\n id: string;\n /** Bumped on every `update` / dedup so the viewport can reset that toast's auto-dismiss timer. */\n nonce: number;\n}\n\ntype Listener = (toasts: ReadonlyArray<ToastEntry>) => void;\n\nclass ToasterStore {\n private items: ReadonlyArray<ToastEntry> = [];\n private listeners = new Set<Listener>();\n private idSeq = 0;\n\n toast(opts: ToastOptions): string {\n if (opts.key !== undefined) {\n const existing = this.items.find((t) => t.key === opts.key);\n if (existing) {\n this.update(existing.id, opts);\n return existing.id;\n }\n }\n const id = `t_${++this.idSeq}`;\n this.items = [...this.items, { id, ...opts, nonce: 0 }];\n this.emit();\n return id;\n }\n\n /** Merges a patch into an existing toast (content + severity + duration), refreshing its timer. */\n update(id: string, patch: Partial<ToastOptions>): void {\n this.items = this.items.map((t) => (t.id === id ? { ...t, ...patch, nonce: t.nonce + 1 } : t));\n this.emit();\n }\n\n /** Shows a sticky loading toast, then updates it in place to success / error when `promise` settles. Returns `promise`. */\n promise<T>(promise: Promise<T>, opts: ToastPromiseOptions<T>): Promise<T> {\n const id = this.toast({ ...normalizeContent(opts.loading), severity: 'info', duration: Infinity });\n const settle = (content: ToastContent, severity: ToastSeverity) =>\n this.update(id, { ...normalizeContent(content), severity, duration: opts.duration });\n promise.then(\n (value) => settle(typeof opts.success === 'function' ? opts.success(value) : opts.success, 'success'),\n (err) => settle(typeof opts.error === 'function' ? opts.error(err) : opts.error, 'danger'),\n );\n return promise;\n }\n\n dismiss(id: string): void {\n const entry = this.items.find((t) => t.id === id);\n this.items = this.items.filter((t) => t.id !== id);\n entry?.onDismiss?.();\n this.emit();\n }\n\n dismissAll(): void {\n const gone = this.items;\n this.items = [];\n for (const t of gone) t.onDismiss?.();\n this.emit();\n }\n\n subscribe(fn: Listener): () => void {\n this.listeners.add(fn);\n fn(this.items);\n return () => {\n this.listeners.delete(fn);\n };\n }\n\n private emit() {\n for (const fn of this.listeners) fn(this.items);\n }\n}\n\nexport const toaster = new ToasterStore();\n\n/**\n * The imperative toast API, bound to the app-wide store. Plain object rather\n * than React's `useMemo` — the store is a module singleton, so there is nothing\n * per-instance to memoize.\n */\nexport function useToaster() {\n return {\n toast: (opts: ToastOptions) => toaster.toast(opts),\n update: (id: string, patch: Partial<ToastOptions>) => toaster.update(id, patch),\n promise: <T,>(promise: Promise<T>, opts: ToastPromiseOptions<T>) => toaster.promise(promise, opts),\n dismiss: (id: string) => toaster.dismiss(id),\n dismissAll: () => toaster.dismissAll(),\n };\n}\n\nconst POSITION_CLASSES: Record<OverlayPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\n/**\n * Enter/exit animation per position, gated on `data-state` (set by `Presence`)\n * and `motion-safe:` so reduced-motion users get an instant swap. Corner\n * toasts slide along their horizontal edge; centered toasts slide along the\n * vertical axis they're anchored to. Exit anims are shorter (`--duration-fast`).\n */\nconst MOTION_CLASSES: Record<OverlayPosition, string> = {\n 'top-right':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-right) motion-safe:data-[state=closed]:animate-(--animate-slide-out-right) motion-reduce:animate-none',\n 'top-left':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-left) motion-safe:data-[state=closed]:animate-(--animate-slide-out-left) motion-reduce:animate-none',\n 'top-center':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-top) motion-safe:data-[state=closed]:animate-(--animate-slide-out-top) motion-reduce:animate-none',\n 'bottom-right':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-right) motion-safe:data-[state=closed]:animate-(--animate-slide-out-right) motion-reduce:animate-none',\n 'bottom-left':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-left) motion-safe:data-[state=closed]:animate-(--animate-slide-out-left) motion-reduce:animate-none',\n 'bottom-center':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-bottom) motion-safe:data-[state=closed]:animate-(--animate-slide-out-bottom) motion-reduce:animate-none',\n};\n\nexport interface ToasterProps {\n position?: OverlayPosition;\n max?: number;\n /** The default auto-dismiss delay in ms; per-toast `duration` overrides. Default 5000. `Infinity` to disable. */\n defaultDuration?: number;\n canPauseOnHover?: boolean;\n gap?: number;\n}\n\ninterface VisibleToast extends ToastEntry {\n resolvedDuration: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n defineComponent,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n useAttrs,\n watch,\n type PropType,\n} from 'vue';\nimport { cn, OverlayPosition as OverlayPositionToken } from '../../../foundation/utils';\nimport { Announce, Portal, Presence } from '../../../foundation/primitives';\nimport Toast from '../toast/Toast.vue';\n\n/** Renders a `ToastNode` — either a plain string or a caller-built VNode. */\nconst ToastNodeView = defineComponent({\n name: 'ToastNodeView',\n props: { node: { type: [String, Object] as PropType<ToastNode>, required: true } },\n setup: (nodeProps) => () => nodeProps.node,\n});\n\n/**\n * Viewport that subscribes to the global `toaster` store and renders toasts\n * via the L4 `Toast` molecule. Mount once, per app.\n *\n * React's `className` arrives as the ordinary `class` attr and lands on the\n * stack container, the same node it landed on in React.\n */\ndefineOptions({ name: 'Toaster', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToasterProps>(), {\n position: OverlayPositionToken.BottomRight,\n max: 5,\n defaultDuration: 5000,\n canPauseOnHover: true,\n gap: 8,\n});\n\nconst attrs = useAttrs();\n\nconst items = shallowRef<ReadonlyArray<ToastEntry>>([]);\nconst paused = ref(false);\n\n/* `useRef` counterparts — mutated across ticks, never rendered. */\nconst timers = new Map<string, number>();\nconst remaining = new Map<string, number>();\nconst startedAt = new Map<string, number>();\nconst nonces = new Map<string, number>();\n\nlet unsubscribe: (() => void) | undefined;\nonMounted(() => {\n unsubscribe = toaster.subscribe((next) => {\n items.value = next;\n });\n});\n\n// Visible window (FIFO).\nconst visible = computed<ReadonlyArray<VisibleToast>>(() =>\n items.value.slice(0, props.max).map((t) => ({\n ...t,\n resolvedDuration: t.duration ?? props.defaultDuration,\n })),\n);\nconst visibleIds = computed(() => new Set(visible.value.map((v) => v.id)));\n\n// Toasts that just left `visible` (dismissed, or pushed out of the FIFO\n// window) but must still play their exit animation. Kept mounted with\n// `data-state=\"closed\"` until `Presence` unmounts the child — the `@vue:unmounted`\n// hook below then prunes the entry here.\nconst exiting = shallowRef<ReadonlyArray<VisibleToast>>([]);\nlet prevVisible: ReadonlyArray<VisibleToast> = [];\n\nwatch(\n visibleIds,\n (ids) => {\n const gone = prevVisible.filter((p) => !ids.has(p.id));\n prevVisible = visible.value;\n const current = exiting.value;\n const known = new Set(current.map((e) => e.id));\n // Add newly-gone toasts; drop any that re-entered `visible`.\n const merged = [...current, ...gone.filter((g) => !known.has(g.id))].filter(\n (e) => !ids.has(e.id),\n );\n if (merged.length !== current.length || !merged.every((e, i) => e.id === current[i]?.id)) {\n exiting.value = merged;\n }\n },\n { immediate: true, flush: 'post' },\n);\n\nconst removeExiting = (id: string) => {\n exiting.value = exiting.value.filter((e) => e.id !== id);\n};\n\n// Visible (present) first, then the ones animating out.\nconst rendered = computed<Array<VisibleToast & { present: boolean }>>(() => [\n ...visible.value.map((v) => ({ ...v, present: true })),\n ...exiting.value.map((e) => ({ ...e, present: false })),\n]);\n\nconst latestTitle = computed(() => {\n const last = visible.value[visible.value.length - 1];\n if (typeof last?.title === 'string') return last.title;\n if (typeof last?.description === 'string') return last.description;\n return '';\n});\n\n// Schedule auto-dismiss timers.\nwatch(\n [items, () => props.max, () => props.defaultDuration, paused],\n () => {\n const ids = visibleIds.value;\n // Clear timers for items that are no longer visible.\n for (const [id, handle] of timers) {\n if (!ids.has(id)) {\n window.clearTimeout(handle);\n timers.delete(id);\n remaining.delete(id);\n startedAt.delete(id);\n }\n }\n for (const id of nonces.keys()) {\n if (!ids.has(id)) nonces.delete(id);\n }\n if (paused.value) return;\n // A content update / dedup bumps `nonce` — clear that toast's timer so it reschedules fresh.\n for (const v of visible.value) {\n const seen = nonces.get(v.id);\n if (seen !== undefined && seen !== v.nonce) {\n const handle = timers.get(v.id);\n if (handle !== undefined) window.clearTimeout(handle);\n timers.delete(v.id);\n remaining.delete(v.id);\n startedAt.delete(v.id);\n }\n nonces.set(v.id, v.nonce);\n }\n for (const v of visible.value) {\n if (v.resolvedDuration === Infinity) continue;\n if (timers.has(v.id)) continue;\n const left = remaining.get(v.id) ?? v.resolvedDuration;\n const handle = window.setTimeout(() => {\n toaster.dismiss(v.id);\n }, left);\n timers.set(v.id, handle);\n startedAt.set(v.id, Date.now());\n remaining.set(v.id, left);\n }\n },\n { immediate: true, flush: 'post' },\n);\n\n// Cleanup on unmount.\nonUnmounted(() => {\n unsubscribe?.();\n for (const handle of timers.values()) window.clearTimeout(handle);\n timers.clear();\n});\n\nconst handlePause = () => {\n if (!props.canPauseOnHover || paused.value) return;\n paused.value = true;\n for (const [id, handle] of timers) {\n window.clearTimeout(handle);\n const start = startedAt.get(id) ?? Date.now();\n const previous = remaining.get(id) ?? 0;\n const elapsed = Date.now() - start;\n remaining.set(id, Math.max(0, previous - elapsed));\n }\n timers.clear();\n};\n\nconst handleResume = () => {\n if (!props.canPauseOnHover || !paused.value) return;\n paused.value = false;\n};\n\nconst stackClasses = computed(() =>\n cn(\n 'pointer-events-none fixed z-toast flex flex-col',\n POSITION_CLASSES[props.position],\n attrs.class as string | undefined,\n ),\n);\n\nconst itemClasses = computed(() => cn('pointer-events-auto w-80', MOTION_CLASSES[props.position]));\n\n/** Vue does not auto-suffix numeric style values with `px` the way React does. */\nconst stackStyle = computed(() => ({ gap: `${props.gap}px` }));\n</script>\n\n<template>\n <Portal>\n <div\n v-if=\"rendered.length > 0\"\n aria-label=\"Notifications\"\n :style=\"stackStyle\"\n :class=\"stackClasses\"\n @mouseenter=\"handlePause\"\n @mouseleave=\"handleResume\"\n @focus=\"handlePause\"\n @blur=\"handleResume\"\n >\n <Presence v-for=\"t in rendered\" :key=\"t.id\" :is-present=\"t.present\">\n <!--\n `Presence` clones `data-state` onto this node and keeps it mounted\n until the exit animation ends; the `@vue:unmounted` hook is that\n \"exit finished\" signal (the read-only `Presence` API exposes no\n callback), replacing React's unmount-only `onRemoved` effect.\n -->\n <div :class=\"itemClasses\" @vue:unmounted=\"t.present ? undefined : removeExiting(t.id)\">\n <ToastNodeView v-if=\"t.content\" :node=\"t.content\" />\n <Toast v-else :severity=\"t.severity\" @close=\"toaster.dismiss(t.id)\">\n <template v-if=\"t.icon\" #icon><ToastNodeView :node=\"t.icon\" /></template>\n <template v-if=\"t.title\" #title><ToastNodeView :node=\"t.title\" /></template>\n <template v-if=\"t.description\" #description>\n <ToastNodeView :node=\"t.description\" />\n </template>\n <template v-if=\"t.action\" #actions><ToastNodeView :node=\"t.action\" /></template>\n </Toast>\n </div>\n </Presence>\n </div>\n <Announce politeness=\"polite\">{{ latestTitle }}</Announce>\n </Portal>\n</template>\n","<script lang=\"ts\">\nimport type { FeedbackBus, PublishedNotice } from '../../../feedback';\nimport type { ToasterProps, ToastOptions } from '../toaster';\n\n/**\n * The prop surface of `FeedbackToasts` — `bus`, plus every `Toaster` prop.\n *\n * The `ToasterProps` heritage is marked `@vue-ignore` so only `bus` becomes a\n * runtime prop and the rest arrive as attrs; the template hands those to\n * `<Toaster>`, which declares them and resolves them back into props. Consumers\n * still get the full checked surface, because the heritage is real to\n * TypeScript — it is only the SFC compiler's runtime-props pass that skips it.\n */\nexport interface FeedbackToastsProps extends /* @vue-ignore */ ToasterProps {\n /** The bus to render. Default: the app-wide `feedbackBus` singleton (what `notify()` publishes on). */\n bus?: FeedbackBus;\n}\n\n/** Maps a bus notice onto the imperative toast payload. `NoticeTone` is a subset of the toast `Severity` vocabulary, and `NoticeNode` is `ToastNode` — drift in either is a compile error. */\nfunction toToastOptions(notice: PublishedNotice): ToastOptions {\n return {\n title: notice.title,\n description: notice.description,\n severity: notice.tone,\n duration: notice.durationMs,\n action: notice.action,\n };\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, watch } from 'vue';\nimport { feedbackBus } from '../../../feedback';\nimport Toaster from '../toaster/Toaster.vue';\nimport { toaster } from '../toaster';\n\n/**\n * The `/feedback` bus → `Toaster` adapter: subscribes to the bus and forwards every notice into\n * the imperative `toaster.toast()` API, rendering the toast viewport itself (all `ToasterProps`\n * pass through). Mount once per app **in place of** a bare `<Toaster/>` — mounting both would\n * render every toast twice. Explicit opt-in wiring: nothing toasts until this (or another\n * subscriber) is mounted; notices published before mount are dropped, so mount it at the app root.\n */\ndefineOptions({ name: 'FeedbackToasts', inheritAttrs: false });\n\nconst props = defineProps<FeedbackToastsProps>();\n\nconst attrs = useAttrs();\n\n/** React defaulted this in the destructure; a `computed` keeps the fallback reactive so a swapped `bus` re-subscribes. */\nconst bus = computed(() => props.bus ?? feedbackBus);\n\n/*\n * React's `useEffect(() => bus.subscribe(...), [bus])`: `onCleanup` receives the\n * unsubscribe, so a changed `bus` drops the old subscription before opening the\n * new one, and scope disposal drops the last.\n */\nwatch(\n bus,\n (current, _previous, onCleanup) => {\n // Client-only, as the effect was: a server render has no viewport to forward into.\n if (typeof document === 'undefined') return;\n onCleanup(\n current.subscribe((notice) => {\n toaster.toast(toToastOptions(notice));\n }),\n );\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <!-- Every non-`bus` attr is a `Toaster` prop by construction — see `FeedbackToastsProps`. -->\n <Toaster v-bind=\"attrs\" />\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\nimport type { SpinnerTone } from '../spinner/Spinner.variants';\n\nexport interface LoadingOverlayProps {\n /** The mount state. Default `true`. */\n isOpen?: boolean;\n\n /** The caption under the spinner. Default `\"Loading…\"`. Rich content → the `label` slot. */\n label?: string;\n\n /** The inline-positioning toggle — positions the scrim absolutely inside the parent (parent must be `position: relative`). */\n isInline?: boolean;\n\n /** The backdrop-blur toggle. */\n hasBlur?: boolean;\n\n /** The spinner diameter step. Default `lg`. */\n spinnerSize?: Size;\n\n /** The spinner color tone. Default `brand`. */\n spinnerTone?: SpinnerTone;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\nimport { Presence } from '../../../foundation/primitives';\nimport Backdrop from '../../overlays/backdrop/Backdrop.vue';\nimport Spinner from '../spinner/Spinner.vue';\nimport { SpinnerTone as SpinnerToneToken } from '../spinner/Spinner.variants';\n\n/**\n * Scrim + centered spinner — blocks interaction with a region during a long task.\n * `isInline` scopes the scrim to a `position: relative` parent; default covers the\n * viewport via `Backdrop`.\n *\n * React split the scrim into a `forwardRef` `LoadingScrim` so the two branches\n * could share it and `Presence` had a spreadable node to clone. Vue's `Presence`\n * clones whatever single element it is given, so the two branches collapse into\n * one `<div>` whose position/elevation classes switch on `isInline` — same DOM,\n * one component fewer.\n */\ndefineOptions({ name: 'LoadingOverlay', inheritAttrs: false });\n\n/** Extra content below the label — React's `children`. */\ndefineSlots<{ default?(): unknown; label?(): unknown }>();\n\nconst props = withDefaults(defineProps<LoadingOverlayProps>(), {\n isOpen: true,\n label: 'Loading…',\n isInline: false,\n hasBlur: false,\n spinnerSize: SizeToken.Lg,\n spinnerTone: SpinnerToneToken.Brand,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\n\n/** React fell back to `\"Loading\"` whenever `label` was not a plain string; here the same guard covers a caller who blanks the caption. */\nconst spinnerLabel = computed(() => props.label || 'Loading');\n\n/*\n * `data-state` is injected by <Presence>; the fade tokens are gated on it so\n * enter plays on mount and exit plays before Presence defers the unmount.\n * The inline scrim carries the tint and the blur itself; the viewport one is\n * click-through and leaves both to the portalled `Backdrop` behind it.\n */\nconst classes = computed(() =>\n cn(\n 'flex flex-col items-center justify-center gap-3',\n 'motion-safe:data-[state=open]:animate-(--animate-fade-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-fade-out)',\n 'motion-reduce:animate-none',\n props.isInline\n ? ['absolute inset-0 z-banner bg-background/70', props.hasBlur && 'backdrop-blur-sm']\n : 'fixed inset-0 z-modal pointer-events-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 <!-- `Backdrop` self-wraps in `Presence`; driving `is-open` with `isOpen` lets its\n fade-out play before it defers its own unmount. -->\n <Backdrop\n v-if=\"!props.isInline\"\n :is-open=\"props.isOpen\"\n :is-blurred=\"props.hasBlur\"\n class=\"bg-background/70\"\n />\n <Presence :is-present=\"props.isOpen\">\n <div ref=\"el\" role=\"status\" v-bind=\"rest\" :class=\"classes\">\n <Spinner :size=\"props.spinnerSize\" :tone=\"props.spinnerTone\" :label=\"spinnerLabel\" />\n <div v-if=\"hasLabel\" class=\"text-sm text-foreground\">\n <slot name=\"label\">{{ props.label }}</slot>\n </div>\n <slot />\n </div>\n </Presence>\n</template>\n","<script lang=\"ts\">\nimport type { OverlayPosition } from '../../../foundation/utils';\n\nexport interface UndoBarProps {\n isOpen: boolean;\n /** The snackbar copy. Rich content → the `message` slot. Required in React; optional here so the slot form is usable — supply one or the other. */\n message?: string;\n undoLabel?: string;\n /** The auto-dismiss delay in ms; `Infinity` = sticky. Default 5000. */\n duration?: number;\n canPauseOnHover?: boolean;\n position?: OverlayPosition;\n hasCountdown?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onUnmounted, ref, useAttrs, watch } from 'vue';\nimport { cn, OverlayPosition as OverlayPositionToken, surfaceVariants } from '../../../foundation/utils';\nimport { Portal, Presence } from '../../../foundation/primitives';\n\nconst POSITION: Record<OverlayPosition, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n};\n\n/**\n * Snackbar with a single \"Undo\" action. Auto-dismisses after `duration`;\n * pause-on-hover preserves remaining time. For multi-toast queues use the L5\n * `Toaster` instead.\n *\n * React's `className` arrives as the ordinary `class` attr and is merged onto\n * the panel, not the positioning wrapper — the same node it landed on in React.\n */\ndefineOptions({ name: 'UndoBar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<UndoBarProps>(), {\n undoLabel: 'Undo',\n duration: 5000,\n canPauseOnHover: true,\n position: OverlayPositionToken.BottomCenter,\n hasCountdown: false,\n});\n\nconst emit = defineEmits<{\n /** Replaces React's `onOpenChange`. Fires with `false` on auto-dismiss and after undo. */\n 'open-change': [open: boolean];\n /** Replaces React's `onUndo`; omitting `@undo` omits the undo button. */\n undo: [];\n}>();\n\nconst attrs = useAttrs();\nconst instance = getCurrentInstance();\n\n/**\n * Mirrors React's `onUndo && <button/>` guard — the undo button renders only\n * when the consumer bound `@undo`. Read through a call, not a cached computed:\n * `instance.vnode` is replaced on every re-render.\n */\nconst hasUndo = () => Boolean(instance?.vnode.props?.onUndo);\n\nconst progress = ref(1);\nconst paused = ref(false);\n\n/* `useRef` counterparts — read/written across ticks, never rendered. */\nlet start = 0;\nlet remaining = props.duration;\nlet raf: number | null = null;\n\n/**\n * The React `useEffect` timer, dep-for-dep: `[isOpen, duration, paused, hasCountdown]`.\n * `flush: 'post'` is the `useEffect` analogue, and `onCleanup` replays the\n * teardown that banks the elapsed time back into `remaining`.\n */\nwatch(\n [() => props.isOpen, () => props.duration, paused, () => props.hasCountdown],\n ([isOpen, duration, isPaused, hasCountdown], _previous, onCleanup) => {\n if (!isOpen) {\n remaining = duration;\n progress.value = 1;\n return;\n }\n if (duration === Infinity) {\n progress.value = 1;\n return;\n }\n if (isPaused) return;\n /* `immediate: true` runs this watcher on the server too, and an UndoBar is rendered\n `is-open`. Neither `window` nor `requestAnimationFrame` exists there — start no clock;\n the same watcher arms it on the client, where the countdown is the only thing it drives. */\n if (typeof window === 'undefined' || typeof requestAnimationFrame === 'undefined') return;\n\n start = performance.now();\n if (!hasCountdown) {\n // No visible countdown — a single timeout, no per-frame re-renders.\n const handle = window.setTimeout(() => {\n emit('open-change', false);\n }, remaining);\n onCleanup(() => {\n window.clearTimeout(handle);\n const elapsed = performance.now() - start;\n remaining = Math.max(0, remaining - elapsed);\n });\n return;\n }\n const tick = (now: number) => {\n const elapsed = now - start;\n const left = Math.max(0, remaining - elapsed);\n progress.value = left / duration;\n if (left <= 0) {\n emit('open-change', false);\n return;\n }\n raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n onCleanup(() => {\n if (raf != null) cancelAnimationFrame(raf);\n const elapsed = performance.now() - start;\n remaining = Math.max(0, remaining - elapsed);\n });\n },\n { immediate: true, flush: 'post' },\n);\n\nonUnmounted(() => {\n if (raf != null) cancelAnimationFrame(raf);\n});\n\nconst setPaused = (value: boolean) => {\n if (props.canPauseOnHover) paused.value = value;\n};\n\nconst onUndoClick = () => {\n emit('undo');\n emit('open-change', false);\n};\n\nconst wrapperClasses = computed(() => cn('fixed z-toast', POSITION[props.position]));\n\n/**\n * `Presence` clones `data-state` onto this node, and the enter/exit tokens are\n * gated on it. slide-in-bottom/out-bottom carry their own fade; `motion-safe`\n * so reduced-motion users get no movement.\n */\nconst panelClasses = computed(() =>\n cn(\n 'relative flex items-center gap-3 overflow-hidden text-sm',\n surfaceVariants({ variant: 'surface', radius: 'md', padding: 'sm', elevation: 3 }),\n 'px-4 py-2.5',\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-bottom)',\n 'motion-safe:data-[state=closed]:animate-(--animate-slide-out-bottom)',\n 'motion-reduce:animate-none',\n attrs.class as string | undefined,\n ),\n);\n\nconst showCountdown = computed(() => props.hasCountdown && props.duration !== Infinity);\n</script>\n\n<template>\n <!--\n Static positioning wrapper holds the fixed corner + (for `*-center`) the\n centering `-translate-x-1/2`; the inner panel carries the slide keyframe,\n whose own `translateY` would otherwise clobber that centering translate if\n both sat on one node. `Portal` stays mounted; `Presence` owns the panel's\n mount so the exit (slide-out + fade) plays before unmount, cloning\n `data-state` onto the panel for its motion.\n -->\n <Portal>\n <div :class=\"wrapperClasses\">\n <Presence :is-present=\"props.isOpen\">\n <div\n role=\"status\"\n aria-live=\"polite\"\n :class=\"panelClasses\"\n @mouseenter=\"setPaused(true)\"\n @mouseleave=\"setPaused(false)\"\n @focus=\"setPaused(true)\"\n @blur=\"setPaused(false)\"\n >\n <span class=\"flex-1\">\n <slot name=\"message\">{{ props.message }}</slot>\n </span>\n <button\n v-if=\"hasUndo()\"\n type=\"button\"\n class=\"font-medium text-primary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm px-1\"\n @click=\"onUndoClick\"\n >\n {{ props.undoLabel }}\n </button>\n <div v-if=\"showCountdown\" class=\"absolute bottom-0 left-0 h-0.5 w-full bg-border\">\n <div\n class=\"h-full bg-primary transition-[width] duration-100 ease-linear\"\n :style=\"{ width: `${progress * 100}%` }\"\n />\n </div>\n </div>\n </Presence>\n </div>\n </Portal>\n</template>\n","<script lang=\"ts\">\nimport { inject, type InjectionKey } from 'vue';\n\nexport interface OnboardingContextValue {\n /** A live getter — read it, never destructure it. */\n readonly open: boolean;\n setOpen: (open: boolean) => void;\n}\n\n/**\n * The record a `OnboardingChecklistTask` hands the root on mount. `isDone` is a\n * live getter over the task's own prop, so the root's progress computeds track\n * it without the task re-registering on every toggle.\n */\nexport interface OnboardingTaskRecord {\n readonly isDone: boolean;\n}\n\nexport interface OnboardingRegistry {\n register: (task: OnboardingTaskRecord) => void;\n unregister: (task: OnboardingTaskRecord) => void;\n}\n\nexport const onboardingContextKey: InjectionKey<OnboardingContextValue> =\n Symbol('wow-two.onboardingChecklist');\n\n/**\n * Replaces React's `Children.toArray` + `isValidElement` child-walking, which\n * has no Vue counterpart: slots are functions, so the root cannot inspect its\n * children's props. Tasks register themselves instead.\n */\nexport const onboardingRegistryKey: InjectionKey<OnboardingRegistry> = Symbol(\n 'wow-two.onboardingChecklist.registry',\n);\n\nexport interface OnboardingChecklistProps {\n /** The card heading. Rich content → the `title` slot. */\n title?: string;\n defaultOpen?: boolean;\n canDismissOnComplete?: boolean;\n /** The delay in ms after 100% before unmounting. */\n dismissDelay?: number;\n}\n\nexport function useOnboardingChecklist(): OnboardingContextValue {\n const context = inject(onboardingContextKey, null);\n if (!context) throw new Error('useOnboardingChecklist must be used inside <OnboardingChecklist>');\n return context;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, shallowRef, useAttrs, useTemplateRef, watch } from 'vue';\nimport { ChevronDown } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\nconst ChevronDownIcon = ChevronDown;\n\n/**\n * Onboarding task card. The default slot holds `OnboardingChecklistTask`\n * components; progress is auto-derived from the `isDone` prop each one\n * registers with this root.\n */\ndefineOptions({ name: 'OnboardingChecklist', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<OnboardingChecklistProps>(), {\n title: 'Get started',\n defaultOpen: true,\n canDismissOnComplete: false,\n dismissDelay: 2000,\n});\n\nconst emit = defineEmits<{\n /** Replaces React's `onDismiss`. Fires once, `dismissDelay` ms after the last task completes. */\n dismiss: [];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst open = ref(props.defaultOpen);\nconst dismissed = ref(false);\n\nconst tasks = shallowRef<ReadonlyArray<OnboardingTaskRecord>>([]);\n\nprovide<OnboardingRegistry>(onboardingRegistryKey, {\n register: (task) => {\n if (!tasks.value.includes(task)) tasks.value = [...tasks.value, task];\n },\n unregister: (task) => {\n tasks.value = tasks.value.filter((existing) => existing !== task);\n },\n});\n\nprovide<OnboardingContextValue>(onboardingContextKey, {\n get open() {\n return open.value;\n },\n setOpen: (value: boolean) => {\n open.value = value;\n },\n});\n\nconst total = computed(() => tasks.value.length);\nconst done = computed(() => tasks.value.filter((task) => task.isDone).length);\nconst complete = computed(() => total.value > 0 && done.value === total.value);\n\nwatch(\n [complete, () => props.canDismissOnComplete, () => props.dismissDelay, dismissed],\n ([isComplete, canDismiss, delay, isDismissed], _previous, onCleanup) => {\n if (!canDismiss || !isComplete || isDismissed) return;\n const handle = window.setTimeout(() => {\n dismissed.value = true;\n emit('dismiss');\n }, delay);\n onCleanup(() => window.clearTimeout(handle));\n },\n { immediate: true, flush: 'post' },\n);\n\nconst classes = computed(() =>\n cn(\n 'overflow-hidden rounded-lg border border-border bg-card shadow-sm',\n attrs.class as string | undefined,\n ),\n);\n\nconst fillClasses = computed(() =>\n cn('h-full bg-primary transition-[width] duration-300', complete.value && 'bg-success'),\n);\n\nconst fillStyle = computed(() => ({\n width: total.value ? `${(done.value / total.value) * 100}%` : '0%',\n}));\n\nconst chevronClasses = computed(() =>\n cn('text-muted-foreground transition-transform', open.value && 'rotate-180'),\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 v-if=\"!dismissed\" ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <button\n type=\"button\"\n :aria-expanded=\"open\"\n class=\"flex w-full items-center gap-3 px-4 py-3 text-left transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n @click=\"open = !open\"\n >\n <div class=\"flex-1\">\n <div class=\"text-sm font-medium text-foreground\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n <div class=\"mt-1 text-xs text-muted-foreground\">{{ done }} of {{ total }} tasks complete</div>\n <div class=\"mt-2 h-1.5 overflow-hidden rounded-full bg-border\">\n <div :class=\"fillClasses\" :style=\"fillStyle\" />\n </div>\n </div>\n <Icon :icon=\"ChevronDownIcon\" :size=\"16\" :class=\"chevronClasses\" />\n </button>\n <!--\n Tasks register on mount, so they must stay mounted for `total` / `done` to\n be correct while collapsed — `v-show`, not `v-if`, unlike React's `{open && …}`\n which could re-derive counts from the children array without rendering them.\n -->\n <ul v-show=\"open\" role=\"list\" class=\"border-t border-border\">\n <slot />\n </ul>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface OnboardingChecklistTaskProps {\n /** The task label. Rich content → the `label` slot. Required in React; optional here so the slot form is usable — supply one or the other. */\n label?: string;\n /** The secondary line under the label. Rich content → the `description` slot. */\n description?: string;\n isDone?: boolean;\n /** The trailing call-to-action, hidden once done. Rich content → the `action` slot. */\n action?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onMounted, onUnmounted, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { Check } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport { onboardingRegistryKey, type OnboardingTaskRecord } from './OnboardingChecklist.vue';\n\nconst CheckIcon = Check;\n\n/** A single checklist row. Registers itself with the enclosing `OnboardingChecklist` so it counts toward progress. */\ndefineOptions({ name: 'OnboardingChecklistTask', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<OnboardingChecklistTaskProps>(), { isDone: false });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLLIElement>('el');\n\n/**\n * `isDone` is exposed as a getter so the root's progress computeds re-evaluate\n * on toggle without this task re-registering.\n */\nconst record: OnboardingTaskRecord = {\n get isDone() {\n return props.isDone;\n },\n};\n\nconst registry = inject(onboardingRegistryKey, null);\nonMounted(() => registry?.register(record));\nonUnmounted(() => registry?.unregister(record));\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasAction = computed(() => Boolean(props.action) || Boolean(slots.action));\n\nconst classes = computed(() =>\n cn(\n 'flex items-start gap-3 px-4 py-3 transition-colors',\n props.isDone && 'opacity-60',\n attrs.class as string | undefined,\n ),\n);\n\nconst markerClasses = computed(() =>\n cn(\n 'mt-0.5 grid h-5 w-5 shrink-0 place-items-center rounded-full border',\n props.isDone ? 'border-success bg-success text-success-foreground' : 'border-border',\n ),\n);\n\nconst labelClasses = computed(() =>\n cn('text-sm font-medium text-foreground', props.isDone && 'line-through'),\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 <li ref=\"el\" :data-done=\"props.isDone || undefined\" v-bind=\"rest\" :class=\"classes\">\n <span aria-hidden=\"true\" :class=\"markerClasses\">\n <Icon v-if=\"props.isDone\" :icon=\"CheckIcon\" :size=\"12\" />\n </span>\n <div class=\"min-w-0 flex-1\">\n <div :class=\"labelClasses\">\n <slot name=\"label\">{{ props.label }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"mt-0.5 text-xs text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n </div>\n <div v-if=\"hasAction && !props.isDone\" class=\"shrink-0\">\n <slot name=\"action\">{{ props.action }}</slot>\n </div>\n </li>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue';\n\n/** Defines the side a Tour tooltip is placed on, relative to its target. */\nexport const Placement = {\n /** Refers to placement above the target. */\n Top: 'top',\n /** Refers to placement to the right of the target. */\n Right: 'right',\n /** Refers to placement below the target. */\n Bottom: 'bottom',\n /** Refers to placement to the left of the target. */\n Left: 'left',\n} as const;\n\nexport type Placement = (typeof Placement)[keyof typeof Placement];\n\nexport interface TourStep {\n /** A CSS selector, or a template ref holding the element to spotlight. */\n target: string | Ref<HTMLElement | null>;\n title?: string;\n body?: string;\n placement?: Placement;\n}\n\nexport interface TourProps {\n isOpen?: boolean;\n defaultOpen?: boolean;\n steps: ReadonlyArray<TourStep>;\n currentStep?: number;\n defaultCurrentStep?: number;\n padding?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, shallowRef, watch } from 'vue';\nimport { cn, Key } from '../../../foundation/utils';\nimport { useControlled, useId, useReducedMotion } from '../../../foundation/hooks';\nimport { Announce, Portal, Presence } from '../../../foundation/primitives';\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nfunction rectFromTarget(target: TourStep['target']): Rect | null {\n const el = typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target.value;\n if (!el) return null;\n const r = el.getBoundingClientRect();\n return { top: r.top, left: r.left, width: r.width, height: r.height };\n}\n\nfunction placementCoords(rect: Rect, placement: NonNullable<TourStep['placement']>, gap = 12) {\n switch (placement) {\n case Placement.Top:\n return { top: rect.top - gap, left: rect.left + rect.width / 2, transform: 'translate(-50%, -100%)' };\n case Placement.Right:\n return { top: rect.top + rect.height / 2, left: rect.left + rect.width + gap, transform: 'translate(0, -50%)' };\n case Placement.Bottom:\n return { top: rect.top + rect.height + gap, left: rect.left + rect.width / 2, transform: 'translate(-50%, 0)' };\n case Placement.Left:\n return { top: rect.top + rect.height / 2, left: rect.left - gap, transform: 'translate(-100%, -50%)' };\n }\n}\n\n/**\n * Multi-step product tour. Renders an SVG mask with a cutout around each\n * step's target + a floating tooltip with Next / Prev / Skip / Done.\n *\n * `TourStep.title` / `.body` narrow React's `ReactNode` to `string`: steps are\n * plain data passed as a prop, not slot content, and the announcement already\n * required a string.\n */\ndefineOptions({ name: 'Tour', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TourProps>(), {\n /* `steps` stays declared-required — Vue still warns when it is missing — but a\n default keeps an absent (or transiently-undefined) value out of the indexed read\n in `step` below. Everything downstream already handles an absent step\n (`step.value?.…`, and the template gates on `v-if=\"mounted && step\"`). */\n steps: () => [],\n defaultOpen: false,\n defaultCurrentStep: 0,\n padding: 8,\n /* `isOpen` is the controlled-mode signal, and `useControlled` keys on `=== undefined`.\n A `boolean` prop is Boolean-castable, so without this explicit `undefined` Vue turns an\n ABSENT `isOpen` into `false` — which reads as \"controlled, and closed\", pinning the tour\n shut and making `defaultOpen` dead. `currentStep` needs no such default: `number` is not\n Boolean-castable, so it already arrives as `undefined`. */\n isOpen: undefined,\n});\n\nconst emit = defineEmits<{\n /** Replaces React's `onOpenChange`. */\n 'open-change': [open: boolean];\n /** Replaces React's `onStepChange`. */\n 'step-change': [index: number];\n /** Replaces React's `onComplete`. Fires when Done is pressed on the last step. */\n complete: [];\n /** Replaces React's `onSkip`. Fires on Skip and on Escape. */\n skip: [];\n}>();\n\nconst openCtl = useControlled<boolean>({\n controlled: () => props.isOpen,\n default: () => props.defaultOpen,\n onChange: (value) => emit('open-change', value),\n});\nconst stepCtl = useControlled<number>({\n controlled: () => props.currentStep,\n default: () => props.defaultCurrentStep,\n onChange: (value) => emit('step-change', value),\n});\n\nconst open = computed(() => openCtl.value.value);\nconst stepIndex = computed(() => stepCtl.value.value);\n\nconst rect = shallowRef<Rect | null>(null);\nconst titleId = useId('tour-title');\nconst descId = useId('tour-desc');\nconst maskId = useId('tour-mask');\nconst reducedMotion = useReducedMotion();\n\nconst step = computed(() => props.steps[stepIndex.value]);\n\n/* Keep the Portal (scrim + tooltip) mounted while the pop-out plays — the\n component hard-unmounts on `!open`, which would kill the exit. Opening\n flips this true synchronously; closing defers the unmount until the\n tooltip's exit animation ends (`@animationend` below). Under reduced\n motion no animation fires, so drop it on the next frame instead. */\nconst mounted = ref(open.value);\nwatch(\n [open, reducedMotion],\n ([isOpen, isReduced], _previous, onCleanup) => {\n if (isOpen) {\n mounted.value = true;\n return;\n }\n if (!isReduced) return;\n const raf = requestAnimationFrame(() => {\n mounted.value = false;\n });\n onCleanup(() => cancelAnimationFrame(raf));\n },\n { immediate: true, flush: 'post' },\n);\n\n// Update rect when step changes / window scrolls / resizes.\nwatch(\n [open, step],\n ([isOpen, currentStepValue], _previous, onCleanup) => {\n if (!isOpen || !currentStepValue) return;\n /* `immediate: true` runs this on the server too, where there is no rAF and no `window`.\n The spotlight rect is measured from live DOM, so there is nothing to compute there —\n bail, and let the same watcher measure on the client. */\n if (typeof requestAnimationFrame === 'undefined' || typeof window === 'undefined') return;\n\n const update = () => {\n rect.value = rectFromTarget(currentStepValue.target);\n };\n // Defer to next frame so the target can mount / scroll into view.\n const handle = requestAnimationFrame(update);\n\n window.addEventListener('resize', update, { passive: true });\n window.addEventListener('scroll', update, { passive: true, capture: true });\n onCleanup(() => {\n cancelAnimationFrame(handle);\n window.removeEventListener('resize', update);\n window.removeEventListener('scroll', update, true);\n });\n },\n { immediate: true, flush: 'post' },\n);\n\n// Escape handling.\nwatch(\n open,\n (isOpen, _previous, onCleanup) => {\n if (!isOpen) return;\n // Same `immediate: true` SSR pass — there is no `document` to listen on there.\n if (typeof document === 'undefined') return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === Key.Escape) {\n event.preventDefault();\n openCtl.setValue(false);\n emit('skip');\n }\n };\n document.addEventListener('keydown', onKey);\n onCleanup(() => document.removeEventListener('keydown', onKey));\n },\n { immediate: true, flush: 'post' },\n);\n\nconst goNext = () => {\n if (stepIndex.value >= props.steps.length - 1) {\n openCtl.setValue(false);\n emit('complete');\n } else {\n stepCtl.setValue(stepIndex.value + 1);\n }\n};\n\nconst goPrev = () => {\n if (stepIndex.value > 0) stepCtl.setValue(stepIndex.value - 1);\n};\n\nconst skip = () => {\n openCtl.setValue(false);\n emit('skip');\n};\n\nconst placement = computed(() => step.value?.placement ?? Placement.Bottom);\n\nconst tooltipCoords = computed(() =>\n rect.value ? placementCoords(rect.value, placement.value) : null,\n);\n\n/** Vue does not auto-suffix numeric style values with `px` the way React does. */\nconst tooltipStyle = computed(() => {\n const coords = tooltipCoords.value;\n if (!coords) return undefined;\n return {\n position: 'fixed' as const,\n top: `${coords.top}px`,\n left: `${coords.left}px`,\n transform: coords.transform,\n };\n});\n\nconst announcement = computed(() =>\n step.value?.title\n ? `Step ${stepIndex.value + 1} of ${props.steps.length}: ${step.value.title}`\n : '',\n);\n\nconst bodyClasses = computed(() =>\n cn('text-sm text-muted-foreground', step.value?.title && 'mt-1.5'),\n);\n\n/**\n * `Presence` clones `data-state` onto this node, so the pop (fade + slight\n * scale) runs gated on that state. `motion-safe` so reduced-motion users get\n * no movement.\n */\nconst tooltipClasses = cn(\n 'z-popover w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n 'motion-safe:data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-pop-out)',\n 'motion-reduce:animate-none',\n);\n\n/** Drops the Portal once the exit animation completes. */\nconst onTooltipAnimationEnd = () => {\n if (!open.value) mounted.value = false;\n};\n</script>\n\n<template>\n <Portal v-if=\"mounted && step\">\n <!-- SVG mask backdrop with cutout around target. Skipped while the\n target is unresolvable so a bare scrim never blocks the page.\n Gated on `open` (not `mounted`) so the scrim clears immediately on\n close while the tooltip plays its pop-out before unmount. -->\n <svg\n v-if=\"open && rect\"\n aria-hidden=\"true\"\n class=\"pointer-events-auto fixed inset-0 z-modal h-full w-full\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <mask :id=\"maskId\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n :x=\"rect.left - props.padding\"\n :y=\"rect.top - props.padding\"\n :width=\"rect.width + props.padding * 2\"\n :height=\"rect.height + props.padding * 2\"\n :rx=\"6\"\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill=\"rgba(0,0,0,0.55)\" :mask=\"`url(#${maskId})`\" />\n </svg>\n\n <!-- Tooltip — wrapped in `Presence` so its pop-out plays before the\n component unmounts. `Presence` clones `data-state` (\"open\" | \"closed\")\n onto the panel, so the pop tokens run gated on that state; the exit's\n `@animationend` drops `mounted`. -->\n <Presence v-if=\"tooltipCoords\" :is-present=\"open\">\n <div\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descId\"\n :style=\"tooltipStyle\"\n :class=\"tooltipClasses\"\n @animationend=\"onTooltipAnimationEnd\"\n >\n <div v-if=\"step.title\" :id=\"titleId\" class=\"text-sm font-semibold\">{{ step.title }}</div>\n <div v-if=\"step.body\" :id=\"descId\" :class=\"bodyClasses\">{{ step.body }}</div>\n <div class=\"mt-3 flex items-center justify-between gap-3\">\n <span class=\"text-xs text-muted-foreground\">\n {{ stepIndex + 1 }} / {{ props.steps.length }}\n </span>\n <div class=\"flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground hover:text-foreground\"\n @click=\"skip\"\n >\n Skip\n </button>\n <button\n v-if=\"stepIndex > 0\"\n type=\"button\"\n class=\"inline-flex h-7 items-center rounded-md border border-border bg-background px-2.5 text-xs font-medium hover:bg-muted\"\n @click=\"goPrev\"\n >\n Back\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n @click=\"goNext\"\n >\n {{ stepIndex >= props.steps.length - 1 ? 'Done' : 'Next' }}\n </button>\n </div>\n </div>\n </div>\n </Presence>\n\n <Announce politeness=\"polite\">{{ announcement }}</Announce>\n </Portal>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/utils';\n\n/** Defines the TypingIndicator dot tone. */\nexport const TypingTone = {\n /** Refers to the muted-foreground tone. */\n Muted: 'muted',\n /** Refers to the primary / brand tone. */\n Primary: 'primary',\n /** Refers to the full-emphasis foreground tone. */\n Foreground: 'foreground',\n} as const;\n\nexport type TypingTone = (typeof TypingTone)[keyof typeof TypingTone];\n\nexport interface TypingIndicatorProps {\n /** The optional name(s) of who is typing — rendered as a leading label. Rich content → the `who` slot. */\n who?: string;\n\n /** The visual size of the bouncing dots. */\n size?: Size;\n\n /** The color of the dots; defaults to muted. */\n tone?: TypingTone;\n\n /** The subtle-mode flag — tones down dot opacity at rest (between bounces). */\n isSubtle?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\n\n/* Only sm/md/lg carry a dot size; other `Size` members fall through to `md`. */\nconst SIZE: Partial<Record<Size, string>> = {\n sm: 'h-1 w-1',\n md: 'h-1.5 w-1.5',\n lg: 'h-2 w-2',\n};\n\nconst TONE: Record<TypingTone, string> = {\n muted: 'bg-muted-foreground',\n primary: 'bg-primary',\n foreground: 'bg-foreground',\n};\n\n/**\n * Three-dot \"someone is typing\" indicator. Honors `prefers-reduced-motion`\n * via Tailwind's `motion-safe:` / `motion-reduce:` modifiers — dots stay\n * visible at full opacity when motion is reduced.\n */\ndefineOptions({ name: 'TypingIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TypingIndicatorProps>(), {\n size: SizeToken.Md,\n tone: TypingTone.Muted,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst hasWho = computed(() => Boolean(props.who) || Boolean(slots.who));\n\nconst dot = computed(() =>\n cn(\n 'inline-block rounded-full motion-safe:animate-bounce',\n SIZE[props.size] ?? SIZE.md,\n TONE[props.tone],\n props.isSubtle && 'motion-safe:opacity-60',\n ),\n);\n\n/** Only the string `who` prop can name the typist; the slot form falls back to the generic label. */\nconst ariaLabel = computed(() => (props.who ? `${props.who} is typing` : 'Typing'));\n\nconst classes = computed(() =>\n cn('inline-flex items-center gap-2 text-xs text-muted-foreground', 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 <span ref=\"el\" role=\"status\" aria-live=\"polite\" :aria-label=\"ariaLabel\" v-bind=\"rest\" :class=\"classes\">\n <span v-if=\"hasWho\" class=\"truncate\">\n <slot name=\"who\">{{ props.who }}</slot>\n </span>\n <span class=\"inline-flex items-end gap-1\" aria-hidden=\"true\">\n <span :class=\"dot\" :style=\"{ animationDelay: '0ms' }\" />\n <span :class=\"dot\" :style=\"{ animationDelay: '150ms' }\" />\n <span :class=\"dot\" :style=\"{ animationDelay: '300ms' }\" />\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { CornerPosition, Size } from '../../../foundation/utils';\n\n/** Defines a person's presence state. */\nexport const PresenceStatus = {\n /** Refers to actively available. */\n Online: 'online',\n /** Refers to present but inactive. */\n Idle: 'idle',\n /** Refers to present but do-not-disturb. */\n Busy: 'busy',\n /** Refers to not connected. */\n Offline: 'offline',\n /** Refers to connected but appearing offline. */\n Invisible: 'invisible',\n} as const;\n\nexport type PresenceStatus = (typeof PresenceStatus)[keyof typeof PresenceStatus];\n\nexport interface PresenceIndicatorProps {\n status?: PresenceStatus;\n /** The dot diameter. */\n size?: Size;\n\n /** The pulsing-ring toggle (only meaningful for `online`). */\n hasPulse?: boolean;\n\n /** The corner position on a parent (use inside an Avatar wrapper). */\n position?: CornerPosition;\n\n /** The accessible-label override. Defaults to status name. */\n label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn, Size as SizeToken } from '../../../foundation/utils';\n\nconst STATUS_BG: Record<PresenceStatus, string> = {\n online: 'bg-success',\n idle: 'bg-warning',\n busy: 'bg-destructive',\n offline: 'bg-muted-foreground',\n invisible: 'bg-transparent border border-muted-foreground',\n};\n\n/* Only xs/sm/md/lg carry a dot size; other `Size` members fall through to `sm`. */\nconst SIZE: Partial<Record<Size, string>> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n};\n\nconst POS: Record<CornerPosition, string> = {\n 'top-right': 'absolute top-0 right-0',\n 'top-left': 'absolute top-0 left-0',\n 'bottom-right': 'absolute bottom-0 right-0',\n 'bottom-left': 'absolute bottom-0 left-0',\n};\n\nconst STATUS_LABEL: Record<PresenceStatus, string> = {\n online: 'Online',\n idle: 'Idle',\n busy: 'Busy',\n offline: 'Offline',\n invisible: 'Invisible',\n};\n\n/**\n * Colored dot encoding a person's presence (online / idle / busy / offline /\n * invisible). Includes a `ring-background` so it pops cleanly when overlaid\n * on an `Avatar`. Pass `position` to absolutely place on a positioned parent.\n */\ndefineOptions({ name: 'PresenceIndicator', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<PresenceIndicatorProps>(), {\n status: PresenceStatus.Online,\n size: SizeToken.Sm,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\nconst showPulse = computed(() => Boolean(props.hasPulse) && props.status === PresenceStatus.Online);\n\nconst classes = computed(() =>\n cn(\n 'inline-flex rounded-full ring-2 ring-background',\n STATUS_BG[props.status],\n SIZE[props.size] ?? SIZE.sm,\n props.position && POS[props.position],\n 'relative',\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 <span\n ref=\"el\"\n role=\"status\"\n :aria-label=\"props.label ?? STATUS_LABEL[props.status]\"\n :data-status=\"props.status\"\n v-bind=\"rest\"\n :class=\"classes\"\n >\n <span\n v-if=\"showPulse\"\n aria-hidden=\"true\"\n :class=\"cn('absolute inset-0 rounded-full opacity-75 motion-safe:animate-ping', STATUS_BG.online)\"\n />\n </span>\n</template>\n","<script lang=\"ts\">\nexport interface LiveCursorProps {\n /** The pixel offset from the parent's top-left corner. */\n x: number;\n y: number;\n /** The display name shown beside the pointer. Rich content → the `name` slot. */\n name?: string;\n\n /** The CSS color used for the pointer fill and label background. */\n color?: string;\n\n /** The smooth-movement toggle between updates. Defaults to true; auto-disables with reduced motion. */\n isSmooth?: boolean;\n\n /** The pixel offset for the label relative to the pointer. */\n labelOffset?: { x?: number; y?: number };\n\n /** The pointer-only toggle — hides the label and shows only the pointer. */\n isPointerOnly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef, type CSSProperties } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { useReducedMotion } from '../../../foundation/hooks';\n\n/**\n * Remote-user cursor for collaborative canvases. Wrap in a `relative` parent;\n * places itself absolutely at `(x, y)`, smoothing movement unless reduced-motion.\n */\ndefineOptions({ name: 'LiveCursor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<LiveCursorProps>(), {\n color: 'var(--color-primary)',\n isSmooth: true,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst reducedMotion = useReducedMotion();\nconst useTransition = computed(() => props.isSmooth && !reducedMotion.value);\n\nconst lx = computed(() => props.labelOffset?.x ?? 12);\nconst ly = computed(() => props.labelOffset?.y ?? 16);\n\nconst hasName = computed(() => Boolean(props.name) || Boolean(slots.name));\n\nconst wrapperStyle = computed<CSSProperties>(() => ({\n transform: `translate3d(${props.x}px, ${props.y}px, 0)`,\n transition: useTransition.value ? 'transform 80ms linear' : undefined,\n}));\n\nconst labelStyle = computed<CSSProperties>(() => ({\n backgroundColor: props.color,\n transform: `translate(${lx.value}px, ${ly.value}px)`,\n}));\n\nconst classes = computed(() =>\n cn(\n 'pointer-events-none absolute left-0 top-0 z-tooltip select-none',\n attrs.class as string | undefined,\n ),\n);\n\n/**\n * Everything but `class` and `style` — both are re-applied by hand. The array\n * `:style` binding reproduces React's `{ ...wrapperStyle, ...style }` merge\n * (caller wins) while tolerating the string form Vue also allows for `style`.\n */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n\nconst callerStyle = computed(() => attrs.style as CSSProperties | string | undefined);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n aria-hidden=\"true\"\n v-bind=\"rest\"\n :class=\"classes\"\n :style=\"[wrapperStyle, callerStyle ?? {}]\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"drop-shadow-sm\"\n >\n <path\n d=\"M5 3 L5 19 L9.5 14.5 L12.5 21 L15.5 19.5 L12.5 13 L19 13 Z\"\n :fill=\"props.color\"\n stroke=\"white\"\n stroke-width=\"1.25\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span\n v-if=\"hasName && !props.isPointerOnly\"\n class=\"absolute whitespace-nowrap rounded-md px-1.5 py-0.5 text-[11px] font-medium leading-none text-white shadow-sm\"\n :style=\"labelStyle\"\n >\n <slot name=\"name\">{{ props.name }}</slot>\n </span>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface NotificationCenterProps {\n /** The header title. Default `\"Notifications\"`. Rich content → the `title` slot. */\n title?: string;\n\n /** The badge / count rendered next to the title. Rich content → the `count` slot. */\n count?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { Bell } from 'lucide-vue-next';\nimport { cn, surfaceVariants } from '../../../foundation/utils';\nimport { renderableChildren } from '../../../foundation/primitives';\n\n/**\n * Notification panel — header (title + count + actions), a scrolling list of\n * `NotificationItem` children, and an optional footer.\n *\n * React's `headerActions` / `emptyState` / `footer` were `ReactNode` props with\n * no string form worth keeping; they are slots only. `title` / `count` keep\n * their prop form and gain same-named slots.\n */\ndefineOptions({ name: 'NotificationCenter', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<NotificationCenterProps>(), { title: 'Notifications' });\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/**\n * Replaces React's `Children.toArray(children).filter(isValidElement)`. Called\n * per render rather than cached — a slot's content is only knowable at render\n * time, and `renderableChildren` drops the comment/whitespace vnodes that would\n * otherwise read as content.\n */\nconst isEmpty = () => renderableChildren(slots.default?.()).length === 0;\n\nconst classes = computed(() =>\n cn(\n 'flex w-80 flex-col',\n surfaceVariants({ variant: 'surface', radius: 'md' }),\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\" role=\"region\" aria-label=\"Notifications\" v-bind=\"rest\" :class=\"classes\">\n <header class=\"flex items-center justify-between gap-2 border-b border-border px-3 py-2.5\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-sm font-semibold\">\n <slot name=\"title\">{{ props.title }}</slot>\n </span>\n <span\n v-if=\"props.count != null || $slots.count\"\n class=\"inline-flex items-center justify-center rounded-full bg-primary px-1.5 text-[10px] font-semibold leading-5 text-primary-foreground\"\n >\n <slot name=\"count\">{{ props.count }}</slot>\n </span>\n </div>\n <slot name=\"headerActions\" />\n </header>\n <div class=\"max-h-96 overflow-y-auto py-1\">\n <template v-if=\"isEmpty()\">\n <slot name=\"emptyState\">\n <div\n class=\"flex flex-col items-center gap-2 px-4 py-10 text-center text-muted-foreground\"\n >\n <Bell class=\"h-6 w-6\" />\n <p class=\"text-sm\">You're all caught up.</p>\n </div>\n </slot>\n </template>\n <div v-else class=\"flex flex-col\"><slot /></div>\n </div>\n <div\n v-if=\"$slots.footer\"\n class=\"border-t border-border px-3 py-2 text-center text-xs\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface NotificationItemProps {\n /** The leading icon / avatar. Rich content → the `icon` slot. */\n icon?: string;\n\n /** The primary title. Rich content → the `title` slot. Required in React; optional here so the slot form is usable — supply one or the other. */\n title?: string;\n\n /** The body / description. Rich content → the `description` slot. */\n description?: string;\n\n /** The timestamp / relative time label. Rich content → the `timestamp` slot. */\n timestamp?: string;\n\n /** The unread flag (bold + leading dot). */\n isUnread?: boolean;\n\n /** The trailing actions. Rich content → the `actions` slot. */\n actions?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn, Key } from '../../../foundation/utils';\n\n/** A single notification row inside `NotificationCenter`. */\ndefineOptions({ name: 'NotificationItem', inheritAttrs: false });\n\nconst props = defineProps<NotificationItemProps>();\n\nconst emit = defineEmits<{\n /**\n * Replaces React's `onSelect`; binding it makes the row interactive\n * (`role=\"button\"`, `tabindex=\"0\"`, Enter/Space activation).\n *\n * Declared as an emit even though `select` is also a DOM event name — the\n * React prop was a custom callback, not the native `select`, and an emit is\n * the only way to keep the name. A `@select` binding reaches this emit, not\n * the (never-fired-on-a-div) native event.\n */\n select: [];\n /** Replaces React's `onDismiss`; when bound, a dismiss button renders on hover. */\n dismiss: [];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst instance = getCurrentInstance();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/**\n * Mirror React's `!!onSelect` / `onDismiss &&` guards. Read through a call, not\n * a cached computed: `instance.vnode` is replaced on every re-render.\n */\nconst interactive = () => Boolean(instance?.vnode.props?.onSelect);\nconst hasDismiss = () => Boolean(instance?.vnode.props?.onDismiss);\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasTimestamp = computed(() => Boolean(props.timestamp) || Boolean(slots.timestamp));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\nconst hasActions = computed(() => Boolean(props.actions) || Boolean(slots.actions));\n\nconst classes = computed(() =>\n cn(\n 'group/notif relative flex gap-3 rounded-md px-3 py-2.5 text-sm',\n interactive() &&\n 'cursor-pointer hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n props.isUnread && 'bg-primary-soft/30',\n attrs.class as string | undefined,\n ),\n);\n\nconst titleClasses = computed(() =>\n cn('truncate text-foreground', props.isUnread ? 'font-semibold' : 'font-medium'),\n);\n\nconst bodyClasses = computed(() => cn('min-w-0 flex-1', !hasIcon.value && 'pl-3'));\n\nconst onKeyDown = (event: KeyboardEvent) => {\n if (!interactive()) return;\n if (event.target !== event.currentTarget) return;\n if (event.key === Key.Enter || event.key === Key.Space) {\n event.preventDefault();\n emit('select');\n }\n};\n\nconst onDismissClick = (event: MouseEvent) => {\n event.stopPropagation();\n emit('dismiss');\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 :role=\"interactive() ? 'button' : undefined\"\n :tabindex=\"interactive() ? 0 : undefined\"\n :data-unread=\"props.isUnread ? '' : undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n @click=\"emit('select')\"\n @keydown=\"onKeyDown\"\n >\n <span\n v-if=\"props.isUnread\"\n aria-hidden=\"true\"\n class=\"absolute left-1 top-3 inline-block h-2 w-2 rounded-full bg-primary\"\n />\n <div v-if=\"hasIcon\" class=\"shrink-0 self-start pl-3\">\n <slot name=\"icon\">{{ props.icon }}</slot>\n </div>\n <div :class=\"bodyClasses\">\n <div class=\"flex items-baseline gap-2\">\n <span :class=\"titleClasses\">\n <slot name=\"title\">{{ props.title }}</slot>\n </span>\n <span\n v-if=\"hasTimestamp\"\n class=\"ml-auto whitespace-nowrap text-xs text-muted-foreground\"\n >\n <slot name=\"timestamp\">{{ props.timestamp }}</slot>\n </span>\n </div>\n <div v-if=\"hasDescription\" class=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">\n <slot name=\"description\">{{ props.description }}</slot>\n </div>\n <div v-if=\"hasActions\" class=\"mt-1.5 flex items-center gap-2\">\n <slot name=\"actions\">{{ props.actions }}</slot>\n </div>\n </div>\n <button\n v-if=\"hasDismiss()\"\n type=\"button\"\n aria-label=\"Dismiss notification\"\n :class=\"\n cn(\n 'absolute right-2 top-2 inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground opacity-0',\n 'group-hover/notif:opacity-100 group-focus-within/notif:opacity-100',\n 'hover:bg-background hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )\n \"\n @click=\"onDismissClick\"\n >\n <X class=\"h-3.5 w-3.5\" />\n </button>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","_renderSlot","_createElementVNode","_normalizeStyle","_createBlock","AlertSimple","_hoisted_1","_createTextVNode","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_createVNode","_unref","Icon","BannerSimple","_hoisted_5","ToastSimple","Spinner","OrientationToken","_Fragment","_normalizeClass","Portal","_renderList","Toast","Announce","Toaster","Backdrop","_withDirectives","_hoisted_6","rect","placement","_hoisted_7","_hoisted_8","$slots"],"mappings":"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"}
|