@tollerud/ui 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/index.cjs +2750 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +704 -0
- package/dist/index.d.ts +704 -0
- package/dist/index.js +2650 -0
- package/dist/index.js.map +1 -0
- package/globals.css +920 -0
- package/package.json +104 -0
- package/tia-full-figure.svg +558 -0
- package/tokens.css +525 -0
- package/tollerud-avatar.png +0 -0
- package/tollerud-avatar.svg +85 -0
- package/tollerud-logo.svg +1 -0
- package/tollerud-preset.js +191 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,704 @@
|
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { ButtonHTMLAttributes, HTMLAttributes, InputHTMLAttributes, CSSProperties, ReactNode, TextareaHTMLAttributes, ReactElement, ComponentPropsWithoutRef } from 'react';
|
|
4
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
6
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
7
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
8
|
+
import * as ProgressPrimitive from '@radix-ui/react-progress';
|
|
9
|
+
import { ToasterProps } from 'sonner';
|
|
10
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
11
|
+
|
|
12
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
13
|
+
|
|
14
|
+
declare const variants: {
|
|
15
|
+
readonly primary: "bg-tollerud-yellow text-tollerud-black border-tollerud-yellow hover:bg-tollerud-yellow-bright hover:shadow-tollerud-glow";
|
|
16
|
+
readonly secondary: "bg-transparent text-tollerud-text-primary border-tollerud-border hover:border-tollerud-text-secondary hover:bg-tollerud-surface-hover";
|
|
17
|
+
readonly ghost: "bg-transparent text-tollerud-text-secondary border-transparent hover:text-tollerud-text-primary hover:bg-tollerud-surface-hover";
|
|
18
|
+
readonly destructive: "bg-tollerud-error text-white border-tollerud-error hover:shadow-[0_0_12px_rgba(239,68,68,0.3)]";
|
|
19
|
+
readonly terminal: "font-mono text-tollerud-yellow border-[rgba(232,213,0,0.25)] bg-transparent before:content-[\"❯_\"] before:opacity-70 hover:border-tollerud-yellow hover:shadow-tollerud-glow hover:bg-[rgba(232,213,0,0.05)]";
|
|
20
|
+
};
|
|
21
|
+
declare const sizes: {
|
|
22
|
+
readonly sm: "px-3 py-1 text-sm";
|
|
23
|
+
readonly md: "px-4 py-2 text-base";
|
|
24
|
+
readonly lg: "px-6 py-3 text-lg";
|
|
25
|
+
};
|
|
26
|
+
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
27
|
+
variant?: keyof typeof variants;
|
|
28
|
+
size?: keyof typeof sizes;
|
|
29
|
+
}
|
|
30
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
31
|
+
|
|
32
|
+
declare const toneStyles: {
|
|
33
|
+
readonly default: {
|
|
34
|
+
readonly wrapper: "border-tollerud-border bg-tollerud-surface-raised";
|
|
35
|
+
readonly icon: "text-tollerud-text-muted";
|
|
36
|
+
};
|
|
37
|
+
readonly accent: {
|
|
38
|
+
readonly wrapper: "border-tollerud-yellow/30 bg-tollerud-yellow/5";
|
|
39
|
+
readonly icon: "text-tollerud-yellow";
|
|
40
|
+
};
|
|
41
|
+
readonly info: {
|
|
42
|
+
readonly wrapper: "border-blue-500/30 bg-blue-500/5";
|
|
43
|
+
readonly icon: "text-blue-400";
|
|
44
|
+
};
|
|
45
|
+
readonly success: {
|
|
46
|
+
readonly wrapper: "border-green-500/30 bg-green-500/5";
|
|
47
|
+
readonly icon: "text-green-400";
|
|
48
|
+
};
|
|
49
|
+
readonly error: {
|
|
50
|
+
readonly wrapper: "border-red-500/30 bg-red-500/5";
|
|
51
|
+
readonly icon: "text-red-400";
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
interface AlertProps extends HTMLAttributes<HTMLDivElement> {
|
|
55
|
+
tone?: keyof typeof toneStyles;
|
|
56
|
+
title?: string;
|
|
57
|
+
icon?: React.ReactNode;
|
|
58
|
+
}
|
|
59
|
+
declare const Alert: react.ForwardRefExoticComponent<AlertProps & react.RefAttributes<HTMLDivElement>>;
|
|
60
|
+
|
|
61
|
+
interface CardProps extends HTMLAttributes<HTMLDivElement> {
|
|
62
|
+
accent?: boolean;
|
|
63
|
+
density?: 'comfortable' | 'compact';
|
|
64
|
+
}
|
|
65
|
+
declare const Card: react.ForwardRefExoticComponent<CardProps & react.RefAttributes<HTMLDivElement>>;
|
|
66
|
+
|
|
67
|
+
declare const badgeVariants: {
|
|
68
|
+
readonly default: "bg-tollerud-noir-700 text-tollerud-text-secondary";
|
|
69
|
+
readonly accent: "bg-tollerud-yellow/15 text-tollerud-yellow";
|
|
70
|
+
readonly success: "bg-tollerud-success/15 text-tollerud-success";
|
|
71
|
+
readonly error: "bg-tollerud-error/15 text-tollerud-error";
|
|
72
|
+
readonly info: "bg-tollerud-info/15 text-tollerud-info";
|
|
73
|
+
readonly warning: "bg-tollerud-yellow/15 text-tollerud-warning";
|
|
74
|
+
};
|
|
75
|
+
interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
76
|
+
variant?: keyof typeof badgeVariants;
|
|
77
|
+
}
|
|
78
|
+
declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
|
|
79
|
+
|
|
80
|
+
type Status = 'online' | 'offline' | 'warning' | 'idle';
|
|
81
|
+
interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {
|
|
82
|
+
status?: Status;
|
|
83
|
+
label?: string;
|
|
84
|
+
/** Disable the pulsing animation */
|
|
85
|
+
noPulse?: boolean;
|
|
86
|
+
}
|
|
87
|
+
declare const StatusDot: react.ForwardRefExoticComponent<StatusDotProps & react.RefAttributes<HTMLSpanElement>>;
|
|
88
|
+
|
|
89
|
+
interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
90
|
+
label?: string;
|
|
91
|
+
error?: string;
|
|
92
|
+
}
|
|
93
|
+
declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
|
|
94
|
+
|
|
95
|
+
interface CodeBlockProps extends HTMLAttributes<HTMLPreElement> {
|
|
96
|
+
/** Optional string content to render inside <code> tags */
|
|
97
|
+
code?: string;
|
|
98
|
+
/** When true, prepends a prompt symbol ($) before text content */
|
|
99
|
+
promptPrefix?: boolean;
|
|
100
|
+
/** When false, hides the copy-to-clipboard button (default: true) */
|
|
101
|
+
showCopy?: boolean;
|
|
102
|
+
}
|
|
103
|
+
declare const CodeBlock: react.ForwardRefExoticComponent<CodeBlockProps & react.RefAttributes<HTMLPreElement>>;
|
|
104
|
+
|
|
105
|
+
interface StatCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
106
|
+
label: string;
|
|
107
|
+
value: string | number;
|
|
108
|
+
change?: {
|
|
109
|
+
value: string;
|
|
110
|
+
direction: 'up' | 'down';
|
|
111
|
+
};
|
|
112
|
+
accent?: boolean;
|
|
113
|
+
}
|
|
114
|
+
declare const StatCard: react.ForwardRefExoticComponent<StatCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
115
|
+
|
|
116
|
+
interface ContainerProps extends HTMLAttributes<HTMLDivElement> {
|
|
117
|
+
as?: 'div' | 'section' | 'article' | 'main' | 'header' | 'footer';
|
|
118
|
+
}
|
|
119
|
+
declare const Container: react.ForwardRefExoticComponent<ContainerProps & react.RefAttributes<HTMLDivElement>>;
|
|
120
|
+
|
|
121
|
+
type ShaderShape = "corners" | "wave" | "dots" | "truchet" | "ripple" | "blob" | "sphere";
|
|
122
|
+
type Intensity = "subtle" | "medium" | "loud";
|
|
123
|
+
type Speed = "still" | "slow" | "medium" | "fast";
|
|
124
|
+
type Grain = "none" | "soft" | "high";
|
|
125
|
+
interface NoirGlowBackgroundProps {
|
|
126
|
+
/** Extra class names for the outer positioning wrapper. */
|
|
127
|
+
className?: string;
|
|
128
|
+
/** Inline style for the outer positioning wrapper. */
|
|
129
|
+
style?: CSSProperties;
|
|
130
|
+
/** Canvas/WebGL shape. `corners` matches Tollerud.no. */
|
|
131
|
+
shape?: ShaderShape;
|
|
132
|
+
/** Visual strength of the yellow glow. */
|
|
133
|
+
intensity?: Intensity;
|
|
134
|
+
/** Ambient animation speed. */
|
|
135
|
+
speed?: Speed;
|
|
136
|
+
/** Shader grain/noise amount. */
|
|
137
|
+
grain?: Grain;
|
|
138
|
+
/** Softness/falloff of the glow blooms. */
|
|
139
|
+
softness?: number;
|
|
140
|
+
/** Background color behind the glow. */
|
|
141
|
+
colorBack?: string;
|
|
142
|
+
/** Glow colors. Defaults to the Tollerud/Tia yellow ramp. */
|
|
143
|
+
colors?: string[];
|
|
144
|
+
/** Whether to render a readable center vignette on top of the shader. */
|
|
145
|
+
preserveCenter?: boolean;
|
|
146
|
+
/** Add the grain/noise CSS overlay. */
|
|
147
|
+
noiseOverlay?: boolean;
|
|
148
|
+
/** Prefer the CSS fallback even if shaders are available. Useful for docs/static contexts. */
|
|
149
|
+
forceCssFallback?: boolean;
|
|
150
|
+
/** Disable pointer events so content above remains clickable. */
|
|
151
|
+
inert?: boolean;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* NoirGlowBackground
|
|
155
|
+
*
|
|
156
|
+
* Tia/Tollerud signature background primitive. The defaults replicate
|
|
157
|
+
* MathiasOki/tollerud-landing's `GradientBackground` component.
|
|
158
|
+
*
|
|
159
|
+
* Install dependency in consuming Next.js apps:
|
|
160
|
+
* npm install @paper-design/shaders-react
|
|
161
|
+
*
|
|
162
|
+
* The CSS fallback classes live in `globals.css` and are used during Suspense,
|
|
163
|
+
* reduced-motion contexts, or when `forceCssFallback` is true.
|
|
164
|
+
*/
|
|
165
|
+
declare function NoirGlowBackground({ className, style, shape, intensity, speed, grain, softness, colorBack, colors, preserveCenter, noiseOverlay, forceCssFallback, inert, }: NoirGlowBackgroundProps): react_jsx_runtime.JSX.Element;
|
|
166
|
+
|
|
167
|
+
interface KbdProps extends HTMLAttributes<HTMLSpanElement> {
|
|
168
|
+
/**
|
|
169
|
+
* The keys to display. Separate by + for chords.
|
|
170
|
+
* @example "⌘K", "⌘⇧S", "⌘K", "Esc"
|
|
171
|
+
*/
|
|
172
|
+
keys: string | string[];
|
|
173
|
+
/** Small variant for inline use */
|
|
174
|
+
size?: 'sm' | 'md';
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Keyboard shortcut chip — inspired by Raycast shortcut badges.
|
|
178
|
+
*
|
|
179
|
+
* ```tsx
|
|
180
|
+
* <Kbd keys="⌘K" />
|
|
181
|
+
* <Kbd keys={["⌘", "⇧", "S"]} />
|
|
182
|
+
* <Kbd keys="Esc" size="sm" />
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
declare const Kbd: react.ForwardRefExoticComponent<KbdProps & react.RefAttributes<HTMLSpanElement>>;
|
|
186
|
+
|
|
187
|
+
interface ActionItem {
|
|
188
|
+
/** Unique ID */
|
|
189
|
+
id: string;
|
|
190
|
+
/** Label text */
|
|
191
|
+
label: string;
|
|
192
|
+
/** Subtitle / description */
|
|
193
|
+
description?: string;
|
|
194
|
+
/** Optional icon element */
|
|
195
|
+
icon?: React.ReactNode;
|
|
196
|
+
/** Keyboard shortcut */
|
|
197
|
+
shortcut?: string | string[];
|
|
198
|
+
/** Group this item belongs to */
|
|
199
|
+
group?: string;
|
|
200
|
+
/** When true, item is disabled */
|
|
201
|
+
disabled?: boolean;
|
|
202
|
+
/** Selection callback */
|
|
203
|
+
onSelect?: () => void;
|
|
204
|
+
}
|
|
205
|
+
interface ActionRowProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'> {
|
|
206
|
+
/** Action data */
|
|
207
|
+
action: ActionItem;
|
|
208
|
+
/** Whether this row is currently highlighted (keyboard navigation) */
|
|
209
|
+
highlighted?: boolean;
|
|
210
|
+
/** Whether to show the shortcut */
|
|
211
|
+
showShortcut?: boolean;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Action row — a single command/action item in a list or command menu.
|
|
215
|
+
* Inspired by Raycast's compact action layout.
|
|
216
|
+
*/
|
|
217
|
+
declare const ActionRow: react.ForwardRefExoticComponent<ActionRowProps & react.RefAttributes<HTMLButtonElement>>;
|
|
218
|
+
|
|
219
|
+
interface CommandGroup {
|
|
220
|
+
/** Group label (e.g. "Servers", "Actions") */
|
|
221
|
+
label: string;
|
|
222
|
+
/** Items in this group */
|
|
223
|
+
items: ActionItem[];
|
|
224
|
+
}
|
|
225
|
+
interface CommandMenuProps {
|
|
226
|
+
/** Whether the menu is open */
|
|
227
|
+
open: boolean;
|
|
228
|
+
/** Called when menu should close */
|
|
229
|
+
onOpenChange: (open: boolean) => void;
|
|
230
|
+
/** Command groups to display */
|
|
231
|
+
groups: CommandGroup[];
|
|
232
|
+
/** Placeholder text for the search input */
|
|
233
|
+
placeholder?: string;
|
|
234
|
+
/** Empty state message when no results */
|
|
235
|
+
emptyMessage?: string;
|
|
236
|
+
/** Custom class for the overlay */
|
|
237
|
+
className?: string;
|
|
238
|
+
/** Keyboard shortcut to toggle (default: "⌘K") */
|
|
239
|
+
toggleShortcut?: string;
|
|
240
|
+
/** Custom search filter override. Return filtered groups. */
|
|
241
|
+
filter?: (query: string, groups: CommandGroup[]) => CommandGroup[];
|
|
242
|
+
/** Callback when an action runs */
|
|
243
|
+
onAction?: (action: ActionItem) => void;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Command palette — a Raycast-inspired global command menu.
|
|
247
|
+
*
|
|
248
|
+
* ```tsx
|
|
249
|
+
* const [open, setOpen] = useState(false)
|
|
250
|
+
*
|
|
251
|
+
* <CommandMenu
|
|
252
|
+
* open={open}
|
|
253
|
+
* onOpenChange={setOpen}
|
|
254
|
+
* groups={[
|
|
255
|
+
* {
|
|
256
|
+
* label: 'Servers',
|
|
257
|
+
* items: [
|
|
258
|
+
* { id: 'emma', label: 'Emma', icon: <Server />, onSelect: () => {} },
|
|
259
|
+
* ],
|
|
260
|
+
* },
|
|
261
|
+
* ]}
|
|
262
|
+
* />
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
265
|
+
declare const CommandMenu: react.ForwardRefExoticComponent<CommandMenuProps & react.RefAttributes<HTMLDivElement>>;
|
|
266
|
+
|
|
267
|
+
interface ServiceHealthCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
268
|
+
/** Service name */
|
|
269
|
+
service: string;
|
|
270
|
+
/** Health status */
|
|
271
|
+
status?: Status;
|
|
272
|
+
/** Uptime string (e.g. '14d 3h') */
|
|
273
|
+
uptime?: string;
|
|
274
|
+
/** Response time in ms */
|
|
275
|
+
responseTime?: string;
|
|
276
|
+
/** Current version */
|
|
277
|
+
version?: string;
|
|
278
|
+
/** Whether the card is in a loading state */
|
|
279
|
+
loading?: boolean;
|
|
280
|
+
}
|
|
281
|
+
declare const ServiceHealthCard: react.ForwardRefExoticComponent<ServiceHealthCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
282
|
+
|
|
283
|
+
interface HostCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
284
|
+
/** Hostname */
|
|
285
|
+
hostname: string;
|
|
286
|
+
/** IP address */
|
|
287
|
+
ip?: string;
|
|
288
|
+
/** Status */
|
|
289
|
+
status?: Status;
|
|
290
|
+
/** CPU load (e.g. '23%') */
|
|
291
|
+
cpu?: string;
|
|
292
|
+
/** Memory usage (e.g. '6.2/16 GB') */
|
|
293
|
+
memory?: string;
|
|
294
|
+
/** Disk usage (e.g. '45%') */
|
|
295
|
+
disk?: string;
|
|
296
|
+
/** Uptime */
|
|
297
|
+
uptime?: string;
|
|
298
|
+
/** Number of containers running */
|
|
299
|
+
containers?: number;
|
|
300
|
+
/** Whether the card is loading */
|
|
301
|
+
loading?: boolean;
|
|
302
|
+
}
|
|
303
|
+
declare const HostCard: react.ForwardRefExoticComponent<HostCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
304
|
+
|
|
305
|
+
interface StackService {
|
|
306
|
+
name: string;
|
|
307
|
+
status: Status;
|
|
308
|
+
}
|
|
309
|
+
interface DockerStackCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
310
|
+
/** Stack name */
|
|
311
|
+
name: string;
|
|
312
|
+
/** Services in the stack */
|
|
313
|
+
services: StackService[];
|
|
314
|
+
/** Path to compose file */
|
|
315
|
+
composePath?: string;
|
|
316
|
+
/** Whether the card is loading */
|
|
317
|
+
loading?: boolean;
|
|
318
|
+
}
|
|
319
|
+
declare const DockerStackCard: react.ForwardRefExoticComponent<DockerStackCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
320
|
+
|
|
321
|
+
type IncidentSeverity = 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
322
|
+
interface IncidentCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
323
|
+
/** Incident title */
|
|
324
|
+
title: string;
|
|
325
|
+
/** Severity level */
|
|
326
|
+
severity: IncidentSeverity;
|
|
327
|
+
/** Timestamp string */
|
|
328
|
+
timestamp: string;
|
|
329
|
+
/** Description / detail */
|
|
330
|
+
description?: string;
|
|
331
|
+
/** Service name affected */
|
|
332
|
+
service?: string;
|
|
333
|
+
/** Whether acknowledged */
|
|
334
|
+
acknowledged?: boolean;
|
|
335
|
+
/** Whether the card is loading */
|
|
336
|
+
loading?: boolean;
|
|
337
|
+
}
|
|
338
|
+
declare const IncidentCard: react.ForwardRefExoticComponent<IncidentCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
339
|
+
|
|
340
|
+
type ApprovalState = 'pending' | 'approved' | 'rejected';
|
|
341
|
+
interface ApprovalCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
342
|
+
/** Action being approved */
|
|
343
|
+
action: string;
|
|
344
|
+
/** Description of what will happen */
|
|
345
|
+
description?: string;
|
|
346
|
+
/** Source (e.g. 'Emma → backup.sh') */
|
|
347
|
+
source?: string;
|
|
348
|
+
/** Current approval state */
|
|
349
|
+
state?: ApprovalState;
|
|
350
|
+
/** Timestamp of the request */
|
|
351
|
+
timestamp?: string;
|
|
352
|
+
/** Called when user approves */
|
|
353
|
+
onApprove?: () => void;
|
|
354
|
+
/** Called when user rejects */
|
|
355
|
+
onReject?: () => void;
|
|
356
|
+
/** Whether actions are disabled */
|
|
357
|
+
disabled?: boolean;
|
|
358
|
+
/** Whether the card is loading */
|
|
359
|
+
loading?: boolean;
|
|
360
|
+
}
|
|
361
|
+
declare const ApprovalCard: react.ForwardRefExoticComponent<ApprovalCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
362
|
+
|
|
363
|
+
interface BackupJob {
|
|
364
|
+
name: string;
|
|
365
|
+
status: Status;
|
|
366
|
+
lastRun?: string;
|
|
367
|
+
nextRun?: string;
|
|
368
|
+
size?: string;
|
|
369
|
+
target?: string;
|
|
370
|
+
}
|
|
371
|
+
interface BackupStatusPanelProps extends HTMLAttributes<HTMLDivElement> {
|
|
372
|
+
/** List of backup jobs */
|
|
373
|
+
jobs: BackupJob[];
|
|
374
|
+
/** Total size of all backups */
|
|
375
|
+
totalSize?: string;
|
|
376
|
+
/** Last full backup timestamp */
|
|
377
|
+
lastFullBackup?: string;
|
|
378
|
+
/** Whether the panel is loading */
|
|
379
|
+
loading?: boolean;
|
|
380
|
+
}
|
|
381
|
+
declare const BackupStatusPanel: react.ForwardRefExoticComponent<BackupStatusPanelProps & react.RefAttributes<HTMLDivElement>>;
|
|
382
|
+
|
|
383
|
+
interface TimelineItemData {
|
|
384
|
+
id: string;
|
|
385
|
+
/** Timestamp label */
|
|
386
|
+
time: string;
|
|
387
|
+
/** Title/headline of the event */
|
|
388
|
+
title: string;
|
|
389
|
+
/** Description */
|
|
390
|
+
description?: string;
|
|
391
|
+
/** Status indicator dot */
|
|
392
|
+
status?: Status;
|
|
393
|
+
/** Optional icon to replace dot */
|
|
394
|
+
icon?: ReactNode;
|
|
395
|
+
/** Optional metadata badges */
|
|
396
|
+
meta?: string[];
|
|
397
|
+
}
|
|
398
|
+
interface TimelineProps extends HTMLAttributes<HTMLDivElement> {
|
|
399
|
+
/** Timeline events */
|
|
400
|
+
items: TimelineItemData[];
|
|
401
|
+
/** Whether items are active (show animated dot pulse) */
|
|
402
|
+
active?: boolean;
|
|
403
|
+
/** Whether the timeline is loading */
|
|
404
|
+
loading?: boolean;
|
|
405
|
+
}
|
|
406
|
+
declare const Timeline: react.ForwardRefExoticComponent<TimelineProps & react.RefAttributes<HTMLDivElement>>;
|
|
407
|
+
|
|
408
|
+
interface AlertItem {
|
|
409
|
+
id: string;
|
|
410
|
+
title: string;
|
|
411
|
+
severity: IncidentSeverity;
|
|
412
|
+
timestamp: string;
|
|
413
|
+
description?: string;
|
|
414
|
+
service?: string;
|
|
415
|
+
acknowledged?: boolean;
|
|
416
|
+
}
|
|
417
|
+
interface AlertInboxProps extends HTMLAttributes<HTMLDivElement> {
|
|
418
|
+
alerts: AlertItem[];
|
|
419
|
+
filterSeverity?: IncidentSeverity | '';
|
|
420
|
+
onAcknowledge?: (id: string) => void;
|
|
421
|
+
loading?: boolean;
|
|
422
|
+
emptyMessage?: string;
|
|
423
|
+
}
|
|
424
|
+
declare const AlertInbox: react.ForwardRefExoticComponent<AlertInboxProps & react.RefAttributes<HTMLDivElement>>;
|
|
425
|
+
|
|
426
|
+
type RollbackStepStatus = 'pending' | 'running' | 'success' | 'failed' | 'skipped';
|
|
427
|
+
interface RollbackStep {
|
|
428
|
+
id: string;
|
|
429
|
+
label: string;
|
|
430
|
+
description?: string;
|
|
431
|
+
status: RollbackStepStatus;
|
|
432
|
+
}
|
|
433
|
+
interface RollbackPlanProps extends HTMLAttributes<HTMLDivElement> {
|
|
434
|
+
/** Name/identifier for the plan */
|
|
435
|
+
name: string;
|
|
436
|
+
/** Rollback steps */
|
|
437
|
+
steps: RollbackStep[];
|
|
438
|
+
/** Whether the plan is executing */
|
|
439
|
+
executing?: boolean;
|
|
440
|
+
/** Whether the plan is loading */
|
|
441
|
+
loading?: boolean;
|
|
442
|
+
}
|
|
443
|
+
declare const RollbackPlan: react.ForwardRefExoticComponent<RollbackPlanProps & react.RefAttributes<HTMLDivElement>>;
|
|
444
|
+
|
|
445
|
+
interface DiffLine {
|
|
446
|
+
/** Diff content */
|
|
447
|
+
text: string;
|
|
448
|
+
/** Change type */
|
|
449
|
+
type: 'add' | 'remove' | 'context';
|
|
450
|
+
/** Line number in original */
|
|
451
|
+
oldLine?: number;
|
|
452
|
+
/** Line number in new */
|
|
453
|
+
newLine?: number;
|
|
454
|
+
}
|
|
455
|
+
interface ActionDiffProps extends HTMLAttributes<HTMLDivElement> {
|
|
456
|
+
/** Diff lines */
|
|
457
|
+
lines: DiffLine[];
|
|
458
|
+
/** File/label name */
|
|
459
|
+
label?: string;
|
|
460
|
+
/** View mode */
|
|
461
|
+
view?: 'unified' | 'side-by-side';
|
|
462
|
+
/** Whether the diff is loading */
|
|
463
|
+
loading?: boolean;
|
|
464
|
+
}
|
|
465
|
+
declare const ActionDiff: react.ForwardRefExoticComponent<ActionDiffProps & react.RefAttributes<HTMLDivElement>>;
|
|
466
|
+
|
|
467
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'trace';
|
|
468
|
+
interface LogLine {
|
|
469
|
+
/** Line content */
|
|
470
|
+
text: string;
|
|
471
|
+
/** Log level for color coding */
|
|
472
|
+
level?: LogLevel;
|
|
473
|
+
/** Timestamp string (optional) */
|
|
474
|
+
timestamp?: string;
|
|
475
|
+
/** Source/logger name */
|
|
476
|
+
source?: string;
|
|
477
|
+
}
|
|
478
|
+
interface LogViewerProps extends HTMLAttributes<HTMLDivElement> {
|
|
479
|
+
/** Log lines to display */
|
|
480
|
+
lines: LogLine[];
|
|
481
|
+
/** Maximum visible lines (for performance) */
|
|
482
|
+
maxLines?: number;
|
|
483
|
+
/** Show line numbers */
|
|
484
|
+
showLineNumbers?: boolean;
|
|
485
|
+
/** Show timestamps */
|
|
486
|
+
showTimestamps?: boolean;
|
|
487
|
+
/** Whether to auto-scroll (follow new content) */
|
|
488
|
+
follow?: boolean;
|
|
489
|
+
/** Enable search */
|
|
490
|
+
searchable?: boolean;
|
|
491
|
+
/** Height of the viewer */
|
|
492
|
+
height?: string;
|
|
493
|
+
/** Whether the viewer is loading */
|
|
494
|
+
loading?: boolean;
|
|
495
|
+
}
|
|
496
|
+
declare const LogViewer: react.ForwardRefExoticComponent<LogViewerProps & react.RefAttributes<HTMLDivElement>>;
|
|
497
|
+
|
|
498
|
+
interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
499
|
+
label?: string;
|
|
500
|
+
error?: string;
|
|
501
|
+
}
|
|
502
|
+
declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
|
|
503
|
+
|
|
504
|
+
interface SelectOption {
|
|
505
|
+
value: string;
|
|
506
|
+
label: string;
|
|
507
|
+
}
|
|
508
|
+
interface SelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
509
|
+
label?: string;
|
|
510
|
+
error?: string;
|
|
511
|
+
placeholder?: string;
|
|
512
|
+
options?: SelectOption[];
|
|
513
|
+
value?: string;
|
|
514
|
+
onChange?: (value: string) => void;
|
|
515
|
+
}
|
|
516
|
+
declare const Select: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLDivElement>>;
|
|
517
|
+
|
|
518
|
+
interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
519
|
+
label?: string;
|
|
520
|
+
}
|
|
521
|
+
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
522
|
+
|
|
523
|
+
interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
524
|
+
label?: string;
|
|
525
|
+
}
|
|
526
|
+
declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLInputElement>>;
|
|
527
|
+
|
|
528
|
+
interface RadioGroupProps {
|
|
529
|
+
/** Group label */
|
|
530
|
+
label?: string;
|
|
531
|
+
/** Error message */
|
|
532
|
+
error?: string;
|
|
533
|
+
children?: React.ReactNode;
|
|
534
|
+
className?: string;
|
|
535
|
+
}
|
|
536
|
+
declare const RadioGroup: react.ForwardRefExoticComponent<RadioGroupProps & react.RefAttributes<HTMLFieldSetElement>>;
|
|
537
|
+
interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
538
|
+
label?: string;
|
|
539
|
+
}
|
|
540
|
+
declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
|
|
541
|
+
|
|
542
|
+
type FooterLabels = {
|
|
543
|
+
/** Text for the tollerud.no link (e.g. "A Tollerud Project"). */
|
|
544
|
+
tollerudProject: string;
|
|
545
|
+
/**
|
|
546
|
+
* Optional middle segment after the link, before the rights line.
|
|
547
|
+
* Example for Advania: `"for Advania Norge AS."`
|
|
548
|
+
*/
|
|
549
|
+
attribution?: string;
|
|
550
|
+
allRightsReserved: string;
|
|
551
|
+
};
|
|
552
|
+
type FooterProps = {
|
|
553
|
+
labels?: Partial<FooterLabels>;
|
|
554
|
+
/** Layout behavior: responsive keeps mobile-first stacking, row forces horizontal layout. */
|
|
555
|
+
layout?: 'responsive' | 'row';
|
|
556
|
+
/** Merged onto <footer>. Use for extra layout, padding, etc. */
|
|
557
|
+
className?: string;
|
|
558
|
+
/** Merged onto <footer> (wins over conflicting backgroundColor from classes when needed). */
|
|
559
|
+
style?: CSSProperties;
|
|
560
|
+
/**
|
|
561
|
+
* When true, skips all default surface styling so className/style fully control the bar
|
|
562
|
+
* (avoids fighting default background/border).
|
|
563
|
+
*/
|
|
564
|
+
unstyled?: boolean;
|
|
565
|
+
/** When true, uses accent (yellow) surface instead of neutral dark. */
|
|
566
|
+
accent?: boolean;
|
|
567
|
+
classNameInner?: string;
|
|
568
|
+
classNameLogo?: string;
|
|
569
|
+
classNameText?: string;
|
|
570
|
+
classNameLink?: string;
|
|
571
|
+
};
|
|
572
|
+
declare function Footer({ labels, layout, className, style, unstyled, accent, classNameInner, classNameLogo, classNameText, classNameLink, }: FooterProps): ReactElement;
|
|
573
|
+
|
|
574
|
+
declare const Dialog: react.FC<DialogPrimitive.DialogProps>;
|
|
575
|
+
declare const DialogTrigger: react.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
576
|
+
declare const DialogPortal: react.FC<DialogPrimitive.DialogPortalProps>;
|
|
577
|
+
declare const DialogClose: react.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
|
|
578
|
+
declare const DialogOverlay: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
579
|
+
declare const DialogContent: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
580
|
+
declare const DialogHeader: {
|
|
581
|
+
({ className, ...props }: react.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
582
|
+
displayName: string;
|
|
583
|
+
};
|
|
584
|
+
declare const DialogFooter: {
|
|
585
|
+
({ className, ...props }: react.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
586
|
+
displayName: string;
|
|
587
|
+
};
|
|
588
|
+
declare const DialogTitle: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
589
|
+
declare const DialogDescription: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
590
|
+
|
|
591
|
+
declare const TooltipProvider: react.FC<TooltipPrimitive.TooltipProviderProps>;
|
|
592
|
+
declare function Tooltip({ children, defaultOpen, open: controlledOpen, onOpenChange: controlledOnOpenChange, ...props }: react.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
593
|
+
declare namespace Tooltip {
|
|
594
|
+
var displayName: string;
|
|
595
|
+
}
|
|
596
|
+
declare const TooltipTrigger: react.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
597
|
+
declare const TooltipContent: react.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
598
|
+
|
|
599
|
+
declare const Tabs: react.ForwardRefExoticComponent<TabsPrimitive.TabsProps & react.RefAttributes<HTMLDivElement>>;
|
|
600
|
+
declare const TabsList: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
601
|
+
declare const TabsTrigger: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
602
|
+
declare const TabsContent: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
603
|
+
|
|
604
|
+
declare function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
605
|
+
|
|
606
|
+
declare const Progress: react.ForwardRefExoticComponent<Omit<ProgressPrimitive.ProgressProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
607
|
+
|
|
608
|
+
type TollerudToasterProps = ToasterProps & {
|
|
609
|
+
/** Toast color theme. Wire to your app theme when you have one. */
|
|
610
|
+
theme?: ToasterProps['theme'];
|
|
611
|
+
};
|
|
612
|
+
declare const Toaster: ({ theme, ...props }: TollerudToasterProps) => react_jsx_runtime.JSX.Element;
|
|
613
|
+
|
|
614
|
+
interface EmptyProps extends HTMLAttributes<HTMLDivElement> {
|
|
615
|
+
}
|
|
616
|
+
declare const Empty: react.ForwardRefExoticComponent<EmptyProps & react.RefAttributes<HTMLDivElement>>;
|
|
617
|
+
declare const EmptyHeader: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
618
|
+
declare const EmptyIcon: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
619
|
+
declare const EmptyTitle: react.ForwardRefExoticComponent<HTMLAttributes<HTMLHeadingElement> & react.RefAttributes<HTMLHeadingElement>>;
|
|
620
|
+
declare const EmptyDescription: react.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & react.RefAttributes<HTMLParagraphElement>>;
|
|
621
|
+
declare const EmptyContent: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
622
|
+
|
|
623
|
+
declare const DropdownMenu: react.FC<DropdownMenuPrimitive.DropdownMenuProps>;
|
|
624
|
+
declare const DropdownMenuTrigger: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
625
|
+
declare const DropdownMenuContent: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
626
|
+
declare const DropdownMenuItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
627
|
+
inset?: boolean;
|
|
628
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
629
|
+
declare const DropdownMenuSeparator: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
630
|
+
declare const DropdownMenuLabel: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
631
|
+
inset?: boolean;
|
|
632
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
633
|
+
|
|
634
|
+
type SheetSide = 'left' | 'right';
|
|
635
|
+
interface SheetProps {
|
|
636
|
+
open?: boolean;
|
|
637
|
+
onOpenChange?: (open: boolean) => void;
|
|
638
|
+
children: ReactNode;
|
|
639
|
+
}
|
|
640
|
+
declare const Sheet: ({ open, onOpenChange, children }: SheetProps) => react_jsx_runtime.JSX.Element;
|
|
641
|
+
declare const SheetTrigger: react.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
642
|
+
declare const SheetClose: react.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
|
|
643
|
+
interface SheetContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
|
|
644
|
+
side?: SheetSide;
|
|
645
|
+
}
|
|
646
|
+
declare const SheetContent: react.ForwardRefExoticComponent<SheetContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
647
|
+
declare const SheetHeader: ({ className, ...props }: {
|
|
648
|
+
className?: string;
|
|
649
|
+
children?: ReactNode;
|
|
650
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
651
|
+
declare const SheetTitle: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
652
|
+
declare const SheetDescription: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
653
|
+
|
|
654
|
+
interface Column<T> {
|
|
655
|
+
key: string;
|
|
656
|
+
label: string;
|
|
657
|
+
sortable?: boolean;
|
|
658
|
+
filterable?: boolean;
|
|
659
|
+
align?: 'left' | 'center' | 'right';
|
|
660
|
+
width?: string;
|
|
661
|
+
render?: (value: unknown, row: T) => ReactNode;
|
|
662
|
+
}
|
|
663
|
+
interface DataTableProps<T extends Record<string, unknown>> {
|
|
664
|
+
columns: Column<T>[];
|
|
665
|
+
data: T[];
|
|
666
|
+
/** Row key extractor — defaults to `row.id` or `row.key` */
|
|
667
|
+
rowKey?: keyof T | ((row: T) => string | number);
|
|
668
|
+
onRowClick?: (row: T) => void;
|
|
669
|
+
className?: string;
|
|
670
|
+
emptyMessage?: string;
|
|
671
|
+
}
|
|
672
|
+
declare const DataTable: react.ForwardRefExoticComponent<DataTableProps<Record<string, unknown>> & react.RefAttributes<HTMLDivElement>>;
|
|
673
|
+
|
|
674
|
+
interface GlowCardProps {
|
|
675
|
+
children: ReactNode;
|
|
676
|
+
className?: string;
|
|
677
|
+
/** Color of the glow. Default: accent yellow */
|
|
678
|
+
glowColor?: string;
|
|
679
|
+
/** Glow intensity (0–1). Default: 0.15 */
|
|
680
|
+
intensity?: number;
|
|
681
|
+
}
|
|
682
|
+
declare function GlowCard({ children, className, glowColor, intensity, }: GlowCardProps): react_jsx_runtime.JSX.Element;
|
|
683
|
+
|
|
684
|
+
interface BentoDashboardProps {
|
|
685
|
+
title: string;
|
|
686
|
+
hosts?: HostCardProps[];
|
|
687
|
+
metrics?: StatCardProps[];
|
|
688
|
+
services?: ServiceHealthCardProps[];
|
|
689
|
+
incidents?: {
|
|
690
|
+
title: string;
|
|
691
|
+
severity: IncidentSeverity;
|
|
692
|
+
timestamp: string;
|
|
693
|
+
service: string;
|
|
694
|
+
description?: string;
|
|
695
|
+
acknowledged?: boolean;
|
|
696
|
+
}[];
|
|
697
|
+
backupJobs?: BackupJob[];
|
|
698
|
+
className?: string;
|
|
699
|
+
/** Render the incident list footer */
|
|
700
|
+
renderIncidentFooter?: () => ReactNode;
|
|
701
|
+
}
|
|
702
|
+
declare function BentoDashboard({ title, hosts, metrics, services, incidents, className, }: BentoDashboardProps): react_jsx_runtime.JSX.Element;
|
|
703
|
+
|
|
704
|
+
export { ActionDiff, type ActionDiffProps, type ActionItem, ActionRow, type ActionRowProps, Alert, AlertInbox, type AlertInboxProps, type AlertProps, ApprovalCard, type ApprovalCardProps, BackupStatusPanel, type BackupStatusPanelProps, Badge, type BadgeProps, BentoDashboard, type BentoDashboardProps, Button, type ButtonProps, Card, type CardProps, Checkbox, type CheckboxProps, CodeBlock, type CodeBlockProps, type Column, type CommandGroup, CommandMenu, type CommandMenuProps, Container, type ContainerProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DockerStackCard, type DockerStackCardProps, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyIcon, EmptyTitle, Footer, type FooterLabels, type FooterProps, GlowCard, type GlowCardProps, HostCard, type HostCardProps, IncidentCard, type IncidentCardProps, type IncidentSeverity, Input, type InputProps, Kbd, type KbdProps, LogViewer, type LogViewerProps, NoirGlowBackground, type NoirGlowBackgroundProps, Progress, Radio, RadioGroup, type RadioGroupProps, type RadioProps, RollbackPlan, type RollbackPlanProps, Select, type SelectProps, ServiceHealthCard, type ServiceHealthCardProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger, Skeleton, StatCard, type StatCardProps, type Status, StatusDot, type StatusDotProps, Switch, type SwitchProps, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Timeline, type TimelineItemData, type TimelineProps, Toaster, type TollerudToasterProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, cn };
|