@saasflare/ui 3.1.2 → 3.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 (56) hide show
  1. package/README.md +68 -2
  2. package/dist/{button-0Bdl7Nqm.d.ts → button-BA7OcXqy.d.mts} +12 -17
  3. package/dist/{button-Brb4BhPO.d.mts → button-Bfg2Tnvx.d.ts} +12 -17
  4. package/dist/{chunk-D5LKWKG7.js → chunk-2GOPD64T.js} +117 -89
  5. package/dist/{chunk-56PMDC5F.mjs → chunk-2ONA6OMO.mjs} +29 -40
  6. package/dist/{chunk-RW2S3KNB.mjs → chunk-5C65JNGY.mjs} +7 -6
  7. package/dist/{chunk-NPNSPYTX.js → chunk-7UD3SGPP.js} +28 -39
  8. package/dist/chunk-GI6VN7XU.mjs +2143 -0
  9. package/dist/{chunk-FT66KYRN.js → chunk-ITALEYDI.js} +2 -2
  10. package/dist/{chunk-4BOMMZEY.js → chunk-JC7EIEGI.js} +14 -13
  11. package/dist/chunk-N65HIOBD.js +234 -0
  12. package/dist/{chunk-EJHYM2HP.mjs → chunk-OZAWULTM.mjs} +1 -1
  13. package/dist/chunk-R3AVBLJ3.js +2207 -0
  14. package/dist/{chunk-WRONFPRI.mjs → chunk-RMQBB72G.mjs} +118 -91
  15. package/dist/chunk-XNDTCYSO.mjs +211 -0
  16. package/dist/{dialog-BmY55WSX.d.ts → dialog-CZRwrqDa.d.ts} +2 -2
  17. package/dist/{dialog-CcaHMAsS.d.mts → dialog-Cr0becOL.d.mts} +2 -2
  18. package/dist/entries/calendar.d.mts +3 -3
  19. package/dist/entries/calendar.d.ts +3 -3
  20. package/dist/entries/calendar.js +13 -214
  21. package/dist/entries/calendar.mjs +5 -196
  22. package/dist/entries/carousel.d.mts +3 -3
  23. package/dist/entries/carousel.d.ts +3 -3
  24. package/dist/entries/carousel.js +17 -14
  25. package/dist/entries/carousel.mjs +10 -7
  26. package/dist/entries/chart.d.mts +1 -1
  27. package/dist/entries/chart.d.ts +1 -1
  28. package/dist/entries/chart.js +11 -11
  29. package/dist/entries/chart.mjs +1 -1
  30. package/dist/entries/command.d.mts +3 -3
  31. package/dist/entries/command.d.ts +3 -3
  32. package/dist/entries/command.js +21 -19
  33. package/dist/entries/command.mjs +8 -6
  34. package/dist/entries/drawer.d.mts +1 -1
  35. package/dist/entries/drawer.d.ts +1 -1
  36. package/dist/entries/drawer.js +9 -9
  37. package/dist/entries/drawer.mjs +2 -2
  38. package/dist/entries/input-otp.d.mts +2 -2
  39. package/dist/entries/input-otp.d.ts +2 -2
  40. package/dist/entries/input-otp.js +10 -8
  41. package/dist/entries/input-otp.mjs +6 -4
  42. package/dist/entries/resizable.d.mts +3 -2
  43. package/dist/entries/resizable.d.ts +3 -2
  44. package/dist/entries/resizable.js +8 -6
  45. package/dist/entries/resizable.mjs +6 -4
  46. package/dist/index.d.mts +2129 -57
  47. package/dist/index.d.ts +2129 -57
  48. package/dist/index.js +5168 -556
  49. package/dist/index.mjs +4633 -215
  50. package/dist/{use-saasflare-props-NrM2Glmp.d.mts → use-saasflare-props-BrjMhU0U.d.mts} +53 -4
  51. package/dist/{use-saasflare-props-NrM2Glmp.d.ts → use-saasflare-props-BrjMhU0U.d.ts} +53 -4
  52. package/package.json +4 -3
  53. package/styles/aurora.css +47 -0
  54. package/styles/palettes.css +483 -3
  55. package/styles/surfaces.css +89 -10
  56. package/styles/theme.css +11 -5
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { ClassValue } from 'clsx';
2
+ import * as React$1 from 'react';
3
+ import { Ref, MutableRefObject, RefCallback, ReactNode, JSX, ComponentProps } from 'react';
2
4
  import { Transition } from 'motion/react';
3
- import { I as Intent, B as Button } from './button-0Bdl7Nqm.js';
4
- export { a as ButtonProps, b as buttonVariants } from './button-0Bdl7Nqm.js';
5
+ import { I as Intent, B as Button, a as ButtonProps } from './button-Bfg2Tnvx.js';
6
+ export { b as buttonVariants } from './button-Bfg2Tnvx.js';
5
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
- import * as React$1 from 'react';
7
- import { ReactNode, JSX } from 'react';
8
- import { P as Palette, S as Surface, R as RadiusProp, a as StyleVariant, b as Radius, c as SaasflareComponentProps } from './use-saasflare-props-NrM2Glmp.js';
9
- export { C as CustomPalette, d as PALETTES, e as PaletteId, f as RADII, g as ResolvedSaasflareProps, h as STYLES, u as useSaasflareProps } from './use-saasflare-props-NrM2Glmp.js';
10
- export { D as Dialog, a as DialogClose, b as DialogContent, c as DialogDescription, d as DialogFooter, e as DialogHeader, f as DialogOverlay, g as DialogPortal, h as DialogTitle, i as DialogTrigger } from './dialog-BmY55WSX.js';
8
+ import { I as IconWeight, P as PhosphorIconProps, a as Palette, S as Surface, R as RadiusProp, b as StyleVariant, c as Radius, d as SaasflareComponentProps } from './use-saasflare-props-BrjMhU0U.js';
9
+ export { C as CustomPalette, e as IconBase, f as PALETTES, g as PaletteId, h as RADII, i as ResolvedSaasflareProps, j as STYLES, u as useSaasflareProps } from './use-saasflare-props-BrjMhU0U.js';
10
+ export { D as Dialog, a as DialogClose, b as DialogContent, c as DialogDescription, d as DialogFooter, e as DialogHeader, f as DialogOverlay, g as DialogPortal, h as DialogTitle, i as DialogTrigger } from './dialog-CZRwrqDa.js';
11
11
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
12
12
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
13
13
  import * as class_variance_authority_types from 'class-variance-authority/types';
@@ -164,6 +164,32 @@ type UseMeasureReturn<T extends Element = HTMLElement> = readonly [
164
164
  */
165
165
  declare function useMeasure<T extends Element = HTMLElement>(): UseMeasureReturn<T>;
166
166
 
167
+ /** Options for useLocalStorage. */
168
+ interface UseLocalStorageOptions<T> {
169
+ /** Custom serializer (default: JSON.stringify). */
170
+ serializer?: (value: T) => string;
171
+ /** Custom deserializer (default: JSON.parse). */
172
+ deserializer?: (raw: string) => T;
173
+ /** Called when read/write/remove fails. Falls back to console.warn if omitted. */
174
+ onError?: (error: unknown, operation: 'read' | 'write' | 'remove') => void;
175
+ }
176
+ /**
177
+ * Persists state to localStorage with automatic serialization,
178
+ * SSR safety, and same-tab + cross-tab synchronization.
179
+ *
180
+ * @param key - The localStorage key
181
+ * @param initialValue - Default value when key doesn't exist
182
+ * @param options - Optional serializer, deserializer, and error handler
183
+ * @returns Tuple of [value, setter, remover]
184
+ *
185
+ * @example
186
+ * const [lang, setLang, removeLang] = useLocalStorage('language', 'en');
187
+ * setLang('de'); // sets and persists
188
+ * setLang(prev => prev + '-US'); // functional update
189
+ * removeLang(); // removes key, reverts to 'en'
190
+ */
191
+ declare function useLocalStorage<T>(key: string, initialValue: T, options?: UseLocalStorageOptions<T>): [T, (value: T | ((prev: T) => T)) => void, () => void];
192
+
167
193
  /** An item in the pagination range — either a page number or an ellipsis marker */
168
194
  type PaginationRangeItem = number | 'dots';
169
195
  /** Options for usePagination */
@@ -221,6 +247,141 @@ interface UsePaginationReturn {
221
247
  */
222
248
  declare function usePagination(options: UsePaginationOptions): UsePaginationReturn;
223
249
 
250
+ /**
251
+ * @fileoverview Combine multiple refs (callback refs and ref objects) into a
252
+ * single ref callback. Required whenever a component both forwards a ref AND
253
+ * needs its own internal ref to the same DOM node.
254
+ * @author Saasflare™
255
+ * @module packages/ui/hooks/use-merged-ref
256
+ * @package ui
257
+ *
258
+ * @example
259
+ * const Card = forwardRef<HTMLDivElement, Props>(function Card(props, forwardedRef) {
260
+ * const internalRef = useRef<HTMLDivElement>(null);
261
+ * const ref = useMergedRef(internalRef, forwardedRef);
262
+ * return <div ref={ref}>…</div>;
263
+ * });
264
+ */
265
+
266
+ /** Anything React accepts as a ref slot. */
267
+ type PossibleRef<T> = Ref<T> | MutableRefObject<T | null> | null | undefined;
268
+ /**
269
+ * Merges any number of refs into a single ref callback. The callback is
270
+ * memoized on the identity of the input refs — if you pass new ref objects
271
+ * on every render, the callback identity will change and React will
272
+ * detach/reattach. In practice pass stable ref objects.
273
+ *
274
+ * @param refs - One or more refs (object refs or callback refs).
275
+ * @returns A stable ref callback that writes the node to every input ref.
276
+ *
277
+ * @example
278
+ * const ref = useMergedRef(forwardedRef, internalRef);
279
+ * <div ref={ref} />
280
+ */
281
+ declare function useMergedRef<T>(...refs: PossibleRef<T>[]): RefCallback<T>;
282
+
283
+ /** Return value of {@link useInterval}. */
284
+ interface UseIntervalReturn {
285
+ /** Whether the interval is currently running. */
286
+ active: boolean;
287
+ /** Start (or restart) the interval. */
288
+ start: () => void;
289
+ /** Stop the interval. */
290
+ stop: () => void;
291
+ /** Toggle the interval. */
292
+ toggle: () => void;
293
+ }
294
+ /** Options for {@link useInterval}. */
295
+ interface UseIntervalOptions {
296
+ /** If `true`, start the interval immediately. Default: `true`. */
297
+ autoInvoke?: boolean;
298
+ }
299
+ /**
300
+ * Calls `callback` every `delay` milliseconds. The latest callback is always
301
+ * invoked even if the callback identity changes between renders. Pass
302
+ * `delay = null` to pause.
303
+ *
304
+ * @param callback - Function to invoke on each tick.
305
+ * @param delay - Interval in milliseconds, or `null` to pause.
306
+ * @param options - Configuration.
307
+ * @returns Controls for starting/stopping the interval.
308
+ */
309
+ declare function useInterval(callback: () => void, delay: number | null, options?: UseIntervalOptions): UseIntervalReturn;
310
+
311
+ /**
312
+ * Returns a ref to attach to a container. While `active` is `true`:
313
+ * - Initial focus moves to the first focusable child (or the container itself
314
+ * if it has `tabindex`).
315
+ * - Tab and Shift+Tab cycle within the container.
316
+ * - On deactivate, focus is restored to whatever was focused before.
317
+ *
318
+ * @param active - Whether the trap is engaged.
319
+ * @returns A ref callback to attach to the container element.
320
+ *
321
+ * @example
322
+ * const trapRef = useFocusTrap<HTMLDivElement>(open);
323
+ * <div ref={trapRef}>…</div>
324
+ */
325
+ declare function useFocusTrap<T extends HTMLElement = HTMLElement>(active: boolean): (node: T | null) => void;
326
+
327
+ /** Return value of the useCountdown hook. */
328
+ interface CountdownValue {
329
+ /** Days remaining. */
330
+ days: number;
331
+ /** Hours remaining (0–23). */
332
+ hours: number;
333
+ /** Minutes remaining (0–59). */
334
+ minutes: number;
335
+ /** Seconds remaining (0–59). */
336
+ seconds: number;
337
+ /** Total milliseconds remaining. */
338
+ totalMs: number;
339
+ /** Whether the target date has passed. */
340
+ isExpired: boolean;
341
+ }
342
+ /**
343
+ * Returns a live countdown to a target date, updating every second.
344
+ *
345
+ * @param {Date | string | number} target - The target date/time
346
+ * @returns {CountdownValue} The current countdown values
347
+ *
348
+ * @example
349
+ * const { days, hours, minutes, seconds } = useCountdown('2026-12-31T00:00:00');
350
+ */
351
+ declare function useCountdown(target: Date | string | number): CountdownValue;
352
+
353
+ /** Options for {@link useFileDialog}. */
354
+ interface UseFileDialogOptions {
355
+ /** MIME types or extensions to filter (matches `<input accept>`). */
356
+ accept?: string;
357
+ /** Allow multiple selection. Default: `false`. */
358
+ multiple?: boolean;
359
+ /** Restrict to a folder picker (only supported in Chromium). */
360
+ directory?: boolean;
361
+ /** Camera capture mode for mobile (`"user"` | `"environment"`). */
362
+ capture?: "user" | "environment";
363
+ /** Called after the user picks files. */
364
+ onChange?: (files: File[]) => void;
365
+ }
366
+ /** Return value of {@link useFileDialog}. */
367
+ interface UseFileDialogReturn {
368
+ /** Most recently picked files (empty array if reset/never opened). */
369
+ files: File[];
370
+ /** Open the native file picker. */
371
+ open: () => void;
372
+ /** Clear the current selection. */
373
+ reset: () => void;
374
+ }
375
+ /**
376
+ * Returns an `open()` trigger that pops the native file picker, plus the
377
+ * selected `files`. No DOM rendered by the consumer is required — the hook
378
+ * mounts a hidden `<input>` lazily on first call.
379
+ *
380
+ * @param options - Configuration mirroring `<input type="file">` attributes.
381
+ * @returns The selected files and control callbacks.
382
+ */
383
+ declare function useFileDialog(options?: UseFileDialogOptions): UseFileDialogReturn;
384
+
224
385
  /**
225
386
  * @fileoverview Shared motion presets for premium UI components.
226
387
  * @module packages/core/components/ui/motion-config
@@ -234,7 +395,7 @@ declare function usePagination(options: UsePaginationOptions): UsePaginationRetu
234
395
  * Use `useReducedMotion()` to disable springs when the user prefers reduced motion.
235
396
  *
236
397
  * @example
237
- * import { spring, useReducedMotion } from "@saasflare/core";
398
+ * import { spring, useReducedMotion } from "@saasflare/ui";
238
399
  * const reduced = useReducedMotion();
239
400
  * <motion.div transition={reduced ? { duration: 0 } : spring} />
240
401
  */
@@ -430,6 +591,77 @@ type Size = "xs" | "sm" | "md" | "lg" | "xl";
430
591
  */
431
592
  type Density = "compact" | "normal" | "comfortable";
432
593
 
594
+ /**
595
+ * @fileoverview Base primitive for brand-logo Phosphor icons.
596
+ *
597
+ * Brand logos extend the standard four Phosphor weights with a fifth,
598
+ * `"colorful"` — the canonical multi-color brand mark from Iconify's `logos:`
599
+ * set. The colorful path can't reuse {@link IconBase} because brand SVGs
600
+ * have non-square viewBoxes (Apple is 256×315, Discord is 256×199, …) and
601
+ * use hardcoded brand colors instead of `currentColor`.
602
+ *
603
+ * BrandIconBase forks the render at the top:
604
+ * - weight === "colorful" → emit own `<svg>` with the brand viewBox + content
605
+ * - otherwise → delegate to {@link IconBase}
606
+ *
607
+ * @module @saasflare/ui/components/ui/phosphor/brand-icon-base
608
+ */
609
+
610
+ /** Brand-logo weight set: standard Phosphor weights + the colored brand variant. */
611
+ type BrandIconWeight = IconWeight | "colorful";
612
+
613
+ declare const ArrowLeftIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
614
+
615
+ declare const ArrowRightIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
616
+
617
+ declare const ArrowUpIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
618
+
619
+ declare const CaretDownIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
620
+
621
+ declare const CaretLeftIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
622
+
623
+ declare const CaretRightIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
624
+
625
+ declare const CaretUpIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
626
+
627
+ declare const CheckIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
628
+
629
+ declare const CheckCircleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
630
+
631
+ declare const CircleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
632
+
633
+ declare const CircleNotchIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
634
+
635
+ declare const DotsSixVerticalIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
636
+
637
+ declare const DotsThreeIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
638
+
639
+ declare const InfoIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
640
+
641
+ declare const MagnifyingGlassIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
642
+
643
+ declare const MinusIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
644
+
645
+ declare const MonitorIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
646
+
647
+ declare const MoonIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
648
+
649
+ declare const PauseIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
650
+
651
+ declare const PlayIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
652
+
653
+ declare const QuotesIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
654
+
655
+ declare const SidebarSimpleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
656
+
657
+ declare const SunIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
658
+
659
+ declare const WarningIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
660
+
661
+ declare const XIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
662
+
663
+ declare const XCircleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
664
+
433
665
  /** Context value exposed by useSaasflareTheme(). */
434
666
  interface SaasflareThemeContextType {
435
667
  /** Active brand palette id, or null when using baseline. */
@@ -438,12 +670,16 @@ interface SaasflareThemeContextType {
438
670
  surface: StyleVariant;
439
671
  /** Active radius preset. */
440
672
  radius: Radius;
673
+ /** Active icon weight for component-rendered Phosphor icons. */
674
+ iconWeight: IconWeight;
441
675
  /** Set the active brand palette (persists to localStorage). */
442
676
  setPalette: (id: string) => void;
443
677
  /** Set the active surface style (persists to localStorage). */
444
678
  setSurface: (style: StyleVariant) => void;
445
679
  /** Set the active radius preset (persists to localStorage). */
446
680
  setRadius: (radius: Radius) => void;
681
+ /** Set the active icon weight (persists to localStorage). */
682
+ setIconWeight: (weight: IconWeight) => void;
447
683
  }
448
684
  /**
449
685
  * Access the Saasflare theme context.
@@ -478,9 +714,19 @@ interface SaasflareProviderProps {
478
714
  * - Omit to defer: uses persisted preference if any, otherwise "rounded"
479
715
  */
480
716
  radius?: RadiusProp;
481
- /** Global animation kill switch. @default true */
717
+ /**
718
+ * Default icon weight for component-rendered Phosphor icons.
719
+ * - IconWeight ("regular" | "bold" | "fill" | "duotone") → forces the value
720
+ * - Omit to defer: uses persisted preference if any, otherwise "regular"
721
+ */
722
+ iconWeight?: IconWeight;
723
+ /**
724
+ * Global animation kill switch.
725
+ * - boolean → forces the value
726
+ * - Omit to defer: uses persisted preference if any, otherwise `true`
727
+ */
482
728
  animated?: boolean;
483
- /** Enable smooth scrolling site-wide. @default false */
729
+ /** Enable smooth scrolling site-wide. @default true */
484
730
  smoothScrolling?: boolean;
485
731
  /**
486
732
  * Skip rendering the pre-hydration FOUT-prevention script.
@@ -520,7 +766,7 @@ interface SaasflareProviderProps {
520
766
  * @component
521
767
  * @package ui
522
768
  */
523
- declare function SaasflareProvider({ children, theme, palette, surface, radius, animated, smoothScrolling, disableScript, scriptNonce, storageKey, themeStorageKey, }: SaasflareProviderProps): react_jsx_runtime.JSX.Element;
769
+ declare function SaasflareProvider({ children, theme, palette, surface, radius, iconWeight, animated, smoothScrolling, disableScript, scriptNonce, storageKey, themeStorageKey, }: SaasflareProviderProps): react_jsx_runtime.JSX.Element;
524
770
 
525
771
  /** Props for {@link SaasflareShell}. */
526
772
  interface SaasflareShellProps extends Omit<SaasflareProviderProps, "children" | "disableScript" | "scriptNonce"> {
@@ -665,7 +911,7 @@ declare function AlertDialogCancel({ className, ...props }: React$1.ComponentPro
665
911
  declare function Accordion({ ...props }: React$1.ComponentProps<typeof AccordionPrimitive.Root>): react_jsx_runtime.JSX.Element;
666
912
  interface AccordionItemProps extends Omit<React$1.ComponentProps<typeof AccordionPrimitive.Item>, keyof SaasflareComponentProps>, SaasflareComponentProps {
667
913
  }
668
- declare function AccordionItem({ className, surface, radius, animated, ...props }: AccordionItemProps): react_jsx_runtime.JSX.Element;
914
+ declare function AccordionItem({ className, surface, radius, animated, iconWeight, ...props }: AccordionItemProps): react_jsx_runtime.JSX.Element;
669
915
  /**
670
916
  * Accordion trigger with animated chevron indicator.
671
917
  *
@@ -711,7 +957,7 @@ declare function Textarea({ className, surface, radius, animated, ...props }: Te
711
957
 
712
958
  interface CheckboxProps extends Omit<React$1.ComponentProps<typeof CheckboxPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
713
959
  }
714
- declare function Checkbox({ className, surface, radius, animated, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
960
+ declare function Checkbox({ className, surface, radius, animated, iconWeight, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
715
961
 
716
962
  interface SwitchProps extends Omit<React$1.ComponentProps<typeof SwitchPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
717
963
  size?: "sm" | "default";
@@ -733,6 +979,41 @@ interface ProgressProps extends Omit<React$1.ComponentProps<typeof ProgressPrimi
733
979
  */
734
980
  declare function Progress({ className, value, surface, radius, animated, ...props }: ProgressProps): react_jsx_runtime.JSX.Element;
735
981
 
982
+ declare const SIZE_PX$1: {
983
+ readonly sm: 48;
984
+ readonly md: 64;
985
+ readonly lg: 96;
986
+ readonly xl: 128;
987
+ };
988
+ type ProgressCircleSize = keyof typeof SIZE_PX$1;
989
+ /** Props for the ProgressCircle component. */
990
+ interface ProgressCircleProps extends SaasflareComponentProps {
991
+ /** Current value in the range `[0, max]`. */
992
+ value: number;
993
+ /** Maximum value. Default: `100`. */
994
+ max?: number;
995
+ /** Size preset. Default: `"md"`. */
996
+ size?: ProgressCircleSize;
997
+ /** Ring stroke width in pixels. Default: derived from `size`. */
998
+ strokeWidth?: number;
999
+ /** Center content (e.g. the numeric label). */
1000
+ children?: ReactNode;
1001
+ /** Additional class names on the outer wrapper. */
1002
+ className?: string;
1003
+ /** Accessible label. Default: `"<value>%"`. */
1004
+ "aria-label"?: string;
1005
+ }
1006
+ /**
1007
+ * Circular progress indicator. Drop-in radial counterpart to Progress.
1008
+ *
1009
+ * @component
1010
+ * @layer core
1011
+ *
1012
+ * @example
1013
+ * <ProgressCircle value={72} />
1014
+ */
1015
+ declare function ProgressCircle({ value, max, size, strokeWidth, children, className, surface, radius, animated, "aria-label": ariaLabel, }: ProgressCircleProps): react_jsx_runtime.JSX.Element;
1016
+
736
1017
  /**
737
1018
  * Badge variant definitions.
738
1019
  *
@@ -799,7 +1080,7 @@ declare function SelectTrigger({ className, size, children, ...props }: React$1.
799
1080
  }): react_jsx_runtime.JSX.Element;
800
1081
  interface SelectContentProps extends Omit<React$1.ComponentProps<typeof SelectPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
801
1082
  }
802
- declare function SelectContent({ className, children, position, surface, radius, animated, ...props }: SelectContentProps): react_jsx_runtime.JSX.Element;
1083
+ declare function SelectContent({ className, children, position, surface, radius, animated, iconWeight, ...props }: SelectContentProps): react_jsx_runtime.JSX.Element;
803
1084
  declare function SelectLabel({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Label>): react_jsx_runtime.JSX.Element;
804
1085
  declare function SelectItem({ className, children, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Item>): react_jsx_runtime.JSX.Element;
805
1086
  declare function SelectSeparator({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Separator>): react_jsx_runtime.JSX.Element;
@@ -814,7 +1095,7 @@ declare function DropdownMenuSub({ ...props }: React$1.ComponentProps<typeof Dro
814
1095
  declare function DropdownMenuRadioGroup({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): react_jsx_runtime.JSX.Element;
815
1096
  interface DropdownMenuContentProps extends Omit<React$1.ComponentProps<typeof DropdownMenuPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
816
1097
  }
817
- declare function DropdownMenuContent({ className, sideOffset, surface, radius, animated, ...props }: DropdownMenuContentProps): react_jsx_runtime.JSX.Element;
1098
+ declare function DropdownMenuContent({ className, sideOffset, surface, radius, animated, iconWeight, ...props }: DropdownMenuContentProps): react_jsx_runtime.JSX.Element;
818
1099
  declare function DropdownMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
819
1100
  inset?: boolean;
820
1101
  variant?: "default" | "destructive";
@@ -838,7 +1119,7 @@ interface SheetContentProps extends Omit<React$1.ComponentProps<typeof DialogPri
838
1119
  side?: "top" | "right" | "bottom" | "left";
839
1120
  showCloseButton?: boolean;
840
1121
  }
841
- declare function SheetContent({ className, children, side, showCloseButton, surface, radius, animated, ...props }: SheetContentProps): react_jsx_runtime.JSX.Element;
1122
+ declare function SheetContent({ className, children, side, showCloseButton, surface, radius, animated, iconWeight, ...props }: SheetContentProps): react_jsx_runtime.JSX.Element;
842
1123
  declare function SheetHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
843
1124
  declare function SheetFooter({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
844
1125
  declare function SheetTitle({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Title>): react_jsx_runtime.JSX.Element;
@@ -880,7 +1161,7 @@ interface AlertProps extends Omit<React$1.ComponentProps<"div">, keyof Saasflare
880
1161
  * <AlertDescription>Something went wrong.</AlertDescription>
881
1162
  * </Alert>
882
1163
  */
883
- declare function Alert({ className, intent: intentProp, variant, surface, radius, animated, ...props }: AlertProps): react_jsx_runtime.JSX.Element;
1164
+ declare function Alert({ className, intent: intentProp, variant, surface, radius, animated, iconWeight, ...props }: AlertProps): react_jsx_runtime.JSX.Element;
884
1165
  /**
885
1166
  * Alert title text.
886
1167
  *
@@ -918,7 +1199,7 @@ declare function ContextMenuSubTrigger({ className, inset, children, ...props }:
918
1199
  declare function ContextMenuSubContent({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.SubContent>): react_jsx_runtime.JSX.Element;
919
1200
  interface ContextMenuContentProps extends Omit<React$1.ComponentProps<typeof ContextMenuPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
920
1201
  }
921
- declare function ContextMenuContent({ className, surface, radius, animated, ...props }: ContextMenuContentProps): react_jsx_runtime.JSX.Element;
1202
+ declare function ContextMenuContent({ className, surface, radius, animated, iconWeight, ...props }: ContextMenuContentProps): react_jsx_runtime.JSX.Element;
922
1203
  declare function ContextMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Item> & {
923
1204
  inset?: boolean;
924
1205
  variant?: "default" | "destructive";
@@ -933,7 +1214,7 @@ declare function ContextMenuShortcut({ className, ...props }: React$1.ComponentP
933
1214
 
934
1215
  interface MenubarProps extends Omit<React$1.ComponentProps<typeof MenubarPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
935
1216
  }
936
- declare function Menubar({ className, surface, radius, animated, ...props }: MenubarProps): react_jsx_runtime.JSX.Element;
1217
+ declare function Menubar({ className, surface, radius, animated, iconWeight, ...props }: MenubarProps): react_jsx_runtime.JSX.Element;
937
1218
  declare function MenubarMenu({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Menu>): react_jsx_runtime.JSX.Element;
938
1219
  declare function MenubarGroup({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Group>): react_jsx_runtime.JSX.Element;
939
1220
  declare function MenubarPortal({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Portal>): react_jsx_runtime.JSX.Element;
@@ -941,7 +1222,7 @@ declare function MenubarRadioGroup({ ...props }: React$1.ComponentProps<typeof M
941
1222
  declare function MenubarTrigger({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
942
1223
  interface MenubarContentProps extends Omit<React$1.ComponentProps<typeof MenubarPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
943
1224
  }
944
- declare function MenubarContent({ className, align, alignOffset, sideOffset, surface, radius, animated, ...props }: MenubarContentProps): react_jsx_runtime.JSX.Element;
1225
+ declare function MenubarContent({ className, align, alignOffset, sideOffset, surface, radius, animated, iconWeight, ...props }: MenubarContentProps): react_jsx_runtime.JSX.Element;
945
1226
  declare function MenubarItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Item> & {
946
1227
  inset?: boolean;
947
1228
  variant?: "default" | "destructive";
@@ -962,7 +1243,7 @@ declare function MenubarSubContent({ className, ...props }: React$1.ComponentPro
962
1243
  interface NavigationMenuProps extends Omit<React$1.ComponentProps<typeof NavigationMenuPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
963
1244
  viewport?: boolean;
964
1245
  }
965
- declare function NavigationMenu({ className, children, viewport, surface, radius, animated, ...props }: NavigationMenuProps): react_jsx_runtime.JSX.Element;
1246
+ declare function NavigationMenu({ className, children, viewport, surface, radius, animated, iconWeight, ...props }: NavigationMenuProps): react_jsx_runtime.JSX.Element;
966
1247
  declare function NavigationMenuList({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): react_jsx_runtime.JSX.Element;
967
1248
  declare function NavigationMenuItem({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): react_jsx_runtime.JSX.Element;
968
1249
  declare const navigationMenuTriggerStyle: (props?: class_variance_authority_types.ClassProp | undefined) => string;
@@ -1012,7 +1293,7 @@ declare function ToggleGroupItem({ className, children, variant, size, ...props
1012
1293
 
1013
1294
  interface RadioGroupProps extends Omit<React$1.ComponentProps<typeof RadioGroupPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
1014
1295
  }
1015
- declare function RadioGroup({ className, surface, radius, animated, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
1296
+ declare function RadioGroup({ className, surface, radius, animated, iconWeight, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
1016
1297
  declare function RadioGroupItem({ className, ...props }: React$1.ComponentProps<typeof RadioGroupPrimitive.Item>): react_jsx_runtime.JSX.Element;
1017
1298
 
1018
1299
  interface CollapsibleContentProps extends Omit<React$1.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>, keyof SaasflareComponentProps>, SaasflareComponentProps {
@@ -1032,13 +1313,13 @@ declare function ScrollBar({ className, orientation, ...props }: React$1.Compone
1032
1313
 
1033
1314
  interface SaasflareToasterProps extends Omit<ToasterProps, keyof SaasflareComponentProps>, SaasflareComponentProps {
1034
1315
  }
1035
- declare const Toaster: ({ surface, radius, animated, ...props }: SaasflareToasterProps) => react_jsx_runtime.JSX.Element;
1316
+ declare const Toaster: ({ surface, radius, animated, iconWeight, ...props }: SaasflareToasterProps) => react_jsx_runtime.JSX.Element;
1036
1317
 
1037
1318
  declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): react_jsx_runtime.JSX.Element;
1038
1319
 
1039
1320
  interface BreadcrumbProps extends Omit<React$1.ComponentProps<"nav">, keyof SaasflareComponentProps>, SaasflareComponentProps {
1040
1321
  }
1041
- declare function Breadcrumb({ surface, radius, animated, ...props }: BreadcrumbProps): react_jsx_runtime.JSX.Element;
1322
+ declare function Breadcrumb({ surface, radius, animated, iconWeight, ...props }: BreadcrumbProps): react_jsx_runtime.JSX.Element;
1042
1323
  declare function BreadcrumbList({ className, ...props }: React$1.ComponentProps<"ol">): react_jsx_runtime.JSX.Element;
1043
1324
  declare function BreadcrumbItem({ className, ...props }: React$1.ComponentProps<"li">): react_jsx_runtime.JSX.Element;
1044
1325
  declare function BreadcrumbLink({ asChild, className, ...props }: React$1.ComponentProps<"a"> & {
@@ -1221,7 +1502,7 @@ declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">):
1221
1502
  interface NativeSelectProps extends Omit<React$1.ComponentProps<"select">, "size" | keyof SaasflareComponentProps>, SaasflareComponentProps {
1222
1503
  size?: "sm" | "default";
1223
1504
  }
1224
- declare function NativeSelect({ className, size, surface, radius, animated, ...props }: NativeSelectProps): react_jsx_runtime.JSX.Element;
1505
+ declare function NativeSelect({ className, size, surface, radius, animated, iconWeight, ...props }: NativeSelectProps): react_jsx_runtime.JSX.Element;
1225
1506
  declare function NativeSelectOption({ ...props }: React$1.ComponentProps<"option">): react_jsx_runtime.JSX.Element;
1226
1507
  declare function NativeSelectOptGroup({ className, ...props }: React$1.ComponentProps<"optgroup">): react_jsx_runtime.JSX.Element;
1227
1508
 
@@ -1478,6 +1759,480 @@ interface MetricCardProps extends Omit<React$1.ComponentProps<"div">, keyof Saas
1478
1759
  */
1479
1760
  declare function MetricCard({ label, value, trend, icon, className, surface, radius, animated, ...props }: MetricCardProps): react_jsx_runtime.JSX.Element;
1480
1761
 
1762
+ /** A single row in the list. */
1763
+ interface BarListItem {
1764
+ /** Row label. */
1765
+ name: string;
1766
+ /** Numeric value driving the bar width. */
1767
+ value: number;
1768
+ /** Optional icon shown left of the label. */
1769
+ icon?: ReactNode;
1770
+ /** Optional click target for the row label (wraps in `<a>`). */
1771
+ href?: string;
1772
+ /** Optional per-row color override (any CSS color). */
1773
+ color?: string;
1774
+ }
1775
+ /** Props for the BarList component. */
1776
+ interface BarListProps extends SaasflareComponentProps {
1777
+ /** Rows to render. */
1778
+ data: BarListItem[];
1779
+ /** Formats the numeric value on the right edge. Default: `String(n)`. */
1780
+ valueFormatter?: (value: number) => string;
1781
+ /** Sort rows by value descending. Default: `true`. */
1782
+ sortDescending?: boolean;
1783
+ /** Maximum rows rendered (truncates after sort). */
1784
+ limit?: number;
1785
+ /** Additional class names. */
1786
+ className?: string;
1787
+ }
1788
+ /**
1789
+ * Horizontal bar list — common dashboard "top N" rankings pattern.
1790
+ *
1791
+ * @component
1792
+ * @layer core
1793
+ */
1794
+ declare function BarList({ data, valueFormatter, sortDescending, limit, className, surface, radius, animated, }: BarListProps): react_jsx_runtime.JSX.Element;
1795
+
1796
+ /** Visual variant of the spark chart. */
1797
+ type SparkChartVariant = "line" | "area" | "bar";
1798
+ /** Props for the SparkChart component. */
1799
+ interface SparkChartProps extends SaasflareComponentProps {
1800
+ /** Series of numeric points (length ≥ 2). */
1801
+ data: number[];
1802
+ /** Visual treatment. Default: `"area"`. */
1803
+ variant?: SparkChartVariant;
1804
+ /** Stroke / fill color (any CSS color). Default: `var(--primary)`. */
1805
+ color?: string;
1806
+ /** SVG width in pixels. Default: `64`. */
1807
+ width?: number;
1808
+ /** SVG height in pixels. Default: `24`. */
1809
+ height?: number;
1810
+ /** Line stroke width in pixels. Default: `1.5`. */
1811
+ strokeWidth?: number;
1812
+ /** Additional class names. */
1813
+ className?: string;
1814
+ /** Accessible label. */
1815
+ "aria-label"?: string;
1816
+ }
1817
+ /**
1818
+ * Inline mini chart for KPI tiles, table cells, and metric cards.
1819
+ *
1820
+ * @component
1821
+ * @layer core
1822
+ */
1823
+ declare function SparkChart({ data, variant, color, width, height, strokeWidth, className, surface, radius, animated, "aria-label": ariaLabel, }: SparkChartProps): react_jsx_runtime.JSX.Element | null;
1824
+
1825
+ /** A single tracker block. */
1826
+ interface TrackerBlock {
1827
+ /** Named color key (emerald|teal|blue|amber|red|rose|gray) or any CSS color. */
1828
+ color?: string;
1829
+ /** Tooltip text shown on hover. */
1830
+ tooltip?: ReactNode;
1831
+ /** Custom key (helps React when blocks rearrange). */
1832
+ key?: string | number;
1833
+ }
1834
+ /** Props for the Tracker component. */
1835
+ interface TrackerProps extends SaasflareComponentProps {
1836
+ /** Blocks to render, left-to-right. */
1837
+ data: TrackerBlock[];
1838
+ /** Height of each block in px. Default: `32`. */
1839
+ blockHeight?: number;
1840
+ /** Gap between blocks in px. Default: `2`. */
1841
+ gap?: number;
1842
+ /** Additional class names. */
1843
+ className?: string;
1844
+ }
1845
+ /**
1846
+ * Status segment grid (uptime/incident timeline).
1847
+ *
1848
+ * @component
1849
+ * @layer core
1850
+ */
1851
+ declare function Tracker({ data, blockHeight, gap, className, surface, radius, animated, }: TrackerProps): react_jsx_runtime.JSX.Element;
1852
+
1853
+ /** Reason a file was rejected by the dropzone's built-in validation. */
1854
+ type DropzoneRejectionReason = "too-large" | "type-mismatch";
1855
+ /** A rejected file with the reason. */
1856
+ interface DropzoneRejection {
1857
+ file: File;
1858
+ reason: DropzoneRejectionReason;
1859
+ }
1860
+ /** Props for the Dropzone component. */
1861
+ interface DropzoneProps extends SaasflareComponentProps {
1862
+ /** Called with `(accepted, rejected)` when the user drops or picks files. */
1863
+ onDrop?: (accepted: File[], rejected: DropzoneRejection[]) => void;
1864
+ /** MIME types or extensions to accept (matches `<input accept>`). */
1865
+ accept?: string;
1866
+ /** Maximum file size in bytes. */
1867
+ maxSize?: number;
1868
+ /** Allow multiple file selection. Default: `true`. */
1869
+ multiple?: boolean;
1870
+ /** Disable the dropzone. */
1871
+ disabled?: boolean;
1872
+ /** Render-prop body. Receives `isDragActive`. Falls back to the default UI. */
1873
+ children?: ReactNode | ((state: {
1874
+ isDragActive: boolean;
1875
+ }) => ReactNode);
1876
+ /** Additional class names. */
1877
+ className?: string;
1878
+ }
1879
+ /**
1880
+ * Drag-and-drop file upload area with click-to-open fallback.
1881
+ *
1882
+ * @component
1883
+ * @layer core
1884
+ */
1885
+ declare function Dropzone({ onDrop, accept, maxSize, multiple, disabled, children, className, surface, radius, animated, }: DropzoneProps): react_jsx_runtime.JSX.Element;
1886
+
1887
+ /** Inclusive date range, identical shape to react-day-picker's `DateRange`. */
1888
+ interface DateRange {
1889
+ from: Date | undefined;
1890
+ to?: Date | undefined;
1891
+ }
1892
+ /** Props for the DateRangePicker component. */
1893
+ interface DateRangePickerProps extends SaasflareComponentProps {
1894
+ /** Controlled value. */
1895
+ value?: DateRange;
1896
+ /** Uncontrolled default value. */
1897
+ defaultValue?: DateRange;
1898
+ /** Called when the user picks a new range. */
1899
+ onChange?: (range: DateRange | undefined) => void;
1900
+ /** Placeholder shown in the trigger when no range is set. */
1901
+ placeholder?: string;
1902
+ /** Number of months shown side-by-side. Default: `2`. */
1903
+ numberOfMonths?: number;
1904
+ /** Earliest pickable date. */
1905
+ minDate?: Date;
1906
+ /** Latest pickable date. */
1907
+ maxDate?: Date;
1908
+ /** Disable the trigger. */
1909
+ disabled?: boolean;
1910
+ /** Format function for the trigger label. Default: locale-aware `toLocaleDateString`. */
1911
+ formatRange?: (range: DateRange) => string;
1912
+ /** Additional class names on the trigger. */
1913
+ className?: string;
1914
+ }
1915
+ /**
1916
+ * Date-range input + popover calendar. Composes Button + Popover + Calendar.
1917
+ *
1918
+ * @component
1919
+ * @layer core
1920
+ */
1921
+ declare function DateRangePicker({ value, defaultValue, onChange, placeholder, numberOfMonths, minDate, maxDate, disabled, formatRange, className, surface, radius, animated, iconWeight, }: DateRangePickerProps): react_jsx_runtime.JSX.Element;
1922
+
1923
+ /** Props for the DatePicker component. */
1924
+ interface DatePickerProps extends SaasflareComponentProps {
1925
+ /** Controlled value. */
1926
+ value?: Date;
1927
+ /** Uncontrolled default value. */
1928
+ defaultValue?: Date;
1929
+ /** Called when the user picks a date. */
1930
+ onChange?: (date: Date | undefined) => void;
1931
+ /** Placeholder shown when no date is set. */
1932
+ placeholder?: string;
1933
+ /** Earliest pickable date. */
1934
+ minDate?: Date;
1935
+ /** Latest pickable date. */
1936
+ maxDate?: Date;
1937
+ /** Disable the trigger. */
1938
+ disabled?: boolean;
1939
+ /** Format function for the trigger label. Default: locale-aware. */
1940
+ formatDate?: (date: Date) => string;
1941
+ /** Additional class names on the trigger. */
1942
+ className?: string;
1943
+ }
1944
+ /**
1945
+ * Single-date input + popover calendar. Composes Button + Popover + Calendar.
1946
+ *
1947
+ * @component
1948
+ * @layer core
1949
+ */
1950
+ declare function DatePicker({ value, defaultValue, onChange, placeholder, minDate, maxDate, disabled, formatDate, className, surface, radius, animated, iconWeight, }: DatePickerProps): react_jsx_runtime.JSX.Element;
1951
+
1952
+ declare const INTENTS: readonly ["primary", "neutral", "success", "warning", "danger", "info"];
1953
+ type CalloutIntent = (typeof INTENTS)[number];
1954
+ /** Props for the Callout component. */
1955
+ interface CalloutProps extends SaasflareComponentProps {
1956
+ /** Color intent. Default: `"info"`. */
1957
+ intent?: CalloutIntent;
1958
+ /** Bold title rendered above the body. */
1959
+ title?: ReactNode;
1960
+ /** Leading icon (rendered in the same color as the intent stripe). */
1961
+ icon?: ReactNode;
1962
+ /** Body content. */
1963
+ children?: ReactNode;
1964
+ /** Additional class names. */
1965
+ className?: string;
1966
+ }
1967
+ /**
1968
+ * Inline emphasized message box with intent-driven coloring.
1969
+ *
1970
+ * @component
1971
+ * @layer core
1972
+ *
1973
+ * @example
1974
+ * <Callout intent="success" title="Saved">Your changes are live.</Callout>
1975
+ */
1976
+ declare function Callout({ intent, title, icon, children, className, surface, radius, animated, iconWeight, }: CalloutProps): react_jsx_runtime.JSX.Element;
1977
+
1978
+ /** Props for the TagInput component. */
1979
+ interface TagInputProps extends SaasflareComponentProps {
1980
+ /** Controlled list of tags. */
1981
+ value?: string[];
1982
+ /** Uncontrolled initial tags. */
1983
+ defaultValue?: string[];
1984
+ /** Called whenever the tag list changes. */
1985
+ onChange?: (tags: string[]) => void;
1986
+ /** Placeholder shown in the input. */
1987
+ placeholder?: string;
1988
+ /** Maximum number of tags accepted. */
1989
+ maxTags?: number;
1990
+ /** Characters that commit the current input as a tag. Default: `[",", "Enter"]`. */
1991
+ separators?: string[];
1992
+ /** Reject duplicate tags. Default: `true`. */
1993
+ unique?: boolean;
1994
+ /** Disable the input. */
1995
+ disabled?: boolean;
1996
+ /** Custom renderer for each pill. Falls back to the default pill UI. */
1997
+ renderTag?: (tag: string, onRemove: () => void) => ReactNode;
1998
+ /** Additional class names on the outer wrapper. */
1999
+ className?: string;
2000
+ /** Accessible label. */
2001
+ "aria-label"?: string;
2002
+ }
2003
+ /**
2004
+ * Input field that converts text into removable tag pills.
2005
+ *
2006
+ * @component
2007
+ * @layer core
2008
+ */
2009
+ declare function TagInput({ value, defaultValue, onChange, placeholder, maxTags, separators, unique, disabled, renderTag, className, surface, radius, animated, "aria-label": ariaLabel, }: TagInputProps): react_jsx_runtime.JSX.Element;
2010
+
2011
+ /** Props for the NumberInput component. */
2012
+ interface NumberInputProps extends SaasflareComponentProps {
2013
+ /** Controlled value. */
2014
+ value?: number;
2015
+ /** Uncontrolled initial value. */
2016
+ defaultValue?: number;
2017
+ /** Called when the value changes (after clamp). */
2018
+ onChange?: (value: number) => void;
2019
+ /** Minimum allowed value. */
2020
+ min?: number;
2021
+ /** Maximum allowed value. */
2022
+ max?: number;
2023
+ /** Step for stepper buttons + arrow keys. Default: `1`. */
2024
+ step?: number;
2025
+ /** Decimal precision for display. Default: derived from `step`. */
2026
+ precision?: number;
2027
+ /** Placeholder shown when empty. */
2028
+ placeholder?: string;
2029
+ /** Disable the input. */
2030
+ disabled?: boolean;
2031
+ /** Read-only input. */
2032
+ readOnly?: boolean;
2033
+ /** Hide the stepper buttons. */
2034
+ hideSteppers?: boolean;
2035
+ /** Additional class names on the outer wrapper. */
2036
+ className?: string;
2037
+ /** Name attribute (for form submission). */
2038
+ name?: string;
2039
+ /** Accessible label. */
2040
+ "aria-label"?: string;
2041
+ }
2042
+ /**
2043
+ * Numeric input with stepper buttons and clamping.
2044
+ *
2045
+ * @component
2046
+ * @layer core
2047
+ */
2048
+ declare function NumberInput({ value, defaultValue, onChange, min, max, step, precision, placeholder, disabled, readOnly, hideSteppers, className, name, surface, radius, animated, "aria-label": ariaLabel, }: NumberInputProps): react_jsx_runtime.JSX.Element;
2049
+
2050
+ declare const SIZE_PX: {
2051
+ readonly sm: 14;
2052
+ readonly md: 20;
2053
+ readonly lg: 28;
2054
+ readonly xl: 36;
2055
+ };
2056
+ type RatingSize = keyof typeof SIZE_PX;
2057
+ /** Props for the Rating component. */
2058
+ interface RatingProps extends SaasflareComponentProps {
2059
+ /** Controlled value (0..count). */
2060
+ value?: number;
2061
+ /** Uncontrolled initial value. */
2062
+ defaultValue?: number;
2063
+ /** Called when the user clicks a star. */
2064
+ onChange?: (value: number) => void;
2065
+ /** Number of stars. Default: `5`. */
2066
+ count?: number;
2067
+ /** Allow half-star granularity. Default: `false`. */
2068
+ allowHalf?: boolean;
2069
+ /** Read-only display mode (no interaction, no hover preview). */
2070
+ readOnly?: boolean;
2071
+ /** Disable the rating. */
2072
+ disabled?: boolean;
2073
+ /** Star size. Default: `"md"`. */
2074
+ size?: RatingSize;
2075
+ /** Star color (any CSS color). Default: `var(--warning)` — brand-independent gold. */
2076
+ color?: string;
2077
+ /** Additional class names. */
2078
+ className?: string;
2079
+ /** Accessible label. */
2080
+ "aria-label"?: string;
2081
+ }
2082
+ /**
2083
+ * Star rating input with half-star and read-only support.
2084
+ *
2085
+ * @component
2086
+ * @layer core
2087
+ */
2088
+ declare function Rating({ value, defaultValue, onChange, count, allowHalf, readOnly, disabled, size, color, className, surface, radius, animated, "aria-label": ariaLabel, }: RatingProps): react_jsx_runtime.JSX.Element;
2089
+
2090
+ /** A single segment of the bar. */
2091
+ interface CategoryBarSegment {
2092
+ /** Numeric value driving the segment width (auto-normalized). */
2093
+ value: number;
2094
+ /** Any CSS color. Falls back to a derived primary tint. */
2095
+ color?: string;
2096
+ /** Optional label shown below the segment when `showLabels` is true. */
2097
+ label?: string;
2098
+ }
2099
+ /** Props for the CategoryBar component. */
2100
+ interface CategoryBarProps extends SaasflareComponentProps {
2101
+ /** Segments to render, left-to-right. */
2102
+ segments: CategoryBarSegment[];
2103
+ /** Bar height in pixels. Default: `8`. */
2104
+ height?: number;
2105
+ /** Render labels + percentages under each segment. */
2106
+ showLabels?: boolean;
2107
+ /** Formats the percentage text. Default: `"NN%"`. */
2108
+ valueFormatter?: (percent: number) => string;
2109
+ /** Additional class names. */
2110
+ className?: string;
2111
+ /** Accessible label for the bar group. */
2112
+ "aria-label"?: string;
2113
+ }
2114
+ /**
2115
+ * Segmented progress bar with optional labels.
2116
+ *
2117
+ * @component
2118
+ * @layer core
2119
+ */
2120
+ declare function CategoryBar({ segments, height, showLabels, valueFormatter, className, surface, radius, animated, "aria-label": ariaLabel, }: CategoryBarProps): react_jsx_runtime.JSX.Element | null;
2121
+
2122
+ /** A single tree node. */
2123
+ interface TreeNode {
2124
+ /** Unique node id (stable across renders). */
2125
+ id: string;
2126
+ /** Display label or any ReactNode. */
2127
+ label: ReactNode;
2128
+ /** Leading icon (e.g. file/folder glyph). */
2129
+ icon?: ReactNode;
2130
+ /** Child nodes (omit for leaves). */
2131
+ children?: TreeNode[];
2132
+ /** Disable interaction for this node. */
2133
+ disabled?: boolean;
2134
+ }
2135
+ /** Props for the TreeView component. */
2136
+ interface TreeViewProps extends SaasflareComponentProps {
2137
+ /** Tree data, top-level nodes. */
2138
+ data: TreeNode[];
2139
+ /** Controlled expanded ids. */
2140
+ expanded?: string[];
2141
+ /** Uncontrolled initial expansion. */
2142
+ defaultExpanded?: string[];
2143
+ /** Called when a node is expanded/collapsed. */
2144
+ onExpand?: (ids: string[]) => void;
2145
+ /** Controlled selected id. */
2146
+ selected?: string | null;
2147
+ /** Uncontrolled initial selection. */
2148
+ defaultSelected?: string | null;
2149
+ /** Called when selection changes. */
2150
+ onSelect?: (id: string | null) => void;
2151
+ /** Additional class names on the root. */
2152
+ className?: string;
2153
+ }
2154
+ /**
2155
+ * Recursive expand/collapse tree with keyboard navigation.
2156
+ *
2157
+ * @component
2158
+ * @layer core
2159
+ */
2160
+ declare function TreeView({ data, expanded, defaultExpanded, onExpand, selected, defaultSelected, onSelect, className, surface, radius, animated, iconWeight, }: TreeViewProps): react_jsx_runtime.JSX.Element;
2161
+
2162
+ /** Props for the CodeBlock component. */
2163
+ interface CodeBlockProps extends SaasflareComponentProps {
2164
+ /** Plain source code (rendered as monospace, no highlighting). */
2165
+ code?: string;
2166
+ /** Pre-highlighted HTML — e.g. output from Shiki's `codeToHtml`. */
2167
+ highlighted?: string;
2168
+ /** Language label shown in the header (purely cosmetic). */
2169
+ language?: string;
2170
+ /** Filename shown left of the language badge. */
2171
+ filename?: string;
2172
+ /** Show 1-based line numbers in the gutter. */
2173
+ showLineNumbers?: boolean;
2174
+ /** Hide the top bar (copy button still floats inside the block). */
2175
+ hideHeader?: boolean;
2176
+ /** Hide the copy-to-clipboard button. */
2177
+ hideCopyButton?: boolean;
2178
+ /** Additional class names on the outer wrapper. */
2179
+ className?: string;
2180
+ }
2181
+ /**
2182
+ * Code block with filename header, language badge, copy button, and optional
2183
+ * line numbers. Highlighting is BYO (pass `highlighted` HTML or `code` text).
2184
+ *
2185
+ * @component
2186
+ * @layer core
2187
+ */
2188
+ declare function CodeBlock({ code, highlighted, language, filename, showLineNumbers, hideHeader, hideCopyButton, className, surface, radius, animated, }: CodeBlockProps): react_jsx_runtime.JSX.Element;
2189
+
2190
+ /** A single notification item. */
2191
+ interface NotificationItem {
2192
+ /** Stable unique id. */
2193
+ id: string;
2194
+ /** Bold title line. */
2195
+ title: ReactNode;
2196
+ /** Secondary body line. */
2197
+ description?: ReactNode;
2198
+ /** Display timestamp (already formatted — e.g. "5m ago"). */
2199
+ timestamp?: string;
2200
+ /** Whether the notification has been read. */
2201
+ read?: boolean;
2202
+ /** Optional leading icon. */
2203
+ icon?: ReactNode;
2204
+ /** Optional href — wraps the row in `<a>`. */
2205
+ href?: string;
2206
+ }
2207
+ /** Props for the NotificationCenter component. */
2208
+ interface NotificationCenterProps extends SaasflareComponentProps {
2209
+ /** Notifications to display. */
2210
+ items: NotificationItem[];
2211
+ /** Header title in the popover. Default: `"Notifications"`. */
2212
+ title?: string;
2213
+ /** Called when the user clicks a row (also passes the item). */
2214
+ onItemClick?: (item: NotificationItem) => void;
2215
+ /** Called when "Mark as read" is tapped on a row. */
2216
+ onMarkRead?: (id: string) => void;
2217
+ /** Called when "Mark all as read" is tapped. Hide the action by omitting this. */
2218
+ onMarkAllRead?: () => void;
2219
+ /** Custom empty-state content. */
2220
+ emptyState?: ReactNode;
2221
+ /** Maximum items rendered (older ones truncated). */
2222
+ limit?: number;
2223
+ /** Additional class names on the trigger button. */
2224
+ triggerClassName?: string;
2225
+ /** Additional class names on the popover content. */
2226
+ contentClassName?: string;
2227
+ }
2228
+ /**
2229
+ * Bell trigger + dropdown inbox of notifications.
2230
+ *
2231
+ * @component
2232
+ * @layer core
2233
+ */
2234
+ declare function NotificationCenter({ items, title, onItemClick, onMarkRead, onMarkAllRead, emptyState, limit, triggerClassName, contentClassName, surface, radius, animated, iconWeight, }: NotificationCenterProps): react_jsx_runtime.JSX.Element;
2235
+
1481
2236
  /** Props for the EmptyState component */
1482
2237
  interface EmptyStateProps extends Omit<React$1.ComponentProps<"div">, keyof SaasflareComponentProps>, SaasflareComponentProps {
1483
2238
  /** Icon or illustration element */
@@ -1536,7 +2291,7 @@ interface SearchFieldProps extends Omit<React$1.ComponentProps<"input">, "type"
1536
2291
  * loading={isSearching}
1537
2292
  * />
1538
2293
  */
1539
- declare function SearchField({ className, loading, onClear, value, surface, radius, animated, ...props }: SearchFieldProps): react_jsx_runtime.JSX.Element;
2294
+ declare function SearchField({ className, loading, onClear, value, surface, radius, animated, iconWeight, ...props }: SearchFieldProps): react_jsx_runtime.JSX.Element;
1540
2295
 
1541
2296
  /** Props for the SettingsSection component */
1542
2297
  interface SettingsSectionProps extends Omit<React$1.ComponentProps<"div">, keyof SaasflareComponentProps>, SaasflareComponentProps {
@@ -1606,7 +2361,7 @@ interface PricingCardProps extends Omit<React$1.ComponentProps<"div">, keyof Saa
1606
2361
  * featured
1607
2362
  * />
1608
2363
  */
1609
- declare function PricingCard({ name, price, period, description, features, cta, featured, className, surface, radius, animated, ...props }: PricingCardProps): react_jsx_runtime.JSX.Element;
2364
+ declare function PricingCard({ name, price, period, description, features, cta, featured, className, surface, radius, animated, iconWeight, ...props }: PricingCardProps): react_jsx_runtime.JSX.Element;
1610
2365
 
1611
2366
  interface DataToolbarProps extends Omit<React$1.ComponentProps<"div">, keyof SaasflareComponentProps>, SaasflareComponentProps {
1612
2367
  }
@@ -1647,51 +2402,1368 @@ declare function DataToolbarFilters({ className, ...props }: React$1.ComponentPr
1647
2402
  */
1648
2403
  declare function DataToolbarActions({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
1649
2404
 
2405
+ /** Props for the AuroraBackground component. */
2406
+ interface AuroraBackgroundProps extends Omit<ComponentProps<"div">, keyof SaasflareComponentProps | "color">, SaasflareComponentProps {
2407
+ /**
2408
+ * Three ambient blob colors in order: top-left, right, bottom-left.
2409
+ * Default: curated peach + blue + violet showcase palette.
2410
+ */
2411
+ colors?: readonly [string, string, string];
2412
+ /** Overall blob opacity (0–1). Default: `0.55`. Auto-halved in dark mode via `dark:` modifier. */
2413
+ intensity?: number;
2414
+ }
1650
2415
  /**
1651
- * Props for the ScrollToTopButton component.
2416
+ * Soft multi-color gradient backdrop for showcase, demo, and marketing sections.
1652
2417
  *
1653
- * @interface
1654
- * @package ui
2418
+ * Renders three blurred radial blobs positioned at corners around the children
2419
+ * slot. Default palette is a fixed showcase combination (peach / blue / violet)
2420
+ * so the visual stays consistent across brand palettes; pass `colors` to switch
2421
+ * to brand-rotating tokens. Drift animation is on by default and respects
2422
+ * `prefers-reduced-motion`.
2423
+ *
2424
+ * @component
2425
+ * @layer core
1655
2426
  */
1656
- interface ScrollToTopButtonProps extends SaasflareComponentProps {
1657
- /**
1658
- * Optional scroll container element ID.
1659
- * If not provided, falls back to the global `window`.
1660
- */
1661
- scrollContainerId?: string;
1662
- /**
1663
- * Vertical scroll offset (in pixels) after which the button is shown.
1664
- * @default 300
1665
- */
1666
- scrollOffset?: number;
1667
- /** Additional class names merged onto the root button. */
2427
+ declare function AuroraBackground({ colors, intensity, className, children, surface, radius, animated, ...props }: AuroraBackgroundProps): react_jsx_runtime.JSX.Element;
2428
+
2429
+ /** Props for the AudioPlayer component. */
2430
+ interface AudioPlayerProps extends SaasflareComponentProps {
2431
+ /** Audio source URL. */
2432
+ src: string;
2433
+ /** Track title. */
2434
+ title?: string;
2435
+ /** Additional class names. */
1668
2436
  className?: string;
1669
2437
  }
1670
2438
  /**
1671
- * A floating button that appears after scrolling down and smoothly scrolls
1672
- * the user back to the top of the container (or window).
2439
+ * Styled audio player with play/pause, seek, and time display.
1673
2440
  *
1674
2441
  * @component
2442
+ * @package ui
1675
2443
  */
1676
- declare function ScrollToTopButton({ scrollContainerId, scrollOffset, className, ...sfProps }: ScrollToTopButtonProps): JSX.Element;
2444
+ declare function AudioPlayer({ src, title, className, surface, radius, animated, }: AudioPlayerProps): react_jsx_runtime.JSX.Element;
1677
2445
 
2446
+ /** Props for the BentoGrid container. */
2447
+ interface BentoGridProps {
2448
+ /** Grid items. */
2449
+ children: ReactNode;
2450
+ /** Number of columns at md+ breakpoint. Default: `3` */
2451
+ columns?: 2 | 3 | 4;
2452
+ /** Gap between items in Tailwind spacing units (4 = 1rem). Default: `4` */
2453
+ gap?: number;
2454
+ /** Additional class names. */
2455
+ className?: string;
2456
+ }
1678
2457
  /**
1679
- * Theme mode toggle button with Sun/Moon icons.
2458
+ * Responsive bento-style grid container with staggered item entrance.
2459
+ *
2460
+ * - Items animate in with a staggered fade+slide
2461
+ * - Supports 2, 3, or 4 column layouts (1 column on mobile)
2462
+ * - Items can span multiple columns/rows via BentoGridItem
1680
2463
  *
1681
2464
  * @component
1682
- * @layer core
2465
+ * @package ui
2466
+ */
2467
+ declare function BentoGrid({ children, columns, gap, className, }: BentoGridProps): react_jsx_runtime.JSX.Element;
2468
+ /** Props for a BentoGridItem. */
2469
+ interface BentoGridItemProps extends SaasflareComponentProps {
2470
+ /** Item content. */
2471
+ children: ReactNode;
2472
+ /** Number of columns to span (1–4). Default: `1` */
2473
+ colSpan?: 1 | 2 | 3 | 4;
2474
+ /** Number of rows to span (1–3). Default: `1` */
2475
+ rowSpan?: 1 | 2 | 3;
2476
+ /** Stagger delay index (multiply by 0.08 for delay). Default: `0` */
2477
+ index?: number;
2478
+ /** Additional class names. */
2479
+ className?: string;
2480
+ }
2481
+ /**
2482
+ * Individual item within a BentoGrid.
1683
2483
  *
1684
- * @param {object} props - Component props
1685
- * @param {boolean} [props.showText=false] - Whether to show the label text visibly
1686
- * @param {string} [props.text] - Custom label text override
1687
- * @param {string} [props.className] - Additional CSS class names
1688
- * @returns {JSX.Element | null} The toggle button, or null before hydration
2484
+ * - Supports column and row spanning
2485
+ * - Animates in with a staggered fade + vertical slide
2486
+ * - Pass `index` for stagger ordering
2487
+ *
2488
+ * @component
2489
+ * @package ui
1689
2490
  */
1690
- declare function ThemeModeToggle({ showText, text, className, }: {
1691
- showText?: boolean;
1692
- text?: string;
2491
+ declare function BentoGridItem({ children, colSpan, rowSpan, index, className, surface, radius, animated, }: BentoGridItemProps): react_jsx_runtime.JSX.Element;
2492
+
2493
+ /** Props for the BlurFade component. */
2494
+ interface BlurFadeProps {
2495
+ /** Content to animate. */
2496
+ children: ReactNode;
2497
+ /** Animation delay in seconds (use for staggering). Default: `0` */
2498
+ delay?: number;
2499
+ /** Initial blur amount in pixels. Default: `8` */
2500
+ blur?: number;
2501
+ /** Vertical offset in pixels. Default: `12` */
2502
+ yOffset?: number;
2503
+ /** Animation duration in seconds. Default: `0.5` */
2504
+ duration?: number;
2505
+ /** Whether animation triggers only once. Default: `true` */
2506
+ once?: boolean;
2507
+ /** Additional class names. */
2508
+ className?: string;
2509
+ }
2510
+ /**
2511
+ * Entrance animation that combines blur, opacity, and vertical slide.
2512
+ *
2513
+ * - Great for staggered reveals: pass incrementing `delay` values
2514
+ * - Blur clears simultaneously with the fade for a cohesive effect
2515
+ * - Renders children statically when reduced motion is preferred
2516
+ * - Uses Intersection Observer to trigger on viewport entry
2517
+ *
2518
+ * @component
2519
+ * @package ui
2520
+ */
2521
+ declare function BlurFade({ children, delay, blur, yOffset, duration, once, className, }: BlurFadeProps): react_jsx_runtime.JSX.Element;
2522
+
2523
+ /** Props for the BorderBeam component. */
2524
+ interface BorderBeamProps {
2525
+ /** Beam color. Default: `"hsl(var(--primary))"` */
2526
+ color?: string;
2527
+ /** Tail fade color. Default: `"transparent"` */
2528
+ colorFrom?: string;
2529
+ /** Animation cycle duration in seconds. Default: `6` */
2530
+ duration?: number;
2531
+ /** Beam length in pixels. Default: `150` */
2532
+ size?: number;
2533
+ /** Border radius to follow (CSS value). Default: `"inherit"` */
2534
+ borderRadius?: string;
2535
+ /** Additional class names. */
1693
2536
  className?: string;
1694
- }): JSX.Element | null;
2537
+ }
2538
+ /**
2539
+ * Glowing beam that orbits the border of its parent container.
2540
+ *
2541
+ * - Place inside a `position: relative; overflow: hidden` parent
2542
+ * - CSS-only animation (no JS animation loop)
2543
+ * - Renders nothing when reduced motion is preferred
2544
+ *
2545
+ * @component
2546
+ * @package ui
2547
+ */
2548
+ declare function BorderBeam({ color, colorFrom, duration, size, borderRadius, className, }: BorderBeamProps): react_jsx_runtime.JSX.Element | null;
2549
+
2550
+ /** Props for the Compare component. */
2551
+ interface CompareProps {
2552
+ /** Content shown on the left (before) side. */
2553
+ before: ReactNode;
2554
+ /** Content shown on the right (after) side. */
2555
+ after: ReactNode;
2556
+ /** Label for the before side. */
2557
+ beforeLabel?: string;
2558
+ /** Label for the after side. */
2559
+ afterLabel?: string;
2560
+ /** Initial divider position as percentage (0–100). Default: `50` */
2561
+ initialPosition?: number;
2562
+ /** CSS aspect-ratio for the container. Default: `"16/9"` */
2563
+ aspectRatio?: string;
2564
+ /** Additional class names. */
2565
+ className?: string;
2566
+ }
2567
+ /**
2568
+ * Draggable before/after comparison slider.
2569
+ *
2570
+ * - Pointer-based dragging (works on mouse and touch)
2571
+ * - Optional before/after labels
2572
+ * - Content is clipped, not resized
2573
+ * - Fully accessible with keyboard support
2574
+ *
2575
+ * @component
2576
+ * @package ui
2577
+ */
2578
+ declare function Compare({ before, after, beforeLabel, afterLabel, initialPosition, aspectRatio, className, }: CompareProps): react_jsx_runtime.JSX.Element;
2579
+
2580
+ /** Props for the Confetti component. */
2581
+ interface ConfettiProps {
2582
+ /** Whether the confetti burst is active. */
2583
+ active: boolean;
2584
+ /** Number of confetti particles. Default: `40` */
2585
+ count?: number;
2586
+ /** Array of CSS colors for particles. */
2587
+ colors?: string[];
2588
+ /** Duration in milliseconds before auto-cleanup. Default: `3000` */
2589
+ duration?: number;
2590
+ /** Callback when animation completes. */
2591
+ onComplete?: () => void;
2592
+ /** Additional class names. */
2593
+ className?: string;
2594
+ }
2595
+ /**
2596
+ * Confetti burst animation overlay.
2597
+ *
2598
+ * - CSS-only particles with randomized trajectories
2599
+ * - Fires once when `active` becomes `true`
2600
+ * - Calls `onComplete` when the animation finishes
2601
+ * - Renders nothing when reduced motion is preferred
2602
+ *
2603
+ * @component
2604
+ * @package ui
2605
+ */
2606
+ declare function Confetti({ active, count, colors, duration, onComplete, className, }: ConfettiProps): react_jsx_runtime.JSX.Element | null;
2607
+
2608
+ /** Props for the Countdown component. */
2609
+ interface CountdownProps {
2610
+ /** Number of days remaining. */
2611
+ days: number;
2612
+ /** Number of hours remaining (0–23). */
2613
+ hours: number;
2614
+ /** Number of minutes remaining (0–59). */
2615
+ minutes: number;
2616
+ /** Number of seconds remaining (0–59). */
2617
+ seconds: number;
2618
+ /** Show the labels below each box. Default: `true` */
2619
+ showLabels?: boolean;
2620
+ /** Additional class names. */
2621
+ className?: string;
2622
+ }
2623
+ /**
2624
+ * Countdown display with segmented boxes for each time unit.
2625
+ *
2626
+ * @component
2627
+ * @package ui
2628
+ */
2629
+ declare function Countdown({ days, hours, minutes, seconds, showLabels, className, }: CountdownProps): react_jsx_runtime.JSX.Element;
2630
+
2631
+ /** Props for the SafariMock component. */
2632
+ interface SafariMockProps {
2633
+ /** Content to display inside the browser frame. */
2634
+ children: ReactNode;
2635
+ /** URL text shown in the address bar. Default: `"https://example.com"` */
2636
+ url?: string;
2637
+ /** Additional class names. */
2638
+ className?: string;
2639
+ }
2640
+ /**
2641
+ * Safari-style browser frame for wrapping screenshots.
2642
+ *
2643
+ * - CSS-only traffic lights (red/yellow/green dots)
2644
+ * - Address bar with optional URL text
2645
+ * - Rounded corners matching macOS window chrome
2646
+ *
2647
+ * @component
2648
+ * @package ui
2649
+ */
2650
+ declare function SafariMock({ children, url, className, }: SafariMockProps): react_jsx_runtime.JSX.Element;
2651
+ /** Props for the IPhoneMock component. */
2652
+ interface IPhoneMockProps {
2653
+ /** Content to display inside the phone frame. */
2654
+ children: ReactNode;
2655
+ /** Additional class names. */
2656
+ className?: string;
2657
+ }
2658
+ /**
2659
+ * iPhone-style device frame for wrapping mobile screenshots.
2660
+ *
2661
+ * - CSS-only frame with rounded corners and notch
2662
+ * - Status bar with time and signal indicators
2663
+ * - Aspect ratio matches iPhone 15 Pro proportions
2664
+ *
2665
+ * @component
2666
+ * @package ui
2667
+ */
2668
+ declare function IPhoneMock({ children, className, }: IPhoneMockProps): react_jsx_runtime.JSX.Element;
2669
+
2670
+ /** Props for the Dock container. */
2671
+ interface DockProps extends SaasflareComponentProps {
2672
+ /** Dock items. */
2673
+ children: ReactNode;
2674
+ /** Maximum scale factor for magnified items. Default: `1.5` */
2675
+ magnification?: number;
2676
+ /** Mouse proximity distance in pixels that triggers magnification. Default: `100` */
2677
+ distance?: number;
2678
+ /** Additional class names. */
2679
+ className?: string;
2680
+ }
2681
+ /**
2682
+ * Horizontal dock bar with proximity-based item magnification.
2683
+ *
2684
+ * - Items scale up as the mouse approaches them
2685
+ * - Uses spring physics for smooth, elastic scaling
2686
+ * - Falls back to a static icon bar when reduced motion is preferred
2687
+ * - Tracks mouse X position across the entire dock
2688
+ *
2689
+ * @component
2690
+ * @package ui
2691
+ */
2692
+ declare function Dock({ children, magnification, distance, className, surface, radius, animated, }: DockProps): react_jsx_runtime.JSX.Element;
2693
+ /** Props for a DockItem. */
2694
+ interface DockItemProps {
2695
+ /** Icon or content inside the dock item. */
2696
+ children: ReactNode;
2697
+ /** Tooltip label for the item. */
2698
+ label: string;
2699
+ /** Click handler. */
2700
+ onClick?: () => void;
2701
+ /** Additional class names. */
2702
+ className?: string;
2703
+ }
2704
+ /**
2705
+ * Individual item within a Dock.
2706
+ *
2707
+ * - Magnifies based on mouse proximity using spring interpolation
2708
+ * - Shows a tooltip label on hover
2709
+ * - Renders at static base size when reduced motion is preferred
2710
+ *
2711
+ * @component
2712
+ * @package ui
2713
+ */
2714
+ declare function DockItem({ children, label, onClick, className, }: DockItemProps): react_jsx_runtime.JSX.Element;
2715
+
2716
+ /** Props for the FeatureCard component. */
2717
+ interface FeatureCardProps extends SaasflareComponentProps {
2718
+ /** Icon element displayed at the top. */
2719
+ icon?: ReactNode;
2720
+ /** Feature title. */
2721
+ title: string;
2722
+ /** Feature description text. */
2723
+ description: string;
2724
+ /** Additional class names. */
2725
+ className?: string;
2726
+ }
2727
+ /**
2728
+ * Feature card with icon, title, and description.
2729
+ *
2730
+ * @component
2731
+ * @package ui
2732
+ */
2733
+ declare function FeatureCard({ icon, title, description, className, surface, radius, animated, }: FeatureCardProps): react_jsx_runtime.JSX.Element;
2734
+
2735
+ /** Props for the FlipWords component. */
2736
+ interface FlipWordsProps {
2737
+ /** Array of words to cycle through. */
2738
+ words: string[];
2739
+ /** Cycle interval in milliseconds. Default: `2500` */
2740
+ interval?: number;
2741
+ /** Additional class names. */
2742
+ className?: string;
2743
+ }
2744
+ /**
2745
+ * Inline word rotator with vertical flip animation.
2746
+ *
2747
+ * - Words flip upward with a spring transition
2748
+ * - Container width matches the longest word to prevent layout shifts
2749
+ * - Falls back to showing the first word statically when reduced motion is preferred
2750
+ * - Renders inline, so it can be placed mid-sentence
2751
+ *
2752
+ * @component
2753
+ * @package ui
2754
+ */
2755
+ declare function FlipWords({ words, interval, className, }: FlipWordsProps): react_jsx_runtime.JSX.Element;
2756
+
2757
+ /** Props for the GalleryLightbox component. */
2758
+ interface GalleryLightboxProps {
2759
+ /** Array of image URLs. */
2760
+ images: string[];
2761
+ /** Whether the lightbox is open. */
2762
+ open: boolean;
2763
+ /** Current image index. */
2764
+ index: number;
2765
+ /** Called when the lightbox should close. */
2766
+ onClose: () => void;
2767
+ /** Called when the index changes. */
2768
+ onIndexChange: (index: number) => void;
2769
+ /** Additional class names. */
2770
+ className?: string;
2771
+ }
2772
+ /**
2773
+ * Fullscreen image lightbox with keyboard navigation.
2774
+ *
2775
+ * @component
2776
+ * @package ui
2777
+ */
2778
+ declare function GalleryLightbox({ images, open, index, onClose, onIndexChange, className, }: GalleryLightboxProps): react_jsx_runtime.JSX.Element;
2779
+
2780
+ /** Props for the GlowingEffect component. */
2781
+ interface GlowingEffectProps {
2782
+ /** Glow color. Default: `"hsl(var(--primary))"` */
2783
+ color?: string;
2784
+ /** Glow spread diameter in pixels. Default: `150` */
2785
+ spread?: number;
2786
+ /** Blur radius in pixels. Default: `20` */
2787
+ blur?: number;
2788
+ /** Glow opacity (0–1). Default: `0.4` */
2789
+ opacity?: number;
2790
+ /** Border radius to match parent (CSS value). Default: `"inherit"` */
2791
+ borderRadius?: string;
2792
+ /** Additional class names. */
2793
+ className?: string;
2794
+ }
2795
+ /**
2796
+ * Mouse-following glow effect for container borders.
2797
+ *
2798
+ * - Tracks mouse position and renders a radial gradient at cursor
2799
+ * - Only glows along the border (uses inset mask to hollow out center)
2800
+ * - Fades out when the mouse leaves
2801
+ * - Renders nothing when reduced motion is preferred
2802
+ *
2803
+ * @component
2804
+ * @package ui
2805
+ */
2806
+ declare function GlowingEffect({ color, spread, blur, opacity, borderRadius, className, }: GlowingEffectProps): react_jsx_runtime.JSX.Element | null;
2807
+
2808
+ /** Props for the GradientText component. */
2809
+ interface GradientTextProps {
2810
+ /** Text content to apply the gradient to. */
2811
+ children: ReactNode;
2812
+ /** Gradient color stops. Default: primary → chart-1 → chart-2 tokens */
2813
+ colors?: string[];
2814
+ /** Whether to animate the gradient position. Default: `true` */
2815
+ animate?: boolean;
2816
+ /** Animation cycle duration in seconds. Default: `6` */
2817
+ speed?: number;
2818
+ /** Gradient direction in degrees. Default: `90` */
2819
+ angle?: number;
2820
+ /** Additional class names. */
2821
+ className?: string;
2822
+ }
2823
+ /**
2824
+ * Text with a vibrant gradient fill, optionally animated.
2825
+ *
2826
+ * - Uses `background-clip: text` for the gradient effect
2827
+ * - Animates via CSS `@keyframes` (no JS frames)
2828
+ * - Falls back to primary color when reduced motion is preferred
2829
+ * - Renders as an inline `<span>` to nest inside any heading or paragraph
2830
+ *
2831
+ * @component
2832
+ * @package ui
2833
+ */
2834
+ declare function GradientText({ children, colors, animate, speed, angle, className, }: GradientTextProps): react_jsx_runtime.JSX.Element;
2835
+
2836
+ /** Props for the HeroVideoDialog component. */
2837
+ interface HeroVideoDialogProps {
2838
+ /** Video embed URL (YouTube/Vimeo embed or direct video URL). */
2839
+ videoSrc: string;
2840
+ /** Poster thumbnail image URL. */
2841
+ thumbnailSrc: string;
2842
+ /** Alt text for the thumbnail image. */
2843
+ thumbnailAlt: string;
2844
+ /** CSS aspect-ratio for the thumbnail. Default: `"16/9"` */
2845
+ aspectRatio?: string;
2846
+ /** Additional class names for the container. */
2847
+ className?: string;
2848
+ }
2849
+ /**
2850
+ * Hero video section with click-to-play dialog.
2851
+ *
2852
+ * - Shows a thumbnail with a centered play button
2853
+ * - Opens a modal dialog with the embedded video on click
2854
+ * - Animated with spring physics (scale + fade)
2855
+ * - Accessible: focus management, keyboard close, aria labels
2856
+ *
2857
+ * @component
2858
+ * @package ui
2859
+ */
2860
+ declare function HeroVideoDialog({ videoSrc, thumbnailSrc, thumbnailAlt, aspectRatio, className, }: HeroVideoDialogProps): react_jsx_runtime.JSX.Element;
2861
+
2862
+ /** Props for the Hotspot container. */
2863
+ interface HotspotProps {
2864
+ /** Background content (image, illustration, etc.) plus HotspotMarker children. */
2865
+ children: ReactNode;
2866
+ /** Additional class names. */
2867
+ className?: string;
2868
+ }
2869
+ /**
2870
+ * Container for positioned hotspot markers.
2871
+ *
2872
+ * @component
2873
+ * @package ui
2874
+ */
2875
+ declare function Hotspot({ children, className }: HotspotProps): react_jsx_runtime.JSX.Element;
2876
+ /** Props for a HotspotMarker. */
2877
+ interface HotspotMarkerProps {
2878
+ /** Horizontal position as percentage (0–100). */
2879
+ x: number;
2880
+ /** Vertical position as percentage (0–100). */
2881
+ y: number;
2882
+ /** Tooltip label text. */
2883
+ label: string;
2884
+ /** Detailed description shown in the tooltip. */
2885
+ description?: string;
2886
+ /** Marker dot color. Default: `"hsl(var(--primary))"` */
2887
+ color?: string;
2888
+ /** Additional class names. */
2889
+ className?: string;
2890
+ }
2891
+ /**
2892
+ * Pulsing dot marker with hover tooltip at an absolute position.
2893
+ *
2894
+ * @component
2895
+ * @package ui
2896
+ */
2897
+ declare function HotspotMarker({ x, y, label, description, color, className, }: HotspotMarkerProps): react_jsx_runtime.JSX.Element;
2898
+
2899
+ /**
2900
+ * @fileoverview Image that swaps to an alternate source on hover.
2901
+ * @author Saasflare™
2902
+ * Crossfades between a primary and alternate image on mouse hover.
2903
+ * @module packages/ui/components/ui/image-swap-hover
2904
+ * @package ui
2905
+ *
2906
+ * @component
2907
+ * @example
2908
+ * import { ImageSwapHover } from '@saasflare/ui';
2909
+ * <ImageSwapHover
2910
+ * src="/product-front.jpg"
2911
+ * hoverSrc="/product-back.jpg"
2912
+ * alt="Product view"
2913
+ * />
2914
+ */
2915
+ /** Props for the ImageSwapHover component. */
2916
+ interface ImageSwapHoverProps {
2917
+ /** Default image source. */
2918
+ src: string;
2919
+ /** Image source to show on hover. */
2920
+ hoverSrc: string;
2921
+ /** Alt text for both images. */
2922
+ alt: string;
2923
+ /** CSS aspect-ratio. Default: `"1/1"` */
2924
+ aspectRatio?: string;
2925
+ /** Additional class names. */
2926
+ className?: string;
2927
+ }
2928
+ /**
2929
+ * Image that crossfades to an alternate source on hover.
2930
+ *
2931
+ * @component
2932
+ * @package ui
2933
+ */
2934
+ declare function ImageSwapHover({ src, hoverSrc, alt, aspectRatio, className, }: ImageSwapHoverProps): react_jsx_runtime.JSX.Element;
2935
+
2936
+ /** Props for the Marquee component. */
2937
+ interface MarqueeProps {
2938
+ /** Items to scroll infinitely. */
2939
+ children: ReactNode;
2940
+ /** Reverse scroll direction. Default: `false` */
2941
+ reverse?: boolean;
2942
+ /** Scroll duration in seconds for one full cycle. Default: `40` */
2943
+ speed?: number;
2944
+ /** Pause scrolling on hover. Default: `true` */
2945
+ pauseOnHover?: boolean;
2946
+ /** Gap between items in pixels. Default: `48` */
2947
+ gap?: number;
2948
+ /** Number of times to duplicate the content strip. Default: `2` */
2949
+ repeat?: number;
2950
+ /** Enable vertical scrolling instead of horizontal. Default: `false` */
2951
+ vertical?: boolean;
2952
+ /** Additional class names for the container. */
2953
+ className?: string;
2954
+ }
2955
+ /**
2956
+ * Infinite-scrolling content ticker.
2957
+ *
2958
+ * - Pure CSS animation (no JS frames, no Framer Motion overhead)
2959
+ * - Duplicates children to create a seamless loop
2960
+ * - Pauses on hover for readability (configurable)
2961
+ * - Falls back to static flex row when reduced motion is preferred
2962
+ *
2963
+ * @component
2964
+ * @package ui
2965
+ */
2966
+ declare function Marquee({ children, reverse, speed, pauseOnHover, gap, repeat, vertical, className, }: MarqueeProps): react_jsx_runtime.JSX.Element;
2967
+
2968
+ /** Props for the MouseGradientBlob component. */
2969
+ interface MouseGradientBlobProps {
2970
+ /** Diameter of the blob in pixels. Default: `500` */
2971
+ size?: number;
2972
+ /** Gradient color stops. Default: primary + chart-2 tokens */
2973
+ colors?: [string, string];
2974
+ /** Opacity of the blob (0–1). Default: `0.15` */
2975
+ opacity?: number;
2976
+ /** Blur radius in pixels. Default: `80` */
2977
+ blur?: number;
2978
+ /** Additional class names for the container */
2979
+ className?: string;
2980
+ }
2981
+ /**
2982
+ * Ambient gradient blob that follows the mouse.
2983
+ *
2984
+ * - Uses spring physics for smooth, organic motion
2985
+ * - Fades out when the mouse leaves the container
2986
+ * - Renders nothing when reduced motion is preferred
2987
+ * - Uses `pointer-events: none` so it never blocks interaction
2988
+ *
2989
+ * @component
2990
+ * @package ui
2991
+ */
2992
+ declare function MouseGradientBlob({ size, colors, opacity, blur, className, }: MouseGradientBlobProps): react_jsx_runtime.JSX.Element | null;
2993
+
2994
+ /** Props for the MovingBorder component. */
2995
+ interface MovingBorderProps {
2996
+ /** Content inside the border. */
2997
+ children: ReactNode;
2998
+ /** Gradient colors for the rotating border. */
2999
+ colors?: string[];
3000
+ /** Rotation cycle duration in seconds. Default: `6` */
3001
+ duration?: number;
3002
+ /** Border width in pixels. Default: `1.5` */
3003
+ borderWidth?: number;
3004
+ /** Border radius (CSS value). Default: `"0.75rem"` */
3005
+ borderRadius?: string;
3006
+ /** Additional class names for the outer wrapper. */
3007
+ className?: string;
3008
+ }
3009
+ /**
3010
+ * Wrapper with a continuously rotating gradient border.
3011
+ *
3012
+ * - Uses a conic-gradient that rotates via CSS animation
3013
+ * - Inner content sits on top with a solid background
3014
+ * - Renders a static border when reduced motion is preferred
3015
+ * - Works on any element (buttons, cards, containers)
3016
+ *
3017
+ * @component
3018
+ * @package ui
3019
+ */
3020
+ declare function MovingBorder({ children, colors, duration, borderWidth, borderRadius, className, }: MovingBorderProps): react_jsx_runtime.JSX.Element;
3021
+
3022
+ /** Animation variant presets for page transitions. */
3023
+ declare const VARIANTS: {
3024
+ readonly fade: {
3025
+ readonly initial: {
3026
+ readonly opacity: 0;
3027
+ };
3028
+ readonly animate: {
3029
+ readonly opacity: 1;
3030
+ };
3031
+ readonly exit: {
3032
+ readonly opacity: 0;
3033
+ };
3034
+ };
3035
+ readonly slideUp: {
3036
+ readonly initial: {
3037
+ readonly opacity: 0;
3038
+ readonly y: 16;
3039
+ };
3040
+ readonly animate: {
3041
+ readonly opacity: 1;
3042
+ readonly y: 0;
3043
+ };
3044
+ readonly exit: {
3045
+ readonly opacity: 0;
3046
+ readonly y: -16;
3047
+ };
3048
+ };
3049
+ readonly slideDown: {
3050
+ readonly initial: {
3051
+ readonly opacity: 0;
3052
+ readonly y: -16;
3053
+ };
3054
+ readonly animate: {
3055
+ readonly opacity: 1;
3056
+ readonly y: 0;
3057
+ };
3058
+ readonly exit: {
3059
+ readonly opacity: 0;
3060
+ readonly y: 16;
3061
+ };
3062
+ };
3063
+ readonly scale: {
3064
+ readonly initial: {
3065
+ readonly opacity: 0;
3066
+ readonly scale: 0.96;
3067
+ };
3068
+ readonly animate: {
3069
+ readonly opacity: 1;
3070
+ readonly scale: 1;
3071
+ };
3072
+ readonly exit: {
3073
+ readonly opacity: 0;
3074
+ readonly scale: 0.96;
3075
+ };
3076
+ };
3077
+ };
3078
+ /** Props for the PageTransition component. */
3079
+ interface PageTransitionProps {
3080
+ /** Child content to animate. */
3081
+ children: ReactNode;
3082
+ /** Animation preset. Default: `"fade"` */
3083
+ variant?: keyof typeof VARIANTS;
3084
+ /** Transition duration in seconds. Default: `0.3` */
3085
+ duration?: number;
3086
+ /** Unique key for AnimatePresence (use pathname). Default: none */
3087
+ transitionKey?: string;
3088
+ /** Additional class names for the motion wrapper. */
3089
+ className?: string;
3090
+ }
3091
+ /**
3092
+ * Page transition wrapper with configurable enter/exit animations.
3093
+ *
3094
+ * - Provides `fade`, `slideUp`, `slideDown`, and `scale` presets
3095
+ * - Renders children directly (no animation) when reduced motion is preferred
3096
+ * - Use `transitionKey` (typically the pathname) to trigger re-animation on route changes
3097
+ *
3098
+ * @component
3099
+ * @package ui
3100
+ */
3101
+ declare function PageTransition({ children, variant, duration, transitionKey, className, }: PageTransitionProps): react_jsx_runtime.JSX.Element;
3102
+
3103
+ /** Props for the ParallaxSection component. */
3104
+ interface ParallaxSectionProps {
3105
+ /** Content to apply parallax to. */
3106
+ children: ReactNode;
3107
+ /** Parallax speed factor. 0 = fixed, 0.5 = half speed, 1 = no parallax. Default: `0.5` */
3108
+ speed?: number;
3109
+ /** Additional class names. */
3110
+ className?: string;
3111
+ }
3112
+ /**
3113
+ * Section wrapper that applies scroll-based parallax to its children.
3114
+ *
3115
+ * - Children translate vertically based on scroll position and speed factor
3116
+ * - Falls back to static rendering when reduced motion is preferred
3117
+ * - Overflow hidden to prevent content leaking during parallax
3118
+ *
3119
+ * @component
3120
+ * @package ui
3121
+ */
3122
+ declare function ParallaxSection({ children, speed, className, }: ParallaxSectionProps): react_jsx_runtime.JSX.Element;
3123
+
3124
+ /** Props for the ParticlesBackground component. */
3125
+ interface ParticlesBackgroundProps {
3126
+ /** Number of particles. Default: `20` */
3127
+ count?: number;
3128
+ /** CSS color of particles. Default: `"hsl(var(--primary))"` */
3129
+ color?: string;
3130
+ /** Maximum particle diameter in pixels. Default: `4` */
3131
+ maxSize?: number;
3132
+ /** Minimum particle diameter in pixels. Default: `1` */
3133
+ minSize?: number;
3134
+ /** Maximum particle opacity (0–1). Default: `0.3` */
3135
+ maxOpacity?: number;
3136
+ /** Animation speed multiplier. Default: `1` */
3137
+ speed?: number;
3138
+ /** Additional class names for the container. */
3139
+ className?: string;
3140
+ }
3141
+ /**
3142
+ * Ambient floating particles background.
3143
+ *
3144
+ * - CSS-only animation (no JS animation loop, GPU-composited)
3145
+ * - Deterministic positions (no layout shift between renders)
3146
+ * - Renders nothing when reduced motion is preferred
3147
+ * - Lightweight: no canvas, no WebGL
3148
+ *
3149
+ * @component
3150
+ * @package ui
3151
+ */
3152
+ declare function ParticlesBackground({ count, color, maxSize, minSize, maxOpacity, speed, className, }: ParticlesBackgroundProps): react_jsx_runtime.JSX.Element | null;
3153
+
3154
+ /**
3155
+ * @fileoverview Perspective grid background with retro/cyberpunk aesthetic.
3156
+ * @author Saasflare™
3157
+ * A CSS-only perspective grid that fades toward the horizon. Ideal for
3158
+ * hero sections and feature backgrounds.
3159
+ * @module packages/ui/components/ui/retro-grid
3160
+ * @package ui
3161
+ *
3162
+ * @component
3163
+ * @example
3164
+ * import { RetroGrid } from '@saasflare/ui';
3165
+ * <div className="relative min-h-[500px]">
3166
+ * <RetroGrid />
3167
+ * <div className="relative z-10">Hero content</div>
3168
+ * </div>
3169
+ *
3170
+ * @example
3171
+ * // Custom grid color and size
3172
+ * <RetroGrid gridColor="hsl(var(--primary))" gridSize={40} angle={70} />
3173
+ */
3174
+ /** Props for the RetroGrid component. */
3175
+ interface RetroGridProps {
3176
+ /** Grid line color. Default: `"hsl(var(--border))"` */
3177
+ gridColor?: string;
3178
+ /** Grid cell size in pixels. Default: `60` */
3179
+ gridSize?: number;
3180
+ /** Perspective tilt angle in degrees. Default: `65` */
3181
+ angle?: number;
3182
+ /** Grid line opacity (0–1). Default: `0.4` */
3183
+ opacity?: number;
3184
+ /** Additional class names. */
3185
+ className?: string;
3186
+ }
3187
+ /**
3188
+ * Perspective grid background with vanishing-point effect.
3189
+ *
3190
+ * - CSS-only (repeating linear gradients + perspective transform)
3191
+ * - Fades to transparent at the horizon via mask-image
3192
+ * - No JS, no canvas, no animation — pure visual
3193
+ *
3194
+ * @component
3195
+ * @package ui
3196
+ */
3197
+ declare function RetroGrid({ gridColor, gridSize, angle, opacity, className, }: RetroGridProps): react_jsx_runtime.JSX.Element;
3198
+
3199
+ /** Direction the element slides in from. */
3200
+ type RevealDirection = "up" | "down" | "left" | "right" | "none";
3201
+ /** Props for the RevealOnScroll component. */
3202
+ interface RevealOnScrollProps {
3203
+ /** Content to reveal. */
3204
+ children: ReactNode;
3205
+ /** Direction the element slides in from. Default: `"up"` */
3206
+ direction?: RevealDirection;
3207
+ /** Animation delay in seconds. Default: `0` */
3208
+ delay?: number;
3209
+ /** Intersection Observer root margin. Default: `"-80px"` */
3210
+ rootMargin?: string;
3211
+ /** Whether the animation triggers only once. Default: `true` */
3212
+ once?: boolean;
3213
+ /** Additional class names. */
3214
+ className?: string;
3215
+ }
3216
+ /**
3217
+ * Wrapper that animates children into view on scroll intersection.
3218
+ *
3219
+ * - Fades in with an optional directional slide
3220
+ * - Uses a gentle spring for natural motion
3221
+ * - Renders children statically when reduced motion is preferred
3222
+ * - Triggers once by default (configurable via `once`)
3223
+ *
3224
+ * @component
3225
+ * @package ui
3226
+ */
3227
+ declare function RevealOnScroll({ children, direction, delay, rootMargin, once, className, }: RevealOnScrollProps): react_jsx_runtime.JSX.Element;
3228
+
3229
+ /** Props for the ShimmerButton component. */
3230
+ interface ShimmerButtonProps extends ComponentProps<"button"> {
3231
+ /** Button content. */
3232
+ children: ReactNode;
3233
+ /** Color of the shimmer highlight. Default: `"rgba(255,255,255,0.2)"` */
3234
+ shimmerColor?: string;
3235
+ /** Shimmer cycle duration in seconds. Default: `2.5` */
3236
+ speed?: number;
3237
+ /** Background color. Default: `"hsl(var(--primary))"` */
3238
+ background?: string;
3239
+ }
3240
+ /**
3241
+ * CTA button with a continuously sweeping shimmer effect.
3242
+ *
3243
+ * - Diagonal light sweep loops infinitely
3244
+ * - CSS-only animation (no JS frames)
3245
+ * - Falls back to a static button when reduced motion is preferred
3246
+ * - Inherits standard button props (onClick, disabled, etc.)
3247
+ *
3248
+ * @component
3249
+ * @package ui
3250
+ */
3251
+ declare function ShimmerButton({ children, shimmerColor, speed, background, className, ...props }: ShimmerButtonProps): react_jsx_runtime.JSX.Element;
3252
+
3253
+ /** Supported social login providers. */
3254
+ type SocialProvider$1 = "google" | "apple" | "github" | "microsoft" | "twitter";
3255
+ /** Props for the SocialButton component. */
3256
+ interface SocialButtonProps extends Omit<ComponentProps<"button">, "children"> {
3257
+ /** Social provider to render. */
3258
+ provider: SocialProvider$1;
3259
+ /** Override the default label text. */
3260
+ label?: string;
3261
+ /** Show only the icon (no text). Default: `false` */
3262
+ iconOnly?: boolean;
3263
+ }
3264
+ /**
3265
+ * Branded social login button. Visual only — no auth wiring.
3266
+ *
3267
+ * @component
3268
+ * @package ui
3269
+ */
3270
+ declare function SocialButton({ provider, label: labelOverride, iconOnly, className, ...props }: SocialButtonProps): react_jsx_runtime.JSX.Element;
3271
+
3272
+ /** Props for the SpotlightCard component. */
3273
+ interface SpotlightCardProps extends SaasflareComponentProps {
3274
+ /** Card content. */
3275
+ children: ReactNode;
3276
+ /** Spotlight gradient color. Default: `"hsl(var(--primary))"` */
3277
+ spotlightColor?: string;
3278
+ /** Spotlight diameter in pixels. Default: `250` */
3279
+ spotlightSize?: number;
3280
+ /** Spotlight opacity (0–1). Default: `0.08` */
3281
+ spotlightOpacity?: number;
3282
+ /** Additional class names. */
3283
+ className?: string;
3284
+ }
3285
+ /**
3286
+ * Card with a radial gradient that follows the mouse cursor.
3287
+ *
3288
+ * - Gradient overlay tracks the mouse within the card boundaries
3289
+ * - Fades out when the mouse leaves
3290
+ * - Uses CSS for the gradient (no canvas, no heavy re-renders)
3291
+ * - Falls back to a plain card when reduced motion is preferred
3292
+ *
3293
+ * @component
3294
+ * @package ui
3295
+ */
3296
+ declare function SpotlightCard({ children, spotlightColor, spotlightSize, spotlightOpacity, className, surface, radius, animated, }: SpotlightCardProps): react_jsx_runtime.JSX.Element;
3297
+
3298
+ /** Props for the StatCard component. */
3299
+ interface StatCardProps extends SaasflareComponentProps {
3300
+ /** The stat value (e.g. "10K+", "99.9%", "$2.4M"). */
3301
+ value: string;
3302
+ /** Label describing the stat. */
3303
+ label: string;
3304
+ /** Optional icon displayed above the value. */
3305
+ icon?: ReactNode;
3306
+ /** Additional class names. */
3307
+ className?: string;
3308
+ }
3309
+ /**
3310
+ * Simple statistic display card for marketing sections.
3311
+ *
3312
+ * @component
3313
+ * @package ui
3314
+ */
3315
+ declare function StatCard({ value, label, icon, className, surface, radius, animated, }: StatCardProps): react_jsx_runtime.JSX.Element;
3316
+
3317
+ /** Props for the Steps container. */
3318
+ interface StepsProps {
3319
+ /** Step children. */
3320
+ children: ReactNode;
3321
+ /** Index of the current active step (0-based). Default: `0` */
3322
+ current?: number;
3323
+ /** Layout direction. Default: `"horizontal"` */
3324
+ direction?: "horizontal" | "vertical";
3325
+ /** Additional class names. */
3326
+ className?: string;
3327
+ }
3328
+ /** Props for an individual Step. */
3329
+ interface StepProps {
3330
+ /** Step title text. */
3331
+ title: string;
3332
+ /** Optional description below the title. */
3333
+ description?: string;
3334
+ /** Optional icon to replace the step number. */
3335
+ icon?: ReactNode;
3336
+ /** Additional class names. */
3337
+ className?: string;
3338
+ }
3339
+ /**
3340
+ * Step sequence indicator with numbered circles and connector lines.
3341
+ *
3342
+ * @component
3343
+ * @package ui
3344
+ */
3345
+ declare function Steps({ children, current, direction, className, }: StepsProps): react_jsx_runtime.JSX.Element;
3346
+ /**
3347
+ * Individual step within a Steps container.
3348
+ * This component is a data carrier — it renders nothing on its own.
3349
+ *
3350
+ * @component
3351
+ * @package ui
3352
+ */
3353
+ declare function Step(_props: StepProps): null;
3354
+
3355
+ /** A single item in the sticky scroll reveal. */
3356
+ interface StickyScrollItem {
3357
+ /** Section title. */
3358
+ title: string;
3359
+ /** Section description text. */
3360
+ description: string;
3361
+ /** Visual content (image, component, etc.) shown in the right column. */
3362
+ content?: ReactNode;
3363
+ }
3364
+ /** Props for the StickyScrollReveal component. */
3365
+ interface StickyScrollRevealProps {
3366
+ /** Array of scroll items. */
3367
+ items: StickyScrollItem[];
3368
+ /** Additional class names. */
3369
+ className?: string;
3370
+ }
3371
+ /**
3372
+ * Split layout with sticky left text and scrolling right content.
3373
+ *
3374
+ * - Left column text stays fixed during scroll
3375
+ * - Right column content transitions between items
3376
+ * - Each item fades in based on scroll position
3377
+ * - Falls back to stacked layout when reduced motion is preferred
3378
+ *
3379
+ * @component
3380
+ * @package ui
3381
+ */
3382
+ declare function StickyScrollReveal({ items, className, }: StickyScrollRevealProps): react_jsx_runtime.JSX.Element;
3383
+
3384
+ /** A social link entry. */
3385
+ interface SocialLink {
3386
+ /** Accessible label for the link. */
3387
+ label: string;
3388
+ /** URL to the social profile. */
3389
+ url: string;
3390
+ /** Icon element. */
3391
+ icon: ReactNode;
3392
+ }
3393
+ /** Props for the TeamCard component. */
3394
+ interface TeamCardProps extends SaasflareComponentProps {
3395
+ /** Person's name. */
3396
+ name: string;
3397
+ /** Role or job title. */
3398
+ role: string;
3399
+ /** Photo URL. */
3400
+ photo?: string;
3401
+ /** Short bio text. */
3402
+ bio?: string;
3403
+ /** Social media links. */
3404
+ socials?: SocialLink[];
3405
+ /** Additional class names. */
3406
+ className?: string;
3407
+ }
3408
+ /**
3409
+ * Team member card with photo, name, role, and social links.
3410
+ *
3411
+ * @component
3412
+ * @package ui
3413
+ */
3414
+ declare function TeamCard({ name, role, photo, bio, socials, className, surface, radius, animated, }: TeamCardProps): react_jsx_runtime.JSX.Element;
3415
+
3416
+ /** Props for the TestimonialCard component. */
3417
+ interface TestimonialCardProps extends SaasflareComponentProps {
3418
+ /** The testimonial quote text. */
3419
+ quote: string;
3420
+ /** Name of the person. */
3421
+ name: string;
3422
+ /** Role/title of the person. */
3423
+ role?: string;
3424
+ /** Avatar image URL. */
3425
+ avatar?: string;
3426
+ /** Star rating (1–5). Omit to hide stars. */
3427
+ rating?: 1 | 2 | 3 | 4 | 5;
3428
+ /** Additional class names. */
3429
+ className?: string;
3430
+ }
3431
+ /**
3432
+ * Testimonial card with avatar, quote, attribution, and optional star rating.
3433
+ *
3434
+ * @component
3435
+ * @package ui
3436
+ */
3437
+ declare function TestimonialCard({ quote, name, role, avatar, rating, className, surface, radius, animated, }: TestimonialCardProps): react_jsx_runtime.JSX.Element;
3438
+
3439
+ /** Props for the TextGenerateEffect component. */
3440
+ interface TextGenerateEffectProps {
3441
+ /** Text string to animate word by word. */
3442
+ text: string;
3443
+ /** Delay between each word in seconds. Default: `0.05` */
3444
+ stagger?: number;
3445
+ /** Duration per word fade-in in seconds. Default: `0.4` */
3446
+ duration?: number;
3447
+ /** Whether animation triggers only once. Default: `true` */
3448
+ once?: boolean;
3449
+ /** HTML element to render. Default: `"p"` */
3450
+ as?: "p" | "h1" | "h2" | "h3" | "h4" | "span";
3451
+ /** Additional class names. */
3452
+ className?: string;
3453
+ }
3454
+ /**
3455
+ * Text that reveals word by word with staggered fade-in.
3456
+ *
3457
+ * - Each word fades from transparent to opaque sequentially
3458
+ * - Triggers when the element scrolls into view
3459
+ * - Renders full text immediately when reduced motion is preferred
3460
+ * - Preserves natural text wrapping and spacing
3461
+ *
3462
+ * @component
3463
+ * @package ui
3464
+ */
3465
+ declare function TextGenerateEffect({ text, stagger, duration, once, as: Tag, className, }: TextGenerateEffectProps): react_jsx_runtime.JSX.Element;
3466
+
3467
+ /** Props for the Timeline container. */
3468
+ interface TimelineProps {
3469
+ /** TimelineItem children. */
3470
+ children: ReactNode;
3471
+ /** Additional class names. */
3472
+ className?: string;
3473
+ }
3474
+ /**
3475
+ * Vertical timeline with a scroll-driven progress beam.
3476
+ *
3477
+ * - Beam fills as the user scrolls through the timeline
3478
+ * - Each item fades in on scroll intersection
3479
+ * - Falls back to a static timeline when reduced motion is preferred
3480
+ *
3481
+ * @component
3482
+ * @package ui
3483
+ */
3484
+ declare function Timeline({ children, className }: TimelineProps): react_jsx_runtime.JSX.Element;
3485
+ /** Props for a TimelineItem. */
3486
+ interface TimelineItemProps {
3487
+ /** Item title. */
3488
+ title: string;
3489
+ /** Date or time label. */
3490
+ date?: string;
3491
+ /** Item content/description. */
3492
+ children: ReactNode;
3493
+ /** Additional class names. */
3494
+ className?: string;
3495
+ }
3496
+ /**
3497
+ * Individual item within a Timeline.
3498
+ *
3499
+ * - Positioned alternating left/right on desktop, left-aligned on mobile
3500
+ * - Dot indicator on the timeline track
3501
+ * - Fades in when scrolled into view
3502
+ *
3503
+ * @component
3504
+ * @package ui
3505
+ */
3506
+ declare function TimelineItem({ title, date, children, className, }: TimelineItemProps): react_jsx_runtime.JSX.Element;
3507
+
3508
+ /** Props for the TracingBeam component. */
3509
+ interface TracingBeamProps {
3510
+ /** Content alongside the beam. */
3511
+ children: ReactNode;
3512
+ /** Beam color. Default: `"hsl(var(--primary))"` */
3513
+ color?: string;
3514
+ /** Track (background line) color. Default: `"hsl(var(--border))"` */
3515
+ trackColor?: string;
3516
+ /** Additional class names. */
3517
+ className?: string;
3518
+ }
3519
+ /**
3520
+ * Vertical scroll-progress beam alongside content.
3521
+ *
3522
+ * - Fills from top to bottom as the user scrolls
3523
+ * - Renders on the left side with content offset
3524
+ * - Includes a dot indicator at the current scroll position
3525
+ * - Falls back to a simple left border when reduced motion is preferred
3526
+ *
3527
+ * @component
3528
+ * @package ui
3529
+ */
3530
+ declare function TracingBeam({ children, color, trackColor, className, }: TracingBeamProps): react_jsx_runtime.JSX.Element;
3531
+
3532
+ /**
3533
+ * Props for the ScrollToTopButton component.
3534
+ *
3535
+ * @interface
3536
+ * @package ui
3537
+ */
3538
+ interface ScrollToTopButtonProps extends SaasflareComponentProps {
3539
+ /**
3540
+ * Optional scroll container element ID.
3541
+ * If not provided, falls back to the global `window`.
3542
+ */
3543
+ scrollContainerId?: string;
3544
+ /**
3545
+ * Vertical scroll offset (in pixels) after which the button is shown.
3546
+ * @default 300
3547
+ */
3548
+ scrollOffset?: number;
3549
+ /** Additional class names merged onto the root button. */
3550
+ className?: string;
3551
+ }
3552
+ /**
3553
+ * A floating button that appears after scrolling down and smoothly scrolls
3554
+ * the user back to the top of the container (or window).
3555
+ *
3556
+ * @component
3557
+ */
3558
+ declare function ScrollToTopButton({ scrollContainerId, scrollOffset, className, ...sfProps }: ScrollToTopButtonProps): JSX.Element;
3559
+
3560
+ /**
3561
+ * Props for {@link StatefulButton}. Extends {@link ButtonProps} with two
3562
+ * orthogonal stateful concerns. `asChild` is intentionally excluded — a
3563
+ * Slot-rendered button cannot own its own DOM children, so the spinner /
3564
+ * loading-text swap would be ambiguous.
3565
+ */
3566
+ interface StatefulButtonProps extends Omit<ButtonProps, "asChild"> {
3567
+ /** Pending state: forces disabled, shows spinner, swaps label when `loadingText` is set. */
3568
+ loading?: boolean;
3569
+ /** Optional label to show in place of children while `loading` is true. */
3570
+ loadingText?: React$1.ReactNode;
3571
+ }
3572
+ /**
3573
+ * Button with built-in loading state.
3574
+ *
3575
+ * `loading` is the single source of truth for pending UI:
3576
+ * - sets `disabled` (forwarded to native button)
3577
+ * - sets `aria-busy="true"` for assistive tech
3578
+ * - prepends an animated spinner before the label
3579
+ * - replaces `children` with `loadingText` if provided (otherwise label stays)
3580
+ *
3581
+ * @component
3582
+ * @layer composed
3583
+ *
3584
+ * @param {boolean} loading - Pending state.
3585
+ * @param {React.ReactNode} loadingText - Optional override label while loading.
3586
+ * @param disabled
3587
+ * @param children
3588
+ * @param rest
3589
+ */
3590
+ declare function StatefulButton({ loading, loadingText, disabled, children, ...rest }: StatefulButtonProps): react_jsx_runtime.JSX.Element;
3591
+
3592
+ declare const PROVIDERS: readonly ["google", "github", "apple", "microsoft", "x", "discord", "facebook", "linkedin", "medium", "slack", "reddit", "paypal", "stripe", "gitlab", "dribbble", "tiktok"];
3593
+ type SocialProvider = (typeof PROVIDERS)[number];
3594
+ /**
3595
+ * Props for {@link SocialAuthButton}. Inherits {@link StatefulButtonProps},
3596
+ * but widens `iconWeight` to {@link BrandIconWeight} so the colored brand
3597
+ * variant can be requested per-instance.
3598
+ *
3599
+ * The visible label is resolved with the precedence:
3600
+ * `children` > `label` > `"Continue with {Provider}"`
3601
+ */
3602
+ interface SocialAuthButtonProps extends Omit<StatefulButtonProps, "iconWeight"> {
3603
+ /** Identity provider — drives icon and default label. */
3604
+ provider: SocialProvider;
3605
+ /** Override the visible label. Default: "Continue with {Provider}". */
3606
+ label?: React$1.ReactNode;
3607
+ /**
3608
+ * Icon weight. Accepts the four Phosphor weights (theme-aware via the
3609
+ * Saasflare provider chain) plus the brand-locked `"colorful"` variant.
3610
+ */
3611
+ iconWeight?: BrandIconWeight;
3612
+ }
3613
+ /**
3614
+ * Generic provider-branded auth button.
3615
+ *
3616
+ * Defaults: `variant="outline"` `intent="neutral"`.
3617
+ *
3618
+ * The Phosphor weights (`regular | bold | fill | duotone`) inherit from
3619
+ * `<SaasflareProvider iconWeight="…">` via {@link useSaasflareProps}; the
3620
+ * `colorful` weight is opt-in per-instance and bypasses the provider chain
3621
+ * because brand colors are not themable.
3622
+ *
3623
+ * @component
3624
+ * @layer brand
3625
+ */
3626
+ declare function SocialAuthButton({ provider, label, variant, intent, fullWidth, surface, radius, animated, iconWeight, children, ...rest }: SocialAuthButtonProps): react_jsx_runtime.JSX.Element;
3627
+ type ProviderShortcutProps = Omit<SocialAuthButtonProps, "provider">;
3628
+ declare const GoogleAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3629
+ declare const GitHubAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3630
+ declare const AppleAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3631
+ declare const MicrosoftAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3632
+ declare const XAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3633
+ declare const DiscordAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3634
+ declare const FacebookAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3635
+ declare const LinkedInAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3636
+ declare const MediumAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3637
+ declare const SlackAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3638
+ declare const RedditAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3639
+ declare const PayPalAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3640
+ declare const StripeAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3641
+ declare const GitLabAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3642
+ declare const DribbbleAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3643
+ declare const TikTokAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
3644
+
3645
+ /**
3646
+ * Theme mode toggle button with Sun/Moon icons.
3647
+ *
3648
+ * @component
3649
+ * @layer core
3650
+ *
3651
+ * @param {object} props - Component props
3652
+ * @param {boolean} [props.showText=false] - Whether to show the label text visibly
3653
+ * @param {string} [props.textLight] - Label shown while in light mode (prompting switch to dark)
3654
+ * @param {string} [props.textDark] - Label shown while in dark mode (prompting switch to light)
3655
+ * @param {string} [props.className] - Additional CSS class names
3656
+ * @returns {JSX.Element | null} The toggle button, or null before hydration
3657
+ */
3658
+ interface ThemeModeToggleProps extends SaasflareComponentProps {
3659
+ /** Whether to show the label text visibly. */
3660
+ showText?: boolean;
3661
+ /** Label shown while in light mode (prompting switch to dark). */
3662
+ textLight?: string;
3663
+ /** Label shown while in dark mode (prompting switch to light). */
3664
+ textDark?: string;
3665
+ /** Additional CSS class names. */
3666
+ className?: string;
3667
+ /**
3668
+ * SSR-known resolved theme (`"dark"` or `"light"`) — typically read from a
3669
+ * cookie in the parent server component. When provided, the button skips
3670
+ * its internal mount-gate and renders the correct sun/moon glyph on the
3671
+ * very first paint, eliminating the brief blank frame caused by
3672
+ * `next-themes` returning `undefined` during SSR.
3673
+ *
3674
+ * Leave undefined for the legacy mount-gated behaviour.
3675
+ */
3676
+ initialResolvedTheme?: 'light' | 'dark';
3677
+ }
3678
+ declare function ThemeModeToggle({ showText, textLight, textDark, className, surface, radius, animated, iconWeight, initialResolvedTheme, }: ThemeModeToggleProps): JSX.Element | null;
3679
+
3680
+ /**
3681
+ * @fileoverview Three-segment theme toggle (light / dark / system).
3682
+ *
3683
+ * Pill-shaped segmented control with Sun, Moon, and Monitor icons. Built on
3684
+ * the design-system `ToggleGroup` primitive (Pattern B — CSS-motion).
3685
+ *
3686
+ * Three appearances:
3687
+ * - `"icon"` (default) — segments are small circles floating inside the
3688
+ * rail. The active segment is filled with `--background` and a subtle
3689
+ * ring. Segment shape is always pill, independent of the rail's
3690
+ * `radius`.
3691
+ * - `"icon-inherit"` — same compact icon footprint as `"icon"`, but each
3692
+ * segment's border-radius matches the rail's `radius`. Use this when
3693
+ * `radius="sharp"` should propagate to the segments too.
3694
+ * - `"button"` — segments fill the rail end-to-end. The active segment
3695
+ * matches the rail's outer corner radius on its outer edge and stays
3696
+ * flat on its inner edge so it slots cleanly into the rail.
3697
+ *
3698
+ * The `radius` prop drives the rail's outer border-radius. Default is
3699
+ * `"pill"` (`rounded-full`). Override with `radius="sharp" | "soft" |
3700
+ * "rounded" | "pill"` — segment corners adapt automatically in
3701
+ * `"icon-inherit"` and `"button"` appearances.
3702
+ *
3703
+ * Supports `next-themes` natively. Renders `null` until hydrated to avoid
3704
+ * SSR/CSR mismatch on the active segment. When the System segment is
3705
+ * active, its `title` reflects the OS-resolved theme (e.g.
3706
+ * "System mode (currently dark)") so users see what their preference
3707
+ * resolves to.
3708
+ *
3709
+ * @module packages/ui/components/composed/theme-mode-multi-toggle
3710
+ * @package ui
3711
+ *
3712
+ * @component
3713
+ * @example
3714
+ * import { ThemeModeMultiToggle } from '@saasflare/ui';
3715
+ * <ThemeModeMultiToggle />
3716
+ *
3717
+ * @example
3718
+ * // Inherit-radius icons (segments adopt the rail's radius)
3719
+ * <ThemeModeMultiToggle appearance="icon-inherit" radius="sharp" />
3720
+ *
3721
+ * @example
3722
+ * // Button appearance with rounded geometry
3723
+ * <ThemeModeMultiToggle appearance="button" radius="rounded" />
3724
+ */
3725
+
3726
+ /** Available theme modes — mirrors next-themes' `theme` prop. */
3727
+ type ThemeMode = "light" | "dark" | "system";
3728
+ /** Visual appearance of the segments. */
3729
+ type ThemeModeMultiToggleAppearance = "icon" | "icon-inherit" | "button";
3730
+ interface ThemeModeMultiToggleProps extends SaasflareComponentProps {
3731
+ /** Override the default screen-reader labels per segment. */
3732
+ labels?: Partial<Record<ThemeMode, string>>;
3733
+ /** Additional class names applied to the rail. */
3734
+ className?: string;
3735
+ /** Segment size — matches the Toggle/ToggleGroup `size` axis. */
3736
+ size?: "sm" | "default" | "lg";
3737
+ /**
3738
+ * Visual appearance of the segments.
3739
+ *
3740
+ * - `"icon"` (default): small floating circles, always pill.
3741
+ * - `"icon-inherit"`: small floating shapes that match the rail's `radius`.
3742
+ * - `"button"`: segments fill the rail; outer corners match the rail's
3743
+ * `radius`, inner corners stay flat so the segment slots in.
3744
+ *
3745
+ * @default "icon"
3746
+ */
3747
+ appearance?: ThemeModeMultiToggleAppearance;
3748
+ /**
3749
+ * SSR-known theme mode (typically read from a cookie in the parent server
3750
+ * component). When provided, the component skips its internal mount-gate
3751
+ * and renders the matching segment as active on the very first paint —
3752
+ * eliminating the brief invisible / wrong-segment frame caused by
3753
+ * `next-themes` returning `undefined` during SSR.
3754
+ *
3755
+ * Leave undefined for the legacy mount-gated behaviour (renders `null`
3756
+ * until mounted).
3757
+ */
3758
+ initialMode?: ThemeMode;
3759
+ }
3760
+ /**
3761
+ * Three-segment theme switcher (light / dark / system).
3762
+ *
3763
+ * @component
3764
+ * @layer ui
3765
+ */
3766
+ declare function ThemeModeMultiToggle({ labels, className, size, appearance, surface, radius, animated, iconWeight, initialMode, }: ThemeModeMultiToggleProps): React$1.JSX.Element | null;
1695
3767
 
1696
3768
  /**
1697
3769
  * Props for the TopLoadingBar component.
@@ -1739,4 +3811,4 @@ interface UserAvatarProps {
1739
3811
  */
1740
3812
  declare function UserAvatar({ src, name, initials, size, className }: UserAvatarProps): react_jsx_runtime.JSX.Element;
1741
3813
 
1742
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, AnimatedTooltip, AspectRatio, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxList, ComboboxSeparator, ComboboxTrigger, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataToolbar, DataToolbarActions, DataToolbarFilters, DataToolbarSearch, type Density, DirectionProvider, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Icons, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Intent, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, type Measurement, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricCard, type MetricCardProps, type MetricTrend, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageHeader, type PageHeaderProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, type PaginationRangeItem, Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PricingCard, type PricingCardProps, Progress, RadioGroup, RadioGroupItem, Radius, RadiusProp, SaasflareComponentProps, type SaasflareMotion, SaasflareProvider, type SaasflareProviderProps, SaasflareScript, type SaasflareScriptProps, SaasflareShell, type SaasflareShellProps, ScrollArea, ScrollBar, ScrollToTopButton, SearchField, type SearchFieldProps, SectionCard, type SectionCardProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsSection, type SettingsSectionProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, type Size, Skeleton, Slider, SmoothScrollProvider, type SmoothScrollProviderProps, Spinner, StyleVariant, Surface, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeModeToggle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, type TooltipItem, TooltipProvider, TooltipTrigger, TopLoadingBar, type TopLoadingBarProps, TypewriterText, type UseDisclosureOptions, type UseDisclosureReturn, type UseMeasureReturn, type UsePaginationOptions, type UsePaginationReturn, UserAvatar, type UserAvatarProps, badgeVariants, buttonGroupVariants, cn, fadeIn, navigationMenuTriggerStyle, noMotion, scaleIn, slideDown, slideUp, spring, springBouncy, springGentle, springStiff, toggleVariants, useAnimation, useDirection, useDisclosure, useFormField, useIsMobile, useMeasure, usePagination, useReducedMotion, useSaasflareMotion, useSaasflareTheme, useSidebar };
3814
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, AnimatedTooltip, AppleAuthButton, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, AspectRatio, AudioPlayer, type AudioPlayerProps, AuroraBackground, type AuroraBackgroundProps, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, type BadgeProps, BarList, type BarListItem, type BarListProps, BentoGrid, BentoGridItem, type BentoGridItemProps, type BentoGridProps, BlurFade, type BlurFadeProps, BorderBeam, type BorderBeamProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, ButtonProps, Callout, type CalloutIntent, type CalloutProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CaretDownIcon, CaretLeftIcon, CaretRightIcon, CaretUpIcon, CategoryBar, type CategoryBarProps, type CategoryBarSegment, CheckCircleIcon, CheckIcon, Checkbox, CircleIcon, CircleNotchIcon, CodeBlock, type CodeBlockProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxList, ComboboxSeparator, ComboboxTrigger, Compare, type CompareProps, Confetti, type ConfettiProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Countdown, type CountdownProps, type CountdownValue, DataToolbar, DataToolbarActions, DataToolbarFilters, DataToolbarSearch, DatePicker, type DatePickerProps, type DateRange, DateRangePicker, type DateRangePickerProps, type Density, DirectionProvider, DiscordAuthButton, Dock, DockItem, type DockItemProps, type DockProps, DotsSixVerticalIcon, DotsThreeIcon, DribbbleAuthButton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, type DropzoneProps, type DropzoneRejection, type DropzoneRejectionReason, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, FacebookAuthButton, FeatureCard, type FeatureCardProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FlipWords, type FlipWordsProps, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GalleryLightbox, type GalleryLightboxProps, GitHubAuthButton, GitLabAuthButton, GlowingEffect, type GlowingEffectProps, GoogleAuthButton, GradientText, type GradientTextProps, HeroVideoDialog, type HeroVideoDialogProps, Hotspot, HotspotMarker, type HotspotMarkerProps, type HotspotProps, HoverCard, HoverCardContent, HoverCardTrigger, IPhoneMock, type IPhoneMockProps, IconWeight, Icons, ImageSwapHover, type ImageSwapHoverProps, InfoIcon, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Intent, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, LinkedInAuthButton, MagnifyingGlassIcon, Marquee, type MarqueeProps, type Measurement, MediumAuthButton, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricCard, type MetricCardProps, type MetricTrend, MicrosoftAuthButton, MinusIcon, MonitorIcon, MoonIcon, MouseGradientBlob, type MouseGradientBlobProps, MovingBorder, type MovingBorderProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NotificationCenter, type NotificationCenterProps, type NotificationItem, NumberInput, type NumberInputProps, PageHeader, type PageHeaderProps, PageTransition, type PageTransitionProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, type PaginationRangeItem, Palette, ParallaxSection, type ParallaxSectionProps, ParticlesBackground, type ParticlesBackgroundProps, PauseIcon, PayPalAuthButton, PhosphorIconProps, PlayIcon, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PossibleRef, PricingCard, type PricingCardProps, Progress, ProgressCircle, type ProgressCircleProps, type ProgressCircleSize, QuotesIcon, RadioGroup, RadioGroupItem, Radius, RadiusProp, Rating, type RatingProps, type RatingSize, RedditAuthButton, RetroGrid, type RetroGridProps, RevealOnScroll, type RevealOnScrollProps, PROVIDERS as SOCIAL_AUTH_PROVIDERS, SaasflareComponentProps, type SaasflareMotion, SaasflareProvider, type SaasflareProviderProps, SaasflareScript, type SaasflareScriptProps, SaasflareShell, type SaasflareShellProps, SafariMock, type SafariMockProps, ScrollArea, ScrollBar, ScrollToTopButton, SearchField, type SearchFieldProps, SectionCard, type SectionCardProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsSection, type SettingsSectionProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, ShimmerButton, type ShimmerButtonProps, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarSimpleIcon, SidebarTrigger, type Size, Skeleton, SlackAuthButton, Slider, SmoothScrollProvider, type SmoothScrollProviderProps, SocialAuthButton, type SocialAuthButtonProps, SocialButton, type SocialButtonProps, type SocialLink, type SocialProvider, SparkChart, type SparkChartProps, type SparkChartVariant, Spinner, SpotlightCard, type SpotlightCardProps, StatCard, type StatCardProps, StatefulButton, type StatefulButtonProps, Step, type StepProps, Steps, type StepsProps, type StickyScrollItem, StickyScrollReveal, type StickyScrollRevealProps, StripeAuthButton, StyleVariant, SunIcon, Surface, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagInput, type TagInputProps, TeamCard, type TeamCardProps, TestimonialCard, type TestimonialCardProps, TextGenerateEffect, type TextGenerateEffectProps, Textarea, ThemeModeMultiToggle, type ThemeModeMultiToggleAppearance, type ThemeModeMultiToggleProps, ThemeModeToggle, TikTokAuthButton, Timeline, TimelineItem, type TimelineItemProps, type TimelineProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, type TooltipItem, TooltipProvider, TooltipTrigger, TopLoadingBar, type TopLoadingBarProps, TracingBeam, type TracingBeamProps, Tracker, type TrackerBlock, type TrackerProps, type TreeNode, TreeView, type TreeViewProps, TypewriterText, type UseDisclosureOptions, type UseDisclosureReturn, type UseFileDialogOptions, type UseFileDialogReturn, type UseIntervalOptions, type UseIntervalReturn, type UseLocalStorageOptions, type UseMeasureReturn, type UsePaginationOptions, type UsePaginationReturn, UserAvatar, type UserAvatarProps, WarningIcon, XAuthButton, XCircleIcon, XIcon, badgeVariants, buttonGroupVariants, cn, fadeIn, navigationMenuTriggerStyle, noMotion, scaleIn, slideDown, slideUp, spring, springBouncy, springGentle, springStiff, toggleVariants, useAnimation, useCountdown, useDirection, useDisclosure, useFileDialog, useFocusTrap, useFormField, useInterval, useIsMobile, useLocalStorage, useMeasure, useMergedRef, usePagination, useReducedMotion, useSaasflareMotion, useSaasflareTheme, useSidebar };