@ansh-ui/vue 0.2.0

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 (109) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-2VSROZ2N.js +1281 -0
  3. package/dist/chunk-2VSROZ2N.js.map +1 -0
  4. package/dist/chunk-5BQEZYG6.cjs +1294 -0
  5. package/dist/chunk-5BQEZYG6.cjs.map +1 -0
  6. package/dist/chunk-6732H4BQ.cjs +28 -0
  7. package/dist/chunk-6732H4BQ.cjs.map +1 -0
  8. package/dist/chunk-6ABPGOJP.js +722 -0
  9. package/dist/chunk-6ABPGOJP.js.map +1 -0
  10. package/dist/chunk-6XJOB6LE.js +62 -0
  11. package/dist/chunk-6XJOB6LE.js.map +1 -0
  12. package/dist/chunk-774WBLDR.cjs +24 -0
  13. package/dist/chunk-774WBLDR.cjs.map +1 -0
  14. package/dist/chunk-B6OXKW5Q.js +567 -0
  15. package/dist/chunk-B6OXKW5Q.js.map +1 -0
  16. package/dist/chunk-DMPNT3MY.cjs +64 -0
  17. package/dist/chunk-DMPNT3MY.cjs.map +1 -0
  18. package/dist/chunk-EISHOEB6.cjs +158 -0
  19. package/dist/chunk-EISHOEB6.cjs.map +1 -0
  20. package/dist/chunk-EVO23GUS.js +223 -0
  21. package/dist/chunk-EVO23GUS.js.map +1 -0
  22. package/dist/chunk-FVKLCGA4.js +1035 -0
  23. package/dist/chunk-FVKLCGA4.js.map +1 -0
  24. package/dist/chunk-IOXGBPOV.cjs +3681 -0
  25. package/dist/chunk-IOXGBPOV.cjs.map +1 -0
  26. package/dist/chunk-J2LA4GRP.cjs +1051 -0
  27. package/dist/chunk-J2LA4GRP.cjs.map +1 -0
  28. package/dist/chunk-JQ4YLXXM.cjs +580 -0
  29. package/dist/chunk-JQ4YLXXM.cjs.map +1 -0
  30. package/dist/chunk-KCA7RNJ4.cjs +781 -0
  31. package/dist/chunk-KCA7RNJ4.cjs.map +1 -0
  32. package/dist/chunk-NJDDNO4C.js +23 -0
  33. package/dist/chunk-NJDDNO4C.js.map +1 -0
  34. package/dist/chunk-OAQ7MDYX.js +22 -0
  35. package/dist/chunk-OAQ7MDYX.js.map +1 -0
  36. package/dist/chunk-PP6OYURM.cjs +238 -0
  37. package/dist/chunk-PP6OYURM.cjs.map +1 -0
  38. package/dist/chunk-SHX2JGID.cjs +269 -0
  39. package/dist/chunk-SHX2JGID.cjs.map +1 -0
  40. package/dist/chunk-SOYRICHU.js +3645 -0
  41. package/dist/chunk-SOYRICHU.js.map +1 -0
  42. package/dist/chunk-T425FIC7.js +773 -0
  43. package/dist/chunk-T425FIC7.js.map +1 -0
  44. package/dist/chunk-TMG3M6TK.js +152 -0
  45. package/dist/chunk-TMG3M6TK.js.map +1 -0
  46. package/dist/chunk-XLLSS464.cjs +286 -0
  47. package/dist/chunk-XLLSS464.cjs.map +1 -0
  48. package/dist/chunk-XZ5ZFLZM.js +280 -0
  49. package/dist/chunk-XZ5ZFLZM.js.map +1 -0
  50. package/dist/chunk-Z7XOFKM4.cjs +733 -0
  51. package/dist/chunk-Z7XOFKM4.cjs.map +1 -0
  52. package/dist/chunk-ZGMXOMCB.js +266 -0
  53. package/dist/chunk-ZGMXOMCB.js.map +1 -0
  54. package/dist/data.cjs +70 -0
  55. package/dist/data.cjs.map +1 -0
  56. package/dist/data.d.cts +963 -0
  57. package/dist/data.d.ts +963 -0
  58. package/dist/data.js +5 -0
  59. package/dist/data.js.map +1 -0
  60. package/dist/form.cjs +151 -0
  61. package/dist/form.cjs.map +1 -0
  62. package/dist/form.d.cts +2639 -0
  63. package/dist/form.d.ts +2639 -0
  64. package/dist/form.js +6 -0
  65. package/dist/form.js.map +1 -0
  66. package/dist/index.cjs +1158 -0
  67. package/dist/index.cjs.map +1 -0
  68. package/dist/index.d.cts +439 -0
  69. package/dist/index.d.ts +439 -0
  70. package/dist/index.js +547 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/layout.cjs +67 -0
  73. package/dist/layout.cjs.map +1 -0
  74. package/dist/layout.d.cts +729 -0
  75. package/dist/layout.d.ts +729 -0
  76. package/dist/layout.js +6 -0
  77. package/dist/layout.js.map +1 -0
  78. package/dist/motion.cjs +50 -0
  79. package/dist/motion.cjs.map +1 -0
  80. package/dist/motion.d.cts +681 -0
  81. package/dist/motion.d.ts +681 -0
  82. package/dist/motion.js +5 -0
  83. package/dist/motion.js.map +1 -0
  84. package/dist/navigation.cjs +48 -0
  85. package/dist/navigation.cjs.map +1 -0
  86. package/dist/navigation.d.cts +515 -0
  87. package/dist/navigation.d.ts +515 -0
  88. package/dist/navigation.js +7 -0
  89. package/dist/navigation.js.map +1 -0
  90. package/dist/overlay.cjs +61 -0
  91. package/dist/overlay.cjs.map +1 -0
  92. package/dist/overlay.d.cts +772 -0
  93. package/dist/overlay.d.ts +772 -0
  94. package/dist/overlay.js +8 -0
  95. package/dist/overlay.js.map +1 -0
  96. package/dist/position-Cn7qP1pn.d.cts +50 -0
  97. package/dist/position-Cn7qP1pn.d.ts +50 -0
  98. package/dist/primitives.cjs +129 -0
  99. package/dist/primitives.cjs.map +1 -0
  100. package/dist/primitives.d.cts +300 -0
  101. package/dist/primitives.d.ts +300 -0
  102. package/dist/primitives.js +8 -0
  103. package/dist/primitives.js.map +1 -0
  104. package/dist/sidebar-CQqEmpid.d.cts +124 -0
  105. package/dist/sidebar-CTZ-Ckko.d.ts +124 -0
  106. package/dist/styles.css +5593 -0
  107. package/dist/utils-IKPG3zcC.d.cts +46 -0
  108. package/dist/utils-IKPG3zcC.d.ts +46 -0
  109. package/package.json +91 -0
@@ -0,0 +1 @@
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","useControllableState","useId","ref","computed","useRovingFocus","h","cx","resolveSlotContent","onBeforeUnmount","watch"],"mappings":"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","file":"chunk-KCA7RNJ4.cjs","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"]}
@@ -0,0 +1,23 @@
1
+ import { getCurrentInstance } from 'vue';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __export = (target, all) => {
5
+ for (var name in all)
6
+ __defProp(target, name, { get: all[name], enumerable: true });
7
+ };
8
+ function resolveSlotContent(value) {
9
+ return typeof value === "function" ? value() : value ?? null;
10
+ }
11
+ function cx(...parts) {
12
+ return parts.filter(Boolean).join(" ");
13
+ }
14
+ var fallback = 0;
15
+ function useId(prefix = "au") {
16
+ const instance = getCurrentInstance();
17
+ const uid = instance ? instance.uid : ++fallback;
18
+ return `${prefix}-${uid}`;
19
+ }
20
+
21
+ export { __export, cx, resolveSlotContent, useId };
22
+ //# sourceMappingURL=chunk-NJDDNO4C.js.map
23
+ //# sourceMappingURL=chunk-NJDDNO4C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/utils.ts"],"names":[],"mappings":";;;;;;;AAgCO,SAAS,mBAAmB,KAAA,EAA4C;AAC7E,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAc,KAAA,KAAgC,KAAA,IAAS,IAAA;AACjF;AAGO,SAAS,MAAM,KAAA,EAAyD;AAC7E,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACvC;AAEA,IAAI,QAAA,GAAW,CAAA;AAYR,SAAS,KAAA,CAAM,SAAS,IAAA,EAAc;AAC3C,EAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,EAAA,MAAM,GAAA,GAAM,QAAA,GAAW,QAAA,CAAS,GAAA,GAAM,EAAE,QAAA;AACxC,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AACzB","file":"chunk-NJDDNO4C.js","sourcesContent":["import { type ComputedRef, type Ref, type VNodeChild, getCurrentInstance } from 'vue'\n\n/**\n * A ref that is only ever read, never written, by the primitive that accepts it.\n *\n * `useControllableState` returns a `ComputedRef` — read-only by design, so a component can't\n * accidentally mutate state that might be owned by a parent. Every primitive below (`useDismiss`,\n * `useFocusTrap`, `usePresence`, …) only ever reads its `open`/`active` argument, so it accepts\n * either. Typing those parameters as plain `Ref<T>` would reject a `ComputedRef<T>` at the call\n * site — TypeScript treats `{ readonly value: T }` as not assignable to `{ value: T }` — which would\n * force every overlay component to unwrap and re-wrap its own open state for no behavioural reason.\n */\nexport type ReadonlyRef<T> = Ref<T> | ComputedRef<T>\n\n/**\n * A prop that accepts a string, a VNode tree, or a render function — for `label`, `description`,\n * `error` and similar content props across the form and overlay components.\n *\n * Vue's own `VNodeChild` type does not include a bare function, so `PropType<VNodeChild>` narrows\n * `typeof x === 'function'` to `never` and the call site fails to typecheck. Accepting a function\n * here is what lets a caller pass reactive, computed content (`:label=\"() => \\`\\${count} items\\`\"`)\n * without wrapping it in a render-prop-shaped slot.\n */\nexport type SlotContent = VNodeChild | (() => VNodeChild)\n\n/**\n * Resolve a {@link SlotContent} prop to a renderable value.\n *\n * Pass the result to `h()` wrapped in an array — `h('p', {}, [resolveSlotContent(x)])`, not\n * `h('p', {}, resolveSlotContent(x))`. The bare (non-array) children overload of `h()` doesn't\n * accept a value that includes `null` in its type, which every `SlotContent` does.\n */\nexport function resolveSlotContent(value: SlotContent | undefined): VNodeChild {\n return typeof value === 'function' ? (value as () => VNodeChild)() : (value ?? null)\n}\n\n/** Join class names, dropping falsy entries. The whole of `clsx` that this library actually uses. */\nexport function cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ')\n}\n\nlet fallback = 0\n\n/**\n * A stable id, unique per component instance.\n *\n * Vue 3.5 ships a built-in `useId()` solving exactly this; the peer range here is `^3.4.0`, so this\n * exists for the versions before that. `getCurrentInstance().uid` is used rather than a random\n * value because it is **deterministic**: Vue assigns uids in creation order, and a matching\n * server/client tree creates its components in the same order on both sides, so the id a control\n * renders with during SSR is the id it hydrates with. A random or counter-reset-per-request value\n * would mismatch and force a client re-render of every id-bearing attribute.\n */\nexport function useId(prefix = 'au'): string {\n const instance = getCurrentInstance()\n const uid = instance ? instance.uid : ++fallback\n return `${prefix}-${uid}`\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { ref, computed } from 'vue';
2
+
3
+ // src/primitives/use-controllable-state.ts
4
+ function useControllableState(getProp, defaultValue, onChange) {
5
+ const uncontrolled = ref(defaultValue);
6
+ const resolved = computed(() => {
7
+ const prop = getProp();
8
+ return prop !== void 0 ? prop : uncontrolled.value;
9
+ });
10
+ function set(next) {
11
+ const previous = resolved.value;
12
+ const resolvedNext = typeof next === "function" ? next(previous) : next;
13
+ if (Object.is(resolvedNext, previous)) return;
14
+ if (getProp() === void 0) uncontrolled.value = resolvedNext;
15
+ onChange?.(resolvedNext);
16
+ }
17
+ return [resolved, set];
18
+ }
19
+
20
+ export { useControllableState };
21
+ //# sourceMappingURL=chunk-OAQ7MDYX.js.map
22
+ //# sourceMappingURL=chunk-OAQ7MDYX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/use-controllable-state.ts"],"names":[],"mappings":";;;AA0BO,SAAS,oBAAA,CACd,OAAA,EACA,YAAA,EACA,QAAA,EAC4D;AAC5D,EAAA,MAAM,YAAA,GAAe,IAAI,YAAY,CAAA;AAErC,EAAA,MAAM,QAAA,GAAW,SAAY,MAAM;AACjC,IAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,IAAA,OAAO,IAAA,KAAS,MAAA,GAAY,IAAA,GAAO,YAAA,CAAa,KAAA;AAAA,EAClD,CAAC,CAAA;AAED,EAAA,SAAS,IAAI,IAAA,EAAsC;AACjD,IAAA,MAAM,WAAW,QAAA,CAAS,KAAA;AAC1B,IAAA,MAAM,eAAe,OAAO,IAAA,KAAS,UAAA,GAAc,IAAA,CAA4B,QAAQ,CAAA,GAAI,IAAA;AAI3F,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,YAAA,EAAc,QAAQ,CAAA,EAAG;AAEvC,IAAA,IAAI,OAAA,EAAQ,KAAM,MAAA,EAAW,YAAA,CAAa,KAAA,GAAQ,YAAA;AAClD,IAAA,QAAA,GAAW,YAAY,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,CAAC,UAAU,GAAG,CAAA;AACvB","file":"chunk-OAQ7MDYX.js","sourcesContent":["import { type ComputedRef, type Ref, computed, ref } from 'vue'\n\n/**\n * State that works both controlled and uncontrolled — the Vue counterpart of\n * `@ansh-ui/react`'s hook of the same name, and just as load-bearing here.\n *\n * A `<Select>` must work as `<Select />` (owns its value), `<Select :default-value=\"a\" />` (owns\n * its value, seeded), `v-model=\"v\"` (the parent owns it via `modelValue`/`update:modelValue`), and\n * `<Select :open=\"open\" @update:open=\"…\" />` for a named prop like a dialog's `open`. All four are\n * the same shape: **the prop is controlled when the reactive getter returns something other than\n * `undefined`**, evaluated on every read rather than latched once — so a component that starts\n * uncontrolled and later receives a value (an async-loaded form) switches over instead of silently\n * ignoring the prop from then on.\n *\n * ```ts\n * const [value, setValue] = useControllableState(\n * () => props.modelValue,\n * defaultValue,\n * (next) => emit('update:modelValue', next),\n * )\n * ```\n *\n * `getProp` is a plain function rather than a `Ref` so it can read straight off `props` — Vue's\n * `computed` tracks whatever reactive properties it touches, `props.foo` included, with no need to\n * wrap the caller's access pattern.\n */\nexport function useControllableState<T>(\n getProp: () => T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n): [ComputedRef<T>, (next: T | ((previous: T) => T)) => void] {\n const uncontrolled = ref(defaultValue) as Ref<T>\n\n const resolved = computed<T>(() => {\n const prop = getProp()\n return prop !== undefined ? prop : uncontrolled.value\n })\n\n function set(next: T | ((previous: T) => T)): void {\n const previous = resolved.value\n const resolvedNext = typeof next === 'function' ? (next as (previous: T) => T)(previous) : next\n\n // No-op guard, same reason as the React hook: firing a change with an unchanged value causes\n // parents that map state onto network requests to issue redundant ones.\n if (Object.is(resolvedNext, previous)) return\n\n if (getProp() === undefined) uncontrolled.value = resolvedNext\n onChange?.(resolvedNext)\n }\n\n return [resolved, set]\n}\n"]}
@@ -0,0 +1,238 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var core = require('@ansh-ui/core');
5
+
6
+ // src/composables/use-motion.ts
7
+ function useMotionValue(initial) {
8
+ const value = core.motionValue(initial);
9
+ if (vue.getCurrentScope()) vue.onScopeDispose(() => value.destroy());
10
+ return value;
11
+ }
12
+ function useMotionRef(value) {
13
+ const state = vue.shallowRef(value.get());
14
+ const stop = value.on((next) => {
15
+ state.value = next;
16
+ });
17
+ if (vue.getCurrentScope()) vue.onScopeDispose(stop);
18
+ return vue.readonly(state);
19
+ }
20
+ function useMotionStyle(value, format, property = "transform") {
21
+ const element = vue.shallowRef(null);
22
+ const write = (next) => {
23
+ element.value?.style.setProperty(kebab(property), format(next));
24
+ };
25
+ const stop = value.onRender(write);
26
+ vue.watch(element, (node) => {
27
+ if (node) write(value.get());
28
+ });
29
+ if (vue.getCurrentScope()) vue.onScopeDispose(stop);
30
+ return element;
31
+ }
32
+ function useSpringValue(initial, options = {}) {
33
+ const value = useMotionValue(initial);
34
+ let target = initial;
35
+ const stop = core.springTo(value, () => target, options);
36
+ if (vue.getCurrentScope()) vue.onScopeDispose(stop);
37
+ return {
38
+ value,
39
+ set(next) {
40
+ target = next;
41
+ }
42
+ };
43
+ }
44
+ function useAnimate() {
45
+ let controls = null;
46
+ if (vue.getCurrentScope()) {
47
+ vue.onScopeDispose(() => {
48
+ controls?.stop();
49
+ controls = null;
50
+ });
51
+ }
52
+ return function start(from, to, options) {
53
+ controls?.stop();
54
+ controls = core.animate(from, to, options);
55
+ return controls;
56
+ };
57
+ }
58
+ function useAnimatedFrom(source, target, map, options) {
59
+ let controls = null;
60
+ const stop = vue.watch(
61
+ source,
62
+ (next) => {
63
+ controls?.stop();
64
+ controls = core.animate(target, map(next), options);
65
+ },
66
+ { flush: "post" }
67
+ );
68
+ if (vue.getCurrentScope()) {
69
+ vue.onScopeDispose(() => {
70
+ controls?.stop();
71
+ stop();
72
+ });
73
+ }
74
+ }
75
+ function kebab(property) {
76
+ return property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
77
+ }
78
+ function useTicker(callback, options = {}) {
79
+ const { phase = "write", priority = 0, enabled = true } = options;
80
+ let stop = null;
81
+ const attach = () => {
82
+ if (stop) return;
83
+ stop = core.getTicker().add(callback, { phase, priority, name: "useTicker" });
84
+ };
85
+ const detach = () => {
86
+ stop?.();
87
+ stop = null;
88
+ };
89
+ if (typeof enabled === "boolean") {
90
+ if (enabled) attach();
91
+ } else {
92
+ vue.watch(enabled, (value) => value ? attach() : detach(), { immediate: true });
93
+ }
94
+ if (vue.getCurrentScope()) vue.onScopeDispose(detach);
95
+ return detach;
96
+ }
97
+ function useInView(target, options = {}) {
98
+ const inView = vue.ref(false);
99
+ const { threshold = 0, rootMargin = "0px", once = false } = options;
100
+ let stop = null;
101
+ vue.watch(
102
+ target,
103
+ (element) => {
104
+ stop?.();
105
+ stop = null;
106
+ if (!element) return;
107
+ stop = core.observeIntersection(
108
+ element,
109
+ (entry) => {
110
+ inView.value = entry.isIntersecting;
111
+ if (entry.isIntersecting && once) {
112
+ queueMicrotask(() => {
113
+ stop?.();
114
+ stop = null;
115
+ });
116
+ }
117
+ },
118
+ { threshold, rootMargin }
119
+ );
120
+ },
121
+ { immediate: true, flush: "post" }
122
+ );
123
+ if (vue.getCurrentScope()) vue.onScopeDispose(() => stop?.());
124
+ return inView;
125
+ }
126
+ function useElementSize(target) {
127
+ const size = vue.ref({ width: 0, height: 0 });
128
+ let stop = null;
129
+ vue.watch(
130
+ target,
131
+ (element) => {
132
+ stop?.();
133
+ stop = null;
134
+ if (!element) return;
135
+ stop = core.observeResize(element, ({ width, height }) => {
136
+ if (size.value.width !== width || size.value.height !== height) {
137
+ size.value = { width, height };
138
+ }
139
+ });
140
+ },
141
+ { immediate: true, flush: "post" }
142
+ );
143
+ if (vue.getCurrentScope()) vue.onScopeDispose(() => stop?.());
144
+ return size;
145
+ }
146
+ function useScrollProgress(target, options = {}) {
147
+ const progress = vue.shallowRef({
148
+ progress: 0,
149
+ velocity: 0,
150
+ scroll: 0,
151
+ direction: 0,
152
+ inView: false
153
+ });
154
+ let stop = null;
155
+ vue.watch(
156
+ target,
157
+ (element) => {
158
+ stop?.();
159
+ stop = null;
160
+ if (!element) return;
161
+ stop = core.trackScroll(
162
+ element,
163
+ (next) => {
164
+ progress.value = next;
165
+ options.onChange?.(next);
166
+ },
167
+ options
168
+ );
169
+ },
170
+ { immediate: true, flush: "post" }
171
+ );
172
+ if (vue.getCurrentScope()) vue.onScopeDispose(() => stop?.());
173
+ return progress;
174
+ }
175
+ function useWindowScroll(onChange, options = {}) {
176
+ const state = vue.shallowRef({ progress: 0, scroll: 0, velocity: 0, max: 1 });
177
+ const stop = core.trackContainerScroll((info) => {
178
+ state.value = info;
179
+ onChange?.(info);
180
+ }, options);
181
+ if (vue.getCurrentScope()) vue.onScopeDispose(stop);
182
+ return state;
183
+ }
184
+ function usePointer(target, options = {}) {
185
+ const state = vue.shallowRef(null);
186
+ let tracker = null;
187
+ vue.watch(
188
+ target,
189
+ (element) => {
190
+ tracker?.destroy();
191
+ tracker = null;
192
+ state.value = null;
193
+ if (!element) return;
194
+ tracker = core.trackPointer(element, options);
195
+ state.value = tracker.state;
196
+ },
197
+ { immediate: true, flush: "post" }
198
+ );
199
+ if (vue.getCurrentScope()) vue.onScopeDispose(() => tracker?.destroy());
200
+ return state;
201
+ }
202
+ function useReducedMotion() {
203
+ const reduced = vue.ref(false);
204
+ const stop = core.onReducedMotionChange((value) => {
205
+ reduced.value = value;
206
+ });
207
+ if (vue.getCurrentScope()) vue.onScopeDispose(stop);
208
+ return reduced;
209
+ }
210
+ function useFrameBudget() {
211
+ const report = vue.ref(null);
212
+ let last = 0;
213
+ const stop = core.getTicker().onBudget((next) => {
214
+ const now = performance.now();
215
+ if (now - last < 250) return;
216
+ last = now;
217
+ report.value = next;
218
+ });
219
+ if (vue.getCurrentScope()) vue.onScopeDispose(stop);
220
+ return report;
221
+ }
222
+
223
+ exports.useAnimate = useAnimate;
224
+ exports.useAnimatedFrom = useAnimatedFrom;
225
+ exports.useElementSize = useElementSize;
226
+ exports.useFrameBudget = useFrameBudget;
227
+ exports.useInView = useInView;
228
+ exports.useMotionRef = useMotionRef;
229
+ exports.useMotionStyle = useMotionStyle;
230
+ exports.useMotionValue = useMotionValue;
231
+ exports.usePointer = usePointer;
232
+ exports.useReducedMotion = useReducedMotion;
233
+ exports.useScrollProgress = useScrollProgress;
234
+ exports.useSpringValue = useSpringValue;
235
+ exports.useTicker = useTicker;
236
+ exports.useWindowScroll = useWindowScroll;
237
+ //# sourceMappingURL=chunk-PP6OYURM.cjs.map
238
+ //# sourceMappingURL=chunk-PP6OYURM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/composables/use-motion.ts","../src/composables/use-observers.ts"],"names":["motionValue","getCurrentScope","onScopeDispose","shallowRef","readonly","watch","springTo","animate","getTicker","ref","observeIntersection","observeResize","trackScroll","trackContainerScroll","trackPointer","onReducedMotionChange"],"mappings":";;;;;;AAuCO,SAAS,eAAkB,OAAA,EAA4B;AAC5D,EAAA,MAAM,KAAA,GAAQA,iBAAY,OAAO,CAAA;AACjC,EAAA,IAAIC,qBAAgB,EAAGC,kBAAA,CAAe,MAAM,KAAA,CAAM,SAAS,CAAA;AAC3D,EAAA,OAAO,KAAA;AACT;AAYO,SAAS,aAAgB,KAAA,EAAgD;AAC9E,EAAA,MAAM,KAAA,GAAQC,cAAA,CAAW,KAAA,CAAM,GAAA,EAAK,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,CAAG,CAAC,IAAA,KAAS;AAC9B,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAA,IAAIF,mBAAA,EAAgB,EAAGC,kBAAA,CAAe,IAAI,CAAA;AAC1C,EAAA,OAAOE,aAAS,KAAK,CAAA;AACvB;AAeO,SAAS,cAAA,CACd,KAAA,EACA,MAAA,EACA,QAAA,GAAW,WAAA,EACY;AAGvB,EAAA,MAAM,OAAA,GAAUD,eAAW,IAAI,CAAA;AAE/B,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAkB;AAC/B,IAAA,OAAA,CAAQ,KAAA,EAAO,MAAM,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA,EAAG,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,EAChE,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAGjC,EAAAE,SAAA,CAAM,OAAA,EAAS,CAAC,IAAA,KAAS;AACvB,IAAA,IAAI,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,GAAA,EAAK,CAAA;AAAA,EAC7B,CAAC,CAAA;AAED,EAAA,IAAIJ,mBAAA,EAAgB,EAAGC,kBAAA,CAAe,IAAI,CAAA;AAE1C,EAAA,OAAO,OAAA;AACT;AASO,SAAS,cAAA,CACd,OAAA,EACA,OAAA,GAAyB,EAAC,EACqC;AAC/D,EAAA,MAAM,KAAA,GAAQ,eAAe,OAAO,CAAA;AACpC,EAAA,IAAI,MAAA,GAAS,OAAA;AAEb,EAAA,MAAM,IAAA,GAAOI,aAAA,CAAS,KAAA,EAAO,MAAM,QAAQ,OAAO,CAAA;AAClD,EAAA,IAAIL,mBAAA,EAAgB,EAAGC,kBAAA,CAAe,IAAI,CAAA;AAE1C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAI,IAAA,EAAc;AAChB,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AAAA,GACF;AACF;AAQO,SAAS,UAAA,GAAa;AAC3B,EAAA,IAAI,QAAA,GAA8C,IAAA;AAElD,EAAA,IAAID,qBAAgB,EAAG;AACrB,IAAAC,kBAAA,CAAe,MAAM;AACnB,MAAA,QAAA,EAAU,IAAA,EAAK;AACf,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,SAAS,KAAA,CACd,IAAA,EACA,EAAA,EACA,OAAA,EACA;AACA,IAAA,QAAA,EAAU,IAAA,EAAK;AACf,IAAA,QAAA,GAAWK,YAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,OAAO,CAAA;AACpC,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACF;AAcO,SAAS,eAAA,CACd,MAAA,EACA,MAAA,EACA,GAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,QAAA,GAA8C,IAAA;AAElD,EAAA,MAAM,IAAA,GAAOF,SAAA;AAAA,IACX,MAAA;AAAA,IACA,CAAC,IAAA,KAAS;AACR,MAAA,QAAA,EAAU,IAAA,EAAK;AACf,MAAA,QAAA,GAAWE,YAAA,CAAQ,MAAA,EAAQ,GAAA,CAAI,IAAI,GAAG,OAAO,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,EAAE,OAAO,MAAA;AAAO,GAClB;AAEA,EAAA,IAAIN,qBAAgB,EAAG;AACrB,IAAAC,kBAAA,CAAe,MAAM;AACnB,MAAA,QAAA,EAAU,IAAA,EAAK;AACf,MAAA,IAAA,EAAK;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AACF;AAEA,SAAS,MAAM,QAAA,EAA0B;AACvC,EAAA,OAAO,QAAA,CAAS,QAAQ,QAAA,EAAU,CAAC,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAE,CAAA;AACxE;AC9JO,SAAS,SAAA,CACd,QAAA,EACA,OAAA,GAII,EAAC,EACO;AACZ,EAAA,MAAM,EAAE,KAAA,GAAQ,OAAA,EAAS,WAAW,CAAA,EAAG,OAAA,GAAU,MAAK,GAAI,OAAA;AAC1D,EAAA,IAAI,IAAA,GAA4B,IAAA;AAEhC,EAAA,MAAM,SAAS,MAAY;AACzB,IAAA,IAAI,IAAA,EAAM;AACV,IAAA,IAAA,GAAOM,cAAA,GAAY,GAAA,CAAI,QAAA,EAAU,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,CAAA;AAAA,EACzE,CAAA;AAEA,EAAA,MAAM,SAAS,MAAY;AACzB,IAAA,IAAA,IAAO;AACP,IAAA,IAAA,GAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,IAAI,OAAO,YAAY,SAAA,EAAW;AAChC,IAAA,IAAI,SAAS,MAAA,EAAO;AAAA,EACtB,CAAA,MAAO;AACL,IAAAH,SAAAA,CAAM,OAAA,EAAS,CAAC,KAAA,KAAW,KAAA,GAAQ,MAAA,EAAO,GAAI,MAAA,EAAO,EAAI,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EAC9E;AAEA,EAAA,IAAIJ,mBAAAA,EAAgB,EAAGC,kBAAAA,CAAe,MAAM,CAAA;AAC5C,EAAA,OAAO,MAAA;AACT;AAaO,SAAS,SAAA,CACd,MAAA,EACA,OAAA,GAA4B,EAAC,EACf;AACd,EAAA,MAAM,MAAA,GAASO,QAAI,KAAK,CAAA;AACxB,EAAA,MAAM,EAAE,SAAA,GAAY,CAAA,EAAG,aAAa,KAAA,EAAO,IAAA,GAAO,OAAM,GAAI,OAAA;AAE5D,EAAA,IAAI,IAAA,GAA4B,IAAA;AAEhC,EAAAJ,SAAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,KAAY;AACX,MAAA,IAAA,IAAO;AACP,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,IAAA,GAAOK,wBAAA;AAAA,QACL,OAAA;AAAA,QACA,CAAC,KAAA,KAAU;AACT,UAAA,MAAA,CAAO,QAAQ,KAAA,CAAM,cAAA;AACrB,UAAA,IAAI,KAAA,CAAM,kBAAkB,IAAA,EAAM;AAGhC,YAAA,cAAA,CAAe,MAAM;AACnB,cAAA,IAAA,IAAO;AACP,cAAA,IAAA,GAAO,IAAA;AAAA,YACT,CAAC,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAAA,QACA,EAAE,WAAW,UAAA;AAAW,OAC1B;AAAA,IACF,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAEA,EAAA,IAAIT,qBAAgB,EAAGC,kBAAAA,CAAe,MAAM,QAAQ,CAAA;AACpD,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,eACd,MAAA,EACwC;AACxC,EAAA,MAAM,OAAOO,OAAA,CAAI,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,GAAG,CAAA;AACxC,EAAA,IAAI,IAAA,GAA4B,IAAA;AAEhC,EAAAJ,SAAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,KAAY;AACX,MAAA,IAAA,IAAO;AACP,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAA,GAAOM,mBAAc,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,QAAO,KAAM;AAGnD,QAAA,IAAI,KAAK,KAAA,CAAM,KAAA,KAAU,SAAS,IAAA,CAAK,KAAA,CAAM,WAAW,MAAA,EAAQ;AAC9D,UAAA,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,QAC/B;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAEA,EAAA,IAAIV,qBAAgB,EAAGC,kBAAAA,CAAe,MAAM,QAAQ,CAAA;AACpD,EAAA,OAAO,IAAA;AACT;AAUO,SAAS,iBAAA,CACd,MAAA,EACA,OAAA,GAAkF,EAAC,EACvD;AAC5B,EAAA,MAAM,WAAWC,cAAAA,CAA2B;AAAA,IAC1C,QAAA,EAAU,CAAA;AAAA,IACV,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ,CAAA;AAAA,IACR,SAAA,EAAW,CAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,IAAA,GAA4B,IAAA;AAEhC,EAAAE,SAAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,KAAY;AACX,MAAA,IAAA,IAAO;AACP,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,IAAA,GAAOO,gBAAA;AAAA,QACL,OAAA;AAAA,QACA,CAAC,IAAA,KAAS;AAGR,UAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AACjB,UAAA,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,QACzB,CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAEA,EAAA,IAAIX,qBAAgB,EAAGC,kBAAAA,CAAe,MAAM,QAAQ,CAAA;AACpD,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,eAAA,CACd,QAAA,EACA,OAAA,GAAgE,EAAC,EACgB;AACjF,EAAA,MAAM,KAAA,GAAQC,cAAAA,CAAW,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA;AAExE,EAAA,MAAM,IAAA,GAAOU,yBAAA,CAAqB,CAAC,IAAA,KAAS;AAC1C,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AACd,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,GAAG,OAAO,CAAA;AAEV,EAAA,IAAIZ,mBAAAA,EAAgB,EAAGC,kBAAAA,CAAe,IAAI,CAAA;AAC1C,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,UAAA,CACd,MAAA,EACA,OAAA,GAA0D,EAAC,EAChB;AAC3C,EAAA,MAAM,KAAA,GAAQC,eAA0C,IAAI,CAAA;AAC5D,EAAA,IAAI,OAAA,GAAkD,IAAA;AAEtD,EAAAE,SAAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,KAAY;AACX,MAAA,OAAA,EAAS,OAAA,EAAQ;AACjB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AACd,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,OAAA,GAAUS,iBAAA,CAAa,SAAS,OAAO,CAAA;AACvC,MAAA,KAAA,CAAM,QAAQ,OAAA,CAAQ,KAAA;AAAA,IACxB,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAEA,EAAA,IAAIb,qBAAgB,EAAGC,mBAAe,MAAM,OAAA,EAAS,SAAS,CAAA;AAC9D,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,gBAAA,GAAiC;AAC/C,EAAA,MAAM,OAAA,GAAUO,QAAI,KAAK,CAAA;AACzB,EAAA,MAAM,IAAA,GAAOM,0BAAA,CAAsB,CAAC,KAAA,KAAU;AAC5C,IAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,EAClB,CAAC,CAAA;AACD,EAAA,IAAId,mBAAAA,EAAgB,EAAGC,kBAAAA,CAAe,IAAI,CAAA;AAC1C,EAAA,OAAO,OAAA;AACT;AAQO,SAAS,cAAA,GAA2C;AACzD,EAAA,MAAM,MAAA,GAASO,QAAyB,IAAI,CAAA;AAC5C,EAAA,IAAI,IAAA,GAAO,CAAA;AAEX,EAAA,MAAM,IAAA,GAAOD,cAAA,EAAU,CAAE,QAAA,CAAS,CAAC,IAAA,KAAS;AAC1C,IAAA,MAAM,GAAA,GAAM,YAAY,GAAA,EAAI;AAC5B,IAAA,IAAI,GAAA,GAAM,OAAO,GAAA,EAAK;AACtB,IAAA,IAAA,GAAO,GAAA;AACP,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,IAAIP,mBAAAA,EAAgB,EAAGC,kBAAAA,CAAe,IAAI,CAAA;AAC1C,EAAA,OAAO,MAAA;AACT","file":"chunk-PP6OYURM.cjs","sourcesContent":["import {\n type Ref,\n type ShallowRef,\n getCurrentScope,\n onScopeDispose,\n readonly,\n shallowRef,\n watch,\n} from 'vue'\nimport {\n type AnimationOptions,\n type MotionValue,\n type SpringOptions,\n animate,\n motionValue,\n springTo,\n} from '@ansh-ui/core'\n\n/**\n * Vue motion composables.\n *\n * The design principle mirrors the React package: animated values live **outside** Vue's\n * reactivity. A `ref` that updates 60 times a second triggers 60 reactive effect flushes and, if\n * anything in a template reads it, 60 patch cycles — which is precisely the cost that makes\n * \"animation in a framework\" slow.\n *\n * So {@link useMotionValue} returns the engine's `MotionValue` directly and writes to the DOM. Where\n * a value genuinely belongs in a template, {@link useMotionRef} bridges it into a `shallowRef` and\n * says plainly what that costs.\n *\n * Cleanup uses `onScopeDispose` rather than `onBeforeUnmount`, so these compose correctly inside\n * `effectScope()` — including in Pinia stores and outside a component instance entirely.\n */\n\n/**\n * Create a {@link MotionValue} bound to the current effect scope.\n *\n * Does not trigger re-renders. Pass it to `useMotionStyle` or read it in a `useTicker` callback.\n */\nexport function useMotionValue<T>(initial: T): MotionValue<T> {\n const value = motionValue(initial)\n if (getCurrentScope()) onScopeDispose(() => value.destroy())\n return value\n}\n\n/**\n * Bridge a MotionValue into a Vue ref.\n *\n * **This makes the value reactive, which means a component update on every change.** For a value\n * being animated continuously that is 60 updates per second. Use it for values that change at\n * interaction rate — a settled spring, a toggle — not for anything mid-animation.\n *\n * A `shallowRef` rather than `ref` because the value is replaced wholesale, never mutated, so deep\n * reactivity would be pure overhead.\n */\nexport function useMotionRef<T>(value: MotionValue<T>): Readonly<ShallowRef<T>> {\n const state = shallowRef(value.get()) as ShallowRef<T>\n const stop = value.on((next) => {\n state.value = next\n })\n if (getCurrentScope()) onScopeDispose(stop)\n return readonly(state) as Readonly<ShallowRef<T>>\n}\n\n/**\n * Write a MotionValue straight to an element's style property, bypassing Vue's renderer.\n *\n * This is the mechanism for smooth animation in Vue. Bind the returned ref to an element:\n *\n * ```vue\n * <script setup>\n * const x = useMotionValue(0)\n * const el = useMotionStyle(x, (v) => `translateX(${v}px)`)\n * </script>\n * <template><div :ref=\"el\" /></template>\n * ```\n */\nexport function useMotionStyle<T, El extends HTMLElement = HTMLElement>(\n value: MotionValue<T>,\n format: (value: T) => string,\n property = 'transform',\n): ShallowRef<El | null> {\n // Cast because Vue's `shallowRef` overloads resolve to a union for a generic element type; the\n // runtime value is unambiguously `El | null`.\n const element = shallowRef(null) as ShallowRef<El | null>\n\n const write = (next: T): void => {\n element.value?.style.setProperty(kebab(property), format(next))\n }\n\n const stop = value.onRender(write)\n\n // Apply immediately when the element arrives, so there is no frame at the un-styled default.\n watch(element, (node) => {\n if (node) write(value.get())\n })\n\n if (getCurrentScope()) onScopeDispose(stop)\n\n return element\n}\n\n/**\n * A spring that continuously chases a target.\n *\n * The target is a plain setter rather than a reactive ref, deliberately: reading a ref inside the\n * spring's per-frame callback would register a reactive dependency and flush an effect every\n * frame, which defeats the purpose of keeping the animation outside the reactivity system.\n */\nexport function useSpringValue(\n initial: number,\n options: SpringOptions = {},\n): { value: MotionValue<number>; set: (target: number) => void } {\n const value = useMotionValue(initial)\n let target = initial\n\n const stop = springTo(value, () => target, options)\n if (getCurrentScope()) onScopeDispose(stop)\n\n return {\n value,\n set(next: number) {\n target = next\n },\n }\n}\n\n/**\n * Scope-bound imperative animation.\n *\n * Any in-flight animation is stopped when the scope disposes, and when `start` is called again —\n * which is the behaviour you want, since two animations driving one value fight each other.\n */\nexport function useAnimate() {\n let controls: ReturnType<typeof animate> | null = null\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n controls?.stop()\n controls = null\n })\n }\n\n return function start<T>(\n from: T | MotionValue<T>,\n to: T | readonly T[],\n options?: AnimationOptions<T>,\n ) {\n controls?.stop()\n controls = animate(from, to, options)\n return controls\n }\n}\n\n/**\n * Drive a MotionValue from a reactive source.\n *\n * The bridge in the other direction: when a `ref` in your component changes, animate toward the new\n * value. This is the idiomatic way to connect Vue state to Ansh motion.\n *\n * ```ts\n * const open = ref(false)\n * const height = useMotionValue(0)\n * useAnimatedFrom(open, height, (isOpen) => (isOpen ? 320 : 0), { spring: 'snappy' })\n * ```\n */\nexport function useAnimatedFrom<Source, T>(\n source: Ref<Source>,\n target: MotionValue<T>,\n map: (value: Source) => T,\n options?: AnimationOptions<T>,\n): void {\n let controls: ReturnType<typeof animate> | null = null\n\n const stop = watch(\n source,\n (next) => {\n controls?.stop()\n controls = animate(target, map(next), options)\n },\n { flush: 'post' },\n )\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n controls?.stop()\n stop()\n })\n }\n}\n\nfunction kebab(property: string): string {\n return property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`)\n}\n","import {\n type Ref,\n type ShallowRef,\n getCurrentScope,\n onScopeDispose,\n ref,\n shallowRef,\n watch,\n} from 'vue'\nimport {\n type BudgetReport,\n type FrameState,\n type PointerState,\n type ScrollProgress,\n type ScrollTrackOptions,\n getTicker,\n observeIntersection,\n observeResize,\n onReducedMotionChange,\n trackContainerScroll,\n trackPointer,\n trackScroll,\n} from '@ansh-ui/core'\n\n/**\n * Observer and lifecycle composables.\n *\n * A consistent pattern throughout: composables that take an element accept a **ref you bind in the\n * template**, and watch it rather than reading it once. This matters because a template ref is\n * `null` during `setup()` and only populated after mount — and stays null across a `v-if` toggle,\n * then repopulates. Watching handles all of that; reading once in `onMounted` silently fails for\n * conditionally-rendered elements, which is the most common bug in hand-written Vue composables.\n */\n\n/** Subscribe to the shared ticker for the current scope's lifetime. */\nexport function useTicker(\n callback: (state: FrameState) => void,\n options: {\n phase?: 'read' | 'compute' | 'write' | 'post'\n priority?: number\n enabled?: Ref<boolean> | boolean\n } = {},\n): () => void {\n const { phase = 'write', priority = 0, enabled = true } = options\n let stop: (() => void) | null = null\n\n const attach = (): void => {\n if (stop) return\n stop = getTicker().add(callback, { phase, priority, name: 'useTicker' })\n }\n\n const detach = (): void => {\n stop?.()\n stop = null\n }\n\n if (typeof enabled === 'boolean') {\n if (enabled) attach()\n } else {\n watch(enabled, (value) => (value ? attach() : detach()), { immediate: true })\n }\n\n if (getCurrentScope()) onScopeDispose(detach)\n return detach\n}\n\nexport interface UseInViewOptions {\n threshold?: number\n rootMargin?: string\n once?: boolean\n}\n\n/**\n * Is the element in view?\n *\n * @param target A template ref. Watched, so it works with `v-if` and with elements that mount late.\n */\nexport function useInView(\n target: Ref<HTMLElement | null | undefined>,\n options: UseInViewOptions = {},\n): Ref<boolean> {\n const inView = ref(false)\n const { threshold = 0, rootMargin = '0px', once = false } = options\n\n let stop: (() => void) | null = null\n\n watch(\n target,\n (element) => {\n stop?.()\n stop = null\n if (!element) return\n\n stop = observeIntersection(\n element,\n (entry) => {\n inView.value = entry.isIntersecting\n if (entry.isIntersecting && once) {\n // Deferred: unsubscribing inside the observer callback would mutate the pool's\n // callback set while it is being iterated.\n queueMicrotask(() => {\n stop?.()\n stop = null\n })\n }\n },\n { threshold, rootMargin },\n )\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) onScopeDispose(() => stop?.())\n return inView\n}\n\n/** Track an element's size as a reactive value. */\nexport function useElementSize(\n target: Ref<HTMLElement | null | undefined>,\n): Ref<{ width: number; height: number }> {\n const size = ref({ width: 0, height: 0 })\n let stop: (() => void) | null = null\n\n watch(\n target,\n (element) => {\n stop?.()\n stop = null\n if (!element) return\n stop = observeResize(element, ({ width, height }) => {\n // Guard identical values: ResizeObserver fires on sub-pixel changes during animation, and\n // every assignment here triggers a reactive flush.\n if (size.value.width !== width || size.value.height !== height) {\n size.value = { width, height }\n }\n })\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) onScopeDispose(() => stop?.())\n return size\n}\n\n/**\n * Track an element's scroll progress.\n *\n * Returns a **shallowRef holding a mutable state object**, not a reactive number. Scroll progress\n * changes every frame; making it reactive would flush an effect per frame and undo the phase\n * separation the kernel provides. Read `progress.value.progress` inside a `useTicker` callback, or\n * pass `onChange` and write to the DOM directly.\n */\nexport function useScrollProgress(\n target: Ref<HTMLElement | null | undefined>,\n options: ScrollTrackOptions & { onChange?: (progress: ScrollProgress) => void } = {},\n): ShallowRef<ScrollProgress> {\n const progress = shallowRef<ScrollProgress>({\n progress: 0,\n velocity: 0,\n scroll: 0,\n direction: 0,\n inView: false,\n })\n\n let stop: (() => void) | null = null\n\n watch(\n target,\n (element) => {\n stop?.()\n stop = null\n if (!element) return\n\n stop = trackScroll(\n element,\n (next) => {\n // Assigned rather than mutated so a caller who *does* want reactivity gets it, while\n // callers reading it per frame pay only a property write.\n progress.value = next\n options.onChange?.(next)\n },\n options,\n )\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) onScopeDispose(() => stop?.())\n return progress\n}\n\n/** Track the window's (or a container's) overall scroll. */\nexport function useWindowScroll(\n onChange?: (info: { progress: number; scroll: number; velocity: number; max: number }) => void,\n options: { axis?: 'y' | 'x'; container?: HTMLElement | null } = {},\n): ShallowRef<{ progress: number; scroll: number; velocity: number; max: number }> {\n const state = shallowRef({ progress: 0, scroll: 0, velocity: 0, max: 1 })\n\n const stop = trackContainerScroll((info) => {\n state.value = info\n onChange?.(info)\n }, options)\n\n if (getCurrentScope()) onScopeDispose(stop)\n return state\n}\n\n/**\n * Track pointer position over an element.\n *\n * The returned object is mutated in place by the tracker each frame and is deliberately **not**\n * reactive — reading it in a template would flush on every pointer move.\n */\nexport function usePointer(\n target: Ref<HTMLElement | null | undefined>,\n options: { smoothing?: number; trackOutside?: boolean } = {},\n): ShallowRef<Readonly<PointerState> | null> {\n const state = shallowRef<Readonly<PointerState> | null>(null)\n let tracker: ReturnType<typeof trackPointer> | null = null\n\n watch(\n target,\n (element) => {\n tracker?.destroy()\n tracker = null\n state.value = null\n if (!element) return\n tracker = trackPointer(element, options)\n state.value = tracker.state\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) onScopeDispose(() => tracker?.destroy())\n return state\n}\n\n/**\n * Does the user prefer reduced motion?\n *\n * Returns `false` during SSR, which is the hydration-safe default: the server cannot know, and\n * differing between server and first client render would be a mismatch.\n */\nexport function useReducedMotion(): Ref<boolean> {\n const reduced = ref(false)\n const stop = onReducedMotionChange((value) => {\n reduced.value = value\n })\n if (getCurrentScope()) onScopeDispose(stop)\n return reduced\n}\n\n/**\n * Live frame-budget telemetry for a development overlay.\n *\n * Sampled at 4 Hz rather than per frame: a number changing 60 times a second is unreadable, and\n * rendering it that often distorts the measurement it is reporting.\n */\nexport function useFrameBudget(): Ref<BudgetReport | null> {\n const report = ref<BudgetReport | null>(null)\n let last = 0\n\n const stop = getTicker().onBudget((next) => {\n const now = performance.now()\n if (now - last < 250) return\n last = now\n report.value = next\n })\n\n if (getCurrentScope()) onScopeDispose(stop)\n return report\n}\n"]}