@cjlapao/ui-kit 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3666 @@
1
+ import * as React$1 from 'react';
2
+ import React__default, { ButtonHTMLAttributes, ReactNode, ReactElement, InputHTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, SVGProps } from 'react';
3
+ import { T as TrueColor, B as ButtonVariant, S as Size, I as IconName, H as HelpButtonProps, C as CapsuleBlueprintParameter } from './CapsuleBlueprint-w82xP6zg.js';
4
+ export { a as CapsuleBlueprintValueType, c as configureTheme, g as getAlertColorClasses, b as getBadgeColorClasses, d as getButtonActiveClasses, e as getButtonActiveHoverClasses, f as getButtonBaseClasses, h as getButtonColorClasses, i as getButtonHoverClasses, j as getCheckboxColorClasses, k as getLoaderProgressColors, l as getMultiToggleColorTokens, m as getMultiToggleVariantTokens, n as getPanelToneStyles, o as getPillColorClasses, p as getSpinnerColorTokens, q as getStatTileColorClasses, r as getStepperTonePalette, s as getTabsColorTokens, t as getToggleColorClasses, u as iconRegistry, v as resetTheme } from './CapsuleBlueprint-w82xP6zg.js';
5
+
6
+ type AlertVariant = "subtle" | "solid" | "outline";
7
+ interface AlertProps extends React__default.HTMLAttributes<HTMLDivElement> {
8
+ tone?: TrueColor;
9
+ color?: TrueColor;
10
+ variant?: AlertVariant;
11
+ title?: string;
12
+ description?: string;
13
+ icon?: string | React__default.ReactElement | false;
14
+ actions?: React__default.ReactNode;
15
+ dismissible?: boolean;
16
+ onDismiss?: () => void;
17
+ }
18
+ declare const Alert: React__default.ForwardRefExoticComponent<AlertProps & React__default.RefAttributes<HTMLDivElement>>;
19
+
20
+ interface AppDividerProps {
21
+ /** Height of the divider in pixels or as CSS value */
22
+ height?: number | string;
23
+ /** Width of the divider in pixels */
24
+ width?: number;
25
+ /** Margin around the divider */
26
+ margin?: number | string;
27
+ /** Additional CSS classes */
28
+ className?: string;
29
+ }
30
+ /**
31
+ * A vertical divider for separating header sections
32
+ */
33
+ declare const AppDivider: React__default.FC<AppDividerProps>;
34
+
35
+ interface BadgeProps {
36
+ /**
37
+ * Content to display inside the badge
38
+ */
39
+ count?: number | string;
40
+ /**
41
+ * Show only a dot indicator (no count)
42
+ */
43
+ dot?: boolean;
44
+ /**
45
+ * Max count to display before showing "+"
46
+ * @default 99
47
+ */
48
+ maxCount?: number;
49
+ /**
50
+ * Badge color variant
51
+ * @default "neutral"
52
+ */
53
+ tone?: TrueColor;
54
+ /**
55
+ * Additional class names
56
+ */
57
+ className?: string;
58
+ /**
59
+ * Additional styles
60
+ */
61
+ style?: React__default.CSSProperties;
62
+ }
63
+ /**
64
+ * Badge component for displaying notification counts or indicators
65
+ */
66
+ declare const Badge: React__default.FC<BadgeProps>;
67
+
68
+ /**
69
+ * common/theme/glass.ts — Framework-agnostic glass utility module.
70
+ *
71
+ * Extracts all glass logic from Panel into reusable functions and types
72
+ * so that any control (Button, IconButton, DropdownButton, etc.) can
73
+ * compose glass styling without duplicating the Panel implementation.
74
+ *
75
+ * This file is pure TypeScript — no React, Vue, or DOM imports.
76
+ */
77
+
78
+ /**
79
+ * Backdrop vibrancy level for glass surfaces.
80
+ * - `"low"` → 1.0× saturation
81
+ * - `"medium"` → 1.2× saturation (default)
82
+ * - `"high"` → 1.4× saturation
83
+ * - `number` → arbitrary multiplier (0 – 2 recommended)
84
+ */
85
+ type GlassVibrancy = "low" | "medium" | "high" | number;
86
+ /**
87
+ * Glass fill transparency level.
88
+ * - `"frosted"` → 45 % light / 15 % dark (default)
89
+ * - `"light"` → 70 % light / 25 % dark
90
+ * - `"clear"` → 20 % light / 5 % dark
91
+ * - `number` → 0–1 fraction; light = round(frac × 100), dark = min(round(frac × 30), 30)
92
+ */
93
+ type GlassOpacity = "frosted" | "light" | "clear" | number;
94
+ /**
95
+ * Specular highlight mode for glass surfaces.
96
+ * - `"none"` → no specular overlay
97
+ * - `"classic"` → single hairline gradient at top edge
98
+ * - `"halo"` → corner caps + diffuse band + bottom darken
99
+ */
100
+ type SpecularMode = "none" | "classic" | "halo";
101
+
102
+ type TooltipPosition = "top" | "bottom";
103
+ interface TooltipProps {
104
+ /** Text shown in the tooltip. When omitted the component renders children as-is. */
105
+ text?: string;
106
+ /** How long to wait (ms) before showing the tooltip. Defaults to 500. */
107
+ delay?: number;
108
+ /** Where to place the tooltip relative to the trigger. Defaults to 'top'. */
109
+ position?: TooltipPosition;
110
+ /** Extra classes applied to the outer wrapper element. */
111
+ wrapperClassName?: string;
112
+ children: React__default.ReactNode;
113
+ }
114
+ declare const Tooltip: React__default.FC<TooltipProps>;
115
+
116
+ type ButtonColor = TrueColor;
117
+
118
+ type ButtonSize = "xs" | "sm" | "md" | "lg" | "xl";
119
+ type ButtonWeight = "normal" | "medium" | "semibold" | "bold";
120
+ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
121
+ variant?: ButtonVariant;
122
+ color?: TrueColor;
123
+ size?: ButtonSize;
124
+ weight?: ButtonWeight;
125
+ fullWidth?: boolean;
126
+ leadingIcon?: string | React__default.ReactElement;
127
+ trailingIcon?: string | React__default.ReactElement;
128
+ loading?: boolean;
129
+ iconOnly?: boolean;
130
+ accent?: boolean;
131
+ accentColor?: TrueColor;
132
+ /** When true, renders in a persistent lighter "on" state with hover suppressed. accentColor overrides the active color. */
133
+ active?: boolean;
134
+ /** When true, applies glass styling (fill + vibrancy + optional specular overlay). */
135
+ glass?: boolean;
136
+ /** Backdrop vibrancy level for glass surfaces. */
137
+ vibrancy?: GlassVibrancy;
138
+ /** Glass fill transparency level for glass surfaces. */
139
+ glassOpacity?: GlassOpacity;
140
+ /** Specular highlight mode for glass surfaces. */
141
+ specularMode?: SpecularMode;
142
+ className?: string;
143
+ children?: ReactNode;
144
+ /** When set, a styled tooltip is shown on hover. */
145
+ tooltip?: string;
146
+ /** Position of the tooltip relative to the button. Defaults to 'top'. */
147
+ tooltipPosition?: TooltipPosition;
148
+ }
149
+ declare const Button: React__default.ForwardRefExoticComponent<ButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
150
+
151
+ type SpinnerSize = "xs" | "sm" | "md" | "lg" | "xl";
152
+ type SpinnerColor = TrueColor;
153
+ type SpinnerVariant = "solid" | "segments";
154
+ type SpinnerThickness = "thin" | "normal" | "thick";
155
+ interface SpinnerProps extends React__default.HTMLAttributes<HTMLSpanElement> {
156
+ size?: SpinnerSize;
157
+ color?: SpinnerColor;
158
+ variant?: SpinnerVariant;
159
+ thickness?: SpinnerThickness;
160
+ label?: string;
161
+ }
162
+ declare const Spinner: React__default.ForwardRefExoticComponent<SpinnerProps & React__default.RefAttributes<HTMLSpanElement>>;
163
+
164
+ type IconButtonRounded = "md" | "lg" | "xl" | "full";
165
+ interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "color"> {
166
+ icon: string | React__default.ReactElement;
167
+ variant?: ButtonVariant;
168
+ color?: ButtonColor;
169
+ size?: ButtonSize;
170
+ rounded?: IconButtonRounded;
171
+ customSizeClass?: string;
172
+ iconClassName?: string;
173
+ loading?: boolean;
174
+ spinnerVariant?: "solid" | "segments";
175
+ spinnerColor?: SpinnerColor;
176
+ srLabel?: string;
177
+ accent?: boolean;
178
+ accentColor?: ButtonColor;
179
+ /** When set, a styled tooltip is shown on hover (replaces the native title attribute). */
180
+ tooltip?: string;
181
+ /** Position of the tooltip relative to the button. Defaults to 'top'. */
182
+ tooltipPosition?: TooltipPosition;
183
+ /** When true, applies glass styling (fill + vibrancy + optional specular overlay). */
184
+ glass?: boolean;
185
+ /** Backdrop vibrancy level for glass surfaces. */
186
+ vibrancy?: GlassVibrancy;
187
+ /** Glass fill transparency level for glass surfaces. Defaults to "clear" for IconButton. */
188
+ glassOpacity?: GlassOpacity;
189
+ /** Specular highlight mode for glass surfaces. Defaults to "none" for IconButton. */
190
+ specularMode?: SpecularMode;
191
+ }
192
+ declare const IconButton: React__default.ForwardRefExoticComponent<IconButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
193
+
194
+ type BadgePosition = "top-start" | "top-end" | "bottom-start" | "bottom-end";
195
+ interface BadgeIconProps extends IconButtonProps {
196
+ /**
197
+ * Optional custom badge node. When provided, overrides count/dot rendering.
198
+ */
199
+ badgeContent?: React__default.ReactNode;
200
+ /**
201
+ * Numeric badge count. Ignored when `badgeContent` is supplied.
202
+ */
203
+ badgeCount?: number;
204
+ /**
205
+ * Show a small dot indicator instead of a number. Ignored when `badgeContent` is supplied.
206
+ */
207
+ badgeDot?: boolean;
208
+ /**
209
+ * Tailwind position for the badge relative to the button.
210
+ */
211
+ badgePosition?: BadgePosition;
212
+ /**
213
+ * Additional props forwarded to the underlying `Badge`.
214
+ */
215
+ badgeProps?: Omit<BadgeProps, "count" | "dot">;
216
+ /**
217
+ * Extra class applied to the outer wrapper span.
218
+ */
219
+ wrapperClassName?: string;
220
+ /**
221
+ * Expands the control to fill the available width.
222
+ */
223
+ fullWidth?: boolean;
224
+ }
225
+ declare const BadgeIcon: React__default.ForwardRefExoticComponent<BadgeIconProps & React__default.RefAttributes<HTMLButtonElement>>;
226
+
227
+ type PillVariant = "solid" | "soft" | "outline";
228
+ type PillSize = "xs" | "sm" | "md" | "lg";
229
+ type PillTone = TrueColor;
230
+ interface PillProps extends React__default.HTMLAttributes<HTMLDivElement> {
231
+ tone?: PillTone;
232
+ variant?: PillVariant;
233
+ size?: PillSize;
234
+ uppercase?: boolean;
235
+ icon?: React__default.ReactNode;
236
+ dot?: boolean;
237
+ }
238
+ declare const Pill: React__default.FC<PillProps>;
239
+
240
+ type ProgressSize = "xs" | "sm" | "md" | "lg";
241
+ type ProgressMotion = "none" | "shimmer" | "pulse" | "shimmer-pulse" | "stripes" | "stripes-shimmer";
242
+ type ProgressMotionSpeed = "slow" | "normal" | "fast";
243
+ type ProgressMotionDirection = "forward" | "reverse";
244
+ interface ProgressProps extends React__default.HTMLAttributes<HTMLDivElement> {
245
+ value?: number;
246
+ size?: ProgressSize;
247
+ color?: SpinnerColor;
248
+ motion?: ProgressMotion;
249
+ motionSpeed?: ProgressMotionSpeed;
250
+ motionDirection?: ProgressMotionDirection;
251
+ /**
252
+ * @deprecated Use `motion="shimmer"` or `motion="none"` instead.
253
+ */
254
+ showShimmer?: boolean;
255
+ }
256
+ declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps & React__default.RefAttributes<HTMLDivElement>>;
257
+
258
+ interface MultiProgressBarSeries {
259
+ key: string;
260
+ label: string;
261
+ labelClassName?: string;
262
+ value: number;
263
+ /** Tailwind bg color class e.g., 'bg-rose-500'. Omit to auto-assign from the theme palette. */
264
+ color?: string;
265
+ /** Custom formatted value to display in legend, if omitted `value` is used */
266
+ displayValue?: React__default.ReactNode;
267
+ }
268
+ interface MultiProgressBarProps {
269
+ label: string;
270
+ labelClassName?: string;
271
+ secondaryLabel?: React__default.ReactNode;
272
+ secondaryLabelClassName?: string;
273
+ totalLabel?: React__default.ReactNode;
274
+ total: number;
275
+ series: MultiProgressBarSeries[];
276
+ className?: string;
277
+ }
278
+ declare const MultiProgressBar: React__default.FC<MultiProgressBarProps>;
279
+
280
+ type StatusSpinnerIntent = "neutral" | "info" | "success" | "warning" | "danger";
281
+ type StatusSpinnerSize = "xs" | "sm" | "md" | "lg";
282
+ interface StatusSpinnerProps extends React__default.HTMLAttributes<HTMLSpanElement> {
283
+ intent?: StatusSpinnerIntent;
284
+ size?: StatusSpinnerSize;
285
+ animated?: boolean;
286
+ label?: string;
287
+ }
288
+ declare const StatusSpinner: React__default.ForwardRefExoticComponent<StatusSpinnerProps & React__default.RefAttributes<HTMLSpanElement>>;
289
+
290
+ type LoaderVariant = "spinner" | "progress";
291
+ type LoaderSize = "sm" | "md" | "lg";
292
+ type GlassBlurIntensity = "none" | "low" | "medium" | "high";
293
+ type LoaderColor = SpinnerColor;
294
+ interface LoaderProps {
295
+ variant?: LoaderVariant;
296
+ size?: LoaderSize;
297
+ color?: LoaderColor;
298
+ spinnerVariant?: SpinnerProps["variant"];
299
+ spinnerThickness?: SpinnerProps["thickness"];
300
+ title?: ReactNode;
301
+ label?: ReactNode;
302
+ progress?: number;
303
+ className?: string;
304
+ overlay?: boolean;
305
+ glass?: boolean;
306
+ glassBlurIntensity?: GlassBlurIntensity;
307
+ }
308
+ declare const Loader: React__default.FC<LoaderProps>;
309
+
310
+ type IconSize = "xs" | "sm" | "md" | "lg" | "xl";
311
+ /**
312
+ * Base icon name type - apps can extend this with their own icon names
313
+ */
314
+ type BaseIconName = string;
315
+ /**
316
+ * Icon renderer function type
317
+ */
318
+ type IconRenderer$1 = (icon: BaseIconName | ReactElement | undefined, size: IconSize | undefined, className?: string) => ReactNode;
319
+ /**
320
+ * Default no-op icon renderer - returns null for string icons
321
+ */
322
+ declare const defaultIconRenderer: IconRenderer$1;
323
+
324
+ type TextSize = "xs" | "sm" | "md" | "lg" | "xl";
325
+ type EmptyStateTone = TrueColor;
326
+ interface EmptyStateProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "title"> {
327
+ title: React__default.ReactNode;
328
+ subtitle?: React__default.ReactNode;
329
+ actionLabel?: string;
330
+ onAction?: () => void;
331
+ actionVariant?: ButtonVariant;
332
+ actionColor?: ButtonColor;
333
+ icon?: string | React__default.ReactElement;
334
+ iconSize?: IconSize;
335
+ iconColor?: TrueColor;
336
+ textSize?: TextSize;
337
+ showIcon?: boolean;
338
+ tone?: EmptyStateTone;
339
+ disableBorder?: boolean;
340
+ transparentBackground?: boolean;
341
+ fullWidth?: boolean;
342
+ fullHeight?: boolean;
343
+ actionSize?: ButtonSize;
344
+ actionLeadingIcon?: string | React__default.ReactElement;
345
+ size?: Size;
346
+ }
347
+ declare const EmptyState: React__default.FC<EmptyStateProps>;
348
+
349
+ declare const iconAccentRing: Record<TrueColor, string>;
350
+ declare const iconAccentHover: Record<TrueColor, string>;
351
+ declare const iconAccentActive: Record<TrueColor, string>;
352
+
353
+ type RandomIntensity = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
354
+ interface RandomThemeColorValue {
355
+ color: string;
356
+ intensity: RandomIntensity;
357
+ token: string;
358
+ }
359
+ /**
360
+ * Returns a random Tailwind color token based on the ui-kit theme palette,
361
+ * like `blue-500` or `emerald-300`.
362
+ */
363
+ declare const getRandomThemeColorValue: () => RandomThemeColorValue;
364
+ /**
365
+ * Returns a random Tailwind utility class for a theme color token.
366
+ * Example: `getRandomThemeColorClass('bg')` -> `bg-blue-500`.
367
+ */
368
+ declare const getRandomThemeColorClass: (prefix?: "bg" | "text" | "border") => string;
369
+ /**
370
+ * Returns an array of `count` Tailwind color utility classes.
371
+ * Uses TrueColor values in order (at intensity 500) for the first N items,
372
+ * then falls back to `getRandomThemeColorClass` for any overflow.
373
+ *
374
+ * @example
375
+ * getColorPalette(5) // ['bg-red-500', 'bg-orange-500', ...]
376
+ * getColorPalette(5, 'text') // ['text-red-500', 'text-orange-500', ...]
377
+ */
378
+ declare const getColorPalette: (count: number, prefix?: "bg" | "text" | "border") => string[];
379
+ /**
380
+ * Returns an array of `count` TrueColor names (e.g. `'red'`, `'orange'`, `'blue'`).
381
+ * Uses TrueColor values in order for the first N items,
382
+ * then falls back to random colors from RANDOM_THEME_COLORS for overflow.
383
+ * Useful when components construct their own Tailwind class strings via template literals.
384
+ *
385
+ * @example
386
+ * getColorPaletteNames(3) // ['red', 'orange', 'amber']
387
+ */
388
+ declare const getColorPaletteNames: (count: number) => TrueColor[];
389
+
390
+ type PanelVariant = "elevated" | "outlined" | "subtle" | "tonal" | "default" | "glass" | "simple" | "liquid-glass";
391
+ type PanelTone = TrueColor;
392
+ type PanelDecoration = "none" | "gradient" | "shapes" | "both";
393
+ type PanelMediaPlacement = "top" | "start" | "end" | "overlay";
394
+ type PanelPadding = "none" | "xs" | "sm" | "md" | "lg";
395
+ type PanelCorner = "rounded" | "rounded-sm" | "rounded-md" | "rounded-lg" | "rounded-full" | "pill" | "none";
396
+ type PanelActionLayout = "auto" | "stacked" | "inline";
397
+ type PanelLoaderType = Exclude<LoaderProps["variant"], undefined>;
398
+ type PanelSpecularMode = "none" | "classic" | "halo";
399
+ interface PanelAction extends Pick<ButtonProps, "variant" | "color" | "size" | "weight" | "leadingIcon" | "trailingIcon" | "loading" | "disabled" | "accent" | "accentColor"> {
400
+ id?: string;
401
+ label: React__default.ReactNode;
402
+ onClick?: ButtonProps["onClick"];
403
+ className?: string;
404
+ }
405
+ interface PanelProps extends Omit<React__default.HTMLAttributes<HTMLElement>, "title"> {
406
+ title?: React__default.ReactNode;
407
+ titleClassName?: string;
408
+ subtitle?: React__default.ReactNode;
409
+ subtitleClassName?: string;
410
+ description?: React__default.ReactNode;
411
+ descriptionClassName?: string;
412
+ badge?: React__default.ReactNode;
413
+ media?: React__default.ReactNode;
414
+ mediaPlacement?: PanelMediaPlacement;
415
+ actions?: PanelAction[];
416
+ actionLayout?: PanelActionLayout;
417
+ variant?: PanelVariant;
418
+ tone?: TrueColor;
419
+ padding?: PanelPadding;
420
+ corner?: PanelCorner;
421
+ fullWidth?: boolean;
422
+ disabled?: boolean;
423
+ flexBody?: boolean;
424
+ maxWidth?: string | number;
425
+ minHeight?: string | number;
426
+ bodyClassName?: string;
427
+ bodyStyle?: React__default.CSSProperties;
428
+ children?: React__default.ReactNode;
429
+ loading?: boolean;
430
+ loaderType?: PanelLoaderType;
431
+ loaderTitle?: React__default.ReactNode;
432
+ loaderMessage?: React__default.ReactNode;
433
+ loaderProgress?: number;
434
+ loaderColor?: LoaderProps["color"];
435
+ hoverShadow?: boolean;
436
+ decoration?: PanelDecoration;
437
+ /**
438
+ * Adds a subtle background tint on hover and lightens any decoration elements.
439
+ * Defaults to `true` when an `onClick` handler is present, otherwise `false`.
440
+ */
441
+ hoverable?: boolean;
442
+ color?: TrueColor;
443
+ /**
444
+ * Override the default hover color.
445
+ * If not provided, it defaults to the `color` prop if available, or a neutral tint.
446
+ */
447
+ hoverColor?: TrueColor;
448
+ /**
449
+ * Override the default border color.
450
+ * If not provided, it defaults to the `tone` or `color` prop depending on variant.
451
+ */
452
+ borderColor?: TrueColor;
453
+ /**
454
+ * Override the default background color.
455
+ */
456
+ backgroundColor?: TrueColor;
457
+ /**
458
+ * controls if the panel body should be scrollable
459
+ * @default true
460
+ */
461
+ scrollable?: boolean;
462
+ /**
463
+ * Backdrop vibrancy for the liquid-glass variant.
464
+ * Preset takes priority over a numeric value when both are provided.
465
+ */
466
+ vibrancy?: "low" | "medium" | "high" | number;
467
+ /**
468
+ * Glass fill opacity for the liquid-glass variant.
469
+ * Preset takes priority over a numeric value when both are provided.
470
+ * @default "frosted"
471
+ */
472
+ glassOpacity?: "frosted" | "light" | "clear" | number;
473
+ /**
474
+ * Whether the liquid-glass variant shows a specular highlight at the top.
475
+ * @default true
476
+ *
477
+ * @deprecated Use specularMode instead. Kept for backward compatibility.
478
+ * When both are provided, specularMode takes precedence. If neither is set,
479
+ * defaults to "classic".
480
+ */
481
+ specularHighlight?: boolean;
482
+ /**
483
+ * Specular highlight mode for the liquid-glass variant.
484
+ * Controls how light reflects off the glass surface.
485
+ * @default "classic"
486
+ */
487
+ specularMode?: PanelSpecularMode;
488
+ }
489
+ declare const Panel: React__default.FC<PanelProps>;
490
+
491
+ type HeroTitleSize = "xs" | "sm" | "md" | "lg" | "xl";
492
+ type HeroSubtitleSize = "xs" | "sm" | "md";
493
+ type HeroPadding = "none" | "xs" | "sm" | "md" | "lg" | "xl";
494
+ interface HeroProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "title"> {
495
+ /** Main heading text. */
496
+ title: React__default.ReactNode;
497
+ /** Supporting text rendered below the title at lower opacity. */
498
+ subtitle?: React__default.ReactNode;
499
+ /** Icon name from the registry, or a pre-built React element. When omitted the icon slot is not rendered. */
500
+ icon?: IconName | React__default.ReactElement;
501
+ /** Colour tone — drives the gradient background. Defaults to `"blue"`. */
502
+ tone?: TrueColor;
503
+ /** Size of the title text. Colour is always white. Defaults to `"sm"`. */
504
+ titleSize?: HeroTitleSize;
505
+ /** Size of the subtitle text. Colour is always white/75. Defaults to `"xs"`. */
506
+ subtitleSize?: HeroSubtitleSize;
507
+ /** Internal padding. Defaults to `"none"`. */
508
+ padding?: HeroPadding;
509
+ /** Whether to apply `rounded-xl` corner rounding. Defaults to `true`. */
510
+ rounded?: boolean;
511
+ /**
512
+ * Decorative layer inside the banner:
513
+ * - `"shapes"` — three floating circles at low white opacity
514
+ * - `"gradient"` — a diagonal white-to-transparent light wash
515
+ * - `"both"` — circles + wash (default)
516
+ * - `"none"` — no decoration
517
+ */
518
+ decoration?: PanelDecoration;
519
+ }
520
+ declare const Hero: React__default.FC<HeroProps>;
521
+
522
+ interface DynamicImgProps {
523
+ base64: string;
524
+ fill?: string;
525
+ stroke?: string;
526
+ className?: string;
527
+ title?: string;
528
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
529
+ style?: React__default.CSSProperties;
530
+ }
531
+ declare const DynamicImg: React__default.FC<DynamicImgProps>;
532
+
533
+ interface DropdownMenuOption {
534
+ label: ReactNode;
535
+ value: string;
536
+ description?: ReactNode;
537
+ icon?: string | React__default.ReactElement;
538
+ disabled?: boolean;
539
+ danger?: boolean;
540
+ }
541
+ interface DropdownMenuProps {
542
+ anchorRef: React__default.RefObject<HTMLElement | null>;
543
+ open: boolean;
544
+ onClose: () => void;
545
+ items: DropdownMenuOption[];
546
+ onSelect?: (item: DropdownMenuOption) => void;
547
+ align?: "start" | "end";
548
+ side?: "auto" | "top" | "bottom";
549
+ width?: number | "trigger";
550
+ maxHeight?: number;
551
+ className?: string;
552
+ itemClassName?: string;
553
+ }
554
+ declare const DropdownMenu: React__default.FC<DropdownMenuProps>;
555
+
556
+ interface DropdownButtonOption extends DropdownMenuOption {
557
+ value: string;
558
+ }
559
+ interface DropdownButtonProps extends Omit<ButtonProps, "children" | "leadingIcon" | "trailingIcon" | "iconOnly" | "fullWidth"> {
560
+ label: React__default.ReactNode;
561
+ options: DropdownButtonOption[];
562
+ onPrimaryClick?: (event: React__default.MouseEvent<HTMLButtonElement>) => void;
563
+ onOptionSelect?: (option: DropdownButtonOption) => void;
564
+ dropdownIcon?: ButtonProps["leadingIcon"];
565
+ fullWidth?: boolean;
566
+ split?: boolean;
567
+ /**
568
+ * Hide the dropdown caret trigger when there are no menu options.
569
+ * Defaults to true so empty split buttons render as a single clean button.
570
+ */
571
+ hideDropdownTriggerWhenEmpty?: boolean;
572
+ menuWidth?: number | "trigger";
573
+ menuClassName?: string;
574
+ }
575
+ declare const DropdownButton: React__default.FC<DropdownButtonProps>;
576
+
577
+ interface TooltipWrapperProps {
578
+ /** Tooltip text. When omitted no tooltip is shown but the child is rendered unchanged. */
579
+ text?: string;
580
+ /** Delay in ms before the tooltip appears. Defaults to 500. */
581
+ delay?: number;
582
+ /** Where to place the tooltip relative to the child. Defaults to 'top'. */
583
+ position?: TooltipPosition;
584
+ /** The element to attach the tooltip to. Must accept onMouseEnter / onMouseLeave. */
585
+ children: React__default.ReactElement<React__default.HTMLAttributes<Element>>;
586
+ }
587
+ /**
588
+ * Attaches a styled tooltip to any child element without adding any wrapper
589
+ * element to the DOM. The tooltip is rendered via a React portal directly into
590
+ * document.body and positioned with `position: fixed`, so it has zero impact on
591
+ * the child's layout or spacing.
592
+ *
593
+ * Includes edge collision detection: when the tooltip would overflow the
594
+ * viewport, it is shifted inward and its caret is repositioned to still point
595
+ * at the trigger element.
596
+ *
597
+ * The component always renders a Fragment so that switching `text` between
598
+ * undefined and a string value never causes the child element to unmount —
599
+ * important when the child holds a ref (e.g. for truncation detection).
600
+ */
601
+ declare const TooltipWrapper: React__default.FC<TooltipWrapperProps>;
602
+
603
+ type InputValidationStatus = "none" | "error" | "success";
604
+ type InputSize = "sm" | "md" | "lg";
605
+ type InputVariant = "flat" | "elevated" | "ghost" | "underline";
606
+ type IconRenderer = string | React__default.ReactElement;
607
+ interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "color"> {
608
+ size?: InputSize;
609
+ tone?: TrueColor;
610
+ /** Visual surface style. Defaults to `flat`. */
611
+ variant?: InputVariant;
612
+ validationStatus?: InputValidationStatus;
613
+ leadingIcon?: IconRenderer;
614
+ trailingIcon?: IconRenderer;
615
+ /** When provided, the trailing icon renders as an interactive button instead of a static decoration. */
616
+ onTrailingIconClick?: React__default.MouseEventHandler<HTMLButtonElement>;
617
+ wrapperClassName?: string;
618
+ unstyled?: boolean;
619
+ fullHeight?: boolean;
620
+ }
621
+ declare const Input: React__default.ForwardRefExoticComponent<InputProps & React__default.RefAttributes<HTMLInputElement>>;
622
+
623
+ type PasswordInputProps = Omit<InputProps, "type" | "trailingIcon" | "onTrailingIconClick">;
624
+ declare const PasswordInput: React$1.ForwardRefExoticComponent<PasswordInputProps & React$1.RefAttributes<HTMLInputElement>>;
625
+
626
+ type TextareaSize = "sm" | "md" | "lg";
627
+ type TextareaValidationStatus = "none" | "error" | "success";
628
+ type TextareaResize = "none" | "vertical" | "horizontal" | "both";
629
+ interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "size" | "color"> {
630
+ size?: TextareaSize;
631
+ tone?: TrueColor;
632
+ validationStatus?: TextareaValidationStatus;
633
+ resize?: TextareaResize;
634
+ helpText?: ReactNode;
635
+ }
636
+ declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
637
+
638
+ type SelectSize = "sm" | "md" | "lg";
639
+ type SelectValidationStatus = "none" | "error" | "success";
640
+ interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, "size" | "color"> {
641
+ size?: SelectSize;
642
+ tone?: TrueColor;
643
+ validationStatus?: SelectValidationStatus;
644
+ placeholder?: ReactNode;
645
+ leadingIcon?: string | React__default.ReactElement;
646
+ hideCaret?: boolean;
647
+ unstyled?: boolean;
648
+ }
649
+ declare const Select: React__default.ForwardRefExoticComponent<SelectProps & React__default.RefAttributes<HTMLSelectElement>>;
650
+
651
+ interface ComboboxProps {
652
+ value?: string;
653
+ onChange: (value: string) => void;
654
+ options: string[];
655
+ placeholder?: string;
656
+ className?: string;
657
+ disabled?: boolean;
658
+ error?: boolean;
659
+ emptyMessage?: string;
660
+ color?: TrueColor;
661
+ }
662
+ declare const Combobox: React__default.FC<ComboboxProps>;
663
+
664
+ type TreeTone = TrueColor;
665
+ interface TreeReorderEvent {
666
+ id: string;
667
+ oldOrder: number;
668
+ newOrder: number;
669
+ }
670
+ interface TreeItemData {
671
+ id: string;
672
+ icon?: React__default.ReactNode;
673
+ iconClassName?: string;
674
+ title?: React__default.ReactNode;
675
+ titleClassName?: string;
676
+ subtitle?: React__default.ReactNode;
677
+ subtitleClassName?: string;
678
+ description?: React__default.ReactNode;
679
+ descriptionClassName?: string;
680
+ /** Optional badge/status slot rendered below description, without tone-derived text styling. */
681
+ badge?: React__default.ReactNode;
682
+ tone?: TreeTone;
683
+ active?: boolean;
684
+ body?: React__default.ReactNode;
685
+ defaultExpanded?: boolean;
686
+ actions?: React__default.ReactNode;
687
+ hoverActions?: React__default.ReactNode;
688
+ children?: TreeItemData[];
689
+ }
690
+ interface TreeViewProps {
691
+ root?: TreeItemData;
692
+ items: TreeItemData[];
693
+ tone?: TreeTone;
694
+ rootTone?: TreeTone;
695
+ rootActive?: boolean;
696
+ animated?: boolean;
697
+ showLine?: boolean;
698
+ showConnectors?: boolean;
699
+ connectorStyle?: "rings" | "dots";
700
+ branchColorMode?: "item" | "parent";
701
+ junctionStyle?: "rounded" | "dot";
702
+ showCenterDot?: boolean;
703
+ connectorHalf?: boolean;
704
+ connectorBorderSize?: "fit" | "xs" | "sm" | "md" | "lg";
705
+ dotSpacing?: number;
706
+ indent?: "xs" | "sm" | "md" | "lg";
707
+ rootChildIndentExtra?: number;
708
+ rowGap?: number;
709
+ stubHeight?: number;
710
+ className?: string;
711
+ loading?: boolean;
712
+ loadingState?: React__default.ReactNode;
713
+ emptyState?: React__default.ReactNode;
714
+ error?: React__default.ReactNode;
715
+ errorState?: React__default.ReactNode;
716
+ onRetry?: () => void;
717
+ reorderable?: boolean;
718
+ onReorder?: (event: TreeReorderEvent) => void;
719
+ }
720
+ interface TreeItemCardProps {
721
+ icon?: React__default.ReactNode;
722
+ iconClassName?: string;
723
+ title?: React__default.ReactNode;
724
+ titleClassName?: string;
725
+ /** When true, the title wraps on word boundaries up to 10 lines instead of truncating. Default: false */
726
+ titleWrap?: boolean;
727
+ /** When true, the title stays on one line and scrolls horizontally — no wrapping, no truncation. Default: false */
728
+ titleScroll?: boolean;
729
+ subtitle?: React__default.ReactNode;
730
+ subtitleClassName?: string;
731
+ description?: React__default.ReactNode;
732
+ descriptionClassName?: string;
733
+ /** Optional badge/status slot rendered below description, without tone-derived text styling. */
734
+ badge?: React__default.ReactNode;
735
+ tone?: TreeTone;
736
+ body?: React__default.ReactNode;
737
+ defaultExpanded?: boolean;
738
+ expanded?: boolean;
739
+ onToggleExpanded?: () => void;
740
+ forceToggle?: boolean;
741
+ actions?: React__default.ReactNode;
742
+ hoverActions?: React__default.ReactNode;
743
+ dragHandle?: React__default.ReactNode;
744
+ isDragging?: boolean;
745
+ index?: number;
746
+ className?: string;
747
+ /** When true, show a subtle hover lift effect (shadow + translate-y). Default: false */
748
+ hoverable?: boolean;
749
+ /** When true, overlay a pulsing background animation using the item's tone color. Default: false */
750
+ activePulse?: boolean;
751
+ }
752
+ interface TreeFlowSvgProps {
753
+ cardHeights: number[];
754
+ cardAnchors?: number[];
755
+ mode?: "tree" | "bracket";
756
+ parentAnchorY?: number;
757
+ parentOffset?: number;
758
+ toneList: TreeTone[];
759
+ activeList: boolean[];
760
+ rootTone?: TreeTone;
761
+ rootActive?: boolean;
762
+ rowGap: number;
763
+ stubHeight?: number;
764
+ depth?: number;
765
+ rootChildIndentExtra?: number;
766
+ indent?: "xs" | "sm" | "md" | "lg";
767
+ showLine?: boolean;
768
+ showConnectors?: boolean;
769
+ connectorStyle?: "rings" | "dots";
770
+ branchColorMode?: "item" | "parent";
771
+ junctionStyle?: "rounded" | "dot";
772
+ showCenterDot?: boolean;
773
+ connectorHalf?: boolean;
774
+ connectorBorderSize?: "fit" | "xs" | "sm" | "md" | "lg";
775
+ dotSpacing?: number;
776
+ style?: React__default.CSSProperties;
777
+ className?: string;
778
+ animated?: boolean;
779
+ }
780
+
781
+ interface PickerTag {
782
+ label: string;
783
+ tone?: TreeTone;
784
+ }
785
+ interface PickerItem {
786
+ id: string;
787
+ /** Optional leading icon element */
788
+ icon?: React__default.ReactNode;
789
+ title: string;
790
+ subtitle?: string;
791
+ description?: string;
792
+ /** Tags rendered as Pills at the trailing edge of each row */
793
+ tags?: PickerTag[];
794
+ }
795
+ interface PickerFilter {
796
+ /** Label shown on the filter toggle when active (e.g. "Stopped") */
797
+ label: string;
798
+ /** Predicate that returns true for items included in the filtered view */
799
+ predicate: (item: PickerItem) => boolean;
800
+ }
801
+ interface PickerProps {
802
+ items: PickerItem[];
803
+ loading?: boolean;
804
+ /** Single-select: the currently selected item id */
805
+ selectedId?: string;
806
+ /** Called when an item is clicked (single mode: closes dropdown; multi mode: toggles) */
807
+ onSelect?: (item: PickerItem) => void;
808
+ /** Placeholder shown on the trigger button when nothing is selected */
809
+ placeholder?: string;
810
+ /** Placeholder text inside the search input */
811
+ searchPlaceholder?: string;
812
+ emptyMessage?: string;
813
+ loadingMessage?: string;
814
+ /**
815
+ * When provided, a filter toggle is shown that restricts the list to items
816
+ * matching the predicate. The user can toggle it off to see all items.
817
+ */
818
+ defaultFilter?: PickerFilter;
819
+ /**
820
+ * When true, the dropdown ignores any clipping ancestor (e.g. a modal's
821
+ * overflow container) and positions itself against the viewport instead.
822
+ * Useful when the picker is inside a constrained modal or panel.
823
+ * Default: false
824
+ */
825
+ escapeBoundary?: boolean;
826
+ className?: string;
827
+ color?: TrueColor;
828
+ /** Enable multi-select mode. Use selectedIds + onMultiChange instead of selectedId + onSelect. */
829
+ multi?: boolean;
830
+ /** Multi-select: the currently selected item ids */
831
+ selectedIds?: string[];
832
+ /** Called with the new selection array whenever the user toggles an item */
833
+ onMultiChange?: (ids: string[]) => void;
834
+ /** Max individual pills shown in the trigger before collapsing to "N selected". Default: 3 */
835
+ maxPillsShown?: number;
836
+ /** 'sm' renders a compact trigger suitable for toolbars. Default: 'md' */
837
+ size?: "sm" | "md";
838
+ /** When true, the picker fills all available horizontal space. Default: true */
839
+ fullWidth?: boolean;
840
+ /** When true, the picker fills all available vertical space. Default: false */
841
+ fullHeight?: boolean;
842
+ }
843
+ declare const Picker: React__default.FC<PickerProps>;
844
+
845
+ /** A known option in the dropdown list */
846
+ interface TagPickerItem {
847
+ id: string;
848
+ label: string;
849
+ /** Optional leading icon */
850
+ icon?: React__default.ReactNode;
851
+ /** Optional Pills rendered at the trailing edge of each row */
852
+ tags?: PickerTag[];
853
+ }
854
+ interface TagPickerProps {
855
+ /** Known options shown in the dropdown */
856
+ items: TagPickerItem[];
857
+ /**
858
+ * Controlled array of selected values.
859
+ * For known items this is the item's `id`.
860
+ * For free-text entries created via `allowCreate`, this is the raw text itself.
861
+ */
862
+ value: string[];
863
+ onChange: (values: string[]) => void;
864
+ /**
865
+ * Show a "Create '…'" row when the search query doesn't match any existing item.
866
+ * Default: false
867
+ */
868
+ allowCreate?: boolean;
869
+ /**
870
+ * Called when the user confirms a new free-text value.
871
+ * If omitted, the raw text is added to value[] directly via onChange.
872
+ */
873
+ onCreateItem?: (label: string) => void;
874
+ /**
875
+ * When false, behaves as single-select: picking a new item replaces the current value.
876
+ * Default: true (multi-select with tag pills)
877
+ */
878
+ multi?: boolean;
879
+ /** Placeholder shown in the trigger when nothing is selected */
880
+ placeholder?: string;
881
+ /** Placeholder inside the search input */
882
+ searchPlaceholder?: string;
883
+ emptyMessage?: string;
884
+ loading?: boolean;
885
+ loadingMessage?: string;
886
+ color?: TrueColor;
887
+ itemColor?: TrueColor;
888
+ /**
889
+ * When true, the dropdown positions against the viewport instead of a clipping ancestor.
890
+ * Useful when the component is inside a modal or constrained panel.
891
+ * Default: false
892
+ */
893
+ escapeBoundary?: boolean;
894
+ /**
895
+ * Maximum number of tag pills shown before a "+N" overflow pill appears.
896
+ * Set to 0 or undefined to show all tags. Default: 3
897
+ */
898
+ tagLimit?: number;
899
+ /**
900
+ * When true, items added during this session (not present in the initial value)
901
+ * are highlighted with an emerald color cue — both in the trigger pills and in
902
+ * the dropdown list. Default: true
903
+ */
904
+ highlightNew?: boolean;
905
+ className?: string;
906
+ disabled?: boolean;
907
+ /** When true, hides the remove (×) button on tag pills and prevents adding/removing items via the dropdown. @default false */
908
+ readOnly?: boolean;
909
+ /**
910
+ * Optional function to normalize a value before it is added.
911
+ * Applied to both free-text creations and known-item selections.
912
+ * The return value is what gets stored in `value[]`.
913
+ * Example: `(v) => v.toUpperCase()`
914
+ */
915
+ normalizeValue?: (value: string) => string;
916
+ }
917
+ declare const TagPicker: React__default.FC<TagPickerProps>;
918
+
919
+ type SectionSize = "xs" | "sm" | "md" | "lg";
920
+ type SectionVariant =
921
+ /** Bold neutral title, no extra decoration (clean default). */
922
+ "default"
923
+ /** Lighter muted title — lower visual weight. */
924
+ | "subtle"
925
+ /** Tiny all-caps + wide letter-spacing (matches standard detail-panel style). */
926
+ | "uppercase"
927
+ /** Same as `default` but with a bottom border separating header from body. */
928
+ | "bordered"
929
+ /** Subtle filled background on the header strip. */
930
+ | "filled";
931
+ interface SectionProps {
932
+ /** Section heading. */
933
+ title: React__default.ReactNode;
934
+ /** Optional secondary line below the title. */
935
+ subtitle?: React__default.ReactNode;
936
+ children?: React__default.ReactNode;
937
+ /** Controls header padding and title/subtitle font size. Defaults to `'md'`. */
938
+ size?: SectionSize;
939
+ /** Visual style of the section header. Defaults to `'uppercase'`. */
940
+ variant?: SectionVariant;
941
+ /** Optional content rendered on the right side of the header (e.g. icon buttons). */
942
+ actions?: React__default.ReactNode;
943
+ /**
944
+ * Override title text size independently from `size`.
945
+ * Accepts any Tailwind text-size class, e.g. `"text-xs"` or `"text-sm"`.
946
+ */
947
+ titleSize?: string;
948
+ /**
949
+ * Override title text colour / weight independently from `variant`.
950
+ * e.g. `"text-sky-600 font-bold"`
951
+ * Merged after variant styles so it wins on conflicts.
952
+ */
953
+ titleColor?: string;
954
+ /**
955
+ * Override subtitle text size independently from `size`.
956
+ * e.g. `"text-[10px]"`
957
+ */
958
+ subtitleSize?: string;
959
+ /**
960
+ * Override subtitle text colour / weight.
961
+ * e.g. `"text-neutral-600 dark:text-neutral-300"`
962
+ */
963
+ subtitleColor?: string;
964
+ /** Extra classes for the title span. */
965
+ titleClassName?: string;
966
+ /** Extra classes for the subtitle span. */
967
+ subtitleClassName?: string;
968
+ /** Extra classes for the body wrapper div. */
969
+ bodyClassName?: string;
970
+ /** Extra classes for the header wrapper div. */
971
+ headerClassName?: string;
972
+ className?: string;
973
+ /** Whether to remove all padding from the section. */
974
+ noPadding?: boolean;
975
+ }
976
+ declare const Section: React__default.FC<SectionProps>;
977
+
978
+ interface TagPanelTag {
979
+ id?: string;
980
+ label: string;
981
+ /** Pill tone. Defaults to `'neutral'`. */
982
+ tone?: TrueColor;
983
+ /** Pill variant. Defaults to `'soft'`. */
984
+ variant?: PillVariant;
985
+ /** Pill size. Defaults to `'sm'`. */
986
+ size?: PillSize;
987
+ /** Optional leading icon inside the pill. */
988
+ icon?: React__default.ReactNode;
989
+ children?: React__default.ReactNode;
990
+ }
991
+ interface TagPanelProps {
992
+ /** Section heading. Omit entirely to hide the header. */
993
+ title?: React__default.ReactNode;
994
+ /** Optional secondary line below the title. */
995
+ subtitle?: React__default.ReactNode;
996
+ /** Tags to render as pills. */
997
+ tags: TagPanelTag[];
998
+ /**
999
+ * Maximum number of pills shown before a `+N` overflow pill appears.
1000
+ * Set to `0` to always show all. Default: `5`.
1001
+ */
1002
+ tagLimit?: number;
1003
+ /**
1004
+ * Tone used for the `+N` overflow pill.
1005
+ * Defaults to `'neutral'`.
1006
+ */
1007
+ overflowTone?: TrueColor;
1008
+ /** Rendered when `tags` is empty. */
1009
+ emptyState?: React__default.ReactNode;
1010
+ /** Optional actions rendered on the right side of the section header. */
1011
+ actions?: React__default.ReactNode;
1012
+ /** Controls header padding and font size. Defaults to `'md'`. */
1013
+ size?: SectionSize;
1014
+ /** Visual style of the section header. Defaults to `'uppercase'`. */
1015
+ variant?: SectionVariant;
1016
+ /** Extra classes for the root element. */
1017
+ className?: string;
1018
+ /** Extra classes for the tags container. */
1019
+ bodyClassName?: string;
1020
+ /** Remove all padding from the section header. */
1021
+ noPadding?: boolean;
1022
+ }
1023
+ declare const TagPanel: React__default.FC<TagPanelProps>;
1024
+
1025
+ type CheckboxDescriptionPlacement = "bottom" | "inline";
1026
+ type CheckboxAlign = "left" | "right";
1027
+ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "color" | "children"> {
1028
+ /**
1029
+ * Optional label rendered next to the checkbox control.
1030
+ */
1031
+ label?: ReactNode;
1032
+ /**
1033
+ * Optional description displayed under the label.
1034
+ */
1035
+ description?: ReactNode;
1036
+ /**
1037
+ * Controls if the description is stacked under the label (default) or inline beside it.
1038
+ */
1039
+ descriptionPlacement?: CheckboxDescriptionPlacement;
1040
+ /**
1041
+ * Adjusts checkbox dimensions and typography.
1042
+ */
1043
+ size?: Size;
1044
+ /**
1045
+ * Accent color applied to the checkbox.
1046
+ */
1047
+ color?: TrueColor;
1048
+ /**
1049
+ * Enables the native indeterminate visual state.
1050
+ */
1051
+ indeterminate?: boolean;
1052
+ /**
1053
+ * When true the container will stretch to the available width.
1054
+ */
1055
+ fullWidth?: boolean;
1056
+ /**
1057
+ * Renders the checkbox control on the left (default) or right side of the label block.
1058
+ */
1059
+ controlAlign?: CheckboxAlign;
1060
+ /**
1061
+ * Additional classes applied to the root label element.
1062
+ */
1063
+ className?: string;
1064
+ /**
1065
+ * Additional classes applied directly to the input element.
1066
+ */
1067
+ inputClassName?: string;
1068
+ }
1069
+ /**
1070
+ * Accessible checkbox control styled exclusively with Tailwind utilities.
1071
+ */
1072
+ declare const Checkbox: React$1.ForwardRefExoticComponent<CheckboxProps & React$1.RefAttributes<HTMLInputElement>>;
1073
+
1074
+ type ToggleSize = "sm" | "md" | "lg";
1075
+ type ToggleAlign = "left" | "right";
1076
+ type ToggleDescriptionPlacement = "inline" | "stacked";
1077
+ type TogglePadding = "none" | "xs" | "sm" | "md" | "lg" | "xl";
1078
+ interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "color" | "children"> {
1079
+ label?: ReactNode;
1080
+ description?: ReactNode;
1081
+ descriptionPlacement?: ToggleDescriptionPlacement;
1082
+ size?: ToggleSize;
1083
+ padding?: TogglePadding;
1084
+ color?: TrueColor;
1085
+ alignLabel?: ToggleAlign;
1086
+ iconOn?: string | React.ReactElement;
1087
+ iconOff?: string | React.ReactElement;
1088
+ fullWidth?: boolean;
1089
+ className?: string;
1090
+ /** When set, a styled tooltip is shown on hover. */
1091
+ tooltip?: string;
1092
+ /** Position of the tooltip relative to the toggle. Defaults to 'top'. */
1093
+ tooltipPosition?: TooltipPosition;
1094
+ /** When true, applies glass styling (fill + vibrancy + optional specular overlay). */
1095
+ glass?: boolean;
1096
+ /** Backdrop vibrancy level for glass surfaces. */
1097
+ vibrancy?: GlassVibrancy;
1098
+ /** Glass fill transparency level for glass surfaces. */
1099
+ glassOpacity?: GlassOpacity;
1100
+ /** Specular highlight mode for glass surfaces. */
1101
+ specularMode?: SpecularMode;
1102
+ }
1103
+ declare const Toggle: React$1.ForwardRefExoticComponent<ToggleProps & React$1.RefAttributes<HTMLInputElement>>;
1104
+
1105
+ type MultiToggleSize = "sm" | "md" | "lg";
1106
+ type MultiToggleShape = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "full";
1107
+ type MultiToggleVariant = "theme" | "solid" | "soft";
1108
+ type LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>);
1109
+ type MultiToggleOptionWidth = number | LiteralUnion<"auto">;
1110
+ type MultiToggleActiveWidthStrategy = "auto" | "max";
1111
+ interface MultiToggleOption {
1112
+ value: string;
1113
+ label?: ReactNode;
1114
+ icon?: string | React__default.ReactElement;
1115
+ disabled?: boolean;
1116
+ width?: MultiToggleOptionWidth;
1117
+ }
1118
+ interface MultiToggleProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange" | "value"> {
1119
+ options: MultiToggleOption[];
1120
+ value: string;
1121
+ rounded?: MultiToggleShape;
1122
+ onChange: (value: string) => void;
1123
+ size?: MultiToggleSize;
1124
+ color?: TrueColor;
1125
+ fullWidth?: boolean;
1126
+ className?: string;
1127
+ showOnlyActiveLabel?: boolean;
1128
+ truncateOverflow?: boolean;
1129
+ adaptiveWidth?: boolean;
1130
+ optionMaxWidth?: number | string;
1131
+ activeWidthStrategy?: MultiToggleActiveWidthStrategy;
1132
+ variant?: MultiToggleVariant;
1133
+ /** When set, overrides the active option's text color with this color's active-text token. */
1134
+ accentColor?: TrueColor;
1135
+ }
1136
+ declare const MultiToggle: React__default.FC<MultiToggleProps>;
1137
+
1138
+ type ButtonSelectorMode = "single" | "multi";
1139
+ interface ButtonSelectorOption<T extends string = string> {
1140
+ value: T;
1141
+ label: string;
1142
+ description?: string;
1143
+ /** Icon name (string from icon registry) or a ReactElement */
1144
+ icon?: string | React__default.ReactElement;
1145
+ disabled?: boolean;
1146
+ }
1147
+ interface ButtonSelectorProps<T extends string = string> {
1148
+ options: ButtonSelectorOption<T>[];
1149
+ /** In single mode: a single value. In multi mode: an array of values. */
1150
+ value: T | T[];
1151
+ onChange: (value: T | T[]) => void;
1152
+ /** "single" enforces radio-like behaviour; "multi" allows multiple selections (default). */
1153
+ mode?: ButtonSelectorMode;
1154
+ color?: TrueColor;
1155
+ /** Number of grid columns (default: 2) */
1156
+ cols?: 1 | 2 | 3 | 4;
1157
+ /** Tailwind gap class applied to the grid (default: "gap-2") */
1158
+ gap?: string;
1159
+ /** Optional label rendered above the grid */
1160
+ label?: string;
1161
+ /** Icon size passed to the icon renderer (default: "sm") */
1162
+ iconSize?: IconSize;
1163
+ className?: string;
1164
+ disabled?: boolean;
1165
+ }
1166
+ declare function ButtonSelector<T extends string = string>(props: ButtonSelectorProps<T>): React__default.ReactElement;
1167
+
1168
+ type FormFieldLayout = "stacked" | "inline";
1169
+ type FormFieldValidationStatus = "none" | "error" | "success";
1170
+ type FormFieldWidth = "auto" | "full";
1171
+ interface FormFieldProps {
1172
+ label?: ReactNode;
1173
+ labelFor?: string;
1174
+ description?: ReactNode;
1175
+ hint?: ReactNode;
1176
+ error?: ReactNode;
1177
+ validationStatus?: FormFieldValidationStatus;
1178
+ required?: boolean;
1179
+ optionalLabel?: ReactNode;
1180
+ labelAction?: ReactNode;
1181
+ layout?: FormFieldLayout;
1182
+ children: ReactNode;
1183
+ className?: string;
1184
+ helpText?: ReactNode;
1185
+ width?: FormFieldWidth;
1186
+ }
1187
+ declare const FormField: React__default.FC<FormFieldProps>;
1188
+
1189
+ type FormLayoutColumns = 1 | 2 | 3;
1190
+ type FormLayoutGap = "sm" | "md" | "lg";
1191
+ interface FormLayoutProps {
1192
+ columns?: FormLayoutColumns;
1193
+ gap?: FormLayoutGap;
1194
+ verticalPadding?: FormLayoutGap;
1195
+ children: ReactNode;
1196
+ className?: string;
1197
+ }
1198
+ declare const FormLayout: React__default.FC<FormLayoutProps>;
1199
+
1200
+ interface FormSectionProps {
1201
+ title?: ReactNode;
1202
+ description?: ReactNode;
1203
+ footer?: ReactNode;
1204
+ children: ReactNode;
1205
+ className?: string;
1206
+ padding?: "sm" | "md" | "lg";
1207
+ }
1208
+ declare const FormSection: React__default.FC<FormSectionProps>;
1209
+
1210
+ type InputGroupSize = "sm" | "md" | "lg";
1211
+ type InputGroupValidationStatus = "none" | "error" | "success";
1212
+ interface InputGroupProps {
1213
+ leadingAddon?: ReactNode;
1214
+ trailingAddon?: ReactNode;
1215
+ children: ReactNode;
1216
+ tone?: ButtonColor;
1217
+ size?: InputGroupSize;
1218
+ className?: string;
1219
+ validationStatus?: InputGroupValidationStatus;
1220
+ disabled?: boolean;
1221
+ }
1222
+ declare const InputGroup: React__default.FC<InputGroupProps>;
1223
+
1224
+ type MultiSelectPillOption = {
1225
+ value: string;
1226
+ label: string;
1227
+ description?: string;
1228
+ disabled?: boolean;
1229
+ };
1230
+ interface MultiSelectPillsProps {
1231
+ /**
1232
+ * Used as the name for the generated hidden inputs (e.g. `${name}[]`).
1233
+ */
1234
+ name: string;
1235
+ /**
1236
+ * Options rendered as pills.
1237
+ */
1238
+ options: MultiSelectPillOption[];
1239
+ /**
1240
+ * Optional legend displayed above the pill list.
1241
+ */
1242
+ legend?: React__default.ReactNode;
1243
+ /**
1244
+ * Optional helper text rendered below the legend.
1245
+ */
1246
+ description?: React__default.ReactNode;
1247
+ /**
1248
+ * Current selected values when using the component in a controlled way.
1249
+ */
1250
+ value?: string[];
1251
+ /**
1252
+ * Default selected values for uncontrolled usage.
1253
+ */
1254
+ defaultValue?: string[];
1255
+ /**
1256
+ * Called whenever the selected values change.
1257
+ */
1258
+ onChange?: (selectedValues: string[]) => void;
1259
+ /**
1260
+ * Optional class applied to the fieldset wrapper.
1261
+ */
1262
+ className?: string;
1263
+ /**
1264
+ * Disable the whole control.
1265
+ */
1266
+ disabled?: boolean;
1267
+ /**
1268
+ * Tailwind size token controlling text size and padding.
1269
+ */
1270
+ size?: "xs" | "sm" | "base" | "lg";
1271
+ /**
1272
+ * Theme color used when a pill is selected.
1273
+ * Accepts any TrueColor value. Defaults to "blue".
1274
+ */
1275
+ color?: TrueColor;
1276
+ /**
1277
+ * Border radius of the pills.
1278
+ * Defaults to "full" (fully rounded).
1279
+ */
1280
+ rounded?: "none" | "sm" | "md" | "lg" | "full";
1281
+ /**
1282
+ * Gap between pills.
1283
+ * Defaults to "2".
1284
+ */
1285
+ gap?: "1" | "1.5" | "2" | "3" | "4";
1286
+ /**
1287
+ * Selection behaviour. Defaults to multi-select.
1288
+ */
1289
+ selectionMode?: "multiple" | "single";
1290
+ }
1291
+ declare const MultiSelectPills: React__default.FC<MultiSelectPillsProps>;
1292
+
1293
+ interface SearchBarProps {
1294
+ placeholder?: string;
1295
+ onSearch: (query: string, signal?: AbortSignal) => void;
1296
+ onClear?: () => void;
1297
+ debounceMs?: number;
1298
+ autoSearch?: boolean;
1299
+ className?: string;
1300
+ disabled?: boolean;
1301
+ initialValue?: string;
1302
+ shouldClear?: boolean;
1303
+ leadingIcon?: string | React__default.ReactElement;
1304
+ variant?: "default" | "gradient";
1305
+ /** Accent colour for focus ring, icon highlight, and clear-button hover. Default: 'blue' */
1306
+ color?: TrueColor;
1307
+ /**
1308
+ * Start (darker) colour of the gradient glow (gradient variant only).
1309
+ * Defaults to the -600 shade of `color` when omitted.
1310
+ */
1311
+ gradientFrom?: string;
1312
+ /**
1313
+ * End (lighter) colour of the gradient glow (gradient variant only).
1314
+ * Defaults to the -400 shade of `color` when omitted.
1315
+ */
1316
+ gradientTo?: string;
1317
+ /**
1318
+ * Controls how prominent the gradient glow is (gradient variant only).
1319
+ * - `subtle` – barely visible; a hint of colour at the border
1320
+ * - `soft` – gentle glow, low key (default)
1321
+ * - `medium` – clearly visible glow
1322
+ * - `strong` – bold, wide glow
1323
+ */
1324
+ glowIntensity?: "subtle" | "soft" | "medium" | "strong";
1325
+ }
1326
+ declare const SearchBar: React__default.FC<SearchBarProps>;
1327
+
1328
+ type GradientDirection = "t" | "tr" | "r" | "br" | "b" | "bl" | "l" | "tl";
1329
+ type GlassBackgroundPosition = "fixed" | "absolute";
1330
+ interface GlassBackgroundProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "color"> {
1331
+ /** Positioning mode.
1332
+ * `"fixed"` (default) — covers the full viewport, always visible.
1333
+ * `"absolute"` — fills a `position: relative` parent (e.g. a PlaygroundSection preview).
1334
+ * Parent must be `relative` when `"absolute"`.
1335
+ */
1336
+ position?: GlassBackgroundPosition;
1337
+ /** Primary theme color driving the gradient (default: "purple"). */
1338
+ color?: TrueColor;
1339
+ /** Secondary color for the middle gradient stop. Derived from color if omitted. */
1340
+ colorSecondary?: TrueColor;
1341
+ /** Deep color for the final gradient stop. Derived if omitted. */
1342
+ colorDeep?: TrueColor;
1343
+ /** Gradient direction (default: "br" → bottom-right). */
1344
+ direction?: GradientDirection;
1345
+ /** Enable a slow-moving shimmer overlay (default: false). */
1346
+ shimmer?: boolean;
1347
+ /** Show ambient glow circles behind content (default: true). */
1348
+ ambient?: boolean;
1349
+ }
1350
+ /**
1351
+ * GlassBackground — a fixed, full-viewport gradient background layer
1352
+ * with optional ambient glows and shimmer. Renders behind its children
1353
+ * so panels, modals, and other surfaces can sit on top.
1354
+ */
1355
+ declare const GlassBackground: React__default.FC<GlassBackgroundProps>;
1356
+
1357
+ interface TruncatedTextProps {
1358
+ /** The text to display, truncated with an ellipsis when it overflows. */
1359
+ text: string;
1360
+ /** Extra classes applied to the text element. */
1361
+ className?: string;
1362
+ /** Delay in ms before the tooltip becomes visible. Defaults to 2000. */
1363
+ delay?: number;
1364
+ /** Render as a different element. Defaults to "div". */
1365
+ as?: "div" | "span" | "p";
1366
+ /** Where to place the tooltip. Defaults to 'top'. */
1367
+ tooltipPosition?: TooltipPosition;
1368
+ /**
1369
+ * When true, the outer `<div class="min-w-0">` wrapper is omitted and the
1370
+ * TooltipWrapper is returned directly. Use this when TruncatedText is a flex
1371
+ * child and you control sizing via `className` (e.g. `"min-w-0 flex-1"`).
1372
+ */
1373
+ noWrapper?: boolean;
1374
+ }
1375
+ declare const TruncatedText: React__default.FC<TruncatedTextProps>;
1376
+
1377
+ type InfoRowSize = "xs" | "sm" | "md" | "lg";
1378
+ type InfoRowPadding = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
1379
+ interface InfoRowProps {
1380
+ /** Row label (left side). Accepts ReactNode for composed/styled labels. */
1381
+ label: React__default.ReactNode;
1382
+ /**
1383
+ * Override label text size independently from `size`.
1384
+ * When omitted the shared `size` prop drives label size.
1385
+ */
1386
+ labelSize?: InfoRowSize;
1387
+ /**
1388
+ * Extra classes for the label span — use for custom colour, weight, etc.
1389
+ * e.g. `labelClassName="text-emerald-600 font-semibold"`
1390
+ */
1391
+ labelClassName?: string;
1392
+ /**
1393
+ * Fixed width class for the label column (e.g. `"w-32"`).
1394
+ * Defaults to a size-appropriate width (`w-16` / `w-20` / `w-24` / `w-28`).
1395
+ * Pass `""` to let the label size naturally.
1396
+ */
1397
+ labelWidth?: string;
1398
+ /**
1399
+ * Row value (right side).
1400
+ * - `string` / `number` — rendered as text, copy button enabled automatically.
1401
+ * - `boolean` — rendered as "Yes" / "No" with copy enabled.
1402
+ * - `ReactNode` — rendered as-is, copy button suppressed.
1403
+ * - `null` / `undefined` / `''` — treated as empty (see `hideIfEmpty`).
1404
+ */
1405
+ value?: React__default.ReactNode;
1406
+ /**
1407
+ * Override value text size independently from `size`.
1408
+ * When omitted the shared `size` prop drives value size.
1409
+ */
1410
+ valueSize?: InfoRowSize;
1411
+ /**
1412
+ * Extra classes for the value span — use for custom colour, weight, etc.
1413
+ * e.g. `valueClassName="text-sky-500"`
1414
+ */
1415
+ valueClassName?: string;
1416
+ /** Controls both label and value text size when individual overrides are absent. Defaults to `'md'`. */
1417
+ size?: InfoRowSize;
1418
+ /**
1419
+ * Vertical padding override. Accepts the full size scale including `'none'`.
1420
+ * When omitted, padding is derived from `size` (xs→py-1, sm→py-1.5, md→py-2, lg→py-2.5).
1421
+ */
1422
+ padding?: InfoRowPadding;
1423
+ /**
1424
+ * Show a copy-to-clipboard button.
1425
+ * Defaults to `true` — shown automatically when the resolved value is a string or number.
1426
+ * Pass `false` to suppress the button entirely.
1427
+ */
1428
+ copyable?: boolean;
1429
+ /**
1430
+ * Render the value in a monospace font.
1431
+ * Shorthand for `valueClassName="font-mono"`.
1432
+ */
1433
+ mono?: boolean;
1434
+ /**
1435
+ * Hide the row entirely when `value` is `null`, `undefined`, or `''`.
1436
+ * Defaults to `true`. Set to `false` to show the `emptyText` placeholder instead.
1437
+ */
1438
+ hideIfEmpty?: boolean;
1439
+ /**
1440
+ * Placeholder text shown when `hideIfEmpty` is `false` and the value is empty.
1441
+ * Defaults to `'—'`.
1442
+ */
1443
+ emptyText?: string;
1444
+ /**
1445
+ * Allow the value to wrap to multiple lines instead of truncating.
1446
+ * Defaults to `false`.
1447
+ */
1448
+ wrap?: boolean;
1449
+ /**
1450
+ * Show a tooltip with the full value when the text is truncated.
1451
+ * Only active when `wrap` is `false` and the value is a string or number.
1452
+ * Defaults to `true`.
1453
+ */
1454
+ tooltipOnTruncate?: boolean;
1455
+ /** Remove the bottom border (e.g. for the last row when handled externally). */
1456
+ noBorder?: boolean;
1457
+ /**
1458
+ * Remove the default horizontal padding (`px-3`/`px-4`).
1459
+ * Useful when the parent already provides horizontal spacing.
1460
+ */
1461
+ noPadding?: boolean;
1462
+ /**
1463
+ * Add a subtle hover background and rounded corners (matches classic detail-panel row style).
1464
+ * Defaults to `false`.
1465
+ */
1466
+ hoverable?: boolean;
1467
+ className?: string;
1468
+ }
1469
+ declare const InfoRow: React__default.FC<InfoRowProps>;
1470
+
1471
+ type SectionCardVariant = "glass" | "elevated" | "subtle" | "flat";
1472
+ type SectionCardSize = "sm" | "md" | "lg";
1473
+ interface SectionCardProps {
1474
+ /** Section heading displayed above the content area. */
1475
+ title: string;
1476
+ titleClassName?: string;
1477
+ actions?: React__default.ReactNode;
1478
+ /**
1479
+ * Visual treatment of the card container.
1480
+ * - `glass` — frosted glass (default)
1481
+ * - `elevated` — white/dark surface with shadow
1482
+ * - `subtle` — very light tinted background, no border
1483
+ * - `flat` — no background or border; title + content only
1484
+ */
1485
+ variant?: SectionCardVariant;
1486
+ /** Body padding size. Defaults to 'md'. */
1487
+ size?: SectionCardSize;
1488
+ /** Blur the body content (e.g. to indicate unavailable data). */
1489
+ blur?: boolean;
1490
+ className?: string;
1491
+ bodyClassName?: string;
1492
+ children?: React__default.ReactNode;
1493
+ }
1494
+ declare const SectionCard: React__default.FC<SectionCardProps>;
1495
+
1496
+ interface PagedPanelProps extends PanelProps {
1497
+ /** One entry per page — rendered one at a time. */
1498
+ pages: React__default.ReactNode[];
1499
+ /**
1500
+ * Static title shown in the header, OR an array of per-page titles.
1501
+ * When an array is supplied its length should match `pages`.
1502
+ */
1503
+ title?: React__default.ReactNode | React__default.ReactNode[];
1504
+ /** Optional subtitle shown below the title (static). */
1505
+ subtitle?: React__default.ReactNode;
1506
+ /** Show a loading overlay over the whole panel. */
1507
+ error?: string | null;
1508
+ /**
1509
+ * When true, renders without the Panel wrapper (no border, background or
1510
+ * shadow). Use this when embedding PagedPanel inside an existing Panel.
1511
+ */
1512
+ bare?: boolean;
1513
+ }
1514
+ declare const PagedPanel: React__default.FC<PagedPanelProps>;
1515
+
1516
+ interface CollapsiblePanelProps extends Omit<PanelProps, "title" | "subtitle" | "actions" | "children" | "onToggle"> {
1517
+ title: React__default.ReactNode;
1518
+ subtitle?: React__default.ReactNode;
1519
+ actions?: React__default.ReactNode;
1520
+ defaultExpanded?: boolean;
1521
+ expanded?: boolean;
1522
+ onToggle?: (expanded: boolean) => void;
1523
+ minExpandedHeight?: number | string;
1524
+ children: React__default.ReactNode;
1525
+ contentClassName?: string;
1526
+ contentMaxHeight?: number;
1527
+ /** When true, the expanded content grows to fill available space instead of scrolling. */
1528
+ fillHeight?: boolean;
1529
+ }
1530
+ declare const CollapsiblePanel: React__default.FC<CollapsiblePanelProps>;
1531
+
1532
+ interface HeaderGroupProps {
1533
+ children: ReactNode;
1534
+ className?: string;
1535
+ }
1536
+ declare const HeaderGroup: React__default.FC<HeaderGroupProps>;
1537
+
1538
+ interface DetailItemCardProps {
1539
+ title: string;
1540
+ subtitle?: string;
1541
+ description?: string;
1542
+ badges?: ReactNode;
1543
+ children?: ReactNode;
1544
+ defaultExpanded?: boolean;
1545
+ onClick?: () => void;
1546
+ className?: string;
1547
+ badgesAlignment?: "bottom" | "right" | "bottom-end";
1548
+ }
1549
+ declare const DetailItemCard: React__default.FC<DetailItemCardProps>;
1550
+
1551
+ interface InfiniteScrollPanelProps<T> {
1552
+ items: T[];
1553
+ isLoading: boolean;
1554
+ hasMore: boolean;
1555
+ onLoadMore: () => Promise<void>;
1556
+ renderItem: (item: T, index: number) => React__default.ReactNode;
1557
+ loadingComponent?: React__default.ReactNode;
1558
+ emptyComponent?: React__default.ReactNode;
1559
+ className?: string;
1560
+ threshold?: number;
1561
+ debounceMs?: number;
1562
+ useFixedColumns?: boolean;
1563
+ minColumnWidthPx?: number;
1564
+ maxColumns?: number;
1565
+ columnTemplate?: string;
1566
+ masonry?: boolean;
1567
+ }
1568
+ declare function InfiniteScrollPanel<T>({ items, isLoading, hasMore, onLoadMore, renderItem, loadingComponent, emptyComponent, className, threshold, debounceMs, useFixedColumns, minColumnWidthPx, maxColumns, columnTemplate, masonry, }: InfiniteScrollPanelProps<T>): React__default.JSX.Element;
1569
+ declare namespace InfiniteScrollPanel {
1570
+ var displayName: string;
1571
+ }
1572
+
1573
+ interface CollapsibleHelpTextProps extends React__default.HTMLAttributes<HTMLDivElement> {
1574
+ title?: string;
1575
+ text: string;
1576
+ maxLength?: number;
1577
+ children?: React__default.ReactNode;
1578
+ showIcon?: boolean;
1579
+ icon?: string;
1580
+ tone?: TrueColor;
1581
+ variant?: "card" | "plain";
1582
+ renderMarkdown?: (text: string) => React__default.ReactNode;
1583
+ }
1584
+ declare const CollapsibleHelpText: React__default.FC<CollapsibleHelpTextProps>;
1585
+
1586
+ interface UserAvatarUser {
1587
+ name?: string;
1588
+ username?: string;
1589
+ email?: string;
1590
+ avatarUrl?: string;
1591
+ }
1592
+ interface UserAvatarProps {
1593
+ user?: UserAvatarUser | null;
1594
+ size?: number;
1595
+ className?: string;
1596
+ variant?: "circle" | "rounded" | "square";
1597
+ }
1598
+ declare const UserAvatar: {
1599
+ ({ user, size, className, variant, }: UserAvatarProps): React$1.JSX.Element;
1600
+ displayName: string;
1601
+ };
1602
+
1603
+ interface UseAccordionOptions {
1604
+ defaultOpenIds?: string[];
1605
+ openIds?: string[];
1606
+ multiple?: boolean;
1607
+ onChange?: (openIds: string[]) => void;
1608
+ }
1609
+ interface UseAccordionResult {
1610
+ openIds: string[];
1611
+ isOpen: (id: string) => boolean;
1612
+ toggle: (id: string) => void;
1613
+ open: (id: string) => void;
1614
+ close: (id: string) => void;
1615
+ setOpenIds: (ids: string[]) => void;
1616
+ }
1617
+ declare function useAccordion({ defaultOpenIds, openIds: controlledOpenIds, multiple, onChange, }?: UseAccordionOptions): UseAccordionResult;
1618
+
1619
+ type AccordionVariant = "default" | "bordered" | "minimal" | "tonal" | "ghost";
1620
+ type AccordionSize = "sm" | "md" | "lg";
1621
+ type AccordionIndicator = "chevron" | "plus-minus" | "caret" | "none";
1622
+ type AccordionChevronPlacement = "left" | "right";
1623
+ interface AccordionItem {
1624
+ id: string;
1625
+ title: React__default.ReactNode;
1626
+ subtitle?: React__default.ReactNode;
1627
+ description?: React__default.ReactNode;
1628
+ icon?: string | React__default.ReactElement;
1629
+ badge?: React__default.ReactNode;
1630
+ actions?: React__default.ReactNode;
1631
+ content: React__default.ReactNode;
1632
+ disabled?: boolean;
1633
+ loading?: boolean;
1634
+ }
1635
+ interface AccordionProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "onChange">, UseAccordionOptions {
1636
+ items: AccordionItem[];
1637
+ variant?: AccordionVariant;
1638
+ tone?: PanelTone;
1639
+ size?: AccordionSize;
1640
+ indicator?: AccordionIndicator;
1641
+ chevronPlacement?: AccordionChevronPlacement;
1642
+ divider?: boolean;
1643
+ animated?: boolean;
1644
+ transitionMs?: number;
1645
+ onItemToggle?: (id: string, isOpen: boolean) => void;
1646
+ iconClassName?: string;
1647
+ itemClassName?: string;
1648
+ headerClassName?: string;
1649
+ contentClassName?: string;
1650
+ ariaLabel?: string;
1651
+ loading?: boolean;
1652
+ loaderTitle?: React__default.ReactNode;
1653
+ loaderMessage?: React__default.ReactNode;
1654
+ loaderType?: LoaderProps["variant"];
1655
+ loaderProgress?: number;
1656
+ loaderColor?: LoaderProps["color"];
1657
+ }
1658
+ declare const Accordion: React__default.FC<AccordionProps>;
1659
+
1660
+ type TabsVariant = "underline" | "soft" | "pill" | "segmented" | "minimal";
1661
+ type TabsSize = "sm" | "md" | "lg";
1662
+ type TabsOrientation = "horizontal" | "vertical";
1663
+ type TabsJustify = "start" | "center" | "end" | "between";
1664
+ interface TabItemAction {
1665
+ id?: string;
1666
+ label?: ReactNode;
1667
+ /** Render a fully custom React node in the tab bar. When set, `icon` and `onClick` are ignored. */
1668
+ node?: ReactNode;
1669
+ icon?: string | React__default.ReactElement;
1670
+ onClick?: () => void;
1671
+ color?: TrueColor;
1672
+ active?: boolean;
1673
+ }
1674
+ interface TabItem {
1675
+ id: string;
1676
+ label: ReactNode;
1677
+ icon?: string | React__default.ReactElement;
1678
+ description?: ReactNode;
1679
+ badge?: string | number;
1680
+ disabled?: boolean;
1681
+ panel?: ReactNode;
1682
+ badgeColor?: TrueColor;
1683
+ actions?: TabItemAction[];
1684
+ }
1685
+ interface TabsProps {
1686
+ items: TabItem[];
1687
+ value?: string;
1688
+ defaultValue?: string;
1689
+ onChange?: (id: string, item: TabItem) => void;
1690
+ variant?: TabsVariant;
1691
+ size?: TabsSize;
1692
+ color?: TrueColor;
1693
+ orientation?: TabsOrientation;
1694
+ justify?: TabsJustify;
1695
+ fullWidth?: boolean;
1696
+ className?: string;
1697
+ listClassName?: string;
1698
+ allowReselect?: boolean;
1699
+ panelIdPrefix?: string;
1700
+ showDividers?: boolean;
1701
+ hideUnderlineContainer?: boolean;
1702
+ /** Override the variant's container class (e.g. to customise the underline border color). Takes precedence over hideUnderlineContainer. */
1703
+ containerClassName?: string;
1704
+ panelClassName?: string;
1705
+ /**
1706
+ * When true, renders a gradient fade at the top of each panel's scroll area so
1707
+ * content doesn't hard-clip against the tab bar when scrolled. Default: true.
1708
+ * Pass a Tailwind `from-*` colour to match your panel background (default: white / neutral-900 dark).
1709
+ */
1710
+ scrollFade?: boolean;
1711
+ scrollFadeFrom?: string;
1712
+ }
1713
+ declare const Tabs: React__default.FC<TabsProps>;
1714
+
1715
+ type ModalActionsAlign = "start" | "center" | "end" | "between";
1716
+ interface ModalActionsProps {
1717
+ children: ReactNode;
1718
+ align?: ModalActionsAlign;
1719
+ className?: string;
1720
+ }
1721
+ declare const ModalActions: React__default.FC<ModalActionsProps>;
1722
+ interface ModalProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "title" | "children"> {
1723
+ isOpen: boolean;
1724
+ onClose: () => void;
1725
+ title: ReactNode;
1726
+ description?: ReactNode;
1727
+ icon?: IconName | React__default.ReactElement;
1728
+ children: ReactNode;
1729
+ bodyHeader?: ReactNode;
1730
+ bodyClassName?: string;
1731
+ footer?: ReactNode;
1732
+ actions?: ReactNode;
1733
+ size?: Size;
1734
+ maxWidth?: number | string;
1735
+ minWidth?: number | string;
1736
+ minHeight?: number | string;
1737
+ backgroundClassName?: string;
1738
+ background_color?: string;
1739
+ darkOverlay?: boolean;
1740
+ dark_overlay?: boolean;
1741
+ closeOnBackdropClick?: boolean;
1742
+ closeOnEsc?: boolean;
1743
+ preventScroll?: boolean;
1744
+ overlayClassName?: string;
1745
+ showFooterDivider?: boolean;
1746
+ headerActions?: ButtonProps[];
1747
+ header_actions?: ButtonProps[];
1748
+ headerTabs?: TabsProps;
1749
+ header_tabs?: TabsProps;
1750
+ loading?: boolean;
1751
+ loadingTitle?: ReactNode;
1752
+ loadingLabel?: ReactNode;
1753
+ hideCloseButton?: boolean;
1754
+ /** When provided, a back arrow button is shown on the left of the header. */
1755
+ onBack?: () => void;
1756
+ /** Tooltip for the back button. Defaults to "Go back". */
1757
+ backTooltip?: string;
1758
+ initialFocusRef?: React__default.RefObject<HTMLElement>;
1759
+ ariaLabel?: string;
1760
+ role?: "dialog" | "alertdialog";
1761
+ }
1762
+ declare const Modal: React__default.FC<ModalProps>;
1763
+ interface ConfirmModalProps extends Omit<ModalProps, "footer" | "actions" | "children" | "onClose" | "title"> {
1764
+ title: ReactNode;
1765
+ children?: ReactNode;
1766
+ onClose: () => void;
1767
+ onConfirm: () => void;
1768
+ confirmLabel?: ReactNode;
1769
+ cancelLabel?: ReactNode;
1770
+ confirmVariant?: ButtonVariant;
1771
+ confirmColor?: ButtonColor;
1772
+ isConfirmDisabled?: boolean;
1773
+ confirmButtonProps?: ButtonProps;
1774
+ cancelButtonProps?: ButtonProps;
1775
+ description?: ReactNode;
1776
+ }
1777
+ declare const ConfirmModal: React__default.FC<ConfirmModalProps>;
1778
+ interface DeleteConfirmModalProps extends Omit<ConfirmModalProps, "confirmLabel" | "confirmVariant" | "confirmColor"> {
1779
+ /** The exact string the user must type to enable the delete button. */
1780
+ confirmValue: string;
1781
+ /** Human-readable label shown in the instruction, e.g. "key name". Default: "name" */
1782
+ confirmValueLabel?: string;
1783
+ confirmLabel?: ReactNode;
1784
+ }
1785
+ declare const DeleteConfirmModal: React__default.FC<DeleteConfirmModalProps>;
1786
+ interface ApplyConfirmModalProps extends Omit<ConfirmModalProps, "confirmLabel" | "confirmVariant" | "confirmColor"> {
1787
+ /** The exact string the user must type to enable the apply button. */
1788
+ confirmValue: string;
1789
+ /** Human-readable label shown in the instruction, e.g. "key name". Default: "name" */
1790
+ confirmValueLabel?: string;
1791
+ confirmLabel?: ReactNode;
1792
+ }
1793
+ declare const ApplyConfirmModal: React__default.FC<ApplyConfirmModalProps>;
1794
+ type ModalComponentType = typeof Modal & {
1795
+ Actions: typeof ModalActions;
1796
+ Confirm: typeof ConfirmModal;
1797
+ DeleteConfirm: typeof DeleteConfirmModal;
1798
+ ApplyConfirm: typeof ApplyConfirmModal;
1799
+ };
1800
+
1801
+ declare const _default: ModalComponentType;
1802
+
1803
+ /** Where the panel is anchored inside its positioned ancestor. */
1804
+ type InlinePanelAnchor = "top" | "bottom" | "center" | "fill";
1805
+ interface InlinePanelProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "title" | "children"> {
1806
+ isOpen: boolean;
1807
+ onClose: () => void;
1808
+ title: ReactNode;
1809
+ description?: ReactNode;
1810
+ /** Icon name string or a React element rendered in the header. */
1811
+ icon?: IconName | React__default.ReactElement;
1812
+ children: ReactNode;
1813
+ bodyHeader?: ReactNode;
1814
+ bodyClassName?: string;
1815
+ /** Slot rendered in the footer bar (use alongside actions). */
1816
+ footer?: ReactNode;
1817
+ /** Alias for footer — matches Modal API. */
1818
+ actions?: ReactNode;
1819
+ /**
1820
+ * Width preset for the content card. Only meaningful when anchor is
1821
+ * "top" or "bottom". Ignored for "fill". Default: "md".
1822
+ */
1823
+ size?: Size;
1824
+ maxWidth?: number | string;
1825
+ minWidth?: number | string;
1826
+ height?: number | string;
1827
+ maxHeight?: number | string;
1828
+ minHeight?: number | string;
1829
+ /**
1830
+ * "fill" — covers the entire parent (absolute inset-0).
1831
+ * "top" — slides in from the top edge.
1832
+ * "bottom" — slides up from the bottom edge.
1833
+ *
1834
+ * The parent element MUST have `position: relative` (or any non-static
1835
+ * position) for the overlay to clip correctly.
1836
+ *
1837
+ * @default "fill"
1838
+ */
1839
+ anchor?: InlinePanelAnchor;
1840
+ /** z-index of the panel relative to its positioned parent. @default 20 */
1841
+ zIndex?: number;
1842
+ /** Press Escape to close. @default true */
1843
+ closeOnEsc?: boolean;
1844
+ /**
1845
+ * Click the backdrop behind the panel card to close.
1846
+ * Only relevant when anchor is "top" or "bottom".
1847
+ * @default false (more conservative than Modal — inline forms are higher-risk to dismiss accidentally)
1848
+ */
1849
+ closeOnBackdropClick?: boolean;
1850
+ /** Show a semi-transparent backdrop behind the card (top/bottom only). @default false */
1851
+ showBackdrop?: boolean;
1852
+ loading?: boolean;
1853
+ loadingTitle?: ReactNode;
1854
+ loadingLabel?: ReactNode;
1855
+ headerActions?: ButtonProps[];
1856
+ onBack?: () => void;
1857
+ backTooltip?: string;
1858
+ hideCloseButton?: boolean;
1859
+ showFooterDivider?: boolean;
1860
+ /** Ref to the element that should receive focus when the panel opens. */
1861
+ initialFocusRef?: React__default.RefObject<HTMLElement | null>;
1862
+ ariaLabel?: string;
1863
+ role?: "dialog" | "alertdialog";
1864
+ }
1865
+ declare const InlinePanel: React__default.FC<InlinePanelProps>;
1866
+ interface ConfirmInlinePanelProps extends Omit<InlinePanelProps, "actions" | "footer" | "role" | "children"> {
1867
+ children?: ReactNode;
1868
+ onConfirm: () => void;
1869
+ confirmLabel?: ReactNode;
1870
+ cancelLabel?: ReactNode;
1871
+ confirmVariant?: ButtonVariant;
1872
+ confirmColor?: ButtonColor;
1873
+ isConfirmDisabled?: boolean;
1874
+ }
1875
+ declare const ConfirmInlinePanel: React__default.FC<ConfirmInlinePanelProps>;
1876
+ interface DeleteConfirmInlinePanelProps extends Omit<ConfirmInlinePanelProps, "confirmLabel" | "confirmVariant" | "confirmColor"> {
1877
+ /** The exact string the user must type to enable the delete button. */
1878
+ confirmValue: string;
1879
+ /** Human-readable label shown in the instruction, e.g. "snapshot name". @default "name" */
1880
+ confirmValueLabel?: string;
1881
+ confirmLabel?: ReactNode;
1882
+ }
1883
+ declare const DeleteConfirmInlinePanel: React__default.FC<DeleteConfirmInlinePanelProps>;
1884
+
1885
+ interface SideMenuGuardClaim {
1886
+ type: "claim";
1887
+ claim: string;
1888
+ }
1889
+ interface SideMenuGuardAnyClaim {
1890
+ type: "anyClaim";
1891
+ claims: string[];
1892
+ }
1893
+ interface SideMenuGuardAllClaims {
1894
+ type: "allClaims";
1895
+ claims: string[];
1896
+ }
1897
+ interface SideMenuGuardRole {
1898
+ type: "role";
1899
+ role: string;
1900
+ }
1901
+ interface SideMenuGuardAnyRole {
1902
+ type: "anyRole";
1903
+ roles: string[];
1904
+ }
1905
+ interface SideMenuGuardModule {
1906
+ type: "module";
1907
+ module: string;
1908
+ }
1909
+ interface SideMenuGuardAnyModule {
1910
+ type: "anyModule";
1911
+ modules: string[];
1912
+ }
1913
+ interface SideMenuGuardCustom {
1914
+ type: "custom";
1915
+ fn: () => boolean;
1916
+ }
1917
+ type SideMenuItemGuard = SideMenuGuardClaim | SideMenuGuardAnyClaim | SideMenuGuardAllClaims | SideMenuGuardRole | SideMenuGuardAnyRole | SideMenuGuardModule | SideMenuGuardAnyModule | SideMenuGuardCustom;
1918
+ interface SideMenuItemBase {
1919
+ /** When true, the item is not rendered in the menu */
1920
+ hidden?: boolean;
1921
+ slug: string;
1922
+ /** Guard rules — ALL must pass (AND logic). */
1923
+ guards?: SideMenuItemGuard[];
1924
+ }
1925
+ interface SideMenuSettings {
1926
+ /** When true, the menu is collapsed */
1927
+ collapsed?: boolean;
1928
+ }
1929
+ interface SideMenuItemLink extends SideMenuItemBase {
1930
+ color?: TrueColor;
1931
+ type?: "link";
1932
+ label: string;
1933
+ path: string;
1934
+ icon?: IconName;
1935
+ groupName?: string;
1936
+ /** Optional badge rendered to the right of the label (e.g. active job count). */
1937
+ badge?: React__default.ReactNode;
1938
+ }
1939
+ interface SideMenuItemGroup extends SideMenuItemBase {
1940
+ type: "group";
1941
+ label: string;
1942
+ /** When true, renders a divider line immediately before the group header. */
1943
+ hasDivider?: boolean;
1944
+ }
1945
+ interface SideMenuItemDivider extends SideMenuItemBase {
1946
+ type: "divider";
1947
+ groupName?: string;
1948
+ }
1949
+ type SideMenuItem = SideMenuItemLink | SideMenuItemGroup | SideMenuItemDivider;
1950
+ interface SideMenuProps {
1951
+ color?: TrueColor;
1952
+ title?: string;
1953
+ /** Icon element shown in the logo area (always visible, collapsed or expanded) */
1954
+ logoIcon?: React__default.ReactNode;
1955
+ /** Text element shown next to the logoIcon when expanded */
1956
+ logoText?: React__default.ReactNode;
1957
+ items: SideMenuItem[];
1958
+ className?: string;
1959
+ collapsed?: boolean;
1960
+ onToggleCollapse?: () => void;
1961
+ mobileOpen?: boolean;
1962
+ onCloseMobile?: () => void;
1963
+ /** When true, the desktop sidebar uses h-full instead of a fixed calc height. */
1964
+ fullHeight?: boolean;
1965
+ /** Called with item.guards; return true = show. Omit to show all. */
1966
+ guardEvaluator?: (guards: SideMenuItemGuard[]) => boolean;
1967
+ /**
1968
+ * Active module view filter (e.g. 'all' | 'host' | 'orchestrator').
1969
+ * When set to a non-'all' value, items whose module/anyModule guards reference
1970
+ * a module listed in `moduleViewOptions` must match this value to be shown.
1971
+ * Modules NOT in `moduleViewOptions` (e.g. 'reverse_proxy', 'api') are never
1972
+ * subject to the view filter and behave as before.
1973
+ * Items with no module guard are always shown.
1974
+ */
1975
+ activeModuleView?: string;
1976
+ /**
1977
+ * The set of module names that are treated as view-selectable
1978
+ * (e.g. ['host', 'orchestrator']). Only module guards whose value appears
1979
+ * in this list are subject to the activeModuleView filter.
1980
+ * Defaults to [] (no view filtering on any module).
1981
+ */
1982
+ moduleViewOptions?: readonly string[];
1983
+ }
1984
+ declare const SideMenu: ({ title, logoIcon, logoText, items, className, collapsed, onToggleCollapse, mobileOpen, onCloseMobile, fullHeight, guardEvaluator, activeModuleView, moduleViewOptions, color, }: SideMenuProps) => React__default.JSX.Element;
1985
+
1986
+ interface SideMenuLayoutProps {
1987
+ /** Props passed to the SideMenu component (including color). */
1988
+ sideMenuProps: SideMenuProps;
1989
+ /** Content rendered in the fixed header bar at the top of the main area */
1990
+ header?: React__default.ReactNode;
1991
+ /** Main scrollable body content */
1992
+ children?: React__default.ReactNode;
1993
+ /** Additional class name for the root container */
1994
+ className?: string;
1995
+ /** Additional class name for the header section */
1996
+ headerClassName?: string;
1997
+ /** Additional class name for the scrollable body */
1998
+ bodyClassName?: string;
1999
+ /**
2000
+ * Per-item actions from the list/sidebar (e.g. edit/delete buttons for the active item).
2001
+ * Consumed by the header via `useSideMenuActions`.
2002
+ */
2003
+ sideItemActions?: React__default.ReactNode;
2004
+ /**
2005
+ * Actions from the detail/side panel (e.g. PageHeader action buttons).
2006
+ * Consumed by the header via `useSideMenuActions`.
2007
+ */
2008
+ sidePanelActions?: React__default.ReactNode;
2009
+ }
2010
+ declare const SideMenuLayout: ({ sideMenuProps, header, children, className, headerClassName, bodyClassName, sideItemActions, sidePanelActions, }: SideMenuLayoutProps) => React__default.JSX.Element;
2011
+
2012
+ type SplitViewSize = "sm" | "md" | "lg";
2013
+ interface SplitViewItemBadge {
2014
+ label: React__default.ReactNode;
2015
+ tone?: TrueColor;
2016
+ variant?: "solid" | "soft" | "outline";
2017
+ }
2018
+ interface SplitViewItem {
2019
+ id: string;
2020
+ /** Primary label */
2021
+ label: React__default.ReactNode;
2022
+ /** Secondary line shown below the label */
2023
+ subtitle?: React__default.ReactNode;
2024
+ /** Badges/pills rendered after the subtitle */
2025
+ badges?: SplitViewItemBadge[];
2026
+ /** Content to render in the detail pane when this item is selected */
2027
+ panel: React__default.ReactNode;
2028
+ /** Disable selection */
2029
+ disabled?: boolean;
2030
+ /** Hide the item entirely */
2031
+ hidden?: boolean;
2032
+ /** Optional icon rendered before the label */
2033
+ icon?: IconName;
2034
+ /** Action buttons shown on the right side of the item row (visible on hover) */
2035
+ actions?: React__default.ReactNode;
2036
+ /** Extra content rendered below the item row when it is the active selection */
2037
+ subContent?: React__default.ReactNode;
2038
+ tags?: string[];
2039
+ /** When true, renders the item with an intense accent background and a pulsing dot to signal new content */
2040
+ highlight?: boolean;
2041
+ }
2042
+ type SplitViewHeaderSlot<T> = T | ((activeItem: SplitViewItem) => T);
2043
+ interface SplitViewHeaderDetails {
2044
+ title?: React__default.ReactNode;
2045
+ subtitle?: React__default.ReactNode;
2046
+ description?: React__default.ReactNode;
2047
+ /** Right-aligned tag/badge area. Accepts any React node(s). */
2048
+ tags?: React__default.ReactNode;
2049
+ /**
2050
+ * Custom body content rendered as the Panel children.
2051
+ * When provided, it overrides title/subtitle/description/tags content.
2052
+ */
2053
+ headerBody?: React__default.ReactNode;
2054
+ tone?: TrueColor;
2055
+ variant?: PanelVariant;
2056
+ /** Alias for `variant` */
2057
+ variants?: PanelVariant;
2058
+ decoration?: PanelDecoration;
2059
+ /** Alias for `decoration` */
2060
+ decorations?: PanelDecoration;
2061
+ /** Optional divider between header row and details block (default: true). */
2062
+ bordered?: boolean;
2063
+ className?: string;
2064
+ }
2065
+ interface SplitViewPanelHeaderProps {
2066
+ /** Full icon node (left side) */
2067
+ icon?: SplitViewHeaderSlot<React__default.ReactNode>;
2068
+ /** Defaults to the active item's label when omitted */
2069
+ title?: SplitViewHeaderSlot<React__default.ReactNode>;
2070
+ subtitle?: SplitViewHeaderSlot<React__default.ReactNode>;
2071
+ /** Right side actions in the main row */
2072
+ actions?: SplitViewHeaderSlot<React__default.ReactNode>;
2073
+ /** Extra customizable content rendered between identity and search */
2074
+ body?: SplitViewHeaderSlot<React__default.ReactNode>;
2075
+ search?: SplitViewHeaderSlot<React__default.ReactNode>;
2076
+ searchWidth?: string;
2077
+ /** Second row, right-aligned actions */
2078
+ bottomActions?: SplitViewHeaderSlot<React__default.ReactNode>;
2079
+ /** Optional details block rendered below the header row and styled like a Panel. */
2080
+ headerDetails?: SplitViewHeaderSlot<SplitViewHeaderDetails | null | undefined>;
2081
+ /** Optional help button inserted after title */
2082
+ helper?: SplitViewHeaderSlot<HelpButtonProps | undefined>;
2083
+ border?: boolean;
2084
+ className?: string;
2085
+ }
2086
+ interface SplitViewProps {
2087
+ items: SplitViewItem[];
2088
+ /** Controlled selected id */
2089
+ value?: string;
2090
+ /** Uncontrolled default */
2091
+ defaultValue?: string;
2092
+ onChange?: (id: string, item: SplitViewItem) => void;
2093
+ /** Title shown above the item list (e.g. "LIBRARIES (3)") */
2094
+ listTitle?: React__default.ReactNode;
2095
+ /** Placeholder for the search input */
2096
+ searchPlaceholder?: string;
2097
+ /** Width of the list panel – Tailwind class (when not resizable) or initial px value for resizable */
2098
+ listWidth?: string;
2099
+ /** Accent color used for active item highlight */
2100
+ color?: TrueColor;
2101
+ size?: SplitViewSize;
2102
+ /** Deprecated: one visible item is now always shown as detail-only (list hidden). */
2103
+ autoHideList?: boolean;
2104
+ /** Allow collapsing the list panel */
2105
+ collapsible?: boolean;
2106
+ /** Controlled collapsed state */
2107
+ collapsed?: boolean;
2108
+ /** Uncontrolled initial collapsed state */
2109
+ defaultCollapsed?: boolean;
2110
+ /** Callback when collapsed state changes */
2111
+ onCollapsedChange?: (collapsed: boolean) => void;
2112
+ /** Allow drag-to-resize the list panel */
2113
+ resizable?: boolean;
2114
+ /** Minimum list width in px when resizable (default: 180) */
2115
+ minListWidth?: number;
2116
+ /** Maximum list width in px when resizable (default: 50% of container) */
2117
+ maxListWidth?: number;
2118
+ /** Extra class for the root container */
2119
+ className?: string;
2120
+ /** Extra class for the list panel */
2121
+ listClassName?: string;
2122
+ /** Extra class for the detail panel */
2123
+ panelClassName?: string;
2124
+ /** Content rendered above the detail panel (header area) */
2125
+ panelHeader?: React__default.ReactNode | ((activeItem: SplitViewItem) => React__default.ReactNode);
2126
+ /**
2127
+ * Built-in SplitView header renderer (PageHeader-like) with support for dynamic slots.
2128
+ * When provided, this takes precedence over `panelHeader`.
2129
+ */
2130
+ panelHeaderProps?: SplitViewPanelHeaderProps | ((activeItem: SplitViewItem) => SplitViewPanelHeaderProps | null | undefined);
2131
+ /** Rendered when no items match the search filter in the list */
2132
+ emptyState?: React__default.ReactNode;
2133
+ /** Action buttons rendered in the list header row (e.g. an "Add" button) */
2134
+ listActions?: React__default.ReactNode;
2135
+ /** Content shown in the detail panel when no item is selected. Defaults to a generic EmptyState. Pass `null` to render nothing. */
2136
+ panelEmptyState?: React__default.ReactNode | null;
2137
+ /** When true, shows a loading state instead of the normal content */
2138
+ loading?: boolean;
2139
+ /** Custom loading content. Defaults to a centered Spinner with "Loading..." label. */
2140
+ loadingState?: React__default.ReactNode;
2141
+ /** When truthy, shows an error state instead of the normal content. Pass a string to use as the error subtitle. */
2142
+ error?: React__default.ReactNode;
2143
+ /** Custom error content. Defaults to a danger-toned EmptyState. */
2144
+ errorState?: React__default.ReactNode;
2145
+ /** Callback for the default error state's retry button */
2146
+ onRetry?: () => void;
2147
+ /** When true, renders a left border on the SplitView container to visually separate it from adjacent content (e.g. a side menu) */
2148
+ borderLeft?: boolean;
2149
+ /**
2150
+ * When true (default), the detail panel body scrolls automatically — panels can render
2151
+ * content of any height and the wrapper handles overflow.
2152
+ * When false, the panel body uses `overflow-hidden` so that panels which manage their
2153
+ * own internal scroll (e.g. a sticky-header + scrollable table layout) fill the space
2154
+ * correctly without a double-scroll or broken `h-full` percentage height.
2155
+ */
2156
+ panelScrollable?: boolean;
2157
+ /**
2158
+ * When true (default), clicking a list item immediately opens its detail panel —
2159
+ * the current behaviour.
2160
+ * When false, clicking a row only highlights it; the detail panel only opens when
2161
+ * the user explicitly clicks the expand (→) button on that row.
2162
+ */
2163
+ autoExpand?: boolean;
2164
+ /** Controlled expanded id (only meaningful when autoExpand=false) */
2165
+ expandedValue?: string;
2166
+ /** Callback fired when the expanded item changes (only when autoExpand=false) */
2167
+ onExpand?: (id: string, item: SplitViewItem) => void;
2168
+ }
2169
+ declare const SplitView: React__default.FC<SplitViewProps>;
2170
+
2171
+ interface SmartInputProps {
2172
+ value: string;
2173
+ onChange: (value: string) => void;
2174
+ placeholder?: string;
2175
+ className?: string;
2176
+ globalParameters?: CapsuleBlueprintParameter[];
2177
+ serviceNames?: string[];
2178
+ context?: {
2179
+ slug?: string;
2180
+ enable_https?: boolean;
2181
+ };
2182
+ multiline?: boolean;
2183
+ }
2184
+ declare const SmartInput: React__default.FC<SmartInputProps>;
2185
+
2186
+ interface SmartValueProps {
2187
+ value: string;
2188
+ globalParameters?: CapsuleBlueprintParameter[];
2189
+ serviceNames?: string[];
2190
+ context?: {
2191
+ slug?: string;
2192
+ enable_https?: boolean;
2193
+ };
2194
+ className?: string;
2195
+ }
2196
+ declare const SmartValue: React__default.FC<SmartValueProps>;
2197
+
2198
+ interface StartupStage {
2199
+ id: string;
2200
+ label: string;
2201
+ title: string;
2202
+ status: StartupStageStatus;
2203
+ errorMessage?: string;
2204
+ errorType?: string;
2205
+ description?: string;
2206
+ statusMessage?: string;
2207
+ retryCount?: number;
2208
+ maxRetryCount?: number;
2209
+ progress?: {
2210
+ percentage: number;
2211
+ currentMessage?: string;
2212
+ details?: string;
2213
+ };
2214
+ }
2215
+ type StartupStageStatus = "pending" | "in-progress" | "has-error" | "is-ok";
2216
+
2217
+ type StartupStageStepperProps = {
2218
+ stages: StartupStage[];
2219
+ currentStageId?: string;
2220
+ className?: string;
2221
+ detailClassName?: string;
2222
+ onStageSelect?: (stage: StartupStage) => void;
2223
+ showHistoryToggle?: boolean;
2224
+ defaultShowHistory?: boolean;
2225
+ title?: string;
2226
+ variant?: "minimal" | "panel";
2227
+ size?: StartupStageStepperSize;
2228
+ };
2229
+ type StartupStageStepperSize = "sm" | "md" | "lg";
2230
+ declare const StartupStageStepper: React__default.FC<StartupStageStepperProps>;
2231
+
2232
+ interface StatTileTrend {
2233
+ value: string | number;
2234
+ direction: "up" | "down" | "neutral";
2235
+ label?: string;
2236
+ }
2237
+ interface StatTileMeta {
2238
+ text: React__default.ReactNode;
2239
+ icon?: IconName;
2240
+ variant?: "text" | "badge";
2241
+ color?: TrueColor;
2242
+ }
2243
+ interface StatTileError {
2244
+ icon?: IconName;
2245
+ message?: string;
2246
+ onRetry?: () => void;
2247
+ }
2248
+ interface StatTileProgress {
2249
+ value: number;
2250
+ label?: string;
2251
+ color?: TrueColor;
2252
+ }
2253
+ interface StatTileProps {
2254
+ title?: React__default.ReactNode;
2255
+ value?: React__default.ReactNode;
2256
+ subtitle?: React__default.ReactNode;
2257
+ body?: React__default.ReactNode;
2258
+ icon?: IconName;
2259
+ color?: TrueColor;
2260
+ trend?: StatTileTrend;
2261
+ progress?: StatTileProgress;
2262
+ meta?: StatTileMeta[];
2263
+ footer?: React__default.ReactNode;
2264
+ actions?: React__default.ReactNode;
2265
+ className?: string;
2266
+ onClick?: () => void;
2267
+ withDecoration?: boolean;
2268
+ withHoverEffect?: boolean;
2269
+ textColor?: TrueColor;
2270
+ loading?: boolean;
2271
+ spinnerVariant?: "solid" | "segments";
2272
+ spinnerThickness?: "thin" | "normal" | "thick";
2273
+ spinnerColor?: TrueColor;
2274
+ error?: StatTileError | null;
2275
+ }
2276
+ declare const StatTile: React__default.FC<StatTileProps>;
2277
+
2278
+ interface StatChartItem {
2279
+ label: string;
2280
+ value: number;
2281
+ /** Omit to auto-assign from the theme palette. */
2282
+ color?: TrueColor;
2283
+ intensity?: string;
2284
+ onClick?: () => void;
2285
+ }
2286
+ interface StatChartDataset {
2287
+ id: string | number;
2288
+ label: string;
2289
+ centerLabel: string;
2290
+ items: StatChartItem[];
2291
+ }
2292
+ interface StatChartTileProps extends Omit<StatTileProps, "body" | "title" | "value" | "subtitle"> {
2293
+ data: StatChartDataset[];
2294
+ }
2295
+ declare const StatChartTile: React__default.FC<StatChartTileProps>;
2296
+
2297
+ interface StatCountTileBreakdown {
2298
+ label: string;
2299
+ value: string | number;
2300
+ color?: TrueColor;
2301
+ }
2302
+ interface StatCountTileProps {
2303
+ title?: React__default.ReactNode;
2304
+ count?: React__default.ReactNode;
2305
+ breakdown?: StatCountTileBreakdown[];
2306
+ icon?: IconName;
2307
+ color?: TrueColor;
2308
+ className?: string;
2309
+ onClick?: () => void;
2310
+ withDecoration?: boolean;
2311
+ withHoverEffect?: boolean;
2312
+ textColor?: TrueColor;
2313
+ loading?: boolean;
2314
+ spinnerVariant?: "solid" | "segments";
2315
+ spinnerThickness?: "thin" | "normal" | "thick";
2316
+ spinnerColor?: TrueColor;
2317
+ error?: {
2318
+ icon?: IconName;
2319
+ message?: string;
2320
+ onRetry?: () => void;
2321
+ variant?: "text" | "badge";
2322
+ } | null;
2323
+ }
2324
+ declare const StatCountTile: React__default.FC<StatCountTileProps>;
2325
+
2326
+ interface StatGoalItem {
2327
+ value: number;
2328
+ label: string;
2329
+ icon: IconName;
2330
+ /** Omit to auto-assign from the theme palette. */
2331
+ color?: TrueColor;
2332
+ tooltip?: string;
2333
+ }
2334
+ interface StatGoalTileProps extends Omit<StatTileProps, "body" | "value" | "subtitle"> {
2335
+ goals: StatGoalItem[];
2336
+ }
2337
+ declare const StatGoalTile: React__default.FC<StatGoalTileProps>;
2338
+
2339
+ interface StatGraphSeries {
2340
+ key: string;
2341
+ label: string;
2342
+ /** Omit to auto-assign from the theme palette. */
2343
+ color?: TrueColor;
2344
+ }
2345
+ interface StatGraphTileProps extends Omit<StatTileProps, "body" | "progress" | "trend" | "meta" | "footer"> {
2346
+ data: any[];
2347
+ variant: "bar" | "sparkline";
2348
+ series: StatGraphSeries[];
2349
+ height?: number;
2350
+ showLegend?: boolean;
2351
+ showAxes?: boolean;
2352
+ showGrid?: boolean;
2353
+ showTooltip?: boolean;
2354
+ /** Y-axis domain for sparkline. Defaults to [0, 'auto']. Use ['auto', 'auto'] for auto-scaling. */
2355
+ yDomain?: [number | string, number | string];
2356
+ /** Enable chart enter/update animation. Keep disabled for high-frequency realtime updates. */
2357
+ chartAnimation?: boolean;
2358
+ /** Animation duration when chartAnimation is enabled. */
2359
+ chartAnimationDuration?: number;
2360
+ /** Optional cap for rendered data points to reduce chart redraw work. */
2361
+ maxDataPoints?: number;
2362
+ }
2363
+ declare const StatGraphTile: React__default.FC<StatGraphTileProps>;
2364
+
2365
+ type StepStatus = "pending" | "active" | "completed" | "error";
2366
+ interface StepperStep {
2367
+ id?: string;
2368
+ title: React__default.ReactNode;
2369
+ subtitle?: React__default.ReactNode;
2370
+ description?: React__default.ReactNode;
2371
+ content?: React__default.ReactNode;
2372
+ icon?: IconName | React__default.ReactElement;
2373
+ optionalLabel?: React__default.ReactNode;
2374
+ status?: StepStatus;
2375
+ disabled?: boolean;
2376
+ }
2377
+ type Step = StepperStep;
2378
+ type StepperOrientation = "horizontal" | "vertical";
2379
+ type StepperVariant = "card" | "minimal";
2380
+ type StepperSize = "sm" | "md" | "lg";
2381
+ type StepperConnector = "line" | "progress" | "none";
2382
+ type StepperProgressBarPosition = "top" | "bottom";
2383
+ type StepperConnectorAlign = "left" | "center" | "right";
2384
+ interface StepperProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "onChange"> {
2385
+ steps: StepperStep[];
2386
+ currentIndex?: number;
2387
+ currentStepId?: string;
2388
+ defaultCurrentIndex?: number;
2389
+ defaultCurrentStepId?: string;
2390
+ completedStepIds?: string[];
2391
+ orientation?: StepperOrientation;
2392
+ variant?: StepperVariant;
2393
+ size?: StepperSize;
2394
+ tone?: PanelTone;
2395
+ connector?: StepperConnector;
2396
+ interactive?: boolean;
2397
+ readOnly?: boolean;
2398
+ animated?: boolean;
2399
+ transitionMs?: number;
2400
+ showProgressSummary?: boolean;
2401
+ showProgressBar?: boolean;
2402
+ progressBarPosition?: "top" | "bottom";
2403
+ progressPrecision?: number;
2404
+ progressLabel?: React__default.ReactNode;
2405
+ onChange?: (index: number, stepId?: string) => void;
2406
+ onStepClick?: (step: StepperStep, index: number) => void;
2407
+ renderActions?: (step: StepperStep, index: number) => React__default.ReactNode;
2408
+ loaderStepIds?: string[];
2409
+ loading?: boolean;
2410
+ loaderTitle?: React__default.ReactNode;
2411
+ loaderMessage?: React__default.ReactNode;
2412
+ loaderType?: LoaderProps["variant"];
2413
+ loaderProgress?: number;
2414
+ loaderColor?: LoaderProps["color"];
2415
+ wrapperClassName?: string;
2416
+ headerClassName?: string;
2417
+ stepClassName?: string;
2418
+ contentClassName?: string;
2419
+ stepMaxHeight?: number | string;
2420
+ connectNodes?: boolean;
2421
+ connectorAlign?: StepperConnectorAlign;
2422
+ /** Override whether the underline bar is shown beneath each step's title/subtitle. When omitted the variant default is used (`card` → true, `minimal` → false). */
2423
+ showStepUnderline?: boolean;
2424
+ }
2425
+ declare const Stepper: React__default.FC<StepperProps>;
2426
+
2427
+ type SortDirection = "asc" | "desc";
2428
+ interface TableSortState {
2429
+ columnId: string;
2430
+ direction: SortDirection;
2431
+ }
2432
+ interface TablePaginationState {
2433
+ page: number;
2434
+ pageSize: number;
2435
+ total: number;
2436
+ onPageChange: (page: number) => void;
2437
+ onPageSizeChange: (pageSize: number) => void;
2438
+ }
2439
+ /** Unified snapshot of all user-configurable table preferences. */
2440
+ interface TableSettings {
2441
+ columnVisibility?: Record<string, boolean>;
2442
+ columnWidths?: Record<string, number>;
2443
+ activeView?: "table" | "panel";
2444
+ groupBy?: string | null;
2445
+ showGroupHeader?: boolean;
2446
+ stickyColumns?: Record<string, "left" | "right">;
2447
+ }
2448
+ type AccessorFn<T> = (row: T, index: number) => React__default.ReactNode;
2449
+ interface TableColumn<T> {
2450
+ id: string;
2451
+ header: React__default.ReactNode;
2452
+ accessor?: keyof T | AccessorFn<T>;
2453
+ render?: (row: T, index: number) => React__default.ReactNode;
2454
+ /** Override the value used for sorting when render returns a non-primitive (e.g. an icon). */
2455
+ sortValue?: (row: T) => string | number;
2456
+ width?: string | number;
2457
+ minWidth?: string | number;
2458
+ maxWidth?: string | number;
2459
+ align?: "left" | "center" | "right";
2460
+ sortable?: boolean;
2461
+ tooltip?: string;
2462
+ className?: string;
2463
+ headerClassName?: string;
2464
+ sticky?: "left" | "right";
2465
+ /** When true, this column is excluded from user preference menus (hide/show, group-by, sticky). */
2466
+ isActionsColumn?: boolean;
2467
+ /** When true, the column starts hidden by default but can still be enabled from the Columns menu. */
2468
+ defaultHidden?: boolean;
2469
+ /** When false, this column cannot be hidden via the column visibility toggle. Defaults to true. */
2470
+ hideable?: boolean;
2471
+ /** When false, this column will not appear in the group-by picker. Defaults to true. */
2472
+ groupable?: boolean;
2473
+ /** When false, this column cannot be resized even when `resizableColumns` is set on the table. Defaults to true. */
2474
+ resizable?: boolean;
2475
+ /**
2476
+ * Returns a plain string used as the group key and header label when this column is the active
2477
+ * group-by. Use this when `render` returns JSX (which would otherwise give "[object Object]").
2478
+ * Falls back to: accessor result → sortValue → render result (only if a primitive string/number).
2479
+ */
2480
+ groupValue?: (row: T) => string;
2481
+ /**
2482
+ * Background Tailwind class(es) applied to sticky cells so they remain opaque over scrolled
2483
+ * content. Defaults to `'bg-white dark:bg-neutral-900'`. Pass `'bg-transparent'` to let the
2484
+ * row/table background show through instead.
2485
+ */
2486
+ stickyBackground?: string;
2487
+ /**
2488
+ * Per-row variant of `stickyBackground`. When provided, takes precedence over `stickyBackground`
2489
+ * for the matching row. Return `undefined` to fall back to the static `stickyBackground`.
2490
+ */
2491
+ stickyBackgroundFn?: (row: T, index: number) => string | undefined;
2492
+ }
2493
+ type Column<T> = TableColumn<T>;
2494
+ type TableVariant = "default" | "compact" | "minimal" | "bordered" | "flat";
2495
+ interface TableProps<T> {
2496
+ columns?: TableColumn<T>[];
2497
+ data: T[];
2498
+ selectedItems?: T[];
2499
+ rowKey?: (row: T, index: number) => string | number;
2500
+ variant?: TableVariant;
2501
+ tone?: PanelTone;
2502
+ /** Theme color applied to action buttons, sort indicators, group dot, badges, and pagination. */
2503
+ color?: TrueColor;
2504
+ striped?: boolean;
2505
+ noBorders?: boolean;
2506
+ hoverable?: boolean;
2507
+ stickyHeader?: boolean;
2508
+ /**
2509
+ * When true, the last column is pinned to the right edge and stays visible
2510
+ * while the other columns scroll horizontally. A left border separator is
2511
+ * added automatically to distinguish it from the scrolling content.
2512
+ */
2513
+ stickyActions?: boolean;
2514
+ loading?: boolean;
2515
+ loadingMessage?: string;
2516
+ loaderType?: "spinner" | "progress";
2517
+ loaderProgress?: number;
2518
+ emptyState?: React__default.ReactNode;
2519
+ sortState?: TableSortState;
2520
+ defaultSort?: TableSortState;
2521
+ onSortChange?: (sort: TableSortState | null) => void;
2522
+ headerActions?: React__default.ReactNode;
2523
+ footer?: React__default.ReactNode;
2524
+ pagination?: TablePaginationState;
2525
+ maxHeight?: string | number;
2526
+ onRowClick?: (row: T, index: number) => void;
2527
+ rowClassName?: (row: T, index: number) => string;
2528
+ /** When provided and returns true for a row, that row is rendered with an intense accent background and a pulsing left-border indicator to signal new/updated content. */
2529
+ rowHighlight?: (row: T, index: number) => boolean;
2530
+ className?: string;
2531
+ tableClassName?: string;
2532
+ bodyClassName?: string;
2533
+ style?: React__default.CSSProperties;
2534
+ fullHeight?: boolean;
2535
+ manualSorting?: boolean;
2536
+ /** When true, wraps the table in a rounded border regardless of the variant. */
2537
+ rounded?: boolean;
2538
+ /** Title shown in the header bar alongside headerActions / view toggle. Defaults to empty. */
2539
+ headerTitle?: string;
2540
+ /**
2541
+ * Initial column visibility map (`columnId → visible`).
2542
+ * Serialise with `JSON.stringify` to save; parse and pass back to restore.
2543
+ */
2544
+ columnVisibility?: Record<string, boolean>;
2545
+ /** Called whenever the user changes column visibility. Receives the full current config. */
2546
+ onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void;
2547
+ /**
2548
+ * When true, shows the column visibility toggle button in the header bar.
2549
+ * Defaults to false — the icon is hidden unless this prop is explicitly set.
2550
+ */
2551
+ showColumnSelector?: boolean;
2552
+ /**
2553
+ * Enables drag-to-resize column headers. Each column can opt out via `column.resizable = false`.
2554
+ */
2555
+ resizableColumns?: boolean;
2556
+ /**
2557
+ * Initial column width map (`columnId → pixels`).
2558
+ * Serialise with `JSON.stringify` to save; parse and pass back to restore.
2559
+ */
2560
+ columnWidths?: Record<string, number>;
2561
+ /** Called when the user finishes resizing a column. Receives the full updated widths map. */
2562
+ onColumnWidthChange?: (widths: Record<string, number>) => void;
2563
+ /** Renders each row as a panel card. When provided alongside columns, a view toggle appears in the header. */
2564
+ panelItem?: (row: T, index: number) => React__default.ReactNode;
2565
+ /** Initial view when both columns and panelItem are provided. Defaults to "table". */
2566
+ defaultView?: "table" | "panel";
2567
+ /** Called whenever the user switches between table and panel view. */
2568
+ onViewChange?: (view: "table" | "panel") => void;
2569
+ /** CSS class(es) for the panel grid container. Defaults to a 1–3 column responsive grid. */
2570
+ panelGridClassName?: string;
2571
+ /**
2572
+ * Minimum width of each panel card. The grid uses CSS `auto-fill` to place
2573
+ * as many columns as fit the container — adapts to the parent width with no
2574
+ * hard breakpoints. Accepts a CSS length string ("280px", "20rem") or a
2575
+ * number treated as px. When set, takes precedence over the column layout in
2576
+ * `panelGridClassName` (extra classes from `panelGridClassName` still apply).
2577
+ */
2578
+ panelMinItemWidth?: string | number;
2579
+ /**
2580
+ * Gap between panel cards when `panelMinItemWidth` is set. Accepts a CSS
2581
+ * length string ("1rem", "16px") or a number treated as px. Defaults to
2582
+ * "1rem" (= `gap-4`). The value is applied via inline style so it cannot be
2583
+ * accidentally overridden by a conflicting Tailwind class.
2584
+ */
2585
+ panelGap?: string | number;
2586
+ /**
2587
+ * Maximum width of each panel card when `panelMinItemWidth` is set. Prevents cards from
2588
+ * growing too wide on large containers. Accepts a CSS length string ("480px", "30rem") or
2589
+ * a number treated as px. When omitted, cards stretch to fill available space (`1fr`).
2590
+ */
2591
+ panelMaxItemWidth?: string | number;
2592
+ /**
2593
+ * When provided, the panel view only renders the first row for each unique key value.
2594
+ * Use this when `data` is a flattened list but panels should show one card per logical entity.
2595
+ * Example: `panelDeduplicateBy={(row) => row.manifest.id}`
2596
+ */
2597
+ panelDeduplicateBy?: (row: T) => string | number;
2598
+ /**
2599
+ * Column id to group rows by (code-defined).
2600
+ * Always applied; the user cannot override this via the UI.
2601
+ */
2602
+ groupBy?: string;
2603
+ /**
2604
+ * When true, a grouping control is shown in the header letting the user
2605
+ * configure grouping at runtime. Only effective when `groupBy` is not set.
2606
+ */
2607
+ groupable?: boolean;
2608
+ /**
2609
+ * Initial user-configured group column id (uncontrolled).
2610
+ * Pass the persisted value here on mount to restore previous state.
2611
+ * Only used when `groupable` is true and `groupBy` is not set.
2612
+ */
2613
+ defaultGroupBy?: string;
2614
+ /** Whether to show a header row for each group value. Defaults to true. */
2615
+ showGroupHeader?: boolean;
2616
+ /** Whether groups start expanded. Defaults to true. */
2617
+ defaultGroupExpanded?: boolean;
2618
+ /** Called when the user changes the group column (null = no grouping). Use for persistence. */
2619
+ onGroupByChange?: (columnId: string | null) => void;
2620
+ /**
2621
+ * When true, a sticky-column picker is shown in the header bar letting the
2622
+ * user pin individual columns to the left or right at runtime.
2623
+ */
2624
+ userStickyColumns?: boolean;
2625
+ /**
2626
+ * Initial user-configured sticky map (`columnId → 'left' | 'right'`).
2627
+ * Pass the persisted value here on mount to restore previous state.
2628
+ */
2629
+ defaultStickyColumns?: Record<string, "left" | "right">;
2630
+ /** Called when the user changes column stickiness. Use for persistence. */
2631
+ onStickyColumnsChange?: (config: Record<string, "left" | "right">) => void;
2632
+ /**
2633
+ * Unified table settings snapshot. Fields here take precedence over the
2634
+ * individual initial-value props (`columnVisibility`, `columnWidths`,
2635
+ * `defaultView`, `defaultGroupBy`, `defaultStickyColumns`).
2636
+ * Pass a previously persisted value to restore all settings on mount.
2637
+ */
2638
+ tableSettings?: TableSettings;
2639
+ /**
2640
+ * Called whenever any user-configurable table setting changes (visibility,
2641
+ * widths, view, group-by, sticky columns). Use a single handler to persist
2642
+ * the full settings object instead of wiring up all individual callbacks.
2643
+ */
2644
+ onTableSettingsChange?: (settings: TableSettings) => void;
2645
+ }
2646
+ declare function Table<T>(props: TableProps<T>): React__default.ReactElement;
2647
+
2648
+ interface AccessMatrixPermission {
2649
+ group: string;
2650
+ resource: string;
2651
+ action: string;
2652
+ enabled: boolean;
2653
+ }
2654
+ interface AccessMatrixProps {
2655
+ permissions: AccessMatrixPermission[];
2656
+ /** Number of groups visible before the "Show more" button appears. Defaults to 5. */
2657
+ limit?: number;
2658
+ variant?: TableVariant;
2659
+ tone?: PanelTone;
2660
+ striped?: boolean;
2661
+ /** Forwards to Table: remove inner row borders/dividers. */
2662
+ noBorders?: boolean;
2663
+ /** Forwards to Table: make the table fill parent height and scroll internally. */
2664
+ fullHeight?: boolean;
2665
+ className?: string;
2666
+ hoverable?: boolean;
2667
+ /**
2668
+ * Background Tailwind class(es) applied to the sticky Resource column cells so they remain
2669
+ * opaque over scrolled action columns. Defaults to `'bg-white dark:bg-neutral-900'`.
2670
+ * Pass `'bg-transparent'` when the table sits inside a container whose background should
2671
+ * show through (e.g. a tinted panel or card).
2672
+ */
2673
+ stickyBackground?: string;
2674
+ }
2675
+ declare const AccessMatrix: React__default.FC<AccessMatrixProps>;
2676
+
2677
+ type SmartVariableType = "var" | "env";
2678
+ type SmartVariableSource = "global" | "system" | "service";
2679
+ interface SmartVariable {
2680
+ fullToken: string;
2681
+ type: SmartVariableType;
2682
+ source: SmartVariableSource;
2683
+ name: string;
2684
+ description?: string;
2685
+ defaultValue?: string;
2686
+ }
2687
+ declare const SYSTEM_VARIABLES: SmartVariable[];
2688
+
2689
+ interface VariablePickerProps {
2690
+ onSelect: (variable: SmartVariable) => void;
2691
+ onClose?: () => void;
2692
+ globalParameters: CapsuleBlueprintParameter[];
2693
+ serviceNames: string[];
2694
+ }
2695
+ declare const VariablePicker: React__default.FC<VariablePickerProps>;
2696
+
2697
+ interface KeyValuePair {
2698
+ key: string;
2699
+ value: string;
2700
+ }
2701
+ interface KeyValueArrayFieldProps {
2702
+ label: string;
2703
+ hint?: string;
2704
+ value: KeyValuePair[];
2705
+ onChange: (value: KeyValuePair[]) => void;
2706
+ error?: string;
2707
+ help?: string;
2708
+ isVisible?: boolean;
2709
+ addLabel?: string;
2710
+ }
2711
+ declare const KeyValueArrayField: React__default.FC<KeyValueArrayFieldProps>;
2712
+
2713
+ interface ApiErrorStateProps extends Omit<EmptyStateProps, "title" | "tone" | "icon" | "onAction" | "buttonText"> {
2714
+ onRetry?: () => void;
2715
+ title?: React__default.ReactNode;
2716
+ isError?: boolean;
2717
+ buttonText?: string;
2718
+ }
2719
+ declare const ApiErrorState: React__default.FC<ApiErrorStateProps>;
2720
+
2721
+ interface CustomIconProps {
2722
+ /** Name of the icon to display */
2723
+ icon: IconName;
2724
+ /** Alternative text for accessibility */
2725
+ alt?: string;
2726
+ /** Size of the icon in pixels */
2727
+ customSize?: number | string;
2728
+ /** Size of the icon: xs, sm, md, lg, xl */
2729
+ size?: IconSize;
2730
+ /** Additional CSS class names */
2731
+ className?: string;
2732
+ /** Click handler */
2733
+ onClick?: (e: React__default.MouseEvent<HTMLElement>) => void;
2734
+ /** Whether the icon should use color or be monochrome */
2735
+ colored?: boolean;
2736
+ /** Primary color to use for the icon */
2737
+ color?: string;
2738
+ /** Hover color for the icon */
2739
+ hoverColor?: string;
2740
+ /** @deprecated No longer used with component-based icons */
2741
+ forceSvg?: boolean;
2742
+ }
2743
+ declare const CustomIcon: React__default.FC<CustomIconProps>;
2744
+
2745
+ type DynamicValue = string | boolean;
2746
+ interface DynamicFormFieldProps {
2747
+ parameter: CapsuleBlueprintParameter;
2748
+ value: DynamicValue;
2749
+ onChange: (serviceName: string, key: string, value: DynamicValue, triggerDependencyEvaluation?: boolean) => void;
2750
+ error?: string;
2751
+ className?: string;
2752
+ isVisible?: boolean;
2753
+ }
2754
+ declare const DynamicFormField: React__default.FC<DynamicFormFieldProps>;
2755
+
2756
+ type NotificationType = "success" | "error" | "warning" | "info";
2757
+ interface NotificationModalProps {
2758
+ isOpen: boolean;
2759
+ onClose: () => void;
2760
+ title: string;
2761
+ message: React__default.ReactNode;
2762
+ type?: NotificationType;
2763
+ actionLabel?: string;
2764
+ onAction?: () => void;
2765
+ secondaryActionLabel?: string;
2766
+ onSecondaryAction?: () => void;
2767
+ }
2768
+ declare const NotificationModal: React__default.FC<NotificationModalProps>;
2769
+
2770
+ type ToastType = "success" | "error" | "info" | "warning" | "loading";
2771
+ interface ToastAction {
2772
+ label: string;
2773
+ onClick?: () => void;
2774
+ variant?: "primary" | "secondary" | "danger";
2775
+ icon?: IconName;
2776
+ customIcon?: React__default.ReactNode;
2777
+ keepOpen?: boolean;
2778
+ }
2779
+ interface ToastProgress {
2780
+ percent: number;
2781
+ status: "running" | "paused" | "completed" | "error";
2782
+ indeterminate: boolean;
2783
+ }
2784
+ interface Toast {
2785
+ id: string;
2786
+ type: ToastType;
2787
+ message: string | React__default.ReactNode;
2788
+ duration?: number;
2789
+ description?: string;
2790
+ label?: string;
2791
+ icon?: IconName;
2792
+ details?: React__default.ReactNode;
2793
+ actions?: ToastAction[];
2794
+ channel?: string;
2795
+ timestamp: number;
2796
+ isRead?: boolean;
2797
+ updatedAt?: number;
2798
+ _updateTimestamp?: number;
2799
+ progress?: ToastProgress;
2800
+ autoClose?: boolean;
2801
+ autoCloseDuration?: number;
2802
+ dismissible?: boolean;
2803
+ showIcon?: boolean;
2804
+ _remove?: boolean;
2805
+ }
2806
+
2807
+ interface SidePanelProps {
2808
+ /** Whether the panel is open */
2809
+ isOpen: boolean;
2810
+ /** Called when the user clicks the close button */
2811
+ onClose?: () => void;
2812
+ /** Panel title */
2813
+ title?: React__default.ReactNode;
2814
+ /** Secondary line rendered below the title */
2815
+ subtitle?: React__default.ReactNode;
2816
+ /** Width of the panel in px (default: 420) */
2817
+ width?: number;
2818
+ /** Optional icon rendered to the left of the title */
2819
+ icon?: React__default.ReactNode;
2820
+ /** Extra nodes rendered in the header next to the close button */
2821
+ headerActions?: React__default.ReactNode;
2822
+ /** Sticky footer rendered at the bottom of the panel */
2823
+ footer?: React__default.ReactNode;
2824
+ children?: React__default.ReactNode;
2825
+ className?: string;
2826
+ closeIconSize?: IconSize;
2827
+ /** Allow the user to drag the left edge to resize the panel. @default false */
2828
+ resizable?: boolean;
2829
+ /** Minimum width in px when resizable. @default 280 */
2830
+ minWidth?: number;
2831
+ /** Maximum width in px when resizable. @default 900 */
2832
+ maxWidth?: number;
2833
+ /** color for the resizer */
2834
+ color?: TrueColor;
2835
+ }
2836
+ /**
2837
+ * SidePanel — slides in from the right as a fixed overlay.
2838
+ *
2839
+ * Because it uses `position: fixed` it never affects the page layout,
2840
+ * so no horizontal scrollbar artifacts occur during the animation.
2841
+ *
2842
+ * ```tsx
2843
+ * <SidePanel isOpen={open} onClose={() => setOpen(false)} title="Details">
2844
+ * …detail content…
2845
+ * </SidePanel>
2846
+ * ```
2847
+ */
2848
+ declare const SidePanel: React__default.FC<SidePanelProps>;
2849
+
2850
+ interface TimelinePanelAction {
2851
+ label: React__default.ReactNode;
2852
+ onClick?: () => void;
2853
+ variant?: ButtonVariant;
2854
+ color?: TrueColor;
2855
+ size?: ButtonSize;
2856
+ disabled?: boolean;
2857
+ loading?: boolean;
2858
+ }
2859
+ interface TimelinePanelOverflowItem {
2860
+ label: React__default.ReactNode;
2861
+ value: string;
2862
+ icon?: string | React__default.ReactElement;
2863
+ danger?: boolean;
2864
+ disabled?: boolean;
2865
+ onClick?: () => void;
2866
+ }
2867
+ interface TimelinePanelItem {
2868
+ id: string;
2869
+ /** Icon shown in a rounded box next to the content */
2870
+ icon?: React__default.ReactNode;
2871
+ /** draws a background for the icon */
2872
+ iconBackground?: boolean;
2873
+ /** Primary label */
2874
+ title: React__default.ReactNode;
2875
+ /** Secondary line (date, size, etc.) */
2876
+ subtitle?: React__default.ReactNode;
2877
+ /**
2878
+ * When true the item is rendered as a "current state" badge row instead of
2879
+ * a normal content row. The title becomes the badge text.
2880
+ */
2881
+ isCurrent?: boolean;
2882
+ /**
2883
+ * When true the dot on the timeline line is larger/filled — use for root or
2884
+ * first items to visually anchor the timeline.
2885
+ */
2886
+ isRoot?: boolean;
2887
+ /** Inline action buttons rendered on the right side. Pass a `React.ReactNode` for fully custom content, or a `TimelinePanelAction[]` for the built-in button layout. */
2888
+ actions?: TimelinePanelAction[] | React__default.ReactNode;
2889
+ /** Items for the overflow (⋮) dropdown menu */
2890
+ overflowActions?: TimelinePanelOverflowItem[];
2891
+ /**
2892
+ * Optional depth (0-based) for subtle left-indentation of content inside
2893
+ * each row. The dot and icon always stay on the left rail.
2894
+ */
2895
+ depth?: number;
2896
+ }
2897
+ interface TimelinePanelHeaderAction {
2898
+ label: React__default.ReactNode;
2899
+ onClick?: () => void;
2900
+ variant?: ButtonVariant;
2901
+ color?: TrueColor;
2902
+ size?: ButtonSize;
2903
+ disabled?: boolean;
2904
+ loading?: boolean;
2905
+ leadingIcon?: string | React__default.ReactElement;
2906
+ }
2907
+ interface TimelinePanelProps {
2908
+ /** Panel title rendered in the header */
2909
+ title?: React__default.ReactNode;
2910
+ /** Optional content rendered at the right of the header. Pass a `React.ReactNode` for fully custom content, or a `TimelinePanelHeaderAction` for the built-in button layout. */
2911
+ headerAction?: TimelinePanelHeaderAction | React__default.ReactNode;
2912
+ /** Timeline items */
2913
+ items: TimelinePanelItem[];
2914
+ variant?: PanelVariant;
2915
+ tone?: TrueColor;
2916
+ padding?: PanelPadding;
2917
+ corner?: PanelCorner;
2918
+ /** Color of the connecting vertical line */
2919
+ lineColor?: string;
2920
+ /** Render a small dot on the trunk line at every item's midpoint (solid segment only). @default false */
2921
+ showTrunkDots?: boolean;
2922
+ loading?: boolean;
2923
+ /** Node to show when items is empty */
2924
+ emptyState?: React__default.ReactNode;
2925
+ className?: string;
2926
+ loaderProps?: LoaderProps;
2927
+ }
2928
+
2929
+ declare const TimelinePanel: React__default.FC<TimelinePanelProps>;
2930
+
2931
+ type ConnectionState = "flowing" | "stopped" | "disabled";
2932
+ interface ConnectionFlowConnectorConfig {
2933
+ /** Active flow state for this connector */
2934
+ state?: ConnectionState;
2935
+ /** Optional React element to render in the middle (e.g. an icon) */
2936
+ icon?: React__default.ReactNode;
2937
+ /** Width of the connector band in px (default: 56) */
2938
+ width?: number;
2939
+ /** Whether to animate the flowing dots (default: true) */
2940
+ animated?: boolean;
2941
+ /** target px per dot cycle (default: 60) */
2942
+ dotSpacing?: number;
2943
+ /** Connector ring border width (default: 'xs') */
2944
+ borderSize?: "fit" | "xs" | "sm" | "md" | "lg";
2945
+ /** Whether to draw half-rings (default: true) */
2946
+ halfRing?: boolean;
2947
+ /** Show the horizontal line between rings (default: true) */
2948
+ showLine?: boolean;
2949
+ /** Override — force the source-side ring tone instead of inheriting from source item */
2950
+ sourceTone?: TreeTone;
2951
+ /** Override — force the target-side ring tone instead of inheriting from this item */
2952
+ targetTone?: TreeTone;
2953
+ /** Source ring background fill color (CSS string, e.g. '#22c55e' or 'rgba(...)') */
2954
+ sourceFill?: string;
2955
+ /** Source ring stroke/border color */
2956
+ sourceBorder?: string;
2957
+ /** Source ring center dot color */
2958
+ sourceDot?: string;
2959
+ /** Target ring background fill color */
2960
+ targetFill?: string;
2961
+ /** Target ring stroke/border color */
2962
+ targetBorder?: string;
2963
+ /** Target ring center dot color */
2964
+ targetDot?: string;
2965
+ /** Animated dot color (overrides what is derived from targetTone) */
2966
+ dotColor?: string;
2967
+ /**
2968
+ * When true, flowing dots are shown even when this connector's state is `'stopped'`
2969
+ * (i.e. already-traversed / completed edges also animate).
2970
+ * Default: false
2971
+ */
2972
+ animateCompleted?: boolean;
2973
+ }
2974
+ interface ConnectionFlowItem {
2975
+ id: string;
2976
+ icon?: React__default.ReactNode;
2977
+ iconClassName?: string;
2978
+ title?: React__default.ReactNode;
2979
+ titleClassName?: string;
2980
+ /** When true, the card title wraps on word boundaries up to 10 lines instead of truncating. Default: false */
2981
+ titleWrap?: boolean;
2982
+ /** When true, the card title stays on one line and scrolls horizontally. Default: false */
2983
+ titleScroll?: boolean;
2984
+ subtitle?: React__default.ReactNode;
2985
+ subtitleClassName?: string;
2986
+ description?: React__default.ReactNode;
2987
+ descriptionClassName?: string;
2988
+ /** Optional badge/status slot rendered below description, without tone-derived text styling. */
2989
+ badge?: React__default.ReactNode;
2990
+ tone?: TreeTone;
2991
+ body?: React__default.ReactNode;
2992
+ defaultExpanded?: boolean;
2993
+ actions?: React__default.ReactNode;
2994
+ hoverActions?: React__default.ReactNode;
2995
+ /**
2996
+ * Connector config for the edge leading INTO this item.
2997
+ * If not provided, inherits from the ConnectionFlow's default state.
2998
+ * Ignored for the first item (it has no predecessor).
2999
+ */
3000
+ connector?: ConnectionFlowConnectorConfig;
3001
+ /**
3002
+ * Children render vertically below this item's card using TreeView-style
3003
+ * SVG connectors. The connector between this item and the next sibling
3004
+ * spans the full column height (parent + children).
3005
+ */
3006
+ children?: ConnectionFlowItem[];
3007
+ /**
3008
+ * When true, this item has NO right-side connector to the next sibling
3009
+ * (it terminates the horizontal flow after itself).
3010
+ * Default: false
3011
+ */
3012
+ terminal?: boolean;
3013
+ /**
3014
+ * Active state — drives the vertical sub-tree dot animation color.
3015
+ * Default: false
3016
+ */
3017
+ active?: boolean;
3018
+ /**
3019
+ * When true, this item is part of a parallel group. Consecutive items with
3020
+ * parallel=true are rendered as a single vertical column instead of separate
3021
+ * horizontal nodes. Fan-out (1→N) and fan-in (N→1) connectors are added automatically.
3022
+ * Default: false
3023
+ */
3024
+ parallel?: boolean;
3025
+ /**
3026
+ * When true, the card shows a subtle hover lift effect (shadow + translate-y).
3027
+ * Default: false
3028
+ */
3029
+ hoverable?: boolean;
3030
+ /**
3031
+ * When true, overlays a pulsing background animation on the card (uses the item's tone).
3032
+ * Typically combined with `active: true` to indicate in-progress steps.
3033
+ * Default: false
3034
+ */
3035
+ activePulse?: boolean;
3036
+ /**
3037
+ * When true, this step was skipped — the execution flow bypassed it.
3038
+ * A visual bypass arc is drawn from the last non-skipped predecessor to the
3039
+ * first non-skipped successor, arching over all consecutive skipped items.
3040
+ * Default: false
3041
+ */
3042
+ skipped?: boolean;
3043
+ }
3044
+ interface ConnectionFlowProps {
3045
+ /** The nodes to render horizontally */
3046
+ items: ConnectionFlowItem[];
3047
+ /**
3048
+ * Fallback state applied to any connector that doesn't have its own `state`.
3049
+ * Default: 'flowing'
3050
+ */
3051
+ flowState?: ConnectionState;
3052
+ /**
3053
+ * Fallback icon shown in the middle of connectors (overridden per-item).
3054
+ */
3055
+ flowIcon?: React__default.ReactNode;
3056
+ /**
3057
+ * Fallback connector width in px.
3058
+ * Default: 56
3059
+ */
3060
+ connectorWidth?: number;
3061
+ /**
3062
+ * Whether flowing-dot animation is enabled globally.
3063
+ * Default: true
3064
+ */
3065
+ animated?: boolean;
3066
+ /**
3067
+ * Target px between dots globally.
3068
+ * Default: 60
3069
+ */
3070
+ dotSpacing?: number;
3071
+ /**
3072
+ * Ring border size globally.
3073
+ * Default: 'xs'
3074
+ */
3075
+ connectorBorderSize?: "fit" | "xs" | "sm" | "md" | "lg";
3076
+ /**
3077
+ * Draw half-rings (matching TreeView half-connector style).
3078
+ * Default: true
3079
+ */
3080
+ connectorHalf?: boolean;
3081
+ /**
3082
+ * Show the horizontal line between connectors.
3083
+ * Default: true
3084
+ */
3085
+ showLine?: boolean;
3086
+ /** Indent size for children sub-trees. Default: 'xs' */
3087
+ childIndent?: "xs" | "sm" | "md" | "lg";
3088
+ /** Row gap in px between children. Default: 8 */
3089
+ childRowGap?: number;
3090
+ /**
3091
+ * If true, allows the flow to scroll horizontally/vertically if the container is smaller than the flow.
3092
+ * Default: false
3093
+ */
3094
+ allowScroll?: boolean;
3095
+ /**
3096
+ * Set a fixed width for all items in the flow (e.g. 250, '300px').
3097
+ * Primarily useful when `allowScroll` is enabled.
3098
+ */
3099
+ itemWidth?: number | string;
3100
+ /**
3101
+ * When true, automatically scales the entire flow down to fit the container width.
3102
+ * Once the scale would go below `minScale`, the flow is clamped and allowed to scroll.
3103
+ * Default: false
3104
+ */
3105
+ autoScale?: boolean;
3106
+ /**
3107
+ * Minimum CSS scale factor applied when `autoScale` is true.
3108
+ * Below this value the flow falls back to horizontal scroll instead of shrinking further.
3109
+ * Default: 0.55
3110
+ */
3111
+ minScale?: number;
3112
+ className?: string;
3113
+ /** Extra content to render to the right of the entire flow (e.g. an expand toggle) */
3114
+ rightAction?: React__default.ReactNode;
3115
+ /**
3116
+ * When true, connectors stretch to fill all remaining width instead of using a fixed
3117
+ * pixel size. Card columns collapse to their natural content width. The connector icon
3118
+ * is always positioned at the exact midpoint of the expanded connector.
3119
+ * Default: false
3120
+ */
3121
+ fullWidthConnectors?: boolean;
3122
+ /**
3123
+ * When true, all cards in the flow show a hover lift effect.
3124
+ * Default: false
3125
+ */
3126
+ hoverable?: boolean;
3127
+ /**
3128
+ * When true, flowing dots are rendered on `'stopped'` (completed / already-traversed)
3129
+ * connectors in addition to `'flowing'` ones. Bypass arcs over skipped steps always
3130
+ * animate when `animated` is true, regardless of this flag.
3131
+ * Default: false
3132
+ */
3133
+ animateCompleted?: boolean;
3134
+ /**
3135
+ * When true, the engine automatically manages connector states and skipped detection
3136
+ * based purely on each item's `tone`:
3137
+ *
3138
+ * - **Connector state** (when no explicit `connector.state` is set):
3139
+ * - Non-neutral source tone → `'stopped'` (solid toned line — step was traversed)
3140
+ * - Neutral source tone → `'disabled'` (dashed gray — step not yet reached)
3141
+ *
3142
+ * - **Skipped detection**: a neutral-tone item that has at least one non-neutral
3143
+ * successor is automatically treated as skipped — a bypass arc is drawn over it.
3144
+ *
3145
+ * Explicit per-item `connector.state` or `item.skipped` values always take precedence.
3146
+ * Default: false
3147
+ */
3148
+ autoConnectorState?: boolean;
3149
+ }
3150
+
3151
+ declare const ConnectionFlow: React__default.FC<ConnectionFlowProps>;
3152
+
3153
+ interface ConnectionFlowConnectorProps {
3154
+ state?: ConnectionState;
3155
+ sourceTone?: TreeTone;
3156
+ targetTone?: TreeTone;
3157
+ middleIcon?: React__default.ReactNode;
3158
+ width?: number;
3159
+ halfRing?: boolean;
3160
+ showLine?: boolean;
3161
+ animated?: boolean;
3162
+ dotSpacing?: number;
3163
+ borderSize?: "fit" | "xs" | "sm" | "md" | "lg";
3164
+ sourceFill?: string;
3165
+ sourceBorder?: string;
3166
+ sourceDot?: string;
3167
+ targetFill?: string;
3168
+ targetBorder?: string;
3169
+ targetDot?: string;
3170
+ dotColor?: string;
3171
+ /**
3172
+ * Multi-source mode: Y offsets from the TOP of the connector space for each
3173
+ * source card's centre (parent first, then children).
3174
+ * When provided and length > 1, a vertical trunk is drawn on the left side
3175
+ * connecting all source rings, and each source gets its own dotted line to
3176
+ * the RIGHT entry ring.
3177
+ */
3178
+ leftAnchors?: number[];
3179
+ /**
3180
+ * Total height the connector should occupy.
3181
+ * Defaults to the source column height; pass max(source, target) when heights differ.
3182
+ */
3183
+ connectorHeight?: number;
3184
+ /**
3185
+ * Y offset of the TARGET card's centre from the top of the connector space.
3186
+ * When different from the source anchor, a bezier curve is drawn between the
3187
+ * two ring positions instead of a straight horizontal line.
3188
+ * Defaults to the source anchor (straight line).
3189
+ */
3190
+ rightAnchorY?: number;
3191
+ /**
3192
+ * Tones for extra source rings (index 0 = parent, already set via sourceTone).
3193
+ * Used to colour child source rings independently.
3194
+ */
3195
+ extraSourceTones?: TreeTone[];
3196
+ /**
3197
+ * Fan-out mode: Y offsets from the TOP of the connector space for each TARGET card's centre.
3198
+ * When provided and length > 1, a vertical trunk is drawn on the RIGHT side
3199
+ * connecting all target rings, and each target gets its own dotted line from the LEFT entry ring.
3200
+ */
3201
+ rightAnchors?: number[];
3202
+ /**
3203
+ * Tones for each right-side ring in fan-out mode.
3204
+ * Index i corresponds to rightAnchors[i]. Falls back to targetTone.
3205
+ */
3206
+ rightAnchorTones?: TreeTone[];
3207
+ /**
3208
+ * Per-lane active state for fan-out mode.
3209
+ * Index i corresponds to rightAnchors[i]. When provided, each lane's animation is
3210
+ * controlled independently. Falls back to the overall `state`.
3211
+ */
3212
+ rightAnchorStates?: ConnectionState[];
3213
+ /**
3214
+ * When true, flowing dots are shown even when `state` is `'stopped'`
3215
+ * (already-traversed / completed connectors also animate).
3216
+ * Default: false
3217
+ */
3218
+ animateCompleted?: boolean;
3219
+ /**
3220
+ * When true, the connector stretches to fill available flex space instead of using a
3221
+ * fixed pixel width. The SVG geometry is recalculated from the measured container width
3222
+ * so rings stay at correct positions and the middle icon stays at the exact midpoint.
3223
+ * Default: false
3224
+ */
3225
+ fullWidth?: boolean;
3226
+ }
3227
+ declare const ConnectionFlowConnector: React__default.FC<ConnectionFlowConnectorProps>;
3228
+
3229
+ interface ColumnGeometry {
3230
+ /** Total rendered height of the whole column (parent + gap + all children). */
3231
+ totalHeight: number;
3232
+ /**
3233
+ * Y offsets (from the TOP of the column) to the centre of each source card.
3234
+ * anchors[0] = parent card, anchors[1..] = child cards (or parallel items).
3235
+ */
3236
+ anchors: number[];
3237
+ /** True when this geometry represents a parallel group (not a single-item column). */
3238
+ isParallelGroup?: boolean;
3239
+ }
3240
+ interface ConnectionFlowColumnProps {
3241
+ item: ConnectionFlowItem;
3242
+ globalTone?: TreeTone;
3243
+ childIndent?: "xs" | "sm" | "md" | "lg";
3244
+ childRowGap?: number;
3245
+ animated?: boolean;
3246
+ showLine?: boolean;
3247
+ connectorHalf?: boolean;
3248
+ connectorBorderSize?: "fit" | "xs" | "sm" | "md" | "lg";
3249
+ dotSpacing?: number;
3250
+ itemWidth?: number | string;
3251
+ /** Reports geometry so ConnectionFlow can build a multi-source connector. */
3252
+ onGeometryChange?: (geo: ColumnGeometry) => void;
3253
+ /** When true, forces all child branches to animate (mirrors parent connection state). */
3254
+ flowActive?: boolean;
3255
+ /** When true, cards show a hover lift effect. */
3256
+ hoverable?: boolean;
3257
+ }
3258
+ declare const ConnectionFlowColumn: React__default.FC<ConnectionFlowColumnProps>;
3259
+
3260
+ interface ConnectionFlowParallelGroupProps {
3261
+ items: ConnectionFlowItem[];
3262
+ globalTone?: TreeTone;
3263
+ itemWidth?: number | string;
3264
+ hoverable?: boolean;
3265
+ onGeometryChange?: (geo: ColumnGeometry) => void;
3266
+ }
3267
+ declare const ConnectionFlowParallelGroup: React__default.FC<ConnectionFlowParallelGroupProps>;
3268
+
3269
+ declare const TreeView: React__default.FC<TreeViewProps>;
3270
+
3271
+ declare const TreeItemCard: React__default.FC<TreeItemCardProps>;
3272
+
3273
+ declare const INDENT_PX: Record<"xs" | "sm" | "md" | "lg", number>;
3274
+ declare const TreeFlowSvg: React__default.FC<TreeFlowSvgProps>;
3275
+
3276
+ interface TreeColorTokens {
3277
+ bg: string;
3278
+ pulseBg: string;
3279
+ border: string;
3280
+ headerText: string;
3281
+ labelText: string;
3282
+ trunk: readonly [string, string];
3283
+ connFill: readonly [string, string];
3284
+ connBorder: readonly [string, string];
3285
+ connDot: readonly [string, string];
3286
+ }
3287
+ declare const NEUTRAL_TOKENS: TreeColorTokens;
3288
+ declare function getTreeColorTokens(tone: TrueColor | undefined): TreeColorTokens;
3289
+
3290
+ interface IconContextValue {
3291
+ renderIcon: IconRenderer$1;
3292
+ }
3293
+ declare const IconContext: React__default.Context<IconContextValue>;
3294
+ interface IconProviderProps {
3295
+ renderIcon: IconRenderer$1;
3296
+ children: ReactNode;
3297
+ }
3298
+ /**
3299
+ * Provider for customizing icon rendering in ui-kit components.
3300
+ * Wrap your app with this provider to supply a custom icon renderer.
3301
+ */
3302
+ declare const IconProvider: React__default.FC<IconProviderProps>;
3303
+ /**
3304
+ * Hook to access the icon renderer from context
3305
+ */
3306
+ declare const useIconRenderer: () => IconRenderer$1;
3307
+
3308
+ interface SideMenuActionsContextValue {
3309
+ /** Per-item / list actions (e.g. "Add" button in the list panel header). */
3310
+ sideItemActions?: React__default.ReactNode;
3311
+ /** Detail panel actions (e.g. PageHeader action buttons). */
3312
+ sidePanelActions?: React__default.ReactNode;
3313
+ /** Push new list/item actions into the header. Pass `undefined` to clear. */
3314
+ setSideItemActions: (actions: React__default.ReactNode | undefined) => void;
3315
+ /** Push new panel actions into the header. Pass `undefined` to clear. */
3316
+ setSidePanelActions: (actions: React__default.ReactNode | undefined) => void;
3317
+ }
3318
+ interface SideMenuActionsProviderProps {
3319
+ initialSideItemActions?: React__default.ReactNode;
3320
+ initialSidePanelActions?: React__default.ReactNode;
3321
+ children: React__default.ReactNode;
3322
+ }
3323
+ declare const SideMenuActionsProvider: React__default.FC<SideMenuActionsProviderProps>;
3324
+ declare const useSideMenuActions: () => SideMenuActionsContextValue;
3325
+
3326
+ interface BottomSheetControls {
3327
+ dismiss: () => void;
3328
+ }
3329
+ type BottomSheetRenderable = ReactNode | ((controls: BottomSheetControls) => ReactNode);
3330
+ interface BottomSheetOptions {
3331
+ id?: string;
3332
+ title?: ReactNode;
3333
+ description?: ReactNode;
3334
+ content?: BottomSheetRenderable;
3335
+ actions?: BottomSheetRenderable;
3336
+ showCloseButton?: boolean;
3337
+ backdropDismiss?: boolean;
3338
+ className?: string;
3339
+ onClose?: () => void;
3340
+ }
3341
+ interface BottomSheetContextValue {
3342
+ presentSheet: (options: BottomSheetOptions) => void;
3343
+ dismissSheet: () => void;
3344
+ isOpen: boolean;
3345
+ currentSheet: BottomSheetOptions | null;
3346
+ }
3347
+
3348
+ declare const BottomSheetProvider: React__default.FC<{
3349
+ children: React__default.ReactNode;
3350
+ }>;
3351
+ declare const useBottomSheet: () => BottomSheetContextValue;
3352
+
3353
+ interface UseResizableOptions {
3354
+ /** Initial width in pixels */
3355
+ initialWidth: number;
3356
+ /** Minimum width in pixels */
3357
+ minWidth?: number;
3358
+ /** Maximum width in pixels (or function returning max) */
3359
+ maxWidth?: number | (() => number);
3360
+ /** Called on every resize frame */
3361
+ onResize?: (width: number) => void;
3362
+ /** Called when drag ends */
3363
+ onResizeEnd?: (width: number) => void;
3364
+ /** Whether resizing is enabled */
3365
+ enabled?: boolean;
3366
+ }
3367
+ interface UseResizableReturn {
3368
+ /** Current width in pixels */
3369
+ width: number;
3370
+ /** Whether the user is currently dragging */
3371
+ isDragging: boolean;
3372
+ /** Props to spread onto the resize handle element */
3373
+ handleProps: {
3374
+ onPointerDown: (e: React.PointerEvent) => void;
3375
+ onKeyDown: (e: React.KeyboardEvent) => void;
3376
+ role: "separator";
3377
+ "aria-orientation": "vertical";
3378
+ "aria-valuenow": number;
3379
+ "aria-valuemin": number;
3380
+ "aria-valuemax": number;
3381
+ tabIndex: number;
3382
+ };
3383
+ }
3384
+ declare function useResizable({ initialWidth, minWidth, maxWidth: maxWidthOpt, onResize, onResizeEnd, enabled, }: UseResizableOptions): UseResizableReturn;
3385
+
3386
+ interface StepperState<TStep extends {
3387
+ id?: string;
3388
+ }> {
3389
+ steps: TStep[];
3390
+ currentIndex: number;
3391
+ currentStepId?: string;
3392
+ progressPercent: number;
3393
+ goToIndex: (index: number) => void;
3394
+ goToStep: (id: string) => void;
3395
+ goToNext: () => void;
3396
+ goToPrev: () => void;
3397
+ isActive: (id: string, index: number) => boolean;
3398
+ isCompleted: (id: string, index: number) => boolean;
3399
+ }
3400
+ interface UseStepperOptions {
3401
+ defaultCurrentIndex?: number;
3402
+ defaultCurrentStepId?: string;
3403
+ currentIndex?: number;
3404
+ currentStepId?: string;
3405
+ onChange?: (index: number, stepId?: string) => void;
3406
+ completedStepIds?: string[];
3407
+ }
3408
+ declare function useStepper<TStep extends {
3409
+ id?: string;
3410
+ }>(steps: TStep[], { defaultCurrentIndex, defaultCurrentStepId, currentIndex, currentStepId, onChange, completedStepIds, }?: UseStepperOptions): StepperState<TStep>;
3411
+
3412
+ type ThemeMode = "light" | "dark" | "system";
3413
+ /**
3414
+ * Hook for managing the demo app's color theme.
3415
+ *
3416
+ * Modes:
3417
+ * - `"system"` — follow OS `prefers-color-scheme` (reactive).
3418
+ * - `"light"` — force light.
3419
+ * - `"dark"` — force dark.
3420
+ *
3421
+ * The hook applies `class="dark"` to `<html>` which, combined with the
3422
+ * `@custom-variant dark (&:where(.dark, .dark *))` directive in
3423
+ * `demo/src/index.css`, cascades dark-mode styles to all `.dark:` descendants.
3424
+ * Persists the choice in `localStorage` and re-applies on OS preference
3425
+ * changes when in `system` mode.
3426
+ *
3427
+ * First visit defaults to `"light"`.
3428
+ */
3429
+ declare function useTheme(): {
3430
+ theme: ThemeMode;
3431
+ effectiveTheme: "dark" | "light";
3432
+ setTheme: React$1.Dispatch<React$1.SetStateAction<ThemeMode>>;
3433
+ };
3434
+
3435
+ declare const widthTokenRegex: RegExp;
3436
+ declare const heightTokenRegex: RegExp;
3437
+ declare const mergeClassTokens: (...groups: Array<string | undefined>) => string;
3438
+ declare const hasExplicitSize: (value?: string) => boolean;
3439
+
3440
+ /**
3441
+ * Utility functions for handling focus events with intelligent reconnection logic
3442
+ */
3443
+ interface FocusHandlerOptions {
3444
+ debounceMs?: number;
3445
+ checkConnection?: () => boolean;
3446
+ onReconnect?: () => void;
3447
+ onSkip?: () => void;
3448
+ }
3449
+ /**
3450
+ * Creates a debounced focus handler that only triggers reconnection when necessary
3451
+ * @param options Configuration options for the focus handler
3452
+ * @returns A function that can be used as an event listener
3453
+ */
3454
+ declare function createIntelligentFocusHandler(options?: FocusHandlerOptions): () => void;
3455
+ /**
3456
+ * Cleanup function for focus handlers
3457
+ * @param handler The focus handler function
3458
+ * @param timeoutRef Reference to the timeout
3459
+ */
3460
+ declare function cleanupFocusHandler(handler: () => void, timeoutRef: ReturnType<typeof setTimeout> | null): void;
3461
+ /**
3462
+ * Hook for managing focus events with intelligent reconnection
3463
+ * @param options Configuration options
3464
+ * @returns Cleanup function
3465
+ */
3466
+ declare function useIntelligentFocusHandler(options?: FocusHandlerOptions): () => void;
3467
+
3468
+ declare function toBoolean(value: string | undefined): boolean;
3469
+ declare function normalizeString(subject: string): string;
3470
+ declare function normalizeStringToUpper(name: string): string;
3471
+ declare function isDevelopment(environment: string): boolean;
3472
+ declare function formatDate(iso?: string | null): string;
3473
+ declare function formatLogTime(iso: string): string;
3474
+ declare function formatMB(mb?: number): string;
3475
+
3476
+ /**
3477
+ * Duration formatting utilities.
3478
+ * All functions operate on whole minutes as the base unit.
3479
+ */
3480
+ interface FormatDurationOptions {
3481
+ /**
3482
+ * Maximum number of unit parts to include in the output.
3483
+ * e.g. maxParts=2 → "1 day and 5 hours" (minutes dropped)
3484
+ * Defaults to 3.
3485
+ */
3486
+ maxParts?: number;
3487
+ /**
3488
+ * String to return when the input is zero or negative.
3489
+ * Defaults to "0 minutes".
3490
+ */
3491
+ zeroLabel?: string;
3492
+ }
3493
+ /**
3494
+ * Converts a number of minutes into a human-readable duration string.
3495
+ *
3496
+ * @example
3497
+ * formatDuration(1) // "1 minute"
3498
+ * formatDuration(45) // "45 minutes"
3499
+ * formatDuration(60) // "1 hour"
3500
+ * formatDuration(85) // "1 hour and 25 minutes"
3501
+ * formatDuration(1440) // "1 day"
3502
+ * formatDuration(1525) // "1 day and 25 minutes"
3503
+ * formatDuration(1860) // "1 day and 7 hours" (maxParts=2 default trims minutes)
3504
+ * formatDuration(7785) // "5 days, 9 hours and 45 minutes"
3505
+ * formatDuration(46080) // "1 month and 2 days"
3506
+ * formatDuration(530985) // "1 year, 1 month and 2 days"
3507
+ * formatDuration(0) // "0 minutes"
3508
+ * formatDuration(-5) // "0 minutes"
3509
+ */
3510
+ declare function formatDuration(totalMinutes: number, options?: FormatDurationOptions): string;
3511
+ /**
3512
+ * Like `formatDuration` but accepts seconds instead of minutes.
3513
+ * Values under 60 seconds are shown as "less than a minute" by default.
3514
+ */
3515
+ declare function formatDurationFromSeconds(totalSeconds: number, options?: FormatDurationOptions & {
3516
+ subMinuteLabel?: string;
3517
+ }): string;
3518
+ /**
3519
+ * Like `formatDuration` but accepts milliseconds instead of minutes.
3520
+ * Values under 60 000 ms are shown as "less than a minute" by default.
3521
+ */
3522
+ declare function formatDurationFromMs(totalMs: number, options?: FormatDurationOptions & {
3523
+ subMinuteLabel?: string;
3524
+ }): string;
3525
+
3526
+ /**
3527
+ * Byte / data-size formatting utilities.
3528
+ *
3529
+ * All functions that accept a unit parameter use `DataSizeUnit` which maps
3530
+ * directly to the `action_value_unit` field returned by the API.
3531
+ */
3532
+ type DataSizeUnit = "B" | "KB" | "MB" | "GB" | "TB";
3533
+ /**
3534
+ * Normalize a raw unit string from the API (e.g. `"bytes"`, `"MB"`, `"Gigabytes"`)
3535
+ * to a canonical `DataSizeUnit`. Falls back to `'B'` for unknown values.
3536
+ */
3537
+ declare function normalizeDataSizeUnit(raw: string | undefined): DataSizeUnit;
3538
+ /**
3539
+ * Pick the largest unit in which `referenceBytes` is >= 1.
3540
+ * Falls back to 'B' when the value is 0 or less.
3541
+ */
3542
+ declare function pickBestUnit(referenceBytes: number): DataSizeUnit;
3543
+ /**
3544
+ * Format a raw byte value using the given display unit, up to `decimals`
3545
+ * significant decimal places (trailing zeros are stripped).
3546
+ */
3547
+ declare function formatBytesAs(bytes: number, unit: DataSizeUnit, decimals?: number): string;
3548
+ /**
3549
+ * Format `value` and `total` — both expressed in `inputUnit` — using the
3550
+ * same human-friendly display unit derived from `total`.
3551
+ *
3552
+ * @example
3553
+ * // total = 1.5 GB → picks GB
3554
+ * formatProgressBytes(0.45, 1.5, 'GB')
3555
+ * // → { valueLabel: '0.45', totalLabel: '1.5', unit: 'GB', line: '0.45 / 1.5 GB' }
3556
+ *
3557
+ * // total = 1_500_000_000 bytes → picks GB
3558
+ * formatProgressBytes(450_000_000, 1_500_000_000, 'B')
3559
+ * // → { valueLabel: '0.42', totalLabel: '1.4', unit: 'GB', line: '0.42 / 1.4 GB' }
3560
+ */
3561
+ declare function formatProgressBytes(value: number, total: number, inputUnit?: DataSizeUnit, decimals?: number): {
3562
+ valueLabel: string;
3563
+ totalLabel: string;
3564
+ unit: DataSizeUnit;
3565
+ line: string;
3566
+ };
3567
+ /**
3568
+ * Format a single byte value to the most appropriate unit, with up to
3569
+ * `decimals` decimal places.
3570
+ *
3571
+ * @example
3572
+ * formatBytes(1_500_000) // "1.43 MB"
3573
+ * formatBytes(2_684_354_560) // "2.5 GB"
3574
+ */
3575
+ declare function formatBytes(bytes: number, decimals?: number): string;
3576
+
3577
+ declare const renderIcon: IconRenderer$1;
3578
+
3579
+ interface DependencyCondition {
3580
+ field_name: string;
3581
+ field_value: string;
3582
+ operator: string;
3583
+ condition?: "and" | "or";
3584
+ }
3585
+ interface FileUploadData {
3586
+ files: File | File[];
3587
+ names: string;
3588
+ count: number;
3589
+ }
3590
+ interface FormData {
3591
+ [key: string]: string | boolean | Array<{
3592
+ key: string;
3593
+ value: string;
3594
+ }> | string[] | FileUploadData;
3595
+ }
3596
+ /**
3597
+ * Evaluates if a field should be visible based on its dependencies
3598
+ * @param fieldName - The name of the field being evaluated
3599
+ * @param dependencies - Array of dependency conditions
3600
+ * @param formData - Current form data
3601
+ * @returns boolean indicating if the field should be visible
3602
+ */
3603
+ declare function evaluateFieldVisibility(_fieldName: string, dependencies: DependencyCondition[], formData: FormData): boolean;
3604
+ /**
3605
+ * Evaluates visibility for all fields in a form
3606
+ * @param parameters - Array of parameters with dependencies
3607
+ * @param formData - Current form data
3608
+ * @returns Object mapping field names to visibility states
3609
+ */
3610
+ declare function evaluateAllFieldVisibility(parameters: Array<{
3611
+ key: string;
3612
+ dependencies?: DependencyCondition[];
3613
+ }>, formData: FormData): Record<string, boolean>;
3614
+
3615
+ /**
3616
+ * Returns a Gravatar URL for the given email.
3617
+ *
3618
+ * @param email - The user's email address.
3619
+ * @param size - Image size in pixels (default 200).
3620
+ * @param defaultImage - Gravatar fallback when no image exists.
3621
+ * Common values: `'404'` (return HTTP 404), `'mp'` (mystery-person silhouette),
3622
+ * `'identicon'` (geometric pattern), `'retro'` (8-bit style).
3623
+ * Defaults to `'mp'` so a valid image is always returned.
3624
+ */
3625
+ declare const getGravatarUrl: (email: string, size?: number, defaultImage?: string) => string;
3626
+
3627
+ declare function getToastTimestamp(toast: Toast): number;
3628
+
3629
+ declare const SMART_VAR_REGEX: RegExp;
3630
+ declare const parseSmartVariable: (token: string) => SmartVariable | null;
3631
+ declare const createSmartToken: (type: SmartVariableType, source: SmartVariableSource, name: string) => string;
3632
+ /**
3633
+ * Extracts all unique variables from a given text string.
3634
+ */
3635
+ declare const extractVariables: (text: string) => SmartVariable[];
3636
+
3637
+ interface VariableContext {
3638
+ globalParameters?: CapsuleBlueprintParameter[];
3639
+ serviceNames?: string[];
3640
+ context?: {
3641
+ slug?: string;
3642
+ enable_https?: boolean;
3643
+ };
3644
+ }
3645
+ declare const resolveVariable: (value: string, ctx: VariableContext) => {
3646
+ value: string;
3647
+ isResolved: boolean;
3648
+ isRuntime: boolean;
3649
+ };
3650
+
3651
+ interface MetricBarProps extends React__default.HTMLAttributes<HTMLDivElement> {
3652
+ label: string;
3653
+ value: string;
3654
+ percentage: number;
3655
+ color?: SpinnerColor;
3656
+ showShimmer?: boolean;
3657
+ }
3658
+ declare const MetricBar: React__default.FC<MetricBarProps>;
3659
+
3660
+ declare const Sun: React$1.ForwardRefExoticComponent<Omit<SVGProps<SVGSVGElement>, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
3661
+
3662
+ declare const Moon: React$1.ForwardRefExoticComponent<Omit<SVGProps<SVGSVGElement>, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
3663
+
3664
+ declare const ThemeAuto: React$1.ForwardRefExoticComponent<Omit<SVGProps<SVGSVGElement>, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
3665
+
3666
+ export { AccessMatrix, type AccessMatrixPermission, type AccessMatrixProps, Accordion, type AccordionItem, type AccordionProps, Alert, type AlertProps, type AlertVariant, ApiErrorState, type ApiErrorStateProps, AppDivider, type AppDividerProps, ApplyConfirmModal, type ApplyConfirmModalProps, Badge, BadgeIcon, type BadgeIconProps, type BadgeProps, type BaseIconName, BottomSheetProvider, Button, type ButtonColor, type ButtonProps, ButtonSelector, type ButtonSelectorMode, type ButtonSelectorOption, type ButtonSelectorProps, type ButtonSize, ButtonVariant, CapsuleBlueprintParameter, Checkbox, type CheckboxProps, CollapsibleHelpText, type CollapsibleHelpTextProps, CollapsiblePanel, type CollapsiblePanelProps, type Column, Combobox, type ComboboxProps, ConfirmInlinePanel, type ConfirmInlinePanelProps, ConfirmModal, ConnectionFlow, ConnectionFlowColumn, ConnectionFlowConnector, type ConnectionFlowConnectorConfig, type ConnectionFlowItem, ConnectionFlowParallelGroup, type ConnectionFlowProps, type ConnectionState, CustomIcon, type CustomIconProps, type DataSizeUnit, DeleteConfirmInlinePanel, type DeleteConfirmInlinePanelProps, DeleteConfirmModal, type DeleteConfirmModalProps, type DependencyCondition, DetailItemCard, type DetailItemCardProps, DropdownButton, type DropdownButtonOption, type DropdownButtonProps, DropdownMenu, type DropdownMenuOption, type DropdownMenuProps, DynamicFormField, type DynamicFormFieldProps, DynamicImg, type DynamicImgProps, EmptyState, type EmptyStateProps, type EmptyStateTone, type FileUploadData, type FocusHandlerOptions, type FormData, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, type FormatDurationOptions, GlassBackground, type GlassBackgroundPosition, type GlassBackgroundProps, type GlassOpacity, type GlassVibrancy, type GradientDirection, HeaderGroup, type HeaderGroupProps, Hero, type HeroPadding, type HeroProps, type HeroSubtitleSize, type HeroTitleSize, IconButton, type IconButtonProps, IconContext, IconName, IconProvider, type IconProviderProps, type IconRenderer$1 as IconRenderer, type IconSize, InfiniteScrollPanel, type InfiniteScrollPanelProps, InfoRow, type InfoRowPadding, type InfoRowProps, type InfoRowSize, InlinePanel, type InlinePanelAnchor, type InlinePanelProps, Input, InputGroup, type InputGroupProps, type InputProps, type InputVariant, KeyValueArrayField, type KeyValueArrayFieldProps, type KeyValuePair, Loader, type LoaderProps, MetricBar, type MetricBarProps, _default as Modal, ModalActions, type ModalProps, Moon, MultiProgressBar, type MultiProgressBarProps, type MultiProgressBarSeries, MultiSelectPills, type MultiSelectPillsProps, MultiToggle, type MultiToggleOption, type MultiToggleProps, type MultiToggleVariant, NotificationModal, type NotificationModalProps, type NotificationType, PagedPanel, type PagedPanelProps, Panel, type PanelDecoration, type PanelProps, type PanelSpecularMode, type PanelTone, PasswordInput, type PasswordInputProps, Picker, type PickerFilter, type PickerItem, type PickerProps, type PickerTag, Pill, type PillProps, Progress, type ProgressMotion, type ProgressMotionDirection, type ProgressMotionSpeed, type ProgressProps, type RandomThemeColorValue, SMART_VAR_REGEX, SYSTEM_VARIABLES, SearchBar, type SearchBarProps, Section, SectionCard, type SectionCardProps, type SectionCardSize, type SectionCardVariant, type SectionProps, type SectionSize, type SectionVariant, Select, type SelectProps, SideMenu, type SideMenuActionsContextValue, SideMenuActionsProvider, type SideMenuActionsProviderProps, type SideMenuGuardAllClaims, type SideMenuGuardAnyClaim, type SideMenuGuardAnyModule, type SideMenuGuardAnyRole, type SideMenuGuardClaim, type SideMenuGuardCustom, type SideMenuGuardModule, type SideMenuGuardRole, type SideMenuItem, type SideMenuItemGuard, SideMenuLayout, type SideMenuLayoutProps, type SideMenuProps, type SideMenuSettings, SidePanel, type SidePanelProps, Size, SmartInput, type SmartInputProps, SmartValue, type SmartValueProps, type SmartVariable, type SmartVariableSource, type SmartVariableType, type SpecularMode, Spinner, type SpinnerColor, type SpinnerProps, type SpinnerSize, type SpinnerVariant, SplitView, type SplitViewHeaderDetails, type SplitViewHeaderSlot, type SplitViewItem, type SplitViewItemBadge, type SplitViewPanelHeaderProps, type SplitViewProps, type SplitViewSize, type StartupStage, type StartupStageStatus, StartupStageStepper, type StartupStageStepperProps, type StatChartDataset, type StatChartItem, StatChartTile, type StatChartTileProps, StatCountTile, type StatCountTileBreakdown, type StatCountTileProps, type StatGoalItem, StatGoalTile, type StatGoalTileProps, type StatGraphSeries, StatGraphTile, type StatGraphTileProps, StatTile, type StatTileProps, StatusSpinner, type StatusSpinnerIntent, type StatusSpinnerProps, type Step, type StepStatus, Stepper, type StepperConnector, type StepperConnectorAlign, type StepperOrientation, type StepperProgressBarPosition, type StepperProps, type StepperSize, type StepperState, type StepperVariant, Sun, INDENT_PX as TREE_INDENT_PX, NEUTRAL_TOKENS as TREE_NEUTRAL_TOKENS, type TabItem, type TabItemAction, Table, type TableColumn, type TablePaginationState, type TableProps, type TableSettings, type TableSortState, type TableVariant, Tabs, type TabsProps, TagPanel, type TagPanelProps, type TagPanelTag, TagPicker, type TagPickerItem, type TagPickerProps, Textarea, type TextareaProps, ThemeAuto, type ThemeMode, TimelinePanel, type TimelinePanelAction, type PanelCorner as TimelinePanelCorner, type TimelinePanelHeaderAction, type TimelinePanelItem, type TimelinePanelOverflowItem, type PanelPadding as TimelinePanelPadding, type TimelinePanelProps, type PanelVariant as TimelinePanelVariant, type Toast, type ToastAction, type ToastProgress, type ToastType, Toggle, type ToggleAlign, type ToggleDescriptionPlacement, type TogglePadding, type ToggleProps, type ToggleSize, Tooltip, type TooltipPosition, type TooltipProps, TooltipWrapper, type TooltipWrapperProps, TreeFlowSvg, type TreeFlowSvgProps, TreeItemCard, type TreeItemCardProps, type TreeItemData, type TreeReorderEvent, type TreeTone, TreeView, type TreeViewProps, TrueColor, TruncatedText, type TruncatedTextProps, type UseAccordionOptions, type UseAccordionResult, type UseResizableOptions, type UseResizableReturn, type UseStepperOptions, UserAvatar, type UserAvatarProps, type UserAvatarUser, VariablePicker, cleanupFocusHandler, createIntelligentFocusHandler, createSmartToken, defaultIconRenderer, evaluateAllFieldVisibility, evaluateFieldVisibility, extractVariables, formatBytes, formatBytesAs, formatDate, formatDuration, formatDurationFromMs, formatDurationFromSeconds, formatLogTime, formatMB, formatProgressBytes, getColorPalette, getColorPaletteNames, getGravatarUrl, getRandomThemeColorClass, getRandomThemeColorValue, getToastTimestamp, getTreeColorTokens, hasExplicitSize, heightTokenRegex, iconAccentActive, iconAccentHover, iconAccentRing, isDevelopment, mergeClassTokens, normalizeDataSizeUnit, normalizeString, normalizeStringToUpper, parseSmartVariable, pickBestUnit, renderIcon, resolveVariable, toBoolean, useAccordion, useBottomSheet, useIconRenderer, useIntelligentFocusHandler, useResizable, useSideMenuActions, useStepper, useTheme, widthTokenRegex };