@ansh-ui/vue 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/{chunk-B6OXKW5Q.js → chunk-AL4PPK25.js} +5 -2
  2. package/dist/chunk-AL4PPK25.js.map +1 -0
  3. package/dist/{chunk-2VSROZ2N.js → chunk-D3HH726R.js} +152 -144
  4. package/dist/chunk-D3HH726R.js.map +1 -0
  5. package/dist/{chunk-5BQEZYG6.cjs → chunk-EDAF7RAN.cjs} +163 -155
  6. package/dist/chunk-EDAF7RAN.cjs.map +1 -0
  7. package/dist/{chunk-TMG3M6TK.js → chunk-G2OX2NH2.js} +3 -3
  8. package/dist/chunk-G2OX2NH2.js.map +1 -0
  9. package/dist/{chunk-SOYRICHU.js → chunk-G3EIU6VM.js} +14 -8
  10. package/dist/chunk-G3EIU6VM.js.map +1 -0
  11. package/dist/{chunk-KCA7RNJ4.cjs → chunk-IHH6KMBY.cjs} +239 -5
  12. package/dist/chunk-IHH6KMBY.cjs.map +1 -0
  13. package/dist/{chunk-J2LA4GRP.cjs → chunk-IO6WJEJI.cjs} +122 -120
  14. package/dist/chunk-IO6WJEJI.cjs.map +1 -0
  15. package/dist/{chunk-IOXGBPOV.cjs → chunk-JJBYF7AH.cjs} +14 -8
  16. package/dist/chunk-JJBYF7AH.cjs.map +1 -0
  17. package/dist/{chunk-Z7XOFKM4.cjs → chunk-KKCZ5RUE.cjs} +4 -2
  18. package/dist/chunk-KKCZ5RUE.cjs.map +1 -0
  19. package/dist/{chunk-6ABPGOJP.js → chunk-LFGAOD32.js} +4 -2
  20. package/dist/chunk-LFGAOD32.js.map +1 -0
  21. package/dist/{chunk-EISHOEB6.cjs → chunk-MWGVDY6K.cjs} +3 -3
  22. package/dist/chunk-MWGVDY6K.cjs.map +1 -0
  23. package/dist/{chunk-FVKLCGA4.js → chunk-NJMTWLT2.js} +123 -121
  24. package/dist/chunk-NJMTWLT2.js.map +1 -0
  25. package/dist/{chunk-T425FIC7.js → chunk-NKRPZTQA.js} +238 -5
  26. package/dist/chunk-NKRPZTQA.js.map +1 -0
  27. package/dist/{chunk-JQ4YLXXM.cjs → chunk-PNR4RQ4T.cjs} +5 -2
  28. package/dist/chunk-PNR4RQ4T.cjs.map +1 -0
  29. package/dist/data.cjs +16 -16
  30. package/dist/data.d.cts +54 -52
  31. package/dist/data.d.ts +54 -52
  32. package/dist/data.js +1 -1
  33. package/dist/form.cjs +36 -36
  34. package/dist/form.d.cts +53 -45
  35. package/dist/form.d.ts +53 -45
  36. package/dist/form.js +1 -1
  37. package/dist/index.cjs +208 -180
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +33 -8
  40. package/dist/index.d.ts +33 -8
  41. package/dist/index.js +31 -15
  42. package/dist/index.js.map +1 -1
  43. package/dist/layout.cjs +13 -13
  44. package/dist/layout.d.cts +23 -14
  45. package/dist/layout.d.ts +23 -14
  46. package/dist/layout.js +1 -1
  47. package/dist/motion.cjs +11 -11
  48. package/dist/motion.d.cts +41 -37
  49. package/dist/motion.d.ts +41 -37
  50. package/dist/motion.js +1 -1
  51. package/dist/navigation.cjs +13 -9
  52. package/dist/navigation.d.cts +125 -4
  53. package/dist/navigation.d.ts +125 -4
  54. package/dist/navigation.js +2 -2
  55. package/dist/overlay.cjs +14 -14
  56. package/dist/overlay.d.cts +36 -33
  57. package/dist/overlay.d.ts +36 -33
  58. package/dist/overlay.js +2 -2
  59. package/dist/{position-Cn7qP1pn.d.cts → position-CiY171HP.d.cts} +2 -1
  60. package/dist/{position-Cn7qP1pn.d.ts → position-CiY171HP.d.ts} +2 -1
  61. package/dist/primitives.cjs +6 -6
  62. package/dist/primitives.d.cts +6 -5
  63. package/dist/primitives.d.ts +6 -5
  64. package/dist/primitives.js +1 -1
  65. package/dist/{sidebar-CTZ-Ckko.d.ts → sidebar-B9zDHMbn.d.cts} +5 -4
  66. package/dist/{sidebar-CQqEmpid.d.cts → sidebar-DMrKHqZ5.d.ts} +5 -4
  67. package/dist/styles.css +464 -0
  68. package/dist/{utils-IKPG3zcC.d.cts → utils-D4XwXDeX.d.cts} +2 -1
  69. package/dist/{utils-IKPG3zcC.d.ts → utils-D4XwXDeX.d.ts} +2 -1
  70. package/package.json +3 -3
  71. package/dist/chunk-2VSROZ2N.js.map +0 -1
  72. package/dist/chunk-5BQEZYG6.cjs.map +0 -1
  73. package/dist/chunk-6ABPGOJP.js.map +0 -1
  74. package/dist/chunk-B6OXKW5Q.js.map +0 -1
  75. package/dist/chunk-EISHOEB6.cjs.map +0 -1
  76. package/dist/chunk-FVKLCGA4.js.map +0 -1
  77. package/dist/chunk-IOXGBPOV.cjs.map +0 -1
  78. package/dist/chunk-J2LA4GRP.cjs.map +0 -1
  79. package/dist/chunk-JQ4YLXXM.cjs.map +0 -1
  80. package/dist/chunk-KCA7RNJ4.cjs.map +0 -1
  81. package/dist/chunk-SOYRICHU.js.map +0 -1
  82. package/dist/chunk-T425FIC7.js.map +0 -1
  83. package/dist/chunk-TMG3M6TK.js.map +0 -1
  84. package/dist/chunk-Z7XOFKM4.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/tabs.ts","../src/components/navigation/breadcrumbs.ts","../src/components/navigation/nav-menu.ts","../src/components/disclosure.ts"],"names":["defineComponent","ref","h"],"mappings":"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","file":"chunk-T425FIC7.js","sourcesContent":["import { type PropType, computed, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useRovingFocus } from '../../primitives/focus'\n\nexport interface TabItem {\n id: string\n label: SlotContent\n icon?: SlotContent\n /** Count or status shown after the label. */\n badge?: SlotContent\n disabled?: boolean\n content?: SlotContent\n}\n\nexport type TabsVariant = 'underline' | 'pill' | 'enclosed'\nexport type TabsOrientation = 'horizontal' | 'vertical'\nexport type TabsSize = 'sm' | 'md'\n\n/**\n * Tabs — the Vue counterpart of `@ansh-ui/react`'s `Tabs`.\n *\n * The full WAI-ARIA tab pattern: a single tab stop for the whole list (roving tabindex, via\n * `useRovingFocus`), arrow keys to move between tabs, Home/End to jump to the ends, and\n * `aria-controls`/`aria-labelledby` linking each tab to its panel in both directions.\n *\n * `useRovingFocus`'s `items` ref only receives an element for *enabled* tabs — a disabled tab's slot\n * is left `null`, which is exactly what the hook filters out, so disabled tabs are skipped during\n * arrow-key and Home/End navigation without any extra bookkeeping here.\n *\n * Panels are unmounted when inactive rather than hidden (the render function simply never creates\n * the `v-if`-equivalent branch), matching the React version's reasoning: hiding keeps the whole tree\n * mounted, so timers keep running, media keeps buffering and forms keep their state — the last of\n * which sounds desirable until a hidden required field blocks submission with no visible error.\n *\n * `v-model` selects the active tab id. Leave it unbound with `default-value` for an uncontrolled\n * tab bar.\n */\nexport const Tabs = defineComponent({\n name: 'AnshTabs',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly TabItem[]>, required: true },\n modelValue: { type: String, default: undefined },\n defaultValue: { type: String, default: undefined },\n variant: { type: String as PropType<TabsVariant>, default: 'underline' },\n orientation: { type: String as PropType<TabsOrientation>, default: 'horizontal' },\n size: { type: String as PropType<TabsSize>, default: 'md' },\n /** Stretch tabs to fill the available width. */\n fitted: { type: Boolean, default: false },\n /**\n * Activate on arrow-key focus, rather than requiring Enter/Space.\n *\n * Automatic is the ARIA-preferred default for cheap panels. Set `false` when switching a tab\n * triggers a fetch — arrowing past three tabs would fire three requests.\n */\n activateOnFocus: { type: Boolean, default: true },\n /** Accessible name for the tab list. */\n label: { type: String, required: true },\n },\n emits: ['update:modelValue'],\n setup(props, { attrs, emit, slots }) {\n const initialActive = props.defaultValue ?? props.items.find((item) => !item.disabled)?.id ?? ''\n\n const [active, setActive] = useControllableState(\n () => props.modelValue,\n initialActive,\n (next) => emit('update:modelValue', next),\n )\n\n const baseId = useId()\n const tabRefs = ref<Array<HTMLElement | null>>([])\n\n const activeItem = computed(() => props.items.find((item) => item.id === active.value))\n const enabledIds = computed(() =>\n props.items.filter((item) => !item.disabled).map((item) => item.id),\n )\n\n const onRovingActiveChange = (position: number): void => {\n const id = enabledIds.value[position]\n if (id !== undefined && props.activateOnFocus) setActive(id)\n }\n\n const onKeydown = useRovingFocus({\n items: tabRefs,\n active: () => enabledIds.value.indexOf(active.value),\n onActiveChange: onRovingActiveChange,\n orientation: props.orientation,\n loop: true,\n })\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const currentActive = active.value\n const currentActiveItem = activeItem.value\n const hasPanel = currentActiveItem?.content !== undefined || Boolean(slots.default)\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-tabs',\n `ansh-tabs--${props.variant}`,\n `ansh-tabs--${props.orientation}`,\n `ansh-tabs--${props.size}`,\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n h(\n 'div',\n {\n role: 'tablist',\n 'aria-label': props.label,\n 'aria-orientation': props.orientation,\n class: cx('ansh-tabs__list', props.fitted && 'ansh-tabs__list--fitted'),\n onKeydown,\n },\n props.items.map((item, index) => {\n const selected = item.id === currentActive\n return h(\n 'button',\n {\n key: item.id,\n ref: (node) => {\n tabRefs.value[index] = item.disabled ? null : (node as HTMLElement | null)\n },\n type: 'button',\n role: 'tab',\n id: `${baseId}-tab-${item.id}`,\n 'aria-selected': selected,\n 'aria-controls': `${baseId}-panel-${item.id}`,\n // Exactly one tab is in the tab order. Without this, a bar of eight tabs costs a\n // keyboard user eight presses to pass.\n tabindex: selected ? '0' : '-1',\n disabled: item.disabled,\n class: cx(\n 'ansh-tabs__tab',\n selected && 'ansh-tabs__tab--active',\n 'ansh-focusable',\n ),\n onClick: () => setActive(item.id),\n },\n [\n item.icon !== undefined\n ? h('span', { class: 'ansh-tabs__icon' }, [resolveSlotContent(item.icon)])\n : null,\n h('span', {}, [resolveSlotContent(item.label)]),\n item.badge !== undefined\n ? h('span', { class: 'ansh-tabs__badge' }, [resolveSlotContent(item.badge)])\n : null,\n ],\n )\n }),\n ),\n\n hasPanel\n ? h(\n 'div',\n {\n role: 'tabpanel',\n id: `${baseId}-panel-${currentActive}`,\n 'aria-labelledby': `${baseId}-tab-${currentActive}`,\n // Focusable so a keyboard user can Tab from the tab into its panel and scroll it,\n // which is required when the panel has no focusable content of its own.\n tabindex: '0',\n class: 'ansh-tabs__panel ansh-focusable',\n },\n [\n currentActiveItem?.content !== undefined\n ? resolveSlotContent(currentActiveItem.content)\n : slots.default?.(),\n ],\n )\n : null,\n ],\n )\n }\n },\n})\n","import { type PropType, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\nexport interface Crumb {\n label: SlotContent\n href?: string\n icon?: SlotContent\n onClick?: () => void\n}\n\n/**\n * A breadcrumb trail — the Vue counterpart of `@ansh-ui/react`'s `Breadcrumbs`.\n *\n * `<nav aria-label=\"Breadcrumb\">` around an ordered list, with the last item marked\n * `aria-current=\"page\"` and rendered as text rather than a link. Making the current page a link to\n * itself is a small thing that wastes a keyboard user's time on every page.\n *\n * Separators are `aria-hidden`, so the trail reads as \"Home, Projects, Invoice 401\" rather than\n * \"Home slash Projects slash\".\n */\nexport const Breadcrumbs = defineComponent({\n name: 'AnshBreadcrumbs',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly Crumb[]>, required: true },\n /** Collapse the middle when there are more than this many. Default `Infinity`. */\n maxItems: { type: Number, default: Number.POSITIVE_INFINITY },\n separator: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs }) {\n const expanded = ref(false)\n\n const defaultChevron = () =>\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12', 'aria-hidden': 'true' }, [\n h('path', {\n d: 'M4.5 2.5L8 6l-3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ])\n\n const renderChevron = () =>\n props.separator !== undefined ? resolveSlotContent(props.separator) : defaultChevron()\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const items = props.items\n const collapsed = !expanded.value && items.length > props.maxItems && props.maxItems >= 2\n // Keep the first and the last two — the root and where you are — which is the information\n // people actually navigate by.\n const shown = collapsed ? [items[0]!, ...items.slice(-2)] : items\n const gapAfter = collapsed ? 0 : -1\n\n return h(\n 'nav',\n {\n 'aria-label': 'Breadcrumb',\n class: cx('ansh-breadcrumbs', attrClass as string),\n ...restAttrs,\n },\n [\n h(\n 'ol',\n { class: 'ansh-breadcrumbs__list' },\n shown.map((crumb, index) => {\n const isLast = index === shown.length - 1\n\n return h('li', { key: index, class: 'ansh-breadcrumbs__item' }, [\n index > 0\n ? h('span', { class: 'ansh-breadcrumbs__separator', 'aria-hidden': 'true' }, [\n renderChevron(),\n ])\n : null,\n\n isLast\n ? h('span', { class: 'ansh-breadcrumbs__current', 'aria-current': 'page' }, [\n crumb.icon !== undefined ? resolveSlotContent(crumb.icon) : null,\n resolveSlotContent(crumb.label),\n ])\n : h(\n 'a',\n {\n href: crumb.href ?? '#',\n class: 'ansh-breadcrumbs__link ansh-focusable',\n onClick: crumb.onClick\n ? (event: MouseEvent) => {\n event.preventDefault()\n crumb.onClick!()\n }\n : undefined,\n },\n [\n crumb.icon !== undefined ? resolveSlotContent(crumb.icon) : null,\n resolveSlotContent(crumb.label),\n ],\n ),\n\n index === gapAfter\n ? [\n h('span', { class: 'ansh-breadcrumbs__separator', 'aria-hidden': 'true' }, [\n renderChevron(),\n ]),\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-breadcrumbs__more ansh-focusable',\n 'aria-label': `Show ${items.length - 3} hidden breadcrumbs`,\n 'aria-expanded': false,\n onClick: () => {\n expanded.value = true\n },\n },\n '…',\n ),\n ]\n : null,\n ])\n }),\n ),\n ],\n )\n }\n },\n})\n\nexport interface Step {\n id: string\n label: SlotContent\n description?: SlotContent\n /** Marks the step failed — validation errors on a wizard page. */\n error?: boolean\n /** Allow jumping to this step directly. */\n clickable?: boolean\n}\n\nexport type StepperOrientation = 'horizontal' | 'vertical'\n\n/**\n * A progress stepper for multi-page flows — checkout, onboarding, approvals.\n *\n * The state of each step is announced in text, not just drawn: `aria-current=\"step\"` on the active\n * one and a visually hidden \"completed\"/\"current\"/\"not started\" on each. A stepper that\n * distinguishes its states with a tick glyph and a colour tells a screen-reader user nothing.\n *\n * `current` is always controlled by the caller — there is no uncontrolled mode, matching the React\n * version. `update:current` fires (in addition to plain click handling) so `v-model:current` works\n * for callers that want it.\n */\nexport const Stepper = defineComponent({\n name: 'AnshStepper',\n inheritAttrs: false,\n props: {\n steps: { type: Array as PropType<readonly Step[]>, required: true },\n /** Index of the current step. Steps before it are complete. */\n current: { type: Number, required: true },\n orientation: { type: String as PropType<StepperOrientation>, default: 'horizontal' },\n },\n emits: ['update:current'],\n setup(props, { attrs, emit }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'nav',\n {\n class: cx('ansh-stepper', `ansh-stepper--${props.orientation}`, attrClass as string),\n 'aria-label': 'Progress',\n ...restAttrs,\n },\n [\n h(\n 'ol',\n { class: 'ansh-stepper__list' },\n props.steps.map((step, index) => {\n const complete = index < props.current\n const active = index === props.current\n const state = step.error\n ? 'error'\n : complete\n ? 'complete'\n : active\n ? 'current'\n : 'upcoming'\n const interactive = step.clickable && index !== props.current\n\n const inner = [\n h(\n 'span',\n {\n class: cx('ansh-stepper__marker', `ansh-stepper__marker--${state}`),\n 'aria-hidden': 'true',\n },\n [\n step.error\n ? '!'\n : complete\n ? h('svg', { viewBox: '0 0 14 14', width: '12', height: '12' }, [\n h('path', {\n d: 'M2.5 7.5l3 3 6-6.5',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n fill: 'none',\n }),\n ])\n : String(index + 1),\n ],\n ),\n h('span', { class: 'ansh-stepper__text' }, [\n h('span', { class: 'ansh-stepper__label' }, [resolveSlotContent(step.label)]),\n step.description\n ? h('span', { class: 'ansh-stepper__description' }, [\n resolveSlotContent(step.description),\n ])\n : null,\n h('span', { class: 'ansh-visually-hidden' }, [\n step.error\n ? ' — has errors'\n : complete\n ? ' — completed'\n : active\n ? ' — current step'\n : ' — not started',\n ]),\n ]),\n ]\n\n return h(\n 'li',\n {\n key: step.id,\n class: cx('ansh-stepper__item', `ansh-stepper__item--${state}`),\n 'aria-current': active ? 'step' : undefined,\n },\n [\n interactive\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-stepper__button ansh-focusable',\n onClick: () => emit('update:current', index),\n },\n inner,\n )\n : h('span', { class: 'ansh-stepper__button' }, inner),\n ],\n )\n }),\n ),\n ],\n )\n }\n },\n})\n","import { type PropType, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\n\nexport interface MegaMenuLink {\n id: string\n label: string\n description?: string\n href?: string\n icon?: SlotContent\n onClick?: () => void\n}\n\nexport interface MegaMenuColumn {\n id: string\n heading?: string\n links: readonly MegaMenuLink[]\n}\n\nexport interface NavMenuItem {\n id: string\n label: string\n href?: string\n /** Columns of links. Presence of this makes the item a dropdown rather than a link. */\n columns?: readonly MegaMenuColumn[]\n /** Promoted panel on the right of the dropdown — a featured post, a CTA. */\n feature?: SlotContent\n}\n\n/**\n * A site navigation bar with mega-menu dropdowns — the Vue counterpart of `@ansh-ui/react`'s\n * `NavigationMenu` (exported under that name even though the file is `nav-menu.ts`, matching the\n * React source).\n *\n * The pattern marketing sites need and the one most likely to be built with hover alone. This one:\n *\n * - opens on hover **and** on click/Enter, so it works with a keyboard and on touch;\n * - keeps the panel open while the pointer travels toward it, via a close delay;\n * - closes on Escape, returning focus to the trigger;\n * - marks each trigger `aria-expanded` and links it to its panel with `aria-controls`.\n *\n * The panel is a plain absolutely-positioned element rather than a `Teleport`. A mega menu is\n * full-width and anchored to the bar, not to a point, so a portal's viewport-relative positioning\n * would fight the layout rather than help it — the same reasoning the React version documents.\n */\nexport const NavigationMenu = defineComponent({\n name: 'AnshNavigationMenu',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly NavMenuItem[]>, required: true },\n label: { type: String, default: 'Main navigation' },\n },\n setup(props, { attrs }) {\n const openId = ref<string | null>(null)\n const rootRef = ref<HTMLElement | null>(null)\n const baseId = useId()\n let timer: ReturnType<typeof setTimeout> | undefined\n\n const schedule = (next: string | null, delay: number): void => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n openId.value = next\n }, delay)\n }\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n // Close when focus leaves the whole bar. `focusout` with a `relatedTarget` containment check is\n // the reliable way to detect that — a blur handler on each trigger fires while focus is still\n // moving to a link inside the panel, closing it just before the click lands.\n watch(openId, (id, _previous, onCleanup) => {\n if (!id) return\n const root = rootRef.value\n if (!root) return\n\n const onFocusOut = (event: FocusEvent): void => {\n const next = event.relatedTarget as Node | null\n if (next && root.contains(next)) return\n openId.value = null\n }\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape') return\n openId.value = null\n root.querySelector<HTMLElement>('[aria-expanded=\"true\"]')?.focus()\n }\n\n root.addEventListener('focusout', onFocusOut)\n document.addEventListener('keydown', onKeyDown)\n onCleanup(() => {\n root.removeEventListener('focusout', onFocusOut)\n document.removeEventListener('keydown', onKeyDown)\n })\n })\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'nav',\n {\n ref: rootRef,\n class: cx('ansh-navmenu', attrClass as string),\n 'aria-label': props.label,\n onMouseleave: () => schedule(null, 200),\n ...restAttrs,\n },\n [\n h(\n 'ul',\n { class: 'ansh-navmenu__list' },\n props.items.map((item) => {\n const hasPanel = Boolean(item.columns?.length)\n const open = openId.value === item.id\n const panelId = `${baseId}-${item.id}`\n\n if (!hasPanel) {\n return h('li', { key: item.id, class: 'ansh-navmenu__item' }, [\n h(\n 'a',\n { href: item.href ?? '#', class: 'ansh-navmenu__link ansh-focusable' },\n item.label,\n ),\n ])\n }\n\n return h(\n 'li',\n {\n key: item.id,\n class: cx('ansh-navmenu__item', open && 'ansh-navmenu__item--open'),\n onMouseenter: () => schedule(item.id, 80),\n },\n [\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-navmenu__link ansh-navmenu__link--trigger ansh-focusable',\n 'aria-expanded': open,\n 'aria-controls': panelId,\n onClick: () => {\n openId.value = open ? null : item.id\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.key !== 'ArrowDown') return\n event.preventDefault()\n openId.value = item.id\n // Focus the first link in the panel on the next frame, once it exists.\n requestAnimationFrame(() => {\n document\n .getElementById(panelId)\n ?.querySelector<HTMLElement>('a, button')\n ?.focus()\n })\n },\n },\n [\n item.label,\n h(\n 'span',\n {\n class: cx('ansh-navmenu__chevron', open && 'ansh-navmenu__chevron--open'),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 12 12', width: '10', height: '10' }, [\n h('path', {\n d: 'M3 4.5L6 7.5l3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n ),\n\n h(\n 'div',\n {\n id: panelId,\n class: 'ansh-navmenu__panel',\n hidden: !open,\n onMouseenter: () => clearTimeout(timer),\n },\n [\n h('div', { class: 'ansh-navmenu__grid' }, [\n ...item.columns!.map((column) =>\n h('div', { class: 'ansh-navmenu__column', key: column.id }, [\n column.heading\n ? h('p', { class: 'ansh-navmenu__heading' }, column.heading)\n : null,\n h(\n 'ul',\n { class: 'ansh-navmenu__links' },\n column.links.map((link) =>\n h('li', { key: link.id }, [\n h(\n 'a',\n {\n href: link.href ?? '#',\n class: 'ansh-navmenu__entry ansh-focusable',\n onClick: link.onClick\n ? (event: MouseEvent) => {\n event.preventDefault()\n link.onClick!()\n openId.value = null\n }\n : () => {\n openId.value = null\n },\n },\n [\n link.icon !== undefined\n ? h(\n 'span',\n { class: 'ansh-navmenu__icon', 'aria-hidden': 'true' },\n [resolveSlotContent(link.icon)],\n )\n : null,\n h('span', { class: 'ansh-navmenu__entry-text' }, [\n h(\n 'span',\n { class: 'ansh-navmenu__entry-label' },\n link.label,\n ),\n link.description\n ? h(\n 'span',\n { class: 'ansh-navmenu__entry-description' },\n link.description,\n )\n : null,\n ]),\n ],\n ),\n ]),\n ),\n ),\n ]),\n ),\n\n item.feature !== undefined\n ? h('div', { class: 'ansh-navmenu__feature' }, [\n resolveSlotContent(item.feature),\n ])\n : null,\n ]),\n ],\n ),\n ],\n )\n }),\n ),\n ],\n )\n }\n },\n})\n","import { type PropType, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../primitives/utils'\nimport { useControllableState } from '../primitives/use-controllable-state'\nimport { useRovingFocus } from '../primitives/focus'\n\n/**\n * Disclosure widgets — the Vue counterpart of `@ansh-ui/react`'s `disclosure.tsx`.\n *\n * The animation here is the interesting part. Height cannot be transitioned to `auto`, so the usual\n * workarounds are measuring the content with JavaScript (a forced layout on every toggle, and wrong\n * the moment the content reflows) or a `max-height` guess (which either clips tall content or makes\n * short content ease over an invisible gap, so the timing looks wrong).\n *\n * `grid-template-rows: 0fr → 1fr` transitions to the content's intrinsic height with no JavaScript\n * and no magic numbers — pure CSS keyed off the `data-state` attribute these components set. It\n * needs the extra wrapper with `min-height: 0` — without that the grid child refuses to shrink below\n * its content size and nothing animates. See `packages/react/src/styles/navigation.css`'s\n * `.ansh-collapsible__region` / `.ansh-accordion__region` rules for the mechanism itself; nothing on the\n * Vue side has to know about it beyond setting the same attribute.\n */\n\nexport interface CollapsibleProps {\n open?: boolean\n defaultOpen?: boolean\n trigger: SlotContent\n /** Render the trigger as-is rather than wrapping it in the styled button row. */\n bare?: boolean\n}\n\n/**\n * A single show/hide region.\n *\n * `v-model:open` (or `default-open` for an uncontrolled one) drives the disclosed state, routed\n * through `useControllableState` exactly like `Accordion`'s open-item set below.\n */\nexport const Collapsible = defineComponent({\n name: 'AnshCollapsible',\n inheritAttrs: false,\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n trigger: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n bare: { type: Boolean, default: false },\n },\n emits: ['update:open'],\n setup(props, { attrs, emit, slots }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n const id = useId()\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'div',\n {\n class: cx('ansh-collapsible', attrClass as string),\n 'data-state': isOpen.value ? 'open' : 'closed',\n ...restAttrs,\n },\n [\n h(\n 'button',\n {\n type: 'button',\n class: cx(\n props.bare ? 'ansh-collapsible__bare' : 'ansh-collapsible__trigger',\n 'ansh-focusable',\n ),\n 'aria-expanded': isOpen.value,\n 'aria-controls': id,\n onClick: () => setOpen(!isOpen.value),\n },\n [\n resolveSlotContent(props.trigger),\n h(\n 'span',\n {\n class: cx(\n 'ansh-collapsible__chevron',\n isOpen.value && 'ansh-collapsible__chevron--open',\n ),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12' }, [\n h('path', {\n d: 'M3 4.5L6 7.5l3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n ),\n\n h(\n 'div',\n {\n class: 'ansh-collapsible__region',\n id,\n role: 'region',\n 'data-state': isOpen.value ? 'open' : 'closed',\n },\n [\n // `inert` on the collapsed panel removes its contents from the tab order and the\n // accessibility tree. Without it, a keyboard user tabs into links inside a section\n // that is visually closed — invisible focus, and no way to tell where they are.\n h(\n 'div',\n { class: 'ansh-collapsible__inner', ...(isOpen.value ? null : { inert: true }) },\n slots.default?.(),\n ),\n ],\n ),\n ],\n )\n }\n },\n})\n\nexport interface AccordionItem {\n id: string\n title: SlotContent\n /** Secondary line under the title. */\n subtitle?: SlotContent\n icon?: SlotContent\n disabled?: boolean\n content: SlotContent\n}\n\nexport type AccordionVariant = 'bordered' | 'separated' | 'plain'\n\n/**\n * A stack of collapsible sections — the Vue counterpart of `@ansh-ui/react`'s `Accordion`.\n *\n * Headings are real `<h3>` elements wrapping the button, which is the ARIA-recommended structure: a\n * screen-reader user navigating by heading finds each section, and the button inside carries the\n * expanded state. A `<div>` with `role=\"button\"` looks identical and is invisible to heading\n * navigation.\n *\n * Arrow keys move between headers, and Home/End jump to the ends, via `useRovingFocus` bound to the\n * accordion root. Unlike `Tabs`, this is *not* a single-tab-stop composite — every header stays in\n * the normal Tab order (no `tabindex` is set on them at all), matching the ARIA APG accordion\n * pattern, where arrow keys are an addition to Tab rather than a replacement for it.\n * `useRovingFocus`'s `active()` getter is derived from `document.activeElement` rather than a stored\n * index for exactly that reason — there is no single \"selected\" header the way `Tabs` has a selected\n * tab, only whichever header currently has focus.\n *\n * `v-model` (or `default-value` for an uncontrolled accordion) is the array of open item ids, exactly\n * like the React version's `value`/`defaultValue`.\n */\nexport const Accordion = defineComponent({\n name: 'AnshAccordion',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly AccordionItem[]>, required: true },\n /** Allow several panels open at once. Default `false`. */\n multiple: { type: Boolean, default: false },\n modelValue: { type: Array as PropType<readonly string[]>, default: undefined },\n defaultValue: { type: Array as PropType<readonly string[]>, default: () => [] },\n variant: { type: String as PropType<AccordionVariant>, default: 'bordered' },\n },\n emits: ['update:modelValue'],\n setup(props, { attrs, emit }) {\n const [openIds, setOpenIds] = useControllableState<readonly string[]>(\n () => props.modelValue,\n props.defaultValue,\n (next) => emit('update:modelValue', next),\n )\n const baseId = useId()\n const headerRefs = ref<Array<HTMLElement | null>>([])\n\n const toggle = (id: string): void => {\n if (openIds.value.includes(id)) {\n setOpenIds(openIds.value.filter((entry) => entry !== id))\n } else {\n setOpenIds(props.multiple ? [...openIds.value, id] : [id])\n }\n }\n\n const onKeydown = useRovingFocus({\n items: headerRefs,\n // There is no single \"active\" header the way `Tabs` has a selected tab — arrow keys move\n // relative to whichever header currently owns focus.\n active: () => {\n const enabled = headerRefs.value.filter((node): node is HTMLElement => node !== null)\n return enabled.indexOf(document.activeElement as HTMLElement)\n },\n // The hook already moves focus to the target header; there is no selection model to sync.\n onActiveChange: () => {},\n orientation: 'vertical',\n loop: true,\n })\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'div',\n {\n class: cx('ansh-accordion', `ansh-accordion--${props.variant}`, attrClass as string),\n onKeydown,\n ...restAttrs,\n },\n props.items.map((item, index) => {\n const open = openIds.value.includes(item.id)\n const panelId = `${baseId}-panel-${item.id}`\n const headerId = `${baseId}-header-${item.id}`\n\n return h(\n 'div',\n {\n key: item.id,\n class: cx('ansh-accordion__item', open && 'ansh-accordion__item--open'),\n 'data-state': open ? 'open' : 'closed',\n },\n [\n h('h3', { class: 'ansh-accordion__heading' }, [\n h(\n 'button',\n {\n ref: (node) => {\n headerRefs.value[index] = item.disabled ? null : (node as HTMLElement | null)\n },\n type: 'button',\n id: headerId,\n class: 'ansh-accordion__trigger ansh-focusable',\n 'aria-expanded': open,\n 'aria-controls': panelId,\n disabled: item.disabled,\n onClick: () => toggle(item.id),\n },\n [\n item.icon !== undefined\n ? h('span', { class: 'ansh-accordion__icon' }, [\n resolveSlotContent(item.icon),\n ])\n : null,\n h('span', { class: 'ansh-accordion__text' }, [\n h('span', { class: 'ansh-accordion__title' }, [\n resolveSlotContent(item.title),\n ]),\n item.subtitle\n ? h('span', { class: 'ansh-accordion__subtitle' }, [\n resolveSlotContent(item.subtitle),\n ])\n : null,\n ]),\n h(\n 'span',\n {\n class: cx(\n 'ansh-accordion__chevron',\n open && 'ansh-accordion__chevron--open',\n ),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12' }, [\n h('path', {\n d: 'M3 4.5L6 7.5l3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n ),\n ]),\n\n h(\n 'div',\n {\n class: 'ansh-accordion__region',\n id: panelId,\n role: 'region',\n 'aria-labelledby': headerId,\n 'data-state': open ? 'open' : 'closed',\n },\n [\n h('div', { class: 'ansh-accordion__panel', ...(open ? null : { inert: true }) }, [\n resolveSlotContent(item.content),\n ]),\n ],\n ),\n ],\n )\n }),\n )\n }\n },\n})\n\nexport interface DisclosureListProps {\n /** Simple show-more list — the pattern for \"N more items\". */\n items: readonly SlotContent[]\n /** How many to show before collapsing. Default `3`. */\n initial?: number\n moreLabel?: (hidden: number) => string\n lessLabel?: string\n}\n\n/** Show a few items with a \"show N more\" toggle. */\nexport const DisclosureList = defineComponent({\n name: 'AnshDisclosureList',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly SlotContent[]>, required: true },\n initial: { type: Number, default: 3 },\n moreLabel: {\n type: Function as PropType<(hidden: number) => string>,\n default: (hidden: number) => `Show ${hidden} more`,\n },\n lessLabel: { type: String, default: 'Show less' },\n },\n setup(props, { attrs }) {\n const expanded = ref(false)\n const id = useId()\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const hidden = props.items.length - props.initial\n\n if (hidden <= 0) {\n return h(\n 'ul',\n { class: cx('ansh-disclosure-list', attrClass as string), ...restAttrs },\n props.items.map((item, index) => h('li', { key: index }, [resolveSlotContent(item)])),\n )\n }\n\n const shown = expanded.value ? props.items : props.items.slice(0, props.initial)\n\n return h('div', { class: attrClass as string, ...restAttrs }, [\n h(\n 'ul',\n { class: 'ansh-disclosure-list', id },\n shown.map((item, index) => h('li', { key: index }, [resolveSlotContent(item)])),\n ),\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-disclosure-list__toggle ansh-focusable',\n 'aria-expanded': expanded.value,\n 'aria-controls': id,\n onClick: () => {\n expanded.value = !expanded.value\n },\n },\n expanded.value ? props.lessLabel : props.moreLabel(hidden),\n ),\n ])\n }\n },\n})\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/primitives/focus.ts"],"names":[],"mappings":"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","file":"chunk-TMG3M6TK.js","sourcesContent":["import { type Ref, getCurrentScope, onScopeDispose, watch } from 'vue'\nimport { type ReadonlyRef } from './utils'\n\n/**\n * Focus management for overlay surfaces — the Vue counterpart of `@ansh-ui/react`'s `focus.ts`.\n *\n * Three separate concerns that are usually conflated:\n *\n * 1. **Finding what can be focused.** Harder than it looks — `disabled`, `hidden`, `inert`,\n * zero-size elements and negative tabindex all disqualify a node, and CSS-hidden ancestors\n * disqualify their whole subtree.\n * 2. **Trapping.** Tab must cycle within the surface. Required by WCAG 2.4.3 for modals.\n * 3. **Restoring.** Focus must return to the trigger on close, or a keyboard user is dumped at the\n * top of the document and has to navigate all the way back.\n */\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction isVisible(element: HTMLElement): boolean {\n if (element.hasAttribute('inert')) return false\n if (element.offsetParent !== null) return true\n const rect = element.getBoundingClientRect()\n return rect.width > 0 || rect.height > 0\n}\n\n/** Every tabbable descendant, in tab order. */\nexport function getTabbable(container: HTMLElement | null | undefined): HTMLElement[] {\n if (!container) return []\n const nodes = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR))\n return nodes.filter((node) => {\n if (node.getAttribute('aria-hidden') === 'true') return false\n if (node.closest('[inert]')) return false\n return isVisible(node)\n })\n}\n\n/**\n * Trap Tab within a container while `active`.\n *\n * Implemented on `keydown` at the container rather than with sentinel elements at either end. The\n * sentinel approach adds two focusable nodes to the accessibility tree that screen readers can land\n * on and announce as blank; intercepting the key does not.\n */\nexport function useFocusTrap(\n target: Ref<HTMLElement | null | undefined>,\n active: ReadonlyRef<boolean>,\n): void {\n let detach: (() => void) | null = null\n\n const attach = (): void => {\n const container = target.value\n if (!container || detach) return\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return\n\n const tabbable = getTabbable(container)\n if (tabbable.length === 0) {\n event.preventDefault()\n return\n }\n\n const first = tabbable[0]!\n const last = tabbable[tabbable.length - 1]!\n const activeElement = document.activeElement as HTMLElement | null\n\n if (event.shiftKey && (activeElement === first || activeElement === container)) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', onKeyDown)\n detach = () => {\n container.removeEventListener('keydown', onKeyDown)\n detach = null\n }\n }\n\n watch([active, target], () => (active.value ? attach() : detach?.()), {\n immediate: true,\n flush: 'post',\n })\n\n if (getCurrentScope()) onScopeDispose(() => detach?.())\n}\n\n/**\n * Restore focus to whatever was focused before `active` became true.\n *\n * The element is captured on activation, not on mount, because a component can be mounted long\n * before it opens.\n */\nexport function useFocusRestore(active: ReadonlyRef<boolean>): void {\n let previous: HTMLElement | null = null\n\n watch(\n active,\n (isActive) => {\n if (isActive) {\n previous = document.activeElement as HTMLElement | null\n return\n }\n // Guard against restoring to a node that has since been removed from the document —\n // focusing a detached element silently moves focus to `<body>`, losing the user's place.\n if (previous && previous.isConnected) previous.focus?.({ preventScroll: true })\n previous = null\n },\n { flush: 'post' },\n )\n}\n\n/**\n * Move focus into a surface when it opens.\n *\n * Prefers an explicitly marked element, then the first tabbable one, then the container itself. The\n * container fallback matters for a dialog whose only content is text: focus must land inside it so a\n * screen reader announces the dialog rather than continuing from the page behind.\n */\nexport function useAutoFocus(\n target: Ref<HTMLElement | null | undefined>,\n active: ReadonlyRef<boolean>,\n initialFocus?: Ref<HTMLElement | null | undefined>,\n): void {\n let frame: number | null = null\n\n watch(\n [active, target],\n () => {\n if (frame !== null) cancelAnimationFrame(frame)\n if (!active.value) return\n const container = target.value\n if (!container) return\n\n // After paint: the surface may still be animating in, and focusing a node with\n // `visibility: hidden` is a no-op that silently leaves focus on the body.\n frame = requestAnimationFrame(() => {\n frame = null\n const explicit = initialFocus?.value\n if (explicit?.isConnected) {\n explicit.focus({ preventScroll: true })\n return\n }\n const target2 = getTabbable(container)[0] ?? container\n target2.focus({ preventScroll: true })\n })\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n if (frame !== null) cancelAnimationFrame(frame)\n })\n }\n}\n\n/**\n * Roving tabindex for a composite widget (toolbar, tab list, menu).\n *\n * The ARIA authoring practice: a composite has exactly **one** tab stop, and arrow keys move within\n * it. Returns a keydown handler to bind on the composite's container.\n */\nexport function useRovingFocus(options: {\n /** Items in DOM order. */\n items: Ref<Array<HTMLElement | null>>\n /** Index that currently owns the tab stop. */\n active: () => number\n onActiveChange: (index: number) => void\n orientation?: 'horizontal' | 'vertical' | 'both'\n loop?: boolean\n}): (event: KeyboardEvent) => void {\n const { items, active, onActiveChange, orientation = 'horizontal', loop = true } = options\n\n return (event: KeyboardEvent) => {\n const nodes = items.value.filter((item): item is HTMLElement => item !== null)\n if (nodes.length === 0) return\n\n const horizontal = orientation === 'horizontal' || orientation === 'both'\n const vertical = orientation === 'vertical' || orientation === 'both'\n\n let next = active()\n switch (event.key) {\n case 'ArrowRight':\n if (!horizontal) return\n next = active() + 1\n break\n case 'ArrowLeft':\n if (!horizontal) return\n next = active() - 1\n break\n case 'ArrowDown':\n if (!vertical) return\n next = active() + 1\n break\n case 'ArrowUp':\n if (!vertical) return\n next = active() - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = nodes.length - 1\n break\n default:\n return\n }\n\n event.preventDefault()\n\n if (next < 0) next = loop ? nodes.length - 1 : 0\n if (next >= nodes.length) next = loop ? 0 : nodes.length - 1\n\n onActiveChange(next)\n nodes[next]?.focus()\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/text.ts","../src/components/providers.ts","../src/components/motion.ts"],"names":["defineComponent","computed","resolvePalette","createGradient","prefersReducedMotion","h","ref","onMounted","resolveEasing","stagger","getTicker","observeIntersection","onBeforeUnmount","watch","setReducedMotionMode","attachLifecycle","provide","inject","applyTheme","resolveTheme","Comment","Text","useAnimate","springs","useInView","onScopeDispose","cloneVNode","cx"],"mappings":"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","file":"chunk-Z7XOFKM4.cjs","sourcesContent":["import {\n type CSSProperties,\n type PropType,\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n} from 'vue'\nimport {\n type ColorInput,\n type EasingInput,\n type StaggerFrom,\n createGradient,\n getTicker,\n observeIntersection,\n prefersReducedMotion,\n resolveEasing,\n resolvePalette,\n stagger,\n} from '@ansh-ui/core'\n\n/**\n * Text components.\n *\n * Hand-written rather than factory-generated, because text animation has a requirement no generic\n * factory can meet: **the accessible text must never be the animated text.** Splitting a heading\n * into per-character spans is fine visually and an accessibility failure if that structure is what\n * a screen reader reads — some engines announce \"W. E. L. C. O. M. E.\" and you cannot rely on which.\n *\n * The pattern used here: the real string lives in a visually-hidden element that remains the\n * accessible representation, and the whole animated structure is `aria-hidden`.\n */\n\nconst VISUALLY_HIDDEN: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n borderWidth: '0',\n}\n\n// ---------------------------------------------------------------------------\n// GradientText\n// ---------------------------------------------------------------------------\n\n/**\n * Text filled with a perceptual gradient.\n *\n * The stops are generated through the OKLab interpolator rather than handed to CSS as two\n * endpoints. That is the entire point: a CSS `linear-gradient(#0275f4, #9f0550)` passes through a\n * desaturated grey-brown at its midpoint, and on text — where the gradient crosses a narrow band —\n * the midpoint is exactly where the eye lands.\n *\n * The optional animation is a CSS `background-position` shift rather than a JS loop, because for a\n * single non-interactive property the browser's compositor beats anything we could do on the main\n * thread.\n */\nexport const GradientText = defineComponent({\n name: 'AnshGradientText',\n props: {\n text: { type: String, default: '' },\n colors: {\n type: [Array, String] as PropType<readonly ColorInput[] | string>,\n default: undefined,\n },\n /** Gradient angle in degrees. */\n angle: { type: Number, default: 100 },\n /** Seconds per cycle. `0` holds a static gradient. */\n duration: { type: Number, default: 0 },\n /** Interpolated stops handed to CSS. More is smoother. */\n stops: { type: Number, default: 16 },\n as: { type: String, default: 'span' },\n },\n\n setup(props, { slots }) {\n const gradient = computed(() => {\n const palette = resolvePalette(props.colors as never)\n // Duplicated so an animated background-position shift wraps seamlessly rather than jumping.\n const looped = props.duration > 0 ? [...palette, ...palette] : palette\n return createGradient(looped, { space: 'oklab' }).toCss(`${props.angle}deg`, props.stops)\n })\n\n const animated = computed(() => props.duration > 0 && !prefersReducedMotion())\n\n return () =>\n h(\n props.as,\n {\n style: {\n backgroundImage: gradient.value,\n backgroundSize: animated.value ? '200% 100%' : '100% 100%',\n backgroundClip: 'text',\n WebkitBackgroundClip: 'text',\n color: 'transparent',\n WebkitTextFillColor: 'transparent',\n display: 'inline-block',\n ...(animated.value\n ? { animation: `ansh-gradient-shift ${props.duration}s linear infinite` }\n : {}),\n } as CSSProperties,\n },\n [\n slots.default?.() ?? props.text,\n // The keyframes are injected inline so `<GradientText :duration=\"6\" />` works with no\n // stylesheet import. Identical rules from multiple instances are deduplicated by the\n // browser, so this costs nothing at scale.\n animated.value\n ? h('style', {\n innerHTML:\n '@keyframes ansh-gradient-shift{from{background-position:0% 50%}' +\n 'to{background-position:200% 50%}}',\n })\n : null,\n ],\n )\n },\n})\n\n// ---------------------------------------------------------------------------\n// AnimatedText\n// ---------------------------------------------------------------------------\n\ninterface Unit {\n text: string\n /** Whitespace is rendered as a plain gap rather than an animated unit. */\n space: boolean\n}\n\n/**\n * Text that reveals unit by unit.\n *\n * The split happens during render, so the markup is server-rendered and the real text is present in\n * the HTML source for SEO and for readers without JavaScript. The animation runs on the shared\n * ticker, so a page full of these shares one clock and cannot drift apart.\n *\n * Under `prefers-reduced-motion` the text renders in its final state and never animates.\n */\nexport const AnimatedText = defineComponent({\n name: 'AnshAnimatedText',\n props: {\n text: { type: String, required: true },\n /** Split granularity. */\n by: { type: String as PropType<'chars' | 'words'>, default: 'chars' },\n /** Seconds per unit. */\n duration: { type: Number, default: 0.6 },\n /** Seconds between units. */\n each: { type: Number, default: 0.03 },\n /** Where the reveal wave begins. */\n from: { type: [String, Number] as PropType<StaggerFrom>, default: 'first' },\n easing: { type: [String, Function, Array] as PropType<EasingInput>, default: 'cinematic' },\n /** Distance each unit travels into place, in pixels. */\n distance: { type: Number, default: 18 },\n /** Starting blur in pixels — the \"focus in\" look. */\n blur: { type: Number, default: 0 },\n /** Starting rotation in degrees. */\n rotate: { type: Number, default: 0 },\n /** Clip each unit so it rises from behind a mask. */\n mask: { type: Boolean, default: false },\n /** Wait until scrolled into view. */\n whenInView: { type: Boolean, default: true },\n /** Replay every time it re-enters the viewport. */\n repeat: { type: Boolean, default: false },\n /** Seconds to wait before starting. */\n delay: { type: Number, default: 0 },\n as: { type: String, default: 'span' },\n },\n emits: ['complete'],\n\n setup(props, { emit }) {\n const host = ref<HTMLElement | null>(null)\n const unitNodes = ref<(HTMLElement | null)[]>([])\n\n const units = computed<Unit[]>(() => {\n if (props.by === 'words') {\n return props.text\n .split(/(\\s+)/)\n .filter((token) => token.length > 0)\n .map((token) => ({ text: token, space: /^\\s+$/.test(token) }))\n }\n\n // Grapheme-aware: `[...string]` splits by code point, which breaks emoji with modifiers and\n // combining accents into multiple \"characters\".\n const graphemes =\n typeof Intl !== 'undefined' && 'Segmenter' in Intl\n ? Array.from(\n new Intl.Segmenter(undefined, { granularity: 'grapheme' }).segment(props.text),\n (s) => s.segment,\n )\n : Array.from(props.text)\n\n return graphemes.map((character) => ({ text: character, space: /^\\s$/.test(character) }))\n })\n\n let stopTicker: (() => void) | null = null\n let stopObserver: (() => void) | null = null\n\n onMounted(() => {\n const element = host.value\n if (!element) return\n\n if (prefersReducedMotion()) {\n emit('complete')\n return\n }\n\n const ease = resolveEasing(props.easing)\n const animatedUnits = units.value.filter((u) => !u.space)\n const delayFor = stagger(animatedUnits.length, { each: props.each, from: props.from })\n\n const targets: { node: HTMLElement; delay: number }[] = []\n let animationIndex = 0\n units.value.forEach((unit, i) => {\n if (unit.space) return\n const node = unitNodes.value[i]\n if (node) targets.push({ node, delay: props.delay + delayFor(animationIndex) })\n animationIndex++\n })\n\n const apply = (node: HTMLElement, progress: number): void => {\n const eased = ease(progress)\n const inverse = 1 - eased\n node.style.opacity = String(eased)\n const parts = [`translate3d(0, ${(props.distance * inverse).toFixed(2)}px, 0)`]\n if (props.rotate !== 0) parts.push(`rotate(${(props.rotate * inverse).toFixed(2)}deg)`)\n node.style.transform = parts.join(' ')\n if (props.blur > 0) {\n const amount = props.blur * inverse\n node.style.filter = amount > 0.05 ? `blur(${amount.toFixed(2)}px)` : ''\n }\n }\n\n const settle = (node: HTMLElement): void => {\n node.style.opacity = ''\n node.style.transform = ''\n node.style.filter = ''\n // Drop the compositor promotion once at rest, so a page of these doesn't hold hundreds of\n // permanent layers.\n node.style.willChange = ''\n }\n\n const reset = (): void => {\n for (const { node } of targets) apply(node, 0)\n }\n\n let elapsed = 0\n let running = false\n\n const start = (): void => {\n if (running) return\n running = true\n elapsed = 0\n for (const { node } of targets) node.style.willChange = 'opacity, transform'\n reset()\n\n stopTicker = getTicker().add(\n ({ delta }) => {\n elapsed += delta\n let allDone = true\n\n for (const target of targets) {\n const local = elapsed - target.delay\n if (local < 0) {\n allDone = false\n continue\n }\n const progress = props.duration <= 0 ? 1 : local / props.duration\n if (progress >= 1) {\n settle(target.node)\n continue\n }\n apply(target.node, progress)\n allDone = false\n }\n\n if (allDone) {\n stopTicker?.()\n stopTicker = null\n running = false\n emit('complete')\n }\n },\n { phase: 'write', name: 'AnimatedText' },\n )\n }\n\n // Hide before the browser paints. `onMounted` in Vue runs after the DOM is inserted but\n // before paint, so unlike React's `useEffect` there is no flash to guard against here.\n reset()\n\n if (!props.whenInView) {\n start()\n return\n }\n\n stopObserver = observeIntersection(\n element,\n (entry) => {\n if (entry.isIntersecting) {\n start()\n } else if (props.repeat) {\n stopTicker?.()\n stopTicker = null\n running = false\n reset()\n }\n },\n { threshold: 0.2, rootMargin: '0px 0px -8% 0px' },\n )\n })\n\n onBeforeUnmount(() => {\n stopObserver?.()\n stopTicker?.()\n stopObserver = null\n stopTicker = null\n })\n\n return () =>\n h(props.as, { ref: host, style: { display: 'inline-block' } as CSSProperties }, [\n // The accessible representation: the real string, unfragmented.\n h('span', { style: VISUALLY_HIDDEN }, props.text),\n\n h(\n 'span',\n { 'aria-hidden': 'true' },\n units.value.map((unit, i) => {\n if (unit.space) return h('span', {}, unit.text)\n\n const inner = h(\n 'span',\n {\n ref: (node: unknown) => {\n unitNodes.value[i] = (node as HTMLElement | null) ?? null\n },\n style: { display: 'inline-block' } as CSSProperties,\n },\n unit.text,\n )\n\n return props.mask\n ? h(\n 'span',\n {\n style: {\n display: 'inline-block',\n overflow: 'hidden',\n // Without this, descenders (g, y, p) are clipped by the mask box.\n verticalAlign: 'top',\n } as CSSProperties,\n },\n [inner],\n )\n : inner\n }),\n ),\n ])\n },\n})\n","import {\n type ComputedRef,\n type InjectionKey,\n type PropType,\n computed,\n defineComponent,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n watch,\n} from 'vue'\nimport {\n type ReducedMotionMode,\n attachLifecycle,\n getTicker,\n setReducedMotionMode,\n} from '@ansh-ui/core'\nimport { applyTheme, resolveTheme } from '@ansh-ui/tokens'\n\n/**\n * Application-level configuration providers — the Vue counterpart of `@ansh-ui/react`'s\n * `providers.tsx`. `provide`/`inject` replace React context; everything else about the two designs\n * is intentionally identical, because the underlying correctness constraints (no hydration\n * mismatch, no theme flash) don't change with the framework.\n */\n\n// ---------------------------------------------------------------------------\n// MotionConfig\n// ---------------------------------------------------------------------------\n\nexport interface MotionConfigValue {\n reducedMotion: ReducedMotionMode\n /** Global playback rate. `0.5` is slow motion across every animation on the page. */\n timeScale: number\n /** Pin adaptive quality, or `null` to let the frame budget decide. */\n quality: number | null\n}\n\nconst DEFAULT_MOTION_CONFIG: MotionConfigValue = {\n reducedMotion: 'auto',\n timeScale: 1,\n quality: null,\n}\n\nconst MotionConfigKey: InjectionKey<ComputedRef<MotionConfigValue>> = Symbol('ansh-motion-config')\n\n/**\n * Application-level motion configuration.\n *\n * Optional — every component works without it. Mount it once at the root when you need app-wide\n * control:\n *\n * ```vue\n * <MotionConfig :reduced-motion=\"userPrefersCalm ? 'always' : 'auto'\">\n * <App />\n * </MotionConfig>\n * ```\n *\n * `reducedMotion=\"always\"` is genuinely useful in production, as the backing for an in-app \"reduce\n * motion\" setting — many users who want calmer interfaces have never found the OS toggle.\n */\nexport const MotionConfig = defineComponent({\n name: 'AnshMotionConfig',\n props: {\n reducedMotion: { type: String as PropType<ReducedMotionMode>, default: 'auto' },\n timeScale: { type: Number, default: 1 },\n quality: { type: Number as PropType<number | null>, default: null },\n /**\n * Pause every animation while the document is hidden. Default `true`.\n *\n * Leave this on. Animating a background tab burns battery and spins fans for output nobody can\n * see, and it is the most common performance complaint about animation-heavy sites.\n */\n pauseWhenHidden: { type: Boolean, default: true },\n pauseWhenBlurred: { type: Boolean, default: false },\n respectBattery: { type: Boolean, default: true },\n },\n setup(props, { slots }) {\n watch(\n () => props.reducedMotion,\n (mode) => setReducedMotionMode(mode),\n { immediate: true },\n )\n watch(\n () => props.timeScale,\n (scale) => {\n getTicker().timeScale = scale\n },\n { immediate: true },\n )\n watch(\n () => props.quality,\n (quality) => {\n if (quality !== null) getTicker().lockQuality(quality)\n },\n { immediate: true },\n )\n\n let detach: (() => void) | null = null\n watch(\n () => [props.pauseWhenHidden, props.pauseWhenBlurred, props.respectBattery] as const,\n ([pauseWhenHidden, pauseWhenBlurred, respectBattery]) => {\n detach?.()\n detach = attachLifecycle(getTicker(), { pauseWhenHidden, pauseWhenBlurred, respectBattery })\n },\n { immediate: true },\n )\n onBeforeUnmount(() => detach?.())\n\n provide(\n MotionConfigKey,\n computed(() => ({\n reducedMotion: props.reducedMotion,\n timeScale: props.timeScale,\n quality: props.quality,\n })),\n )\n\n return () => slots.default?.()\n },\n})\n\n/** Read the nearest {@link MotionConfig}. Returns sensible defaults with no provider present. */\nexport function useMotionConfig(): ComputedRef<MotionConfigValue> {\n return inject(\n MotionConfigKey,\n computed(() => DEFAULT_MOTION_CONFIG),\n )\n}\n\n// ---------------------------------------------------------------------------\n// ThemeProvider\n// ---------------------------------------------------------------------------\n\nexport type ThemeSetting = 'light' | 'dark' | 'system'\n\nexport interface ThemeContextValue {\n /** What was requested, including `'system'`. */\n theme: ThemeSetting\n /** What is actually rendering. `'system'` is resolved to one or the other. */\n resolved: 'light' | 'dark'\n setTheme: (theme: ThemeSetting) => void\n}\n\nconst DEFAULT_THEME: ThemeContextValue = { theme: 'system', resolved: 'light', setTheme: () => {} }\n\nconst ThemeKey: InjectionKey<ComputedRef<ThemeContextValue>> = Symbol('ansh-theme')\n\n/**\n * Theme control over the `@ansh-ui/tokens` stylesheet.\n *\n * Sets `data-theme` on `<html>`, which the token stylesheet already understands. Two details that\n * are easy to get wrong and are handled here:\n *\n * **`'system'` removes the attribute rather than writing a resolved value.** The token stylesheet\n * guards its `prefers-color-scheme` rule with `:root:not([data-theme])`, so removing the attribute\n * hands control back to the OS — and, importantly, means the theme keeps following the OS if the\n * user changes it while the page is open.\n *\n * **The initial render always reports `'light'`.** Reading `localStorage` during setup would be a\n * hydration mismatch, since the server has no access to it. The stored value is applied `onMounted`.\n * To avoid a flash of the wrong theme, ship the small inline script from {@link themeScript} in your\n * document `<head>` — that is the only way to set the attribute before first paint. `@ansh-ui/nuxt`\n * does this automatically.\n */\nexport const ThemeProvider = defineComponent({\n name: 'AnshThemeProvider',\n props: {\n /** Initial setting. Default `'system'`. */\n defaultTheme: { type: String as PropType<ThemeSetting>, default: 'system' },\n /** Persist the choice under this `localStorage` key. Pass `null` to disable. */\n storageKey: { type: String as PropType<string | null>, default: 'ansh-theme' },\n },\n setup(props, { slots }) {\n const theme = ref<ThemeSetting>(props.defaultTheme)\n const resolved = ref<'light' | 'dark'>('light')\n\n const setTheme = (next: ThemeSetting): void => {\n theme.value = next\n }\n\n // Read the stored preference after mount, never during setup.\n let mediaQuery: MediaQueryList | null = null\n let onMediaChange: (() => void) | null = null\n\n const syncMedia = (): void => {\n mediaQuery?.removeEventListener('change', onMediaChange!)\n mediaQuery = null\n onMediaChange = null\n if (theme.value !== 'system' || typeof matchMedia !== 'function') return\n mediaQuery = matchMedia('(prefers-color-scheme: dark)')\n onMediaChange = () => {\n resolved.value = mediaQuery!.matches ? 'dark' : 'light'\n }\n mediaQuery.addEventListener('change', onMediaChange)\n }\n\n watch(\n theme,\n (next) => {\n applyTheme(next)\n resolved.value = resolveTheme()\n syncMedia()\n if (props.storageKey) {\n try {\n localStorage.setItem(props.storageKey, next)\n } catch {\n // Storage can throw in private browsing or with cookies disabled. A theme preference\n // is not worth breaking the page over.\n }\n }\n },\n { flush: 'post' },\n )\n\n // Runs once, after mount — the `watch` above has already applied `defaultTheme` by then, and\n // this only overrides it if something was actually stored.\n if (typeof document !== 'undefined') {\n queueMicrotask(() => {\n if (!props.storageKey) return\n try {\n const stored = localStorage.getItem(props.storageKey)\n if (stored === 'light' || stored === 'dark' || stored === 'system') theme.value = stored\n } catch {\n // As above.\n }\n })\n // Apply the default immediately too, so there is no gap before the microtask above runs.\n applyTheme(theme.value)\n resolved.value = resolveTheme()\n syncMedia()\n }\n\n onBeforeUnmount(() => mediaQuery?.removeEventListener('change', onMediaChange!))\n\n provide(\n ThemeKey,\n computed(() => ({ theme: theme.value, resolved: resolved.value, setTheme })),\n )\n\n return () => slots.default?.()\n },\n})\n\nexport function useTheme(): ComputedRef<ThemeContextValue> {\n return inject(\n ThemeKey,\n computed(() => DEFAULT_THEME),\n )\n}\n\n/**\n * The blocking script that prevents a theme flash.\n *\n * Inject this in `<head>`, before any stylesheet. It reads the stored preference and sets\n * `data-theme` synchronously, before the browser paints — the only point at which it can be done\n * without a visible flash. Deliberately tiny and dependency-free.\n *\n * `@ansh-ui/nuxt` injects this automatically; a bare Vue app should call it from `index.html`.\n */\nexport function themeScript(storageKey = 'ansh-theme'): string {\n return (\n `(function(){try{var t=localStorage.getItem(${JSON.stringify(storageKey)});` +\n `if(t==='light'||t==='dark'){document.documentElement.setAttribute('data-theme',t)}}` +\n `catch(e){}})()`\n )\n}\n","import {\n Comment,\n type PropType,\n Text,\n type VNode,\n cloneVNode,\n computed,\n defineComponent,\n h,\n onMounted,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\nimport {\n type AnimationOptions,\n type EasingInput,\n type SpringOptions,\n getTicker,\n prefersReducedMotion,\n springs,\n} from '@ansh-ui/core'\nimport { useAnimate } from '../composables/use-motion'\nimport { useInView } from '../composables/use-observers'\nimport { cx } from '../primitives/utils'\n\n/**\n * Declarative motion — the Vue counterpart of `@ansh-ui/react`'s `Motion`/`AnimatePresence`/\n * `Draggable`.\n *\n * A deliberately **small** subset of what a full motion library does: transform properties and\n * opacity, animated from `initial` to `animate`, plus hover and press states and an exit animation\n * when paired with `AnimatePresence`.\n *\n * That scope is a decision, not a gap. Layout animation (FLIP), shared-element transitions and\n * variant propagation each need machinery an order of magnitude larger than this file, and a\n * half-implementation of them is worse than none — it works in the demo and fails on the real page.\n * For those, use a dedicated library; for the 90% case of \"fade this in, slide that up, spring the\n * card on hover\", this costs a fraction of the bundle.\n *\n * Values are written straight to the element's `style` from the ticker's write phase, outside Vue's\n * reactivity — the same principle `useMotionStyle` documents in `composables/use-motion.ts`. `Motion`\n * and `Draggable` are built on `useAnimate()` (scope-bound imperative animation, auto-stopping the\n * previous run) and `useInView()` (the `whileInView` trigger) rather than calling the ticker\n * primitives from scratch, so cleanup and scope-disposal are inherited for free.\n */\n\nexport interface MotionValues {\n opacity?: number\n x?: number\n y?: number\n scale?: number\n scaleX?: number\n scaleY?: number\n rotate?: number\n /** Blur radius in px. */\n blur?: number\n}\n\nexport interface MotionTransition {\n /** Seconds. Ignored when `spring` is set. Default `0.4`. */\n duration?: number\n /** Seconds to wait. Default `0`. */\n delay?: number\n easing?: EasingInput\n /** Use a spring instead of a tween. `true` uses the `smooth` preset. */\n spring?: boolean | SpringOptions | keyof typeof springs\n}\n\nconst DEFAULTS: Required<MotionValues> = {\n opacity: 1,\n x: 0,\n y: 0,\n scale: 1,\n scaleX: 1,\n scaleY: 1,\n rotate: 0,\n blur: 0,\n}\n\n/** Compose the values into a transform string plus the properties that aren't transforms. */\nfunction applyValues(node: HTMLElement, values: Required<MotionValues>): void {\n const transform =\n `translate3d(${values.x}px, ${values.y}px, 0)` +\n ` scale(${values.scale * values.scaleX}, ${values.scale * values.scaleY})` +\n ` rotate(${values.rotate}deg)`\n\n node.style.transform = transform\n node.style.opacity = String(values.opacity)\n // Only written when non-zero: an always-present `filter` creates a containing block and a new\n // stacking context, which changes how `position: fixed` descendants resolve.\n node.style.filter = values.blur > 0 ? `blur(${values.blur}px)` : ''\n}\n\nfunction resolve(\n values: MotionValues | undefined,\n base: Required<MotionValues>,\n): Required<MotionValues> {\n return { ...base, ...values }\n}\n\n/** Drop whitespace-only text nodes and `v-if=\"false\"` comment placeholders from a slot's output. */\nfunction normalizeChildren(nodes: VNode[] | undefined): VNode[] {\n return (nodes ?? []).filter((node) => {\n if (node.type === Comment) return false\n if (node.type === Text && typeof node.children === 'string' && node.children.trim() === '') {\n return false\n }\n return true\n })\n}\n\n// --- Motion -----------------------------------------------------------------\n\n/**\n * An animated element.\n *\n * ```vue\n * <Motion :initial=\"{ opacity: 0, y: 24 }\" :animate=\"{ opacity: 1, y: 0 }\" while-in-view>\n * <Card />\n * </Motion>\n * ```\n */\nexport const Motion = defineComponent({\n name: 'AnshMotion',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n /** Starting values. Applied before the first paint. */\n initial: { type: Object as PropType<MotionValues>, default: undefined },\n /** Target values. Changing these animates to the new target. */\n animate: { type: Object as PropType<MotionValues>, default: undefined },\n // Declared so it lands here rather than in `attrs`: `AnimatePresence` reads it off the vnode's\n // props when the child is removed and swaps it into `animate`. Left undeclared, it would reach\n // the DOM as an unknown `exit` attribute.\n exit: { type: Object as PropType<MotionValues>, default: undefined },\n transition: { type: Object as PropType<MotionTransition>, default: undefined },\n whileHover: { type: Object as PropType<MotionValues>, default: undefined },\n whileTap: { type: Object as PropType<MotionValues>, default: undefined },\n /** Animate to `animate` only once scrolled into view. */\n whileInView: { type: Boolean, default: false },\n /** Fraction visible before `whileInView` triggers. Default `0.2`. */\n inViewAmount: { type: Number, default: 0.2 },\n },\n setup(props, { attrs, slots, expose }) {\n const node = ref<HTMLElement | null>(null)\n // Plain closure state, deliberately outside Vue's reactivity — a value driven by the ticker\n // changes up to 60 times a second, and a `ref` here would flush a reactive effect on every one.\n let current = resolve(props.initial, DEFAULTS)\n const start = useAnimate()\n\n expose({\n get element() {\n return node.value\n },\n })\n\n // Applied in `onMounted`, not a plain function call during setup: the DOM node the template\n // `ref` points at only exists once Vue has patched it in, which — for the initial render — is\n // still before the browser's next paint. That ordering is what avoids the element flashing at\n // full opacity for one frame before the \"hidden\" `initial` state ever gets applied.\n //\n // The first run of the `animate` target is kicked off here too, rather than from the `watch`\n // below with `immediate: true`. Vue runs an immediate watcher's callback *synchronously during\n // `setup()`*, regardless of `flush` — `flush: 'post'` only defers a watcher's *subsequent*\n // re-runs, not its immediate one. `node.value` is still null at that point (the element hasn't\n // mounted yet), so `runTo` would silently no-op and the component would never animate to its\n // initial `animate` target. `onMounted` is the actual first point at which `node.value` exists.\n onMounted(() => {\n if (!node.value) return\n applyValues(node.value, current)\n if (inView.value) runTo(resolve(props.animate, DEFAULTS))\n })\n\n const runTo = (next: Required<MotionValues>, options?: MotionTransition): void => {\n const element = node.value\n if (!element) return\n\n const from = { ...current }\n const springOption = options?.spring ?? props.transition?.spring\n\n const animationOptions: AnimationOptions<number> = {\n ...((options?.delay ?? props.transition?.delay) !== undefined\n ? { delay: options?.delay ?? props.transition?.delay ?? 0 }\n : null),\n ...(springOption\n ? {\n spring:\n springOption === true\n ? springs.default\n : typeof springOption === 'string'\n ? springs[springOption]\n : springOption,\n }\n : {\n duration: options?.duration ?? props.transition?.duration ?? 0.4,\n ...((options?.easing ?? props.transition?.easing)\n ? { easing: (options?.easing ?? props.transition?.easing)! }\n : null),\n }),\n onUpdate: (t: number) => {\n // One scalar drives every property, so all of them stay in lockstep. Animating each\n // independently would need one ticker subscription per property and they would drift\n // apart under a spring, which is not time-based.\n const frame = {} as Required<MotionValues>\n for (const key of Object.keys(DEFAULTS) as Array<keyof MotionValues>) {\n frame[key] = from[key] + (next[key] - from[key]) * t\n }\n current = frame\n applyValues(element, frame)\n },\n onComplete: () => {\n current = next\n applyValues(element, next)\n },\n }\n\n // `useAnimate()` stops any in-flight run of its own before starting the next, and again on\n // scope disposal — the two cleanup spots the React version's `controlsRef` handles by hand.\n start(0, 1, animationOptions)\n }\n\n // `whileInView` gating, via the same observer composable `useElementSize`/`useScrollProgress`\n // are built on. Always attached (harmless when `whileInView` is false — the observer simply\n // goes unused) rather than conditionally, since `inViewAmount` and `whileInView` are expected\n // to be set once and not toggled.\n const inViewState = useInView(node, { threshold: props.inViewAmount, once: true })\n const inView = computed(() => !props.whileInView || inViewState.value)\n\n // Animate to the target whenever it changes after mount (or when it scrolls into view). The\n // *first* run is handled explicitly in `onMounted` above, not here — see the comment there.\n // No `immediate: true`: this only needs to react to changes from here on.\n watch(\n [() => JSON.stringify(props.animate ?? null), inView],\n ([, isInView]) => {\n if (!isInView) return\n runTo(resolve(props.animate, DEFAULTS))\n },\n { flush: 'post' },\n )\n\n return () => {\n const { class: attrClass, style: attrStyle, ...restAttrs } = attrs as Record<string, unknown>\n\n const interaction: Record<string, unknown> = {}\n if (props.whileHover) {\n interaction.onMouseenter = () =>\n runTo(resolve({ ...props.animate, ...props.whileHover }, DEFAULTS))\n interaction.onMouseleave = () => runTo(resolve(props.animate, DEFAULTS))\n }\n if (props.whileTap) {\n interaction.onPointerdown = () =>\n runTo(resolve({ ...props.animate, ...props.whileTap }, DEFAULTS), { duration: 0.12 })\n interaction.onPointerup = () =>\n runTo(resolve({ ...props.animate, ...props.whileHover }, DEFAULTS))\n }\n\n return h(\n props.as,\n {\n ref: node,\n class: attrClass,\n // `will-change` is set once, statically. Toggling it per animation causes the compositor\n // to create and destroy a layer on every interaction, which is more expensive than the\n // hint saves.\n style: [{ willChange: 'transform, opacity' }, attrStyle],\n ...interaction,\n ...restAttrs,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- AnimatePresence ----------------------------------------------------------\n\nexport interface AnimatePresenceProps {\n /** Seconds to keep a removed child mounted. Default `0.35`. */\n exitDuration?: number\n}\n\n/**\n * Keep removed children mounted long enough to animate out.\n *\n * Vue unmounts a `v-for`/`v-if` item the instant it disappears from its source array, so an exit\n * animation never gets a chance to run. This holds departing children in its own state, plays their\n * `exit` values (swapped into `animate` on a cloned vnode), then drops them.\n *\n * Children **must** have stable `:key`s — that is how removals are detected at all. Without keys,\n * Vue reuses vnode positions and this sees no removal to animate, same as the React version.\n *\n * Vue's own `<TransitionGroup>` was considered instead of this hand-rolled reconciliation, but it\n * drives *CSS* transition/animation classes on move — it has no hook for \"swap this prop and let the\n * child's own animation system take it from here,\" which is what `exit` needs to compose with\n * `Motion`. Cloning the departing vnode with its `animate` prop swapped to `exit` is the direct\n * Vue-side equivalent of the React version's `cloneElement`.\n */\nexport const AnimatePresence = defineComponent({\n name: 'AnshAnimatePresence',\n props: {\n exitDuration: { type: Number, default: 0.35 },\n },\n setup(props, { slots }) {\n // Reading `slots.default()` inside a `computed` tracks whatever reactive state the parent's\n // slot closure reads (e.g. `v-for=\"item in items\"`), the same way Vue's own `<Transition>` and\n // `<KeepAlive>` track slot content — dependency tracking isn't scoped to \"this component's own\n // state\", it follows whichever reactive effect is active when the read happens.\n const currentChildren = computed(() => normalizeChildren(slots.default?.()))\n const keyOf = (node: VNode): string => String(node.key)\n const keysSignature = computed(() => currentChildren.value.map(keyOf).join('|'))\n\n const rendered = ref<VNode[]>(currentChildren.value)\n const timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n watch(\n [keysSignature, () => props.exitDuration],\n () => {\n const next = currentChildren.value\n const nextKeys = new Set(next.map(keyOf))\n const departing = rendered.value.filter((node) => !nextKeys.has(keyOf(node)))\n\n if (departing.length === 0) {\n // Straight replacement keeps updated props flowing to children that are still present.\n rendered.value = next\n return\n }\n\n // Keep the departing children in place, appended after the current set so they don't\n // reorder the survivors while they animate out.\n rendered.value = [...next, ...departing]\n\n const delay = prefersReducedMotion() ? 0 : props.exitDuration * 1000\n for (const node of departing) {\n const key = keyOf(node)\n const existing = timers.get(key)\n if (existing !== undefined) clearTimeout(existing)\n timers.set(\n key,\n setTimeout(() => {\n rendered.value = rendered.value.filter((entry) => keyOf(entry) !== key)\n timers.delete(key)\n }, delay),\n )\n }\n },\n { flush: 'post' },\n )\n\n onScopeDispose(() => {\n for (const timer of timers.values()) clearTimeout(timer)\n timers.clear()\n })\n\n return () => {\n const nextKeys = new Set(currentChildren.value.map(keyOf))\n\n return rendered.value.map((node) => {\n const leaving = !nextKeys.has(keyOf(node))\n if (!leaving) return node\n\n // A departing child animates to its `exit` values by having them swapped into `animate`.\n const nodeProps = (node.props ?? {}) as {\n exit?: MotionValues\n transition?: MotionTransition\n }\n return cloneVNode(node, {\n animate: nodeProps.exit ?? { opacity: 0, scale: 0.96 },\n transition: { duration: props.exitDuration, ...nodeProps.transition },\n })\n })\n }\n },\n})\n\n// --- Draggable ----------------------------------------------------------------\n\nexport interface DraggableProps {\n /** Constrain movement. */\n axis?: 'x' | 'y' | 'both'\n /** Bounds relative to the starting position, in px. */\n bounds?: { left?: number; right?: number; top?: number; bottom?: number }\n /** Spring back to the origin on release. */\n snapBack?: boolean\n /** Carry momentum after release. Default `true` when not snapping back. */\n momentum?: boolean\n}\n\n/**\n * A draggable surface with inertia.\n *\n * The momentum on release is what separates a drag that feels physical from one that stops dead.\n * Velocity is measured over the last few pointer samples rather than the last two — a single pair\n * of events is dominated by whatever jitter the final sample had, which produces a flick in the\n * wrong direction often enough to be noticeable.\n *\n * `onDragStart`/`onDragEnd` from the React version become `dragStart`/`dragEnd` emits — this\n * package's convention for event-callback props (see `Input`'s `change`/`clear` emits).\n */\nexport const Draggable = defineComponent({\n name: 'AnshDraggable',\n inheritAttrs: false,\n props: {\n axis: { type: String as PropType<'x' | 'y' | 'both'>, default: 'both' },\n bounds: {\n type: Object as PropType<{ left?: number; right?: number; top?: number; bottom?: number }>,\n default: undefined,\n },\n snapBack: { type: Boolean, default: false },\n momentum: { type: Boolean, default: undefined },\n },\n emits: ['dragStart', 'dragEnd'],\n setup(props, { attrs, slots, emit, expose }) {\n const node = ref<HTMLDivElement | null>(null)\n let offset = { x: 0, y: 0 }\n const dragging = ref(false)\n const runAnimation = useAnimate()\n\n let stopMomentum: (() => void) | null = null\n // Not a concern the React version handles — Vue's pervasive scope-disposal discipline makes it\n // cheap to add here: stop an in-flight momentum glide if the component unmounts mid-gesture,\n // rather than leaving a ticker subscription writing to a detached node.\n onScopeDispose(() => stopMomentum?.())\n\n expose({\n get element() {\n return node.value\n },\n get offset() {\n return offset\n },\n })\n\n const clamp = (value: { x: number; y: number }): { x: number; y: number } => ({\n x: Math.min(\n Math.max(value.x, props.bounds?.left ?? -Infinity),\n props.bounds?.right ?? Infinity,\n ),\n y: Math.min(\n Math.max(value.y, props.bounds?.top ?? -Infinity),\n props.bounds?.bottom ?? Infinity,\n ),\n })\n\n const write = (value: { x: number; y: number }): void => {\n if (node.value) node.value.style.transform = `translate3d(${value.x}px, ${value.y}px, 0)`\n }\n\n const onPointerdown = (event: PointerEvent): void => {\n stopMomentum?.()\n stopMomentum = null\n\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n dragging.value = true\n emit('dragStart')\n\n const useMomentum = props.momentum ?? !props.snapBack\n const start = { x: event.clientX, y: event.clientY }\n const origin = { ...offset }\n // A short ring of recent samples, for a velocity estimate that isn't hostage to the last\n // event.\n const samples: Array<{ x: number; y: number; t: number }> = []\n\n const onMove = (moveEvent: PointerEvent): void => {\n const next = clamp({\n x: props.axis === 'y' ? origin.x : origin.x + (moveEvent.clientX - start.x),\n y: props.axis === 'x' ? origin.y : origin.y + (moveEvent.clientY - start.y),\n })\n offset = next\n write(next)\n\n samples.push({ x: next.x, y: next.y, t: performance.now() })\n if (samples.length > 5) samples.shift()\n }\n\n const onUp = (): void => {\n dragging.value = false\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n window.removeEventListener('pointercancel', onUp)\n\n if (props.snapBack) {\n runAnimation(0, 1, {\n spring: springs.subtle,\n onUpdate: (t: number) => {\n const value = { x: offset.x * (1 - t), y: offset.y * (1 - t) }\n write(value)\n },\n onComplete: () => {\n offset = { x: 0, y: 0 }\n write(offset)\n emit('dragEnd', offset)\n },\n })\n return\n }\n\n if (useMomentum && samples.length >= 2) {\n const first = samples[0]!\n const last = samples[samples.length - 1]!\n const elapsed = Math.max(1, last.t - first.t)\n let velocity = {\n x: ((last.x - first.x) / elapsed) * 1000,\n y: ((last.y - first.y) / elapsed) * 1000,\n }\n\n const decay = 0.95\n const stop = getTicker().add(\n ({ delta }) => {\n // Exponential decay, frame-rate independent: raising the per-second factor to the\n // power of the frame time keeps the glide identical at 60 and 120 Hz.\n const factor = Math.pow(decay, delta * 60)\n velocity = { x: velocity.x * factor, y: velocity.y * factor }\n\n const next = clamp({\n x: offset.x + velocity.x * delta,\n y: offset.y + velocity.y * delta,\n })\n offset = next\n write(next)\n\n if (Math.hypot(velocity.x, velocity.y) < 8) {\n stop()\n stopMomentum = null\n emit('dragEnd', offset)\n }\n },\n { phase: 'write', name: 'Draggable' },\n )\n stopMomentum = stop\n return\n }\n\n emit('dragEnd', offset)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n window.addEventListener('pointercancel', onUp)\n }\n\n return () => {\n const { class: attrClass, style: attrStyle, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'div',\n {\n ref: node,\n class: cx(\n 'ansh-draggable',\n dragging.value && 'ansh-draggable--active',\n attrClass as string,\n ),\n style: [\n {\n touchAction: props.axis === 'x' ? 'pan-y' : props.axis === 'y' ? 'pan-x' : 'none',\n },\n attrStyle,\n ],\n onPointerdown,\n ...restAttrs,\n },\n slots.default?.(),\n )\n }\n },\n})\n"]}