@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
|
@@ -4,7 +4,7 @@ import { c as cn } from "./cn-CzDCF-Ah.js";
|
|
|
4
4
|
import { P as Primitive } from "./Primitive-Cm3ECaVw.js";
|
|
5
5
|
import { H as HtmlElement, B as ButtonType } from "./HtmlExtensions-jlKY5f9C.js";
|
|
6
6
|
import { O as Orientation } from "./Orientation-u-sYunuG.js";
|
|
7
|
-
import { f as _sfc_main$f, h as ToggleButtonGroupVariant, a as ButtonVariant, _ as _sfc_main$g } from "./OptionTileGroup.vue_vue_type_script_setup_true_lang-
|
|
7
|
+
import { f as _sfc_main$f, h as ToggleButtonGroupVariant, a as ButtonVariant, _ as _sfc_main$g } from "./OptionTileGroup.vue_vue_type_script_setup_true_lang-CKSVGCby.js";
|
|
8
8
|
import { Check, Copy, ChevronDown, X, Plus, ArrowUp } from "lucide-vue-next";
|
|
9
9
|
import { _ as _sfc_main$h } from "./Icon.vue_vue_type_script_setup_true_lang-DgwdLCRR.js";
|
|
10
10
|
import { u as useClipboard } from "./useClipboard-BVRwXC--.js";
|
|
@@ -16,7 +16,7 @@ import { _ as _sfc_main$i, b as useRovingFocusItem } from "./RovingFocusGroup.vu
|
|
|
16
16
|
import { O as OverlayPosition } from "./OverlayPosition-BNybkMGG.js";
|
|
17
17
|
import { u as useEscape } from "./useEscape-CYPdpm_l.js";
|
|
18
18
|
import { u as useOutsideClick } from "./useOutsideClick-CW80BJfE.js";
|
|
19
|
-
import { P as Presence } from "./Presence-
|
|
19
|
+
import { P as Presence } from "./Presence-DE4MlrJz.js";
|
|
20
20
|
import { r as renderableChildren } from "./Slot-D2lIitvV.js";
|
|
21
21
|
import { K as Key } from "./KeyboardExtensions-CQlkK53D.js";
|
|
22
22
|
const LinkVariant = {
|
|
@@ -41,7 +41,11 @@ const linkVariants = tv({
|
|
|
41
41
|
base: "inline-flex items-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm",
|
|
42
42
|
variants: {
|
|
43
43
|
variant: {
|
|
44
|
-
|
|
44
|
+
/* `-soft-foreground`, not `text-primary`: a link has no fill of its own, so it lands on
|
|
45
|
+
whatever surface hosts it — the pairing `--color-primary-soft-foreground` is toned for.
|
|
46
|
+
`text-primary` measured 4.19:1 on `theme-smart-qr`'s own page background, under AA for
|
|
47
|
+
body text. Same fix as `Button.variants.ts` and `foundation/utils/Tones.ts`. */
|
|
48
|
+
default: "text-primary-soft-foreground hover:text-primary-soft-foreground/85 hover:underline",
|
|
45
49
|
subtle: "text-foreground hover:underline",
|
|
46
50
|
muted: "text-muted-foreground hover:text-foreground hover:underline",
|
|
47
51
|
inherit: "text-current underline-offset-2 hover:underline"
|
|
@@ -869,7 +873,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
869
873
|
onClick: handleClick
|
|
870
874
|
}), [
|
|
871
875
|
renderSlot(_ctx.$slots, "icon", {}, () => [
|
|
872
|
-
|
|
876
|
+
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
877
|
+
__props.icon !== void 0 ? (openBlock(), createBlock(unref(IconProp), { key: 0 })) : createCommentVNode("", true)
|
|
878
|
+
])
|
|
873
879
|
])
|
|
874
880
|
], 16, _hoisted_3),
|
|
875
881
|
hasTooltip.value && labelSide.value === unref(Side).Right ? (openBlock(), createElementBlock("span", _hoisted_4, [
|
|
@@ -993,4 +999,4 @@ export {
|
|
|
993
999
|
useToolbarContext as s,
|
|
994
1000
|
useSpeedDialContext as u
|
|
995
1001
|
};
|
|
996
|
-
//# sourceMappingURL=BackToTopButton.vue_vue_type_script_setup_true_lang-
|
|
1002
|
+
//# sourceMappingURL=BackToTopButton.vue_vue_type_script_setup_true_lang-iLYlhK05.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackToTopButton.vue_vue_type_script_setup_true_lang-iLYlhK05.js","sources":["../../src/presentation/actions/link/Link.variants.ts","../../src/presentation/actions/link/Link.vue","../../src/presentation/actions/buttonGroup/ButtonGroup.vue","../../src/presentation/actions/segmentedControl/SegmentedControl.vue","../../src/presentation/actions/fab/FAB.variants.ts","../../src/presentation/actions/fab/FAB.vue","../../src/presentation/actions/copyButton/CopyButton.vue","../../src/presentation/actions/disclosureButton/DisclosureButton.vue","../../src/presentation/actions/toolbar/ToolbarContext.ts","../../src/presentation/actions/toolbar/Toolbar.vue","../../src/presentation/actions/toolbar/ToolbarButton.vue","../../src/presentation/actions/toolbar/ToolbarLink.vue","../../src/presentation/actions/toolbar/ToolbarSeparator.vue","../../src/presentation/actions/toolbar/index.ts","../../src/presentation/actions/speedDial/SpeedDialContext.ts","../../src/presentation/actions/speedDial/SpeedDialList.vue","../../src/presentation/actions/speedDial/SpeedDialTrigger.vue","../../src/presentation/actions/speedDial/SpeedDial.vue","../../src/presentation/actions/speedDial/SpeedDialAction.vue","../../src/presentation/actions/speedDial/index.ts","../../src/presentation/actions/backToTopButton/BackToTopButton.vue"],"sourcesContent":["import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the Link's color treatment. */\nexport const LinkVariant = {\n /** Refers to the primary-colored link. */\n Default: 'default',\n /** Refers to a foreground-colored, underline-on-hover link. */\n Subtle: 'subtle',\n /** Refers to a muted link that brightens on hover. */\n Muted: 'muted',\n /** Refers to a link that inherits the surrounding text color. */\n Inherit: 'inherit',\n} as const;\n\nexport type LinkVariant = (typeof LinkVariant)[keyof typeof LinkVariant];\n\n/** Defines the Link's text size. */\nexport const LinkSize = {\n /** Refers to the small text size. */\n Sm: 'sm',\n /** Refers to the base (default) text size. */\n Md: 'md',\n /** Refers to the large text size. */\n Lg: 'lg',\n} as const;\n\nexport type LinkSize = (typeof LinkSize)[keyof typeof LinkSize];\n\nexport const linkVariants = tv({\n base: 'inline-flex items-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n variants: {\n variant: {\n /* `-soft-foreground`, not `text-primary`: a link has no fill of its own, so it lands on\n whatever surface hosts it — the pairing `--color-primary-soft-foreground` is toned for.\n `text-primary` measured 4.19:1 on `theme-smart-qr`'s own page background, under AA for\n body text. Same fix as `Button.variants.ts` and `foundation/utils/Tones.ts`. */\n default: 'text-primary-soft-foreground hover:text-primary-soft-foreground/85 hover:underline',\n subtle: 'text-foreground hover:underline',\n muted: 'text-muted-foreground hover:text-foreground hover:underline',\n inherit: 'text-current underline-offset-2 hover:underline',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nexport type LinkVariants = VariantProps<typeof linkVariants>;\n\n/* Compile-time lock: enum values ≡ tv axis keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertLinkVariant: AssertExact<LinkVariant, NonNullable<LinkVariants['variant']>> = true;\nconst _assertLinkSize: AssertExact<LinkSize, NonNullable<LinkVariants['size']>> = true;\nvoid _assertLinkVariant;\nvoid _assertLinkSize;\n","<script lang=\"ts\">\nimport type { AnchorHTMLAttributes } from 'vue';\nimport type { LinkVariants, LinkVariant, LinkSize } from './Link.variants';\n\n/* Both heritage types are `@vue-ignore`d — native anchor attributes belong in attribute\n fallthrough, and `LinkVariants` resolves through `typeof linkVariants`, which the SFC prop\n compiler cannot walk. The type surface is unchanged. */\nexport interface LinkProps\n extends /* @vue-ignore */ AnchorHTMLAttributes,\n /* @vue-ignore */ Omit<LinkVariants, 'variant' | 'size'> {\n /** The color treatment. */\n variant?: LinkVariant;\n /** The text size. */\n size?: LinkSize;\n /** The as-child flag — when true, renders the child element as the link instead of an `<a>`.\n * Use for a router `<RouterLink>`. */\n asChild?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef, type ComponentPublicInstance } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, HtmlElement } from '../../../foundation/utils';\nimport { Primitive } from '../../../foundation/primitives';\nimport { linkVariants } from './Link.variants';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\n/* `<link>` is a real HTML element, but this is a library component — imported, never globally\n registered — so the name cannot shadow the tag, and renaming it would break parity with the\n React package. `vue/no-reserved-component-names` is off for `src/presentation/**` for exactly\n this reason. */\ndefineOptions({ name: 'Link', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<LinkProps>(), { asChild: false });\n\nconst attrs = useAttrs();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(linkVariants({ variant: props.variant, size: props.size }), attrs.class as ClassValue),\n);\n\nconst root = useTemplateRef<ComponentPublicInstance>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nconst el = computed<HTMLElement | null>(() => {\n const node = root.value?.$el;\n return node instanceof HTMLElement ? node : null;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <!-- Anchor with consistent focus/hover styling — `asChild` swaps in router links. -->\n <Primitive\n ref=\"root\"\n :as=\"HtmlElement.Anchor\"\n :as-child=\"asChild\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <slot />\n </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport type { Orientation } from '../../../foundation/utils';\n\n/* Native div attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface ButtonGroupProps extends /* @vue-ignore */ HTMLAttributes {\n /** The visual orientation. Default `horizontal`. */\n orientation?: Orientation;\n\n /** The attached state — groups children with collapsed inner radii (connected look). Default `true`. */\n isAttached?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Orientation as OrientationValue } from '../../../foundation/utils';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ButtonGroup', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ButtonGroupProps>(), {\n orientation: OrientationValue.Horizontal,\n isAttached: true,\n});\n\nconst attrs = useAttrs();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst isHorizontal = computed(() => props.orientation === OrientationValue.Horizontal);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex',\n isHorizontal.value ? 'flex-row' : 'flex-col',\n props.isAttached\n ? isHorizontal.value\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <!-- Visually groups action-children — collapses inner radii when `isAttached`. -->\n <div\n ref=\"root\"\n role=\"group\"\n :data-orientation=\"orientation\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ToggleButtonGroupProps } from '../toggleButtonGroup';\n\nexport type SegmentedControlProps<T extends string = string> = Omit<\n ToggleButtonGroupProps<T>,\n 'variant'\n>;\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends string = string\">\nimport ToggleButtonGroup from '../toggleButtonGroup/ToggleButtonGroup.vue';\nimport { ToggleButtonGroupVariant } from '../toggleButtonGroup';\n\n/**\n * iOS-style connected pill row.\n *\n * @deprecated Use `ToggleButtonGroup variant=\"segmented\"` — this is now a thin alias that\n * forwards to it. Kept for back-compat; will be removed in a future beta.\n */\ndefineOptions({ name: 'SegmentedControl' });\n\n/* Explicit `undefined` defaults keep Vue's boolean casting from turning these absent props into\n `false` — they are forwarded verbatim, so `false` would override `ToggleButtonGroup`'s own\n defaults instead of deferring to them. */\nconst props = withDefaults(defineProps<SegmentedControlProps<T>>(), {\n isAttached: undefined,\n equalWidth: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emits the selection whenever it changes — forwarded verbatim from `ToggleButtonGroup`. */\n 'value-change': [value: T | null | ReadonlyArray<string>];\n}>();\n</script>\n\n<template>\n <ToggleButtonGroup\n v-bind=\"props\"\n :variant=\"ToggleButtonGroupVariant.Segmented\"\n @value-change=\"(value: T | null | ReadonlyArray<string>) => emit('value-change', value)\"\n >\n <slot />\n </ToggleButtonGroup>\n</template>\n","import { tv, OverlayPosition, type VariantProps } from '../../../foundation/utils';\n\n/** Defines the FAB's visual surface style. */\nexport const FabVariant = {\n /** Refers to the primary brand-filled surface. */\n Primary: 'primary',\n /** Refers to the neutral card surface with a hairline border. */\n Secondary: 'secondary',\n /** Refers to the destructive / error-filled surface. */\n Destructive: 'destructive',\n} as const;\n\nexport type FabVariant = (typeof FabVariant)[keyof typeof FabVariant];\n\n/** Defines the FAB's diameter. */\nexport const FabSize = {\n /** Refers to the small (2.5rem) diameter. */\n Sm: 'sm',\n /** Refers to the medium (3.5rem) default diameter. */\n Md: 'md',\n /** Refers to the large (4rem) diameter. */\n Lg: 'lg',\n} as const;\n\nexport type FabSize = (typeof FabSize)[keyof typeof FabSize];\n\nexport const fabVariants = tv({\n base: 'fixed inline-flex items-center justify-center rounded-full shadow-lg transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n secondary: 'bg-card text-card-foreground border border-border hover:bg-muted',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n },\n size: {\n sm: 'h-10 w-10',\n md: 'h-14 w-14',\n lg: 'h-16 w-16',\n },\n position: {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n 'top-center': 'top-6 left-1/2 -translate-x-1/2',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n position: 'bottom-right',\n },\n});\n\nexport type FABVariants = VariantProps<typeof fabVariants>;\n\n/* Compile-time lock: enum values ≡ tv axis keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertFabVariant: AssertExact<FabVariant, NonNullable<FABVariants['variant']>> = true;\nconst _assertFabSize: AssertExact<FabSize, NonNullable<FABVariants['size']>> = true;\nconst _assertFabPosition: AssertExact<OverlayPosition, NonNullable<FABVariants['position']>> = true;\nvoid _assertFabVariant;\nvoid _assertFabSize;\nvoid _assertFabPosition;\n","<script lang=\"ts\">\nimport type { ButtonHTMLAttributes } from 'vue';\nimport type { OverlayPosition } from '../../../foundation/utils';\nimport type { FABVariants, FabVariant, FabSize } from './FAB.variants';\n\n/* The required accessible label rides on the ignored heritage rather than the body — FAB content\n is typically icon-only, so the name is mandatory, but it must reach the DOM as an attribute. */\ntype FABAttributes = ButtonHTMLAttributes & { 'aria-label': string };\n\n/* Both heritage types are `@vue-ignore`d — native button attributes belong in attribute\n fallthrough, and `FABVariants` resolves through `typeof fabVariants`, which the SFC prop\n compiler cannot walk. */\nexport interface FABProps\n extends /* @vue-ignore */ FABAttributes,\n /* @vue-ignore */ Omit<FABVariants, 'variant' | 'size' | 'position'> {\n /** The visual surface style. */\n variant?: FabVariant;\n /** The button diameter. */\n size?: FabSize;\n /** The anchor position on the viewport. */\n position?: OverlayPosition;\n /** The button type. Default `ButtonType.Button`. */\n type?: ButtonType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ButtonType, cn } from '../../../foundation/utils';\nimport { fabVariants } from './FAB.variants';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'FAB', inheritAttrs: false });\n\n/* `aria-label` is deliberately NOT a declared prop: Vue camelizes prop keys, so a declared\n `'aria-label'` would arrive as `props.ariaLabel` and never render. It stays a fallthrough attr;\n the interface keeps the requirement through the `@vue-ignore`d heritage. */\n/* `children` has no prop counterpart — it is the default slot. */\nconst props = withDefaults(defineProps<FABProps>(), { type: ButtonType.Button });\n\nconst attrs = useAttrs();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n fabVariants({ variant: props.variant, size: props.size, position: props.position }),\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLButtonElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <!-- Floating Action Button — fixed-position circular button with shadow. -->\n <button\n ref=\"root\"\n :type=\"type\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <slot />\n </button>\n</template>\n","<script lang=\"ts\">\nimport type { ButtonProps } from '../button';\n\n/* The required accessible label rides on the ignored heritage rather than the body — clipboard\n buttons are commonly icon-only, so the name is mandatory, but it must reach the DOM as an\n attribute rather than a (camelized) prop. */\ntype CopyButtonAttributes = Omit<ButtonProps, 'onClick' | 'children' | 'aria-label' | 'onError'> & {\n 'aria-label': string;\n};\n\nexport interface CopyButtonProps extends /* @vue-ignore */ CopyButtonAttributes {\n /** The text to copy when the button is activated. */\n text: string;\n\n /** The reset window for the `copied` state in ms. Default 2000. Set 0 to keep `copied` true until the next mount / explicit reset. */\n resetAfter?: number;\n\n /** The aria-label override while copied=true. Falls back to `aria-label` when omitted (i18n discipline — consumer supplies all user-facing strings). */\n copiedAriaLabel?: string;\n\n /* Re-declared from `ButtonProps` (identical type) purely so the SFC compiler sees it: a default\n can only be attached to a prop it actually generates, and the heritage is ignored. */\n\n /** The visual surface style. Default `ghost`. */\n variant?: ButtonVariant;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, watch } from 'vue';\nimport { Check, Copy } from 'lucide-vue-next';\nimport { Icon } from '../../../foundation/icons';\nimport { useClipboard } from '../../../foundation/hooks';\nimport { OptionalExtensions } from '../../../foundation/utils';\nimport Button from '../button/Button.vue';\nimport { ButtonVariant } from '../button';\n\n/* Renders a clipboard-copy button — for code blocks, ID / URL fields, and inline copy affordances. */\n/* `inheritAttrs: false` so the raw `aria-label` attr can be swapped for the copied-state one\n below; everything else (`class` included — `Button` folds it into its own `cn()`) is forwarded\n verbatim, which is where the original's trailing `{...props}` spread landed. */\ndefineOptions({ name: 'CopyButton', inheritAttrs: false });\n\n/* `children` became the default slot; its render-prop form is the slot's `{ copied, error }` props.\n `onError` became the `error` emit. */\nconst props = withDefaults(defineProps<CopyButtonProps>(), {\n resetAfter: 2000,\n variant: ButtonVariant.Ghost,\n});\n\nconst emit = defineEmits<{\n /** Emits the caught Error when `navigator.clipboard.writeText` rejects. Fires once per error transition. */\n error: [error: Error];\n}>();\n\nconst attrs = useAttrs();\n\n/* `aria-label` is read off `attrs`, not `props`: Vue camelizes declared prop keys, so a declared\n `'aria-label'` would arrive as `props.ariaLabel` and never render. */\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['aria-label']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst { copied, error, copy } = useClipboard({ resetAfter: () => props.resetAfter });\n\n// Fires once per error transition — the React original's effect keyed on `error`.\nwatch(error, (next) => {\n if (next) emit('error', next);\n});\n\nconst effectiveAriaLabel = computed(() => {\n const label = attrs['aria-label'] as string | undefined;\n return copied.value ? (props.copiedAriaLabel ?? label) : label;\n});\n\nconst fallbackIcon = computed(() => (copied.value ? Check : Copy));\n\nfunction handleClick(): void {\n void copy(props.text);\n}\n\n/* Whether the consumer supplied their own content — the React original's `children ?? <Icon …>`. */\nconst slots = defineSlots<{\n /** The content — receives `{ copied, error }` for a state-driven swap. Falls back to icon-only Copy/Check when omitted. */\n default?: (props: { copied: boolean; error: Error | null }) => unknown;\n}>();\n</script>\n\n<template>\n <Button\n :variant=\"variant\"\n :aria-label=\"effectiveAriaLabel\"\n :data-copied=\"OptionalExtensions.from(copied, 'true')\"\n v-bind=\"passthroughAttrs\"\n @click=\"handleClick\"\n >\n <slot v-if=\"slots.default\" :copied=\"copied\" :error=\"error\" />\n <Icon v-else :icon=\"fallbackIcon\" :size=\"16\" />\n </Button>\n</template>\n","<script lang=\"ts\">\nimport type { ButtonHTMLAttributes } from 'vue';\nimport type { Side } from '../../../foundation/utils';\n\n/* Native button attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface DisclosureButtonProps\n extends /* @vue-ignore */ Omit<ButtonHTMLAttributes, 'children' | 'onChange'> {\n /** The controlled open state. */\n isOpen?: boolean;\n /** The uncontrolled initial state. */\n defaultOpen?: boolean;\n /** The side the chevron sits on (`left` · `right`). Default `right`. */\n chevronSide?: Side;\n /** The button type. Default `ButtonType.Button`. */\n type?: ButtonType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { ChevronDown } from 'lucide-vue-next';\nimport type { ClassValue } from 'clsx';\nimport { ButtonType, cn, dataAttr, Side as SideValue } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport { useControlled } from '../../../foundation/hooks';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'DisclosureButton', inheritAttrs: false });\n\n/* `children` became the default slot (the visible, left-aligned label); `onOpenChange` the\n `open-change` emit. */\nconst props = withDefaults(defineProps<DisclosureButtonProps>(), {\n chevronSide: SideValue.Right,\n type: ButtonType.Button,\n defaultOpen: false,\n isOpen: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emits the open state whenever it changes. */\n 'open-change': [open: boolean];\n}>();\n\nconst attrs = useAttrs();\n\nconst { value: open, setValue: setOpen } = useControlled<boolean>({\n controlled: () => props.isOpen,\n default: props.defaultOpen,\n onChange: (next) => emit('open-change', next),\n});\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst chevronClass = computed(() => cn('transition-transform', open.value && 'rotate-180'));\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n attrs.class as ClassValue,\n ),\n);\n\n/* Chained after the consumer's own click (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's `onClick?.(e); if (!e.defaultPrevented)`. */\nfunction handleClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n setOpen(!open.value);\n}\n\nconst root = useTemplateRef<HTMLButtonElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <!-- Button with a rotating chevron — sets `aria-expanded` + `data-state=\"open|closed\"`. -->\n <button\n ref=\"root\"\n :type=\"type\"\n :aria-expanded=\"open\"\n :data-state=\"open ? 'open' : 'closed'\"\n :data-disabled=\"dataAttr(attrs.disabled as boolean | undefined)\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"handleClick\"\n >\n <Icon\n v-if=\"chevronSide === SideValue.Left\"\n :icon=\"ChevronDown\"\n :size=\"16\"\n :class=\"chevronClass\"\n />\n <span class=\"flex-1 text-left\"><slot /></span>\n <Icon\n v-if=\"chevronSide === SideValue.Right\"\n :icon=\"ChevronDown\"\n :size=\"16\"\n :class=\"chevronClass\"\n />\n </button>\n</template>\n","import { inject, type InjectionKey } from 'vue';\nimport type { Orientation } from '../../../foundation/utils';\n\nexport interface ToolbarContextValue {\n /** The toolbar's layout axis. Live getter — read it, don't destructure it. */\n readonly orientation: Orientation;\n}\n\nexport const ToolbarKey: InjectionKey<ToolbarContextValue> = Symbol('wow-two.toolbar');\n\n/** Reads the surrounding `Toolbar`. Throws outside one — the parts are not standalone. */\nexport function useToolbarContext(): ToolbarContextValue {\n const context = inject(ToolbarKey, null);\n if (!context) throw new Error('Toolbar.* must be used inside <Toolbar>');\n return context;\n}\n","<script lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport type { Orientation } from '../../../foundation/utils';\n\n/* Native div attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface ToolbarProps extends /* @vue-ignore */ HTMLAttributes {\n /** The layout axis — drives both the arrow-key navigation and the flex direction. Default `horizontal`. */\n orientation?: Orientation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, provide, useAttrs, useTemplateRef, type ComponentPublicInstance } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Orientation as OrientationValue } from '../../../foundation/utils';\nimport { RovingFocusGroup } from '../../../foundation/primitives';\nimport { ToolbarKey } from './ToolbarContext';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'Toolbar', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToolbarProps>(), {\n orientation: OrientationValue.Horizontal,\n});\n\nconst attrs = useAttrs();\n\n/* Live getter, not a snapshot — `ToolbarSeparator` re-reads it to flip its own axis. */\nprovide(ToolbarKey, {\n get orientation() {\n return props.orientation;\n },\n});\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background p-1',\n props.orientation === OrientationValue.Vertical && 'flex-col items-stretch',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<ComponentPublicInstance>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nconst el = computed<HTMLElement | null>(() => {\n const node = root.value?.$el;\n return node instanceof HTMLElement ? node : null;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <RovingFocusGroup\n ref=\"root\"\n :orientation=\"orientation\"\n can-loop\n role=\"toolbar\"\n :aria-orientation=\"orientation\"\n :data-orientation=\"orientation\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <slot />\n </RovingFocusGroup>\n</template>\n","<script lang=\"ts\">\nimport type { ButtonHTMLAttributes } from 'vue';\n\n/* Native button attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface ToolbarButtonProps\n extends /* @vue-ignore */ Omit<ButtonHTMLAttributes, 'children'> {\n /** The as-child flag — renders as the single child element via `Primitive`'s `asChild` merge, and drops the built-in item chrome. */\n asChild?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ButtonType, cn, HtmlElement } from '../../../foundation/utils';\nimport { Primitive, useRovingFocusItem } from '../../../foundation/primitives';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ToolbarButton', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToolbarButtonProps>(), { asChild: false });\n\nconst attrs = useAttrs();\n\n/* Reactive object — `tabindex` tracks the group's tab stop, so read through it rather than\n destructuring. The function `ref` registers this item's node with the group. */\nconst roving = useRovingFocusItem();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n props.asChild\n ? cn(attrs.class as ClassValue)\n : cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n attrs.class as ClassValue,\n ),\n);\n\n/* Chained after the consumer's own keydown (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's explicit `if (e.defaultPrevented) return`. */\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.defaultPrevented) return;\n roving.onKeydown(event);\n}\n</script>\n\n<template>\n <Primitive\n :ref=\"roving.ref\"\n :as=\"HtmlElement.Button\"\n :as-child=\"asChild\"\n :type=\"asChild ? undefined : ButtonType.Button\"\n :tabindex=\"roving.tabindex\"\n :data-roving-focus-item=\"roving['data-roving-focus-item']\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @focus=\"roving.onFocus()\"\n @keydown=\"handleKeydown\"\n >\n <slot />\n </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { AnchorHTMLAttributes } from 'vue';\n\n/* Native anchor attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport type ToolbarLinkProps = /* @vue-ignore */ Omit<AnchorHTMLAttributes, 'children'>;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/utils';\nimport { useRovingFocusItem } from '../../../foundation/primitives';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ToolbarLink', inheritAttrs: false });\n\nconst attrs = useAttrs();\n\n/* Reactive object — `tabindex` tracks the group's tab stop, so read through it rather than\n destructuring. The function `ref` registers this item's node with the group. */\nconst roving = useRovingFocusItem();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm text-foreground underline-offset-2 transition-colors hover:bg-muted hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n attrs.class as ClassValue,\n ),\n);\n\n/* Chained after the consumer's own keydown (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's explicit `if (e.defaultPrevented) return`. */\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.defaultPrevented) return;\n roving.onKeydown(event);\n}\n</script>\n\n<template>\n <a\n :ref=\"roving.ref\"\n :tabindex=\"roving.tabindex\"\n :data-roving-focus-item=\"roving['data-roving-focus-item']\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @focus=\"roving.onFocus()\"\n @keydown=\"handleKeydown\"\n >\n <slot />\n </a>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Orientation } from '../../../foundation/utils';\nimport { useToolbarContext } from './ToolbarContext';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ToolbarSeparator', inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst context = useToolbarContext();\n\nconst isVertical = computed(() => context.orientation === Orientation.Vertical);\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'shrink-0 bg-border',\n isVertical.value ? 'mx-1 h-px' : 'my-1 w-px self-stretch',\n attrs.class as ClassValue,\n ),\n);\n</script>\n\n<template>\n <div\n role=\"separator\"\n :aria-orientation=\"isVertical ? 'horizontal' : 'vertical'\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n />\n</template>\n","import ToolbarRoot from './Toolbar.vue';\nimport ToolbarButton from './ToolbarButton.vue';\nimport ToolbarLink from './ToolbarLink.vue';\nimport ToolbarSeparator from './ToolbarSeparator.vue';\n\n/**\n * The toolbar root, carrying its parts as properties so `<Toolbar.Button>` /\n * `<Toolbar.Separator>` resolve in a template — the counterpart of the React\n * original's `Object.assign`. Each part is also exported on its own name.\n */\nconst Toolbar = Object.assign(ToolbarRoot, {\n Button: ToolbarButton,\n Link: ToolbarLink,\n Separator: ToolbarSeparator,\n});\n\nexport { Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator };\nexport type { ToolbarProps } from './Toolbar.vue';\nexport type { ToolbarButtonProps } from './ToolbarButton.vue';\nexport type { ToolbarLinkProps } from './ToolbarLink.vue';\nexport { ToolbarKey, useToolbarContext, type ToolbarContextValue } from './ToolbarContext';\n","import { inject, type InjectionKey, type ShallowRef } from 'vue';\nimport type { OverlayPosition } from '../../../foundation/utils';\n\n/** The overlay anchor position of a SpeedDial (shared overlay vocabulary). */\nexport type SpeedDialPosition = OverlayPosition;\n\n/** Defines the axis a SpeedDial's action items fan out along. */\nexport const SpeedDialDirection = {\n /** Refers to items stacking upward from the trigger. */\n Up: 'up',\n /** Refers to items stacking downward from the trigger. */\n Down: 'down',\n /** Refers to items stacking to the left of the trigger. */\n Left: 'left',\n /** Refers to items stacking to the right of the trigger. */\n Right: 'right',\n} as const;\n\nexport type SpeedDialDirection = (typeof SpeedDialDirection)[keyof typeof SpeedDialDirection];\n\nexport interface SpeedDialContextValue {\n /** The open state. Live getter — read it, don't destructure it. */\n readonly open: boolean;\n\n /** Sets the open state (and fires the root's `open-change`). */\n setOpen: (open: boolean) => void;\n\n /**\n * The trigger's element, published by `SpeedDialTrigger` on mount. Escape and\n * action-select return focus here — the React original held a `MutableRefObject`\n * threaded through `composeRefs`; a Vue child writes its own element into this ref\n * instead.\n */\n triggerEl: ShallowRef<HTMLElement | null>;\n\n /** The resolved fan-out axis. Live getter. */\n readonly direction: SpeedDialDirection;\n\n /** The viewport anchor. Live getter. */\n readonly position: SpeedDialPosition;\n}\n\nexport const SpeedDialKey: InjectionKey<SpeedDialContextValue> = Symbol('wow-two.speedDial');\n\n/** Reads the surrounding `SpeedDial`. Throws outside one — the parts are not standalone. */\nexport function useSpeedDialContext(): SpeedDialContextValue {\n const context = inject(SpeedDialKey, null);\n if (!context) throw new Error('SpeedDial.* must be used inside <SpeedDial>');\n return context;\n}\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/utils';\n\n/**\n * `Presence`-clonable list: a single element that takes the `data-state` and `ref`\n * `Presence` injects. Marked `group` so each action item animates off its\n * `data-[state]`; carries its own fade so `Presence` has an animation on *this*\n * node to watch before unmount. Internal — not exported from the barrel.\n */\ndefineOptions({ name: 'SpeedDialList', inheritAttrs: false });\n\nconst attrs = useAttrs();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'group absolute flex',\n /* list fade gated on data-state; motion-safe so reduced-motion users\n get no movement. */\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 /* Per-item enter stagger: ramp `animation-delay` on the first few items\n while opening only (closed → delay 0 so no item outlasts the list's\n own fade-out, which gates unmount). */\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(2)]:[animation-delay:40ms]',\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(3)]:[animation-delay:80ms]',\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(4)]:[animation-delay:120ms]',\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(n+5)]:[animation-delay:160ms]',\n attrs.class as ClassValue,\n ),\n);\n</script>\n\n<template>\n <ul role=\"menu\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <slot />\n </ul>\n</template>\n","<script lang=\"ts\">\nimport type { ButtonHTMLAttributes, VNodeChild } from 'vue';\nimport type { FabVariant, FabSize } from '../fab/FAB.variants';\n\n/* Native button attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface SpeedDialTriggerProps\n extends /* @vue-ignore */ Omit<ButtonHTMLAttributes, 'children'> {\n /** The glyph shown while closed. Defaults to a `Plus` icon. Prefer the `closed-icon` named slot. */\n closedIcon?: VNodeChild;\n\n /** The glyph shown while open. Defaults to an `X` icon. Prefer the `open-icon` named slot. */\n openIcon?: VNodeChild;\n\n /** The FAB surface style. */\n variant?: FabVariant;\n\n /** The FAB diameter. */\n size?: FabSize;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, defineComponent, useAttrs, useTemplateRef, watchPostEffect } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Plus, X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport FAB from '../fab/FAB.vue';\nimport { useSpeedDialContext } from './SpeedDialContext';\n\ndefineOptions({ name: 'SpeedDialTrigger', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SpeedDialTriggerProps>(), {\n /* `VNodeChild` includes `boolean`, so Vue's boolean casting turns an absent node-valued prop\n into `false` rather than `undefined` — which reads as \"supplied\" at every `!== undefined`\n check. An explicit `undefined` default suppresses the cast. */\n closedIcon: undefined,\n openIcon: undefined,\n});\n\nconst attrs = useAttrs();\nconst context = useSpeedDialContext();\n\n/* `aria-label` is read off `attrs`, not `props`: Vue camelizes declared prop keys, so a declared\n `'aria-label'` would arrive as `props.ariaLabel` and never render. It is stripped from the\n forwarded attrs and re-bound below, so the resolved value is the one that lands. */\nconst ariaLabel = computed(() => (attrs['aria-label'] as string | undefined) ?? 'Toggle actions');\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class', 'aria-label']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\n/* Stable render-only wrappers for the node-valued props, so each can render as the fallback of its\n named-slot twin. */\nconst ClosedIconProp = defineComponent({ render: () => props.closedIcon });\nconst OpenIconProp = defineComponent({ render: () => props.openIcon });\n\nconst fab = useTemplateRef('fab');\n\n/* Publishes the trigger element into the root's context — Escape and action-select return focus\n here. The React original threaded a shared `MutableRefObject` through `composeRefs`. */\nwatchPostEffect(() => {\n const node = fab.value?.$el;\n context.triggerEl.value = node instanceof HTMLElement ? node : null;\n});\n\nconst rootClass = computed(() =>\n cn(\n 'static !bottom-auto !left-auto !right-auto !top-auto !translate-x-0',\n attrs.class as ClassValue,\n ),\n);\n\n/* Chained after the consumer's own click (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's `onClick?.(e); if (e.defaultPrevented) return`. */\nfunction handleClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n context.setOpen(!context.open);\n}\n</script>\n\n<template>\n <FAB\n ref=\"fab\"\n v-bind=\"passthroughAttrs\"\n :aria-label=\"ariaLabel\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"context.open\"\n :variant=\"variant\"\n :size=\"size\"\n :position=\"context.position\"\n :class=\"rootClass\"\n @click=\"handleClick\"\n >\n <template v-if=\"context.open\">\n <slot name=\"open-icon\">\n <OpenIconProp v-if=\"openIcon !== undefined\" />\n <Icon v-else :icon=\"X\" :size=\"20\" />\n </slot>\n </template>\n <template v-else>\n <slot name=\"closed-icon\">\n <ClosedIconProp v-if=\"closedIcon !== undefined\" />\n <Icon v-else :icon=\"Plus\" :size=\"20\" />\n </slot>\n </template>\n </FAB>\n</template>\n","<script lang=\"ts\">\nimport type { SpeedDialDirection, SpeedDialPosition } from './SpeedDialContext';\n\nexport interface SpeedDialProps {\n /** The viewport anchor. Default `bottom-right`. */\n position?: SpeedDialPosition;\n\n /** The axis the action items fan out along. Defaults to the one implied by `position`. */\n direction?: SpeedDialDirection;\n\n /** The controlled open state. */\n isOpen?: boolean;\n\n /** The uncontrolled initial state. */\n defaultOpen?: boolean;\n\n /** The pixel gap between stacked action items. Default 12. */\n gap?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n provide,\n shallowRef,\n useAttrs,\n useSlots,\n useTemplateRef,\n type VNode,\n} from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Key, OverlayPosition } from '../../../foundation/utils';\nimport { Presence, renderableChildren } from '../../../foundation/primitives';\nimport { useControlled, useEscape, useOutsideClick } from '../../../foundation/hooks';\nimport {\n SpeedDialDirection as SpeedDialDirectionValue,\n SpeedDialKey,\n} from './SpeedDialContext';\nimport SpeedDialList from './SpeedDialList.vue';\nimport SpeedDialTrigger from './SpeedDialTrigger.vue';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'SpeedDial', inheritAttrs: false });\n\n/* `className` is Vue's `class` fallthrough attr; `children` is the default slot. */\nconst props = withDefaults(defineProps<SpeedDialProps>(), {\n position: OverlayPosition.BottomRight,\n direction: undefined,\n gap: 12,\n defaultOpen: false,\n isOpen: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emits the open state whenever it changes. */\n 'open-change': [open: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst POSITION_TO_DIRECTION: Record<SpeedDialPosition, SpeedDialDirection> = {\n 'bottom-right': SpeedDialDirectionValue.Up,\n 'bottom-left': SpeedDialDirectionValue.Up,\n 'bottom-center': SpeedDialDirectionValue.Up,\n 'top-right': SpeedDialDirectionValue.Down,\n 'top-left': SpeedDialDirectionValue.Down,\n 'top-center': SpeedDialDirectionValue.Down,\n};\n\nconst POSITION_OFFSETS: Record<SpeedDialPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n 'top-center': 'top-6 left-1/2 -translate-x-1/2',\n};\n\nconst DIRECTION_TO_STACK: Record<SpeedDialDirection, string> = {\n [SpeedDialDirectionValue.Up]: 'flex-col-reverse bottom-full mb-3',\n [SpeedDialDirectionValue.Down]: 'flex-col top-full mt-3',\n [SpeedDialDirectionValue.Left]: 'flex-row-reverse right-full mr-3',\n [SpeedDialDirectionValue.Right]: 'flex-row top-1/2 -translate-y-1/2 left-full ml-3',\n};\n\nconst { value: open, setValue: setOpen } = useControlled<boolean>({\n controlled: () => props.isOpen,\n default: props.defaultOpen,\n onChange: (next) => emit('open-change', next),\n});\n\nconst rootEl = useTemplateRef<HTMLDivElement>('rootEl');\nconst triggerEl = shallowRef<HTMLElement | null>(null);\n\nconst resolvedDirection = computed(\n () => props.direction ?? POSITION_TO_DIRECTION[props.position],\n);\n\nuseEscape(() => {\n setOpen(false);\n requestAnimationFrame(() => triggerEl.value?.focus());\n}, open);\n\nuseOutsideClick(\n rootEl,\n () => {\n if (open.value) setOpen(false);\n },\n open,\n);\n\nprovide(SpeedDialKey, {\n get open() {\n return open.value;\n },\n setOpen,\n triggerEl,\n get direction() {\n return resolvedDirection.value;\n },\n get position() {\n return props.position;\n },\n});\n\n/* The trigger renders always (a closed dial must still be openable); only the action items are\n gated behind `open`. The React original partitioned `Children.toArray` on `child.type`; the\n same split runs over the slot's vnodes, so the authoring shape is unchanged. */\nfunction splitChildren(keepTrigger: boolean): Array<VNode> {\n return renderableChildren(slots.default?.()).filter(\n (child) => (child.type === SpeedDialTrigger) === keepTrigger,\n );\n}\n\nconst rootClass = computed(() =>\n cn('fixed', POSITION_OFFSETS[props.position], attrs.class as ClassValue),\n);\nconst stackClass = computed(() => DIRECTION_TO_STACK[resolvedDirection.value]);\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (!open.value || (event.key !== Key.ArrowDown && event.key !== Key.ArrowUp)) return;\n const root = rootEl.value;\n if (!root) return;\n const items = Array.from(root.querySelectorAll<HTMLButtonElement>('[role=\"menuitem\"]'));\n if (items.length === 0) return;\n event.preventDefault();\n const currentIndex = items.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex =\n currentIndex === -1\n ? event.key === Key.ArrowDown\n ? 0\n : items.length - 1\n : (currentIndex + (event.key === Key.ArrowDown ? 1 : -1) + items.length) % items.length;\n items[nextIndex]?.focus();\n}\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: rootEl });\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n :data-state=\"open ? 'open' : 'closed'\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @keydown=\"handleKeydown\"\n >\n <!-- `Presence` clones `data-state` (\"open\" | \"closed\") + a `ref` onto the list and defers\n unmount until its fade-out ends — keeps the exit from being killed by the hard `!open`\n unmount. Items pop in/out off the list's `group` state (see `SpeedDialAction`),\n staggered on enter. -->\n <Presence :is-present=\"open\">\n <SpeedDialList\n :data-direction=\"resolvedDirection\"\n :style=\"{ gap: `${gap}px` }\"\n :class=\"stackClass\"\n >\n <component :is=\"node\" v-for=\"(node, index) in splitChildren(false)\" :key=\"index\" />\n </SpeedDialList>\n </Presence>\n <component :is=\"node\" v-for=\"(node, index) in splitChildren(true)\" :key=\"index\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ButtonHTMLAttributes, VNodeChild } from 'vue';\n\n/* The required accessible label rides on the ignored heritage rather than the body — action items\n are icon-only, so the name is mandatory, but it must reach the DOM as an attribute. */\ntype SpeedDialActionAttributes = Omit<ButtonHTMLAttributes, 'children'> & { 'aria-label': string };\n\n/* Native button attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface SpeedDialActionProps extends /* @vue-ignore */ SpeedDialActionAttributes {\n /** The action's glyph. Prefer the `icon` named slot; this prop stays for parity with the React API. */\n icon?: VNodeChild;\n\n /** The label chip rendered beside the button. Prefer the `tooltip` named slot. */\n tooltip?: VNodeChild;\n\n /** The button type. Default `ButtonType.Button`. */\n type?: ButtonType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, defineComponent, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ButtonType, cn, Side } from '../../../foundation/utils';\nimport { SpeedDialDirection, useSpeedDialContext } from './SpeedDialContext';\n\n/* `aria-label` is deliberately NOT a declared prop: Vue camelizes prop keys, so a declared\n `'aria-label'` would arrive as `props.ariaLabel` and never render. It stays a fallthrough attr;\n the interface keeps the requirement through the `@vue-ignore`d heritage. */\ndefineOptions({ name: 'SpeedDialAction', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SpeedDialActionProps>(), {\n type: ButtonType.Button,\n /* `VNodeChild` includes `boolean`, so Vue's boolean casting turns an absent node-valued prop\n into `false` rather than `undefined` — which reads as \"supplied\" at every `!== undefined`\n check. An explicit `undefined` default suppresses the cast. */\n icon: undefined,\n tooltip: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the action is chosen — the dial closes and focus returns to the trigger afterwards. */\n select: [];\n}>();\n\ndefineSlots<{\n /** The action's glyph. Preferred over the `icon` prop. */\n icon?(): unknown;\n /** The glyph, in the plain-children shape a Vue caller reaches for. Same slot as `icon`. */\n default?(): unknown;\n /** The label chip beside the button. Preferred over the `tooltip` prop. */\n tooltip?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst context = useSpeedDialContext();\n\nconst DIRECTION_LABEL_SIDE: Record<SpeedDialDirection, Side> = {\n [SpeedDialDirection.Up]: Side.Right,\n [SpeedDialDirection.Down]: Side.Right,\n [SpeedDialDirection.Left]: Side.Right,\n [SpeedDialDirection.Right]: Side.Left,\n};\n\n/* Stable render-only wrappers for the node-valued props, so each can render as the fallback of its\n named-slot twin. */\nconst IconProp = defineComponent({ render: () => props.icon });\nconst TooltipProp = defineComponent({ render: () => props.tooltip });\n\nconst labelSide = computed(() => DIRECTION_LABEL_SIDE[context.direction]);\nconst hasTooltip = computed(() => props.tooltip !== undefined || slots.tooltip !== undefined);\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst buttonClass = computed(() =>\n cn(\n 'inline-flex h-10 w-10 items-center justify-center rounded-full bg-card text-card-foreground shadow-md transition-all hover:shadow-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n attrs.class as ClassValue,\n ),\n);\n\n/* Chained after the consumer's own click (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's `onClick?.(e); if (e.defaultPrevented) return`. */\nfunction handleClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n emit('select');\n context.setOpen(false);\n requestAnimationFrame(() => context.triggerEl.value?.focus());\n}\n\nconst root = useTemplateRef<HTMLButtonElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <li\n role=\"none\"\n :data-side=\"labelSide\"\n :class=\"\n cn(\n 'flex items-center gap-2',\n /* fade+scale each action off the list's `group` state; motion-safe so\n reduced-motion users get no movement (delay ramp lives on the list). */\n 'motion-safe:group-data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:group-data-[state=closed]:animate-(--animate-pop-out)',\n 'motion-reduce:animate-none',\n )\n \"\n >\n <span\n v-if=\"hasTooltip && labelSide === Side.Left\"\n class=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\"\n >\n <slot name=\"tooltip\"><TooltipProp v-if=\"tooltip !== undefined\" /></slot>\n </span>\n <button\n ref=\"root\"\n v-bind=\"passthroughAttrs\"\n :type=\"type\"\n role=\"menuitem\"\n :class=\"buttonClass\"\n @click=\"handleClick\"\n >\n <!-- The default slot is the fallback, not a second API: React typed `children` away,\n so a Vue caller writing `<SpeedDialAction><Pencil /></SpeedDialAction>` — the\n idiomatic shape — got a silently empty button. Precedence stays `icon` slot →\n default slot → `icon` prop. -->\n <slot name=\"icon\">\n <slot><IconProp v-if=\"icon !== undefined\" /></slot>\n </slot>\n </button>\n <span\n v-if=\"hasTooltip && labelSide === Side.Right\"\n class=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\"\n >\n <slot name=\"tooltip\"><TooltipProp v-if=\"tooltip !== undefined\" /></slot>\n </span>\n </li>\n</template>\n","import SpeedDialRoot from './SpeedDial.vue';\nimport SpeedDialTrigger from './SpeedDialTrigger.vue';\nimport SpeedDialAction from './SpeedDialAction.vue';\n\n/**\n * The dial root, carrying its parts as properties so `<SpeedDial.Trigger>` /\n * `<SpeedDial.Action>` resolve in a template — the counterpart of the React\n * original's `Object.assign`. Each part is also exported on its own name.\n */\nconst SpeedDial = Object.assign(SpeedDialRoot, {\n Trigger: SpeedDialTrigger,\n Action: SpeedDialAction,\n});\n\nexport { SpeedDial, SpeedDialAction, SpeedDialTrigger };\nexport {\n SpeedDialDirection,\n SpeedDialKey,\n useSpeedDialContext,\n type SpeedDialContextValue,\n type SpeedDialPosition,\n} from './SpeedDialContext';\nexport type { SpeedDialProps } from './SpeedDial.vue';\nexport type { SpeedDialTriggerProps } from './SpeedDialTrigger.vue';\nexport type { SpeedDialActionProps } from './SpeedDialAction.vue';\nexport default SpeedDial;\n","<script lang=\"ts\">\nimport type { ButtonHTMLAttributes, VNodeChild } from 'vue';\nimport type { OverlayPosition } from '../../../foundation/utils';\n\n/* Native button attributes stay in attribute fallthrough rather than becoming runtime props. */\nexport interface BackToTopButtonProps extends /* @vue-ignore */ ButtonHTMLAttributes {\n /** The scroll distance (px) before the button appears. Default 400. */\n threshold?: number;\n\n /** The scrollable element to scope to. Defaults to the window. */\n scrollContainer?: HTMLElement | null;\n\n /** The anchor position on the viewport. Default `bottom-right`. */\n position?: OverlayPosition;\n\n /** The visible label. Omit for icon-only. Prefer the `label` named slot; this prop stays for parity with the React API. */\n label?: VNodeChild;\n\n /** The button type. Default `ButtonType.Button`. */\n type?: ButtonType;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n defineComponent,\n shallowRef,\n useAttrs,\n useSlots,\n useTemplateRef,\n watchPostEffect,\n} from 'vue';\nimport { ArrowUp } from 'lucide-vue-next';\nimport type { ClassValue } from 'clsx';\nimport { ButtonType, cn, OverlayPosition as OverlayPositionValue } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'BackToTopButton', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<BackToTopButtonProps>(), {\n threshold: 400,\n position: OverlayPositionValue.BottomRight,\n type: ButtonType.Button,\n scrollContainer: null,\n /* `VNodeChild` includes `boolean`, so Vue's boolean casting turns an absent node-valued prop\n into `false` rather than `undefined` — which reads as \"supplied\" at every `!== undefined`\n check. An explicit `undefined` default suppresses the cast. */\n label: undefined,\n});\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst POSITION: Record<OverlayPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n 'top-center': 'top-6 left-1/2 -translate-x-1/2',\n};\n\n/* Stable render-only wrapper for the node-valued `label` prop, so it can render as the fallback of\n its named-slot twin. */\nconst LabelProp = defineComponent({ render: () => props.label });\n\nconst hasLabel = computed(() => props.label !== undefined || slots.label !== undefined);\n\nconst visible = shallowRef(false);\n\n/* `watchPostEffect` is the `useEffect` counterpart: it re-subscribes whenever `threshold` or\n `scrollContainer` changes, and reads once on attach. */\nwatchPostEffect((onCleanup) => {\n if (typeof window === 'undefined') return;\n const element: HTMLElement | Window = props.scrollContainer ?? window;\n const read = (): void => {\n const y =\n 'scrollY' in element ? (element as Window).scrollY : (element as HTMLElement).scrollTop;\n visible.value = y >= props.threshold;\n };\n read();\n const target = element as EventTarget;\n target.addEventListener('scroll', read, { passive: true });\n onCleanup(() => target.removeEventListener('scroll', read));\n});\n\n/* `aria-label` is read off `attrs`, not `props`: Vue camelizes declared prop keys, so a declared\n `'aria-label'` would arrive as `props.ariaLabel` and never render. It is stripped from the\n forwarded attrs and re-bound below, so the resolved value is the one that lands. */\nconst ariaLabel = computed(() => (attrs['aria-label'] as string | undefined) ?? 'Back to top');\n\nconst OWNED_ATTRS: ReadonlySet<string> = new Set(['class', 'aria-label']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OWNED_ATTRS.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'fixed z-banner inline-flex items-center justify-center gap-2 rounded-full bg-card text-card-foreground shadow-lg ring-1 ring-border transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n hasLabel.value ? 'h-11 px-4 text-sm font-medium' : 'h-11 w-11',\n POSITION[props.position],\n attrs.class as ClassValue,\n ),\n);\n\n/* Chained after the consumer's own click (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's `onClick?.(e); if (e.defaultPrevented) return`. */\nfunction handleClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n const reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n const target = props.scrollContainer ?? window;\n if ('scrollTo' in target) {\n target.scrollTo({ top: 0, behavior: reducedMotion ? 'auto' : 'smooth' });\n }\n}\n\nconst root = useTemplateRef<HTMLButtonElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <!-- Floating button revealed past `threshold` scroll — smooth-scrolls to top. -->\n <button\n v-if=\"visible\"\n ref=\"root\"\n :type=\"type\"\n :aria-label=\"ariaLabel\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"handleClick\"\n >\n <Icon :icon=\"ArrowUp\" :size=\"16\" />\n <slot name=\"label\"><LabelProp v-if=\"label !== undefined\" /></slot>\n </button>\n</template>\n"],"names":["_openBlock","_createBlock","_unref","_mergeProps","_renderSlot","OrientationValue","_createElementBlock","ToggleButtonGroup","_useSlots","Button","Icon","SideValue","_createElementVNode","_hoisted_2","_hoisted_1","ToolbarRoot","ToolbarButton","ToolbarLink","ToolbarSeparator","FAB","SpeedDialDirectionValue","SpeedDialTrigger","_createVNode","SpeedDialList","_Fragment","_renderList","_resolveDynamicComponent","_normalizeClass","SpeedDialRoot","SpeedDialAction"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, useAttrs, computed, normalizeStyle, openBlock, createBlock, unref, withCtx, createVNode, createElementVNode, mergeProps, renderSlot } from "vue";
|
|
2
2
|
import { c as cn } from "./cn-CzDCF-Ah.js";
|
|
3
3
|
import { _ as _sfc_main$1 } from "./Portal.vue_vue_type_script_setup_true_lang-CF3R0VCZ.js";
|
|
4
|
-
import { P as Presence } from "./Presence-
|
|
4
|
+
import { P as Presence } from "./Presence-DE4MlrJz.js";
|
|
5
5
|
const BackdropPointerEvents = {
|
|
6
6
|
/** Refers to a scrim that intercepts pointer events. */
|
|
7
7
|
Auto: "auto",
|
|
@@ -75,4 +75,4 @@ export {
|
|
|
75
75
|
BackdropPointerEvents as B,
|
|
76
76
|
_sfc_main as _
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=Backdrop.vue_vue_type_script_setup_true_lang-
|
|
78
|
+
//# sourceMappingURL=Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Backdrop.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js","sources":["../../src/presentation/overlays/backdrop/Backdrop.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Defines the pointer-event behavior of a `Backdrop` scrim. */\nexport const BackdropPointerEvents = {\n /** Refers to a scrim that intercepts pointer events. */\n Auto: 'auto',\n /** Refers to a scrim that lets clicks pass through. */\n None: 'none',\n} as const;\n\nexport type BackdropPointerEvents =\n (typeof BackdropPointerEvents)[keyof typeof BackdropPointerEvents];\n\n/**\n * The prop surface of `Backdrop`.\n *\n * React's `open` is spelled `isOpen` here, matching the house boolean prefix\n * (`isBlurred`, `isInline`); React's `className` / `style` are Vue's `class` /\n * `style` attrs and so are absent. Everything else keeps its React name.\n */\nexport interface BackdropProps {\n /** The mount state. Default `true`. */\n isOpen?: boolean;\n\n /** The backdrop-blur toggle. */\n isBlurred?: boolean;\n\n /** The pointer-event behavior; `'none'` lets clicks pass through. Default `'auto'`. */\n pointerEvents?: BackdropPointerEvents;\n\n /** The in-place render toggle — skips the Portal wrap. */\n isInline?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, normalizeStyle, useAttrs } from 'vue';\nimport { cn } from '../../../foundation/utils';\nimport { Portal, Presence } from '../../../foundation/primitives';\n\n/* Fixed-position scrim. Used by Modal / Drawer / BottomSheet / LoadingOverlay; also public for custom overlay surfaces. */\ndefineOptions({ name: 'Backdrop', inheritAttrs: false });\n\n/** Scrim content — React's `children`; a scrim is normally empty. */\ndefineSlots<{ default?(): unknown }>();\n\n/**\n * `isOpen` carries a real `true` default (React's `open = true`), unlike the\n * controlled overlays where the absent-vs-`false` distinction is load-bearing:\n * a `Backdrop` has no uncontrolled mode to fall back to.\n */\nconst props = withDefaults(defineProps<BackdropProps>(), {\n isOpen: true,\n isBlurred: false,\n pointerEvents: 'auto',\n isInline: false,\n});\n\nconst attrs = useAttrs();\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.\nconst classes = computed(() =>\n cn(\n 'fixed inset-0 z-overlay bg-black/50',\n 'motion-safe:data-[state=open]:animate-(--animate-fade-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-fade-out)',\n props.isBlurred && 'backdrop-blur-sm',\n attrs.class as string | undefined,\n ),\n);\n\n/** `pointerEvents` is normalized first so a caller's `style` still wins — React's `{ pointerEvents, ...style }`. */\nconst inlineStyle = computed(() =>\n normalizeStyle([{ pointerEvents: props.pointerEvents }, attrs.style]),\n);\n\n/** Everything but `class` / `style`, both re-applied above. */\nconst rest = computed(() => {\n const { class: _class, style: _style, ...others } = attrs;\n return others;\n});\n</script>\n\n<template>\n <!-- Two branches rather than a conditional wrapper: Vue has no `isInline ? node : <Portal>{node}</Portal>`. -->\n <Portal v-if=\"!props.isInline\">\n <Presence :is-present=\"props.isOpen\">\n <div v-bind=\"rest\" :style=\"inlineStyle\" :class=\"classes\"><slot /></div>\n </Presence>\n </Portal>\n\n <Presence v-else :is-present=\"props.isOpen\">\n <div v-bind=\"rest\" :style=\"inlineStyle\" :class=\"classes\"><slot /></div>\n </Presence>\n</template>\n"],"names":["_createBlock","_unref","Portal","_createVNode","_createElementVNode","_mergeProps","_renderSlot"],"mappings":";;;;AAEO,MAAM,wBAAwB;AAAA;AAAA,EAEnC,MAAM;AAAA;AAAA,EAEN,MAAM;AACR;;;;;;;;;;;AA2CA,UAAM,QAAQ;AAOd,UAAM,QAAQ,SAAA;AAId,UAAM,UAAU;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,aAAa;AAAA,QACnB,MAAM;AAAA,MAAA;AAAA,IACR;AAIF,UAAM,cAAc;AAAA,MAAS,MAC3B,eAAe,CAAC,EAAE,eAAe,MAAM,cAAA,GAAiB,MAAM,KAAK,CAAC;AAAA,IAAA;AAItE,UAAM,OAAO,SAAS,MAAM;AAC1B,YAAM,EAAE,OAAO,QAAQ,OAAO,QAAQ,GAAG,WAAW;AACpD,aAAO;AAAA,IACT,CAAC;;AAKgB,aAAA,CAAA,MAAM,yBAArBA,YAISC,MAAAC,WAAA,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,yBAHP,MAEW;AAAA,UAFXC,YAEWF,MAAA,QAAA,GAAA;AAAA,YAFA,cAAY,MAAM;AAAA,UAAA;6BAC3B,MAAuE;AAAA,cAAvEG,mBAAuE,OAAvEC,WAAuE,KAAA,OAAtD;AAAA,gBAAG,OAAO,YAAA;AAAA,gBAAc,OAAO,QAAA;AAAA,cAAA;gBAASC,WAAQ,KAAA,QAAA,SAAA;AAAA,cAAA;;;;;;0BAIrEN,YAEWC,MAAA,QAAA,GAAA;AAAA;QAFO,cAAY,MAAM;AAAA,MAAA;yBAClC,MAAuE;AAAA,UAAvEG,mBAAuE,OAAvEC,WAAuE,KAAA,OAAtD;AAAA,YAAG,OAAO,YAAA;AAAA,YAAc,OAAO,QAAA;AAAA,UAAA;YAASC,WAAQ,KAAA,QAAA,SAAA;AAAA,UAAA;;;;;;;"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { defineComponent, useAttrs, useTemplateRef, watch, computed, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createElementBlock, useSlots, createVNode, shallowRef, onScopeDispose, provide, inject, createElementVNode, normalizeClass, createTextVNode, toDisplayString, createCommentVNode, ref, normalizeStyle } from "vue";
|
|
2
|
-
import { t as toHtmlElement } from "./PopoverContent.vue_vue_type_script_setup_true_lang-
|
|
3
|
-
import { u as useModalContext, _ as _sfc_main$l, a as _sfc_main$m } from "./ModalContent.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { t as toHtmlElement } from "./PopoverContent.vue_vue_type_script_setup_true_lang-DYd617X5.js";
|
|
3
|
+
import { u as useModalContext, _ as _sfc_main$l, a as _sfc_main$m } from "./ModalContent.vue_vue_type_script_setup_true_lang-Co5jaeXk.js";
|
|
4
4
|
import { P as Primitive } from "./Primitive-Cm3ECaVw.js";
|
|
5
5
|
import { c as cn } from "./cn-CzDCF-Ah.js";
|
|
6
6
|
import { X } from "lucide-vue-next";
|
|
7
7
|
import { u as useOverlayChromeContext, o as overlayChromeContextKey } from "./OverlayChrome-e4MNr8Yl.js";
|
|
8
|
-
import { u as useDrawerContext, _ as _sfc_main$q, a as _sfc_main$r } from "./DrawerContent.vue_vue_type_script_setup_true_lang-
|
|
8
|
+
import { u as useDrawerContext, _ as _sfc_main$q, a as _sfc_main$r } from "./DrawerContent.vue_vue_type_script_setup_true_lang-4n5w3lg2.js";
|
|
9
9
|
import { _ as _sfc_main$n } from "./OverlayArrow.vue_vue_type_script_setup_true_lang-CLYhnI8i.js";
|
|
10
10
|
import { u as useControlled } from "./useControlled-B6M4kTLn.js";
|
|
11
11
|
import { u as useEscape } from "./useEscape-CYPdpm_l.js";
|
|
12
12
|
import { _ as _sfc_main$o } from "./Portal.vue_vue_type_script_setup_true_lang-CF3R0VCZ.js";
|
|
13
13
|
import { _ as _sfc_main$p } from "./AnchoredPositioner.vue_vue_type_script_setup_true_lang-BpBVI2Cu.js";
|
|
14
|
-
import { P as Presence } from "./Presence-
|
|
15
|
-
import { _ as _sfc_main$t } from "./Backdrop.vue_vue_type_script_setup_true_lang-
|
|
14
|
+
import { P as Presence } from "./Presence-DE4MlrJz.js";
|
|
15
|
+
import { _ as _sfc_main$t } from "./Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js";
|
|
16
16
|
import { u as useId } from "./useId-CtgAhGrn.js";
|
|
17
|
-
import { s as surfaceVariants } from "./SurfaceStyles-
|
|
17
|
+
import { s as surfaceVariants } from "./SurfaceStyles-B6W7zdMi.js";
|
|
18
18
|
import { _ as _sfc_main$s } from "./ScrollLockProvider.vue_vue_type_script_setup_true_lang-_ihHJ7jI.js";
|
|
19
|
-
import { _ as _sfc_main$u, a as _sfc_main$v } from "./DismissableLayer.vue_vue_type_script_setup_true_lang-
|
|
19
|
+
import { _ as _sfc_main$u, a as _sfc_main$v } from "./DismissableLayer.vue_vue_type_script_setup_true_lang-ptH1ttBL.js";
|
|
20
20
|
const _sfc_main$k = /* @__PURE__ */ defineComponent({
|
|
21
21
|
...{ name: "ModalTrigger", inheritAttrs: false },
|
|
22
22
|
__name: "ModalTrigger",
|
|
@@ -1091,4 +1091,4 @@ export {
|
|
|
1091
1091
|
_sfc_main$8 as t,
|
|
1092
1092
|
useBottomSheet as u
|
|
1093
1093
|
};
|
|
1094
|
-
//# sourceMappingURL=BottomSheet.vue_vue_type_script_setup_true_lang-
|
|
1094
|
+
//# sourceMappingURL=BottomSheet.vue_vue_type_script_setup_true_lang-CmNaGird.js.map
|