@ansh-ui/vue 0.2.0 → 0.3.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 (66) 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-5BQEZYG6.cjs → chunk-FK536ZUI.cjs} +15 -15
  4. package/dist/{chunk-5BQEZYG6.cjs.map → chunk-FK536ZUI.cjs.map} +1 -1
  5. package/dist/{chunk-TMG3M6TK.js → chunk-G2OX2NH2.js} +3 -3
  6. package/dist/chunk-G2OX2NH2.js.map +1 -0
  7. package/dist/{chunk-2VSROZ2N.js → chunk-HIVA75XC.js} +3 -3
  8. package/dist/{chunk-2VSROZ2N.js.map → chunk-HIVA75XC.js.map} +1 -1
  9. package/dist/{chunk-KCA7RNJ4.cjs → chunk-IHH6KMBY.cjs} +239 -5
  10. package/dist/chunk-IHH6KMBY.cjs.map +1 -0
  11. package/dist/{chunk-IOXGBPOV.cjs → chunk-IK3E4MPB.cjs} +3 -3
  12. package/dist/chunk-IK3E4MPB.cjs.map +1 -0
  13. package/dist/{chunk-SOYRICHU.js → chunk-LRTNIUAG.js} +3 -3
  14. package/dist/chunk-LRTNIUAG.js.map +1 -0
  15. package/dist/{chunk-EISHOEB6.cjs → chunk-MWGVDY6K.cjs} +3 -3
  16. package/dist/chunk-MWGVDY6K.cjs.map +1 -0
  17. package/dist/{chunk-T425FIC7.js → chunk-NKRPZTQA.js} +238 -5
  18. package/dist/chunk-NKRPZTQA.js.map +1 -0
  19. package/dist/{chunk-JQ4YLXXM.cjs → chunk-PNR4RQ4T.cjs} +5 -2
  20. package/dist/chunk-PNR4RQ4T.cjs.map +1 -0
  21. package/dist/data.d.cts +15 -14
  22. package/dist/data.d.ts +15 -14
  23. package/dist/form.cjs +36 -36
  24. package/dist/form.d.cts +32 -31
  25. package/dist/form.d.ts +32 -31
  26. package/dist/form.js +1 -1
  27. package/dist/index.cjs +159 -131
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +33 -8
  30. package/dist/index.d.ts +33 -8
  31. package/dist/index.js +27 -11
  32. package/dist/index.js.map +1 -1
  33. package/dist/layout.cjs +13 -13
  34. package/dist/layout.d.cts +24 -15
  35. package/dist/layout.d.ts +24 -15
  36. package/dist/layout.js +1 -1
  37. package/dist/motion.d.cts +14 -13
  38. package/dist/motion.d.ts +14 -13
  39. package/dist/navigation.cjs +13 -9
  40. package/dist/navigation.d.cts +124 -3
  41. package/dist/navigation.d.ts +124 -3
  42. package/dist/navigation.js +2 -2
  43. package/dist/overlay.cjs +14 -14
  44. package/dist/overlay.d.cts +9 -8
  45. package/dist/overlay.d.ts +9 -8
  46. package/dist/overlay.js +2 -2
  47. package/dist/{position-Cn7qP1pn.d.cts → position-CiY171HP.d.cts} +2 -1
  48. package/dist/{position-Cn7qP1pn.d.ts → position-CiY171HP.d.ts} +2 -1
  49. package/dist/primitives.cjs +6 -6
  50. package/dist/primitives.d.cts +6 -5
  51. package/dist/primitives.d.ts +6 -5
  52. package/dist/primitives.js +1 -1
  53. package/dist/{sidebar-CTZ-Ckko.d.ts → sidebar-B9zDHMbn.d.cts} +5 -4
  54. package/dist/{sidebar-CQqEmpid.d.cts → sidebar-DMrKHqZ5.d.ts} +5 -4
  55. package/dist/styles.css +464 -0
  56. package/dist/{utils-IKPG3zcC.d.cts → utils-D4XwXDeX.d.cts} +2 -1
  57. package/dist/{utils-IKPG3zcC.d.ts → utils-D4XwXDeX.d.ts} +2 -1
  58. package/package.json +3 -3
  59. package/dist/chunk-B6OXKW5Q.js.map +0 -1
  60. package/dist/chunk-EISHOEB6.cjs.map +0 -1
  61. package/dist/chunk-IOXGBPOV.cjs.map +0 -1
  62. package/dist/chunk-JQ4YLXXM.cjs.map +0 -1
  63. package/dist/chunk-KCA7RNJ4.cjs.map +0 -1
  64. package/dist/chunk-SOYRICHU.js.map +0 -1
  65. package/dist/chunk-T425FIC7.js.map +0 -1
  66. package/dist/chunk-TMG3M6TK.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/factory/create-effect-component.ts","../src/factory/create-behaviour-component.ts","../src/components/index.ts","../src/components/feedback/alert.ts","../src/plugin.ts","../src/index.ts"],"names":["defineComponent","pascal","ref","onMounted","watch","onBeforeUnmount","h"],"mappings":"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","file":"index.js","sourcesContent":["import {\n type CSSProperties,\n type DefineComponent,\n type PropType,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport {\n type BaseEffectOptions,\n type EffectDefinition,\n type EffectHandle,\n mountEffect,\n} from '@ansh-ui/core'\n\n/**\n * Turn an {@link EffectDefinition} into a Vue 3 component.\n *\n * The Vue counterpart of the React factory, and the reason both frameworks are supported without\n * duplicating a single line of visual logic. All behaviour lives in `@ansh-ui/core`; this file owns\n * only the Vue lifecycle.\n *\n * ```ts\n * export const AuroraBackground = createEffectComponent(aurora, 'AuroraBackground')\n * ```\n *\n * What each generated component provides:\n *\n * - **SSR safety.** `mountEffect` runs in `onMounted`, which never executes on the server, so the\n * server-rendered markup is the host element and its slot content — identical to the first\n * client render, so hydration is clean.\n * - **Live prop updates.** A deep watcher on the resolved options calls `handle.update()`, which\n * live-updates what it can and remounts only structural changes.\n * - **Attribute fall-through** via `inheritAttrs: false` plus explicit binding, so `class`,\n * `style` and listeners land on the host element and merge with our own positioning styles\n * rather than replacing them.\n * - **Complete teardown** in `onBeforeUnmount`.\n */\n\n/** Props every generated effect component accepts beyond its own options. */\nexport interface EffectComponentBaseProps {\n /** Tag or component to render as the host. Default `'div'`. */\n as?: string\n}\n\n/**\n * `isolation: isolate` creates a stacking context, which keeps the canvas' blend modes from\n * compositing against the page behind the component. Without it an effect using `lighter` bleeds\n * into whatever sits underneath the section — rarely intended and very hard to diagnose.\n */\nconst HOST_STYLE: CSSProperties = {\n position: 'relative',\n isolation: 'isolate',\n overflow: 'hidden',\n}\n\nconst CONTENT_STYLE: CSSProperties = {\n position: 'relative',\n zIndex: 1,\n}\n\n/**\n * The public type of a generated component.\n *\n * `DefineComponent<Props>` gives full prop autocompletion and type-checking inside SFC templates,\n * which is the whole point of generating a real component rather than exposing a directive.\n */\nexport type VueEffectComponent<Options extends BaseEffectOptions> = DefineComponent<\n Options & EffectComponentBaseProps\n>\n\nexport function createEffectComponent<Options extends BaseEffectOptions>(\n definition: EffectDefinition<Options>,\n name?: string,\n): VueEffectComponent<Options> {\n const optionKeys = Object.keys(definition.defaults) as Array<keyof Options & string>\n\n /**\n * Runtime prop declarations.\n *\n * Every option is declared with `default: undefined` rather than the effect's actual default.\n * That is deliberate: `mountEffect` strips `undefined` and applies the definition's defaults\n * itself, so the defaults live in exactly one place. Duplicating them here would mean two\n * sources of truth that drift the moment someone changes one.\n */\n const props: Record<string, { type: PropType<unknown>; default: undefined }> = {}\n for (const key of optionKeys) {\n props[key] = { type: null as unknown as PropType<unknown>, default: undefined }\n }\n props.as = { type: String as unknown as PropType<unknown>, default: undefined }\n\n const component = defineComponent({\n name: name ?? `Ansh${pascal(definition.name)}`,\n // Attributes are bound explicitly below so our positioning styles merge with the author's\n // rather than being overwritten by automatic inheritance.\n inheritAttrs: false,\n props,\n\n setup(componentProps, { slots, attrs, expose }) {\n const host = ref<HTMLElement | null>(null)\n let handle: EffectHandle | null = null\n\n /** Collect the currently-supplied options, omitting anything the author didn't pass. */\n const collect = (): Partial<Options> => {\n const out: Record<string, unknown> = {}\n for (const key of optionKeys) {\n const value = (componentProps as Record<string, unknown>)[key]\n if (value !== undefined) out[key] = value\n }\n return out as Partial<Options>\n }\n\n onMounted(() => {\n if (!host.value) return\n handle = mountEffect(definition, host.value, collect())\n })\n\n /**\n * Watch the collected options.\n *\n * `deep` is required because `colors` is an array and authors pass it inline — a shallow\n * watcher would miss `:colors=\"['#fff', '#000']\"` changing contents. The cost is a deep\n * comparison per flush over a handful of scalar props, which is negligible next to a frame.\n */\n watch(collect, (next) => handle?.update(next), { deep: true, flush: 'post' })\n\n onBeforeUnmount(() => {\n handle?.destroy()\n handle = null\n })\n\n // Exposed so a parent can drive the effect imperatively — pausing a hero animation while a\n // modal is open, for instance.\n expose({\n pause: () => handle?.pause(),\n resume: () => handle?.resume(),\n renderOnce: () => handle?.renderOnce(),\n get canvas() {\n return handle?.canvas ?? null\n },\n })\n\n return () => {\n const tag = (componentProps as { as?: string }).as ?? 'div'\n const { class: className, style, ...rest } = attrs as Record<string, unknown>\n\n return h(\n tag,\n {\n ref: host,\n class: className,\n // Array form lets Vue merge our styles with the author's, with theirs winning.\n style: [HOST_STYLE, style],\n ...rest,\n },\n slots.default ? [h('div', { style: CONTENT_STYLE }, slots.default())] : undefined,\n )\n }\n },\n })\n\n return component as unknown as VueEffectComponent<Options>\n}\n\nfunction pascal(value: string): string {\n return value.replace(/(^|-)([a-z])/g, (_, __, letter: string) => letter.toUpperCase())\n}\n","import {\n type DefineComponent,\n type PropType,\n type Ref,\n defineComponent,\n getCurrentScope,\n h,\n onBeforeUnmount,\n onMounted,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\nimport {\n type BaseBehaviourOptions,\n type BehaviourDefinition,\n type BehaviourHandle,\n mountBehaviour,\n} from '@ansh-ui/core'\n\n/**\n * Turn a {@link BehaviourDefinition} into a Vue 3 component.\n *\n * Unlike the effect factory this renders its slot content **directly**, with no positioned wrapper:\n * a behaviour manipulates the host element itself, and injecting a wrapper would break the author's\n * layout — a magnetic button inside an extra div is no longer a flex child of its container.\n */\n\nexport interface BehaviourComponentBaseProps {\n as?: string\n}\n\nexport type VueBehaviourComponent<Options extends BaseBehaviourOptions> = DefineComponent<\n Options & BehaviourComponentBaseProps\n>\n\nexport function createBehaviourComponent<\n Options extends BaseBehaviourOptions,\n El extends HTMLElement = HTMLElement,\n>(\n definition: BehaviourDefinition<Options, El>,\n name?: string,\n defaultTag = 'div',\n): VueBehaviourComponent<Options> {\n const optionKeys = Object.keys(definition.defaults) as Array<keyof Options & string>\n\n const props: Record<string, { type: PropType<unknown>; default: undefined }> = {}\n for (const key of optionKeys) {\n props[key] = { type: null as unknown as PropType<unknown>, default: undefined }\n }\n props.as = { type: String as unknown as PropType<unknown>, default: undefined }\n\n const component = defineComponent({\n name: name ?? `Ansh${pascal(definition.name)}`,\n inheritAttrs: false,\n props,\n\n setup(componentProps, { slots, attrs, expose }) {\n const host = ref<El | null>(null)\n let handle: BehaviourHandle<Options> | null = null\n\n const collect = (): Partial<Options> => {\n const out: Record<string, unknown> = {}\n for (const key of optionKeys) {\n const value = (componentProps as Record<string, unknown>)[key]\n if (value !== undefined) out[key] = value\n }\n return out as Partial<Options>\n }\n\n onMounted(() => {\n if (!host.value) return\n handle = mountBehaviour(definition, host.value, collect())\n })\n\n watch(collect, (next) => handle?.update(next), { deep: true, flush: 'post' })\n\n onBeforeUnmount(() => {\n handle?.destroy()\n handle = null\n })\n\n expose({\n get element() {\n return host.value\n },\n })\n\n return () => {\n const tag = (componentProps as { as?: string }).as ?? defaultTag\n return h(tag, { ref: host, ...attrs }, slots.default?.())\n }\n },\n })\n\n return component as unknown as VueBehaviourComponent<Options>\n}\n\n/**\n * Attach a behaviour to an element you already have a template ref to.\n *\n * The composable form, for when a behaviour must apply to an existing component's own element\n * rather than to a wrapper — which is most of the time when integrating with a design system.\n *\n * ```vue\n * <script setup>\n * const button = ref(null)\n * useBehaviour(button, magnetic, { strength: 16 })\n * </script>\n * <template><button ref=\"button\">Go</button></template>\n * ```\n *\n * The target is watched rather than read once, so it works with `v-if` and with elements that\n * mount after setup.\n */\nexport function useBehaviour<Options extends BaseBehaviourOptions, El extends HTMLElement>(\n target: Ref<El | null | undefined>,\n definition: BehaviourDefinition<Options, El>,\n options?: Options | (() => Partial<Options>),\n): void {\n let handle: BehaviourHandle<Options> | null = null\n\n const resolve = (): Partial<Options> =>\n typeof options === 'function' ? options() : ((options ?? {}) as Partial<Options>)\n\n watch(\n target,\n (element) => {\n handle?.destroy()\n handle = null\n if (!element) return\n handle = mountBehaviour(definition, element, resolve())\n },\n { immediate: true, flush: 'post' },\n )\n\n // A getter form lets the caller pass reactive options; a plain object is watched too, in case it\n // is itself reactive.\n watch(resolve, (next) => handle?.update(next), { deep: true, flush: 'post' })\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n handle?.destroy()\n handle = null\n })\n }\n}\n\nfunction pascal(value: string): string {\n return value.replace(/(^|-)([a-z])/g, (_, __, letter: string) => letter.toUpperCase())\n}\n","import {\n animatedGradient,\n aurora,\n blob,\n constellation,\n fireflies,\n magnetic,\n marquee,\n meshGradient,\n meteors,\n noiseLayer,\n parallax,\n particleField,\n rain,\n ripple,\n scrollReveal,\n snow,\n spotlight,\n tilt,\n waves,\n} from '@ansh-ui/core'\nimport { createEffectComponent } from '../factory/create-effect-component'\nimport { createBehaviourComponent } from '../factory/create-behaviour-component'\n\n/**\n * The Vue component set.\n *\n * Every component is one factory call over the same `@ansh-ui/core` definition the React package\n * uses. That is the payoff of the layered architecture: parity between frameworks is structural\n * rather than something to be maintained by hand, and a fix to an effect fixes it everywhere.\n *\n * ```vue\n * <script setup>\n * import { AuroraBackground, MagneticButton } from '@ansh-ui/vue'\n * </script>\n *\n * <template>\n * <AuroraBackground :colors=\"['#0275f4', '#9f0550']\" class=\"hero\">\n * <h1>Motion, refined.</h1>\n * <MagneticButton :strength=\"16\">Get started</MagneticButton>\n * </AuroraBackground>\n * </template>\n * ```\n */\n\n// --- Backgrounds ---\n\n/** Vertical curtains of light with ridged filament structure. */\nexport const AuroraBackground = createEffectComponent(aurora, 'AuroraBackground')\n\n/** Soft overlapping colour fields drifting on non-repeating Lissajous paths. */\nexport const MeshGradient = createEffectComponent(meshGradient, 'MeshGradient')\n\n/** A rotating multi-stop linear gradient. One fill per frame. */\nexport const AnimatedGradient = createEffectComponent(animatedGradient, 'AnimatedGradient')\n\n/** Points advected by a divergence-free curl-noise flow field. */\nexport const ParticleField = createEffectComponent(particleField, 'ParticleField')\n\n/** Drifting nodes joined by lines, with the pointer as a live node. */\nexport const Constellation = createEffectComponent(constellation, 'Constellation')\n\n/** Streaks falling across the canvas, spawned as a Poisson process. */\nexport const MeteorShower = createEffectComponent(meteors, 'MeteorShower')\n\n/** Depth-parallaxed rain, optionally with splash rings. */\nexport const Rain = createEffectComponent(rain, 'Rain')\n\n/** Depth-parallaxed snow with independent per-flake sway. */\nexport const Snow = createEffectComponent(snow, 'Snow')\n\n/** Wandering points with asymmetric bioluminescent pulsing. */\nexport const Fireflies = createEffectComponent(fireflies, 'Fireflies')\n\n/** Layered undulating bands from three incommensurable sines plus noise. */\nexport const Waves = createEffectComponent(waves, 'Waves')\n\n/** Organic shapes morphing via noise sampled on a closed circle. */\nexport const LiquidBlob = createEffectComponent(blob, 'LiquidBlob')\n\n/** Film grain overlay. Hides gradient banding and gives flat colour texture. */\nexport const NoiseLayer = createEffectComponent(noiseLayer, 'NoiseLayer')\n\n/** A soft light following the pointer, easing in and out. */\nexport const Spotlight = createEffectComponent(spotlight, 'Spotlight')\n\n// --- Behaviours ---\n\n/** An element that leans toward the pointer, spring-driven. Renders a `<button>` by default. */\nexport const MagneticButton = createBehaviourComponent(magnetic, 'MagneticButton', 'button')\n\n/** A card that rotates in 3D toward the pointer, with a moving specular highlight. */\nexport const TiltCard = createBehaviourComponent(tilt, 'TiltCard')\n\n/** A wave expanding from the point of contact. Also fires on Enter and Space. */\nexport const Ripple = createBehaviourComponent(ripple, 'Ripple')\n\n/** Seamless infinite scrolling. Speed is in pixels per second, not a duration. */\nexport const Marquee = createBehaviourComponent(marquee, 'Marquee')\n\n/** Reveal content as it enters the viewport. Degrades to visible if JavaScript never runs. */\nexport const ScrollReveal = createBehaviourComponent(scrollReveal, 'ScrollReveal')\n\n/** Move an element at a different rate from the scroll. Disabled under reduced motion. */\nexport const Parallax = createBehaviourComponent(parallax, 'Parallax')\n","import { type PropType, type VNodeChild, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral'\nexport type AlertVariant = 'soft' | 'outline' | 'solid'\n\n/**\n * Built-in tone icons, as factories rather than pre-built vnodes.\n *\n * A vnode is meant to be mounted into exactly one place; reusing the same instance across renders\n * (Alert re-renders on every prop change, and several Alerts can share a tone) risks Vue's \"vnode\n * reused\" warning. A factory sidesteps it by building a fresh tree per render — the same reason\n * `Input`'s clear-button icon is built inline in its own render function rather than hoisted.\n */\nconst ICONS: Record<AlertTone, (() => VNodeChild) | null> = {\n info: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('circle', { cx: '10', cy: '10', r: '7.5' }),\n h('path', { d: 'M10 9v4.5', 'stroke-linecap': 'round' }),\n h('circle', { cx: '10', cy: '6.5', r: '0.9', fill: 'currentColor', stroke: 'none' }),\n ],\n ),\n success: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('circle', { cx: '10', cy: '10', r: '7.5' }),\n h('path', {\n d: 'M6.5 10.3l2.4 2.4 4.6-5.2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n warning: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('path', {\n d: 'M8.6 3.2L1.9 14.6a1.6 1.6 0 001.4 2.4h13.4a1.6 1.6 0 001.4-2.4L11.4 3.2a1.6 1.6 0 00-2.8 0z',\n 'stroke-linejoin': 'round',\n }),\n h('path', { d: 'M10 7.5v3.5', 'stroke-linecap': 'round' }),\n h('circle', { cx: '10', cy: '13.6', r: '0.9', fill: 'currentColor', stroke: 'none' }),\n ],\n ),\n danger: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('circle', { cx: '10', cy: '10', r: '7.5' }),\n h('path', { d: 'M7.5 7.5l5 5M12.5 7.5l-5 5', 'stroke-linecap': 'round' }),\n ],\n ),\n neutral: null,\n}\n\n/**\n * An inline message — the Vue counterpart of `@ansh-ui/react`'s `Alert`.\n *\n * The `role` follows the tone, because it decides whether a screen reader interrupts:\n * `role=\"alert\"` (assertive) for errors and warnings, which the user needs to know about *now*;\n * `role=\"status\"` (polite) for information and success, which can wait for a pause.\n *\n * Using `alert` for everything is the common mistake, and it makes a screen reader cut off whatever\n * it was saying to announce that a draft was saved.\n *\n * The tone is always carried by the icon and the text, never by colour alone.\n *\n * The React version's `children` prop (the message body) is this component's default slot — the\n * primary content, same split `Field` uses between its default slot (the control) and its\n * `label`/`description`/`error` props (short annotations). `title` and `actions` stay props for the\n * same reason those are props on `Field`.\n */\nexport const Alert = defineComponent({\n name: 'AnshAlert',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<AlertTone>, default: 'info' },\n title: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n /** Replace the default icon, or pass `null` to omit it. */\n icon: { type: [String, Object, Function] as PropType<SlotContent | null>, default: undefined },\n /** Show a dismiss button. */\n dismissible: { type: Boolean, default: false },\n /** Buttons or links under the message. */\n actions: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n variant: { type: String as PropType<AlertVariant>, default: 'soft' },\n },\n emits: ['dismiss'],\n setup(props, { attrs, emit, slots }) {\n const visible = ref(true)\n\n return () => {\n if (!visible.value) return null\n\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const urgent = props.tone === 'danger' || props.tone === 'warning'\n const resolvedIcon: VNodeChild =\n props.icon === undefined\n ? (ICONS[props.tone]?.() ?? null)\n : props.icon === null\n ? null\n : resolveSlotContent(props.icon)\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-alert',\n `ansh-alert--${props.tone}`,\n `ansh-alert--${props.variant}`,\n attrClass as string,\n ),\n role: urgent ? 'alert' : 'status',\n // Errors are assertive; everything else waits for a natural pause.\n 'aria-live': urgent ? 'assertive' : 'polite',\n ...restAttrs,\n },\n [\n resolvedIcon !== null\n ? h('span', { class: 'ansh-alert__icon', 'aria-hidden': 'true' }, [resolvedIcon])\n : null,\n\n h('div', { class: 'ansh-alert__body' }, [\n props.title\n ? h('p', { class: 'ansh-alert__title' }, [resolveSlotContent(props.title)])\n : null,\n slots.default ? h('div', { class: 'ansh-alert__message' }, slots.default()) : null,\n props.actions\n ? h('div', { class: 'ansh-alert__actions' }, [resolveSlotContent(props.actions)])\n : null,\n ]),\n\n props.dismissible\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-alert__close ansh-focusable',\n 'aria-label': 'Dismiss message',\n onClick: () => {\n visible.value = false\n emit('dismiss')\n },\n },\n [\n h(\n 'svg',\n { viewBox: '0 0 16 16', width: '12', height: '12', 'aria-hidden': 'true' },\n [\n h('path', {\n d: 'M4 4l8 8M12 4l-8 8',\n stroke: 'currentColor',\n 'stroke-width': '1.75',\n 'stroke-linecap': 'round',\n fill: 'none',\n }),\n ],\n ),\n ],\n )\n : null,\n ],\n )\n }\n },\n})\n\n/**\n * A full-width page-level message — the Vue counterpart of `@ansh-ui/react`'s `Banner`. Maintenance\n * windows, trial expiry, a failed payment.\n *\n * Distinct from `Alert` in placement and weight rather than in mechanics: a banner concerns the\n * whole application, an alert concerns the thing next to it. Implemented as a thin wrapper over\n * `Alert` (fixed `variant=\"solid\"`), forwarding every slot.\n */\nexport const Banner = defineComponent({\n name: 'AnshBanner',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<AlertTone>, default: 'info' },\n title: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n icon: { type: [String, Object, Function] as PropType<SlotContent | null>, default: undefined },\n dismissible: { type: Boolean, default: false },\n actions: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n /** Pin to the top of the viewport. */\n sticky: { type: Boolean, default: false },\n },\n emits: ['dismiss'],\n setup(props, { attrs, emit, slots }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n Alert,\n {\n tone: props.tone,\n title: props.title,\n icon: props.icon,\n dismissible: props.dismissible,\n actions: props.actions,\n variant: 'solid',\n class: cx('ansh-banner', props.sticky && 'ansh-banner--sticky', attrClass as string),\n onDismiss: () => emit('dismiss'),\n ...restAttrs,\n },\n slots,\n )\n }\n },\n})\n\n/**\n * A documentation callout — the Vue counterpart of `@ansh-ui/react`'s `Callout`.\n *\n * Deliberately **not** a live region. Prose asides are part of the page's content and are read in\n * document order; announcing them out of sequence would be disruptive rather than helpful, which is\n * the opposite of what `Alert` is for.\n */\nexport const Callout = defineComponent({\n name: 'AnshCallout',\n inheritAttrs: false,\n props: {\n /** Short label — \"Note\", \"Tip\", \"Warning\". */\n label: { type: String, default: undefined },\n tone: { type: String as PropType<AlertTone>, default: 'info' },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs, slots }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const resolvedIcon: VNodeChild =\n props.icon !== undefined ? resolveSlotContent(props.icon) : (ICONS[props.tone]?.() ?? null)\n\n return h(\n 'aside',\n {\n class: cx('ansh-callout', `ansh-callout--${props.tone}`, attrClass as string),\n ...restAttrs,\n },\n [\n h('span', { class: 'ansh-callout__icon', 'aria-hidden': 'true' }, [resolvedIcon]),\n h('div', { class: 'ansh-callout__body' }, [\n props.label ? h('p', { class: 'ansh-callout__label' }, props.label) : null,\n h('div', { class: 'ansh-callout__content' }, slots.default?.()),\n ]),\n ],\n )\n }\n },\n})\n","import type { App, Plugin } from 'vue'\nimport {\n type ReducedMotionMode,\n attachLifecycle,\n getTicker,\n setReducedMotionMode,\n} from '@ansh-ui/core'\nimport * as effectsAndBehaviours from './components/index'\nimport { AnimatedText, GradientText } from './components/text'\nimport { MotionConfig, ThemeProvider } from './components/providers'\nimport { Field, Fieldset, VisuallyHidden } from './components/form/field'\nimport { Input, NumberInput, Textarea } from './components/form/input'\nimport { Checkbox, ChoiceCard, Radio, RadioGroup, Switch } from './components/form/toggles'\nimport { OptionList } from './components/form/listbox'\nimport { Select } from './components/form/select'\nimport { Combobox } from './components/form/combobox'\nimport { RangeSlider, Slider } from './components/form/slider'\nimport { PinInput } from './components/form/pin-input'\nimport { TagsInput } from './components/form/tags-input'\nimport { Rating } from './components/form/rating'\nimport { Dropzone } from './components/form/dropzone'\nimport { ColorPicker } from './components/form/color-picker'\nimport { Calendar } from './components/form/calendar'\nimport { DatePicker, DateRangePicker } from './components/form/date-picker'\nimport { AlertDialog, Dialog, DialogFooter } from './components/overlay/dialog'\nimport { HoverCard, Popover, PopoverContent, PopoverTrigger } from './components/overlay/popover'\nimport { Tooltip, TooltipProvider } from './components/overlay/tooltip'\nimport { Drawer } from './components/overlay/drawer'\nimport { ContextMenu, DropdownMenu } from './components/overlay/menu'\nimport { DataTable, Pagination, Table } from './components/data/table'\nimport {\n Avatar,\n AvatarGroup,\n Badge,\n CodeBlock,\n DescriptionList,\n EmptyState,\n Kbd,\n Stat,\n Timeline,\n} from './components/data/display'\nimport { CircularProgress, Meter, Progress } from './components/data/progress'\nimport { Breadcrumbs, Stepper } from './components/navigation/breadcrumbs'\nimport { Sidebar, AppShell } from './components/navigation/sidebar'\nimport { NavigationMenu } from './components/navigation/nav-menu'\nimport { Tabs } from './components/navigation/tabs'\nimport { Alert, Banner, Callout } from './components/feedback/alert'\nimport { Accordion, Collapsible, DisclosureList } from './components/disclosure'\nimport {\n AspectRatio,\n Center,\n Container,\n Divider,\n Grid,\n GridItem,\n HStack,\n ScrollArea,\n Spacer,\n Stack,\n VStack,\n} from './components/layout/index'\nimport { Resizable } from './components/layout/resizable'\nimport { AnimatePresence, Draggable, Motion } from './components/motion'\n\n/**\n * The Vue plugin.\n *\n * Optional. Importing components directly is the tree-shakeable path and what most applications\n * should do; this exists for two cases where global registration is genuinely better:\n *\n * 1. **Prototyping and playgrounds**, where per-file imports are friction.\n * 2. **Applications with runtime-compiled templates** (a CMS, a low-code builder), where the\n * component name is a string and cannot be statically imported at all.\n *\n * It also provides the single place to apply app-wide motion configuration, which is the React\n * package's `<MotionConfig>` equivalent.\n *\n * ## Why the application components are imported by name rather than `import * as`\n *\n * The effects and behaviours (`./components/index`) get the blanket `import * as` treatment because\n * that module exports *only* components — every named export is safe to hand to `app.component()`.\n * The application-layer modules don't have that property: `form/listbox.ts` exports `OptionList` (a\n * component) alongside `filterOptions`, `firstEnabled`, `stepActive` and `useTypeahead` (plain\n * functions), and several others mix a component with its `useXxx` composable or context accessor\n * the same way. A blanket spread would hand those functions to `app.component()` too, which either\n * throws or silently registers something that isn't a component — so every application component\n * is imported and listed explicitly here instead.\n */\n\nexport interface AnshPluginOptions {\n /**\n * Prefix for globally registered component names. Default `'Ansh'`, giving\n * `<AnshAuroraBackground>`. Pass `''` for the bare names.\n */\n prefix?: string\n /** Register components globally. Default `true`. */\n registerComponents?: boolean\n /**\n * Application-level reduced-motion override.\n *\n * `'always'` is genuinely useful in production as the backing for an in-app \"reduce motion\"\n * setting — many users who want calmer interfaces have never found the OS toggle.\n */\n reducedMotion?: ReducedMotionMode\n /** Global playback rate. `0.5` is slow motion across every animation. Default `1`. */\n timeScale?: number\n /** Pin adaptive quality. Omit to let the frame budget decide, which is almost always right. */\n quality?: number\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.\n */\n pauseWhenHidden?: boolean\n /** Also pause when the window loses focus. Default `false`. */\n pauseWhenBlurred?: boolean\n /** Reduce quality on low battery where the platform exposes it. Default `true`. */\n respectBattery?: boolean\n}\n\nconst applicationComponents: Record<string, unknown> = {\n MotionConfig,\n ThemeProvider,\n Field,\n Fieldset,\n VisuallyHidden,\n Input,\n NumberInput,\n Textarea,\n Checkbox,\n ChoiceCard,\n Radio,\n RadioGroup,\n Switch,\n OptionList,\n Select,\n Combobox,\n RangeSlider,\n Slider,\n PinInput,\n TagsInput,\n Rating,\n Dropzone,\n ColorPicker,\n Calendar,\n DatePicker,\n DateRangePicker,\n AlertDialog,\n Dialog,\n DialogFooter,\n HoverCard,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tooltip,\n TooltipProvider,\n Drawer,\n ContextMenu,\n DropdownMenu,\n DataTable,\n Pagination,\n Table,\n Avatar,\n AvatarGroup,\n Badge,\n CodeBlock,\n DescriptionList,\n EmptyState,\n Kbd,\n Stat,\n Timeline,\n CircularProgress,\n Meter,\n Progress,\n Breadcrumbs,\n Stepper,\n Sidebar,\n AppShell,\n NavigationMenu,\n Tabs,\n Alert,\n Banner,\n Callout,\n Accordion,\n Collapsible,\n DisclosureList,\n AspectRatio,\n Center,\n Container,\n Divider,\n Grid,\n GridItem,\n HStack,\n ScrollArea,\n Spacer,\n Stack,\n VStack,\n Resizable,\n AnimatePresence,\n Draggable,\n Motion,\n}\n\nexport const AnshPlugin: Plugin<AnshPluginOptions[]> = {\n install(app: App, options: AnshPluginOptions = {}) {\n const {\n prefix = 'Ansh',\n registerComponents = true,\n reducedMotion,\n timeScale,\n quality,\n pauseWhenHidden = true,\n pauseWhenBlurred = false,\n respectBattery = true,\n } = options\n\n if (registerComponents) {\n const all: Record<string, unknown> = {\n ...effectsAndBehaviours,\n GradientText,\n AnimatedText,\n ...applicationComponents,\n }\n for (const [name, component] of Object.entries(all)) {\n app.component(`${prefix}${name}`, component as never)\n }\n }\n\n if (reducedMotion) setReducedMotionMode(reducedMotion)\n\n const ticker = getTicker()\n if (timeScale !== undefined) ticker.timeScale = timeScale\n if (quality !== undefined) ticker.lockQuality(quality)\n\n // Guarded for SSR: `attachLifecycle` is a no-op without a document, but checking here makes the\n // intent explicit and avoids constructing the options object on the server.\n if (typeof document !== 'undefined') {\n const detach = attachLifecycle(ticker, {\n pauseWhenHidden,\n pauseWhenBlurred,\n respectBattery,\n })\n // Released when the app unmounts. Matters in tests and in micro-frontend hosts that mount and\n // unmount several Vue apps over a page's lifetime.\n const originalUnmount = app.unmount.bind(app)\n app.unmount = () => {\n detach()\n originalUnmount()\n }\n }\n },\n}\n","/**\n * @ansh-ui/vue — Ansh for Vue 3 and Nuxt.\n *\n * Every component is a thin binding over `@ansh-ui/core`. The engine owns all behaviour; this\n * package owns the Vue lifecycle, reactivity boundaries and SSR correctness.\n *\n * ```vue\n * <script setup>\n * import { AuroraBackground, AnimatedText, MagneticButton } from '@ansh-ui/vue'\n * </script>\n *\n * <template>\n * <AuroraBackground :colors=\"['#0275f4', '#9f0550']\" class=\"hero\">\n * <AnimatedText text=\"Motion, refined.\" by=\"chars\" from=\"center\" />\n * <MagneticButton :strength=\"16\">Get started</MagneticButton>\n * </AuroraBackground>\n * </template>\n * ```\n *\n * For Nuxt, install `@ansh-ui/nuxt` instead — it registers every component for auto-import and\n * handles the SSR transpile.\n *\n * ## Designed UI components\n *\n * Everything under \"Forms\" / \"Overlays\" / \"Data\" / \"Navigation\" / \"Feedback\" / \"Layout\" below needs\n * the stylesheet:\n *\n * ```ts\n * import '@ansh-ui/tokens/ansh.css'\n * import '@ansh-ui/vue/styles.css'\n * ```\n */\n\n// --- Composables ---\nexport * from './composables/use-motion'\nexport * from './composables/use-observers'\n\n// --- Factories ---\n// Exported so consumers can wrap their own effects and behaviours with the same guarantees the\n// built-in components get. This is the supported extension path.\nexport {\n createEffectComponent,\n type VueEffectComponent,\n type EffectComponentBaseProps,\n} from './factory/create-effect-component'\nexport {\n createBehaviourComponent,\n useBehaviour,\n type VueBehaviourComponent,\n type BehaviourComponentBaseProps,\n} from './factory/create-behaviour-component'\n\n// --- Effect & behaviour components ---\nexport * from './components/index'\nexport { GradientText, AnimatedText } from './components/text'\nexport {\n MotionConfig,\n type MotionConfigValue,\n useMotionConfig,\n ThemeProvider,\n type ThemeSetting,\n type ThemeContextValue,\n useTheme,\n themeScript,\n} from './components/providers'\n\n/**\n * --- Headless primitives ---\n *\n * The pieces every designed component below is built from. Exported because an application that\n * needs a component this library doesn't have should be able to build it with the same guarantees\n * rather than starting from scratch.\n */\nexport {\n cx,\n useId,\n resolveSlotContent,\n type ReadonlyRef,\n type SlotContent,\n} from './primitives/utils'\nexport { useControllableState } from './primitives/use-controllable-state'\nexport {\n getTabbable,\n useAutoFocus,\n useFocusRestore,\n useFocusTrap,\n useRovingFocus,\n} from './primitives/focus'\nexport {\n getLayerStack,\n useDismiss,\n useScrollLock,\n type DismissOptions,\n} from './primitives/use-dismiss'\nexport { usePresence } from './primitives/presence'\nexport {\n computePosition,\n type Align,\n type Placement,\n type PositionOptions,\n type PositionResult,\n type Rect,\n type Side,\n} from './primitives/position'\nexport {\n useAnchoredPosition,\n type AnchoredPosition,\n type AnchoredPositionOptions,\n} from './primitives/use-anchored-position'\n\n// --- Layout ---\nexport * from './components/layout/index'\nexport * from './components/layout/resizable'\n\n// --- Forms ---\nexport * from './components/form/field'\nexport * from './components/form/input'\nexport * from './components/form/toggles'\nexport * from './components/form/listbox'\nexport * from './components/form/select'\nexport * from './components/form/combobox'\nexport * from './components/form/slider'\nexport * from './components/form/pin-input'\nexport * from './components/form/tags-input'\nexport * from './components/form/rating'\nexport * from './components/form/dropzone'\nexport * from './components/form/color-picker'\nexport * from './components/form/calendar'\nexport * from './components/form/date-picker'\n\n// --- Overlays ---\nexport * from './components/overlay/popover'\nexport * from './components/overlay/tooltip'\nexport * from './components/overlay/dialog'\nexport * from './components/overlay/drawer'\nexport * from './components/overlay/menu'\n\n// --- Data display ---\nexport * from './components/data/table'\nexport * from './components/data/display'\nexport * from './components/data/progress'\n\n// --- Navigation ---\nexport * from './components/navigation/tabs'\nexport * from './components/navigation/breadcrumbs'\nexport * from './components/navigation/sidebar'\nexport * from './components/navigation/nav-menu'\n\n// --- Feedback ---\nexport * from './components/feedback/alert'\n\n// --- Disclosure ---\nexport * from './components/disclosure'\n\n// --- Declarative motion ---\nexport {\n AnimatePresence,\n Draggable,\n Motion,\n type AnimatePresenceProps,\n type DraggableProps,\n type MotionTransition,\n type MotionValues,\n} from './components/motion'\n\n// --- Plugin ---\nexport { AnshPlugin, type AnshPluginOptions } from './plugin'\n\n/**\n * Re-exported engine surface.\n *\n * A narrow, curated set — the pieces a Vue author reaches for directly. Deliberately not\n * `export * from '@ansh-ui/core'`, which would put 200 symbols into this package's autocomplete and\n * blur which layer an import belongs to. For anything else, import from `@ansh-ui/core`.\n */\nexport {\n // Motion\n animate,\n createTimeline,\n motionValue,\n MotionValue,\n stagger,\n springs,\n // Colour\n createGradient,\n createScale,\n generatePalette,\n mixColors,\n palettes,\n parseColor,\n toHex,\n toOklchString,\n checkContrast,\n ensureContrast,\n pickReadable,\n // Easing\n easings,\n cubicBezier,\n registerEasing,\n signature as signatureEasings,\n // Noise\n createNoise,\n // Kernel\n getTicker,\n // Accessibility\n prefersReducedMotion,\n setReducedMotionMode,\n // Registry — the seam for Pro-tier and plugin registration\n getRegistry,\n} from '@ansh-ui/core'\n\n/**\n * `Timeline` is re-exported as `MotionTimeline`.\n *\n * The engine's `Timeline` (the animation sequencer) and this package's `Timeline` (the activity\n * feed component, from `components/data/display`) are unrelated things that happen to share a word.\n * Exporting both unaliased makes the name ambiguous and fails the build outright — unlike\n * `@ansh-ui/react`, where `export *` silently drops the losing one instead. Aliased here for the\n * same reason it's aliased there: consistency between the two packages' public APIs.\n */\nexport type { Timeline as MotionTimeline } from '@ansh-ui/core'\n\nexport type {\n AnimationControls,\n AnimationOptions,\n BaseEffectOptions,\n ColorInput,\n ColorSpace,\n EasingInput,\n EffectDefinition,\n FrameState,\n Gradient,\n PaletteName,\n PointerState,\n ReducedMotionStrategy,\n Rgb,\n SpringOptions,\n StaggerFrom,\n StaggerOptions,\n} from '@ansh-ui/core'\n\nexport const VERSION = '0.1.0'\n"]}
1
+ {"version":3,"sources":["../src/factory/create-effect-component.ts","../src/factory/create-behaviour-component.ts","../src/components/index.ts","../src/components/backgrounds.ts","../src/components/interaction.ts","../src/components/feedback/alert.ts","../src/plugin.ts","../src/index.ts"],"names":["defineComponent","pascal","ref","onMounted","watch","onBeforeUnmount","h"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,IAAM,UAAA,GAA4B;AAAA,EAChC,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,aAAA,GAA+B;AAAA,EACnC,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAA;AAYO,SAAS,qBAAA,CACd,YACA,IAAA,EAC6B;AAC7B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAUlD,EAAA,MAAM,QAAyE,EAAC;AAChF,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,EAAE,IAAA,EAAM,IAAA,EAAsC,SAAS,MAAA,EAAU;AAAA,EAChF;AACA,EAAA,KAAA,CAAM,EAAA,GAAK,EAAE,IAAA,EAAM,MAAA,EAAwC,SAAS,MAAA,EAAU;AAE9E,EAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,IAChC,MAAM,IAAA,IAAQ,CAAA,IAAA,EAAO,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA;AAAA;AAAA;AAAA,IAG5C,YAAA,EAAc,KAAA;AAAA,IACd,KAAA;AAAA,IAEA,MAAM,cAAA,EAAgB,EAAE,KAAA,EAAO,KAAA,EAAO,QAAO,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAO,IAAwB,IAAI,CAAA;AACzC,MAAA,IAAI,MAAA,GAA8B,IAAA;AAGlC,MAAA,MAAM,UAAU,MAAwB;AACtC,QAAA,MAAM,MAA+B,EAAC;AACtC,QAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,UAAA,MAAM,KAAA,GAAS,eAA2C,GAAG,CAAA;AAC7D,UAAA,IAAI,KAAA,KAAU,MAAA,EAAW,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,QACtC;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAEA,MAAA,SAAA,CAAU,MAAM;AACd,QAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACjB,QAAA,MAAA,GAAS,WAAA,CAAY,UAAA,EAAY,IAAA,CAAK,KAAA,EAAO,SAAS,CAAA;AAAA,MACxD,CAAC,CAAA;AASD,MAAA,KAAA,CAAM,OAAA,EAAS,CAAC,IAAA,KAAS,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA;AAE5E,MAAA,eAAA,CAAgB,MAAM;AACpB,QAAA,MAAA,EAAQ,OAAA,EAAQ;AAChB,QAAA,MAAA,GAAS,IAAA;AAAA,MACX,CAAC,CAAA;AAID,MAAA,MAAA,CAAO;AAAA,QACL,KAAA,EAAO,MAAM,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC3B,MAAA,EAAQ,MAAM,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC7B,UAAA,EAAY,MAAM,MAAA,EAAQ,UAAA,EAAW;AAAA,QACrC,IAAI,MAAA,GAAS;AACX,UAAA,OAAO,QAAQ,MAAA,IAAU,IAAA;AAAA,QAC3B;AAAA,OACD,CAAA;AAED,MAAA,OAAO,MAAM;AACX,QAAA,MAAM,GAAA,GAAO,eAAmC,EAAA,IAAM,KAAA;AACtD,QAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,GAAG,MAAK,GAAI,KAAA;AAE7C,QAAA,OAAO,CAAA;AAAA,UACL,GAAA;AAAA,UACA;AAAA,YACE,GAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO,SAAA;AAAA;AAAA,YAEP,KAAA,EAAO,CAAC,UAAA,EAAY,KAAK,CAAA;AAAA,YACzB,GAAG;AAAA,WACL;AAAA,UACA,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,aAAA,EAAc,EAAG,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA,GAAI;AAAA,SAC1E;AAAA,MACF,CAAA;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,OAAO,KAAA,EAAuB;AACrC,EAAA,OAAO,KAAA,CAAM,QAAQ,eAAA,EAAiB,CAAC,GAAG,EAAA,EAAI,MAAA,KAAmB,MAAA,CAAO,WAAA,EAAa,CAAA;AACvF;ACrIO,SAAS,wBAAA,CAId,UAAA,EACA,IAAA,EACA,UAAA,GAAa,KAAA,EACmB;AAChC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAElD,EAAA,MAAM,QAAyE,EAAC;AAChF,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,EAAE,IAAA,EAAM,IAAA,EAAsC,SAAS,MAAA,EAAU;AAAA,EAChF;AACA,EAAA,KAAA,CAAM,EAAA,GAAK,EAAE,IAAA,EAAM,MAAA,EAAwC,SAAS,MAAA,EAAU;AAE9E,EAAA,MAAM,YAAYA,eAAAA,CAAgB;AAAA,IAChC,MAAM,IAAA,IAAQ,CAAA,IAAA,EAAOC,OAAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA;AAAA,IAC5C,YAAA,EAAc,KAAA;AAAA,IACd,KAAA;AAAA,IAEA,MAAM,cAAA,EAAgB,EAAE,KAAA,EAAO,KAAA,EAAO,QAAO,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAOC,IAAe,IAAI,CAAA;AAChC,MAAA,IAAI,MAAA,GAA0C,IAAA;AAE9C,MAAA,MAAM,UAAU,MAAwB;AACtC,QAAA,MAAM,MAA+B,EAAC;AACtC,QAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,UAAA,MAAM,KAAA,GAAS,eAA2C,GAAG,CAAA;AAC7D,UAAA,IAAI,KAAA,KAAU,MAAA,EAAW,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,QACtC;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAEA,MAAAC,UAAU,MAAM;AACd,QAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACjB,QAAA,MAAA,GAAS,cAAA,CAAe,UAAA,EAAY,IAAA,CAAK,KAAA,EAAO,SAAS,CAAA;AAAA,MAC3D,CAAC,CAAA;AAED,MAAAC,KAAAA,CAAM,OAAA,EAAS,CAAC,IAAA,KAAS,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AAE5E,MAAAC,gBAAgB,MAAM;AACpB,QAAA,MAAA,EAAQ,OAAA,EAAQ;AAChB,QAAA,MAAA,GAAS,IAAA;AAAA,MACX,CAAC,CAAA;AAED,MAAA,MAAA,CAAO;AAAA,QACL,IAAI,OAAA,GAAU;AACZ,UAAA,OAAO,IAAA,CAAK,KAAA;AAAA,QACd;AAAA,OACD,CAAA;AAED,MAAA,OAAO,MAAM;AACX,QAAA,MAAM,GAAA,GAAO,eAAmC,EAAA,IAAM,UAAA;AACtD,QAAA,OAAOC,CAAAA,CAAE,GAAA,EAAK,EAAE,GAAA,EAAK,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,KAAA,CAAM,OAAA,IAAW,CAAA;AAAA,MAC1D,CAAA;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,OAAO,SAAA;AACT;AAmBO,SAAS,YAAA,CACd,MAAA,EACA,UAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,MAAA,GAA0C,IAAA;AAE9C,EAAA,MAAM,OAAA,GAAU,MACd,OAAO,OAAA,KAAY,aAAa,OAAA,EAAQ,GAAM,WAAW,EAAC;AAE5D,EAAAF,KAAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,KAAY;AACX,MAAA,MAAA,EAAQ,OAAA,EAAQ;AAChB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,MAAA,GAAS,cAAA,CAAe,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAIA,EAAAA,KAAAA,CAAM,OAAA,EAAS,CAAC,IAAA,KAAS,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AAE5E,EAAA,IAAI,iBAAgB,EAAG;AACrB,IAAA,cAAA,CAAe,MAAM;AACnB,MAAA,MAAA,EAAQ,OAAA,EAAQ;AAChB,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACH;AACF;AAEA,SAASH,QAAO,KAAA,EAAuB;AACrC,EAAA,OAAO,KAAA,CAAM,QAAQ,eAAA,EAAiB,CAAC,GAAG,EAAA,EAAI,MAAA,KAAmB,MAAA,CAAO,WAAA,EAAa,CAAA;AACvF;;;ACtJA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,KAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AC8CO,IAAM,gBAAA,GAAmB,qBAAA,CAAsB,MAAA,EAAQ,kBAAkB;AAGzE,IAAM,YAAA,GAAe,qBAAA,CAAsB,YAAA,EAAc,cAAc;AAGvE,IAAM,gBAAA,GAAmB,qBAAA,CAAsB,gBAAA,EAAkB,kBAAkB;AAGnF,IAAM,aAAA,GAAgB,qBAAA,CAAsB,aAAA,EAAe,eAAe;AAG1E,IAAM,aAAA,GAAgB,qBAAA,CAAsB,aAAA,EAAe,eAAe;AAG1E,IAAM,YAAA,GAAe,qBAAA,CAAsB,OAAA,EAAS,cAAc;AAGlE,IAAM,IAAA,GAAO,qBAAA,CAAsB,IAAA,EAAM,MAAM;AAG/C,IAAM,IAAA,GAAO,qBAAA,CAAsB,IAAA,EAAM,MAAM;AAG/C,IAAM,SAAA,GAAY,qBAAA,CAAsB,SAAA,EAAW,WAAW;AAG9D,IAAM,KAAA,GAAQ,qBAAA,CAAsB,KAAA,EAAO,OAAO;AAGlD,IAAM,UAAA,GAAa,qBAAA,CAAsB,IAAA,EAAM,YAAY;AAG3D,IAAM,UAAA,GAAa,qBAAA,CAAsB,UAAA,EAAY,YAAY;AAGjE,IAAM,SAAA,GAAY,qBAAA,CAAsB,SAAA,EAAW,WAAW;AAG9D,IAAM,SAAA,GAAY,qBAAA,CAAsB,SAAA,EAAW,WAAW;AAG9D,IAAM,KAAA,GAAQ,qBAAA,CAAsB,KAAA,EAAO,OAAO;AAGlD,IAAM,eAAA,GAAkB,qBAAA,CAAsB,eAAA,EAAiB,iBAAiB;AAGhF,IAAM,gBAAA,GAAmB,qBAAA,CAAsB,gBAAA,EAAkB,kBAAkB;AAGnF,IAAM,KAAA,GAAQ,qBAAA,CAAsB,KAAA,EAAO,OAAO;AAGlD,IAAM,gBAAA,GAAmB,qBAAA,CAAsB,gBAAA,EAAkB,kBAAkB;AAGnF,IAAM,KAAA,GAAQ,qBAAA,CAAsB,KAAA,EAAO,OAAO;ACzFlD,IAAM,cAAA,GAAiB,wBAAA,CAAyB,QAAA,EAAU,gBAAA,EAAkB,QAAQ;AAGpF,IAAM,QAAA,GAAW,wBAAA,CAAyB,IAAA,EAAM,UAAU;AAG1D,IAAM,MAAA,GAAS,wBAAA,CAAyB,MAAA,EAAQ,QAAQ;AAGxD,IAAM,OAAA,GAAU,wBAAA,CAAyB,OAAA,EAAS,SAAS;AAG3D,IAAM,YAAA,GAAe,wBAAA,CAAyB,YAAA,EAAc,cAAc;AAG1E,IAAM,QAAA,GAAW,wBAAA,CAAyB,QAAA,EAAU,UAAU;AAU9D,IAAM,YAAA,GAAe,wBAAA,CAAyB,YAAA,EAAc,cAAc;ACzBjF,IAAM,KAAA,GAAsD;AAAA,EAC1D,MAAM,MACJK,CAAAA;AAAA,IACE,KAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,cAAA;AAAA,MACR,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,MACEA,CAAAA,CAAE,UAAU,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA;AAAA,MAC5CA,EAAE,MAAA,EAAQ,EAAE,GAAG,WAAA,EAAa,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACvDA,CAAAA,CAAE,QAAA,EAAU,EAAE,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,QAAQ;AAAA;AACrF,GACF;AAAA,EACF,SAAS,MACPA,CAAAA;AAAA,IACE,KAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,cAAA;AAAA,MACR,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,MACEA,CAAAA,CAAE,UAAU,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA;AAAA,MAC5CA,EAAE,MAAA,EAAQ;AAAA,QACR,CAAA,EAAG,2BAAA;AAAA,QACH,gBAAA,EAAkB,OAAA;AAAA,QAClB,iBAAA,EAAmB;AAAA,OACpB;AAAA;AACH,GACF;AAAA,EACF,SAAS,MACPA,CAAAA;AAAA,IACE,KAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,cAAA;AAAA,MACR,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,MACEA,EAAE,MAAA,EAAQ;AAAA,QACR,CAAA,EAAG,6FAAA;AAAA,QACH,iBAAA,EAAmB;AAAA,OACpB,CAAA;AAAA,MACDA,EAAE,MAAA,EAAQ,EAAE,GAAG,aAAA,EAAe,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzDA,CAAAA,CAAE,QAAA,EAAU,EAAE,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,QAAQ;AAAA;AACtF,GACF;AAAA,EACF,QAAQ,MACNA,CAAAA;AAAA,IACE,KAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,cAAA;AAAA,MACR,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,MACEA,CAAAA,CAAE,UAAU,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA;AAAA,MAC5CA,EAAE,MAAA,EAAQ,EAAE,GAAG,4BAAA,EAA8B,gBAAA,EAAkB,SAAS;AAAA;AAC1E,GACF;AAAA,EACF,OAAA,EAAS;AACX,CAAA;AAmBO,IAAM,QAAQN,eAAAA,CAAgB;AAAA,EACnC,IAAA,EAAM,WAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,MAAA,EAAO;AAAA,IAC7D,KAAA,EAAO,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA,EAAU;AAAA;AAAA,IAEvF,IAAA,EAAM,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAAmC,OAAA,EAAS,MAAA,EAAU;AAAA;AAAA,IAE7F,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAE7C,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA,EAAU;AAAA,IACzF,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAkC,SAAS,MAAA;AAAO,GACrE;AAAA,EACA,KAAA,EAAO,CAAC,SAAS,CAAA;AAAA,EACjB,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAM,EAAG;AACnC,IAAA,MAAM,OAAA,GAAUE,IAAI,IAAI,CAAA;AAExB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAA;AAE3B,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAC3C,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,MAAM,IAAA,KAAS,SAAA;AACzD,MAAA,MAAM,eACJ,KAAA,CAAM,IAAA,KAAS,MAAA,GACV,KAAA,CAAM,MAAM,IAAI,CAAA,IAAI,IAAK,IAAA,GAC1B,MAAM,IAAA,KAAS,IAAA,GACb,IAAA,GACA,kBAAA,CAAmB,MAAM,IAAI,CAAA;AAErC,MAAA,OAAOI,CAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,KAAA,EAAO,EAAA;AAAA,YACL,YAAA;AAAA,YACA,CAAA,YAAA,EAAe,MAAM,IAAI,CAAA,CAAA;AAAA,YACzB,CAAA,YAAA,EAAe,MAAM,OAAO,CAAA,CAAA;AAAA,YAC5B;AAAA,WACF;AAAA,UACA,IAAA,EAAM,SAAS,OAAA,GAAU,QAAA;AAAA;AAAA,UAEzB,WAAA,EAAa,SAAS,WAAA,GAAc,QAAA;AAAA,UACpC,GAAG;AAAA,SACL;AAAA,QACA;AAAA,UACE,YAAA,KAAiB,IAAA,GACbA,CAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,kBAAA,EAAoB,aAAA,EAAe,MAAA,EAAO,EAAG,CAAC,YAAY,CAAC,CAAA,GAC9E,IAAA;AAAA,UAEJA,CAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,oBAAmB,EAAG;AAAA,YACtC,KAAA,CAAM,KAAA,GACFA,CAAAA,CAAE,GAAA,EAAK,EAAE,KAAA,EAAO,mBAAA,EAAoB,EAAG,CAAC,kBAAA,CAAmB,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA,GACxE,IAAA;AAAA,YACJ,KAAA,CAAM,OAAA,GAAUA,CAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,qBAAA,EAAsB,EAAG,KAAA,CAAM,OAAA,EAAS,CAAA,GAAI,IAAA;AAAA,YAC9E,KAAA,CAAM,OAAA,GACFA,CAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,qBAAA,EAAsB,EAAG,CAAC,kBAAA,CAAmB,KAAA,CAAM,OAAO,CAAC,CAAC,CAAA,GAC9E;AAAA,WACL,CAAA;AAAA,UAED,MAAM,WAAA,GACFA,CAAAA;AAAA,YACE,QAAA;AAAA,YACA;AAAA,cACE,IAAA,EAAM,QAAA;AAAA,cACN,KAAA,EAAO,kCAAA;AAAA,cACP,YAAA,EAAc,iBAAA;AAAA,cACd,SAAS,MAAM;AACb,gBAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAChB,gBAAA,IAAA,CAAK,SAAS,CAAA;AAAA,cAChB;AAAA,aACF;AAAA,YACA;AAAA,cACEA,CAAAA;AAAA,gBACE,KAAA;AAAA,gBACA,EAAE,SAAS,WAAA,EAAa,KAAA,EAAO,MAAM,MAAA,EAAQ,IAAA,EAAM,eAAe,MAAA,EAAO;AAAA,gBACzE;AAAA,kBACEA,EAAE,MAAA,EAAQ;AAAA,oBACR,CAAA,EAAG,oBAAA;AAAA,oBACH,MAAA,EAAQ,cAAA;AAAA,oBACR,cAAA,EAAgB,MAAA;AAAA,oBAChB,gBAAA,EAAkB,OAAA;AAAA,oBAClB,IAAA,EAAM;AAAA,mBACP;AAAA;AACH;AACF;AACF,WACF,GACA;AAAA;AACN,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;AAUM,IAAM,SAASN,eAAAA,CAAgB;AAAA,EACpC,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,MAAA,EAAO;AAAA,IAC7D,KAAA,EAAO,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA,EAAU;AAAA,IACvF,IAAA,EAAM,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAAmC,OAAA,EAAS,MAAA,EAAU;AAAA,IAC7F,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAC7C,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA,EAAU;AAAA;AAAA,IAEzF,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC1C;AAAA,EACA,KAAA,EAAO,CAAC,SAAS,CAAA;AAAA,EACjB,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAM,EAAG;AACnC,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAE3C,MAAA,OAAOM,CAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,OAAA,EAAS,OAAA;AAAA,UACT,OAAO,EAAA,CAAG,aAAA,EAAe,KAAA,CAAM,MAAA,IAAU,uBAAuB,SAAmB,CAAA;AAAA,UACnF,SAAA,EAAW,MAAM,IAAA,CAAK,SAAS,CAAA;AAAA,UAC/B,GAAG;AAAA,SACL;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;AASM,IAAM,UAAUN,eAAAA,CAAgB;AAAA,EACrC,IAAA,EAAM,aAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA,IAC1C,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,MAAA,EAAO;AAAA,IAC7D,IAAA,EAAM,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA;AAAU,GACxF;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAC3C,MAAA,MAAM,YAAA,GACJ,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,GAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,IAAI,IAAK,IAAA;AAExF,MAAA,OAAOM,CAAAA;AAAA,QACL,OAAA;AAAA,QACA;AAAA,UACE,OAAO,EAAA,CAAG,cAAA,EAAgB,iBAAiB,KAAA,CAAM,IAAI,IAAI,SAAmB,CAAA;AAAA,UAC5E,GAAG;AAAA,SACL;AAAA,QACA;AAAA,UACEA,CAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA,EAAsB,eAAe,MAAA,EAAO,EAAG,CAAC,YAAY,CAAC,CAAA;AAAA,UAChFA,CAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,sBAAqB,EAAG;AAAA,YACxC,KAAA,CAAM,KAAA,GAAQA,CAAAA,CAAE,GAAA,EAAK,EAAE,OAAO,qBAAA,EAAsB,EAAG,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,YACtEA,CAAAA,CAAE,OAAO,EAAE,KAAA,EAAO,yBAAwB,EAAG,KAAA,CAAM,WAAW;AAAA,WAC/D;AAAA;AACH,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;ACnKD,IAAM,qBAAA,GAAiD;AAAA,EACrD,YAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,UAAA,GAA0C;AAAA,EACrD,OAAA,CAAQ,GAAA,EAAU,OAAA,GAA6B,EAAC,EAAG;AACjD,IAAA,MAAM;AAAA,MACJ,MAAA,GAAS,MAAA;AAAA,MACT,kBAAA,GAAqB,IAAA;AAAA,MACrB,aAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAA,GAAkB,IAAA;AAAA,MAClB,gBAAA,GAAmB,KAAA;AAAA,MACnB,cAAA,GAAiB;AAAA,KACnB,GAAI,OAAA;AAEJ,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,MAAM,GAAA,GAA+B;AAAA,QACnC,GAAG,kBAAA;AAAA,QACH,YAAA;AAAA,QACA,YAAA;AAAA,QACA,GAAG;AAAA,OACL;AACA,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACnD,QAAA,GAAA,CAAI,UAAU,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,IAAI,SAAkB,CAAA;AAAA,MACtD;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,uBAAoC,aAAa,CAAA;AAErD,IAAA,MAAM,SAAS,SAAA,EAAU;AACzB,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,MAAA,CAAO,SAAA,GAAY,SAAA;AAChD,IAAA,IAAI,OAAA,KAAY,MAAA,EAAW,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AAIrD,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,MAAA,GAAS,gBAAgB,MAAA,EAAQ;AAAA,QACrC,eAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACD,CAAA;AAGD,MAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAC5C,MAAA,GAAA,CAAI,UAAU,MAAM;AAClB,QAAA,MAAA,EAAO;AACP,QAAA,eAAA,EAAgB;AAAA,MAClB,CAAA;AAAA,IACF;AAAA,EACF;AACF;ACVO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["import {\n type CSSProperties,\n type DefineComponent,\n type PropType,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport {\n type BaseEffectOptions,\n type EffectDefinition,\n type EffectHandle,\n mountEffect,\n} from '@ansh-ui/core'\n\n/**\n * Turn an {@link EffectDefinition} into a Vue 3 component.\n *\n * The Vue counterpart of the React factory, and the reason both frameworks are supported without\n * duplicating a single line of visual logic. All behaviour lives in `@ansh-ui/core`; this file owns\n * only the Vue lifecycle.\n *\n * ```ts\n * export const AuroraBackground = createEffectComponent(aurora, 'AuroraBackground')\n * ```\n *\n * What each generated component provides:\n *\n * - **SSR safety.** `mountEffect` runs in `onMounted`, which never executes on the server, so the\n * server-rendered markup is the host element and its slot content — identical to the first\n * client render, so hydration is clean.\n * - **Live prop updates.** A deep watcher on the resolved options calls `handle.update()`, which\n * live-updates what it can and remounts only structural changes.\n * - **Attribute fall-through** via `inheritAttrs: false` plus explicit binding, so `class`,\n * `style` and listeners land on the host element and merge with our own positioning styles\n * rather than replacing them.\n * - **Complete teardown** in `onBeforeUnmount`.\n */\n\n/** Props every generated effect component accepts beyond its own options. */\nexport interface EffectComponentBaseProps {\n /** Tag or component to render as the host. Default `'div'`. */\n as?: string\n}\n\n/**\n * `isolation: isolate` creates a stacking context, which keeps the canvas' blend modes from\n * compositing against the page behind the component. Without it an effect using `lighter` bleeds\n * into whatever sits underneath the section — rarely intended and very hard to diagnose.\n */\nconst HOST_STYLE: CSSProperties = {\n position: 'relative',\n isolation: 'isolate',\n overflow: 'hidden',\n}\n\nconst CONTENT_STYLE: CSSProperties = {\n position: 'relative',\n zIndex: 1,\n}\n\n/**\n * The public type of a generated component.\n *\n * `DefineComponent<Props>` gives full prop autocompletion and type-checking inside SFC templates,\n * which is the whole point of generating a real component rather than exposing a directive.\n */\nexport type VueEffectComponent<Options extends BaseEffectOptions> = DefineComponent<\n Options & EffectComponentBaseProps\n>\n\nexport function createEffectComponent<Options extends BaseEffectOptions>(\n definition: EffectDefinition<Options>,\n name?: string,\n): VueEffectComponent<Options> {\n const optionKeys = Object.keys(definition.defaults) as Array<keyof Options & string>\n\n /**\n * Runtime prop declarations.\n *\n * Every option is declared with `default: undefined` rather than the effect's actual default.\n * That is deliberate: `mountEffect` strips `undefined` and applies the definition's defaults\n * itself, so the defaults live in exactly one place. Duplicating them here would mean two\n * sources of truth that drift the moment someone changes one.\n */\n const props: Record<string, { type: PropType<unknown>; default: undefined }> = {}\n for (const key of optionKeys) {\n props[key] = { type: null as unknown as PropType<unknown>, default: undefined }\n }\n props.as = { type: String as unknown as PropType<unknown>, default: undefined }\n\n const component = defineComponent({\n name: name ?? `Ansh${pascal(definition.name)}`,\n // Attributes are bound explicitly below so our positioning styles merge with the author's\n // rather than being overwritten by automatic inheritance.\n inheritAttrs: false,\n props,\n\n setup(componentProps, { slots, attrs, expose }) {\n const host = ref<HTMLElement | null>(null)\n let handle: EffectHandle | null = null\n\n /** Collect the currently-supplied options, omitting anything the author didn't pass. */\n const collect = (): Partial<Options> => {\n const out: Record<string, unknown> = {}\n for (const key of optionKeys) {\n const value = (componentProps as Record<string, unknown>)[key]\n if (value !== undefined) out[key] = value\n }\n return out as Partial<Options>\n }\n\n onMounted(() => {\n if (!host.value) return\n handle = mountEffect(definition, host.value, collect())\n })\n\n /**\n * Watch the collected options.\n *\n * `deep` is required because `colors` is an array and authors pass it inline — a shallow\n * watcher would miss `:colors=\"['#fff', '#000']\"` changing contents. The cost is a deep\n * comparison per flush over a handful of scalar props, which is negligible next to a frame.\n */\n watch(collect, (next) => handle?.update(next), { deep: true, flush: 'post' })\n\n onBeforeUnmount(() => {\n handle?.destroy()\n handle = null\n })\n\n // Exposed so a parent can drive the effect imperatively — pausing a hero animation while a\n // modal is open, for instance.\n expose({\n pause: () => handle?.pause(),\n resume: () => handle?.resume(),\n renderOnce: () => handle?.renderOnce(),\n get canvas() {\n return handle?.canvas ?? null\n },\n })\n\n return () => {\n const tag = (componentProps as { as?: string }).as ?? 'div'\n const { class: className, style, ...rest } = attrs as Record<string, unknown>\n\n return h(\n tag,\n {\n ref: host,\n class: className,\n // Array form lets Vue merge our styles with the author's, with theirs winning.\n style: [HOST_STYLE, style],\n ...rest,\n },\n slots.default ? [h('div', { style: CONTENT_STYLE }, slots.default())] : undefined,\n )\n }\n },\n })\n\n return component as unknown as VueEffectComponent<Options>\n}\n\nfunction pascal(value: string): string {\n return value.replace(/(^|-)([a-z])/g, (_, __, letter: string) => letter.toUpperCase())\n}\n","import {\n type DefineComponent,\n type PropType,\n type Ref,\n defineComponent,\n getCurrentScope,\n h,\n onBeforeUnmount,\n onMounted,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\nimport {\n type BaseBehaviourOptions,\n type BehaviourDefinition,\n type BehaviourHandle,\n mountBehaviour,\n} from '@ansh-ui/core'\n\n/**\n * Turn a {@link BehaviourDefinition} into a Vue 3 component.\n *\n * Unlike the effect factory this renders its slot content **directly**, with no positioned wrapper:\n * a behaviour manipulates the host element itself, and injecting a wrapper would break the author's\n * layout — a magnetic button inside an extra div is no longer a flex child of its container.\n */\n\nexport interface BehaviourComponentBaseProps {\n as?: string\n}\n\nexport type VueBehaviourComponent<Options extends BaseBehaviourOptions> = DefineComponent<\n Options & BehaviourComponentBaseProps\n>\n\nexport function createBehaviourComponent<\n Options extends BaseBehaviourOptions,\n El extends HTMLElement = HTMLElement,\n>(\n definition: BehaviourDefinition<Options, El>,\n name?: string,\n defaultTag = 'div',\n): VueBehaviourComponent<Options> {\n const optionKeys = Object.keys(definition.defaults) as Array<keyof Options & string>\n\n const props: Record<string, { type: PropType<unknown>; default: undefined }> = {}\n for (const key of optionKeys) {\n props[key] = { type: null as unknown as PropType<unknown>, default: undefined }\n }\n props.as = { type: String as unknown as PropType<unknown>, default: undefined }\n\n const component = defineComponent({\n name: name ?? `Ansh${pascal(definition.name)}`,\n inheritAttrs: false,\n props,\n\n setup(componentProps, { slots, attrs, expose }) {\n const host = ref<El | null>(null)\n let handle: BehaviourHandle<Options> | null = null\n\n const collect = (): Partial<Options> => {\n const out: Record<string, unknown> = {}\n for (const key of optionKeys) {\n const value = (componentProps as Record<string, unknown>)[key]\n if (value !== undefined) out[key] = value\n }\n return out as Partial<Options>\n }\n\n onMounted(() => {\n if (!host.value) return\n handle = mountBehaviour(definition, host.value, collect())\n })\n\n watch(collect, (next) => handle?.update(next), { deep: true, flush: 'post' })\n\n onBeforeUnmount(() => {\n handle?.destroy()\n handle = null\n })\n\n expose({\n get element() {\n return host.value\n },\n })\n\n return () => {\n const tag = (componentProps as { as?: string }).as ?? defaultTag\n return h(tag, { ref: host, ...attrs }, slots.default?.())\n }\n },\n })\n\n return component as unknown as VueBehaviourComponent<Options>\n}\n\n/**\n * Attach a behaviour to an element you already have a template ref to.\n *\n * The composable form, for when a behaviour must apply to an existing component's own element\n * rather than to a wrapper — which is most of the time when integrating with a design system.\n *\n * ```vue\n * <script setup>\n * const button = ref(null)\n * useBehaviour(button, magnetic, { strength: 16 })\n * </script>\n * <template><button ref=\"button\">Go</button></template>\n * ```\n *\n * The target is watched rather than read once, so it works with `v-if` and with elements that\n * mount after setup.\n */\nexport function useBehaviour<Options extends BaseBehaviourOptions, El extends HTMLElement>(\n target: Ref<El | null | undefined>,\n definition: BehaviourDefinition<Options, El>,\n options?: Options | (() => Partial<Options>),\n): void {\n let handle: BehaviourHandle<Options> | null = null\n\n const resolve = (): Partial<Options> =>\n typeof options === 'function' ? options() : ((options ?? {}) as Partial<Options>)\n\n watch(\n target,\n (element) => {\n handle?.destroy()\n handle = null\n if (!element) return\n handle = mountBehaviour(definition, element, resolve())\n },\n { immediate: true, flush: 'post' },\n )\n\n // A getter form lets the caller pass reactive options; a plain object is watched too, in case it\n // is itself reactive.\n watch(resolve, (next) => handle?.update(next), { deep: true, flush: 'post' })\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n handle?.destroy()\n handle = null\n })\n }\n}\n\nfunction pascal(value: string): string {\n return value.replace(/(^|-)([a-z])/g, (_, __, letter: string) => letter.toUpperCase())\n}\n","// Effects (canvas) and behaviours (DOM) as Vue components. Barrel: re-exports only.\nexport * from './backgrounds'\nexport * from './interaction'\n","import {\n animatedGradient,\n aurora,\n blob,\n constellation,\n fireflies,\n floatingGeometry,\n lightRays,\n meshGradient,\n meteors,\n noiseLayer,\n orbit,\n particleField,\n powderExplosion,\n rain,\n smoke,\n snow,\n spotlight,\n strangeAttractor,\n swarm,\n waves,\n} from '@ansh-ui/core'\nimport { createEffectComponent } from '../factory/create-effect-component'\n\n/**\n * The Vue component set.\n *\n * Every component is one factory call over the same `@ansh-ui/core` definition the React package\n * uses. That is the payoff of the layered architecture: parity between frameworks is structural\n * rather than something to be maintained by hand, and a fix to an effect fixes it everywhere.\n *\n * ```vue\n * <script setup>\n * import { AuroraBackground, MagneticButton } from '@ansh-ui/vue'\n * </script>\n *\n * <template>\n * <AuroraBackground :colors=\"['#0275f4', '#9f0550']\" class=\"hero\">\n * <h1>Motion, refined.</h1>\n * <MagneticButton :strength=\"16\">Get started</MagneticButton>\n * </AuroraBackground>\n * </template>\n * ```\n */\n\n/** Vertical curtains of light with ridged filament structure. */\nexport const AuroraBackground = createEffectComponent(aurora, 'AuroraBackground')\n\n/** Soft overlapping colour fields drifting on non-repeating Lissajous paths. */\nexport const MeshGradient = createEffectComponent(meshGradient, 'MeshGradient')\n\n/** A rotating multi-stop linear gradient. One fill per frame. */\nexport const AnimatedGradient = createEffectComponent(animatedGradient, 'AnimatedGradient')\n\n/** Points advected by a divergence-free curl-noise flow field. */\nexport const ParticleField = createEffectComponent(particleField, 'ParticleField')\n\n/** Drifting nodes joined by lines, with the pointer as a live node. */\nexport const Constellation = createEffectComponent(constellation, 'Constellation')\n\n/** Streaks falling across the canvas, spawned as a Poisson process. */\nexport const MeteorShower = createEffectComponent(meteors, 'MeteorShower')\n\n/** Depth-parallaxed rain, optionally with splash rings. */\nexport const Rain = createEffectComponent(rain, 'Rain')\n\n/** Depth-parallaxed snow with independent per-flake sway. */\nexport const Snow = createEffectComponent(snow, 'Snow')\n\n/** Wandering points with asymmetric bioluminescent pulsing. */\nexport const Fireflies = createEffectComponent(fireflies, 'Fireflies')\n\n/** Layered undulating bands from three incommensurable sines plus noise. */\nexport const Waves = createEffectComponent(waves, 'Waves')\n\n/** Organic shapes morphing via noise sampled on a closed circle. */\nexport const LiquidBlob = createEffectComponent(blob, 'LiquidBlob')\n\n/** Film grain overlay. Hides gradient banding and gives flat colour texture. */\nexport const NoiseLayer = createEffectComponent(noiseLayer, 'NoiseLayer')\n\n/** A soft light following the pointer, easing in and out. */\nexport const Spotlight = createEffectComponent(spotlight, 'Spotlight')\n\n/** Volumetric shafts fanning from a source point, with noise-driven per-shaft brightness. */\nexport const LightRays = createEffectComponent(lightRays, 'LightRays')\n\n/** A rising plume: curl-advected puffs that expand and dissipate over their life. */\nexport const Smoke = createEffectComponent(smoke, 'Smoke')\n\n/** Bursts of fine particles that decelerate hard and settle. */\nexport const PowderExplosion = createEffectComponent(powderExplosion, 'PowderExplosion')\n\n/** Polygons drifting in depth, projected through a real perspective divide. */\nexport const FloatingGeometry = createEffectComponent(floatingGeometry, 'FloatingGeometry')\n\n/** Nested rings of points circling a centre, depth-ordered so near points occlude far ones. */\nexport const Orbit = createEffectComponent(orbit, 'Orbit')\n\n/** A chaotic iterated map plotted as a drifting cloud — Clifford, de Jong or Svensson. */\nexport const StrangeAttractor = createEffectComponent(strangeAttractor, 'StrangeAttractor')\n\n/** Particles bound to moving attractors, orbiting rather than collapsing. Follows the pointer. */\nexport const Swarm = createEffectComponent(swarm, 'Swarm')\n","import {\n magnetic,\n marquee,\n parallax,\n ripple,\n scrollReveal,\n textScramble,\n tilt,\n} from '@ansh-ui/core'\nimport { createBehaviourComponent } from '../factory/create-behaviour-component'\n\n// DOM behaviours as Vue components, mirroring React's `components/interaction.tsx`.\n\n/** An element that leans toward the pointer, spring-driven. Renders a `<button>` by default. */\nexport const MagneticButton = createBehaviourComponent(magnetic, 'MagneticButton', 'button')\n\n/** A card that rotates in 3D toward the pointer, with a moving specular highlight. */\nexport const TiltCard = createBehaviourComponent(tilt, 'TiltCard')\n\n/** A wave expanding from the point of contact. Also fires on Enter and Space. */\nexport const Ripple = createBehaviourComponent(ripple, 'Ripple')\n\n/** Seamless infinite scrolling. Speed is in pixels per second, not a duration. */\nexport const Marquee = createBehaviourComponent(marquee, 'Marquee')\n\n/** Reveal content as it enters the viewport. Degrades to visible if JavaScript never runs. */\nexport const ScrollReveal = createBehaviourComponent(scrollReveal, 'ScrollReveal')\n\n/** Move an element at a different rate from the scroll. Disabled under reduced motion. */\nexport const Parallax = createBehaviourComponent(parallax, 'Parallax')\n\n/**\n * Text that resolves out of noise, character by character.\n *\n * Unlike React's `<ScrambleText>`, this is the bare behaviour binding: it rewrites the element's\n * own text, so the scrambling copy *is* the accessible copy. Wrap it the way React's component\n * does — a visually-hidden span holding the real string, this one `aria-hidden` — when the text\n * matters to a screen reader.\n */\nexport const ScrambleText = createBehaviourComponent(textScramble, 'ScrambleText')\n","import { type PropType, type VNodeChild, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral'\nexport type AlertVariant = 'soft' | 'outline' | 'solid'\n\n/**\n * Built-in tone icons, as factories rather than pre-built vnodes.\n *\n * A vnode is meant to be mounted into exactly one place; reusing the same instance across renders\n * (Alert re-renders on every prop change, and several Alerts can share a tone) risks Vue's \"vnode\n * reused\" warning. A factory sidesteps it by building a fresh tree per render — the same reason\n * `Input`'s clear-button icon is built inline in its own render function rather than hoisted.\n */\nconst ICONS: Record<AlertTone, (() => VNodeChild) | null> = {\n info: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('circle', { cx: '10', cy: '10', r: '7.5' }),\n h('path', { d: 'M10 9v4.5', 'stroke-linecap': 'round' }),\n h('circle', { cx: '10', cy: '6.5', r: '0.9', fill: 'currentColor', stroke: 'none' }),\n ],\n ),\n success: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('circle', { cx: '10', cy: '10', r: '7.5' }),\n h('path', {\n d: 'M6.5 10.3l2.4 2.4 4.6-5.2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n warning: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('path', {\n d: 'M8.6 3.2L1.9 14.6a1.6 1.6 0 001.4 2.4h13.4a1.6 1.6 0 001.4-2.4L11.4 3.2a1.6 1.6 0 00-2.8 0z',\n 'stroke-linejoin': 'round',\n }),\n h('path', { d: 'M10 7.5v3.5', 'stroke-linecap': 'round' }),\n h('circle', { cx: '10', cy: '13.6', r: '0.9', fill: 'currentColor', stroke: 'none' }),\n ],\n ),\n danger: () =>\n h(\n 'svg',\n {\n viewBox: '0 0 20 20',\n width: '18',\n height: '18',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.6',\n },\n [\n h('circle', { cx: '10', cy: '10', r: '7.5' }),\n h('path', { d: 'M7.5 7.5l5 5M12.5 7.5l-5 5', 'stroke-linecap': 'round' }),\n ],\n ),\n neutral: null,\n}\n\n/**\n * An inline message — the Vue counterpart of `@ansh-ui/react`'s `Alert`.\n *\n * The `role` follows the tone, because it decides whether a screen reader interrupts:\n * `role=\"alert\"` (assertive) for errors and warnings, which the user needs to know about *now*;\n * `role=\"status\"` (polite) for information and success, which can wait for a pause.\n *\n * Using `alert` for everything is the common mistake, and it makes a screen reader cut off whatever\n * it was saying to announce that a draft was saved.\n *\n * The tone is always carried by the icon and the text, never by colour alone.\n *\n * The React version's `children` prop (the message body) is this component's default slot — the\n * primary content, same split `Field` uses between its default slot (the control) and its\n * `label`/`description`/`error` props (short annotations). `title` and `actions` stay props for the\n * same reason those are props on `Field`.\n */\nexport const Alert = defineComponent({\n name: 'AnshAlert',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<AlertTone>, default: 'info' },\n title: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n /** Replace the default icon, or pass `null` to omit it. */\n icon: { type: [String, Object, Function] as PropType<SlotContent | null>, default: undefined },\n /** Show a dismiss button. */\n dismissible: { type: Boolean, default: false },\n /** Buttons or links under the message. */\n actions: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n variant: { type: String as PropType<AlertVariant>, default: 'soft' },\n },\n emits: ['dismiss'],\n setup(props, { attrs, emit, slots }) {\n const visible = ref(true)\n\n return () => {\n if (!visible.value) return null\n\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const urgent = props.tone === 'danger' || props.tone === 'warning'\n const resolvedIcon: VNodeChild =\n props.icon === undefined\n ? (ICONS[props.tone]?.() ?? null)\n : props.icon === null\n ? null\n : resolveSlotContent(props.icon)\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-alert',\n `ansh-alert--${props.tone}`,\n `ansh-alert--${props.variant}`,\n attrClass as string,\n ),\n role: urgent ? 'alert' : 'status',\n // Errors are assertive; everything else waits for a natural pause.\n 'aria-live': urgent ? 'assertive' : 'polite',\n ...restAttrs,\n },\n [\n resolvedIcon !== null\n ? h('span', { class: 'ansh-alert__icon', 'aria-hidden': 'true' }, [resolvedIcon])\n : null,\n\n h('div', { class: 'ansh-alert__body' }, [\n props.title\n ? h('p', { class: 'ansh-alert__title' }, [resolveSlotContent(props.title)])\n : null,\n slots.default ? h('div', { class: 'ansh-alert__message' }, slots.default()) : null,\n props.actions\n ? h('div', { class: 'ansh-alert__actions' }, [resolveSlotContent(props.actions)])\n : null,\n ]),\n\n props.dismissible\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-alert__close ansh-focusable',\n 'aria-label': 'Dismiss message',\n onClick: () => {\n visible.value = false\n emit('dismiss')\n },\n },\n [\n h(\n 'svg',\n { viewBox: '0 0 16 16', width: '12', height: '12', 'aria-hidden': 'true' },\n [\n h('path', {\n d: 'M4 4l8 8M12 4l-8 8',\n stroke: 'currentColor',\n 'stroke-width': '1.75',\n 'stroke-linecap': 'round',\n fill: 'none',\n }),\n ],\n ),\n ],\n )\n : null,\n ],\n )\n }\n },\n})\n\n/**\n * A full-width page-level message — the Vue counterpart of `@ansh-ui/react`'s `Banner`. Maintenance\n * windows, trial expiry, a failed payment.\n *\n * Distinct from `Alert` in placement and weight rather than in mechanics: a banner concerns the\n * whole application, an alert concerns the thing next to it. Implemented as a thin wrapper over\n * `Alert` (fixed `variant=\"solid\"`), forwarding every slot.\n */\nexport const Banner = defineComponent({\n name: 'AnshBanner',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<AlertTone>, default: 'info' },\n title: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n icon: { type: [String, Object, Function] as PropType<SlotContent | null>, default: undefined },\n dismissible: { type: Boolean, default: false },\n actions: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n /** Pin to the top of the viewport. */\n sticky: { type: Boolean, default: false },\n },\n emits: ['dismiss'],\n setup(props, { attrs, emit, slots }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n Alert,\n {\n tone: props.tone,\n title: props.title,\n icon: props.icon,\n dismissible: props.dismissible,\n actions: props.actions,\n variant: 'solid',\n class: cx('ansh-banner', props.sticky && 'ansh-banner--sticky', attrClass as string),\n onDismiss: () => emit('dismiss'),\n ...restAttrs,\n },\n slots,\n )\n }\n },\n})\n\n/**\n * A documentation callout — the Vue counterpart of `@ansh-ui/react`'s `Callout`.\n *\n * Deliberately **not** a live region. Prose asides are part of the page's content and are read in\n * document order; announcing them out of sequence would be disruptive rather than helpful, which is\n * the opposite of what `Alert` is for.\n */\nexport const Callout = defineComponent({\n name: 'AnshCallout',\n inheritAttrs: false,\n props: {\n /** Short label — \"Note\", \"Tip\", \"Warning\". */\n label: { type: String, default: undefined },\n tone: { type: String as PropType<AlertTone>, default: 'info' },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs, slots }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const resolvedIcon: VNodeChild =\n props.icon !== undefined ? resolveSlotContent(props.icon) : (ICONS[props.tone]?.() ?? null)\n\n return h(\n 'aside',\n {\n class: cx('ansh-callout', `ansh-callout--${props.tone}`, attrClass as string),\n ...restAttrs,\n },\n [\n h('span', { class: 'ansh-callout__icon', 'aria-hidden': 'true' }, [resolvedIcon]),\n h('div', { class: 'ansh-callout__body' }, [\n props.label ? h('p', { class: 'ansh-callout__label' }, props.label) : null,\n h('div', { class: 'ansh-callout__content' }, slots.default?.()),\n ]),\n ],\n )\n }\n },\n})\n","import type { App, Plugin } from 'vue'\nimport {\n type ReducedMotionMode,\n attachLifecycle,\n getTicker,\n setReducedMotionMode,\n} from '@ansh-ui/core'\nimport * as effectsAndBehaviours from './components/index'\nimport { AnimatedText, GradientText } from './components/text'\nimport { MotionConfig, ThemeProvider } from './components/providers'\nimport { Field, Fieldset, VisuallyHidden } from './components/form/field'\nimport { Input, NumberInput, Textarea } from './components/form/input'\nimport { Checkbox, ChoiceCard, Radio, RadioGroup, Switch } from './components/form/toggles'\nimport { OptionList } from './components/form/listbox'\nimport { Select } from './components/form/select'\nimport { Combobox } from './components/form/combobox'\nimport { RangeSlider, Slider } from './components/form/slider'\nimport { PinInput } from './components/form/pin-input'\nimport { TagsInput } from './components/form/tags-input'\nimport { Rating } from './components/form/rating'\nimport { Dropzone } from './components/form/dropzone'\nimport { ColorPicker } from './components/form/color-picker'\nimport { Calendar } from './components/form/calendar'\nimport { DatePicker, DateRangePicker } from './components/form/date-picker'\nimport { AlertDialog, Dialog, DialogFooter } from './components/overlay/dialog'\nimport { HoverCard, Popover, PopoverContent, PopoverTrigger } from './components/overlay/popover'\nimport { Tooltip, TooltipProvider } from './components/overlay/tooltip'\nimport { Drawer } from './components/overlay/drawer'\nimport { ContextMenu, DropdownMenu } from './components/overlay/menu'\nimport { DataTable, Pagination, Table } from './components/data/table'\nimport {\n Avatar,\n AvatarGroup,\n Badge,\n CodeBlock,\n DescriptionList,\n EmptyState,\n Kbd,\n Stat,\n Timeline,\n} from './components/data/display'\nimport { CircularProgress, Meter, Progress } from './components/data/progress'\nimport { Breadcrumbs, Stepper } from './components/navigation/breadcrumbs'\nimport { Sidebar, AppShell } from './components/navigation/sidebar'\nimport { NavigationMenu } from './components/navigation/nav-menu'\nimport { Tabs } from './components/navigation/tabs'\nimport { Alert, Banner, Callout } from './components/feedback/alert'\nimport { Accordion, Collapsible, DisclosureList } from './components/disclosure'\nimport {\n AspectRatio,\n Center,\n Container,\n Divider,\n Grid,\n GridItem,\n HStack,\n ScrollArea,\n Spacer,\n Stack,\n VStack,\n} from './components/layout/index'\nimport { Resizable } from './components/layout/resizable'\nimport { AnimatePresence, Draggable, Motion } from './components/motion'\n\n/**\n * The Vue plugin.\n *\n * Optional. Importing components directly is the tree-shakeable path and what most applications\n * should do; this exists for two cases where global registration is genuinely better:\n *\n * 1. **Prototyping and playgrounds**, where per-file imports are friction.\n * 2. **Applications with runtime-compiled templates** (a CMS, a low-code builder), where the\n * component name is a string and cannot be statically imported at all.\n *\n * It also provides the single place to apply app-wide motion configuration, which is the React\n * package's `<MotionConfig>` equivalent.\n *\n * ## Why the application components are imported by name rather than `import * as`\n *\n * The effects and behaviours (`./components/index`) get the blanket `import * as` treatment because\n * that module exports *only* components — every named export is safe to hand to `app.component()`.\n * The application-layer modules don't have that property: `form/listbox.ts` exports `OptionList` (a\n * component) alongside `filterOptions`, `firstEnabled`, `stepActive` and `useTypeahead` (plain\n * functions), and several others mix a component with its `useXxx` composable or context accessor\n * the same way. A blanket spread would hand those functions to `app.component()` too, which either\n * throws or silently registers something that isn't a component — so every application component\n * is imported and listed explicitly here instead.\n */\n\nexport interface AnshPluginOptions {\n /**\n * Prefix for globally registered component names. Default `'Ansh'`, giving\n * `<AnshAuroraBackground>`. Pass `''` for the bare names.\n */\n prefix?: string\n /** Register components globally. Default `true`. */\n registerComponents?: boolean\n /**\n * Application-level reduced-motion override.\n *\n * `'always'` is genuinely useful in production as the backing for an in-app \"reduce motion\"\n * setting — many users who want calmer interfaces have never found the OS toggle.\n */\n reducedMotion?: ReducedMotionMode\n /** Global playback rate. `0.5` is slow motion across every animation. Default `1`. */\n timeScale?: number\n /** Pin adaptive quality. Omit to let the frame budget decide, which is almost always right. */\n quality?: number\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.\n */\n pauseWhenHidden?: boolean\n /** Also pause when the window loses focus. Default `false`. */\n pauseWhenBlurred?: boolean\n /** Reduce quality on low battery where the platform exposes it. Default `true`. */\n respectBattery?: boolean\n}\n\nconst applicationComponents: Record<string, unknown> = {\n MotionConfig,\n ThemeProvider,\n Field,\n Fieldset,\n VisuallyHidden,\n Input,\n NumberInput,\n Textarea,\n Checkbox,\n ChoiceCard,\n Radio,\n RadioGroup,\n Switch,\n OptionList,\n Select,\n Combobox,\n RangeSlider,\n Slider,\n PinInput,\n TagsInput,\n Rating,\n Dropzone,\n ColorPicker,\n Calendar,\n DatePicker,\n DateRangePicker,\n AlertDialog,\n Dialog,\n DialogFooter,\n HoverCard,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tooltip,\n TooltipProvider,\n Drawer,\n ContextMenu,\n DropdownMenu,\n DataTable,\n Pagination,\n Table,\n Avatar,\n AvatarGroup,\n Badge,\n CodeBlock,\n DescriptionList,\n EmptyState,\n Kbd,\n Stat,\n Timeline,\n CircularProgress,\n Meter,\n Progress,\n Breadcrumbs,\n Stepper,\n Sidebar,\n AppShell,\n NavigationMenu,\n Tabs,\n Alert,\n Banner,\n Callout,\n Accordion,\n Collapsible,\n DisclosureList,\n AspectRatio,\n Center,\n Container,\n Divider,\n Grid,\n GridItem,\n HStack,\n ScrollArea,\n Spacer,\n Stack,\n VStack,\n Resizable,\n AnimatePresence,\n Draggable,\n Motion,\n}\n\nexport const AnshPlugin: Plugin<AnshPluginOptions[]> = {\n install(app: App, options: AnshPluginOptions = {}) {\n const {\n prefix = 'Ansh',\n registerComponents = true,\n reducedMotion,\n timeScale,\n quality,\n pauseWhenHidden = true,\n pauseWhenBlurred = false,\n respectBattery = true,\n } = options\n\n if (registerComponents) {\n const all: Record<string, unknown> = {\n ...effectsAndBehaviours,\n GradientText,\n AnimatedText,\n ...applicationComponents,\n }\n for (const [name, component] of Object.entries(all)) {\n app.component(`${prefix}${name}`, component as never)\n }\n }\n\n if (reducedMotion) setReducedMotionMode(reducedMotion)\n\n const ticker = getTicker()\n if (timeScale !== undefined) ticker.timeScale = timeScale\n if (quality !== undefined) ticker.lockQuality(quality)\n\n // Guarded for SSR: `attachLifecycle` is a no-op without a document, but checking here makes the\n // intent explicit and avoids constructing the options object on the server.\n if (typeof document !== 'undefined') {\n const detach = attachLifecycle(ticker, {\n pauseWhenHidden,\n pauseWhenBlurred,\n respectBattery,\n })\n // Released when the app unmounts. Matters in tests and in micro-frontend hosts that mount and\n // unmount several Vue apps over a page's lifetime.\n const originalUnmount = app.unmount.bind(app)\n app.unmount = () => {\n detach()\n originalUnmount()\n }\n }\n },\n}\n","/**\n * @ansh-ui/vue — Ansh for Vue 3 and Nuxt.\n *\n * Every component is a thin binding over `@ansh-ui/core`. The engine owns all behaviour; this\n * package owns the Vue lifecycle, reactivity boundaries and SSR correctness.\n *\n * ```vue\n * <script setup>\n * import { AuroraBackground, AnimatedText, MagneticButton } from '@ansh-ui/vue'\n * </script>\n *\n * <template>\n * <AuroraBackground :colors=\"['#0275f4', '#9f0550']\" class=\"hero\">\n * <AnimatedText text=\"Motion, refined.\" by=\"chars\" from=\"center\" />\n * <MagneticButton :strength=\"16\">Get started</MagneticButton>\n * </AuroraBackground>\n * </template>\n * ```\n *\n * For Nuxt, install `@ansh-ui/nuxt` instead — it registers every component for auto-import and\n * handles the SSR transpile.\n *\n * ## Designed UI components\n *\n * Everything under \"Forms\" / \"Overlays\" / \"Data\" / \"Navigation\" / \"Feedback\" / \"Layout\" below needs\n * the stylesheet:\n *\n * ```ts\n * import '@ansh-ui/tokens/ansh.css'\n * import '@ansh-ui/vue/styles.css'\n * ```\n */\n\n// --- Composables ---\nexport * from './composables/use-motion'\nexport * from './composables/use-observers'\n\n// --- Factories ---\n// Exported so consumers can wrap their own effects and behaviours with the same guarantees the\n// built-in components get. This is the supported extension path.\nexport {\n createEffectComponent,\n type VueEffectComponent,\n type EffectComponentBaseProps,\n} from './factory/create-effect-component'\nexport {\n createBehaviourComponent,\n useBehaviour,\n type VueBehaviourComponent,\n type BehaviourComponentBaseProps,\n} from './factory/create-behaviour-component'\n\n// --- Effect & behaviour components ---\nexport * from './components/index'\nexport { GradientText, AnimatedText } from './components/text'\nexport {\n MotionConfig,\n type MotionConfigValue,\n useMotionConfig,\n ThemeProvider,\n type ThemeSetting,\n type ThemeContextValue,\n useTheme,\n themeScript,\n} from './components/providers'\n\n/**\n * --- Headless primitives ---\n *\n * The pieces every designed component below is built from. Exported because an application that\n * needs a component this library doesn't have should be able to build it with the same guarantees\n * rather than starting from scratch.\n */\nexport {\n cx,\n useId,\n resolveSlotContent,\n type ReadonlyRef,\n type SlotContent,\n} from './primitives/utils'\nexport { useControllableState } from './primitives/use-controllable-state'\nexport {\n getTabbable,\n useAutoFocus,\n useFocusRestore,\n useFocusTrap,\n useRovingFocus,\n} from './primitives/focus'\nexport {\n getLayerStack,\n useDismiss,\n useScrollLock,\n type DismissOptions,\n} from './primitives/use-dismiss'\nexport { usePresence } from './primitives/presence'\nexport {\n computePosition,\n type Align,\n type Placement,\n type PositionOptions,\n type PositionResult,\n type Rect,\n type Side,\n} from './primitives/position'\nexport {\n useAnchoredPosition,\n type AnchoredPosition,\n type AnchoredPositionOptions,\n} from './primitives/use-anchored-position'\n\n// --- Layout ---\nexport * from './components/layout/index'\nexport * from './components/layout/resizable'\n\n// --- Forms ---\nexport * from './components/form/field'\nexport * from './components/form/input'\nexport * from './components/form/toggles'\nexport * from './components/form/listbox'\nexport * from './components/form/select'\nexport * from './components/form/combobox'\nexport * from './components/form/slider'\nexport * from './components/form/pin-input'\nexport * from './components/form/tags-input'\nexport * from './components/form/rating'\nexport * from './components/form/dropzone'\nexport * from './components/form/color-picker'\nexport * from './components/form/calendar'\nexport * from './components/form/date-picker'\n\n// --- Overlays ---\nexport * from './components/overlay/popover'\nexport * from './components/overlay/tooltip'\nexport * from './components/overlay/dialog'\nexport * from './components/overlay/drawer'\nexport * from './components/overlay/menu'\n\n// --- Data display ---\nexport * from './components/data/table'\nexport * from './components/data/display'\nexport * from './components/data/progress'\n\n// --- Navigation ---\nexport * from './components/navigation/tabs'\nexport * from './components/navigation/carousel'\nexport * from './components/navigation/breadcrumbs'\nexport * from './components/navigation/sidebar'\nexport * from './components/navigation/nav-menu'\n\n// --- Feedback ---\nexport * from './components/feedback/alert'\n\n// --- Disclosure ---\nexport * from './components/disclosure'\n\n// --- Declarative motion ---\nexport {\n AnimatePresence,\n Draggable,\n Motion,\n type AnimatePresenceProps,\n type DraggableProps,\n type MotionTransition,\n type MotionValues,\n} from './components/motion'\n\n// --- Plugin ---\nexport { AnshPlugin, type AnshPluginOptions } from './plugin'\n\n/**\n * Re-exported engine surface.\n *\n * A narrow, curated set — the pieces a Vue author reaches for directly. Deliberately not\n * `export * from '@ansh-ui/core'`, which would put 200 symbols into this package's autocomplete and\n * blur which layer an import belongs to. For anything else, import from `@ansh-ui/core`.\n */\nexport {\n // Motion\n animate,\n createTimeline,\n motionValue,\n MotionValue,\n stagger,\n springs,\n // Colour\n createGradient,\n createScale,\n generatePalette,\n mixColors,\n palettes,\n parseColor,\n toHex,\n toOklchString,\n checkContrast,\n ensureContrast,\n pickReadable,\n // Easing\n easings,\n cubicBezier,\n registerEasing,\n signature as signatureEasings,\n // Noise\n createNoise,\n // Kernel\n getTicker,\n // Accessibility\n prefersReducedMotion,\n setReducedMotionMode,\n // Registry — the seam for Pro-tier and plugin registration\n getRegistry,\n} from '@ansh-ui/core'\n\n/**\n * `Timeline` is re-exported as `MotionTimeline`.\n *\n * The engine's `Timeline` (the animation sequencer) and this package's `Timeline` (the activity\n * feed component, from `components/data/display`) are unrelated things that happen to share a word.\n * Exporting both unaliased makes the name ambiguous and fails the build outright — unlike\n * `@ansh-ui/react`, where `export *` silently drops the losing one instead. Aliased here for the\n * same reason it's aliased there: consistency between the two packages' public APIs.\n */\nexport type { Timeline as MotionTimeline } from '@ansh-ui/core'\n\nexport type {\n AnimationControls,\n AnimationOptions,\n BaseEffectOptions,\n ColorInput,\n ColorSpace,\n EasingInput,\n EffectDefinition,\n FrameState,\n Gradient,\n PaletteName,\n PointerState,\n ReducedMotionStrategy,\n Rgb,\n SpringOptions,\n StaggerFrom,\n StaggerOptions,\n} from '@ansh-ui/core'\n\nexport const VERSION = '0.1.0'\n"]}
package/dist/layout.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkJQ4YLXXM_cjs = require('./chunk-JQ4YLXXM.cjs');
3
+ var chunkPNR4RQ4T_cjs = require('./chunk-PNR4RQ4T.cjs');
4
4
  var chunkSHX2JGID_cjs = require('./chunk-SHX2JGID.cjs');
5
5
  require('./chunk-774WBLDR.cjs');
6
6
  require('./chunk-6732H4BQ.cjs');
@@ -9,51 +9,51 @@ require('./chunk-6732H4BQ.cjs');
9
9
 
10
10
  Object.defineProperty(exports, "AspectRatio", {
11
11
  enumerable: true,
12
- get: function () { return chunkJQ4YLXXM_cjs.AspectRatio; }
12
+ get: function () { return chunkPNR4RQ4T_cjs.AspectRatio; }
13
13
  });
14
14
  Object.defineProperty(exports, "Center", {
15
15
  enumerable: true,
16
- get: function () { return chunkJQ4YLXXM_cjs.Center; }
16
+ get: function () { return chunkPNR4RQ4T_cjs.Center; }
17
17
  });
18
18
  Object.defineProperty(exports, "Container", {
19
19
  enumerable: true,
20
- get: function () { return chunkJQ4YLXXM_cjs.Container; }
20
+ get: function () { return chunkPNR4RQ4T_cjs.Container; }
21
21
  });
22
22
  Object.defineProperty(exports, "Divider", {
23
23
  enumerable: true,
24
- get: function () { return chunkJQ4YLXXM_cjs.Divider; }
24
+ get: function () { return chunkPNR4RQ4T_cjs.Divider; }
25
25
  });
26
26
  Object.defineProperty(exports, "Grid", {
27
27
  enumerable: true,
28
- get: function () { return chunkJQ4YLXXM_cjs.Grid; }
28
+ get: function () { return chunkPNR4RQ4T_cjs.Grid; }
29
29
  });
30
30
  Object.defineProperty(exports, "GridItem", {
31
31
  enumerable: true,
32
- get: function () { return chunkJQ4YLXXM_cjs.GridItem; }
32
+ get: function () { return chunkPNR4RQ4T_cjs.GridItem; }
33
33
  });
34
34
  Object.defineProperty(exports, "HStack", {
35
35
  enumerable: true,
36
- get: function () { return chunkJQ4YLXXM_cjs.HStack; }
36
+ get: function () { return chunkPNR4RQ4T_cjs.HStack; }
37
37
  });
38
38
  Object.defineProperty(exports, "Resizable", {
39
39
  enumerable: true,
40
- get: function () { return chunkJQ4YLXXM_cjs.Resizable; }
40
+ get: function () { return chunkPNR4RQ4T_cjs.Resizable; }
41
41
  });
42
42
  Object.defineProperty(exports, "ScrollArea", {
43
43
  enumerable: true,
44
- get: function () { return chunkJQ4YLXXM_cjs.ScrollArea; }
44
+ get: function () { return chunkPNR4RQ4T_cjs.ScrollArea; }
45
45
  });
46
46
  Object.defineProperty(exports, "Spacer", {
47
47
  enumerable: true,
48
- get: function () { return chunkJQ4YLXXM_cjs.Spacer; }
48
+ get: function () { return chunkPNR4RQ4T_cjs.Spacer; }
49
49
  });
50
50
  Object.defineProperty(exports, "Stack", {
51
51
  enumerable: true,
52
- get: function () { return chunkJQ4YLXXM_cjs.Stack; }
52
+ get: function () { return chunkPNR4RQ4T_cjs.Stack; }
53
53
  });
54
54
  Object.defineProperty(exports, "VStack", {
55
55
  enumerable: true,
56
- get: function () { return chunkJQ4YLXXM_cjs.VStack; }
56
+ get: function () { return chunkPNR4RQ4T_cjs.VStack; }
57
57
  });
58
58
  Object.defineProperty(exports, "AppShell", {
59
59
  enumerable: true,
package/dist/layout.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType, VNode } from 'vue';
3
- import { S as SlotContent } from './utils-IKPG3zcC.cjs';
4
- export { A as AppShell, N as NavItem, a as NavSection, S as Sidebar } from './sidebar-CQqEmpid.cjs';
3
+ import { SlotContent } from './index.cjs';
4
+ export { A as AppShell, N as NavItem, a as NavSection, S as Sidebar } from './sidebar-B9zDHMbn.cjs';
5
5
 
6
6
  /**
7
7
  * Layout primitives — the Vue counterpart of `@ansh-ui/react`'s layout components.
@@ -33,6 +33,7 @@ type SpaceToken = 0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20
33
33
  * string flows straight into the style property — is identical.
34
34
  */
35
35
  type FlexAlign = string;
36
+
36
37
  interface StackProps {
37
38
  as?: string;
38
39
  /** Default `'vertical'` — the direction that needs a helper more often. */
@@ -131,10 +132,10 @@ declare const Stack: vue.DefineComponent<vue.ExtractPropTypes<{
131
132
  as: string;
132
133
  direction: "horizontal" | "vertical";
133
134
  gap: SpaceToken;
134
- wrap: boolean;
135
135
  align: string;
136
- stretch: boolean;
137
136
  justify: string;
137
+ wrap: boolean;
138
+ stretch: boolean;
138
139
  divide: boolean;
139
140
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
140
141
  /** Horizontal `Stack`, for readability at call sites. */
@@ -201,10 +202,10 @@ declare const HStack: vue.DefineComponent<vue.ExtractPropTypes<{
201
202
  }>> & Readonly<{}>, {
202
203
  as: string;
203
204
  gap: SpaceToken;
204
- wrap: boolean;
205
205
  align: string;
206
- stretch: boolean;
207
206
  justify: string;
207
+ wrap: boolean;
208
+ stretch: boolean;
208
209
  divide: boolean;
209
210
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
210
211
  /** Vertical `Stack`, for symmetry with `HStack`. */
@@ -271,12 +272,13 @@ declare const VStack: vue.DefineComponent<vue.ExtractPropTypes<{
271
272
  }>> & Readonly<{}>, {
272
273
  as: string;
273
274
  gap: SpaceToken;
274
- wrap: boolean;
275
275
  align: string;
276
- stretch: boolean;
277
276
  justify: string;
277
+ wrap: boolean;
278
+ stretch: boolean;
278
279
  divide: boolean;
279
280
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
281
+
280
282
  interface GridProps {
281
283
  as?: string;
282
284
  /** Fixed column count, or `'auto'` for a responsive `auto-fill` track. */
@@ -350,8 +352,8 @@ declare const Grid: vue.DefineComponent<vue.ExtractPropTypes<{
350
352
  }>> & Readonly<{}>, {
351
353
  as: string;
352
354
  gap: SpaceToken;
353
- align: string;
354
355
  columns: number | "auto";
356
+ align: string;
355
357
  minColumnWidth: string;
356
358
  rowGap: SpaceToken;
357
359
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
@@ -390,10 +392,11 @@ declare const GridItem: vue.DefineComponent<vue.ExtractPropTypes<{
390
392
  default: undefined;
391
393
  };
392
394
  }>> & Readonly<{}>, {
393
- as: string;
394
395
  span: number | "full";
396
+ as: string;
395
397
  rowSpan: number;
396
398
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
399
+
397
400
  interface ContainerProps {
398
401
  as?: string;
399
402
  /** Max content width. Default `'lg'` (72rem). */
@@ -431,10 +434,11 @@ declare const Container: vue.DefineComponent<vue.ExtractPropTypes<{
431
434
  default: number;
432
435
  };
433
436
  }>> & Readonly<{}>, {
434
- size: "full" | "sm" | "md" | "lg" | "xl";
435
437
  as: string;
438
+ size: "sm" | "md" | "lg" | "xl" | "full";
436
439
  padding: SpaceToken;
437
440
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
441
+
438
442
  interface DividerProps {
439
443
  orientation?: 'horizontal' | 'vertical';
440
444
  /** Optional label rendered in the middle of the rule. */
@@ -477,6 +481,7 @@ declare const Divider: vue.DefineComponent<vue.ExtractPropTypes<{
477
481
  label: SlotContent;
478
482
  orientation: "horizontal" | "vertical";
479
483
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
484
+
480
485
  interface SpacerProps {
481
486
  size?: SpaceToken;
482
487
  /** Grow to absorb free space in a flex container. */
@@ -507,6 +512,7 @@ declare const Spacer: vue.DefineComponent<vue.ExtractPropTypes<{
507
512
  size: SpaceToken;
508
513
  grow: boolean;
509
514
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
515
+
510
516
  interface CenterProps {
511
517
  as?: string;
512
518
  }
@@ -526,6 +532,7 @@ declare const Center: vue.DefineComponent<vue.ExtractPropTypes<{
526
532
  }>> & Readonly<{}>, {
527
533
  as: string;
528
534
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
535
+
529
536
  interface AspectRatioProps {
530
537
  as?: string;
531
538
  /** Width ÷ height. `16 / 9` reads better than `1.777`. Default `16 / 9`. */
@@ -562,6 +569,7 @@ declare const AspectRatio: vue.DefineComponent<vue.ExtractPropTypes<{
562
569
  as: string;
563
570
  ratio: number;
564
571
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
572
+
565
573
  interface ScrollAreaProps {
566
574
  as?: string;
567
575
  /** Max height before scrolling starts. */
@@ -619,9 +627,9 @@ declare const ScrollArea: vue.DefineComponent<vue.ExtractPropTypes<{
619
627
  };
620
628
  }>> & Readonly<{}>, {
621
629
  as: string;
622
- fade: boolean;
623
- axis: "y" | "x" | "both";
624
630
  maxHeight: string;
631
+ axis: "both" | "x" | "y";
632
+ fade: boolean;
625
633
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
626
634
 
627
635
  /**
@@ -717,13 +725,14 @@ declare const Resizable: vue.DefineComponent<vue.ExtractPropTypes<{
717
725
  }>> & Readonly<{
718
726
  "onUpdate:size"?: ((...args: any[]) => any) | undefined;
719
727
  }>, {
720
- size: number;
721
728
  label: string;
722
729
  direction: "horizontal" | "vertical";
723
730
  defaultSize: number;
731
+ size: number;
724
732
  minSize: number;
725
733
  maxSize: number;
726
734
  snapPoints: readonly number[];
727
735
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
728
736
 
729
- export { AspectRatio, type AspectRatioProps, Center, type CenterProps, Container, type ContainerProps, Divider, type DividerProps, Grid, GridItem, type GridItemProps, type GridProps, HStack, Resizable, type ResizableProps, ScrollArea, type ScrollAreaProps, type SpaceToken, Spacer, type SpacerProps, Stack, type StackProps, VStack };
737
+ export { AspectRatio, Center, Container, Divider, Grid, GridItem, HStack, Resizable, ScrollArea, Spacer, Stack, VStack };
738
+ export type { AspectRatioProps, CenterProps, ContainerProps, DividerProps, GridItemProps, GridProps, ResizableProps, ScrollAreaProps, SpaceToken, SpacerProps, StackProps };