@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.
- package/LICENSE +21 -0
- package/README.md +66 -2
- package/dist/charts.d.mts +117 -0
- package/dist/charts.js +367 -0
- package/dist/chunk-K3SEIIA3.js +72 -0
- package/dist/index.d.mts +1716 -0
- package/dist/index.js +4605 -0
- package/dist/markdown.d.mts +27 -0
- package/dist/markdown.js +8 -0
- package/package.json +74 -4
- package/styles.css +207 -0
package/dist/index.d.mts
ADDED
|
@@ -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 };
|