@ansh-ui/react 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-5CFQFMP5.js +178 -0
  3. package/dist/chunk-5CFQFMP5.js.map +1 -0
  4. package/dist/chunk-6VRF7X5C.cjs +164 -0
  5. package/dist/chunk-6VRF7X5C.cjs.map +1 -0
  6. package/dist/chunk-AVPEA5PB.cjs +718 -0
  7. package/dist/chunk-AVPEA5PB.cjs.map +1 -0
  8. package/dist/chunk-C32LKF23.cjs +198 -0
  9. package/dist/chunk-C32LKF23.cjs.map +1 -0
  10. package/dist/chunk-C5JG6TMM.cjs +1200 -0
  11. package/dist/chunk-C5JG6TMM.cjs.map +1 -0
  12. package/dist/chunk-DATBU46V.cjs +614 -0
  13. package/dist/chunk-DATBU46V.cjs.map +1 -0
  14. package/dist/chunk-EGG4CP7C.js +320 -0
  15. package/dist/chunk-EGG4CP7C.js.map +1 -0
  16. package/dist/chunk-H34OXXJU.js +55 -0
  17. package/dist/chunk-H34OXXJU.js.map +1 -0
  18. package/dist/chunk-HO2YSF5O.js +187 -0
  19. package/dist/chunk-HO2YSF5O.js.map +1 -0
  20. package/dist/chunk-HPGCILO4.js +760 -0
  21. package/dist/chunk-HPGCILO4.js.map +1 -0
  22. package/dist/chunk-IBXLC5IE.js +154 -0
  23. package/dist/chunk-IBXLC5IE.js.map +1 -0
  24. package/dist/chunk-LDCZQP3R.js +1185 -0
  25. package/dist/chunk-LDCZQP3R.js.map +1 -0
  26. package/dist/chunk-LXCIXR5T.js +27 -0
  27. package/dist/chunk-LXCIXR5T.js.map +1 -0
  28. package/dist/chunk-O2PX54KX.js +94 -0
  29. package/dist/chunk-O2PX54KX.js.map +1 -0
  30. package/dist/chunk-OHBWBXLO.cjs +101 -0
  31. package/dist/chunk-OHBWBXLO.cjs.map +1 -0
  32. package/dist/chunk-OJN5JBNP.cjs +776 -0
  33. package/dist/chunk-OJN5JBNP.cjs.map +1 -0
  34. package/dist/chunk-OLTS6G5M.js +606 -0
  35. package/dist/chunk-OLTS6G5M.js.map +1 -0
  36. package/dist/chunk-PO5DU3FU.cjs +29 -0
  37. package/dist/chunk-PO5DU3FU.cjs.map +1 -0
  38. package/dist/chunk-QO3E7TJS.js +2940 -0
  39. package/dist/chunk-QO3E7TJS.js.map +1 -0
  40. package/dist/chunk-RHTLNSVW.cjs +2976 -0
  41. package/dist/chunk-RHTLNSVW.cjs.map +1 -0
  42. package/dist/chunk-SFU5EPSN.cjs +61 -0
  43. package/dist/chunk-SFU5EPSN.cjs.map +1 -0
  44. package/dist/chunk-T4AK2KLM.js +699 -0
  45. package/dist/chunk-T4AK2KLM.js.map +1 -0
  46. package/dist/chunk-WGYNCSTP.cjs +333 -0
  47. package/dist/chunk-WGYNCSTP.cjs.map +1 -0
  48. package/dist/chunk-XEP6P7E6.js +279 -0
  49. package/dist/chunk-XEP6P7E6.js.map +1 -0
  50. package/dist/chunk-XMXECSQO.cjs +286 -0
  51. package/dist/chunk-XMXECSQO.cjs.map +1 -0
  52. package/dist/chunk-ZWAFLHC2.cjs +181 -0
  53. package/dist/chunk-ZWAFLHC2.cjs.map +1 -0
  54. package/dist/data.cjs +71 -0
  55. package/dist/data.cjs.map +1 -0
  56. package/dist/data.d.cts +316 -0
  57. package/dist/data.d.ts +316 -0
  58. package/dist/data.js +6 -0
  59. package/dist/data.js.map +1 -0
  60. package/dist/form.cjs +153 -0
  61. package/dist/form.cjs.map +1 -0
  62. package/dist/form.d.cts +660 -0
  63. package/dist/form.d.ts +660 -0
  64. package/dist/form.js +8 -0
  65. package/dist/form.js.map +1 -0
  66. package/dist/index.cjs +1641 -0
  67. package/dist/index.cjs.map +1 -0
  68. package/dist/index.d.cts +552 -0
  69. package/dist/index.d.ts +552 -0
  70. package/dist/index.js +956 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/layout.cjs +68 -0
  73. package/dist/layout.cjs.map +1 -0
  74. package/dist/layout.d.cts +169 -0
  75. package/dist/layout.d.ts +169 -0
  76. package/dist/layout.js +7 -0
  77. package/dist/layout.js.map +1 -0
  78. package/dist/motion-CQmCq6_k.d.ts +395 -0
  79. package/dist/motion-CSX4g2N8.d.cts +395 -0
  80. package/dist/motion.cjs +79 -0
  81. package/dist/motion.cjs.map +1 -0
  82. package/dist/motion.d.cts +4 -0
  83. package/dist/motion.d.ts +4 -0
  84. package/dist/motion.js +6 -0
  85. package/dist/motion.js.map +1 -0
  86. package/dist/navigation.cjs +48 -0
  87. package/dist/navigation.cjs.map +1 -0
  88. package/dist/navigation.d.cts +210 -0
  89. package/dist/navigation.d.ts +210 -0
  90. package/dist/navigation.js +7 -0
  91. package/dist/navigation.js.map +1 -0
  92. package/dist/overlay.cjs +69 -0
  93. package/dist/overlay.cjs.map +1 -0
  94. package/dist/overlay.d.cts +330 -0
  95. package/dist/overlay.d.ts +330 -0
  96. package/dist/overlay.js +8 -0
  97. package/dist/overlay.js.map +1 -0
  98. package/dist/position-DVScKcaa.d.cts +66 -0
  99. package/dist/position-DVScKcaa.d.ts +66 -0
  100. package/dist/primitives.cjs +162 -0
  101. package/dist/primitives.cjs.map +1 -0
  102. package/dist/primitives.d.cts +294 -0
  103. package/dist/primitives.d.ts +294 -0
  104. package/dist/primitives.js +9 -0
  105. package/dist/primitives.js.map +1 -0
  106. package/dist/sidebar-D-PafAXw.d.cts +71 -0
  107. package/dist/sidebar-D-PafAXw.d.ts +71 -0
  108. package/dist/styles.css +5575 -0
  109. package/dist/use-observers-B9qtimrk.d.cts +99 -0
  110. package/dist/use-observers-B9qtimrk.d.ts +99 -0
  111. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/factory/create-effect-component.tsx","../src/components/backgrounds.tsx","../src/components/ui/buttons.tsx","../src/components/ui/cards.tsx","../src/components/ui/dock.tsx","../src/components/ui/text-effects.tsx","../src/components/ui/feedback.tsx","../src/components/ui/marketing.tsx","../src/components/feedback/alert.tsx","../src/index.ts"],"names":["Component","forwardRef","Button","ripple","useRef","rippleBehaviour","jsx","IconButton","SpotlightCard","useEffect","GlowCard","TiltCard3D","getTicker","jsxs","useState","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type ElementType,\n type ForwardRefExoticComponent,\n type ForwardedRef,\n type ReactNode,\n type RefAttributes,\n forwardRef,\n useEffect,\n useRef,\n} from 'react'\nimport {\n type BaseEffectOptions,\n type EffectDefinition,\n type EffectHandle,\n mountEffect,\n} from '@ansh-ui/core'\nimport { useMergedRef } from '../hooks/use-observers'\n\n/**\n * Turn an {@link EffectDefinition} into a React component.\n *\n * This factory is why the component count can scale without the maintenance cost scaling with it.\n * Every canvas-backed component in the library is one line:\n *\n * ```tsx\n * export const AuroraBackground = createEffectComponent(aurora, 'AuroraBackground')\n * ```\n *\n * and gets, for free:\n *\n * - **SSR safety.** The server renders only the host element and its children. The canvas is\n * created in an effect, so server and first-client markup are byte-identical and React never\n * reports a hydration mismatch.\n * - **Prop diffing that doesn't remount.** Options are compared shallowly and pushed through\n * `handle.update()`, which live-updates what it can and remounts only what it must.\n * - **A polymorphic `as` prop**, so a background can be a `<section>`, `<div>`, or `<aside>`\n * without a wrapper element.\n * - **Ref forwarding** to the host element.\n * - **Complete teardown**, verified by the leak harness in the test suite.\n */\n\n/** Props every effect component accepts on top of its own options. */\nexport interface EffectComponentBaseProps {\n /** Element to render as the host. Default `'div'`. */\n as?: ElementType\n className?: string\n style?: React.CSSProperties\n /** Content rendered above the canvas. Positioned automatically. */\n children?: ReactNode\n}\n\nexport type EffectComponentProps<Options extends BaseEffectOptions> = Options &\n EffectComponentBaseProps &\n Omit<ComponentPropsWithoutRef<'div'>, keyof Options | 'style' | 'className' | 'children'>\n\n/** The type of a component produced by {@link createEffectComponent}. */\nexport type EffectComponent<Options extends BaseEffectOptions> = ForwardRefExoticComponent<\n EffectComponentProps<Options> & RefAttributes<HTMLElement>\n>\n\n/**\n * The render function's own props type.\n *\n * Deliberately loose. The component genuinely accepts arbitrary props — it partitions them at\n * runtime into effect options and DOM attributes by consulting the definition's `defaults`. Typing\n * the render function with the precise generic instead makes `forwardRef` unable to relate\n * `PropsWithoutRef<P>` back to `P` for an unresolved `P`, which is a long-standing limitation\n * rather than a signal that anything is wrong.\n *\n * Precision is restored at the export boundary via {@link EffectComponent}, which is the type\n * consumers actually see.\n */\ntype LooseProps = Record<string, unknown> & {\n as?: ElementType\n className?: string\n style?: CSSProperties\n children?: ReactNode\n}\n\n/**\n * Host styles.\n *\n * `isolation: isolate` creates a new stacking context, which stops the canvas' blend modes from\n * compositing against the *page* behind the component. Without it, an effect using `lighter`\n * bleeds into whatever is underneath the section, which is almost never intended and is very\n * confusing to debug.\n */\nconst HOST_STYLE: React.CSSProperties = {\n position: 'relative',\n isolation: 'isolate',\n overflow: 'hidden',\n}\n\n/** Children sit above the canvas without needing the author to manage z-index. */\nconst CONTENT_STYLE: React.CSSProperties = {\n position: 'relative',\n zIndex: 1,\n}\n\nexport function createEffectComponent<Options extends BaseEffectOptions>(\n definition: EffectDefinition<Options>,\n displayName?: string,\n): EffectComponent<Options> {\n /** Keys the effect understands, so the rest can be forwarded to the DOM element. */\n const optionKeys = new Set(Object.keys(definition.defaults))\n\n function Render(props: LooseProps, forwardedRef: ForwardedRef<HTMLElement>) {\n const { as: Component = 'div', className, style, children, ...rest } = props\n\n const hostRef = useRef<HTMLElement | null>(null)\n const handleRef = useRef<EffectHandle | null>(null)\n const mergedRef = useMergedRef<HTMLElement>(hostRef, forwardedRef)\n\n // Split props into effect options and DOM attributes. Doing this every render is cheap\n // (a handful of key lookups) and means an author can put `aria-label` or `onClick` on the\n // component and have it land on the element rather than being swallowed.\n const options: Record<string, unknown> = {}\n const domProps: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(rest)) {\n if (optionKeys.has(key)) options[key] = value\n else domProps[key] = value\n }\n\n // Serialised options, used as the effect dependency. Comparing a serialisation rather than\n // referential identity is what lets an author pass an inline `colors={['#fff', '#000']}`\n // array without remounting the effect on every render.\n const optionsKey = stableKey(options)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n // Mount once. Options changes flow through the update effect below.\n useEffect(() => {\n const host = hostRef.current\n if (!host) return\n\n const handle = mountEffect(definition, host, optionsRef.current as Partial<Options>)\n handleRef.current = handle\n\n return () => {\n handle.destroy()\n handleRef.current = null\n }\n // Intentionally mount-only. `mountEffect` owns its own reconciliation, and remounting on\n // every option change would restart particle systems and lose all their state.\n }, [])\n\n useEffect(() => {\n handleRef.current?.update(optionsRef.current as Partial<BaseEffectOptions>)\n // Keyed on the serialisation so this fires exactly when an option actually changed.\n }, [optionsKey])\n\n return (\n <Component\n ref={mergedRef}\n className={className}\n style={{ ...HOST_STYLE, ...style }}\n {...domProps}\n >\n {children != null ? <div style={CONTENT_STYLE}>{children}</div> : null}\n </Component>\n )\n }\n\n const Component = forwardRef(Render)\n Component.displayName = displayName ?? `Ansh(${definition.name})`\n\n return Component as unknown as EffectComponent<Options>\n}\n\n/**\n * A stable string key for an options object.\n *\n * Not `JSON.stringify` directly: key order in a spread-built object is not guaranteed to match\n * between renders, and a reordered serialisation would look like a change and trigger a needless\n * update. Sorting the keys makes the key genuinely value-based.\n *\n * Functions are serialised by identity marker rather than by body — an inline callback changes\n * identity every render, and treating that as an option change would defeat the whole purpose.\n */\nfunction stableKey(options: Record<string, unknown>): string {\n const keys = Object.keys(options).sort()\n const parts: string[] = []\n for (const key of keys) {\n const value = options[key]\n if (typeof value === 'function') {\n parts.push(`${key}:fn`)\n } else if (value === undefined) {\n // Skipped entirely: `undefined` means \"not supplied\", and including it would make\n // `<X speed={undefined} />` differ from `<X />`.\n continue\n } else {\n parts.push(`${key}:${JSON.stringify(value)}`)\n }\n }\n return parts.join('|')\n}\n","import {\n animatedGradient,\n aurora,\n blob,\n constellation,\n fireflies,\n meshGradient,\n meteors,\n noiseLayer,\n particleField,\n rain,\n snow,\n spotlight,\n waves,\n} from '@ansh-ui/core'\nimport { createEffectComponent } from '../factory/create-effect-component'\n\n/**\n * Canvas-backed background components.\n *\n * Each is a single call to {@link createEffectComponent}, which supplies SSR safety, prop\n * diffing, ref forwarding, polymorphic `as`, and teardown. The visual behaviour lives entirely in\n * `@ansh-ui/core`, so these definitions are the complete React binding — there is no per-component\n * React logic to get wrong, and the Vue components are the same effects with a different factory.\n *\n * Every component accepts its effect's full option surface plus `as`, `className`, `style`,\n * `children`, and any DOM attribute.\n *\n * ```tsx\n * <AuroraBackground colors={['#0275f4', '#9f0550']} intensity={1.2} className=\"h-screen\">\n * <h1>Motion, refined.</h1>\n * </AuroraBackground>\n * ```\n */\n\n/** Vertical curtains of light with ridged filament structure. */\nexport const AuroraBackground = createEffectComponent(aurora, 'AuroraBackground')\n\n/** Soft overlapping colour fields that drift on non-repeating Lissajous paths. */\nexport const MeshGradient = createEffectComponent(meshGradient, 'MeshGradient')\n\n/** A rotating multi-stop linear gradient. One fill per frame — the cheap option. */\nexport const AnimatedGradient = createEffectComponent(animatedGradient, 'AnimatedGradient')\n\n/** Points advected by a divergence-free curl-noise flow field. */\nexport const ParticleField = createEffectComponent(particleField, 'ParticleField')\n\n/** Drifting nodes joined by lines, with the pointer as a live node. */\nexport const Constellation = createEffectComponent(constellation, 'Constellation')\n\n/** Streaks falling across the canvas, spawned as a Poisson process. */\nexport const MeteorShower = createEffectComponent(meteors, 'MeteorShower')\n\n/** Depth-parallaxed rain, optionally with splash rings. */\nexport const Rain = createEffectComponent(rain, 'Rain')\n\n/** Depth-parallaxed snow with independent per-flake sway. */\nexport const Snow = createEffectComponent(snow, 'Snow')\n\n/** Wandering points with asymmetric bioluminescent pulsing. */\nexport const Fireflies = createEffectComponent(fireflies, 'Fireflies')\n\n/** Layered undulating bands built from three incommensurable sines plus noise. */\nexport const Waves = createEffectComponent(waves, 'Waves')\n\n/** Organic shapes morphing via noise sampled on a closed circle. */\nexport const LiquidBlob = createEffectComponent(blob, 'LiquidBlob')\n\n/**\n * Film grain and dither overlay.\n *\n * Place this *above* a gradient to hide 8-bit banding and give flat colour a physical texture.\n * It is the cheapest single change that makes a gradient look deliberate.\n */\nexport const NoiseLayer = createEffectComponent(noiseLayer, 'NoiseLayer')\n\n/** A soft light that follows the pointer, easing in and out of existence. */\nexport const Spotlight = createEffectComponent(spotlight, 'Spotlight')\n","import {\n type ButtonHTMLAttributes,\n type ElementType,\n type ForwardedRef,\n type ReactNode,\n forwardRef,\n useRef,\n} from 'react'\nimport { magnetic, ripple as rippleBehaviour } from '@ansh-ui/core'\nimport { useBehaviour } from '../../factory/create-behaviour-component'\nimport { useMergedRef } from '../../hooks/use-observers'\n\n/**\n * Buttons.\n *\n * The visual treatments are CSS — a shimmer sweep, a rotating conic border, a fill that rises on\n * hover. None of them need JavaScript, and doing them in JS would mean tracking hover in React\n * state and re-rendering on every pointer event.\n *\n * What *does* need JavaScript is the physics: magnetic attraction and the ripple both read pointer\n * position every frame. Those come from the engine's behaviours, attached via `useBehaviour`, so\n * the button element itself carries them rather than being wrapped in another div.\n */\n\nexport type ButtonVariant = 'solid' | 'ghost' | 'shimmer' | 'glow' | 'liquid'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color'> {\n variant?: ButtonVariant\n size?: ButtonSize\n /** Render as a different element — `'a'` for links. Default `'button'`. */\n as?: ElementType\n /**\n * Pull toward the pointer, in pixels of maximum displacement. `0` disables.\n * Spring-driven, so it has weight rather than tracking the cursor rigidly. Default `0`.\n */\n magneticStrength?: number\n /** Emit a ripple from the point of contact. Default `false`. */\n ripple?: boolean\n /** Colours for the `glow` variant's rotating border. */\n glowColors?: readonly [string, string]\n /** Seconds per rotation or sweep, depending on variant. */\n duration?: number\n children?: ReactNode\n}\n\n/**\n * ```tsx\n * <Button variant=\"shimmer\" magneticStrength={14}>Get started</Button>\n * <Button variant=\"glow\" glowColors={['#0275f4', '#9f0550']}>Upgrade</Button>\n * <Button variant=\"liquid\" ripple>Deploy</Button>\n * ```\n */\nexport const Button = forwardRef(function Button(\n {\n variant = 'solid',\n size = 'md',\n as: Component = 'button',\n magneticStrength = 0,\n ripple = false,\n glowColors,\n duration,\n className,\n style,\n children,\n ...rest\n }: ButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>,\n) {\n const localRef = useRef<HTMLButtonElement | null>(null)\n const mergedRef = useMergedRef<HTMLButtonElement>(localRef, forwardedRef)\n\n // Both hooks are always called — React requires a stable hook order — and each no-ops when its\n // feature is off, rather than being conditionally invoked.\n useBehaviour(localRef, magnetic, {\n strength: magneticStrength,\n disabled: magneticStrength <= 0,\n scale: magneticStrength > 0 ? 1.03 : 1,\n })\n\n useBehaviour(localRef, rippleBehaviour, { disabled: !ripple })\n\n const classes = [\n 'ansh-btn',\n `ansh-btn--${variant}`,\n size !== 'md' && `ansh-btn--${size}`,\n 'ansh-focusable',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Variant knobs travel as custom properties so the stylesheet stays static and themeable.\n const cssVars: Record<string, string> = {}\n if (glowColors) {\n cssVars['--ansh-glow-from'] = glowColors[0]\n cssVars['--ansh-glow-via'] = glowColors[1]\n cssVars['--ansh-glow-to'] = glowColors[0]\n }\n if (duration !== undefined) {\n cssVars['--ansh-glow-duration'] = `${duration}s`\n cssVars['--ansh-shimmer-duration'] = `${duration}s`\n }\n\n return (\n <Component ref={mergedRef} className={classes} style={{ ...cssVars, ...style }} {...rest}>\n {children}\n </Component>\n )\n})\n\nexport interface IconButtonProps extends ButtonProps {\n /** Required: an icon-only control has no visible text, so it needs an accessible name. */\n label: string\n}\n\n/**\n * A square, icon-only button.\n *\n * `label` is required rather than optional. An icon-only control with no accessible name is\n * announced as just \"button\" by a screen reader, and making the prop optional guarantees some\n * consumers will omit it.\n */\nexport const IconButton = forwardRef(function IconButton(\n { label, className, ...rest }: IconButtonProps,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n return (\n <Button\n ref={ref}\n aria-label={label}\n className={['ansh-btn--icon', className].filter(Boolean).join(' ')}\n style={{ padding: 'var(--ansh-space-3)', aspectRatio: '1' }}\n {...rest}\n />\n )\n})\n","import {\n type ElementType,\n type ForwardedRef,\n type HTMLAttributes,\n type ReactNode,\n forwardRef,\n useEffect,\n useRef,\n} from 'react'\nimport { getTicker } from '@ansh-ui/core'\nimport { useMergedRef } from '../../hooks/use-observers'\n\n/**\n * Cards.\n *\n * `SpotlightCard` and `GlowCard` both need the pointer position, but neither needs the full\n * `trackPointer` machinery from the engine — they write two CSS custom properties and let the\n * stylesheet do the rest, which is cheaper and doesn't need a spring. Writing to\n * `style.setProperty` bypasses React's render cycle entirely, which is what keeps a 60 Hz pointer\n * handler from costing a re-render.\n */\n\nexport interface SpotlightCardProps extends HTMLAttributes<HTMLDivElement> {\n as?: ElementType\n /** Highlight colour. Any CSS colour. Default a soft brand blue. */\n color?: string\n /** Diameter of the highlight in pixels. Default `320`. */\n size?: number\n children?: ReactNode\n}\n\n/**\n * A card with a radial highlight that follows the pointer.\n *\n * ```tsx\n * <SpotlightCard color=\"rgb(2 117 244 / 0.25)\">\n * <h3>Fast by default</h3>\n * </SpotlightCard>\n * ```\n */\nexport const SpotlightCard = forwardRef(function SpotlightCard(\n { as: Component = 'div', color, size, className, children, ...rest }: SpotlightCardProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const localRef = useRef<HTMLDivElement | null>(null)\n const mergedRef = useMergedRef<HTMLDivElement>(localRef, forwardedRef)\n\n useEffect(() => {\n const node = localRef.current\n if (!node) return\n\n const onMove = (event: PointerEvent) => {\n const rect = node.getBoundingClientRect()\n node.style.setProperty('--ansh-spot-x', `${event.clientX - rect.left}px`)\n node.style.setProperty('--ansh-spot-y', `${event.clientY - rect.top}px`)\n }\n const onEnter = () => node.style.setProperty('--ansh-spot-opacity', '1')\n const onLeave = () => node.style.setProperty('--ansh-spot-opacity', '0')\n\n node.addEventListener('pointermove', onMove, { passive: true })\n node.addEventListener('pointerenter', onEnter, { passive: true })\n node.addEventListener('pointerleave', onLeave, { passive: true })\n return () => {\n node.removeEventListener('pointermove', onMove)\n node.removeEventListener('pointerenter', onEnter)\n node.removeEventListener('pointerleave', onLeave)\n }\n }, [])\n\n const cssVars: Record<string, string> = {}\n if (color) cssVars['--ansh-spot-color'] = color\n if (size) cssVars['--ansh-spot-size'] = `${size}px`\n\n return (\n <Component\n ref={mergedRef}\n className={['ansh-card', 'ansh-card--spotlight', className].filter(Boolean).join(' ')}\n style={cssVars}\n {...rest}\n >\n {children}\n </Component>\n )\n})\n\nexport interface GlowCardProps extends HTMLAttributes<HTMLDivElement> {\n as?: ElementType\n /** The rotating border's colour stops. Default the Ansh house gradient. */\n colors?: readonly [string, string]\n /** Seconds per full rotation. Default `6`. */\n duration?: number\n children?: ReactNode\n}\n\n/**\n * A card with a slowly rotating conic-gradient border.\n *\n * The rotation is driven by an `@property`-registered custom angle animated via CSS `@keyframes`\n * — no JavaScript runs per frame. `@property` is what makes a custom property animatable at all;\n * without it browsers cannot interpolate between angle values and the gradient would jump.\n */\nexport const GlowCard = forwardRef(function GlowCard(\n { as: Component = 'div', colors, duration, className, style, children, ...rest }: GlowCardProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const cssVars: Record<string, string> = {}\n if (colors) {\n cssVars['--ansh-glow-from'] = colors[0]\n cssVars['--ansh-glow-via'] = colors[1]\n cssVars['--ansh-glow-to'] = colors[0]\n }\n if (duration !== undefined) cssVars['--ansh-glow-duration'] = `${duration}s`\n\n return (\n <Component\n ref={ref}\n className={['ansh-card', 'ansh-card--glow', className].filter(Boolean).join(' ')}\n style={{ ...cssVars, ...style }}\n {...rest}\n >\n {children}\n </Component>\n )\n})\n\nexport interface TiltCard3DProps extends HTMLAttributes<HTMLDivElement> {\n as?: ElementType\n /** Maximum rotation in degrees. Default `12`. */\n max?: number\n children?: ReactNode\n}\n\n/**\n * A lightweight 3D tilt, independent of the full `TiltCard` behaviour.\n *\n * `@ansh-ui/react` already exports `TiltCard` (spring-driven, glare, the engine's `tilt`\n * behaviour) — reach for that when the interaction should feel weighted. This is the CSS-only\n * sibling for a bento tile or a small preview card where a spring is more machinery than the\n * moment calls for; it follows the pointer directly with a `transition` easing back to rest.\n */\nexport const TiltCard3D = forwardRef(function TiltCard3D(\n { as: Component = 'div', max = 12, className, style, children, ...rest }: TiltCard3DProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const localRef = useRef<HTMLDivElement | null>(null)\n const mergedRef = useMergedRef<HTMLDivElement>(localRef, forwardedRef)\n\n useEffect(() => {\n const node = localRef.current\n if (!node) return\n\n // Coalesce to the ticker's write phase rather than writing directly from the pointer event.\n // A card grid firing dozens of pointermove-driven style writes per frame is exactly the\n // per-component-rAF problem the engine's single ticker exists to avoid.\n let pending: { nx: number; ny: number } | null = null\n\n const onMove = (event: PointerEvent) => {\n const rect = node.getBoundingClientRect()\n pending = {\n nx: (event.clientX - rect.left) / rect.width - 0.5,\n ny: (event.clientY - rect.top) / rect.height - 0.5,\n }\n }\n const onLeave = () => {\n pending = { nx: 0, ny: 0 }\n }\n\n node.addEventListener('pointermove', onMove, { passive: true })\n node.addEventListener('pointerleave', onLeave, { passive: true })\n\n const stop = getTicker().add(\n () => {\n if (!pending) return\n const { nx, ny } = pending\n node.style.transform =\n `perspective(800px) rotateX(${(-ny * max).toFixed(2)}deg) ` +\n `rotateY(${(nx * max).toFixed(2)}deg)`\n },\n { phase: 'write', name: 'TiltCard3D' },\n )\n\n return () => {\n node.removeEventListener('pointermove', onMove)\n node.removeEventListener('pointerleave', onLeave)\n stop()\n }\n }, [max])\n\n return (\n <Component\n ref={mergedRef}\n className={['ansh-card', className].filter(Boolean).join(' ')}\n style={{ transition: 'transform 400ms ease-out', ...style }}\n {...rest}\n >\n {children}\n </Component>\n )\n})\n\n// ---------------------------------------------------------------------------\n// Bento grid\n// ---------------------------------------------------------------------------\n\nexport interface BentoGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Number of columns at desktop width. Default `3`. */\n columns?: number\n children?: ReactNode\n}\n\n/** A responsive bento layout. Collapses to a single column below 768px. */\nexport function BentoGrid({ columns = 3, className, style, children, ...rest }: BentoGridProps) {\n return (\n <div\n className={['ansh-bento', className].filter(Boolean).join(' ')}\n style={{ ['--ansh-bento-cols' as string]: columns, ...style }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\nexport interface BentoItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns this tile spans. Default `1`. */\n span?: number\n /** Rows this tile spans. Default `1`. */\n rowSpan?: number\n children?: ReactNode\n}\n\nexport function BentoItem({\n span = 1,\n rowSpan = 1,\n className,\n style,\n children,\n ...rest\n}: BentoItemProps) {\n return (\n <div\n className={['ansh-bento__item', 'ansh-card', className].filter(Boolean).join(' ')}\n style={{ ['--ansh-span' as string]: span, ['--ansh-row-span' as string]: rowSpan, ...style }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import { type HTMLAttributes, type ReactNode, useEffect, useRef } from 'react'\nimport { getTicker } from '@ansh-ui/core'\n\n/**\n * A macOS-style dock with pointer magnification.\n *\n * Two details separate a dock that feels right from one that doesn't:\n *\n * **Magnification is a distance falloff, not a hover state.** Only scaling the hovered item makes\n * neighbours snap in and out abruptly. Real docks scale every item by its distance from the\n * pointer, so the bulge is continuous and the whole row responds as one surface.\n *\n * **Sizes are eased toward their target, not set directly.** Writing the computed size straight to\n * the node makes the dock track the cursor rigidly, which reads as weightless. A per-frame ease\n * gives it a small amount of lag — the thing that makes it feel physical.\n *\n * Both run in the ticker's write phase and mutate `style.width` directly. Doing this through React\n * state would re-render the whole dock on every pointer move.\n */\n\nexport interface DockItem {\n /** Icon or short label. Rendered inside the tile. */\n icon: ReactNode\n /** Tooltip text, and the accessible name for the control. */\n label: string\n onClick?: () => void\n href?: string\n}\n\nexport interface DockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n items: readonly DockItem[]\n /** Resting tile size in pixels. Default `48`. */\n size?: number\n /** Size of a tile directly under the pointer. Default `80`. */\n magnification?: number\n /**\n * How far the magnification reaches, in pixels. Larger values bulge more neighbours.\n * Default `140`.\n */\n distance?: number\n}\n\nexport function Dock({\n items,\n size = 48,\n magnification = 80,\n distance = 140,\n className,\n ...rest\n}: DockProps) {\n const dockRef = useRef<HTMLDivElement | null>(null)\n const itemRefs = useRef<(HTMLElement | null)[]>([])\n\n useEffect(() => {\n const dock = dockRef.current\n if (!dock) return\n\n /** Pointer x in viewport coordinates, or null when the pointer has left. */\n let pointerX: number | null = null\n /** Current eased size per item, so magnification has a little inertia. */\n const sizes = items.map(() => size)\n\n const onMove = (event: PointerEvent) => {\n pointerX = event.clientX\n }\n const onLeave = () => {\n pointerX = null\n }\n\n dock.addEventListener('pointermove', onMove, { passive: true })\n dock.addEventListener('pointerleave', onLeave, { passive: true })\n\n const stop = getTicker().add(\n ({ delta }) => {\n // Frame-rate independent easing: the fraction remaining after one second, raised to dt.\n const retain = Math.pow(0.0001, delta)\n\n for (let i = 0; i < itemRefs.current.length; i++) {\n const node = itemRefs.current[i]\n if (!node) continue\n\n let target = size\n\n if (pointerX !== null) {\n const rect = node.getBoundingClientRect()\n const centre = rect.left + rect.width / 2\n const gap = Math.abs(pointerX - centre)\n\n if (gap < distance) {\n // Cosine falloff rather than linear: it has zero derivative at both ends, so the\n // bulge has no visible edge where the influence stops.\n const falloff = (Math.cos((gap / distance) * Math.PI) + 1) / 2\n target = size + (magnification - size) * falloff\n }\n }\n\n sizes[i] = target + (sizes[i] - target) * retain\n\n // Below a tenth of a pixel the change is invisible but still costs a style write and a\n // layout invalidation for the whole row.\n if (Math.abs(sizes[i] - target) < 0.1) sizes[i] = target\n\n node.style.width = `${sizes[i].toFixed(1)}px`\n node.style.height = `${sizes[i].toFixed(1)}px`\n }\n },\n { phase: 'write', name: 'Dock' },\n )\n\n return () => {\n dock.removeEventListener('pointermove', onMove)\n dock.removeEventListener('pointerleave', onLeave)\n stop()\n }\n }, [items, size, magnification, distance])\n\n return (\n <div\n ref={dockRef}\n className={['ansh-dock', className].filter(Boolean).join(' ')}\n role=\"toolbar\"\n aria-label=\"Dock\"\n {...rest}\n >\n {items.map((item, index) => {\n const Tag = item.href ? 'a' : 'button'\n return (\n <Tag\n key={item.label}\n ref={(node: HTMLElement | null) => {\n itemRefs.current[index] = node\n }}\n className=\"ansh-dock__item ansh-focusable\"\n style={{ ['--ansh-dock-size' as string]: `${size}px` }}\n // The label is the accessible name; the visible tooltip is decorative and hidden,\n // so a screen reader announces the item once rather than twice.\n aria-label={item.label}\n onClick={item.onClick}\n {...(item.href ? { href: item.href } : { type: 'button' as const })}\n >\n {item.icon}\n <span className=\"ansh-dock__label\" aria-hidden=\"true\">\n {item.label}\n </span>\n </Tag>\n )\n })}\n </div>\n )\n}\n","import { type HTMLAttributes, useEffect, useMemo, useRef, useState } from 'react'\nimport { getTicker, prefersReducedMotion } from '@ansh-ui/core'\nimport { useInView } from '../../hooks/use-observers'\n\n/**\n * Text effects.\n *\n * All three share one accessibility rule: the *complete* text is always present for assistive\n * technology, even when only part of it is visible. A typewriter that renders one character at a\n * time into the DOM would have a screen reader announce a partial word, then re-announce the\n * string on every keystroke.\n */\n\nexport interface TypewriterProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** Strings to type in sequence. A single string types once and stops. */\n words: string | readonly string[]\n /** Characters typed per second. Default `24`. */\n speed?: number\n /** Characters deleted per second. Default `40` — deleting reads as faster than typing. */\n deleteSpeed?: number\n /** Seconds to hold a completed word before deleting. Default `1.6`. */\n pause?: number\n /** Loop through the list. Default `true` when given several words. */\n loop?: boolean\n /** Show a blinking caret. Default `true`. */\n caret?: boolean\n}\n\n/**\n * A typewriter that cycles through phrases.\n *\n * ```tsx\n * <Typewriter words={['ship faster', 'sleep better', 'stay sane']} />\n * ```\n *\n * Under reduced motion it renders the first phrase statically — a caret blinking indefinitely is a\n * photosensitivity concern, and the content is the point rather than the typing.\n */\nexport function Typewriter({\n words,\n speed = 24,\n deleteSpeed = 40,\n pause = 1.6,\n loop,\n caret = true,\n className,\n ...rest\n}: TypewriterProps) {\n // Memoised: a bare conditional would produce a new array identity on every render when `words`\n // is a string, restarting the typing effect each time the parent re-renders.\n const list = useMemo(() => (typeof words === 'string' ? [words] : words), [words])\n const shouldLoop = loop ?? list.length > 1\n\n const [visible, setVisible] = useState('')\n const reduced = prefersReducedMotion()\n\n useEffect(() => {\n if (reduced || list.length === 0) return\n\n let wordIndex = 0\n let charCount = 0\n let phase: 'typing' | 'holding' | 'deleting' = 'typing'\n let timer = 0\n\n const stop = getTicker().add(\n ({ delta }) => {\n timer += delta\n const current = list[wordIndex] ?? ''\n\n switch (phase) {\n case 'typing': {\n const target = Math.min(current.length, Math.floor(timer * speed))\n if (target !== charCount) {\n charCount = target\n setVisible(current.slice(0, charCount))\n }\n if (charCount >= current.length) {\n phase = 'holding'\n timer = 0\n }\n break\n }\n case 'holding': {\n if (timer >= pause) {\n // A single non-looping word stays on screen rather than deleting into nothing.\n if (!shouldLoop && list.length === 1) {\n stop()\n return\n }\n phase = 'deleting'\n timer = 0\n }\n break\n }\n case 'deleting': {\n const target = Math.max(0, current.length - Math.floor(timer * deleteSpeed))\n if (target !== charCount) {\n charCount = target\n setVisible(current.slice(0, charCount))\n }\n if (charCount === 0) {\n wordIndex = (wordIndex + 1) % list.length\n if (wordIndex === 0 && !shouldLoop) {\n stop()\n return\n }\n phase = 'typing'\n timer = 0\n }\n break\n }\n }\n },\n { phase: 'compute', name: 'Typewriter' },\n )\n\n return stop\n }, [list, speed, deleteSpeed, pause, shouldLoop, reduced])\n\n return (\n <span className={className} {...rest}>\n {/*\n The full text, for assistive technology. Without this a screen reader announces partial\n words on every keystroke — `aria-live` would make it worse, not better.\n */}\n <span\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n }}\n >\n {list.join(', ')}\n </span>\n\n <span aria-hidden=\"true\">\n {reduced ? list[0] : visible}\n {caret && !reduced ? <span className=\"ansh-caret\" /> : null}\n </span>\n </span>\n )\n}\n\nexport interface ShinyTextProps extends HTMLAttributes<HTMLSpanElement> {\n /** Seconds per sweep. Default `3`. */\n duration?: number\n children: React.ReactNode\n}\n\n/**\n * Text with a highlight sweeping across it.\n *\n * Pure CSS — a moving `background-position` on a gradient clipped to the glyphs. Nothing runs per\n * frame on the main thread, so this is effectively free even repeated across a page.\n */\nexport function ShinyText({ duration, className, style, children, ...rest }: ShinyTextProps) {\n return (\n <span\n className={['ansh-shiny', className].filter(Boolean).join(' ')}\n style={{\n ...(duration !== undefined ? { ['--ansh-shiny-duration' as string]: `${duration}s` } : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </span>\n )\n}\n\nexport interface NumberTickerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n value: number\n /** Seconds to count up. Default `1.4`. */\n duration?: number\n /** Decimal places. Default `0`. */\n decimals?: number\n prefix?: string\n suffix?: string\n /** Start counting when scrolled into view. Default `true`. */\n whenInView?: boolean\n}\n\n/**\n * A number that counts up to its value.\n *\n * Counts on the shared ticker with an ease-out curve, so it decelerates into the final figure\n * rather than stopping dead. Formatting goes through `Intl.NumberFormat`, which means thousands\n * separators follow the user's locale instead of being hardcoded to commas.\n */\nexport function NumberTicker({\n value,\n duration = 1.4,\n decimals = 0,\n prefix = '',\n suffix = '',\n whenInView = true,\n className,\n ...rest\n}: NumberTickerProps) {\n const [ref, inView] = useInView<HTMLSpanElement>({ threshold: 0.3, once: true })\n const displayRef = useRef<HTMLSpanElement | null>(null)\n\n const formatter = useRef(\n new Intl.NumberFormat(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }),\n )\n\n useEffect(() => {\n formatter.current = new Intl.NumberFormat(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n })\n }, [decimals])\n\n useEffect(() => {\n const node = displayRef.current\n if (!node) return\n\n const write = (n: number) => {\n node.textContent = `${prefix}${formatter.current.format(n)}${suffix}`\n }\n\n if (prefersReducedMotion()) {\n write(value)\n return\n }\n\n if (whenInView && !inView) {\n write(0)\n return\n }\n\n let elapsed = 0\n const stop = getTicker().add(\n ({ delta }) => {\n elapsed += delta\n const t = duration <= 0 ? 1 : Math.min(1, elapsed / duration)\n // easeOutExpo: fast start, long settle — the shape that makes a counter feel decisive.\n const eased = t >= 1 ? 1 : 1 - Math.pow(2, -10 * t)\n write(value * eased)\n if (t >= 1) {\n write(value)\n stop()\n }\n },\n { phase: 'write', name: 'NumberTicker' },\n )\n\n return stop\n }, [value, duration, prefix, suffix, whenInView, inView])\n\n return (\n <span ref={ref} className={className} {...rest}>\n {/* The final value is in the DOM for assistive technology and for crawlers. */}\n <span\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clipPath: 'inset(50%)',\n }}\n >\n {prefix}\n {value}\n {suffix}\n </span>\n <span ref={displayRef} aria-hidden=\"true\" />\n </span>\n )\n}\n","import {\n type HTMLAttributes,\n type ReactNode,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\n/**\n * Loaders and feedback.\n *\n * The recurring theme: a loading or status indicator must be announced, not just drawn. A spinner\n * with no accessible name is invisible to a screen reader, and a toast that appears silently is a\n * message the user never receives.\n */\n\n// ---------------------------------------------------------------------------\n// Loaders\n// ---------------------------------------------------------------------------\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n /** Diameter in pixels. Default `24`. */\n size?: number\n /** Ring thickness in pixels. Default `3`. */\n thickness?: number\n /** Accessible label. Default `'Loading'`. Pass `null` if a sibling already announces it. */\n label?: string | null\n}\n\n/**\n * A ring spinner.\n *\n * One element: a conic gradient masked to a ring. No SVG, and it inherits `currentColor`, so it\n * takes the colour of whatever it sits inside without configuration.\n */\nexport function Spinner({\n size = 24,\n thickness = 3,\n label = 'Loading',\n className,\n style,\n ...rest\n}: SpinnerProps) {\n return (\n <span\n className={['ansh-spinner', className].filter(Boolean).join(' ')}\n style={{\n ['--ansh-size' as string]: `${size}px`,\n ['--ansh-thickness' as string]: `${thickness}px`,\n ...style,\n }}\n // `role=\"status\"` announces politely; without it the spinner is silent to a screen reader.\n {...(label ? { role: 'status', 'aria-label': label } : { 'aria-hidden': 'true' })}\n {...rest}\n />\n )\n}\n\nexport interface DotsProps extends HTMLAttributes<HTMLSpanElement> {\n size?: number\n label?: string | null\n}\n\n/** Three bouncing dots. Reads as \"thinking\" where a spinner reads as \"fetching\". */\nexport function LoadingDots({ size = 8, label = 'Loading', className, style, ...rest }: DotsProps) {\n return (\n <span\n className={['ansh-dots', className].filter(Boolean).join(' ')}\n style={{ ['--ansh-size' as string]: `${size}px`, ...style }}\n {...(label ? { role: 'status', 'aria-label': label } : { 'aria-hidden': 'true' })}\n {...rest}\n >\n <span />\n <span />\n <span />\n </span>\n )\n}\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n width?: number | string\n height?: number | string\n /** Fully rounded, for avatars. Default `false`. */\n circle?: boolean\n}\n\n/**\n * A loading placeholder with a moving sheen.\n *\n * Marked `aria-hidden` deliberately: a skeleton is a visual stand-in with no content to announce.\n * The container should carry `aria-busy=\"true\"` so assistive technology knows something is loading.\n */\nexport function Skeleton({\n width = '100%',\n height = '1em',\n circle = false,\n className,\n style,\n ...rest\n}: SkeletonProps) {\n return (\n <div\n className={['ansh-skeleton', className].filter(Boolean).join(' ')}\n aria-hidden=\"true\"\n style={{\n width,\n height,\n ...(circle ? { borderRadius: '50%', aspectRatio: '1' } : {}),\n ...style,\n }}\n {...rest}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Toasts\n// ---------------------------------------------------------------------------\n\nexport type ToastVariant = 'info' | 'success' | 'error'\n\nexport interface Toast {\n id: string\n title?: string\n message: ReactNode\n variant?: ToastVariant\n /** Milliseconds before auto-dismiss. `0` keeps it until dismissed. Default `4500`. */\n duration?: number\n}\n\ninterface ToastContextValue {\n toast: (toast: Omit<Toast, 'id'>) => string\n dismiss: (id: string) => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\n/**\n * Provider for the toast system.\n *\n * ```tsx\n * <ToastProvider><App /></ToastProvider>\n *\n * const { toast } = useToast()\n * toast({ title: 'Deployed', message: 'Live in 1.2s', variant: 'success' })\n * ```\n */\nexport function ToastProvider({ children }: { children?: ReactNode }) {\n const [toasts, setToasts] = useState<Toast[]>([])\n const [closing, setClosing] = useState<Set<string>>(new Set())\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n\n const dismiss = useCallback((id: string) => {\n // Mark as closing first so the exit animation can play, then remove. Removing immediately\n // would make toasts vanish rather than leave.\n setClosing((prev) => new Set(prev).add(id))\n const timer = setTimeout(() => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n setClosing((prev) => {\n const next = new Set(prev)\n next.delete(id)\n return next\n })\n }, 200)\n timers.current.set(`${id}-exit`, timer)\n }, [])\n\n const toast = useCallback(\n (input: Omit<Toast, 'id'>) => {\n const id = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n const next: Toast = { id, duration: 4500, variant: 'info', ...input }\n setToasts((prev) => [...prev, next])\n\n if (next.duration && next.duration > 0) {\n timers.current.set(\n id,\n setTimeout(() => dismiss(id), next.duration),\n )\n }\n return id\n },\n [dismiss],\n )\n\n // Clear every pending timer on unmount, or a dismissed provider still fires setState later.\n useEffect(() => {\n const map = timers.current\n return () => {\n for (const timer of map.values()) clearTimeout(timer)\n map.clear()\n }\n }, [])\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss])\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <div\n className=\"ansh-toaster\"\n // `polite` rather than `assertive`: a toast should not interrupt what the user is\n // currently reading. Errors that genuinely must interrupt belong in a dialog.\n role=\"region\"\n aria-live=\"polite\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <div\n key={t.id}\n className={`ansh-toast ansh-toast--${t.variant ?? 'info'}`}\n data-state={closing.has(t.id) ? 'closing' : 'open'}\n >\n <span className=\"ansh-toast__dot\" aria-hidden=\"true\" />\n <div style={{ display: 'grid', gap: 2 }}>\n {t.title ? <div className=\"ansh-toast__title\">{t.title}</div> : null}\n <div className=\"ansh-toast__body\">{t.message}</div>\n </div>\n <button\n type=\"button\"\n onClick={() => dismiss(t.id)}\n aria-label=\"Dismiss notification\"\n className=\"ansh-focusable\"\n style={{\n marginLeft: 'auto',\n background: 'none',\n border: 0,\n color: 'inherit',\n cursor: 'pointer',\n opacity: 0.6,\n padding: 4,\n }}\n >\n ✕\n </button>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n )\n}\n\nexport function useToast(): ToastContextValue {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('[ansh] useToast() must be used inside a <ToastProvider>.')\n }\n return context\n}\n","import { type ReactNode, useId, useState } from 'react'\nimport { Button, type ButtonVariant } from './buttons'\n\n/**\n * Marketing components.\n *\n * These are the ones a landing page actually needs, and the two places they usually go wrong are\n * both handled here: an accordion that animates to intrinsic content height without JavaScript\n * measurement, and a pricing table whose \"recommended\" plan is conveyed by more than colour.\n */\n\n// ---------------------------------------------------------------------------\n// Pricing\n// ---------------------------------------------------------------------------\n\nexport interface PricingPlan {\n name: string\n price: string\n /** Billing period, e.g. `'/month'`. */\n period?: string\n description?: string\n features: readonly string[]\n /** Highlight this plan. Renders elevated with a badge. */\n featured?: boolean\n badge?: string\n cta?: {\n label: string\n href?: string\n onClick?: () => void\n variant?: ButtonVariant\n }\n}\n\nexport interface PricingTableProps {\n plans: readonly PricingPlan[]\n className?: string\n}\n\n/**\n * A responsive pricing table.\n *\n * The featured plan is distinguished three ways — elevation, a text badge, and a filled CTA —\n * rather than by colour alone. Colour-only emphasis fails WCAG 1.4.1 and is invisible to a\n * colour-blind user, which for a pricing page means the recommended plan simply isn't recommended.\n */\nexport function PricingTable({ plans, className }: PricingTableProps) {\n return (\n <div className={['ansh-pricing', className].filter(Boolean).join(' ')}>\n {plans.map((plan) => (\n <div\n key={plan.name}\n className={[\n 'ansh-card',\n 'ansh-plan',\n plan.featured && 'ansh-plan--featured',\n plan.featured && 'ansh-card--glow',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {plan.featured ? (\n <span className=\"ansh-plan__badge\">{plan.badge ?? 'Most popular'}</span>\n ) : null}\n\n <div>\n <div className=\"ansh-plan__name\">{plan.name}</div>\n <div className=\"ansh-plan__price\">\n <span>{plan.price}</span>\n {plan.period ? <span className=\"ansh-plan__period\">{plan.period}</span> : null}\n </div>\n </div>\n\n {plan.description ? (\n <p\n style={{\n margin: 0,\n fontSize: 'var(--ansh-text-sm)',\n color: 'var(--ansh-content-secondary)',\n }}\n >\n {plan.description}\n </p>\n ) : null}\n\n <ul className=\"ansh-plan__features\">\n {plan.features.map((feature) => (\n <li key={feature}>\n {/* Decorative: the feature text carries the meaning, so the tick is hidden. */}\n <span aria-hidden=\"true\" style={{ color: 'var(--ansh-state-success)' }}>\n ✓\n </span>\n <span>{feature}</span>\n </li>\n ))}\n </ul>\n\n {plan.cta ? (\n <Button\n as={plan.cta.href ? 'a' : 'button'}\n {...(plan.cta.href ? { href: plan.cta.href } : {})}\n onClick={plan.cta.onClick}\n variant={plan.cta.variant ?? (plan.featured ? 'shimmer' : 'ghost')}\n style={{ marginTop: 'auto', width: '100%' }}\n >\n {plan.cta.label}\n </Button>\n ) : null}\n </div>\n ))}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Accordion\n// ---------------------------------------------------------------------------\n\n/**\n * A single question/answer pair.\n *\n * Named `FaqItem` rather than `AccordionItem` because the general-purpose `Accordion` owns that\n * name. The two are genuinely different shapes: this one is question/answer, the general one is\n * title/content with icons, subtitles and per-item disabled state.\n */\nexport interface FaqItem {\n question: string\n answer: ReactNode\n}\n\nexport interface FAQAccordionProps {\n items: readonly FaqItem[]\n /** Allow several panels open at once. Default `false`. */\n multiple?: boolean\n /** Index open on first render. Omit for all closed. */\n defaultOpen?: number\n className?: string\n}\n\n/**\n * An accordion.\n *\n * The height transition uses `grid-template-rows: 0fr → 1fr`, which is the only way to animate to\n * *intrinsic* content height in pure CSS. The usual alternatives both fail: a fixed `max-height`\n * either clips long answers or eases at the wrong rate, and measuring `scrollHeight` in JavaScript\n * means a layout read per toggle and a stale value whenever the content reflows.\n *\n * Uses native `<button>` triggers with `aria-expanded` and `aria-controls`, so keyboard and screen\n * reader behaviour is correct without a roving tabindex.\n */\nexport function FAQAccordion({\n items,\n multiple = false,\n defaultOpen,\n className,\n}: FAQAccordionProps) {\n const [open, setOpen] = useState<Set<number>>(\n () => new Set(defaultOpen === undefined ? [] : [defaultOpen]),\n )\n const baseId = useId()\n\n const toggle = (index: number) => {\n setOpen((prev) => {\n const next = new Set(multiple ? prev : [])\n if (prev.has(index)) next.delete(index)\n else next.add(index)\n return next\n })\n }\n\n return (\n <div className={['ansh-accordion', className].filter(Boolean).join(' ')}>\n {items.map((item, index) => {\n const isOpen = open.has(index)\n const triggerId = `${baseId}-trigger-${index}`\n const panelId = `${baseId}-panel-${index}`\n\n return (\n <div key={item.question} className=\"ansh-accordion__item\">\n <h3 style={{ margin: 0 }}>\n <button\n id={triggerId}\n type=\"button\"\n className=\"ansh-accordion__trigger ansh-focusable\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => toggle(index)}\n >\n <span>{item.question}</span>\n {/* A plus rotating 45° into a cross — one glyph, no icon dependency. */}\n <span className=\"ansh-accordion__icon\" aria-hidden=\"true\">\n +\n </span>\n </button>\n </h3>\n\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"ansh-accordion__panel\"\n data-open={isOpen}\n // `inert` when collapsed removes the panel from the accessibility tree *and* from the\n // tab order, so a screen reader doesn't read every answer while the user scans the\n // questions, and Tab doesn't land on links inside a closed panel. React 19 types this\n // as a boolean; older React expects the empty-string attribute form.\n {...(isOpen ? {} : { inert: true })}\n >\n <div>\n <div className=\"ansh-accordion__body\">{item.answer}</div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n","import { type ReactNode, useState } from 'react'\nimport { cx } from '../../primitives/compose'\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral'\n\nconst ICONS: Record<AlertTone, ReactNode> = {\n info: (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"7.5\" />\n <path d=\"M10 9v4.5\" strokeLinecap=\"round\" />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.9\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n success: (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"7.5\" />\n <path d=\"M6.5 10.3l2.4 2.4 4.6-5.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ),\n warning: (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n >\n <path\n d=\"M8.6 3.2L1.9 14.6a1.6 1.6 0 001.4 2.4h13.4a1.6 1.6 0 001.4-2.4L11.4 3.2a1.6 1.6 0 00-2.8 0z\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M10 7.5v3.5\" strokeLinecap=\"round\" />\n <circle cx=\"10\" cy=\"13.6\" r=\"0.9\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n danger: (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"7.5\" />\n <path d=\"M7.5 7.5l5 5M12.5 7.5l-5 5\" strokeLinecap=\"round\" />\n </svg>\n ),\n neutral: null,\n}\n\nexport interface AlertProps {\n tone?: AlertTone\n title?: ReactNode\n children?: ReactNode\n /** Replace the default icon, or pass `null` to omit it. */\n icon?: ReactNode | null\n /** Show a dismiss button. */\n dismissible?: boolean\n onDismiss?: () => void\n /** Buttons or links under the message. */\n actions?: ReactNode\n variant?: 'soft' | 'outline' | 'solid'\n className?: string\n}\n\n/**\n * An inline message.\n *\n * The `role` follows the tone, because it decides whether a screen reader interrupts:\n * `role=\"alert\"` (assertive) for errors and warnings, which the user needs to know about *now*;\n * `role=\"status\"` (polite) for information and success, which can wait for a pause.\n *\n * Using `alert` for everything is the common mistake, and it makes a screen reader cut off whatever\n * it was saying to announce that a draft was saved.\n *\n * The tone is always carried by the icon and the text, never by colour alone.\n */\nexport function Alert({\n tone = 'info',\n title,\n children,\n icon,\n dismissible = false,\n onDismiss,\n actions,\n variant = 'soft',\n className,\n}: AlertProps) {\n const [visible, setVisible] = useState(true)\n if (!visible) return null\n\n const urgent = tone === 'danger' || tone === 'warning'\n const resolvedIcon = icon === undefined ? ICONS[tone] : icon\n\n return (\n <div\n className={cx('ansh-alert', `ansh-alert--${tone}`, `ansh-alert--${variant}`, className)}\n role={urgent ? 'alert' : 'status'}\n // Errors are assertive; everything else waits for a natural pause.\n aria-live={urgent ? 'assertive' : 'polite'}\n >\n {resolvedIcon ? (\n <span className=\"ansh-alert__icon\" aria-hidden=\"true\">\n {resolvedIcon}\n </span>\n ) : null}\n\n <div className=\"ansh-alert__body\">\n {title ? <p className=\"ansh-alert__title\">{title}</p> : null}\n {children ? <div className=\"ansh-alert__message\">{children}</div> : null}\n {actions ? <div className=\"ansh-alert__actions\">{actions}</div> : null}\n </div>\n\n {dismissible ? (\n <button\n type=\"button\"\n className=\"ansh-alert__close ansh-focusable\"\n aria-label=\"Dismiss message\"\n onClick={() => {\n setVisible(false)\n onDismiss?.()\n }}\n >\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n ) : null}\n </div>\n )\n}\n\nexport interface BannerProps extends Omit<AlertProps, 'variant'> {\n /** Pin to the top of the viewport. */\n sticky?: boolean\n}\n\n/**\n * A full-width page-level message — maintenance windows, trial expiry, a failed payment.\n *\n * Distinct from `Alert` in placement and weight rather than in mechanics: a banner concerns the\n * whole application, an alert concerns the thing next to it.\n */\nexport function Banner({ sticky = false, className, ...rest }: BannerProps) {\n return (\n <Alert\n variant=\"solid\"\n className={cx('ansh-banner', sticky && 'ansh-banner--sticky', className)}\n {...rest}\n />\n )\n}\n\nexport interface CalloutProps {\n /** Short label — \"Note\", \"Tip\", \"Warning\". */\n label?: string\n tone?: AlertTone\n icon?: ReactNode\n className?: string\n children: ReactNode\n}\n\n/**\n * A documentation callout.\n *\n * Deliberately **not** a live region. Prose asides are part of the page's content and are read in\n * document order; announcing them out of sequence would be disruptive rather than helpful, which is\n * the opposite of what `Alert` is for.\n */\nexport function Callout({ label, tone = 'info', icon, className, children }: CalloutProps) {\n return (\n <aside className={cx('ansh-callout', `ansh-callout--${tone}`, className)}>\n <span className=\"ansh-callout__icon\" aria-hidden=\"true\">\n {icon ?? ICONS[tone]}\n </span>\n <div className=\"ansh-callout__body\">\n {label ? <p className=\"ansh-callout__label\">{label}</p> : null}\n <div className=\"ansh-callout__content\">{children}</div>\n </div>\n </aside>\n )\n}\n","/**\n * @ansh-ui/react — Ansh for React 18/19 and Next.js.\n *\n * Every component here is a thin binding over `@ansh-ui/core`. The engine owns all behaviour; this\n * package owns the React lifecycle, prop diffing, and SSR correctness.\n *\n * ```tsx\n * import '@ansh-ui/tokens/ansh.css'\n * import { AuroraBackground, AnimatedText, MagneticButton } from '@ansh-ui/react'\n *\n * export default function Hero() {\n * return (\n * <AuroraBackground className=\"min-h-screen grid place-items-center\">\n * <AnimatedText by=\"chars\" from=\"center\">Motion, refined.</AnimatedText>\n * <MagneticButton strength={16}>Get started</MagneticButton>\n * </AuroraBackground>\n * )\n * }\n * ```\n *\n * ## Next.js App Router\n *\n * The package ships a `'use client'` banner, so these components work in server components without\n * you wrapping them in your own client boundary.\n */\n\n// --- Hooks ---\nexport * from './hooks/use-motion-value'\nexport * from './hooks/use-observers'\n\n// --- Factories ---\n// Exported so consumers can wrap their own effects and behaviours with the same guarantees the\n// built-in components get. This is the supported extension path.\nexport {\n createEffectComponent,\n type EffectComponent,\n type EffectComponentProps,\n type EffectComponentBaseProps,\n} from './factory/create-effect-component'\nexport {\n createBehaviourComponent,\n useBehaviour,\n type BehaviourComponent,\n type BehaviourComponentProps,\n type BehaviourComponentBaseProps,\n} from './factory/create-behaviour-component'\n\n// --- Effect & behaviour components ---\nexport * from './components/backgrounds'\nexport * from './components/interaction'\nexport * from './components/text'\nexport * from './components/providers'\n\n/**\n * --- Headless primitives ---\n *\n * The pieces every component here is built from. Exported because an application that needs a\n * component this library doesn't have should be able to build it with the same guarantees rather\n * than starting from scratch — that is the difference between a component library and a closed set.\n */\nexport { useControllableState } from './primitives/use-controllable-state'\nexport { composeEventHandlers, mergeProps, mergeRefs, cx } from './primitives/compose'\nexport { Slot, slotted, type SlotProps } from './primitives/slot'\nexport { Portal, type PortalProps } from './primitives/portal'\nexport {\n getTabbable,\n useAutoFocus,\n useFocusRestore,\n useFocusTrap,\n useRovingFocus,\n} from './primitives/focus'\nexport { useDismiss, useScrollLock, type DismissOptions } from './primitives/use-dismiss'\nexport { Presence, usePresence, type PresenceProps } from './primitives/presence'\nexport {\n computePosition,\n type Align,\n type Placement,\n type PositionOptions,\n type PositionResult,\n type Rect,\n type Side,\n} from './primitives/position'\nexport {\n useAnchoredPosition,\n type AnchoredPosition,\n type AnchoredPositionOptions,\n} from './primitives/use-anchored-position'\n\n/**\n * --- Designed UI components ---\n *\n * These need the stylesheet:\n *\n * ```ts\n * import '@ansh-ui/tokens/ansh.css'\n * import '@ansh-ui/react/styles.css'\n * ```\n *\n * Everything in it resolves from `@ansh-ui/tokens`, so overriding a token restyles the whole set.\n */\n\n// Buttons, cards, showcase pieces\nexport * from './components/ui/buttons'\nexport * from './components/ui/cards'\nexport * from './components/ui/dock'\nexport * from './components/ui/command-palette'\nexport * from './components/ui/text-effects'\nexport * from './components/ui/feedback'\nexport * from './components/ui/marketing'\n\n// Layout\nexport * from './components/layout'\nexport * from './components/layout/resizable'\n\n// Forms\nexport * from './components/form/field'\nexport * from './components/form/input'\nexport * from './components/form/toggles'\nexport * from './components/form/listbox'\nexport * from './components/form/select'\nexport * from './components/form/combobox'\nexport * from './components/form/slider'\nexport * from './components/form/pin-input'\nexport * from './components/form/tags-input'\nexport * from './components/form/rating'\nexport * from './components/form/dropzone'\nexport * from './components/form/color-picker'\nexport * from './components/form/calendar'\nexport * from './components/form/date-picker'\n\n// Overlays\nexport * from './components/overlay/popover'\nexport * from './components/overlay/tooltip'\nexport * from './components/overlay/dialog'\nexport * from './components/overlay/drawer'\nexport * from './components/overlay/menu'\n\n// Data display\nexport * from './components/data/table'\nexport * from './components/data/display'\nexport * from './components/data/progress'\n\n// Navigation\nexport * from './components/navigation/tabs'\nexport * from './components/navigation/breadcrumbs'\nexport * from './components/navigation/sidebar'\nexport * from './components/navigation/nav-menu'\n\n// Feedback\nexport * from './components/feedback/alert'\n\n// Disclosure\nexport * from './components/disclosure'\n\n// Declarative motion\nexport {\n AnimatePresence,\n Draggable,\n Motion,\n type AnimatePresenceProps,\n type DraggableProps,\n type MotionTransition,\n type MotionValues,\n} from './components/motion'\n\n/**\n * Re-exported engine surface.\n *\n * A narrow, curated set — the pieces a React author reaches for directly. Deliberately not\n * `export * from '@ansh-ui/core'`: that would put 200 symbols into this package's autocomplete and\n * make it unclear which layer a given import belongs to. For anything else, import from\n * `@ansh-ui/core` directly.\n */\nexport {\n // Motion\n animate,\n createTimeline,\n motionValue,\n MotionValue,\n stagger,\n springs,\n // Colour\n createGradient,\n createScale,\n generatePalette,\n mixColors,\n palettes,\n parseColor,\n toHex,\n toOklchString,\n checkContrast,\n ensureContrast,\n pickReadable,\n // Easing\n easings,\n cubicBezier,\n registerEasing,\n signature as signatureEasings,\n // Noise\n createNoise,\n // Kernel\n getTicker,\n // Accessibility\n prefersReducedMotion,\n setReducedMotionMode,\n // Registry — the seam for Pro-tier and plugin registration\n getRegistry,\n} from '@ansh-ui/core'\n\n/**\n * `Timeline` is re-exported as `MotionTimeline`.\n *\n * The engine's `Timeline` (the animation sequencer) and this package's `Timeline` (the activity\n * feed component) are unrelated things that happen to share a word. Exporting both unaliased makes\n * the name ambiguous, and `export *` resolves that by silently dropping it — which is how the\n * component disappeared from the public API without any build error at all.\n */\nexport type { Timeline as MotionTimeline } from '@ansh-ui/core'\n\nexport type {\n AnimationControls,\n AnimationOptions,\n BaseEffectOptions,\n ColorInput,\n ColorSpace,\n EasingInput,\n EffectDefinition,\n FrameState,\n Gradient,\n PaletteName,\n PointerState,\n ReducedMotionStrategy,\n Rgb,\n SpringOptions,\n StaggerFrom,\n StaggerOptions,\n} from '@ansh-ui/core'\n\nexport const VERSION = '0.1.0'\n"]}
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var chunkWGYNCSTP_cjs = require('./chunk-WGYNCSTP.cjs');
5
+ var chunkZWAFLHC2_cjs = require('./chunk-ZWAFLHC2.cjs');
6
+ require('./chunk-PO5DU3FU.cjs');
7
+ require('./chunk-SFU5EPSN.cjs');
8
+
9
+
10
+
11
+ Object.defineProperty(exports, "AspectRatio", {
12
+ enumerable: true,
13
+ get: function () { return chunkWGYNCSTP_cjs.AspectRatio; }
14
+ });
15
+ Object.defineProperty(exports, "Center", {
16
+ enumerable: true,
17
+ get: function () { return chunkWGYNCSTP_cjs.Center; }
18
+ });
19
+ Object.defineProperty(exports, "Container", {
20
+ enumerable: true,
21
+ get: function () { return chunkWGYNCSTP_cjs.Container; }
22
+ });
23
+ Object.defineProperty(exports, "Divider", {
24
+ enumerable: true,
25
+ get: function () { return chunkWGYNCSTP_cjs.Divider; }
26
+ });
27
+ Object.defineProperty(exports, "Grid", {
28
+ enumerable: true,
29
+ get: function () { return chunkWGYNCSTP_cjs.Grid; }
30
+ });
31
+ Object.defineProperty(exports, "GridItem", {
32
+ enumerable: true,
33
+ get: function () { return chunkWGYNCSTP_cjs.GridItem; }
34
+ });
35
+ Object.defineProperty(exports, "HStack", {
36
+ enumerable: true,
37
+ get: function () { return chunkWGYNCSTP_cjs.HStack; }
38
+ });
39
+ Object.defineProperty(exports, "Resizable", {
40
+ enumerable: true,
41
+ get: function () { return chunkWGYNCSTP_cjs.Resizable; }
42
+ });
43
+ Object.defineProperty(exports, "ScrollArea", {
44
+ enumerable: true,
45
+ get: function () { return chunkWGYNCSTP_cjs.ScrollArea; }
46
+ });
47
+ Object.defineProperty(exports, "Spacer", {
48
+ enumerable: true,
49
+ get: function () { return chunkWGYNCSTP_cjs.Spacer; }
50
+ });
51
+ Object.defineProperty(exports, "Stack", {
52
+ enumerable: true,
53
+ get: function () { return chunkWGYNCSTP_cjs.Stack; }
54
+ });
55
+ Object.defineProperty(exports, "VStack", {
56
+ enumerable: true,
57
+ get: function () { return chunkWGYNCSTP_cjs.VStack; }
58
+ });
59
+ Object.defineProperty(exports, "AppShell", {
60
+ enumerable: true,
61
+ get: function () { return chunkZWAFLHC2_cjs.AppShell; }
62
+ });
63
+ Object.defineProperty(exports, "Sidebar", {
64
+ enumerable: true,
65
+ get: function () { return chunkZWAFLHC2_cjs.Sidebar; }
66
+ });
67
+ //# sourceMappingURL=layout.cjs.map
68
+ //# sourceMappingURL=layout.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"layout.cjs"}
@@ -0,0 +1,169 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ElementType, ReactNode, CSSProperties } from 'react';
3
+ export { A as AppShell, a as AppShellProps, N as NavItem, b as NavSection, S as Sidebar, c as SidebarProps } from './sidebar-D-PafAXw.cjs';
4
+
5
+ /**
6
+ * Layout primitives.
7
+ *
8
+ * These exist because every application rebuilds them, badly. The rebuilt versions hardcode gaps in
9
+ * pixels, so they don't respond to a density setting; they use margins, so they collapse
10
+ * unpredictably; and they don't handle the RTL case.
11
+ *
12
+ * Everything here takes a **token key**, not a raw value: `gap={4}` means `--ansh-space-4`, so a
13
+ * layout is guaranteed to sit on the spacing scale. Passing an arbitrary string is still possible
14
+ * for the genuine one-off, but the type nudges toward the scale first.
15
+ */
16
+ /** A key into the spacing scale, or a raw CSS length for the rare exception. */
17
+ type SpaceToken = 0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24 | (string & {});
18
+ interface BaseProps extends HTMLAttributes<HTMLElement> {
19
+ as?: ElementType;
20
+ children?: ReactNode;
21
+ }
22
+ interface StackProps extends BaseProps {
23
+ /** Default `'vertical'` — the direction that needs a helper more often. */
24
+ direction?: 'horizontal' | 'vertical';
25
+ gap?: SpaceToken;
26
+ align?: CSSProperties['alignItems'];
27
+ justify?: CSSProperties['justifyContent'];
28
+ wrap?: boolean;
29
+ /** Grow to fill the cross axis. */
30
+ stretch?: boolean;
31
+ /** Insert a hairline divider between children. */
32
+ divide?: boolean;
33
+ }
34
+ /**
35
+ * One-dimensional flex layout.
36
+ *
37
+ * ```tsx
38
+ * <Stack direction="horizontal" gap={3} align="center">
39
+ * <Avatar src={user.avatar} name={user.name} />
40
+ * <Stack gap={0.5}>
41
+ * <strong>{user.name}</strong>
42
+ * <Text tone="secondary">{user.email}</Text>
43
+ * </Stack>
44
+ * </Stack>
45
+ * ```
46
+ */
47
+ declare const Stack: react.ForwardRefExoticComponent<StackProps & react.RefAttributes<HTMLElement>>;
48
+ /** Horizontal `Stack`, for readability at call sites. */
49
+ declare const HStack: react.ForwardRefExoticComponent<StackProps & react.RefAttributes<HTMLElement>>;
50
+ /** Vertical `Stack`, for symmetry with `HStack`. */
51
+ declare const VStack: react.ForwardRefExoticComponent<StackProps & react.RefAttributes<HTMLElement>>;
52
+ interface GridProps extends BaseProps {
53
+ /** Fixed column count, or `'auto'` for a responsive `auto-fill` track. */
54
+ columns?: number | 'auto';
55
+ /** Minimum column width when `columns="auto"`. Default `'16rem'`. */
56
+ minColumnWidth?: string;
57
+ gap?: SpaceToken;
58
+ /** Row gap, when it should differ from the column gap. */
59
+ rowGap?: SpaceToken;
60
+ align?: CSSProperties['alignItems'];
61
+ }
62
+ /**
63
+ * Two-dimensional layout.
64
+ *
65
+ * `columns="auto"` uses `repeat(auto-fill, minmax(min(N, 100%), 1fr))`. The inner `min()` is what
66
+ * stops the grid overflowing on a phone: without it, a 16rem minimum on a 15rem-wide viewport
67
+ * produces a track wider than the screen and a horizontal scrollbar.
68
+ */
69
+ declare const Grid: react.ForwardRefExoticComponent<GridProps & react.RefAttributes<HTMLElement>>;
70
+ interface GridItemProps extends BaseProps {
71
+ /** Columns to span. `'full'` spans the whole row. */
72
+ span?: number | 'full';
73
+ rowSpan?: number;
74
+ }
75
+ declare const GridItem: react.ForwardRefExoticComponent<GridItemProps & react.RefAttributes<HTMLElement>>;
76
+ interface ContainerProps extends BaseProps {
77
+ /** Max content width. Default `'lg'` (72rem). */
78
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
79
+ /** Horizontal padding. Default `6`. */
80
+ padding?: SpaceToken;
81
+ }
82
+ /** Centred, width-constrained page content. */
83
+ declare const Container: react.ForwardRefExoticComponent<ContainerProps & react.RefAttributes<HTMLElement>>;
84
+ interface DividerProps extends Omit<BaseProps, 'children'> {
85
+ orientation?: 'horizontal' | 'vertical';
86
+ /** Optional label rendered in the middle of the rule. */
87
+ label?: ReactNode;
88
+ }
89
+ /**
90
+ * A rule.
91
+ *
92
+ * With a label it becomes a labelled separator — the "or continue with" divider on a sign-in form.
93
+ * `role="separator"` is set only when there's no label; with one, it's a heading-like element and
94
+ * announcing it as a separator loses the text.
95
+ */
96
+ declare const Divider: react.ForwardRefExoticComponent<DividerProps & react.RefAttributes<HTMLDivElement>>;
97
+ interface SpacerProps {
98
+ size?: SpaceToken;
99
+ /** Grow to absorb free space in a flex container. */
100
+ grow?: boolean;
101
+ }
102
+ /** Explicit empty space. `grow` pushes siblings apart in a flex row. */
103
+ declare function Spacer({ size, grow }: SpacerProps): react.JSX.Element;
104
+ /** Centre a child on both axes. */
105
+ declare const Center: react.ForwardRefExoticComponent<BaseProps & react.RefAttributes<HTMLElement>>;
106
+ interface AspectRatioProps extends BaseProps {
107
+ /** Width ÷ height. `16 / 9` reads better than `1.777`. Default `16 / 9`. */
108
+ ratio?: number;
109
+ }
110
+ /**
111
+ * Reserve space at a fixed aspect ratio.
112
+ *
113
+ * Uses the `aspect-ratio` property rather than the padding-top hack. The reserved space is what
114
+ * matters: an image that loads without it shifts everything below, which is a Cumulative Layout
115
+ * Shift penalty and the most common cause of a failing Core Web Vitals score.
116
+ */
117
+ declare const AspectRatio: react.ForwardRefExoticComponent<AspectRatioProps & react.RefAttributes<HTMLElement>>;
118
+ interface ScrollAreaProps extends BaseProps {
119
+ /** Max height before scrolling starts. */
120
+ maxHeight?: string;
121
+ axis?: 'y' | 'x' | 'both';
122
+ /** Fade the content at the scrollable edges. Default `true`. */
123
+ fade?: boolean;
124
+ }
125
+ /**
126
+ * A scroll container with styled scrollbars and edge fades.
127
+ *
128
+ * The native scrollbar is kept — a JavaScript-rendered one breaks keyboard scrolling, mobile
129
+ * momentum, and the OS "scroll bar is always visible" accessibility setting. It is only *styled*,
130
+ * via `scrollbar-width`/`scrollbar-color` with a `::-webkit-scrollbar` fallback.
131
+ *
132
+ * The edge fade is a mask that appears only when there is more content in that direction. It is
133
+ * driven by `animation-timeline: scroll()` where supported, so it costs nothing on the main thread
134
+ * and degrades to no fade where it isn't.
135
+ */
136
+ declare const ScrollArea: react.ForwardRefExoticComponent<ScrollAreaProps & react.RefAttributes<HTMLElement>>;
137
+
138
+ interface ResizableProps {
139
+ /** Exactly two children: the two panes. */
140
+ children: [ReactNode, ReactNode];
141
+ direction?: 'horizontal' | 'vertical';
142
+ /** First pane's size as a percentage, `0`–`100`. Default `50`. */
143
+ defaultSize?: number;
144
+ size?: number;
145
+ onSizeChange?: (size: number) => void;
146
+ /** Clamp, as percentages. Defaults `10` and `90`. */
147
+ minSize?: number;
148
+ maxSize?: number;
149
+ /** Snap points in percent, e.g. `[25, 50, 75]`. Within 3% the handle snaps. */
150
+ snapPoints?: readonly number[];
151
+ className?: string;
152
+ /** Accessible name for the handle — "Resize sidebar", not "Resize". */
153
+ label?: string;
154
+ }
155
+ /**
156
+ * A two-pane split with a draggable divider.
157
+ *
158
+ * The layout every IDE, mail client and admin console needs, and the one most often shipped as
159
+ * mouse-only. The handle here is a real `role="separator"` with `aria-valuenow`, and arrow keys
160
+ * move it in 2% steps — WAI-ARIA calls this a window splitter and it is a documented pattern, not
161
+ * an invention.
162
+ *
163
+ * Sizes are percentages rather than pixels so the split survives a window resize proportionally.
164
+ * Dragging writes to a CSS custom property directly, bypassing React: a re-render per pointer move
165
+ * makes the drag feel heavy on a complex page, and the value is only committed to state on release.
166
+ */
167
+ declare function Resizable({ children, direction, defaultSize, size, onSizeChange, minSize, maxSize, snapPoints, className, label, }: ResizableProps): react.JSX.Element;
168
+
169
+ export { AspectRatio, type AspectRatioProps, Center, Container, type ContainerProps, Divider, type DividerProps, Grid, GridItem, type GridItemProps, type GridProps, HStack, Resizable, type ResizableProps, ScrollArea, type ScrollAreaProps, type SpaceToken, Spacer, type SpacerProps, Stack, type StackProps, VStack };