@ansh-ui/react 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/{chunk-RHTLNSVW.cjs → chunk-3SWO2M33.cjs} +7 -7
  2. package/dist/chunk-3SWO2M33.cjs.map +1 -0
  3. package/dist/{chunk-HO2YSF5O.js → chunk-742E5FQS.js} +3 -3
  4. package/dist/chunk-742E5FQS.js.map +1 -0
  5. package/dist/{chunk-EGG4CP7C.js → chunk-BQJ6H3HC.js} +3 -2
  6. package/dist/chunk-BQJ6H3HC.js.map +1 -0
  7. package/dist/{chunk-LDCZQP3R.js → chunk-CWYBOVCZ.js} +3 -3
  8. package/dist/{chunk-LDCZQP3R.js.map → chunk-CWYBOVCZ.js.map} +1 -1
  9. package/dist/{chunk-AVPEA5PB.cjs → chunk-IZ6T7LO3.cjs} +4 -4
  10. package/dist/{chunk-AVPEA5PB.cjs.map → chunk-IZ6T7LO3.cjs.map} +1 -1
  11. package/dist/{chunk-C32LKF23.cjs → chunk-KTLTYHAT.cjs} +3 -3
  12. package/dist/chunk-KTLTYHAT.cjs.map +1 -0
  13. package/dist/{chunk-IBXLC5IE.js → chunk-P5MRISBP.js} +19 -3
  14. package/dist/chunk-P5MRISBP.js.map +1 -0
  15. package/dist/{chunk-WGYNCSTP.cjs → chunk-PUW6BTPQ.cjs} +3 -2
  16. package/dist/chunk-PUW6BTPQ.cjs.map +1 -0
  17. package/dist/{chunk-T4AK2KLM.js → chunk-PVDQPVYF.js} +3 -3
  18. package/dist/{chunk-T4AK2KLM.js.map → chunk-PVDQPVYF.js.map} +1 -1
  19. package/dist/{chunk-6VRF7X5C.cjs → chunk-TEPQGFR4.cjs} +19 -2
  20. package/dist/chunk-TEPQGFR4.cjs.map +1 -0
  21. package/dist/{chunk-QO3E7TJS.js → chunk-WNWGYXJY.js} +4 -4
  22. package/dist/chunk-WNWGYXJY.js.map +1 -0
  23. package/dist/{chunk-C5JG6TMM.cjs → chunk-YACOHFYJ.cjs} +27 -27
  24. package/dist/{chunk-C5JG6TMM.cjs.map → chunk-YACOHFYJ.cjs.map} +1 -1
  25. package/dist/data.d.cts +2 -1
  26. package/dist/data.d.ts +2 -1
  27. package/dist/form.cjs +37 -37
  28. package/dist/form.d.cts +2 -1
  29. package/dist/form.d.ts +2 -1
  30. package/dist/form.js +2 -2
  31. package/dist/index.cjs +641 -110
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +220 -7
  34. package/dist/index.d.ts +220 -7
  35. package/dist/index.js +526 -11
  36. package/dist/index.js.map +1 -1
  37. package/dist/layout.cjs +13 -13
  38. package/dist/layout.d.cts +11 -2
  39. package/dist/layout.d.ts +11 -2
  40. package/dist/layout.js +1 -1
  41. package/dist/{motion-CQmCq6_k.d.ts → motion-DoT_sTl1.d.ts} +3 -2
  42. package/dist/{motion-CSX4g2N8.d.cts → motion-DsQPOsTT.d.cts} +3 -2
  43. package/dist/motion.cjs +19 -19
  44. package/dist/motion.d.cts +2 -2
  45. package/dist/motion.d.ts +2 -2
  46. package/dist/motion.js +2 -2
  47. package/dist/navigation.d.cts +3 -2
  48. package/dist/navigation.d.ts +3 -2
  49. package/dist/overlay.cjs +16 -16
  50. package/dist/overlay.d.cts +3 -2
  51. package/dist/overlay.d.ts +3 -2
  52. package/dist/overlay.js +2 -2
  53. package/dist/{position-DVScKcaa.d.cts → position-CW6cGpSF.d.cts} +2 -1
  54. package/dist/{position-DVScKcaa.d.ts → position-CW6cGpSF.d.ts} +2 -1
  55. package/dist/primitives.cjs +25 -21
  56. package/dist/primitives.d.cts +5 -4
  57. package/dist/primitives.d.ts +5 -4
  58. package/dist/primitives.js +2 -2
  59. package/dist/{sidebar-D-PafAXw.d.cts → sidebar-Dyt67t2z.d.cts} +2 -1
  60. package/dist/{sidebar-D-PafAXw.d.ts → sidebar-Dyt67t2z.d.ts} +2 -1
  61. package/dist/styles.css +464 -0
  62. package/dist/{use-observers-B9qtimrk.d.cts → use-observers-DvA7hSz4.d.cts} +10 -1
  63. package/dist/{use-observers-B9qtimrk.d.ts → use-observers-DvA7hSz4.d.ts} +10 -1
  64. package/package.json +3 -3
  65. package/dist/chunk-6VRF7X5C.cjs.map +0 -1
  66. package/dist/chunk-C32LKF23.cjs.map +0 -1
  67. package/dist/chunk-EGG4CP7C.js.map +0 -1
  68. package/dist/chunk-HO2YSF5O.js.map +0 -1
  69. package/dist/chunk-IBXLC5IE.js.map +0 -1
  70. package/dist/chunk-QO3E7TJS.js.map +0 -1
  71. package/dist/chunk-RHTLNSVW.cjs.map +0 -1
  72. package/dist/chunk-WGYNCSTP.cjs.map +0 -1
package/dist/index.d.cts CHANGED
@@ -1,18 +1,18 @@
1
1
  export { AnchoredPosition, AnchoredPositionOptions, DismissOptions, Portal, PortalProps, Presence, PresenceProps, Slot, SlotProps, composeEventHandlers, cx, getTabbable, mergeProps, mergeRefs, slotted, useAnchoredPosition, useAnimate, useAutoFocus, useControllableState, useDismiss, useFocusRestore, useFocusTrap, useIsMounted, useMotionStyle, useMotionValue, useMotionValueState, usePresence, useRovingFocus, useScrollLock, useSpringValue } from './primitives.cjs';
2
- export { I as InViewOptions, u as useElementSize, a as useFrameBudget, b as useInView, c as useMergedRef, d as usePointer, e as useReducedMotion, f as useScrollProgress, g as useTicker, h as useWindowScroll } from './use-observers-B9qtimrk.cjs';
2
+ export { I as InViewOptions, u as useElementSize, a as useFrameBudget, b as useInView, c as useMergedRef, d as usePointer, e as useReducedMotion, f as useScrollProgress, g as useTicker, h as useTickerSubscriberCount, i as useWindowScroll } from './use-observers-DvA7hSz4.cjs';
3
3
  import * as react from 'react';
4
- import { ForwardRefExoticComponent, ElementType, ReactNode, ComponentPropsWithoutRef, RefAttributes, ButtonHTMLAttributes, HTMLAttributes } from 'react';
4
+ import { ForwardRefExoticComponent, ElementType, ReactNode, ComponentPropsWithoutRef, RefAttributes, ButtonHTMLAttributes, HTMLAttributes, CSSProperties } from 'react';
5
5
  import * as _ansh_ui_core from '@ansh-ui/core';
6
- import { BaseEffectOptions, EffectDefinition } from '@ansh-ui/core';
6
+ import { BaseEffectOptions, EffectDefinition, TextScrambleOptions } from '@ansh-ui/core';
7
7
  export { AnimationControls, AnimationOptions, BaseEffectOptions, ColorInput, ColorSpace, EasingInput, EffectDefinition, FrameState, Gradient, Timeline as MotionTimeline, MotionValue, PaletteName, PointerState, ReducedMotionStrategy, Rgb, SpringOptions, StaggerFrom, StaggerOptions, animate, checkContrast, createGradient, createNoise, createScale, createTimeline, cubicBezier, easings, ensureContrast, generatePalette, getRegistry, getTicker, mixColors, motionValue, palettes, parseColor, pickReadable, prefersReducedMotion, registerEasing, setReducedMotionMode, signature as signatureEasings, springs, stagger, toHex, toOklchString } from '@ansh-ui/core';
8
- export { A as AnimatePresence, a as AnimatePresenceProps, b as AnimatedText, c as AnimatedTextProps, B as BehaviourComponent, d as BehaviourComponentBaseProps, e as BehaviourComponentProps, D as Draggable, f as DraggableProps, G as GradientText, g as GradientTextProps, M as MagneticButton, h as Marquee, i as Motion, j as MotionConfig, k as MotionConfigProps, l as MotionConfigValue, m as MotionTransition, n as MotionValues, P as Parallax, R as Ripple, S as ScrollReveal, T as ThemeContextValue, o as ThemeProvider, p as ThemeProviderProps, q as ThemeSetting, r as TiltCard, s as createBehaviourComponent, t as themeScript, u as useBehaviour, v as useMotionConfig, w as useTheme } from './motion-CSX4g2N8.cjs';
9
- export { A as Align, P as Placement, a as PositionOptions, b as PositionResult, R as Rect, S as Side, c as computePosition } from './position-DVScKcaa.cjs';
8
+ export { A as AnimatePresence, a as AnimatePresenceProps, b as AnimatedText, c as AnimatedTextProps, B as BehaviourComponent, d as BehaviourComponentBaseProps, e as BehaviourComponentProps, D as Draggable, f as DraggableProps, G as GradientText, g as GradientTextProps, M as MagneticButton, h as Marquee, i as Motion, j as MotionConfig, k as MotionConfigProps, l as MotionConfigValue, m as MotionTransition, n as MotionValues, P as Parallax, R as Ripple, S as ScrollReveal, T as ThemeContextValue, o as ThemeProvider, p as ThemeProviderProps, q as ThemeSetting, r as TiltCard, s as createBehaviourComponent, t as themeScript, u as useBehaviour, v as useMotionConfig, w as useTheme } from './motion-DsQPOsTT.cjs';
9
+ export { A as Align, P as Placement, a as PositionOptions, b as PositionResult, R as Rect, S as Side, c as computePosition } from './position-CW6cGpSF.cjs';
10
10
  export { AlertDialog, AlertDialogProps, CommandItem, CommandPalette, CommandPaletteProps, ContextMenu, ContextMenuProps, Dialog, DialogFooter, DialogProps, DialogSize, Drawer, DrawerProps, DrawerSide, DropdownMenu, HoverCard, HoverCardProps, MenuAction, MenuCheckbox, MenuEntry, MenuProps, MenuRadioGroup, MenuSubmenu, Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps, Tooltip, TooltipProps, TooltipProvider, TooltipProviderProps, useCommandShortcut } from './overlay.cjs';
11
11
  export { AspectRatio, AspectRatioProps, Center, Container, ContainerProps, Divider, DividerProps, Grid, GridItem, GridItemProps, GridProps, HStack, Resizable, ResizableProps, ScrollArea, ScrollAreaProps, SpaceToken, Spacer, SpacerProps, Stack, StackProps, VStack } from './layout.cjs';
12
12
  export { Calendar, CalendarProps, Checkbox, CheckboxProps, ChoiceCard, ChoiceCardProps, ColorPicker, ColorPickerProps, Combobox, ComboboxProps, DatePicker, DatePickerProps, DateRange, DateRangePicker, DateRangePickerProps, Dropzone, DropzoneFile, DropzoneProps, Field, FieldContextValue, FieldProps, Fieldset, FieldsetProps, Input, InputProps, InputSize, NumberInput, NumberInputProps, OptionList, OptionListProps, PinInput, PinInputProps, Radio, RadioGroup, RadioGroupProps, RadioProps, RangeSlider, RangeSliderProps, Rating, RatingProps, Select, SelectOption, SelectProps, Slider, SliderMark, SliderProps, Switch, SwitchProps, TagsInput, TagsInputProps, Textarea, TextareaProps, VisuallyHidden, addDays, addMonths, filterOptions, firstEnabled, isSameDay, scoreOption, startOfDay, stepActive, useFieldContext, useFieldControl, useTypeahead } from './form.cjs';
13
13
  export { Avatar, AvatarGroup, AvatarGroupProps, AvatarProps, Badge, BadgeProps, BadgeTone, CircularProgress, CircularProgressProps, CodeBlock, CodeBlockProps, Column, DataTable, DataTableProps, DescriptionList, DescriptionListProps, EmptyState, EmptyStateProps, Kbd, Meter, MeterProps, Pagination, PaginationProps, Progress, ProgressProps, SortDirection, SortState, Stat, StatProps, Table, Timeline, TimelineItem } from './data.cjs';
14
14
  export { Accordion, AccordionItem, AccordionProps, Breadcrumbs, BreadcrumbsProps, Collapsible, CollapsibleProps, Crumb, DisclosureList, DisclosureListProps, MegaMenuColumn, MegaMenuLink, NavMenuItem, NavigationMenu, NavigationMenuProps, Step, Stepper, StepperProps, TabItem, Tabs, TabsProps } from './navigation.cjs';
15
- export { A as AppShell, a as AppShellProps, N as NavItem, b as NavSection, S as Sidebar, c as SidebarProps } from './sidebar-D-PafAXw.cjs';
15
+ export { A as AppShell, a as AppShellProps, N as NavItem, b as NavSection, S as Sidebar, c as SidebarProps } from './sidebar-Dyt67t2z.cjs';
16
16
 
17
17
  /**
18
18
  * Turn an {@link EffectDefinition} into a React component.
@@ -98,6 +98,25 @@ declare const LiquidBlob: EffectComponent<_ansh_ui_core.BlobOptions>;
98
98
  declare const NoiseLayer: EffectComponent<_ansh_ui_core.NoiseLayerOptions>;
99
99
  /** A soft light that follows the pointer, easing in and out of existence. */
100
100
  declare const Spotlight: EffectComponent<_ansh_ui_core.SpotlightOptions>;
101
+ /** Volumetric shafts fanning from a source point, with noise-driven per-shaft brightness. */
102
+ declare const LightRays: EffectComponent<_ansh_ui_core.LightRaysOptions>;
103
+ /** A rising plume: curl-advected puffs that expand and dissipate over their life. */
104
+ declare const Smoke: EffectComponent<_ansh_ui_core.SmokeOptions>;
105
+ /**
106
+ * Bursts of fine particles that decelerate hard and settle.
107
+ *
108
+ * Bursts arrive on a Poisson schedule, and — with `burstOnPress` — on pointer press, which makes
109
+ * this the one background here that doubles as a click affordance.
110
+ */
111
+ declare const PowderExplosion: EffectComponent<_ansh_ui_core.PowderExplosionOptions>;
112
+ /** Polygons drifting in depth, projected through a real perspective divide. */
113
+ declare const FloatingGeometry: EffectComponent<_ansh_ui_core.FloatingGeometryOptions>;
114
+ /** Nested rings of points circling a centre, depth-ordered so near points occlude far ones. */
115
+ declare const Orbit: EffectComponent<_ansh_ui_core.OrbitOptions>;
116
+ /** A chaotic iterated map plotted as a drifting cloud — Clifford, de Jong or Svensson. */
117
+ declare const StrangeAttractor: EffectComponent<_ansh_ui_core.StrangeAttractorOptions>;
118
+ /** Particles bound to moving attractors, orbiting rather than collapsing. Follows the pointer. */
119
+ declare const Swarm: EffectComponent<_ansh_ui_core.SwarmOptions>;
101
120
 
102
121
  /**
103
122
  * Buttons.
@@ -465,6 +484,199 @@ interface FAQAccordionProps {
465
484
  */
466
485
  declare function FAQAccordion({ items, multiple, defaultOpen, className, }: FAQAccordionProps): react.JSX.Element;
467
486
 
487
+ interface ScrambleTextProps extends TextScrambleOptions {
488
+ /** The finished text. Must be a plain string — the behaviour owns this node's text content. */
489
+ children: string;
490
+ /** Element to render. Default `'span'`. */
491
+ as?: ElementType;
492
+ className?: string;
493
+ style?: CSSProperties;
494
+ }
495
+ declare function ScrambleText({ children, as, className, style, ...options }: ScrambleTextProps): react.JSX.Element;
496
+
497
+ /**
498
+ * A headline word that cycles through alternatives.
499
+ *
500
+ * ```tsx
501
+ * <h1>Built for <TextRotate words={['designers', 'engineers', 'teams']} /></h1>
502
+ * ```
503
+ *
504
+ * **The box is sized to the longest word, up front.** The naive version sizes to the current word,
505
+ * so the surrounding sentence reflows on every rotation — the text after it visibly jumps, and on
506
+ * a two-line headline the whole layout shifts. Every candidate is rendered once, hidden and
507
+ * unmeasured by the reader, purely to hold the width open. This is a layout-stability fix, not a
508
+ * visual one: it is the difference between a device that feels designed and one that feels broken.
509
+ *
510
+ * **It is not a live region.** Rotating text is decorative emphasis, not new information. Marking
511
+ * it `aria-live` would make a screen reader interrupt itself every two seconds, forever. The
512
+ * current word is in the accessible tree and read normally when traversed; changes are silent.
513
+ *
514
+ * **Reduced motion stops the rotation entirely**, rather than swapping instantly. A word that
515
+ * changes with no transition is more jarring than one that does not change at all, and the
516
+ * sentence still reads correctly with a single word in place.
517
+ */
518
+ type TextRotateAnimation = 'slide' | 'fade' | 'flip';
519
+ interface TextRotateProps {
520
+ /** The alternatives to cycle. The first is shown initially and under reduced motion. */
521
+ words: readonly string[];
522
+ /** Seconds each word is held. Default `2.2`. */
523
+ interval?: number;
524
+ /** How a word leaves and the next arrives. Default `'slide'`. */
525
+ animation?: TextRotateAnimation;
526
+ className?: string;
527
+ style?: CSSProperties;
528
+ }
529
+ declare function TextRotate({ words, interval, animation, className, style, }: TextRotateProps): react.JSX.Element;
530
+
531
+ /**
532
+ * A before/after comparison with a draggable divider.
533
+ *
534
+ * **The clip is on the top layer, not a width change.** Both layers are absolutely positioned at
535
+ * full size and the top one is revealed with `clip-path: inset(...)`. Resizing it instead would
536
+ * re-lay-out its contents as the handle moves, so an image would squash rather than be uncovered —
537
+ * which defeats the entire purpose of the control.
538
+ *
539
+ * **It is a real slider.** `role="slider"` with `aria-valuenow` and arrow-key handling, so it is
540
+ * operable without a pointer. Comparison sliders are very often built as a bare div with a
541
+ * `pointermove` listener, which makes them completely unusable by keyboard and invisible to
542
+ * assistive technology.
543
+ *
544
+ * **Pointer capture, not window listeners.** `setPointerCapture` keeps the drag attached to the
545
+ * handle even when the pointer leaves the element, and releases automatically if the gesture is
546
+ * cancelled — no global `pointermove`/`pointerup` pair to leak on unmount.
547
+ */
548
+ interface BeforeAfterProps {
549
+ /** Content revealed on the left of the divider. */
550
+ before: ReactNode;
551
+ /** Content revealed on the right of the divider. */
552
+ after: ReactNode;
553
+ /** Divider position as a percentage, `0`–`100`. Controlled. */
554
+ value?: number;
555
+ /** Initial position when uncontrolled. Default `50`. */
556
+ defaultValue?: number;
557
+ onValueChange?: (value: number) => void;
558
+ /** Percentage points moved per arrow key press. Default `4`. */
559
+ step?: number;
560
+ /** Accessible name for the divider. Default `'Comparison position'`. */
561
+ label?: string;
562
+ className?: string;
563
+ style?: CSSProperties;
564
+ }
565
+ declare function BeforeAfter({ before, after, value, defaultValue, onValueChange, step, label, className, style, }: BeforeAfterProps): react.JSX.Element;
566
+
567
+ /**
568
+ * A device or browser frame to present a screenshot, a demo, or a live component in.
569
+ *
570
+ * Purely presentational, and deliberately so — it exists because "here is the thing I built" is a
571
+ * layout problem, not an animation one. Anything placed inside keeps working: this renders a frame
572
+ * around real DOM, not a picture of one, so a live interactive demo can sit in it.
573
+ *
574
+ * **The chrome is `aria-hidden`.** Traffic-light dots, a notch and a fake URL are decoration; they
575
+ * carry no information a screen reader user needs, and announcing "three circles" before every
576
+ * demo is noise. Only the content inside the screen is in the accessible tree.
577
+ *
578
+ * **The URL is not a link and not an input.** It is a static label. Making it either would invite
579
+ * clicks that go nowhere, which is worse than obviously-inert chrome.
580
+ */
581
+ type MockupVariant = 'browser' | 'window' | 'phone';
582
+ interface DeviceMockupProps {
583
+ /** Frame style. Default `'browser'`. */
584
+ variant?: MockupVariant;
585
+ /** Address shown in the browser chrome. Ignored by the other variants. */
586
+ url?: string;
587
+ /** Title shown in the window chrome. Ignored by the other variants. */
588
+ title?: string;
589
+ /** Accessible name for the framed region, e.g. `'Dashboard preview'`. */
590
+ label?: string;
591
+ className?: string;
592
+ style?: CSSProperties;
593
+ children?: ReactNode;
594
+ }
595
+ declare function DeviceMockup({ variant, url, title, label, className, style, children, }: DeviceMockupProps): react.JSX.Element;
596
+
597
+ /**
598
+ * A deck of cards with the next few peeking out behind the top one.
599
+ *
600
+ * **Depth is a fixed ladder, not per-card state.** A card's offset, scale and rotation are derived
601
+ * from its distance from the top of the deck, so advancing only changes one number and every card
602
+ * transitions to its new rung. Animating each card's transform imperatively would mean tracking
603
+ * n transforms and reconciling them on every change — this way the CSS transition does it.
604
+ *
605
+ * **Only the top card is reachable, by any route.** The cards behind it get both `aria-hidden` and
606
+ * `inert`. Either alone is a trap: `aria-hidden` on its own leaves a buried button still reachable
607
+ * by Tab, so keyboard focus lands on a control the screen reader will not announce. A reader
608
+ * should encounter one card, not four overlapping ones, three of them 80% hidden.
609
+ *
610
+ * **Auto-play stops under reduced motion and while hovered or focused.** Content that moves itself
611
+ * away from a reader mid-sentence is a WCAG 2.2 pause/stop concern, not a preference — hovering or
612
+ * tabbing into the deck is a strong signal that someone is reading it.
613
+ */
614
+ interface CardStackProps {
615
+ /** Cards, front to back. */
616
+ items: readonly ReactNode[];
617
+ /** Advance on a timer. Default `true`. */
618
+ autoPlay?: boolean;
619
+ /** Seconds each card is held when auto-playing. Default `3.5`. */
620
+ interval?: number;
621
+ /** How many cards behind the top one are visible. Default `2`. */
622
+ peek?: number;
623
+ /** Render previous/next buttons. Default `true`. */
624
+ controls?: boolean;
625
+ /** Accessible name for the deck. Default `'Card stack'`. */
626
+ label?: string;
627
+ className?: string;
628
+ style?: CSSProperties;
629
+ }
630
+ declare function CardStack({ items, autoPlay, interval, peek, controls, label, className, style, }: CardStackProps): react.JSX.Element | null;
631
+
632
+ interface CarouselProps {
633
+ /** Slides, in order. */
634
+ items: readonly ReactNode[];
635
+ /** Active slide index. Controlled. */
636
+ value?: number;
637
+ /** Initial slide when uncontrolled. Default `0`. */
638
+ defaultValue?: number;
639
+ onChange?: (index: number) => void;
640
+ /** Wrap past the ends. Default `true`. */
641
+ loop?: boolean;
642
+ /** Advance on a timer. Default `false`. */
643
+ autoPlay?: boolean;
644
+ /** Seconds each slide is held when auto-playing. Default `5`. */
645
+ interval?: number;
646
+ /** Render the dot indicators. Default `true`. */
647
+ showDots?: boolean;
648
+ /** Render the previous/next arrows. Default `true`. */
649
+ showArrows?: boolean;
650
+ /** Allow dragging the track to change slides. Default `true`. */
651
+ draggable?: boolean;
652
+ /** Accessible name for the carousel region. */
653
+ label: string;
654
+ className?: string;
655
+ style?: CSSProperties;
656
+ }
657
+ /**
658
+ * A carousel.
659
+ *
660
+ * **Transform, not scroll.** The track is translated by `index × 100%`. A scroll-snap carousel gets
661
+ * native touch feel for free but makes the *scroll position* the source of truth, so the active
662
+ * index has to be inferred back out of it with an observer — and that inference disagrees with the
663
+ * controlled `value` prop the moment both try to drive at once. One transform keeps the index
664
+ * authoritative, which is what a controlled component requires.
665
+ *
666
+ * **`aria-live` is tied to intent, not to movement.** The live region is `polite` only while the
667
+ * carousel is idle, and `off` while it is auto-playing. Announcing every automatic change would
668
+ * make a screen reader talk over the user indefinitely; announcing a change the user *asked* for
669
+ * is exactly what they need.
670
+ *
671
+ * **Auto-play ships with a real pause control**, not just pause-on-hover. WCAG 2.2.2 requires a
672
+ * mechanism to stop content that moves automatically for more than five seconds, and hover is not
673
+ * one — it is unavailable to keyboard and touch users, and vanishes the moment the pointer moves.
674
+ *
675
+ * **Off-screen slides are `inert`.** They are laid out beside the visible one, so without it every
676
+ * link and button in all of them sits in the tab order, and Tab appears to focus nothing.
677
+ */
678
+ declare function Carousel({ items, value, defaultValue, onChange, loop, autoPlay, interval, showDots, showArrows, draggable, label, className, style, }: CarouselProps): react.JSX.Element | null;
679
+
468
680
  type AlertTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
469
681
  interface AlertProps {
470
682
  tone?: AlertTone;
@@ -549,4 +761,5 @@ declare function Callout({ label, tone, icon, className, children }: CalloutProp
549
761
 
550
762
  declare const VERSION = "0.1.0";
551
763
 
552
- export { Alert, type AlertProps, type AlertTone, AnimatedGradient, AuroraBackground, Banner, type BannerProps, BentoGrid, type BentoGridProps, BentoItem, type BentoItemProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, Constellation, Dock, type DockItem, type DockProps, type DotsProps, type EffectComponent, type EffectComponentBaseProps, type EffectComponentProps, FAQAccordion, type FAQAccordionProps, type FaqItem, Fireflies, GlowCard, type GlowCardProps, IconButton, type IconButtonProps, LiquidBlob, LoadingDots, MeshGradient, MeteorShower, NoiseLayer, NumberTicker, type NumberTickerProps, ParticleField, type PricingPlan, PricingTable, type PricingTableProps, Rain, ShinyText, type ShinyTextProps, Skeleton, type SkeletonProps, Snow, Spinner, type SpinnerProps, Spotlight, SpotlightCard, type SpotlightCardProps, TiltCard3D, type TiltCard3DProps, type Toast, ToastProvider, type ToastVariant, Typewriter, type TypewriterProps, VERSION, Waves, createEffectComponent, useToast };
764
+ export { Alert, AnimatedGradient, AuroraBackground, Banner, BeforeAfter, BentoGrid, BentoItem, Button, Callout, CardStack, Carousel, Constellation, DeviceMockup, Dock, FAQAccordion, Fireflies, FloatingGeometry, GlowCard, IconButton, LightRays, LiquidBlob, LoadingDots, MeshGradient, MeteorShower, NoiseLayer, NumberTicker, Orbit, ParticleField, PowderExplosion, PricingTable, Rain, ScrambleText, ShinyText, Skeleton, Smoke, Snow, Spinner, Spotlight, SpotlightCard, StrangeAttractor, Swarm, TextRotate, TiltCard3D, ToastProvider, Typewriter, VERSION, Waves, createEffectComponent, useToast };
765
+ export type { AlertProps, AlertTone, BannerProps, BeforeAfterProps, BentoGridProps, BentoItemProps, ButtonProps, ButtonSize, ButtonVariant, CalloutProps, CardStackProps, CarouselProps, DeviceMockupProps, DockItem, DockProps, DotsProps, EffectComponent, EffectComponentBaseProps, EffectComponentProps, FAQAccordionProps, FaqItem, GlowCardProps, IconButtonProps, MockupVariant, NumberTickerProps, PricingPlan, PricingTableProps, ScrambleTextProps, ShinyTextProps, SkeletonProps, SpinnerProps, SpotlightCardProps, TextRotateAnimation, TextRotateProps, TiltCard3DProps, Toast, ToastVariant, TypewriterProps };
package/dist/index.d.ts CHANGED
@@ -1,18 +1,18 @@
1
1
  export { AnchoredPosition, AnchoredPositionOptions, DismissOptions, Portal, PortalProps, Presence, PresenceProps, Slot, SlotProps, composeEventHandlers, cx, getTabbable, mergeProps, mergeRefs, slotted, useAnchoredPosition, useAnimate, useAutoFocus, useControllableState, useDismiss, useFocusRestore, useFocusTrap, useIsMounted, useMotionStyle, useMotionValue, useMotionValueState, usePresence, useRovingFocus, useScrollLock, useSpringValue } from './primitives.js';
2
- export { I as InViewOptions, u as useElementSize, a as useFrameBudget, b as useInView, c as useMergedRef, d as usePointer, e as useReducedMotion, f as useScrollProgress, g as useTicker, h as useWindowScroll } from './use-observers-B9qtimrk.js';
2
+ export { I as InViewOptions, u as useElementSize, a as useFrameBudget, b as useInView, c as useMergedRef, d as usePointer, e as useReducedMotion, f as useScrollProgress, g as useTicker, h as useTickerSubscriberCount, i as useWindowScroll } from './use-observers-DvA7hSz4.js';
3
3
  import * as react from 'react';
4
- import { ForwardRefExoticComponent, ElementType, ReactNode, ComponentPropsWithoutRef, RefAttributes, ButtonHTMLAttributes, HTMLAttributes } from 'react';
4
+ import { ForwardRefExoticComponent, ElementType, ReactNode, ComponentPropsWithoutRef, RefAttributes, ButtonHTMLAttributes, HTMLAttributes, CSSProperties } from 'react';
5
5
  import * as _ansh_ui_core from '@ansh-ui/core';
6
- import { BaseEffectOptions, EffectDefinition } from '@ansh-ui/core';
6
+ import { BaseEffectOptions, EffectDefinition, TextScrambleOptions } from '@ansh-ui/core';
7
7
  export { AnimationControls, AnimationOptions, BaseEffectOptions, ColorInput, ColorSpace, EasingInput, EffectDefinition, FrameState, Gradient, Timeline as MotionTimeline, MotionValue, PaletteName, PointerState, ReducedMotionStrategy, Rgb, SpringOptions, StaggerFrom, StaggerOptions, animate, checkContrast, createGradient, createNoise, createScale, createTimeline, cubicBezier, easings, ensureContrast, generatePalette, getRegistry, getTicker, mixColors, motionValue, palettes, parseColor, pickReadable, prefersReducedMotion, registerEasing, setReducedMotionMode, signature as signatureEasings, springs, stagger, toHex, toOklchString } from '@ansh-ui/core';
8
- export { A as AnimatePresence, a as AnimatePresenceProps, b as AnimatedText, c as AnimatedTextProps, B as BehaviourComponent, d as BehaviourComponentBaseProps, e as BehaviourComponentProps, D as Draggable, f as DraggableProps, G as GradientText, g as GradientTextProps, M as MagneticButton, h as Marquee, i as Motion, j as MotionConfig, k as MotionConfigProps, l as MotionConfigValue, m as MotionTransition, n as MotionValues, P as Parallax, R as Ripple, S as ScrollReveal, T as ThemeContextValue, o as ThemeProvider, p as ThemeProviderProps, q as ThemeSetting, r as TiltCard, s as createBehaviourComponent, t as themeScript, u as useBehaviour, v as useMotionConfig, w as useTheme } from './motion-CQmCq6_k.js';
9
- export { A as Align, P as Placement, a as PositionOptions, b as PositionResult, R as Rect, S as Side, c as computePosition } from './position-DVScKcaa.js';
8
+ export { A as AnimatePresence, a as AnimatePresenceProps, b as AnimatedText, c as AnimatedTextProps, B as BehaviourComponent, d as BehaviourComponentBaseProps, e as BehaviourComponentProps, D as Draggable, f as DraggableProps, G as GradientText, g as GradientTextProps, M as MagneticButton, h as Marquee, i as Motion, j as MotionConfig, k as MotionConfigProps, l as MotionConfigValue, m as MotionTransition, n as MotionValues, P as Parallax, R as Ripple, S as ScrollReveal, T as ThemeContextValue, o as ThemeProvider, p as ThemeProviderProps, q as ThemeSetting, r as TiltCard, s as createBehaviourComponent, t as themeScript, u as useBehaviour, v as useMotionConfig, w as useTheme } from './motion-DoT_sTl1.js';
9
+ export { A as Align, P as Placement, a as PositionOptions, b as PositionResult, R as Rect, S as Side, c as computePosition } from './position-CW6cGpSF.js';
10
10
  export { AlertDialog, AlertDialogProps, CommandItem, CommandPalette, CommandPaletteProps, ContextMenu, ContextMenuProps, Dialog, DialogFooter, DialogProps, DialogSize, Drawer, DrawerProps, DrawerSide, DropdownMenu, HoverCard, HoverCardProps, MenuAction, MenuCheckbox, MenuEntry, MenuProps, MenuRadioGroup, MenuSubmenu, Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps, Tooltip, TooltipProps, TooltipProvider, TooltipProviderProps, useCommandShortcut } from './overlay.js';
11
11
  export { AspectRatio, AspectRatioProps, Center, Container, ContainerProps, Divider, DividerProps, Grid, GridItem, GridItemProps, GridProps, HStack, Resizable, ResizableProps, ScrollArea, ScrollAreaProps, SpaceToken, Spacer, SpacerProps, Stack, StackProps, VStack } from './layout.js';
12
12
  export { Calendar, CalendarProps, Checkbox, CheckboxProps, ChoiceCard, ChoiceCardProps, ColorPicker, ColorPickerProps, Combobox, ComboboxProps, DatePicker, DatePickerProps, DateRange, DateRangePicker, DateRangePickerProps, Dropzone, DropzoneFile, DropzoneProps, Field, FieldContextValue, FieldProps, Fieldset, FieldsetProps, Input, InputProps, InputSize, NumberInput, NumberInputProps, OptionList, OptionListProps, PinInput, PinInputProps, Radio, RadioGroup, RadioGroupProps, RadioProps, RangeSlider, RangeSliderProps, Rating, RatingProps, Select, SelectOption, SelectProps, Slider, SliderMark, SliderProps, Switch, SwitchProps, TagsInput, TagsInputProps, Textarea, TextareaProps, VisuallyHidden, addDays, addMonths, filterOptions, firstEnabled, isSameDay, scoreOption, startOfDay, stepActive, useFieldContext, useFieldControl, useTypeahead } from './form.js';
13
13
  export { Avatar, AvatarGroup, AvatarGroupProps, AvatarProps, Badge, BadgeProps, BadgeTone, CircularProgress, CircularProgressProps, CodeBlock, CodeBlockProps, Column, DataTable, DataTableProps, DescriptionList, DescriptionListProps, EmptyState, EmptyStateProps, Kbd, Meter, MeterProps, Pagination, PaginationProps, Progress, ProgressProps, SortDirection, SortState, Stat, StatProps, Table, Timeline, TimelineItem } from './data.js';
14
14
  export { Accordion, AccordionItem, AccordionProps, Breadcrumbs, BreadcrumbsProps, Collapsible, CollapsibleProps, Crumb, DisclosureList, DisclosureListProps, MegaMenuColumn, MegaMenuLink, NavMenuItem, NavigationMenu, NavigationMenuProps, Step, Stepper, StepperProps, TabItem, Tabs, TabsProps } from './navigation.js';
15
- export { A as AppShell, a as AppShellProps, N as NavItem, b as NavSection, S as Sidebar, c as SidebarProps } from './sidebar-D-PafAXw.js';
15
+ export { A as AppShell, a as AppShellProps, N as NavItem, b as NavSection, S as Sidebar, c as SidebarProps } from './sidebar-Dyt67t2z.js';
16
16
 
17
17
  /**
18
18
  * Turn an {@link EffectDefinition} into a React component.
@@ -98,6 +98,25 @@ declare const LiquidBlob: EffectComponent<_ansh_ui_core.BlobOptions>;
98
98
  declare const NoiseLayer: EffectComponent<_ansh_ui_core.NoiseLayerOptions>;
99
99
  /** A soft light that follows the pointer, easing in and out of existence. */
100
100
  declare const Spotlight: EffectComponent<_ansh_ui_core.SpotlightOptions>;
101
+ /** Volumetric shafts fanning from a source point, with noise-driven per-shaft brightness. */
102
+ declare const LightRays: EffectComponent<_ansh_ui_core.LightRaysOptions>;
103
+ /** A rising plume: curl-advected puffs that expand and dissipate over their life. */
104
+ declare const Smoke: EffectComponent<_ansh_ui_core.SmokeOptions>;
105
+ /**
106
+ * Bursts of fine particles that decelerate hard and settle.
107
+ *
108
+ * Bursts arrive on a Poisson schedule, and — with `burstOnPress` — on pointer press, which makes
109
+ * this the one background here that doubles as a click affordance.
110
+ */
111
+ declare const PowderExplosion: EffectComponent<_ansh_ui_core.PowderExplosionOptions>;
112
+ /** Polygons drifting in depth, projected through a real perspective divide. */
113
+ declare const FloatingGeometry: EffectComponent<_ansh_ui_core.FloatingGeometryOptions>;
114
+ /** Nested rings of points circling a centre, depth-ordered so near points occlude far ones. */
115
+ declare const Orbit: EffectComponent<_ansh_ui_core.OrbitOptions>;
116
+ /** A chaotic iterated map plotted as a drifting cloud — Clifford, de Jong or Svensson. */
117
+ declare const StrangeAttractor: EffectComponent<_ansh_ui_core.StrangeAttractorOptions>;
118
+ /** Particles bound to moving attractors, orbiting rather than collapsing. Follows the pointer. */
119
+ declare const Swarm: EffectComponent<_ansh_ui_core.SwarmOptions>;
101
120
 
102
121
  /**
103
122
  * Buttons.
@@ -465,6 +484,199 @@ interface FAQAccordionProps {
465
484
  */
466
485
  declare function FAQAccordion({ items, multiple, defaultOpen, className, }: FAQAccordionProps): react.JSX.Element;
467
486
 
487
+ interface ScrambleTextProps extends TextScrambleOptions {
488
+ /** The finished text. Must be a plain string — the behaviour owns this node's text content. */
489
+ children: string;
490
+ /** Element to render. Default `'span'`. */
491
+ as?: ElementType;
492
+ className?: string;
493
+ style?: CSSProperties;
494
+ }
495
+ declare function ScrambleText({ children, as, className, style, ...options }: ScrambleTextProps): react.JSX.Element;
496
+
497
+ /**
498
+ * A headline word that cycles through alternatives.
499
+ *
500
+ * ```tsx
501
+ * <h1>Built for <TextRotate words={['designers', 'engineers', 'teams']} /></h1>
502
+ * ```
503
+ *
504
+ * **The box is sized to the longest word, up front.** The naive version sizes to the current word,
505
+ * so the surrounding sentence reflows on every rotation — the text after it visibly jumps, and on
506
+ * a two-line headline the whole layout shifts. Every candidate is rendered once, hidden and
507
+ * unmeasured by the reader, purely to hold the width open. This is a layout-stability fix, not a
508
+ * visual one: it is the difference between a device that feels designed and one that feels broken.
509
+ *
510
+ * **It is not a live region.** Rotating text is decorative emphasis, not new information. Marking
511
+ * it `aria-live` would make a screen reader interrupt itself every two seconds, forever. The
512
+ * current word is in the accessible tree and read normally when traversed; changes are silent.
513
+ *
514
+ * **Reduced motion stops the rotation entirely**, rather than swapping instantly. A word that
515
+ * changes with no transition is more jarring than one that does not change at all, and the
516
+ * sentence still reads correctly with a single word in place.
517
+ */
518
+ type TextRotateAnimation = 'slide' | 'fade' | 'flip';
519
+ interface TextRotateProps {
520
+ /** The alternatives to cycle. The first is shown initially and under reduced motion. */
521
+ words: readonly string[];
522
+ /** Seconds each word is held. Default `2.2`. */
523
+ interval?: number;
524
+ /** How a word leaves and the next arrives. Default `'slide'`. */
525
+ animation?: TextRotateAnimation;
526
+ className?: string;
527
+ style?: CSSProperties;
528
+ }
529
+ declare function TextRotate({ words, interval, animation, className, style, }: TextRotateProps): react.JSX.Element;
530
+
531
+ /**
532
+ * A before/after comparison with a draggable divider.
533
+ *
534
+ * **The clip is on the top layer, not a width change.** Both layers are absolutely positioned at
535
+ * full size and the top one is revealed with `clip-path: inset(...)`. Resizing it instead would
536
+ * re-lay-out its contents as the handle moves, so an image would squash rather than be uncovered —
537
+ * which defeats the entire purpose of the control.
538
+ *
539
+ * **It is a real slider.** `role="slider"` with `aria-valuenow` and arrow-key handling, so it is
540
+ * operable without a pointer. Comparison sliders are very often built as a bare div with a
541
+ * `pointermove` listener, which makes them completely unusable by keyboard and invisible to
542
+ * assistive technology.
543
+ *
544
+ * **Pointer capture, not window listeners.** `setPointerCapture` keeps the drag attached to the
545
+ * handle even when the pointer leaves the element, and releases automatically if the gesture is
546
+ * cancelled — no global `pointermove`/`pointerup` pair to leak on unmount.
547
+ */
548
+ interface BeforeAfterProps {
549
+ /** Content revealed on the left of the divider. */
550
+ before: ReactNode;
551
+ /** Content revealed on the right of the divider. */
552
+ after: ReactNode;
553
+ /** Divider position as a percentage, `0`–`100`. Controlled. */
554
+ value?: number;
555
+ /** Initial position when uncontrolled. Default `50`. */
556
+ defaultValue?: number;
557
+ onValueChange?: (value: number) => void;
558
+ /** Percentage points moved per arrow key press. Default `4`. */
559
+ step?: number;
560
+ /** Accessible name for the divider. Default `'Comparison position'`. */
561
+ label?: string;
562
+ className?: string;
563
+ style?: CSSProperties;
564
+ }
565
+ declare function BeforeAfter({ before, after, value, defaultValue, onValueChange, step, label, className, style, }: BeforeAfterProps): react.JSX.Element;
566
+
567
+ /**
568
+ * A device or browser frame to present a screenshot, a demo, or a live component in.
569
+ *
570
+ * Purely presentational, and deliberately so — it exists because "here is the thing I built" is a
571
+ * layout problem, not an animation one. Anything placed inside keeps working: this renders a frame
572
+ * around real DOM, not a picture of one, so a live interactive demo can sit in it.
573
+ *
574
+ * **The chrome is `aria-hidden`.** Traffic-light dots, a notch and a fake URL are decoration; they
575
+ * carry no information a screen reader user needs, and announcing "three circles" before every
576
+ * demo is noise. Only the content inside the screen is in the accessible tree.
577
+ *
578
+ * **The URL is not a link and not an input.** It is a static label. Making it either would invite
579
+ * clicks that go nowhere, which is worse than obviously-inert chrome.
580
+ */
581
+ type MockupVariant = 'browser' | 'window' | 'phone';
582
+ interface DeviceMockupProps {
583
+ /** Frame style. Default `'browser'`. */
584
+ variant?: MockupVariant;
585
+ /** Address shown in the browser chrome. Ignored by the other variants. */
586
+ url?: string;
587
+ /** Title shown in the window chrome. Ignored by the other variants. */
588
+ title?: string;
589
+ /** Accessible name for the framed region, e.g. `'Dashboard preview'`. */
590
+ label?: string;
591
+ className?: string;
592
+ style?: CSSProperties;
593
+ children?: ReactNode;
594
+ }
595
+ declare function DeviceMockup({ variant, url, title, label, className, style, children, }: DeviceMockupProps): react.JSX.Element;
596
+
597
+ /**
598
+ * A deck of cards with the next few peeking out behind the top one.
599
+ *
600
+ * **Depth is a fixed ladder, not per-card state.** A card's offset, scale and rotation are derived
601
+ * from its distance from the top of the deck, so advancing only changes one number and every card
602
+ * transitions to its new rung. Animating each card's transform imperatively would mean tracking
603
+ * n transforms and reconciling them on every change — this way the CSS transition does it.
604
+ *
605
+ * **Only the top card is reachable, by any route.** The cards behind it get both `aria-hidden` and
606
+ * `inert`. Either alone is a trap: `aria-hidden` on its own leaves a buried button still reachable
607
+ * by Tab, so keyboard focus lands on a control the screen reader will not announce. A reader
608
+ * should encounter one card, not four overlapping ones, three of them 80% hidden.
609
+ *
610
+ * **Auto-play stops under reduced motion and while hovered or focused.** Content that moves itself
611
+ * away from a reader mid-sentence is a WCAG 2.2 pause/stop concern, not a preference — hovering or
612
+ * tabbing into the deck is a strong signal that someone is reading it.
613
+ */
614
+ interface CardStackProps {
615
+ /** Cards, front to back. */
616
+ items: readonly ReactNode[];
617
+ /** Advance on a timer. Default `true`. */
618
+ autoPlay?: boolean;
619
+ /** Seconds each card is held when auto-playing. Default `3.5`. */
620
+ interval?: number;
621
+ /** How many cards behind the top one are visible. Default `2`. */
622
+ peek?: number;
623
+ /** Render previous/next buttons. Default `true`. */
624
+ controls?: boolean;
625
+ /** Accessible name for the deck. Default `'Card stack'`. */
626
+ label?: string;
627
+ className?: string;
628
+ style?: CSSProperties;
629
+ }
630
+ declare function CardStack({ items, autoPlay, interval, peek, controls, label, className, style, }: CardStackProps): react.JSX.Element | null;
631
+
632
+ interface CarouselProps {
633
+ /** Slides, in order. */
634
+ items: readonly ReactNode[];
635
+ /** Active slide index. Controlled. */
636
+ value?: number;
637
+ /** Initial slide when uncontrolled. Default `0`. */
638
+ defaultValue?: number;
639
+ onChange?: (index: number) => void;
640
+ /** Wrap past the ends. Default `true`. */
641
+ loop?: boolean;
642
+ /** Advance on a timer. Default `false`. */
643
+ autoPlay?: boolean;
644
+ /** Seconds each slide is held when auto-playing. Default `5`. */
645
+ interval?: number;
646
+ /** Render the dot indicators. Default `true`. */
647
+ showDots?: boolean;
648
+ /** Render the previous/next arrows. Default `true`. */
649
+ showArrows?: boolean;
650
+ /** Allow dragging the track to change slides. Default `true`. */
651
+ draggable?: boolean;
652
+ /** Accessible name for the carousel region. */
653
+ label: string;
654
+ className?: string;
655
+ style?: CSSProperties;
656
+ }
657
+ /**
658
+ * A carousel.
659
+ *
660
+ * **Transform, not scroll.** The track is translated by `index × 100%`. A scroll-snap carousel gets
661
+ * native touch feel for free but makes the *scroll position* the source of truth, so the active
662
+ * index has to be inferred back out of it with an observer — and that inference disagrees with the
663
+ * controlled `value` prop the moment both try to drive at once. One transform keeps the index
664
+ * authoritative, which is what a controlled component requires.
665
+ *
666
+ * **`aria-live` is tied to intent, not to movement.** The live region is `polite` only while the
667
+ * carousel is idle, and `off` while it is auto-playing. Announcing every automatic change would
668
+ * make a screen reader talk over the user indefinitely; announcing a change the user *asked* for
669
+ * is exactly what they need.
670
+ *
671
+ * **Auto-play ships with a real pause control**, not just pause-on-hover. WCAG 2.2.2 requires a
672
+ * mechanism to stop content that moves automatically for more than five seconds, and hover is not
673
+ * one — it is unavailable to keyboard and touch users, and vanishes the moment the pointer moves.
674
+ *
675
+ * **Off-screen slides are `inert`.** They are laid out beside the visible one, so without it every
676
+ * link and button in all of them sits in the tab order, and Tab appears to focus nothing.
677
+ */
678
+ declare function Carousel({ items, value, defaultValue, onChange, loop, autoPlay, interval, showDots, showArrows, draggable, label, className, style, }: CarouselProps): react.JSX.Element | null;
679
+
468
680
  type AlertTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
469
681
  interface AlertProps {
470
682
  tone?: AlertTone;
@@ -549,4 +761,5 @@ declare function Callout({ label, tone, icon, className, children }: CalloutProp
549
761
 
550
762
  declare const VERSION = "0.1.0";
551
763
 
552
- export { Alert, type AlertProps, type AlertTone, AnimatedGradient, AuroraBackground, Banner, type BannerProps, BentoGrid, type BentoGridProps, BentoItem, type BentoItemProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, Constellation, Dock, type DockItem, type DockProps, type DotsProps, type EffectComponent, type EffectComponentBaseProps, type EffectComponentProps, FAQAccordion, type FAQAccordionProps, type FaqItem, Fireflies, GlowCard, type GlowCardProps, IconButton, type IconButtonProps, LiquidBlob, LoadingDots, MeshGradient, MeteorShower, NoiseLayer, NumberTicker, type NumberTickerProps, ParticleField, type PricingPlan, PricingTable, type PricingTableProps, Rain, ShinyText, type ShinyTextProps, Skeleton, type SkeletonProps, Snow, Spinner, type SpinnerProps, Spotlight, SpotlightCard, type SpotlightCardProps, TiltCard3D, type TiltCard3DProps, type Toast, ToastProvider, type ToastVariant, Typewriter, type TypewriterProps, VERSION, Waves, createEffectComponent, useToast };
764
+ export { Alert, AnimatedGradient, AuroraBackground, Banner, BeforeAfter, BentoGrid, BentoItem, Button, Callout, CardStack, Carousel, Constellation, DeviceMockup, Dock, FAQAccordion, Fireflies, FloatingGeometry, GlowCard, IconButton, LightRays, LiquidBlob, LoadingDots, MeshGradient, MeteorShower, NoiseLayer, NumberTicker, Orbit, ParticleField, PowderExplosion, PricingTable, Rain, ScrambleText, ShinyText, Skeleton, Smoke, Snow, Spinner, Spotlight, SpotlightCard, StrangeAttractor, Swarm, TextRotate, TiltCard3D, ToastProvider, Typewriter, VERSION, Waves, createEffectComponent, useToast };
765
+ export type { AlertProps, AlertTone, BannerProps, BeforeAfterProps, BentoGridProps, BentoItemProps, ButtonProps, ButtonSize, ButtonVariant, CalloutProps, CardStackProps, CarouselProps, DeviceMockupProps, DockItem, DockProps, DotsProps, EffectComponent, EffectComponentBaseProps, EffectComponentProps, FAQAccordionProps, FaqItem, GlowCardProps, IconButtonProps, MockupVariant, NumberTickerProps, PricingPlan, PricingTableProps, ScrambleTextProps, ShinyTextProps, SkeletonProps, SpinnerProps, SpotlightCardProps, TextRotateAnimation, TextRotateProps, TiltCard3DProps, Toast, ToastVariant, TypewriterProps };