@saasflare/ui 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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-WPOOC2FX.mjs → chunk-2ONA6OMO.mjs} +33 -44
  6. package/dist/{chunk-RW2S3KNB.mjs → chunk-5C65JNGY.mjs} +7 -6
  7. package/dist/{chunk-DNLCSV5M.js → chunk-7UD3SGPP.js} +32 -43
  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 +974 -31
  47. package/dist/index.d.ts +974 -31
  48. package/dist/index.js +2994 -556
  49. package/dist/index.mjs +2488 -201
  50. package/dist/{use-saasflare-props-NrM2Glmp.d.ts → use-saasflare-props-BrjMhU0U.d.mts} +53 -4
  51. package/dist/{use-saasflare-props-NrM2Glmp.d.mts → 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 +487 -3
  55. package/styles/surfaces.css +89 -10
  56. package/styles/theme.css +41 -19
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,115 @@ 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
+ /** Options for {@link useFileDialog}. */
328
+ interface UseFileDialogOptions {
329
+ /** MIME types or extensions to filter (matches `<input accept>`). */
330
+ accept?: string;
331
+ /** Allow multiple selection. Default: `false`. */
332
+ multiple?: boolean;
333
+ /** Restrict to a folder picker (only supported in Chromium). */
334
+ directory?: boolean;
335
+ /** Camera capture mode for mobile (`"user"` | `"environment"`). */
336
+ capture?: "user" | "environment";
337
+ /** Called after the user picks files. */
338
+ onChange?: (files: File[]) => void;
339
+ }
340
+ /** Return value of {@link useFileDialog}. */
341
+ interface UseFileDialogReturn {
342
+ /** Most recently picked files (empty array if reset/never opened). */
343
+ files: File[];
344
+ /** Open the native file picker. */
345
+ open: () => void;
346
+ /** Clear the current selection. */
347
+ reset: () => void;
348
+ }
349
+ /**
350
+ * Returns an `open()` trigger that pops the native file picker, plus the
351
+ * selected `files`. No DOM rendered by the consumer is required — the hook
352
+ * mounts a hidden `<input>` lazily on first call.
353
+ *
354
+ * @param options - Configuration mirroring `<input type="file">` attributes.
355
+ * @returns The selected files and control callbacks.
356
+ */
357
+ declare function useFileDialog(options?: UseFileDialogOptions): UseFileDialogReturn;
358
+
224
359
  /**
225
360
  * @fileoverview Shared motion presets for premium UI components.
226
361
  * @module packages/core/components/ui/motion-config
@@ -430,6 +565,77 @@ type Size = "xs" | "sm" | "md" | "lg" | "xl";
430
565
  */
431
566
  type Density = "compact" | "normal" | "comfortable";
432
567
 
568
+ /**
569
+ * @fileoverview Base primitive for brand-logo Phosphor icons.
570
+ *
571
+ * Brand logos extend the standard four Phosphor weights with a fifth,
572
+ * `"colorful"` — the canonical multi-color brand mark from Iconify's `logos:`
573
+ * set. The colorful path can't reuse {@link IconBase} because brand SVGs
574
+ * have non-square viewBoxes (Apple is 256×315, Discord is 256×199, …) and
575
+ * use hardcoded brand colors instead of `currentColor`.
576
+ *
577
+ * BrandIconBase forks the render at the top:
578
+ * - weight === "colorful" → emit own `<svg>` with the brand viewBox + content
579
+ * - otherwise → delegate to {@link IconBase}
580
+ *
581
+ * @module @saasflare/ui/components/ui/phosphor/brand-icon-base
582
+ */
583
+
584
+ /** Brand-logo weight set: standard Phosphor weights + the colored brand variant. */
585
+ type BrandIconWeight = IconWeight | "colorful";
586
+
587
+ declare const ArrowLeftIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
588
+
589
+ declare const ArrowRightIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
590
+
591
+ declare const ArrowUpIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
592
+
593
+ declare const CaretDownIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
594
+
595
+ declare const CaretLeftIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
596
+
597
+ declare const CaretRightIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
598
+
599
+ declare const CaretUpIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
600
+
601
+ declare const CheckIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
602
+
603
+ declare const CheckCircleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
604
+
605
+ declare const CircleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
606
+
607
+ declare const CircleNotchIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
608
+
609
+ declare const DotsSixVerticalIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
610
+
611
+ declare const DotsThreeIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
612
+
613
+ declare const InfoIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
614
+
615
+ declare const MagnifyingGlassIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
616
+
617
+ declare const MinusIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
618
+
619
+ declare const MonitorIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
620
+
621
+ declare const MoonIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
622
+
623
+ declare const PauseIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
624
+
625
+ declare const PlayIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
626
+
627
+ declare const QuotesIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
628
+
629
+ declare const SidebarSimpleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
630
+
631
+ declare const SunIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
632
+
633
+ declare const WarningIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
634
+
635
+ declare const XIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
636
+
637
+ declare const XCircleIcon: React$1.ForwardRefExoticComponent<PhosphorIconProps & React$1.RefAttributes<SVGSVGElement>>;
638
+
433
639
  /** Context value exposed by useSaasflareTheme(). */
434
640
  interface SaasflareThemeContextType {
435
641
  /** Active brand palette id, or null when using baseline. */
@@ -438,12 +644,16 @@ interface SaasflareThemeContextType {
438
644
  surface: StyleVariant;
439
645
  /** Active radius preset. */
440
646
  radius: Radius;
647
+ /** Active icon weight for component-rendered Phosphor icons. */
648
+ iconWeight: IconWeight;
441
649
  /** Set the active brand palette (persists to localStorage). */
442
650
  setPalette: (id: string) => void;
443
651
  /** Set the active surface style (persists to localStorage). */
444
652
  setSurface: (style: StyleVariant) => void;
445
653
  /** Set the active radius preset (persists to localStorage). */
446
654
  setRadius: (radius: Radius) => void;
655
+ /** Set the active icon weight (persists to localStorage). */
656
+ setIconWeight: (weight: IconWeight) => void;
447
657
  }
448
658
  /**
449
659
  * Access the Saasflare theme context.
@@ -478,9 +688,19 @@ interface SaasflareProviderProps {
478
688
  * - Omit to defer: uses persisted preference if any, otherwise "rounded"
479
689
  */
480
690
  radius?: RadiusProp;
481
- /** Global animation kill switch. @default true */
691
+ /**
692
+ * Default icon weight for component-rendered Phosphor icons.
693
+ * - IconWeight ("regular" | "bold" | "fill" | "duotone") → forces the value
694
+ * - Omit to defer: uses persisted preference if any, otherwise "regular"
695
+ */
696
+ iconWeight?: IconWeight;
697
+ /**
698
+ * Global animation kill switch.
699
+ * - boolean → forces the value
700
+ * - Omit to defer: uses persisted preference if any, otherwise `true`
701
+ */
482
702
  animated?: boolean;
483
- /** Enable smooth scrolling site-wide. @default false */
703
+ /** Enable smooth scrolling site-wide. @default true */
484
704
  smoothScrolling?: boolean;
485
705
  /**
486
706
  * Skip rendering the pre-hydration FOUT-prevention script.
@@ -520,7 +740,7 @@ interface SaasflareProviderProps {
520
740
  * @component
521
741
  * @package ui
522
742
  */
523
- declare function SaasflareProvider({ children, theme, palette, surface, radius, animated, smoothScrolling, disableScript, scriptNonce, storageKey, themeStorageKey, }: SaasflareProviderProps): react_jsx_runtime.JSX.Element;
743
+ declare function SaasflareProvider({ children, theme, palette, surface, radius, iconWeight, animated, smoothScrolling, disableScript, scriptNonce, storageKey, themeStorageKey, }: SaasflareProviderProps): react_jsx_runtime.JSX.Element;
524
744
 
525
745
  /** Props for {@link SaasflareShell}. */
526
746
  interface SaasflareShellProps extends Omit<SaasflareProviderProps, "children" | "disableScript" | "scriptNonce"> {
@@ -665,7 +885,7 @@ declare function AlertDialogCancel({ className, ...props }: React$1.ComponentPro
665
885
  declare function Accordion({ ...props }: React$1.ComponentProps<typeof AccordionPrimitive.Root>): react_jsx_runtime.JSX.Element;
666
886
  interface AccordionItemProps extends Omit<React$1.ComponentProps<typeof AccordionPrimitive.Item>, keyof SaasflareComponentProps>, SaasflareComponentProps {
667
887
  }
668
- declare function AccordionItem({ className, surface, radius, animated, ...props }: AccordionItemProps): react_jsx_runtime.JSX.Element;
888
+ declare function AccordionItem({ className, surface, radius, animated, iconWeight, ...props }: AccordionItemProps): react_jsx_runtime.JSX.Element;
669
889
  /**
670
890
  * Accordion trigger with animated chevron indicator.
671
891
  *
@@ -711,7 +931,7 @@ declare function Textarea({ className, surface, radius, animated, ...props }: Te
711
931
 
712
932
  interface CheckboxProps extends Omit<React$1.ComponentProps<typeof CheckboxPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
713
933
  }
714
- declare function Checkbox({ className, surface, radius, animated, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
934
+ declare function Checkbox({ className, surface, radius, animated, iconWeight, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
715
935
 
716
936
  interface SwitchProps extends Omit<React$1.ComponentProps<typeof SwitchPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
717
937
  size?: "sm" | "default";
@@ -733,6 +953,41 @@ interface ProgressProps extends Omit<React$1.ComponentProps<typeof ProgressPrimi
733
953
  */
734
954
  declare function Progress({ className, value, surface, radius, animated, ...props }: ProgressProps): react_jsx_runtime.JSX.Element;
735
955
 
956
+ declare const SIZE_PX$1: {
957
+ readonly sm: 48;
958
+ readonly md: 64;
959
+ readonly lg: 96;
960
+ readonly xl: 128;
961
+ };
962
+ type ProgressCircleSize = keyof typeof SIZE_PX$1;
963
+ /** Props for the ProgressCircle component. */
964
+ interface ProgressCircleProps extends SaasflareComponentProps {
965
+ /** Current value in the range `[0, max]`. */
966
+ value: number;
967
+ /** Maximum value. Default: `100`. */
968
+ max?: number;
969
+ /** Size preset. Default: `"md"`. */
970
+ size?: ProgressCircleSize;
971
+ /** Ring stroke width in pixels. Default: derived from `size`. */
972
+ strokeWidth?: number;
973
+ /** Center content (e.g. the numeric label). */
974
+ children?: ReactNode;
975
+ /** Additional class names on the outer wrapper. */
976
+ className?: string;
977
+ /** Accessible label. Default: `"<value>%"`. */
978
+ "aria-label"?: string;
979
+ }
980
+ /**
981
+ * Circular progress indicator. Drop-in radial counterpart to Progress.
982
+ *
983
+ * @component
984
+ * @layer core
985
+ *
986
+ * @example
987
+ * <ProgressCircle value={72} />
988
+ */
989
+ declare function ProgressCircle({ value, max, size, strokeWidth, children, className, surface, radius, animated, "aria-label": ariaLabel, }: ProgressCircleProps): react_jsx_runtime.JSX.Element;
990
+
736
991
  /**
737
992
  * Badge variant definitions.
738
993
  *
@@ -799,7 +1054,7 @@ declare function SelectTrigger({ className, size, children, ...props }: React$1.
799
1054
  }): react_jsx_runtime.JSX.Element;
800
1055
  interface SelectContentProps extends Omit<React$1.ComponentProps<typeof SelectPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
801
1056
  }
802
- declare function SelectContent({ className, children, position, surface, radius, animated, ...props }: SelectContentProps): react_jsx_runtime.JSX.Element;
1057
+ declare function SelectContent({ className, children, position, surface, radius, animated, iconWeight, ...props }: SelectContentProps): react_jsx_runtime.JSX.Element;
803
1058
  declare function SelectLabel({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Label>): react_jsx_runtime.JSX.Element;
804
1059
  declare function SelectItem({ className, children, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Item>): react_jsx_runtime.JSX.Element;
805
1060
  declare function SelectSeparator({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Separator>): react_jsx_runtime.JSX.Element;
@@ -814,7 +1069,7 @@ declare function DropdownMenuSub({ ...props }: React$1.ComponentProps<typeof Dro
814
1069
  declare function DropdownMenuRadioGroup({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): react_jsx_runtime.JSX.Element;
815
1070
  interface DropdownMenuContentProps extends Omit<React$1.ComponentProps<typeof DropdownMenuPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
816
1071
  }
817
- declare function DropdownMenuContent({ className, sideOffset, surface, radius, animated, ...props }: DropdownMenuContentProps): react_jsx_runtime.JSX.Element;
1072
+ declare function DropdownMenuContent({ className, sideOffset, surface, radius, animated, iconWeight, ...props }: DropdownMenuContentProps): react_jsx_runtime.JSX.Element;
818
1073
  declare function DropdownMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
819
1074
  inset?: boolean;
820
1075
  variant?: "default" | "destructive";
@@ -838,7 +1093,7 @@ interface SheetContentProps extends Omit<React$1.ComponentProps<typeof DialogPri
838
1093
  side?: "top" | "right" | "bottom" | "left";
839
1094
  showCloseButton?: boolean;
840
1095
  }
841
- declare function SheetContent({ className, children, side, showCloseButton, surface, radius, animated, ...props }: SheetContentProps): react_jsx_runtime.JSX.Element;
1096
+ declare function SheetContent({ className, children, side, showCloseButton, surface, radius, animated, iconWeight, ...props }: SheetContentProps): react_jsx_runtime.JSX.Element;
842
1097
  declare function SheetHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
843
1098
  declare function SheetFooter({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
844
1099
  declare function SheetTitle({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Title>): react_jsx_runtime.JSX.Element;
@@ -880,7 +1135,7 @@ interface AlertProps extends Omit<React$1.ComponentProps<"div">, keyof Saasflare
880
1135
  * <AlertDescription>Something went wrong.</AlertDescription>
881
1136
  * </Alert>
882
1137
  */
883
- declare function Alert({ className, intent: intentProp, variant, surface, radius, animated, ...props }: AlertProps): react_jsx_runtime.JSX.Element;
1138
+ declare function Alert({ className, intent: intentProp, variant, surface, radius, animated, iconWeight, ...props }: AlertProps): react_jsx_runtime.JSX.Element;
884
1139
  /**
885
1140
  * Alert title text.
886
1141
  *
@@ -918,7 +1173,7 @@ declare function ContextMenuSubTrigger({ className, inset, children, ...props }:
918
1173
  declare function ContextMenuSubContent({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.SubContent>): react_jsx_runtime.JSX.Element;
919
1174
  interface ContextMenuContentProps extends Omit<React$1.ComponentProps<typeof ContextMenuPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
920
1175
  }
921
- declare function ContextMenuContent({ className, surface, radius, animated, ...props }: ContextMenuContentProps): react_jsx_runtime.JSX.Element;
1176
+ declare function ContextMenuContent({ className, surface, radius, animated, iconWeight, ...props }: ContextMenuContentProps): react_jsx_runtime.JSX.Element;
922
1177
  declare function ContextMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Item> & {
923
1178
  inset?: boolean;
924
1179
  variant?: "default" | "destructive";
@@ -933,7 +1188,7 @@ declare function ContextMenuShortcut({ className, ...props }: React$1.ComponentP
933
1188
 
934
1189
  interface MenubarProps extends Omit<React$1.ComponentProps<typeof MenubarPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
935
1190
  }
936
- declare function Menubar({ className, surface, radius, animated, ...props }: MenubarProps): react_jsx_runtime.JSX.Element;
1191
+ declare function Menubar({ className, surface, radius, animated, iconWeight, ...props }: MenubarProps): react_jsx_runtime.JSX.Element;
937
1192
  declare function MenubarMenu({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Menu>): react_jsx_runtime.JSX.Element;
938
1193
  declare function MenubarGroup({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Group>): react_jsx_runtime.JSX.Element;
939
1194
  declare function MenubarPortal({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Portal>): react_jsx_runtime.JSX.Element;
@@ -941,7 +1196,7 @@ declare function MenubarRadioGroup({ ...props }: React$1.ComponentProps<typeof M
941
1196
  declare function MenubarTrigger({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
942
1197
  interface MenubarContentProps extends Omit<React$1.ComponentProps<typeof MenubarPrimitive.Content>, keyof SaasflareComponentProps>, SaasflareComponentProps {
943
1198
  }
944
- declare function MenubarContent({ className, align, alignOffset, sideOffset, surface, radius, animated, ...props }: MenubarContentProps): react_jsx_runtime.JSX.Element;
1199
+ declare function MenubarContent({ className, align, alignOffset, sideOffset, surface, radius, animated, iconWeight, ...props }: MenubarContentProps): react_jsx_runtime.JSX.Element;
945
1200
  declare function MenubarItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Item> & {
946
1201
  inset?: boolean;
947
1202
  variant?: "default" | "destructive";
@@ -962,7 +1217,7 @@ declare function MenubarSubContent({ className, ...props }: React$1.ComponentPro
962
1217
  interface NavigationMenuProps extends Omit<React$1.ComponentProps<typeof NavigationMenuPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
963
1218
  viewport?: boolean;
964
1219
  }
965
- declare function NavigationMenu({ className, children, viewport, surface, radius, animated, ...props }: NavigationMenuProps): react_jsx_runtime.JSX.Element;
1220
+ declare function NavigationMenu({ className, children, viewport, surface, radius, animated, iconWeight, ...props }: NavigationMenuProps): react_jsx_runtime.JSX.Element;
966
1221
  declare function NavigationMenuList({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): react_jsx_runtime.JSX.Element;
967
1222
  declare function NavigationMenuItem({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): react_jsx_runtime.JSX.Element;
968
1223
  declare const navigationMenuTriggerStyle: (props?: class_variance_authority_types.ClassProp | undefined) => string;
@@ -1012,7 +1267,7 @@ declare function ToggleGroupItem({ className, children, variant, size, ...props
1012
1267
 
1013
1268
  interface RadioGroupProps extends Omit<React$1.ComponentProps<typeof RadioGroupPrimitive.Root>, keyof SaasflareComponentProps>, SaasflareComponentProps {
1014
1269
  }
1015
- declare function RadioGroup({ className, surface, radius, animated, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
1270
+ declare function RadioGroup({ className, surface, radius, animated, iconWeight, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
1016
1271
  declare function RadioGroupItem({ className, ...props }: React$1.ComponentProps<typeof RadioGroupPrimitive.Item>): react_jsx_runtime.JSX.Element;
1017
1272
 
1018
1273
  interface CollapsibleContentProps extends Omit<React$1.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>, keyof SaasflareComponentProps>, SaasflareComponentProps {
@@ -1032,13 +1287,13 @@ declare function ScrollBar({ className, orientation, ...props }: React$1.Compone
1032
1287
 
1033
1288
  interface SaasflareToasterProps extends Omit<ToasterProps, keyof SaasflareComponentProps>, SaasflareComponentProps {
1034
1289
  }
1035
- declare const Toaster: ({ surface, radius, animated, ...props }: SaasflareToasterProps) => react_jsx_runtime.JSX.Element;
1290
+ declare const Toaster: ({ surface, radius, animated, iconWeight, ...props }: SaasflareToasterProps) => react_jsx_runtime.JSX.Element;
1036
1291
 
1037
1292
  declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): react_jsx_runtime.JSX.Element;
1038
1293
 
1039
1294
  interface BreadcrumbProps extends Omit<React$1.ComponentProps<"nav">, keyof SaasflareComponentProps>, SaasflareComponentProps {
1040
1295
  }
1041
- declare function Breadcrumb({ surface, radius, animated, ...props }: BreadcrumbProps): react_jsx_runtime.JSX.Element;
1296
+ declare function Breadcrumb({ surface, radius, animated, iconWeight, ...props }: BreadcrumbProps): react_jsx_runtime.JSX.Element;
1042
1297
  declare function BreadcrumbList({ className, ...props }: React$1.ComponentProps<"ol">): react_jsx_runtime.JSX.Element;
1043
1298
  declare function BreadcrumbItem({ className, ...props }: React$1.ComponentProps<"li">): react_jsx_runtime.JSX.Element;
1044
1299
  declare function BreadcrumbLink({ asChild, className, ...props }: React$1.ComponentProps<"a"> & {
@@ -1221,7 +1476,7 @@ declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">):
1221
1476
  interface NativeSelectProps extends Omit<React$1.ComponentProps<"select">, "size" | keyof SaasflareComponentProps>, SaasflareComponentProps {
1222
1477
  size?: "sm" | "default";
1223
1478
  }
1224
- declare function NativeSelect({ className, size, surface, radius, animated, ...props }: NativeSelectProps): react_jsx_runtime.JSX.Element;
1479
+ declare function NativeSelect({ className, size, surface, radius, animated, iconWeight, ...props }: NativeSelectProps): react_jsx_runtime.JSX.Element;
1225
1480
  declare function NativeSelectOption({ ...props }: React$1.ComponentProps<"option">): react_jsx_runtime.JSX.Element;
1226
1481
  declare function NativeSelectOptGroup({ className, ...props }: React$1.ComponentProps<"optgroup">): react_jsx_runtime.JSX.Element;
1227
1482
 
@@ -1478,6 +1733,480 @@ interface MetricCardProps extends Omit<React$1.ComponentProps<"div">, keyof Saas
1478
1733
  */
1479
1734
  declare function MetricCard({ label, value, trend, icon, className, surface, radius, animated, ...props }: MetricCardProps): react_jsx_runtime.JSX.Element;
1480
1735
 
1736
+ /** A single row in the list. */
1737
+ interface BarListItem {
1738
+ /** Row label. */
1739
+ name: string;
1740
+ /** Numeric value driving the bar width. */
1741
+ value: number;
1742
+ /** Optional icon shown left of the label. */
1743
+ icon?: ReactNode;
1744
+ /** Optional click target for the row label (wraps in `<a>`). */
1745
+ href?: string;
1746
+ /** Optional per-row color override (any CSS color). */
1747
+ color?: string;
1748
+ }
1749
+ /** Props for the BarList component. */
1750
+ interface BarListProps extends SaasflareComponentProps {
1751
+ /** Rows to render. */
1752
+ data: BarListItem[];
1753
+ /** Formats the numeric value on the right edge. Default: `String(n)`. */
1754
+ valueFormatter?: (value: number) => string;
1755
+ /** Sort rows by value descending. Default: `true`. */
1756
+ sortDescending?: boolean;
1757
+ /** Maximum rows rendered (truncates after sort). */
1758
+ limit?: number;
1759
+ /** Additional class names. */
1760
+ className?: string;
1761
+ }
1762
+ /**
1763
+ * Horizontal bar list — common dashboard "top N" rankings pattern.
1764
+ *
1765
+ * @component
1766
+ * @layer core
1767
+ */
1768
+ declare function BarList({ data, valueFormatter, sortDescending, limit, className, surface, radius, animated, }: BarListProps): react_jsx_runtime.JSX.Element;
1769
+
1770
+ /** Visual variant of the spark chart. */
1771
+ type SparkChartVariant = "line" | "area" | "bar";
1772
+ /** Props for the SparkChart component. */
1773
+ interface SparkChartProps extends SaasflareComponentProps {
1774
+ /** Series of numeric points (length ≥ 2). */
1775
+ data: number[];
1776
+ /** Visual treatment. Default: `"area"`. */
1777
+ variant?: SparkChartVariant;
1778
+ /** Stroke / fill color (any CSS color). Default: `var(--primary)`. */
1779
+ color?: string;
1780
+ /** SVG width in pixels. Default: `64`. */
1781
+ width?: number;
1782
+ /** SVG height in pixels. Default: `24`. */
1783
+ height?: number;
1784
+ /** Line stroke width in pixels. Default: `1.5`. */
1785
+ strokeWidth?: number;
1786
+ /** Additional class names. */
1787
+ className?: string;
1788
+ /** Accessible label. */
1789
+ "aria-label"?: string;
1790
+ }
1791
+ /**
1792
+ * Inline mini chart for KPI tiles, table cells, and metric cards.
1793
+ *
1794
+ * @component
1795
+ * @layer core
1796
+ */
1797
+ declare function SparkChart({ data, variant, color, width, height, strokeWidth, className, surface, radius, animated, "aria-label": ariaLabel, }: SparkChartProps): react_jsx_runtime.JSX.Element | null;
1798
+
1799
+ /** A single tracker block. */
1800
+ interface TrackerBlock {
1801
+ /** Named color key (emerald|teal|blue|amber|red|rose|gray) or any CSS color. */
1802
+ color?: string;
1803
+ /** Tooltip text shown on hover. */
1804
+ tooltip?: ReactNode;
1805
+ /** Custom key (helps React when blocks rearrange). */
1806
+ key?: string | number;
1807
+ }
1808
+ /** Props for the Tracker component. */
1809
+ interface TrackerProps extends SaasflareComponentProps {
1810
+ /** Blocks to render, left-to-right. */
1811
+ data: TrackerBlock[];
1812
+ /** Height of each block in px. Default: `32`. */
1813
+ blockHeight?: number;
1814
+ /** Gap between blocks in px. Default: `2`. */
1815
+ gap?: number;
1816
+ /** Additional class names. */
1817
+ className?: string;
1818
+ }
1819
+ /**
1820
+ * Status segment grid (uptime/incident timeline).
1821
+ *
1822
+ * @component
1823
+ * @layer core
1824
+ */
1825
+ declare function Tracker({ data, blockHeight, gap, className, surface, radius, animated, }: TrackerProps): react_jsx_runtime.JSX.Element;
1826
+
1827
+ /** Reason a file was rejected by the dropzone's built-in validation. */
1828
+ type DropzoneRejectionReason = "too-large" | "type-mismatch";
1829
+ /** A rejected file with the reason. */
1830
+ interface DropzoneRejection {
1831
+ file: File;
1832
+ reason: DropzoneRejectionReason;
1833
+ }
1834
+ /** Props for the Dropzone component. */
1835
+ interface DropzoneProps extends SaasflareComponentProps {
1836
+ /** Called with `(accepted, rejected)` when the user drops or picks files. */
1837
+ onDrop?: (accepted: File[], rejected: DropzoneRejection[]) => void;
1838
+ /** MIME types or extensions to accept (matches `<input accept>`). */
1839
+ accept?: string;
1840
+ /** Maximum file size in bytes. */
1841
+ maxSize?: number;
1842
+ /** Allow multiple file selection. Default: `true`. */
1843
+ multiple?: boolean;
1844
+ /** Disable the dropzone. */
1845
+ disabled?: boolean;
1846
+ /** Render-prop body. Receives `isDragActive`. Falls back to the default UI. */
1847
+ children?: ReactNode | ((state: {
1848
+ isDragActive: boolean;
1849
+ }) => ReactNode);
1850
+ /** Additional class names. */
1851
+ className?: string;
1852
+ }
1853
+ /**
1854
+ * Drag-and-drop file upload area with click-to-open fallback.
1855
+ *
1856
+ * @component
1857
+ * @layer core
1858
+ */
1859
+ declare function Dropzone({ onDrop, accept, maxSize, multiple, disabled, children, className, surface, radius, animated, }: DropzoneProps): react_jsx_runtime.JSX.Element;
1860
+
1861
+ /** Inclusive date range, identical shape to react-day-picker's `DateRange`. */
1862
+ interface DateRange {
1863
+ from: Date | undefined;
1864
+ to?: Date | undefined;
1865
+ }
1866
+ /** Props for the DateRangePicker component. */
1867
+ interface DateRangePickerProps extends SaasflareComponentProps {
1868
+ /** Controlled value. */
1869
+ value?: DateRange;
1870
+ /** Uncontrolled default value. */
1871
+ defaultValue?: DateRange;
1872
+ /** Called when the user picks a new range. */
1873
+ onChange?: (range: DateRange | undefined) => void;
1874
+ /** Placeholder shown in the trigger when no range is set. */
1875
+ placeholder?: string;
1876
+ /** Number of months shown side-by-side. Default: `2`. */
1877
+ numberOfMonths?: number;
1878
+ /** Earliest pickable date. */
1879
+ minDate?: Date;
1880
+ /** Latest pickable date. */
1881
+ maxDate?: Date;
1882
+ /** Disable the trigger. */
1883
+ disabled?: boolean;
1884
+ /** Format function for the trigger label. Default: locale-aware `toLocaleDateString`. */
1885
+ formatRange?: (range: DateRange) => string;
1886
+ /** Additional class names on the trigger. */
1887
+ className?: string;
1888
+ }
1889
+ /**
1890
+ * Date-range input + popover calendar. Composes Button + Popover + Calendar.
1891
+ *
1892
+ * @component
1893
+ * @layer core
1894
+ */
1895
+ declare function DateRangePicker({ value, defaultValue, onChange, placeholder, numberOfMonths, minDate, maxDate, disabled, formatRange, className, surface, radius, animated, iconWeight, }: DateRangePickerProps): react_jsx_runtime.JSX.Element;
1896
+
1897
+ /** Props for the DatePicker component. */
1898
+ interface DatePickerProps extends SaasflareComponentProps {
1899
+ /** Controlled value. */
1900
+ value?: Date;
1901
+ /** Uncontrolled default value. */
1902
+ defaultValue?: Date;
1903
+ /** Called when the user picks a date. */
1904
+ onChange?: (date: Date | undefined) => void;
1905
+ /** Placeholder shown when no date is set. */
1906
+ placeholder?: string;
1907
+ /** Earliest pickable date. */
1908
+ minDate?: Date;
1909
+ /** Latest pickable date. */
1910
+ maxDate?: Date;
1911
+ /** Disable the trigger. */
1912
+ disabled?: boolean;
1913
+ /** Format function for the trigger label. Default: locale-aware. */
1914
+ formatDate?: (date: Date) => string;
1915
+ /** Additional class names on the trigger. */
1916
+ className?: string;
1917
+ }
1918
+ /**
1919
+ * Single-date input + popover calendar. Composes Button + Popover + Calendar.
1920
+ *
1921
+ * @component
1922
+ * @layer core
1923
+ */
1924
+ declare function DatePicker({ value, defaultValue, onChange, placeholder, minDate, maxDate, disabled, formatDate, className, surface, radius, animated, iconWeight, }: DatePickerProps): react_jsx_runtime.JSX.Element;
1925
+
1926
+ declare const INTENTS: readonly ["primary", "neutral", "success", "warning", "danger", "info"];
1927
+ type CalloutIntent = (typeof INTENTS)[number];
1928
+ /** Props for the Callout component. */
1929
+ interface CalloutProps extends SaasflareComponentProps {
1930
+ /** Color intent. Default: `"info"`. */
1931
+ intent?: CalloutIntent;
1932
+ /** Bold title rendered above the body. */
1933
+ title?: ReactNode;
1934
+ /** Leading icon (rendered in the same color as the intent stripe). */
1935
+ icon?: ReactNode;
1936
+ /** Body content. */
1937
+ children?: ReactNode;
1938
+ /** Additional class names. */
1939
+ className?: string;
1940
+ }
1941
+ /**
1942
+ * Inline emphasized message box with intent-driven coloring.
1943
+ *
1944
+ * @component
1945
+ * @layer core
1946
+ *
1947
+ * @example
1948
+ * <Callout intent="success" title="Saved">Your changes are live.</Callout>
1949
+ */
1950
+ declare function Callout({ intent, title, icon, children, className, surface, radius, animated, iconWeight, }: CalloutProps): react_jsx_runtime.JSX.Element;
1951
+
1952
+ /** Props for the TagInput component. */
1953
+ interface TagInputProps extends SaasflareComponentProps {
1954
+ /** Controlled list of tags. */
1955
+ value?: string[];
1956
+ /** Uncontrolled initial tags. */
1957
+ defaultValue?: string[];
1958
+ /** Called whenever the tag list changes. */
1959
+ onChange?: (tags: string[]) => void;
1960
+ /** Placeholder shown in the input. */
1961
+ placeholder?: string;
1962
+ /** Maximum number of tags accepted. */
1963
+ maxTags?: number;
1964
+ /** Characters that commit the current input as a tag. Default: `[",", "Enter"]`. */
1965
+ separators?: string[];
1966
+ /** Reject duplicate tags. Default: `true`. */
1967
+ unique?: boolean;
1968
+ /** Disable the input. */
1969
+ disabled?: boolean;
1970
+ /** Custom renderer for each pill. Falls back to the default pill UI. */
1971
+ renderTag?: (tag: string, onRemove: () => void) => ReactNode;
1972
+ /** Additional class names on the outer wrapper. */
1973
+ className?: string;
1974
+ /** Accessible label. */
1975
+ "aria-label"?: string;
1976
+ }
1977
+ /**
1978
+ * Input field that converts text into removable tag pills.
1979
+ *
1980
+ * @component
1981
+ * @layer core
1982
+ */
1983
+ 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;
1984
+
1985
+ /** Props for the NumberInput component. */
1986
+ interface NumberInputProps extends SaasflareComponentProps {
1987
+ /** Controlled value. */
1988
+ value?: number;
1989
+ /** Uncontrolled initial value. */
1990
+ defaultValue?: number;
1991
+ /** Called when the value changes (after clamp). */
1992
+ onChange?: (value: number) => void;
1993
+ /** Minimum allowed value. */
1994
+ min?: number;
1995
+ /** Maximum allowed value. */
1996
+ max?: number;
1997
+ /** Step for stepper buttons + arrow keys. Default: `1`. */
1998
+ step?: number;
1999
+ /** Decimal precision for display. Default: derived from `step`. */
2000
+ precision?: number;
2001
+ /** Placeholder shown when empty. */
2002
+ placeholder?: string;
2003
+ /** Disable the input. */
2004
+ disabled?: boolean;
2005
+ /** Read-only input. */
2006
+ readOnly?: boolean;
2007
+ /** Hide the stepper buttons. */
2008
+ hideSteppers?: boolean;
2009
+ /** Additional class names on the outer wrapper. */
2010
+ className?: string;
2011
+ /** Name attribute (for form submission). */
2012
+ name?: string;
2013
+ /** Accessible label. */
2014
+ "aria-label"?: string;
2015
+ }
2016
+ /**
2017
+ * Numeric input with stepper buttons and clamping.
2018
+ *
2019
+ * @component
2020
+ * @layer core
2021
+ */
2022
+ 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;
2023
+
2024
+ declare const SIZE_PX: {
2025
+ readonly sm: 14;
2026
+ readonly md: 20;
2027
+ readonly lg: 28;
2028
+ readonly xl: 36;
2029
+ };
2030
+ type RatingSize = keyof typeof SIZE_PX;
2031
+ /** Props for the Rating component. */
2032
+ interface RatingProps extends SaasflareComponentProps {
2033
+ /** Controlled value (0..count). */
2034
+ value?: number;
2035
+ /** Uncontrolled initial value. */
2036
+ defaultValue?: number;
2037
+ /** Called when the user clicks a star. */
2038
+ onChange?: (value: number) => void;
2039
+ /** Number of stars. Default: `5`. */
2040
+ count?: number;
2041
+ /** Allow half-star granularity. Default: `false`. */
2042
+ allowHalf?: boolean;
2043
+ /** Read-only display mode (no interaction, no hover preview). */
2044
+ readOnly?: boolean;
2045
+ /** Disable the rating. */
2046
+ disabled?: boolean;
2047
+ /** Star size. Default: `"md"`. */
2048
+ size?: RatingSize;
2049
+ /** Star color (any CSS color). Default: `var(--warning)` — brand-independent gold. */
2050
+ color?: string;
2051
+ /** Additional class names. */
2052
+ className?: string;
2053
+ /** Accessible label. */
2054
+ "aria-label"?: string;
2055
+ }
2056
+ /**
2057
+ * Star rating input with half-star and read-only support.
2058
+ *
2059
+ * @component
2060
+ * @layer core
2061
+ */
2062
+ 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;
2063
+
2064
+ /** A single segment of the bar. */
2065
+ interface CategoryBarSegment {
2066
+ /** Numeric value driving the segment width (auto-normalized). */
2067
+ value: number;
2068
+ /** Any CSS color. Falls back to a derived primary tint. */
2069
+ color?: string;
2070
+ /** Optional label shown below the segment when `showLabels` is true. */
2071
+ label?: string;
2072
+ }
2073
+ /** Props for the CategoryBar component. */
2074
+ interface CategoryBarProps extends SaasflareComponentProps {
2075
+ /** Segments to render, left-to-right. */
2076
+ segments: CategoryBarSegment[];
2077
+ /** Bar height in pixels. Default: `8`. */
2078
+ height?: number;
2079
+ /** Render labels + percentages under each segment. */
2080
+ showLabels?: boolean;
2081
+ /** Formats the percentage text. Default: `"NN%"`. */
2082
+ valueFormatter?: (percent: number) => string;
2083
+ /** Additional class names. */
2084
+ className?: string;
2085
+ /** Accessible label for the bar group. */
2086
+ "aria-label"?: string;
2087
+ }
2088
+ /**
2089
+ * Segmented progress bar with optional labels.
2090
+ *
2091
+ * @component
2092
+ * @layer core
2093
+ */
2094
+ declare function CategoryBar({ segments, height, showLabels, valueFormatter, className, surface, radius, animated, "aria-label": ariaLabel, }: CategoryBarProps): react_jsx_runtime.JSX.Element | null;
2095
+
2096
+ /** A single tree node. */
2097
+ interface TreeNode {
2098
+ /** Unique node id (stable across renders). */
2099
+ id: string;
2100
+ /** Display label or any ReactNode. */
2101
+ label: ReactNode;
2102
+ /** Leading icon (e.g. file/folder glyph). */
2103
+ icon?: ReactNode;
2104
+ /** Child nodes (omit for leaves). */
2105
+ children?: TreeNode[];
2106
+ /** Disable interaction for this node. */
2107
+ disabled?: boolean;
2108
+ }
2109
+ /** Props for the TreeView component. */
2110
+ interface TreeViewProps extends SaasflareComponentProps {
2111
+ /** Tree data, top-level nodes. */
2112
+ data: TreeNode[];
2113
+ /** Controlled expanded ids. */
2114
+ expanded?: string[];
2115
+ /** Uncontrolled initial expansion. */
2116
+ defaultExpanded?: string[];
2117
+ /** Called when a node is expanded/collapsed. */
2118
+ onExpand?: (ids: string[]) => void;
2119
+ /** Controlled selected id. */
2120
+ selected?: string | null;
2121
+ /** Uncontrolled initial selection. */
2122
+ defaultSelected?: string | null;
2123
+ /** Called when selection changes. */
2124
+ onSelect?: (id: string | null) => void;
2125
+ /** Additional class names on the root. */
2126
+ className?: string;
2127
+ }
2128
+ /**
2129
+ * Recursive expand/collapse tree with keyboard navigation.
2130
+ *
2131
+ * @component
2132
+ * @layer core
2133
+ */
2134
+ declare function TreeView({ data, expanded, defaultExpanded, onExpand, selected, defaultSelected, onSelect, className, surface, radius, animated, iconWeight, }: TreeViewProps): react_jsx_runtime.JSX.Element;
2135
+
2136
+ /** Props for the CodeBlock component. */
2137
+ interface CodeBlockProps extends SaasflareComponentProps {
2138
+ /** Plain source code (rendered as monospace, no highlighting). */
2139
+ code?: string;
2140
+ /** Pre-highlighted HTML — e.g. output from Shiki's `codeToHtml`. */
2141
+ highlighted?: string;
2142
+ /** Language label shown in the header (purely cosmetic). */
2143
+ language?: string;
2144
+ /** Filename shown left of the language badge. */
2145
+ filename?: string;
2146
+ /** Show 1-based line numbers in the gutter. */
2147
+ showLineNumbers?: boolean;
2148
+ /** Hide the top bar (copy button still floats inside the block). */
2149
+ hideHeader?: boolean;
2150
+ /** Hide the copy-to-clipboard button. */
2151
+ hideCopyButton?: boolean;
2152
+ /** Additional class names on the outer wrapper. */
2153
+ className?: string;
2154
+ }
2155
+ /**
2156
+ * Code block with filename header, language badge, copy button, and optional
2157
+ * line numbers. Highlighting is BYO (pass `highlighted` HTML or `code` text).
2158
+ *
2159
+ * @component
2160
+ * @layer core
2161
+ */
2162
+ declare function CodeBlock({ code, highlighted, language, filename, showLineNumbers, hideHeader, hideCopyButton, className, surface, radius, animated, }: CodeBlockProps): react_jsx_runtime.JSX.Element;
2163
+
2164
+ /** A single notification item. */
2165
+ interface NotificationItem {
2166
+ /** Stable unique id. */
2167
+ id: string;
2168
+ /** Bold title line. */
2169
+ title: ReactNode;
2170
+ /** Secondary body line. */
2171
+ description?: ReactNode;
2172
+ /** Display timestamp (already formatted — e.g. "5m ago"). */
2173
+ timestamp?: string;
2174
+ /** Whether the notification has been read. */
2175
+ read?: boolean;
2176
+ /** Optional leading icon. */
2177
+ icon?: ReactNode;
2178
+ /** Optional href — wraps the row in `<a>`. */
2179
+ href?: string;
2180
+ }
2181
+ /** Props for the NotificationCenter component. */
2182
+ interface NotificationCenterProps extends SaasflareComponentProps {
2183
+ /** Notifications to display. */
2184
+ items: NotificationItem[];
2185
+ /** Header title in the popover. Default: `"Notifications"`. */
2186
+ title?: string;
2187
+ /** Called when the user clicks a row (also passes the item). */
2188
+ onItemClick?: (item: NotificationItem) => void;
2189
+ /** Called when "Mark as read" is tapped on a row. */
2190
+ onMarkRead?: (id: string) => void;
2191
+ /** Called when "Mark all as read" is tapped. Hide the action by omitting this. */
2192
+ onMarkAllRead?: () => void;
2193
+ /** Custom empty-state content. */
2194
+ emptyState?: ReactNode;
2195
+ /** Maximum items rendered (older ones truncated). */
2196
+ limit?: number;
2197
+ /** Additional class names on the trigger button. */
2198
+ triggerClassName?: string;
2199
+ /** Additional class names on the popover content. */
2200
+ contentClassName?: string;
2201
+ }
2202
+ /**
2203
+ * Bell trigger + dropdown inbox of notifications.
2204
+ *
2205
+ * @component
2206
+ * @layer core
2207
+ */
2208
+ declare function NotificationCenter({ items, title, onItemClick, onMarkRead, onMarkAllRead, emptyState, limit, triggerClassName, contentClassName, surface, radius, animated, iconWeight, }: NotificationCenterProps): react_jsx_runtime.JSX.Element;
2209
+
1481
2210
  /** Props for the EmptyState component */
1482
2211
  interface EmptyStateProps extends Omit<React$1.ComponentProps<"div">, keyof SaasflareComponentProps>, SaasflareComponentProps {
1483
2212
  /** Icon or illustration element */
@@ -1536,7 +2265,7 @@ interface SearchFieldProps extends Omit<React$1.ComponentProps<"input">, "type"
1536
2265
  * loading={isSearching}
1537
2266
  * />
1538
2267
  */
1539
- declare function SearchField({ className, loading, onClear, value, surface, radius, animated, ...props }: SearchFieldProps): react_jsx_runtime.JSX.Element;
2268
+ declare function SearchField({ className, loading, onClear, value, surface, radius, animated, iconWeight, ...props }: SearchFieldProps): react_jsx_runtime.JSX.Element;
1540
2269
 
1541
2270
  /** Props for the SettingsSection component */
1542
2271
  interface SettingsSectionProps extends Omit<React$1.ComponentProps<"div">, keyof SaasflareComponentProps>, SaasflareComponentProps {
@@ -1606,7 +2335,7 @@ interface PricingCardProps extends Omit<React$1.ComponentProps<"div">, keyof Saa
1606
2335
  * featured
1607
2336
  * />
1608
2337
  */
1609
- declare function PricingCard({ name, price, period, description, features, cta, featured, className, surface, radius, animated, ...props }: PricingCardProps): react_jsx_runtime.JSX.Element;
2338
+ declare function PricingCard({ name, price, period, description, features, cta, featured, className, surface, radius, animated, iconWeight, ...props }: PricingCardProps): react_jsx_runtime.JSX.Element;
1610
2339
 
1611
2340
  interface DataToolbarProps extends Omit<React$1.ComponentProps<"div">, keyof SaasflareComponentProps>, SaasflareComponentProps {
1612
2341
  }
@@ -1647,6 +2376,30 @@ declare function DataToolbarFilters({ className, ...props }: React$1.ComponentPr
1647
2376
  */
1648
2377
  declare function DataToolbarActions({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
1649
2378
 
2379
+ /** Props for the AuroraBackground component. */
2380
+ interface AuroraBackgroundProps extends Omit<ComponentProps<"div">, keyof SaasflareComponentProps | "color">, SaasflareComponentProps {
2381
+ /**
2382
+ * Three ambient blob colors in order: top-left, right, bottom-left.
2383
+ * Default: curated peach + blue + violet showcase palette.
2384
+ */
2385
+ colors?: readonly [string, string, string];
2386
+ /** Overall blob opacity (0–1). Default: `0.55`. Auto-halved in dark mode via `dark:` modifier. */
2387
+ intensity?: number;
2388
+ }
2389
+ /**
2390
+ * Soft multi-color gradient backdrop for showcase, demo, and marketing sections.
2391
+ *
2392
+ * Renders three blurred radial blobs positioned at corners around the children
2393
+ * slot. Default palette is a fixed showcase combination (peach / blue / violet)
2394
+ * so the visual stays consistent across brand palettes; pass `colors` to switch
2395
+ * to brand-rotating tokens. Drift animation is on by default and respects
2396
+ * `prefers-reduced-motion`.
2397
+ *
2398
+ * @component
2399
+ * @layer core
2400
+ */
2401
+ declare function AuroraBackground({ colors, intensity, className, children, surface, radius, animated, ...props }: AuroraBackgroundProps): react_jsx_runtime.JSX.Element;
2402
+
1650
2403
  /**
1651
2404
  * Props for the ScrollToTopButton component.
1652
2405
  *
@@ -1675,6 +2428,91 @@ interface ScrollToTopButtonProps extends SaasflareComponentProps {
1675
2428
  */
1676
2429
  declare function ScrollToTopButton({ scrollContainerId, scrollOffset, className, ...sfProps }: ScrollToTopButtonProps): JSX.Element;
1677
2430
 
2431
+ /**
2432
+ * Props for {@link StatefulButton}. Extends {@link ButtonProps} with two
2433
+ * orthogonal stateful concerns. `asChild` is intentionally excluded — a
2434
+ * Slot-rendered button cannot own its own DOM children, so the spinner /
2435
+ * loading-text swap would be ambiguous.
2436
+ */
2437
+ interface StatefulButtonProps extends Omit<ButtonProps, "asChild"> {
2438
+ /** Pending state: forces disabled, shows spinner, swaps label when `loadingText` is set. */
2439
+ loading?: boolean;
2440
+ /** Optional label to show in place of children while `loading` is true. */
2441
+ loadingText?: React$1.ReactNode;
2442
+ }
2443
+ /**
2444
+ * Button with built-in loading state.
2445
+ *
2446
+ * `loading` is the single source of truth for pending UI:
2447
+ * - sets `disabled` (forwarded to native button)
2448
+ * - sets `aria-busy="true"` for assistive tech
2449
+ * - prepends an animated spinner before the label
2450
+ * - replaces `children` with `loadingText` if provided (otherwise label stays)
2451
+ *
2452
+ * @component
2453
+ * @layer composed
2454
+ *
2455
+ * @param {boolean} loading - Pending state.
2456
+ * @param {React.ReactNode} loadingText - Optional override label while loading.
2457
+ * @param disabled
2458
+ * @param children
2459
+ * @param rest
2460
+ */
2461
+ declare function StatefulButton({ loading, loadingText, disabled, children, ...rest }: StatefulButtonProps): react_jsx_runtime.JSX.Element;
2462
+
2463
+ declare const PROVIDERS: readonly ["google", "github", "apple", "microsoft", "x", "discord", "facebook", "linkedin", "medium", "slack", "reddit", "paypal", "stripe", "gitlab", "dribbble", "tiktok"];
2464
+ type SocialProvider = (typeof PROVIDERS)[number];
2465
+ /**
2466
+ * Props for {@link SocialAuthButton}. Inherits {@link StatefulButtonProps},
2467
+ * but widens `iconWeight` to {@link BrandIconWeight} so the colored brand
2468
+ * variant can be requested per-instance.
2469
+ *
2470
+ * The visible label is resolved with the precedence:
2471
+ * `children` > `label` > `"Continue with {Provider}"`
2472
+ */
2473
+ interface SocialAuthButtonProps extends Omit<StatefulButtonProps, "iconWeight"> {
2474
+ /** Identity provider — drives icon and default label. */
2475
+ provider: SocialProvider;
2476
+ /** Override the visible label. Default: "Continue with {Provider}". */
2477
+ label?: React$1.ReactNode;
2478
+ /**
2479
+ * Icon weight. Accepts the four Phosphor weights (theme-aware via the
2480
+ * Saasflare provider chain) plus the brand-locked `"colorful"` variant.
2481
+ */
2482
+ iconWeight?: BrandIconWeight;
2483
+ }
2484
+ /**
2485
+ * Generic provider-branded auth button.
2486
+ *
2487
+ * Defaults: `variant="outline"` `intent="neutral"`.
2488
+ *
2489
+ * The Phosphor weights (`regular | bold | fill | duotone`) inherit from
2490
+ * `<SaasflareProvider iconWeight="…">` via {@link useSaasflareProps}; the
2491
+ * `colorful` weight is opt-in per-instance and bypasses the provider chain
2492
+ * because brand colors are not themable.
2493
+ *
2494
+ * @component
2495
+ * @layer brand
2496
+ */
2497
+ declare function SocialAuthButton({ provider, label, variant, intent, fullWidth, surface, radius, animated, iconWeight, children, ...rest }: SocialAuthButtonProps): react_jsx_runtime.JSX.Element;
2498
+ type ProviderShortcutProps = Omit<SocialAuthButtonProps, "provider">;
2499
+ declare const GoogleAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2500
+ declare const GitHubAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2501
+ declare const AppleAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2502
+ declare const MicrosoftAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2503
+ declare const XAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2504
+ declare const DiscordAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2505
+ declare const FacebookAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2506
+ declare const LinkedInAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2507
+ declare const MediumAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2508
+ declare const SlackAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2509
+ declare const RedditAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2510
+ declare const PayPalAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2511
+ declare const StripeAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2512
+ declare const GitLabAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2513
+ declare const DribbbleAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2514
+ declare const TikTokAuthButton: (props: ProviderShortcutProps) => react_jsx_runtime.JSX.Element;
2515
+
1678
2516
  /**
1679
2517
  * Theme mode toggle button with Sun/Moon icons.
1680
2518
  *
@@ -1683,15 +2521,120 @@ declare function ScrollToTopButton({ scrollContainerId, scrollOffset, className,
1683
2521
  *
1684
2522
  * @param {object} props - Component props
1685
2523
  * @param {boolean} [props.showText=false] - Whether to show the label text visibly
1686
- * @param {string} [props.text] - Custom label text override
2524
+ * @param {string} [props.textLight] - Label shown while in light mode (prompting switch to dark)
2525
+ * @param {string} [props.textDark] - Label shown while in dark mode (prompting switch to light)
1687
2526
  * @param {string} [props.className] - Additional CSS class names
1688
2527
  * @returns {JSX.Element | null} The toggle button, or null before hydration
1689
2528
  */
1690
- declare function ThemeModeToggle({ showText, text, className, }: {
2529
+ interface ThemeModeToggleProps extends SaasflareComponentProps {
2530
+ /** Whether to show the label text visibly. */
1691
2531
  showText?: boolean;
1692
- text?: string;
2532
+ /** Label shown while in light mode (prompting switch to dark). */
2533
+ textLight?: string;
2534
+ /** Label shown while in dark mode (prompting switch to light). */
2535
+ textDark?: string;
2536
+ /** Additional CSS class names. */
2537
+ className?: string;
2538
+ /**
2539
+ * SSR-known resolved theme (`"dark"` or `"light"`) — typically read from a
2540
+ * cookie in the parent server component. When provided, the button skips
2541
+ * its internal mount-gate and renders the correct sun/moon glyph on the
2542
+ * very first paint, eliminating the brief blank frame caused by
2543
+ * `next-themes` returning `undefined` during SSR.
2544
+ *
2545
+ * Leave undefined for the legacy mount-gated behaviour.
2546
+ */
2547
+ initialResolvedTheme?: 'light' | 'dark';
2548
+ }
2549
+ declare function ThemeModeToggle({ showText, textLight, textDark, className, surface, radius, animated, iconWeight, initialResolvedTheme, }: ThemeModeToggleProps): JSX.Element | null;
2550
+
2551
+ /**
2552
+ * @fileoverview Three-segment theme toggle (light / dark / system).
2553
+ *
2554
+ * Pill-shaped segmented control with Sun, Moon, and Monitor icons. Built on
2555
+ * the design-system `ToggleGroup` primitive (Pattern B — CSS-motion).
2556
+ *
2557
+ * Three appearances:
2558
+ * - `"icon"` (default) — segments are small circles floating inside the
2559
+ * rail. The active segment is filled with `--background` and a subtle
2560
+ * ring. Segment shape is always pill, independent of the rail's
2561
+ * `radius`.
2562
+ * - `"icon-inherit"` — same compact icon footprint as `"icon"`, but each
2563
+ * segment's border-radius matches the rail's `radius`. Use this when
2564
+ * `radius="sharp"` should propagate to the segments too.
2565
+ * - `"button"` — segments fill the rail end-to-end. The active segment
2566
+ * matches the rail's outer corner radius on its outer edge and stays
2567
+ * flat on its inner edge so it slots cleanly into the rail.
2568
+ *
2569
+ * The `radius` prop drives the rail's outer border-radius. Default is
2570
+ * `"pill"` (`rounded-full`). Override with `radius="sharp" | "soft" |
2571
+ * "rounded" | "pill"` — segment corners adapt automatically in
2572
+ * `"icon-inherit"` and `"button"` appearances.
2573
+ *
2574
+ * Supports `next-themes` natively. Renders `null` until hydrated to avoid
2575
+ * SSR/CSR mismatch on the active segment. When the System segment is
2576
+ * active, its `title` reflects the OS-resolved theme (e.g.
2577
+ * "System mode (currently dark)") so users see what their preference
2578
+ * resolves to.
2579
+ *
2580
+ * @module packages/ui/components/composed/theme-mode-multi-toggle
2581
+ * @package ui
2582
+ *
2583
+ * @component
2584
+ * @example
2585
+ * import { ThemeModeMultiToggle } from '@saasflare/ui';
2586
+ * <ThemeModeMultiToggle />
2587
+ *
2588
+ * @example
2589
+ * // Inherit-radius icons (segments adopt the rail's radius)
2590
+ * <ThemeModeMultiToggle appearance="icon-inherit" radius="sharp" />
2591
+ *
2592
+ * @example
2593
+ * // Button appearance with rounded geometry
2594
+ * <ThemeModeMultiToggle appearance="button" radius="rounded" />
2595
+ */
2596
+
2597
+ /** Available theme modes — mirrors next-themes' `theme` prop. */
2598
+ type ThemeMode = "light" | "dark" | "system";
2599
+ /** Visual appearance of the segments. */
2600
+ type ThemeModeMultiToggleAppearance = "icon" | "icon-inherit" | "button";
2601
+ interface ThemeModeMultiToggleProps extends SaasflareComponentProps {
2602
+ /** Override the default screen-reader labels per segment. */
2603
+ labels?: Partial<Record<ThemeMode, string>>;
2604
+ /** Additional class names applied to the rail. */
1693
2605
  className?: string;
1694
- }): JSX.Element | null;
2606
+ /** Segment size — matches the Toggle/ToggleGroup `size` axis. */
2607
+ size?: "sm" | "default" | "lg";
2608
+ /**
2609
+ * Visual appearance of the segments.
2610
+ *
2611
+ * - `"icon"` (default): small floating circles, always pill.
2612
+ * - `"icon-inherit"`: small floating shapes that match the rail's `radius`.
2613
+ * - `"button"`: segments fill the rail; outer corners match the rail's
2614
+ * `radius`, inner corners stay flat so the segment slots in.
2615
+ *
2616
+ * @default "icon"
2617
+ */
2618
+ appearance?: ThemeModeMultiToggleAppearance;
2619
+ /**
2620
+ * SSR-known theme mode (typically read from a cookie in the parent server
2621
+ * component). When provided, the component skips its internal mount-gate
2622
+ * and renders the matching segment as active on the very first paint —
2623
+ * eliminating the brief invisible / wrong-segment frame caused by
2624
+ * `next-themes` returning `undefined` during SSR.
2625
+ *
2626
+ * Leave undefined for the legacy mount-gated behaviour (renders `null`
2627
+ * until mounted).
2628
+ */
2629
+ initialMode?: ThemeMode;
2630
+ }
2631
+ /**
2632
+ * Three-segment theme switcher (light / dark / system).
2633
+ *
2634
+ * @component
2635
+ * @layer ui
2636
+ */
2637
+ declare function ThemeModeMultiToggle({ labels, className, size, appearance, surface, radius, animated, iconWeight, initialMode, }: ThemeModeMultiToggleProps): React$1.JSX.Element | null;
1695
2638
 
1696
2639
  /**
1697
2640
  * Props for the TopLoadingBar component.
@@ -1739,4 +2682,4 @@ interface UserAvatarProps {
1739
2682
  */
1740
2683
  declare function UserAvatar({ src, name, initials, size, className }: UserAvatarProps): react_jsx_runtime.JSX.Element;
1741
2684
 
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 };
2685
+ 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, AuroraBackground, type AuroraBackgroundProps, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, type BadgeProps, BarList, type BarListItem, type BarListProps, 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, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataToolbar, DataToolbarActions, DataToolbarFilters, DataToolbarSearch, DatePicker, type DatePickerProps, type DateRange, DateRangePicker, type DateRangePickerProps, type Density, DirectionProvider, DiscordAuthButton, 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, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GitHubAuthButton, GitLabAuthButton, GoogleAuthButton, HoverCard, HoverCardContent, HoverCardTrigger, IconWeight, Icons, InfoIcon, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Intent, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, LinkedInAuthButton, MagnifyingGlassIcon, 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, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NotificationCenter, type NotificationCenterProps, type NotificationItem, NumberInput, type NumberInputProps, PageHeader, type PageHeaderProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, type PaginationRangeItem, Palette, 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, PROVIDERS as SOCIAL_AUTH_PROVIDERS, 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, SidebarSimpleIcon, SidebarTrigger, type Size, Skeleton, SlackAuthButton, Slider, SmoothScrollProvider, type SmoothScrollProviderProps, SocialAuthButton, type SocialAuthButtonProps, type SocialProvider, SparkChart, type SparkChartProps, type SparkChartVariant, Spinner, StatefulButton, type StatefulButtonProps, StripeAuthButton, StyleVariant, SunIcon, Surface, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagInput, type TagInputProps, Textarea, ThemeModeMultiToggle, type ThemeModeMultiToggleAppearance, type ThemeModeMultiToggleProps, ThemeModeToggle, TikTokAuthButton, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, type TooltipItem, TooltipProvider, TooltipTrigger, TopLoadingBar, type TopLoadingBarProps, 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, useDirection, useDisclosure, useFileDialog, useFocusTrap, useFormField, useInterval, useIsMobile, useLocalStorage, useMeasure, useMergedRef, usePagination, useReducedMotion, useSaasflareMotion, useSaasflareTheme, useSidebar };