canvas-ui-sdk 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/README.md +97 -0
- package/dist/index.d.ts +4810 -0
- package/dist/index.mjs +24105 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +95 -0
- package/styles/tokens.reference.css +283 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4810 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React$1 from 'react';
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
5
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
6
|
+
import { VariantProps } from 'class-variance-authority';
|
|
7
|
+
import { DayPicker } from 'react-day-picker';
|
|
8
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
9
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
10
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
11
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
12
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
13
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
14
|
+
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
15
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
16
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
17
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
18
|
+
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
19
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
20
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
21
|
+
import { LucideIcon } from 'lucide-react';
|
|
22
|
+
import { ClassValue } from 'clsx';
|
|
23
|
+
|
|
24
|
+
declare function Avatar({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
25
|
+
declare function AvatarImage({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Image>): react_jsx_runtime.JSX.Element;
|
|
26
|
+
declare function AvatarFallback({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Fallback>): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
declare const buttonVariants: (props?: ({
|
|
29
|
+
variant?: "link" | "primary" | "primary-outline" | "primary-neutral" | "neutral" | "neutral-delete" | "delete" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
|
|
30
|
+
size?: "default" | "mini" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
|
|
31
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
32
|
+
declare function Button({ className, variant, size, asChild, style, ...props }: React$1.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
|
|
33
|
+
asChild?: boolean;
|
|
34
|
+
}): react_jsx_runtime.JSX.Element;
|
|
35
|
+
|
|
36
|
+
declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, formatters, components, ...props }: React$1.ComponentProps<typeof DayPicker> & {
|
|
37
|
+
buttonVariant?: React$1.ComponentProps<typeof Button>["variant"];
|
|
38
|
+
}): react_jsx_runtime.JSX.Element;
|
|
39
|
+
|
|
40
|
+
declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
|
|
41
|
+
interface CheckboxWithLabelProps extends React$1.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
|
|
42
|
+
children: React$1.ReactNode;
|
|
43
|
+
size?: "default" | "sm";
|
|
44
|
+
}
|
|
45
|
+
declare const CheckboxWithLabel: React$1.ForwardRefExoticComponent<CheckboxWithLabelProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
46
|
+
|
|
47
|
+
interface DateInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange"> {
|
|
48
|
+
inputSize?: "sm" | "default" | "lg";
|
|
49
|
+
value?: string;
|
|
50
|
+
onChange?: (value: string) => void;
|
|
51
|
+
}
|
|
52
|
+
declare const DateInput: React$1.ForwardRefExoticComponent<DateInputProps & React$1.RefAttributes<HTMLInputElement>>;
|
|
53
|
+
|
|
54
|
+
declare function Dialog({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
55
|
+
declare function DialogTrigger({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
56
|
+
declare function DialogPortal({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Portal>): react_jsx_runtime.JSX.Element;
|
|
57
|
+
declare function DialogClose({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Close>): react_jsx_runtime.JSX.Element;
|
|
58
|
+
declare function DialogOverlay({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Overlay>): react_jsx_runtime.JSX.Element;
|
|
59
|
+
declare function DialogContent({ className, children, showCloseButton, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Content> & {
|
|
60
|
+
showCloseButton?: boolean;
|
|
61
|
+
}): react_jsx_runtime.JSX.Element;
|
|
62
|
+
declare function DialogHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
63
|
+
declare function DialogFooter({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
64
|
+
declare function DialogTitle({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Title>): react_jsx_runtime.JSX.Element;
|
|
65
|
+
declare function DialogDescription({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Description>): react_jsx_runtime.JSX.Element;
|
|
66
|
+
|
|
67
|
+
declare function DropdownMenu({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
68
|
+
declare function DropdownMenuPortal({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Portal>): react_jsx_runtime.JSX.Element;
|
|
69
|
+
declare function DropdownMenuTrigger({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
70
|
+
declare function DropdownMenuContent({ className, sideOffset, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
71
|
+
declare function DropdownMenuGroup({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Group>): react_jsx_runtime.JSX.Element;
|
|
72
|
+
declare function DropdownMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
73
|
+
inset?: boolean;
|
|
74
|
+
variant?: "default" | "destructive";
|
|
75
|
+
}): react_jsx_runtime.JSX.Element;
|
|
76
|
+
declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): react_jsx_runtime.JSX.Element;
|
|
77
|
+
declare function DropdownMenuRadioGroup({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): react_jsx_runtime.JSX.Element;
|
|
78
|
+
declare function DropdownMenuRadioItem({ className, children, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): react_jsx_runtime.JSX.Element;
|
|
79
|
+
declare function DropdownMenuLabel({ className, inset, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
|
|
80
|
+
inset?: boolean;
|
|
81
|
+
}): react_jsx_runtime.JSX.Element;
|
|
82
|
+
declare function DropdownMenuSeparator({ className, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Separator>): react_jsx_runtime.JSX.Element;
|
|
83
|
+
declare function DropdownMenuShortcut({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
|
|
84
|
+
declare function DropdownMenuSub({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Sub>): react_jsx_runtime.JSX.Element;
|
|
85
|
+
declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
86
|
+
inset?: boolean;
|
|
87
|
+
}): react_jsx_runtime.JSX.Element;
|
|
88
|
+
declare function DropdownMenuSubContent({ className, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): react_jsx_runtime.JSX.Element;
|
|
89
|
+
|
|
90
|
+
interface UploadedFile {
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
size: number;
|
|
94
|
+
type?: string;
|
|
95
|
+
}
|
|
96
|
+
interface FileUploaderProps {
|
|
97
|
+
files?: UploadedFile[];
|
|
98
|
+
onFilesChange?: (files: UploadedFile[]) => void;
|
|
99
|
+
placeholder?: string;
|
|
100
|
+
accept?: string;
|
|
101
|
+
disabled?: boolean;
|
|
102
|
+
className?: string;
|
|
103
|
+
}
|
|
104
|
+
declare const FileUploader: React$1.ForwardRefExoticComponent<FileUploaderProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
105
|
+
|
|
106
|
+
interface UploadedImage {
|
|
107
|
+
id: string;
|
|
108
|
+
url: string;
|
|
109
|
+
name?: string;
|
|
110
|
+
}
|
|
111
|
+
interface ImageUploaderProps {
|
|
112
|
+
images?: UploadedImage[];
|
|
113
|
+
selectedImageId?: string;
|
|
114
|
+
onImagesChange?: (images: UploadedImage[]) => void;
|
|
115
|
+
onSelectImage?: (imageId: string) => void;
|
|
116
|
+
placeholder?: string;
|
|
117
|
+
disabled?: boolean;
|
|
118
|
+
className?: string;
|
|
119
|
+
}
|
|
120
|
+
declare const ImageUploader: React$1.ForwardRefExoticComponent<ImageUploaderProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
121
|
+
|
|
122
|
+
declare function Input({ className, type, ...props }: React$1.ComponentProps<"input">): react_jsx_runtime.JSX.Element;
|
|
123
|
+
|
|
124
|
+
declare function Label({ className, style, ...props }: React$1.ComponentProps<typeof LabelPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
125
|
+
|
|
126
|
+
interface LineTab {
|
|
127
|
+
id: string;
|
|
128
|
+
label: string;
|
|
129
|
+
}
|
|
130
|
+
interface LineTabsProps {
|
|
131
|
+
/** Array of tab items */
|
|
132
|
+
tabs: LineTab[];
|
|
133
|
+
/** ID of the currently active tab */
|
|
134
|
+
activeTab?: string;
|
|
135
|
+
/** Callback when a tab is clicked */
|
|
136
|
+
onTabChange?: (tabId: string) => void;
|
|
137
|
+
/** Additional class names */
|
|
138
|
+
className?: string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Canvas Design System - Line Tabs Component
|
|
142
|
+
*
|
|
143
|
+
* Horizontal underline-style tabs for page navigation.
|
|
144
|
+
* Active tab has blue text with 2px blue bottom border.
|
|
145
|
+
* Inactive tabs have gray text with 1px gray bottom border.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```tsx
|
|
149
|
+
* <LineTabs
|
|
150
|
+
* tabs={[
|
|
151
|
+
* { id: "tab1", label: "Tab 1" },
|
|
152
|
+
* { id: "tab2", label: "Tab 2" },
|
|
153
|
+
* ]}
|
|
154
|
+
* activeTab="tab1"
|
|
155
|
+
* onTabChange={(id) => console.log(id)}
|
|
156
|
+
* />
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
declare function LineTabs({ tabs, activeTab: controlledActiveTab, onTabChange, className, }: LineTabsProps): react_jsx_runtime.JSX.Element;
|
|
160
|
+
|
|
161
|
+
interface CheckboxOption {
|
|
162
|
+
id: string;
|
|
163
|
+
label: string;
|
|
164
|
+
}
|
|
165
|
+
interface MultiselectCheckboxFieldProps {
|
|
166
|
+
options?: CheckboxOption[];
|
|
167
|
+
selectedValues?: string[];
|
|
168
|
+
onChange?: (values: string[]) => void;
|
|
169
|
+
inputSize?: "sm" | "default" | "lg";
|
|
170
|
+
disabled?: boolean;
|
|
171
|
+
className?: string;
|
|
172
|
+
}
|
|
173
|
+
declare const MultiselectCheckboxField: React$1.ForwardRefExoticComponent<MultiselectCheckboxFieldProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
174
|
+
|
|
175
|
+
interface MultiselectTagsProps {
|
|
176
|
+
tags?: string[];
|
|
177
|
+
placeholder?: string;
|
|
178
|
+
inputSize?: "sm" | "default" | "lg";
|
|
179
|
+
onAdd?: (tag: string) => void;
|
|
180
|
+
onRemove?: (tag: string) => void;
|
|
181
|
+
disabled?: boolean;
|
|
182
|
+
className?: string;
|
|
183
|
+
}
|
|
184
|
+
declare const MultiselectTags: React$1.ForwardRefExoticComponent<MultiselectTagsProps & React$1.RefAttributes<HTMLInputElement>>;
|
|
185
|
+
|
|
186
|
+
declare function Popover({ ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
187
|
+
declare function PopoverTrigger({ ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
188
|
+
declare function PopoverContent({ className, align, sideOffset, ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
189
|
+
declare function PopoverAnchor({ ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Anchor>): react_jsx_runtime.JSX.Element;
|
|
190
|
+
|
|
191
|
+
declare function RadioGroup({ className, ...props }: React$1.ComponentProps<typeof RadioGroupPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
192
|
+
declare function RadioGroupItem({ className, ...props }: React$1.ComponentProps<typeof RadioGroupPrimitive.Item>): react_jsx_runtime.JSX.Element;
|
|
193
|
+
|
|
194
|
+
interface RangeInputProps {
|
|
195
|
+
inputSize?: "sm" | "default" | "lg";
|
|
196
|
+
minValue?: string;
|
|
197
|
+
maxValue?: string;
|
|
198
|
+
onMinChange?: (value: string) => void;
|
|
199
|
+
onMaxChange?: (value: string) => void;
|
|
200
|
+
minPlaceholder?: string;
|
|
201
|
+
maxPlaceholder?: string;
|
|
202
|
+
disabled?: boolean;
|
|
203
|
+
className?: string;
|
|
204
|
+
}
|
|
205
|
+
declare const RangeInput: React$1.ForwardRefExoticComponent<RangeInputProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
206
|
+
|
|
207
|
+
declare function ScrollArea({ className, children, ...props }: React$1.ComponentProps<typeof ScrollAreaPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
208
|
+
declare function ScrollBar({ className, orientation, ...props }: React$1.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>): react_jsx_runtime.JSX.Element;
|
|
209
|
+
|
|
210
|
+
interface SearchboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange"> {
|
|
211
|
+
inputSize?: "sm" | "default" | "lg";
|
|
212
|
+
value?: string;
|
|
213
|
+
onChange?: (value: string) => void;
|
|
214
|
+
}
|
|
215
|
+
declare const Searchbox: React$1.ForwardRefExoticComponent<SearchboxProps & React$1.RefAttributes<HTMLInputElement>>;
|
|
216
|
+
|
|
217
|
+
declare const selectTriggerVariants: (props?: ({
|
|
218
|
+
inputSize?: "default" | "sm" | "lg" | null | undefined;
|
|
219
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
220
|
+
declare function Select({ ...props }: React$1.ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
221
|
+
declare function SelectGroup({ ...props }: React$1.ComponentProps<typeof SelectPrimitive.Group>): react_jsx_runtime.JSX.Element;
|
|
222
|
+
declare function SelectValue({ ...props }: React$1.ComponentProps<typeof SelectPrimitive.Value>): react_jsx_runtime.JSX.Element;
|
|
223
|
+
declare function SelectTrigger({ className, inputSize, children, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Trigger> & VariantProps<typeof selectTriggerVariants>): react_jsx_runtime.JSX.Element;
|
|
224
|
+
declare function SelectContent({ className, children, position, sideOffset, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
225
|
+
declare function SelectLabel({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Label>): react_jsx_runtime.JSX.Element;
|
|
226
|
+
declare function SelectItem({ className, children, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Item>): react_jsx_runtime.JSX.Element;
|
|
227
|
+
declare function SelectSeparator({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Separator>): react_jsx_runtime.JSX.Element;
|
|
228
|
+
declare function SelectScrollUpButton({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): react_jsx_runtime.JSX.Element;
|
|
229
|
+
declare function SelectScrollDownButton({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.ScrollDownButton>): react_jsx_runtime.JSX.Element;
|
|
230
|
+
|
|
231
|
+
interface PillOption {
|
|
232
|
+
id: string;
|
|
233
|
+
label: string;
|
|
234
|
+
}
|
|
235
|
+
interface SelectablePillsProps {
|
|
236
|
+
inputSize?: "sm" | "default" | "lg";
|
|
237
|
+
options: PillOption[];
|
|
238
|
+
selected: string[];
|
|
239
|
+
onSelectionChange: (selected: string[]) => void;
|
|
240
|
+
allowMultiple?: boolean;
|
|
241
|
+
className?: string;
|
|
242
|
+
disabled?: boolean;
|
|
243
|
+
}
|
|
244
|
+
declare const SelectablePills: React$1.ForwardRefExoticComponent<SelectablePillsProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
245
|
+
|
|
246
|
+
declare function Separator({ className, orientation, decorative, ...props }: React$1.ComponentProps<typeof SeparatorPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
247
|
+
|
|
248
|
+
declare function Sheet({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
249
|
+
declare function SheetTrigger({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
250
|
+
declare function SheetClose({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Close>): react_jsx_runtime.JSX.Element;
|
|
251
|
+
declare function SheetPortal({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Portal>): react_jsx_runtime.JSX.Element;
|
|
252
|
+
declare function SheetOverlay({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Overlay>): react_jsx_runtime.JSX.Element;
|
|
253
|
+
declare function SheetContent({ className, children, side, overlayClassName, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Content> & {
|
|
254
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
255
|
+
overlayClassName?: string;
|
|
256
|
+
}): react_jsx_runtime.JSX.Element;
|
|
257
|
+
declare function SheetHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
258
|
+
declare function SheetFooter({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
259
|
+
declare function SheetTitle({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Title>): react_jsx_runtime.JSX.Element;
|
|
260
|
+
declare function SheetDescription({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Description>): react_jsx_runtime.JSX.Element;
|
|
261
|
+
|
|
262
|
+
declare function TooltipProvider({ delayDuration, ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Provider>): react_jsx_runtime.JSX.Element;
|
|
263
|
+
declare function Tooltip({ ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
264
|
+
declare function TooltipTrigger({ ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
265
|
+
declare function TooltipContent({ className, sideOffset, children, ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
266
|
+
|
|
267
|
+
type SidebarContextProps = {
|
|
268
|
+
state: "expanded" | "collapsed";
|
|
269
|
+
open: boolean;
|
|
270
|
+
setOpen: (open: boolean) => void;
|
|
271
|
+
openMobile: boolean;
|
|
272
|
+
setOpenMobile: (open: boolean) => void;
|
|
273
|
+
isMobile: boolean;
|
|
274
|
+
toggleSidebar: () => void;
|
|
275
|
+
};
|
|
276
|
+
declare function useSidebar(): SidebarContextProps;
|
|
277
|
+
declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React$1.ComponentProps<"div"> & {
|
|
278
|
+
defaultOpen?: boolean;
|
|
279
|
+
open?: boolean;
|
|
280
|
+
onOpenChange?: (open: boolean) => void;
|
|
281
|
+
}): react_jsx_runtime.JSX.Element;
|
|
282
|
+
declare function Sidebar$1({ side, variant, collapsible, className, children, ...props }: React$1.ComponentProps<"div"> & {
|
|
283
|
+
side?: "left" | "right";
|
|
284
|
+
variant?: "sidebar" | "floating" | "inset";
|
|
285
|
+
collapsible?: "offcanvas" | "icon" | "none";
|
|
286
|
+
}): react_jsx_runtime.JSX.Element;
|
|
287
|
+
declare function SidebarTrigger({ className, onClick, ...props }: React$1.ComponentProps<typeof Button>): react_jsx_runtime.JSX.Element;
|
|
288
|
+
declare function SidebarRail({ className, ...props }: React$1.ComponentProps<"button">): react_jsx_runtime.JSX.Element;
|
|
289
|
+
declare function SidebarInset({ className, ...props }: React$1.ComponentProps<"main">): react_jsx_runtime.JSX.Element;
|
|
290
|
+
declare function SidebarInput({ className, ...props }: React$1.ComponentProps<typeof Input>): react_jsx_runtime.JSX.Element;
|
|
291
|
+
declare function SidebarHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
292
|
+
declare function SidebarFooter({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
293
|
+
declare function SidebarSeparator({ className, ...props }: React$1.ComponentProps<typeof Separator>): react_jsx_runtime.JSX.Element;
|
|
294
|
+
declare function SidebarContent({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
295
|
+
declare function SidebarGroup({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
296
|
+
declare function SidebarGroupLabel({ className, asChild, ...props }: React$1.ComponentProps<"div"> & {
|
|
297
|
+
asChild?: boolean;
|
|
298
|
+
}): react_jsx_runtime.JSX.Element;
|
|
299
|
+
declare function SidebarGroupAction({ className, asChild, ...props }: React$1.ComponentProps<"button"> & {
|
|
300
|
+
asChild?: boolean;
|
|
301
|
+
}): react_jsx_runtime.JSX.Element;
|
|
302
|
+
declare function SidebarGroupContent({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
303
|
+
declare function SidebarMenu({ className, ...props }: React$1.ComponentProps<"ul">): react_jsx_runtime.JSX.Element;
|
|
304
|
+
declare function SidebarMenuItem({ className, ...props }: React$1.ComponentProps<"li">): react_jsx_runtime.JSX.Element;
|
|
305
|
+
declare const sidebarMenuButtonVariants: (props?: ({
|
|
306
|
+
variant?: "default" | "outline" | null | undefined;
|
|
307
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
308
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
309
|
+
declare function SidebarMenuButton({ asChild, isActive, variant, size, tooltip, className, ...props }: React$1.ComponentProps<"button"> & {
|
|
310
|
+
asChild?: boolean;
|
|
311
|
+
isActive?: boolean;
|
|
312
|
+
tooltip?: string | React$1.ComponentProps<typeof TooltipContent>;
|
|
313
|
+
} & VariantProps<typeof sidebarMenuButtonVariants>): react_jsx_runtime.JSX.Element;
|
|
314
|
+
declare function SidebarMenuAction({ className, asChild, showOnHover, ...props }: React$1.ComponentProps<"button"> & {
|
|
315
|
+
asChild?: boolean;
|
|
316
|
+
showOnHover?: boolean;
|
|
317
|
+
}): react_jsx_runtime.JSX.Element;
|
|
318
|
+
declare function SidebarMenuBadge({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
319
|
+
declare function SidebarMenuSkeleton({ className, showIcon, ...props }: React$1.ComponentProps<"div"> & {
|
|
320
|
+
showIcon?: boolean;
|
|
321
|
+
}): react_jsx_runtime.JSX.Element;
|
|
322
|
+
declare function SidebarMenuSub({ className, ...props }: React$1.ComponentProps<"ul">): react_jsx_runtime.JSX.Element;
|
|
323
|
+
declare function SidebarMenuSubItem({ className, ...props }: React$1.ComponentProps<"li">): react_jsx_runtime.JSX.Element;
|
|
324
|
+
declare function SidebarMenuSubButton({ asChild, size, isActive, className, ...props }: React$1.ComponentProps<"a"> & {
|
|
325
|
+
asChild?: boolean;
|
|
326
|
+
size?: "sm" | "md";
|
|
327
|
+
isActive?: boolean;
|
|
328
|
+
}): react_jsx_runtime.JSX.Element;
|
|
329
|
+
|
|
330
|
+
declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
331
|
+
|
|
332
|
+
interface SliderProps extends Omit<React$1.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>, "value" | "onValueChange"> {
|
|
333
|
+
inputSize?: "sm" | "default" | "lg";
|
|
334
|
+
value?: number[];
|
|
335
|
+
onValueChange?: (value: number[]) => void;
|
|
336
|
+
showLabel?: boolean;
|
|
337
|
+
labelFormatter?: (value: number[]) => string;
|
|
338
|
+
}
|
|
339
|
+
declare const Slider: React$1.ForwardRefExoticComponent<SliderProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
340
|
+
|
|
341
|
+
declare function Switch({ className, ...props }: React$1.ComponentProps<typeof SwitchPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
342
|
+
|
|
343
|
+
declare function Tabs({ className, ...props }: React$1.ComponentProps<typeof TabsPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
344
|
+
declare function TabsList({ className, ...props }: React$1.ComponentProps<typeof TabsPrimitive.List>): react_jsx_runtime.JSX.Element;
|
|
345
|
+
declare function TabsTrigger({ className, ...props }: React$1.ComponentProps<typeof TabsPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
346
|
+
declare function TabsContent({ className, ...props }: React$1.ComponentProps<typeof TabsPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
347
|
+
|
|
348
|
+
interface TextInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
349
|
+
inputSize?: "sm" | "default" | "lg";
|
|
350
|
+
}
|
|
351
|
+
declare const TextInput: React$1.ForwardRefExoticComponent<TextInputProps & React$1.RefAttributes<HTMLInputElement>>;
|
|
352
|
+
|
|
353
|
+
declare const textareaVariants: (props?: ({
|
|
354
|
+
inputSize?: "default" | "sm" | "lg" | "expandable" | null | undefined;
|
|
355
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
356
|
+
interface TextareaProps extends React$1.TextareaHTMLAttributes<HTMLTextAreaElement>, VariantProps<typeof textareaVariants> {
|
|
357
|
+
}
|
|
358
|
+
declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
|
|
359
|
+
|
|
360
|
+
type TypographyVariant = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "body-xl" | "body-l" | "body-m" | "body-s" | "body-xs";
|
|
361
|
+
type TypographyColor = "default" | "muted";
|
|
362
|
+
type TypographyElement = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span" | "div" | "label";
|
|
363
|
+
interface TypographyProps extends React$1.HTMLAttributes<HTMLElement> {
|
|
364
|
+
/** Typography style variant */
|
|
365
|
+
variant?: TypographyVariant;
|
|
366
|
+
/** Color variant */
|
|
367
|
+
color?: TypographyColor;
|
|
368
|
+
/** Override the rendered HTML element */
|
|
369
|
+
as?: TypographyElement;
|
|
370
|
+
/** Additional CSS classes */
|
|
371
|
+
className?: string;
|
|
372
|
+
/** Content */
|
|
373
|
+
children?: React$1.ReactNode;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Typography component that renders text with design system styling.
|
|
377
|
+
*
|
|
378
|
+
* @example
|
|
379
|
+
* // Headings
|
|
380
|
+
* <Typography variant="h1">Page Title</Typography>
|
|
381
|
+
* <Typography variant="h2" color="muted">Subtitle</Typography>
|
|
382
|
+
*
|
|
383
|
+
* // Body text
|
|
384
|
+
* <Typography variant="body-m">Paragraph text</Typography>
|
|
385
|
+
* <Typography variant="body-s" color="muted">Caption</Typography>
|
|
386
|
+
*
|
|
387
|
+
* // Override element
|
|
388
|
+
* <Typography variant="body-m" as="span">Inline text</Typography>
|
|
389
|
+
*/
|
|
390
|
+
declare const Typography: React$1.ForwardRefExoticComponent<TypographyProps & React$1.RefAttributes<HTMLElement>>;
|
|
391
|
+
|
|
392
|
+
interface CartItem {
|
|
393
|
+
id: string;
|
|
394
|
+
name: string;
|
|
395
|
+
price: number;
|
|
396
|
+
image: string;
|
|
397
|
+
}
|
|
398
|
+
interface Message {
|
|
399
|
+
id: string;
|
|
400
|
+
senderName: string;
|
|
401
|
+
senderAvatar: string;
|
|
402
|
+
timestamp: string;
|
|
403
|
+
}
|
|
404
|
+
interface Notification {
|
|
405
|
+
id: string;
|
|
406
|
+
userName: string;
|
|
407
|
+
userAvatar: string;
|
|
408
|
+
action: string;
|
|
409
|
+
timestamp: string;
|
|
410
|
+
}
|
|
411
|
+
interface NavItem$1 {
|
|
412
|
+
id: string;
|
|
413
|
+
label: string;
|
|
414
|
+
icon?: LucideIcon;
|
|
415
|
+
href?: string;
|
|
416
|
+
onClick?: () => void;
|
|
417
|
+
}
|
|
418
|
+
interface HeaderProps {
|
|
419
|
+
/** Callback when mobile menu button is clicked */
|
|
420
|
+
onMenuClick?: () => void;
|
|
421
|
+
/** Whether to show the logo on desktop (for no-sidebar pages) */
|
|
422
|
+
showDesktopLogo?: boolean;
|
|
423
|
+
/** Visual variant - light (default) or dark mode */
|
|
424
|
+
variant?: "light" | "dark";
|
|
425
|
+
/** Callback when "My Account" is clicked */
|
|
426
|
+
onAccountClick?: () => void;
|
|
427
|
+
/** Callback when "Logout" is clicked */
|
|
428
|
+
onLogout?: () => void;
|
|
429
|
+
/** Avatar image URL */
|
|
430
|
+
avatarUrl?: string;
|
|
431
|
+
/** Cart items to display */
|
|
432
|
+
cartItems?: CartItem[];
|
|
433
|
+
/** Callback when checkout button is clicked */
|
|
434
|
+
onCheckout?: () => void;
|
|
435
|
+
/** Callback when remove item is clicked */
|
|
436
|
+
onRemoveCartItem?: (id: string) => void;
|
|
437
|
+
/** Messages to display */
|
|
438
|
+
messages?: Message[];
|
|
439
|
+
/** Callback when "Mark as read" is clicked for messages */
|
|
440
|
+
onMarkAsRead?: () => void;
|
|
441
|
+
/** Callback when "view more" is clicked for messages */
|
|
442
|
+
onViewMoreMessages?: () => void;
|
|
443
|
+
/** Notifications to display */
|
|
444
|
+
notifications?: Notification[];
|
|
445
|
+
/** Callback when "Mark as read" is clicked for notifications */
|
|
446
|
+
onMarkNotificationsAsRead?: () => void;
|
|
447
|
+
/** Callback when "view more" is clicked for notifications */
|
|
448
|
+
onViewMoreNotifications?: () => void;
|
|
449
|
+
/** Navigation items for header and mobile menu */
|
|
450
|
+
navItems?: NavItem$1[];
|
|
451
|
+
/** Callback when Login button is clicked */
|
|
452
|
+
onLogin?: () => void;
|
|
453
|
+
/** Callback when Sign up button is clicked */
|
|
454
|
+
onSignUp?: () => void;
|
|
455
|
+
/** Whether to show auth buttons (Login/Sign up) */
|
|
456
|
+
showAuthButtons?: boolean;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Canvas Design System - Header/Navbar Component
|
|
460
|
+
*
|
|
461
|
+
* Desktop (lg+): Full logo with wordmark, icon cluster, avatar
|
|
462
|
+
* Mobile/Tablet: Favicon only, avatar, hamburger menu
|
|
463
|
+
*
|
|
464
|
+
* For pages without a sidebar, set showDesktopLogo={true} to display
|
|
465
|
+
* the logo in the header on desktop.
|
|
466
|
+
*
|
|
467
|
+
* Set variant="dark" for a dark themed header that matches the sidebar.
|
|
468
|
+
*/
|
|
469
|
+
declare function Header({ onMenuClick, showDesktopLogo, variant, onAccountClick, onLogout, avatarUrl, cartItems, onCheckout, onRemoveCartItem, messages, onMarkAsRead, onViewMoreMessages, notifications, onMarkNotificationsAsRead, onViewMoreNotifications, navItems, onLogin, onSignUp, showAuthButtons, }: HeaderProps): react_jsx_runtime.JSX.Element;
|
|
470
|
+
|
|
471
|
+
interface NavItem {
|
|
472
|
+
id: string;
|
|
473
|
+
label: string;
|
|
474
|
+
icon: LucideIcon;
|
|
475
|
+
href?: string;
|
|
476
|
+
isActive?: boolean;
|
|
477
|
+
/** Nested subtabs - when present, the item becomes expandable */
|
|
478
|
+
children?: Omit<NavItem, "children" | "icon">[];
|
|
479
|
+
}
|
|
480
|
+
interface NavSection {
|
|
481
|
+
id: string;
|
|
482
|
+
title: string;
|
|
483
|
+
items: NavItem[];
|
|
484
|
+
}
|
|
485
|
+
interface SidebarNavProps {
|
|
486
|
+
sections: NavSection[];
|
|
487
|
+
variant?: "dark" | "light";
|
|
488
|
+
onItemClick?: (item: NavItem | Omit<NavItem, "children" | "icon">) => void;
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Canvas Design System - Sidebar Navigation
|
|
492
|
+
*
|
|
493
|
+
* Renders navigation sections with collapsible groups and nav items.
|
|
494
|
+
* Supports dark (desktop) and light (mobile sheet) variants.
|
|
495
|
+
* Items with children become expandable with nested subtabs.
|
|
496
|
+
*/
|
|
497
|
+
declare function SidebarNav({ sections, variant, onItemClick }: SidebarNavProps): react_jsx_runtime.JSX.Element;
|
|
498
|
+
|
|
499
|
+
interface SidebarProps {
|
|
500
|
+
/** Navigation sections to display */
|
|
501
|
+
sections: NavSection[];
|
|
502
|
+
/** Visual variant - dark for desktop, light for mobile sheet */
|
|
503
|
+
variant?: "dark" | "light";
|
|
504
|
+
/** Callback when a nav item or subtab is clicked */
|
|
505
|
+
onItemClick?: (item: NavItem | Omit<NavItem, "children" | "icon">) => void;
|
|
506
|
+
/** Additional class names */
|
|
507
|
+
className?: string;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Canvas Design System - Sidebar Component
|
|
511
|
+
*
|
|
512
|
+
* Desktop: Fixed dark sidebar (320px width) on the left
|
|
513
|
+
* Mobile: Light theme sidebar rendered inside a Sheet
|
|
514
|
+
*/
|
|
515
|
+
declare function Sidebar({ sections, variant, onItemClick, className }: SidebarProps): react_jsx_runtime.JSX.Element;
|
|
516
|
+
|
|
517
|
+
interface DashboardShellProps {
|
|
518
|
+
/** Navigation sections for the sidebar */
|
|
519
|
+
navigation: NavSection[];
|
|
520
|
+
/** Optional page header content (e.g., breadcrumbs, page title) */
|
|
521
|
+
pageHeader?: React.ReactNode;
|
|
522
|
+
/** Main content - the modular blocks */
|
|
523
|
+
children: React.ReactNode;
|
|
524
|
+
/** Callback when a nav item or subtab is clicked */
|
|
525
|
+
onNavItemClick?: (item: NavItem | Omit<NavItem, "children" | "icon">) => void;
|
|
526
|
+
/** Callback when app menu (hamburger) is clicked - for future app-level menu */
|
|
527
|
+
onAppMenuClick?: () => void;
|
|
528
|
+
/** Additional class name for the main content area */
|
|
529
|
+
contentClassName?: string;
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Canvas Design System - Dashboard Shell
|
|
533
|
+
*
|
|
534
|
+
* A composable page layout that provides:
|
|
535
|
+
* - Fixed header (80px)
|
|
536
|
+
* - Fixed dark sidebar on desktop (320px, hidden on mobile)
|
|
537
|
+
* - Floating sidebar toggle button on mobile (left edge)
|
|
538
|
+
* - Mobile sheet navigation for dashboard sidebar
|
|
539
|
+
* - Hamburger menu in header for app-level menu (future)
|
|
540
|
+
* - Main content area with pageHeader slot and children slot for blocks
|
|
541
|
+
*
|
|
542
|
+
* @example
|
|
543
|
+
* ```tsx
|
|
544
|
+
* <DashboardShell
|
|
545
|
+
* navigation={navSections}
|
|
546
|
+
* pageHeader={<Breadcrumbs />}
|
|
547
|
+
* >
|
|
548
|
+
* <StatsBlock />
|
|
549
|
+
* <ChartBlock />
|
|
550
|
+
* <TableBlock />
|
|
551
|
+
* </DashboardShell>
|
|
552
|
+
* ```
|
|
553
|
+
*/
|
|
554
|
+
declare function DashboardShell({ navigation, pageHeader, children, onNavItemClick, onAppMenuClick, contentClassName, }: DashboardShellProps): react_jsx_runtime.JSX.Element;
|
|
555
|
+
|
|
556
|
+
interface IconNavItemConfig {
|
|
557
|
+
id: string;
|
|
558
|
+
label: string;
|
|
559
|
+
icon: LucideIcon;
|
|
560
|
+
href?: string;
|
|
561
|
+
isActive?: boolean;
|
|
562
|
+
hasNotification?: boolean;
|
|
563
|
+
}
|
|
564
|
+
declare const defaultIconNavItems: IconNavItemConfig[];
|
|
565
|
+
interface IconSidebarProps {
|
|
566
|
+
/** Navigation items to display */
|
|
567
|
+
items?: IconNavItemConfig[];
|
|
568
|
+
/** Visual variant - dark for desktop, light for mobile sheet */
|
|
569
|
+
variant?: "dark" | "light";
|
|
570
|
+
/** Callback when a nav item is clicked */
|
|
571
|
+
onItemClick?: (item: IconNavItemConfig) => void;
|
|
572
|
+
/** Additional class names */
|
|
573
|
+
className?: string;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Canvas Design System - Icon Sidebar Component
|
|
577
|
+
*
|
|
578
|
+
* A narrow sidebar (96px) with vertically stacked icon navigation.
|
|
579
|
+
* Desktop: Fixed dark sidebar on the left
|
|
580
|
+
* Mobile: Light theme sidebar rendered inside a Sheet
|
|
581
|
+
*/
|
|
582
|
+
declare function IconSidebar({ items, variant, onItemClick, className }: IconSidebarProps): react_jsx_runtime.JSX.Element;
|
|
583
|
+
|
|
584
|
+
interface IconSidebarShellProps {
|
|
585
|
+
/** Navigation items for the icon sidebar */
|
|
586
|
+
navigation?: IconNavItemConfig[];
|
|
587
|
+
/** Optional page header content (e.g., breadcrumbs, page title) */
|
|
588
|
+
pageHeader?: React.ReactNode;
|
|
589
|
+
/** Main content - the modular blocks */
|
|
590
|
+
children: React.ReactNode;
|
|
591
|
+
/** Callback when a nav item is clicked */
|
|
592
|
+
onNavItemClick?: (item: IconNavItemConfig) => void;
|
|
593
|
+
/** Callback when app menu (hamburger) is clicked - for future app-level menu */
|
|
594
|
+
onAppMenuClick?: () => void;
|
|
595
|
+
/** Additional class name for the main content area */
|
|
596
|
+
contentClassName?: string;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Canvas Design System - Icon Sidebar Shell
|
|
600
|
+
*
|
|
601
|
+
* A composable page layout with a narrow icon sidebar that provides:
|
|
602
|
+
* - Fixed header (80px)
|
|
603
|
+
* - Fixed narrow dark icon sidebar on desktop (96px, hidden on mobile)
|
|
604
|
+
* - Floating sidebar toggle button on mobile (left edge)
|
|
605
|
+
* - Mobile sheet navigation for icon sidebar
|
|
606
|
+
* - Hamburger menu in header for app-level menu (future)
|
|
607
|
+
* - Main content area with pageHeader slot and children slot for blocks
|
|
608
|
+
*
|
|
609
|
+
* Uses the same styling and spacing as DashboardShell for non-sidebar content.
|
|
610
|
+
*
|
|
611
|
+
* @example
|
|
612
|
+
* ```tsx
|
|
613
|
+
* <IconSidebarShell navigation={iconNavItems}>
|
|
614
|
+
* <ContentDropzone label="Main content area" />
|
|
615
|
+
* </IconSidebarShell>
|
|
616
|
+
* ```
|
|
617
|
+
*/
|
|
618
|
+
declare function IconSidebarShell({ navigation, pageHeader, children, onNavItemClick, onAppMenuClick, contentClassName, }: IconSidebarShellProps): react_jsx_runtime.JSX.Element;
|
|
619
|
+
|
|
620
|
+
interface NavTab {
|
|
621
|
+
id: string;
|
|
622
|
+
label: string;
|
|
623
|
+
isActive?: boolean;
|
|
624
|
+
}
|
|
625
|
+
interface DoubleSidebarSection {
|
|
626
|
+
id: string;
|
|
627
|
+
icon: LucideIcon;
|
|
628
|
+
label: string;
|
|
629
|
+
badge?: boolean;
|
|
630
|
+
tabs: NavTab[];
|
|
631
|
+
}
|
|
632
|
+
declare const defaultDoubleSidebarSections: DoubleSidebarSection[];
|
|
633
|
+
interface DoubleSidebarProps {
|
|
634
|
+
/** Navigation sections - each section maps to an icon and has tabs */
|
|
635
|
+
sections?: DoubleSidebarSection[];
|
|
636
|
+
/** Visual variant for the icon column */
|
|
637
|
+
iconVariant?: "dark" | "light";
|
|
638
|
+
/** Visual variant for the navigation column */
|
|
639
|
+
navVariant?: "dark" | "light";
|
|
640
|
+
/** Callback when a tab is clicked */
|
|
641
|
+
onTabClick?: (section: DoubleSidebarSection, tab: NavTab) => void;
|
|
642
|
+
/** Callback when closing (for mobile sheet) */
|
|
643
|
+
onClose?: () => void;
|
|
644
|
+
/** Additional class names */
|
|
645
|
+
className?: string;
|
|
646
|
+
}
|
|
647
|
+
/**
|
|
648
|
+
* Canvas Design System - Double Sidebar Component
|
|
649
|
+
*
|
|
650
|
+
* A two-column sidebar where:
|
|
651
|
+
* - Left column (96px): Icon buttons that switch the active section
|
|
652
|
+
* - Right column (280px): Text-based navigation tabs for the active section
|
|
653
|
+
*
|
|
654
|
+
* Each column can be independently themed (light/dark).
|
|
655
|
+
*/
|
|
656
|
+
declare function DoubleSidebar({ sections, iconVariant, navVariant, onTabClick, onClose, className }: DoubleSidebarProps): react_jsx_runtime.JSX.Element;
|
|
657
|
+
|
|
658
|
+
interface DoubleSidebarShellProps {
|
|
659
|
+
/** Navigation sections for the double sidebar */
|
|
660
|
+
sections?: DoubleSidebarSection[];
|
|
661
|
+
/** Visual variant for the icon column */
|
|
662
|
+
iconVariant?: "dark" | "light";
|
|
663
|
+
/** Visual variant for the navigation column */
|
|
664
|
+
navVariant?: "dark" | "light";
|
|
665
|
+
/** Optional page header content (e.g., breadcrumbs, page title) */
|
|
666
|
+
pageHeader?: React.ReactNode;
|
|
667
|
+
/** Main content - the modular blocks */
|
|
668
|
+
children: React.ReactNode;
|
|
669
|
+
/** Callback when a tab is clicked */
|
|
670
|
+
onTabClick?: (section: DoubleSidebarSection, tab: NavTab) => void;
|
|
671
|
+
/** Callback when app menu (hamburger) is clicked - for future app-level menu */
|
|
672
|
+
onAppMenuClick?: () => void;
|
|
673
|
+
/** Additional class name for the main content area */
|
|
674
|
+
contentClassName?: string;
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Canvas Design System - Double Sidebar Shell
|
|
678
|
+
*
|
|
679
|
+
* A composable page layout with a two-column sidebar that provides:
|
|
680
|
+
* - Fixed header (80px)
|
|
681
|
+
* - Fixed double sidebar on desktop (96px icons + 280px nav = 376px total)
|
|
682
|
+
* - Floating sidebar toggle button on mobile (left edge)
|
|
683
|
+
* - Mobile sheet navigation with both sidebar columns
|
|
684
|
+
* - Each sidebar column can be independently themed (light/dark)
|
|
685
|
+
* - Main content area with pageHeader slot and children slot for blocks
|
|
686
|
+
*
|
|
687
|
+
* Uses the same styling and spacing as DashboardShell for non-sidebar content.
|
|
688
|
+
*
|
|
689
|
+
* @example
|
|
690
|
+
* ```tsx
|
|
691
|
+
* <DoubleSidebarShell
|
|
692
|
+
* sections={sections}
|
|
693
|
+
* iconVariant="light"
|
|
694
|
+
* navVariant="light"
|
|
695
|
+
* >
|
|
696
|
+
* <ContentDropzone label="Main content area" />
|
|
697
|
+
* </DoubleSidebarShell>
|
|
698
|
+
* ```
|
|
699
|
+
*/
|
|
700
|
+
declare function DoubleSidebarShell({ sections, iconVariant, navVariant, pageHeader, children, onTabClick, onAppMenuClick, contentClassName, }: DoubleSidebarShellProps): react_jsx_runtime.JSX.Element;
|
|
701
|
+
|
|
702
|
+
interface StandardPageShellProps {
|
|
703
|
+
/** Flair banner title */
|
|
704
|
+
bannerTitle?: string;
|
|
705
|
+
/** Flair banner description */
|
|
706
|
+
bannerDescription?: string;
|
|
707
|
+
/** Whether to show the flair banner */
|
|
708
|
+
showBanner?: boolean;
|
|
709
|
+
/** Page title */
|
|
710
|
+
pageTitle?: string;
|
|
711
|
+
/** Page description */
|
|
712
|
+
pageDescription?: string;
|
|
713
|
+
/** Array of tab items */
|
|
714
|
+
tabs?: LineTab[];
|
|
715
|
+
/** ID of the currently active tab */
|
|
716
|
+
activeTab?: string;
|
|
717
|
+
/** Callback when a tab is clicked */
|
|
718
|
+
onTabChange?: (tabId: string) => void;
|
|
719
|
+
/** Whether to show the tabs */
|
|
720
|
+
showTabs?: boolean;
|
|
721
|
+
/** Whether to show the page header section */
|
|
722
|
+
showPageHeader?: boolean;
|
|
723
|
+
/** Main content - the modular blocks */
|
|
724
|
+
children: React.ReactNode;
|
|
725
|
+
/** Callback when app menu (hamburger) is clicked - for future app-level menu */
|
|
726
|
+
onAppMenuClick?: () => void;
|
|
727
|
+
/** Additional class name for the main content area */
|
|
728
|
+
contentClassName?: string;
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
731
|
+
* Canvas Design System - Standard Page Shell
|
|
732
|
+
*
|
|
733
|
+
* A no-sidebar layout with:
|
|
734
|
+
* - Fixed header with logo (no sidebar)
|
|
735
|
+
* - Optional flair banner (dark blue hero section)
|
|
736
|
+
* - Optional page header section with title, description, and tabs
|
|
737
|
+
* - Centered content area (max-width 992px)
|
|
738
|
+
*
|
|
739
|
+
* @example
|
|
740
|
+
* ```tsx
|
|
741
|
+
* <StandardPageShell
|
|
742
|
+
* bannerTitle="Large title"
|
|
743
|
+
* bannerDescription="Description"
|
|
744
|
+
* pageTitle="Page title"
|
|
745
|
+
* pageDescription="Description"
|
|
746
|
+
* tabs={[{ id: "tab1", label: "Tab 1" }]}
|
|
747
|
+
* >
|
|
748
|
+
* <ContentDropzone />
|
|
749
|
+
* </StandardPageShell>
|
|
750
|
+
* ```
|
|
751
|
+
*/
|
|
752
|
+
declare function StandardPageShell({ bannerTitle, bannerDescription, showBanner, pageTitle, pageDescription, tabs, activeTab, onTabChange, showTabs, showPageHeader, children, onAppMenuClick, contentClassName, }: StandardPageShellProps): react_jsx_runtime.JSX.Element;
|
|
753
|
+
|
|
754
|
+
interface MobileNavTabConfig {
|
|
755
|
+
id: string;
|
|
756
|
+
label: string;
|
|
757
|
+
icon: LucideIcon;
|
|
758
|
+
isActive?: boolean;
|
|
759
|
+
}
|
|
760
|
+
interface MobileBottomNavProps {
|
|
761
|
+
/** Navigation tabs to display */
|
|
762
|
+
tabs?: MobileNavTabConfig[];
|
|
763
|
+
/** Visual variant - dark or light theme */
|
|
764
|
+
variant?: "dark" | "light";
|
|
765
|
+
/** Callback when a tab is clicked */
|
|
766
|
+
onTabClick?: (tab: MobileNavTabConfig) => void;
|
|
767
|
+
/** Additional class names */
|
|
768
|
+
className?: string;
|
|
769
|
+
}
|
|
770
|
+
/**
|
|
771
|
+
* Canvas Design System - Mobile Bottom Navigation
|
|
772
|
+
*
|
|
773
|
+
* A sticky bottom navigation bar with icon tabs.
|
|
774
|
+
* Styling matches the icon-sidebar for consistency.
|
|
775
|
+
* Supports both dark and light themes via the variant prop.
|
|
776
|
+
*
|
|
777
|
+
* @example
|
|
778
|
+
* ```tsx
|
|
779
|
+
* <MobileBottomNav
|
|
780
|
+
* variant="light"
|
|
781
|
+
* tabs={defaultMobileNavTabs}
|
|
782
|
+
* onTabClick={(tab) => console.log(tab.id)}
|
|
783
|
+
* />
|
|
784
|
+
* ```
|
|
785
|
+
*/
|
|
786
|
+
declare function MobileBottomNav({ tabs, variant, onTabClick, className, }: MobileBottomNavProps): react_jsx_runtime.JSX.Element;
|
|
787
|
+
|
|
788
|
+
interface MobileMenuShellProps {
|
|
789
|
+
/** Navigation tabs for the bottom nav */
|
|
790
|
+
tabs?: MobileNavTabConfig[];
|
|
791
|
+
/** Visual variant for the bottom nav - dark or light theme */
|
|
792
|
+
variant?: "dark" | "light";
|
|
793
|
+
/** ID of the currently active tab */
|
|
794
|
+
activeTab?: string;
|
|
795
|
+
/** Callback when a tab is clicked */
|
|
796
|
+
onTabChange?: (tabId: string) => void;
|
|
797
|
+
/** Main content */
|
|
798
|
+
children: React.ReactNode;
|
|
799
|
+
/** Additional class name for the main content area */
|
|
800
|
+
contentClassName?: string;
|
|
801
|
+
}
|
|
802
|
+
/**
|
|
803
|
+
* Canvas Design System - Mobile Menu Shell
|
|
804
|
+
*
|
|
805
|
+
* A layout with:
|
|
806
|
+
* - Fixed header with logo (no sidebar)
|
|
807
|
+
* - Main scrollable content area
|
|
808
|
+
* - Sticky bottom navigation bar (supports dark/light themes)
|
|
809
|
+
*
|
|
810
|
+
* @example
|
|
811
|
+
* ```tsx
|
|
812
|
+
* <MobileMenuShell variant="light">
|
|
813
|
+
* <ContentDropzone />
|
|
814
|
+
* </MobileMenuShell>
|
|
815
|
+
* ```
|
|
816
|
+
*/
|
|
817
|
+
declare function MobileMenuShell({ tabs, variant, activeTab, onTabChange, children, contentClassName, }: MobileMenuShellProps): react_jsx_runtime.JSX.Element;
|
|
818
|
+
|
|
819
|
+
interface FilterOption$c {
|
|
820
|
+
id: string;
|
|
821
|
+
label: string;
|
|
822
|
+
}
|
|
823
|
+
interface FilterDropdownConfig {
|
|
824
|
+
id: string;
|
|
825
|
+
label: string;
|
|
826
|
+
placeholder: string;
|
|
827
|
+
options: FilterOption$c[];
|
|
828
|
+
}
|
|
829
|
+
interface FilterCheckboxGroupConfig {
|
|
830
|
+
id: string;
|
|
831
|
+
label: string;
|
|
832
|
+
options: FilterOption$c[];
|
|
833
|
+
}
|
|
834
|
+
interface FilterDateRangeConfig {
|
|
835
|
+
id: string;
|
|
836
|
+
label: string;
|
|
837
|
+
startPlaceholder?: string;
|
|
838
|
+
endPlaceholder?: string;
|
|
839
|
+
}
|
|
840
|
+
interface FilterState {
|
|
841
|
+
dropdowns: Record<string, string>;
|
|
842
|
+
checkboxes: Record<string, boolean>;
|
|
843
|
+
dateRange: {
|
|
844
|
+
start: string;
|
|
845
|
+
end: string;
|
|
846
|
+
};
|
|
847
|
+
}
|
|
848
|
+
interface FilterPopoverProps {
|
|
849
|
+
/** Dropdown filter configurations */
|
|
850
|
+
dropdowns?: FilterDropdownConfig[];
|
|
851
|
+
/** Checkbox group configuration */
|
|
852
|
+
checkboxGroup?: FilterCheckboxGroupConfig;
|
|
853
|
+
/** Date range configuration */
|
|
854
|
+
dateRange?: FilterDateRangeConfig;
|
|
855
|
+
/** Current filter state */
|
|
856
|
+
filterState?: FilterState;
|
|
857
|
+
/** Callback when filters are applied */
|
|
858
|
+
onApply?: (state: FilterState) => void;
|
|
859
|
+
/** Callback when filters are cleared */
|
|
860
|
+
onClear?: () => void;
|
|
861
|
+
/** Trigger style variant - "button" for button style, "dropdown" for select-like style */
|
|
862
|
+
triggerVariant?: "button" | "dropdown";
|
|
863
|
+
/** Placeholder text shown in the trigger (used for both variants) */
|
|
864
|
+
triggerPlaceholder?: string;
|
|
865
|
+
/** Additional class names for the trigger */
|
|
866
|
+
className?: string;
|
|
867
|
+
}
|
|
868
|
+
/**
|
|
869
|
+
* Canvas Design System - Filter Popover Component
|
|
870
|
+
*
|
|
871
|
+
* A filter button that opens a popover with various filter options.
|
|
872
|
+
* Inspired by shadcnstudio Category Filter 6 structure.
|
|
873
|
+
*
|
|
874
|
+
* @example
|
|
875
|
+
* ```tsx
|
|
876
|
+
* // Button variant (default)
|
|
877
|
+
* <FilterPopover
|
|
878
|
+
* onApply={(filters) => console.log(filters)}
|
|
879
|
+
* onClear={() => console.log("Cleared")}
|
|
880
|
+
* />
|
|
881
|
+
*
|
|
882
|
+
* // Dropdown variant
|
|
883
|
+
* <FilterPopover
|
|
884
|
+
* triggerVariant="dropdown"
|
|
885
|
+
* triggerPlaceholder="Filter"
|
|
886
|
+
* onApply={(filters) => console.log(filters)}
|
|
887
|
+
* />
|
|
888
|
+
* ```
|
|
889
|
+
*/
|
|
890
|
+
declare function FilterPopover({ dropdowns, checkboxGroup, dateRange, filterState, onApply, onClear, triggerVariant, triggerPlaceholder, className, }: FilterPopoverProps): react_jsx_runtime.JSX.Element;
|
|
891
|
+
|
|
892
|
+
interface SearchBarShellProps {
|
|
893
|
+
/** Flair banner title */
|
|
894
|
+
bannerTitle?: string;
|
|
895
|
+
/** Flair banner description */
|
|
896
|
+
bannerDescription?: string;
|
|
897
|
+
/** Page title */
|
|
898
|
+
pageTitle?: string;
|
|
899
|
+
/** Page description */
|
|
900
|
+
pageDescription?: string;
|
|
901
|
+
/** Search bar placeholder */
|
|
902
|
+
searchPlaceholder?: string;
|
|
903
|
+
/** Callback when search is triggered */
|
|
904
|
+
onSearch?: (query: string) => void;
|
|
905
|
+
/** Callback when filters are applied */
|
|
906
|
+
onFilterApply?: (filters: FilterState) => void;
|
|
907
|
+
/** Main content */
|
|
908
|
+
children: React.ReactNode;
|
|
909
|
+
/** Additional class name for the main content area */
|
|
910
|
+
contentClassName?: string;
|
|
911
|
+
}
|
|
912
|
+
/**
|
|
913
|
+
* Canvas Design System - Search Bar Shell
|
|
914
|
+
*
|
|
915
|
+
* A layout with:
|
|
916
|
+
* - Fixed header with logo (no sidebar)
|
|
917
|
+
* - Page header section with title and description
|
|
918
|
+
* - Search bar with filter button
|
|
919
|
+
* - Content area for search results
|
|
920
|
+
*
|
|
921
|
+
* @example
|
|
922
|
+
* ```tsx
|
|
923
|
+
* <SearchBarShell
|
|
924
|
+
* pageTitle="Page title"
|
|
925
|
+
* pageDescription="Description"
|
|
926
|
+
* onSearch={(query) => console.log(query)}
|
|
927
|
+
* >
|
|
928
|
+
* <ContentDropzone />
|
|
929
|
+
* </SearchBarShell>
|
|
930
|
+
* ```
|
|
931
|
+
*/
|
|
932
|
+
declare function SearchBarShell({ bannerTitle, bannerDescription, pageTitle, pageDescription, searchPlaceholder, onSearch, onFilterApply, children, contentClassName, }: SearchBarShellProps): react_jsx_runtime.JSX.Element;
|
|
933
|
+
|
|
934
|
+
interface Step {
|
|
935
|
+
id: string;
|
|
936
|
+
label: string;
|
|
937
|
+
/** Optional description for the step content area */
|
|
938
|
+
description?: string;
|
|
939
|
+
}
|
|
940
|
+
interface StepTrackerProps {
|
|
941
|
+
/** Array of step objects with id and label */
|
|
942
|
+
steps: Step[];
|
|
943
|
+
/** Current active step (0-indexed) */
|
|
944
|
+
currentStep: number;
|
|
945
|
+
/** Optional callback when a step is clicked */
|
|
946
|
+
onStepClick?: (stepIndex: number) => void;
|
|
947
|
+
/** Additional class name */
|
|
948
|
+
className?: string;
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Canvas Design System - Step Tracker
|
|
952
|
+
*
|
|
953
|
+
* A horizontal multi-step progress tracker showing:
|
|
954
|
+
* - Numbered circles for each step (36px)
|
|
955
|
+
* - Connecting lines between steps
|
|
956
|
+
* - Completed steps show checkmark
|
|
957
|
+
* - Active step has primary border
|
|
958
|
+
* - Inactive steps have gray background
|
|
959
|
+
*/
|
|
960
|
+
declare function StepTracker({ steps, currentStep, onStepClick, className, }: StepTrackerProps): react_jsx_runtime.JSX.Element;
|
|
961
|
+
/** Default steps for demo/placeholder purposes */
|
|
962
|
+
declare const defaultSteps: Step[];
|
|
963
|
+
|
|
964
|
+
interface MultistepShellProps {
|
|
965
|
+
/** Array of step objects */
|
|
966
|
+
steps?: Step[];
|
|
967
|
+
/** Current active step (0-indexed) */
|
|
968
|
+
currentStep?: number;
|
|
969
|
+
/** Callback when a step is clicked */
|
|
970
|
+
onStepClick?: (stepIndex: number) => void;
|
|
971
|
+
/** Main content */
|
|
972
|
+
children: React.ReactNode;
|
|
973
|
+
/** Callback when Cancel/Back is clicked */
|
|
974
|
+
onCancel?: () => void;
|
|
975
|
+
/** Callback when Continue/Submit is clicked */
|
|
976
|
+
onContinue?: () => void;
|
|
977
|
+
/** Cancel button text */
|
|
978
|
+
cancelText?: string;
|
|
979
|
+
/** Continue button text */
|
|
980
|
+
continueText?: string;
|
|
981
|
+
/** Whether Continue button is disabled */
|
|
982
|
+
continueDisabled?: boolean;
|
|
983
|
+
/** Callback when app menu (hamburger) is clicked */
|
|
984
|
+
onAppMenuClick?: () => void;
|
|
985
|
+
/** Additional class name for the main content area */
|
|
986
|
+
contentClassName?: string;
|
|
987
|
+
}
|
|
988
|
+
/**
|
|
989
|
+
* Canvas Design System - Multistep Shell
|
|
990
|
+
*
|
|
991
|
+
* A layout for multi-step processes/wizards with:
|
|
992
|
+
* - Fixed header with logo
|
|
993
|
+
* - Horizontal step tracker below header
|
|
994
|
+
* - Step title and description
|
|
995
|
+
* - Centered content area (max-width 768px)
|
|
996
|
+
* - Navigation buttons (Cancel, Continue)
|
|
997
|
+
*
|
|
998
|
+
* @example
|
|
999
|
+
* ```tsx
|
|
1000
|
+
* <MultistepShell
|
|
1001
|
+
* steps={[
|
|
1002
|
+
* { id: "step1", label: "Step 1", description: "First step" },
|
|
1003
|
+
* { id: "step2", label: "Step 2", description: "Second step" },
|
|
1004
|
+
* ]}
|
|
1005
|
+
* currentStep={0}
|
|
1006
|
+
* onCancel={() => router.back()}
|
|
1007
|
+
* onContinue={() => setStep(step + 1)}
|
|
1008
|
+
* >
|
|
1009
|
+
* <ContentDropzone />
|
|
1010
|
+
* </MultistepShell>
|
|
1011
|
+
* ```
|
|
1012
|
+
*/
|
|
1013
|
+
declare function MultistepShell({ steps, currentStep, onStepClick, children, onCancel, onContinue, cancelText, continueText, continueDisabled, onAppMenuClick, contentClassName, }: MultistepShellProps): react_jsx_runtime.JSX.Element;
|
|
1014
|
+
|
|
1015
|
+
interface InfoCardProps {
|
|
1016
|
+
/** Card title (displayed as uppercase header) */
|
|
1017
|
+
title?: string;
|
|
1018
|
+
/** Card description text */
|
|
1019
|
+
description?: string;
|
|
1020
|
+
/** Additional class name */
|
|
1021
|
+
className?: string;
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Canvas Design System - Info Card
|
|
1025
|
+
*
|
|
1026
|
+
* A sidebar card displaying a title and descriptive text.
|
|
1027
|
+
* Used for "About Us" style content.
|
|
1028
|
+
*/
|
|
1029
|
+
declare function InfoCard({ title, description, className, }: InfoCardProps): react_jsx_runtime.JSX.Element;
|
|
1030
|
+
interface LinkItem {
|
|
1031
|
+
id: string;
|
|
1032
|
+
label: string;
|
|
1033
|
+
icon: LucideIcon;
|
|
1034
|
+
href?: string;
|
|
1035
|
+
onClick?: () => void;
|
|
1036
|
+
}
|
|
1037
|
+
interface LinksCardProps {
|
|
1038
|
+
/** Card title (displayed as uppercase header) */
|
|
1039
|
+
title?: string;
|
|
1040
|
+
/** Array of link items */
|
|
1041
|
+
links?: LinkItem[];
|
|
1042
|
+
/** Additional class name */
|
|
1043
|
+
className?: string;
|
|
1044
|
+
}
|
|
1045
|
+
/** Default support links */
|
|
1046
|
+
declare const defaultSupportLinks: LinkItem[];
|
|
1047
|
+
/**
|
|
1048
|
+
* Canvas Design System - Links Card
|
|
1049
|
+
*
|
|
1050
|
+
* A sidebar card displaying a title and a list of icon links.
|
|
1051
|
+
* Used for "Support" style contact links.
|
|
1052
|
+
*/
|
|
1053
|
+
declare function LinksCard({ title, links, className, }: LinksCardProps): react_jsx_runtime.JSX.Element;
|
|
1054
|
+
|
|
1055
|
+
interface MultistepSidebarShellProps {
|
|
1056
|
+
/** Array of step objects */
|
|
1057
|
+
steps?: Step[];
|
|
1058
|
+
/** Current active step (0-indexed) */
|
|
1059
|
+
currentStep?: number;
|
|
1060
|
+
/** Callback when a step is clicked */
|
|
1061
|
+
onStepClick?: (stepIndex: number) => void;
|
|
1062
|
+
/** Info card title */
|
|
1063
|
+
infoTitle?: string;
|
|
1064
|
+
/** Info card description */
|
|
1065
|
+
infoDescription?: string;
|
|
1066
|
+
/** Links card title */
|
|
1067
|
+
linksTitle?: string;
|
|
1068
|
+
/** Links card items */
|
|
1069
|
+
links?: LinkItem[];
|
|
1070
|
+
/** Main content */
|
|
1071
|
+
children: React.ReactNode;
|
|
1072
|
+
/** Callback when Cancel/Back is clicked */
|
|
1073
|
+
onCancel?: () => void;
|
|
1074
|
+
/** Callback when Continue/Submit is clicked */
|
|
1075
|
+
onContinue?: () => void;
|
|
1076
|
+
/** Cancel button text */
|
|
1077
|
+
cancelText?: string;
|
|
1078
|
+
/** Continue button text */
|
|
1079
|
+
continueText?: string;
|
|
1080
|
+
/** Whether Continue button is disabled */
|
|
1081
|
+
continueDisabled?: boolean;
|
|
1082
|
+
/** Callback when app menu (hamburger) is clicked */
|
|
1083
|
+
onAppMenuClick?: () => void;
|
|
1084
|
+
/** Additional class name for the main content area */
|
|
1085
|
+
contentClassName?: string;
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* Canvas Design System - Multistep Sidebar Shell
|
|
1089
|
+
*
|
|
1090
|
+
* A layout for multi-step processes with a sidebar:
|
|
1091
|
+
* - Fixed header with logo
|
|
1092
|
+
* - Horizontal step tracker below header
|
|
1093
|
+
* - Step title and description
|
|
1094
|
+
* - Two-column layout:
|
|
1095
|
+
* - Left: Main content with navigation buttons
|
|
1096
|
+
* - Right: Sidebar (320px) with Info and Links cards
|
|
1097
|
+
*
|
|
1098
|
+
* @example
|
|
1099
|
+
* ```tsx
|
|
1100
|
+
* <MultistepSidebarShell
|
|
1101
|
+
* steps={defaultSteps}
|
|
1102
|
+
* currentStep={0}
|
|
1103
|
+
* onCancel={() => router.back()}
|
|
1104
|
+
* onContinue={() => setStep(step + 1)}
|
|
1105
|
+
* >
|
|
1106
|
+
* <ContentDropzone />
|
|
1107
|
+
* </MultistepSidebarShell>
|
|
1108
|
+
* ```
|
|
1109
|
+
*/
|
|
1110
|
+
declare function MultistepSidebarShell({ steps, currentStep, onStepClick, infoTitle, infoDescription, linksTitle, links, children, onCancel, onContinue, cancelText, continueText, continueDisabled, onAppMenuClick, contentClassName, }: MultistepSidebarShellProps): react_jsx_runtime.JSX.Element;
|
|
1111
|
+
|
|
1112
|
+
interface MultistepProgressBarStep {
|
|
1113
|
+
id: string;
|
|
1114
|
+
title: string;
|
|
1115
|
+
description?: string;
|
|
1116
|
+
}
|
|
1117
|
+
interface MultistepProgressBarShellProps {
|
|
1118
|
+
/** Flair banner title */
|
|
1119
|
+
bannerTitle?: string;
|
|
1120
|
+
/** Flair banner description */
|
|
1121
|
+
bannerDescription?: string;
|
|
1122
|
+
/** Page title shown below the flair banner */
|
|
1123
|
+
pageTitle?: string;
|
|
1124
|
+
/** Page description shown below the flair banner */
|
|
1125
|
+
pageDescription?: string;
|
|
1126
|
+
/** Array of step objects */
|
|
1127
|
+
steps?: MultistepProgressBarStep[];
|
|
1128
|
+
/** Current active step (0-indexed) */
|
|
1129
|
+
currentStep?: number;
|
|
1130
|
+
/** Main content */
|
|
1131
|
+
children: React.ReactNode;
|
|
1132
|
+
/** Callback when Cancel is clicked */
|
|
1133
|
+
onCancel?: () => void;
|
|
1134
|
+
/** Callback when Continue is clicked */
|
|
1135
|
+
onContinue?: () => void;
|
|
1136
|
+
/** Cancel button text */
|
|
1137
|
+
cancelText?: string;
|
|
1138
|
+
/** Continue button text */
|
|
1139
|
+
continueText?: string;
|
|
1140
|
+
/** Whether Continue button is disabled */
|
|
1141
|
+
continueDisabled?: boolean;
|
|
1142
|
+
/** Callback when app menu (hamburger) is clicked */
|
|
1143
|
+
onAppMenuClick?: () => void;
|
|
1144
|
+
/** Additional class name for the content area */
|
|
1145
|
+
contentClassName?: string;
|
|
1146
|
+
}
|
|
1147
|
+
/** Default steps for demo/placeholder purposes */
|
|
1148
|
+
declare const defaultProgressBarSteps: MultistepProgressBarStep[];
|
|
1149
|
+
/**
|
|
1150
|
+
* Canvas Design System - Multistep Progress Bar Shell
|
|
1151
|
+
*
|
|
1152
|
+
* A layout for multi-step processes/wizards featuring:
|
|
1153
|
+
* - Fixed header with logo
|
|
1154
|
+
* - Page title and description section
|
|
1155
|
+
* - Horizontal progress bar showing completion
|
|
1156
|
+
* - Step-specific title and description
|
|
1157
|
+
* - Centered content area (max-width 992px)
|
|
1158
|
+
* - Navigation buttons (Cancel, Continue)
|
|
1159
|
+
*
|
|
1160
|
+
* @example
|
|
1161
|
+
* ```tsx
|
|
1162
|
+
* <MultistepProgressBarShell
|
|
1163
|
+
* pageTitle="Page title"
|
|
1164
|
+
* pageDescription="Description"
|
|
1165
|
+
* steps={[
|
|
1166
|
+
* { id: "step1", title: "Step 1", description: "First step" },
|
|
1167
|
+
* { id: "step2", title: "Step 2", description: "Second step" },
|
|
1168
|
+
* ]}
|
|
1169
|
+
* currentStep={0}
|
|
1170
|
+
* onCancel={() => router.back()}
|
|
1171
|
+
* onContinue={() => setStep(step + 1)}
|
|
1172
|
+
* >
|
|
1173
|
+
* <ContentDropzone />
|
|
1174
|
+
* </MultistepProgressBarShell>
|
|
1175
|
+
* ```
|
|
1176
|
+
*/
|
|
1177
|
+
declare function MultistepProgressBarShell({ bannerTitle, bannerDescription, pageTitle, pageDescription, steps, currentStep, children, onCancel, onContinue, cancelText, continueText, continueDisabled, onAppMenuClick, contentClassName, }: MultistepProgressBarShellProps): react_jsx_runtime.JSX.Element;
|
|
1178
|
+
|
|
1179
|
+
interface VerticalMultistepShellProps {
|
|
1180
|
+
/** Array of step objects */
|
|
1181
|
+
steps?: Step[];
|
|
1182
|
+
/** Current active step (0-indexed) */
|
|
1183
|
+
currentStep?: number;
|
|
1184
|
+
/** Callback when a step is clicked */
|
|
1185
|
+
onStepClick?: (stepIndex: number) => void;
|
|
1186
|
+
/** Section title for the step tracker (e.g., "REGISTRATION") */
|
|
1187
|
+
sectionTitle?: string;
|
|
1188
|
+
/** Flair banner title */
|
|
1189
|
+
bannerTitle?: string;
|
|
1190
|
+
/** Flair banner description */
|
|
1191
|
+
bannerDescription?: string;
|
|
1192
|
+
/** Page title */
|
|
1193
|
+
pageTitle?: string;
|
|
1194
|
+
/** Page description */
|
|
1195
|
+
pageDescription?: string;
|
|
1196
|
+
/** Main content */
|
|
1197
|
+
children: React.ReactNode;
|
|
1198
|
+
/** Callback when Cancel/Back is clicked */
|
|
1199
|
+
onCancel?: () => void;
|
|
1200
|
+
/** Callback when Continue/Submit is clicked */
|
|
1201
|
+
onContinue?: () => void;
|
|
1202
|
+
/** Cancel button text */
|
|
1203
|
+
cancelText?: string;
|
|
1204
|
+
/** Continue button text */
|
|
1205
|
+
continueText?: string;
|
|
1206
|
+
/** Whether Continue button is disabled */
|
|
1207
|
+
continueDisabled?: boolean;
|
|
1208
|
+
/** Callback when app menu (hamburger) is clicked */
|
|
1209
|
+
onAppMenuClick?: () => void;
|
|
1210
|
+
/** Additional class name for the content area */
|
|
1211
|
+
contentClassName?: string;
|
|
1212
|
+
}
|
|
1213
|
+
/**
|
|
1214
|
+
* Canvas Design System - Vertical Multistep Shell
|
|
1215
|
+
*
|
|
1216
|
+
* A layout for multi-step processes with vertical step tracker:
|
|
1217
|
+
*
|
|
1218
|
+
* **Desktop**: Two-column layout
|
|
1219
|
+
* - Left: Sidebar card (320px) with vertical step tracker
|
|
1220
|
+
* - Right: Content area with step title, description, content, and navigation
|
|
1221
|
+
*
|
|
1222
|
+
* **Mobile**: Stacked layout
|
|
1223
|
+
* - Header with hamburger menu
|
|
1224
|
+
* - Page title and description
|
|
1225
|
+
* - Vertical step list (no card)
|
|
1226
|
+
* - Content area with navigation
|
|
1227
|
+
*
|
|
1228
|
+
* @example
|
|
1229
|
+
* ```tsx
|
|
1230
|
+
* <VerticalMultistepShell
|
|
1231
|
+
* steps={defaultVerticalSteps}
|
|
1232
|
+
* currentStep={0}
|
|
1233
|
+
* sectionTitle="REGISTRATION"
|
|
1234
|
+
* onCancel={() => router.back()}
|
|
1235
|
+
* onContinue={() => setStep(step + 1)}
|
|
1236
|
+
* >
|
|
1237
|
+
* <ContentDropzone />
|
|
1238
|
+
* </VerticalMultistepShell>
|
|
1239
|
+
* ```
|
|
1240
|
+
*/
|
|
1241
|
+
declare function VerticalMultistepShell({ steps, currentStep, onStepClick, sectionTitle, bannerTitle, bannerDescription, pageTitle, pageDescription, children, onCancel, onContinue, cancelText, continueText, continueDisabled, onAppMenuClick, contentClassName, }: VerticalMultistepShellProps): react_jsx_runtime.JSX.Element;
|
|
1242
|
+
|
|
1243
|
+
type AccountTab = "profile" | "security" | "payments" | "notifications";
|
|
1244
|
+
interface AccountTabConfig {
|
|
1245
|
+
id: AccountTab;
|
|
1246
|
+
label: string;
|
|
1247
|
+
icon: LucideIcon;
|
|
1248
|
+
}
|
|
1249
|
+
declare const accountTabs: AccountTabConfig[];
|
|
1250
|
+
interface AccountSettingsShellProps {
|
|
1251
|
+
/** Currently active tab */
|
|
1252
|
+
activeTab?: AccountTab;
|
|
1253
|
+
/** Callback when tab changes */
|
|
1254
|
+
onTabChange?: (tab: AccountTab) => void;
|
|
1255
|
+
/** Main content - renders based on active tab */
|
|
1256
|
+
children: React.ReactNode;
|
|
1257
|
+
/** Page title */
|
|
1258
|
+
pageTitle?: string;
|
|
1259
|
+
}
|
|
1260
|
+
/**
|
|
1261
|
+
* Canvas Design System - Account Settings Shell
|
|
1262
|
+
*
|
|
1263
|
+
* A layout for account/settings pages with:
|
|
1264
|
+
* - Fixed header with logo (no sidebar)
|
|
1265
|
+
* - Page title section with bottom border
|
|
1266
|
+
* - Two-column layout: sidebar navigation (320px) + content area
|
|
1267
|
+
* - Mobile responsive: sidebar stacks above content
|
|
1268
|
+
*
|
|
1269
|
+
* @example
|
|
1270
|
+
* ```tsx
|
|
1271
|
+
* <AccountSettingsShell
|
|
1272
|
+
* activeTab={activeTab}
|
|
1273
|
+
* onTabChange={setActiveTab}
|
|
1274
|
+
* >
|
|
1275
|
+
* {activeTab === "profile" && <ProfileContent />}
|
|
1276
|
+
* {activeTab === "security" && <SecurityContent />}
|
|
1277
|
+
* </AccountSettingsShell>
|
|
1278
|
+
* ```
|
|
1279
|
+
*/
|
|
1280
|
+
declare function AccountSettingsShell({ activeTab: controlledActiveTab, onTabChange, children, pageTitle, }: AccountSettingsShellProps): react_jsx_runtime.JSX.Element;
|
|
1281
|
+
|
|
1282
|
+
type ProjectContextTab = "scope" | "personas" | "screens" | "prompts";
|
|
1283
|
+
interface ProjectContextShellProps {
|
|
1284
|
+
children: ReactNode;
|
|
1285
|
+
activeTab: ProjectContextTab;
|
|
1286
|
+
onTabChange: (tab: ProjectContextTab) => void;
|
|
1287
|
+
}
|
|
1288
|
+
declare function ProjectContextShell({ children, activeTab, onTabChange, }: ProjectContextShellProps): react_jsx_runtime.JSX.Element;
|
|
1289
|
+
|
|
1290
|
+
interface ChatBubbleMessage {
|
|
1291
|
+
id: string;
|
|
1292
|
+
content: string;
|
|
1293
|
+
timestamp: string;
|
|
1294
|
+
isSent: boolean;
|
|
1295
|
+
senderName?: string;
|
|
1296
|
+
senderAvatar?: string;
|
|
1297
|
+
}
|
|
1298
|
+
interface ChatBubbleProps {
|
|
1299
|
+
message: ChatBubbleMessage;
|
|
1300
|
+
}
|
|
1301
|
+
declare function ChatBubble({ message }: ChatBubbleProps): react_jsx_runtime.JSX.Element;
|
|
1302
|
+
interface ChatDateSeparatorProps {
|
|
1303
|
+
date: string;
|
|
1304
|
+
}
|
|
1305
|
+
declare function ChatDateSeparator({ date }: ChatDateSeparatorProps): react_jsx_runtime.JSX.Element;
|
|
1306
|
+
interface AttachmentPill {
|
|
1307
|
+
id: string;
|
|
1308
|
+
name: string;
|
|
1309
|
+
type: "image" | "file";
|
|
1310
|
+
url?: string;
|
|
1311
|
+
}
|
|
1312
|
+
interface MessengerInputProps {
|
|
1313
|
+
attachments?: AttachmentPill[];
|
|
1314
|
+
onRemoveAttachment?: (id: string) => void;
|
|
1315
|
+
onSend?: () => void;
|
|
1316
|
+
}
|
|
1317
|
+
declare function MessengerInput({ attachments, onRemoveAttachment, onSend, }: MessengerInputProps): react_jsx_runtime.JSX.Element;
|
|
1318
|
+
declare const ChatInput: typeof MessengerInput;
|
|
1319
|
+
interface ChatMessageListProps {
|
|
1320
|
+
messages?: ChatBubbleMessage[];
|
|
1321
|
+
className?: string;
|
|
1322
|
+
}
|
|
1323
|
+
declare function ChatMessageList({ messages, className }: ChatMessageListProps): react_jsx_runtime.JSX.Element;
|
|
1324
|
+
|
|
1325
|
+
interface MessengerSidebarProps {
|
|
1326
|
+
selectedThreadId?: string;
|
|
1327
|
+
onSelectThread?: (threadId: string) => void;
|
|
1328
|
+
className?: string;
|
|
1329
|
+
}
|
|
1330
|
+
declare function MessengerSidebar({ selectedThreadId, onSelectThread, className, }: MessengerSidebarProps): react_jsx_runtime.JSX.Element;
|
|
1331
|
+
|
|
1332
|
+
interface ChatThread {
|
|
1333
|
+
id: string;
|
|
1334
|
+
name: string;
|
|
1335
|
+
avatarUrl?: string;
|
|
1336
|
+
preview: string;
|
|
1337
|
+
unreadCount?: number;
|
|
1338
|
+
}
|
|
1339
|
+
interface ChatMessageData {
|
|
1340
|
+
id: string;
|
|
1341
|
+
senderName: string;
|
|
1342
|
+
senderAvatar?: string;
|
|
1343
|
+
content: string;
|
|
1344
|
+
timestamp: string;
|
|
1345
|
+
}
|
|
1346
|
+
interface BottomInputChatWidgetProps {
|
|
1347
|
+
variant?: "threads" | "conversation";
|
|
1348
|
+
title?: string;
|
|
1349
|
+
threads?: ChatThread[];
|
|
1350
|
+
messages?: ChatMessageData[];
|
|
1351
|
+
conversationName?: string;
|
|
1352
|
+
onThreadClick?: (threadId: string) => void;
|
|
1353
|
+
onBackClick?: () => void;
|
|
1354
|
+
onSend?: (message: string) => void;
|
|
1355
|
+
className?: string;
|
|
1356
|
+
}
|
|
1357
|
+
declare function BottomInputChatWidget({ variant, title, threads, messages, conversationName, onThreadClick, onBackClick, onSend, className, }: BottomInputChatWidgetProps): react_jsx_runtime.JSX.Element;
|
|
1358
|
+
|
|
1359
|
+
interface ContentDropzoneProps {
|
|
1360
|
+
/** Height of the dropzone (only applies when empty) */
|
|
1361
|
+
height?: string;
|
|
1362
|
+
/** Additional class names */
|
|
1363
|
+
className?: string;
|
|
1364
|
+
/** Content elements */
|
|
1365
|
+
children?: ReactNode;
|
|
1366
|
+
}
|
|
1367
|
+
/**
|
|
1368
|
+
* Canvas Design System - Content Dropzone
|
|
1369
|
+
*
|
|
1370
|
+
* A placeholder component representing where content blocks would be inserted.
|
|
1371
|
+
* When empty, shows a dashed border placeholder.
|
|
1372
|
+
* When children are added, becomes a flex column with 40px gap spacing.
|
|
1373
|
+
*/
|
|
1374
|
+
declare function ContentDropzone({ height, className, children, }: ContentDropzoneProps): react_jsx_runtime.JSX.Element;
|
|
1375
|
+
|
|
1376
|
+
interface FlairBannerProps {
|
|
1377
|
+
/** Large title text */
|
|
1378
|
+
title?: string;
|
|
1379
|
+
/** Additional class names */
|
|
1380
|
+
className?: string;
|
|
1381
|
+
/** Optional background image URL */
|
|
1382
|
+
backgroundImage?: string;
|
|
1383
|
+
/** Opacity of the flair color overlay when using background image (0-1, default 0.7) */
|
|
1384
|
+
overlayOpacity?: number;
|
|
1385
|
+
}
|
|
1386
|
+
/**
|
|
1387
|
+
* Canvas Design System - Flair Banner Component
|
|
1388
|
+
*
|
|
1389
|
+
* A hero banner with centered title. Supports solid flair color background
|
|
1390
|
+
* or an image background with a semi-transparent flair color overlay.
|
|
1391
|
+
* Typically used at the top of standard pages below the header.
|
|
1392
|
+
*
|
|
1393
|
+
* @example
|
|
1394
|
+
* ```tsx
|
|
1395
|
+
* // Solid color background (default)
|
|
1396
|
+
* <FlairBanner title="Large title" />
|
|
1397
|
+
*
|
|
1398
|
+
* // Image background with flair overlay
|
|
1399
|
+
* <FlairBanner
|
|
1400
|
+
* title="Large title"
|
|
1401
|
+
* backgroundImage="/brand-assets/bg.jpg"
|
|
1402
|
+
* overlayOpacity={0.6}
|
|
1403
|
+
* />
|
|
1404
|
+
* ```
|
|
1405
|
+
*/
|
|
1406
|
+
declare function FlairBanner({ title, className, backgroundImage, overlayOpacity, }: FlairBannerProps): react_jsx_runtime.JSX.Element;
|
|
1407
|
+
|
|
1408
|
+
interface GradientBannerProps {
|
|
1409
|
+
/** Height of the banner */
|
|
1410
|
+
height?: string;
|
|
1411
|
+
/** Additional class names */
|
|
1412
|
+
className?: string;
|
|
1413
|
+
/** Children to render inside the banner */
|
|
1414
|
+
children?: React.ReactNode;
|
|
1415
|
+
}
|
|
1416
|
+
/**
|
|
1417
|
+
* Canvas Design System - Gradient Banner Component
|
|
1418
|
+
*
|
|
1419
|
+
* A dynamic gradient banner that generates analogous colors
|
|
1420
|
+
* based on the primary theme color. Updates live when the
|
|
1421
|
+
* primary color changes.
|
|
1422
|
+
*/
|
|
1423
|
+
declare function GradientBanner({ height, className, children, }: GradientBannerProps): react_jsx_runtime.JSX.Element;
|
|
1424
|
+
|
|
1425
|
+
interface LoginBrandingPanelProps {
|
|
1426
|
+
/** Background image URL */
|
|
1427
|
+
backgroundImage?: string;
|
|
1428
|
+
/** Title text */
|
|
1429
|
+
title?: string;
|
|
1430
|
+
/** Description text */
|
|
1431
|
+
description?: string;
|
|
1432
|
+
/** Opacity of the flair color overlay (0-1, default 0.7) */
|
|
1433
|
+
overlayOpacity?: number;
|
|
1434
|
+
/** Additional class names */
|
|
1435
|
+
className?: string;
|
|
1436
|
+
}
|
|
1437
|
+
/**
|
|
1438
|
+
* Canvas Design System - Login Branding Panel Component
|
|
1439
|
+
*
|
|
1440
|
+
* A right-side branding panel for login/signup pages featuring:
|
|
1441
|
+
* - Full-height background image with semi-transparent flair color overlay
|
|
1442
|
+
* - Title and description text at the bottom
|
|
1443
|
+
*
|
|
1444
|
+
* The overlay uses the flair background CSS variable for live theming.
|
|
1445
|
+
*/
|
|
1446
|
+
declare function LoginBrandingPanel({ backgroundImage, title, description, overlayOpacity, className, }: LoginBrandingPanelProps): react_jsx_runtime.JSX.Element;
|
|
1447
|
+
|
|
1448
|
+
interface PageHeaderSectionProps {
|
|
1449
|
+
/** Page title */
|
|
1450
|
+
title?: string;
|
|
1451
|
+
/** Page description */
|
|
1452
|
+
description?: string;
|
|
1453
|
+
/** Array of tab items */
|
|
1454
|
+
tabs?: LineTab[];
|
|
1455
|
+
/** ID of the currently active tab */
|
|
1456
|
+
activeTab?: string;
|
|
1457
|
+
/** Callback when a tab is clicked */
|
|
1458
|
+
onTabChange?: (tabId: string) => void;
|
|
1459
|
+
/** Whether to show the tabs */
|
|
1460
|
+
showTabs?: boolean;
|
|
1461
|
+
/** Additional class names */
|
|
1462
|
+
className?: string;
|
|
1463
|
+
}
|
|
1464
|
+
/**
|
|
1465
|
+
* Canvas Design System - Page Header Section Component
|
|
1466
|
+
*
|
|
1467
|
+
* A section combining page title, description, and line tabs.
|
|
1468
|
+
* Centered with max-width constraint.
|
|
1469
|
+
*
|
|
1470
|
+
* @example
|
|
1471
|
+
* ```tsx
|
|
1472
|
+
* <PageHeaderSection
|
|
1473
|
+
* title="Page title"
|
|
1474
|
+
* description="Description"
|
|
1475
|
+
* tabs={[
|
|
1476
|
+
* { id: "tab1", label: "Tab 1" },
|
|
1477
|
+
* { id: "tab2", label: "Tab 2" },
|
|
1478
|
+
* ]}
|
|
1479
|
+
* />
|
|
1480
|
+
* ```
|
|
1481
|
+
*/
|
|
1482
|
+
declare function PageHeaderSection({ title, description, tabs, activeTab, onTabChange, showTabs, className, }: PageHeaderSectionProps): react_jsx_runtime.JSX.Element;
|
|
1483
|
+
|
|
1484
|
+
interface EmptyStateProps {
|
|
1485
|
+
icon: string;
|
|
1486
|
+
title: string;
|
|
1487
|
+
description?: string;
|
|
1488
|
+
className?: string;
|
|
1489
|
+
}
|
|
1490
|
+
declare function EmptyState({ icon, title, description, className }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
1491
|
+
|
|
1492
|
+
interface MenuSectionProps {
|
|
1493
|
+
/** Array of menu items */
|
|
1494
|
+
items: Array<{
|
|
1495
|
+
id: string;
|
|
1496
|
+
label: string;
|
|
1497
|
+
children?: React.ReactNode;
|
|
1498
|
+
defaultExpanded?: boolean;
|
|
1499
|
+
}>;
|
|
1500
|
+
/** Additional class names */
|
|
1501
|
+
className?: string;
|
|
1502
|
+
}
|
|
1503
|
+
/**
|
|
1504
|
+
* Canvas Design System - Menu Section Component
|
|
1505
|
+
*
|
|
1506
|
+
* A group of expandable menu items with border separators.
|
|
1507
|
+
*
|
|
1508
|
+
* @example
|
|
1509
|
+
* ```tsx
|
|
1510
|
+
* <MenuSection
|
|
1511
|
+
* items={[
|
|
1512
|
+
* { id: "1", label: "Menu tab" },
|
|
1513
|
+
* { id: "2", label: "Another menu tab" },
|
|
1514
|
+
* ]}
|
|
1515
|
+
* />
|
|
1516
|
+
* ```
|
|
1517
|
+
*/
|
|
1518
|
+
declare function MenuSection({ items, className, }: MenuSectionProps): react_jsx_runtime.JSX.Element;
|
|
1519
|
+
|
|
1520
|
+
type TabIconType = "briefcase" | "star" | "user";
|
|
1521
|
+
interface PillTab {
|
|
1522
|
+
id: string;
|
|
1523
|
+
label: string;
|
|
1524
|
+
icon?: TabIconType;
|
|
1525
|
+
}
|
|
1526
|
+
interface PillTabsProps {
|
|
1527
|
+
tabs: PillTab[];
|
|
1528
|
+
activeTab?: string;
|
|
1529
|
+
onTabChange?: (tabId: string) => void;
|
|
1530
|
+
className?: string;
|
|
1531
|
+
}
|
|
1532
|
+
/**
|
|
1533
|
+
* Canvas Design System - Pill Tabs Component
|
|
1534
|
+
*
|
|
1535
|
+
* A horizontal tab navigation with pill-shaped tabs.
|
|
1536
|
+
* Each tab can have an optional icon.
|
|
1537
|
+
*/
|
|
1538
|
+
declare function PillTabs({ tabs, activeTab, onTabChange, className, }: PillTabsProps): react_jsx_runtime.JSX.Element;
|
|
1539
|
+
|
|
1540
|
+
interface SearchBarProps {
|
|
1541
|
+
/** Placeholder text for the input */
|
|
1542
|
+
placeholder?: string;
|
|
1543
|
+
/** Current search value */
|
|
1544
|
+
value?: string;
|
|
1545
|
+
/** Callback when the input value changes */
|
|
1546
|
+
onChange?: (value: string) => void;
|
|
1547
|
+
/** Callback when search is triggered (button click or Enter key) */
|
|
1548
|
+
onSearch?: () => void;
|
|
1549
|
+
/** Search button label */
|
|
1550
|
+
buttonLabel?: string;
|
|
1551
|
+
/** Additional class names */
|
|
1552
|
+
className?: string;
|
|
1553
|
+
}
|
|
1554
|
+
/**
|
|
1555
|
+
* Canvas Design System - Search Bar Component
|
|
1556
|
+
*
|
|
1557
|
+
* A search input with a search icon on the left and a conditional search button.
|
|
1558
|
+
* The button appears only when the input has content.
|
|
1559
|
+
* Uses standard input sizing variables for consistent styling.
|
|
1560
|
+
*
|
|
1561
|
+
* @example
|
|
1562
|
+
* ```tsx
|
|
1563
|
+
* <SearchBar
|
|
1564
|
+
* placeholder="Search"
|
|
1565
|
+
* value={searchValue}
|
|
1566
|
+
* onChange={setSearchValue}
|
|
1567
|
+
* onSearch={handleSearch}
|
|
1568
|
+
* />
|
|
1569
|
+
* ```
|
|
1570
|
+
*/
|
|
1571
|
+
declare function SearchBar({ placeholder, value, onChange, onSearch, buttonLabel, className, }: SearchBarProps): react_jsx_runtime.JSX.Element;
|
|
1572
|
+
|
|
1573
|
+
interface SearchSidebarState {
|
|
1574
|
+
specials: string[];
|
|
1575
|
+
languages: string[];
|
|
1576
|
+
priceMin: string;
|
|
1577
|
+
priceMax: string;
|
|
1578
|
+
starRating: string;
|
|
1579
|
+
distance: number[];
|
|
1580
|
+
membershipDeals: boolean;
|
|
1581
|
+
}
|
|
1582
|
+
interface SearchSidebarProps {
|
|
1583
|
+
className?: string;
|
|
1584
|
+
state: SearchSidebarState;
|
|
1585
|
+
onStateChange: (state: SearchSidebarState) => void;
|
|
1586
|
+
}
|
|
1587
|
+
declare function SearchSidebar({ className, state, onStateChange, }: SearchSidebarProps): react_jsx_runtime.JSX.Element;
|
|
1588
|
+
|
|
1589
|
+
interface TableColumn {
|
|
1590
|
+
id: string;
|
|
1591
|
+
label: string;
|
|
1592
|
+
/** Width class or style for the column */
|
|
1593
|
+
width?: string;
|
|
1594
|
+
}
|
|
1595
|
+
interface TableRow {
|
|
1596
|
+
id: string;
|
|
1597
|
+
name: string;
|
|
1598
|
+
avatarUrl?: string;
|
|
1599
|
+
email: string;
|
|
1600
|
+
title: string;
|
|
1601
|
+
role: string;
|
|
1602
|
+
}
|
|
1603
|
+
interface SortOption$b {
|
|
1604
|
+
id: string;
|
|
1605
|
+
label: string;
|
|
1606
|
+
}
|
|
1607
|
+
interface FilterOption$b {
|
|
1608
|
+
id: string;
|
|
1609
|
+
label: string;
|
|
1610
|
+
}
|
|
1611
|
+
interface StandardDataTableProps {
|
|
1612
|
+
/** Table title */
|
|
1613
|
+
title?: string;
|
|
1614
|
+
/** Number of results to display */
|
|
1615
|
+
resultCount?: number;
|
|
1616
|
+
/** Custom result count text (overrides default "{count} results") */
|
|
1617
|
+
resultCountText?: string;
|
|
1618
|
+
/** Column definitions */
|
|
1619
|
+
columns?: TableColumn[];
|
|
1620
|
+
/** Table data rows */
|
|
1621
|
+
data?: TableRow[];
|
|
1622
|
+
/** Sort options for the sort dropdown */
|
|
1623
|
+
sortOptions?: SortOption$b[];
|
|
1624
|
+
/** Filter options for the filter dropdown */
|
|
1625
|
+
filterOptions?: FilterOption$b[];
|
|
1626
|
+
/** Primary action button text */
|
|
1627
|
+
actionButtonText?: string;
|
|
1628
|
+
/** Callback when add/action button is clicked */
|
|
1629
|
+
onAddNew?: () => void;
|
|
1630
|
+
/** Callback when sort value changes */
|
|
1631
|
+
onSort?: (value: string) => void;
|
|
1632
|
+
/** Callback when filter value changes */
|
|
1633
|
+
onFilter?: (value: string) => void;
|
|
1634
|
+
/** Callback when row action is clicked */
|
|
1635
|
+
onRowAction?: (action: string, row: TableRow) => void;
|
|
1636
|
+
/** Additional class names */
|
|
1637
|
+
className?: string;
|
|
1638
|
+
}
|
|
1639
|
+
/**
|
|
1640
|
+
* Canvas Design System - Standard Data Table Block
|
|
1641
|
+
*
|
|
1642
|
+
* A configurable data table with header section including title,
|
|
1643
|
+
* sort/filter dropdowns, and action button. Displays tabular data
|
|
1644
|
+
* with avatar support in the name column.
|
|
1645
|
+
*
|
|
1646
|
+
* @example
|
|
1647
|
+
* ```tsx
|
|
1648
|
+
* <StandardDataTable
|
|
1649
|
+
* title="Teammates"
|
|
1650
|
+
* data={[
|
|
1651
|
+
* { id: "1", name: "John", email: "john@example.com", title: "Engineer", role: "Admin" }
|
|
1652
|
+
* ]}
|
|
1653
|
+
* onAddNew={() => console.log("Add new")}
|
|
1654
|
+
* />
|
|
1655
|
+
* ```
|
|
1656
|
+
*/
|
|
1657
|
+
declare function StandardDataTable({ title, resultCount, resultCountText, columns, data, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onRowAction, className, }: StandardDataTableProps): react_jsx_runtime.JSX.Element;
|
|
1658
|
+
|
|
1659
|
+
type FixedColumnTableStatus = "pending" | "paid" | "overdue";
|
|
1660
|
+
interface FixedColumnTableRow {
|
|
1661
|
+
id: string;
|
|
1662
|
+
name: string;
|
|
1663
|
+
avatarUrl?: string;
|
|
1664
|
+
amount: string;
|
|
1665
|
+
status: FixedColumnTableStatus;
|
|
1666
|
+
logoUrl?: string;
|
|
1667
|
+
company: string;
|
|
1668
|
+
dateSent: string;
|
|
1669
|
+
}
|
|
1670
|
+
interface SortOption$a {
|
|
1671
|
+
id: string;
|
|
1672
|
+
label: string;
|
|
1673
|
+
}
|
|
1674
|
+
interface FilterOption$a {
|
|
1675
|
+
id: string;
|
|
1676
|
+
label: string;
|
|
1677
|
+
}
|
|
1678
|
+
interface FixedColumnDataTableProps {
|
|
1679
|
+
/** Table title */
|
|
1680
|
+
title?: string;
|
|
1681
|
+
/** Number of results to display */
|
|
1682
|
+
resultCount?: number;
|
|
1683
|
+
/** Custom result count text (overrides default "{count} results") */
|
|
1684
|
+
resultCountText?: string;
|
|
1685
|
+
/** Table data rows */
|
|
1686
|
+
data?: FixedColumnTableRow[];
|
|
1687
|
+
/** Sort options for the sort dropdown */
|
|
1688
|
+
sortOptions?: SortOption$a[];
|
|
1689
|
+
/** Filter options for the filter dropdown */
|
|
1690
|
+
filterOptions?: FilterOption$a[];
|
|
1691
|
+
/** Primary action button text */
|
|
1692
|
+
actionButtonText?: string;
|
|
1693
|
+
/** Callback when add/action button is clicked */
|
|
1694
|
+
onAddNew?: () => void;
|
|
1695
|
+
/** Callback when sort value changes */
|
|
1696
|
+
onSort?: (value: string) => void;
|
|
1697
|
+
/** Callback when filter value changes */
|
|
1698
|
+
onFilter?: (value: string) => void;
|
|
1699
|
+
/** Callback when row action is clicked */
|
|
1700
|
+
onRowAction?: (action: string, row: FixedColumnTableRow) => void;
|
|
1701
|
+
/** Additional class names */
|
|
1702
|
+
className?: string;
|
|
1703
|
+
}
|
|
1704
|
+
/**
|
|
1705
|
+
* Canvas Design System - Fixed Column Data Table Block
|
|
1706
|
+
*
|
|
1707
|
+
* A data table with a fixed first column (Name with avatar) that stays
|
|
1708
|
+
* visible during horizontal scrolling. Ideal for invoice-style tables
|
|
1709
|
+
* with many columns that need horizontal scrolling on smaller screens.
|
|
1710
|
+
*
|
|
1711
|
+
* @example
|
|
1712
|
+
* ```tsx
|
|
1713
|
+
* <FixedColumnDataTable
|
|
1714
|
+
* title="Invoices"
|
|
1715
|
+
* data={[
|
|
1716
|
+
* { id: "1", name: "John", amount: "$1,000", status: "paid", company: "Acme", dateSent: "1/1/2024" }
|
|
1717
|
+
* ]}
|
|
1718
|
+
* onAddNew={() => console.log("Add new")}
|
|
1719
|
+
* />
|
|
1720
|
+
* ```
|
|
1721
|
+
*/
|
|
1722
|
+
declare function FixedColumnDataTable({ title, resultCount, resultCountText, data, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onRowAction, className, }: FixedColumnDataTableProps): react_jsx_runtime.JSX.Element;
|
|
1723
|
+
|
|
1724
|
+
interface ChildRow {
|
|
1725
|
+
id: string;
|
|
1726
|
+
name: string;
|
|
1727
|
+
avatarUrl?: string;
|
|
1728
|
+
email: string;
|
|
1729
|
+
phone: string;
|
|
1730
|
+
}
|
|
1731
|
+
interface ParentRow {
|
|
1732
|
+
id: string;
|
|
1733
|
+
location: string;
|
|
1734
|
+
ftes: number;
|
|
1735
|
+
contractors: number;
|
|
1736
|
+
hrContact: {
|
|
1737
|
+
name: string;
|
|
1738
|
+
phone: string;
|
|
1739
|
+
};
|
|
1740
|
+
children: ChildRow[];
|
|
1741
|
+
}
|
|
1742
|
+
interface SortOption$9 {
|
|
1743
|
+
id: string;
|
|
1744
|
+
label: string;
|
|
1745
|
+
}
|
|
1746
|
+
interface FilterOption$9 {
|
|
1747
|
+
id: string;
|
|
1748
|
+
label: string;
|
|
1749
|
+
}
|
|
1750
|
+
interface NestedDataTableProps {
|
|
1751
|
+
/** Table title */
|
|
1752
|
+
title?: string;
|
|
1753
|
+
/** Number of results to display */
|
|
1754
|
+
resultCount?: number;
|
|
1755
|
+
/** Custom result count text (overrides default "{count} results") */
|
|
1756
|
+
resultCountText?: string;
|
|
1757
|
+
/** Table data rows */
|
|
1758
|
+
data?: ParentRow[];
|
|
1759
|
+
/** Sort options for the sort dropdown */
|
|
1760
|
+
sortOptions?: SortOption$9[];
|
|
1761
|
+
/** Filter options for the filter dropdown */
|
|
1762
|
+
filterOptions?: FilterOption$9[];
|
|
1763
|
+
/** Primary action button text */
|
|
1764
|
+
actionButtonText?: string;
|
|
1765
|
+
/** Callback when add/action button is clicked */
|
|
1766
|
+
onAddNew?: () => void;
|
|
1767
|
+
/** Callback when sort value changes */
|
|
1768
|
+
onSort?: (value: string) => void;
|
|
1769
|
+
/** Callback when filter value changes */
|
|
1770
|
+
onFilter?: (value: string) => void;
|
|
1771
|
+
/** Callback when parent row action is clicked */
|
|
1772
|
+
onRowAction?: (action: string, row: ParentRow) => void;
|
|
1773
|
+
/** Callback when child row action is clicked */
|
|
1774
|
+
onChildAction?: (action: string, child: ChildRow, parent: ParentRow) => void;
|
|
1775
|
+
/** Additional class names */
|
|
1776
|
+
className?: string;
|
|
1777
|
+
}
|
|
1778
|
+
/**
|
|
1779
|
+
* Canvas Design System - Nested Data Table Block
|
|
1780
|
+
*
|
|
1781
|
+
* An expandable data table with parent rows that reveal nested child tables.
|
|
1782
|
+
* Ideal for displaying hierarchical data like locations with employees,
|
|
1783
|
+
* departments with team members, or categories with items.
|
|
1784
|
+
*
|
|
1785
|
+
* @example
|
|
1786
|
+
* ```tsx
|
|
1787
|
+
* <NestedDataTable
|
|
1788
|
+
* title="FTEs & Contractors by Location"
|
|
1789
|
+
* data={locationData}
|
|
1790
|
+
* onAddNew={() => console.log("Add new")}
|
|
1791
|
+
* />
|
|
1792
|
+
* ```
|
|
1793
|
+
*/
|
|
1794
|
+
declare function NestedDataTable({ title, resultCount, resultCountText, data, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onRowAction, onChildAction, className, }: NestedDataTableProps): react_jsx_runtime.JSX.Element;
|
|
1795
|
+
|
|
1796
|
+
interface ReviewItem {
|
|
1797
|
+
id: string;
|
|
1798
|
+
name: string;
|
|
1799
|
+
avatarUrl?: string;
|
|
1800
|
+
rating: number;
|
|
1801
|
+
date: string;
|
|
1802
|
+
reviewText: string;
|
|
1803
|
+
}
|
|
1804
|
+
interface SortOption$8 {
|
|
1805
|
+
id: string;
|
|
1806
|
+
label: string;
|
|
1807
|
+
}
|
|
1808
|
+
interface FilterOption$8 {
|
|
1809
|
+
id: string;
|
|
1810
|
+
label: string;
|
|
1811
|
+
}
|
|
1812
|
+
interface ReviewsTableProps {
|
|
1813
|
+
/** Table title */
|
|
1814
|
+
title?: string;
|
|
1815
|
+
/** Number of reviews to display in subtitle */
|
|
1816
|
+
reviewCount?: number;
|
|
1817
|
+
/** Custom review count text (overrides default "{count} customer reviews") */
|
|
1818
|
+
reviewCountText?: string;
|
|
1819
|
+
/** Review data */
|
|
1820
|
+
reviews?: ReviewItem[];
|
|
1821
|
+
/** Sort options for the sort dropdown */
|
|
1822
|
+
sortOptions?: SortOption$8[];
|
|
1823
|
+
/** Filter options for the filter dropdown */
|
|
1824
|
+
filterOptions?: FilterOption$8[];
|
|
1825
|
+
/** Primary action button text */
|
|
1826
|
+
actionButtonText?: string;
|
|
1827
|
+
/** Callback when add/action button is clicked */
|
|
1828
|
+
onAddNew?: () => void;
|
|
1829
|
+
/** Callback when sort value changes */
|
|
1830
|
+
onSort?: (value: string) => void;
|
|
1831
|
+
/** Callback when filter value changes */
|
|
1832
|
+
onFilter?: (value: string) => void;
|
|
1833
|
+
/** Callback when "More" is clicked on a review */
|
|
1834
|
+
onReadMore?: (review: ReviewItem) => void;
|
|
1835
|
+
/** Additional class names */
|
|
1836
|
+
className?: string;
|
|
1837
|
+
}
|
|
1838
|
+
/**
|
|
1839
|
+
* Canvas Design System - Reviews Table Block
|
|
1840
|
+
*
|
|
1841
|
+
* A configurable reviews listing with header section including title,
|
|
1842
|
+
* sort/filter dropdowns, and action button. Displays review items
|
|
1843
|
+
* with avatar, star rating, date, and expandable text.
|
|
1844
|
+
*
|
|
1845
|
+
* @example
|
|
1846
|
+
* ```tsx
|
|
1847
|
+
* <ReviewsTable
|
|
1848
|
+
* title="Reviews"
|
|
1849
|
+
* reviews={[
|
|
1850
|
+
* { id: "1", name: "John Doe", rating: 5, date: "Jul 22, 2024", reviewText: "Great experience!" }
|
|
1851
|
+
* ]}
|
|
1852
|
+
* onAddNew={() => console.log("Add new")}
|
|
1853
|
+
* />
|
|
1854
|
+
* ```
|
|
1855
|
+
*/
|
|
1856
|
+
declare function ReviewsTable({ title, reviewCount, reviewCountText, reviews, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onReadMore, className, }: ReviewsTableProps): react_jsx_runtime.JSX.Element;
|
|
1857
|
+
|
|
1858
|
+
interface PostAuthor$2 {
|
|
1859
|
+
id: string;
|
|
1860
|
+
name: string;
|
|
1861
|
+
avatarUrl?: string;
|
|
1862
|
+
}
|
|
1863
|
+
interface PostComment {
|
|
1864
|
+
id: string;
|
|
1865
|
+
author: PostAuthor$2;
|
|
1866
|
+
content: string;
|
|
1867
|
+
timestamp: string;
|
|
1868
|
+
likes: number;
|
|
1869
|
+
isLiked?: boolean;
|
|
1870
|
+
replies?: PostComment[];
|
|
1871
|
+
}
|
|
1872
|
+
interface Post {
|
|
1873
|
+
id: string;
|
|
1874
|
+
author: PostAuthor$2;
|
|
1875
|
+
date: string;
|
|
1876
|
+
title: string;
|
|
1877
|
+
content: string;
|
|
1878
|
+
imageUrl?: string;
|
|
1879
|
+
upvotes: number;
|
|
1880
|
+
isUpvoted?: boolean;
|
|
1881
|
+
comments?: PostComment[];
|
|
1882
|
+
}
|
|
1883
|
+
interface SortOption$7 {
|
|
1884
|
+
id: string;
|
|
1885
|
+
label: string;
|
|
1886
|
+
}
|
|
1887
|
+
interface FilterOption$7 {
|
|
1888
|
+
id: string;
|
|
1889
|
+
label: string;
|
|
1890
|
+
}
|
|
1891
|
+
interface UpvotingPostsTableProps {
|
|
1892
|
+
/** Table title */
|
|
1893
|
+
title?: string;
|
|
1894
|
+
/** Subtitle text */
|
|
1895
|
+
subtitle?: string;
|
|
1896
|
+
/** Posts data */
|
|
1897
|
+
posts?: Post[];
|
|
1898
|
+
/** Current user for comment input avatars */
|
|
1899
|
+
currentUser?: PostAuthor$2;
|
|
1900
|
+
/** Sort options for the sort dropdown */
|
|
1901
|
+
sortOptions?: SortOption$7[];
|
|
1902
|
+
/** Filter options for the filter dropdown */
|
|
1903
|
+
filterOptions?: FilterOption$7[];
|
|
1904
|
+
/** Primary action button text */
|
|
1905
|
+
actionButtonText?: string;
|
|
1906
|
+
/** Callback when add/action button is clicked */
|
|
1907
|
+
onAddNew?: () => void;
|
|
1908
|
+
/** Callback when sort value changes */
|
|
1909
|
+
onSort?: (value: string) => void;
|
|
1910
|
+
/** Callback when filter value changes */
|
|
1911
|
+
onFilter?: (value: string) => void;
|
|
1912
|
+
/** Callback when upvote is clicked */
|
|
1913
|
+
onUpvote?: (postId: string) => void;
|
|
1914
|
+
/** Callback when comment is submitted */
|
|
1915
|
+
onComment?: (postId: string, content: string) => void;
|
|
1916
|
+
/** Callback when reply is submitted */
|
|
1917
|
+
onReply?: (postId: string, commentId: string, content: string) => void;
|
|
1918
|
+
/** Callback when like is clicked */
|
|
1919
|
+
onLike?: (postId: string, commentId: string) => void;
|
|
1920
|
+
/** Additional class names */
|
|
1921
|
+
className?: string;
|
|
1922
|
+
}
|
|
1923
|
+
/**
|
|
1924
|
+
* Canvas Design System - Upvoting Posts Table Block
|
|
1925
|
+
*
|
|
1926
|
+
* A social feed component with upvoting, comments, and nested replies.
|
|
1927
|
+
* Features header with sort/filter controls and action button.
|
|
1928
|
+
*
|
|
1929
|
+
* @example
|
|
1930
|
+
* ```tsx
|
|
1931
|
+
* <UpvotingPostsTable
|
|
1932
|
+
* title="My posts"
|
|
1933
|
+
* subtitle="In the past year"
|
|
1934
|
+
* posts={[...]}
|
|
1935
|
+
* onUpvote={(postId) => console.log("Upvoted", postId)}
|
|
1936
|
+
* />
|
|
1937
|
+
* ```
|
|
1938
|
+
*/
|
|
1939
|
+
declare function UpvotingPostsTable({ title, subtitle, posts, currentUser, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onUpvote, onComment, onReply, onLike, className, }: UpvotingPostsTableProps): react_jsx_runtime.JSX.Element;
|
|
1940
|
+
|
|
1941
|
+
interface CommentAuthor {
|
|
1942
|
+
id: string;
|
|
1943
|
+
name: string;
|
|
1944
|
+
avatarUrl?: string;
|
|
1945
|
+
}
|
|
1946
|
+
interface Comment {
|
|
1947
|
+
id: string;
|
|
1948
|
+
author: CommentAuthor;
|
|
1949
|
+
content: string;
|
|
1950
|
+
timestamp: string;
|
|
1951
|
+
likes: number;
|
|
1952
|
+
isLiked?: boolean;
|
|
1953
|
+
replies?: Comment[];
|
|
1954
|
+
}
|
|
1955
|
+
interface NestedCommentsTableProps {
|
|
1956
|
+
/** Section title */
|
|
1957
|
+
title?: string;
|
|
1958
|
+
/** Section subtitle */
|
|
1959
|
+
subtitle?: string;
|
|
1960
|
+
/** Comments data */
|
|
1961
|
+
comments?: Comment[];
|
|
1962
|
+
/** Current user for comment input avatars */
|
|
1963
|
+
currentUser?: CommentAuthor;
|
|
1964
|
+
/** Callback when main comment is submitted */
|
|
1965
|
+
onComment?: (content: string) => void;
|
|
1966
|
+
/** Callback when reply is submitted */
|
|
1967
|
+
onReply?: (commentId: string, content: string) => void;
|
|
1968
|
+
/** Callback when like is clicked */
|
|
1969
|
+
onLike?: (commentId: string) => void;
|
|
1970
|
+
/** Additional class names */
|
|
1971
|
+
className?: string;
|
|
1972
|
+
}
|
|
1973
|
+
/**
|
|
1974
|
+
* Canvas Design System - Nested Comments Table Block
|
|
1975
|
+
*
|
|
1976
|
+
* A threaded discussion component with nested comments, reply/like actions,
|
|
1977
|
+
* and collapsible threads. Perfect for discussion sections, comment threads,
|
|
1978
|
+
* or messaging interfaces.
|
|
1979
|
+
*
|
|
1980
|
+
* @example
|
|
1981
|
+
* ```tsx
|
|
1982
|
+
* <NestedCommentsTable
|
|
1983
|
+
* title="My discussions"
|
|
1984
|
+
* subtitle="In the past year"
|
|
1985
|
+
* comments={[...]}
|
|
1986
|
+
* onComment={(content) => console.log("Comment:", content)}
|
|
1987
|
+
* />
|
|
1988
|
+
* ```
|
|
1989
|
+
*/
|
|
1990
|
+
declare function NestedCommentsTable({ title, subtitle, comments, currentUser, onComment, onReply, onLike, className, }: NestedCommentsTableProps): react_jsx_runtime.JSX.Element;
|
|
1991
|
+
|
|
1992
|
+
interface FAQItem {
|
|
1993
|
+
id: string;
|
|
1994
|
+
question: string;
|
|
1995
|
+
answer: string;
|
|
1996
|
+
}
|
|
1997
|
+
interface FaqsTableProps {
|
|
1998
|
+
/** Table title */
|
|
1999
|
+
title?: string;
|
|
2000
|
+
/** FAQ items to display */
|
|
2001
|
+
items?: FAQItem[];
|
|
2002
|
+
/** ID of the item that should be expanded by default */
|
|
2003
|
+
defaultExpandedId?: string;
|
|
2004
|
+
/** Additional class names */
|
|
2005
|
+
className?: string;
|
|
2006
|
+
}
|
|
2007
|
+
/**
|
|
2008
|
+
* Canvas Design System - FAQs Table Block
|
|
2009
|
+
*
|
|
2010
|
+
* An expandable FAQ list with plus/minus toggle icons.
|
|
2011
|
+
* Displays one item expanded at a time (accordion behavior).
|
|
2012
|
+
*
|
|
2013
|
+
* @example
|
|
2014
|
+
* ```tsx
|
|
2015
|
+
* <FaqsTable
|
|
2016
|
+
* title="Common questions"
|
|
2017
|
+
* items={[
|
|
2018
|
+
* { id: "1", question: "What is Canvas?", answer: "..." }
|
|
2019
|
+
* ]}
|
|
2020
|
+
* />
|
|
2021
|
+
* ```
|
|
2022
|
+
*/
|
|
2023
|
+
declare function FaqsTable({ title, items, defaultExpandedId, className, }: FaqsTableProps): react_jsx_runtime.JSX.Element;
|
|
2024
|
+
|
|
2025
|
+
interface ProfileStat {
|
|
2026
|
+
value: string;
|
|
2027
|
+
label: string;
|
|
2028
|
+
}
|
|
2029
|
+
interface ProfileTag {
|
|
2030
|
+
label: string;
|
|
2031
|
+
}
|
|
2032
|
+
interface SocialLink {
|
|
2033
|
+
type: "website" | "facebook" | "twitter" | "linkedin" | "instagram";
|
|
2034
|
+
label: string;
|
|
2035
|
+
href?: string;
|
|
2036
|
+
}
|
|
2037
|
+
interface ProfileCardProps {
|
|
2038
|
+
/** Profile avatar image URL */
|
|
2039
|
+
avatarUrl?: string;
|
|
2040
|
+
/** Avatar fallback initials */
|
|
2041
|
+
avatarFallback?: string;
|
|
2042
|
+
/** Whether to show online status indicator */
|
|
2043
|
+
showStatus?: boolean;
|
|
2044
|
+
/** User's display name */
|
|
2045
|
+
name: string;
|
|
2046
|
+
/** User's username (with @) */
|
|
2047
|
+
username: string;
|
|
2048
|
+
/** Star rating (0-5) */
|
|
2049
|
+
rating?: number;
|
|
2050
|
+
/** Location text */
|
|
2051
|
+
location?: string;
|
|
2052
|
+
/** Join date text */
|
|
2053
|
+
joinDate?: string;
|
|
2054
|
+
/** Stats to display */
|
|
2055
|
+
stats?: ProfileStat[];
|
|
2056
|
+
/** Bio text */
|
|
2057
|
+
bio?: string;
|
|
2058
|
+
/** Tags/skills */
|
|
2059
|
+
tags?: ProfileTag[];
|
|
2060
|
+
/** Social links */
|
|
2061
|
+
socialLinks?: SocialLink[];
|
|
2062
|
+
/** Additional class names */
|
|
2063
|
+
className?: string;
|
|
2064
|
+
/** Show menu button */
|
|
2065
|
+
showMenu?: boolean;
|
|
2066
|
+
/** Menu click handler */
|
|
2067
|
+
onMenuClick?: () => void;
|
|
2068
|
+
}
|
|
2069
|
+
/**
|
|
2070
|
+
* Canvas Design System - Profile Card Component
|
|
2071
|
+
*
|
|
2072
|
+
* A centered profile card with avatar overlapping banner, stats, tags, and social links.
|
|
2073
|
+
* Uses CSS variables for theming to support live preview.
|
|
2074
|
+
*/
|
|
2075
|
+
declare function ProfileCard({ avatarUrl, avatarFallback, showStatus, name, username, rating, location, joinDate, stats, bio, tags, socialLinks, className, showMenu, onMenuClick, }: ProfileCardProps): react_jsx_runtime.JSX.Element;
|
|
2076
|
+
|
|
2077
|
+
interface InfoRow {
|
|
2078
|
+
icon: "location" | "education" | "sessions" | "earnings";
|
|
2079
|
+
label: string;
|
|
2080
|
+
value: string;
|
|
2081
|
+
}
|
|
2082
|
+
interface SidebarProfileCardProps {
|
|
2083
|
+
/** Profile avatar image URL */
|
|
2084
|
+
avatarUrl?: string;
|
|
2085
|
+
/** Avatar fallback initials */
|
|
2086
|
+
avatarFallback?: string;
|
|
2087
|
+
/** Whether to show online status indicator */
|
|
2088
|
+
showStatus?: boolean;
|
|
2089
|
+
/** User's display name */
|
|
2090
|
+
name: string;
|
|
2091
|
+
/** User's role/title */
|
|
2092
|
+
role?: string;
|
|
2093
|
+
/** Star rating value */
|
|
2094
|
+
rating?: number;
|
|
2095
|
+
/** Number of reviews */
|
|
2096
|
+
reviewCount?: string;
|
|
2097
|
+
/** Certification text */
|
|
2098
|
+
certification?: string;
|
|
2099
|
+
/** Info rows (location, education, sessions, earnings) */
|
|
2100
|
+
infoRows?: InfoRow[];
|
|
2101
|
+
/** Contact button click handler */
|
|
2102
|
+
onContactClick?: () => void;
|
|
2103
|
+
/** Hire button click handler */
|
|
2104
|
+
onHireClick?: () => void;
|
|
2105
|
+
/** Additional class names */
|
|
2106
|
+
className?: string;
|
|
2107
|
+
}
|
|
2108
|
+
/**
|
|
2109
|
+
* Canvas Design System - Sidebar Profile Card Component
|
|
2110
|
+
*
|
|
2111
|
+
* A profile card designed for sidebar placement with avatar,
|
|
2112
|
+
* name, rating, action buttons, info rows, and social icons.
|
|
2113
|
+
*/
|
|
2114
|
+
declare function SidebarProfileCard({ avatarUrl, avatarFallback, showStatus, name, role, rating, reviewCount, certification, infoRows, onContactClick, onHireClick, className, }: SidebarProfileCardProps): react_jsx_runtime.JSX.Element;
|
|
2115
|
+
|
|
2116
|
+
interface Stat {
|
|
2117
|
+
value: string;
|
|
2118
|
+
label: string;
|
|
2119
|
+
}
|
|
2120
|
+
interface StatsCardProps {
|
|
2121
|
+
stats: Stat[];
|
|
2122
|
+
className?: string;
|
|
2123
|
+
}
|
|
2124
|
+
declare function StatsCard({ stats, className }: StatsCardProps): react_jsx_runtime.JSX.Element;
|
|
2125
|
+
interface PortfolioImage {
|
|
2126
|
+
src: string;
|
|
2127
|
+
alt?: string;
|
|
2128
|
+
}
|
|
2129
|
+
interface PortfolioCardProps {
|
|
2130
|
+
title?: string;
|
|
2131
|
+
viewAllHref?: string;
|
|
2132
|
+
images: PortfolioImage[];
|
|
2133
|
+
className?: string;
|
|
2134
|
+
}
|
|
2135
|
+
declare function PortfolioCard({ title, viewAllHref, images, className, }: PortfolioCardProps): react_jsx_runtime.JSX.Element;
|
|
2136
|
+
interface DescriptionCardProps {
|
|
2137
|
+
title?: string;
|
|
2138
|
+
content: string;
|
|
2139
|
+
className?: string;
|
|
2140
|
+
}
|
|
2141
|
+
declare function DescriptionCard({ title, content, className, }: DescriptionCardProps): react_jsx_runtime.JSX.Element;
|
|
2142
|
+
interface Skill {
|
|
2143
|
+
label: string;
|
|
2144
|
+
}
|
|
2145
|
+
interface SkillsCardProps {
|
|
2146
|
+
title?: string;
|
|
2147
|
+
skills: Skill[];
|
|
2148
|
+
className?: string;
|
|
2149
|
+
}
|
|
2150
|
+
declare function SkillsCard({ title, skills, className, }: SkillsCardProps): react_jsx_runtime.JSX.Element;
|
|
2151
|
+
interface Badge {
|
|
2152
|
+
icon: "zap" | "star" | "check";
|
|
2153
|
+
title: string;
|
|
2154
|
+
description: string;
|
|
2155
|
+
iconColor?: string;
|
|
2156
|
+
}
|
|
2157
|
+
interface BadgesCardProps {
|
|
2158
|
+
badges: Badge[];
|
|
2159
|
+
className?: string;
|
|
2160
|
+
}
|
|
2161
|
+
declare function BadgesCard({ badges, className }: BadgesCardProps): react_jsx_runtime.JSX.Element;
|
|
2162
|
+
|
|
2163
|
+
interface ProfileImageUploaderProps {
|
|
2164
|
+
/** Current image URL */
|
|
2165
|
+
imageUrl?: string;
|
|
2166
|
+
/** Callback when image is selected */
|
|
2167
|
+
onImageChange?: (file: File) => void;
|
|
2168
|
+
/** Size of the uploader */
|
|
2169
|
+
size?: number;
|
|
2170
|
+
/** Class name for customization */
|
|
2171
|
+
className?: string;
|
|
2172
|
+
}
|
|
2173
|
+
/**
|
|
2174
|
+
* Profile Image Uploader
|
|
2175
|
+
*
|
|
2176
|
+
* A circular avatar with upload functionality.
|
|
2177
|
+
* Shows a placeholder user icon when no image is set.
|
|
2178
|
+
* Hover state shows camera overlay for upload interaction.
|
|
2179
|
+
*/
|
|
2180
|
+
declare function ProfileImageUploader({ imageUrl, onImageChange, size, className, }: ProfileImageUploaderProps): react_jsx_runtime.JSX.Element;
|
|
2181
|
+
|
|
2182
|
+
interface Participant {
|
|
2183
|
+
id: string;
|
|
2184
|
+
name: string;
|
|
2185
|
+
role: string;
|
|
2186
|
+
avatarUrl?: string;
|
|
2187
|
+
}
|
|
2188
|
+
interface ParticipantListProps {
|
|
2189
|
+
/** Array of participants */
|
|
2190
|
+
participants: Participant[];
|
|
2191
|
+
/** Additional class names */
|
|
2192
|
+
className?: string;
|
|
2193
|
+
}
|
|
2194
|
+
/**
|
|
2195
|
+
* Canvas Design System - Participant List Component
|
|
2196
|
+
*
|
|
2197
|
+
* Displays a list of video chat participants with avatars.
|
|
2198
|
+
*
|
|
2199
|
+
* @example
|
|
2200
|
+
* ```tsx
|
|
2201
|
+
* <ParticipantList
|
|
2202
|
+
* participants={[
|
|
2203
|
+
* { id: "1", name: "John Doe", role: "Developer", avatarUrl: "/avatar.jpg" },
|
|
2204
|
+
* ]}
|
|
2205
|
+
* />
|
|
2206
|
+
* ```
|
|
2207
|
+
*/
|
|
2208
|
+
declare function ParticipantList({ participants, className, }: ParticipantListProps): react_jsx_runtime.JSX.Element;
|
|
2209
|
+
|
|
2210
|
+
interface Tag {
|
|
2211
|
+
id: string;
|
|
2212
|
+
label: string;
|
|
2213
|
+
}
|
|
2214
|
+
interface ListItem$1 {
|
|
2215
|
+
id: string;
|
|
2216
|
+
title: string;
|
|
2217
|
+
author: string;
|
|
2218
|
+
date: string;
|
|
2219
|
+
description: string;
|
|
2220
|
+
imageUrl: string;
|
|
2221
|
+
tags?: Tag[];
|
|
2222
|
+
}
|
|
2223
|
+
interface SortOption$6 {
|
|
2224
|
+
id: string;
|
|
2225
|
+
label: string;
|
|
2226
|
+
}
|
|
2227
|
+
interface FilterOption$6 {
|
|
2228
|
+
id: string;
|
|
2229
|
+
label: string;
|
|
2230
|
+
}
|
|
2231
|
+
interface StandardListWithImageProps {
|
|
2232
|
+
/** Block title */
|
|
2233
|
+
title?: string;
|
|
2234
|
+
/** Block subtitle/description */
|
|
2235
|
+
subtitle?: string;
|
|
2236
|
+
/** List items to display */
|
|
2237
|
+
items?: ListItem$1[];
|
|
2238
|
+
/** Sort options for the sort dropdown */
|
|
2239
|
+
sortOptions?: SortOption$6[];
|
|
2240
|
+
/** Filter options for the filter dropdown */
|
|
2241
|
+
filterOptions?: FilterOption$6[];
|
|
2242
|
+
/** Callback when sort value changes */
|
|
2243
|
+
onSort?: (value: string) => void;
|
|
2244
|
+
/** Callback when filter value changes */
|
|
2245
|
+
onFilter?: (value: string) => void;
|
|
2246
|
+
/** Callback when an item is clicked */
|
|
2247
|
+
onItemClick?: (item: ListItem$1) => void;
|
|
2248
|
+
/** Additional class names */
|
|
2249
|
+
className?: string;
|
|
2250
|
+
}
|
|
2251
|
+
/**
|
|
2252
|
+
* Canvas Design System - Standard List with Image Block
|
|
2253
|
+
*
|
|
2254
|
+
* A configurable list block with image thumbnails, commonly used for
|
|
2255
|
+
* blog posts, articles, or any content with featured images.
|
|
2256
|
+
* Includes header section with title, subtitle, and sort/filter controls.
|
|
2257
|
+
*
|
|
2258
|
+
* @example
|
|
2259
|
+
* ```tsx
|
|
2260
|
+
* <StandardListWithImage
|
|
2261
|
+
* title="Blog"
|
|
2262
|
+
* subtitle="Read our latest articles"
|
|
2263
|
+
* items={blogPosts}
|
|
2264
|
+
* onItemClick={(item) => console.log("Clicked:", item.title)}
|
|
2265
|
+
* />
|
|
2266
|
+
* ```
|
|
2267
|
+
*/
|
|
2268
|
+
declare function StandardListWithImage({ title, subtitle, items, sortOptions, filterOptions, onSort, onFilter, onItemClick, className, }: StandardListWithImageProps): react_jsx_runtime.JSX.Element;
|
|
2269
|
+
|
|
2270
|
+
interface IconLabelConfig {
|
|
2271
|
+
id: string;
|
|
2272
|
+
icon: "heart" | "users" | "zap" | "map-pin" | "briefcase";
|
|
2273
|
+
label: string;
|
|
2274
|
+
}
|
|
2275
|
+
interface ListItem {
|
|
2276
|
+
id: string;
|
|
2277
|
+
imageUrl: string;
|
|
2278
|
+
title: string;
|
|
2279
|
+
price: string;
|
|
2280
|
+
priceUnit?: string;
|
|
2281
|
+
rating: number;
|
|
2282
|
+
reviewCount: number;
|
|
2283
|
+
location: string;
|
|
2284
|
+
description: string;
|
|
2285
|
+
labels: IconLabelConfig[];
|
|
2286
|
+
tag?: string;
|
|
2287
|
+
isFavorite?: boolean;
|
|
2288
|
+
}
|
|
2289
|
+
interface SortOption$5 {
|
|
2290
|
+
id: string;
|
|
2291
|
+
label: string;
|
|
2292
|
+
}
|
|
2293
|
+
interface FilterOption$5 {
|
|
2294
|
+
id: string;
|
|
2295
|
+
label: string;
|
|
2296
|
+
}
|
|
2297
|
+
interface LargeImageLabelsListProps {
|
|
2298
|
+
/** Section title */
|
|
2299
|
+
title?: string;
|
|
2300
|
+
/** Number of results (defaults to items.length) */
|
|
2301
|
+
resultCount?: number;
|
|
2302
|
+
/** Custom result count text (overrides default "{count} results") */
|
|
2303
|
+
resultCountText?: string;
|
|
2304
|
+
/** List items to display */
|
|
2305
|
+
items?: ListItem[];
|
|
2306
|
+
/** Sort options for the sort dropdown */
|
|
2307
|
+
sortOptions?: SortOption$5[];
|
|
2308
|
+
/** Filter options for the filter dropdown */
|
|
2309
|
+
filterOptions?: FilterOption$5[];
|
|
2310
|
+
/** Callback when sort value changes */
|
|
2311
|
+
onSort?: (value: string) => void;
|
|
2312
|
+
/** Callback when filter value changes */
|
|
2313
|
+
onFilter?: (value: string) => void;
|
|
2314
|
+
/** Callback when favorite button is clicked */
|
|
2315
|
+
onFavorite?: (item: ListItem) => void;
|
|
2316
|
+
/** Callback when item is clicked */
|
|
2317
|
+
onItemClick?: (item: ListItem) => void;
|
|
2318
|
+
/** Additional class names */
|
|
2319
|
+
className?: string;
|
|
2320
|
+
}
|
|
2321
|
+
/**
|
|
2322
|
+
* Canvas Design System - Large Image Labels List Block
|
|
2323
|
+
*
|
|
2324
|
+
* A property-style listing component with large images, ratings, prices,
|
|
2325
|
+
* and icon labels. Includes a header section with title, result count,
|
|
2326
|
+
* and sort/filter controls.
|
|
2327
|
+
*
|
|
2328
|
+
* @example
|
|
2329
|
+
* ```tsx
|
|
2330
|
+
* <LargeImageLabelsList
|
|
2331
|
+
* title="Properties"
|
|
2332
|
+
* items={[
|
|
2333
|
+
* {
|
|
2334
|
+
* id: "1",
|
|
2335
|
+
* imageUrl: "https://example.com/image.jpg",
|
|
2336
|
+
* title: "Beach Apartment",
|
|
2337
|
+
* price: "$140",
|
|
2338
|
+
* priceUnit: "/night",
|
|
2339
|
+
* rating: 5,
|
|
2340
|
+
* reviewCount: 210,
|
|
2341
|
+
* location: "Honolulu, HI",
|
|
2342
|
+
* description: "Beautiful beachfront property...",
|
|
2343
|
+
* labels: [{ id: "1", icon: "heart", label: "Popular" }],
|
|
2344
|
+
* tag: "Popular",
|
|
2345
|
+
* }
|
|
2346
|
+
* ]}
|
|
2347
|
+
* onFavorite={(item) => console.log("Favorited:", item.title)}
|
|
2348
|
+
* />
|
|
2349
|
+
* ```
|
|
2350
|
+
*/
|
|
2351
|
+
declare function LargeImageLabelsList({ title, resultCount, resultCountText, items, sortOptions, filterOptions, onSort, onFilter, onFavorite, onItemClick, className, }: LargeImageLabelsListProps): react_jsx_runtime.JSX.Element;
|
|
2352
|
+
|
|
2353
|
+
interface ProgressListItem {
|
|
2354
|
+
id: string;
|
|
2355
|
+
title: string;
|
|
2356
|
+
description: string;
|
|
2357
|
+
/** Progress percentage (0-100) */
|
|
2358
|
+
progress: number;
|
|
2359
|
+
}
|
|
2360
|
+
interface SortOption$4 {
|
|
2361
|
+
id: string;
|
|
2362
|
+
label: string;
|
|
2363
|
+
}
|
|
2364
|
+
interface FilterOption$4 {
|
|
2365
|
+
id: string;
|
|
2366
|
+
label: string;
|
|
2367
|
+
}
|
|
2368
|
+
interface CircularProgressBarProps {
|
|
2369
|
+
/** Progress percentage (0-100) */
|
|
2370
|
+
progress: number;
|
|
2371
|
+
/** Size of the progress bar in pixels */
|
|
2372
|
+
size?: number;
|
|
2373
|
+
/** Stroke width of the progress arc */
|
|
2374
|
+
strokeWidth?: number;
|
|
2375
|
+
/** Additional class names */
|
|
2376
|
+
className?: string;
|
|
2377
|
+
}
|
|
2378
|
+
interface CircularProgressBarListProps {
|
|
2379
|
+
/** List title */
|
|
2380
|
+
title?: string;
|
|
2381
|
+
/** Number of results to display */
|
|
2382
|
+
resultCount?: number;
|
|
2383
|
+
/** Custom result count text (overrides default "{count} results") */
|
|
2384
|
+
resultCountText?: string;
|
|
2385
|
+
/** List items data */
|
|
2386
|
+
items?: ProgressListItem[];
|
|
2387
|
+
/** Sort options for the sort dropdown */
|
|
2388
|
+
sortOptions?: SortOption$4[];
|
|
2389
|
+
/** Filter options for the filter dropdown */
|
|
2390
|
+
filterOptions?: FilterOption$4[];
|
|
2391
|
+
/** Callback when sort value changes */
|
|
2392
|
+
onSort?: (value: string) => void;
|
|
2393
|
+
/** Callback when filter value changes */
|
|
2394
|
+
onFilter?: (value: string) => void;
|
|
2395
|
+
/** Callback when item action is clicked */
|
|
2396
|
+
onItemAction?: (action: string, item: ProgressListItem) => void;
|
|
2397
|
+
/** Additional class names */
|
|
2398
|
+
className?: string;
|
|
2399
|
+
}
|
|
2400
|
+
/**
|
|
2401
|
+
* Canvas Design System - Circular Progress Bar
|
|
2402
|
+
*
|
|
2403
|
+
* An SVG-based circular progress indicator that displays a percentage.
|
|
2404
|
+
* Uses CSS variables for theming support.
|
|
2405
|
+
*/
|
|
2406
|
+
declare function CircularProgressBar({ progress, size, strokeWidth, className, }: CircularProgressBarProps): react_jsx_runtime.JSX.Element;
|
|
2407
|
+
/**
|
|
2408
|
+
* Canvas Design System - Circular Progress Bar List Block
|
|
2409
|
+
*
|
|
2410
|
+
* A list block displaying items with circular progress indicators.
|
|
2411
|
+
* Features a header section with title, result count, and sort/filter controls.
|
|
2412
|
+
* Each item shows a progress bar, title, description, and action menu.
|
|
2413
|
+
*
|
|
2414
|
+
* @example
|
|
2415
|
+
* ```tsx
|
|
2416
|
+
* <CircularProgressBarList
|
|
2417
|
+
* title="Courses"
|
|
2418
|
+
* items={[
|
|
2419
|
+
* { id: "1", title: "Design 101", description: "Learn design basics", progress: 50 }
|
|
2420
|
+
* ]}
|
|
2421
|
+
* />
|
|
2422
|
+
* ```
|
|
2423
|
+
*/
|
|
2424
|
+
declare function CircularProgressBarList({ title, resultCount, resultCountText, items, sortOptions, filterOptions, onSort, onFilter, onItemAction, className, }: CircularProgressBarListProps): react_jsx_runtime.JSX.Element;
|
|
2425
|
+
|
|
2426
|
+
interface ActivityAuthor {
|
|
2427
|
+
id: string;
|
|
2428
|
+
name: string;
|
|
2429
|
+
avatarUrl?: string;
|
|
2430
|
+
}
|
|
2431
|
+
interface ActivityAttachment {
|
|
2432
|
+
id: string;
|
|
2433
|
+
name: string;
|
|
2434
|
+
size: string;
|
|
2435
|
+
type?: "document" | "image" | "other";
|
|
2436
|
+
}
|
|
2437
|
+
interface BaseActivityItem {
|
|
2438
|
+
id: string;
|
|
2439
|
+
author: ActivityAuthor;
|
|
2440
|
+
timestamp: string;
|
|
2441
|
+
}
|
|
2442
|
+
interface StatusChangeActivity extends BaseActivityItem {
|
|
2443
|
+
type: "status_change";
|
|
2444
|
+
action: "completed" | "updated" | "started" | "archived";
|
|
2445
|
+
projectName: string;
|
|
2446
|
+
}
|
|
2447
|
+
interface CommentActivity extends BaseActivityItem {
|
|
2448
|
+
type: "comment";
|
|
2449
|
+
projectName: string;
|
|
2450
|
+
content: string;
|
|
2451
|
+
likes: number;
|
|
2452
|
+
replies: number;
|
|
2453
|
+
isLiked?: boolean;
|
|
2454
|
+
}
|
|
2455
|
+
interface AttachmentActivity extends BaseActivityItem {
|
|
2456
|
+
type: "attachment";
|
|
2457
|
+
action: "completed" | "uploaded" | "shared";
|
|
2458
|
+
projectName: string;
|
|
2459
|
+
attachment: ActivityAttachment;
|
|
2460
|
+
}
|
|
2461
|
+
type ActivityItem = StatusChangeActivity | CommentActivity | AttachmentActivity;
|
|
2462
|
+
interface ActivityFeedProps {
|
|
2463
|
+
/** Section title */
|
|
2464
|
+
title?: string;
|
|
2465
|
+
/** Section subtitle */
|
|
2466
|
+
subtitle?: string;
|
|
2467
|
+
/** Activity items to display */
|
|
2468
|
+
items?: ActivityItem[];
|
|
2469
|
+
/** Callback when like button is clicked */
|
|
2470
|
+
onLike?: (itemId: string) => void;
|
|
2471
|
+
/** Callback when reply button is clicked */
|
|
2472
|
+
onReply?: (itemId: string) => void;
|
|
2473
|
+
/** Callback when attachment is clicked */
|
|
2474
|
+
onAttachmentClick?: (itemId: string, attachmentId: string) => void;
|
|
2475
|
+
/** Additional class names */
|
|
2476
|
+
className?: string;
|
|
2477
|
+
}
|
|
2478
|
+
/**
|
|
2479
|
+
* Canvas Design System - Activity Feed Block
|
|
2480
|
+
*
|
|
2481
|
+
* A timeline-style activity feed showing user actions, comments, and file
|
|
2482
|
+
* attachments with connecting lines. Useful for project updates, notifications,
|
|
2483
|
+
* and collaboration views.
|
|
2484
|
+
*
|
|
2485
|
+
* @example
|
|
2486
|
+
* ```tsx
|
|
2487
|
+
* <ActivityFeed
|
|
2488
|
+
* title="Project status"
|
|
2489
|
+
* subtitle="Last updated today"
|
|
2490
|
+
* items={activityItems}
|
|
2491
|
+
* onLike={(id) => console.log("Liked", id)}
|
|
2492
|
+
* />
|
|
2493
|
+
* ```
|
|
2494
|
+
*/
|
|
2495
|
+
declare function ActivityFeed({ title, subtitle, items, onLike, onReply, onAttachmentClick, className, }: ActivityFeedProps): react_jsx_runtime.JSX.Element;
|
|
2496
|
+
|
|
2497
|
+
interface PostAuthor$1 {
|
|
2498
|
+
id: string;
|
|
2499
|
+
name: string;
|
|
2500
|
+
avatarUrl?: string;
|
|
2501
|
+
}
|
|
2502
|
+
interface LinkPreview {
|
|
2503
|
+
url: string;
|
|
2504
|
+
domain: string;
|
|
2505
|
+
title: string;
|
|
2506
|
+
description?: string;
|
|
2507
|
+
imageUrl?: string;
|
|
2508
|
+
}
|
|
2509
|
+
interface VideoMedia {
|
|
2510
|
+
thumbnailUrl: string;
|
|
2511
|
+
videoUrl?: string;
|
|
2512
|
+
}
|
|
2513
|
+
interface RepostContent {
|
|
2514
|
+
author: PostAuthor$1;
|
|
2515
|
+
date: string;
|
|
2516
|
+
content: string;
|
|
2517
|
+
images?: string[];
|
|
2518
|
+
}
|
|
2519
|
+
interface SocialFeedPost {
|
|
2520
|
+
id: string;
|
|
2521
|
+
author: PostAuthor$1;
|
|
2522
|
+
date: string;
|
|
2523
|
+
content: string;
|
|
2524
|
+
/** Image URLs for the post */
|
|
2525
|
+
images?: string[];
|
|
2526
|
+
/** Video media */
|
|
2527
|
+
video?: VideoMedia;
|
|
2528
|
+
/** Link preview card */
|
|
2529
|
+
linkPreview?: LinkPreview;
|
|
2530
|
+
/** Reposted/quoted content */
|
|
2531
|
+
repost?: RepostContent;
|
|
2532
|
+
likesCount: number;
|
|
2533
|
+
repliesCount: number;
|
|
2534
|
+
isLiked?: boolean;
|
|
2535
|
+
/** Nested replies */
|
|
2536
|
+
replies?: SocialFeedPost[];
|
|
2537
|
+
/** Whether this is a reply (for indentation) */
|
|
2538
|
+
isReply?: boolean;
|
|
2539
|
+
}
|
|
2540
|
+
interface SocialFeedProps {
|
|
2541
|
+
/** Section title */
|
|
2542
|
+
title?: string;
|
|
2543
|
+
/** Posts data */
|
|
2544
|
+
posts?: SocialFeedPost[];
|
|
2545
|
+
/** Current user for composer */
|
|
2546
|
+
currentUser?: PostAuthor$1;
|
|
2547
|
+
/** Placeholder text for composer */
|
|
2548
|
+
composerPlaceholder?: string;
|
|
2549
|
+
/** Image preview in composer */
|
|
2550
|
+
composerImagePreview?: string;
|
|
2551
|
+
/** Callback when post is submitted */
|
|
2552
|
+
onPost?: (content: string) => void;
|
|
2553
|
+
/** Callback when like is clicked */
|
|
2554
|
+
onLike?: (postId: string) => void;
|
|
2555
|
+
/** Callback when comment is clicked */
|
|
2556
|
+
onComment?: (postId: string) => void;
|
|
2557
|
+
/** Callback when repost is clicked */
|
|
2558
|
+
onRepost?: (postId: string) => void;
|
|
2559
|
+
/** Callback when share is clicked */
|
|
2560
|
+
onShare?: (postId: string) => void;
|
|
2561
|
+
/** Callback when menu is clicked */
|
|
2562
|
+
onMenuClick?: (postId: string) => void;
|
|
2563
|
+
/** Additional class names */
|
|
2564
|
+
className?: string;
|
|
2565
|
+
}
|
|
2566
|
+
/**
|
|
2567
|
+
* Canvas Design System - Social Feed Block
|
|
2568
|
+
*
|
|
2569
|
+
* A social media-style feed component with post composer, posts with various
|
|
2570
|
+
* content types (text, images, video, reposts, link cards), social interactions,
|
|
2571
|
+
* and threaded replies.
|
|
2572
|
+
*
|
|
2573
|
+
* @example
|
|
2574
|
+
* ```tsx
|
|
2575
|
+
* <SocialFeed
|
|
2576
|
+
* title="Social Feed"
|
|
2577
|
+
* posts={[...]}
|
|
2578
|
+
* onLike={(postId) => console.log("Liked", postId)}
|
|
2579
|
+
* onPost={(content) => console.log("Posted", content)}
|
|
2580
|
+
* />
|
|
2581
|
+
* ```
|
|
2582
|
+
*/
|
|
2583
|
+
declare function SocialFeed({ title, posts, currentUser, composerPlaceholder, composerImagePreview, onPost, onLike, onComment, onRepost, onShare, onMenuClick, className, }: SocialFeedProps): react_jsx_runtime.JSX.Element;
|
|
2584
|
+
|
|
2585
|
+
interface PostAuthor {
|
|
2586
|
+
id: string;
|
|
2587
|
+
name: string;
|
|
2588
|
+
username?: string;
|
|
2589
|
+
avatarUrl?: string;
|
|
2590
|
+
}
|
|
2591
|
+
interface ImagePost {
|
|
2592
|
+
id: string;
|
|
2593
|
+
author: PostAuthor;
|
|
2594
|
+
date: string;
|
|
2595
|
+
imageUrl: string;
|
|
2596
|
+
caption?: string;
|
|
2597
|
+
likesCount: number;
|
|
2598
|
+
likedByText?: string;
|
|
2599
|
+
commentsCount: number;
|
|
2600
|
+
isLiked?: boolean;
|
|
2601
|
+
isBookmarked?: boolean;
|
|
2602
|
+
comments?: Comment[];
|
|
2603
|
+
}
|
|
2604
|
+
interface ImageFeedWithNestedCommentsProps {
|
|
2605
|
+
/** Section title */
|
|
2606
|
+
title?: string;
|
|
2607
|
+
/** Section subtitle */
|
|
2608
|
+
subtitle?: string;
|
|
2609
|
+
/** Posts data */
|
|
2610
|
+
posts?: ImagePost[];
|
|
2611
|
+
/** Current user for comment avatars */
|
|
2612
|
+
currentUser?: CommentAuthor;
|
|
2613
|
+
/** Callback when post like is clicked */
|
|
2614
|
+
onLike?: (postId: string) => void;
|
|
2615
|
+
/** Callback when new comment is submitted */
|
|
2616
|
+
onComment?: (postId: string, content: string) => void;
|
|
2617
|
+
/** Callback when share is clicked */
|
|
2618
|
+
onShare?: (postId: string) => void;
|
|
2619
|
+
/** Callback when bookmark is clicked */
|
|
2620
|
+
onBookmark?: (postId: string) => void;
|
|
2621
|
+
/** Callback when reply is submitted */
|
|
2622
|
+
onReply?: (postId: string, commentId: string, content: string) => void;
|
|
2623
|
+
/** Callback when comment like is clicked */
|
|
2624
|
+
onCommentLike?: (postId: string, commentId: string) => void;
|
|
2625
|
+
/** Additional class names */
|
|
2626
|
+
className?: string;
|
|
2627
|
+
}
|
|
2628
|
+
/**
|
|
2629
|
+
* Canvas Design System - Image Feed with Nested Comments Block
|
|
2630
|
+
*
|
|
2631
|
+
* An Instagram-style image feed component with large images, social interactions
|
|
2632
|
+
* (like/comment/share/bookmark), and nested comment threads. Uses NestedCommentsTable
|
|
2633
|
+
* internally for the comments section.
|
|
2634
|
+
*
|
|
2635
|
+
* @example
|
|
2636
|
+
* ```tsx
|
|
2637
|
+
* <ImageFeedWithNestedComments
|
|
2638
|
+
* title="My posts"
|
|
2639
|
+
* subtitle="In the past year"
|
|
2640
|
+
* posts={[...]}
|
|
2641
|
+
* onLike={(postId) => console.log("Liked", postId)}
|
|
2642
|
+
* />
|
|
2643
|
+
* ```
|
|
2644
|
+
*/
|
|
2645
|
+
declare function ImageFeedWithNestedComments({ title, subtitle, posts, currentUser, onLike, onComment, onShare, onBookmark, onReply, onCommentLike, className, }: ImageFeedWithNestedCommentsProps): react_jsx_runtime.JSX.Element;
|
|
2646
|
+
|
|
2647
|
+
interface ProgressBarProps {
|
|
2648
|
+
/** Progress value (0-100) */
|
|
2649
|
+
progress?: number;
|
|
2650
|
+
/** Total number of steps */
|
|
2651
|
+
totalSteps?: number;
|
|
2652
|
+
/** Current step (0-indexed) - alternative to progress */
|
|
2653
|
+
currentStep?: number;
|
|
2654
|
+
/** Additional class name */
|
|
2655
|
+
className?: string;
|
|
2656
|
+
}
|
|
2657
|
+
/**
|
|
2658
|
+
* Canvas Design System - Progress Bar
|
|
2659
|
+
*
|
|
2660
|
+
* A horizontal progress indicator with:
|
|
2661
|
+
* - 8px height
|
|
2662
|
+
* - Pill-shaped (fully rounded)
|
|
2663
|
+
* - Background: --canvas-border
|
|
2664
|
+
* - Fill: --canvas-primary
|
|
2665
|
+
*
|
|
2666
|
+
* Can be controlled via either:
|
|
2667
|
+
* - `progress` prop (0-100 percentage)
|
|
2668
|
+
* - `currentStep` and `totalSteps` props (calculates percentage automatically)
|
|
2669
|
+
*
|
|
2670
|
+
* @example
|
|
2671
|
+
* ```tsx
|
|
2672
|
+
* // Using percentage
|
|
2673
|
+
* <ProgressBar progress={33} />
|
|
2674
|
+
*
|
|
2675
|
+
* // Using steps
|
|
2676
|
+
* <ProgressBar currentStep={1} totalSteps={3} />
|
|
2677
|
+
* ```
|
|
2678
|
+
*/
|
|
2679
|
+
declare function ProgressBar({ progress, totalSteps, currentStep, className, }: ProgressBarProps): react_jsx_runtime.JSX.Element;
|
|
2680
|
+
|
|
2681
|
+
interface VerticalStepTrackerProps {
|
|
2682
|
+
/** Array of step objects with id, label, and optional description */
|
|
2683
|
+
steps: Step[];
|
|
2684
|
+
/** Current active step (0-indexed) */
|
|
2685
|
+
currentStep: number;
|
|
2686
|
+
/** Optional callback when a step is clicked */
|
|
2687
|
+
onStepClick?: (stepIndex: number) => void;
|
|
2688
|
+
/** Optional section title (e.g., "REGISTRATION") */
|
|
2689
|
+
title?: string;
|
|
2690
|
+
/** Additional class name */
|
|
2691
|
+
className?: string;
|
|
2692
|
+
}
|
|
2693
|
+
/**
|
|
2694
|
+
* Canvas Design System - Vertical Step Tracker
|
|
2695
|
+
*
|
|
2696
|
+
* A vertical step progress indicator with:
|
|
2697
|
+
* - 24px circles with 8px white inner dot
|
|
2698
|
+
* - Vertical connecting lines between steps
|
|
2699
|
+
* - Active step: primary background + white dot + primary text
|
|
2700
|
+
* - Inactive steps: border background + white dot + placeholder text
|
|
2701
|
+
* - Optional section title (uppercase)
|
|
2702
|
+
*
|
|
2703
|
+
* @example
|
|
2704
|
+
* ```tsx
|
|
2705
|
+
* <VerticalStepTracker
|
|
2706
|
+
* steps={[
|
|
2707
|
+
* { id: "step1", label: "Step 1" },
|
|
2708
|
+
* { id: "step2", label: "Step 2" },
|
|
2709
|
+
* ]}
|
|
2710
|
+
* currentStep={0}
|
|
2711
|
+
* title="REGISTRATION"
|
|
2712
|
+
* />
|
|
2713
|
+
* ```
|
|
2714
|
+
*/
|
|
2715
|
+
declare function VerticalStepTracker({ steps, currentStep, onStepClick, title, className, }: VerticalStepTrackerProps): react_jsx_runtime.JSX.Element;
|
|
2716
|
+
/** Default steps for vertical tracker demo */
|
|
2717
|
+
declare const defaultVerticalSteps: Step[];
|
|
2718
|
+
|
|
2719
|
+
interface VideoChatControlsProps {
|
|
2720
|
+
/** Whether the video is currently on */
|
|
2721
|
+
isVideoOn?: boolean;
|
|
2722
|
+
/** Whether the mic is currently on */
|
|
2723
|
+
isMicOn?: boolean;
|
|
2724
|
+
/** Callback when video toggle is clicked */
|
|
2725
|
+
onToggleVideo?: () => void;
|
|
2726
|
+
/** Callback when mic toggle is clicked */
|
|
2727
|
+
onToggleMic?: () => void;
|
|
2728
|
+
/** Callback when cast button is clicked */
|
|
2729
|
+
onCast?: () => void;
|
|
2730
|
+
/** Callback when leave button is clicked */
|
|
2731
|
+
onLeave?: () => void;
|
|
2732
|
+
/** Additional class names */
|
|
2733
|
+
className?: string;
|
|
2734
|
+
}
|
|
2735
|
+
/**
|
|
2736
|
+
* Canvas Design System - Video Chat Controls Component
|
|
2737
|
+
*
|
|
2738
|
+
* Row of circular control buttons for video chat: Camera, Mic, Cast, Leave.
|
|
2739
|
+
*
|
|
2740
|
+
* @example
|
|
2741
|
+
* ```tsx
|
|
2742
|
+
* <VideoChatControls
|
|
2743
|
+
* isVideoOn={true}
|
|
2744
|
+
* isMicOn={true}
|
|
2745
|
+
* onToggleVideo={() => setVideoOn(!videoOn)}
|
|
2746
|
+
* onToggleMic={() => setMicOn(!micOn)}
|
|
2747
|
+
* onLeave={() => router.push('/')}
|
|
2748
|
+
* />
|
|
2749
|
+
* ```
|
|
2750
|
+
*/
|
|
2751
|
+
declare function VideoChatControls({ isVideoOn, isMicOn, onToggleVideo, onToggleMic, onCast, onLeave, className, }: VideoChatControlsProps): react_jsx_runtime.JSX.Element;
|
|
2752
|
+
|
|
2753
|
+
interface VideoContentSectionProps {
|
|
2754
|
+
/** Section title */
|
|
2755
|
+
title: string;
|
|
2756
|
+
/** Content (can be text or React nodes) */
|
|
2757
|
+
children: ReactNode;
|
|
2758
|
+
/** Additional class names */
|
|
2759
|
+
className?: string;
|
|
2760
|
+
}
|
|
2761
|
+
/**
|
|
2762
|
+
* Canvas Design System - Video Content Section Component
|
|
2763
|
+
*
|
|
2764
|
+
* A reusable section with a title and flexible content area.
|
|
2765
|
+
* Used for Overview, Notes, and similar text sections.
|
|
2766
|
+
*
|
|
2767
|
+
* @example
|
|
2768
|
+
* ```tsx
|
|
2769
|
+
* <VideoContentSection title="Overview">
|
|
2770
|
+
* <p>Lorem ipsum...</p>
|
|
2771
|
+
* </VideoContentSection>
|
|
2772
|
+
* ```
|
|
2773
|
+
*/
|
|
2774
|
+
declare function VideoContentSection({ title, children, className, }: VideoContentSectionProps): react_jsx_runtime.JSX.Element;
|
|
2775
|
+
|
|
2776
|
+
interface VideoPlaylistItemData {
|
|
2777
|
+
id: string;
|
|
2778
|
+
title: string;
|
|
2779
|
+
duration: string;
|
|
2780
|
+
thumbnail?: string;
|
|
2781
|
+
}
|
|
2782
|
+
interface VideoPlaylistItemProps {
|
|
2783
|
+
/** Item index (1-based for display) */
|
|
2784
|
+
index: number;
|
|
2785
|
+
/** Item data */
|
|
2786
|
+
item: VideoPlaylistItemData;
|
|
2787
|
+
/** Whether this item is currently active/playing */
|
|
2788
|
+
isActive?: boolean;
|
|
2789
|
+
/** Click handler */
|
|
2790
|
+
onClick?: () => void;
|
|
2791
|
+
}
|
|
2792
|
+
/**
|
|
2793
|
+
* Individual lesson row in the playlist
|
|
2794
|
+
*/
|
|
2795
|
+
declare function VideoPlaylistItem({ index, item, isActive, onClick, }: VideoPlaylistItemProps): react_jsx_runtime.JSX.Element;
|
|
2796
|
+
interface VideoPlaylistCardProps {
|
|
2797
|
+
/** Card title */
|
|
2798
|
+
title?: string;
|
|
2799
|
+
/** Playlist items */
|
|
2800
|
+
items: VideoPlaylistItemData[];
|
|
2801
|
+
/** Currently active item ID */
|
|
2802
|
+
activeId?: string;
|
|
2803
|
+
/** Callback when an item is clicked */
|
|
2804
|
+
onItemClick?: (id: string) => void;
|
|
2805
|
+
/** Whether the playlist starts collapsed (mobile only) */
|
|
2806
|
+
defaultCollapsed?: boolean;
|
|
2807
|
+
/** Additional class names */
|
|
2808
|
+
className?: string;
|
|
2809
|
+
}
|
|
2810
|
+
/**
|
|
2811
|
+
* Canvas Design System - Video Playlist Card Component
|
|
2812
|
+
*
|
|
2813
|
+
* A card container showing lesson list with collapsible behavior.
|
|
2814
|
+
* Features shadow, border, and hover states.
|
|
2815
|
+
*
|
|
2816
|
+
* @example
|
|
2817
|
+
* ```tsx
|
|
2818
|
+
* <VideoPlaylistCard
|
|
2819
|
+
* title="Lessons in this course"
|
|
2820
|
+
* items={lessons}
|
|
2821
|
+
* activeId="lesson-2"
|
|
2822
|
+
* onItemClick={(id) => setActiveLesson(id)}
|
|
2823
|
+
* />
|
|
2824
|
+
* ```
|
|
2825
|
+
*/
|
|
2826
|
+
declare function VideoPlaylistCard({ title, items, activeId, onItemClick, defaultCollapsed, className, }: VideoPlaylistCardProps): react_jsx_runtime.JSX.Element;
|
|
2827
|
+
|
|
2828
|
+
interface WebcamPreviewProps {
|
|
2829
|
+
/** Additional class names */
|
|
2830
|
+
className?: string;
|
|
2831
|
+
/** Whether the video should be muted (default true for self-view) */
|
|
2832
|
+
muted?: boolean;
|
|
2833
|
+
/** Whether the video should be mirrored (default true for self-view) */
|
|
2834
|
+
mirrored?: boolean;
|
|
2835
|
+
/** Fallback content when camera is not available */
|
|
2836
|
+
fallbackText?: string;
|
|
2837
|
+
}
|
|
2838
|
+
/**
|
|
2839
|
+
* Canvas Design System - Webcam Preview Component
|
|
2840
|
+
*
|
|
2841
|
+
* Displays live webcam feed using the browser's MediaDevices API.
|
|
2842
|
+
* Handles permission denied and unavailable camera gracefully.
|
|
2843
|
+
*
|
|
2844
|
+
* @example
|
|
2845
|
+
* ```tsx
|
|
2846
|
+
* <WebcamPreview className="w-full h-full rounded-[20px]" />
|
|
2847
|
+
* ```
|
|
2848
|
+
*/
|
|
2849
|
+
declare function WebcamPreview({ className, muted, mirrored, fallbackText, }: WebcamPreviewProps): react_jsx_runtime.JSX.Element;
|
|
2850
|
+
|
|
2851
|
+
interface YouTubePlayerProps {
|
|
2852
|
+
/** YouTube video ID (e.g., "dQw4w9WgXcQ") */
|
|
2853
|
+
videoId: string;
|
|
2854
|
+
/** Additional class names */
|
|
2855
|
+
className?: string;
|
|
2856
|
+
}
|
|
2857
|
+
/**
|
|
2858
|
+
* Canvas Design System - YouTube Player Component
|
|
2859
|
+
*
|
|
2860
|
+
* A responsive YouTube video embed with 16:9 aspect ratio.
|
|
2861
|
+
* Rounded corners are larger on desktop (20px) and smaller on mobile (8px).
|
|
2862
|
+
*
|
|
2863
|
+
* @example
|
|
2864
|
+
* ```tsx
|
|
2865
|
+
* <YouTubePlayer videoId="dQw4w9WgXcQ" />
|
|
2866
|
+
* ```
|
|
2867
|
+
*/
|
|
2868
|
+
declare function YouTubePlayer({ videoId, className, }: YouTubePlayerProps): react_jsx_runtime.JSX.Element;
|
|
2869
|
+
|
|
2870
|
+
interface SettingsListRowProps {
|
|
2871
|
+
/** Label for the setting */
|
|
2872
|
+
label: string;
|
|
2873
|
+
/** Value or description text */
|
|
2874
|
+
value?: string;
|
|
2875
|
+
/** Type of action on the right side */
|
|
2876
|
+
actionType?: "edit" | "toggle" | "more" | "none";
|
|
2877
|
+
/** For toggle: whether it's checked */
|
|
2878
|
+
checked?: boolean;
|
|
2879
|
+
/** For toggle: callback when changed */
|
|
2880
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
2881
|
+
/** For edit/more: callback when clicked */
|
|
2882
|
+
onActionClick?: () => void;
|
|
2883
|
+
/** Whether this is the first row (has top border) */
|
|
2884
|
+
isFirst?: boolean;
|
|
2885
|
+
/** Whether this is the last row (no bottom border) */
|
|
2886
|
+
isLast?: boolean;
|
|
2887
|
+
/** Additional class name */
|
|
2888
|
+
className?: string;
|
|
2889
|
+
}
|
|
2890
|
+
/**
|
|
2891
|
+
* Settings List Row
|
|
2892
|
+
*
|
|
2893
|
+
* A reusable row for settings lists with:
|
|
2894
|
+
* - Label on the left
|
|
2895
|
+
* - Value/description in the middle
|
|
2896
|
+
* - Action on the right (edit icon, toggle, or more menu)
|
|
2897
|
+
*/
|
|
2898
|
+
declare function SettingsListRow({ label, value, actionType, checked, onCheckedChange, onActionClick, isFirst, isLast, className, }: SettingsListRowProps): react_jsx_runtime.JSX.Element;
|
|
2899
|
+
|
|
2900
|
+
interface CreditCardDisplayProps {
|
|
2901
|
+
/** Card type (visa, mastercard, amex, etc.) */
|
|
2902
|
+
cardType?: "visa" | "mastercard" | "amex" | "discover";
|
|
2903
|
+
/** Last 4 digits of card number */
|
|
2904
|
+
lastFourDigits?: string;
|
|
2905
|
+
/** Cardholder name */
|
|
2906
|
+
cardholderName?: string;
|
|
2907
|
+
/** Expiry date (MM/YY format) */
|
|
2908
|
+
expiryDate?: string;
|
|
2909
|
+
/** Additional class name */
|
|
2910
|
+
className?: string;
|
|
2911
|
+
}
|
|
2912
|
+
/**
|
|
2913
|
+
* Credit Card Display
|
|
2914
|
+
*
|
|
2915
|
+
* A visual credit card representation for payment settings.
|
|
2916
|
+
* Shows card type, masked number, cardholder name, and expiry.
|
|
2917
|
+
* Uses the flair background color with a subtle lighting gradient.
|
|
2918
|
+
*/
|
|
2919
|
+
declare function CreditCardDisplay({ cardType, lastFourDigits, cardholderName, expiryDate, className, }: CreditCardDisplayProps): react_jsx_runtime.JSX.Element;
|
|
2920
|
+
|
|
2921
|
+
interface CanvasItemData {
|
|
2922
|
+
id: string;
|
|
2923
|
+
componentType: string;
|
|
2924
|
+
x: number;
|
|
2925
|
+
y: number;
|
|
2926
|
+
width?: number;
|
|
2927
|
+
height?: number;
|
|
2928
|
+
}
|
|
2929
|
+
interface CanvasItemProps {
|
|
2930
|
+
item: CanvasItemData;
|
|
2931
|
+
isSelected: boolean;
|
|
2932
|
+
onSelect: (id: string) => void;
|
|
2933
|
+
onDelete: (id: string) => void;
|
|
2934
|
+
onDragStart: (id: string, startX: number, startY: number, itemX: number, itemY: number) => void;
|
|
2935
|
+
scale: number;
|
|
2936
|
+
children: React.ReactNode;
|
|
2937
|
+
}
|
|
2938
|
+
/**
|
|
2939
|
+
* Canvas Item - Wrapper for components placed on the infinity canvas
|
|
2940
|
+
*
|
|
2941
|
+
* Handles:
|
|
2942
|
+
* - Absolute positioning based on x, y coordinates
|
|
2943
|
+
* - Selection state with visual border
|
|
2944
|
+
* - Drag handle for repositioning
|
|
2945
|
+
* - Delete button when selected
|
|
2946
|
+
*/
|
|
2947
|
+
declare function CanvasItem({ item, isSelected, onSelect, onDelete, onDragStart, scale, children, }: CanvasItemProps): react_jsx_runtime.JSX.Element;
|
|
2948
|
+
|
|
2949
|
+
interface ComponentPaletteProps {
|
|
2950
|
+
className?: string;
|
|
2951
|
+
}
|
|
2952
|
+
/**
|
|
2953
|
+
* Component Palette - Sidebar with draggable components
|
|
2954
|
+
*
|
|
2955
|
+
* Features:
|
|
2956
|
+
* - Organized by category (Page Templates, Blocks, Components)
|
|
2957
|
+
* - Collapsible sections
|
|
2958
|
+
* - Drag to add to canvas
|
|
2959
|
+
*/
|
|
2960
|
+
declare function ComponentPalette({ className }: ComponentPaletteProps): react_jsx_runtime.JSX.Element;
|
|
2961
|
+
|
|
2962
|
+
interface ComponentOption {
|
|
2963
|
+
id: string;
|
|
2964
|
+
name: string;
|
|
2965
|
+
category: string;
|
|
2966
|
+
path: string;
|
|
2967
|
+
description: string;
|
|
2968
|
+
}
|
|
2969
|
+
interface ComponentSearchProps {
|
|
2970
|
+
selectedComponents: ComponentOption[];
|
|
2971
|
+
onSelectionChange: (components: ComponentOption[]) => void;
|
|
2972
|
+
className?: string;
|
|
2973
|
+
}
|
|
2974
|
+
declare function ComponentSearch({ selectedComponents, onSelectionChange, className, }: ComponentSearchProps): react_jsx_runtime.JSX.Element;
|
|
2975
|
+
|
|
2976
|
+
interface CustomComponentHelperProps {
|
|
2977
|
+
className?: string;
|
|
2978
|
+
}
|
|
2979
|
+
declare function CustomComponentHelper({ className }: CustomComponentHelperProps): react_jsx_runtime.JSX.Element;
|
|
2980
|
+
|
|
2981
|
+
interface SlideshowTileItem {
|
|
2982
|
+
id: string;
|
|
2983
|
+
/** Array of image URLs for the slideshow */
|
|
2984
|
+
images: string[];
|
|
2985
|
+
/** User/creator info */
|
|
2986
|
+
user: {
|
|
2987
|
+
name: string;
|
|
2988
|
+
avatarUrl?: string;
|
|
2989
|
+
location: string;
|
|
2990
|
+
};
|
|
2991
|
+
/** Like/upvote count */
|
|
2992
|
+
likes: number | string;
|
|
2993
|
+
/** View count */
|
|
2994
|
+
views: number | string;
|
|
2995
|
+
}
|
|
2996
|
+
interface SortOption$3 {
|
|
2997
|
+
id: string;
|
|
2998
|
+
label: string;
|
|
2999
|
+
}
|
|
3000
|
+
interface FilterOption$3 {
|
|
3001
|
+
id: string;
|
|
3002
|
+
label: string;
|
|
3003
|
+
}
|
|
3004
|
+
interface SlideshowGridTilesProps {
|
|
3005
|
+
/** Block title */
|
|
3006
|
+
title?: string;
|
|
3007
|
+
/** Subtitle text (e.g., "Showing 20 designs") */
|
|
3008
|
+
subtitle?: string;
|
|
3009
|
+
/** Array of tile items */
|
|
3010
|
+
items?: SlideshowTileItem[];
|
|
3011
|
+
/** Sort options for the sort dropdown */
|
|
3012
|
+
sortOptions?: SortOption$3[];
|
|
3013
|
+
/** Filter options for the filter dropdown */
|
|
3014
|
+
filterOptions?: FilterOption$3[];
|
|
3015
|
+
/** Primary action button text */
|
|
3016
|
+
actionButtonText?: string;
|
|
3017
|
+
/** Callback when action button is clicked */
|
|
3018
|
+
onAddNew?: () => void;
|
|
3019
|
+
/** Callback when sort value changes */
|
|
3020
|
+
onSort?: (value: string) => void;
|
|
3021
|
+
/** Callback when filter value changes */
|
|
3022
|
+
onFilter?: (value: string) => void;
|
|
3023
|
+
/** Callback when save button is clicked on a tile */
|
|
3024
|
+
onSave?: (item: SlideshowTileItem) => void;
|
|
3025
|
+
/** Callback when a tile is clicked */
|
|
3026
|
+
onItemClick?: (item: SlideshowTileItem) => void;
|
|
3027
|
+
/** Additional class names */
|
|
3028
|
+
className?: string;
|
|
3029
|
+
}
|
|
3030
|
+
/**
|
|
3031
|
+
* Canvas Design System - Slideshow Grid Tiles Block
|
|
3032
|
+
*
|
|
3033
|
+
* A 2-column grid of portfolio/slideshow tiles with hover states
|
|
3034
|
+
* showing navigation arrows and save button. Each tile displays
|
|
3035
|
+
* a large image, user info, and engagement stats.
|
|
3036
|
+
*
|
|
3037
|
+
* @example
|
|
3038
|
+
* ```tsx
|
|
3039
|
+
* <SlideshowGridTiles
|
|
3040
|
+
* title="Portfolios"
|
|
3041
|
+
* subtitle="Showing 20 designs"
|
|
3042
|
+
* onSave={(item) => console.log("Saved", item)}
|
|
3043
|
+
* />
|
|
3044
|
+
* ```
|
|
3045
|
+
*/
|
|
3046
|
+
declare function SlideshowGridTiles({ title, subtitle, items, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onSave, onItemClick, className, }: SlideshowGridTilesProps): react_jsx_runtime.JSX.Element;
|
|
3047
|
+
|
|
3048
|
+
interface GridTileItem {
|
|
3049
|
+
id: string;
|
|
3050
|
+
/** Image URL for the tile */
|
|
3051
|
+
imageUrl: string;
|
|
3052
|
+
/** Tile title */
|
|
3053
|
+
title: string;
|
|
3054
|
+
/** Rating from 1-5 */
|
|
3055
|
+
rating: number;
|
|
3056
|
+
/** Location text */
|
|
3057
|
+
location: string;
|
|
3058
|
+
/** Price (e.g., "$205") */
|
|
3059
|
+
price: string;
|
|
3060
|
+
/** Price unit (e.g., "night") */
|
|
3061
|
+
priceUnit?: string;
|
|
3062
|
+
/** Optional tag badge (e.g., "Popular") */
|
|
3063
|
+
tag?: string;
|
|
3064
|
+
/** Whether item is favorited */
|
|
3065
|
+
isFavorite?: boolean;
|
|
3066
|
+
}
|
|
3067
|
+
interface SortOption$2 {
|
|
3068
|
+
id: string;
|
|
3069
|
+
label: string;
|
|
3070
|
+
}
|
|
3071
|
+
interface FilterOption$2 {
|
|
3072
|
+
id: string;
|
|
3073
|
+
label: string;
|
|
3074
|
+
}
|
|
3075
|
+
interface GridTilesListProps {
|
|
3076
|
+
/** Block title */
|
|
3077
|
+
title?: string;
|
|
3078
|
+
/** Subtitle text (e.g., "20 listings") */
|
|
3079
|
+
subtitle?: string;
|
|
3080
|
+
/** Array of tile items */
|
|
3081
|
+
items?: GridTileItem[];
|
|
3082
|
+
/** Number of grid columns (2, 3, 4, or 5) */
|
|
3083
|
+
columns?: 2 | 3 | 4 | 5;
|
|
3084
|
+
/** Sort options for the sort dropdown */
|
|
3085
|
+
sortOptions?: SortOption$2[];
|
|
3086
|
+
/** Filter options for the filter dropdown */
|
|
3087
|
+
filterOptions?: FilterOption$2[];
|
|
3088
|
+
/** Primary action button text */
|
|
3089
|
+
actionButtonText?: string;
|
|
3090
|
+
/** Callback when action button is clicked */
|
|
3091
|
+
onAddNew?: () => void;
|
|
3092
|
+
/** Callback when sort value changes */
|
|
3093
|
+
onSort?: (value: string) => void;
|
|
3094
|
+
/** Callback when filter value changes */
|
|
3095
|
+
onFilter?: (value: string) => void;
|
|
3096
|
+
/** Callback when favorite button is clicked on a tile */
|
|
3097
|
+
onFavorite?: (item: GridTileItem) => void;
|
|
3098
|
+
/** Callback when a tile is clicked */
|
|
3099
|
+
onItemClick?: (item: GridTileItem) => void;
|
|
3100
|
+
/** Additional class names */
|
|
3101
|
+
className?: string;
|
|
3102
|
+
}
|
|
3103
|
+
/**
|
|
3104
|
+
* Canvas Design System - Grid Tiles List Block
|
|
3105
|
+
*
|
|
3106
|
+
* A responsive grid of property/listing tiles with configurable columns,
|
|
3107
|
+
* images, star ratings, prices, and favorite buttons. Includes header
|
|
3108
|
+
* section with title, subtitle, and sort/filter controls.
|
|
3109
|
+
*
|
|
3110
|
+
* @example
|
|
3111
|
+
* ```tsx
|
|
3112
|
+
* <GridTilesList
|
|
3113
|
+
* title="Properties"
|
|
3114
|
+
* columns={4}
|
|
3115
|
+
* onFavorite={(item) => console.log("Favorited:", item.title)}
|
|
3116
|
+
* />
|
|
3117
|
+
* ```
|
|
3118
|
+
*/
|
|
3119
|
+
declare function GridTilesList({ title, subtitle, items, columns, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onFavorite, onItemClick, className, }: GridTilesListProps): react_jsx_runtime.JSX.Element;
|
|
3120
|
+
|
|
3121
|
+
interface ProfileTileItem {
|
|
3122
|
+
id: string;
|
|
3123
|
+
name: string;
|
|
3124
|
+
avatarUrl?: string;
|
|
3125
|
+
isOnline?: boolean;
|
|
3126
|
+
subject: string;
|
|
3127
|
+
pricePerHour: number;
|
|
3128
|
+
rating: number;
|
|
3129
|
+
reviewCount: string;
|
|
3130
|
+
certification?: string;
|
|
3131
|
+
location: string;
|
|
3132
|
+
education: string;
|
|
3133
|
+
sessionsCount: string;
|
|
3134
|
+
earnings: string;
|
|
3135
|
+
}
|
|
3136
|
+
interface SortOption$1 {
|
|
3137
|
+
id: string;
|
|
3138
|
+
label: string;
|
|
3139
|
+
}
|
|
3140
|
+
interface FilterOption$1 {
|
|
3141
|
+
id: string;
|
|
3142
|
+
label: string;
|
|
3143
|
+
}
|
|
3144
|
+
interface ProfileGridTilesListProps {
|
|
3145
|
+
/** Block title */
|
|
3146
|
+
title?: string;
|
|
3147
|
+
/** Subtitle text (e.g., "23 english tutors near you") */
|
|
3148
|
+
subtitle?: string;
|
|
3149
|
+
/** Array of profile tile items */
|
|
3150
|
+
items?: ProfileTileItem[];
|
|
3151
|
+
/** Number of columns in the grid (2-5) */
|
|
3152
|
+
columns?: 2 | 3 | 4 | 5;
|
|
3153
|
+
/** Sort options for the sort dropdown */
|
|
3154
|
+
sortOptions?: SortOption$1[];
|
|
3155
|
+
/** Filter options for the filter dropdown */
|
|
3156
|
+
filterOptions?: FilterOption$1[];
|
|
3157
|
+
/** Primary action button text */
|
|
3158
|
+
actionButtonText?: string;
|
|
3159
|
+
/** Callback when action button is clicked */
|
|
3160
|
+
onAddNew?: () => void;
|
|
3161
|
+
/** Callback when sort value changes */
|
|
3162
|
+
onSort?: (value: string) => void;
|
|
3163
|
+
/** Callback when filter value changes */
|
|
3164
|
+
onFilter?: (value: string) => void;
|
|
3165
|
+
/** Callback when a profile is clicked */
|
|
3166
|
+
onItemClick?: (item: ProfileTileItem) => void;
|
|
3167
|
+
/** Additional class names */
|
|
3168
|
+
className?: string;
|
|
3169
|
+
}
|
|
3170
|
+
/**
|
|
3171
|
+
* Canvas Design System - Profile Grid Tiles List Block
|
|
3172
|
+
*
|
|
3173
|
+
* A responsive grid of profile cards with avatar, ratings, certifications,
|
|
3174
|
+
* and metadata. Supports 2-5 column layouts that adapt to screen size.
|
|
3175
|
+
*
|
|
3176
|
+
* @example
|
|
3177
|
+
* ```tsx
|
|
3178
|
+
* <ProfileGridTilesList
|
|
3179
|
+
* title="Tutors near you"
|
|
3180
|
+
* subtitle="23 english tutors near you"
|
|
3181
|
+
* columns={4}
|
|
3182
|
+
* onItemClick={(item) => console.log("Clicked", item)}
|
|
3183
|
+
* />
|
|
3184
|
+
* ```
|
|
3185
|
+
*/
|
|
3186
|
+
declare function ProfileGridTilesList({ title, subtitle, items, columns, sortOptions, filterOptions, actionButtonText, onAddNew, onSort, onFilter, onItemClick, className, }: ProfileGridTilesListProps): react_jsx_runtime.JSX.Element;
|
|
3187
|
+
|
|
3188
|
+
interface MetricCardData {
|
|
3189
|
+
id: string;
|
|
3190
|
+
label: string;
|
|
3191
|
+
value: string;
|
|
3192
|
+
change?: {
|
|
3193
|
+
value: string;
|
|
3194
|
+
direction: "up" | "down";
|
|
3195
|
+
};
|
|
3196
|
+
}
|
|
3197
|
+
interface MetricListItem {
|
|
3198
|
+
id: string;
|
|
3199
|
+
date?: string;
|
|
3200
|
+
label: string;
|
|
3201
|
+
value: string;
|
|
3202
|
+
}
|
|
3203
|
+
interface DonutChartLegendItem {
|
|
3204
|
+
id: string;
|
|
3205
|
+
label: string;
|
|
3206
|
+
value: string;
|
|
3207
|
+
color: string;
|
|
3208
|
+
}
|
|
3209
|
+
interface ProgressBarItem {
|
|
3210
|
+
id: string;
|
|
3211
|
+
label: string;
|
|
3212
|
+
sublabel?: string;
|
|
3213
|
+
value?: string;
|
|
3214
|
+
progress: number;
|
|
3215
|
+
imageUrl?: string;
|
|
3216
|
+
color?: string;
|
|
3217
|
+
}
|
|
3218
|
+
interface MetricCardProps {
|
|
3219
|
+
label: string;
|
|
3220
|
+
value: string;
|
|
3221
|
+
change?: {
|
|
3222
|
+
value: string;
|
|
3223
|
+
direction: "up" | "down";
|
|
3224
|
+
};
|
|
3225
|
+
className?: string;
|
|
3226
|
+
}
|
|
3227
|
+
declare function MetricCard({ label, value, change, className }: MetricCardProps): react_jsx_runtime.JSX.Element;
|
|
3228
|
+
interface MetricCardsRowProps {
|
|
3229
|
+
metrics: MetricCardData[];
|
|
3230
|
+
columns?: 2 | 3 | 4;
|
|
3231
|
+
className?: string;
|
|
3232
|
+
}
|
|
3233
|
+
declare function MetricCardsRow({ metrics, columns, className }: MetricCardsRowProps): react_jsx_runtime.JSX.Element;
|
|
3234
|
+
interface LineChartWidgetProps {
|
|
3235
|
+
label: string;
|
|
3236
|
+
value: string;
|
|
3237
|
+
description?: string;
|
|
3238
|
+
chartData?: number[];
|
|
3239
|
+
chartLabels?: string[];
|
|
3240
|
+
className?: string;
|
|
3241
|
+
onMenuClick?: () => void;
|
|
3242
|
+
onManageClick?: () => void;
|
|
3243
|
+
onViewDetailsClick?: () => void;
|
|
3244
|
+
}
|
|
3245
|
+
declare function LineChartWidget({ label, value, description, chartData, chartLabels, className, onMenuClick, onManageClick, onViewDetailsClick, }: LineChartWidgetProps): react_jsx_runtime.JSX.Element;
|
|
3246
|
+
interface DonutChartWidgetProps {
|
|
3247
|
+
label: string;
|
|
3248
|
+
value: string;
|
|
3249
|
+
description?: string;
|
|
3250
|
+
legendItems?: DonutChartLegendItem[];
|
|
3251
|
+
className?: string;
|
|
3252
|
+
onMenuClick?: () => void;
|
|
3253
|
+
onManageClick?: () => void;
|
|
3254
|
+
onViewDetailsClick?: () => void;
|
|
3255
|
+
}
|
|
3256
|
+
declare function DonutChartWidget({ label, value, description, legendItems, className, onMenuClick, onManageClick, onViewDetailsClick, }: DonutChartWidgetProps): react_jsx_runtime.JSX.Element;
|
|
3257
|
+
interface MetricListCardProps {
|
|
3258
|
+
headerLabel: string;
|
|
3259
|
+
title: string;
|
|
3260
|
+
subtitle?: string;
|
|
3261
|
+
items: MetricListItem[];
|
|
3262
|
+
viewDetailsLabel?: string;
|
|
3263
|
+
className?: string;
|
|
3264
|
+
onMenuClick?: () => void;
|
|
3265
|
+
onManageClick?: () => void;
|
|
3266
|
+
onViewDetailsClick?: () => void;
|
|
3267
|
+
}
|
|
3268
|
+
declare function MetricListCard({ headerLabel, title, subtitle, items, viewDetailsLabel, className, onMenuClick, onManageClick, onViewDetailsClick, }: MetricListCardProps): react_jsx_runtime.JSX.Element;
|
|
3269
|
+
interface ProgressMetricCardProps {
|
|
3270
|
+
headerLabel: string;
|
|
3271
|
+
title: string;
|
|
3272
|
+
subtitle?: string;
|
|
3273
|
+
items: ProgressBarItem[];
|
|
3274
|
+
className?: string;
|
|
3275
|
+
onMenuClick?: () => void;
|
|
3276
|
+
onManageClick?: () => void;
|
|
3277
|
+
onViewDetailsClick?: () => void;
|
|
3278
|
+
}
|
|
3279
|
+
declare function ProgressMetricCard({ headerLabel, title, subtitle, items, className, onMenuClick, onManageClick, onViewDetailsClick, }: ProgressMetricCardProps): react_jsx_runtime.JSX.Element;
|
|
3280
|
+
interface TwoColumnWidgetsProps {
|
|
3281
|
+
children: React.ReactNode;
|
|
3282
|
+
className?: string;
|
|
3283
|
+
}
|
|
3284
|
+
declare function TwoColumnWidgets({ children, className }: TwoColumnWidgetsProps): react_jsx_runtime.JSX.Element;
|
|
3285
|
+
interface DashboardHeaderProps {
|
|
3286
|
+
title: string;
|
|
3287
|
+
subtitle?: string;
|
|
3288
|
+
className?: string;
|
|
3289
|
+
}
|
|
3290
|
+
declare function DashboardHeader({ title, subtitle, className }: DashboardHeaderProps): react_jsx_runtime.JSX.Element;
|
|
3291
|
+
interface GraphMetricTilesDemoProps {
|
|
3292
|
+
className?: string;
|
|
3293
|
+
}
|
|
3294
|
+
declare function GraphMetricTilesDemo({ className }: GraphMetricTilesDemoProps): react_jsx_runtime.JSX.Element;
|
|
3295
|
+
|
|
3296
|
+
interface FormFieldConfig {
|
|
3297
|
+
id: string;
|
|
3298
|
+
label: string;
|
|
3299
|
+
type: "text" | "textarea" | "select" | "date" | "multiselect-checkbox" | "checkbox-group" | "radio-group" | "multiselect-tags" | "image-uploader" | "file-uploader" | "slider";
|
|
3300
|
+
placeholder?: string;
|
|
3301
|
+
options?: {
|
|
3302
|
+
id: string;
|
|
3303
|
+
label: string;
|
|
3304
|
+
}[];
|
|
3305
|
+
value?: string | string[] | number[] | UploadedImage[] | UploadedFile[];
|
|
3306
|
+
min?: number;
|
|
3307
|
+
max?: number;
|
|
3308
|
+
step?: number;
|
|
3309
|
+
fullWidth?: boolean;
|
|
3310
|
+
disabled?: boolean;
|
|
3311
|
+
}
|
|
3312
|
+
interface FormRowConfig {
|
|
3313
|
+
id: string;
|
|
3314
|
+
fields: FormFieldConfig[];
|
|
3315
|
+
}
|
|
3316
|
+
interface SortOption {
|
|
3317
|
+
id: string;
|
|
3318
|
+
label: string;
|
|
3319
|
+
}
|
|
3320
|
+
interface FilterOption {
|
|
3321
|
+
id: string;
|
|
3322
|
+
label: string;
|
|
3323
|
+
}
|
|
3324
|
+
interface FormGroupProps {
|
|
3325
|
+
/** Form title */
|
|
3326
|
+
title?: string;
|
|
3327
|
+
/** Form description */
|
|
3328
|
+
description?: string;
|
|
3329
|
+
/** Row configurations containing field definitions */
|
|
3330
|
+
rows?: FormRowConfig[];
|
|
3331
|
+
/** Sort options for the sort dropdown */
|
|
3332
|
+
sortOptions?: SortOption[];
|
|
3333
|
+
/** Filter options for the filter dropdown */
|
|
3334
|
+
filterOptions?: FilterOption[];
|
|
3335
|
+
/** Primary action button text */
|
|
3336
|
+
actionButtonText?: string;
|
|
3337
|
+
/** Cancel button text */
|
|
3338
|
+
cancelButtonText?: string;
|
|
3339
|
+
/** Save button text */
|
|
3340
|
+
saveButtonText?: string;
|
|
3341
|
+
/** Input size variant */
|
|
3342
|
+
inputSize?: "sm" | "default" | "lg";
|
|
3343
|
+
/** Callback when action button is clicked */
|
|
3344
|
+
onAddNew?: () => void;
|
|
3345
|
+
/** Callback when sort value changes */
|
|
3346
|
+
onSort?: (value: string) => void;
|
|
3347
|
+
/** Callback when filter value changes */
|
|
3348
|
+
onFilter?: (value: string) => void;
|
|
3349
|
+
/** Callback when cancel button is clicked */
|
|
3350
|
+
onCancel?: () => void;
|
|
3351
|
+
/** Callback when save button is clicked */
|
|
3352
|
+
onSave?: () => void;
|
|
3353
|
+
/** Callback when a field value changes */
|
|
3354
|
+
onFieldChange?: (fieldId: string, value: unknown) => void;
|
|
3355
|
+
/** Show header section */
|
|
3356
|
+
showHeader?: boolean;
|
|
3357
|
+
/** Show footer section */
|
|
3358
|
+
showFooter?: boolean;
|
|
3359
|
+
/** Additional class names */
|
|
3360
|
+
className?: string;
|
|
3361
|
+
}
|
|
3362
|
+
/**
|
|
3363
|
+
* Canvas Design System - Form Group Block
|
|
3364
|
+
*
|
|
3365
|
+
* A comprehensive form layout block with various input types arranged
|
|
3366
|
+
* in responsive rows. Includes header section with title, description,
|
|
3367
|
+
* sort/filter controls, and footer with action buttons.
|
|
3368
|
+
*
|
|
3369
|
+
* @example
|
|
3370
|
+
* ```tsx
|
|
3371
|
+
* <FormGroup
|
|
3372
|
+
* title="Create Entry"
|
|
3373
|
+
* description="Fill in the details below"
|
|
3374
|
+
* onSave={() => console.log("Save")}
|
|
3375
|
+
* onCancel={() => console.log("Cancel")}
|
|
3376
|
+
* />
|
|
3377
|
+
* ```
|
|
3378
|
+
*/
|
|
3379
|
+
declare function FormGroup({ title, description, rows, sortOptions, filterOptions, actionButtonText, cancelButtonText, saveButtonText, inputSize, onAddNew, onSort, onFilter, onCancel, onSave, onFieldChange, showHeader, showFooter, className, }: FormGroupProps): react_jsx_runtime.JSX.Element;
|
|
3380
|
+
|
|
3381
|
+
interface PricedDate {
|
|
3382
|
+
date: Date;
|
|
3383
|
+
price: string;
|
|
3384
|
+
}
|
|
3385
|
+
interface DateRange {
|
|
3386
|
+
start: Date | null;
|
|
3387
|
+
end: Date | null;
|
|
3388
|
+
}
|
|
3389
|
+
interface MonthlyCalendarWidgetProps {
|
|
3390
|
+
/** Widget title */
|
|
3391
|
+
title?: string;
|
|
3392
|
+
/** Widget subtitle */
|
|
3393
|
+
subtitle?: string;
|
|
3394
|
+
/** Initial month to display (defaults to current month) */
|
|
3395
|
+
initialMonth?: Date;
|
|
3396
|
+
/** Currently selected date range */
|
|
3397
|
+
selectedRange?: DateRange;
|
|
3398
|
+
/** Array of dates that should be disabled/unavailable */
|
|
3399
|
+
disabledDates?: Date[];
|
|
3400
|
+
/** Array of dates with prices to display */
|
|
3401
|
+
pricedDates?: PricedDate[];
|
|
3402
|
+
/** Override for "today" (useful for demos) */
|
|
3403
|
+
todayDate?: Date;
|
|
3404
|
+
/** Callback when a date is selected */
|
|
3405
|
+
onDateSelect?: (date: Date) => void;
|
|
3406
|
+
/** Callback when the date range changes */
|
|
3407
|
+
onRangeChange?: (range: DateRange) => void;
|
|
3408
|
+
/** Callback when Confirm button is clicked */
|
|
3409
|
+
onConfirm?: () => void;
|
|
3410
|
+
/** Callback when Cancel button is clicked */
|
|
3411
|
+
onCancel?: () => void;
|
|
3412
|
+
/** Additional class names */
|
|
3413
|
+
className?: string;
|
|
3414
|
+
}
|
|
3415
|
+
/**
|
|
3416
|
+
* Canvas Design System - Monthly Calendar Widget Block
|
|
3417
|
+
*
|
|
3418
|
+
* A dual-month calendar widget for date range selection with support for
|
|
3419
|
+
* disabled dates, price labels, and today indicator. Commonly used for
|
|
3420
|
+
* booking and scheduling interfaces.
|
|
3421
|
+
*
|
|
3422
|
+
* @example
|
|
3423
|
+
* ```tsx
|
|
3424
|
+
* <MonthlyCalendarWidget
|
|
3425
|
+
* title="Browse availability"
|
|
3426
|
+
* subtitle="Book your stay"
|
|
3427
|
+
* onRangeChange={(range) => console.log(range)}
|
|
3428
|
+
* onConfirm={() => console.log("Confirmed")}
|
|
3429
|
+
* />
|
|
3430
|
+
* ```
|
|
3431
|
+
*/
|
|
3432
|
+
declare function MonthlyCalendarWidget({ title, subtitle, initialMonth, selectedRange: controlledRange, disabledDates, pricedDates, todayDate, onDateSelect, onRangeChange, onConfirm, onCancel, className, }: MonthlyCalendarWidgetProps): react_jsx_runtime.JSX.Element;
|
|
3433
|
+
|
|
3434
|
+
interface PaginationProps {
|
|
3435
|
+
/** Current active page (1-indexed) */
|
|
3436
|
+
currentPage?: number;
|
|
3437
|
+
/** Total number of pages */
|
|
3438
|
+
totalPages?: number;
|
|
3439
|
+
/** Total number of items (for results text) */
|
|
3440
|
+
totalItems?: number;
|
|
3441
|
+
/** Items displayed per page */
|
|
3442
|
+
itemsPerPage?: number;
|
|
3443
|
+
/** Available items per page options */
|
|
3444
|
+
itemsPerPageOptions?: number[];
|
|
3445
|
+
/** Callback when page changes */
|
|
3446
|
+
onPageChange?: (page: number) => void;
|
|
3447
|
+
/** Callback when items per page changes */
|
|
3448
|
+
onItemsPerPageChange?: (itemsPerPage: number) => void;
|
|
3449
|
+
/** Show "Viewing X-Y of Z results" text (desktop only) */
|
|
3450
|
+
showResultsText?: boolean;
|
|
3451
|
+
/** Show "Show per page" dropdown (desktop only) */
|
|
3452
|
+
showItemsPerPage?: boolean;
|
|
3453
|
+
/** Maximum number of visible page buttons on desktop */
|
|
3454
|
+
maxVisiblePages?: number;
|
|
3455
|
+
/** Maximum number of visible page buttons on mobile (default: 3) */
|
|
3456
|
+
mobileMaxVisiblePages?: number;
|
|
3457
|
+
/** Force compact mode (fewer visible pages) regardless of viewport */
|
|
3458
|
+
compact?: boolean;
|
|
3459
|
+
/** Additional class names */
|
|
3460
|
+
className?: string;
|
|
3461
|
+
}
|
|
3462
|
+
/**
|
|
3463
|
+
* Canvas Design System - Pagination Component
|
|
3464
|
+
*
|
|
3465
|
+
* A responsive pagination component with results text, items per page dropdown,
|
|
3466
|
+
* and page navigation. Automatically adjusts layout for mobile screens.
|
|
3467
|
+
*
|
|
3468
|
+
* @example
|
|
3469
|
+
* ```tsx
|
|
3470
|
+
* // Basic usage
|
|
3471
|
+
* <Pagination
|
|
3472
|
+
* currentPage={1}
|
|
3473
|
+
* totalPages={10}
|
|
3474
|
+
* onPageChange={(page) => setPage(page)}
|
|
3475
|
+
* />
|
|
3476
|
+
*
|
|
3477
|
+
* // With all features
|
|
3478
|
+
* <Pagination
|
|
3479
|
+
* currentPage={1}
|
|
3480
|
+
* totalPages={50}
|
|
3481
|
+
* totalItems={2500}
|
|
3482
|
+
* itemsPerPage={50}
|
|
3483
|
+
* itemsPerPageOptions={[30, 50, 100]}
|
|
3484
|
+
* showResultsText
|
|
3485
|
+
* showItemsPerPage
|
|
3486
|
+
* onPageChange={(page) => setPage(page)}
|
|
3487
|
+
* onItemsPerPageChange={(perPage) => setPerPage(perPage)}
|
|
3488
|
+
* />
|
|
3489
|
+
* ```
|
|
3490
|
+
*/
|
|
3491
|
+
declare function Pagination({ currentPage, totalPages, totalItems, itemsPerPage, itemsPerPageOptions, onPageChange, onItemsPerPageChange, showResultsText, showItemsPerPage, maxVisiblePages, mobileMaxVisiblePages, compact, className, }: PaginationProps): react_jsx_runtime.JSX.Element;
|
|
3492
|
+
|
|
3493
|
+
interface PromptTemplateProps {
|
|
3494
|
+
prompt: string;
|
|
3495
|
+
title?: string;
|
|
3496
|
+
className?: string;
|
|
3497
|
+
}
|
|
3498
|
+
declare function PromptTemplate({ prompt, title, className }: PromptTemplateProps): react_jsx_runtime.JSX.Element;
|
|
3499
|
+
interface PromptChip {
|
|
3500
|
+
label: string;
|
|
3501
|
+
prompt: string;
|
|
3502
|
+
}
|
|
3503
|
+
interface PromptChipsRowProps {
|
|
3504
|
+
chips: PromptChip[];
|
|
3505
|
+
label?: string;
|
|
3506
|
+
}
|
|
3507
|
+
declare function PromptChipsRow({ chips, label }: PromptChipsRowProps): react_jsx_runtime.JSX.Element;
|
|
3508
|
+
|
|
3509
|
+
declare function ScreenPromptTemplate(): react_jsx_runtime.JSX.Element;
|
|
3510
|
+
|
|
3511
|
+
interface ScreenPromptBuilderProps {
|
|
3512
|
+
className?: string;
|
|
3513
|
+
}
|
|
3514
|
+
declare function ScreenPromptBuilder({ className }: ScreenPromptBuilderProps): react_jsx_runtime.JSX.Element;
|
|
3515
|
+
|
|
3516
|
+
/**
|
|
3517
|
+
* Project Context Type Definitions
|
|
3518
|
+
*
|
|
3519
|
+
* These types define the structure for project data that Cursor AI
|
|
3520
|
+
* generates and maintains based on the scope document.
|
|
3521
|
+
*/
|
|
3522
|
+
interface Persona {
|
|
3523
|
+
id: string;
|
|
3524
|
+
name: string;
|
|
3525
|
+
role: string;
|
|
3526
|
+
avatar?: string;
|
|
3527
|
+
goals: string[];
|
|
3528
|
+
painPoints: string[];
|
|
3529
|
+
quote: string;
|
|
3530
|
+
}
|
|
3531
|
+
type ScreenType = "page" | "tab" | "modal" | "drawer" | "state";
|
|
3532
|
+
type ScreenStatus = "draft" | "review" | "approved";
|
|
3533
|
+
interface Screen {
|
|
3534
|
+
id: string;
|
|
3535
|
+
name: string;
|
|
3536
|
+
slug: string;
|
|
3537
|
+
type: ScreenType;
|
|
3538
|
+
icon?: string;
|
|
3539
|
+
description?: string;
|
|
3540
|
+
parentId?: string | null;
|
|
3541
|
+
position: {
|
|
3542
|
+
x: number;
|
|
3543
|
+
y: number;
|
|
3544
|
+
};
|
|
3545
|
+
status: ScreenStatus;
|
|
3546
|
+
template?: string;
|
|
3547
|
+
}
|
|
3548
|
+
interface ScreenConnection {
|
|
3549
|
+
id: string;
|
|
3550
|
+
sourceId: string;
|
|
3551
|
+
targetId: string;
|
|
3552
|
+
label?: string;
|
|
3553
|
+
type?: "navigation" | "modal" | "redirect" | "back";
|
|
3554
|
+
}
|
|
3555
|
+
interface ProjectContext {
|
|
3556
|
+
name: string;
|
|
3557
|
+
description?: string;
|
|
3558
|
+
personas: Persona[];
|
|
3559
|
+
screens: Screen[];
|
|
3560
|
+
connections: ScreenConnection[];
|
|
3561
|
+
designGoals: string[];
|
|
3562
|
+
tone: string[];
|
|
3563
|
+
}
|
|
3564
|
+
/**
|
|
3565
|
+
* Get the full URL path for a screen, accounting for parent hierarchy
|
|
3566
|
+
*/
|
|
3567
|
+
declare function getScreenUrl(screen: Screen, allScreens: Screen[]): string;
|
|
3568
|
+
/**
|
|
3569
|
+
* Get child screens for a given parent
|
|
3570
|
+
*/
|
|
3571
|
+
declare function getChildScreens(parentId: string, allScreens: Screen[]): Screen[];
|
|
3572
|
+
/**
|
|
3573
|
+
* Get top-level screens (no parent)
|
|
3574
|
+
*/
|
|
3575
|
+
declare function getTopLevelScreens(allScreens: Screen[]): Screen[];
|
|
3576
|
+
|
|
3577
|
+
interface ScreenFlowchartProps {
|
|
3578
|
+
screens: Screen[];
|
|
3579
|
+
connections: ScreenConnection[];
|
|
3580
|
+
className?: string;
|
|
3581
|
+
onOpenFullscreen?: () => void;
|
|
3582
|
+
}
|
|
3583
|
+
declare function ScreenFlowchart({ screens, connections, className, onOpenFullscreen, }: ScreenFlowchartProps): react_jsx_runtime.JSX.Element | null;
|
|
3584
|
+
|
|
3585
|
+
interface PersonaCardProps {
|
|
3586
|
+
persona: Persona;
|
|
3587
|
+
className?: string;
|
|
3588
|
+
}
|
|
3589
|
+
declare function PersonaCard({ persona, className }: PersonaCardProps): react_jsx_runtime.JSX.Element;
|
|
3590
|
+
interface PersonaGridProps {
|
|
3591
|
+
personas: Persona[];
|
|
3592
|
+
}
|
|
3593
|
+
declare function PersonaGrid({ personas }: PersonaGridProps): react_jsx_runtime.JSX.Element | null;
|
|
3594
|
+
|
|
3595
|
+
interface LoaderProps {
|
|
3596
|
+
/** The current state of the loader */
|
|
3597
|
+
state?: "loading" | "success";
|
|
3598
|
+
/** Title text displayed below the icon */
|
|
3599
|
+
title?: string;
|
|
3600
|
+
/** Description text displayed below the title */
|
|
3601
|
+
description?: string;
|
|
3602
|
+
/** Text for the action button (success state only) */
|
|
3603
|
+
buttonText?: string;
|
|
3604
|
+
/** Callback when the action button is clicked */
|
|
3605
|
+
onButtonClick?: () => void;
|
|
3606
|
+
/** Additional class name */
|
|
3607
|
+
className?: string;
|
|
3608
|
+
}
|
|
3609
|
+
/**
|
|
3610
|
+
* Canvas Design System - Loader Component
|
|
3611
|
+
*
|
|
3612
|
+
* A loading feedback component with two states:
|
|
3613
|
+
* - Loading: Animated spinner with title and description
|
|
3614
|
+
* - Success: Green checkmark with title, description, and optional action button
|
|
3615
|
+
*
|
|
3616
|
+
* Uses CSS variables for theming:
|
|
3617
|
+
* - --loader-spinner-size: Size of the spinner (default: 64px)
|
|
3618
|
+
* - --loader-spinner-stroke: Background stroke color
|
|
3619
|
+
* - --loader-spinner-fill: Animated arc color
|
|
3620
|
+
* - --loader-success-size: Size of success checkmark (default: 48px)
|
|
3621
|
+
* - --loader-success-bg: Background color of success circle
|
|
3622
|
+
* - --loader-gap: Gap between elements
|
|
3623
|
+
*
|
|
3624
|
+
* @example
|
|
3625
|
+
* ```tsx
|
|
3626
|
+
* // Loading state
|
|
3627
|
+
* <Loader
|
|
3628
|
+
* state="loading"
|
|
3629
|
+
* title="Please wait..."
|
|
3630
|
+
* description="We are processing your request"
|
|
3631
|
+
* />
|
|
3632
|
+
*
|
|
3633
|
+
* // Success state with button
|
|
3634
|
+
* <Loader
|
|
3635
|
+
* state="success"
|
|
3636
|
+
* title="Success!"
|
|
3637
|
+
* description="Your payment has been processed"
|
|
3638
|
+
* buttonText="Go to portal"
|
|
3639
|
+
* onButtonClick={() => router.push('/portal')}
|
|
3640
|
+
* />
|
|
3641
|
+
* ```
|
|
3642
|
+
*/
|
|
3643
|
+
declare function Loader({ state, title, description, buttonText, onButtonClick, className, }: LoaderProps): react_jsx_runtime.JSX.Element;
|
|
3644
|
+
|
|
3645
|
+
interface MenufocusItem {
|
|
3646
|
+
/** Unique identifier for the menu item */
|
|
3647
|
+
id: string;
|
|
3648
|
+
/** Display label for the menu item */
|
|
3649
|
+
label: string;
|
|
3650
|
+
/** Callback when item is clicked */
|
|
3651
|
+
onClick?: () => void;
|
|
3652
|
+
/** Visual variant - use "destructive" for delete actions */
|
|
3653
|
+
variant?: "default" | "destructive";
|
|
3654
|
+
/** Whether the item is disabled */
|
|
3655
|
+
disabled?: boolean;
|
|
3656
|
+
}
|
|
3657
|
+
interface MenufocusTemplateProps {
|
|
3658
|
+
/** Array of menu items to display */
|
|
3659
|
+
items?: MenufocusItem[];
|
|
3660
|
+
/** Accessible label for the trigger button */
|
|
3661
|
+
ariaLabel?: string;
|
|
3662
|
+
/** Size of the trigger button */
|
|
3663
|
+
size?: "sm" | "default";
|
|
3664
|
+
/** Additional class names for the trigger button */
|
|
3665
|
+
className?: string;
|
|
3666
|
+
/** Alignment of the dropdown menu */
|
|
3667
|
+
align?: "start" | "center" | "end";
|
|
3668
|
+
}
|
|
3669
|
+
/**
|
|
3670
|
+
* Canvas Design System - Menufocus Template
|
|
3671
|
+
*
|
|
3672
|
+
* A reusable ellipsis menu component with configurable menu items.
|
|
3673
|
+
* Commonly used for row actions in tables, card actions, or any
|
|
3674
|
+
* context where a compact action menu is needed.
|
|
3675
|
+
*
|
|
3676
|
+
* @example
|
|
3677
|
+
* ```tsx
|
|
3678
|
+
* <MenufocusTemplate
|
|
3679
|
+
* items={[
|
|
3680
|
+
* { id: "edit", label: "Edit", onClick: handleEdit },
|
|
3681
|
+
* { id: "delete", label: "Delete", variant: "destructive", onClick: handleDelete },
|
|
3682
|
+
* ]}
|
|
3683
|
+
* />
|
|
3684
|
+
* ```
|
|
3685
|
+
*/
|
|
3686
|
+
declare function MenufocusTemplate({ items, ariaLabel, size, className, align, }: MenufocusTemplateProps): react_jsx_runtime.JSX.Element;
|
|
3687
|
+
|
|
3688
|
+
interface HeroSectionProps {
|
|
3689
|
+
title: string;
|
|
3690
|
+
subtitle: string;
|
|
3691
|
+
searchPlaceholder?: string;
|
|
3692
|
+
backgroundImage?: string;
|
|
3693
|
+
}
|
|
3694
|
+
declare function HeroSection({ title, subtitle, searchPlaceholder, backgroundImage }: HeroSectionProps): react_jsx_runtime.JSX.Element;
|
|
3695
|
+
|
|
3696
|
+
interface HeroDarkWithImageProps {
|
|
3697
|
+
title?: string;
|
|
3698
|
+
subtitle?: string;
|
|
3699
|
+
searchPlaceholder?: string;
|
|
3700
|
+
image?: string;
|
|
3701
|
+
}
|
|
3702
|
+
declare function HeroDarkWithImage({ title, subtitle, searchPlaceholder, image }: HeroDarkWithImageProps): react_jsx_runtime.JSX.Element;
|
|
3703
|
+
|
|
3704
|
+
interface HeroDarkCenteredProps {
|
|
3705
|
+
title?: string;
|
|
3706
|
+
subtitle?: string;
|
|
3707
|
+
}
|
|
3708
|
+
declare function HeroDarkCentered({ title, subtitle, }: HeroDarkCenteredProps): react_jsx_runtime.JSX.Element;
|
|
3709
|
+
|
|
3710
|
+
interface HeroFullwidthImageProps {
|
|
3711
|
+
title?: string;
|
|
3712
|
+
subtitle?: string;
|
|
3713
|
+
backgroundImage?: string;
|
|
3714
|
+
}
|
|
3715
|
+
declare function HeroFullwidthImage({ title, subtitle, backgroundImage }: HeroFullwidthImageProps): react_jsx_runtime.JSX.Element;
|
|
3716
|
+
|
|
3717
|
+
interface DestinationCard {
|
|
3718
|
+
id: string;
|
|
3719
|
+
name: string;
|
|
3720
|
+
count: string;
|
|
3721
|
+
price: string;
|
|
3722
|
+
image: string;
|
|
3723
|
+
}
|
|
3724
|
+
interface DestinationCardsProps {
|
|
3725
|
+
title: string;
|
|
3726
|
+
destinations: DestinationCard[];
|
|
3727
|
+
onExploreMore?: () => void;
|
|
3728
|
+
}
|
|
3729
|
+
declare function DestinationCards({ title, destinations, onExploreMore }: Partial<DestinationCardsProps>): react_jsx_runtime.JSX.Element;
|
|
3730
|
+
|
|
3731
|
+
declare function FeaturedPlaces(): react_jsx_runtime.JSX.Element;
|
|
3732
|
+
|
|
3733
|
+
interface FeatureItem {
|
|
3734
|
+
id: string;
|
|
3735
|
+
title: string;
|
|
3736
|
+
description: string;
|
|
3737
|
+
icon: React.ReactNode;
|
|
3738
|
+
}
|
|
3739
|
+
interface HowItWorksProps {
|
|
3740
|
+
variant?: "light" | "dark";
|
|
3741
|
+
features?: FeatureItem[];
|
|
3742
|
+
}
|
|
3743
|
+
declare function HowItWorks({ variant, features }: HowItWorksProps): react_jsx_runtime.JSX.Element;
|
|
3744
|
+
|
|
3745
|
+
interface CategoryItem {
|
|
3746
|
+
id: string;
|
|
3747
|
+
title: string;
|
|
3748
|
+
count: string;
|
|
3749
|
+
icon: React.ReactNode;
|
|
3750
|
+
}
|
|
3751
|
+
interface CategoryGridProps {
|
|
3752
|
+
title?: string;
|
|
3753
|
+
categories?: CategoryItem[];
|
|
3754
|
+
}
|
|
3755
|
+
declare function CategoryGrid({ title, categories }: CategoryGridProps): react_jsx_runtime.JSX.Element;
|
|
3756
|
+
|
|
3757
|
+
interface Testimonial {
|
|
3758
|
+
id: string;
|
|
3759
|
+
quote: string;
|
|
3760
|
+
highlightedWords?: string[];
|
|
3761
|
+
author: string;
|
|
3762
|
+
location: string;
|
|
3763
|
+
image: string;
|
|
3764
|
+
}
|
|
3765
|
+
interface TestimonialCarouselProps {
|
|
3766
|
+
testimonials?: Testimonial[];
|
|
3767
|
+
}
|
|
3768
|
+
declare function TestimonialCarousel({ testimonials }: TestimonialCarouselProps): react_jsx_runtime.JSX.Element;
|
|
3769
|
+
|
|
3770
|
+
interface StepItem {
|
|
3771
|
+
id: string;
|
|
3772
|
+
title: string;
|
|
3773
|
+
description: string;
|
|
3774
|
+
icon: React.ReactNode;
|
|
3775
|
+
}
|
|
3776
|
+
interface VerticalHowItWorksProps {
|
|
3777
|
+
variant?: "light" | "dark";
|
|
3778
|
+
subtitle?: string;
|
|
3779
|
+
title?: string;
|
|
3780
|
+
description?: string;
|
|
3781
|
+
steps?: StepItem[];
|
|
3782
|
+
image?: string;
|
|
3783
|
+
}
|
|
3784
|
+
declare function VerticalHowItWorks({ variant, subtitle, title, description, steps, image }: VerticalHowItWorksProps): react_jsx_runtime.JSX.Element;
|
|
3785
|
+
|
|
3786
|
+
interface GallerySectionProps {
|
|
3787
|
+
variant?: "light" | "dark";
|
|
3788
|
+
subtitle?: string;
|
|
3789
|
+
title?: string;
|
|
3790
|
+
description1?: string;
|
|
3791
|
+
description2?: string;
|
|
3792
|
+
images?: string[];
|
|
3793
|
+
}
|
|
3794
|
+
declare function GallerySection({ variant, subtitle, title, description1, description2, images, }: GallerySectionProps): react_jsx_runtime.JSX.Element;
|
|
3795
|
+
|
|
3796
|
+
interface FeatureBenefit {
|
|
3797
|
+
id: string;
|
|
3798
|
+
text: string;
|
|
3799
|
+
}
|
|
3800
|
+
interface FeatureWithImageProps {
|
|
3801
|
+
title?: string;
|
|
3802
|
+
description?: string;
|
|
3803
|
+
benefits?: FeatureBenefit[];
|
|
3804
|
+
ctaText?: string;
|
|
3805
|
+
onCtaClick?: () => void;
|
|
3806
|
+
image?: string;
|
|
3807
|
+
imagePosition?: "left" | "right";
|
|
3808
|
+
}
|
|
3809
|
+
declare function FeatureWithImage({ title, description, benefits, ctaText, onCtaClick, image, imagePosition, }: FeatureWithImageProps): react_jsx_runtime.JSX.Element;
|
|
3810
|
+
|
|
3811
|
+
interface SocialProofProps {
|
|
3812
|
+
label?: string;
|
|
3813
|
+
logos?: {
|
|
3814
|
+
name: string;
|
|
3815
|
+
width: number;
|
|
3816
|
+
}[];
|
|
3817
|
+
}
|
|
3818
|
+
declare function SocialProof({ label, logos, }: SocialProofProps): react_jsx_runtime.JSX.Element;
|
|
3819
|
+
|
|
3820
|
+
interface Review {
|
|
3821
|
+
id: string;
|
|
3822
|
+
quote: string;
|
|
3823
|
+
author: string;
|
|
3824
|
+
location: string;
|
|
3825
|
+
avatar: string;
|
|
3826
|
+
}
|
|
3827
|
+
interface ReviewsGridProps {
|
|
3828
|
+
title?: string;
|
|
3829
|
+
subtitle?: string;
|
|
3830
|
+
reviews?: Review[];
|
|
3831
|
+
}
|
|
3832
|
+
declare function ReviewsGrid({ title, subtitle, reviews }: ReviewsGridProps): react_jsx_runtime.JSX.Element;
|
|
3833
|
+
|
|
3834
|
+
interface BlogPost {
|
|
3835
|
+
id: string;
|
|
3836
|
+
title: string;
|
|
3837
|
+
description: string;
|
|
3838
|
+
image: string;
|
|
3839
|
+
}
|
|
3840
|
+
interface BlogCardsProps {
|
|
3841
|
+
subtitle?: string;
|
|
3842
|
+
title?: string;
|
|
3843
|
+
posts?: BlogPost[];
|
|
3844
|
+
}
|
|
3845
|
+
declare function BlogCards({ subtitle, title, posts, }: BlogCardsProps): react_jsx_runtime.JSX.Element;
|
|
3846
|
+
|
|
3847
|
+
interface CtaBannerProps {
|
|
3848
|
+
title?: string;
|
|
3849
|
+
buttonText?: string;
|
|
3850
|
+
onButtonClick?: () => void;
|
|
3851
|
+
}
|
|
3852
|
+
declare function CtaBanner({ title, buttonText, onButtonClick }: CtaBannerProps): react_jsx_runtime.JSX.Element;
|
|
3853
|
+
|
|
3854
|
+
interface FooterNavbarProps {
|
|
3855
|
+
companyName?: string;
|
|
3856
|
+
}
|
|
3857
|
+
declare function FooterNavbar({ companyName }: FooterNavbarProps): react_jsx_runtime.JSX.Element;
|
|
3858
|
+
|
|
3859
|
+
interface CenteredHeroProps {
|
|
3860
|
+
title?: string;
|
|
3861
|
+
subtitle?: string;
|
|
3862
|
+
image?: string;
|
|
3863
|
+
}
|
|
3864
|
+
declare function CenteredHero({ title, subtitle, image, }: CenteredHeroProps): react_jsx_runtime.JSX.Element;
|
|
3865
|
+
|
|
3866
|
+
interface Metric {
|
|
3867
|
+
value: string;
|
|
3868
|
+
label: string;
|
|
3869
|
+
}
|
|
3870
|
+
interface MetricsSectionProps {
|
|
3871
|
+
subtitle?: string;
|
|
3872
|
+
title?: string;
|
|
3873
|
+
metrics?: Metric[];
|
|
3874
|
+
}
|
|
3875
|
+
declare function MetricsSection({ subtitle, title, metrics, }: MetricsSectionProps): react_jsx_runtime.JSX.Element;
|
|
3876
|
+
|
|
3877
|
+
interface Value {
|
|
3878
|
+
icon: ReactNode;
|
|
3879
|
+
title: string;
|
|
3880
|
+
description: string;
|
|
3881
|
+
}
|
|
3882
|
+
interface CoreValuesGridProps {
|
|
3883
|
+
variant?: "light" | "dark";
|
|
3884
|
+
subtitle?: string;
|
|
3885
|
+
title?: string;
|
|
3886
|
+
description?: string;
|
|
3887
|
+
values?: Value[];
|
|
3888
|
+
}
|
|
3889
|
+
declare function CoreValuesGrid({ variant, subtitle, title, description, values, }: CoreValuesGridProps): react_jsx_runtime.JSX.Element;
|
|
3890
|
+
|
|
3891
|
+
interface ContentWithImageProps {
|
|
3892
|
+
subtitle?: string;
|
|
3893
|
+
title?: string;
|
|
3894
|
+
description?: string;
|
|
3895
|
+
image?: string;
|
|
3896
|
+
imagePosition?: "left" | "right";
|
|
3897
|
+
}
|
|
3898
|
+
declare function ContentWithImage({ subtitle, title, description, image, imagePosition, }: ContentWithImageProps): react_jsx_runtime.JSX.Element;
|
|
3899
|
+
|
|
3900
|
+
interface TeamMember$1 {
|
|
3901
|
+
name: string;
|
|
3902
|
+
role: string;
|
|
3903
|
+
image: string;
|
|
3904
|
+
linkedIn?: string;
|
|
3905
|
+
twitter?: string;
|
|
3906
|
+
}
|
|
3907
|
+
interface TeamCardsGridProps {
|
|
3908
|
+
subtitle?: string;
|
|
3909
|
+
title?: string;
|
|
3910
|
+
description?: string;
|
|
3911
|
+
members?: TeamMember$1[];
|
|
3912
|
+
}
|
|
3913
|
+
declare function TeamCardsGrid({ subtitle, title, description, members, }: TeamCardsGridProps): react_jsx_runtime.JSX.Element;
|
|
3914
|
+
|
|
3915
|
+
interface TeamMember {
|
|
3916
|
+
name: string;
|
|
3917
|
+
role: string;
|
|
3918
|
+
image: string;
|
|
3919
|
+
linkedIn?: string;
|
|
3920
|
+
twitter?: string;
|
|
3921
|
+
}
|
|
3922
|
+
interface TeamCircularGridProps {
|
|
3923
|
+
subtitle?: string;
|
|
3924
|
+
title?: string;
|
|
3925
|
+
description?: string;
|
|
3926
|
+
members?: TeamMember[];
|
|
3927
|
+
}
|
|
3928
|
+
declare function TeamCircularGrid({ subtitle, title, description, members, }: TeamCircularGridProps): react_jsx_runtime.JSX.Element;
|
|
3929
|
+
|
|
3930
|
+
interface NewsItem {
|
|
3931
|
+
title: string;
|
|
3932
|
+
description: string;
|
|
3933
|
+
image: string;
|
|
3934
|
+
href?: string;
|
|
3935
|
+
}
|
|
3936
|
+
interface FeaturedNewsCardsProps {
|
|
3937
|
+
variant?: "light" | "dark";
|
|
3938
|
+
subtitle?: string;
|
|
3939
|
+
title?: string;
|
|
3940
|
+
description?: string;
|
|
3941
|
+
items?: NewsItem[];
|
|
3942
|
+
}
|
|
3943
|
+
declare function FeaturedNewsCards({ variant, subtitle, title, description, items, }: FeaturedNewsCardsProps): react_jsx_runtime.JSX.Element;
|
|
3944
|
+
|
|
3945
|
+
interface Office {
|
|
3946
|
+
city: string;
|
|
3947
|
+
address: string[];
|
|
3948
|
+
}
|
|
3949
|
+
interface OfficeLocationsProps {
|
|
3950
|
+
subtitle?: string;
|
|
3951
|
+
title?: string;
|
|
3952
|
+
description?: string;
|
|
3953
|
+
offices?: Office[];
|
|
3954
|
+
}
|
|
3955
|
+
declare function OfficeLocations({ subtitle, title, description, offices, }: OfficeLocationsProps): react_jsx_runtime.JSX.Element;
|
|
3956
|
+
|
|
3957
|
+
declare function PricingCards(): react_jsx_runtime.JSX.Element;
|
|
3958
|
+
|
|
3959
|
+
declare function FeaturesComparison(): react_jsx_runtime.JSX.Element;
|
|
3960
|
+
|
|
3961
|
+
declare function FaqAccordion(): react_jsx_runtime.JSX.Element;
|
|
3962
|
+
|
|
3963
|
+
interface PricingCtaProps {
|
|
3964
|
+
title?: string;
|
|
3965
|
+
primaryButtonText?: string;
|
|
3966
|
+
secondaryButtonText?: string;
|
|
3967
|
+
onPrimaryClick?: () => void;
|
|
3968
|
+
onSecondaryClick?: () => void;
|
|
3969
|
+
}
|
|
3970
|
+
declare function PricingCta({ title, primaryButtonText, secondaryButtonText, onPrimaryClick, onSecondaryClick, }: PricingCtaProps): react_jsx_runtime.JSX.Element;
|
|
3971
|
+
|
|
3972
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
3973
|
+
|
|
3974
|
+
/**
|
|
3975
|
+
* Canvas Design System - Theme Defaults
|
|
3976
|
+
*
|
|
3977
|
+
* This file contains all default values for the design system.
|
|
3978
|
+
* These are used by:
|
|
3979
|
+
* - The Reset button in the Design Variables drawer
|
|
3980
|
+
* - Initial state when no saved theme exists
|
|
3981
|
+
*
|
|
3982
|
+
* Keep these in sync with globals.css CSS variable defaults.
|
|
3983
|
+
*/
|
|
3984
|
+
declare const colorVariables: {
|
|
3985
|
+
category: string;
|
|
3986
|
+
variables: {
|
|
3987
|
+
name: string;
|
|
3988
|
+
default: string;
|
|
3989
|
+
label: string;
|
|
3990
|
+
}[];
|
|
3991
|
+
}[];
|
|
3992
|
+
declare const allColorVariables: {
|
|
3993
|
+
name: string;
|
|
3994
|
+
default: string;
|
|
3995
|
+
label: string;
|
|
3996
|
+
}[];
|
|
3997
|
+
declare const defaultColors: Record<string, string>;
|
|
3998
|
+
type IconShapeId$1 = "rounded" | "circle" | "square";
|
|
3999
|
+
declare const defaultBranding: {
|
|
4000
|
+
iconShape: IconShapeId$1;
|
|
4001
|
+
iconName: string;
|
|
4002
|
+
bgColor: string;
|
|
4003
|
+
iconColor: string;
|
|
4004
|
+
wordmark: string;
|
|
4005
|
+
};
|
|
4006
|
+
type ImageKey = "logoLight" | "logoDark" | "faviconLight" | "faviconDark";
|
|
4007
|
+
declare const defaultImages: Record<ImageKey, string>;
|
|
4008
|
+
declare const defaultTypography: Record<string, string>;
|
|
4009
|
+
declare const defaultButtonSizes: Record<string, string>;
|
|
4010
|
+
declare const defaultButtonColorStyles: {
|
|
4011
|
+
id: string;
|
|
4012
|
+
label: string;
|
|
4013
|
+
description: string;
|
|
4014
|
+
isDefault: boolean;
|
|
4015
|
+
}[];
|
|
4016
|
+
interface CustomButtonStyle {
|
|
4017
|
+
id: string;
|
|
4018
|
+
label: string;
|
|
4019
|
+
description: string;
|
|
4020
|
+
bg: string;
|
|
4021
|
+
text: string;
|
|
4022
|
+
border: string;
|
|
4023
|
+
bgHover: string;
|
|
4024
|
+
textHover: string;
|
|
4025
|
+
borderHover: string;
|
|
4026
|
+
}
|
|
4027
|
+
declare const defaultCustomButtonStyles: CustomButtonStyle[];
|
|
4028
|
+
declare const defaultButtonColors: Record<string, string>;
|
|
4029
|
+
declare const defaultInputSizes: Record<string, string>;
|
|
4030
|
+
|
|
4031
|
+
/**
|
|
4032
|
+
* Component Registry
|
|
4033
|
+
*
|
|
4034
|
+
* A lightweight reference for AI assistants to understand available components
|
|
4035
|
+
* without reading all source files. Check this file first when working on
|
|
4036
|
+
* page templates, blocks, or layouts.
|
|
4037
|
+
*
|
|
4038
|
+
* Each component entry includes:
|
|
4039
|
+
* - path: Import path for the component
|
|
4040
|
+
* - description: Brief explanation of what the component does
|
|
4041
|
+
* - props: Key props (not exhaustive, see source for full interface)
|
|
4042
|
+
*/
|
|
4043
|
+
declare const layoutShells: {
|
|
4044
|
+
readonly DashboardShell: {
|
|
4045
|
+
readonly path: "@/components/layout";
|
|
4046
|
+
readonly description: "Main dashboard layout with dark sidebar (320px) and fixed header. Sidebar has collapsible sections with nav items.";
|
|
4047
|
+
readonly props: readonly ["navigation: NavSection[]", "pageHeader?", "children", "onNavItemClick?"];
|
|
4048
|
+
};
|
|
4049
|
+
readonly IconSidebarShell: {
|
|
4050
|
+
readonly path: "@/components/layout";
|
|
4051
|
+
readonly description: "Layout with narrow icon-only sidebar (96px). Good for apps with few main sections.";
|
|
4052
|
+
readonly props: readonly ["navigation?: IconNavItemConfig[]", "pageHeader?", "children", "onNavItemClick?"];
|
|
4053
|
+
};
|
|
4054
|
+
readonly DoubleSidebarShell: {
|
|
4055
|
+
readonly path: "@/components/layout";
|
|
4056
|
+
readonly description: "Two-column sidebar layout (96px icons + 280px nav). Each column can be light/dark themed independently.";
|
|
4057
|
+
readonly props: readonly ["sections?: DoubleSidebarSection[]", "iconVariant?", "navVariant?", "children", "onTabClick?"];
|
|
4058
|
+
};
|
|
4059
|
+
readonly StandardPageShell: {
|
|
4060
|
+
readonly path: "@/components/layout";
|
|
4061
|
+
readonly description: "No-sidebar layout with centered content (max 992px). Has optional flair banner and page header with tabs.";
|
|
4062
|
+
readonly props: readonly ["bannerTitle?", "pageTitle?", "tabs?", "activeTab?", "showBanner?", "showTabs?", "children"];
|
|
4063
|
+
};
|
|
4064
|
+
readonly AccountSettingsShell: {
|
|
4065
|
+
readonly path: "@/components/layout";
|
|
4066
|
+
readonly description: "Settings page layout with left sidebar navigation (Profile, Security, Payments, Notifications tabs).";
|
|
4067
|
+
readonly props: readonly ["activeTab?: AccountTab", "onTabChange?", "pageTitle?", "children"];
|
|
4068
|
+
};
|
|
4069
|
+
readonly MultistepShell: {
|
|
4070
|
+
readonly path: "@/components/layout";
|
|
4071
|
+
readonly description: "Multi-step wizard layout with horizontal step tracker, step title/description, and navigation buttons.";
|
|
4072
|
+
readonly props: readonly ["steps?: Step[]", "currentStep?", "onStepClick?", "onCancel?", "onContinue?", "children"];
|
|
4073
|
+
};
|
|
4074
|
+
readonly MultistepSidebarShell: {
|
|
4075
|
+
readonly path: "@/components/layout";
|
|
4076
|
+
readonly description: "Multi-step wizard with sidebar step list instead of horizontal tracker.";
|
|
4077
|
+
readonly props: readonly ["steps?: Step[]", "currentStep?", "children"];
|
|
4078
|
+
};
|
|
4079
|
+
readonly MultistepProgressBarShell: {
|
|
4080
|
+
readonly path: "@/components/layout";
|
|
4081
|
+
readonly description: "Multi-step wizard with a horizontal progress bar at top.";
|
|
4082
|
+
readonly props: readonly ["steps?: MultistepProgressBarStep[]", "currentStep?", "children"];
|
|
4083
|
+
};
|
|
4084
|
+
readonly VerticalMultistepShell: {
|
|
4085
|
+
readonly path: "@/components/layout";
|
|
4086
|
+
readonly description: "Multi-step wizard with vertical step tracker on the left side.";
|
|
4087
|
+
readonly props: readonly ["steps?: Step[]", "currentStep?", "children"];
|
|
4088
|
+
};
|
|
4089
|
+
readonly MobileMenuShell: {
|
|
4090
|
+
readonly path: "@/components/layout";
|
|
4091
|
+
readonly description: "Mobile-first layout with bottom navigation bar. Good for mobile app-like experiences.";
|
|
4092
|
+
readonly props: readonly ["children", "bottomNavItems?"];
|
|
4093
|
+
};
|
|
4094
|
+
readonly SearchBarShell: {
|
|
4095
|
+
readonly path: "@/components/layout";
|
|
4096
|
+
readonly description: "Layout with prominent search bar in header area.";
|
|
4097
|
+
readonly props: readonly ["children", "onSearch?"];
|
|
4098
|
+
};
|
|
4099
|
+
};
|
|
4100
|
+
declare const layoutPrimitives: {
|
|
4101
|
+
readonly Header: {
|
|
4102
|
+
readonly path: "@/components/layout";
|
|
4103
|
+
readonly description: "Top navigation bar with logo, nav links, icon cluster (search, notifications, messages, cart), and avatar dropdown.";
|
|
4104
|
+
readonly props: readonly ["onMenuClick?", "showDesktopLogo?", "variant?: 'light' | 'dark'", "navItems?", "showAuthButtons?"];
|
|
4105
|
+
};
|
|
4106
|
+
readonly Sidebar: {
|
|
4107
|
+
readonly path: "@/components/layout";
|
|
4108
|
+
readonly description: "Dark or light sidebar with logo and collapsible nav sections. Used inside DashboardShell.";
|
|
4109
|
+
readonly props: readonly ["sections: NavSection[]", "variant?: 'dark' | 'light'", "onItemClick?"];
|
|
4110
|
+
};
|
|
4111
|
+
readonly SidebarNav: {
|
|
4112
|
+
readonly path: "@/components/layout";
|
|
4113
|
+
readonly description: "Navigation items component used inside Sidebar. Handles section titles and item rendering.";
|
|
4114
|
+
readonly props: readonly ["sections: NavSection[]", "variant?", "onItemClick?"];
|
|
4115
|
+
};
|
|
4116
|
+
readonly IconSidebar: {
|
|
4117
|
+
readonly path: "@/components/layout";
|
|
4118
|
+
readonly description: "Narrow sidebar with only icons and tooltips. Used inside IconSidebarShell.";
|
|
4119
|
+
readonly props: readonly ["items?: IconNavItemConfig[]", "variant?", "onItemClick?"];
|
|
4120
|
+
};
|
|
4121
|
+
readonly DoubleSidebar: {
|
|
4122
|
+
readonly path: "@/components/layout";
|
|
4123
|
+
readonly description: "Two-column sidebar with icon strip and nav panel. Used inside DoubleSidebarShell.";
|
|
4124
|
+
readonly props: readonly ["sections?", "iconVariant?", "navVariant?", "onTabClick?"];
|
|
4125
|
+
};
|
|
4126
|
+
};
|
|
4127
|
+
declare const blocks: {
|
|
4128
|
+
readonly ActivityFeed: {
|
|
4129
|
+
readonly path: "@/components/blocks";
|
|
4130
|
+
readonly description: "Timeline-style activity feed showing user actions, comments, and file attachments with connecting lines. Supports status changes, comments with reactions, and file attachments.";
|
|
4131
|
+
readonly props: readonly ["title?", "subtitle?", "items?: ActivityItem[]", "onLike?", "onReply?", "onAttachmentClick?"];
|
|
4132
|
+
};
|
|
4133
|
+
readonly CircularProgressBarList: {
|
|
4134
|
+
readonly path: "@/components/blocks";
|
|
4135
|
+
readonly description: "List block with circular progress indicators showing completion percentages. Features header with sort/filter controls and item action menus.";
|
|
4136
|
+
readonly props: readonly ["title?", "items?: ProgressListItem[]", "sortOptions?", "filterOptions?", "onSort?", "onFilter?", "onItemAction?"];
|
|
4137
|
+
};
|
|
4138
|
+
readonly CircularProgressBar: {
|
|
4139
|
+
readonly path: "@/components/blocks";
|
|
4140
|
+
readonly description: "SVG-based circular progress indicator showing a percentage value. Can be used standalone or within CircularProgressBarList.";
|
|
4141
|
+
readonly props: readonly ["progress: number", "size?", "strokeWidth?", "className?"];
|
|
4142
|
+
};
|
|
4143
|
+
readonly FaqsTable: {
|
|
4144
|
+
readonly path: "@/components/blocks";
|
|
4145
|
+
readonly description: "Expandable FAQ list with accordion behavior. Shows questions with plus/minus toggle icons, revealing answers one at a time.";
|
|
4146
|
+
readonly props: readonly ["title?", "items?: FAQItem[]", "defaultExpandedId?", "className?"];
|
|
4147
|
+
};
|
|
4148
|
+
readonly StandardDataTable: {
|
|
4149
|
+
readonly path: "@/components/blocks";
|
|
4150
|
+
readonly description: "Data table with title, result count, sort/filter dropdowns, and action button. Rows have avatar + name/email/title/role columns.";
|
|
4151
|
+
readonly props: readonly ["title?", "data?: TableRow[]", "columns?", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?"];
|
|
4152
|
+
};
|
|
4153
|
+
readonly FixedColumnDataTable: {
|
|
4154
|
+
readonly path: "@/components/blocks";
|
|
4155
|
+
readonly description: "Data table with fixed first column (Name with avatar) that stays visible during horizontal scroll. Ideal for invoice-style tables with columns: Amount, Status badge, Logo, Company, Date Sent.";
|
|
4156
|
+
readonly props: readonly ["title?", "data?: FixedColumnTableRow[]", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?", "onRowAction?"];
|
|
4157
|
+
};
|
|
4158
|
+
readonly NestedDataTable: {
|
|
4159
|
+
readonly path: "@/components/blocks";
|
|
4160
|
+
readonly description: "Expandable data table with parent rows that reveal nested child tables. Shows hierarchical data like locations with employees.";
|
|
4161
|
+
readonly props: readonly ["title?", "data?: ParentRow[]", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?", "onRowAction?", "onChildAction?"];
|
|
4162
|
+
};
|
|
4163
|
+
readonly ReviewsTable: {
|
|
4164
|
+
readonly path: "@/components/blocks";
|
|
4165
|
+
readonly description: "Review listing with user avatars, star ratings, dates, and expandable text. Includes sort/filter dropdowns and action button.";
|
|
4166
|
+
readonly props: readonly ["title?", "reviews?: ReviewItem[]", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?", "onReadMore?"];
|
|
4167
|
+
};
|
|
4168
|
+
readonly MessengerSidebar: {
|
|
4169
|
+
readonly path: "@/components/blocks";
|
|
4170
|
+
readonly description: "Thread list sidebar for messaging with search, avatars, timestamps, and unread badges.";
|
|
4171
|
+
readonly props: readonly ["selectedThreadId?", "onSelectThread?", "className?"];
|
|
4172
|
+
};
|
|
4173
|
+
readonly ChatBubble: {
|
|
4174
|
+
readonly path: "@/components/blocks";
|
|
4175
|
+
readonly description: "Single chat message bubble. Sent messages align right with primary color, received align left with avatar.";
|
|
4176
|
+
readonly props: readonly ["message: ChatBubbleMessage"];
|
|
4177
|
+
};
|
|
4178
|
+
readonly ChatDateSeparator: {
|
|
4179
|
+
readonly path: "@/components/blocks";
|
|
4180
|
+
readonly description: "Date separator line between chat messages (e.g., 'Jan 25, 2024').";
|
|
4181
|
+
readonly props: readonly ["date: string"];
|
|
4182
|
+
};
|
|
4183
|
+
readonly MessengerInput: {
|
|
4184
|
+
readonly path: "@/components/blocks";
|
|
4185
|
+
readonly description: "Chat input with textarea, attachment pills, file upload button, and send button.";
|
|
4186
|
+
readonly props: readonly ["attachments?", "onRemoveAttachment?", "onSend?"];
|
|
4187
|
+
};
|
|
4188
|
+
readonly ProfileCard: {
|
|
4189
|
+
readonly path: "@/components/blocks";
|
|
4190
|
+
readonly description: "Centered profile card with avatar overlapping banner, stats, bio, tags, and social links.";
|
|
4191
|
+
readonly props: readonly ["name", "username", "avatarUrl?", "rating?", "location?", "stats?", "bio?", "tags?", "socialLinks?"];
|
|
4192
|
+
};
|
|
4193
|
+
readonly StepTracker: {
|
|
4194
|
+
readonly path: "@/components/blocks";
|
|
4195
|
+
readonly description: "Horizontal multi-step progress indicator with numbered circles and connecting lines.";
|
|
4196
|
+
readonly props: readonly ["steps: Step[]", "currentStep: number", "onStepClick?"];
|
|
4197
|
+
};
|
|
4198
|
+
readonly VerticalStepTracker: {
|
|
4199
|
+
readonly path: "@/components/blocks";
|
|
4200
|
+
readonly description: "Vertical step tracker for sidebar placement in multi-step flows.";
|
|
4201
|
+
readonly props: readonly ["steps: Step[]", "currentStep: number", "onStepClick?"];
|
|
4202
|
+
};
|
|
4203
|
+
readonly ProgressBar: {
|
|
4204
|
+
readonly path: "@/components/blocks";
|
|
4205
|
+
readonly description: "Horizontal progress bar. Can use percentage or currentStep/totalSteps.";
|
|
4206
|
+
readonly props: readonly ["progress?", "currentStep?", "totalSteps?"];
|
|
4207
|
+
};
|
|
4208
|
+
readonly FlairBanner: {
|
|
4209
|
+
readonly path: "@/components/blocks";
|
|
4210
|
+
readonly description: "Dark blue hero banner with large title text. Used at top of pages.";
|
|
4211
|
+
readonly props: readonly ["title: string"];
|
|
4212
|
+
};
|
|
4213
|
+
readonly Loader: {
|
|
4214
|
+
readonly path: "@/components/blocks";
|
|
4215
|
+
readonly description: "Loading feedback component with animated spinner (loading state) and checkmark (success state). Includes title, description, and optional action button.";
|
|
4216
|
+
readonly props: readonly ["state?: 'loading' | 'success'", "title?", "description?", "buttonText?", "onButtonClick?", "className?"];
|
|
4217
|
+
};
|
|
4218
|
+
readonly GradientBanner: {
|
|
4219
|
+
readonly path: "@/components/blocks";
|
|
4220
|
+
readonly description: "Banner with gradient background. Alternative to FlairBanner.";
|
|
4221
|
+
readonly props: readonly ["title?", "subtitle?"];
|
|
4222
|
+
};
|
|
4223
|
+
readonly PageHeaderSection: {
|
|
4224
|
+
readonly path: "@/components/blocks";
|
|
4225
|
+
readonly description: "Page title, description, and optional line tabs. Used below banners.";
|
|
4226
|
+
readonly props: readonly ["title", "description?", "tabs?", "activeTab?", "onTabChange?", "showTabs?"];
|
|
4227
|
+
};
|
|
4228
|
+
readonly SearchBar: {
|
|
4229
|
+
readonly path: "@/components/blocks";
|
|
4230
|
+
readonly description: "Prominent search input with icon.";
|
|
4231
|
+
readonly props: readonly ["placeholder?", "value?", "onChange?", "onSearch?"];
|
|
4232
|
+
};
|
|
4233
|
+
readonly SearchSidebar: {
|
|
4234
|
+
readonly path: "@/components/blocks";
|
|
4235
|
+
readonly description: "Sidebar with search results or filters.";
|
|
4236
|
+
readonly props: readonly ["results?", "onResultClick?"];
|
|
4237
|
+
};
|
|
4238
|
+
readonly FilterPopover: {
|
|
4239
|
+
readonly path: "@/components/blocks";
|
|
4240
|
+
readonly description: "Popover with filter controls (checkboxes, date ranges, etc.).";
|
|
4241
|
+
readonly props: readonly ["filters?", "onApply?", "onReset?"];
|
|
4242
|
+
};
|
|
4243
|
+
readonly MenuSection: {
|
|
4244
|
+
readonly path: "@/components/blocks";
|
|
4245
|
+
readonly description: "Section within sidebar navigation with title and items.";
|
|
4246
|
+
readonly props: readonly ["title?", "items: NavItem[]"];
|
|
4247
|
+
};
|
|
4248
|
+
readonly MenufocusTemplate: {
|
|
4249
|
+
readonly path: "@/components/blocks";
|
|
4250
|
+
readonly description: "Dropdown menu with trigger button (three dots). Used for row actions in tables.";
|
|
4251
|
+
readonly props: readonly ["items: MenuItem[]", "ariaLabel?"];
|
|
4252
|
+
};
|
|
4253
|
+
readonly SidebarCards: {
|
|
4254
|
+
readonly path: "@/components/blocks";
|
|
4255
|
+
readonly description: "Card list for sidebar showing items with images/titles.";
|
|
4256
|
+
readonly props: readonly ["cards: SidebarCard[]", "onCardClick?"];
|
|
4257
|
+
};
|
|
4258
|
+
readonly SidebarProfileCard: {
|
|
4259
|
+
readonly path: "@/components/blocks";
|
|
4260
|
+
readonly description: "Compact profile card for sidebar with avatar and key info.";
|
|
4261
|
+
readonly props: readonly ["name", "role?", "avatarUrl?"];
|
|
4262
|
+
};
|
|
4263
|
+
readonly ProfileInfoCards: {
|
|
4264
|
+
readonly path: "@/components/blocks";
|
|
4265
|
+
readonly description: "Grid of info cards for profile pages (contact, stats, etc.).";
|
|
4266
|
+
readonly props: readonly ["cards: InfoCard[]"];
|
|
4267
|
+
};
|
|
4268
|
+
readonly ProfileImageUploader: {
|
|
4269
|
+
readonly path: "@/components/blocks";
|
|
4270
|
+
readonly description: "Avatar upload component with preview and edit button.";
|
|
4271
|
+
readonly props: readonly ["currentImage?", "onUpload?"];
|
|
4272
|
+
};
|
|
4273
|
+
readonly SettingsListRow: {
|
|
4274
|
+
readonly path: "@/components/blocks";
|
|
4275
|
+
readonly description: "Row item for settings lists with label, value, and edit action.";
|
|
4276
|
+
readonly props: readonly ["label", "value?", "onEdit?"];
|
|
4277
|
+
};
|
|
4278
|
+
readonly CreditCardDisplay: {
|
|
4279
|
+
readonly path: "@/components/blocks";
|
|
4280
|
+
readonly description: "Visual credit card display showing card details.";
|
|
4281
|
+
readonly props: readonly ["cardNumber?", "cardHolder?", "expiry?", "type?"];
|
|
4282
|
+
};
|
|
4283
|
+
readonly PillTabs: {
|
|
4284
|
+
readonly path: "@/components/blocks";
|
|
4285
|
+
readonly description: "Horizontal pill-style tab navigation.";
|
|
4286
|
+
readonly props: readonly ["tabs: Tab[]", "activeTab?", "onTabChange?"];
|
|
4287
|
+
};
|
|
4288
|
+
readonly LoginBrandingPanel: {
|
|
4289
|
+
readonly path: "@/components/blocks";
|
|
4290
|
+
readonly description: "Branding side panel for login/signup pages with logo and background.";
|
|
4291
|
+
readonly props: readonly ["backgroundImage?", "logo?"];
|
|
4292
|
+
};
|
|
4293
|
+
readonly ContentDropzone: {
|
|
4294
|
+
readonly path: "@/components/blocks";
|
|
4295
|
+
readonly description: "Placeholder dropzone for content areas during development.";
|
|
4296
|
+
readonly props: readonly ["label?", "className?"];
|
|
4297
|
+
};
|
|
4298
|
+
readonly UpvotingPostsTable: {
|
|
4299
|
+
readonly path: "@/components/blocks";
|
|
4300
|
+
readonly description: "Social feed with upvoting posts, comments, and nested replies. Features header with sort/filter controls.";
|
|
4301
|
+
readonly props: readonly ["title?", "subtitle?", "posts?: Post[]", "currentUser?", "sortOptions?", "filterOptions?", "actionButtonText?", "onUpvote?", "onComment?", "onReply?", "onLike?"];
|
|
4302
|
+
};
|
|
4303
|
+
readonly NestedCommentsTable: {
|
|
4304
|
+
readonly path: "@/components/blocks";
|
|
4305
|
+
readonly description: "Threaded discussion component with nested comments, reply/like actions, and collapsible threads.";
|
|
4306
|
+
readonly props: readonly ["title?", "subtitle?", "comments?: Comment[]", "currentUser?", "onComment?", "onReply?", "onLike?"];
|
|
4307
|
+
};
|
|
4308
|
+
readonly ImageFeedWithNestedComments: {
|
|
4309
|
+
readonly path: "@/components/blocks";
|
|
4310
|
+
readonly description: "Instagram-style image feed with large images, social interactions (like/comment/share/bookmark), and nested comment threads.";
|
|
4311
|
+
readonly props: readonly ["title?", "subtitle?", "posts?: ImagePost[]", "currentUser?", "onLike?", "onComment?", "onShare?", "onBookmark?", "onReply?", "onCommentLike?"];
|
|
4312
|
+
};
|
|
4313
|
+
readonly MobileBottomNav: {
|
|
4314
|
+
readonly path: "@/components/blocks";
|
|
4315
|
+
readonly description: "Fixed bottom navigation bar for mobile layouts.";
|
|
4316
|
+
readonly props: readonly ["items: BottomNavItem[]", "activeItem?", "onItemClick?"];
|
|
4317
|
+
};
|
|
4318
|
+
readonly MonthlyCalendarWidget: {
|
|
4319
|
+
readonly path: "@/components/blocks";
|
|
4320
|
+
readonly description: "Dual-month calendar for date range selection with price labels, disabled dates, and today indicator. Used for booking and scheduling interfaces.";
|
|
4321
|
+
readonly props: readonly ["title?", "subtitle?", "initialMonth?", "selectedRange?", "disabledDates?", "pricedDates?", "todayDate?", "onDateSelect?", "onRangeChange?", "onConfirm?", "onCancel?"];
|
|
4322
|
+
};
|
|
4323
|
+
readonly BottomInputChatWidget: {
|
|
4324
|
+
readonly path: "@/components/blocks";
|
|
4325
|
+
readonly description: "Slack-style chat widget with message threads list and conversation view. Features bottom input bar with attachment support.";
|
|
4326
|
+
readonly props: readonly ["variant?: 'threads' | 'conversation'", "title?", "threads?", "messages?", "conversationName?", "onThreadClick?", "onBackClick?", "onSend?"];
|
|
4327
|
+
};
|
|
4328
|
+
readonly LargeImageLabelsList: {
|
|
4329
|
+
readonly path: "@/components/blocks";
|
|
4330
|
+
readonly description: "Property-style listing with large images, ratings, prices, and icon labels. Includes header with sort/filter controls.";
|
|
4331
|
+
readonly props: readonly ["title?", "items?: ListItem[]", "sortOptions?", "filterOptions?", "onFavorite?", "onItemClick?"];
|
|
4332
|
+
};
|
|
4333
|
+
readonly SocialFeed: {
|
|
4334
|
+
readonly path: "@/components/blocks";
|
|
4335
|
+
readonly description: "Social media-style feed with post composer, various content types (text, images, video, reposts, link cards), social interactions (like/comment/repost/share), and threaded replies.";
|
|
4336
|
+
readonly props: readonly ["title?", "posts?: SocialFeedPost[]", "currentUser?", "composerPlaceholder?", "composerImagePreview?", "onPost?", "onLike?", "onComment?", "onRepost?", "onShare?"];
|
|
4337
|
+
};
|
|
4338
|
+
readonly StandardListWithImage: {
|
|
4339
|
+
readonly path: "@/components/blocks";
|
|
4340
|
+
readonly description: "Blog/article-style list block with image thumbnails, title, author, date, description, and tags. Includes header with sort/filter controls.";
|
|
4341
|
+
readonly props: readonly ["title?", "subtitle?", "items?: ListItem[]", "sortOptions?", "filterOptions?", "onSort?", "onFilter?", "onItemClick?"];
|
|
4342
|
+
};
|
|
4343
|
+
readonly SlideshowGridTiles: {
|
|
4344
|
+
readonly path: "@/components/blocks";
|
|
4345
|
+
readonly description: "2-column grid of portfolio/slideshow tiles with hover states. Features large images with slideshow navigation, save button, user info with avatar, and engagement stats (likes/views).";
|
|
4346
|
+
readonly props: readonly ["title?", "subtitle?", "items?: SlideshowTileItem[]", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?", "onSort?", "onFilter?", "onSave?", "onItemClick?"];
|
|
4347
|
+
};
|
|
4348
|
+
readonly ProfileGridTilesList: {
|
|
4349
|
+
readonly path: "@/components/blocks";
|
|
4350
|
+
readonly description: "Responsive grid of profile cards with avatar, ratings, certifications, and metadata. Configurable 2-5 columns with mobile responsiveness. Ideal for tutors, team members, or user directories.";
|
|
4351
|
+
readonly props: readonly ["title?", "subtitle?", "items?: ProfileTileItem[]", "columns?: 2|3|4|5", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?", "onSort?", "onFilter?", "onItemClick?"];
|
|
4352
|
+
};
|
|
4353
|
+
readonly GridTilesList: {
|
|
4354
|
+
readonly path: "@/components/blocks";
|
|
4355
|
+
readonly description: "Responsive grid of property/listing tiles with configurable 2-5 columns. Features images, star ratings, prices, favorite buttons, and optional tags. Includes header with sort/filter controls.";
|
|
4356
|
+
readonly props: readonly ["title?", "subtitle?", "columns?: 2|3|4|5", "items?: GridTileItem[]", "sortOptions?", "filterOptions?", "actionButtonText?", "onAddNew?", "onFavorite?", "onItemClick?"];
|
|
4357
|
+
};
|
|
4358
|
+
readonly Pagination: {
|
|
4359
|
+
readonly path: "@/components/blocks";
|
|
4360
|
+
readonly description: "Responsive pagination with results summary, items per page dropdown, and page navigation. Shows 'Viewing X-Y of Z results' on desktop, compact navigation on mobile.";
|
|
4361
|
+
readonly props: readonly ["currentPage?", "totalPages?", "totalItems?", "itemsPerPage?", "itemsPerPageOptions?", "onPageChange?", "onItemsPerPageChange?", "showResultsText?", "showItemsPerPage?", "maxVisiblePages?"];
|
|
4362
|
+
};
|
|
4363
|
+
readonly MetricCard: {
|
|
4364
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4365
|
+
readonly description: "Single KPI card displaying a large value with label and optional change indicator (up/down arrow with color).";
|
|
4366
|
+
readonly props: readonly ["label: string", "value: string", "change?: { value: string, direction: 'up' | 'down' }", "className?"];
|
|
4367
|
+
};
|
|
4368
|
+
readonly MetricCardsRow: {
|
|
4369
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4370
|
+
readonly description: "Horizontal row of 2-4 MetricCard components with automatic flex layout and spacing.";
|
|
4371
|
+
readonly props: readonly ["metrics: MetricCardData[]", "columns?: 2|3|4", "className?"];
|
|
4372
|
+
};
|
|
4373
|
+
readonly LineChartWidget: {
|
|
4374
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4375
|
+
readonly description: "Full-width widget with Chart.js line/area chart. Includes header, value display, and footer actions. Chart colors update live with CSS variables.";
|
|
4376
|
+
readonly props: readonly ["label: string", "value: string", "description?", "chartData?: number[]", "chartLabels?: string[]", "onMenuClick?", "onManageClick?", "onViewDetailsClick?"];
|
|
4377
|
+
};
|
|
4378
|
+
readonly DonutChartWidget: {
|
|
4379
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4380
|
+
readonly description: "Widget with Chart.js doughnut chart and legend metrics grid. Colors mapped to --chart-color-1 through --chart-color-5 CSS variables.";
|
|
4381
|
+
readonly props: readonly ["label: string", "value: string", "description?", "legendItems?: DonutChartLegendItem[]", "onMenuClick?", "onManageClick?", "onViewDetailsClick?"];
|
|
4382
|
+
};
|
|
4383
|
+
readonly MetricListCard: {
|
|
4384
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4385
|
+
readonly description: "Card displaying a list of transactions or metrics with optional date, label, and value columns.";
|
|
4386
|
+
readonly props: readonly ["headerLabel: string", "title: string", "subtitle?", "items: MetricListItem[]", "viewDetailsLabel?", "onMenuClick?", "onManageClick?", "onViewDetailsClick?"];
|
|
4387
|
+
};
|
|
4388
|
+
readonly ProgressMetricCard: {
|
|
4389
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4390
|
+
readonly description: "Card with horizontal progress bars, optional images/sublabels, and value display. Uses --canvas-primary for bar color by default.";
|
|
4391
|
+
readonly props: readonly ["headerLabel: string", "title: string", "subtitle?", "items: ProgressBarItem[]", "onMenuClick?", "onManageClick?", "onViewDetailsClick?"];
|
|
4392
|
+
};
|
|
4393
|
+
readonly TwoColumnWidgets: {
|
|
4394
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4395
|
+
readonly description: "Simple flex layout wrapper for arranging two widget cards side by side with proper gap spacing.";
|
|
4396
|
+
readonly props: readonly ["children: React.ReactNode", "className?"];
|
|
4397
|
+
};
|
|
4398
|
+
readonly DashboardHeader: {
|
|
4399
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4400
|
+
readonly description: "Page header for dashboards with title and optional subtitle.";
|
|
4401
|
+
readonly props: readonly ["title: string", "subtitle?", "className?"];
|
|
4402
|
+
};
|
|
4403
|
+
readonly GraphMetricTilesDemo: {
|
|
4404
|
+
readonly path: "@/components/blocks/graph-metric-tiles";
|
|
4405
|
+
readonly description: "Complete dashboard demo composing all metric tile components together. Use as reference for dashboard layouts.";
|
|
4406
|
+
readonly props: readonly ["className?"];
|
|
4407
|
+
};
|
|
4408
|
+
};
|
|
4409
|
+
declare const groupModalDrawerBlocks: {
|
|
4410
|
+
readonly FormGroup: {
|
|
4411
|
+
readonly path: "@/components/blocks";
|
|
4412
|
+
readonly description: "Comprehensive form layout with header, responsive 2-column rows, and footer. Supports text inputs, selects, date pickers, checkboxes, radio buttons, multiselect tags, image/file uploaders, and sliders.";
|
|
4413
|
+
readonly props: readonly ["title?", "description?", "rows?: FormRowConfig[]", "sortOptions?", "filterOptions?", "inputSize?: 'sm' | 'default' | 'lg'", "onAddNew?", "onCancel?", "onSave?", "onFieldChange?", "showHeader?", "showFooter?"];
|
|
4414
|
+
};
|
|
4415
|
+
};
|
|
4416
|
+
declare const canvasBlocks: {
|
|
4417
|
+
readonly InfinityCanvas: {
|
|
4418
|
+
readonly path: "@/components/blocks";
|
|
4419
|
+
readonly description: "Pannable, zoomable infinite canvas for placing components. Supports drag-and-drop from palette.";
|
|
4420
|
+
readonly props: readonly ["items: CanvasItemData[]", "onItemsChange", "selectedId", "onSelectItem"];
|
|
4421
|
+
};
|
|
4422
|
+
readonly ComponentPalette: {
|
|
4423
|
+
readonly path: "@/components/blocks";
|
|
4424
|
+
readonly description: "Sidebar listing draggable components grouped by category. Used with InfinityCanvas.";
|
|
4425
|
+
readonly props: readonly ["className?"];
|
|
4426
|
+
};
|
|
4427
|
+
readonly CanvasItem: {
|
|
4428
|
+
readonly path: "@/components/blocks";
|
|
4429
|
+
readonly description: "Wrapper for components placed on the infinity canvas. Handles positioning and selection.";
|
|
4430
|
+
readonly props: readonly ["item: CanvasItemData", "isSelected", "onSelect", "onDelete", "children"];
|
|
4431
|
+
};
|
|
4432
|
+
};
|
|
4433
|
+
declare const videoBlocks: {
|
|
4434
|
+
readonly VideoChatControls: {
|
|
4435
|
+
readonly path: "@/components/blocks";
|
|
4436
|
+
readonly description: "Row of circular buttons for video calls: camera, mic, cast, leave.";
|
|
4437
|
+
readonly props: readonly ["isVideoOn?", "isMicOn?", "onToggleVideo?", "onToggleMic?", "onCast?", "onLeave?"];
|
|
4438
|
+
};
|
|
4439
|
+
readonly WebcamPreview: {
|
|
4440
|
+
readonly path: "@/components/blocks";
|
|
4441
|
+
readonly description: "Live webcam preview component with optional overlay controls.";
|
|
4442
|
+
readonly props: readonly ["className?", "showControls?"];
|
|
4443
|
+
};
|
|
4444
|
+
readonly ParticipantList: {
|
|
4445
|
+
readonly path: "@/components/blocks";
|
|
4446
|
+
readonly description: "List of video call participants with avatars and status.";
|
|
4447
|
+
readonly props: readonly ["participants: Participant[]"];
|
|
4448
|
+
};
|
|
4449
|
+
readonly VideoPlaylist: {
|
|
4450
|
+
readonly path: "@/components/blocks";
|
|
4451
|
+
readonly description: "Sidebar playlist for video content with thumbnails.";
|
|
4452
|
+
readonly props: readonly ["videos: Video[]", "currentVideo?", "onVideoSelect?"];
|
|
4453
|
+
};
|
|
4454
|
+
readonly VideoContentSection: {
|
|
4455
|
+
readonly path: "@/components/blocks";
|
|
4456
|
+
readonly description: "Video player area with metadata and description.";
|
|
4457
|
+
readonly props: readonly ["video: Video", "onPlay?"];
|
|
4458
|
+
};
|
|
4459
|
+
readonly YouTubePlayer: {
|
|
4460
|
+
readonly path: "@/components/blocks";
|
|
4461
|
+
readonly description: "Embedded YouTube player component.";
|
|
4462
|
+
readonly props: readonly ["videoId: string", "autoplay?"];
|
|
4463
|
+
};
|
|
4464
|
+
};
|
|
4465
|
+
declare const marketingBlocks: {
|
|
4466
|
+
readonly HeroSection: {
|
|
4467
|
+
readonly path: "@/components/blocks/marketing";
|
|
4468
|
+
readonly description: "Hero with background image and simple search bar overlay.";
|
|
4469
|
+
readonly props: readonly ["title", "subtitle", "searchPlaceholder?", "backgroundImage?"];
|
|
4470
|
+
};
|
|
4471
|
+
readonly HeroDarkWithImage: {
|
|
4472
|
+
readonly path: "@/components/blocks/marketing";
|
|
4473
|
+
readonly description: "Dark hero section with text on left and image on right.";
|
|
4474
|
+
readonly props: readonly ["title", "subtitle", "image"];
|
|
4475
|
+
};
|
|
4476
|
+
readonly HeroDarkCentered: {
|
|
4477
|
+
readonly path: "@/components/blocks/marketing";
|
|
4478
|
+
readonly description: "Dark centered hero with multi-field search (location, dates, guests).";
|
|
4479
|
+
readonly props: readonly ["title", "subtitle"];
|
|
4480
|
+
};
|
|
4481
|
+
readonly HeroFullwidthImage: {
|
|
4482
|
+
readonly path: "@/components/blocks/marketing";
|
|
4483
|
+
readonly description: "Full-width hero image with centered content and multi-field search.";
|
|
4484
|
+
readonly props: readonly ["title", "subtitle", "backgroundImage"];
|
|
4485
|
+
};
|
|
4486
|
+
readonly CenteredHero: {
|
|
4487
|
+
readonly path: "@/components/blocks/marketing";
|
|
4488
|
+
readonly description: "Simple centered hero for about/landing pages.";
|
|
4489
|
+
readonly props: readonly ["title", "subtitle?"];
|
|
4490
|
+
};
|
|
4491
|
+
readonly DestinationCards: {
|
|
4492
|
+
readonly path: "@/components/blocks/marketing";
|
|
4493
|
+
readonly description: "Grid of destination cards with images and titles.";
|
|
4494
|
+
readonly props: readonly ["title?", "destinations?"];
|
|
4495
|
+
};
|
|
4496
|
+
readonly FeaturedPlaces: {
|
|
4497
|
+
readonly path: "@/components/blocks/marketing";
|
|
4498
|
+
readonly description: "Featured places section with filter pills and card grid.";
|
|
4499
|
+
readonly props: readonly ["title?", "filters?", "places?"];
|
|
4500
|
+
};
|
|
4501
|
+
readonly CategoryGrid: {
|
|
4502
|
+
readonly path: "@/components/blocks/marketing";
|
|
4503
|
+
readonly description: "Grid of category cards with icons/images.";
|
|
4504
|
+
readonly props: readonly ["categories?"];
|
|
4505
|
+
};
|
|
4506
|
+
readonly GallerySection: {
|
|
4507
|
+
readonly path: "@/components/blocks/marketing";
|
|
4508
|
+
readonly description: "Image gallery with title and grid layout.";
|
|
4509
|
+
readonly props: readonly ["title?", "subtitle?", "images?"];
|
|
4510
|
+
};
|
|
4511
|
+
readonly BlogCards: {
|
|
4512
|
+
readonly path: "@/components/blocks/marketing";
|
|
4513
|
+
readonly description: "Grid of blog post cards with images, titles, dates.";
|
|
4514
|
+
readonly props: readonly ["title?", "subtitle?", "posts?"];
|
|
4515
|
+
};
|
|
4516
|
+
readonly HowItWorks: {
|
|
4517
|
+
readonly path: "@/components/blocks/marketing";
|
|
4518
|
+
readonly description: "Horizontal 3-step how it works section.";
|
|
4519
|
+
readonly props: readonly ["steps?"];
|
|
4520
|
+
};
|
|
4521
|
+
readonly VerticalHowItWorks: {
|
|
4522
|
+
readonly path: "@/components/blocks/marketing";
|
|
4523
|
+
readonly description: "Vertical how it works with large numbers. Has light/dark variants.";
|
|
4524
|
+
readonly props: readonly ["variant?: 'light' | 'dark'", "title", "description", "steps?"];
|
|
4525
|
+
};
|
|
4526
|
+
readonly TestimonialCarousel: {
|
|
4527
|
+
readonly path: "@/components/blocks/marketing";
|
|
4528
|
+
readonly description: "Dark testimonial carousel with quote, author, and navigation arrows.";
|
|
4529
|
+
readonly props: readonly ["testimonials?"];
|
|
4530
|
+
};
|
|
4531
|
+
readonly ReviewsGrid: {
|
|
4532
|
+
readonly path: "@/components/blocks/marketing";
|
|
4533
|
+
readonly description: "Grid of review cards with ratings and text.";
|
|
4534
|
+
readonly props: readonly ["title?", "subtitle?", "reviews?"];
|
|
4535
|
+
};
|
|
4536
|
+
readonly SocialProof: {
|
|
4537
|
+
readonly path: "@/components/blocks/marketing";
|
|
4538
|
+
readonly description: "Logo bar showing 'as featured on' brands.";
|
|
4539
|
+
readonly props: readonly ["label?", "logos?"];
|
|
4540
|
+
};
|
|
4541
|
+
readonly MetricsSection: {
|
|
4542
|
+
readonly path: "@/components/blocks/marketing";
|
|
4543
|
+
readonly description: "Row of large metric numbers with labels.";
|
|
4544
|
+
readonly props: readonly ["metrics?"];
|
|
4545
|
+
};
|
|
4546
|
+
readonly FeatureWithImage: {
|
|
4547
|
+
readonly path: "@/components/blocks/marketing";
|
|
4548
|
+
readonly description: "Feature highlight with image and text side by side.";
|
|
4549
|
+
readonly props: readonly ["title", "description", "ctaText?", "imagePosition?: 'left' | 'right'"];
|
|
4550
|
+
};
|
|
4551
|
+
readonly ContentWithImage: {
|
|
4552
|
+
readonly path: "@/components/blocks/marketing";
|
|
4553
|
+
readonly description: "Generic content section with image. Similar to FeatureWithImage.";
|
|
4554
|
+
readonly props: readonly ["title", "content", "image", "imagePosition?"];
|
|
4555
|
+
};
|
|
4556
|
+
readonly CoreValuesGrid: {
|
|
4557
|
+
readonly path: "@/components/blocks/marketing";
|
|
4558
|
+
readonly description: "Grid of value cards with icons and descriptions.";
|
|
4559
|
+
readonly props: readonly ["values?"];
|
|
4560
|
+
};
|
|
4561
|
+
readonly TeamCardsGrid: {
|
|
4562
|
+
readonly path: "@/components/blocks/marketing";
|
|
4563
|
+
readonly description: "Grid of team member cards with photos and roles.";
|
|
4564
|
+
readonly props: readonly ["title?", "members?"];
|
|
4565
|
+
};
|
|
4566
|
+
readonly TeamCircularGrid: {
|
|
4567
|
+
readonly path: "@/components/blocks/marketing";
|
|
4568
|
+
readonly description: "Team grid with circular avatar photos.";
|
|
4569
|
+
readonly props: readonly ["title?", "members?"];
|
|
4570
|
+
};
|
|
4571
|
+
readonly CtaBanner: {
|
|
4572
|
+
readonly path: "@/components/blocks/marketing";
|
|
4573
|
+
readonly description: "Call to action banner with title and button.";
|
|
4574
|
+
readonly props: readonly ["title", "buttonText", "onButtonClick?"];
|
|
4575
|
+
};
|
|
4576
|
+
readonly FooterNavbar: {
|
|
4577
|
+
readonly path: "@/components/blocks/marketing";
|
|
4578
|
+
readonly description: "Footer with logo, nav links, and social icons.";
|
|
4579
|
+
readonly props: readonly ["companyName?", "links?", "socialLinks?"];
|
|
4580
|
+
};
|
|
4581
|
+
readonly FeaturedNewsCards: {
|
|
4582
|
+
readonly path: "@/components/blocks/marketing";
|
|
4583
|
+
readonly description: "Featured news/press cards section.";
|
|
4584
|
+
readonly props: readonly ["title?", "articles?"];
|
|
4585
|
+
};
|
|
4586
|
+
readonly OfficeLocations: {
|
|
4587
|
+
readonly path: "@/components/blocks/marketing";
|
|
4588
|
+
readonly description: "Grid of office location cards with addresses.";
|
|
4589
|
+
readonly props: readonly ["title?", "locations?"];
|
|
4590
|
+
};
|
|
4591
|
+
};
|
|
4592
|
+
declare const pricingBlocks: {
|
|
4593
|
+
readonly PricingCards: {
|
|
4594
|
+
readonly path: "@/components/blocks/pricing";
|
|
4595
|
+
readonly description: "Three-tier pricing cards with monthly/annual toggle, features list, and CTA buttons.";
|
|
4596
|
+
readonly props: readonly ["plans?"];
|
|
4597
|
+
};
|
|
4598
|
+
readonly FaqAccordion: {
|
|
4599
|
+
readonly path: "@/components/blocks/pricing";
|
|
4600
|
+
readonly description: "Expandable FAQ accordion for pricing pages.";
|
|
4601
|
+
readonly props: readonly ["faqs?: FAQ[]"];
|
|
4602
|
+
};
|
|
4603
|
+
readonly FeaturesComparison: {
|
|
4604
|
+
readonly path: "@/components/blocks/pricing";
|
|
4605
|
+
readonly description: "Feature comparison table across pricing tiers.";
|
|
4606
|
+
readonly props: readonly ["features?", "plans?"];
|
|
4607
|
+
};
|
|
4608
|
+
readonly PricingCta: {
|
|
4609
|
+
readonly path: "@/components/blocks/pricing";
|
|
4610
|
+
readonly description: "CTA section for pricing page (contact sales, etc.).";
|
|
4611
|
+
readonly props: readonly ["title?", "description?", "buttonText?"];
|
|
4612
|
+
};
|
|
4613
|
+
};
|
|
4614
|
+
declare const pageTemplates: {
|
|
4615
|
+
readonly "page-admin-portal": {
|
|
4616
|
+
readonly path: "/page-admin-portal";
|
|
4617
|
+
readonly description: "Admin dashboard with dark sidebar, collapsible nav sections, and data table.";
|
|
4618
|
+
readonly shell: "DashboardShell";
|
|
4619
|
+
readonly blocks: readonly ["StandardDataTable", "Header"];
|
|
4620
|
+
};
|
|
4621
|
+
readonly "page-messenger": {
|
|
4622
|
+
readonly path: "/page-messenger";
|
|
4623
|
+
readonly description: "Full messaging interface with thread sidebar and chat area.";
|
|
4624
|
+
readonly shell: "custom (no shell)";
|
|
4625
|
+
readonly blocks: readonly ["MessengerSidebar", "ChatBubble", "ChatDateSeparator", "MessengerInput"];
|
|
4626
|
+
};
|
|
4627
|
+
readonly "page-product-homepage": {
|
|
4628
|
+
readonly path: "/page-product-homepage";
|
|
4629
|
+
readonly description: "Marketing landing page with multiple hero variations and content blocks.";
|
|
4630
|
+
readonly shell: "custom (no shell)";
|
|
4631
|
+
readonly blocks: readonly ["Header", "HeroSection", "HeroDarkWithImage", "DestinationCards", "TestimonialCarousel", "FooterNavbar"];
|
|
4632
|
+
};
|
|
4633
|
+
readonly "page-pricing": {
|
|
4634
|
+
readonly path: "/page-pricing";
|
|
4635
|
+
readonly description: "Pricing page with tier cards, FAQ, and feature comparison.";
|
|
4636
|
+
readonly shell: "custom (no shell)";
|
|
4637
|
+
readonly blocks: readonly ["Header", "PricingCards", "FaqAccordion", "FeaturesComparison"];
|
|
4638
|
+
};
|
|
4639
|
+
readonly "page-about": {
|
|
4640
|
+
readonly path: "/page-about";
|
|
4641
|
+
readonly description: "About page with hero, metrics, values, team, and locations.";
|
|
4642
|
+
readonly shell: "custom (no shell)";
|
|
4643
|
+
readonly blocks: readonly ["Header", "CenteredHero", "MetricsSection", "CoreValuesGrid", "TeamCardsGrid"];
|
|
4644
|
+
};
|
|
4645
|
+
readonly "page-account": {
|
|
4646
|
+
readonly path: "/page-account";
|
|
4647
|
+
readonly description: "Account settings with tabbed sidebar navigation.";
|
|
4648
|
+
readonly shell: "AccountSettingsShell";
|
|
4649
|
+
readonly blocks: readonly ["ProfileImageUploader", "SettingsListRow", "CreditCardDisplay"];
|
|
4650
|
+
};
|
|
4651
|
+
readonly "page-centered-profile": {
|
|
4652
|
+
readonly path: "/page-centered-profile";
|
|
4653
|
+
readonly description: "Profile page with centered layout and banner.";
|
|
4654
|
+
readonly shell: "StandardPageShell";
|
|
4655
|
+
readonly blocks: readonly ["ProfileCard", "FlairBanner"];
|
|
4656
|
+
};
|
|
4657
|
+
readonly "page-double-sidebar": {
|
|
4658
|
+
readonly path: "/page-double-sidebar";
|
|
4659
|
+
readonly description: "Dashboard with two-column sidebar navigation.";
|
|
4660
|
+
readonly shell: "DoubleSidebarShell";
|
|
4661
|
+
readonly blocks: readonly ["StandardDataTable"];
|
|
4662
|
+
};
|
|
4663
|
+
readonly "page-icon-sidebar": {
|
|
4664
|
+
readonly path: "/page-icon-sidebar";
|
|
4665
|
+
readonly description: "Dashboard with narrow icon-only sidebar.";
|
|
4666
|
+
readonly shell: "IconSidebarShell";
|
|
4667
|
+
readonly blocks: readonly ["StandardDataTable"];
|
|
4668
|
+
};
|
|
4669
|
+
readonly "page-login": {
|
|
4670
|
+
readonly path: "/page-login";
|
|
4671
|
+
readonly description: "Login page with form and branding panel.";
|
|
4672
|
+
readonly shell: "custom (split layout)";
|
|
4673
|
+
readonly blocks: readonly ["LoginBrandingPanel"];
|
|
4674
|
+
};
|
|
4675
|
+
readonly "page-standard": {
|
|
4676
|
+
readonly path: "/page-standard";
|
|
4677
|
+
readonly description: "Standard centered page with banner and tabs.";
|
|
4678
|
+
readonly shell: "StandardPageShell";
|
|
4679
|
+
readonly blocks: readonly ["FlairBanner", "PageHeaderSection"];
|
|
4680
|
+
};
|
|
4681
|
+
readonly "page-standard-multistep": {
|
|
4682
|
+
readonly path: "/page-standard-multistep";
|
|
4683
|
+
readonly description: "Multi-step form wizard with horizontal step tracker.";
|
|
4684
|
+
readonly shell: "MultistepShell";
|
|
4685
|
+
readonly blocks: readonly ["StepTracker", "ContentDropzone"];
|
|
4686
|
+
};
|
|
4687
|
+
readonly "page-video-chat": {
|
|
4688
|
+
readonly path: "/page-video-chat";
|
|
4689
|
+
readonly description: "Video conferencing interface with webcam, participants, and chat.";
|
|
4690
|
+
readonly shell: "custom (no shell)";
|
|
4691
|
+
readonly blocks: readonly ["WebcamPreview", "VideoChatControls", "ParticipantList", "ChatMessageList"];
|
|
4692
|
+
};
|
|
4693
|
+
readonly "page-video-list": {
|
|
4694
|
+
readonly path: "/page-video-list";
|
|
4695
|
+
readonly description: "Video content page with player and playlist sidebar.";
|
|
4696
|
+
readonly shell: "custom (no shell)";
|
|
4697
|
+
readonly blocks: readonly ["VideoContentSection", "VideoPlaylist", "YouTubePlayer"];
|
|
4698
|
+
};
|
|
4699
|
+
readonly "page-canvas": {
|
|
4700
|
+
readonly path: "/page-canvas";
|
|
4701
|
+
readonly description: "Figma-style infinite canvas whiteboard. Drag components from sidebar palette onto a pannable, zoomable canvas.";
|
|
4702
|
+
readonly shell: "custom (no shell)";
|
|
4703
|
+
readonly blocks: readonly ["InfinityCanvas", "ComponentPalette", "CanvasItem", "Header"];
|
|
4704
|
+
};
|
|
4705
|
+
};
|
|
4706
|
+
|
|
4707
|
+
/**
|
|
4708
|
+
* CSS Variable Sync Utility
|
|
4709
|
+
*
|
|
4710
|
+
* Provides functions to set CSS variables and broadcast them to iframes
|
|
4711
|
+
* for live preview synchronization.
|
|
4712
|
+
*/
|
|
4713
|
+
/**
|
|
4714
|
+
* Sets a CSS variable on the document and broadcasts it to all iframes
|
|
4715
|
+
*/
|
|
4716
|
+
declare function setCSSVariable(name: string, value: string): void;
|
|
4717
|
+
/**
|
|
4718
|
+
* Sets multiple CSS variables and broadcasts them to all iframes
|
|
4719
|
+
*/
|
|
4720
|
+
declare function setCSSVariables(variables: Record<string, string>): void;
|
|
4721
|
+
/**
|
|
4722
|
+
* Broadcasts CSS variable changes to all iframes via postMessage
|
|
4723
|
+
*/
|
|
4724
|
+
declare function broadcastCSSVariables(variables: Record<string, string>): void;
|
|
4725
|
+
/**
|
|
4726
|
+
* Hook for pages to listen for CSS variable updates from parent window
|
|
4727
|
+
* Call this in page layouts that might be rendered in iframes
|
|
4728
|
+
*/
|
|
4729
|
+
declare function setupCSSVariableListener(): () => void;
|
|
4730
|
+
|
|
4731
|
+
/**
|
|
4732
|
+
* Hook that listens for CSS variable updates from parent window.
|
|
4733
|
+
* Use this in page layouts that might be rendered in iframes.
|
|
4734
|
+
*
|
|
4735
|
+
* @example
|
|
4736
|
+
* ```tsx
|
|
4737
|
+
* export function MyPageLayout() {
|
|
4738
|
+
* useCSSVariableSync();
|
|
4739
|
+
* return <div>...</div>;
|
|
4740
|
+
* }
|
|
4741
|
+
* ```
|
|
4742
|
+
*/
|
|
4743
|
+
declare function useCSSVariableSync(): void;
|
|
4744
|
+
|
|
4745
|
+
declare function useIsMobile(): boolean;
|
|
4746
|
+
|
|
4747
|
+
type IconShapeId = "rounded" | "circle" | "square";
|
|
4748
|
+
interface ThemeBranding {
|
|
4749
|
+
iconShape: IconShapeId;
|
|
4750
|
+
iconName: string;
|
|
4751
|
+
bgColor: string;
|
|
4752
|
+
iconColor: string;
|
|
4753
|
+
wordmark: string;
|
|
4754
|
+
}
|
|
4755
|
+
interface ThemeImages {
|
|
4756
|
+
logoLight: string;
|
|
4757
|
+
logoDark: string;
|
|
4758
|
+
faviconLight: string;
|
|
4759
|
+
faviconDark: string;
|
|
4760
|
+
}
|
|
4761
|
+
interface BrandAsset {
|
|
4762
|
+
id: string;
|
|
4763
|
+
name: string;
|
|
4764
|
+
url: string;
|
|
4765
|
+
storedInPublic?: boolean;
|
|
4766
|
+
}
|
|
4767
|
+
interface ThemeContextValue {
|
|
4768
|
+
images: ThemeImages;
|
|
4769
|
+
branding: ThemeBranding;
|
|
4770
|
+
brandAssets: BrandAsset[];
|
|
4771
|
+
isMounted: boolean;
|
|
4772
|
+
}
|
|
4773
|
+
interface PreviewBrandingContextValue {
|
|
4774
|
+
previewBranding: ThemeBranding | null;
|
|
4775
|
+
setPreviewBranding: (branding: ThemeBranding | null) => void;
|
|
4776
|
+
}
|
|
4777
|
+
declare const ThemeContext: React$1.Context<ThemeContextValue>;
|
|
4778
|
+
declare const PreviewBrandingContext: React$1.Context<PreviewBrandingContextValue>;
|
|
4779
|
+
declare function useThemeImages(): ThemeImages;
|
|
4780
|
+
declare function useThemeBranding(): {
|
|
4781
|
+
branding: ThemeBranding;
|
|
4782
|
+
isMounted: boolean;
|
|
4783
|
+
};
|
|
4784
|
+
declare function usePreviewBranding(): PreviewBrandingContextValue;
|
|
4785
|
+
declare function useThemeBrandAssets(): BrandAsset[];
|
|
4786
|
+
interface ThemeProviderProps {
|
|
4787
|
+
children: ReactNode;
|
|
4788
|
+
images?: ThemeImages;
|
|
4789
|
+
branding?: ThemeBranding;
|
|
4790
|
+
brandAssets?: BrandAsset[];
|
|
4791
|
+
}
|
|
4792
|
+
/**
|
|
4793
|
+
* ThemeProvider for the SDK
|
|
4794
|
+
*
|
|
4795
|
+
* This provider allows parent applications to pass in theme values.
|
|
4796
|
+
* If no values are provided, sensible defaults are used.
|
|
4797
|
+
*
|
|
4798
|
+
* Usage in your app:
|
|
4799
|
+
* ```tsx
|
|
4800
|
+
* <ThemeProvider
|
|
4801
|
+
* images={{ logoLight: "/logo.png", ... }}
|
|
4802
|
+
* branding={{ wordmark: "MyApp", ... }}
|
|
4803
|
+
* >
|
|
4804
|
+
* <App />
|
|
4805
|
+
* </ThemeProvider>
|
|
4806
|
+
* ```
|
|
4807
|
+
*/
|
|
4808
|
+
declare function ThemeProvider({ children, images, branding, brandAssets, }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
|
|
4809
|
+
|
|
4810
|
+
export { AccountSettingsShell, type AccountTab, ActivityFeed, Avatar, AvatarFallback, AvatarImage, BadgesCard, BlogCards, BottomInputChatWidget, type BrandAsset, Button, Calendar, CanvasItem, CategoryGrid, CenteredHero, ChatBubble, type ChatBubbleMessage, ChatDateSeparator, ChatInput, ChatMessageList, Checkbox, CheckboxWithLabel, CircularProgressBar, CircularProgressBarList, type CircularProgressBarListProps, type CircularProgressBarProps, ComponentPalette, ComponentSearch, ContentDropzone, ContentWithImage, CoreValuesGrid, CreditCardDisplay, CtaBanner, type CustomButtonStyle, CustomComponentHelper, DashboardHeader, type DashboardHeaderProps, DashboardShell, DateInput, DescriptionCard, DestinationCards, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type DonutChartLegendItem, DonutChartWidget, type DonutChartWidgetProps, DoubleSidebar, type DoubleSidebarSection, DoubleSidebarShell, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FaqAccordion, FaqsTable, FeatureWithImage, FeaturedNewsCards, FeaturedPlaces, FeaturesComparison, FileUploader, type FilterCheckboxGroupConfig, type FilterDateRangeConfig, type FilterDropdownConfig, type FilterOption$c as FilterOption, FilterPopover, type FilterState, FixedColumnDataTable, FlairBanner, FooterNavbar, FormGroup, GallerySection, GradientBanner, GraphMetricTilesDemo, type GraphMetricTilesDemoProps, GridTilesList, Header, HeroDarkCentered, HeroDarkWithImage, HeroFullwidthImage, HeroSection, HowItWorks, type IconNavItemConfig, type IconShapeId, IconSidebar, IconSidebarShell, ImageFeedWithNestedComments, type ImageKey, ImageUploader, InfoCard, type InfoCardProps, Input, Label, LargeImageLabelsList, Sidebar as LayoutSidebar, LineChartWidget, type LineChartWidgetProps, type LineTab, LineTabs, type LinkItem, LinksCard, type LinksCardProps, Loader, LoginBrandingPanel, MenuSection, type MenufocusItem, MenufocusTemplate, type MenufocusTemplateProps, MessengerInput, MessengerSidebar, MetricCard, type MetricCardData, type MetricCardProps, MetricCardsRow, type MetricCardsRowProps, MetricListCard, type MetricListCardProps, type MetricListItem, MetricsSection, MobileBottomNav, MobileMenuShell, type MobileNavTabConfig, MonthlyCalendarWidget, MultiselectCheckboxField, MultiselectTags, MultistepProgressBarShell, type MultistepProgressBarShellProps, type MultistepProgressBarStep, MultistepShell, MultistepSidebarShell, type NavItem, type NavSection, type NavTab, NestedCommentsTable, NestedDataTable, OfficeLocations, PageHeaderSection, Pagination, ParticipantList, type Persona, PersonaCard, PersonaGrid, PillTabs, type PillTabsProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PortfolioCard, PreviewBrandingContext, PricingCards, PricingCta, ProfileCard, ProfileGridTilesList, ProfileImageUploader, ProgressBar, type ProgressBarItem, ProgressMetricCard, type ProgressMetricCardProps, type ProjectContext, ProjectContextShell, type ProjectContextTab, PromptChipsRow, PromptTemplate, RadioGroup, RadioGroupItem, RangeInput, ReviewsGrid, ReviewsTable, type Screen, type ScreenConnection, ScreenFlowchart, ScreenPromptBuilder, ScreenPromptTemplate, type ScreenStatus, type ScreenType, ScrollArea, ScrollBar, SearchBar, SearchBarShell, SearchSidebar, Searchbox, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectablePills, Separator, SettingsListRow, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar$1 as Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarNav, SidebarProfileCard, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, SkillsCard, Slider, SlideshowGridTiles, SocialFeed, SocialProof, type SortOption$b as SortOption, StandardDataTable, StandardListWithImage, StandardPageShell, StatsCard, type Step, StepTracker, Switch, type TableColumn, type TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TeamCardsGrid, TeamCircularGrid, TestimonialCarousel, TextInput, Textarea, type ThemeBranding, ThemeContext, type ThemeImages, ThemeProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TwoColumnWidgets, type TwoColumnWidgetsProps, Typography, UpvotingPostsTable, VerticalHowItWorks, VerticalMultistepShell, VerticalStepTracker, VideoChatControls, VideoContentSection, VideoPlaylistCard, VideoPlaylistItem, WebcamPreview, YouTubePlayer, accountTabs, allColorVariables, blocks, broadcastCSSVariables, buttonVariants, canvasBlocks, cn, colorVariables, defaultBranding, defaultButtonColorStyles, defaultButtonColors, defaultButtonSizes, defaultColors, defaultCustomButtonStyles, defaultDoubleSidebarSections, defaultIconNavItems, defaultImages, defaultInputSizes, defaultProgressBarSteps, defaultSteps, defaultSupportLinks, defaultTypography, defaultVerticalSteps, getChildScreens, getScreenUrl, getTopLevelScreens, groupModalDrawerBlocks, layoutPrimitives, layoutShells, marketingBlocks, pageTemplates, pricingBlocks, setCSSVariable, setCSSVariables, setupCSSVariableListener, useCSSVariableSync, useIsMobile, usePreviewBranding, useSidebar, useThemeBrandAssets, useThemeBranding, useThemeImages, videoBlocks };
|