@caqophony/ui 0.0.0-stage → 0.1.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,1716 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import * as React from 'react';
4
+ import { ReactNode, ReactElement, ComponentType } from 'react';
5
+ import * as SwitchPrimitives from '@radix-ui/react-switch';
6
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
7
+ import * as react_jsx_runtime from 'react/jsx-runtime';
8
+ export { MarkdownRenderer } from './markdown.mjs';
9
+ import { LucideIcon } from 'lucide-react';
10
+ import { ClassValue } from 'clsx';
11
+
12
+ declare const buttonVariants: (props?: ({
13
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
14
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
15
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
16
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
17
+ asChild?: boolean;
18
+ /** Show loading spinner and disable button */
19
+ loading?: boolean;
20
+ /** Text to show when loading (defaults to children) */
21
+ loadingText?: string;
22
+ }
23
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
24
+
25
+ /**
26
+ * Input Component
27
+ *
28
+ * Standard form input with consistent sizing, focus ring, and disabled state.
29
+ * Mobile-first: 44px minimum height for touch targets.
30
+ *
31
+ * Usage:
32
+ * import { Input } from '@caqophony/ui';
33
+ * <Input type="email" placeholder="Enter email" />
34
+ *
35
+ * Authored by Caqophony
36
+ */
37
+
38
+ interface InputProps extends React.ComponentProps<'input'> {
39
+ /** Show error styling (red border + aria-invalid) */
40
+ error?: boolean;
41
+ /** ID of the element describing the error, for aria-describedby */
42
+ errorMessageId?: string;
43
+ }
44
+ declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
45
+
46
+ /**
47
+ * Card Component
48
+ *
49
+ * Composable card container with header, content, footer, title, and description.
50
+ * Uses Gossamer semantic tokens — no hardcoded colors.
51
+ *
52
+ * Usage:
53
+ * import { Card, CardHeader, CardTitle, CardContent } from '@caqophony/ui';
54
+ * <Card>
55
+ * <CardHeader><CardTitle>Title</CardTitle></CardHeader>
56
+ * <CardContent>Body</CardContent>
57
+ * </Card>
58
+ *
59
+ * Authored by Caqophony
60
+ */
61
+
62
+ declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
63
+ declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
64
+ declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
65
+ declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
66
+ declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
67
+ declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
68
+
69
+ /**
70
+ * Switch Component
71
+ *
72
+ * Accessible toggle switch using Radix UI primitives.
73
+ * Uses Gossamer semantic tokens for dark mode support.
74
+ *
75
+ * Authored by Caqophony
76
+ */
77
+
78
+ interface SwitchProps extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> {
79
+ /** Optional label to display next to the switch */
80
+ label?: string;
81
+ /** Optional description text below the label */
82
+ description?: string;
83
+ }
84
+ declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
85
+
86
+ /**
87
+ * Tooltip Component
88
+ *
89
+ * A reusable tooltip using Radix UI primitives.
90
+ * Use for showing additional information on hover.
91
+ *
92
+ * Usage:
93
+ * ```tsx
94
+ * import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@caqophony/ui';
95
+ *
96
+ * <TooltipProvider>
97
+ * <Tooltip>
98
+ * <TooltipTrigger>Hover me</TooltipTrigger>
99
+ * <TooltipContent>Tooltip text</TooltipContent>
100
+ * </Tooltip>
101
+ * </TooltipProvider>
102
+ * ```
103
+ *
104
+ * Authored by Caqophony
105
+ */
106
+
107
+ declare const TooltipProvider: React.FC<TooltipPrimitive.TooltipProviderProps>;
108
+ declare const Tooltip: React.FC<TooltipPrimitive.TooltipProps>;
109
+ declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
110
+ declare const TooltipContent: React.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
111
+
112
+ interface FormFieldProps {
113
+ /** Field label text */
114
+ label: string;
115
+ /** Field name (used for htmlFor) */
116
+ name: string;
117
+ /** Error message to display */
118
+ error?: string;
119
+ /** Optional description/hint text */
120
+ description?: string;
121
+ /** Whether field is required */
122
+ required?: boolean;
123
+ /** Whether the field and its child input are disabled */
124
+ disabled?: boolean;
125
+ /** Children (typically Input, Select, etc.) */
126
+ children: React.ReactNode;
127
+ /** Additional className for the wrapper */
128
+ className?: string;
129
+ }
130
+ /**
131
+ * FormField - Wrapper component for form inputs with validation feedback
132
+ *
133
+ * Features:
134
+ * - Label with optional required indicator
135
+ * - Error state with red border on child input
136
+ * - Error message displayed below input
137
+ * - Optional description/hint text
138
+ * - Mobile-first responsive design
139
+ */
140
+ declare function FormField({ label, name, error, description, required, disabled, children, className, }: FormFieldProps): react_jsx_runtime.JSX.Element;
141
+ /**
142
+ * FormFieldGroup - Groups multiple FormFields horizontally on larger screens
143
+ *
144
+ * Usage:
145
+ * <FormFieldGroup>
146
+ * <FormField label="First Name" name="firstName">...</FormField>
147
+ * <FormField label="Last Name" name="lastName">...</FormField>
148
+ * </FormFieldGroup>
149
+ */
150
+ interface FormFieldGroupProps {
151
+ children: React.ReactNode;
152
+ className?: string;
153
+ }
154
+ declare function FormFieldGroup({ children, className }: FormFieldGroupProps): react_jsx_runtime.JSX.Element;
155
+ /**
156
+ * FormSection - Groups related form fields with an optional heading
157
+ *
158
+ * Usage:
159
+ * <FormSection title="Personal Information">
160
+ * <FormField label="Name" name="name">...</FormField>
161
+ * </FormSection>
162
+ */
163
+ interface FormSectionProps {
164
+ title?: string;
165
+ description?: string;
166
+ children: React.ReactNode;
167
+ className?: string;
168
+ }
169
+ declare function FormSection({ title, description, children, className, }: FormSectionProps): react_jsx_runtime.JSX.Element;
170
+ /**
171
+ * FormError - Displays form-level errors (not field-specific)
172
+ *
173
+ * Usage:
174
+ * <FormError error="Unable to save changes. Please try again." />
175
+ */
176
+ interface FormErrorProps {
177
+ error?: string | null;
178
+ className?: string;
179
+ }
180
+ declare function FormError({ error, className }: FormErrorProps): react_jsx_runtime.JSX.Element | null;
181
+ /**
182
+ * FormSuccess - Displays form-level success messages
183
+ *
184
+ * Usage:
185
+ * <FormSuccess message="Changes saved successfully!" />
186
+ */
187
+ interface FormSuccessProps {
188
+ message?: string | null;
189
+ className?: string;
190
+ }
191
+ declare function FormSuccess({ message, className }: FormSuccessProps): react_jsx_runtime.JSX.Element | null;
192
+
193
+ /**
194
+ * Global Error Content Component
195
+ *
196
+ * Centralized error UI for global-error.tsx pages across all apps.
197
+ * This component provides the error display content that each app wraps
198
+ * in their own global-error.tsx with the required <html> and <body> tags.
199
+ *
200
+ * IMPORTANT: Next.js 16 with Turbopack prerenders global-error.tsx during build.
201
+ * This component must be completely STATELESS - no hooks (useState, useEffect, etc.)
202
+ * allowed. If you need client-side logic, use event handlers that check `typeof window`.
203
+ *
204
+ * Sentry reporting should happen server-side via error.tsx instead.
205
+ *
206
+ * @see https://github.com/vercel/next.js/issues/85668
207
+ *
208
+ * Authored by Caqophony
209
+ */
210
+
211
+ interface GlobalErrorContentProps {
212
+ /** The error that occurred */
213
+ error: Error & {
214
+ digest?: string;
215
+ };
216
+ /** Next.js reset function to re-render the page */
217
+ reset: () => void;
218
+ /** Optional app name for branding/support context */
219
+ appName?: string;
220
+ /** Support address for the "contact support" link. The link is omitted when not provided. */
221
+ supportEmail?: string;
222
+ /** Optional custom action buttons to display instead of defaults */
223
+ customActions?: ReactNode;
224
+ }
225
+ /**
226
+ * Stateless error content component for global-error pages.
227
+ *
228
+ * Usage in app/global-error.tsx:
229
+ * ```tsx
230
+ * 'use client';
231
+ * import { GlobalErrorContent } from '@caqophony/ui';
232
+ *
233
+ * export default function GlobalError({ error, reset }) {
234
+ * return (
235
+ * <html lang="en">
236
+ * <body style={{ margin: 0 }}>
237
+ * <GlobalErrorContent error={error} reset={reset} appName="My App" />
238
+ * </body>
239
+ * </html>
240
+ * );
241
+ * }
242
+ * ```
243
+ */
244
+ declare function GlobalErrorContent({ error, reset, appName, supportEmail, customActions, }: GlobalErrorContentProps): ReactElement;
245
+
246
+ interface SidebarContextValue {
247
+ isCollapsed: boolean;
248
+ toggle: () => void;
249
+ }
250
+ declare function useSidebar(): SidebarContextValue;
251
+ interface NavItem {
252
+ name: string;
253
+ href: string;
254
+ icon: ComponentType<{
255
+ className?: string;
256
+ }>;
257
+ description?: string;
258
+ }
259
+ type LinkComponentProps = {
260
+ href: unknown;
261
+ className?: string;
262
+ children: ReactNode;
263
+ };
264
+ interface CollapsibleSidebarProps {
265
+ /** Unique key for localStorage persistence */
266
+ storageKey?: string;
267
+ /** Default collapsed state */
268
+ defaultCollapsed?: boolean;
269
+ /** Header content (title, logo) */
270
+ header?: ReactNode;
271
+ /** Header content when collapsed (optional, defaults to null) */
272
+ collapsedHeader?: ReactNode;
273
+ /** Navigation items */
274
+ items: NavItem[];
275
+ /** Function to check if item is active */
276
+ isActive?: (href: string) => boolean;
277
+ /** Custom link component (for Next.js Link) */
278
+ linkComponent?: ComponentType<LinkComponentProps>;
279
+ /** Footer content */
280
+ footer?: ReactNode;
281
+ /** Footer content when collapsed (optional) */
282
+ collapsedFooter?: ReactNode;
283
+ /** Additional className */
284
+ className?: string;
285
+ /** Custom collapsed width (default: 64px) */
286
+ collapsedWidth?: number;
287
+ /** Custom expanded width (default: 256px) */
288
+ expandedWidth?: number;
289
+ }
290
+ declare function CollapsibleSidebar({ storageKey, defaultCollapsed, header, collapsedHeader, items, isActive, linkComponent: LinkComponent, footer, collapsedFooter, className, collapsedWidth, expandedWidth, }: CollapsibleSidebarProps): react_jsx_runtime.JSX.Element;
291
+
292
+ interface AccordionSingleProps {
293
+ type?: 'single';
294
+ value?: string;
295
+ defaultValue?: string;
296
+ onValueChange?: (value: string) => void;
297
+ collapsible?: boolean;
298
+ children: React.ReactNode;
299
+ className?: string;
300
+ }
301
+ interface AccordionMultipleProps {
302
+ type: 'multiple';
303
+ value?: string[];
304
+ defaultValue?: string[];
305
+ onValueChange?: (value: string[]) => void;
306
+ children: React.ReactNode;
307
+ className?: string;
308
+ }
309
+ type AccordionProps = AccordionSingleProps | AccordionMultipleProps;
310
+ declare function Accordion(props: AccordionProps): react_jsx_runtime.JSX.Element;
311
+ interface AccordionItemProps {
312
+ value: string;
313
+ children: React.ReactNode;
314
+ className?: string;
315
+ disabled?: boolean;
316
+ /** Optional data-testid for the item wrapper */
317
+ testId?: string;
318
+ }
319
+ declare function AccordionItem({ value, children, className, disabled, testId, }: AccordionItemProps): react_jsx_runtime.JSX.Element;
320
+ interface AccordionTriggerProps {
321
+ children: React.ReactNode;
322
+ className?: string;
323
+ icon?: React.ReactNode;
324
+ /** Additional content on the right side (before chevron) */
325
+ rightContent?: React.ReactNode;
326
+ /** Optional data-testid for the trigger button */
327
+ testId?: string;
328
+ }
329
+ declare function AccordionTrigger({ children, className, icon, rightContent, testId, }: AccordionTriggerProps): react_jsx_runtime.JSX.Element;
330
+ interface AccordionContentProps {
331
+ children: React.ReactNode;
332
+ className?: string;
333
+ /** Optional data-testid for the content wrapper */
334
+ testId?: string;
335
+ }
336
+ declare function AccordionContent({ children, className, testId, }: AccordionContentProps): react_jsx_runtime.JSX.Element;
337
+ /**
338
+ * SimpleAccordion - A single, self-contained accordion section
339
+ *
340
+ * For when you just need one expandable section without the full Accordion setup.
341
+ *
342
+ * Usage:
343
+ * <SimpleAccordion
344
+ * title="Advanced Settings"
345
+ * icon={<Settings className="size-5" />}
346
+ * defaultOpen={false}
347
+ * >
348
+ * Content here...
349
+ * </SimpleAccordion>
350
+ */
351
+ interface SimpleAccordionProps {
352
+ /** The trigger title */
353
+ title: React.ReactNode;
354
+ /** Optional icon before the title */
355
+ icon?: React.ReactNode;
356
+ /** Content on the right side of the trigger (before chevron) */
357
+ rightContent?: React.ReactNode;
358
+ /** Whether the accordion is open by default */
359
+ defaultOpen?: boolean;
360
+ /** Controlled open state */
361
+ open?: boolean;
362
+ /** Callback when open state changes */
363
+ onOpenChange?: (open: boolean) => void;
364
+ /** The accordion content */
365
+ children: React.ReactNode;
366
+ /** Additional class for the container */
367
+ className?: string;
368
+ /** Additional class for the trigger */
369
+ triggerClassName?: string;
370
+ /** Additional class for the content wrapper */
371
+ contentClassName?: string;
372
+ /** Optional data-testid for the trigger button */
373
+ triggerTestId?: string;
374
+ /** Optional data-testid for the content area */
375
+ contentTestId?: string;
376
+ }
377
+ declare function SimpleAccordion({ title, icon, rightContent, defaultOpen, open: controlledOpen, onOpenChange, children, className, triggerClassName, contentClassName, triggerTestId, contentTestId, }: SimpleAccordionProps): react_jsx_runtime.JSX.Element;
378
+
379
+ interface ConfirmDialogProps {
380
+ /** Dialog title */
381
+ title: string;
382
+ /** Dialog message/description */
383
+ message: string;
384
+ /** Confirm button text */
385
+ confirmLabel: string;
386
+ /** Callback when confirmed */
387
+ onConfirm: () => void;
388
+ /** Callback when cancelled */
389
+ onCancel: () => void;
390
+ /** Loading state (disables buttons and shows spinner) */
391
+ isLoading?: boolean;
392
+ /** Test ID for the confirm button */
393
+ confirmTestId?: string;
394
+ /** Test ID for the cancel button */
395
+ cancelTestId?: string;
396
+ /** Test ID for the dialog overlay */
397
+ dialogTestId?: string;
398
+ /** Cancel button text (default: "Cancel") */
399
+ cancelLabel?: string;
400
+ /** Variant for confirm button (default: "default") */
401
+ confirmVariant?: 'default' | 'destructive';
402
+ /** Additional class for the dialog container */
403
+ className?: string;
404
+ }
405
+ declare function ConfirmDialog({ title, message, confirmLabel, onConfirm, onCancel, isLoading, confirmTestId, cancelTestId, dialogTestId, cancelLabel, confirmVariant, className, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
406
+
407
+ /** Supported DiceBear avatar styles */
408
+ type DiceBearStyle = 'adventurer' | 'adventurer-neutral' | 'avataaars' | 'avataaars-neutral' | 'big-ears' | 'big-ears-neutral' | 'bottts' | 'bottts-neutral' | 'croodles' | 'croodles-neutral' | 'fun-emoji' | 'icons' | 'identicon' | 'initials' | 'lorelei' | 'lorelei-neutral' | 'micah' | 'miniavs' | 'notionists' | 'notionists-neutral' | 'open-peeps' | 'personas' | 'pixel-art' | 'pixel-art-neutral' | 'rings' | 'shapes' | 'thumbs';
409
+ declare const avatarVariants: (props?: ({
410
+ size?: "sm" | "lg" | "xs" | "md" | "xl" | "2xl" | null | undefined;
411
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
412
+ /**
413
+ * Build a DiceBear avatar URL from a seed and style.
414
+ * Deterministic — same seed + style always produces the same avatar.
415
+ */
416
+ declare function buildDiceBearUrl(seed: string, style?: DiceBearStyle): string;
417
+ interface DiceBearAvatarProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof avatarVariants> {
418
+ /** Seed string for deterministic avatar generation (e.g. agent ID or name) */
419
+ seed: string;
420
+ /** DiceBear style to use. Defaults to 'adventurer-neutral'. */
421
+ avatarStyle?: DiceBearStyle;
422
+ /** Alt text for accessibility. Defaults to 'Avatar'. */
423
+ alt?: string;
424
+ /** Fallback content when image fails to load (e.g. initials) */
425
+ fallback?: React.ReactNode;
426
+ }
427
+ declare const DiceBearAvatar: React.ForwardRefExoticComponent<DiceBearAvatarProps & React.RefAttributes<HTMLDivElement>>;
428
+
429
+ interface IntentIconProps {
430
+ intent?: 'success' | 'warning' | 'error' | 'info';
431
+ size?: 'sm' | 'md';
432
+ }
433
+ declare function IntentIcon({ intent, size, }: IntentIconProps): react_jsx_runtime.JSX.Element;
434
+
435
+ interface SectionHeadingProps {
436
+ title: string;
437
+ description?: string;
438
+ align?: 'center' | 'left';
439
+ size?: 'display' | 'h1' | 'h2' | 'h3';
440
+ }
441
+ declare function SectionHeading({ title, description, align, size, }: SectionHeadingProps): react_jsx_runtime.JSX.Element;
442
+
443
+ /**
444
+ * FilterChip Atom Component
445
+ *
446
+ * Inline filter toggle with optional count badge.
447
+ * Uses Gossamer semantic tokens for dark mode support.
448
+ *
449
+ * Authored by Caqophony
450
+ */
451
+ interface FilterChipProps {
452
+ /** Display label */
453
+ label: string;
454
+ /** Whether the chip is currently selected */
455
+ active?: boolean;
456
+ /** Optional count badge */
457
+ count?: number;
458
+ /** Chip size */
459
+ size?: 'sm' | 'md';
460
+ /** Click handler */
461
+ onClick?: () => void;
462
+ }
463
+ /**
464
+ * FilterChip — a pill-shaped toggle for filter bars.
465
+ *
466
+ * - **Inactive**: white bg, border, muted text
467
+ * - **Active**: foreground bg, white text
468
+ * - Optional count badge with accessible contrast (WCAG AA 5.7:1)
469
+ */
470
+ declare function FilterChip({ label, active, count, size, onClick, }: FilterChipProps): react_jsx_runtime.JSX.Element;
471
+
472
+ /**
473
+ * DistributionChip — a color-dotted count chip for reading a state/cost mix at a
474
+ * glance in a focal header (e.g. "● 12 running ● 3 failed"). The count/label
475
+ * distribution idiom used across the design-sweep headers.
476
+ *
477
+ * Authored by Caqophony
478
+ */
479
+ interface DistributionChipProps {
480
+ /** The count (or short value) shown in the chip. */
481
+ count: number | string;
482
+ /** The label describing what the count measures. */
483
+ label: string;
484
+ /** Tailwind class for the leading status dot (e.g. `bg-intent-success`). */
485
+ dotClass: string;
486
+ /** Optional test id. */
487
+ testId?: string;
488
+ }
489
+ declare function DistributionChip({ count, label, dotClass, testId, }: DistributionChipProps): react_jsx_runtime.JSX.Element;
490
+
491
+ /**
492
+ * SkeletonBar Atom Component
493
+ *
494
+ * Simple loading placeholder rectangle with muted fill and pill radius.
495
+ * Used as a building block in SkeletonCard and SkeletonRow.
496
+ *
497
+ * Authored by Caqophony
498
+ */
499
+ interface SkeletonBarProps {
500
+ /** Width in px, or "full" for 100%. Default: "full" */
501
+ width?: number | 'full';
502
+ /** Height in px. Default: 14 */
503
+ height?: number;
504
+ /** Optional CSS class name */
505
+ className?: string;
506
+ }
507
+ /**
508
+ * SkeletonBar — a single loading placeholder bar.
509
+ *
510
+ * Mirrors the Figma skeletonBar helper: muted fill, pill radius (height/2),
511
+ * animate-pulse for loading indication.
512
+ */
513
+ declare function SkeletonBar({ width, height, className, }: SkeletonBarProps): react_jsx_runtime.JSX.Element;
514
+
515
+ /**
516
+ * SkeletonCard Atom Component
517
+ *
518
+ * Card-shaped loading placeholder with 3 skeleton bars inside.
519
+ * Static placeholder requiring no props.
520
+ *
521
+ * Authored by Caqophony
522
+ */
523
+ interface SkeletonCardProps {
524
+ /** Optional CSS class name */
525
+ className?: string;
526
+ }
527
+ /**
528
+ * SkeletonCard — a card loading placeholder.
529
+ *
530
+ * Mirrors the Figma skeletonCard helper: card bg, border, rounded-xl,
531
+ * padding 20px, gap 10px, containing 3 skeleton bars (80x10, 60x24, 100x10).
532
+ */
533
+ declare function SkeletonCard({ className }: SkeletonCardProps): react_jsx_runtime.JSX.Element;
534
+
535
+ /**
536
+ * SkeletonRow Atom Component
537
+ *
538
+ * Row-shaped loading placeholder with avatar circle + 2 skeleton bars.
539
+ * Static placeholder requiring no props.
540
+ *
541
+ * Authored by Caqophony
542
+ */
543
+ interface SkeletonRowProps {
544
+ /** Optional CSS class name */
545
+ className?: string;
546
+ }
547
+ /**
548
+ * SkeletonRow — a row loading placeholder with avatar and text lines.
549
+ *
550
+ * Mirrors the Figma skeletonRow helper: card bg, border, rounded-[10px],
551
+ * padding 14px/18px, gap 14px, with 36px circle avatar + 2 bars (200x12, 140x10).
552
+ */
553
+ declare function SkeletonRow({ className }: SkeletonRowProps): react_jsx_runtime.JSX.Element;
554
+
555
+ /**
556
+ * StackedList Component
557
+ *
558
+ * Vertical list of items with avatar, content, and action slots.
559
+ * Common pattern for entity lists, activity feeds, and notification panels.
560
+ *
561
+ * Usage:
562
+ * import { StackedList, StackedListItem } from '@caqophony/ui';
563
+ * <StackedList divided>
564
+ * <StackedListItem
565
+ * avatar={<Avatar />}
566
+ * title="Item title"
567
+ * description="Description text"
568
+ * action={<Button size="sm">Edit</Button>}
569
+ * />
570
+ * </StackedList>
571
+ *
572
+ * Issue #2630 — B-4: Stacked Lists + Grid Lists
573
+ * Authored by Caqophony
574
+ */
575
+
576
+ interface StackedListProps extends React.HTMLAttributes<HTMLUListElement> {
577
+ divided?: boolean;
578
+ density?: 'compact' | 'default';
579
+ }
580
+ declare const StackedList: React.ForwardRefExoticComponent<StackedListProps & React.RefAttributes<HTMLUListElement>>;
581
+ interface StackedListItemProps extends React.HTMLAttributes<HTMLLIElement> {
582
+ avatar?: React.ReactNode;
583
+ title: string;
584
+ description?: string;
585
+ meta?: string;
586
+ action?: React.ReactNode;
587
+ density?: 'compact' | 'default';
588
+ }
589
+ declare const StackedListItem: React.ForwardRefExoticComponent<StackedListItemProps & React.RefAttributes<HTMLLIElement>>;
590
+
591
+ /**
592
+ * GridList Component
593
+ *
594
+ * Responsive grid of card-style items. Common pattern for entity galleries,
595
+ * product grids, and dashboard card layouts.
596
+ *
597
+ * Usage:
598
+ * import { GridList, GridListItem } from '@caqophony/ui';
599
+ * <GridList columns={3} gap="md">
600
+ * <GridListItem>Card content</GridListItem>
601
+ * </GridList>
602
+ *
603
+ * Issue #2630 — B-4: Stacked Lists + Grid Lists
604
+ * Authored by Caqophony
605
+ */
606
+
607
+ interface GridListProps extends React.HTMLAttributes<HTMLDivElement> {
608
+ columns?: 2 | 3 | 4;
609
+ gap?: 'sm' | 'md' | 'lg';
610
+ }
611
+ declare const GridList: React.ForwardRefExoticComponent<GridListProps & React.RefAttributes<HTMLDivElement>>;
612
+ interface GridListItemProps extends React.HTMLAttributes<HTMLDivElement> {
613
+ hoverable?: boolean;
614
+ }
615
+ declare const GridListItem: React.ForwardRefExoticComponent<GridListItemProps & React.RefAttributes<HTMLDivElement>>;
616
+
617
+ /**
618
+ * Pagination Component
619
+ *
620
+ * Page navigation controls for data tables and list views.
621
+ * Supports simple (prev/next), numbered, and centered variants.
622
+ *
623
+ * Usage:
624
+ * import { Pagination } from '@caqophony/ui';
625
+ * <Pagination currentPage={1} totalPages={10} onPageChange={setPage} />
626
+ *
627
+ * Issue #2634 — B-8: Pagination + Stepper
628
+ * Authored by Caqophony
629
+ */
630
+
631
+ interface PaginationProps extends React.HTMLAttributes<HTMLElement> {
632
+ currentPage: number;
633
+ totalPages: number;
634
+ onPageChange?: (page: number) => void;
635
+ variant?: 'simple' | 'numbered' | 'centered';
636
+ siblingCount?: number;
637
+ }
638
+ declare function getPageRange(current: number, total: number, siblings: number): (number | 'ellipsis')[];
639
+ declare const PaginationButton: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & {
640
+ active?: boolean;
641
+ } & React.RefAttributes<HTMLButtonElement>>;
642
+ declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
643
+
644
+ /**
645
+ * Stepper Component
646
+ *
647
+ * Multi-step progress indicator for wizards and multi-phase workflows.
648
+ * Supports horizontal (progress bar) and vertical (sidebar checklist) variants.
649
+ *
650
+ * Usage:
651
+ * import { Stepper, StepperStep } from '@caqophony/ui';
652
+ * <Stepper variant="horizontal" activeStep={1}>
653
+ * <StepperStep label="Account" />
654
+ * <StepperStep label="Profile" />
655
+ * <StepperStep label="Review" />
656
+ * </Stepper>
657
+ *
658
+ * Issue #2634 — B-8: Pagination + Stepper
659
+ * Authored by Caqophony
660
+ */
661
+
662
+ interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {
663
+ variant?: 'horizontal' | 'vertical';
664
+ activeStep: number;
665
+ size?: 'sm' | 'md' | 'lg';
666
+ }
667
+ interface StepperStepProps extends React.HTMLAttributes<HTMLDivElement> {
668
+ label: string;
669
+ description?: string;
670
+ icon?: React.ReactNode;
671
+ /** Mark this step as having an error */
672
+ error?: boolean;
673
+ /** Disable this step (prevents interaction, muted styling) */
674
+ disabled?: boolean;
675
+ /**
676
+ * Force the completed (✓) indicator even when this step is the current one.
677
+ * Steps before activeStep are completed automatically; this covers the case
678
+ * where the user revisits an already-completed step (current AND done).
679
+ */
680
+ completed?: boolean;
681
+ /** Optional href — wraps the indicator + label in an anchor tag for navigation */
682
+ href?: string;
683
+ }
684
+ declare const StepperStep: React.ForwardRefExoticComponent<StepperStepProps & React.RefAttributes<HTMLDivElement>>;
685
+ declare const Stepper: React.ForwardRefExoticComponent<StepperProps & React.RefAttributes<HTMLDivElement>>;
686
+
687
+ /**
688
+ * CommandPalette Component
689
+ *
690
+ * Power-user search/navigation overlay (Cmd+K).
691
+ *
692
+ * Token mapping:
693
+ * bg-card -> colors.card (palette bg)
694
+ * border-border -> colors.border (input border, dividers)
695
+ * bg-muted -> colors.muted (active result bg)
696
+ * text-foreground -> colors.foreground (result text)
697
+ * text-muted-fg -> colors.mutedFg (group labels, shortcuts)
698
+ * z-modal -> zIndex.modal (above everything)
699
+ *
700
+ * Issue #2631 — B-5: Command Palette (Cmd+K)
701
+ * Authored by Caqophony
702
+ */
703
+
704
+ interface CommandPaletteResult {
705
+ id: string;
706
+ label: string;
707
+ group?: string;
708
+ shortcut?: string;
709
+ icon?: React.ReactNode;
710
+ onSelect?: () => void;
711
+ }
712
+ interface CommandPaletteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'results'> {
713
+ open?: boolean;
714
+ onClose?: () => void;
715
+ results?: CommandPaletteResult[];
716
+ placeholder?: string;
717
+ onSearch?: (query: string) => void;
718
+ size?: 'sm' | 'md' | 'lg';
719
+ }
720
+ declare const CommandPalette: React.ForwardRefExoticComponent<CommandPaletteProps & React.RefAttributes<HTMLDivElement>>;
721
+
722
+ /**
723
+ * AppShell Component
724
+ *
725
+ * Generic application layout shells for generated apps.
726
+ * Stacked (top nav + content), Sidebar (collapsible + content),
727
+ * Multi-column (sidebar + main + detail panel).
728
+ *
729
+ * Token mapping:
730
+ * bg-background -> colors.background (page bg)
731
+ * bg-card -> colors.card (sidebar bg)
732
+ * border-border -> colors.border (sidebar border)
733
+ *
734
+ * Issue #2629 — B-3: Application Shells
735
+ * Authored by Caqophony
736
+ */
737
+
738
+ interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {
739
+ variant?: 'stacked' | 'sidebar' | 'multi-column';
740
+ sidebarPosition?: 'left' | 'right';
741
+ sidebarCollapsed?: boolean;
742
+ header?: React.ReactNode;
743
+ sidebar?: React.ReactNode;
744
+ detailPanel?: React.ReactNode;
745
+ }
746
+ declare const AppShell: React.ForwardRefExoticComponent<AppShellProps & React.RefAttributes<HTMLDivElement>>;
747
+
748
+ /**
749
+ * Popover + HoverCard Components
750
+ *
751
+ * Content-rich tooltips for entity previews and contextual help.
752
+ *
753
+ * Token mapping:
754
+ * bg-card -> colors.card (popover bg)
755
+ * border-border -> colors.border (popover border)
756
+ * z-popover -> zIndex.popover (80)
757
+ * shadow-lg -> elevation-3
758
+ *
759
+ * Issue #2651 — B-19: Popover + Hover Card
760
+ * Authored by Caqophony
761
+ */
762
+
763
+ interface PopoverProps extends React.HTMLAttributes<HTMLDivElement> {
764
+ open?: boolean;
765
+ onOpenChange?: (open: boolean) => void;
766
+ trigger: React.ReactNode;
767
+ side?: 'top' | 'bottom' | 'left' | 'right';
768
+ align?: 'start' | 'center' | 'end';
769
+ }
770
+ declare const Popover: React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>>;
771
+ interface HoverCardProps extends React.HTMLAttributes<HTMLDivElement> {
772
+ trigger: React.ReactNode;
773
+ side?: 'top' | 'bottom';
774
+ align?: 'start' | 'center' | 'end';
775
+ delay?: number;
776
+ }
777
+ declare const HoverCard: React.ForwardRefExoticComponent<HoverCardProps & React.RefAttributes<HTMLDivElement>>;
778
+
779
+ /**
780
+ * Calendar + DatePicker Components
781
+ *
782
+ * Calendar renders a month grid with selectable days, event dots,
783
+ * single/range selection, and full keyboard navigation.
784
+ * DatePicker wraps Calendar in a popover triggered by an input.
785
+ *
786
+ * Token mapping:
787
+ * bg-card -> colors.card (calendar bg)
788
+ * border-border -> colors.border (calendar border, input border)
789
+ * bg-primary -> colors.primary (selected day, range endpoints)
790
+ * bg-primary/10 -> colors.primary10 (range middle days)
791
+ * text-primary-foreground -> colors.white (selected day text)
792
+ * bg-muted -> colors.muted (today highlight)
793
+ * text-muted-foreground -> colors.mutedFg (weekday headers)
794
+ * text-foreground -> colors.foreground (day text, navigation)
795
+ * bg-intent-info -> colors.info (event dots)
796
+ * z-popover -> zIndex.popover (datepicker dropdown)
797
+ *
798
+ * Issue #2640 — B-13: Calendar + DatePicker
799
+ * Authored by Caqophony
800
+ */
801
+
802
+ interface CalendarEvent {
803
+ date: Date;
804
+ color?: string;
805
+ }
806
+ interface CalendarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
807
+ /** Currently selected date (single mode) */
808
+ value?: Date | null;
809
+ /** Called when a day is clicked (single mode) */
810
+ onChange?: (date: Date) => void;
811
+ /** Selection mode */
812
+ selectionMode?: 'single' | 'range';
813
+ /** Range start date (range mode) */
814
+ rangeStart?: Date | null;
815
+ /** Range end date (range mode) */
816
+ rangeEnd?: Date | null;
817
+ /** Called when a range endpoint is selected */
818
+ onRangeChange?: (start: Date | null, end: Date | null) => void;
819
+ /** Minimum selectable date */
820
+ minDate?: Date;
821
+ /** Maximum selectable date */
822
+ maxDate?: Date;
823
+ /** Events to show as dots under day numbers */
824
+ events?: CalendarEvent[];
825
+ /** Override "today" date (for testing or server-injected current date) */
826
+ today?: Date;
827
+ /** Size variant */
828
+ size?: 'sm' | 'md' | 'lg';
829
+ }
830
+ declare const Calendar: React.ForwardRefExoticComponent<CalendarProps & React.RefAttributes<HTMLDivElement>>;
831
+ interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
832
+ /** Selection variant */
833
+ variant?: 'single' | 'range';
834
+ /** Currently selected date (single mode) */
835
+ value?: Date | null;
836
+ /** Called when a date is selected (single mode) */
837
+ onChange?: (date: Date) => void;
838
+ /** Range start date (range mode) */
839
+ rangeStart?: Date | null;
840
+ /** Range end date (range mode) */
841
+ rangeEnd?: Date | null;
842
+ /** Called when range changes */
843
+ onRangeChange?: (start: Date | null, end: Date | null) => void;
844
+ /** Placeholder text when no date is selected */
845
+ placeholder?: string;
846
+ /** Minimum selectable date */
847
+ minDate?: Date;
848
+ /** Maximum selectable date */
849
+ maxDate?: Date;
850
+ /** Events to show on calendar */
851
+ events?: CalendarEvent[];
852
+ /** Controlled open state */
853
+ open?: boolean;
854
+ /** Called when open state changes */
855
+ onOpenChange?: (open: boolean) => void;
856
+ /** Calendar size */
857
+ calendarSize?: 'sm' | 'md' | 'lg';
858
+ /** Disabled state */
859
+ disabled?: boolean;
860
+ }
861
+ declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLDivElement>>;
862
+
863
+ /**
864
+ * Navbar Component
865
+ *
866
+ * Top navigation bar with simple, centered, withSearch, twoLevel variants.
867
+ *
868
+ * Token mapping:
869
+ * bg-card -> colors.card (nav bg)
870
+ * border-border -> colors.border (bottom border)
871
+ * text-foreground -> colors.foreground (active links)
872
+ * text-muted-fg -> colors.mutedFg (inactive links)
873
+ *
874
+ * Issue #2647 — B-16: Extended Navbar Variants
875
+ * Authored by Caqophony
876
+ */
877
+
878
+ interface NavbarProps extends React.HTMLAttributes<HTMLElement> {
879
+ variant?: 'simple' | 'centered' | 'withSearch' | 'twoLevel';
880
+ transparent?: boolean;
881
+ logo?: React.ReactNode;
882
+ actions?: React.ReactNode;
883
+ search?: React.ReactNode;
884
+ secondaryNav?: React.ReactNode;
885
+ }
886
+ declare const Navbar: React.ForwardRefExoticComponent<NavbarProps & React.RefAttributes<HTMLElement>>;
887
+ interface NavbarLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
888
+ active?: boolean;
889
+ }
890
+ declare const NavbarLink: React.ForwardRefExoticComponent<NavbarLinkProps & React.RefAttributes<HTMLAnchorElement>>;
891
+
892
+ /**
893
+ * Extended Card Variants
894
+ *
895
+ * Beyond the basic Card: horizontal, image, stat, action card patterns.
896
+ *
897
+ * Token mapping:
898
+ * bg-card -> colors.card
899
+ * border-border -> colors.border
900
+ * text-foreground -> colors.foreground
901
+ * text-muted-fg -> colors.mutedFg
902
+ * hover:shadow-md -> elevation-2 (hoverable)
903
+ *
904
+ * Issue #2648 — B-17: Extended Card Variants
905
+ * Authored by Caqophony
906
+ */
907
+
908
+ interface HorizontalCardProps extends React.HTMLAttributes<HTMLDivElement> {
909
+ media?: React.ReactNode;
910
+ hoverable?: boolean;
911
+ }
912
+ declare const HorizontalCard: React.ForwardRefExoticComponent<HorizontalCardProps & React.RefAttributes<HTMLDivElement>>;
913
+ interface ImageCardProps extends React.HTMLAttributes<HTMLDivElement> {
914
+ imageSrc?: string;
915
+ imageAlt?: string;
916
+ hoverable?: boolean;
917
+ }
918
+ declare const ImageCard: React.ForwardRefExoticComponent<ImageCardProps & React.RefAttributes<HTMLDivElement>>;
919
+ interface StatCardExtendedProps extends React.HTMLAttributes<HTMLDivElement> {
920
+ label: string;
921
+ value: string;
922
+ trend?: {
923
+ direction: 'up' | 'down' | 'neutral';
924
+ text: string;
925
+ };
926
+ icon?: React.ReactNode;
927
+ }
928
+ declare const StatCardExtended: React.ForwardRefExoticComponent<StatCardExtendedProps & React.RefAttributes<HTMLDivElement>>;
929
+ interface ActionCardProps extends React.HTMLAttributes<HTMLDivElement> {
930
+ title: string;
931
+ description?: string;
932
+ actions?: React.ReactNode;
933
+ }
934
+ declare const ActionCard: React.ForwardRefExoticComponent<ActionCardProps & React.RefAttributes<HTMLDivElement>>;
935
+
936
+ /**
937
+ * ModalDialog Component
938
+ *
939
+ * Overlay dialog with backdrop, focus trap, and composable slots.
940
+ *
941
+ * Token mapping:
942
+ * bg-background/overlay -> opacity-overlay (backdrop)
943
+ * bg-card -> colors.card (modal bg)
944
+ * border-border -> colors.border
945
+ * z-modal -> zIndex.modal (70)
946
+ * z-overlay -> zIndex.overlay (60)
947
+ * duration-default -> transition.duration.default
948
+ *
949
+ * Issue #2628 — B-2: Modal Dialog + Drawer
950
+ * Authored by Caqophony
951
+ */
952
+
953
+ interface ModalDialogProps extends React.HTMLAttributes<HTMLDivElement> {
954
+ open?: boolean;
955
+ onClose?: () => void;
956
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'fullscreen';
957
+ }
958
+ declare const ModalDialog: React.ForwardRefExoticComponent<ModalDialogProps & React.RefAttributes<HTMLDivElement>>;
959
+ declare const ModalHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
960
+ declare const ModalBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
961
+ declare const ModalFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
962
+
963
+ /**
964
+ * Drawer Component
965
+ *
966
+ * Slide-over panel from left, right, or bottom edges.
967
+ *
968
+ * Token mapping:
969
+ * bg-background/overlay -> opacity-overlay (backdrop)
970
+ * bg-card -> colors.card (drawer bg)
971
+ * border-border -> colors.border
972
+ * z-modal -> zIndex.modal (70)
973
+ * duration-drawer -> transition.duration.drawer (500ms)
974
+ *
975
+ * Issue #2628 — B-2: Modal Dialog + Drawer
976
+ * Authored by Caqophony
977
+ */
978
+
979
+ interface DrawerProps extends React.HTMLAttributes<HTMLDivElement> {
980
+ open?: boolean;
981
+ onClose?: () => void;
982
+ side?: 'left' | 'right' | 'bottom';
983
+ size?: 'sm' | 'md' | 'lg';
984
+ }
985
+ declare const Drawer: React.ForwardRefExoticComponent<DrawerProps & React.RefAttributes<HTMLDivElement>>;
986
+ declare const DrawerHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
987
+ declare const DrawerBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
988
+ declare const DrawerFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
989
+
990
+ /**
991
+ * FormLayout Component
992
+ *
993
+ * Responsive form section layout: stacked, inline, or two-column.
994
+ *
995
+ * Token mapping: border-border -> colors.border (section dividers)
996
+ *
997
+ * Issue #2633 — B-7: Advanced Form Family
998
+ * Authored by Caqophony
999
+ */
1000
+
1001
+ interface FormLayoutProps extends React.FormHTMLAttributes<HTMLFormElement> {
1002
+ layout?: 'stacked' | 'inline' | 'two-column';
1003
+ }
1004
+ declare const FormLayout: React.ForwardRefExoticComponent<FormLayoutProps & React.RefAttributes<HTMLFormElement>>;
1005
+ interface FormLayoutSectionProps extends React.HTMLAttributes<HTMLDivElement> {
1006
+ title?: string;
1007
+ description?: string;
1008
+ }
1009
+ declare const FormLayoutSection: React.ForwardRefExoticComponent<FormLayoutSectionProps & React.RefAttributes<HTMLDivElement>>;
1010
+
1011
+ /**
1012
+ * InputGroup Component
1013
+ *
1014
+ * Input with prefix/suffix addons (text, icon, or button).
1015
+ *
1016
+ * Token mapping:
1017
+ * bg-muted -> colors.muted (addon background)
1018
+ * border-input -> colors.border (input border)
1019
+ * text-muted-fg -> colors.mutedFg (addon text)
1020
+ *
1021
+ * Issue #2633 — B-7: Advanced Form Family
1022
+ * Authored by Caqophony
1023
+ */
1024
+
1025
+ interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {
1026
+ addon?: 'prefix' | 'suffix' | 'both';
1027
+ addonContent?: React.ReactNode;
1028
+ suffixContent?: React.ReactNode;
1029
+ }
1030
+ declare const InputGroup: React.ForwardRefExoticComponent<InputGroupProps & React.RefAttributes<HTMLDivElement>>;
1031
+
1032
+ /**
1033
+ * RadioGroup Component
1034
+ *
1035
+ * Radio selection with simple, card, and stacked visual variants.
1036
+ *
1037
+ * Token mapping:
1038
+ * bg-card -> colors.card (card variant bg)
1039
+ * border-border -> colors.border (card border)
1040
+ * border-primary -> colors.primary (selected card border)
1041
+ * text-foreground -> colors.foreground (label)
1042
+ * text-muted-fg -> colors.mutedFg (description)
1043
+ *
1044
+ * Issue #2633 — B-7: Advanced Form Family
1045
+ * Authored by Caqophony
1046
+ */
1047
+
1048
+ interface RadioGroupOption {
1049
+ value: string;
1050
+ label: string;
1051
+ description?: string;
1052
+ }
1053
+ interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLFieldSetElement>, 'onChange'> {
1054
+ options: RadioGroupOption[];
1055
+ value?: string;
1056
+ onChange?: (value: string) => void;
1057
+ variant?: 'simple' | 'card' | 'stacked';
1058
+ name?: string;
1059
+ label?: string;
1060
+ }
1061
+ declare const RadioGroup: React.ForwardRefExoticComponent<RadioGroupProps & React.RefAttributes<HTMLFieldSetElement>>;
1062
+
1063
+ /**
1064
+ * Combobox Component
1065
+ *
1066
+ * Searchable dropdown with filtering and multi-select support.
1067
+ *
1068
+ * Token mapping:
1069
+ * bg-card -> colors.card (dropdown bg)
1070
+ * bg-muted -> colors.muted (hover item)
1071
+ * border-input -> colors.border (input border)
1072
+ * text-foreground -> colors.foreground (option text)
1073
+ * text-muted-fg -> colors.mutedFg (placeholder)
1074
+ * bg-primary -> colors.primary (selected tag)
1075
+ *
1076
+ * Issue #2633 — B-7: Advanced Form Family
1077
+ * Authored by Caqophony
1078
+ */
1079
+
1080
+ interface ComboboxOption {
1081
+ value: string;
1082
+ label: string;
1083
+ }
1084
+ interface ComboboxProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
1085
+ options: ComboboxOption[];
1086
+ value?: string | string[];
1087
+ onChange?: (value: string | string[]) => void;
1088
+ placeholder?: string;
1089
+ multi?: boolean;
1090
+ filterable?: boolean;
1091
+ }
1092
+ declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLDivElement>>;
1093
+
1094
+ /**
1095
+ * NotificationBanner Component
1096
+ *
1097
+ * Inline notification banners with 4 intents and dismiss animation.
1098
+ *
1099
+ * Token mapping:
1100
+ * bg-intent-[intent]/10 -> solidFillAlpha(intent, 0.1)
1101
+ * text-intent-[intent]-fg -> intent foreground colors
1102
+ * border-intent-[intent]/20 -> solidFillAlpha(intent, 0.2)
1103
+ *
1104
+ * Usage:
1105
+ * import { NotificationBanner } from '@caqophony/ui';
1106
+ * <NotificationBanner intent="success" dismissible>
1107
+ * Your changes have been saved.
1108
+ * </NotificationBanner>
1109
+ *
1110
+ * Issue #2632 — B-6: Notification Panel + Banner
1111
+ * Authored by Caqophony
1112
+ */
1113
+
1114
+ interface NotificationBannerProps extends React.HTMLAttributes<HTMLDivElement> {
1115
+ intent?: 'success' | 'warning' | 'error' | 'info';
1116
+ variant?: 'subtle' | 'solid' | 'accent';
1117
+ title?: string;
1118
+ dismissible?: boolean;
1119
+ onDismiss?: () => void;
1120
+ action?: React.ReactNode;
1121
+ }
1122
+ declare const NotificationBanner: React.ForwardRefExoticComponent<NotificationBannerProps & React.RefAttributes<HTMLDivElement>>;
1123
+
1124
+ /**
1125
+ * NotificationPanel Component
1126
+ *
1127
+ * Dropdown notification list triggered from a bell icon.
1128
+ * Renders a list of notification items with unread badge and mark-all-read.
1129
+ *
1130
+ * Token mapping:
1131
+ * bg-card → colors.card (panel bg)
1132
+ * border-border → colors.border (panel border, dividers)
1133
+ * text-primary → colors.primary (unread indicator)
1134
+ * text-muted-fg → colors.mutedFg (timestamps)
1135
+ *
1136
+ * Usage:
1137
+ * import { NotificationPanel, NotificationPanelItem } from '@caqophony/ui';
1138
+ * <NotificationPanel unreadCount={3} onMarkAllRead={handleMarkAll}>
1139
+ * <NotificationPanelItem title="New comment" time="2m ago" unread />
1140
+ * </NotificationPanel>
1141
+ *
1142
+ * Issue #2632 — B-6: Notification Panel + Banner
1143
+ * Authored by Caqophony
1144
+ */
1145
+
1146
+ interface NotificationPanelProps extends React.HTMLAttributes<HTMLDivElement> {
1147
+ unreadCount?: number;
1148
+ onMarkAllRead?: () => void;
1149
+ }
1150
+ declare const NotificationPanel: React.ForwardRefExoticComponent<NotificationPanelProps & React.RefAttributes<HTMLDivElement>>;
1151
+ interface NotificationPanelItemProps extends React.HTMLAttributes<HTMLDivElement> {
1152
+ title: string;
1153
+ description?: string;
1154
+ time?: string;
1155
+ unread?: boolean;
1156
+ icon?: React.ReactNode;
1157
+ }
1158
+ declare const NotificationPanelItem: React.ForwardRefExoticComponent<NotificationPanelItemProps & React.RefAttributes<HTMLDivElement>>;
1159
+
1160
+ interface SkeletonTableProps extends React.HTMLAttributes<HTMLDivElement> {
1161
+ rows?: number;
1162
+ columns?: number;
1163
+ }
1164
+ declare function SkeletonTable({ className, rows, columns, ...props }: SkeletonTableProps): react_jsx_runtime.JSX.Element;
1165
+ declare namespace SkeletonTable {
1166
+ var displayName: string;
1167
+ }
1168
+ interface SkeletonCardGridProps extends React.HTMLAttributes<HTMLDivElement> {
1169
+ cards?: number;
1170
+ columns?: 2 | 3;
1171
+ }
1172
+ declare function SkeletonCardGrid({ className, cards, columns, ...props }: SkeletonCardGridProps): react_jsx_runtime.JSX.Element;
1173
+ declare namespace SkeletonCardGrid {
1174
+ var displayName: string;
1175
+ }
1176
+ interface SkeletonDetailProps extends React.HTMLAttributes<HTMLDivElement> {
1177
+ }
1178
+ declare function SkeletonDetail({ className, ...props }: SkeletonDetailProps): react_jsx_runtime.JSX.Element;
1179
+ declare namespace SkeletonDetail {
1180
+ var displayName: string;
1181
+ }
1182
+
1183
+ /**
1184
+ * Toggle + ToggleGroup Components
1185
+ *
1186
+ * Icon toggles and view-mode selectors (grid/list/table).
1187
+ * Beyond Switch: pressed/unpressed visual state with icon support.
1188
+ *
1189
+ * Token mapping:
1190
+ * bg-muted → colors.muted (group container, active toggle)
1191
+ * bg-transparent → transparent (inactive toggle)
1192
+ * text-foreground → colors.foreground (active)
1193
+ * text-muted-fg → colors.mutedFg (inactive)
1194
+ * border-input → colors.border (outline variant)
1195
+ *
1196
+ * Usage:
1197
+ * import { Toggle, ToggleGroup } from '@caqophony/ui';
1198
+ * <ToggleGroup type="single" value={view} onValueChange={setView}>
1199
+ * <Toggle value="grid" aria-label="Grid view">Grid</Toggle>
1200
+ * <Toggle value="list" aria-label="List view">List</Toggle>
1201
+ * </ToggleGroup>
1202
+ *
1203
+ * Issue #2650 — B-18: Toggle + Toggle Group
1204
+ * Authored by Caqophony
1205
+ */
1206
+
1207
+ interface ToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
1208
+ pressed?: boolean;
1209
+ variant?: 'default' | 'outline';
1210
+ size?: 'sm' | 'md' | 'lg';
1211
+ value?: string;
1212
+ }
1213
+ declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLButtonElement>>;
1214
+ interface ToggleGroupProps extends React.HTMLAttributes<HTMLDivElement> {
1215
+ type?: 'single' | 'multiple';
1216
+ value?: string | string[];
1217
+ onValueChange?: (value: string | string[]) => void;
1218
+ variant?: 'default' | 'outline';
1219
+ size?: 'sm' | 'md' | 'lg';
1220
+ }
1221
+ declare const ToggleGroup: React.ForwardRefExoticComponent<ToggleGroupProps & React.RefAttributes<HTMLDivElement>>;
1222
+
1223
+ /**
1224
+ * AvatarGroup Component
1225
+ *
1226
+ * Overlapping avatar circles with +N overflow indicator.
1227
+ * Common for team displays, assignee fields, and user lists.
1228
+ *
1229
+ * Token mapping:
1230
+ * bg-muted → colors.muted (avatar placeholder bg)
1231
+ * border-background → colors.background (ring around each avatar)
1232
+ * text-muted-fg → colors.mutedFg (overflow text)
1233
+ *
1234
+ * Usage:
1235
+ * import { AvatarGroup, AvatarGroupItem } from '@caqophony/ui';
1236
+ * <AvatarGroup max={3}>
1237
+ * <AvatarGroupItem src="/user1.jpg" alt="Jane" />
1238
+ * <AvatarGroupItem src="/user2.jpg" alt="John" />
1239
+ * <AvatarGroupItem src="/user3.jpg" alt="Sarah" />
1240
+ * <AvatarGroupItem src="/user4.jpg" alt="Mike" />
1241
+ * </AvatarGroup>
1242
+ *
1243
+ * Issue #2639 — B-12: Avatar Groups + Badge Extensions
1244
+ * Authored by Caqophony
1245
+ */
1246
+
1247
+ interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {
1248
+ max?: number;
1249
+ size?: 'xs' | 'sm' | 'md' | 'lg';
1250
+ }
1251
+ declare const AvatarGroup: React.ForwardRefExoticComponent<AvatarGroupProps & React.RefAttributes<HTMLDivElement>>;
1252
+ interface AvatarGroupItemProps extends React.ImgHTMLAttributes<HTMLImageElement> {
1253
+ fallback?: string;
1254
+ size?: 'xs' | 'sm' | 'md' | 'lg';
1255
+ }
1256
+ declare const AvatarGroupItem: React.ForwardRefExoticComponent<AvatarGroupItemProps & React.RefAttributes<HTMLImageElement>>;
1257
+
1258
+ /**
1259
+ * TabBar Component
1260
+ *
1261
+ * Tabbed navigation with underline, pills, and enclosed visual variants.
1262
+ *
1263
+ * Token mapping (React ↔ Figma):
1264
+ * bg-muted → colors.muted (pills container bg)
1265
+ * text-foreground → colors.foreground (active tab text)
1266
+ * text-muted-fg → colors.mutedFg (inactive tab text)
1267
+ * border-primary → colors.primary (underline indicator)
1268
+ * bg-background → colors.background (active pill bg)
1269
+ *
1270
+ * Usage:
1271
+ * import { TabBar, TabBarItem } from '@caqophony/ui';
1272
+ * <TabBar variant="underline">
1273
+ * <TabBarItem active>Overview</TabBarItem>
1274
+ * <TabBarItem>Settings</TabBarItem>
1275
+ * </TabBar>
1276
+ *
1277
+ * Issue #2637 — B-11: Breadcrumb + Tab Extensions
1278
+ * Authored by Caqophony
1279
+ */
1280
+
1281
+ interface TabBarProps extends React.HTMLAttributes<HTMLDivElement> {
1282
+ variant?: 'underline' | 'pills' | 'enclosed';
1283
+ }
1284
+ declare const TabBar: React.ForwardRefExoticComponent<TabBarProps & React.RefAttributes<HTMLDivElement>>;
1285
+ interface TabBarItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
1286
+ active?: boolean;
1287
+ /** @internal injected by TabBar */
1288
+ _variant?: 'underline' | 'pills' | 'enclosed';
1289
+ }
1290
+ declare const TabBarItem: React.ForwardRefExoticComponent<TabBarItemProps & React.RefAttributes<HTMLButtonElement>>;
1291
+
1292
+ interface StickyActionBarProps {
1293
+ /** Left slot — page title, status/verdict pill, a short summary. */
1294
+ context?: ReactNode;
1295
+ /** Right slot — the action button(s). The primary is the visually dominant. */
1296
+ actions: ReactNode;
1297
+ /** Sticky top offset — defaults to `top-16` (below the app header). */
1298
+ topClassName?: string;
1299
+ /** Extra classes on the sticky wrapper. */
1300
+ className?: string;
1301
+ /** testid for the bar (defaults to sticky-action-bar). */
1302
+ testId?: string;
1303
+ }
1304
+ declare function StickyActionBar({ context, actions, topClassName, className, testId, }: StickyActionBarProps): react_jsx_runtime.JSX.Element;
1305
+
1306
+ /**
1307
+ * ButtonGroup Component
1308
+ *
1309
+ * Segmented controls, toggle groups, and split buttons.
1310
+ * Connected borders between buttons (no double borders).
1311
+ *
1312
+ * Usage:
1313
+ * import { ButtonGroup, ButtonGroupItem } from '@caqophony/ui';
1314
+ * <ButtonGroup variant="segmented">
1315
+ * <ButtonGroupItem active>Grid</ButtonGroupItem>
1316
+ * <ButtonGroupItem>List</ButtonGroupItem>
1317
+ * <ButtonGroupItem>Table</ButtonGroupItem>
1318
+ * </ButtonGroup>
1319
+ *
1320
+ * Issue #2642 — B-15: Button Groups
1321
+ * Authored by Caqophony
1322
+ */
1323
+
1324
+ interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
1325
+ variant?: 'default' | 'outlined' | 'segmented';
1326
+ size?: 'sm' | 'md' | 'lg';
1327
+ }
1328
+ declare const ButtonGroup: React.ForwardRefExoticComponent<ButtonGroupProps & React.RefAttributes<HTMLDivElement>>;
1329
+ interface ButtonGroupItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
1330
+ active?: boolean;
1331
+ /** @internal injected by ButtonGroup */
1332
+ _variant?: 'default' | 'outlined' | 'segmented';
1333
+ /** @internal injected by ButtonGroup */
1334
+ _size?: 'sm' | 'md' | 'lg';
1335
+ }
1336
+ declare const ButtonGroupItem: React.ForwardRefExoticComponent<ButtonGroupItemProps & React.RefAttributes<HTMLButtonElement>>;
1337
+
1338
+ /**
1339
+ * DataTable Component
1340
+ *
1341
+ * Sortable, selectable data table with density variants.
1342
+ * The highest-reuse component across SaaS — every generated app needs one.
1343
+ *
1344
+ * Token mapping (React ↔ Figma):
1345
+ * bg-card → colors.card (table background)
1346
+ * border-border → colors.border (cell borders)
1347
+ * text-foreground → colors.foreground (cell text)
1348
+ * text-muted-fg → colors.mutedFg (header text)
1349
+ * bg-muted → colors.muted (striped rows, header bg)
1350
+ * bg-primary → colors.primary (selected row indicator)
1351
+ *
1352
+ * Usage:
1353
+ * import { DataTable, TableHeader, TableRow, TableCell } from '@caqophony/ui';
1354
+ * <DataTable density="default" striped bordered>
1355
+ * <TableHeader>
1356
+ * <TableRow>
1357
+ * <TableCell header sortDirection="asc">Name</TableCell>
1358
+ * <TableCell header>Email</TableCell>
1359
+ * </TableRow>
1360
+ * </TableHeader>
1361
+ * <tbody>
1362
+ * <TableRow>
1363
+ * <TableCell>Jane Cooper</TableCell>
1364
+ * <TableCell>jane@example.com</TableCell>
1365
+ * </TableRow>
1366
+ * </tbody>
1367
+ * </DataTable>
1368
+ *
1369
+ * Issue #2627 — B-1: DataTable + TableHeader + TableRow + TableCell
1370
+ * Authored by Caqophony
1371
+ */
1372
+
1373
+ interface DataTableProps extends React.TableHTMLAttributes<HTMLTableElement> {
1374
+ density?: 'compact' | 'default' | 'relaxed';
1375
+ striped?: boolean;
1376
+ bordered?: boolean;
1377
+ }
1378
+ declare const DataTable: React.ForwardRefExoticComponent<DataTableProps & React.RefAttributes<HTMLTableElement>>;
1379
+ declare const TableHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
1380
+ declare const TableBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
1381
+ interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {
1382
+ selected?: boolean;
1383
+ }
1384
+ declare const TableRow: React.ForwardRefExoticComponent<TableRowProps & React.RefAttributes<HTMLTableRowElement>>;
1385
+ interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {
1386
+ header?: boolean;
1387
+ sortDirection?: 'asc' | 'desc' | null;
1388
+ onSort?: () => void;
1389
+ }
1390
+ declare const TableCell: React.ForwardRefExoticComponent<TableCellProps & React.RefAttributes<HTMLTableCellElement>>;
1391
+ declare const TableCaption: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableCaptionElement> & React.RefAttributes<HTMLTableCaptionElement>>;
1392
+
1393
+ /**
1394
+ * StatGroup Component
1395
+ *
1396
+ * Responsive grid of stat cards for dashboards. Composes with StatCard atoms.
1397
+ *
1398
+ * Token mapping: bg-card → colors.card, border-border → colors.border
1399
+ *
1400
+ * Usage:
1401
+ * import { StatGroup } from '@caqophony/ui';
1402
+ * <StatGroup columns={3} variant="card">
1403
+ * <div>Stat 1</div><div>Stat 2</div><div>Stat 3</div>
1404
+ * </StatGroup>
1405
+ *
1406
+ * Issue #2635 — B-9
1407
+ * Authored by Caqophony
1408
+ */
1409
+
1410
+ interface StatGroupProps extends React.HTMLAttributes<HTMLDivElement> {
1411
+ columns?: 2 | 3 | 4;
1412
+ variant?: 'card' | 'inline';
1413
+ }
1414
+ declare const StatGroup: React.ForwardRefExoticComponent<StatGroupProps & React.RefAttributes<HTMLDivElement>>;
1415
+
1416
+ /**
1417
+ * DescriptionList Component
1418
+ *
1419
+ * Key-value pairs for detail pages, settings views, and entity summaries.
1420
+ *
1421
+ * Token mapping:
1422
+ * text-muted-foreground → colors.mutedFg (labels)
1423
+ * text-foreground → colors.foreground (values)
1424
+ * border-border → colors.border (dividers)
1425
+ *
1426
+ * Usage:
1427
+ * import { DescriptionList, DescriptionItem } from '@caqophony/ui';
1428
+ * <DescriptionList layout="side-by-side">
1429
+ * <DescriptionItem label="Name" value="Jane Cooper" />
1430
+ * <DescriptionItem label="Email" value="jane@example.com" />
1431
+ * </DescriptionList>
1432
+ *
1433
+ * Issue #2635 — B-9
1434
+ * Authored by Caqophony
1435
+ */
1436
+
1437
+ interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {
1438
+ layout?: 'stacked' | 'side-by-side' | 'grid';
1439
+ }
1440
+ declare const DescriptionList: React.ForwardRefExoticComponent<DescriptionListProps & React.RefAttributes<HTMLDListElement>>;
1441
+ interface DescriptionItemProps extends React.HTMLAttributes<HTMLDivElement> {
1442
+ label: string;
1443
+ value: React.ReactNode;
1444
+ layout?: 'stacked' | 'side-by-side' | 'grid';
1445
+ }
1446
+ declare const DescriptionItem: React.ForwardRefExoticComponent<DescriptionItemProps & React.RefAttributes<HTMLDivElement>>;
1447
+
1448
+ /**
1449
+ * ActivityFeed Component
1450
+ *
1451
+ * Vertical timeline of events with avatar, content, and timestamp.
1452
+ *
1453
+ * Token mapping:
1454
+ * bg-primary → colors.primary (timeline connector)
1455
+ * bg-muted → colors.muted (inactive connector)
1456
+ * text-foreground → colors.foreground (content)
1457
+ * text-muted-foreground → colors.mutedFg (timestamp)
1458
+ *
1459
+ * Usage:
1460
+ * import { ActivityFeed, ActivityFeedItem } from '@caqophony/ui';
1461
+ * <ActivityFeed>
1462
+ * <ActivityFeedItem
1463
+ * avatar={<Avatar />}
1464
+ * eventDescription="Jane created a new project"
1465
+ * timestamp="2 hours ago"
1466
+ * />
1467
+ * </ActivityFeed>
1468
+ *
1469
+ * Issue #2635 — B-9
1470
+ * Authored by Caqophony
1471
+ */
1472
+
1473
+ interface ActivityFeedProps extends React.HTMLAttributes<HTMLDivElement> {
1474
+ variant?: 'simple' | 'withComments';
1475
+ }
1476
+ declare const ActivityFeed: React.ForwardRefExoticComponent<ActivityFeedProps & React.RefAttributes<HTMLDivElement>>;
1477
+ interface ActivityFeedItemProps extends React.HTMLAttributes<HTMLDivElement> {
1478
+ avatar?: React.ReactNode;
1479
+ eventDescription: React.ReactNode;
1480
+ timestamp?: string;
1481
+ isLast?: boolean;
1482
+ }
1483
+ declare const ActivityFeedItem: React.ForwardRefExoticComponent<ActivityFeedItemProps & React.RefAttributes<HTMLDivElement>>;
1484
+
1485
+ /**
1486
+ * Alert Component
1487
+ *
1488
+ * Contextual feedback messages with 4 intents × 3 visual variants.
1489
+ *
1490
+ * Token mapping (React ↔ Figma):
1491
+ * bg-intent-success/10 → solidFillAlpha(colors.success, 0.1) [subtle]
1492
+ * bg-intent-success → colors.success [solid]
1493
+ * border-intent-success → solidFill(intentSuccessBorder) [outline]
1494
+ * text-intent-success → colors.success [icon/title]
1495
+ *
1496
+ * Usage:
1497
+ * import { Alert } from '@caqophony/ui';
1498
+ * <Alert intent="error" variant="subtle" title="Error" dismissible>
1499
+ * Something went wrong.
1500
+ * </Alert>
1501
+ *
1502
+ * Issue #2636 — B-10: Action Panels + Alert Component
1503
+ * Authored by Caqophony
1504
+ */
1505
+
1506
+ interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
1507
+ intent?: 'success' | 'warning' | 'error' | 'info';
1508
+ variant?: 'subtle' | 'solid' | 'outline';
1509
+ title?: string;
1510
+ dismissible?: boolean;
1511
+ onDismiss?: () => void;
1512
+ }
1513
+ declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
1514
+
1515
+ interface EmptyStateProps {
1516
+ /**
1517
+ * Lucide icon shown in the circular badge above the title. Optional — when
1518
+ * omitted the badge is hidden and the title leads.
1519
+ */
1520
+ icon?: LucideIcon;
1521
+ /** Short headline, e.g. "No projects yet". */
1522
+ title: string;
1523
+ /**
1524
+ * Body copy: explain what will populate this space and what to do next,
1525
+ * e.g. "Items you create will appear here." Keep to ~2 lines.
1526
+ */
1527
+ description?: React.ReactNode;
1528
+ /**
1529
+ * Primary call-to-action node (a Button, a Link-wrapped Button, etc.). The
1530
+ * page owns routing/handlers; this slot just places it. Optional — some
1531
+ * empty states (e.g. "all clear") are informational with no action.
1532
+ */
1533
+ action?: React.ReactNode;
1534
+ /**
1535
+ * Visual size. `default` is the full-page/section empty state; `compact`
1536
+ * fits inside a card or sidebar panel (smaller badge + padding).
1537
+ */
1538
+ size?: 'default' | 'compact';
1539
+ /** Override the test id (defaults to the rubric-mandated "empty-state"). */
1540
+ testId?: string;
1541
+ className?: string;
1542
+ }
1543
+ /**
1544
+ * EmptyState
1545
+ *
1546
+ * The shared empty-state block. A list / grid / feed page renders this when it
1547
+ * has no data: an icon badge, a headline, body copy and a contextual
1548
+ * call-to-action, with `data-testid="empty-state"`. Gossamer semantic tokens
1549
+ * only.
1550
+ *
1551
+ * @example
1552
+ * <EmptyState
1553
+ * icon={Rocket}
1554
+ * title="No projects yet"
1555
+ * description="Describe what you want to build and your AI team takes it from there."
1556
+ * action={<Button asChild><Link href="/projects/new">Create project</Link></Button>}
1557
+ * />
1558
+ *
1559
+ * Authored by Caqophony
1560
+ */
1561
+ declare function EmptyState({ icon: Icon, title, description, action, size, testId, className, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
1562
+
1563
+ /**
1564
+ * ActionPanel Component
1565
+ *
1566
+ * Settings-style section with title, description, and action button.
1567
+ * Used for confirmation blocks, settings sections, and CTA panels.
1568
+ *
1569
+ * Token mapping (React ↔ Figma):
1570
+ * bg-card → colors.card (panel background)
1571
+ * border-border → colors.border (panel border)
1572
+ * text-foreground → colors.foreground (title)
1573
+ * text-muted-fg → colors.mutedFg (description)
1574
+ * border-intent-* → colors[intent] (withBorder left accent)
1575
+ *
1576
+ * Usage:
1577
+ * import { ActionPanel } from '@caqophony/ui';
1578
+ * <ActionPanel
1579
+ * title="Delete project"
1580
+ * description="This action cannot be undone."
1581
+ * intent="destructive"
1582
+ * action={<Button variant="destructive">Delete</Button>}
1583
+ * />
1584
+ *
1585
+ * Issue #2636 — B-10: Action Panels + Alert Component
1586
+ * Authored by Caqophony
1587
+ */
1588
+
1589
+ interface ActionPanelProps extends React.HTMLAttributes<HTMLDivElement> {
1590
+ title: string;
1591
+ description?: string;
1592
+ action?: React.ReactNode;
1593
+ variant?: 'simple' | 'split' | 'withBorder';
1594
+ intent?: 'default' | 'warning' | 'destructive';
1595
+ }
1596
+ declare const ActionPanel: React.ForwardRefExoticComponent<ActionPanelProps & React.RefAttributes<HTMLDivElement>>;
1597
+
1598
+ /**
1599
+ * Divider Component
1600
+ *
1601
+ * Section separator with optional label. Supports solid/dashed/dotted styles.
1602
+ *
1603
+ * Usage:
1604
+ * import { Divider } from '@caqophony/ui';
1605
+ * <Divider />
1606
+ * <Divider label="Or continue with" />
1607
+ * <Divider label="Section" labelPosition="left" variant="dashed" />
1608
+ *
1609
+ * Issue #2641 — B-14: Dividers + Containers + Media Objects
1610
+ * Authored by Caqophony
1611
+ */
1612
+
1613
+ interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {
1614
+ label?: string;
1615
+ labelPosition?: 'left' | 'center' | 'right';
1616
+ variant?: 'solid' | 'dashed' | 'dotted';
1617
+ orientation?: 'horizontal' | 'vertical';
1618
+ }
1619
+ declare const Divider: React.ForwardRefExoticComponent<DividerProps & React.RefAttributes<HTMLDivElement>>;
1620
+
1621
+ /**
1622
+ * Container Component
1623
+ *
1624
+ * Max-width content wrapper with responsive padding.
1625
+ * Centers content and constrains width for readability.
1626
+ *
1627
+ * Usage:
1628
+ * import { Container } from '@caqophony/ui';
1629
+ * <Container size="lg" padded>
1630
+ * <h1>Page Content</h1>
1631
+ * </Container>
1632
+ *
1633
+ * Issue #2641 — B-14: Dividers + Containers + Media Objects
1634
+ * Authored by Caqophony
1635
+ */
1636
+
1637
+ interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {
1638
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
1639
+ padded?: boolean;
1640
+ }
1641
+ declare const Container: React.ForwardRefExoticComponent<ContainerProps & React.RefAttributes<HTMLDivElement>>;
1642
+
1643
+ /**
1644
+ * PageContent — Standard page-level content wrapper.
1645
+ *
1646
+ * Provides consistent vertical padding and spacing for page content
1647
+ * rendered inside app shells (ProjectNavShell, SetupWizardShell, etc.).
1648
+ *
1649
+ * The shell provides the structural frame (sidebar, header, breadcrumb).
1650
+ * PageContent provides the content padding every page needs.
1651
+ *
1652
+ * Usage:
1653
+ * import { PageContent } from '@caqophony/ui';
1654
+ * <PageContent>
1655
+ * <HeroSection />
1656
+ * <DataGrid />
1657
+ * </PageContent>
1658
+ *
1659
+ * Authored by Caqophony
1660
+ */
1661
+
1662
+ interface PageContentProps extends React.HTMLAttributes<HTMLDivElement> {
1663
+ /** Vertical gap between direct children. Default: 'md' (space-y-6) */
1664
+ gap?: 'sm' | 'md' | 'lg' | 'none';
1665
+ /** Whether to include page-level padding. Default: true */
1666
+ padded?: boolean;
1667
+ }
1668
+ declare const PageContent: React.ForwardRefExoticComponent<PageContentProps & React.RefAttributes<HTMLDivElement>>;
1669
+
1670
+ /**
1671
+ * MediaObject Component
1672
+ *
1673
+ * Horizontal layout with media (icon/image/avatar) + content + optional action.
1674
+ * Common pattern for comments, chat messages, notifications, and list items.
1675
+ *
1676
+ * Usage:
1677
+ * import { MediaObject } from '@caqophony/ui';
1678
+ * <MediaObject
1679
+ * media={<Avatar src={user.avatar} />}
1680
+ * title="John Doe"
1681
+ * description="Left a comment on your post"
1682
+ * action={<Button size="sm">Reply</Button>}
1683
+ * />
1684
+ *
1685
+ * Issue #2641 — B-14: Dividers + Containers + Media Objects
1686
+ * Authored by Caqophony
1687
+ */
1688
+
1689
+ interface MediaObjectProps extends React.HTMLAttributes<HTMLDivElement> {
1690
+ media: React.ReactNode;
1691
+ title?: string;
1692
+ description?: string;
1693
+ action?: React.ReactNode;
1694
+ align?: 'top' | 'center';
1695
+ mediaSize?: 'sm' | 'md' | 'lg';
1696
+ stacked?: boolean;
1697
+ }
1698
+ declare const MediaObject: React.ForwardRefExoticComponent<MediaObjectProps & React.RefAttributes<HTMLDivElement>>;
1699
+
1700
+ /**
1701
+ * UI Package Utilities
1702
+ *
1703
+ * Provides cn utility for consistent class name merging
1704
+ *
1705
+ * Authored by Caqophony
1706
+ */
1707
+
1708
+ /**
1709
+ * Merges class names with Tailwind CSS conflict resolution
1710
+ * Combines clsx for conditional classes with tailwind-merge for deduplication
1711
+ */
1712
+ declare function cn(...inputs: ClassValue[]): string;
1713
+
1714
+ declare function useDebounce<T>(value: T, ms: number): T;
1715
+
1716
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionCard, type ActionCardProps, ActionPanel, type ActionPanelProps, ActivityFeed, ActivityFeedItem, type ActivityFeedItemProps, type ActivityFeedProps, Alert, type AlertProps, AppShell, type AppShellProps, AvatarGroup, AvatarGroupItem, type AvatarGroupItemProps, type AvatarGroupProps, Button, ButtonGroup, ButtonGroupItem, type ButtonGroupItemProps, type ButtonGroupProps, type ButtonProps, Calendar, type CalendarEvent, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CollapsibleSidebar, Combobox, type ComboboxOption, type ComboboxProps, CommandPalette, type CommandPaletteProps, type CommandPaletteResult, ConfirmDialog, type ConfirmDialogProps, Container, type ContainerProps, DataTable, type DataTableProps, DatePicker, type DatePickerProps, DescriptionItem, type DescriptionItemProps, DescriptionList, type DescriptionListProps, DiceBearAvatar, type DiceBearAvatarProps, type DiceBearStyle, DistributionChip, type DistributionChipProps, Divider, type DividerProps, Drawer, DrawerBody, DrawerFooter, DrawerHeader, type DrawerProps, EmptyState, type EmptyStateProps, FilterChip, type FilterChipProps, FormError, type FormErrorProps, FormField, FormFieldGroup, type FormFieldGroupProps, type FormFieldProps, FormLayout, type FormLayoutProps, FormLayoutSection, type FormLayoutSectionProps, FormSection, type FormSectionProps, FormSuccess, type FormSuccessProps, GlobalErrorContent, type GlobalErrorContentProps, GridList, GridListItem, type GridListItemProps, type GridListProps, HorizontalCard, type HorizontalCardProps, HoverCard, type HoverCardProps, ImageCard, type ImageCardProps, Input, InputGroup, type InputGroupProps, type InputProps, IntentIcon, type IntentIconProps, MediaObject, type MediaObjectProps, ModalBody, ModalDialog, type ModalDialogProps, ModalFooter, ModalHeader, type NavItem, Navbar, NavbarLink, type NavbarLinkProps, type NavbarProps, NotificationBanner, type NotificationBannerProps, NotificationPanel, NotificationPanelItem, type NotificationPanelItemProps, type NotificationPanelProps, PageContent, type PageContentProps, Pagination, PaginationButton, type PaginationProps, Popover, type PopoverProps, RadioGroup, type RadioGroupOption, type RadioGroupProps, SectionHeading, type SectionHeadingProps, type NavItem as SidebarNavItem, SimpleAccordion, SkeletonBar, type SkeletonBarProps, SkeletonCard, SkeletonCardGrid, type SkeletonCardGridProps, type SkeletonCardProps, SkeletonDetail, type SkeletonDetailProps, SkeletonRow, type SkeletonRowProps, SkeletonTable, type SkeletonTableProps, StackedList, StackedListItem, type StackedListItemProps, type StackedListProps, StatCardExtended, type StatCardExtendedProps, StatGroup, type StatGroupProps, Stepper, type StepperProps, StepperStep, type StepperStepProps, StickyActionBar, type StickyActionBarProps, Switch, type SwitchProps, TabBar, TabBarItem, type TabBarItemProps, type TabBarProps, TableBody, TableCaption, TableCell, type TableCellProps, TableHeader, TableRow, type TableRowProps, Toggle, ToggleGroup, type ToggleGroupProps, type ToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, avatarVariants, buildDiceBearUrl, buttonVariants, cn, getPageRange, useDebounce, useSidebar };