@vertis-components/components 1.0.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.
@@ -0,0 +1,2196 @@
1
+ import { ClassValue } from 'clsx';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import React from 'react';
4
+ import { SwiperOptions } from 'swiper/types';
5
+
6
+ /**
7
+ * Merges Tailwind CSS classes with proper conflict resolution.
8
+ * Uses clsx for conditional classes and tailwind-merge to handle conflicts.
9
+ *
10
+ * @example
11
+ * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-2 is overridden)
12
+ * cn('bg-red-500', isActive && 'bg-blue-500') // => conditional
13
+ * cn('text-sm', className) // => merge with user className
14
+ */
15
+ declare function cn(...inputs: ClassValue[]): string;
16
+
17
+ type BaseButtonProps = {
18
+ /** Button style variant */
19
+ variant?: 'primary' | 'secondary';
20
+ /** Button size */
21
+ size?: 'lg' | 'md' | 'sm';
22
+ /** Icon to display on the left side */
23
+ iconLeft?: React.ReactNode;
24
+ /** Icon to display on the right side */
25
+ iconRight?: React.ReactNode;
26
+ /** Render as icon-only button (square) */
27
+ iconOnly?: boolean;
28
+ /** Disabled state */
29
+ disabled?: boolean;
30
+ /** Custom border radius */
31
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
32
+ /** Button content */
33
+ children?: React.ReactNode;
34
+ /** Accessible label for screen readers (required for icon-only buttons) */
35
+ 'aria-label'?: string;
36
+ /** Custom component to render as (e.g., Next.js Link, React Router Link) */
37
+ as?: React.ElementType;
38
+ };
39
+ type ButtonOnlyProps = BaseButtonProps & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'disabled' | keyof BaseButtonProps> & {
40
+ /** Button type - defaults to 'button' to prevent form submission */
41
+ type?: 'button' | 'submit' | 'reset';
42
+ href?: never;
43
+ };
44
+ type LinkProps$1 = BaseButtonProps & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof BaseButtonProps> & {
45
+ /** Render as a link - provide href for native <a> */
46
+ href?: string;
47
+ type?: never;
48
+ };
49
+ type ButtonProps = ButtonOnlyProps | LinkProps$1;
50
+ declare const ChevronLeftIcon: ({ className }: {
51
+ className?: string;
52
+ }) => react_jsx_runtime.JSX.Element;
53
+ declare const ChevronRightIcon: ({ className }: {
54
+ className?: string;
55
+ }) => react_jsx_runtime.JSX.Element;
56
+ declare const PlusIcon: ({ className }: {
57
+ className?: string;
58
+ }) => react_jsx_runtime.JSX.Element;
59
+ declare const SearchIcon: ({ className }: {
60
+ className?: string;
61
+ }) => react_jsx_runtime.JSX.Element;
62
+ /**
63
+ * Button component with Tailwind dark mode support and full accessibility.
64
+ *
65
+ * Supports both button and link rendering. When `href` or `as` prop is provided,
66
+ * the component renders as a link/anchor element while maintaining all button styling.
67
+ *
68
+ * Uses Tailwind's `dark:` variants for dark mode styling.
69
+ * Customize colors by overriding theme colors in your tailwind.config.js.
70
+ *
71
+ * ## Variants
72
+ * - `primary` - Main action button (filled with brand color)
73
+ * - `secondary` - Secondary action button (outlined)
74
+ *
75
+ * ## Sizes
76
+ * - `lg` - Large buttons for primary actions
77
+ * - `md` - Default size
78
+ * - `sm` - Compact buttons
79
+ *
80
+ * ## Border Radius
81
+ * Customize with `radius` prop: none, sm, md, lg, xl, full
82
+ *
83
+ * ## Link Support
84
+ * - Provide `href` prop to render as native anchor tag
85
+ * - Provide `as` prop to use custom Link component (Next.js, React Router, etc.)
86
+ * - Disabled links use `aria-disabled` and prevent navigation
87
+ *
88
+ * ## Accessibility
89
+ * - Full keyboard navigation support (Tab, Enter, Space)
90
+ * - Focus-visible ring for keyboard users
91
+ * - Automatic aria-label for icon-only buttons
92
+ * - Disabled links properly announced to screen readers
93
+ * - WCAG 2.1 Level AA compliant
94
+ *
95
+ * @example
96
+ * // Basic button
97
+ * <Button variant="primary">Click me</Button>
98
+ *
99
+ * // Native anchor link
100
+ * <Button href="/about" variant="primary">About Us</Button>
101
+ *
102
+ * // Next.js Link
103
+ * <Button as={Link} href="/about" variant="primary">About Us</Button>
104
+ *
105
+ * // With left icon
106
+ * <Button iconLeft={<ChevronLeftIcon />}>Back</Button>
107
+ *
108
+ * // Icon only (aria-label required or auto-generated from children)
109
+ * <Button iconOnly iconLeft={<PlusIcon />} aria-label="Add item" />
110
+ *
111
+ * // Disabled link
112
+ * <Button href="/about" disabled>Cannot Navigate</Button>
113
+ *
114
+ * // Custom radius
115
+ * <Button radius="full">Pill Button</Button>
116
+ */
117
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
118
+
119
+ interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
120
+ isActive?: boolean;
121
+ }
122
+ /**
123
+ * Link component with Tailwind dark mode support.
124
+ *
125
+ * Uses palette colors that stay consistent but can be themed.
126
+ */
127
+ declare const Link: React.FC<LinkProps>;
128
+
129
+ interface MessageComposerProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange'> {
130
+ /** Controlled value */
131
+ value?: string;
132
+ /** Uncontrolled default value */
133
+ defaultValue?: string;
134
+ /** Called when value changes */
135
+ onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
136
+ /** Called when send button is clicked (receives current value) */
137
+ onSend?: (value: string) => void;
138
+ /** Placeholder for the textarea */
139
+ placeholder?: string;
140
+ /** Label for the send button (default "Send message") */
141
+ sendLabel?: string;
142
+ /** Disable textarea and actions */
143
+ disabled?: boolean;
144
+ /** Border radius of the container */
145
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
146
+ /** Custom icon for the emoji button (default: smile icon) */
147
+ emojiIcon?: React.ReactNode;
148
+ /** Custom icon for the attach/file button (default: paperclip icon) */
149
+ attachIcon?: React.ReactNode;
150
+ /** When provided, clicking emoji opens a dropdown with this content. onSelect(emoji) inserts at cursor; onClose() closes the panel. */
151
+ renderEmojiPanel?: (props: {
152
+ onSelect: (emoji: string) => void;
153
+ onClose: () => void;
154
+ }) => React.ReactNode;
155
+ /** Called when emoji button is clicked (use when not using renderEmojiPanel) */
156
+ onEmojiClick?: () => void;
157
+ /** Accept attribute for the file input (e.g. "image/*") */
158
+ accept?: string;
159
+ /** Allow multiple file selection */
160
+ multiple?: boolean;
161
+ /** Controlled list of attached files */
162
+ files?: File[];
163
+ /** Uncontrolled default files */
164
+ defaultFiles?: File[];
165
+ /** Called when attached files change */
166
+ onFilesChange?: (files: File[]) => void;
167
+ /** Called when attach button is clicked (use when not using built-in file picker) */
168
+ onAttachClick?: () => void;
169
+ /** Custom className for the outer container */
170
+ className?: string;
171
+ /** Custom className for the textarea */
172
+ textareaClassName?: string;
173
+ /** Custom className for the action bar */
174
+ actionBarClassName?: string;
175
+ /** Custom className for the file list area */
176
+ fileListClassName?: string;
177
+ /** Minimum rows for the textarea (default 3) */
178
+ rows?: number;
179
+ }
180
+ declare const MessageComposer: React.ForwardRefExoticComponent<MessageComposerProps & React.RefAttributes<HTMLTextAreaElement>>;
181
+
182
+ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {
183
+ /** Label above the input */
184
+ label?: string;
185
+ /** Error message (shows error state and message below) */
186
+ error?: string;
187
+ /** Helper text below the input */
188
+ helperText?: string;
189
+ /** Size of the input */
190
+ size?: 'sm' | 'md' | 'lg';
191
+ /** Success state (green border/background) */
192
+ success?: boolean;
193
+ /** Border radius */
194
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
195
+ /** Show required asterisk after label */
196
+ required?: boolean;
197
+ /** Info icon or node to show right of label */
198
+ labelInfo?: React.ReactNode;
199
+ /** Icon on the left inside the input */
200
+ iconLeft?: React.ReactNode;
201
+ /** Icon on the right inside the input (ignored when clearButton shows) */
202
+ iconRight?: React.ReactNode;
203
+ /** Show clear (X) button when input has value */
204
+ clearButton?: boolean;
205
+ /** Called when clear button is clicked (optional; default clears value) */
206
+ onClear?: () => void;
207
+ /** Addon slot on the left (e.g. Button) */
208
+ addonLeft?: React.ReactNode;
209
+ /** Addon slot on the right (e.g. Button) */
210
+ addonRight?: React.ReactNode;
211
+ /** Render as textarea (multiline) */
212
+ multiline?: boolean;
213
+ /** Custom className for the wrapper */
214
+ className?: string;
215
+ /** Custom className for the input/textarea */
216
+ inputClassName?: string;
217
+ }
218
+ /**
219
+ * Input component with Tailwind dark mode support.
220
+ *
221
+ * Supports sizes (sm/md/lg), states (default, error, success, disabled),
222
+ * leading/trailing icons, clear button, prepend/append addons, required label,
223
+ * label info icon, and optional multiline (textarea).
224
+ *
225
+ * Uses Tailwind's `dark:` variants for dark mode styling.
226
+ */
227
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement | HTMLTextAreaElement>>;
228
+
229
+ interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
230
+ /** Label above the textarea */
231
+ label?: string;
232
+ /** Error message (shows error state and message below) */
233
+ error?: string;
234
+ /** Helper text below */
235
+ helperText?: string;
236
+ /** Show required asterisk after label */
237
+ required?: boolean;
238
+ /** Size (padding and text) */
239
+ size?: 'sm' | 'md' | 'lg';
240
+ /** Border radius */
241
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
242
+ /** Success state (green border/background) */
243
+ success?: boolean;
244
+ /** Disabled state */
245
+ disabled?: boolean;
246
+ /** Info icon or node next to label */
247
+ labelInfo?: React.ReactNode;
248
+ /** Show clear (X) button when value present */
249
+ clearButton?: boolean;
250
+ /** Called when clear button is clicked */
251
+ onClear?: () => void;
252
+ /** Initial rows (default 3) */
253
+ rows?: number;
254
+ /** Resize behavior (default vertical) */
255
+ resize?: 'none' | 'vertical' | 'horizontal' | 'both';
256
+ /** Max length (native) */
257
+ maxLength?: number;
258
+ /** Show character count when maxLength set (e.g. "0 / 500") */
259
+ showCount?: boolean;
260
+ /** Custom className for wrapper */
261
+ className?: string;
262
+ /** Custom className for textarea element */
263
+ inputClassName?: string;
264
+ }
265
+ declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
266
+
267
+ interface CurrencyOption {
268
+ /** Currency code (e.g. "SGD", "USD") */
269
+ code: string;
270
+ /** Display label (defaults to code) */
271
+ label?: string;
272
+ /** Flag or icon to show (optional) */
273
+ icon?: React.ReactNode;
274
+ }
275
+ interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'size'> {
276
+ /** Variant: stepper (− | input | +) or currency (selector | prefix + input) */
277
+ variant?: 'stepper' | 'currency';
278
+ /** Label above the field */
279
+ label?: string;
280
+ /** Tooltip text for the info icon (shows on hover) */
281
+ tooltip?: string;
282
+ /** Error message (shows error state and message below) */
283
+ error?: string;
284
+ /** Helper text below the field */
285
+ helperText?: string;
286
+ /** Border radius */
287
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
288
+ /** Show required asterisk after label */
289
+ required?: boolean;
290
+ /** Custom info node (replaces default info icon) */
291
+ labelInfo?: React.ReactNode;
292
+ /** Current value (controlled). Use undefined when input is empty. */
293
+ value?: number | undefined;
294
+ /** Default value (uncontrolled) */
295
+ defaultValue?: number;
296
+ /** Called when value changes (undefined when input is cleared) */
297
+ onChange?: (value: number | undefined) => void;
298
+ /** Minimum value */
299
+ min?: number;
300
+ /** Maximum value */
301
+ max?: number;
302
+ /** Step increment */
303
+ step?: number;
304
+ /** Placeholder text */
305
+ placeholder?: string;
306
+ /** Prefix shown inside input (e.g. "$" for currency) */
307
+ prefix?: string;
308
+ /** Currency options (currency variant only) */
309
+ currencyOptions?: CurrencyOption[];
310
+ /** Selected currency code (currency variant, controlled) */
311
+ currencyValue?: string;
312
+ /** Called when currency selection changes (currency variant) */
313
+ onCurrencyChange?: (code: string) => void;
314
+ /** Custom className for the wrapper */
315
+ className?: string;
316
+ /** Custom className for the inner number input */
317
+ inputClassName?: string;
318
+ /** Custom className for the input container (border wrapper) */
319
+ containerClassName?: string;
320
+ /** Custom className for stepper buttons */
321
+ buttonClassName?: string;
322
+ /** Called when increment button is clicked */
323
+ onIncrement?: () => void;
324
+ /** Called when decrement button is clicked */
325
+ onDecrement?: () => void;
326
+ /** Raw input change event handler (called before value transformation) */
327
+ onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
328
+ }
329
+ declare const NumberInput: React.ForwardRefExoticComponent<NumberInputProps & React.RefAttributes<HTMLInputElement>>;
330
+
331
+ type OTPCellStatus = 'default' | 'success' | 'error';
332
+ interface OTPInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
333
+ /** Controlled value: string of length \`length\` (space = empty cell), or digits-only (padded for display) */
334
+ value?: string;
335
+ /** Uncontrolled initial value (digits-only or position-based with spaces) */
336
+ defaultValue?: string;
337
+ /** Fired on any change: padded string of length \`length\` (space = empty). Store this for controlled mode to avoid shift on edit. */
338
+ onChange?: (value: string) => void;
339
+ /** Fired when all cells are filled: trimmed digits only (e.g. "123456") */
340
+ onComplete?: (value: string) => void;
341
+ /** Number of cells (default 6) */
342
+ length?: number;
343
+ /** Label above the group */
344
+ label?: string;
345
+ /** Error message and global error state (all cells red) */
346
+ error?: string;
347
+ /** Helper text below */
348
+ helperText?: string;
349
+ /** Show required asterisk after label */
350
+ required?: boolean;
351
+ /** Cell border radius */
352
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
353
+ /** Cell size (width/height); from sm breakpoint (640px) and up */
354
+ size?: 'sm' | 'md' | 'lg';
355
+ /** Cell size on mobile (below sm breakpoint). When set, uses this size under 640px and \`size\` above. */
356
+ sizeOnMobile?: 'sm' | 'md' | 'lg';
357
+ /** Disable all cells */
358
+ disabled?: boolean;
359
+ /** Numeric-only vs alphanumeric */
360
+ type?: 'numeric' | 'text';
361
+ /** Custom className for the grid wrapper */
362
+ containerClassName?: string;
363
+ /** Custom className applied to each cell input */
364
+ inputClassName?: string;
365
+ /** Outermost wrapper (label + grid + helper) */
366
+ className?: string;
367
+ /** Global state override (success/error styling when no error message) */
368
+ status?: 'default' | 'success' | 'error';
369
+ /** Per-cell state (length = length) for mixed states as in Figma */
370
+ perCellStatus?: OTPCellStatus[];
371
+ }
372
+ declare const OTPInput: React.ForwardRefExoticComponent<OTPInputProps & React.RefAttributes<HTMLDivElement>>;
373
+
374
+ interface RadioButtonProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'> {
375
+ /** Layout variant */
376
+ variant?: 'default' | 'card' | 'card-icon-top' | 'card-icon-left';
377
+ /** Size of the radio button */
378
+ size?: 'sm' | 'md' | 'lg';
379
+ /** Checked state (controlled) */
380
+ checked?: boolean;
381
+ /** Default checked (uncontrolled) */
382
+ defaultChecked?: boolean;
383
+ /** Label text */
384
+ label?: string;
385
+ /** Helper/description text */
386
+ helperText?: string;
387
+ /** Icon for card variants */
388
+ icon?: React.ReactNode;
389
+ /** Disabled state */
390
+ disabled?: boolean;
391
+ /** Error state */
392
+ error?: boolean;
393
+ /** Custom className for the container */
394
+ className?: string;
395
+ /** Custom className for the radio circle */
396
+ radioClassName?: string;
397
+ /** Custom className for the label */
398
+ labelClassName?: string;
399
+ /** Change handler */
400
+ onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;
401
+ }
402
+ /** Credit card icon */
403
+ declare const CreditCardIcon: ({ className }: {
404
+ className?: string;
405
+ }) => react_jsx_runtime.JSX.Element;
406
+ /** Truck/Shipping icon */
407
+ declare const TruckIcon: ({ className }: {
408
+ className?: string;
409
+ }) => react_jsx_runtime.JSX.Element;
410
+ /**
411
+ * RadioButton component with modern animations and multiple layout variants.
412
+ *
413
+ * ## Features
414
+ * - **4 Variants**: Default (inline), Card, Card with icon top, Card with icon left
415
+ * - **3 Sizes**: Small, Medium, Large
416
+ * - **States**: Default, Focus, Disabled, Error
417
+ * - **Animations**: Smooth inner dot scale, focus ring
418
+ * - **Dark Mode**: Full support via Tailwind dark: variants
419
+ *
420
+ * ## Accessibility
421
+ * - Native radio input for full a11y support
422
+ * - Keyboard navigation (Arrow keys within group, Space to select)
423
+ * - Focus-visible ring for keyboard users
424
+ * - ARIA attributes for screen readers
425
+ * - Proper label association
426
+ *
427
+ * @example
428
+ * // Basic radio button
429
+ * <RadioButton name="options" label="Option 1" />
430
+ *
431
+ * // With helper text
432
+ * <RadioButton name="options" label="Standard" helperText="3-5 business days" />
433
+ *
434
+ * // Card variant
435
+ * <RadioButton variant="card" name="plan" label="Pro Plan" helperText="$29/month" />
436
+ *
437
+ * // Card with icon
438
+ * <RadioButton variant="card-icon-left" name="payment" label="Credit Card" icon={<CreditCardIcon />} />
439
+ *
440
+ * // Controlled
441
+ * <RadioButton checked={selected === 'opt1'} onChange={() => setSelected('opt1')} label="Controlled" />
442
+ */
443
+ declare const RadioButton: React.ForwardRefExoticComponent<RadioButtonProps & React.RefAttributes<HTMLInputElement>>;
444
+
445
+ interface CarouselProps {
446
+ /** Carousel variant matching Figma designs */
447
+ variant?: 'full-image' | 'with-controls' | 'with-indicators';
448
+ /** Array of slide contents */
449
+ items?: React.ReactNode[];
450
+ /** Number of slides visible at once */
451
+ slidesPerView?: number | 'auto';
452
+ /** Space between slides in pixels */
453
+ spaceBetween?: number;
454
+ /** Enable infinite loop */
455
+ loop?: boolean;
456
+ /** Autoplay configuration */
457
+ autoplay?: boolean | {
458
+ delay?: number;
459
+ disableOnInteraction?: boolean;
460
+ };
461
+ /** Show navigation arrows */
462
+ navigation?: boolean;
463
+ /** Show pagination dots */
464
+ pagination?: boolean;
465
+ /** Responsive breakpoints */
466
+ breakpoints?: SwiperOptions['breakpoints'];
467
+ /** Initial slide index */
468
+ initialSlide?: number;
469
+ /** Additional classes for the container */
470
+ className?: string;
471
+ /** Additional classes for each slide */
472
+ slideClassName?: string;
473
+ /** Children as alternative to items prop */
474
+ children?: React.ReactNode;
475
+ /** Callback when slide changes */
476
+ onSlideChange?: (index: number) => void;
477
+ }
478
+ /**
479
+ * Carousel component built on Swiper.js with full customization support.
480
+ *
481
+ * ## Variants
482
+ * - `full-image` - Full-width hero carousel with overlayed controls
483
+ * - `with-controls` - Multi-slide carousel with navigation buttons below
484
+ * - `with-indicators` - Multi-slide carousel with navigation and pagination dots below
485
+ *
486
+ * ## Features
487
+ * - Responsive breakpoints
488
+ * - Touch/swipe support
489
+ * - Keyboard navigation
490
+ * - Autoplay with configurable delay
491
+ * - Dark mode support via Tailwind
492
+ */
493
+ declare const Carousel: React.FC<CarouselProps>;
494
+
495
+ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
496
+ /** Badge style variant */
497
+ variant?: 'white' | 'danger' | 'disabled';
498
+ /** Badge size */
499
+ size?: 'sm' | 'lg';
500
+ /** Icon to display on the left side */
501
+ iconLeft?: React.ReactNode;
502
+ /** Icon to display on the right side */
503
+ iconRight?: React.ReactNode;
504
+ /** Render as icon-only badge (only left icon) */
505
+ iconOnly?: boolean;
506
+ /** Render as text-only badge (no icons) */
507
+ textOnly?: boolean;
508
+ /** Custom border radius */
509
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
510
+ /** Badge content */
511
+ children?: React.ReactNode;
512
+ /** Optional callback for close icon click */
513
+ onClose?: () => void;
514
+ /** Accessible label for screen readers (useful for icon-only badges) */
515
+ 'aria-label'?: string;
516
+ }
517
+ declare const ClockIcon: ({ className }: {
518
+ className?: string;
519
+ }) => react_jsx_runtime.JSX.Element;
520
+ declare const CloseIcon: ({ className }: {
521
+ className?: string;
522
+ }) => react_jsx_runtime.JSX.Element;
523
+ /**
524
+ * Badge component with Tailwind dark mode support and full accessibility.
525
+ *
526
+ * Uses Tailwind's `dark:` variants for dark mode styling.
527
+ * Customize colors by overriding theme colors in your tailwind.config.js.
528
+ *
529
+ * ## Variants
530
+ * - `white` - Default/neutral badge (light grey background)
531
+ * - `danger` - Danger/warning badge (red styling)
532
+ * - `disabled` - Disabled badge (muted grey styling)
533
+ *
534
+ * ## Sizes
535
+ * - `lg` - Large badges (default)
536
+ * - `sm` - Small badges
537
+ *
538
+ * ## Border Radius
539
+ * Customize with `radius` prop: none, sm, md, lg, xl, full
540
+ *
541
+ * ## Features
542
+ * - Optional left icon (e.g., clock icon)
543
+ * - Optional right icon (e.g., close icon)
544
+ * - Icon-only mode (only left icon)
545
+ * - Text-only mode (no icons)
546
+ * - Interactive close button (if onClose provided)
547
+ *
548
+ * ## Accessibility
549
+ * - Semantic HTML structure
550
+ * - Support for aria-label
551
+ * - Close button is keyboard accessible
552
+ *
553
+ * @example
554
+ * // Basic badge
555
+ * <Badge variant="white">Badge text</Badge>
556
+ *
557
+ * // With icons
558
+ * <Badge iconLeft={<ClockIcon />} iconRight={<CloseIcon />}>Badge text</Badge>
559
+ *
560
+ * // Icon only
561
+ * <Badge iconOnly iconLeft={<ClockIcon />} aria-label="Time indicator" />
562
+ *
563
+ * // With close handler
564
+ * <Badge iconRight={<CloseIcon />} onClose={() => console.log('closed')}>Dismissible</Badge>
565
+ */
566
+ declare const Badge: React.FC<BadgeProps>;
567
+
568
+ interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
569
+ /** Alert color variant */
570
+ variant?: 'success' | 'danger' | 'warning' | 'default';
571
+ /** Alert layout type */
572
+ type?: 'default' | 'complex' | 'small' | 'border-top';
573
+ /** Optional heading text */
574
+ heading?: string;
575
+ /** Alert content (body text) */
576
+ children?: React.ReactNode;
577
+ /** Icon to display on the left side */
578
+ iconLeft?: React.ReactNode;
579
+ /** Icon to display on the right side */
580
+ iconRight?: React.ReactNode;
581
+ /** Show close icon (X) */
582
+ showClose?: boolean;
583
+ /** Optional callback for close icon click */
584
+ onClose?: () => void;
585
+ /** Action button text (for complex type) */
586
+ actionText?: string;
587
+ /** Action button icon (for complex type) */
588
+ actionIcon?: React.ReactNode;
589
+ /** Action button click handler (for complex type) */
590
+ onAction?: () => void;
591
+ /** "New" badge label text (for small type) */
592
+ newLabel?: string;
593
+ /** Custom border radius */
594
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
595
+ }
596
+ declare const InfoCircleIcon: ({ className }: {
597
+ className?: string;
598
+ }) => react_jsx_runtime.JSX.Element;
599
+ declare const CheckCircleIcon: ({ className }: {
600
+ className?: string;
601
+ }) => react_jsx_runtime.JSX.Element;
602
+ declare const AlertCircleIcon: ({ className }: {
603
+ className?: string;
604
+ }) => react_jsx_runtime.JSX.Element;
605
+ declare const BookOpenIcon: ({ className }: {
606
+ className?: string;
607
+ }) => react_jsx_runtime.JSX.Element;
608
+ /**
609
+ * Alert component with Tailwind dark mode support and full accessibility.
610
+ *
611
+ * This is a Molecule component composed of Button and Badge atoms.
612
+ * Uses Tailwind's `dark:` variants for dark mode styling.
613
+ * Customize colors by overriding theme colors in your tailwind.config.js.
614
+ *
615
+ * ## Variants
616
+ * - `success` - Success/info alert (green)
617
+ * - `danger` - Error/danger alert (red)
618
+ * - `warning` - Warning alert (yellow)
619
+ * - `default` - Default/info alert (grey)
620
+ *
621
+ * ## Types
622
+ * - `default` - Simple single-line alert
623
+ * - `complex` - Multi-line alert with heading and action button
624
+ * - `small` - Compact alert with badge label
625
+ * - `border-top` - Alert with top border accent
626
+ *
627
+ * ## Features
628
+ * - Optional left icon (auto-selected based on variant if not provided)
629
+ * - Optional heading text (for complex type)
630
+ * - Optional action button (for complex type) - uses Button component
631
+ * - Optional "New" badge (for small type) - uses Badge component
632
+ * - Dismissible with close button
633
+ * - Custom border radius support
634
+ *
635
+ * ## Accessibility
636
+ * - Uses `role="alert"` for screen reader announcements
637
+ * - Close button is keyboard accessible
638
+ * - Action button uses Button component (fully accessible)
639
+ *
640
+ * @example
641
+ * // Simple alert
642
+ * <Alert variant="success">Operation completed successfully</Alert>
643
+ *
644
+ * // Complex alert with action
645
+ * <Alert
646
+ * variant="danger"
647
+ * type="complex"
648
+ * heading="Error occurred"
649
+ * actionText="Learn more"
650
+ * onAction={() => console.log('action')}
651
+ * >
652
+ * Something went wrong. Please try again.
653
+ * </Alert>
654
+ *
655
+ * // Small alert with badge
656
+ * <Alert variant="warning" type="small" newLabel="New">
657
+ * New feature available
658
+ * </Alert>
659
+ */
660
+ declare const Alert: React.FC<AlertProps>;
661
+
662
+ interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
663
+ /** Avatar size */
664
+ size?: 'sm' | 'base' | 'lg' | 'xl' | '2xl';
665
+ /** Image source URL */
666
+ src?: string;
667
+ /** Image alt text */
668
+ alt?: string;
669
+ /** User name (for auto-generating initials) */
670
+ name?: string;
671
+ /** Manual text/initials (overrides name if provided) */
672
+ text?: string;
673
+ /** Status indicator */
674
+ status?: 'online' | 'offline' | 'away' | null;
675
+ /** Position of the status indicator */
676
+ statusPosition?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
677
+ /** Show remove button */
678
+ showRemove?: boolean;
679
+ /** Callback when remove button is clicked */
680
+ onRemove?: () => void;
681
+ /** Border for group avatars */
682
+ border?: boolean;
683
+ }
684
+ /**
685
+ * Avatar component with Tailwind dark mode support and full accessibility.
686
+ *
687
+ * Features a subtle glass shimmer effect on hover for a modern, polished look.
688
+ *
689
+ * Uses Tailwind's `dark:` variants for dark mode styling.
690
+ * Customize colors by overriding theme colors in your tailwind.config.js.
691
+ *
692
+ * ## Sizes
693
+ * - `sm` - 24px
694
+ * - `base` - 32px (default)
695
+ * - `lg` - 44px
696
+ * - `xl` - 56px
697
+ * - `2xl` - 64px
698
+ *
699
+ * ## Types
700
+ * - **Image Avatar**: Provide `src` prop
701
+ * - **Text Avatar**: Provide `name` (auto-generates initials) or `text` (manual)
702
+ * - **With Status**: Provide `status` prop (online, offline, away)
703
+ * - **With Remove Button**: Set `showRemove={true}` and `onRemove` callback
704
+ *
705
+ * ## Status Position
706
+ * - `bottom-right` (default)
707
+ * - `bottom-left`
708
+ * - `top-right`
709
+ * - `top-left`
710
+ *
711
+ * ## Hover Effects
712
+ * - Subtle glass shimmer animation sweeps across on hover
713
+ * - Soft ring glow effect
714
+ *
715
+ * @example
716
+ * <Avatar src="/user.jpg" alt="User name" />
717
+ * <Avatar name="John Doe" />
718
+ * <Avatar src="/user.jpg" status="online" statusPosition="top-right" />
719
+ */
720
+ declare const Avatar: React.FC<AvatarProps>;
721
+
722
+ interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {
723
+ /** Array of avatar data */
724
+ avatars: Array<{
725
+ src?: string;
726
+ name?: string;
727
+ text?: string;
728
+ alt?: string;
729
+ }>;
730
+ /** Avatar size */
731
+ size?: 'sm' | 'base' | 'lg' | 'xl' | '2xl';
732
+ /** Maximum number of avatars to show before counter */
733
+ max?: number;
734
+ /** Show counter badge for remaining avatars */
735
+ showCounter?: boolean;
736
+ /** Overlap spacing (negative margin) */
737
+ overlap?: number;
738
+ }
739
+ /**
740
+ * AvatarGroup component for displaying multiple overlapping avatars.
741
+ *
742
+ * Displays a group of avatars with negative margin overlap. When the number
743
+ * of avatars exceeds the `max` prop, shows a counter badge with the remaining count.
744
+ *
745
+ * Uses Tailwind's `dark:` variants for dark mode styling.
746
+ *
747
+ * ## Features
748
+ * - Multiple avatars with overlap
749
+ * - Border around each avatar for separation
750
+ * - Counter badge for remaining avatars
751
+ * - Configurable max visible count
752
+ * - Configurable overlap spacing
753
+ *
754
+ * @example
755
+ * // Basic group
756
+ * <AvatarGroup
757
+ * avatars={[
758
+ * { src: '/user1.jpg', name: 'User 1' },
759
+ * { src: '/user2.jpg', name: 'User 2' },
760
+ * { src: '/user3.jpg', name: 'User 3' },
761
+ * ]}
762
+ * />
763
+ *
764
+ * // With counter
765
+ * <AvatarGroup
766
+ * avatars={users}
767
+ * max={3}
768
+ * showCounter
769
+ * />
770
+ */
771
+ declare const AvatarGroup: React.FC<AvatarGroupProps>;
772
+
773
+ interface AvatarLabelProps extends React.HTMLAttributes<HTMLDivElement> {
774
+ /** Avatar props */
775
+ avatar: {
776
+ src?: string;
777
+ name?: string;
778
+ text?: string;
779
+ alt?: string;
780
+ status?: 'online' | 'offline' | 'away' | null;
781
+ statusPosition?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
782
+ };
783
+ /** Name text */
784
+ name: string;
785
+ /** Subtext (email, role, etc.) */
786
+ subtext?: string;
787
+ /** Size */
788
+ size?: 'sm' | 'base' | 'lg' | 'xl';
789
+ /** Show subtext */
790
+ showSubtext?: boolean;
791
+ }
792
+ /**
793
+ * AvatarLabel component for displaying avatar with name and optional subtext.
794
+ *
795
+ * Combines an Avatar component with name and optional subtext (email, role, etc.)
796
+ * in a horizontal layout. Text sizes are responsive to the avatar size.
797
+ *
798
+ * Uses Tailwind's `dark:` variants for dark mode styling.
799
+ *
800
+ * ## Sizes
801
+ * - `sm` - Small avatar with small text
802
+ * - `base` - Default size
803
+ * - `lg` - Large avatar with larger text
804
+ * - `xl` - Extra large avatar with largest text
805
+ *
806
+ * @example
807
+ * // Basic label
808
+ * <AvatarLabel
809
+ * avatar={{ src: '/user.jpg', name: 'John Doe' }}
810
+ * name="John Doe"
811
+ * />
812
+ *
813
+ * // With subtext
814
+ * <AvatarLabel
815
+ * avatar={{ src: '/user.jpg', name: 'John Doe' }}
816
+ * name="John Doe"
817
+ * subtext="john@example.com"
818
+ * />
819
+ *
820
+ * // With status
821
+ * <AvatarLabel
822
+ * avatar={{ src: '/user.jpg', name: 'John Doe', status: 'online' }}
823
+ * name="John Doe"
824
+ * subtext="Online"
825
+ * />
826
+ */
827
+ declare const AvatarLabel: React.FC<AvatarLabelProps>;
828
+
829
+ interface AccordionItem {
830
+ /** Unique identifier for the item */
831
+ id: string;
832
+ /** Accordion header/title text */
833
+ title: string;
834
+ /** Accordion content (can be ReactNode for rich content) */
835
+ content: React.ReactNode;
836
+ /** Optional left icon (overrides default) */
837
+ iconLeft?: React.ReactNode;
838
+ /** Optional nested accordion items (for multi-level) */
839
+ children?: AccordionItem[];
840
+ /** Disable this specific item */
841
+ disabled?: boolean;
842
+ }
843
+ interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
844
+ /** Array of accordion items */
845
+ items: AccordionItem[];
846
+ /** Visual style variant */
847
+ variant?: 'default' | 'separate' | 'flush' | 'multi-level';
848
+ /** Allow multiple items to be open simultaneously */
849
+ allowMultiple?: boolean;
850
+ /** Default open items (by id) */
851
+ defaultOpen?: string[];
852
+ /** Controlled open items (for external state management) */
853
+ openItems?: string[];
854
+ /** Callback when items open/close */
855
+ onChange?: (openIds: string[]) => void;
856
+ /** Show left icon */
857
+ showLeftIcon?: boolean;
858
+ /** Show right chevron icon */
859
+ showRightIcon?: boolean;
860
+ /** Default left icon (used if item doesn't have iconLeft) */
861
+ defaultLeftIcon?: React.ReactNode;
862
+ /** Custom border radius */
863
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
864
+ }
865
+ /** Chevron Down Icon - rotates to indicate open/closed state */
866
+ declare const ChevronDownIcon: ({ className }: {
867
+ className?: string;
868
+ }) => react_jsx_runtime.JSX.Element;
869
+ /**
870
+ * Accordion component with full accessibility and keyboard navigation.
871
+ *
872
+ * This is a Molecule component that provides collapsible content panels.
873
+ * Uses Tailwind's `dark:` variants for dark mode styling.
874
+ * Customize colors by overriding theme colors in your tailwind.config.js.
875
+ *
876
+ * ## Variants
877
+ * - `default` - Connected items with shared borders, rounded corners on first/last
878
+ * - `separate` - Each item is a separate card with full border radius
879
+ * - `flush` - Minimal padding, no horizontal padding, flush design
880
+ * - `multi-level` - Supports nested accordion items with indentation
881
+ *
882
+ * ## Features
883
+ * - Optional left icons (customizable per item or default)
884
+ * - Animated chevron rotation on open/close
885
+ * - Smooth height transitions
886
+ * - Single or multiple items open at once (via `allowMultiple`)
887
+ * - Controlled or uncontrolled state management
888
+ * - Rich content support (ReactNode)
889
+ * - Nested/multi-level accordions
890
+ *
891
+ * ## Accessibility
892
+ * - Full keyboard navigation (Arrow Up/Down, Home, End, Enter, Space)
893
+ * - ARIA attributes (aria-expanded, aria-controls, aria-labelledby)
894
+ * - Focus management with visible focus rings
895
+ * - Screen reader friendly with proper roles
896
+ *
897
+ * @example
898
+ * // Basic usage
899
+ * <Accordion
900
+ * items={[
901
+ * { id: '1', title: 'Question 1', content: 'Answer 1' },
902
+ * { id: '2', title: 'Question 2', content: 'Answer 2' },
903
+ * ]}
904
+ * />
905
+ *
906
+ * // Multiple open with custom variant
907
+ * <Accordion
908
+ * items={items}
909
+ * variant="separate"
910
+ * allowMultiple
911
+ * defaultOpen={['1']}
912
+ * />
913
+ */
914
+ declare const Accordion: React.FC<AccordionProps>;
915
+
916
+ interface BreadcrumbDropdownItem {
917
+ /** Unique identifier */
918
+ id: string;
919
+ /** Display text */
920
+ label: string;
921
+ /** Optional href for navigation */
922
+ href?: string;
923
+ /** Optional click handler */
924
+ onClick?: () => void;
925
+ }
926
+ interface BreadcrumbItem {
927
+ /** Unique identifier */
928
+ id: string;
929
+ /** Display text */
930
+ label: string;
931
+ /** Optional href for navigation */
932
+ href?: string;
933
+ /** Custom icon (overrides default home icon for first item) */
934
+ icon?: React.ReactNode;
935
+ /** Render as dropdown button (for "with dropdown" variant) */
936
+ isDropdown?: boolean;
937
+ /** Dropdown options (if isDropdown is true) */
938
+ dropdownItems?: BreadcrumbDropdownItem[];
939
+ /** Custom component to render as (e.g., Next.js Link) */
940
+ as?: React.ElementType;
941
+ }
942
+ interface BreadcrumbProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
943
+ /** Array of breadcrumb items */
944
+ items: BreadcrumbItem[];
945
+ /** Visual style variant */
946
+ variant?: 'default' | 'background' | 'with-dropdown';
947
+ /** Show home icon on first item */
948
+ showHomeIcon?: boolean;
949
+ /** Custom home icon */
950
+ homeIcon?: React.ReactNode;
951
+ /** Separator icon (default: chevron right) */
952
+ separator?: React.ReactNode;
953
+ /** Custom border radius (for background variant) */
954
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
955
+ /** Maximum items to show before truncating (responsive) */
956
+ maxItems?: number;
957
+ /** Custom component for links (e.g., Next.js Link) */
958
+ linkComponent?: React.ElementType;
959
+ /** Callback when dropdown item is selected */
960
+ onDropdownSelect?: (itemId: string, breadcrumbItemId: string) => void;
961
+ }
962
+ /** Home Icon - House outline icon (16px) */
963
+ declare const HomeIcon: ({ className }: {
964
+ className?: string;
965
+ }) => react_jsx_runtime.JSX.Element;
966
+ /** Layers Icon - Stacked layers icon for dropdown button (20px) */
967
+ declare const LayersIcon: ({ className }: {
968
+ className?: string;
969
+ }) => react_jsx_runtime.JSX.Element;
970
+ declare const Breadcrumb: React.FC<BreadcrumbProps>;
971
+
972
+ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
973
+ /** Card layout variant */
974
+ variant?: 'text-only' | 'with-image' | 'full-image' | 'horizontal' | 'e-commerce';
975
+ /** Card heading/title */
976
+ heading?: React.ReactNode;
977
+ /** Card description/body text */
978
+ description?: React.ReactNode;
979
+ /** Card image */
980
+ image?: {
981
+ src: string;
982
+ alt: string;
983
+ };
984
+ /** Badge to display (e.g., "Trending") */
985
+ badge?: {
986
+ text: string;
987
+ icon?: React.ReactNode;
988
+ };
989
+ /** Primary action button */
990
+ action?: {
991
+ label: string;
992
+ icon?: React.ReactNode;
993
+ onClick?: () => void;
994
+ href?: string;
995
+ as?: React.ElementType;
996
+ variant?: 'primary' | 'secondary';
997
+ };
998
+ /** Secondary action (e.g., bookmark button) */
999
+ secondaryAction?: React.ReactNode;
1000
+ /** Rating display (for e-commerce variant) */
1001
+ rating?: {
1002
+ value: number;
1003
+ max?: number;
1004
+ showValue?: boolean;
1005
+ };
1006
+ /** Price display (for e-commerce variant) */
1007
+ price?: string | React.ReactNode;
1008
+ /** Show heading section */
1009
+ showHeading?: boolean;
1010
+ /** Show description section */
1011
+ showDescription?: boolean;
1012
+ /** Custom border radius */
1013
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
1014
+ /** Shadow variant */
1015
+ shadow?: 'none' | 'sm' | 'md' | 'lg';
1016
+ }
1017
+ declare const ArrowRightIcon: ({ className }: {
1018
+ className?: string;
1019
+ }) => react_jsx_runtime.JSX.Element;
1020
+ declare const BookmarkIcon: ({ className }: {
1021
+ className?: string;
1022
+ }) => react_jsx_runtime.JSX.Element;
1023
+ declare const CartIcon: ({ className }: {
1024
+ className?: string;
1025
+ }) => react_jsx_runtime.JSX.Element;
1026
+ declare const StarIcon: ({ className, filled }: {
1027
+ className?: string;
1028
+ filled?: boolean;
1029
+ }) => react_jsx_runtime.JSX.Element;
1030
+ declare const FireIcon: ({ className }: {
1031
+ className?: string;
1032
+ }) => react_jsx_runtime.JSX.Element;
1033
+ /**
1034
+ * Card component with Tailwind dark mode support and full flexibility.
1035
+ */
1036
+ declare const Card: React.FC<CardProps>;
1037
+
1038
+ interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'> {
1039
+ /** Layout variant */
1040
+ variant?: 'default' | 'card' | 'card-icon-top' | 'card-icon-left';
1041
+ /** Size of the checkbox */
1042
+ size?: 'sm' | 'md' | 'lg';
1043
+ /** Checked state (controlled) */
1044
+ checked?: boolean;
1045
+ /** Default checked (uncontrolled) */
1046
+ defaultChecked?: boolean;
1047
+ /** Label text */
1048
+ label?: string;
1049
+ /** Helper/description text */
1050
+ helperText?: string;
1051
+ /** Icon for card variants */
1052
+ icon?: React.ReactNode;
1053
+ /** Disabled state */
1054
+ disabled?: boolean;
1055
+ /** Error state */
1056
+ error?: boolean;
1057
+ /** Indeterminate state (for "select all" patterns) */
1058
+ indeterminate?: boolean;
1059
+ /** Custom className for the container */
1060
+ className?: string;
1061
+ /** Custom className for the checkbox box */
1062
+ checkboxClassName?: string;
1063
+ /** Custom className for the label */
1064
+ labelClassName?: string;
1065
+ /** Change handler */
1066
+ onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;
1067
+ }
1068
+ /** Animated checkmark icon */
1069
+ declare const CheckIcon: ({ className }: {
1070
+ className?: string;
1071
+ }) => react_jsx_runtime.JSX.Element;
1072
+ /** Minus icon for indeterminate state */
1073
+ declare const MinusIcon: ({ className }: {
1074
+ className?: string;
1075
+ }) => react_jsx_runtime.JSX.Element;
1076
+ /** Profile card icon (example for card variants) */
1077
+ declare const ProfileCardIcon: ({ className }: {
1078
+ className?: string;
1079
+ }) => react_jsx_runtime.JSX.Element;
1080
+ /** Settings icon (alternative for card variants) */
1081
+ declare const SettingsIcon: ({ className }: {
1082
+ className?: string;
1083
+ }) => react_jsx_runtime.JSX.Element;
1084
+ /**
1085
+ * Checkbox component with modern animations and multiple layout variants.
1086
+ *
1087
+ * ## Features
1088
+ * - **4 Variants**: Default (inline), Card, Card with icon top, Card with icon left
1089
+ * - **3 Sizes**: Small, Medium, Large
1090
+ * - **States**: Default, Focus, Disabled, Error, Indeterminate
1091
+ * - **Animations**: Smooth checkmark drawing, scale transitions, focus ring
1092
+ * - **Dark Mode**: Full support via Tailwind dark: variants
1093
+ *
1094
+ * ## Accessibility
1095
+ * - Native checkbox input for full a11y support
1096
+ * - Keyboard navigation (Space to toggle, Tab to navigate)
1097
+ * - Focus-visible ring for keyboard users
1098
+ * - ARIA attributes for screen readers
1099
+ * - Proper label association
1100
+ *
1101
+ * @example
1102
+ * // Basic checkbox
1103
+ * <Checkbox label="Accept terms" />
1104
+ *
1105
+ * // With helper text
1106
+ * <Checkbox label="Remember me" helperText="Save credentials for next visit" />
1107
+ *
1108
+ * // Card variant
1109
+ * <Checkbox variant="card" label="Option 1" helperText="Description" />
1110
+ *
1111
+ * // Card with icon
1112
+ * <Checkbox variant="card-icon-left" label="Profile" icon={<ProfileCardIcon />} />
1113
+ *
1114
+ * // Controlled
1115
+ * <Checkbox checked={isChecked} onChange={(checked) => setIsChecked(checked)} label="Controlled" />
1116
+ */
1117
+ declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
1118
+
1119
+ interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'> {
1120
+ /** Layout variant */
1121
+ variant?: 'default' | 'card' | 'card-icon-top' | 'card-icon-left';
1122
+ /** Size of the toggle switch (sm | md | lg). Use trackStyle/thumbStyle for custom dimensions. */
1123
+ size?: 'sm' | 'md' | 'lg';
1124
+ /** Checked state (controlled) */
1125
+ checked?: boolean;
1126
+ /** Default checked (uncontrolled) */
1127
+ defaultChecked?: boolean;
1128
+ /** Label text */
1129
+ label?: string;
1130
+ /** Helper/description text */
1131
+ helperText?: string;
1132
+ /** Icon for card variants */
1133
+ icon?: React.ReactNode;
1134
+ /** Disabled state */
1135
+ disabled?: boolean;
1136
+ /** Error state */
1137
+ error?: boolean;
1138
+ /** Custom className for the container (toggle-root) */
1139
+ className?: string;
1140
+ /** Custom className for the toggle track */
1141
+ toggleClassName?: string;
1142
+ /** Custom className for the thumb */
1143
+ thumbClassName?: string;
1144
+ /** Custom className for the label */
1145
+ labelClassName?: string;
1146
+ /** Custom className for the helper text */
1147
+ helperTextClassName?: string;
1148
+ /** Inline styles for the track (e.g. width, height for custom sizing) */
1149
+ trackStyle?: React.CSSProperties;
1150
+ /** Inline styles for the thumb (e.g. width, height for custom sizing; checked position may need custom CSS) */
1151
+ thumbStyle?: React.CSSProperties;
1152
+ /** Called when the checked state changes. (checked, event) => void */
1153
+ onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;
1154
+ /** Alias for onChange; called when toggled. (checked) => void */
1155
+ onCheckedChange?: (checked: boolean) => void;
1156
+ }
1157
+ /**
1158
+ * Toggle (switch) component with pill track and sliding thumb.
1159
+ * API and layout variants mirror Checkbox: default, card, card-icon-top, card-icon-left.
1160
+ *
1161
+ * ## Features
1162
+ * - **4 Variants**: Default (inline), Card, Card with icon top, Card with icon left
1163
+ * - **3 Sizes**: Small, Medium, Large
1164
+ * - **States**: Default, Focus, Disabled, Error
1165
+ * - **Animations**: Smooth thumb slide and track color transition
1166
+ * - **Dark Mode**: Full support via Tailwind dark: variants
1167
+ *
1168
+ * ## Accessibility
1169
+ * - Native checkbox input (sr-only) for form and a11y
1170
+ * - Keyboard navigation (Space to toggle, Tab to navigate)
1171
+ * - Focus-visible ring on track
1172
+ * - ARIA attributes and label association
1173
+ *
1174
+ * ## Class names (for customization)
1175
+ * - toggle-root: container label
1176
+ * - toggle-track: pill track
1177
+ * - toggle-thumb: circular thumb
1178
+ * - toggle-label: primary label text
1179
+ * - toggle-helper-text: helper text
1180
+ * - toggle-icon-wrapper: icon container (card variants)
1181
+ */
1182
+ declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLInputElement>>;
1183
+
1184
+ /**
1185
+ * DatePicker Type Definitions
1186
+ *
1187
+ * Shared types used across all DatePicker components.
1188
+ */
1189
+ /** Picker mode variants */
1190
+ type DatePickerMode = 'single' | 'range' | 'year' | 'month' | 'dob';
1191
+ /** Date range value type */
1192
+ type DateRange = [Date | null, Date | null];
1193
+ /** Value type based on mode */
1194
+ type DatePickerValue = Date | DateRange | null;
1195
+ /** Base props shared across DatePicker variants */
1196
+ interface DatePickerBaseProps {
1197
+ /** Picker mode */
1198
+ mode?: DatePickerMode;
1199
+ /** Label text */
1200
+ label?: string;
1201
+ /** Helper text below the input */
1202
+ helperText?: string;
1203
+ /** Required field indicator */
1204
+ required?: boolean;
1205
+ /** Error state */
1206
+ error?: boolean;
1207
+ /** Error message */
1208
+ errorMessage?: string;
1209
+ /** Disabled state */
1210
+ disabled?: boolean;
1211
+ /** Minimum selectable date */
1212
+ minDate?: Date;
1213
+ /** Maximum selectable date */
1214
+ maxDate?: Date;
1215
+ /** Specific dates to disable */
1216
+ disabledDates?: Date[];
1217
+ /** Placeholder text for input */
1218
+ placeholder?: string;
1219
+ /** Date format for display (default: 'MM/DD/YYYY') */
1220
+ dateFormat?: string;
1221
+ /** First day of week (0=Sunday, 1=Monday) */
1222
+ firstDayOfWeek?: 0 | 1;
1223
+ /** Show "Today" quick select button */
1224
+ showToday?: boolean;
1225
+ /** Show clear button */
1226
+ showClear?: boolean;
1227
+ /** Locale for month/day names */
1228
+ locale?: string;
1229
+ /** Custom className for container */
1230
+ className?: string;
1231
+ /** Custom className for the input */
1232
+ inputClassName?: string;
1233
+ /** Custom className for the dropdown */
1234
+ dropdownClassName?: string;
1235
+ }
1236
+ /** Props for single date picker mode */
1237
+ interface SingleDatePickerProps extends DatePickerBaseProps {
1238
+ mode?: 'single';
1239
+ /** Selected date (controlled) */
1240
+ value?: Date | null;
1241
+ /** Default date (uncontrolled) */
1242
+ defaultValue?: Date | null;
1243
+ /** Change handler */
1244
+ onChange?: (date: Date | null) => void;
1245
+ }
1246
+ /** Props for range date picker mode */
1247
+ interface RangeDatePickerProps extends DatePickerBaseProps {
1248
+ mode: 'range';
1249
+ /** Selected date range (controlled) */
1250
+ value?: DateRange;
1251
+ /** Default date range (uncontrolled) */
1252
+ defaultValue?: DateRange;
1253
+ /** Change handler */
1254
+ onChange?: (range: DateRange) => void;
1255
+ }
1256
+ /** Props for year picker mode */
1257
+ interface YearPickerProps extends DatePickerBaseProps {
1258
+ mode: 'year';
1259
+ /** Selected year (controlled) */
1260
+ value?: Date | null;
1261
+ /** Default year (uncontrolled) */
1262
+ defaultValue?: Date | null;
1263
+ /** Change handler */
1264
+ onChange?: (date: Date | null) => void;
1265
+ }
1266
+ /** Props for month picker mode */
1267
+ interface MonthPickerProps extends DatePickerBaseProps {
1268
+ mode: 'month';
1269
+ /** Selected month (controlled) */
1270
+ value?: Date | null;
1271
+ /** Default month (uncontrolled) */
1272
+ defaultValue?: Date | null;
1273
+ /** Change handler */
1274
+ onChange?: (date: Date | null) => void;
1275
+ }
1276
+ /** Props for date of birth picker mode */
1277
+ interface DOBPickerProps extends DatePickerBaseProps {
1278
+ mode: 'dob';
1279
+ /** Selected date (controlled) */
1280
+ value?: Date | null;
1281
+ /** Default date (uncontrolled) */
1282
+ defaultValue?: Date | null;
1283
+ /** Change handler */
1284
+ onChange?: (date: Date | null) => void;
1285
+ }
1286
+ /** Union type for all DatePicker props */
1287
+ type DatePickerProps = SingleDatePickerProps | RangeDatePickerProps | YearPickerProps | MonthPickerProps | DOBPickerProps;
1288
+
1289
+ /** Calendar Icon - Matches Figma design */
1290
+ declare const CalendarIcon: ({ className }: {
1291
+ className?: string;
1292
+ }) => react_jsx_runtime.JSX.Element;
1293
+
1294
+ /**
1295
+ * DatePicker Component
1296
+ *
1297
+ * A comprehensive date picker supporting single date, date range,
1298
+ * year, month, and date of birth selection modes.
1299
+ * Matches Figma design with proper animations and styling.
1300
+ */
1301
+
1302
+ /**
1303
+ * DatePicker - A flexible, accessible date picker component.
1304
+ *
1305
+ * ## Features
1306
+ * - **Multiple Modes**: Single date, date range, year, month, DOB selection
1307
+ * - **Controlled/Uncontrolled**: Works both ways like other form components
1308
+ * - **Accessible**: Full keyboard navigation, ARIA attributes, screen reader support
1309
+ * - **Themeable**: Uses Tailwind dark: variants for automatic dark mode
1310
+ * - **Animated**: Smooth transitions and hover effects
1311
+ *
1312
+ * @example
1313
+ * // Single date
1314
+ * <DatePicker value={date} onChange={setDate} />
1315
+ *
1316
+ * // Date range
1317
+ * <DatePicker mode="range" value={range} onChange={setRange} />
1318
+ */
1319
+ declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLButtonElement>>;
1320
+
1321
+ /**
1322
+ * Dropdown Type Definitions
1323
+ *
1324
+ * Shared types used across Dropdown components.
1325
+ */
1326
+
1327
+ /** Trigger style variant */
1328
+ type DropdownTriggerVariant = 'button' | 'input';
1329
+ /** Item content variant for DropdownItem */
1330
+ type DropdownItemVariant = 'default' | 'withCounter' | 'withDisclosure' | 'withCheckbox' | 'user' | 'withToggle' | 'destructive';
1331
+ /** User info for user-type dropdown item */
1332
+ interface DropdownItemUser {
1333
+ /** Avatar image URL or undefined for placeholder */
1334
+ avatar?: string;
1335
+ /** Display name */
1336
+ name: string;
1337
+ /** Secondary line (e.g. email) */
1338
+ email?: string;
1339
+ }
1340
+ /** Item shape for declarative API (items array) */
1341
+ interface DropdownItemData {
1342
+ /** Unique identifier */
1343
+ id: string;
1344
+ /** Display label */
1345
+ label: string;
1346
+ /** Optional icon (React node) */
1347
+ icon?: React.ReactNode;
1348
+ /** Optional helper/description text */
1349
+ helperText?: string;
1350
+ /** Optional right-aligned counter (e.g. "456") */
1351
+ counter?: string | number;
1352
+ /** Optional badge content (React node or string) */
1353
+ badge?: React.ReactNode;
1354
+ /** User info for user variant (avatar, name, email) */
1355
+ user?: DropdownItemUser;
1356
+ /** Checked state for checkbox variant */
1357
+ checked?: boolean;
1358
+ /** Disabled state */
1359
+ disabled?: boolean;
1360
+ /** Destructive styling (e.g. Sign Out) */
1361
+ destructive?: boolean;
1362
+ /** Link href – item renders as link when set */
1363
+ href?: string;
1364
+ /** Optional click handler */
1365
+ onClick?: () => void;
1366
+ /** Variant hint for rendering (defaults inferred from props) */
1367
+ variant?: DropdownItemVariant;
1368
+ /** Toggle checked state for withToggle variant */
1369
+ toggleChecked?: boolean;
1370
+ /** Toggle change handler for withToggle variant */
1371
+ onToggleChange?: (checked: boolean) => void;
1372
+ /**
1373
+ * Whether to close the dropdown when this item is selected.
1374
+ * Default true. Set to false for checkbox/toggle items so the menu stays open (e.g. multi-select).
1375
+ */
1376
+ closeOnSelect?: boolean;
1377
+ }
1378
+ /** Props for Dropdown root (declarative API) */
1379
+ interface DropdownProps {
1380
+ /** Label above trigger (like Input) */
1381
+ label?: string;
1382
+ /** Helper text below label */
1383
+ helperText?: string;
1384
+ /** Trigger style: button or input-like */
1385
+ triggerVariant?: DropdownTriggerVariant;
1386
+ /** Placeholder for input-style trigger */
1387
+ placeholder?: string;
1388
+ /** Trigger button label (for button variant) */
1389
+ triggerLabel?: string;
1390
+ /** Button variant when triggerVariant is 'button' */
1391
+ buttonVariant?: 'primary' | 'secondary';
1392
+ /** Button size when triggerVariant is 'button' */
1393
+ buttonSize?: 'lg' | 'md' | 'sm';
1394
+ /** Menu items (declarative) */
1395
+ items?: DropdownItemData[];
1396
+ /** Called when an item is selected (id) */
1397
+ onSelect?: (itemId: string, item: DropdownItemData) => void;
1398
+ /**
1399
+ * Controlled open state. When provided, the dropdown is controlled:
1400
+ * pass \`open={isOpen}\` and \`onOpenChange={setIsOpen}\` to open/close from outside
1401
+ * (e.g. close after async action, or open from a different button).
1402
+ */
1403
+ open?: boolean;
1404
+ /** Called when open state should change (trigger click, item select, Escape, click outside). Use with \`open\` for controlled mode. */
1405
+ onOpenChange?: (open: boolean) => void;
1406
+ /** Disabled state for trigger */
1407
+ disabled?: boolean;
1408
+ /** Custom className for root container */
1409
+ className?: string;
1410
+ /** Custom className for trigger */
1411
+ triggerClassName?: string;
1412
+ /** Custom className for menu panel */
1413
+ menuClassName?: string;
1414
+ /** Minimum width of menu (e.g. "200px") */
1415
+ menuMinWidth?: string;
1416
+ /** Children for compound API (Trigger + Menu + Items) */
1417
+ children?: React.ReactNode;
1418
+ }
1419
+ /** Props for DropdownTrigger (compound API) */
1420
+ interface DropdownTriggerProps {
1421
+ /** Trigger variant: button or input-style */
1422
+ variant?: DropdownTriggerVariant;
1423
+ /** Placeholder for input-style */
1424
+ placeholder?: string;
1425
+ /** Button label for button variant */
1426
+ children?: React.ReactNode;
1427
+ /** Disabled state */
1428
+ disabled?: boolean;
1429
+ /** Custom className */
1430
+ className?: string;
1431
+ /** Button variant when variant is 'button' */
1432
+ buttonVariant?: 'primary' | 'secondary';
1433
+ /** Button size when variant is 'button' */
1434
+ buttonSize?: 'lg' | 'md' | 'sm';
1435
+ }
1436
+ /** Props for DropdownMenu (compound API) */
1437
+ interface DropdownMenuProps {
1438
+ /** Menu content (DropdownItem components) */
1439
+ children?: React.ReactNode;
1440
+ /** Custom className */
1441
+ className?: string;
1442
+ /** Minimum width (e.g. "200px") */
1443
+ minWidth?: string;
1444
+ /** Alignment relative to trigger */
1445
+ align?: 'left' | 'right';
1446
+ }
1447
+ /** Props for DropdownItem */
1448
+ interface DropdownItemProps {
1449
+ /** Visual/content variant */
1450
+ variant?: DropdownItemVariant;
1451
+ /** Unique id (for selection callback) */
1452
+ id?: string;
1453
+ /** Display label (optional when itemData is provided) */
1454
+ label?: string;
1455
+ /** Optional icon (left) */
1456
+ icon?: React.ReactNode;
1457
+ /** Optional helper text (below label) */
1458
+ helperText?: string;
1459
+ /** Optional counter (right-aligned) */
1460
+ counter?: string | number;
1461
+ /** Optional badge (right) */
1462
+ badge?: React.ReactNode;
1463
+ /** User info for user variant */
1464
+ user?: DropdownItemUser;
1465
+ /** Checked state for checkbox variant */
1466
+ checked?: boolean;
1467
+ /** Disabled state */
1468
+ disabled?: boolean;
1469
+ /** Destructive styling */
1470
+ destructive?: boolean;
1471
+ /** Link href – renders as link when set */
1472
+ href?: string;
1473
+ /** Click handler */
1474
+ onSelect?: () => void;
1475
+ /** Custom component for link (e.g. Next.js Link) */
1476
+ as?: React.ElementType;
1477
+ /** Toggle checked for withToggle variant */
1478
+ toggleChecked?: boolean;
1479
+ /** Toggle change for withToggle variant */
1480
+ onToggleChange?: (checked: boolean) => void;
1481
+ /** Custom className */
1482
+ className?: string;
1483
+ /** Override content with custom children */
1484
+ children?: React.ReactNode;
1485
+ }
1486
+ /** Context value for Dropdown compound usage */
1487
+ interface DropdownContextValue {
1488
+ open: boolean;
1489
+ /** True while the menu is playing its close animation (before unmount) */
1490
+ closing: boolean;
1491
+ setOpen: (open: boolean) => void;
1492
+ triggerId: string;
1493
+ menuId: string;
1494
+ triggerRef: React.RefObject<HTMLButtonElement | HTMLDivElement | null>;
1495
+ menuRef: React.RefObject<HTMLDivElement | null>;
1496
+ }
1497
+
1498
+ /**
1499
+ * Dropdown component with declarative API (items array) and optional compound API (children).
1500
+ * Supports button and input-style triggers, label + helperText, full keyboard and ARIA support.
1501
+ *
1502
+ * **Controlled mode**: Pass `open` and `onOpenChange` to control open/close from outside.
1503
+ *
1504
+ * **Keep menu open on select**: Set \`closeOnSelect: false\` on an item (e.g. checkbox/toggle) so the menu stays open when that item is clicked.
1505
+ */
1506
+ declare const Dropdown: React.FC<DropdownProps>;
1507
+
1508
+ interface DropdownTriggerInternalProps extends DropdownTriggerProps {
1509
+ /** ID for accessibility (from context when used inside Dropdown) */
1510
+ id?: string;
1511
+ /** Aria label for trigger (e.g. for icon-only or input-style) */
1512
+ ariaLabel?: string;
1513
+ }
1514
+ declare const DropdownTrigger: React.ForwardRefExoticComponent<DropdownTriggerInternalProps & React.RefAttributes<HTMLButtonElement | HTMLDivElement>>;
1515
+
1516
+ interface DropdownMenuInternalProps extends DropdownMenuProps {
1517
+ /** ID for menu (from context when used inside Dropdown) */
1518
+ id?: string;
1519
+ /** ID of trigger for aria-labelledby (from context) */
1520
+ ariaLabelledBy?: string;
1521
+ }
1522
+ declare const DropdownMenu: React.FC<DropdownMenuInternalProps>;
1523
+
1524
+ interface DropdownItemInternalProps extends DropdownItemProps {
1525
+ /** Item data for declarative API (from root) */
1526
+ itemData?: DropdownItemData;
1527
+ /** Select callback for declarative API */
1528
+ onSelect?: () => void;
1529
+ }
1530
+ declare const DropdownItem: React.FC<DropdownItemInternalProps>;
1531
+
1532
+ /**
1533
+ * Pagination Type Definitions
1534
+ *
1535
+ * Shared types for the Pagination component and its variants.
1536
+ */
1537
+
1538
+ /** Visual variant of the pagination component (maps to Figma nodes) */
1539
+ type PaginationVariant = 'segmented' | 'prev-next-only' | 'compact' | 'with-entries' | 'with-items-per-page' | 'with-go-to' | 'go-to-only';
1540
+ interface PaginationProps {
1541
+ /** Current page (1-based) */
1542
+ currentPage: number;
1543
+ /** Total number of pages */
1544
+ totalPages: number;
1545
+ /** Page change event callback: called when the user navigates to a different page (Prev, Next, page number click, or Go). Receives the new page number (1-based). Not called when the clicked page is already the current page. */
1546
+ onPageChange?: (page: number) => void;
1547
+ /** Visual variant */
1548
+ variant?: PaginationVariant;
1549
+ /** Number of page buttons to show on each side of current (for ellipsis variants) */
1550
+ siblingCount?: number;
1551
+ /** Maximum number of page number buttons to show (excluding ellipsis). When set, overrides siblingCount to cap visible items. */
1552
+ maxVisiblePageNumbers?: number;
1553
+ /** Show first and last page in numbered list */
1554
+ showFirstLast?: boolean;
1555
+ /** Hide "Previous"/"Next" text (icon-only for segmented style) */
1556
+ hidePrevNextLabels?: boolean;
1557
+ /** For with-entries: total item count */
1558
+ totalItems?: number;
1559
+ /** For with-entries: items per page */
1560
+ pageSize?: number;
1561
+ /** For with-entries: label e.g. "Entries" */
1562
+ entriesLabel?: string;
1563
+ /** For with-items-per-page: options e.g. [5, 10, 20, 50] */
1564
+ pageSizeOptions?: number[];
1565
+ /** For with-items-per-page: current page size */
1566
+ onPageSizeChange?: (size: number) => void;
1567
+ /** Label for "Go to page" (with-go-to, go-to-only) */
1568
+ goToLabel?: string;
1569
+ /** Label for Go button */
1570
+ goButtonLabel?: string;
1571
+ /** Generate href for a page (enables link rendering when used with as) */
1572
+ getHref?: (page: number) => string;
1573
+ /** Custom component for links (e.g. Next.js Link) */
1574
+ as?: React.ElementType;
1575
+ /** "Previous" button label */
1576
+ previousLabel?: string;
1577
+ /** "Next" button label */
1578
+ nextLabel?: string;
1579
+ /** aria-label for the nav element */
1580
+ ariaLabel?: string;
1581
+ /** Optional aria label for each page button */
1582
+ getPageAriaLabel?: (page: number) => string;
1583
+ /** Custom render for a page number (page, { active, onClick, ... }) */
1584
+ renderPage?: (page: number, props: {
1585
+ active: boolean;
1586
+ onClick: () => void;
1587
+ 'aria-current'?: 'page';
1588
+ }) => React.ReactNode;
1589
+ /** Border radius (same as Button, Badge, etc.) */
1590
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
1591
+ /** Root className */
1592
+ className?: string;
1593
+ /** Children (unused; for future compound API) */
1594
+ children?: React.ReactNode;
1595
+ }
1596
+
1597
+ declare const Pagination: React.FC<PaginationProps>;
1598
+
1599
+ type ProgressBarVariant = 'primary' | 'success' | 'warning' | 'danger';
1600
+ type ProgressBarSize = 'sm' | 'md' | 'lg';
1601
+ type ProgressBarLabelPosition = 'top' | 'left' | 'right' | 'inside';
1602
+ interface ProgressBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1603
+ /** Current value (0 to max) */
1604
+ value?: number;
1605
+ /** Maximum value (default 100) */
1606
+ max?: number;
1607
+ /** Fill color variant */
1608
+ variant?: ProgressBarVariant;
1609
+ /** Track height size */
1610
+ size?: ProgressBarSize;
1611
+ /** Border radius (same as Button, Badge) */
1612
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
1613
+ /** Show animated loading fill (ignores value) */
1614
+ indeterminate?: boolean;
1615
+ /** Show numeric value (e.g. "75%") */
1616
+ showValue?: boolean;
1617
+ /** Optional label text or node */
1618
+ label?: string | React.ReactNode;
1619
+ /** Where label/value appear */
1620
+ labelPosition?: ProgressBarLabelPosition;
1621
+ /** Accessible label for progressbar role */
1622
+ ariaLabel?: string;
1623
+ }
1624
+ /**
1625
+ * ProgressBar component with Tailwind dark mode support and accessibility.
1626
+ *
1627
+ * Supports determinate (value/max) and indeterminate (animated loading) modes.
1628
+ * Uses semantic class names: progress-bar, progress-bar-track, progress-bar-fill,
1629
+ * progress-bar-label, progress-bar-value.
1630
+ */
1631
+ declare const ProgressBar: React.ForwardRefExoticComponent<ProgressBarProps & React.RefAttributes<HTMLDivElement>>;
1632
+
1633
+ type RangeSliderMode = 'single' | 'range';
1634
+ type RangeSliderSize = 'sm' | 'md' | 'lg';
1635
+ type RangeSliderColor = 'primary' | 'secondary' | 'tertiary' | 'blue' | 'green';
1636
+ type RangeSliderTooltipRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
1637
+ interface RangeSliderBaseProps {
1638
+ /** Single value (one thumb) or range (two thumbs) */
1639
+ mode?: RangeSliderMode;
1640
+ /** Minimum value */
1641
+ min?: number;
1642
+ /** Maximum value */
1643
+ max?: number;
1644
+ /** Step increment */
1645
+ step?: number;
1646
+ /** Disabled state */
1647
+ disabled?: boolean;
1648
+ /** Track and thumb size */
1649
+ size?: RangeSliderSize;
1650
+ /** Color variant */
1651
+ color?: RangeSliderColor;
1652
+ /** Optional label above the slider */
1653
+ label?: string | React.ReactNode;
1654
+ /** Show current value(s) next to the slider */
1655
+ showValue?: boolean;
1656
+ /** Show tooltip on hover/drag */
1657
+ showTooltip?: boolean;
1658
+ /** Always show tooltip (not just on hover/drag) */
1659
+ tooltipAlways?: boolean;
1660
+ /** Format value for display (value label and fallback when tooltip is not set) */
1661
+ formatValue?: (value: number) => string;
1662
+ /**
1663
+ * Tooltip content. Pass whatever text you want:
1664
+ * - String with placeholder: tooltip="Custom text {value} more text" (replaces {value} with current value)
1665
+ * - Static: tooltip="Volume" or tooltip={<span>Custom</span>}
1666
+ * - Function: tooltip={(value) => `Level ${value}`}
1667
+ */
1668
+ tooltip?: React.ReactNode | ((value: number) => React.ReactNode);
1669
+ /** Tooltip border radius variant */
1670
+ tooltipRadius?: RangeSliderTooltipRadius;
1671
+ /** Label at minimum end of track (e.g. "0") */
1672
+ minLabel?: string | React.ReactNode;
1673
+ /** Label at maximum end of track (e.g. "100") */
1674
+ maxLabel?: string | React.ReactNode;
1675
+ /** Show marks/ticks on the track */
1676
+ marks?: boolean | {
1677
+ value: number;
1678
+ label?: string;
1679
+ }[];
1680
+ /** Root className */
1681
+ className?: string;
1682
+ /** aria-label for single thumb */
1683
+ ariaLabel?: string;
1684
+ /** aria-label for min thumb in range mode */
1685
+ ariaLabelMin?: string;
1686
+ /** aria-label for max thumb in range mode */
1687
+ ariaLabelMax?: string;
1688
+ }
1689
+ interface RangeSliderSingleProps extends RangeSliderBaseProps {
1690
+ mode?: 'single';
1691
+ /** Current value (controlled) */
1692
+ value?: number;
1693
+ /** Called when value changes */
1694
+ onChange?: (value: number) => void;
1695
+ /** Called when user releases (mouseup/touchend) */
1696
+ onChangeCommitted?: (value: number) => void;
1697
+ valueMin?: never;
1698
+ valueMax?: never;
1699
+ }
1700
+ interface RangeSliderRangeProps extends RangeSliderBaseProps {
1701
+ mode: 'range';
1702
+ /** Minimum value (controlled) */
1703
+ valueMin?: number;
1704
+ /** Maximum value (controlled) */
1705
+ valueMax?: number;
1706
+ /** Called when min or max changes (min, max) */
1707
+ onChange?: (min: number, max: number) => void;
1708
+ /** Called when user releases */
1709
+ onChangeCommitted?: (min: number, max: number) => void;
1710
+ value?: never;
1711
+ }
1712
+ type RangeSliderProps = RangeSliderSingleProps | RangeSliderRangeProps;
1713
+ /**
1714
+ * Modern, smooth RangeSlider component with single or dual-thumb (range) mode.
1715
+ * Material UI inspired design with fluid animations and reliable pointer-based interaction.
1716
+ */
1717
+ declare const RangeSlider: React.ForwardRefExoticComponent<RangeSliderProps & React.RefAttributes<HTMLDivElement>>;
1718
+
1719
+ type RatingSize = 'sm' | 'md' | 'lg';
1720
+ type RatingVariant = 'primary' | 'secondary' | 'yellow';
1721
+ interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
1722
+ /** Current rating (0 to max) */
1723
+ value?: number;
1724
+ /** Maximum value (number of stars) */
1725
+ max?: number;
1726
+ /** Icon and gap size */
1727
+ size?: RatingSize;
1728
+ /** Filled star color variant */
1729
+ variant?: RatingVariant;
1730
+ /** Display-only (no click/hover to set) */
1731
+ readOnly?: boolean;
1732
+ /** Allow 0.5 steps (e.g. 3.5) */
1733
+ halfStars?: boolean;
1734
+ /** Show numeric label (e.g. "3.5" or "3.5 / 5") */
1735
+ showValue?: boolean;
1736
+ /** Called when user selects a rating. Pass this with readOnly={false} for interactive mode. */
1737
+ onChange?: (value: number) => void;
1738
+ /** Custom filled icon */
1739
+ iconFilled?: React.ReactNode;
1740
+ /** Custom empty icon */
1741
+ iconEmpty?: React.ReactNode;
1742
+ /** Optional label (e.g. "Quality") */
1743
+ label?: string | React.ReactNode;
1744
+ /** Accessible label for the rating */
1745
+ ariaLabel?: string;
1746
+ }
1747
+ /**
1748
+ * Rating component with Tailwind dark mode support and accessibility.
1749
+ * Read-only display or interactive (click/hover to set). Supports half stars.
1750
+ * Semantic class names: rating, rating-list, rating-item, rating-icon, rating-icon--filled,
1751
+ * rating-icon--empty, rating-icon--half, rating-label, rating-value.
1752
+ */
1753
+ declare const Rating: React.ForwardRefExoticComponent<RatingProps & React.RefAttributes<HTMLDivElement>>;
1754
+
1755
+ type SkeletonVariant = 'text' | 'circular' | 'rectangular';
1756
+ type SkeletonSize = 'sm' | 'md' | 'lg';
1757
+ type SkeletonRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
1758
+ type SkeletonAnimation = 'shimmer' | 'pulse' | 'none';
1759
+ interface SkeletonProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1760
+ /** Shape variant */
1761
+ variant?: SkeletonVariant;
1762
+ /** Height for text/rect, diameter for circular */
1763
+ size?: SkeletonSize;
1764
+ /** Border radius (rectangular/text; circular uses full) */
1765
+ radius?: SkeletonRadius;
1766
+ /** Animation style */
1767
+ animation?: SkeletonAnimation;
1768
+ /** For variant text: number of lines (last line can be shorter) */
1769
+ lines?: number;
1770
+ /** Optional width (e.g. '100%', '4rem') */
1771
+ width?: string | number;
1772
+ /** Optional height override */
1773
+ height?: string | number;
1774
+ /** Accessible label for loading placeholder */
1775
+ ariaLabel?: string;
1776
+ }
1777
+ interface SkeletonCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1778
+ /** Size of the avatar circle */
1779
+ avatarSize?: SkeletonSize;
1780
+ /** Number of text lines in content */
1781
+ lines?: number;
1782
+ /** Show avatar circle */
1783
+ showAvatar?: boolean;
1784
+ /** Animation for all parts */
1785
+ animation?: SkeletonAnimation;
1786
+ /** Accessible label */
1787
+ ariaLabel?: string;
1788
+ }
1789
+ /**
1790
+ * Skeleton loading placeholder with Tailwind dark mode, shimmer/pulse animation,
1791
+ * and reduced-motion support. Uses semantic class names: skeleton, skeleton--text,
1792
+ * skeleton--circular, skeleton--rectangular, skeleton-line, skeleton-shimmer, skeleton-pulse.
1793
+ */
1794
+ declare const Skeleton: React.ForwardRefExoticComponent<SkeletonProps & React.RefAttributes<HTMLDivElement>>;
1795
+ /**
1796
+ * Compound skeleton for card-style placeholders: avatar circle + text lines.
1797
+ * Uses semantic classes: skeleton-card, skeleton-card__avatar, skeleton-card__content.
1798
+ */
1799
+ declare const SkeletonCard: React.ForwardRefExoticComponent<SkeletonCardProps & React.RefAttributes<HTMLDivElement>>;
1800
+
1801
+ /**
1802
+ * Stepper type definitions.
1803
+ */
1804
+
1805
+ /** Step state */
1806
+ type StepStatus = 'completed' | 'current' | 'upcoming' | 'error';
1807
+ /** Single step in the stepper */
1808
+ interface StepperStep {
1809
+ /** Unique identifier */
1810
+ id: string;
1811
+ /** Step label (required) */
1812
+ label: string;
1813
+ /** Optional description below label */
1814
+ description?: string;
1815
+ /** Optional icon (React node); overrides default number/check */
1816
+ icon?: React.ReactNode;
1817
+ /** If set, step label renders as Link with this href */
1818
+ href?: string;
1819
+ /** Optional click handler (when no href) */
1820
+ onClick?: () => void;
1821
+ /** Disable this step (non-clickable, muted) */
1822
+ disabled?: boolean;
1823
+ /** Optional: true marks step as error state */
1824
+ error?: boolean;
1825
+ /** Optional: mark step explicitly as completed (overrides activeStepIndex logic) */
1826
+ completed?: boolean;
1827
+ /** When true, only the indicator (icon/circle) is shown; no label or description (e.g. for last step with icon) */
1828
+ iconOnly?: boolean;
1829
+ }
1830
+ /** Visual style variant */
1831
+ type StepperVariant = 'default' | 'alternateLabel' | 'labelsAbove' | 'line' | 'lineDots' | 'vertical' | 'dots' | 'progress';
1832
+ /** Step indicator and spacing size */
1833
+ type StepperSize = 'sm' | 'md' | 'lg';
1834
+ /** Layout direction (legacy, use variant instead for more control) */
1835
+ type StepperOrientation = 'horizontal' | 'vertical';
1836
+ /** Color scheme for the stepper */
1837
+ type StepperColor = 'primary' | 'secondary' | 'success';
1838
+ /** Props for the Stepper root */
1839
+ interface StepperProps {
1840
+ /** Array of steps */
1841
+ steps: StepperStep[];
1842
+ /** Index of the current (active) step (0-based). Default 0 */
1843
+ activeStepIndex?: number;
1844
+ /** Visual variant */
1845
+ variant?: StepperVariant;
1846
+ /** Size of indicator and spacing */
1847
+ size?: StepperSize;
1848
+ /** Color scheme */
1849
+ color?: StepperColor;
1850
+ /** Show connector lines between steps (default true) */
1851
+ showConnector?: boolean;
1852
+ /** Connector line style (default solid). Use 'dashed' to match Figma wireframe style. */
1853
+ connectorStyle?: 'solid' | 'dashed';
1854
+ /** Make connectors animate/transition when step changes */
1855
+ animatedConnector?: boolean;
1856
+ /** Called when a step is clicked (index, step). Use with clickable steps. */
1857
+ onStepClick?: (index: number, step: StepperStep) => void;
1858
+ /** Allow clicking on completed steps to go back */
1859
+ nonLinear?: boolean;
1860
+ /** Custom component for step links (e.g. Next.js Link). Used when step has href. */
1861
+ linkComponent?: React.ElementType;
1862
+ /** Root container class name */
1863
+ className?: string;
1864
+ /** Accessible label for the stepper (e.g. "Progress" or "Checkout steps") */
1865
+ ariaLabel?: string;
1866
+ }
1867
+
1868
+ /**
1869
+ * Modern Stepper component with multiple variants and smooth animations.
1870
+ */
1871
+ declare const Stepper: React.FC<StepperProps>;
1872
+
1873
+ /**
1874
+ * Tabs type definitions.
1875
+ *
1876
+ * Shared types for Tabs, TabsList, Tab, and TabPanel (declarative and compound API).
1877
+ */
1878
+
1879
+ /** Visual style variant for the tab list */
1880
+ type TabVariant = 'underline' | 'pills' | 'fullWidth';
1881
+ /** Layout direction */
1882
+ type TabsOrientation = 'horizontal' | 'vertical';
1883
+ /** Size of tabs (aligns with Button/Stepper) */
1884
+ type TabsSize = 'sm' | 'md' | 'lg';
1885
+ /** Item shape for declarative API (items array) */
1886
+ interface TabItem {
1887
+ /** Unique identifier (used as value) */
1888
+ id: string;
1889
+ /** Display label */
1890
+ label: string;
1891
+ /** Panel content (for items-based rendering) */
1892
+ content: React.ReactNode;
1893
+ /** Optional icon (React node, e.g. react-icons) */
1894
+ icon?: React.ReactNode;
1895
+ /** Disabled state */
1896
+ disabled?: boolean;
1897
+ /** When set, tab renders as link using linkComponent */
1898
+ href?: string;
1899
+ /** Optional badge (count or React node) */
1900
+ badge?: React.ReactNode;
1901
+ }
1902
+ /** Props for the Tabs root */
1903
+ interface TabsProps {
1904
+ /** Active tab value (controlled) */
1905
+ value?: string | number;
1906
+ /** Initial value when uncontrolled */
1907
+ defaultValue?: string | number;
1908
+ /** Called when active tab changes */
1909
+ onChange?: (value: string | number) => void;
1910
+ /** Declarative list of tabs (when provided, list + panels rendered internally) */
1911
+ items?: TabItem[];
1912
+ /** Visual variant: underline, pills, or fullWidth */
1913
+ variant?: TabVariant;
1914
+ /** horizontal or vertical */
1915
+ orientation?: TabsOrientation;
1916
+ /** Size: sm, md, lg */
1917
+ size?: TabsSize;
1918
+ /** Animate the underline/pill indicator (default true) */
1919
+ indicatorAnimation?: boolean;
1920
+ /** Animate panel change (default true) */
1921
+ panelAnimation?: boolean;
1922
+ /** Custom component for link tabs (e.g. Next.js Link) when item.href is set */
1923
+ linkComponent?: React.ElementType;
1924
+ /** Root container class name */
1925
+ className?: string;
1926
+ /** Accessible label for tablist (e.g. "Section tabs") */
1927
+ ariaLabel?: string;
1928
+ /** Compound API: TabsList + Tab + TabPanel */
1929
+ children?: React.ReactNode;
1930
+ }
1931
+ /** Props for TabsList (compound API) */
1932
+ interface TabsListProps {
1933
+ /** Tab buttons (Tab components) */
1934
+ children?: React.ReactNode;
1935
+ /** Custom class name */
1936
+ className?: string;
1937
+ /** Accessible label for the tab list */
1938
+ 'aria-label'?: string;
1939
+ }
1940
+ /** Props for a single Tab (compound API) */
1941
+ interface TabProps {
1942
+ /** Value that identifies this tab (matches TabPanel value) */
1943
+ value: string | number;
1944
+ /** Optional icon (left) */
1945
+ icon?: React.ReactNode;
1946
+ /** Disabled state */
1947
+ disabled?: boolean;
1948
+ /** When set, renders as link using context linkComponent */
1949
+ href?: string;
1950
+ /** Optional badge (count or node) */
1951
+ badge?: React.ReactNode;
1952
+ /** Custom class name */
1953
+ className?: string;
1954
+ /** Tab label content */
1955
+ children?: React.ReactNode;
1956
+ }
1957
+ /** Props for TabPanel (compound API) */
1958
+ interface TabPanelProps {
1959
+ /** Value that identifies this panel (matches Tab value) */
1960
+ value: string | number;
1961
+ /** Panel content */
1962
+ children?: React.ReactNode;
1963
+ /** Custom class name */
1964
+ className?: string;
1965
+ /** When true, force mount and hide with CSS (for animations). Default: unmount when inactive. */
1966
+ keepMounted?: boolean;
1967
+ }
1968
+
1969
+ interface TabsContextValue {
1970
+ value: string | number;
1971
+ setValue: (v: string | number) => void;
1972
+ variant: TabVariant;
1973
+ orientation: TabsOrientation;
1974
+ size: TabsSize;
1975
+ scrollable: boolean;
1976
+ linkComponent: React.ElementType | undefined;
1977
+ indicatorAnimation: boolean;
1978
+ panelAnimation: boolean;
1979
+ tabIdPrefix: string;
1980
+ panelIdPrefix: string;
1981
+ listRef: React.RefObject<HTMLDivElement | null>;
1982
+ registerTabRef: (value: string | number, el: HTMLButtonElement | HTMLAnchorElement | null) => void;
1983
+ unregisterTabRef: (value: string | number) => void;
1984
+ indicatorStyle: {
1985
+ left: number;
1986
+ top: number;
1987
+ width: number;
1988
+ height: number;
1989
+ } | null;
1990
+ }
1991
+ declare function useTabsContext(): TabsContextValue;
1992
+ declare const Tabs: React.FC<TabsProps>;
1993
+
1994
+ declare const TabsList: React.FC<TabsListProps>;
1995
+
1996
+ declare const Tab: React.FC<TabProps>;
1997
+
1998
+ declare const TabPanel: React.FC<TabPanelProps>;
1999
+
2000
+ /**
2001
+ * Toast type definitions.
2002
+ * Shared types for ToastProvider, ToastContainer, ToastItem, and useToast.
2003
+ */
2004
+
2005
+ /** Placement of the toast container on the viewport */
2006
+ type ToastPosition = 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right';
2007
+ /** Semantic variant (drives default icon and colors) */
2008
+ type ToastVariant = 'success' | 'warning' | 'error' | 'default';
2009
+ /** Layout type: simple (icon + message + close) or rich (avatar + title + message + action) */
2010
+ type ToastType = 'simple' | 'rich';
2011
+ /** User info for rich toast (avatar + name) */
2012
+ interface ToastUser {
2013
+ /** Avatar image URL or undefined for placeholder */
2014
+ avatar?: string;
2015
+ /** Display name */
2016
+ name: string;
2017
+ }
2018
+ /** Options when adding a toast (omit id; provider assigns it) */
2019
+ interface ToastOptions {
2020
+ variant?: ToastVariant;
2021
+ type?: ToastType;
2022
+ /** Optional title (rich type) or used as accessible label */
2023
+ title?: string;
2024
+ message: string;
2025
+ /** Override default variant icon */
2026
+ icon?: React.ReactNode;
2027
+ /** For rich type: user row (avatar + name) */
2028
+ user?: ToastUser;
2029
+ /** For rich type: action button label */
2030
+ actionLabel?: string;
2031
+ /** For rich type: action button icon */
2032
+ actionIcon?: React.ReactNode;
2033
+ /** For rich type: action button click handler */
2034
+ onAction?: () => void;
2035
+ /** Auto-dismiss after this many ms; false to disable */
2036
+ autoClose?: number | false;
2037
+ /** Show close button; default true */
2038
+ dismissible?: boolean;
2039
+ /** Called when toast is closed (dismiss or autoClose) */
2040
+ onClose?: () => void;
2041
+ }
2042
+ /** Internal toast item (has id and is stored in provider state) */
2043
+ interface ToastItemData extends ToastOptions {
2044
+ id: string;
2045
+ }
2046
+ /** Props for ToastProvider */
2047
+ interface ToastProviderProps {
2048
+ /** Where to place the toast container */
2049
+ position?: ToastPosition;
2050
+ /** Maximum number of toasts visible at once (newest shown) */
2051
+ maxToasts?: number;
2052
+ /** Gap between stacked toasts (e.g. 8 = 8px or gap-2) */
2053
+ stackOffset?: number;
2054
+ /** Custom className for the container wrapper */
2055
+ className?: string;
2056
+ children?: React.ReactNode;
2057
+ }
2058
+ /** Props for ToastItem (presentational; may include animation state) */
2059
+ interface ToastItemProps extends ToastItemData {
2060
+ /** Custom className for the toast root */
2061
+ className?: string;
2062
+ /** Optional style for animation */
2063
+ style?: React.CSSProperties;
2064
+ /** Whether the toast is currently playing exit animation */
2065
+ exiting?: boolean;
2066
+ /** Position (for direction-aware animation class) */
2067
+ position?: ToastPosition;
2068
+ /** Called when close/dismiss is clicked */
2069
+ onDismiss?: () => void;
2070
+ }
2071
+
2072
+ /**
2073
+ * Provider for toast notifications. Wrap your app (or a subtree) to enable useToast().
2074
+ * Renders a fixed ToastContainer at the configured position; toasts stack with offset.
2075
+ */
2076
+ declare const ToastProvider: React.FC<ToastProviderProps>;
2077
+
2078
+ /**
2079
+ * Presentational toast item. Renders simple (icon + message + close) or rich (avatar + title + message + action + close) layout.
2080
+ * Uses distinctive class names: toast-root, toast-icon-wrapper, toast-message, toast-close, toast-avatar, toast-title, toast-action.
2081
+ */
2082
+ declare const ToastItem: React.FC<ToastItemProps>;
2083
+
2084
+ /**
2085
+ * Hook to show and dismiss toasts. Must be used within ToastProvider.
2086
+ * Returns toast() for generic options and success/error/warning/info shortcuts.
2087
+ */
2088
+ declare function useToast(): {
2089
+ toast: (options: ToastOptions) => string;
2090
+ success: (message: string, opts?: Omit<ToastOptions, "message" | "variant">) => string;
2091
+ error: (message: string, opts?: Omit<ToastOptions, "message" | "variant">) => string;
2092
+ warning: (message: string, opts?: Omit<ToastOptions, "message" | "variant">) => string;
2093
+ info: (message: string, opts?: Omit<ToastOptions, "message" | "variant">) => string;
2094
+ dismiss: (id: string) => void;
2095
+ };
2096
+
2097
+ /**
2098
+ * Tooltip Type Definitions
2099
+ *
2100
+ * Shared types for the compound Tooltip component (root, trigger, content).
2101
+ */
2102
+
2103
+ /** Preferred placement; viewport may override to flip when near edge */
2104
+ type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
2105
+ /** Border radius variant (aligns with Alert/Button) */
2106
+ type TooltipRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
2107
+ /** Preset color variant for bubble and arrow; use contentClassName for full custom colors */
2108
+ type TooltipVariant = 'default' | 'light' | 'dark' | 'primary';
2109
+ /** Props for Tooltip root */
2110
+ interface TooltipProps {
2111
+ /** Preferred position (viewport can override when near edge) */
2112
+ position?: TooltipPlacement;
2113
+ /** Controlled open state */
2114
+ open?: boolean;
2115
+ /** Called when open state changes */
2116
+ onOpenChange?: (open: boolean) => void;
2117
+ /** Delay in ms before showing (hover/focus) */
2118
+ delayShow?: number;
2119
+ /** Delay in ms before hiding */
2120
+ delayHide?: number;
2121
+ /** When true, tooltip never opens */
2122
+ disabled?: boolean;
2123
+ /** Gap between trigger and tooltip bubble (px). Overridable per TooltipContent. */
2124
+ sideOffset?: number;
2125
+ /** Arrow alignment offset (px). Overridable per TooltipContent. */
2126
+ alignOffset?: number;
2127
+ /** Root wrapper className */
2128
+ className?: string;
2129
+ /** Must contain TooltipTrigger and TooltipContent */
2130
+ children?: React.ReactNode;
2131
+ }
2132
+ /** Props for TooltipTrigger */
2133
+ interface TooltipTriggerProps {
2134
+ /** If true, merge props into single child (e.g. Button); else wrap in span */
2135
+ asChild?: boolean;
2136
+ /** Trigger wrapper or child className */
2137
+ className?: string;
2138
+ /** Anchor element(s) */
2139
+ children?: React.ReactNode;
2140
+ }
2141
+ /** Props for TooltipContent */
2142
+ interface TooltipContentProps {
2143
+ /** Tooltip body (text or custom ReactNode) */
2144
+ children?: React.ReactNode;
2145
+ /** Preset color: default (grey), light, dark, primary. Override with contentClassName for custom colors. */
2146
+ variant?: TooltipVariant;
2147
+ /** Border radius of the bubble */
2148
+ radius?: TooltipRadius;
2149
+ /** Wrapper className (portal root, fixed positioned) */
2150
+ className?: string;
2151
+ /** Inner bubble className; use to set custom background/text (e.g. bg-blue-600 text-white). Pair with arrowColor so the arrow matches in all placements. */
2152
+ contentClassName?: string;
2153
+ /** Arrow color (CSS value) when using custom contentClassName; ensures the arrow matches when tooltip flips position. E.g. "#2563eb" or "rgb(37,99,235)". */
2154
+ arrowColor?: string;
2155
+ /** Arrow className (legacy); only use if you don't need viewport flip. Prefer arrowColor for custom colors. */
2156
+ arrowClassName?: string;
2157
+ /** Show arrow pointing to trigger (default true) */
2158
+ showArrow?: boolean;
2159
+ /** Gap between trigger and bubble (px) */
2160
+ sideOffset?: number;
2161
+ /** Arrow alignment offset (px) for fine-tuning */
2162
+ alignOffset?: number;
2163
+ }
2164
+ /** Context value provided by Tooltip root */
2165
+ interface TooltipContextValue {
2166
+ open: boolean;
2167
+ /** True while playing close animation before unmount */
2168
+ closing: boolean;
2169
+ setOpen: (open: boolean) => void;
2170
+ triggerId: string;
2171
+ contentId: string;
2172
+ triggerRef: React.RefObject<HTMLElement | null>;
2173
+ contentRef: React.RefObject<HTMLDivElement | null>;
2174
+ /** Effective placement after viewport check (may differ from preferred) */
2175
+ placement: TooltipPlacement;
2176
+ /** Set effective placement (called by TooltipContent after measure) */
2177
+ setPlacement: (placement: TooltipPlacement) => void;
2178
+ /** Preferred position prop */
2179
+ position: TooltipPlacement;
2180
+ disabled: boolean;
2181
+ delayShow: number;
2182
+ delayHide: number;
2183
+ /** Default gap (px) from root; TooltipContent can override with its own sideOffset. */
2184
+ sideOffset: number;
2185
+ /** Default arrow offset (px) from root; TooltipContent can override. */
2186
+ alignOffset: number;
2187
+ }
2188
+
2189
+ declare function useTooltipContext(): TooltipContextValue;
2190
+ declare const Tooltip: React.FC<TooltipProps>;
2191
+
2192
+ declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipTriggerProps & React.RefAttributes<HTMLElement>>;
2193
+
2194
+ declare const TooltipContent: React.FC<TooltipContentProps>;
2195
+
2196
+ export { Accordion, type AccordionItem, type AccordionProps, Alert, AlertCircleIcon, type AlertProps, ArrowRightIcon, Avatar, AvatarGroup, type AvatarGroupProps, AvatarLabel, type AvatarLabelProps, type AvatarProps, Badge, type BadgeProps, BookOpenIcon, BookmarkIcon, Breadcrumb, type BreadcrumbDropdownItem, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, CalendarIcon, Card, type CardProps, Carousel, type CarouselProps, CartIcon, CheckCircleIcon, CheckIcon, Checkbox, type CheckboxProps, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ClockIcon, CloseIcon, CreditCardIcon, type CurrencyOption, type DOBPickerProps, DatePicker, type DatePickerMode, type DatePickerProps, type DatePickerValue, type DateRange, Dropdown, type DropdownContextValue, DropdownItem, type DropdownItemData, type DropdownItemProps, type DropdownItemUser, type DropdownItemVariant, DropdownMenu, type DropdownMenuProps, type DropdownProps, DropdownTrigger, type DropdownTriggerProps, type DropdownTriggerVariant, FireIcon, HomeIcon, InfoCircleIcon, Input, type InputProps, LayersIcon, Link, type LinkProps, MessageComposer, type MessageComposerProps, MinusIcon, type MonthPickerProps, NumberInput, type NumberInputProps, type OTPCellStatus, OTPInput, type OTPInputProps, Pagination, type PaginationProps, type PaginationVariant, PlusIcon, ProfileCardIcon, ProgressBar, type ProgressBarLabelPosition, type ProgressBarProps, type ProgressBarSize, type ProgressBarVariant, RadioButton, type RadioButtonProps, type RangeDatePickerProps, RangeSlider, type RangeSliderColor, type RangeSliderMode, type RangeSliderProps, type RangeSliderRangeProps, type RangeSliderSingleProps, type RangeSliderSize, type RangeSliderTooltipRadius, Rating, type RatingProps, type RatingSize, type RatingVariant, SearchIcon, SettingsIcon, type SingleDatePickerProps, Skeleton, type SkeletonAnimation, SkeletonCard, type SkeletonCardProps, type SkeletonProps, type SkeletonRadius, type SkeletonSize, type SkeletonVariant, StarIcon, type StepStatus, Stepper, type StepperColor, type StepperOrientation, type StepperProps, type StepperSize, type StepperStep, type StepperVariant, Tab, type TabItem, TabPanel, type TabPanelProps, type TabProps, type TabVariant, Tabs, type TabsContextValue, TabsList, type TabsListProps, type TabsOrientation, type TabsProps, type TabsSize, Textarea, type TextareaProps, ToastItem, type ToastItemData, type ToastPosition, ToastProvider, type ToastProviderProps, type ToastType, type ToastVariant, Toggle, type ToggleProps, Tooltip, TooltipContent, type TooltipContentProps, type TooltipContextValue, type TooltipPlacement, type TooltipProps, type TooltipRadius, TooltipTrigger, type TooltipTriggerProps, type TooltipVariant, TruckIcon, type YearPickerProps, cn, useTabsContext, useToast, useTooltipContext };