@ansh-ui/vue 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-B6OXKW5Q.js → chunk-AL4PPK25.js} +5 -2
- package/dist/chunk-AL4PPK25.js.map +1 -0
- package/dist/{chunk-2VSROZ2N.js → chunk-D3HH726R.js} +152 -144
- package/dist/chunk-D3HH726R.js.map +1 -0
- package/dist/{chunk-5BQEZYG6.cjs → chunk-EDAF7RAN.cjs} +163 -155
- package/dist/chunk-EDAF7RAN.cjs.map +1 -0
- package/dist/{chunk-TMG3M6TK.js → chunk-G2OX2NH2.js} +3 -3
- package/dist/chunk-G2OX2NH2.js.map +1 -0
- package/dist/{chunk-SOYRICHU.js → chunk-G3EIU6VM.js} +14 -8
- package/dist/chunk-G3EIU6VM.js.map +1 -0
- package/dist/{chunk-KCA7RNJ4.cjs → chunk-IHH6KMBY.cjs} +239 -5
- package/dist/chunk-IHH6KMBY.cjs.map +1 -0
- package/dist/{chunk-J2LA4GRP.cjs → chunk-IO6WJEJI.cjs} +122 -120
- package/dist/chunk-IO6WJEJI.cjs.map +1 -0
- package/dist/{chunk-IOXGBPOV.cjs → chunk-JJBYF7AH.cjs} +14 -8
- package/dist/chunk-JJBYF7AH.cjs.map +1 -0
- package/dist/{chunk-Z7XOFKM4.cjs → chunk-KKCZ5RUE.cjs} +4 -2
- package/dist/chunk-KKCZ5RUE.cjs.map +1 -0
- package/dist/{chunk-6ABPGOJP.js → chunk-LFGAOD32.js} +4 -2
- package/dist/chunk-LFGAOD32.js.map +1 -0
- package/dist/{chunk-EISHOEB6.cjs → chunk-MWGVDY6K.cjs} +3 -3
- package/dist/chunk-MWGVDY6K.cjs.map +1 -0
- package/dist/{chunk-FVKLCGA4.js → chunk-NJMTWLT2.js} +123 -121
- package/dist/chunk-NJMTWLT2.js.map +1 -0
- package/dist/{chunk-T425FIC7.js → chunk-NKRPZTQA.js} +238 -5
- package/dist/chunk-NKRPZTQA.js.map +1 -0
- package/dist/{chunk-JQ4YLXXM.cjs → chunk-PNR4RQ4T.cjs} +5 -2
- package/dist/chunk-PNR4RQ4T.cjs.map +1 -0
- package/dist/data.cjs +16 -16
- package/dist/data.d.cts +54 -52
- package/dist/data.d.ts +54 -52
- package/dist/data.js +1 -1
- package/dist/form.cjs +36 -36
- package/dist/form.d.cts +53 -45
- package/dist/form.d.ts +53 -45
- package/dist/form.js +1 -1
- package/dist/index.cjs +208 -180
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -8
- package/dist/index.d.ts +33 -8
- package/dist/index.js +31 -15
- package/dist/index.js.map +1 -1
- package/dist/layout.cjs +13 -13
- package/dist/layout.d.cts +23 -14
- package/dist/layout.d.ts +23 -14
- package/dist/layout.js +1 -1
- package/dist/motion.cjs +11 -11
- package/dist/motion.d.cts +41 -37
- package/dist/motion.d.ts +41 -37
- package/dist/motion.js +1 -1
- package/dist/navigation.cjs +13 -9
- package/dist/navigation.d.cts +125 -4
- package/dist/navigation.d.ts +125 -4
- package/dist/navigation.js +2 -2
- package/dist/overlay.cjs +14 -14
- package/dist/overlay.d.cts +36 -33
- package/dist/overlay.d.ts +36 -33
- package/dist/overlay.js +2 -2
- package/dist/{position-Cn7qP1pn.d.cts → position-CiY171HP.d.cts} +2 -1
- package/dist/{position-Cn7qP1pn.d.ts → position-CiY171HP.d.ts} +2 -1
- package/dist/primitives.cjs +6 -6
- package/dist/primitives.d.cts +6 -5
- package/dist/primitives.d.ts +6 -5
- package/dist/primitives.js +1 -1
- package/dist/{sidebar-CTZ-Ckko.d.ts → sidebar-B9zDHMbn.d.cts} +5 -4
- package/dist/{sidebar-CQqEmpid.d.cts → sidebar-DMrKHqZ5.d.ts} +5 -4
- package/dist/styles.css +464 -0
- package/dist/{utils-IKPG3zcC.d.cts → utils-D4XwXDeX.d.cts} +2 -1
- package/dist/{utils-IKPG3zcC.d.ts → utils-D4XwXDeX.d.ts} +2 -1
- package/package.json +3 -3
- package/dist/chunk-2VSROZ2N.js.map +0 -1
- package/dist/chunk-5BQEZYG6.cjs.map +0 -1
- package/dist/chunk-6ABPGOJP.js.map +0 -1
- package/dist/chunk-B6OXKW5Q.js.map +0 -1
- package/dist/chunk-EISHOEB6.cjs.map +0 -1
- package/dist/chunk-FVKLCGA4.js.map +0 -1
- package/dist/chunk-IOXGBPOV.cjs.map +0 -1
- package/dist/chunk-J2LA4GRP.cjs.map +0 -1
- package/dist/chunk-JQ4YLXXM.cjs.map +0 -1
- package/dist/chunk-KCA7RNJ4.cjs.map +0 -1
- package/dist/chunk-SOYRICHU.js.map +0 -1
- package/dist/chunk-T425FIC7.js.map +0 -1
- package/dist/chunk-TMG3M6TK.js.map +0 -1
- package/dist/chunk-Z7XOFKM4.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/text.ts","../src/components/providers.ts","../src/components/motion.ts"],"names":["defineComponent","getTicker","onBeforeUnmount","computed","ref","onMounted","watch","h","prefersReducedMotion"],"mappings":"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","file":"chunk-6ABPGOJP.js","sourcesContent":["import {\n type CSSProperties,\n type PropType,\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n} from 'vue'\nimport {\n type ColorInput,\n type EasingInput,\n type StaggerFrom,\n createGradient,\n getTicker,\n observeIntersection,\n prefersReducedMotion,\n resolveEasing,\n resolvePalette,\n stagger,\n} from '@ansh-ui/core'\n\n/**\n * Text components.\n *\n * Hand-written rather than factory-generated, because text animation has a requirement no generic\n * factory can meet: **the accessible text must never be the animated text.** Splitting a heading\n * into per-character spans is fine visually and an accessibility failure if that structure is what\n * a screen reader reads — some engines announce \"W. E. L. C. O. M. E.\" and you cannot rely on which.\n *\n * The pattern used here: the real string lives in a visually-hidden element that remains the\n * accessible representation, and the whole animated structure is `aria-hidden`.\n */\n\nconst VISUALLY_HIDDEN: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n borderWidth: '0',\n}\n\n// ---------------------------------------------------------------------------\n// GradientText\n// ---------------------------------------------------------------------------\n\n/**\n * Text filled with a perceptual gradient.\n *\n * The stops are generated through the OKLab interpolator rather than handed to CSS as two\n * endpoints. That is the entire point: a CSS `linear-gradient(#0275f4, #9f0550)` passes through a\n * desaturated grey-brown at its midpoint, and on text — where the gradient crosses a narrow band —\n * the midpoint is exactly where the eye lands.\n *\n * The optional animation is a CSS `background-position` shift rather than a JS loop, because for a\n * single non-interactive property the browser's compositor beats anything we could do on the main\n * thread.\n */\nexport const GradientText = defineComponent({\n name: 'AnshGradientText',\n props: {\n text: { type: String, default: '' },\n colors: {\n type: [Array, String] as PropType<readonly ColorInput[] | string>,\n default: undefined,\n },\n /** Gradient angle in degrees. */\n angle: { type: Number, default: 100 },\n /** Seconds per cycle. `0` holds a static gradient. */\n duration: { type: Number, default: 0 },\n /** Interpolated stops handed to CSS. More is smoother. */\n stops: { type: Number, default: 16 },\n as: { type: String, default: 'span' },\n },\n\n setup(props, { slots }) {\n const gradient = computed(() => {\n const palette = resolvePalette(props.colors as never)\n // Duplicated so an animated background-position shift wraps seamlessly rather than jumping.\n const looped = props.duration > 0 ? [...palette, ...palette] : palette\n return createGradient(looped, { space: 'oklab' }).toCss(`${props.angle}deg`, props.stops)\n })\n\n const animated = computed(() => props.duration > 0 && !prefersReducedMotion())\n\n return () =>\n h(\n props.as,\n {\n style: {\n backgroundImage: gradient.value,\n backgroundSize: animated.value ? '200% 100%' : '100% 100%',\n backgroundClip: 'text',\n WebkitBackgroundClip: 'text',\n color: 'transparent',\n WebkitTextFillColor: 'transparent',\n display: 'inline-block',\n ...(animated.value\n ? { animation: `ansh-gradient-shift ${props.duration}s linear infinite` }\n : {}),\n } as CSSProperties,\n },\n [\n slots.default?.() ?? props.text,\n // The keyframes are injected inline so `<GradientText :duration=\"6\" />` works with no\n // stylesheet import. Identical rules from multiple instances are deduplicated by the\n // browser, so this costs nothing at scale.\n animated.value\n ? h('style', {\n innerHTML:\n '@keyframes ansh-gradient-shift{from{background-position:0% 50%}' +\n 'to{background-position:200% 50%}}',\n })\n : null,\n ],\n )\n },\n})\n\n// ---------------------------------------------------------------------------\n// AnimatedText\n// ---------------------------------------------------------------------------\n\ninterface Unit {\n text: string\n /** Whitespace is rendered as a plain gap rather than an animated unit. */\n space: boolean\n}\n\n/**\n * Text that reveals unit by unit.\n *\n * The split happens during render, so the markup is server-rendered and the real text is present in\n * the HTML source for SEO and for readers without JavaScript. The animation runs on the shared\n * ticker, so a page full of these shares one clock and cannot drift apart.\n *\n * Under `prefers-reduced-motion` the text renders in its final state and never animates.\n */\nexport const AnimatedText = defineComponent({\n name: 'AnshAnimatedText',\n props: {\n text: { type: String, required: true },\n /** Split granularity. */\n by: { type: String as PropType<'chars' | 'words'>, default: 'chars' },\n /** Seconds per unit. */\n duration: { type: Number, default: 0.6 },\n /** Seconds between units. */\n each: { type: Number, default: 0.03 },\n /** Where the reveal wave begins. */\n from: { type: [String, Number] as PropType<StaggerFrom>, default: 'first' },\n easing: { type: [String, Function, Array] as PropType<EasingInput>, default: 'cinematic' },\n /** Distance each unit travels into place, in pixels. */\n distance: { type: Number, default: 18 },\n /** Starting blur in pixels — the \"focus in\" look. */\n blur: { type: Number, default: 0 },\n /** Starting rotation in degrees. */\n rotate: { type: Number, default: 0 },\n /** Clip each unit so it rises from behind a mask. */\n mask: { type: Boolean, default: false },\n /** Wait until scrolled into view. */\n whenInView: { type: Boolean, default: true },\n /** Replay every time it re-enters the viewport. */\n repeat: { type: Boolean, default: false },\n /** Seconds to wait before starting. */\n delay: { type: Number, default: 0 },\n as: { type: String, default: 'span' },\n },\n emits: ['complete'],\n\n setup(props, { emit }) {\n const host = ref<HTMLElement | null>(null)\n const unitNodes = ref<(HTMLElement | null)[]>([])\n\n const units = computed<Unit[]>(() => {\n if (props.by === 'words') {\n return props.text\n .split(/(\\s+)/)\n .filter((token) => token.length > 0)\n .map((token) => ({ text: token, space: /^\\s+$/.test(token) }))\n }\n\n // Grapheme-aware: `[...string]` splits by code point, which breaks emoji with modifiers and\n // combining accents into multiple \"characters\".\n const graphemes =\n typeof Intl !== 'undefined' && 'Segmenter' in Intl\n ? Array.from(\n new Intl.Segmenter(undefined, { granularity: 'grapheme' }).segment(props.text),\n (s) => s.segment,\n )\n : Array.from(props.text)\n\n return graphemes.map((character) => ({ text: character, space: /^\\s$/.test(character) }))\n })\n\n let stopTicker: (() => void) | null = null\n let stopObserver: (() => void) | null = null\n\n onMounted(() => {\n const element = host.value\n if (!element) return\n\n if (prefersReducedMotion()) {\n emit('complete')\n return\n }\n\n const ease = resolveEasing(props.easing)\n const animatedUnits = units.value.filter((u) => !u.space)\n const delayFor = stagger(animatedUnits.length, { each: props.each, from: props.from })\n\n const targets: { node: HTMLElement; delay: number }[] = []\n let animationIndex = 0\n units.value.forEach((unit, i) => {\n if (unit.space) return\n const node = unitNodes.value[i]\n if (node) targets.push({ node, delay: props.delay + delayFor(animationIndex) })\n animationIndex++\n })\n\n const apply = (node: HTMLElement, progress: number): void => {\n const eased = ease(progress)\n const inverse = 1 - eased\n node.style.opacity = String(eased)\n const parts = [`translate3d(0, ${(props.distance * inverse).toFixed(2)}px, 0)`]\n if (props.rotate !== 0) parts.push(`rotate(${(props.rotate * inverse).toFixed(2)}deg)`)\n node.style.transform = parts.join(' ')\n if (props.blur > 0) {\n const amount = props.blur * inverse\n node.style.filter = amount > 0.05 ? `blur(${amount.toFixed(2)}px)` : ''\n }\n }\n\n const settle = (node: HTMLElement): void => {\n node.style.opacity = ''\n node.style.transform = ''\n node.style.filter = ''\n // Drop the compositor promotion once at rest, so a page of these doesn't hold hundreds of\n // permanent layers.\n node.style.willChange = ''\n }\n\n const reset = (): void => {\n for (const { node } of targets) apply(node, 0)\n }\n\n let elapsed = 0\n let running = false\n\n const start = (): void => {\n if (running) return\n running = true\n elapsed = 0\n for (const { node } of targets) node.style.willChange = 'opacity, transform'\n reset()\n\n stopTicker = getTicker().add(\n ({ delta }) => {\n elapsed += delta\n let allDone = true\n\n for (const target of targets) {\n const local = elapsed - target.delay\n if (local < 0) {\n allDone = false\n continue\n }\n const progress = props.duration <= 0 ? 1 : local / props.duration\n if (progress >= 1) {\n settle(target.node)\n continue\n }\n apply(target.node, progress)\n allDone = false\n }\n\n if (allDone) {\n stopTicker?.()\n stopTicker = null\n running = false\n emit('complete')\n }\n },\n { phase: 'write', name: 'AnimatedText' },\n )\n }\n\n // Hide before the browser paints. `onMounted` in Vue runs after the DOM is inserted but\n // before paint, so unlike React's `useEffect` there is no flash to guard against here.\n reset()\n\n if (!props.whenInView) {\n start()\n return\n }\n\n stopObserver = observeIntersection(\n element,\n (entry) => {\n if (entry.isIntersecting) {\n start()\n } else if (props.repeat) {\n stopTicker?.()\n stopTicker = null\n running = false\n reset()\n }\n },\n { threshold: 0.2, rootMargin: '0px 0px -8% 0px' },\n )\n })\n\n onBeforeUnmount(() => {\n stopObserver?.()\n stopTicker?.()\n stopObserver = null\n stopTicker = null\n })\n\n return () =>\n h(props.as, { ref: host, style: { display: 'inline-block' } as CSSProperties }, [\n // The accessible representation: the real string, unfragmented.\n h('span', { style: VISUALLY_HIDDEN }, props.text),\n\n h(\n 'span',\n { 'aria-hidden': 'true' },\n units.value.map((unit, i) => {\n if (unit.space) return h('span', {}, unit.text)\n\n const inner = h(\n 'span',\n {\n ref: (node: unknown) => {\n unitNodes.value[i] = (node as HTMLElement | null) ?? null\n },\n style: { display: 'inline-block' } as CSSProperties,\n },\n unit.text,\n )\n\n return props.mask\n ? h(\n 'span',\n {\n style: {\n display: 'inline-block',\n overflow: 'hidden',\n // Without this, descenders (g, y, p) are clipped by the mask box.\n verticalAlign: 'top',\n } as CSSProperties,\n },\n [inner],\n )\n : inner\n }),\n ),\n ])\n },\n})\n","import {\n type ComputedRef,\n type InjectionKey,\n type PropType,\n computed,\n defineComponent,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n watch,\n} from 'vue'\nimport {\n type ReducedMotionMode,\n attachLifecycle,\n getTicker,\n setReducedMotionMode,\n} from '@ansh-ui/core'\nimport { applyTheme, resolveTheme } from '@ansh-ui/tokens'\n\n/**\n * Application-level configuration providers — the Vue counterpart of `@ansh-ui/react`'s\n * `providers.tsx`. `provide`/`inject` replace React context; everything else about the two designs\n * is intentionally identical, because the underlying correctness constraints (no hydration\n * mismatch, no theme flash) don't change with the framework.\n */\n\n// ---------------------------------------------------------------------------\n// MotionConfig\n// ---------------------------------------------------------------------------\n\nexport interface MotionConfigValue {\n reducedMotion: ReducedMotionMode\n /** Global playback rate. `0.5` is slow motion across every animation on the page. */\n timeScale: number\n /** Pin adaptive quality, or `null` to let the frame budget decide. */\n quality: number | null\n}\n\nconst DEFAULT_MOTION_CONFIG: MotionConfigValue = {\n reducedMotion: 'auto',\n timeScale: 1,\n quality: null,\n}\n\nconst MotionConfigKey: InjectionKey<ComputedRef<MotionConfigValue>> = Symbol('ansh-motion-config')\n\n/**\n * Application-level motion configuration.\n *\n * Optional — every component works without it. Mount it once at the root when you need app-wide\n * control:\n *\n * ```vue\n * <MotionConfig :reduced-motion=\"userPrefersCalm ? 'always' : 'auto'\">\n * <App />\n * </MotionConfig>\n * ```\n *\n * `reducedMotion=\"always\"` is genuinely useful in production, as the backing for an in-app \"reduce\n * motion\" setting — many users who want calmer interfaces have never found the OS toggle.\n */\nexport const MotionConfig = defineComponent({\n name: 'AnshMotionConfig',\n props: {\n reducedMotion: { type: String as PropType<ReducedMotionMode>, default: 'auto' },\n timeScale: { type: Number, default: 1 },\n quality: { type: Number as PropType<number | null>, default: null },\n /**\n * Pause every animation while the document is hidden. Default `true`.\n *\n * Leave this on. Animating a background tab burns battery and spins fans for output nobody can\n * see, and it is the most common performance complaint about animation-heavy sites.\n */\n pauseWhenHidden: { type: Boolean, default: true },\n pauseWhenBlurred: { type: Boolean, default: false },\n respectBattery: { type: Boolean, default: true },\n },\n setup(props, { slots }) {\n watch(\n () => props.reducedMotion,\n (mode) => setReducedMotionMode(mode),\n { immediate: true },\n )\n watch(\n () => props.timeScale,\n (scale) => {\n getTicker().timeScale = scale\n },\n { immediate: true },\n )\n watch(\n () => props.quality,\n (quality) => {\n if (quality !== null) getTicker().lockQuality(quality)\n },\n { immediate: true },\n )\n\n let detach: (() => void) | null = null\n watch(\n () => [props.pauseWhenHidden, props.pauseWhenBlurred, props.respectBattery] as const,\n ([pauseWhenHidden, pauseWhenBlurred, respectBattery]) => {\n detach?.()\n detach = attachLifecycle(getTicker(), { pauseWhenHidden, pauseWhenBlurred, respectBattery })\n },\n { immediate: true },\n )\n onBeforeUnmount(() => detach?.())\n\n provide(\n MotionConfigKey,\n computed(() => ({\n reducedMotion: props.reducedMotion,\n timeScale: props.timeScale,\n quality: props.quality,\n })),\n )\n\n return () => slots.default?.()\n },\n})\n\n/** Read the nearest {@link MotionConfig}. Returns sensible defaults with no provider present. */\nexport function useMotionConfig(): ComputedRef<MotionConfigValue> {\n return inject(\n MotionConfigKey,\n computed(() => DEFAULT_MOTION_CONFIG),\n )\n}\n\n// ---------------------------------------------------------------------------\n// ThemeProvider\n// ---------------------------------------------------------------------------\n\nexport type ThemeSetting = 'light' | 'dark' | 'system'\n\nexport interface ThemeContextValue {\n /** What was requested, including `'system'`. */\n theme: ThemeSetting\n /** What is actually rendering. `'system'` is resolved to one or the other. */\n resolved: 'light' | 'dark'\n setTheme: (theme: ThemeSetting) => void\n}\n\nconst DEFAULT_THEME: ThemeContextValue = { theme: 'system', resolved: 'light', setTheme: () => {} }\n\nconst ThemeKey: InjectionKey<ComputedRef<ThemeContextValue>> = Symbol('ansh-theme')\n\n/**\n * Theme control over the `@ansh-ui/tokens` stylesheet.\n *\n * Sets `data-theme` on `<html>`, which the token stylesheet already understands. Two details that\n * are easy to get wrong and are handled here:\n *\n * **`'system'` removes the attribute rather than writing a resolved value.** The token stylesheet\n * guards its `prefers-color-scheme` rule with `:root:not([data-theme])`, so removing the attribute\n * hands control back to the OS — and, importantly, means the theme keeps following the OS if the\n * user changes it while the page is open.\n *\n * **The initial render always reports `'light'`.** Reading `localStorage` during setup would be a\n * hydration mismatch, since the server has no access to it. The stored value is applied `onMounted`.\n * To avoid a flash of the wrong theme, ship the small inline script from {@link themeScript} in your\n * document `<head>` — that is the only way to set the attribute before first paint. `@ansh-ui/nuxt`\n * does this automatically.\n */\nexport const ThemeProvider = defineComponent({\n name: 'AnshThemeProvider',\n props: {\n /** Initial setting. Default `'system'`. */\n defaultTheme: { type: String as PropType<ThemeSetting>, default: 'system' },\n /** Persist the choice under this `localStorage` key. Pass `null` to disable. */\n storageKey: { type: String as PropType<string | null>, default: 'ansh-theme' },\n },\n setup(props, { slots }) {\n const theme = ref<ThemeSetting>(props.defaultTheme)\n const resolved = ref<'light' | 'dark'>('light')\n\n const setTheme = (next: ThemeSetting): void => {\n theme.value = next\n }\n\n // Read the stored preference after mount, never during setup.\n let mediaQuery: MediaQueryList | null = null\n let onMediaChange: (() => void) | null = null\n\n const syncMedia = (): void => {\n mediaQuery?.removeEventListener('change', onMediaChange!)\n mediaQuery = null\n onMediaChange = null\n if (theme.value !== 'system' || typeof matchMedia !== 'function') return\n mediaQuery = matchMedia('(prefers-color-scheme: dark)')\n onMediaChange = () => {\n resolved.value = mediaQuery!.matches ? 'dark' : 'light'\n }\n mediaQuery.addEventListener('change', onMediaChange)\n }\n\n watch(\n theme,\n (next) => {\n applyTheme(next)\n resolved.value = resolveTheme()\n syncMedia()\n if (props.storageKey) {\n try {\n localStorage.setItem(props.storageKey, next)\n } catch {\n // Storage can throw in private browsing or with cookies disabled. A theme preference\n // is not worth breaking the page over.\n }\n }\n },\n { flush: 'post' },\n )\n\n // Runs once, after mount — the `watch` above has already applied `defaultTheme` by then, and\n // this only overrides it if something was actually stored.\n if (typeof document !== 'undefined') {\n queueMicrotask(() => {\n if (!props.storageKey) return\n try {\n const stored = localStorage.getItem(props.storageKey)\n if (stored === 'light' || stored === 'dark' || stored === 'system') theme.value = stored\n } catch {\n // As above.\n }\n })\n // Apply the default immediately too, so there is no gap before the microtask above runs.\n applyTheme(theme.value)\n resolved.value = resolveTheme()\n syncMedia()\n }\n\n onBeforeUnmount(() => mediaQuery?.removeEventListener('change', onMediaChange!))\n\n provide(\n ThemeKey,\n computed(() => ({ theme: theme.value, resolved: resolved.value, setTheme })),\n )\n\n return () => slots.default?.()\n },\n})\n\nexport function useTheme(): ComputedRef<ThemeContextValue> {\n return inject(\n ThemeKey,\n computed(() => DEFAULT_THEME),\n )\n}\n\n/**\n * The blocking script that prevents a theme flash.\n *\n * Inject this in `<head>`, before any stylesheet. It reads the stored preference and sets\n * `data-theme` synchronously, before the browser paints — the only point at which it can be done\n * without a visible flash. Deliberately tiny and dependency-free.\n *\n * `@ansh-ui/nuxt` injects this automatically; a bare Vue app should call it from `index.html`.\n */\nexport function themeScript(storageKey = 'ansh-theme'): string {\n return (\n `(function(){try{var t=localStorage.getItem(${JSON.stringify(storageKey)});` +\n `if(t==='light'||t==='dark'){document.documentElement.setAttribute('data-theme',t)}}` +\n `catch(e){}})()`\n )\n}\n","import {\n Comment,\n type PropType,\n Text,\n type VNode,\n cloneVNode,\n computed,\n defineComponent,\n h,\n onMounted,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\nimport {\n type AnimationOptions,\n type EasingInput,\n type SpringOptions,\n getTicker,\n prefersReducedMotion,\n springs,\n} from '@ansh-ui/core'\nimport { useAnimate } from '../composables/use-motion'\nimport { useInView } from '../composables/use-observers'\nimport { cx } from '../primitives/utils'\n\n/**\n * Declarative motion — the Vue counterpart of `@ansh-ui/react`'s `Motion`/`AnimatePresence`/\n * `Draggable`.\n *\n * A deliberately **small** subset of what a full motion library does: transform properties and\n * opacity, animated from `initial` to `animate`, plus hover and press states and an exit animation\n * when paired with `AnimatePresence`.\n *\n * That scope is a decision, not a gap. Layout animation (FLIP), shared-element transitions and\n * variant propagation each need machinery an order of magnitude larger than this file, and a\n * half-implementation of them is worse than none — it works in the demo and fails on the real page.\n * For those, use a dedicated library; for the 90% case of \"fade this in, slide that up, spring the\n * card on hover\", this costs a fraction of the bundle.\n *\n * Values are written straight to the element's `style` from the ticker's write phase, outside Vue's\n * reactivity — the same principle `useMotionStyle` documents in `composables/use-motion.ts`. `Motion`\n * and `Draggable` are built on `useAnimate()` (scope-bound imperative animation, auto-stopping the\n * previous run) and `useInView()` (the `whileInView` trigger) rather than calling the ticker\n * primitives from scratch, so cleanup and scope-disposal are inherited for free.\n */\n\nexport interface MotionValues {\n opacity?: number\n x?: number\n y?: number\n scale?: number\n scaleX?: number\n scaleY?: number\n rotate?: number\n /** Blur radius in px. */\n blur?: number\n}\n\nexport interface MotionTransition {\n /** Seconds. Ignored when `spring` is set. Default `0.4`. */\n duration?: number\n /** Seconds to wait. Default `0`. */\n delay?: number\n easing?: EasingInput\n /** Use a spring instead of a tween. `true` uses the `smooth` preset. */\n spring?: boolean | SpringOptions | keyof typeof springs\n}\n\nconst DEFAULTS: Required<MotionValues> = {\n opacity: 1,\n x: 0,\n y: 0,\n scale: 1,\n scaleX: 1,\n scaleY: 1,\n rotate: 0,\n blur: 0,\n}\n\n/** Compose the values into a transform string plus the properties that aren't transforms. */\nfunction applyValues(node: HTMLElement, values: Required<MotionValues>): void {\n const transform =\n `translate3d(${values.x}px, ${values.y}px, 0)` +\n ` scale(${values.scale * values.scaleX}, ${values.scale * values.scaleY})` +\n ` rotate(${values.rotate}deg)`\n\n node.style.transform = transform\n node.style.opacity = String(values.opacity)\n // Only written when non-zero: an always-present `filter` creates a containing block and a new\n // stacking context, which changes how `position: fixed` descendants resolve.\n node.style.filter = values.blur > 0 ? `blur(${values.blur}px)` : ''\n}\n\nfunction resolve(\n values: MotionValues | undefined,\n base: Required<MotionValues>,\n): Required<MotionValues> {\n return { ...base, ...values }\n}\n\n/** Drop whitespace-only text nodes and `v-if=\"false\"` comment placeholders from a slot's output. */\nfunction normalizeChildren(nodes: VNode[] | undefined): VNode[] {\n return (nodes ?? []).filter((node) => {\n if (node.type === Comment) return false\n if (node.type === Text && typeof node.children === 'string' && node.children.trim() === '') {\n return false\n }\n return true\n })\n}\n\n// --- Motion -----------------------------------------------------------------\n\n/**\n * An animated element.\n *\n * ```vue\n * <Motion :initial=\"{ opacity: 0, y: 24 }\" :animate=\"{ opacity: 1, y: 0 }\" while-in-view>\n * <Card />\n * </Motion>\n * ```\n */\nexport const Motion = defineComponent({\n name: 'AnshMotion',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n /** Starting values. Applied before the first paint. */\n initial: { type: Object as PropType<MotionValues>, default: undefined },\n /** Target values. Changing these animates to the new target. */\n animate: { type: Object as PropType<MotionValues>, default: undefined },\n // Declared so it lands here rather than in `attrs`: `AnimatePresence` reads it off the vnode's\n // props when the child is removed and swaps it into `animate`. Left undeclared, it would reach\n // the DOM as an unknown `exit` attribute.\n exit: { type: Object as PropType<MotionValues>, default: undefined },\n transition: { type: Object as PropType<MotionTransition>, default: undefined },\n whileHover: { type: Object as PropType<MotionValues>, default: undefined },\n whileTap: { type: Object as PropType<MotionValues>, default: undefined },\n /** Animate to `animate` only once scrolled into view. */\n whileInView: { type: Boolean, default: false },\n /** Fraction visible before `whileInView` triggers. Default `0.2`. */\n inViewAmount: { type: Number, default: 0.2 },\n },\n setup(props, { attrs, slots, expose }) {\n const node = ref<HTMLElement | null>(null)\n // Plain closure state, deliberately outside Vue's reactivity — a value driven by the ticker\n // changes up to 60 times a second, and a `ref` here would flush a reactive effect on every one.\n let current = resolve(props.initial, DEFAULTS)\n const start = useAnimate()\n\n expose({\n get element() {\n return node.value\n },\n })\n\n // Applied in `onMounted`, not a plain function call during setup: the DOM node the template\n // `ref` points at only exists once Vue has patched it in, which — for the initial render — is\n // still before the browser's next paint. That ordering is what avoids the element flashing at\n // full opacity for one frame before the \"hidden\" `initial` state ever gets applied.\n //\n // The first run of the `animate` target is kicked off here too, rather than from the `watch`\n // below with `immediate: true`. Vue runs an immediate watcher's callback *synchronously during\n // `setup()`*, regardless of `flush` — `flush: 'post'` only defers a watcher's *subsequent*\n // re-runs, not its immediate one. `node.value` is still null at that point (the element hasn't\n // mounted yet), so `runTo` would silently no-op and the component would never animate to its\n // initial `animate` target. `onMounted` is the actual first point at which `node.value` exists.\n onMounted(() => {\n if (!node.value) return\n applyValues(node.value, current)\n if (inView.value) runTo(resolve(props.animate, DEFAULTS))\n })\n\n const runTo = (next: Required<MotionValues>, options?: MotionTransition): void => {\n const element = node.value\n if (!element) return\n\n const from = { ...current }\n const springOption = options?.spring ?? props.transition?.spring\n\n const animationOptions: AnimationOptions<number> = {\n ...((options?.delay ?? props.transition?.delay) !== undefined\n ? { delay: options?.delay ?? props.transition?.delay ?? 0 }\n : null),\n ...(springOption\n ? {\n spring:\n springOption === true\n ? springs.default\n : typeof springOption === 'string'\n ? springs[springOption]\n : springOption,\n }\n : {\n duration: options?.duration ?? props.transition?.duration ?? 0.4,\n ...((options?.easing ?? props.transition?.easing)\n ? { easing: (options?.easing ?? props.transition?.easing)! }\n : null),\n }),\n onUpdate: (t: number) => {\n // One scalar drives every property, so all of them stay in lockstep. Animating each\n // independently would need one ticker subscription per property and they would drift\n // apart under a spring, which is not time-based.\n const frame = {} as Required<MotionValues>\n for (const key of Object.keys(DEFAULTS) as Array<keyof MotionValues>) {\n frame[key] = from[key] + (next[key] - from[key]) * t\n }\n current = frame\n applyValues(element, frame)\n },\n onComplete: () => {\n current = next\n applyValues(element, next)\n },\n }\n\n // `useAnimate()` stops any in-flight run of its own before starting the next, and again on\n // scope disposal — the two cleanup spots the React version's `controlsRef` handles by hand.\n start(0, 1, animationOptions)\n }\n\n // `whileInView` gating, via the same observer composable `useElementSize`/`useScrollProgress`\n // are built on. Always attached (harmless when `whileInView` is false — the observer simply\n // goes unused) rather than conditionally, since `inViewAmount` and `whileInView` are expected\n // to be set once and not toggled.\n const inViewState = useInView(node, { threshold: props.inViewAmount, once: true })\n const inView = computed(() => !props.whileInView || inViewState.value)\n\n // Animate to the target whenever it changes after mount (or when it scrolls into view). The\n // *first* run is handled explicitly in `onMounted` above, not here — see the comment there.\n // No `immediate: true`: this only needs to react to changes from here on.\n watch(\n [() => JSON.stringify(props.animate ?? null), inView],\n ([, isInView]) => {\n if (!isInView) return\n runTo(resolve(props.animate, DEFAULTS))\n },\n { flush: 'post' },\n )\n\n return () => {\n const { class: attrClass, style: attrStyle, ...restAttrs } = attrs as Record<string, unknown>\n\n const interaction: Record<string, unknown> = {}\n if (props.whileHover) {\n interaction.onMouseenter = () =>\n runTo(resolve({ ...props.animate, ...props.whileHover }, DEFAULTS))\n interaction.onMouseleave = () => runTo(resolve(props.animate, DEFAULTS))\n }\n if (props.whileTap) {\n interaction.onPointerdown = () =>\n runTo(resolve({ ...props.animate, ...props.whileTap }, DEFAULTS), { duration: 0.12 })\n interaction.onPointerup = () =>\n runTo(resolve({ ...props.animate, ...props.whileHover }, DEFAULTS))\n }\n\n return h(\n props.as,\n {\n ref: node,\n class: attrClass,\n // `will-change` is set once, statically. Toggling it per animation causes the compositor\n // to create and destroy a layer on every interaction, which is more expensive than the\n // hint saves.\n style: [{ willChange: 'transform, opacity' }, attrStyle],\n ...interaction,\n ...restAttrs,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- AnimatePresence ----------------------------------------------------------\n\nexport interface AnimatePresenceProps {\n /** Seconds to keep a removed child mounted. Default `0.35`. */\n exitDuration?: number\n}\n\n/**\n * Keep removed children mounted long enough to animate out.\n *\n * Vue unmounts a `v-for`/`v-if` item the instant it disappears from its source array, so an exit\n * animation never gets a chance to run. This holds departing children in its own state, plays their\n * `exit` values (swapped into `animate` on a cloned vnode), then drops them.\n *\n * Children **must** have stable `:key`s — that is how removals are detected at all. Without keys,\n * Vue reuses vnode positions and this sees no removal to animate, same as the React version.\n *\n * Vue's own `<TransitionGroup>` was considered instead of this hand-rolled reconciliation, but it\n * drives *CSS* transition/animation classes on move — it has no hook for \"swap this prop and let the\n * child's own animation system take it from here,\" which is what `exit` needs to compose with\n * `Motion`. Cloning the departing vnode with its `animate` prop swapped to `exit` is the direct\n * Vue-side equivalent of the React version's `cloneElement`.\n */\nexport const AnimatePresence = defineComponent({\n name: 'AnshAnimatePresence',\n props: {\n exitDuration: { type: Number, default: 0.35 },\n },\n setup(props, { slots }) {\n // Reading `slots.default()` inside a `computed` tracks whatever reactive state the parent's\n // slot closure reads (e.g. `v-for=\"item in items\"`), the same way Vue's own `<Transition>` and\n // `<KeepAlive>` track slot content — dependency tracking isn't scoped to \"this component's own\n // state\", it follows whichever reactive effect is active when the read happens.\n const currentChildren = computed(() => normalizeChildren(slots.default?.()))\n const keyOf = (node: VNode): string => String(node.key)\n const keysSignature = computed(() => currentChildren.value.map(keyOf).join('|'))\n\n const rendered = ref<VNode[]>(currentChildren.value)\n const timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n watch(\n [keysSignature, () => props.exitDuration],\n () => {\n const next = currentChildren.value\n const nextKeys = new Set(next.map(keyOf))\n const departing = rendered.value.filter((node) => !nextKeys.has(keyOf(node)))\n\n if (departing.length === 0) {\n // Straight replacement keeps updated props flowing to children that are still present.\n rendered.value = next\n return\n }\n\n // Keep the departing children in place, appended after the current set so they don't\n // reorder the survivors while they animate out.\n rendered.value = [...next, ...departing]\n\n const delay = prefersReducedMotion() ? 0 : props.exitDuration * 1000\n for (const node of departing) {\n const key = keyOf(node)\n const existing = timers.get(key)\n if (existing !== undefined) clearTimeout(existing)\n timers.set(\n key,\n setTimeout(() => {\n rendered.value = rendered.value.filter((entry) => keyOf(entry) !== key)\n timers.delete(key)\n }, delay),\n )\n }\n },\n { flush: 'post' },\n )\n\n onScopeDispose(() => {\n for (const timer of timers.values()) clearTimeout(timer)\n timers.clear()\n })\n\n return () => {\n const nextKeys = new Set(currentChildren.value.map(keyOf))\n\n return rendered.value.map((node) => {\n const leaving = !nextKeys.has(keyOf(node))\n if (!leaving) return node\n\n // A departing child animates to its `exit` values by having them swapped into `animate`.\n const nodeProps = (node.props ?? {}) as {\n exit?: MotionValues\n transition?: MotionTransition\n }\n return cloneVNode(node, {\n animate: nodeProps.exit ?? { opacity: 0, scale: 0.96 },\n transition: { duration: props.exitDuration, ...nodeProps.transition },\n })\n })\n }\n },\n})\n\n// --- Draggable ----------------------------------------------------------------\n\nexport interface DraggableProps {\n /** Constrain movement. */\n axis?: 'x' | 'y' | 'both'\n /** Bounds relative to the starting position, in px. */\n bounds?: { left?: number; right?: number; top?: number; bottom?: number }\n /** Spring back to the origin on release. */\n snapBack?: boolean\n /** Carry momentum after release. Default `true` when not snapping back. */\n momentum?: boolean\n}\n\n/**\n * A draggable surface with inertia.\n *\n * The momentum on release is what separates a drag that feels physical from one that stops dead.\n * Velocity is measured over the last few pointer samples rather than the last two — a single pair\n * of events is dominated by whatever jitter the final sample had, which produces a flick in the\n * wrong direction often enough to be noticeable.\n *\n * `onDragStart`/`onDragEnd` from the React version become `dragStart`/`dragEnd` emits — this\n * package's convention for event-callback props (see `Input`'s `change`/`clear` emits).\n */\nexport const Draggable = defineComponent({\n name: 'AnshDraggable',\n inheritAttrs: false,\n props: {\n axis: { type: String as PropType<'x' | 'y' | 'both'>, default: 'both' },\n bounds: {\n type: Object as PropType<{ left?: number; right?: number; top?: number; bottom?: number }>,\n default: undefined,\n },\n snapBack: { type: Boolean, default: false },\n momentum: { type: Boolean, default: undefined },\n },\n emits: ['dragStart', 'dragEnd'],\n setup(props, { attrs, slots, emit, expose }) {\n const node = ref<HTMLDivElement | null>(null)\n let offset = { x: 0, y: 0 }\n const dragging = ref(false)\n const runAnimation = useAnimate()\n\n let stopMomentum: (() => void) | null = null\n // Not a concern the React version handles — Vue's pervasive scope-disposal discipline makes it\n // cheap to add here: stop an in-flight momentum glide if the component unmounts mid-gesture,\n // rather than leaving a ticker subscription writing to a detached node.\n onScopeDispose(() => stopMomentum?.())\n\n expose({\n get element() {\n return node.value\n },\n get offset() {\n return offset\n },\n })\n\n const clamp = (value: { x: number; y: number }): { x: number; y: number } => ({\n x: Math.min(\n Math.max(value.x, props.bounds?.left ?? -Infinity),\n props.bounds?.right ?? Infinity,\n ),\n y: Math.min(\n Math.max(value.y, props.bounds?.top ?? -Infinity),\n props.bounds?.bottom ?? Infinity,\n ),\n })\n\n const write = (value: { x: number; y: number }): void => {\n if (node.value) node.value.style.transform = `translate3d(${value.x}px, ${value.y}px, 0)`\n }\n\n const onPointerdown = (event: PointerEvent): void => {\n stopMomentum?.()\n stopMomentum = null\n\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n dragging.value = true\n emit('dragStart')\n\n const useMomentum = props.momentum ?? !props.snapBack\n const start = { x: event.clientX, y: event.clientY }\n const origin = { ...offset }\n // A short ring of recent samples, for a velocity estimate that isn't hostage to the last\n // event.\n const samples: Array<{ x: number; y: number; t: number }> = []\n\n const onMove = (moveEvent: PointerEvent): void => {\n const next = clamp({\n x: props.axis === 'y' ? origin.x : origin.x + (moveEvent.clientX - start.x),\n y: props.axis === 'x' ? origin.y : origin.y + (moveEvent.clientY - start.y),\n })\n offset = next\n write(next)\n\n samples.push({ x: next.x, y: next.y, t: performance.now() })\n if (samples.length > 5) samples.shift()\n }\n\n const onUp = (): void => {\n dragging.value = false\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n window.removeEventListener('pointercancel', onUp)\n\n if (props.snapBack) {\n runAnimation(0, 1, {\n spring: springs.subtle,\n onUpdate: (t: number) => {\n const value = { x: offset.x * (1 - t), y: offset.y * (1 - t) }\n write(value)\n },\n onComplete: () => {\n offset = { x: 0, y: 0 }\n write(offset)\n emit('dragEnd', offset)\n },\n })\n return\n }\n\n if (useMomentum && samples.length >= 2) {\n const first = samples[0]!\n const last = samples[samples.length - 1]!\n const elapsed = Math.max(1, last.t - first.t)\n let velocity = {\n x: ((last.x - first.x) / elapsed) * 1000,\n y: ((last.y - first.y) / elapsed) * 1000,\n }\n\n const decay = 0.95\n const stop = getTicker().add(\n ({ delta }) => {\n // Exponential decay, frame-rate independent: raising the per-second factor to the\n // power of the frame time keeps the glide identical at 60 and 120 Hz.\n const factor = Math.pow(decay, delta * 60)\n velocity = { x: velocity.x * factor, y: velocity.y * factor }\n\n const next = clamp({\n x: offset.x + velocity.x * delta,\n y: offset.y + velocity.y * delta,\n })\n offset = next\n write(next)\n\n if (Math.hypot(velocity.x, velocity.y) < 8) {\n stop()\n stopMomentum = null\n emit('dragEnd', offset)\n }\n },\n { phase: 'write', name: 'Draggable' },\n )\n stopMomentum = stop\n return\n }\n\n emit('dragEnd', offset)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n window.addEventListener('pointercancel', onUp)\n }\n\n return () => {\n const { class: attrClass, style: attrStyle, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'div',\n {\n ref: node,\n class: cx(\n 'ansh-draggable',\n dragging.value && 'ansh-draggable--active',\n attrClass as string,\n ),\n style: [\n {\n touchAction: props.axis === 'x' ? 'pan-y' : props.axis === 'y' ? 'pan-x' : 'none',\n },\n attrStyle,\n ],\n onPointerdown,\n ...restAttrs,\n },\n slots.default?.(),\n )\n }\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/index.ts","../src/components/layout/resizable.ts"],"names":["defineComponent","ref","h"],"mappings":"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","file":"chunk-B6OXKW5Q.js","sourcesContent":["import { type CSSProperties, type PropType, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\n/**\n * Layout primitives — the Vue counterpart of `@ansh-ui/react`'s layout components.\n *\n * These exist because every application rebuilds them, badly. The rebuilt versions hardcode gaps in\n * pixels, so they don't respond to a density setting; they use margins, so they collapse\n * unpredictably; and they don't handle the RTL case.\n *\n * Everything here takes a **token key**, not a raw value: `:gap=\"4\"` means `--ansh-space-4`, so a\n * layout is guaranteed to sit on the spacing scale. Passing an arbitrary string is still possible for\n * the genuine one-off, but the type nudges toward the scale first.\n *\n * Every component here declares only its own props and renders with `inheritAttrs: false` plus a\n * manual `class`/`style`/rest spread, so native attributes not declared as props (`id`, `data-*`, a\n * `@click` listener) fall through onto the rendered element automatically — the same convention\n * `Input` and `PopoverContent` use elsewhere in this package.\n */\n\n/** A key into the spacing scale, or a raw CSS length for the rare exception. */\nexport type SpaceToken =\n 0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24 | (string & {})\n\n/**\n * A CSS `align-items`/`justify-content` value, typed as a plain string rather than\n * `CSSProperties['alignItems']`/`['justifyContent']`.\n *\n * The indexed-access csstype type is structurally correct but not **portable**: embedding it in an\n * exported component's props makes TypeScript's declaration emitter need to name an internal\n * `csstype` package type by its pnpm store path, which a consumer's project can't resolve and fails\n * the build with TS2742 (\"cannot be named without a reference to .pnpm/csstype@.../csstype\"). A\n * plain string loses autocomplete for the handful of valid values; the runtime behaviour — the\n * string flows straight into the style property — is identical.\n */\ntype FlexAlign = string\n\nfunction space(value: SpaceToken | undefined): string | undefined {\n if (value === undefined) return undefined\n if (typeof value === 'string') return value\n return `var(--ansh-space-${value})`\n}\n\n/** Split `attrs` into the pieces every component here re-merges by hand. */\nfunction splitAttrs(attrs: Record<string, unknown>): {\n class: string\n style: unknown\n rest: Record<string, unknown>\n} {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n return { class: (attrClass as string | undefined) ?? '', style: attrStyle, rest }\n}\n\n// --- Stack ------------------------------------------------------------------\n\nexport interface StackProps {\n as?: string\n /** Default `'vertical'` — the direction that needs a helper more often. */\n direction?: 'horizontal' | 'vertical'\n gap?: SpaceToken\n align?: FlexAlign\n justify?: FlexAlign\n wrap?: boolean\n /** Grow to fill the cross axis. */\n stretch?: boolean\n /** Insert a hairline divider between children. */\n divide?: boolean\n}\n\nfunction stackProps() {\n return {\n as: { type: String, default: 'div' },\n gap: { type: [Number, String] as PropType<SpaceToken>, default: 4 },\n align: { type: String as PropType<FlexAlign>, default: undefined },\n justify: { type: String as PropType<FlexAlign>, default: undefined },\n wrap: { type: Boolean, default: false },\n stretch: { type: Boolean, default: false },\n divide: { type: Boolean, default: false },\n }\n}\n\nfunction stackStyle(\n direction: 'horizontal' | 'vertical',\n props: {\n gap: SpaceToken\n align?: FlexAlign\n justify?: FlexAlign\n wrap: boolean\n stretch: boolean\n },\n): CSSProperties {\n return {\n display: 'flex',\n flexDirection: direction === 'horizontal' ? 'row' : 'column',\n gap: space(props.gap),\n // Cast at the point of use, not in the public prop type — see the `FlexAlign` doc comment.\n alignItems: (props.align ??\n (props.stretch ? 'stretch' : undefined)) as CSSProperties['alignItems'],\n justifyContent: props.justify as CSSProperties['justifyContent'],\n flexWrap: props.wrap ? 'wrap' : undefined,\n }\n}\n\n/**\n * One-dimensional flex layout.\n *\n * ```vue\n * <Stack direction=\"horizontal\" :gap=\"3\" align=\"center\">\n * <Avatar :src=\"user.avatar\" :name=\"user.name\" />\n * <Stack :gap=\"0.5\">\n * <strong>{{ user.name }}</strong>\n * <Text tone=\"secondary\">{{ user.email }}</Text>\n * </Stack>\n * </Stack>\n * ```\n */\nexport const Stack = defineComponent({\n name: 'AnshStack',\n inheritAttrs: false,\n props: {\n ...stackProps(),\n direction: { type: String as PropType<'horizontal' | 'vertical'>, default: 'vertical' },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-stack', props.divide && 'ansh-stack--divide', attrClass),\n 'data-direction': props.direction,\n style: [stackStyle(props.direction, props), attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n/** Horizontal `Stack`, for readability at call sites. */\nexport const HStack = defineComponent({\n name: 'AnshHStack',\n inheritAttrs: false,\n props: stackProps(),\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-stack', props.divide && 'ansh-stack--divide', attrClass),\n 'data-direction': 'horizontal',\n style: [stackStyle('horizontal', props), attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n/** Vertical `Stack`, for symmetry with `HStack`. */\nexport const VStack = defineComponent({\n name: 'AnshVStack',\n inheritAttrs: false,\n props: stackProps(),\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-stack', props.divide && 'ansh-stack--divide', attrClass),\n 'data-direction': 'vertical',\n style: [stackStyle('vertical', props), attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- Grid ---------------------------------------------------------------------\n\nexport interface GridProps {\n as?: string\n /** Fixed column count, or `'auto'` for a responsive `auto-fill` track. */\n columns?: number | 'auto'\n /** Minimum column width when `columns=\"auto\"`. Default `'16rem'`. */\n minColumnWidth?: string\n gap?: SpaceToken\n /** Row gap, when it should differ from the column gap. */\n rowGap?: SpaceToken\n align?: FlexAlign\n}\n\n/**\n * Two-dimensional layout.\n *\n * `columns=\"auto\"` uses `repeat(auto-fill, minmax(min(N, 100%), 1fr))`. The inner `min()` is what\n * stops the grid overflowing on a phone: without it, a 16rem minimum on a 15rem-wide viewport\n * produces a track wider than the screen and a horizontal scrollbar.\n */\nexport const Grid = defineComponent({\n name: 'AnshGrid',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n columns: { type: [Number, String] as PropType<number | 'auto'>, default: 'auto' },\n minColumnWidth: { type: String, default: '16rem' },\n gap: { type: [Number, String] as PropType<SpaceToken>, default: 4 },\n rowGap: { type: [Number, String] as PropType<SpaceToken>, default: undefined },\n align: { type: String as PropType<FlexAlign>, default: undefined },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-grid', attrClass),\n style: [\n {\n display: 'grid',\n gridTemplateColumns:\n props.columns === 'auto'\n ? `repeat(auto-fill, minmax(min(${props.minColumnWidth}, 100%), 1fr))`\n : `repeat(${props.columns}, minmax(0, 1fr))`,\n gap: space(props.gap),\n rowGap: space(props.rowGap),\n alignItems: props.align,\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport interface GridItemProps {\n as?: string\n /** Columns to span. `'full'` spans the whole row. */\n span?: number | 'full'\n rowSpan?: number\n}\n\nexport const GridItem = defineComponent({\n name: 'AnshGridItem',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n span: { type: [Number, String] as PropType<number | 'full'>, default: undefined },\n rowSpan: { type: Number, default: undefined },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: attrClass,\n style: [\n {\n gridColumn:\n props.span === 'full'\n ? '1 / -1'\n : props.span\n ? `span ${props.span} / span ${props.span}`\n : undefined,\n gridRow: props.rowSpan ? `span ${props.rowSpan} / span ${props.rowSpan}` : undefined,\n // `minWidth: 0` on every grid child. Without it a child containing a long unbroken\n // string or a table refuses to shrink below its content width and blows out the track.\n minWidth: 0,\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- Container ------------------------------------------------------------\n\nexport interface ContainerProps {\n as?: string\n /** Max content width. Default `'lg'` (72rem). */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n /** Horizontal padding. Default `6`. */\n padding?: SpaceToken\n}\n\nconst CONTAINER_WIDTH = {\n sm: '40rem',\n md: '56rem',\n lg: '72rem',\n xl: '90rem',\n full: '100%',\n} as const\n\n/** Centred, width-constrained page content. */\nexport const Container = defineComponent({\n name: 'AnshContainer',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n size: { type: String as PropType<'sm' | 'md' | 'lg' | 'xl' | 'full'>, default: 'lg' },\n padding: { type: [Number, String] as PropType<SpaceToken>, default: 6 },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-container', attrClass),\n style: [\n {\n width: '100%',\n maxWidth: CONTAINER_WIDTH[props.size],\n marginInline: 'auto',\n paddingInline: space(props.padding),\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- Divider --------------------------------------------------------------\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical'\n /** Optional label rendered in the middle of the rule. */\n label?: SlotContent\n}\n\n/**\n * A rule.\n *\n * With a label it becomes a labelled separator — the \"or continue with\" divider on a sign-in form.\n * `role=\"separator\"` is set only when there's no label; with one, it's a heading-like element and\n * announcing it as a separator loses the text.\n *\n * Renders a plain `<div>` regardless of what `as` a caller might pass, matching\n * `@ansh-ui/react`'s `Divider` — which declares `as` on its props type via `BaseProps` but never\n * actually reads it, always rendering a literal `<div>`. Not declaring `as` here reproduces that\n * quirk exactly: an `as` attribute would simply fall through as an inert HTML attribute, same as it\n * does in React.\n */\nexport const Divider = defineComponent({\n name: 'AnshDivider',\n inheritAttrs: false,\n props: {\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n label: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs }) {\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n\n if (props.label !== undefined) {\n return h(\n 'div',\n {\n class: cx('ansh-divider', 'ansh-divider--labelled', attrClass),\n style: attrStyle,\n ...rest,\n },\n [\n h('span', { class: 'ansh-divider__line' }),\n h('span', { class: 'ansh-divider__label' }, [resolveSlotContent(props.label)]),\n h('span', { class: 'ansh-divider__line' }),\n ],\n )\n }\n\n return h('div', {\n role: 'separator',\n 'aria-orientation': props.orientation,\n class: cx('ansh-divider', `ansh-divider--${props.orientation}`, attrClass),\n style: attrStyle,\n ...rest,\n })\n }\n },\n})\n\n// --- Spacer -----------------------------------------------------------------\n\nexport interface SpacerProps {\n size?: SpaceToken\n /** Grow to absorb free space in a flex container. */\n grow?: boolean\n}\n\n/** Explicit empty space. `grow` pushes siblings apart in a flex row. */\nexport const Spacer = defineComponent({\n name: 'AnshSpacer',\n props: {\n size: { type: [Number, String] as PropType<SpaceToken>, default: undefined },\n grow: { type: Boolean, default: false },\n },\n setup(props) {\n return () =>\n h('span', {\n 'aria-hidden': 'true',\n style: {\n display: 'block',\n flexGrow: props.grow ? 1 : 0,\n flexShrink: 0,\n ...(props.size !== undefined\n ? { width: space(props.size), height: space(props.size) }\n : null),\n },\n })\n },\n})\n\n// --- Center -----------------------------------------------------------------\n\nexport interface CenterProps {\n as?: string\n}\n\n/** Centre a child on both axes. */\nexport const Center = defineComponent({\n name: 'AnshCenter',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: attrClass,\n style: [{ display: 'grid', placeItems: 'center' }, attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- AspectRatio ------------------------------------------------------------\n\nexport interface AspectRatioProps {\n as?: string\n /** Width ÷ height. `16 / 9` reads better than `1.777`. Default `16 / 9`. */\n ratio?: number\n}\n\n/**\n * Reserve space at a fixed aspect ratio.\n *\n * Uses the `aspect-ratio` property rather than the padding-top hack. The reserved space is what\n * matters: an image that loads without it shifts everything below, which is a Cumulative Layout\n * Shift penalty and the most common cause of a failing Core Web Vitals score.\n */\nexport const AspectRatio = defineComponent({\n name: 'AnshAspectRatio',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n ratio: { type: Number, default: 16 / 9 },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-aspect', attrClass),\n style: [{ aspectRatio: String(props.ratio) }, attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- ScrollArea ---------------------------------------------------------------\n\nexport interface ScrollAreaProps {\n as?: string\n /** Max height before scrolling starts. */\n maxHeight?: string\n axis?: 'y' | 'x' | 'both'\n /** Fade the content at the scrollable edges. Default `true`. */\n fade?: boolean\n}\n\n/**\n * A scroll container with styled scrollbars and edge fades.\n *\n * The native scrollbar is kept — a JavaScript-rendered one breaks keyboard scrolling, mobile\n * momentum, and the OS \"scroll bar is always visible\" accessibility setting. It is only *styled*,\n * via `scrollbar-width`/`scrollbar-color` with a `::-webkit-scrollbar` fallback.\n *\n * The edge fade is a mask that appears only when there is more content in that direction. It is\n * driven by `animation-timeline: scroll()` where supported, so it costs nothing on the main thread\n * and degrades to no fade where it isn't.\n */\nexport const ScrollArea = defineComponent({\n name: 'AnshScrollArea',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n maxHeight: { type: String, default: undefined },\n axis: { type: String as PropType<'y' | 'x' | 'both'>, default: 'y' },\n fade: { type: Boolean, default: true },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-scroll', props.fade && 'ansh-scroll--fade', attrClass),\n 'data-axis': props.axis,\n style: [\n {\n maxHeight: props.maxHeight,\n overflowY: props.axis === 'x' ? 'hidden' : 'auto',\n overflowX: props.axis === 'y' ? 'hidden' : 'auto',\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n","import { Comment, type PropType, Text, type VNode, defineComponent, h, ref } from 'vue'\nimport { cx } from '../../primitives/utils'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\n/**\n * A two-pane split with a draggable divider — the Vue counterpart of `@ansh-ui/react`'s `Resizable`.\n *\n * The layout every IDE, mail client and admin console needs, and the one most often shipped as\n * mouse-only. The handle here is a real `role=\"separator\"` with `aria-valuenow`, and arrow keys move\n * it in 2% steps — WAI-ARIA calls this a window splitter and it is a documented pattern, not an\n * invention.\n *\n * Sizes are percentages rather than pixels so the split survives a window resize proportionally.\n * Dragging writes to a CSS custom property directly, bypassing Vue's renderer: a re-render per\n * pointer move makes the drag feel heavy on a complex page, and the value is only committed to state\n * on release.\n *\n * `size`/`update:size` follow this package's controlled-prop convention (see `Popover`'s\n * `open`/`update:open`), so `v-model:size` works for the controlled case; `onSizeChange` from the\n * React version becomes the `update:size` emit.\n */\n\nexport interface ResizableProps {\n direction?: 'horizontal' | 'vertical'\n /** First pane's size as a percentage, `0`–`100`. Default `50`. */\n defaultSize?: number\n size?: number\n /** Clamp, as percentages. Defaults `10` and `90`. */\n minSize?: number\n maxSize?: number\n /** Snap points in percent, e.g. `[25, 50, 75]`. Within 3% the handle snaps. */\n snapPoints?: readonly number[]\n /** Accessible name for the handle — \"Resize sidebar\", not \"Resize\". */\n label?: string\n}\n\n/** Drop whitespace-only text nodes and `v-if=\"false\"` comment placeholders from a slot's output. */\nfunction normalizeChildren(nodes: VNode[] | undefined): VNode[] {\n return (nodes ?? []).filter((node) => {\n if (node.type === Comment) return false\n if (node.type === Text && typeof node.children === 'string' && node.children.trim() === '') {\n return false\n }\n return true\n })\n}\n\nexport const Resizable = defineComponent({\n name: 'AnshResizable',\n inheritAttrs: false,\n props: {\n direction: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n defaultSize: { type: Number, default: 50 },\n size: { type: Number, default: undefined },\n minSize: { type: Number, default: 10 },\n maxSize: { type: Number, default: 90 },\n snapPoints: { type: Array as PropType<readonly number[]>, default: undefined },\n label: { type: String, default: 'Resize panes' },\n },\n emits: ['update:size'],\n setup(props, { attrs, slots, emit, expose }) {\n const [value, setValue] = useControllableState<number>(\n () => props.size,\n props.defaultSize,\n (next) => emit('update:size', next),\n )\n\n const containerRef = ref<HTMLDivElement | null>(null)\n const dragging = ref(false)\n\n expose({\n get element() {\n return containerRef.value\n },\n })\n\n const clamp = (next: number): number => {\n let result = Math.min(Math.max(next, props.minSize), props.maxSize)\n if (props.snapPoints) {\n for (const point of props.snapPoints) {\n if (Math.abs(result - point) < 3) {\n result = point\n break\n }\n }\n }\n return result\n }\n\n const onPointerdown = (event: PointerEvent): void => {\n const container = containerRef.value\n if (!container) return\n\n // Pointer capture keeps events coming to the handle even when the pointer outruns it, which\n // it will — a fast drag easily leaves the 8px handle behind and the drag would otherwise stop\n // dead mid-gesture.\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n dragging.value = true\n\n let latest = value.value\n\n const onMove = (moveEvent: PointerEvent): void => {\n const rect = container.getBoundingClientRect()\n const fraction =\n props.direction === 'horizontal'\n ? (moveEvent.clientX - rect.left) / rect.width\n : (moveEvent.clientY - rect.top) / rect.height\n\n latest = clamp(fraction * 100)\n // Written straight to the DOM. Vue state is updated once, on release.\n container.style.setProperty('--ansh-split', `${latest}%`)\n }\n\n const onUp = (): void => {\n dragging.value = false\n setValue(latest)\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n window.removeEventListener('pointercancel', onUp)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n window.addEventListener('pointercancel', onUp)\n }\n\n const onKeydown = (event: KeyboardEvent): void => {\n const step = event.shiftKey ? 10 : 2\n const forward = props.direction === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n const backward = props.direction === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n\n let next: number | null = null\n if (event.key === forward) next = value.value + step\n else if (event.key === backward) next = value.value - step\n else if (event.key === 'Home') next = props.minSize\n else if (event.key === 'End') next = props.maxSize\n // Enter toggles between collapsed and the midpoint — the shortcut people expect from a\n // collapsible sidebar, and the only way to fully collapse without a mouse.\n else if (event.key === 'Enter') next = value.value <= props.minSize + 1 ? 50 : props.minSize\n\n if (next === null) return\n event.preventDefault()\n setValue(clamp(next))\n }\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const panes = normalizeChildren(slots.default?.())\n\n return h(\n 'div',\n {\n ref: containerRef,\n class: cx(\n 'ansh-split',\n `ansh-split--${props.direction}`,\n dragging.value && 'ansh-split--dragging',\n attrClass as string,\n ),\n // Reactive on every render, mirroring the React version's `style` prop — kept in sync\n // outside a drag, when the pointer handler above is the one writing it directly.\n style: { ['--ansh-split' as string]: `${value.value}%` },\n ...restAttrs,\n },\n [\n h('div', { class: 'ansh-split__pane' }, [panes[0]]),\n\n h(\n 'div',\n {\n role: 'separator',\n tabindex: 0,\n 'aria-label': props.label,\n 'aria-orientation': props.direction === 'horizontal' ? 'vertical' : 'horizontal',\n 'aria-valuenow': Math.round(value.value),\n 'aria-valuemin': props.minSize,\n 'aria-valuemax': props.maxSize,\n class: 'ansh-split__handle ansh-focusable',\n onPointerdown,\n onKeydown,\n // Double-click resets to centre. Undocumented in the UI but universally expected, and\n // harmless to discover by accident.\n onDblclick: () => setValue(50),\n },\n [h('span', { class: 'ansh-split__grip', 'aria-hidden': 'true' })],\n ),\n\n h('div', { class: 'ansh-split__pane' }, [panes[1]]),\n ],\n )\n }\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/focus.ts"],"names":["watch","getCurrentScope","onScopeDispose"],"mappings":";;;;;AAgBA,IAAM,kBAAA,GAAqB;AAAA,EACzB,SAAA;AAAA,EACA,wBAAA;AAAA,EACA,4CAAA;AAAA,EACA,wBAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kDAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,GAAG,CAAA;AAEV,SAAS,UAAU,OAAA,EAA+B;AAChD,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA,EAAG,OAAO,KAAA;AAC1C,EAAA,IAAI,OAAA,CAAQ,YAAA,KAAiB,IAAA,EAAM,OAAO,IAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,QAAQ,qBAAA,EAAsB;AAC3C,EAAA,OAAO,IAAA,CAAK,KAAA,GAAQ,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,CAAA;AACzC;AAGO,SAAS,YAAY,SAAA,EAA0D;AACpF,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAC;AACxB,EAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,gBAAA,CAA8B,kBAAkB,CAAC,CAAA;AACpF,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS;AAC5B,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,KAAM,QAAQ,OAAO,KAAA;AACxD,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,EAAG,OAAO,KAAA;AACpC,IAAA,OAAO,UAAU,IAAI,CAAA;AAAA,EACvB,CAAC,CAAA;AACH;AASO,SAAS,YAAA,CACd,QACA,MAAA,EACM;AACN,EAAA,IAAI,MAAA,GAA8B,IAAA;AAElC,EAAA,MAAM,SAAS,MAAY;AACzB,IAAA,MAAM,YAAY,MAAA,CAAO,KAAA;AACzB,IAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AAE1B,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAA+B;AAChD,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AAEzB,MAAA,MAAM,QAAA,GAAW,YAAY,SAAS,CAAA;AACtC,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,MAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA;AAE/B,MAAA,IAAI,KAAA,CAAM,QAAA,KAAa,aAAA,KAAkB,KAAA,IAAS,kBAAkB,SAAA,CAAA,EAAY;AAC9E,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACb,CAAA,MAAA,IAAW,CAAC,KAAA,CAAM,QAAA,IAAY,kBAAkB,IAAA,EAAM;AACpD,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,KAAA,EAAM;AAAA,MACd;AAAA,IACF,CAAA;AAEA,IAAA,SAAA,CAAU,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC/C,IAAA,MAAA,GAAS,MAAM;AACb,MAAA,SAAA,CAAU,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAClD,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA;AAEA,EAAAA,SAAA,CAAM,CAAC,MAAA,EAAQ,MAAM,CAAA,EAAG,MAAO,OAAO,KAAA,GAAQ,MAAA,EAAO,GAAI,MAAA,IAAS,EAAI;AAAA,IACpE,SAAA,EAAW,IAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,IAAIC,mBAAA,EAAgB,EAAGC,kBAAA,CAAe,MAAM,UAAU,CAAA;AACxD;AAQO,SAAS,gBAAgB,MAAA,EAAoC;AAClE,EAAA,IAAI,QAAA,GAA+B,IAAA;AAEnC,EAAAF,SAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,QAAA,KAAa;AACZ,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,GAAW,QAAA,CAAS,aAAA;AACpB,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,QAAA,IAAY,SAAS,WAAA,EAAa,QAAA,CAAS,QAAQ,EAAE,aAAA,EAAe,MAAM,CAAA;AAC9E,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA;AAAA,IACA,EAAE,OAAO,MAAA;AAAO,GAClB;AACF;AASO,SAAS,YAAA,CACd,MAAA,EACA,MAAA,EACA,YAAA,EACM;AACN,EAAA,IAAI,KAAA,GAAuB,IAAA;AAE3B,EAAAA,SAAA;AAAA,IACE,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,MAAM;AACJ,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA;AAC9C,MAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACnB,MAAA,MAAM,YAAY,MAAA,CAAO,KAAA;AACzB,MAAA,IAAI,CAAC,SAAA,EAAW;AAIhB,MAAA,KAAA,GAAQ,sBAAsB,MAAM;AAClC,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,MAAM,WAAW,YAAA,EAAc,KAAA;AAC/B,QAAA,IAAI,UAAU,WAAA,EAAa;AACzB,UAAA,QAAA,CAAS,KAAA,CAAM,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AACtC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,OAAA,GAAU,WAAA,CAAY,SAAS,CAAA,CAAE,CAAC,CAAA,IAAK,SAAA;AAC7C,QAAA,OAAA,CAAQ,KAAA,CAAM,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAAA,MACvC,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAEA,EAAA,IAAIC,qBAAgB,EAAG;AACrB,IAAAC,kBAAA,CAAe,MAAM;AACnB,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,IAChD,CAAC,CAAA;AAAA,EACH;AACF;AAQO,SAAS,eAAe,OAAA,EAQI;AACjC,EAAA,MAAM,EAAE,OAAO,MAAA,EAAQ,cAAA,EAAgB,cAAc,YAAA,EAAc,IAAA,GAAO,MAAK,GAAI,OAAA;AAEnF,EAAA,OAAO,CAAC,KAAA,KAAyB;AAC/B,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,IAAA,KAA8B,SAAS,IAAI,CAAA;AAC7E,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAExB,IAAA,MAAM,UAAA,GAAa,WAAA,KAAgB,YAAA,IAAgB,WAAA,KAAgB,MAAA;AACnE,IAAA,MAAM,QAAA,GAAW,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,MAAA;AAE/D,IAAA,IAAI,OAAO,MAAA,EAAO;AAClB,IAAA,QAAQ,MAAM,GAAA;AAAK,MACjB,KAAK,YAAA;AACH,QAAA,IAAI,CAAC,UAAA,EAAY;AACjB,QAAA,IAAA,GAAO,QAAO,GAAI,CAAA;AAClB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAI,CAAC,UAAA,EAAY;AACjB,QAAA,IAAA,GAAO,QAAO,GAAI,CAAA;AAClB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAI,CAAC,QAAA,EAAU;AACf,QAAA,IAAA,GAAO,QAAO,GAAI,CAAA;AAClB,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,IAAI,CAAC,QAAA,EAAU;AACf,QAAA,IAAA,GAAO,QAAO,GAAI,CAAA;AAClB,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,GAAO,CAAA;AACP,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,IAAA,GAAO,MAAM,MAAA,GAAS,CAAA;AACtB,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AAGJ,IAAA,KAAA,CAAM,cAAA,EAAe;AAErB,IAAA,IAAI,OAAO,CAAA,EAAG,IAAA,GAAO,IAAA,GAAO,KAAA,CAAM,SAAS,CAAA,GAAI,CAAA;AAC/C,IAAA,IAAI,QAAQ,KAAA,CAAM,MAAA,SAAe,IAAA,GAAO,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAE3D,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,KAAA,CAAM,IAAI,GAAG,KAAA,EAAM;AAAA,EACrB,CAAA;AACF","file":"chunk-EISHOEB6.cjs","sourcesContent":["import { type Ref, getCurrentScope, onScopeDispose, watch } from 'vue'\nimport { type ReadonlyRef } from './utils'\n\n/**\n * Focus management for overlay surfaces — the Vue counterpart of `@ansh-ui/react`'s `focus.ts`.\n *\n * Three separate concerns that are usually conflated:\n *\n * 1. **Finding what can be focused.** Harder than it looks — `disabled`, `hidden`, `inert`,\n * zero-size elements and negative tabindex all disqualify a node, and CSS-hidden ancestors\n * disqualify their whole subtree.\n * 2. **Trapping.** Tab must cycle within the surface. Required by WCAG 2.4.3 for modals.\n * 3. **Restoring.** Focus must return to the trigger on close, or a keyboard user is dumped at the\n * top of the document and has to navigate all the way back.\n */\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction isVisible(element: HTMLElement): boolean {\n if (element.hasAttribute('inert')) return false\n if (element.offsetParent !== null) return true\n const rect = element.getBoundingClientRect()\n return rect.width > 0 || rect.height > 0\n}\n\n/** Every tabbable descendant, in tab order. */\nexport function getTabbable(container: HTMLElement | null | undefined): HTMLElement[] {\n if (!container) return []\n const nodes = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR))\n return nodes.filter((node) => {\n if (node.getAttribute('aria-hidden') === 'true') return false\n if (node.closest('[inert]')) return false\n return isVisible(node)\n })\n}\n\n/**\n * Trap Tab within a container while `active`.\n *\n * Implemented on `keydown` at the container rather than with sentinel elements at either end. The\n * sentinel approach adds two focusable nodes to the accessibility tree that screen readers can land\n * on and announce as blank; intercepting the key does not.\n */\nexport function useFocusTrap(\n target: Ref<HTMLElement | null | undefined>,\n active: ReadonlyRef<boolean>,\n): void {\n let detach: (() => void) | null = null\n\n const attach = (): void => {\n const container = target.value\n if (!container || detach) return\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return\n\n const tabbable = getTabbable(container)\n if (tabbable.length === 0) {\n event.preventDefault()\n return\n }\n\n const first = tabbable[0]!\n const last = tabbable[tabbable.length - 1]!\n const activeElement = document.activeElement as HTMLElement | null\n\n if (event.shiftKey && (activeElement === first || activeElement === container)) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', onKeyDown)\n detach = () => {\n container.removeEventListener('keydown', onKeyDown)\n detach = null\n }\n }\n\n watch([active, target], () => (active.value ? attach() : detach?.()), {\n immediate: true,\n flush: 'post',\n })\n\n if (getCurrentScope()) onScopeDispose(() => detach?.())\n}\n\n/**\n * Restore focus to whatever was focused before `active` became true.\n *\n * The element is captured on activation, not on mount, because a component can be mounted long\n * before it opens.\n */\nexport function useFocusRestore(active: ReadonlyRef<boolean>): void {\n let previous: HTMLElement | null = null\n\n watch(\n active,\n (isActive) => {\n if (isActive) {\n previous = document.activeElement as HTMLElement | null\n return\n }\n // Guard against restoring to a node that has since been removed from the document —\n // focusing a detached element silently moves focus to `<body>`, losing the user's place.\n if (previous && previous.isConnected) previous.focus?.({ preventScroll: true })\n previous = null\n },\n { flush: 'post' },\n )\n}\n\n/**\n * Move focus into a surface when it opens.\n *\n * Prefers an explicitly marked element, then the first tabbable one, then the container itself. The\n * container fallback matters for a dialog whose only content is text: focus must land inside it so a\n * screen reader announces the dialog rather than continuing from the page behind.\n */\nexport function useAutoFocus(\n target: Ref<HTMLElement | null | undefined>,\n active: ReadonlyRef<boolean>,\n initialFocus?: Ref<HTMLElement | null | undefined>,\n): void {\n let frame: number | null = null\n\n watch(\n [active, target],\n () => {\n if (frame !== null) cancelAnimationFrame(frame)\n if (!active.value) return\n const container = target.value\n if (!container) return\n\n // After paint: the surface may still be animating in, and focusing a node with\n // `visibility: hidden` is a no-op that silently leaves focus on the body.\n frame = requestAnimationFrame(() => {\n frame = null\n const explicit = initialFocus?.value\n if (explicit?.isConnected) {\n explicit.focus({ preventScroll: true })\n return\n }\n const target2 = getTabbable(container)[0] ?? container\n target2.focus({ preventScroll: true })\n })\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n if (frame !== null) cancelAnimationFrame(frame)\n })\n }\n}\n\n/**\n * Roving tabindex for a composite widget (toolbar, tab list, menu).\n *\n * The ARIA authoring practice: a composite has exactly **one** tab stop, and arrow keys move within\n * it. Returns a keydown handler to bind on the composite's container.\n */\nexport function useRovingFocus(options: {\n /** Items in DOM order. */\n items: Ref<Array<HTMLElement | null>>\n /** Index that currently owns the tab stop. */\n active: () => number\n onActiveChange: (index: number) => void\n orientation?: 'horizontal' | 'vertical' | 'both'\n loop?: boolean\n}): (event: KeyboardEvent) => void {\n const { items, active, onActiveChange, orientation = 'horizontal', loop = true } = options\n\n return (event: KeyboardEvent) => {\n const nodes = items.value.filter((item): item is HTMLElement => item !== null)\n if (nodes.length === 0) return\n\n const horizontal = orientation === 'horizontal' || orientation === 'both'\n const vertical = orientation === 'vertical' || orientation === 'both'\n\n let next = active()\n switch (event.key) {\n case 'ArrowRight':\n if (!horizontal) return\n next = active() + 1\n break\n case 'ArrowLeft':\n if (!horizontal) return\n next = active() - 1\n break\n case 'ArrowDown':\n if (!vertical) return\n next = active() + 1\n break\n case 'ArrowUp':\n if (!vertical) return\n next = active() - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = nodes.length - 1\n break\n default:\n return\n }\n\n event.preventDefault()\n\n if (next < 0) next = loop ? nodes.length - 1 : 0\n if (next >= nodes.length) next = loop ? 0 : nodes.length - 1\n\n onActiveChange(next)\n nodes[next]?.focus()\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data/table.ts","../src/components/data/display.ts","../src/components/data/progress.ts"],"names":["_","defineComponent","h","computed"],"mappings":"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","file":"chunk-FVKLCGA4.js","sourcesContent":["import {\n type PropType,\n type SetupContext,\n type VNodeChild,\n computed,\n defineComponent,\n h,\n} from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\n/**\n * Tables — the Vue counterpart of `@ansh-ui/react`'s `Table`/`DataTable`.\n *\n * A real `<table>` with `<th scope>`, not a grid of divs. The semantics are the entire point: a\n * screen reader announces \"Column 3 of 7, Status, row 12\" only if the markup says so. Every\n * div-based table reimplements navigation badly or not at all, and the CSS argument for divs\n * disappeared when `display: contents` and `position: sticky` landed.\n *\n * `DataTable` adds sorting, selection and pagination on top. It stays deliberately short of a full\n * data grid — no virtualisation, no column resizing, no pinned regions. Those need a different\n * architecture (windowing, measured columns), and half-implementing them produces a component that\n * breaks at exactly the scale it was added for.\n *\n * `DataTable` is generic over the row type `T`, which Vue only supports for a plain (non-SFC)\n * component through `defineComponent`'s \"generic setup function\" overload — the setup function\n * itself stays generic (`<T,>(props: DataTableProps<T>, ctx) => …`) while the runtime `props` list\n * is a plain array of keys. That trade means no per-prop runtime validation or default-value\n * coercion (booleans aren't coerced from attribute presence, defaults are applied by hand inside\n * `setup`, mirroring the destructured defaults the React version uses) — acceptable here because the\n * real contract for a data-shaped component like this is the TypeScript signature, not template\n * shorthand.\n */\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface SortState {\n columnId: string\n direction: SortDirection\n}\n\nexport interface Column<T> {\n id: string\n header: SlotContent\n /** Render the cell. Receives the row and its index. */\n cell: (row: T, index: number) => VNodeChild\n /** Allow sorting by this column. */\n sortable?: boolean\n /**\n * Value used for the default comparator. Without it a sortable column falls back to comparing\n * rendered output, which sorts \"10\" before \"9\".\n */\n sortValue?: (row: T) => string | number | Date | null | undefined\n align?: 'start' | 'center' | 'end'\n /** Any CSS width — `'12rem'`, `'25%'`, `'minmax(8rem, 1fr)'`. */\n width?: string\n /** Hide below this breakpoint. Uses the token breakpoints. */\n hideBelow?: 'sm' | 'md' | 'lg'\n /** Short label announced instead of a complex header. */\n ariaLabel?: string\n}\n\nexport interface DataTableProps<T> {\n data: readonly T[]\n columns: ReadonlyArray<Column<T>>\n /** Stable row identity. Required — array index breaks selection the moment rows reorder. */\n getRowId: (row: T) => string\n /** Describes the table for screen readers. Rendered as a visually hidden `<caption>`. */\n caption: string\n /** Row checkboxes plus a header select-all. */\n selectable?: boolean\n /** `v-model:selected` — omit for an uncontrolled table that owns its own selection. */\n selected?: readonly string[]\n /** `v-model:sort` — omit for an uncontrolled table that owns its own sort state. */\n sort?: SortState | null\n defaultSort?: SortState | null\n /** Rows per page. Omit to render everything. */\n pageSize?: number\n /** `v-model:page` — omit for an uncontrolled table that owns its own page. */\n page?: number\n /** Show skeleton rows. */\n loading?: boolean\n /** Rendered in place of the body when there are no rows. */\n emptyState?: SlotContent\n onRowClick?: (row: T) => void\n /** Keep the header visible while the body scrolls. */\n stickyHeader?: boolean\n density?: 'comfortable' | 'compact'\n /** Zebra striping. Off by default — borders read as cleaner at density. */\n striped?: boolean\n /** Per-row extra class, for status highlighting. */\n rowClassName?: (row: T) => string | undefined\n}\n\ninterface DataTableEmits {\n 'update:sort': (sort: SortState | null) => void\n 'update:selected': (ids: readonly string[]) => void\n 'update:page': (page: number) => void\n}\n\nconst DATA_TABLE_PROP_KEYS = [\n 'data',\n 'columns',\n 'getRowId',\n 'caption',\n 'selectable',\n 'selected',\n 'sort',\n 'defaultSort',\n 'pageSize',\n 'page',\n 'loading',\n 'emptyState',\n 'onRowClick',\n 'stickyHeader',\n 'density',\n 'striped',\n 'rowClassName',\n] satisfies Array<keyof DataTableProps<unknown>>\n\n/** Default comparator: numbers and dates numerically, strings by locale. */\nfunction compare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0\n // Nulls sort last in both directions — an empty cell is not \"smallest\", it's absent, and\n // flipping the sort should not fill the top of the table with blanks.\n if (a == null) return 1\n if (b == null) return -1\n\n if (typeof a === 'number' && typeof b === 'number') return a - b\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime()\n // `localeCompare` with `numeric` so \"Item 2\" precedes \"Item 10\".\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' })\n}\n\nexport const DataTable = defineComponent(\n <T>(props: DataTableProps<T>, { emit, attrs }: SetupContext<DataTableEmits>) => {\n const [sortState, setSortState] = useControllableState<SortState | null>(\n () => props.sort,\n props.defaultSort ?? null,\n (next) => emit('update:sort', next),\n )\n const [selection, setSelection] = useControllableState<readonly string[]>(\n () => props.selected,\n [],\n (next) => emit('update:selected', next),\n )\n const [currentPage, setCurrentPage] = useControllableState<number>(\n () => props.page,\n 0,\n (next) => emit('update:page', next),\n )\n\n const sorted = computed<readonly T[]>(() => {\n const state = sortState.value\n if (!state) return props.data\n const column = props.columns.find((c) => c.id === state.columnId)\n const sortValue = column?.sortValue\n if (!sortValue) return props.data\n\n // Copied before sorting: mutating the caller's array in place is a bug that surfaces as\n // \"my list reorders when I open the table\".\n const rows = [...props.data]\n rows.sort((a, b) => {\n const result = compare(sortValue(a), sortValue(b))\n return state.direction === 'asc' ? result : -result\n })\n return rows\n })\n\n const pageCount = computed(() =>\n props.pageSize ? Math.max(1, Math.ceil(sorted.value.length / props.pageSize)) : 1,\n )\n const safePage = computed(() => Math.min(currentPage.value, pageCount.value - 1))\n const visible = computed<readonly T[]>(() => {\n const pageSize = props.pageSize\n if (!pageSize) return sorted.value\n const start = safePage.value * pageSize\n return sorted.value.slice(start, start + pageSize)\n })\n\n const visibleIds = computed(() => visible.value.map(props.getRowId))\n const selectedSet = computed(() => new Set(selection.value))\n\n const allVisibleSelected = computed(\n () =>\n visibleIds.value.length > 0 && visibleIds.value.every((id) => selectedSet.value.has(id)),\n )\n const someVisibleSelected = computed(() =>\n visibleIds.value.some((id) => selectedSet.value.has(id)),\n )\n\n const toggleAll = (): void => {\n if (allVisibleSelected.value) {\n // Only clears the current page. Wiping selections on other pages would silently discard\n // work when someone selects across pages then unticks the header.\n setSelection(selection.value.filter((id) => !visibleIds.value.includes(id)))\n } else {\n setSelection([...new Set([...selection.value, ...visibleIds.value])])\n }\n }\n\n const toggleRow = (rowId: string): void => {\n setSelection(\n selectedSet.value.has(rowId)\n ? selection.value.filter((v) => v !== rowId)\n : [...selection.value, rowId],\n )\n }\n\n const onSort = (column: Column<T>): void => {\n if (!column.sortable) return\n const state = sortState.value\n // asc → desc → none. The third state matters: without it there is no way back to the data's\n // natural order, which is often \"most recent first\" from the server.\n if (state?.columnId !== column.id) {\n setSortState({ columnId: column.id, direction: 'asc' })\n } else if (state.direction === 'asc') {\n setSortState({ columnId: column.id, direction: 'desc' })\n } else {\n setSortState(null)\n }\n }\n\n return () => {\n const columns = props.columns\n const selectable = props.selectable ?? false\n const density = props.density ?? 'comfortable'\n const striped = props.striped ?? false\n const columnCount = columns.length + (selectable ? 1 : 0)\n const onRowClick = props.onRowClick\n\n const renderBody = (): VNodeChild[] => {\n if (props.loading) {\n return Array.from({ length: props.pageSize ?? 5 }, (_, rowIndex) =>\n h('tr', { key: `skeleton-${rowIndex}`, class: 'ansh-table__row' }, [\n ...Array.from({ length: columnCount }, (_, cellIndex) =>\n h('td', { key: cellIndex, class: 'ansh-table__cell' }, [\n h('span', {\n class: 'ansh-skeleton',\n style: { width: `${50 + ((cellIndex * 37) % 40)}%`, height: '1em' },\n }),\n ]),\n ),\n ]),\n )\n }\n\n if (visible.value.length === 0) {\n return [\n h('tr', {}, [\n h('td', { colspan: columnCount, class: 'ansh-table__empty' }, [\n props.emptyState ? resolveSlotContent(props.emptyState) : 'No results',\n ]),\n ]),\n ]\n }\n\n return visible.value.map((row, index) => {\n const rowId = props.getRowId(row)\n const isSelected = selectedSet.value.has(rowId)\n\n return h(\n 'tr',\n {\n key: rowId,\n class: cx(\n 'ansh-table__row',\n isSelected && 'ansh-table__row--selected',\n Boolean(onRowClick) && 'ansh-table__row--clickable',\n props.rowClassName?.(row),\n ),\n 'aria-selected': selectable ? isSelected : undefined,\n // A click that started on a control inside the row belongs to that control —\n // opening a detail view because someone ticked a checkbox is the classic\n // clickable-row bug.\n onClick: onRowClick\n ? (event: MouseEvent) => {\n const target = event.target as HTMLElement\n if (target.closest('button, a, input, select, textarea')) return\n onRowClick(row)\n }\n : undefined,\n },\n [\n selectable\n ? h('td', { class: 'ansh-table__cell ansh-table__cell--check' }, [\n h('input', {\n type: 'checkbox',\n class: 'ansh-table__checkbox',\n checked: isSelected,\n 'aria-label': `Select row ${index + 1}`,\n onChange: () => toggleRow(rowId),\n }),\n ])\n : null,\n\n ...columns.map((column) =>\n h(\n 'td',\n {\n key: column.id,\n class: cx(\n 'ansh-table__cell',\n column.align && `ansh-table__cell--${column.align}`,\n column.hideBelow && `ansh-hide-below-${column.hideBelow}`,\n ),\n },\n [column.cell(row, index)],\n ),\n ),\n ],\n )\n })\n }\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-table-wrap',\n props.stickyHeader && 'ansh-table-wrap--sticky',\n attrs.class as string,\n ),\n },\n [\n h(\n 'table',\n { class: cx('ansh-table', `ansh-table--${density}`, striped && 'ansh-table--striped') },\n [\n h('caption', { class: 'ansh-visually-hidden' }, [\n props.caption,\n sortState.value\n ? `, sorted by ${columns.find((c) => c.id === sortState.value!.columnId)?.id} ${sortState.value.direction === 'asc' ? 'ascending' : 'descending'}`\n : '',\n ]),\n\n h('thead', { class: 'ansh-table__head' }, [\n h('tr', {}, [\n selectable\n ? h('th', { scope: 'col', class: 'ansh-table__cell ansh-table__cell--check' }, [\n h('input', {\n type: 'checkbox',\n class: 'ansh-table__checkbox',\n checked: allVisibleSelected.value,\n // Mixed state when only some rows are ticked — announced as \"partially\n // checked\" rather than lying about the state. A fresh function\n // identity every render is what makes Vue re-invoke this ref callback\n // (mirroring the React version's inline ref) so the flag stays current.\n ref: (el) => {\n if (el) {\n ;(el as HTMLInputElement).indeterminate =\n !allVisibleSelected.value && someVisibleSelected.value\n }\n },\n 'aria-label': allVisibleSelected.value\n ? 'Deselect all rows'\n : 'Select all rows',\n onChange: toggleAll,\n }),\n ])\n : null,\n\n ...columns.map((column) => {\n const isSorted = sortState.value?.columnId === column.id\n return h(\n 'th',\n {\n key: column.id,\n scope: 'col',\n class: cx(\n 'ansh-table__cell',\n 'ansh-table__cell--head',\n column.align && `ansh-table__cell--${column.align}`,\n column.hideBelow && `ansh-hide-below-${column.hideBelow}`,\n ),\n style: column.width ? { width: column.width } : undefined,\n // `aria-sort` on the header is what makes a screen reader announce the\n // sort state; the arrow glyph alone conveys nothing.\n 'aria-sort': isSorted\n ? sortState.value!.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : undefined,\n },\n [\n column.sortable\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-table__sort ansh-focusable',\n onClick: () => onSort(column),\n 'aria-label': column.ariaLabel\n ? `Sort by ${column.ariaLabel}`\n : typeof column.header === 'string'\n ? `Sort by ${column.header}`\n : 'Sort column',\n },\n [\n h('span', {}, [resolveSlotContent(column.header)]),\n h(\n 'span',\n {\n class: cx(\n 'ansh-table__arrow',\n isSorted && 'ansh-table__arrow--on',\n ),\n 'aria-hidden': 'true',\n 'data-direction': isSorted\n ? sortState.value!.direction\n : 'none',\n },\n [\n h('svg', { viewBox: '0 0 10 12', width: '10', height: '12' }, [\n h('path', {\n d: 'M5 1v10M2 4l3-3 3 3M2 8l3 3 3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.4',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n )\n : resolveSlotContent(column.header),\n ],\n )\n }),\n ]),\n ]),\n\n h('tbody', {}, renderBody()),\n ],\n ),\n\n // Selection count and page changes announced without stealing focus.\n h(\n 'span',\n { class: 'ansh-visually-hidden', role: 'status', 'aria-live': 'polite' },\n selectable && selection.value.length > 0 ? `${selection.value.length} selected` : '',\n ),\n\n props.pageSize && pageCount.value > 1\n ? h(Pagination, {\n page: safePage.value,\n pageCount: pageCount.value,\n total: sorted.value.length,\n pageSize: props.pageSize,\n onPageChange: setCurrentPage,\n })\n : null,\n ],\n )\n }\n },\n {\n name: 'AnshDataTable',\n inheritAttrs: false,\n props: DATA_TABLE_PROP_KEYS,\n emits: ['update:sort', 'update:selected', 'update:page'],\n },\n)\n\nexport interface PaginationProps {\n /** Zero-based. */\n page: number\n pageCount: number\n onPageChange: (page: number) => void\n /** Total row count, for the \"1–20 of 340\" summary. */\n total?: number\n pageSize?: number\n /** Page buttons either side of the current one. Default `1`. */\n siblings?: number\n}\n\n/**\n * Page navigation.\n *\n * `<nav>` with an ordered list, because that is what a pager is — a list of links to positions in a\n * sequence. The current page is marked `aria-current=\"page\"`, which is how a screen reader user\n * knows where they are without counting buttons.\n *\n * The ellipsis is `aria-hidden`; announcing \"ellipsis\" between page 3 and page 12 conveys nothing\n * that the numbers don't already.\n *\n * Fully controlled, same as the React version — there is no internal page state to fall back to, so\n * `onPageChange` stays a plain callback prop rather than a `v-model`-style emit.\n */\nexport const Pagination = defineComponent({\n name: 'AnshPagination',\n inheritAttrs: false,\n props: {\n page: { type: Number, required: true },\n pageCount: { type: Number, required: true },\n onPageChange: { type: Function as PropType<(page: number) => void>, required: true },\n total: { type: Number, default: undefined },\n pageSize: { type: Number, default: undefined },\n siblings: { type: Number, default: 1 },\n },\n setup(props, { attrs }) {\n return () => {\n const pages: Array<number | 'gap'> = []\n const first = 0\n const last = props.pageCount - 1\n\n for (let index = first; index <= last; index++) {\n const nearCurrent = Math.abs(index - props.page) <= props.siblings\n const isEdge = index === first || index === last\n if (nearCurrent || isEdge) {\n pages.push(index)\n } else if (pages[pages.length - 1] !== 'gap') {\n pages.push('gap')\n }\n }\n\n const from = props.pageSize ? props.page * props.pageSize + 1 : null\n const to =\n props.pageSize && props.total\n ? Math.min((props.page + 1) * props.pageSize, props.total)\n : null\n\n return h(\n 'nav',\n { class: cx('ansh-pagination', attrs.class as string), 'aria-label': 'Pagination' },\n [\n from !== null && to !== null\n ? h('p', { class: 'ansh-pagination__summary' }, `${from}–${to} of ${props.total}`)\n : null,\n\n h('ol', { class: 'ansh-pagination__list' }, [\n h('li', {}, [\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-pagination__button ansh-focusable',\n disabled: props.page === 0,\n 'aria-label': 'Previous page',\n onClick: () => props.onPageChange(props.page - 1),\n },\n [\n h(\n 'svg',\n { viewBox: '0 0 12 12', width: '12', height: '12', 'aria-hidden': 'true' },\n [\n h('path', {\n d: 'M7.5 2.5L4 6l3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n ],\n ),\n ]),\n\n ...pages.map((entry, index) =>\n entry === 'gap'\n ? h(\n 'li',\n { key: `gap-${index}`, 'aria-hidden': 'true', class: 'ansh-pagination__gap' },\n '…',\n )\n : h('li', { key: entry }, [\n h(\n 'button',\n {\n type: 'button',\n class: cx(\n 'ansh-pagination__button',\n entry === props.page && 'ansh-pagination__button--current',\n 'ansh-focusable',\n ),\n 'aria-current': entry === props.page ? 'page' : undefined,\n 'aria-label': `Page ${entry + 1}`,\n onClick: () => props.onPageChange(entry),\n },\n String(entry + 1),\n ),\n ]),\n ),\n\n h('li', {}, [\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-pagination__button ansh-focusable',\n disabled: props.page >= props.pageCount - 1,\n 'aria-label': 'Next page',\n onClick: () => props.onPageChange(props.page + 1),\n },\n [\n h(\n 'svg',\n { viewBox: '0 0 12 12', width: '12', height: '12', 'aria-hidden': 'true' },\n [\n h('path', {\n d: 'M4.5 2.5L8 6l-3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n ],\n ),\n ]),\n ]),\n ],\n )\n }\n },\n})\n\n/** A plain styled table, for content that isn't driven by data props. */\nexport const Table = defineComponent({\n name: 'AnshTable',\n inheritAttrs: false,\n props: {\n caption: { type: String, default: undefined },\n density: { type: String as PropType<'comfortable' | 'compact'>, default: 'comfortable' },\n striped: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n return () =>\n h('div', { class: cx('ansh-table-wrap', attrs.class as string) }, [\n h(\n 'table',\n {\n class: cx(\n 'ansh-table',\n `ansh-table--${props.density}`,\n props.striped && 'ansh-table--striped',\n ),\n },\n [\n props.caption ? h('caption', { class: 'ansh-visually-hidden' }, props.caption) : null,\n slots.default?.(),\n ],\n ),\n ])\n },\n})\n","import { type PropType, type VNode, computed, defineComponent, h, onBeforeUnmount, ref } from 'vue'\nimport { parseColor, pickReadable, toHex } from '@ansh-ui/core'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\n/**\n * Small display components — the Vue counterpart of `@ansh-ui/react`'s data-display primitives.\n *\n * Individually trivial, collectively most of what an application screen is made of. The care here\n * goes into the details that get skipped: a badge whose meaning isn't carried by colour alone, an\n * avatar whose fallback initials are readable against a generated background, an empty state that\n * says what to do next rather than just \"no data\".\n */\n\n// --- Badge ------------------------------------------------------------------\n\nexport type BadgeTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger' | 'info'\n\n/**\n * A status label.\n *\n * Every badge carries its meaning in **text**, not just colour. A red badge reading \"Failed\" works\n * for everyone; a red dot alone works for nobody using a screen reader and for the ~4% of the\n * population with a colour vision deficiency. The `dot` is decorative reinforcement.\n *\n * `children` in the React version becomes the default slot here. Badge extends `HTMLAttributes` in\n * React, so — unlike the rest of this file — arbitrary native attributes fall through, not just\n * `class`.\n */\nexport const Badge = defineComponent({\n name: 'AnshBadge',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<BadgeTone>, default: 'neutral' },\n variant: { type: String as PropType<'soft' | 'solid' | 'outline'>, default: 'soft' },\n size: { type: String as PropType<'sm' | 'md'>, default: 'md' },\n /** Leading dot. Useful for statuses where the label is short. */\n dot: { type: Boolean, default: false },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n return h(\n 'span',\n {\n class: cx(\n 'ansh-badge',\n `ansh-badge--${props.tone}`,\n `ansh-badge--${props.variant}`,\n `ansh-badge--${props.size}`,\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n props.dot ? h('span', { class: 'ansh-badge__dot', 'aria-hidden': 'true' }) : null,\n props.icon\n ? h('span', { class: 'ansh-badge__icon' }, [resolveSlotContent(props.icon)])\n : null,\n slots.default?.(),\n ],\n )\n }\n },\n})\n\n// --- Avatar -------------------------------------------------------------------\n\nexport interface AvatarProps {\n src?: string\n /** The person's name. Used for the alt text and to derive the fallback initials. */\n name: string\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n shape?: 'circle' | 'square'\n /** Presence indicator. */\n status?: 'online' | 'offline' | 'busy' | 'away'\n}\n\n/** First letters of the first and last words — \"Ada Lovelace\" → \"AL\". */\nfunction initials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean)\n if (words.length === 0) return '?'\n if (words.length === 1) return words[0]!.slice(0, 2).toUpperCase()\n return (words[0]![0]! + words[words.length - 1]![0]!).toUpperCase()\n}\n\n/** Stable hash so the same name always gets the same colour. */\nfunction hash(text: string): number {\n let value = 0\n for (let i = 0; i < text.length; i++) {\n value = (value * 31 + text.charCodeAt(i)) | 0\n }\n return Math.abs(value)\n}\n\n/**\n * Avatar extends `HTMLAttributes` in React too, so arbitrary attributes fall through here as well.\n *\n * The fallback colour is derived from the name via `@ansh-ui/core`'s colour engine, then the *text*\n * colour is chosen for contrast against it with `pickReadable` — reused rather than reimplemented, as\n * required. Picking a random background and hardcoding white text is how you get illegible initials\n * on a pale hue, and it is the most common avatar bug there is.\n */\nexport const Avatar = defineComponent({\n name: 'AnshAvatar',\n inheritAttrs: false,\n props: {\n src: { type: String, default: undefined },\n name: { type: String, required: true },\n size: { type: String as PropType<'xs' | 'sm' | 'md' | 'lg' | 'xl'>, default: 'md' },\n shape: { type: String as PropType<'circle' | 'square'>, default: 'circle' },\n status: {\n type: String as PropType<'online' | 'offline' | 'busy' | 'away'>,\n default: undefined,\n },\n },\n setup(props, { attrs }) {\n const failed = ref(false)\n\n // OKLCH rather than HSL for the generated hue: at fixed HSL lightness the yellows come out far\n // brighter than the blues, so a set of avatars looks uneven. Fixed OKLCH lightness is\n // perceptually even across the whole hue circle, which is the entire reason to use it here.\n const colors = computed(() => {\n const hue = hash(props.name) % 360\n const backgroundHex = toHex(parseColor(`oklch(72% 0.13 ${hue})`))\n return {\n background: backgroundHex,\n foreground: toHex(pickReadable(backgroundHex, '#ffffff', '#101828')),\n }\n })\n\n const showImage = computed(() => Boolean(props.src) && !failed.value)\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n return h(\n 'span',\n {\n class: cx(\n 'ansh-avatar',\n `ansh-avatar--${props.size}`,\n `ansh-avatar--${props.shape}`,\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n showImage.value\n ? h('img', {\n src: props.src,\n alt: props.name,\n class: 'ansh-avatar__image',\n // Falling back on error rather than showing a broken-image icon, which is what a\n // bare `<img>` does when a CDN URL expires.\n onError: () => {\n failed.value = true\n },\n })\n : h(\n 'span',\n {\n class: 'ansh-avatar__fallback',\n style: { background: colors.value.background, color: colors.value.foreground },\n 'aria-hidden': 'true',\n },\n initials(props.name),\n ),\n\n // The name is always available to assistive technology, even when the initials are\n // shown as decorative.\n !showImage.value ? h('span', { class: 'ansh-visually-hidden' }, props.name) : null,\n\n props.status\n ? h(\n 'span',\n { class: cx('ansh-avatar__status', `ansh-avatar__status--${props.status}`) },\n [h('span', { class: 'ansh-visually-hidden' }, props.status)],\n )\n : null,\n ],\n )\n }\n },\n})\n\n/** Overlapping avatars with an overflow count. */\nexport const AvatarGroup = defineComponent({\n name: 'AnshAvatarGroup',\n inheritAttrs: false,\n props: {\n /** Maximum shown before collapsing into a \"+N\" chip. Default `4`. */\n max: { type: Number, default: 4 },\n size: { type: String as PropType<AvatarProps['size']>, default: undefined },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const items: VNode[] = slots.default?.() ?? []\n const shown = items.slice(0, props.max)\n const overflow = items.length - shown.length\n\n return h(\n 'span',\n {\n class: cx(\n 'ansh-avatar-group',\n props.size && `ansh-avatar-group--${props.size}`,\n attrs.class as string,\n ),\n },\n [\n shown,\n overflow > 0\n ? h(\n 'span',\n {\n class: cx(\n 'ansh-avatar',\n props.size && `ansh-avatar--${props.size}`,\n 'ansh-avatar--circle',\n 'ansh-avatar--more',\n ),\n },\n [\n h(\n 'span',\n { class: 'ansh-avatar__fallback', 'aria-hidden': 'true' },\n `+${overflow}`,\n ),\n h('span', { class: 'ansh-visually-hidden' }, `and ${overflow} more`),\n ],\n )\n : null,\n ],\n )\n }\n },\n})\n\n// --- Kbd ------------------------------------------------------------------\n\n/**\n * A keyboard key.\n *\n * Splits on `+` so `<Kbd>⌘+K</Kbd>` renders two keys with a separator, and the separator is\n * `aria-hidden` — a screen reader should say \"command K\", not \"command plus K\".\n *\n * The React version types its children as a plain `string` rather than a general `ReactNode`, since\n * the split only makes sense on literal text. The default slot is kept here (matching the React\n * call site, `<Kbd>⌘+K</Kbd>`) rather than switching to a string prop, and the text is recovered from\n * the rendered slot nodes — which is exactly what that slot is expected to contain.\n */\nexport const Kbd = defineComponent({\n name: 'AnshKbd',\n inheritAttrs: false,\n setup(_props, { slots, attrs }) {\n return () => {\n const nodes = slots.default?.() ?? []\n const text = nodes\n .map((node) => (typeof node.children === 'string' ? node.children : ''))\n .join('')\n const keys = text.split('+').map((key) => key.trim())\n\n return h(\n 'span',\n { class: cx('ansh-kbd-group', attrs.class as string) },\n keys.map((key, index) =>\n h('span', { key: `${key}-${index}` }, [\n index > 0 ? h('span', { class: 'ansh-kbd__plus', 'aria-hidden': 'true' }, '+') : null,\n h('kbd', { class: 'ansh-kbd' }, key),\n ]),\n ),\n )\n }\n },\n})\n\n// --- Stat -------------------------------------------------------------------\n\nexport interface StatProps {\n label: SlotContent\n value: SlotContent\n /** Change since the previous period. Sign decides the direction and colour. */\n delta?: number\n /** How the delta reads — `'2.4%'` or `'+18 users'`. Defaults to the number with a sign. */\n deltaLabel?: string\n /** For metrics where down is good, like churn or latency. */\n invertDelta?: boolean\n hint?: SlotContent\n icon?: SlotContent\n}\n\n/**\n * A single metric — the building block of every dashboard.\n *\n * The delta's direction is shown by an arrow *and* a sign *and* a colour. Three redundant signals\n * because this is the number people scan fastest and misreading it has consequences.\n */\nexport const Stat = defineComponent({\n name: 'AnshStat',\n inheritAttrs: false,\n props: {\n label: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n value: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n delta: { type: Number, default: undefined },\n deltaLabel: { type: String, default: undefined },\n invertDelta: { type: Boolean, default: false },\n hint: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs }) {\n return () => {\n const delta = props.delta\n const positive = delta !== undefined && delta > 0\n const negative = delta !== undefined && delta < 0\n const good = props.invertDelta ? negative : positive\n\n return h('div', { class: cx('ansh-stat', attrs.class as string) }, [\n h('div', { class: 'ansh-stat__head' }, [\n h('span', { class: 'ansh-stat__label' }, [resolveSlotContent(props.label)]),\n props.icon\n ? h('span', { class: 'ansh-stat__icon' }, [resolveSlotContent(props.icon)])\n : null,\n ]),\n\n h('div', { class: 'ansh-stat__value' }, [resolveSlotContent(props.value)]),\n\n delta !== undefined\n ? h(\n 'div',\n {\n class: cx(\n 'ansh-stat__delta',\n delta !== 0 && (good ? 'ansh-stat__delta--good' : 'ansh-stat__delta--bad'),\n ),\n },\n [\n h(\n 'span',\n { class: 'ansh-stat__arrow', 'aria-hidden': 'true' },\n positive ? '↑' : negative ? '↓' : '→',\n ),\n h('span', {}, props.deltaLabel ?? `${delta > 0 ? '+' : ''}${delta}%`),\n props.hint\n ? h('span', { class: 'ansh-stat__hint' }, [resolveSlotContent(props.hint)])\n : null,\n ],\n )\n : props.hint\n ? h('div', { class: 'ansh-stat__hint' }, [resolveSlotContent(props.hint)])\n : null,\n ])\n }\n },\n})\n\n// --- Empty state --------------------------------------------------------------\n\nexport interface EmptyStateProps {\n title: SlotContent\n description?: SlotContent\n icon?: SlotContent\n /** The action that resolves the emptiness — \"Create your first invoice\". */\n action?: SlotContent\n size?: 'sm' | 'md'\n}\n\n/**\n * The \"nothing here yet\" panel.\n *\n * Always offers the next step. An empty state that only says \"No results\" leaves the user to work\n * out whether the filter is wrong, the data hasn't loaded, or they need to create something — and\n * that ambiguity is where people abandon a screen.\n */\nexport const EmptyState = defineComponent({\n name: 'AnshEmptyState',\n inheritAttrs: false,\n props: {\n title: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n description: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n action: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n size: { type: String as PropType<'sm' | 'md'>, default: 'md' },\n },\n setup(props, { attrs }) {\n return () =>\n h('div', { class: cx('ansh-empty', `ansh-empty--${props.size}`, attrs.class as string) }, [\n props.icon\n ? h('span', { class: 'ansh-empty__icon', 'aria-hidden': 'true' }, [\n resolveSlotContent(props.icon),\n ])\n : null,\n h('p', { class: 'ansh-empty__title' }, [resolveSlotContent(props.title)]),\n props.description\n ? h('p', { class: 'ansh-empty__description' }, [resolveSlotContent(props.description)])\n : null,\n props.action\n ? h('div', { class: 'ansh-empty__action' }, [resolveSlotContent(props.action)])\n : null,\n ])\n },\n})\n\n// --- Description list -----------------------------------------------------\n\nexport interface DescriptionListProps {\n items: ReadonlyArray<{ term: SlotContent; description: SlotContent }>\n /** Side-by-side rather than stacked. Default `'horizontal'` on wide screens. */\n orientation?: 'horizontal' | 'vertical'\n}\n\n/**\n * Key–value pairs — the detail panel of every record in a CRM.\n *\n * A real `<dl>`/`<dt>`/`<dd>`, which is what makes a screen reader pair each label with its value\n * instead of reading twenty unconnected strings.\n */\nexport const DescriptionList = defineComponent({\n name: 'AnshDescriptionList',\n inheritAttrs: false,\n props: {\n items: {\n type: Array as PropType<DescriptionListProps['items']>,\n required: true,\n },\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n },\n setup(props, { attrs }) {\n return () =>\n h(\n 'dl',\n { class: cx('ansh-dl', `ansh-dl--${props.orientation}`, attrs.class as string) },\n props.items.map((item, index) =>\n h('div', { class: 'ansh-dl__row', key: index }, [\n h('dt', { class: 'ansh-dl__term' }, [resolveSlotContent(item.term)]),\n h('dd', { class: 'ansh-dl__description' }, [resolveSlotContent(item.description)]),\n ]),\n ),\n )\n },\n})\n\n// --- Timeline ---------------------------------------------------------------\n\nexport interface TimelineItem {\n id: string\n title: SlotContent\n description?: SlotContent\n /** Rendered as-is; pass an already-formatted string or a `<time>` VNode. */\n timestamp?: SlotContent\n icon?: SlotContent\n tone?: BadgeTone\n}\n\n/**\n * A chronological feed — audit logs, order history, activity streams.\n *\n * An ordered list, because the order carries meaning. The connecting line is drawn with a\n * pseudo-element on the list item rather than a real element, so it can't be selected, read, or land\n * in a copy-paste of the page.\n */\nexport const Timeline = defineComponent({\n name: 'AnshTimeline',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly TimelineItem[]>, required: true },\n },\n setup(props, { attrs }) {\n return () =>\n h(\n 'ol',\n { class: cx('ansh-timeline', attrs.class as string) },\n props.items.map((item) =>\n h(\n 'li',\n {\n key: item.id,\n class: cx('ansh-timeline__item', item.tone && `ansh-timeline__item--${item.tone}`),\n },\n [\n h('span', { class: 'ansh-timeline__marker', 'aria-hidden': 'true' }, [\n item.icon ? resolveSlotContent(item.icon) : null,\n ]),\n h('div', { class: 'ansh-timeline__body' }, [\n h('div', { class: 'ansh-timeline__head' }, [\n h('span', { class: 'ansh-timeline__title' }, [resolveSlotContent(item.title)]),\n item.timestamp\n ? h('span', { class: 'ansh-timeline__time' }, [\n resolveSlotContent(item.timestamp),\n ])\n : null,\n ]),\n item.description\n ? h('p', { class: 'ansh-timeline__description' }, [\n resolveSlotContent(item.description),\n ])\n : null,\n ]),\n ],\n ),\n ),\n )\n },\n})\n\n// --- Code block ---------------------------------------------------------------\n\nexport interface CodeBlockProps {\n code: string\n language?: string\n /** Show a copy button. Default `true`. */\n copyable?: boolean\n /** Show line numbers. */\n lineNumbers?: boolean\n /** Filename or title shown in the header bar. */\n filename?: string\n}\n\n/**\n * A code block with a copy button.\n *\n * No syntax highlighter, matching the React version — shipping one means a tokeniser and a theme in\n * the bundle of every app that displays a snippet, for a cost that lands on consumers who may never\n * render code at all.\n */\nexport const CodeBlock = defineComponent({\n name: 'AnshCodeBlock',\n inheritAttrs: false,\n props: {\n code: { type: String, required: true },\n language: { type: String, default: 'tsx' },\n copyable: { type: Boolean, default: true },\n lineNumbers: { type: Boolean, default: false },\n filename: { type: String, default: undefined },\n },\n setup(props, { attrs }) {\n const copied = ref(false)\n let timer: ReturnType<typeof setTimeout> | undefined\n\n const copy = async (): Promise<void> => {\n try {\n await navigator.clipboard.writeText(props.code)\n copied.value = true\n clearTimeout(timer)\n timer = setTimeout(() => {\n copied.value = false\n }, 1600)\n } catch {\n // Clipboard access is refused on insecure origins and under some permission policies. The\n // code is selectable either way, so failing quietly beats an error dialog.\n }\n }\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n return () => {\n const lines = props.code.split('\\n')\n\n return h('div', { class: cx('ansh-code', attrs.class as string) }, [\n props.filename || props.copyable\n ? h('div', { class: 'ansh-code__bar' }, [\n h('span', { class: 'ansh-code__filename' }, props.filename ?? props.language),\n props.copyable\n ? h(\n 'button',\n { type: 'button', class: 'ansh-code__copy ansh-focusable', onClick: copy },\n [\n copied.value ? 'Copied' : 'Copy',\n h('span', { class: 'ansh-visually-hidden' }, ' code to clipboard'),\n ],\n )\n : null,\n ])\n : null,\n\n h('pre', { class: cx('ansh-code__pre', props.lineNumbers && 'ansh-code__pre--numbered') }, [\n h(\n 'code',\n { class: `language-${props.language}` },\n props.lineNumbers\n ? lines.map((line, index) =>\n h('span', { class: 'ansh-code__line', key: index }, [\n h(\n 'span',\n { class: 'ansh-code__lineno', 'aria-hidden': 'true' },\n String(index + 1),\n ),\n line,\n '\\n',\n ]),\n )\n : props.code,\n ),\n ]),\n ])\n }\n },\n})\n","import { type PropType, defineComponent, h } from 'vue'\nimport { cx } from '../../primitives/utils'\n\n/**\n * Progress indicators — the Vue counterpart of `@ansh-ui/react`'s `Progress`/`CircularProgress`/\n * `Meter`.\n *\n * The distinction that matters and is usually missed: **progress** is work advancing toward\n * completion (`role=\"progressbar\"`), a **meter** is a static measurement within a range\n * (`role=\"meter\"` — disk usage, a score, a quota). Announcing a disk-usage bar as progress tells a\n * screen-reader user that something is loading, which it isn't.\n */\n\nexport interface ProgressProps {\n /** `0`–`max`. Omit for an indeterminate bar. */\n value?: number\n max?: number\n size?: 'sm' | 'md' | 'lg'\n tone?: 'accent' | 'success' | 'warning' | 'danger'\n /** Accessible name — \"Upload progress\", not \"Progress\". */\n label: string\n /** Show the label and percentage above the bar. */\n showLabel?: boolean\n /** Override the announced/displayed text. */\n formatValue?: (value: number, max: number) => string\n}\n\nexport const Progress = defineComponent({\n name: 'AnshProgress',\n inheritAttrs: false,\n props: {\n value: { type: Number, default: undefined },\n max: { type: Number, default: 100 },\n size: { type: String as PropType<'sm' | 'md' | 'lg'>, default: 'md' },\n tone: {\n type: String as PropType<'accent' | 'success' | 'warning' | 'danger'>,\n default: 'accent',\n },\n label: { type: String, required: true },\n showLabel: { type: Boolean, default: false },\n formatValue: {\n type: Function as PropType<(value: number, max: number) => string>,\n default: undefined,\n },\n },\n setup(props, { attrs }) {\n return () => {\n const rawValue = props.value\n const indeterminate = rawValue === undefined\n const clamped = rawValue === undefined ? 0 : Math.min(Math.max(rawValue, 0), props.max)\n const percent = (clamped / props.max) * 100\n const text = props.formatValue\n ? props.formatValue(clamped, props.max)\n : `${Math.round(percent)}%`\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-progress',\n `ansh-progress--${props.size}`,\n `ansh-progress--${props.tone}`,\n attrs.class as string,\n ),\n },\n [\n props.showLabel\n ? h('div', { class: 'ansh-progress__labels' }, [\n h('span', { class: 'ansh-progress__label' }, props.label),\n !indeterminate ? h('span', { class: 'ansh-progress__value' }, text) : null,\n ])\n : null,\n\n h(\n 'div',\n {\n class: cx(\n 'ansh-progress__track',\n indeterminate && 'ansh-progress__track--indeterminate',\n ),\n role: 'progressbar',\n 'aria-label': props.label,\n // An indeterminate progressbar omits `aria-valuenow` entirely. Setting it to 0 would\n // be announced as \"0 percent\", implying stalled work rather than unknown duration.\n ...(indeterminate\n ? null\n : {\n 'aria-valuenow': clamped,\n 'aria-valuemin': 0,\n 'aria-valuemax': props.max,\n 'aria-valuetext': text,\n }),\n },\n [\n h('div', {\n class: 'ansh-progress__fill',\n style: indeterminate ? undefined : { width: `${percent}%` },\n }),\n ],\n ),\n ],\n )\n }\n },\n})\n\nexport interface CircularProgressProps extends Omit<ProgressProps, 'size'> {\n /** Diameter in px. Default `48`. */\n size?: number\n /** Ring thickness in px. Default `4`. */\n thickness?: number\n}\n\n/**\n * A ring progress indicator.\n *\n * Drawn with `stroke-dasharray` on an SVG circle rather than with conic gradients, so the ends can\n * be rounded and the ring animates smoothly at any size. The circle is rotated -90° so 0% starts at\n * the top, which is where everyone expects it.\n *\n * `children` in the React version — content in the middle, usually the percentage — becomes the\n * default slot here.\n */\nexport const CircularProgress = defineComponent({\n name: 'AnshCircularProgress',\n inheritAttrs: false,\n props: {\n value: { type: Number, default: undefined },\n max: { type: Number, default: 100 },\n size: { type: Number, default: 48 },\n thickness: { type: Number, default: 4 },\n tone: {\n type: String as PropType<'accent' | 'success' | 'warning' | 'danger'>,\n default: 'accent',\n },\n label: { type: String, required: true },\n formatValue: {\n type: Function as PropType<(value: number, max: number) => string>,\n default: undefined,\n },\n },\n setup(props, { attrs, slots }) {\n return () => {\n const rawValue = props.value\n const indeterminate = rawValue === undefined\n const clamped = rawValue === undefined ? 25 : Math.min(Math.max(rawValue, 0), props.max)\n const fraction = clamped / props.max\n\n const radius = (props.size - props.thickness) / 2\n const circumference = 2 * Math.PI * radius\n const text = props.formatValue\n ? props.formatValue(clamped, props.max)\n : `${Math.round(fraction * 100)}%`\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-ring',\n `ansh-ring--${props.tone}`,\n indeterminate && 'ansh-ring--indeterminate',\n attrs.class as string,\n ),\n style: { width: `${props.size}px`, height: `${props.size}px` },\n role: 'progressbar',\n 'aria-label': props.label,\n ...(indeterminate\n ? null\n : {\n 'aria-valuenow': clamped,\n 'aria-valuemin': 0,\n 'aria-valuemax': props.max,\n 'aria-valuetext': text,\n }),\n },\n [\n h(\n 'svg',\n {\n width: props.size,\n height: props.size,\n viewBox: `0 0 ${props.size} ${props.size}`,\n 'aria-hidden': 'true',\n },\n [\n h('circle', {\n class: 'ansh-ring__track',\n cx: props.size / 2,\n cy: props.size / 2,\n r: radius,\n fill: 'none',\n 'stroke-width': props.thickness,\n }),\n h('circle', {\n class: 'ansh-ring__fill',\n cx: props.size / 2,\n cy: props.size / 2,\n r: radius,\n fill: 'none',\n 'stroke-width': props.thickness,\n 'stroke-linecap': 'round',\n 'stroke-dasharray': circumference,\n 'stroke-dashoffset': circumference * (1 - fraction),\n transform: `rotate(-90 ${props.size / 2} ${props.size / 2})`,\n }),\n ],\n ),\n slots.default ? h('span', { class: 'ansh-ring__content' }, slots.default()) : null,\n ],\n )\n }\n },\n})\n\nexport interface MeterProps {\n value: number\n min?: number\n max?: number\n /** Thresholds that colour the bar — below `low` is danger, above `high` is success. */\n low?: number\n high?: number\n /** Flip the colours, for metrics where high is bad (disk usage, error rate). */\n inverted?: boolean\n label: string\n showValue?: boolean\n formatValue?: (value: number) => string\n}\n\n/**\n * A measurement within a known range — quota, score, capacity.\n *\n * `role=\"meter\"`, not `progressbar`. Colour follows the thresholds, but the numeric value is always\n * rendered too, so the state is never conveyed by colour alone.\n */\nexport const Meter = defineComponent({\n name: 'AnshMeter',\n inheritAttrs: false,\n props: {\n value: { type: Number, required: true },\n min: { type: Number, default: 0 },\n max: { type: Number, default: 100 },\n low: { type: Number, default: undefined },\n high: { type: Number, default: undefined },\n inverted: { type: Boolean, default: false },\n label: { type: String, required: true },\n showValue: { type: Boolean, default: true },\n formatValue: { type: Function as PropType<(value: number) => string>, default: undefined },\n },\n setup(props, { attrs }) {\n return () => {\n const clamped = Math.min(Math.max(props.value, props.min), props.max)\n const percent = ((clamped - props.min) / (props.max - props.min)) * 100\n\n let tone: 'danger' | 'warning' | 'success' = 'success'\n if (props.low !== undefined && clamped < props.low)\n tone = props.inverted ? 'success' : 'danger'\n else if (props.high !== undefined && clamped > props.high)\n tone = props.inverted ? 'danger' : 'success'\n else if (props.low !== undefined || props.high !== undefined) tone = 'warning'\n\n const text = props.formatValue ? props.formatValue(clamped) : String(clamped)\n\n return h('div', { class: cx('ansh-meter', `ansh-meter--${tone}`, attrs.class as string) }, [\n h('div', { class: 'ansh-progress__labels' }, [\n h('span', { class: 'ansh-progress__label' }, props.label),\n props.showValue ? h('span', { class: 'ansh-progress__value' }, text) : null,\n ]),\n h(\n 'div',\n {\n class: 'ansh-progress__track',\n role: 'meter',\n 'aria-label': props.label,\n 'aria-valuenow': clamped,\n 'aria-valuemin': props.min,\n 'aria-valuemax': props.max,\n 'aria-valuetext': text,\n },\n [h('div', { class: 'ansh-progress__fill', style: { width: `${percent}%` } })],\n ),\n ])\n }\n },\n})\n"]}
|