@sckyzo/cosmos-react 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3292 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { HTMLAttributes, ReactNode, ElementType, ComponentType, ReactElement, LiHTMLAttributes, AnchorHTMLAttributes, ButtonHTMLAttributes, ImgHTMLAttributes, ComponentPropsWithoutRef, InputHTMLAttributes, SelectHTMLAttributes, TextareaHTMLAttributes, ChangeEvent } from 'react';
4
+ import { LucideIcon } from 'lucide-react';
5
+ import useEmblaCarousel from 'embla-carousel-react';
6
+ import * as RadixAccordion from '@radix-ui/react-accordion';
7
+ import { ToasterProps } from 'sonner';
8
+ export { toast } from 'sonner';
9
+ import { Command } from 'cmdk';
10
+ import { DayPickerProps } from 'react-day-picker';
11
+
12
+ /**
13
+ * Deterministic placeholder avatar for stories and docs.
14
+ *
15
+ * Returns a `data:image/svg+xml;…` URL — fully local, no network fetch — that
16
+ * renders the seed's initials over a Cosmos-accent background colour picked
17
+ * deterministically from a stable hash of the seed.
18
+ *
19
+ * Use inside `*.stories.tsx` whenever a face is needed but a real user photo
20
+ * is not desirable: avoids reliance on `i.pravatar.cc` / `images.unsplash.com`,
21
+ * works offline, and produces no licensing concerns. Real apps should plug
22
+ * their own avatar service for production data.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * import { placeholderAvatar } from '@sckyzo/cosmos-react';
27
+ *
28
+ * <img src={placeholderAvatar('Aiden Park', 64)} alt="" className="size-8 rounded-full" />
29
+ * ```
30
+ */
31
+ type PlaceholderAvatarOptions = {
32
+ /** Override the auto-picked accent background (any CSS colour). */
33
+ bg?: string;
34
+ /** Override the foreground (initials) colour. */
35
+ fg?: string;
36
+ };
37
+ /**
38
+ * Build a deterministic placeholder avatar data URL.
39
+ *
40
+ * @param seed The string used both to derive the initials and to pick the
41
+ * accent background. Same seed → same avatar.
42
+ * @param size Square pixel size (default `64`).
43
+ * @param opts Optional colour overrides.
44
+ */
45
+ declare const placeholderAvatar: (seed: string, size?: number, opts?: PlaceholderAvatarOptions) => string;
46
+ type PlaceholderCoverOptions = {
47
+ /** Override the two gradient stops. */
48
+ from?: string;
49
+ to?: string;
50
+ };
51
+ /**
52
+ * Build a deterministic placeholder landscape cover data URL.
53
+ *
54
+ * Renders a brand-coherent SVG with a seed-derived gradient and two soft
55
+ * decorative circles. Suitable for blog hero images, article tiles, and any
56
+ * other "cover" slot where a real photo is not available.
57
+ *
58
+ * @example
59
+ * ```tsx
60
+ * <img src={placeholderCover('Cosmos release notes', 1600, 700)} alt="" />
61
+ * ```
62
+ */
63
+ declare const placeholderCover: (seed: string, width?: number, height?: number, opts?: PlaceholderCoverOptions) => string;
64
+
65
+ /**
66
+ * Storybook docs parameters preset for components that render via portals
67
+ * (Modal, Drawer, Popover, NotificationsPanel, UserMenu, DatePicker,
68
+ * CommandPalette, …).
69
+ *
70
+ * Background: Storybook's autodocs renders stories *inline* by default. This
71
+ * means a story whose visible content lives in `document.body` (via React
72
+ * portal) or floats with `position: fixed/absolute` doesn't push the autodocs
73
+ * preview block to the right size — the panel either clips or vanishes.
74
+ *
75
+ * The official Storybook v10 fix is to render the story inside an iframe and
76
+ * reserve a fixed iframe height. This helper bundles that pattern so consumers
77
+ * don't repeat the boilerplate at every meta:
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * const meta = {
82
+ * title: 'Overlays/Command Palette',
83
+ * component: CommandPalette,
84
+ * parameters: portalDocsParams.lg(),
85
+ * tags: ['autodocs'],
86
+ * } satisfies Meta<typeof CommandPalette>;
87
+ * ```
88
+ *
89
+ * Variants are sized to common portal footprints. Pass a custom number when
90
+ * the preset doesn't fit:
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * parameters: portalDocsParams(720)
95
+ * ```
96
+ */
97
+ declare const buildParams: (height: number) => {
98
+ layout: "fullscreen";
99
+ docs: {
100
+ story: {
101
+ inline: boolean;
102
+ iframeHeight: string;
103
+ };
104
+ };
105
+ };
106
+ type PortalDocsParams = ((height?: number) => ReturnType<typeof buildParams>) & {
107
+ /** ~320 px — Tooltip, compact Popover. */
108
+ sm: () => ReturnType<typeof buildParams>;
109
+ /** ~480 px — Dropdown, small Modal, Date picker. */
110
+ md: () => ReturnType<typeof buildParams>;
111
+ /** ~640 px — Drawer, CommandPalette, large Modal. */
112
+ lg: () => ReturnType<typeof buildParams>;
113
+ /** ~800 px — Full-screen Modal, page templates. */
114
+ full: () => ReturnType<typeof buildParams>;
115
+ };
116
+ declare const portalDocsParams: PortalDocsParams;
117
+
118
+ type DividerAlign = 'left' | 'center' | 'right';
119
+ type DividerProps = HTMLAttributes<HTMLDivElement> & {
120
+ /**
121
+ * Render an inset label/icon centered (or aligned) on top of the line.
122
+ * Mutually exclusive with `bordered` row helpers (use `Divider.Row` for those).
123
+ */
124
+ inset?: ReactNode;
125
+ /** Position of the inset element along the line. Default `center`. */
126
+ align?: DividerAlign;
127
+ /**
128
+ * When `true`, the inset slot uses larger text (`text-base font-semibold
129
+ * text-gray-900`) instead of the default `text-sm text-gray-500`.
130
+ * Maps to TUI "With title" / "With title on left".
131
+ */
132
+ emphasis?: boolean;
133
+ /**
134
+ * Background color of the inset slot — must match the surrounding surface
135
+ * so the line appears to pass behind. Default `bg-white dark:bg-gray-900`.
136
+ */
137
+ insetBg?: string;
138
+ };
139
+ type DividerIconProps = Omit<DividerProps, 'inset' | 'emphasis'> & {
140
+ icon: ElementType;
141
+ /** Icon CSS class for sizing/color. Default `size-5 text-gray-400`. */
142
+ iconClassName?: string;
143
+ };
144
+ type DividerRowProps = HTMLAttributes<HTMLDivElement> & {
145
+ /** Left-aligned title. Use `null` to render only actions. */
146
+ title?: ReactNode;
147
+ /** Right-aligned trailing content — button, button group, toolbar, etc. */
148
+ actions?: ReactNode;
149
+ /**
150
+ * Use a larger font size for the title (TUI "With title and button").
151
+ * Default `true`. Set `false` to use plain text.
152
+ */
153
+ emphasis?: boolean;
154
+ };
155
+ declare const Divider: (({ inset, align, emphasis, insetBg, className, ...rest }: DividerProps) => react_jsx_runtime.JSX.Element) & {
156
+ Icon: ({ icon: IconCmp, iconClassName, align, insetBg, className, ...rest }: DividerIconProps) => react_jsx_runtime.JSX.Element;
157
+ Row: ({ title, actions, emphasis, className, ...rest }: DividerRowProps) => react_jsx_runtime.JSX.Element;
158
+ };
159
+
160
+ type MediaObjectAlign = 'start' | 'center' | 'bottom' | 'stretch';
161
+ type MediaObjectPosition = 'left' | 'right';
162
+ type MediaObjectProps = HTMLAttributes<HTMLDivElement> & {
163
+ align?: MediaObjectAlign;
164
+ mediaPosition?: MediaObjectPosition;
165
+ /** Gap between the media and the body. Default `gap-x-4` (16px). */
166
+ gapClassName?: string;
167
+ };
168
+ type MediaObjectImageProps = HTMLAttributes<HTMLDivElement>;
169
+ type MediaObjectBodyProps = HTMLAttributes<HTMLDivElement>;
170
+ declare const MediaObject: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
171
+ align?: MediaObjectAlign;
172
+ mediaPosition?: MediaObjectPosition;
173
+ /** Gap between the media and the body. Default `gap-x-4` (16px). */
174
+ gapClassName?: string;
175
+ } & react.RefAttributes<HTMLDivElement>> & {
176
+ Image: react.ForwardRefExoticComponent<MediaObjectImageProps & react.RefAttributes<HTMLDivElement>>;
177
+ Body: react.ForwardRefExoticComponent<MediaObjectBodyProps & react.RefAttributes<HTMLDivElement>>;
178
+ Title: ({ className, children, ...rest }: HTMLAttributes<HTMLHeadingElement> & {
179
+ children?: ReactNode;
180
+ }) => react_jsx_runtime.JSX.Element;
181
+ Description: ({ className, children, ...rest }: HTMLAttributes<HTMLParagraphElement> & {
182
+ children?: ReactNode;
183
+ }) => react_jsx_runtime.JSX.Element;
184
+ };
185
+
186
+ type TopbarProps = {
187
+ /** Current page title (≠ site name — that lives in `Sidebar.Brand`). */
188
+ pageTitle?: ReactNode;
189
+ /**
190
+ * Whether the sidebar is currently collapsed. Pass alongside `onToggleSidebar`
191
+ * to render a built-in hamburger button. Pass `null` to hide the button
192
+ * entirely (e.g. for pages without a sidebar).
193
+ */
194
+ sidebarCollapsed?: boolean | null;
195
+ /** Callback fired when the built-in hamburger is clicked. */
196
+ onToggleSidebar?: () => void;
197
+ /** Extra slot rendered between the hamburger and the page title. */
198
+ leftActions?: ReactNode;
199
+ /** Center area — typically search, breadcrumb, or empty. */
200
+ center?: ReactNode;
201
+ /** Right-aligned actions — theme switcher, notifications, avatar… */
202
+ rightActions?: ReactNode;
203
+ /** Optional className override. */
204
+ className?: string;
205
+ };
206
+ /**
207
+ * Topbar — application header bar.
208
+ *
209
+ * Layout: [hamburger] [leftActions] [pageTitle] [center] [rightActions]
210
+ *
211
+ * The site brand belongs in `<Sidebar.Brand />` — the topbar carries only
212
+ * the sidebar collapse button, the current page title, and contextual
213
+ * actions. Matches the rackscope/TailAdmin pattern.
214
+ *
215
+ * Height: 72px. Background: `var(--color-bg-panel)` with a 500ms
216
+ * background-color transition (eases the dark/light toggle).
217
+ */
218
+ declare const Topbar: ({ pageTitle, sidebarCollapsed, onToggleSidebar, leftActions, center, rightActions, className, }: TopbarProps) => react_jsx_runtime.JSX.Element;
219
+
220
+ type SidebarProps = {
221
+ /** Whether the sidebar is in collapsed (icons-only) state. */
222
+ collapsed?: boolean;
223
+ /** Width when expanded (px). Default: 264 */
224
+ width?: number;
225
+ /** Width when collapsed (px). Default: 72 */
226
+ collapsedWidth?: number;
227
+ /** Sidebar content — typically Sidebar.Brand / .Item / .SubMenu / .Group / .Section. */
228
+ children: ReactNode;
229
+ /** Footer content (sticks to bottom — e.g. user profile + collapse btn). */
230
+ footer?: ReactNode;
231
+ /** Optional className override. */
232
+ className?: string;
233
+ };
234
+ /**
235
+ * Sidebar — left-side navigation panel.
236
+ *
237
+ * Compound component: brand + items + groups + sub-menus + footer slot.
238
+ * Smooth width transition when `collapsed` toggles. The `collapsed` state
239
+ * is automatically threaded to every subcomponent via React context, so
240
+ * children don't need to receive it as a prop.
241
+ */
242
+ declare const SidebarRoot: ({ collapsed, width, collapsedWidth, children, footer, className, }: SidebarProps) => react_jsx_runtime.JSX.Element;
243
+ type SidebarBrandProps = {
244
+ /** Logo node — typically a small icon, lucide component, or img. */
245
+ logo?: ReactNode;
246
+ /** Product / app name. */
247
+ title: string;
248
+ /** Optional smaller subtitle below the title. */
249
+ subtitle?: string;
250
+ /** href to navigate when the brand is clicked. */
251
+ href?: string;
252
+ /** click handler (alternative to href). */
253
+ onClick?: () => void;
254
+ /** Override the inherited collapsed state (defaults to `useContext`). */
255
+ collapsed?: boolean;
256
+ };
257
+ declare const SidebarBrand: ({ logo, title, subtitle, href, onClick, collapsed: collapsedProp, }: SidebarBrandProps) => react_jsx_runtime.JSX.Element;
258
+ type SidebarItemProps = {
259
+ /** Icon component (lucide-react or any React component accepting className). */
260
+ icon: ComponentType<{
261
+ className?: string;
262
+ }>;
263
+ /** Item label. */
264
+ label: string;
265
+ /** Whether the item is active (highlighted). */
266
+ active?: boolean;
267
+ /** Link target — renders an <a> if set, otherwise a <button>. */
268
+ href?: string;
269
+ /** Click handler (if not using href). */
270
+ onClick?: () => void;
271
+ /** Optional badge (count, "new"…) shown right of label. Hidden when collapsed. */
272
+ badge?: ReactNode;
273
+ /** Override the inherited collapsed state. */
274
+ collapsed?: boolean;
275
+ /** Indentation depth (for nested items inside groups). Default: 0. */
276
+ depth?: number;
277
+ };
278
+ declare const SidebarItem: ({ icon: Icon, label, active, href, onClick, badge, collapsed: collapsedProp, depth, }: SidebarItemProps) => react_jsx_runtime.JSX.Element;
279
+ type SidebarSubMenuProps = {
280
+ icon: ComponentType<{
281
+ className?: string;
282
+ }>;
283
+ label: string;
284
+ /** Initial open state. */
285
+ defaultOpen?: boolean;
286
+ /** Override the inherited collapsed state. */
287
+ collapsed?: boolean;
288
+ /** Whether any child item is active. */
289
+ active?: boolean;
290
+ /** Optional badge shown right of label (hidden when collapsed). */
291
+ badge?: ReactNode;
292
+ /** Nested items — typically `Sidebar.Item` with `depth={1}`. */
293
+ children: ReactNode;
294
+ };
295
+ declare const SidebarSubMenu: ({ icon: Icon, label, defaultOpen, collapsed: collapsedProp, active, badge, children, }: SidebarSubMenuProps) => react_jsx_runtime.JSX.Element;
296
+ type SidebarGroupProps = {
297
+ label: string;
298
+ defaultOpen?: boolean;
299
+ collapsed?: boolean;
300
+ children: ReactNode;
301
+ };
302
+ declare const SidebarGroup: ({ label, defaultOpen, collapsed: collapsedProp, children, }: SidebarGroupProps) => react_jsx_runtime.JSX.Element;
303
+ type SidebarSectionProps = {
304
+ label?: string;
305
+ collapsed?: boolean;
306
+ children: ReactNode;
307
+ };
308
+ declare const SidebarSection: ({ label, collapsed: collapsedProp, children }: SidebarSectionProps) => react_jsx_runtime.JSX.Element;
309
+ type SidebarComponent = typeof SidebarRoot & {
310
+ Brand: typeof SidebarBrand;
311
+ Item: typeof SidebarItem;
312
+ Group: typeof SidebarGroup;
313
+ Section: typeof SidebarSection;
314
+ SubMenu: typeof SidebarSubMenu;
315
+ };
316
+ declare const Sidebar: SidebarComponent;
317
+
318
+ type ShellProps = {
319
+ /** Top header bar — typically `<Topbar />`. */
320
+ topbar?: ReactElement<TopbarProps>;
321
+ /** Left sidebar — typically `<Sidebar />`. */
322
+ sidebar?: ReactElement<SidebarProps>;
323
+ /** Main content area. */
324
+ children: ReactNode;
325
+ /**
326
+ * Optional right-aligned secondary panel — mirrors the TUI Plus "Multi-
327
+ * column" application shell pattern (sidebar + main + secondary). Renders
328
+ * after `children` inside a flex row below the topbar.
329
+ */
330
+ secondary?: ReactNode;
331
+ /** Width class for the secondary panel. Default `w-80` (320px). */
332
+ secondaryWidthClassName?: string;
333
+ /** Initial collapsed state of the sidebar. Default: `false`. */
334
+ defaultSidebarCollapsed?: boolean;
335
+ /**
336
+ * If you control the collapsed state externally (e.g. from a router or a
337
+ * playlist context), pass it here. When set, Shell becomes a controlled
338
+ * component and `defaultSidebarCollapsed` is ignored.
339
+ */
340
+ sidebarCollapsed?: boolean;
341
+ /** Fired whenever the collapsed state toggles. */
342
+ onSidebarToggle?: (collapsed: boolean) => void;
343
+ /** Optional className override on the root element. */
344
+ className?: string;
345
+ };
346
+ /**
347
+ * Shell — application root layout.
348
+ *
349
+ * Owns the sidebar collapsed state and threads it down to both the
350
+ * `Topbar` (built-in hamburger button) and the `Sidebar` (width animation
351
+ * + brand). Pass `sidebarCollapsed` to make this controlled, otherwise
352
+ * Shell manages it internally.
353
+ *
354
+ * Composition is automatic: clone the topbar/sidebar elements you pass in
355
+ * and inject `sidebarCollapsed` + `onToggleSidebar` / `collapsed` props.
356
+ * You only need to write
357
+ *
358
+ * <Shell topbar={<Topbar pageTitle="…" />} sidebar={<Sidebar>…</Sidebar>}>
359
+ * …
360
+ * </Shell>
361
+ */
362
+ declare const Shell: ({ topbar, sidebar, children, secondary, secondaryWidthClassName, defaultSidebarCollapsed, sidebarCollapsed: controlledCollapsed, onSidebarToggle, className, }: ShellProps) => react_jsx_runtime.JSX.Element;
363
+
364
+ type PageBreadcrumbItem = {
365
+ label: string;
366
+ href?: string;
367
+ onClick?: () => void;
368
+ };
369
+ type PageBreadcrumbProps = {
370
+ /** Ordered list of breadcrumb items. First gets a Home icon, last is current page (no link). */
371
+ items: PageBreadcrumbItem[];
372
+ className?: string;
373
+ };
374
+ /**
375
+ * PageBreadcrumb — slim breadcrumb shown below a page title.
376
+ *
377
+ * The first item is decorated with a Home icon. The last item is the current
378
+ * page (rendered as plain text, not a link). Items in between are clickable
379
+ * (either via `href` or `onClick`).
380
+ */
381
+ declare const PageBreadcrumb: ({ items, className }: PageBreadcrumbProps) => react_jsx_runtime.JSX.Element;
382
+
383
+ type PageHeaderProps = {
384
+ /** Main page title (h2) */
385
+ title: string;
386
+ /** Optional description shown below title (only when no breadcrumb) */
387
+ description?: string;
388
+ /** Breadcrumb shown below title (replaces description if provided) */
389
+ breadcrumb?: ReactNode;
390
+ /**
391
+ * Optional meta row shown below the title — typically a `flex gap-x-6` of
392
+ * `<PageHeader.MetaItem icon=...>` children, mirroring the TUI "With meta
393
+ * and actions" pattern. Renders alongside (below) `breadcrumb` and
394
+ * `description`.
395
+ */
396
+ meta?: ReactNode;
397
+ /** Right-aligned actions (buttons, icon buttons, etc.) */
398
+ actions?: ReactNode;
399
+ className?: string;
400
+ };
401
+ type PageHeaderMetaItemProps = {
402
+ /** Lucide icon (or any component accepting `className`). */
403
+ icon?: React.ComponentType<{
404
+ className?: string;
405
+ 'aria-hidden'?: boolean;
406
+ }>;
407
+ children: ReactNode;
408
+ };
409
+ declare const PageHeader: (({ title, description, breadcrumb, meta, actions, className }: PageHeaderProps) => react_jsx_runtime.JSX.Element) & {
410
+ MetaItem: ({ icon: Icon, children }: PageHeaderMetaItemProps) => react_jsx_runtime.JSX.Element;
411
+ };
412
+
413
+ type SectionCardIconTone = 'brand' | 'blue' | 'violet' | 'green' | 'amber' | 'red' | 'gray';
414
+ type SectionCardProps = {
415
+ /** Section title (h3) */
416
+ title: string;
417
+ /** Optional description shown below title */
418
+ desc?: string;
419
+ /** Optional icon component (lucide-react or any React component accepting className) */
420
+ icon?: ComponentType<{
421
+ className?: string;
422
+ }>;
423
+ /** Preset color theme for the icon (sets text + bg in one shot). */
424
+ iconTone?: SectionCardIconTone;
425
+ /** Tailwind text-* class for the icon. Overridden by `iconTone` when both are set. */
426
+ iconColor?: string;
427
+ /** Tailwind bg-* class for the icon container. Overridden by `iconTone` when both are set. */
428
+ iconBg?: string;
429
+ /** Card content */
430
+ children?: ReactNode;
431
+ className?: string;
432
+ };
433
+ /**
434
+ * SectionCard — white card with title, optional icon and description, and children.
435
+ *
436
+ * The de-facto building block for grouped content in a page. Use multiple
437
+ * SectionCards stacked vertically (with `space-y-6`) or in a grid.
438
+ */
439
+ declare const SectionCard: ({ title, desc, icon: Icon, iconTone, iconColor, iconBg, children, className, }: SectionCardProps) => react_jsx_runtime.JSX.Element;
440
+
441
+ type PageCardProps = {
442
+ children: ReactNode;
443
+ className?: string;
444
+ };
445
+ /**
446
+ * PageCard — full-page outer card.
447
+ *
448
+ * Replaces multiple SectionCards stacked: a single rounded-2xl bordered card
449
+ * that wraps ALL page content. Use for settings, profiles, forms — anything
450
+ * that's hard to read full-width.
451
+ *
452
+ * Combine with `<ContentNarrow>` inside for a centered constrained column.
453
+ */
454
+ declare const PageCard: ({ children, className }: PageCardProps) => react_jsx_runtime.JSX.Element;
455
+
456
+ type ContentNarrowProps = {
457
+ children: ReactNode;
458
+ /** Max width in px. Default: 680 */
459
+ maxWidth?: number;
460
+ className?: string;
461
+ };
462
+ /**
463
+ * ContentNarrow — centered constrained-width wrapper.
464
+ *
465
+ * Use inside PageCard or anywhere you want a readable column of content
466
+ * (settings forms, prose, profile pages…). Default width is 680px.
467
+ */
468
+ declare const ContentNarrow: ({ children, maxWidth, className }: ContentNarrowProps) => react_jsx_runtime.JSX.Element;
469
+
470
+ type ColBoxProps = {
471
+ /** Label shown centered (typically a percentage like "50%") */
472
+ label: string;
473
+ /** Min height in px. Default: 80 */
474
+ height?: number;
475
+ className?: string;
476
+ };
477
+ /**
478
+ * ColBox — styled placeholder box for layout demos.
479
+ *
480
+ * Useful when prototyping page layouts to visualize column proportions
481
+ * (e.g. "20% / 60% / 20%"). Same visual treatment as SectionCard but
482
+ * with a centered monospace label.
483
+ */
484
+ declare const ColBox: ({ label, height, className }: ColBoxProps) => react_jsx_runtime.JSX.Element;
485
+
486
+ type LoadingStateProps = {
487
+ /** Message shown below the spinner. Default: 'Loading…' */
488
+ message?: string;
489
+ className?: string;
490
+ };
491
+ /**
492
+ * LoadingState — spinning loader with a message.
493
+ *
494
+ * Use inside a SectionCard or any container while data is being fetched.
495
+ * Fills available height with vertical centering.
496
+ */
497
+ declare const LoadingState: ({ message, className }: LoadingStateProps) => react_jsx_runtime.JSX.Element;
498
+
499
+ type EmptyStateProps = {
500
+ /** Title (typically "No data" or domain-specific) */
501
+ title?: string;
502
+ /** Optional description below title */
503
+ description?: string;
504
+ /** Optional call-to-action (button, link) */
505
+ action?: ReactNode;
506
+ className?: string;
507
+ };
508
+ /**
509
+ * EmptyState — friendly empty-list placeholder.
510
+ *
511
+ * Use when an API call returns no results. Always show a description
512
+ * if there's an action the user can take to populate the list.
513
+ */
514
+ declare const EmptyState: ({ title, description, action, className, }: EmptyStateProps) => react_jsx_runtime.JSX.Element;
515
+
516
+ type ErrorStateProps = {
517
+ /** Error message. Default: 'Something went wrong.' */
518
+ message?: string;
519
+ /** Optional retry callback. If set, a "Try again" link appears. */
520
+ onRetry?: () => void;
521
+ className?: string;
522
+ };
523
+ /**
524
+ * ErrorState — error placeholder with optional retry action.
525
+ *
526
+ * Use when an API call fails or rendering fails inside a section.
527
+ * Pair with `<EmptyState>` when the error is "no data found" rather
528
+ * than a real failure.
529
+ */
530
+ declare const ErrorState: ({ message, onRetry, className, }: ErrorStateProps) => react_jsx_runtime.JSX.Element;
531
+
532
+ type SkProps = {
533
+ /** Tailwind height class — default `h-4`. */
534
+ h?: string;
535
+ /** Tailwind width class — default `w-full`. */
536
+ w?: string;
537
+ /** Tailwind border-radius class — default `rounded`. */
538
+ round?: string;
539
+ className?: string;
540
+ };
541
+ /**
542
+ * Sk — primitive skeleton block (animated pulsing rectangle). Compose with
543
+ * the Skeleton presets (SkeletonText / SkeletonTable / SkeletonList) or
544
+ * use directly for custom placeholders.
545
+ */
546
+ declare const Sk: ({ h, w, round, className }: SkProps) => react_jsx_runtime.JSX.Element;
547
+ type SkeletonTextProps = {
548
+ lines?: number;
549
+ className?: string;
550
+ };
551
+ declare const SkeletonText: ({ lines, className }: SkeletonTextProps) => react_jsx_runtime.JSX.Element;
552
+ type SkeletonTableProps = {
553
+ rows?: number;
554
+ cols?: number;
555
+ className?: string;
556
+ };
557
+ declare const SkeletonTable: ({ rows, cols, className }: SkeletonTableProps) => react_jsx_runtime.JSX.Element;
558
+ type SkeletonListProps = {
559
+ rows?: number;
560
+ showAction?: boolean;
561
+ className?: string;
562
+ };
563
+ declare const SkeletonList: ({ rows, showAction, className }: SkeletonListProps) => react_jsx_runtime.JSX.Element;
564
+
565
+ /** Health status — used by StatusBadge, HealthDot, HealthBadge, and lists. */
566
+ type HealthStatus = 'OK' | 'WARN' | 'CRIT' | 'UNKNOWN' | 'INFO';
567
+ /** Tailwind class string per status — pill background + text color. */
568
+ declare const STATUS_PILL: Record<HealthStatus, string>;
569
+ /** Raw color hex per status — used for HealthDot pulse animation. */
570
+ declare const STATUS_COLOR: Record<HealthStatus, string>;
571
+
572
+ type StatusBadgeProps = {
573
+ status: HealthStatus;
574
+ size?: 'sm' | 'md' | 'lg';
575
+ label?: string;
576
+ className?: string;
577
+ };
578
+ /**
579
+ * StatusBadge — rounded-full status pill (OK / WARN / CRIT / UNKNOWN).
580
+ *
581
+ * Three sizes: sm (inline in tables), md (default), lg (prominent display).
582
+ */
583
+ declare const StatusBadge: ({ status, size, label, className }: StatusBadgeProps) => react_jsx_runtime.JSX.Element;
584
+
585
+ type HealthDotProps = {
586
+ status: HealthStatus;
587
+ /** Show a pulsing animation around the dot */
588
+ pulse?: boolean;
589
+ className?: string;
590
+ };
591
+ /**
592
+ * HealthDot — small colored circle indicator (10px).
593
+ *
594
+ * Use for compact status displays (next to a label, in a row, in a chart legend).
595
+ * Set `pulse` to draw attention (recommended for CRIT).
596
+ */
597
+ declare const HealthDot: ({ status, pulse, className }: HealthDotProps) => react_jsx_runtime.JSX.Element;
598
+
599
+ type HealthBadgeProps = {
600
+ status: HealthStatus;
601
+ /** Custom label override (default: the status text) */
602
+ label?: string;
603
+ className?: string;
604
+ };
605
+ /**
606
+ * HealthBadge — prominent status badge with icon + label (rounded-lg).
607
+ *
608
+ * Larger and more visible than StatusBadge — use for hero status displays
609
+ * (e.g. "System Health" page, dashboard summary cards).
610
+ */
611
+ declare const HealthBadge: ({ status, label, className }: HealthBadgeProps) => react_jsx_runtime.JSX.Element;
612
+
613
+ type StackedListProps = Omit<HTMLAttributes<HTMLUListElement>, 'children'> & {
614
+ children: ReactNode;
615
+ };
616
+ type StackedListItemProps = LiHTMLAttributes<HTMLLIElement> & {
617
+ /** Leading slot — typically an `<img>` (size-12, rounded-full) or `<Avatar>`. */
618
+ avatar?: ReactNode;
619
+ /** Primary text. */
620
+ title: ReactNode;
621
+ /** Secondary text below the title (truncated by default). */
622
+ subtitle?: ReactNode;
623
+ /** Right-aligned meta column, hidden on mobile (mirrors TUI `hidden sm:flex`). */
624
+ meta?: ReactNode;
625
+ /** Trailing slot rendered after `meta` (icon, actions menu, badge…). */
626
+ trailing?: ReactNode;
627
+ /**
628
+ * If set, the entire row becomes a navigable link via a full-row overlay
629
+ * (TUI pattern: `<a><span class="absolute inset-x-0 -top-px bottom-0"></span></a>`).
630
+ * The overlay sits above the title text — other inner anchors stay on top via z-index.
631
+ */
632
+ href?: string;
633
+ /** When `href` is set, also append a chevron-right icon to indicate navigation. */
634
+ chevron?: boolean;
635
+ };
636
+ declare const StackedList: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
637
+ children: ReactNode;
638
+ } & react.RefAttributes<HTMLUListElement>> & {
639
+ Item: react.ForwardRefExoticComponent<LiHTMLAttributes<HTMLLIElement> & {
640
+ /** Leading slot — typically an `<img>` (size-12, rounded-full) or `<Avatar>`. */
641
+ avatar?: ReactNode;
642
+ /** Primary text. */
643
+ title: ReactNode;
644
+ /** Secondary text below the title (truncated by default). */
645
+ subtitle?: ReactNode;
646
+ /** Right-aligned meta column, hidden on mobile (mirrors TUI `hidden sm:flex`). */
647
+ meta?: ReactNode;
648
+ /** Trailing slot rendered after `meta` (icon, actions menu, badge…). */
649
+ trailing?: ReactNode;
650
+ /**
651
+ * If set, the entire row becomes a navigable link via a full-row overlay
652
+ * (TUI pattern: `<a><span class="absolute inset-x-0 -top-px bottom-0"></span></a>`).
653
+ * The overlay sits above the title text — other inner anchors stay on top via z-index.
654
+ */
655
+ href?: string;
656
+ /** When `href` is set, also append a chevron-right icon to indicate navigation. */
657
+ chevron?: boolean;
658
+ } & react.RefAttributes<HTMLLIElement>>;
659
+ };
660
+
661
+ type ContentStackedListProps = Omit<HTMLAttributes<HTMLUListElement>, 'children'> & {
662
+ children: ReactNode;
663
+ };
664
+ type ContentStackedListItemProps = LiHTMLAttributes<HTMLLIElement> & {
665
+ /** Primary text (heading-like). Becomes a link if `href` is set. */
666
+ title: ReactNode;
667
+ /** Make the title a link. */
668
+ href?: string;
669
+ /** Optional inline badge rendered next to the title (pattern 5). */
670
+ badge?: ReactNode;
671
+ /** Inline meta items separated by a dot. Pass an array of ReactNodes. */
672
+ meta?: ReactNode[];
673
+ /** Right-aligned slot — typically an AvatarGroup (pattern 3) or a button + actions menu (pattern 5). */
674
+ trailing?: ReactNode;
675
+ };
676
+ declare const ContentStackedList: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
677
+ children: ReactNode;
678
+ } & react.RefAttributes<HTMLUListElement>> & {
679
+ Item: react.ForwardRefExoticComponent<LiHTMLAttributes<HTMLLIElement> & {
680
+ /** Primary text (heading-like). Becomes a link if `href` is set. */
681
+ title: ReactNode;
682
+ /** Make the title a link. */
683
+ href?: string;
684
+ /** Optional inline badge rendered next to the title (pattern 5). */
685
+ badge?: ReactNode;
686
+ /** Inline meta items separated by a dot. Pass an array of ReactNodes. */
687
+ meta?: ReactNode[];
688
+ /** Right-aligned slot — typically an AvatarGroup (pattern 3) or a button + actions menu (pattern 5). */
689
+ trailing?: ReactNode;
690
+ } & react.RefAttributes<HTMLLIElement>>;
691
+ };
692
+
693
+ type StackedListInCardProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
694
+ /** Children must be `<StackedList.Item>` elements. */
695
+ children: ReactNode;
696
+ };
697
+ declare const StackedListInCard: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
698
+ /** Children must be `<StackedList.Item>` elements. */
699
+ children: ReactNode;
700
+ } & react.RefAttributes<HTMLDivElement>>;
701
+
702
+ type NarrowStackedListProps = Omit<HTMLAttributes<HTMLUListElement>, 'children'> & {
703
+ children: ReactNode;
704
+ };
705
+ type NarrowStackedListHeaderProps = Omit<LiHTMLAttributes<HTMLLIElement>, 'children'> & {
706
+ /** Render with `position: sticky` so the header stays pinned while scrolling. */
707
+ sticky?: boolean;
708
+ children: ReactNode;
709
+ };
710
+ type NarrowStackedListItemProps = LiHTMLAttributes<HTMLLIElement> & {
711
+ /** Leading slot — typically `<img class="size-12 rounded-full" />`. */
712
+ avatar?: ReactNode;
713
+ /** Primary text. */
714
+ title: ReactNode;
715
+ /** Secondary text below the title (truncated by default). */
716
+ subtitle?: ReactNode;
717
+ /** Optional right-of-title timestamp (Pattern 13). When set, an extra layout row is used. */
718
+ timestamp?: ReactNode;
719
+ /** Optional second body line (Pattern 13). Auto line-clamped to 2. */
720
+ description?: ReactNode;
721
+ /** Optional right-aligned trailing slot — action button, link (Pattern 12). */
722
+ trailing?: ReactNode;
723
+ };
724
+ declare const NarrowStackedList: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
725
+ children: ReactNode;
726
+ } & react.RefAttributes<HTMLUListElement>> & {
727
+ Header: react.ForwardRefExoticComponent<Omit<LiHTMLAttributes<HTMLLIElement>, "children"> & {
728
+ /** Render with `position: sticky` so the header stays pinned while scrolling. */
729
+ sticky?: boolean;
730
+ children: ReactNode;
731
+ } & react.RefAttributes<HTMLLIElement>>;
732
+ Item: react.ForwardRefExoticComponent<LiHTMLAttributes<HTMLLIElement> & {
733
+ /** Leading slot — typically `<img class="size-12 rounded-full" />`. */
734
+ avatar?: ReactNode;
735
+ /** Primary text. */
736
+ title: ReactNode;
737
+ /** Secondary text below the title (truncated by default). */
738
+ subtitle?: ReactNode;
739
+ /** Optional right-of-title timestamp (Pattern 13). When set, an extra layout row is used. */
740
+ timestamp?: ReactNode;
741
+ /** Optional second body line (Pattern 13). Auto line-clamped to 2. */
742
+ description?: ReactNode;
743
+ /** Optional right-aligned trailing slot — action button, link (Pattern 12). */
744
+ trailing?: ReactNode;
745
+ } & react.RefAttributes<HTMLLIElement>>;
746
+ };
747
+
748
+ type SimpleRowProps = {
749
+ /** Label on the left (typically a property name) */
750
+ label: string;
751
+ /** Value on the right (typically the property value) */
752
+ value: ReactNode;
753
+ /** Render value in monospace font (for IDs, hashes, paths…) */
754
+ mono?: boolean;
755
+ className?: string;
756
+ };
757
+ /**
758
+ * SimpleRow — flat key/value row for metadata or properties.
759
+ *
760
+ * Use inside a SectionCard with `divide-y` for visually separated rows:
761
+ *
762
+ * <SectionCard title="Metadata">
763
+ * <div className="divide-y divide-[var(--color-border)]">
764
+ * <SimpleRow label="ID" value="rack-01-a" mono />
765
+ * <SimpleRow label="Status" value={<StatusBadge status="OK" />} />
766
+ * </div>
767
+ * </SectionCard>
768
+ */
769
+ declare const SimpleRow: ({ label, value, mono, className }: SimpleRowProps) => react_jsx_runtime.JSX.Element;
770
+
771
+ type ClickableRowProps = {
772
+ /** Optional leading icon (lucide-react or any icon component) */
773
+ icon?: ComponentType<{
774
+ className?: string;
775
+ }>;
776
+ /** Main row title */
777
+ title: string;
778
+ /** Optional subtitle below the title */
779
+ subtitle?: string;
780
+ /** Click handler — renders a button */
781
+ onClick?: () => void;
782
+ /** Or provide an href to render an <a> instead */
783
+ href?: string;
784
+ className?: string;
785
+ };
786
+ /**
787
+ * ClickableRow — full-width navigable row with icon + title + subtitle + chevron.
788
+ *
789
+ * Use for navigable lists: racks, servers, exporters, articles…
790
+ * Pair with `<StatusRow>` when you need a status badge on the right.
791
+ */
792
+ declare const ClickableRow: ({ icon: Icon, title, subtitle, onClick, href, className, }: ClickableRowProps) => react_jsx_runtime.JSX.Element;
793
+
794
+ type StatusRowProps = {
795
+ icon?: ComponentType<{
796
+ className?: string;
797
+ }>;
798
+ title: string;
799
+ subtitle?: string;
800
+ status: HealthStatus;
801
+ onClick?: () => void;
802
+ href?: string;
803
+ className?: string;
804
+ };
805
+ /**
806
+ * StatusRow — same as ClickableRow but ends with a status badge instead of a chevron.
807
+ */
808
+ declare const StatusRow: ({ icon: Icon, title, subtitle, status, onClick, href, className, }: StatusRowProps) => react_jsx_runtime.JSX.Element;
809
+
810
+ type ActivityFeedIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
811
+ type ActivityFeedItemProps = LiHTMLAttributes<HTMLLIElement> & {
812
+ /** Lucide icon rendered inside the circle indicator. */
813
+ icon: ComponentType<{
814
+ className?: string;
815
+ 'aria-hidden'?: boolean;
816
+ }>;
817
+ /** Color of the circle indicator. Default `neutral`. */
818
+ intent?: ActivityFeedIntent;
819
+ /** Right-aligned timestamp (text or `<time>`). */
820
+ timestamp?: ReactNode;
821
+ /** Main content (paragraph). */
822
+ children: ReactNode;
823
+ /** Internal — set by parent via cloneElement. */
824
+ /** @internal */ __isLast?: boolean;
825
+ };
826
+ type ActivityFeedProps = Omit<HTMLAttributes<HTMLUListElement>, 'children'> & {
827
+ children: ReactNode;
828
+ };
829
+ declare const ActivityFeed: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
830
+ children: ReactNode;
831
+ } & react.RefAttributes<HTMLUListElement>> & {
832
+ Item: react.ForwardRefExoticComponent<LiHTMLAttributes<HTMLLIElement> & {
833
+ /** Lucide icon rendered inside the circle indicator. */
834
+ icon: ComponentType<{
835
+ className?: string;
836
+ "aria-hidden"?: boolean;
837
+ }>;
838
+ /** Color of the circle indicator. Default `neutral`. */
839
+ intent?: ActivityFeedIntent;
840
+ /** Right-aligned timestamp (text or `<time>`). */
841
+ timestamp?: ReactNode;
842
+ /** Main content (paragraph). */
843
+ children: ReactNode;
844
+ /** Internal — set by parent via cloneElement. */
845
+ /** @internal */ __isLast?: boolean;
846
+ } & react.RefAttributes<HTMLLIElement>>;
847
+ };
848
+
849
+ type GridListCols = 1 | 2 | 3 | 4;
850
+ type GridListProps = Omit<HTMLAttributes<HTMLUListElement>, 'children'> & {
851
+ /** Number of columns at the widest viewport. Responsive defaults below. */
852
+ cols?: GridListCols;
853
+ /** Gap class (Tailwind). Default `gap-6` (24px). */
854
+ gapClassName?: string;
855
+ children: ReactNode;
856
+ };
857
+ type GridListCardProps = HTMLAttributes<HTMLLIElement>;
858
+ type GridListFooterProps = HTMLAttributes<HTMLDivElement>;
859
+ type GridListFooterActionProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
860
+ /** Index in the footer row — only used to apply `-ml-px` on cells after the first. */
861
+ index?: number;
862
+ };
863
+ declare const GridList: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
864
+ /** Number of columns at the widest viewport. Responsive defaults below. */
865
+ cols?: GridListCols;
866
+ /** Gap class (Tailwind). Default `gap-6` (24px). */
867
+ gapClassName?: string;
868
+ children: ReactNode;
869
+ } & react.RefAttributes<HTMLUListElement>> & {
870
+ Card: react.ForwardRefExoticComponent<GridListCardProps & react.RefAttributes<HTMLLIElement>>;
871
+ Footer: react.ForwardRefExoticComponent<GridListFooterProps & react.RefAttributes<HTMLDivElement>>;
872
+ FooterAction: react.ForwardRefExoticComponent<AnchorHTMLAttributes<HTMLAnchorElement> & {
873
+ /** Index in the footer row — only used to apply `-ml-px` on cells after the first. */
874
+ index?: number;
875
+ } & react.RefAttributes<HTMLAnchorElement>>;
876
+ };
877
+
878
+ type BreadcrumbItem = {
879
+ label: string;
880
+ /** Optional icon (lucide-react component) */
881
+ icon?: ComponentType<{
882
+ className?: string;
883
+ }>;
884
+ /** Link target — last item is rendered as plain text (no link) regardless */
885
+ href?: string;
886
+ /** Or click handler */
887
+ onClick?: () => void;
888
+ };
889
+ type BreadcrumbSeparator = 'chevron' | 'slash' | 'dot' | ReactNode;
890
+ type BreadcrumbProps = {
891
+ items: BreadcrumbItem[];
892
+ /** Visual separator between items. Default `'chevron'`. Pass any ReactNode for full custom. */
893
+ separator?: BreadcrumbSeparator;
894
+ className?: string;
895
+ };
896
+ /**
897
+ * Breadcrumb — navigable path: Site → Room → Aisle → Rack → Device.
898
+ *
899
+ * Each item except the last is clickable. Last item renders as plain text
900
+ * (the current page). Use icons for the most important items in the path.
901
+ *
902
+ * Differs from PageBreadcrumb (templates/) which is the slim variant for
903
+ * page headers with the Home icon. This Breadcrumb is bigger and supports
904
+ * an icon per item.
905
+ */
906
+ declare const Breadcrumb: ({ items, separator, className }: BreadcrumbProps) => react_jsx_runtime.JSX.Element;
907
+
908
+ type NavbarTheme = 'light' | 'dark';
909
+ type NavbarProps = HTMLAttributes<HTMLElement> & {
910
+ theme?: NavbarTheme;
911
+ /** Constrain inner content to a max width container. Default `7xl`. */
912
+ maxWidth?: 'none' | '7xl';
913
+ /** Override the inner row height. Default `h-16` (64px). */
914
+ heightClassName?: string;
915
+ children: ReactNode;
916
+ };
917
+ type NavbarItemProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
918
+ active?: boolean;
919
+ /** Resolve theme from the parent `<Navbar>` data attribute. Defaults to `light`. */
920
+ theme?: NavbarTheme;
921
+ };
922
+ type NavbarMobileMenuButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
923
+ theme?: NavbarTheme;
924
+ };
925
+ declare const Navbar: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
926
+ theme?: NavbarTheme;
927
+ /** Constrain inner content to a max width container. Default `7xl`. */
928
+ maxWidth?: "none" | "7xl";
929
+ /** Override the inner row height. Default `h-16` (64px). */
930
+ heightClassName?: string;
931
+ children: ReactNode;
932
+ } & react.RefAttributes<HTMLElement>> & {
933
+ Brand: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
934
+ Items: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
935
+ Item: ({ active, theme, className, children, ...rest }: NavbarItemProps) => react_jsx_runtime.JSX.Element;
936
+ Actions: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
937
+ MobileMenuButton: ({ theme, className, children, ...rest }: NavbarMobileMenuButtonProps) => react_jsx_runtime.JSX.Element;
938
+ };
939
+
940
+ type PaginationVariant = 'text' | 'compact';
941
+ type PaginationSize = 'sm' | 'md';
942
+ type PaginationProps = {
943
+ /** 1-indexed current page. */
944
+ page: number;
945
+ totalPages: number;
946
+ onPageChange: (page: number) => void;
947
+ /** Render "Showing X to Y of Z". Requires `pageSize` + `total`. */
948
+ showInfo?: boolean;
949
+ pageSize?: number;
950
+ total?: number;
951
+ /** `text` (default) shows numbered buttons. `compact` shows chevrons + "Page X of Y". */
952
+ variant?: PaginationVariant;
953
+ size?: PaginationSize;
954
+ className?: string;
955
+ };
956
+ declare const Pagination: ({ page, totalPages, onPageChange, showInfo, pageSize, total, variant, size, className, }: PaginationProps) => react_jsx_runtime.JSX.Element;
957
+
958
+ type StepperOrientation = 'horizontal' | 'vertical';
959
+ type StepperSize = 'sm' | 'md';
960
+ type StepStatus = 'done' | 'active' | 'pending';
961
+ /**
962
+ * Visual variant. `indicators` (default, existing): numbered circles with a
963
+ * horizontal connector. `bars` (TUI "Simple"): coloured top bar above each
964
+ * column with a label/description below — no circle indicator. `panels`
965
+ * (TUI "Panels"): row of bordered panels separated by `>` chevrons, each
966
+ * panel hosting a circle indicator + label.
967
+ *
968
+ * `bars` and `panels` are horizontal-only. Default falls back to existing
969
+ * `indicators` rendering for full backward compat.
970
+ */
971
+ type StepperVariant = 'indicators' | 'bars' | 'panels';
972
+ type StepperStepProps = {
973
+ /** Step label (the headline). */
974
+ children: ReactNode;
975
+ /** Optional secondary text shown under the label. */
976
+ description?: string;
977
+ /** Optional icon shown inside the step indicator. Overridden by a Check when status is `done`. */
978
+ icon?: ComponentType<{
979
+ className?: string;
980
+ }>;
981
+ /** Disable user interaction for this step (only meaningful when the parent is `clickable`). */
982
+ disabled?: boolean;
983
+ /** @internal */
984
+ __index?: number;
985
+ /** @internal */
986
+ __status?: StepStatus;
987
+ /** @internal */
988
+ __orientation?: StepperOrientation;
989
+ /** @internal */
990
+ __size?: StepperSize;
991
+ /** @internal */
992
+ __variant?: StepperVariant;
993
+ /** @internal */
994
+ __clickable?: boolean;
995
+ /** @internal */
996
+ __onClick?: (index: number) => void;
997
+ /** @internal */
998
+ __isLast?: boolean;
999
+ };
1000
+ type StepperProps = {
1001
+ /** Current step (0-indexed). Steps before are `done`, equal is `active`, after are `pending`. */
1002
+ current: number;
1003
+ orientation?: StepperOrientation;
1004
+ size?: StepperSize;
1005
+ variant?: StepperVariant;
1006
+ /** Make steps clickable for back-navigation. */
1007
+ clickable?: boolean;
1008
+ onStepClick?: (index: number) => void;
1009
+ className?: string;
1010
+ children: ReactNode;
1011
+ };
1012
+ declare const StepperRoot: ({ current, orientation, size, variant, clickable, onStepClick, className, children, }: StepperProps) => react_jsx_runtime.JSX.Element;
1013
+ declare const Stepper: (({ current, orientation, size, variant, clickable, onStepClick, className, children, }: StepperProps) => react_jsx_runtime.JSX.Element) & {
1014
+ Step: ({ children, description, icon: Icon, disabled, __index, __status, __orientation, __size, __variant, __clickable, __onClick, __isLast, }: StepperStepProps) => react_jsx_runtime.JSX.Element;
1015
+ };
1016
+
1017
+ type VerticalNavigationItemProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
1018
+ /** Leading icon (lucide-react component). */
1019
+ icon?: ComponentType<{
1020
+ className?: string;
1021
+ 'aria-hidden'?: boolean;
1022
+ }>;
1023
+ /** Trailing badge content (count, "new", etc.). */
1024
+ badge?: ReactNode;
1025
+ active?: boolean;
1026
+ };
1027
+ type VerticalNavigationSectionProps = HTMLAttributes<HTMLLIElement> & {
1028
+ /** Section label, rendered as a small uppercase header. */
1029
+ label: ReactNode;
1030
+ };
1031
+ type VerticalNavigationProps = HTMLAttributes<HTMLElement> & {
1032
+ /** Tighter padding (TUI "On gray" pattern), useful inside a gray-bg surface. */
1033
+ variant?: 'default' | 'on-gray';
1034
+ children: ReactNode;
1035
+ };
1036
+ declare const VerticalNavigation: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
1037
+ /** Tighter padding (TUI "On gray" pattern), useful inside a gray-bg surface. */
1038
+ variant?: "default" | "on-gray";
1039
+ children: ReactNode;
1040
+ } & react.RefAttributes<HTMLElement>> & {
1041
+ Item: react.ForwardRefExoticComponent<AnchorHTMLAttributes<HTMLAnchorElement> & {
1042
+ /** Leading icon (lucide-react component). */
1043
+ icon?: ComponentType<{
1044
+ className?: string;
1045
+ "aria-hidden"?: boolean;
1046
+ }>;
1047
+ /** Trailing badge content (count, "new", etc.). */
1048
+ badge?: ReactNode;
1049
+ active?: boolean;
1050
+ } & react.RefAttributes<HTMLAnchorElement>>;
1051
+ Section: ({ label, children, className, ...rest }: VerticalNavigationSectionProps) => react_jsx_runtime.JSX.Element;
1052
+ };
1053
+
1054
+ type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'soft';
1055
+ type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
1056
+ /**
1057
+ * Corner radius shape. Default `rounded` (TUI default `rounded-md`).
1058
+ * Use `pill` for fully-rounded (TUI "Rounded primary/secondary"),
1059
+ * `circle` for icon-only square buttons (TUI "Circular").
1060
+ */
1061
+ type ButtonShape = 'rounded' | 'pill' | 'circle';
1062
+ type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1063
+ variant?: ButtonVariant;
1064
+ size?: ButtonSize;
1065
+ shape?: ButtonShape;
1066
+ icon?: ElementType;
1067
+ iconPosition?: 'left' | 'right';
1068
+ loading?: boolean;
1069
+ children?: ReactNode;
1070
+ };
1071
+ declare const Button: ({ variant, size, shape, icon: Icon, iconPosition, loading, disabled, className, children, type, ...rest }: ButtonProps) => react_jsx_runtime.JSX.Element;
1072
+
1073
+ type CardProps = {
1074
+ children: ReactNode;
1075
+ className?: string;
1076
+ padding?: 'none' | 'sm' | 'md' | 'lg';
1077
+ /** Adds hover-lift + cursor-pointer affordance. Pair with `as="a"` or wrap in your router's Link. */
1078
+ interactive?: boolean;
1079
+ /**
1080
+ * When `true`, the card is flush with the viewport edges on mobile
1081
+ * (no rounded corners, no horizontal margins) and switches to rounded
1082
+ * + bordered at the `sm` breakpoint and above. Mirrors the TUI Plus
1083
+ * "Card, edge-to-edge on mobile" pattern.
1084
+ */
1085
+ edgeToEdgeMobile?: boolean;
1086
+ };
1087
+ type CardImageProps = ImgHTMLAttributes<HTMLImageElement> & {
1088
+ /** Aspect ratio class (Tailwind). Default `aspect-video`. */
1089
+ aspectRatio?: string;
1090
+ /** Wrapper className (the `<img>` is inside). */
1091
+ wrapperClassName?: string;
1092
+ };
1093
+ declare const Card: (({ children, className, padding, interactive, edgeToEdgeMobile, }: CardProps) => react_jsx_runtime.JSX.Element) & {
1094
+ Header: ({ children, className }: {
1095
+ children: ReactNode;
1096
+ className?: string;
1097
+ }) => react_jsx_runtime.JSX.Element;
1098
+ Body: ({ children, className }: {
1099
+ children: ReactNode;
1100
+ className?: string;
1101
+ }) => react_jsx_runtime.JSX.Element;
1102
+ Footer: ({ children, className }: {
1103
+ children: ReactNode;
1104
+ className?: string;
1105
+ }) => react_jsx_runtime.JSX.Element;
1106
+ Image: ({ aspectRatio, wrapperClassName, className, alt, ...rest }: CardImageProps) => react_jsx_runtime.JSX.Element;
1107
+ };
1108
+
1109
+ type BadgeVariant = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
1110
+ type BadgeSize = 'sm' | 'md';
1111
+ type BadgeAppearance = 'light' | 'solid';
1112
+ type BadgeProps = {
1113
+ children: ReactNode;
1114
+ variant?: BadgeVariant;
1115
+ size?: BadgeSize;
1116
+ /** Visual style. `light` (default) = soft tinted bg + colored text. `solid` = filled bg + white text. */
1117
+ appearance?: BadgeAppearance;
1118
+ /** Optional Lucide icon. */
1119
+ icon?: ElementType;
1120
+ iconPosition?: 'left' | 'right';
1121
+ className?: string;
1122
+ };
1123
+ declare const Badge: ({ children, variant, size, appearance, icon: Icon, iconPosition, className, }: BadgeProps) => react_jsx_runtime.JSX.Element;
1124
+
1125
+ type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
1126
+ type AvatarProps = {
1127
+ src?: string;
1128
+ alt?: string;
1129
+ /** Used to compute initials if `src` not provided or fails to load. */
1130
+ name?: string;
1131
+ size?: AvatarSize;
1132
+ className?: string;
1133
+ };
1134
+ declare const Avatar: ({ src, alt, name, size, className }: AvatarProps) => react_jsx_runtime.JSX.Element;
1135
+
1136
+ type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
1137
+ type TooltipVariant = 'dark' | 'white' | 'brand';
1138
+ type TooltipProps = {
1139
+ content: ReactNode;
1140
+ children: ReactNode;
1141
+ position?: TooltipPosition;
1142
+ variant?: TooltipVariant;
1143
+ /** Tailwind max-width class — default `max-w-xs` (320px) */
1144
+ maxWidth?: string;
1145
+ };
1146
+ declare const Tooltip: ({ content, children, position, variant, maxWidth, }: TooltipProps) => react_jsx_runtime.JSX.Element;
1147
+ declare const TooltipHelp: ({ text, position, variant, }: {
1148
+ text: string;
1149
+ position?: TooltipPosition;
1150
+ variant?: TooltipVariant;
1151
+ }) => react_jsx_runtime.JSX.Element;
1152
+
1153
+ type DropdownOption = {
1154
+ value: string;
1155
+ label: string;
1156
+ icon?: ElementType;
1157
+ disabled?: boolean;
1158
+ };
1159
+ type DropdownDivider = {
1160
+ divider: true;
1161
+ };
1162
+ type DropdownItem = DropdownOption | DropdownDivider;
1163
+ type DropdownProps = {
1164
+ label?: string;
1165
+ icon?: ElementType;
1166
+ options: DropdownItem[];
1167
+ value?: string;
1168
+ onChange?: (value: string) => void;
1169
+ placeholder?: string;
1170
+ align?: 'left' | 'right';
1171
+ disabled?: boolean;
1172
+ className?: string;
1173
+ };
1174
+ declare const Dropdown: ({ label, icon: TriggerIcon, options, value, onChange, placeholder, align, disabled, className, }: DropdownProps) => react_jsx_runtime.JSX.Element;
1175
+
1176
+ type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
1177
+ type ModalProps = {
1178
+ open: boolean;
1179
+ onClose: () => void;
1180
+ size?: ModalSize;
1181
+ className?: string;
1182
+ children: ReactNode;
1183
+ };
1184
+ type ModalHeaderProps = {
1185
+ title?: ReactNode;
1186
+ description?: ReactNode;
1187
+ onClose?: () => void;
1188
+ className?: string;
1189
+ children?: ReactNode;
1190
+ };
1191
+ type ModalAlertIntent = 'info' | 'warning' | 'danger' | 'success';
1192
+ type ModalAlertLayout = 'centered' | 'horizontal';
1193
+ type ModalAlertProps = {
1194
+ open: boolean;
1195
+ onClose: () => void;
1196
+ intent?: ModalAlertIntent;
1197
+ title: string;
1198
+ message?: ReactNode;
1199
+ /** Primary action label. Default `OK`. */
1200
+ confirmLabel?: string;
1201
+ /** Cancel action label. When omitted, no cancel button is rendered. */
1202
+ cancelLabel?: string;
1203
+ /** Called when the primary action is clicked. Defaults to `onClose`. */
1204
+ onConfirm?: () => void;
1205
+ /** Called when Cancel is clicked. Defaults to `onClose`. */
1206
+ onCancel?: () => void;
1207
+ /** When true, the primary button shows a spinner and both buttons are disabled. */
1208
+ loading?: boolean;
1209
+ /**
1210
+ * Visual layout. `centered` (default): icon + title + buttons stacked
1211
+ * vertically and centered (TUI "Centered with single action").
1212
+ * `horizontal`: icon to the left of the title/message, with buttons in
1213
+ * a separate gray footer right-aligned (TUI "Simple with gray footer").
1214
+ */
1215
+ layout?: ModalAlertLayout;
1216
+ /**
1217
+ * In `centered` layout, render the primary action as a single
1218
+ * full-width button (TUI "Centered with single action" pattern).
1219
+ * Has no effect in `horizontal` layout.
1220
+ */
1221
+ fullWidthAction?: boolean;
1222
+ };
1223
+ declare const Modal: (({ open, onClose, size, className, children }: ModalProps) => react.ReactPortal | null) & {
1224
+ Header: ({ title, description, onClose, className, children }: ModalHeaderProps) => react_jsx_runtime.JSX.Element;
1225
+ Body: ({ children, className }: {
1226
+ children: ReactNode;
1227
+ className?: string;
1228
+ }) => react_jsx_runtime.JSX.Element;
1229
+ Footer: ({ children, className }: {
1230
+ children: ReactNode;
1231
+ className?: string;
1232
+ }) => react_jsx_runtime.JSX.Element;
1233
+ Alert: ({ open, onClose, intent, title, message, confirmLabel, cancelLabel, onConfirm, onCancel, loading, layout, fullWidthAction, }: ModalAlertProps) => react_jsx_runtime.JSX.Element;
1234
+ };
1235
+
1236
+ type DrawerSide = 'left' | 'right';
1237
+ type DrawerSize = 'sm' | 'md' | 'lg';
1238
+ type DrawerProps = {
1239
+ open: boolean;
1240
+ onClose: () => void;
1241
+ side?: DrawerSide;
1242
+ size?: DrawerSize;
1243
+ /**
1244
+ * Render a translucent overlay behind the panel that closes on click.
1245
+ * Default `true`. Set `false` for the TUI "Empty" slide-over pattern
1246
+ * where the page stays interactive behind the panel.
1247
+ */
1248
+ withBackdrop?: boolean;
1249
+ /**
1250
+ * Render the close button on the backdrop (outside the panel), opposite
1251
+ * the chosen `side`. Mirrors the TUI "With close button on outside"
1252
+ * pattern. When `true`, no close button is rendered inside `Drawer.Header`
1253
+ * — handle the X via this overlay button instead.
1254
+ * Has no effect when `withBackdrop` is `false`.
1255
+ */
1256
+ closeOutside?: boolean;
1257
+ className?: string;
1258
+ children: ReactNode;
1259
+ };
1260
+ type DrawerHeaderProps = {
1261
+ title: ReactNode;
1262
+ icon?: ElementType;
1263
+ description?: ReactNode;
1264
+ onClose?: () => void;
1265
+ className?: string;
1266
+ children?: ReactNode;
1267
+ };
1268
+ declare const Drawer: (({ open, onClose, side, size, withBackdrop, closeOutside, className, children, }: DrawerProps) => react.ReactPortal) & {
1269
+ Header: ({ title, icon: Icon, description, onClose, className, children, }: DrawerHeaderProps) => react_jsx_runtime.JSX.Element;
1270
+ Body: ({ children, className }: {
1271
+ children: ReactNode;
1272
+ className?: string;
1273
+ }) => react_jsx_runtime.JSX.Element;
1274
+ Footer: ({ children, className }: {
1275
+ children: ReactNode;
1276
+ className?: string;
1277
+ }) => react_jsx_runtime.JSX.Element;
1278
+ };
1279
+
1280
+ type TabsOrientation = 'horizontal' | 'vertical';
1281
+ type TabsProps = {
1282
+ value: string;
1283
+ onChange: (value: string) => void;
1284
+ /** Layout direction. `horizontal` (default) puts the tab list on top; `vertical` puts it on the left. */
1285
+ orientation?: TabsOrientation;
1286
+ children: ReactNode;
1287
+ className?: string;
1288
+ };
1289
+ type TabProps = {
1290
+ value: string;
1291
+ children: ReactNode;
1292
+ icon?: ElementType;
1293
+ badge?: ReactNode;
1294
+ disabled?: boolean;
1295
+ className?: string;
1296
+ };
1297
+ declare const Tabs: (({ value, onChange, orientation, children, className }: TabsProps) => react_jsx_runtime.JSX.Element) & {
1298
+ List: ({ children, className }: {
1299
+ children: ReactNode;
1300
+ className?: string;
1301
+ }) => react_jsx_runtime.JSX.Element;
1302
+ Trigger: ({ value, children, icon: Icon, badge, disabled, className }: TabProps) => react_jsx_runtime.JSX.Element;
1303
+ Panel: ({ value, children, className, }: {
1304
+ value: string;
1305
+ children: ReactNode;
1306
+ className?: string;
1307
+ }) => react_jsx_runtime.JSX.Element | null;
1308
+ };
1309
+
1310
+ type CodeBlockProps = {
1311
+ code: string;
1312
+ language?: string;
1313
+ /** Show the copy button (top-right, hover-revealed). Default `true`. */
1314
+ showCopy?: boolean;
1315
+ className?: string;
1316
+ };
1317
+ declare const CodeBlock: ({ code, language, showCopy, className }: CodeBlockProps) => react_jsx_runtime.JSX.Element;
1318
+
1319
+ type PageActionVariant = 'outline' | 'primary' | 'brand-outline' | 'danger-outline';
1320
+ type PageActionButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1321
+ icon?: ElementType;
1322
+ variant?: PageActionVariant;
1323
+ children?: ReactNode;
1324
+ };
1325
+ declare const PageActionButton: ({ icon: Icon, variant, className, children, type, ...rest }: PageActionButtonProps) => react_jsx_runtime.JSX.Element;
1326
+ type PageActionIconButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> & {
1327
+ icon: ElementType;
1328
+ variant?: PageActionVariant;
1329
+ };
1330
+ declare const PageActionIconButton: ({ icon: Icon, variant, className, type, ...rest }: PageActionIconButtonProps) => react_jsx_runtime.JSX.Element;
1331
+
1332
+ type RefreshOption = {
1333
+ label: string;
1334
+ ms: number;
1335
+ };
1336
+ declare const REFRESH_OPTIONS: RefreshOption[];
1337
+ /**
1338
+ * Hook that manages auto-refresh state for a page key, persisted to localStorage.
1339
+ * Pass a stable `pageKey` (e.g. "room", "rack", "alerts").
1340
+ */
1341
+ declare const useAutoRefresh: (pageKey: string, onRefresh: () => void | Promise<void>) => {
1342
+ autoRefreshMs: number;
1343
+ onIntervalChange: (ms: number) => void;
1344
+ };
1345
+ type RefreshButtonProps = {
1346
+ refreshing?: boolean;
1347
+ autoRefreshMs: number;
1348
+ onRefresh: () => void | Promise<void>;
1349
+ onIntervalChange: (ms: number) => void;
1350
+ options?: RefreshOption[];
1351
+ className?: string;
1352
+ };
1353
+ declare const RefreshButton: ({ refreshing, autoRefreshMs, onRefresh, onIntervalChange, options, className, }: RefreshButtonProps) => react_jsx_runtime.JSX.Element;
1354
+
1355
+ type RowActionButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1356
+ children?: ReactNode;
1357
+ hideChevron?: boolean;
1358
+ };
1359
+ /**
1360
+ * RowActionButton — compact action button for the right edge of table rows
1361
+ * or list items. Defaults to a chevron-right indicator suggesting navigation.
1362
+ */
1363
+ declare const RowActionButton: ({ children, hideChevron, className, type, ...rest }: RowActionButtonProps) => react_jsx_runtime.JSX.Element;
1364
+
1365
+ type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl';
1366
+ type SpinnerProps = {
1367
+ size?: SpinnerSize;
1368
+ className?: string;
1369
+ };
1370
+ declare const Spinner: ({ size, className }: SpinnerProps) => react_jsx_runtime.JSX.Element;
1371
+
1372
+ type SectionLabelProps = {
1373
+ children: ReactNode;
1374
+ className?: string;
1375
+ };
1376
+ /**
1377
+ * SectionLabel — small upper-cased label used as a quiet section divider
1378
+ * inside drawers, settings panels, and form groups.
1379
+ */
1380
+ declare const SectionLabel: ({ children, className }: SectionLabelProps) => react_jsx_runtime.JSX.Element;
1381
+
1382
+ type IconBoxSize = 'sm' | 'md' | 'lg';
1383
+ type IconBoxProps = {
1384
+ icon: ElementType;
1385
+ size?: IconBoxSize;
1386
+ /** Tailwind background classes — default neutral gray. */
1387
+ bg?: string;
1388
+ /** Tailwind text color classes — default neutral gray. */
1389
+ color?: string;
1390
+ className?: string;
1391
+ };
1392
+ /**
1393
+ * IconBox — icon wrapped in a rounded square with configurable color theme.
1394
+ * Useful for resource avatars in lists and cards.
1395
+ */
1396
+ declare const IconBox: ({ icon: Icon, size, bg, color, className, }: IconBoxProps) => react_jsx_runtime.JSX.Element;
1397
+
1398
+ type AlertVariant = 'success' | 'error' | 'warning' | 'info';
1399
+ type AlertBannerProps = {
1400
+ variant?: AlertVariant;
1401
+ children: ReactNode;
1402
+ className?: string;
1403
+ };
1404
+ declare const AlertBanner: ({ variant, children, className }: AlertBannerProps) => react_jsx_runtime.JSX.Element;
1405
+
1406
+ type SelectInputOption = {
1407
+ label: string;
1408
+ value: string;
1409
+ };
1410
+ type SelectInputProps = {
1411
+ value: string;
1412
+ onChange: (value: string) => void;
1413
+ options: SelectInputOption[];
1414
+ placeholder?: string;
1415
+ disabled?: boolean;
1416
+ className?: string;
1417
+ };
1418
+ /**
1419
+ * SelectInput — styled native select wrapper. Different from `Select` (which
1420
+ * adds label/description/error chrome) and from `Dropdown` (which is a
1421
+ * non-native menu). Use this when you want a pure value-changing native select
1422
+ * with the Cosmos look.
1423
+ */
1424
+ declare const SelectInput: ({ value, onChange, options, placeholder, disabled, className, }: SelectInputProps) => react_jsx_runtime.JSX.Element;
1425
+
1426
+ type BackdropProps = {
1427
+ onClick?: () => void;
1428
+ zIndex?: number;
1429
+ blur?: boolean;
1430
+ className?: string;
1431
+ };
1432
+ /**
1433
+ * Backdrop — primitive overlay layer (fixed inset-0 with semi-opaque black).
1434
+ * Reusable building block for Modal, Drawer, Lightbox, command palette, etc.
1435
+ */
1436
+ declare const Backdrop: ({ onClick, zIndex, blur, className }: BackdropProps) => react_jsx_runtime.JSX.Element;
1437
+
1438
+ type SaveState = 'idle' | 'dirty' | 'saving' | 'saved' | 'error';
1439
+ type StatefulSaveButtonProps = {
1440
+ state: SaveState;
1441
+ onClick: () => void;
1442
+ /** Override label for `idle` / `dirty` states. */
1443
+ label?: string;
1444
+ /** Override label for `saved` state. */
1445
+ savedLabel?: string;
1446
+ className?: string;
1447
+ };
1448
+ /**
1449
+ * StatefulSaveButton — save button with 5 visual states cycling
1450
+ * idle → dirty → saving → saved → idle (or error on failure).
1451
+ */
1452
+ declare const StatefulSaveButton: ({ state, onClick, label, savedLabel, className, }: StatefulSaveButtonProps) => react_jsx_runtime.JSX.Element;
1453
+
1454
+ type UnsavedIndicatorProps = {
1455
+ visible: boolean;
1456
+ label?: string;
1457
+ className?: string;
1458
+ };
1459
+ /**
1460
+ * UnsavedIndicator — small amber label shown when a form has unsaved changes.
1461
+ * Pair with StatefulSaveButton in a header or toolbar.
1462
+ */
1463
+ declare const UnsavedIndicator: ({ visible, label, className, }: UnsavedIndicatorProps) => react_jsx_runtime.JSX.Element | null;
1464
+
1465
+ type ConfirmationModalProps = {
1466
+ open: boolean;
1467
+ title?: string;
1468
+ message?: string;
1469
+ onStay: () => void;
1470
+ onDiscard?: () => void;
1471
+ onSave?: () => void;
1472
+ saving?: boolean;
1473
+ stayLabel?: string;
1474
+ discardLabel?: string;
1475
+ saveLabel?: string;
1476
+ /** Hide the Save button — for simple confirm/cancel flows. */
1477
+ hideSave?: boolean;
1478
+ };
1479
+ /**
1480
+ * ConfirmationModal — focused dialog for unsaved-changes guards or
1481
+ * destructive-action confirmation. Three actions: Stay (cancel) /
1482
+ * Discard (negative) / Save (primary). Set `hideSave` for binary confirm.
1483
+ *
1484
+ * Renders via `createPortal` into `document.body` so the dialog escapes
1485
+ * any clipping container (cards, sidebars, overflow:hidden ancestors).
1486
+ * Clicking the backdrop or pressing `Escape` calls `onStay`.
1487
+ */
1488
+ declare const ConfirmationModal: ({ open, title, message, onStay, onDiscard, onSave, saving, stayLabel, discardLabel, saveLabel, hideSave, }: ConfirmationModalProps) => react.ReactPortal | null;
1489
+
1490
+ type NotificationSeverity = 'crit' | 'warn' | 'info' | 'success';
1491
+ type NotificationsPanelProps = {
1492
+ /** Controlled open state. If omitted, the panel manages its own state. */
1493
+ open?: boolean;
1494
+ defaultOpen?: boolean;
1495
+ onOpenChange?: (open: boolean) => void;
1496
+ /** Which side of the trigger the panel anchors to. Default `right`. */
1497
+ align?: 'left' | 'right';
1498
+ children: ReactNode;
1499
+ };
1500
+ type NotificationsPanelTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick' | 'children'> & {
1501
+ /** Number to show in the badge. 0 hides the badge. Values > 9999 render as "9999+". */
1502
+ count?: number;
1503
+ /** When true, shows the BellOff icon and dims the badge ping animation. */
1504
+ muted?: boolean;
1505
+ /** When true, shows the ping animation around the badge. Default: count > 0 && !muted. */
1506
+ ping?: boolean;
1507
+ };
1508
+ type NotificationsPanelContentProps = {
1509
+ /** Tailwind width class. Default `w-96` (384px). */
1510
+ width?: string;
1511
+ className?: string;
1512
+ children: ReactNode;
1513
+ };
1514
+ type NotificationsPanelHeaderProps = {
1515
+ title: string;
1516
+ /** Right-side slot — pills, action buttons, etc. */
1517
+ children?: ReactNode;
1518
+ className?: string;
1519
+ };
1520
+ type NotificationsPanelCountersProps = {
1521
+ crit?: number;
1522
+ warn?: number;
1523
+ info?: number;
1524
+ };
1525
+ type NotificationsPanelHeaderActionProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1526
+ icon: ComponentType<{
1527
+ className?: string;
1528
+ }>;
1529
+ active?: boolean;
1530
+ };
1531
+ type NotificationsPanelListProps = {
1532
+ /** Optional max height. Default `max-h-96`. */
1533
+ maxHeight?: string;
1534
+ className?: string;
1535
+ children: ReactNode;
1536
+ };
1537
+ type NotificationsPanelItemProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1538
+ severity: NotificationSeverity;
1539
+ title: string;
1540
+ subtitle?: string;
1541
+ /** Small mono caption shown below the subtitle (e.g. check id, error code). */
1542
+ caption?: string;
1543
+ /** Right-side badge label. If omitted, derived from severity (CRIT/WARN/INFO/OK). */
1544
+ badgeLabel?: string;
1545
+ /** When true, the panel auto-closes after the item is clicked. Default true. */
1546
+ closeOnClick?: boolean;
1547
+ };
1548
+ type NotificationsPanelEmptyProps = {
1549
+ title?: string;
1550
+ subtitle?: string;
1551
+ icon?: ComponentType<{
1552
+ className?: string;
1553
+ }>;
1554
+ };
1555
+ type NotificationsPanelFooterProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1556
+ children: ReactNode;
1557
+ /** When true, the panel auto-closes after the footer is clicked. Default true. */
1558
+ closeOnClick?: boolean;
1559
+ };
1560
+ declare const NotificationsPanel: (({ open: openProp, defaultOpen, onOpenChange, align, children, }: NotificationsPanelProps) => react_jsx_runtime.JSX.Element) & {
1561
+ Trigger: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "onClick"> & {
1562
+ /** Number to show in the badge. 0 hides the badge. Values > 9999 render as "9999+". */
1563
+ count?: number;
1564
+ /** When true, shows the BellOff icon and dims the badge ping animation. */
1565
+ muted?: boolean;
1566
+ /** When true, shows the ping animation around the badge. Default: count > 0 && !muted. */
1567
+ ping?: boolean;
1568
+ } & react.RefAttributes<HTMLButtonElement>>;
1569
+ Content: ({ width, className, children, }: NotificationsPanelContentProps) => react.ReactPortal | null;
1570
+ Header: ({ title, children, className, }: NotificationsPanelHeaderProps) => react_jsx_runtime.JSX.Element;
1571
+ Counters: ({ crit, warn, info }: NotificationsPanelCountersProps) => react_jsx_runtime.JSX.Element;
1572
+ HeaderAction: react.ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
1573
+ icon: ComponentType<{
1574
+ className?: string;
1575
+ }>;
1576
+ active?: boolean;
1577
+ } & react.RefAttributes<HTMLButtonElement>>;
1578
+ List: ({ maxHeight, className, children, }: NotificationsPanelListProps) => react_jsx_runtime.JSX.Element;
1579
+ Item: react.ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
1580
+ severity: NotificationSeverity;
1581
+ title: string;
1582
+ subtitle?: string;
1583
+ /** Small mono caption shown below the subtitle (e.g. check id, error code). */
1584
+ caption?: string;
1585
+ /** Right-side badge label. If omitted, derived from severity (CRIT/WARN/INFO/OK). */
1586
+ badgeLabel?: string;
1587
+ /** When true, the panel auto-closes after the item is clicked. Default true. */
1588
+ closeOnClick?: boolean;
1589
+ } & react.RefAttributes<HTMLButtonElement>>;
1590
+ Empty: ({ title, subtitle, icon: Icon, }: NotificationsPanelEmptyProps) => react_jsx_runtime.JSX.Element;
1591
+ Footer: ({ children, closeOnClick, onClick, className, ...rest }: NotificationsPanelFooterProps) => react_jsx_runtime.JSX.Element;
1592
+ };
1593
+
1594
+ type NotificationIntent = 'success' | 'info' | 'error';
1595
+ type NotificationCardSimpleProps = {
1596
+ /** Primary text (TUI: text-sm font-medium text-gray-900). */
1597
+ title: ReactNode;
1598
+ /** Secondary text under the title. */
1599
+ description?: ReactNode;
1600
+ /** Visual intent for the leading icon. Default `success`. */
1601
+ intent?: NotificationIntent;
1602
+ /** Override the icon entirely (replaces the intent-derived one). */
1603
+ icon?: LucideIcon;
1604
+ /** When provided, renders an X button that calls this on click. */
1605
+ onDismiss?: () => void;
1606
+ className?: string;
1607
+ };
1608
+ type NotificationCardCondensedProps = {
1609
+ /** Primary text shown on the left. */
1610
+ title: ReactNode;
1611
+ /** Inline action label (e.g., "Undo") — rendered as a link-styled button. */
1612
+ actionLabel?: ReactNode;
1613
+ /** Called when the action is clicked. Required when `actionLabel` is set. */
1614
+ onAction?: () => void;
1615
+ /** When provided, renders a trailing X button. */
1616
+ onDismiss?: () => void;
1617
+ className?: string;
1618
+ };
1619
+ declare const NotificationCard: (({ title, description, intent, icon, onDismiss, className, }: NotificationCardSimpleProps) => react_jsx_runtime.JSX.Element) & {
1620
+ Simple: ({ title, description, intent, icon, onDismiss, className, }: NotificationCardSimpleProps) => react_jsx_runtime.JSX.Element;
1621
+ Condensed: ({ title, actionLabel, onAction, onDismiss, className, }: NotificationCardCondensedProps) => react_jsx_runtime.JSX.Element;
1622
+ };
1623
+
1624
+ type UserMenuProps = {
1625
+ open?: boolean;
1626
+ defaultOpen?: boolean;
1627
+ onOpenChange?: (open: boolean) => void;
1628
+ /** Side of the trigger the menu anchors to. Default `right`. */
1629
+ align?: 'left' | 'right';
1630
+ children: ReactNode;
1631
+ };
1632
+ type UserMenuTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick' | 'children'> & {
1633
+ /** Display name shown next to the avatar. Also used for initials fallback. */
1634
+ name: string;
1635
+ /** Avatar image URL. Falls back to initials of `name`. */
1636
+ avatarSrc?: string;
1637
+ /** Hide the textual name (icon-only trigger). Useful on small viewports. */
1638
+ hideName?: boolean;
1639
+ };
1640
+ type UserMenuContentProps = {
1641
+ /** Tailwind width class. Default `w-56` (224px). */
1642
+ width?: string;
1643
+ className?: string;
1644
+ children: ReactNode;
1645
+ };
1646
+ type UserMenuHeaderProps = {
1647
+ name: string;
1648
+ email?: string;
1649
+ avatarSrc?: string;
1650
+ className?: string;
1651
+ };
1652
+ type UserMenuItemVariant = 'default' | 'danger';
1653
+ type UserMenuItemProps = ButtonHTMLAttributes<HTMLButtonElement> & {
1654
+ icon?: ComponentType<{
1655
+ className?: string;
1656
+ }>;
1657
+ variant?: UserMenuItemVariant;
1658
+ /** Auto-close the menu after click. Default true. */
1659
+ closeOnClick?: boolean;
1660
+ };
1661
+ declare const UserMenu: (({ open: openProp, defaultOpen, onOpenChange, align, children, }: UserMenuProps) => react_jsx_runtime.JSX.Element) & {
1662
+ Trigger: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "onClick"> & {
1663
+ /** Display name shown next to the avatar. Also used for initials fallback. */
1664
+ name: string;
1665
+ /** Avatar image URL. Falls back to initials of `name`. */
1666
+ avatarSrc?: string;
1667
+ /** Hide the textual name (icon-only trigger). Useful on small viewports. */
1668
+ hideName?: boolean;
1669
+ } & react.RefAttributes<HTMLButtonElement>>;
1670
+ Content: ({ width, className, children }: UserMenuContentProps) => react.ReactPortal | null;
1671
+ Header: ({ name, email, avatarSrc, className }: UserMenuHeaderProps) => react_jsx_runtime.JSX.Element;
1672
+ Items: ({ children }: {
1673
+ children: ReactNode;
1674
+ }) => react_jsx_runtime.JSX.Element;
1675
+ Item: react.ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
1676
+ icon?: ComponentType<{
1677
+ className?: string;
1678
+ }>;
1679
+ variant?: UserMenuItemVariant;
1680
+ /** Auto-close the menu after click. Default true. */
1681
+ closeOnClick?: boolean;
1682
+ } & react.RefAttributes<HTMLButtonElement>>;
1683
+ Separator: () => react_jsx_runtime.JSX.Element;
1684
+ };
1685
+
1686
+ type ThemeToggleSize = 'sm' | 'md';
1687
+ type ThemeToggleProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> & {
1688
+ /** Current theme state. `true` = dark mode active (Sun shown to switch back to light). */
1689
+ isDark: boolean;
1690
+ /** Called when the user toggles the theme. */
1691
+ onToggle: () => void;
1692
+ /** Visual size. `md` (default) = 40px, `sm` = 32px. */
1693
+ size?: ThemeToggleSize;
1694
+ /** Override the button title (also used as aria-label). */
1695
+ lightLabel?: string;
1696
+ darkLabel?: string;
1697
+ };
1698
+ declare const ThemeToggle: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onClick"> & {
1699
+ /** Current theme state. `true` = dark mode active (Sun shown to switch back to light). */
1700
+ isDark: boolean;
1701
+ /** Called when the user toggles the theme. */
1702
+ onToggle: () => void;
1703
+ /** Visual size. `md` (default) = 40px, `sm` = 32px. */
1704
+ size?: ThemeToggleSize;
1705
+ /** Override the button title (also used as aria-label). */
1706
+ lightLabel?: string;
1707
+ darkLabel?: string;
1708
+ } & react.RefAttributes<HTMLButtonElement>>;
1709
+
1710
+ type ThemeToggleTriSize = 'sm' | 'md';
1711
+ type ThemeMode = 'light' | 'dark' | 'oled';
1712
+ type ThemeToggleTriProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick' | 'onChange'> & {
1713
+ /** Current theme. */
1714
+ theme: ThemeMode;
1715
+ /** Called with the next theme in the cycle (light → dark → oled → light). */
1716
+ onChange: (next: ThemeMode) => void;
1717
+ /** Visual size. `md` (default) = 40px, `sm` = 32px. */
1718
+ size?: ThemeToggleTriSize;
1719
+ /** Label used when the next click will switch to light mode. */
1720
+ lightLabel?: string;
1721
+ /** Label used when the next click will switch to dark mode. */
1722
+ darkLabel?: string;
1723
+ /** Label used when the next click will switch to OLED mode. */
1724
+ oledLabel?: string;
1725
+ };
1726
+ declare const ThemeToggleTri: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange" | "onClick"> & {
1727
+ /** Current theme. */
1728
+ theme: ThemeMode;
1729
+ /** Called with the next theme in the cycle (light → dark → oled → light). */
1730
+ onChange: (next: ThemeMode) => void;
1731
+ /** Visual size. `md` (default) = 40px, `sm` = 32px. */
1732
+ size?: ThemeToggleTriSize;
1733
+ /** Label used when the next click will switch to light mode. */
1734
+ lightLabel?: string;
1735
+ /** Label used when the next click will switch to dark mode. */
1736
+ darkLabel?: string;
1737
+ /** Label used when the next click will switch to OLED mode. */
1738
+ oledLabel?: string;
1739
+ } & react.RefAttributes<HTMLButtonElement>>;
1740
+
1741
+ type ButtonGroupOrientation = 'horizontal' | 'vertical';
1742
+ type ButtonGroupProps = {
1743
+ /** Stacking direction. Default `horizontal`. */
1744
+ orientation?: ButtonGroupOrientation;
1745
+ /** Render as attached (shared border, rounded only on outer edges). Default `true`. */
1746
+ attached?: boolean;
1747
+ /** Gap between buttons when `attached={false}`. Tailwind size token. Default `gap-2`. */
1748
+ gap?: string;
1749
+ className?: string;
1750
+ children: ReactNode;
1751
+ };
1752
+ /**
1753
+ * ButtonGroup — wraps `<Button>` (or any button-like) children to render
1754
+ * them as a connected segment row/column. The wrapper applies CSS
1755
+ * selectors so the inner buttons keep their own variant/size/icon props.
1756
+ *
1757
+ * Patterns: period selectors (Day/Week/Month), toolbars, paginators,
1758
+ * grouped actions (Save/Delete).
1759
+ */
1760
+ declare const ButtonGroup: ({ orientation, attached, gap, className, children, }: ButtonGroupProps) => react_jsx_runtime.JSX.Element;
1761
+
1762
+ type CarouselOptions = Parameters<typeof useEmblaCarousel>[0];
1763
+ type CarouselProps = {
1764
+ /** Embla options forwarded to the hook (loop, align, slidesToScroll, …). */
1765
+ options?: CarouselOptions;
1766
+ /** Auto-advance. Pass `true` for default 4 s, or a number (ms). */
1767
+ autoplay?: boolean | number;
1768
+ /** Pause autoplay on user interaction. Default `true`. */
1769
+ stopOnInteraction?: boolean;
1770
+ className?: string;
1771
+ children: ReactNode;
1772
+ };
1773
+ declare const CarouselRoot: ({ options, autoplay, stopOnInteraction, className, children, }: CarouselProps) => react_jsx_runtime.JSX.Element;
1774
+ type CarouselViewportProps = {
1775
+ children: ReactNode;
1776
+ className?: string;
1777
+ };
1778
+ type CarouselSlideProps = {
1779
+ /** Slide width as a Tailwind class. Default `basis-full` (one per view). */
1780
+ basis?: string;
1781
+ className?: string;
1782
+ children: ReactNode;
1783
+ };
1784
+ type CarouselControlsProps = {
1785
+ /** Place buttons. `inside` overlays them on the viewport edges; `outside` puts them above the indicators. Default `inside`. */
1786
+ position?: 'inside' | 'outside';
1787
+ className?: string;
1788
+ prevLabel?: string;
1789
+ nextLabel?: string;
1790
+ };
1791
+ type CarouselIndicatorsProps = {
1792
+ className?: string;
1793
+ };
1794
+ declare const Carousel: (({ options, autoplay, stopOnInteraction, className, children, }: CarouselProps) => react_jsx_runtime.JSX.Element) & {
1795
+ Viewport: ({ children, className }: CarouselViewportProps) => react_jsx_runtime.JSX.Element;
1796
+ Slide: ({ basis, className, children }: CarouselSlideProps) => react_jsx_runtime.JSX.Element;
1797
+ Controls: ({ position, className, prevLabel, nextLabel, }: CarouselControlsProps) => react_jsx_runtime.JSX.Element;
1798
+ Indicators: ({ className }: CarouselIndicatorsProps) => react_jsx_runtime.JSX.Element;
1799
+ };
1800
+
1801
+ type PopoverPosition = 'top' | 'bottom' | 'left' | 'right';
1802
+ type PopoverProps = {
1803
+ open?: boolean;
1804
+ defaultOpen?: boolean;
1805
+ onOpenChange?: (open: boolean) => void;
1806
+ children: ReactNode;
1807
+ };
1808
+ type PopoverTriggerProps = ButtonHTMLAttributes<HTMLButtonElement>;
1809
+ type PopoverContentProps = {
1810
+ position?: PopoverPosition;
1811
+ /** Distance from the trigger edge in px. Default 8. */
1812
+ offset?: number;
1813
+ /** Show a small arrow pointing to the trigger. Default false. */
1814
+ arrow?: boolean;
1815
+ /** Tailwind width class. Default `w-64`. */
1816
+ width?: string;
1817
+ className?: string;
1818
+ children: ReactNode;
1819
+ };
1820
+ declare const Popover: (({ open: openProp, defaultOpen, onOpenChange, children, }: PopoverProps) => react_jsx_runtime.JSX.Element) & {
1821
+ Trigger: react.ForwardRefExoticComponent<PopoverTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1822
+ Content: ({ position, offset, arrow, width, className, children, }: PopoverContentProps) => react.ReactPortal | null;
1823
+ };
1824
+
1825
+ type ProgressBarSize = 'xs' | 'sm' | 'md' | 'lg';
1826
+ type ProgressBarIntent = 'brand' | 'success' | 'warning' | 'danger';
1827
+ type ProgressBarLabel = 'none' | 'inside' | 'outside';
1828
+ type ProgressBarProps = {
1829
+ value?: number;
1830
+ max?: number;
1831
+ size?: ProgressBarSize;
1832
+ intent?: ProgressBarIntent;
1833
+ /** Where to render the % label. `inside` requires `lg` size. Default `none`. */
1834
+ label?: ProgressBarLabel;
1835
+ /** Replace the auto-computed % with custom content. */
1836
+ labelContent?: ReactNode;
1837
+ /** Animated diagonal stripes pattern over the filled bar. */
1838
+ striped?: boolean;
1839
+ /** Loop a small bar across the container when total progress is unknown. */
1840
+ indeterminate?: boolean;
1841
+ className?: string;
1842
+ };
1843
+ declare const ProgressBar: ({ value, max, size, intent, label, labelContent, striped, indeterminate, className, }: ProgressBarProps) => react_jsx_runtime.JSX.Element;
1844
+
1845
+ type RibbonPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
1846
+ type RibbonIntent = 'brand' | 'success' | 'warning' | 'danger' | 'neutral';
1847
+ type RibbonShape = 'flat' | 'angled';
1848
+ type RibbonProps = {
1849
+ /** Corner of the parent to anchor to. Parent must be `position: relative` (and `overflow-hidden` for `angled`). */
1850
+ position?: RibbonPosition;
1851
+ intent?: RibbonIntent;
1852
+ /** `flat` = rectangle hugging the corner. `angled` = 45° diagonal banner across the corner. */
1853
+ shape?: RibbonShape;
1854
+ children: ReactNode;
1855
+ className?: string;
1856
+ };
1857
+ declare const Ribbon: ({ position, intent, shape, children, className, }: RibbonProps) => react_jsx_runtime.JSX.Element;
1858
+
1859
+ type LinkVariant = 'colored' | 'underline' | 'opacity' | 'opacity-hover' | 'subtle';
1860
+ type LinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
1861
+ variant?: LinkVariant;
1862
+ /** When true, opens in a new tab with safe rel attrs and renders an external icon. */
1863
+ external?: boolean;
1864
+ /** Hide the auto-added external icon when `external` is true. */
1865
+ hideExternalIcon?: boolean;
1866
+ children?: ReactNode;
1867
+ };
1868
+ declare const Link: react.ForwardRefExoticComponent<AnchorHTMLAttributes<HTMLAnchorElement> & {
1869
+ variant?: LinkVariant;
1870
+ /** When true, opens in a new tab with safe rel attrs and renders an external icon. */
1871
+ external?: boolean;
1872
+ /** Hide the auto-added external icon when `external` is true. */
1873
+ hideExternalIcon?: boolean;
1874
+ children?: ReactNode;
1875
+ } & react.RefAttributes<HTMLAnchorElement>>;
1876
+
1877
+ type ListVariant = 'unordered' | 'ordered' | 'plain';
1878
+ type ListMarker = 'disc' | 'check' | 'arrow' | 'dot' | 'none';
1879
+ type ListSpacing = 'tight' | 'normal' | 'loose';
1880
+ type ListOrientation = 'vertical' | 'horizontal';
1881
+ type ListProps = {
1882
+ variant?: ListVariant;
1883
+ /** Marker style (only applies when `variant="unordered"`). Default `disc`. */
1884
+ marker?: ListMarker;
1885
+ spacing?: ListSpacing;
1886
+ orientation?: ListOrientation;
1887
+ className?: string;
1888
+ children: ReactNode;
1889
+ };
1890
+ type ListItemProps = {
1891
+ /** Override the parent marker for this single item. */
1892
+ icon?: ComponentType<{
1893
+ className?: string;
1894
+ }>;
1895
+ /** Override the icon color (Tailwind class). Default depends on the marker. */
1896
+ iconColor?: string;
1897
+ className?: string;
1898
+ children: ReactNode;
1899
+ };
1900
+ declare const List: (({ variant, marker, spacing, orientation, className, children, }: ListProps) => react_jsx_runtime.JSX.Element) & {
1901
+ Item: ({ icon, iconColor, className, children }: ListItemProps) => react_jsx_runtime.JSX.Element;
1902
+ };
1903
+
1904
+ type AccordionProps = ComponentPropsWithoutRef<typeof RadixAccordion.Root> & {
1905
+ /** Visual variant. `bordered` (default) wraps each item in a border; `seamless` strips borders for a tighter look. */
1906
+ appearance?: 'bordered' | 'seamless';
1907
+ };
1908
+ type AccordionItemProps = ComponentPropsWithoutRef<typeof RadixAccordion.Item>;
1909
+ type AccordionTriggerProps = ComponentPropsWithoutRef<typeof RadixAccordion.Trigger> & {
1910
+ children: ReactNode;
1911
+ /** Hide the chevron indicator. Default `false`. */
1912
+ hideChevron?: boolean;
1913
+ };
1914
+ type AccordionContentProps = ComponentPropsWithoutRef<typeof RadixAccordion.Content>;
1915
+ declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>> & {
1916
+ Item: react.ForwardRefExoticComponent<Omit<RadixAccordion.AccordionItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
1917
+ Trigger: react.ForwardRefExoticComponent<Omit<RadixAccordion.AccordionTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & {
1918
+ children: ReactNode;
1919
+ /** Hide the chevron indicator. Default `false`. */
1920
+ hideChevron?: boolean;
1921
+ } & react.RefAttributes<HTMLButtonElement>>;
1922
+ Content: react.ForwardRefExoticComponent<Omit<RadixAccordion.AccordionContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
1923
+ };
1924
+
1925
+ type ImageGridGap = 'sm' | 'md' | 'lg';
1926
+ type ImageGridColumns = 1 | 2 | 3 | 4 | {
1927
+ sm?: 1 | 2 | 3 | 4;
1928
+ md?: 1 | 2 | 3 | 4;
1929
+ lg?: 1 | 2 | 3 | 4;
1930
+ };
1931
+ type ImageGridProps = {
1932
+ /** Number of columns (static) or per-breakpoint object. Default 3. */
1933
+ columns?: ImageGridColumns;
1934
+ gap?: ImageGridGap;
1935
+ /** Tailwind aspect-* class applied to each cell. Default `aspect-square`. */
1936
+ aspectRatio?: string;
1937
+ /** Round each cell. Default `true`. */
1938
+ rounded?: boolean;
1939
+ className?: string;
1940
+ children: ReactNode;
1941
+ };
1942
+ declare const ImageGrid: ({ columns, gap, aspectRatio, rounded, className, children, }: ImageGridProps) => react_jsx_runtime.JSX.Element;
1943
+
1944
+ type VideoEmbedAspect = '16:9' | '4:3' | '1:1' | '21:9' | (string & {});
1945
+ type VideoEmbedProps = {
1946
+ src: string;
1947
+ /** Required for a11y — title of the embedded video. */
1948
+ title: string;
1949
+ /** Aspect ratio. Either a preset (`16:9`, `4:3`, `1:1`, `21:9`) or any Tailwind aspect-* class. */
1950
+ aspectRatio?: VideoEmbedAspect;
1951
+ /** Render with rounded corners. Default `true`. */
1952
+ rounded?: boolean;
1953
+ /** Embed type. `iframe` (default — YouTube, Vimeo, …) or `video` (native HTML5 file). */
1954
+ type?: 'iframe' | 'video';
1955
+ /** Pass-through to the underlying element (iframe `allow`, video `muted`/`autoPlay`/`loop`/`controls`/`poster`). */
1956
+ allow?: string;
1957
+ muted?: boolean;
1958
+ autoPlay?: boolean;
1959
+ loop?: boolean;
1960
+ controls?: boolean;
1961
+ poster?: string;
1962
+ className?: string;
1963
+ };
1964
+ declare const VideoEmbed: ({ src, title, aspectRatio, rounded, type, allow, muted, autoPlay, loop, controls, poster, className, }: VideoEmbedProps) => react_jsx_runtime.JSX.Element;
1965
+
1966
+ /**
1967
+ * Cosmos toast — thin wrapper around sonner.
1968
+ *
1969
+ * Mount the `<Toaster />` once at the app root. Trigger toasts from anywhere
1970
+ * with `toast(...)`, `toast.success(...)`, `toast.error(...)`, `toast.promise(...)`.
1971
+ *
1972
+ * Cosmos defaults: bottom-right, system theme, rich-colors on, close button on.
1973
+ * Override per-instance by passing props.
1974
+ */
1975
+ type CosmosToasterProps = ToasterProps;
1976
+ declare const Toaster: (props: CosmosToasterProps) => react_jsx_runtime.JSX.Element;
1977
+
1978
+ type AnnouncementBarIntent = 'info' | 'success' | 'warning' | 'danger' | 'brand';
1979
+ type AnnouncementBarProps = {
1980
+ intent?: AnnouncementBarIntent;
1981
+ /** Override the default icon for the intent. Pass `null` to hide. */
1982
+ icon?: ElementType | null;
1983
+ message: ReactNode;
1984
+ /** Right-side slot — a Link, Button, etc. */
1985
+ action?: ReactNode;
1986
+ /** Render a close button. */
1987
+ dismissible?: boolean;
1988
+ /** Called when the user clicks close. */
1989
+ onDismiss?: () => void;
1990
+ /** Stick to the top of the viewport. */
1991
+ sticky?: boolean;
1992
+ className?: string;
1993
+ };
1994
+ declare const AnnouncementBar: ({ intent, icon, message, action, dismissible, onDismiss, sticky, className, }: AnnouncementBarProps) => react_jsx_runtime.JSX.Element | null;
1995
+
1996
+ type CookieBannerPosition = 'bottom' | 'top' | 'floating';
1997
+ type CookieBannerProps = {
1998
+ open?: boolean;
1999
+ defaultOpen?: boolean;
2000
+ onOpenChange?: (open: boolean) => void;
2001
+ position?: CookieBannerPosition;
2002
+ title?: string;
2003
+ message: ReactNode;
2004
+ /** Render the Settings button. Hidden if no handler. */
2005
+ onSettings?: () => void;
2006
+ settingsLabel?: string;
2007
+ /** Render the Deny All button. Hidden if no handler. */
2008
+ onDeny?: () => void;
2009
+ denyLabel?: string;
2010
+ /** Required Accept handler — primary action. */
2011
+ onAccept: () => void;
2012
+ acceptLabel?: string;
2013
+ /** Show the Cookie icon next to the title. Default `true`. */
2014
+ showIcon?: boolean;
2015
+ className?: string;
2016
+ };
2017
+ declare const CookieBanner: ({ open: openProp, defaultOpen, onOpenChange, position, title, message, onSettings, settingsLabel, onDeny, denyLabel, onAccept, acceptLabel, showIcon, className, }: CookieBannerProps) => react_jsx_runtime.JSX.Element | null;
2018
+
2019
+ type CommandPaletteProps = ComponentPropsWithoutRef<typeof Command.Dialog> & {
2020
+ /**
2021
+ * Optional global hotkey that toggles the palette open/closed when the
2022
+ * matching keyboard combination is pressed. Common values: `'mod+k'`
2023
+ * (Cmd on macOS, Ctrl elsewhere), `'mod+shift+p'`, `'/'`. Pass `null`
2024
+ * to skip registering a hotkey.
2025
+ */
2026
+ hotkey?: 'mod+k' | 'mod+/' | '/' | string | null;
2027
+ };
2028
+ type CommandPaletteInputProps = ComponentPropsWithoutRef<typeof Command.Input>;
2029
+ type CommandPaletteListProps = ComponentPropsWithoutRef<typeof Command.List>;
2030
+ type CommandPaletteGroupProps = ComponentPropsWithoutRef<typeof Command.Group>;
2031
+ type CommandPaletteItemProps = Omit<ComponentPropsWithoutRef<typeof Command.Item>, 'children'> & {
2032
+ icon?: ElementType;
2033
+ /** Right-aligned keyboard shortcut hint (e.g. "⌘D"). */
2034
+ shortcut?: ReactNode;
2035
+ children: ReactNode;
2036
+ };
2037
+ type CommandPaletteFooterProps = {
2038
+ className?: string;
2039
+ children: ReactNode;
2040
+ };
2041
+ declare const CommandPalette: (({ hotkey, open, onOpenChange, className, overlayClassName, contentClassName, children, label, ...rest }: CommandPaletteProps) => react_jsx_runtime.JSX.Element) & {
2042
+ Input: react.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "key" | keyof react.InputHTMLAttributes<HTMLInputElement>> & {
2043
+ ref?: React.Ref<HTMLInputElement>;
2044
+ } & {
2045
+ asChild?: boolean;
2046
+ }, "key" | "asChild" | keyof react.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "value" | "type"> & {
2047
+ value?: string;
2048
+ onValueChange?: (search: string) => void;
2049
+ } & react.RefAttributes<HTMLInputElement>, "ref"> & react.RefAttributes<HTMLInputElement>>;
2050
+ List: react.ForwardRefExoticComponent<Omit<{
2051
+ children?: React.ReactNode;
2052
+ } & Pick<Pick<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof react.HTMLAttributes<HTMLDivElement> | "key"> & {
2053
+ ref?: React.Ref<HTMLDivElement>;
2054
+ } & {
2055
+ asChild?: boolean;
2056
+ }, keyof react.HTMLAttributes<HTMLDivElement> | "key" | "asChild"> & {
2057
+ label?: string;
2058
+ } & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
2059
+ Group: react.ForwardRefExoticComponent<Omit<{
2060
+ children?: React.ReactNode;
2061
+ } & Omit<Pick<Pick<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof react.HTMLAttributes<HTMLDivElement> | "key"> & {
2062
+ ref?: React.Ref<HTMLDivElement>;
2063
+ } & {
2064
+ asChild?: boolean;
2065
+ }, keyof react.HTMLAttributes<HTMLDivElement> | "key" | "asChild">, "heading" | "value"> & {
2066
+ heading?: React.ReactNode;
2067
+ value?: string;
2068
+ forceMount?: boolean;
2069
+ } & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
2070
+ Item: react.ForwardRefExoticComponent<Omit<Omit<{
2071
+ children?: React.ReactNode;
2072
+ } & Omit<Pick<Pick<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof react.HTMLAttributes<HTMLDivElement> | "key"> & {
2073
+ ref?: React.Ref<HTMLDivElement>;
2074
+ } & {
2075
+ asChild?: boolean;
2076
+ }, keyof react.HTMLAttributes<HTMLDivElement> | "key" | "asChild">, "onSelect" | "disabled" | "value"> & {
2077
+ disabled?: boolean;
2078
+ onSelect?: (value: string) => void;
2079
+ value?: string;
2080
+ keywords?: string[];
2081
+ forceMount?: boolean;
2082
+ } & react.RefAttributes<HTMLDivElement>, "ref">, "children"> & {
2083
+ icon?: ElementType;
2084
+ /** Right-aligned keyboard shortcut hint (e.g. "⌘D"). */
2085
+ shortcut?: ReactNode;
2086
+ children: ReactNode;
2087
+ } & react.RefAttributes<HTMLDivElement>>;
2088
+ Separator: react.ForwardRefExoticComponent<Omit<Pick<Pick<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof react.HTMLAttributes<HTMLDivElement> | "key"> & {
2089
+ ref?: React.Ref<HTMLDivElement>;
2090
+ } & {
2091
+ asChild?: boolean;
2092
+ }, keyof react.HTMLAttributes<HTMLDivElement> | "key" | "asChild"> & {
2093
+ alwaysRender?: boolean;
2094
+ } & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
2095
+ Empty: react.ForwardRefExoticComponent<Omit<{
2096
+ children?: React.ReactNode;
2097
+ } & Pick<Pick<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof react.HTMLAttributes<HTMLDivElement> | "key"> & {
2098
+ ref?: React.Ref<HTMLDivElement>;
2099
+ } & {
2100
+ asChild?: boolean;
2101
+ }, keyof react.HTMLAttributes<HTMLDivElement> | "key" | "asChild"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
2102
+ Loading: react.ForwardRefExoticComponent<Omit<{
2103
+ children?: React.ReactNode;
2104
+ } & Pick<Pick<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof react.HTMLAttributes<HTMLDivElement> | "key"> & {
2105
+ ref?: React.Ref<HTMLDivElement>;
2106
+ } & {
2107
+ asChild?: boolean;
2108
+ }, keyof react.HTMLAttributes<HTMLDivElement> | "key" | "asChild"> & {
2109
+ progress?: number;
2110
+ label?: string;
2111
+ } & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
2112
+ Footer: ({ className, children }: CommandPaletteFooterProps) => react_jsx_runtime.JSX.Element;
2113
+ };
2114
+
2115
+ type ClipboardVariant = 'icon' | 'button';
2116
+ type ClipboardSize = 'sm' | 'md';
2117
+ type ClipboardProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onCopy'> & {
2118
+ /** Text written to the clipboard on click. */
2119
+ value: string;
2120
+ /** `icon` (default) → square icon-only button. `button` → icon + label. */
2121
+ variant?: ClipboardVariant;
2122
+ size?: ClipboardSize;
2123
+ /** Override the label (only shown when `variant="button"`). */
2124
+ copyLabel?: string;
2125
+ copiedLabel?: string;
2126
+ /** Milliseconds the "copied" state stays visible. Default 1500. */
2127
+ duration?: number;
2128
+ /** Fires after the value is copied. */
2129
+ onCopy?: (value: string) => void;
2130
+ /**
2131
+ * Style for floating on top of a code block (translucent bg, hover-revealed
2132
+ * via parent's `group` class). Pair with a `group` parent and absolute
2133
+ * positioning. Default `false`.
2134
+ */
2135
+ floating?: boolean;
2136
+ };
2137
+ declare const Clipboard: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onCopy"> & {
2138
+ /** Text written to the clipboard on click. */
2139
+ value: string;
2140
+ /** `icon` (default) → square icon-only button. `button` → icon + label. */
2141
+ variant?: ClipboardVariant;
2142
+ size?: ClipboardSize;
2143
+ /** Override the label (only shown when `variant="button"`). */
2144
+ copyLabel?: string;
2145
+ copiedLabel?: string;
2146
+ /** Milliseconds the "copied" state stays visible. Default 1500. */
2147
+ duration?: number;
2148
+ /** Fires after the value is copied. */
2149
+ onCopy?: (value: string) => void;
2150
+ /**
2151
+ * Style for floating on top of a code block (translucent bg, hover-revealed
2152
+ * via parent's `group` class). Pair with a `group` parent and absolute
2153
+ * positioning. Default `false`.
2154
+ */
2155
+ floating?: boolean;
2156
+ } & react.RefAttributes<HTMLButtonElement>>;
2157
+
2158
+ type BackToTopFabPosition = 'bottom-right' | 'bottom-left';
2159
+ type BackToTopFabIntent = 'brand' | 'neutral';
2160
+ type BackToTopFabProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> & {
2161
+ /** Pixels of vertical scroll before the FAB fades in. Default `300`. */
2162
+ threshold?: number;
2163
+ /** Anchor corner. Default `bottom-right`. */
2164
+ position?: BackToTopFabPosition;
2165
+ /** Use smooth scrolling. Default `true`. */
2166
+ smoothScroll?: boolean;
2167
+ /** Override the icon. Default `ArrowUp`. */
2168
+ icon?: ComponentType<{
2169
+ className?: string;
2170
+ }>;
2171
+ /** Visual intent. Default `brand` (filled brand-500). `neutral` is gray. */
2172
+ intent?: BackToTopFabIntent;
2173
+ /** Override the click handler — defaults to `window.scrollTo({ top: 0 })`. */
2174
+ onActivate?: () => void;
2175
+ /** Distance from the viewport edges in px. Default `24`. */
2176
+ offset?: number;
2177
+ ariaLabel?: string;
2178
+ };
2179
+ declare const BackToTopFab: ({ threshold, position, smoothScroll, icon: Icon, intent, onActivate, offset, ariaLabel, className, style, ...rest }: BackToTopFabProps) => react_jsx_runtime.JSX.Element;
2180
+
2181
+ type HelpOverlayProps = {
2182
+ /** Controlled open state. Omit to use the internal hotkey-driven state. */
2183
+ open?: boolean;
2184
+ /** Called when the overlay opens or closes (controlled or uncontrolled). */
2185
+ onOpenChange?: (open: boolean) => void;
2186
+ /**
2187
+ * Global hotkey that toggles the overlay. Defaults to `'?'`. Pass `null`
2188
+ * to skip registering a hotkey (controlled-only usage).
2189
+ */
2190
+ hotkey?: string | null;
2191
+ /** Header title. Defaults to `'Keyboard shortcuts'`. */
2192
+ title?: ReactNode;
2193
+ /** Optional descriptive subtitle below the title. */
2194
+ description?: ReactNode;
2195
+ /** Footer hint text. Defaults to `Press Esc to close`. */
2196
+ footer?: ReactNode;
2197
+ className?: string;
2198
+ children: ReactNode;
2199
+ };
2200
+ type HelpOverlaySectionProps = {
2201
+ title: ReactNode;
2202
+ className?: string;
2203
+ children: ReactNode;
2204
+ };
2205
+ type HelpOverlayShortcutProps = {
2206
+ /**
2207
+ * Either a single combo (`'mod+k'`) or a sequence of combos to press in
2208
+ * order (`['g', 'h']`). For chord display, separate parts with `+`
2209
+ * inside each string.
2210
+ */
2211
+ keys: string | string[];
2212
+ description: ReactNode;
2213
+ className?: string;
2214
+ };
2215
+ declare const HelpOverlay: (({ open: controlledOpen, onOpenChange, hotkey, title, description, footer, className, children, }: HelpOverlayProps) => react_jsx_runtime.JSX.Element | null) & {
2216
+ Section: ({ title, className, children }: HelpOverlaySectionProps) => react_jsx_runtime.JSX.Element;
2217
+ Shortcut: ({ keys, description, className }: HelpOverlayShortcutProps) => react_jsx_runtime.JSX.Element;
2218
+ };
2219
+
2220
+ type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> & {
2221
+ label?: string;
2222
+ description?: string;
2223
+ error?: string;
2224
+ /** Optional left icon (lucide-react). Ignored when `prefix` is set. */
2225
+ icon?: ElementType;
2226
+ /** Optional right slot — e.g. unit suffix, validation pill. Ignored when `suffix` is set. */
2227
+ rightSlot?: ReactNode;
2228
+ /** Slot rendered next to the label text (e.g. a TooltipHelp). */
2229
+ labelTrailing?: ReactNode;
2230
+ /** Attached prefix addon (e.g. `https://`, `€`, `@`). Renders as a bordered group. */
2231
+ prefix?: ReactNode;
2232
+ /** Attached suffix addon (e.g. `.com`, `kg`). Renders as a bordered group. */
2233
+ suffix?: ReactNode;
2234
+ };
2235
+ declare const Input: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "size"> & {
2236
+ label?: string;
2237
+ description?: string;
2238
+ error?: string;
2239
+ /** Optional left icon (lucide-react). Ignored when `prefix` is set. */
2240
+ icon?: ElementType;
2241
+ /** Optional right slot — e.g. unit suffix, validation pill. Ignored when `suffix` is set. */
2242
+ rightSlot?: ReactNode;
2243
+ /** Slot rendered next to the label text (e.g. a TooltipHelp). */
2244
+ labelTrailing?: ReactNode;
2245
+ /** Attached prefix addon (e.g. `https://`, `€`, `@`). Renders as a bordered group. */
2246
+ prefix?: ReactNode;
2247
+ /** Attached suffix addon (e.g. `.com`, `kg`). Renders as a bordered group. */
2248
+ suffix?: ReactNode;
2249
+ } & react.RefAttributes<HTMLInputElement>>;
2250
+
2251
+ type SearchInputProps = {
2252
+ value: string;
2253
+ onChange: (v: string) => void;
2254
+ placeholder?: string;
2255
+ className?: string;
2256
+ };
2257
+ declare const SearchInput: ({ value, onChange, placeholder, className, }: SearchInputProps) => react_jsx_runtime.JSX.Element;
2258
+
2259
+ type SelectOption = {
2260
+ value: string;
2261
+ label: string;
2262
+ disabled?: boolean;
2263
+ };
2264
+ type SelectProps = Omit<SelectHTMLAttributes<HTMLSelectElement>, 'children'> & {
2265
+ options: SelectOption[];
2266
+ label?: string;
2267
+ description?: string;
2268
+ error?: string;
2269
+ };
2270
+ declare const Select: react.ForwardRefExoticComponent<Omit<SelectHTMLAttributes<HTMLSelectElement>, "children"> & {
2271
+ options: SelectOption[];
2272
+ label?: string;
2273
+ description?: string;
2274
+ error?: string;
2275
+ } & react.RefAttributes<HTMLSelectElement>>;
2276
+
2277
+ type ToggleProps = {
2278
+ checked: boolean;
2279
+ onChange: (checked: boolean) => void;
2280
+ disabled?: boolean;
2281
+ label?: string;
2282
+ description?: string;
2283
+ };
2284
+ declare const Toggle: ({ checked, onChange, disabled, label, description, }: ToggleProps) => react_jsx_runtime.JSX.Element;
2285
+
2286
+ type FilterOption<T extends string = string> = {
2287
+ label: string;
2288
+ value: T;
2289
+ };
2290
+ type FilterPillsProps<T extends string = string> = {
2291
+ options: FilterOption<T>[];
2292
+ value: T;
2293
+ onChange: (v: T) => void;
2294
+ icon?: ElementType;
2295
+ /**
2296
+ * Stretch the pill group to fill its parent (`flex w-full`). Default
2297
+ * `false` — the group sizes to its content (pill labels + optional icon).
2298
+ */
2299
+ fullWidth?: boolean;
2300
+ className?: string;
2301
+ };
2302
+ declare const FilterPills: <T extends string = string>({ options, value, onChange, icon: Icon, fullWidth, className, }: FilterPillsProps<T>) => react_jsx_runtime.JSX.Element;
2303
+
2304
+ type SegmentOption<T extends string> = {
2305
+ label: string;
2306
+ value: T;
2307
+ icon?: ElementType;
2308
+ };
2309
+ type SegmentedControlProps<T extends string> = {
2310
+ options: SegmentOption<T>[];
2311
+ value: T;
2312
+ onChange: (v: T) => void;
2313
+ className?: string;
2314
+ };
2315
+ declare const SegmentedControl: <T extends string>({ options, value, onChange, className, }: SegmentedControlProps<T>) => react_jsx_runtime.JSX.Element;
2316
+
2317
+ type StepperInputProps = {
2318
+ value: number;
2319
+ onChange: (v: number) => void;
2320
+ min?: number;
2321
+ max?: number;
2322
+ step?: number;
2323
+ unit?: string;
2324
+ /** Tailwind width class for the inner input — default `w-20`. */
2325
+ width?: string;
2326
+ /**
2327
+ * Stretch the whole control to fill its parent (`flex w-full`). Default
2328
+ * `false` — the control sizes to its content (input width + unit + arrows).
2329
+ */
2330
+ fullWidth?: boolean;
2331
+ disabled?: boolean;
2332
+ className?: string;
2333
+ };
2334
+ /**
2335
+ * StepperInput — number field with stacked ↑ / ↓ arrows embedded inside the
2336
+ * right edge. Compact alternative to NumberInput for settings panels.
2337
+ */
2338
+ declare const StepperInput: ({ value, onChange, min, max, step, unit, width, fullWidth, disabled, className, }: StepperInputProps) => react_jsx_runtime.JSX.Element;
2339
+
2340
+ type NumberInputProps = {
2341
+ value: number;
2342
+ onChange: (v: number) => void;
2343
+ min?: number;
2344
+ max?: number;
2345
+ step?: number;
2346
+ unit?: string;
2347
+ /** Tailwind width class for the inner input — default `w-20`. */
2348
+ width?: string;
2349
+ /**
2350
+ * Stretch the whole control to fill its parent (`flex w-full`). Default
2351
+ * `false` — the control sizes to its content (buttons + input width + unit).
2352
+ * Use `fullWidth` for form grids where the column should be filled.
2353
+ */
2354
+ fullWidth?: boolean;
2355
+ disabled?: boolean;
2356
+ className?: string;
2357
+ };
2358
+ /**
2359
+ * NumberInput — number field with `−` / `+` buttons on the outside edges.
2360
+ * Replaces native `<input type="number">` spinners for cross-browser
2361
+ * consistency.
2362
+ */
2363
+ declare const NumberInput: ({ value, onChange, min, max, step, unit, width, fullWidth, disabled, className, }: NumberInputProps) => react_jsx_runtime.JSX.Element;
2364
+
2365
+ type ZoomBarProps = {
2366
+ zoom: number;
2367
+ onZoomOut: () => void;
2368
+ onZoomIn: () => void;
2369
+ onFit?: () => void;
2370
+ onReset?: () => void;
2371
+ /**
2372
+ * Stretch the zoom group to fill its parent (`flex w-full`). Default
2373
+ * `false` — the group sizes to its content. Zoom bars are usually
2374
+ * floated over a canvas, so the compact default is the right one.
2375
+ */
2376
+ fullWidth?: boolean;
2377
+ className?: string;
2378
+ };
2379
+ /**
2380
+ * ZoomBar — inline zoom control group: [−] [xx%] [+] [fit] [reset].
2381
+ * Use for canvas, map, and visualization views.
2382
+ */
2383
+ declare const ZoomBar: ({ zoom, onZoomOut, onZoomIn, onFit, onReset, fullWidth, className, }: ZoomBarProps) => react_jsx_runtime.JSX.Element;
2384
+
2385
+ type FormRowProps = {
2386
+ label: string;
2387
+ description?: string;
2388
+ /** Renders a `(?)` help icon next to the label. */
2389
+ tooltip?: string;
2390
+ children: ReactNode;
2391
+ className?: string;
2392
+ };
2393
+ /**
2394
+ * FormRow — horizontal setting row : label (+ optional description and help)
2395
+ * on the left, control on the right. Pair multiple FormRows inside a
2396
+ * `divide-y` container to build settings panels.
2397
+ */
2398
+ declare const FormRow: ({ label, description, tooltip, children, className }: FormRowProps) => react_jsx_runtime.JSX.Element;
2399
+
2400
+ type AvatarUploaderSize = 'md' | 'lg';
2401
+ type AvatarUploaderProps = {
2402
+ /** Current avatar URL (data URL or http). null/undefined → initials fallback. */
2403
+ src?: string | null;
2404
+ /** Used for the initials fallback when `src` is empty. */
2405
+ name?: string;
2406
+ /** Visual size. `md` = 80px (default), `lg` = 96px. */
2407
+ size?: AvatarUploaderSize;
2408
+ /** Called with the picked file once type/size validation has passed. */
2409
+ onUpload: (file: File) => void | Promise<void>;
2410
+ /** Called when the user clicks Remove. Hidden when omitted. */
2411
+ onRemove?: () => void | Promise<void>;
2412
+ /** Override the loading spinner externally (controlled). */
2413
+ loading?: boolean;
2414
+ /** External error message. Overrides any internal validation error. */
2415
+ error?: string;
2416
+ /** Helper text below the actions. */
2417
+ helperText?: string;
2418
+ /** Max file size in megabytes. Default 5. */
2419
+ maxSizeMB?: number;
2420
+ /** File picker accept attribute. Default `image/*`. */
2421
+ accept?: string;
2422
+ disabled?: boolean;
2423
+ /** Override the upload button label. Default toggles "Upload photo" / "Change photo". */
2424
+ uploadLabel?: string;
2425
+ removeLabel?: string;
2426
+ className?: string;
2427
+ };
2428
+ declare const AvatarUploader: ({ src, name, size, onUpload, onRemove, loading: loadingProp, error: errorProp, helperText, maxSizeMB, accept, disabled, uploadLabel, removeLabel, className, }: AvatarUploaderProps) => react_jsx_runtime.JSX.Element;
2429
+
2430
+ type PasswordInputProps = Omit<InputProps, 'type' | 'icon' | 'rightSlot' | 'labelTrailing'> & {
2431
+ /** Tooltip text shown next to the label (uses TooltipHelp). */
2432
+ helpText?: string;
2433
+ /** Override the visibility-toggle button labels (defaults: "Show/Hide password"). */
2434
+ showLabel?: string;
2435
+ hideLabel?: string;
2436
+ };
2437
+ declare const PasswordInput: react.ForwardRefExoticComponent<Omit<InputProps, "icon" | "type" | "rightSlot" | "labelTrailing"> & {
2438
+ /** Tooltip text shown next to the label (uses TooltipHelp). */
2439
+ helpText?: string;
2440
+ /** Override the visibility-toggle button labels (defaults: "Show/Hide password"). */
2441
+ showLabel?: string;
2442
+ hideLabel?: string;
2443
+ } & react.RefAttributes<HTMLInputElement>>;
2444
+
2445
+ type PasswordRule = {
2446
+ label: string;
2447
+ ok: boolean;
2448
+ };
2449
+ type PasswordPolicyCheckerProps = {
2450
+ rules: PasswordRule[];
2451
+ /** Title shown above the rules list. Pass `null` to hide it. */
2452
+ title?: string | null;
2453
+ className?: string;
2454
+ };
2455
+ declare const PasswordPolicyChecker: ({ rules, title, className, }: PasswordPolicyCheckerProps) => react_jsx_runtime.JSX.Element;
2456
+ /**
2457
+ * Sensible default password policy. Override per-app if stricter/looser
2458
+ * rules are needed (i18n, custom min length, blocklists, …).
2459
+ */
2460
+ declare const defaultPasswordRules: (pwd: string) => PasswordRule[];
2461
+
2462
+ type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
2463
+ type TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement> & {
2464
+ label?: string;
2465
+ description?: string;
2466
+ error?: string;
2467
+ /** Slot rendered next to the label text (e.g. a TooltipHelp). */
2468
+ labelTrailing?: ReactNode;
2469
+ /** Resize behaviour. Default `vertical`. */
2470
+ resize?: TextareaResize;
2471
+ /** Show a `<used> / <max>` counter below the field. Default: auto when `maxLength` is set. */
2472
+ showCount?: boolean;
2473
+ };
2474
+ declare const Textarea: react.ForwardRefExoticComponent<TextareaHTMLAttributes<HTMLTextAreaElement> & {
2475
+ label?: string;
2476
+ description?: string;
2477
+ error?: string;
2478
+ /** Slot rendered next to the label text (e.g. a TooltipHelp). */
2479
+ labelTrailing?: ReactNode;
2480
+ /** Resize behaviour. Default `vertical`. */
2481
+ resize?: TextareaResize;
2482
+ /** Show a `<used> / <max>` counter below the field. Default: auto when `maxLength` is set. */
2483
+ showCount?: boolean;
2484
+ } & react.RefAttributes<HTMLTextAreaElement>>;
2485
+
2486
+ type CheckboxSize = 'sm' | 'md';
2487
+ type CheckboxProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange' | 'children'> & {
2488
+ label?: ReactNode;
2489
+ description?: string;
2490
+ /** Called with the next checked state. */
2491
+ onChange?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void;
2492
+ /** When true, renders the indeterminate (minus) icon. Overrides `checked` visually. */
2493
+ indeterminate?: boolean;
2494
+ size?: CheckboxSize;
2495
+ };
2496
+ declare const Checkbox: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "children" | "onChange" | "type" | "size"> & {
2497
+ label?: ReactNode;
2498
+ description?: string;
2499
+ /** Called with the next checked state. */
2500
+ onChange?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void;
2501
+ /** When true, renders the indeterminate (minus) icon. Overrides `checked` visually. */
2502
+ indeterminate?: boolean;
2503
+ size?: CheckboxSize;
2504
+ } & react.RefAttributes<HTMLInputElement>>;
2505
+ type CheckboxGroupOption = {
2506
+ value: string;
2507
+ label: string;
2508
+ description?: string;
2509
+ disabled?: boolean;
2510
+ };
2511
+ type CheckboxGroupProps = {
2512
+ legend?: string;
2513
+ description?: string;
2514
+ value?: string[];
2515
+ defaultValue?: string[];
2516
+ onChange?: (value: string[]) => void;
2517
+ options: CheckboxGroupOption[];
2518
+ orientation?: 'vertical' | 'horizontal';
2519
+ error?: string;
2520
+ /** Shared `name` attribute for all checkboxes. */
2521
+ name?: string;
2522
+ size?: CheckboxSize;
2523
+ className?: string;
2524
+ };
2525
+ declare const CheckboxGroup: ({ legend, description, value, defaultValue, onChange, options, orientation, error, name, size, className, }: CheckboxGroupProps) => react_jsx_runtime.JSX.Element;
2526
+
2527
+ type RadioSize = 'sm' | 'md';
2528
+ type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange' | 'children'> & {
2529
+ label?: ReactNode;
2530
+ description?: string;
2531
+ /** Called with the next checked state (true when this radio becomes selected). */
2532
+ onChange?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void;
2533
+ size?: RadioSize;
2534
+ };
2535
+ declare const Radio: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "children" | "onChange" | "type" | "size"> & {
2536
+ label?: ReactNode;
2537
+ description?: string;
2538
+ /** Called with the next checked state (true when this radio becomes selected). */
2539
+ onChange?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void;
2540
+ size?: RadioSize;
2541
+ } & react.RefAttributes<HTMLInputElement>>;
2542
+ type RadioGroupOption = {
2543
+ value: string;
2544
+ label: string;
2545
+ description?: string;
2546
+ disabled?: boolean;
2547
+ };
2548
+ type RadioGroupProps = {
2549
+ legend?: string;
2550
+ description?: string;
2551
+ value?: string;
2552
+ defaultValue?: string;
2553
+ onChange?: (value: string) => void;
2554
+ options: RadioGroupOption[];
2555
+ orientation?: 'vertical' | 'horizontal';
2556
+ error?: string;
2557
+ /** Shared `name` for the radios (auto-generated via useId if omitted). */
2558
+ name?: string;
2559
+ size?: RadioSize;
2560
+ className?: string;
2561
+ };
2562
+ declare const RadioGroup: ({ legend, description, value, defaultValue, onChange, options, orientation, error, name, size, className, }: RadioGroupProps) => react_jsx_runtime.JSX.Element;
2563
+
2564
+ type FileInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value'> & {
2565
+ label?: string;
2566
+ description?: string;
2567
+ error?: string;
2568
+ /** Called with the array of selected files. */
2569
+ onChange?: (files: File[]) => void;
2570
+ /** Browse button label. Default "Browse". */
2571
+ buttonLabel?: string;
2572
+ /** Placeholder when no file is selected. Default "No file chosen". */
2573
+ placeholder?: string;
2574
+ /** Show file size next to the name. Default true. */
2575
+ showSize?: boolean;
2576
+ };
2577
+ declare const FileInput: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "type"> & {
2578
+ label?: string;
2579
+ description?: string;
2580
+ error?: string;
2581
+ /** Called with the array of selected files. */
2582
+ onChange?: (files: File[]) => void;
2583
+ /** Browse button label. Default "Browse". */
2584
+ buttonLabel?: string;
2585
+ /** Placeholder when no file is selected. Default "No file chosen". */
2586
+ placeholder?: string;
2587
+ /** Show file size next to the name. Default true. */
2588
+ showSize?: boolean;
2589
+ } & react.RefAttributes<HTMLInputElement>>;
2590
+
2591
+ type DropzoneProps = {
2592
+ label?: string;
2593
+ description?: string;
2594
+ error?: string;
2595
+ multiple?: boolean;
2596
+ accept?: string;
2597
+ disabled?: boolean;
2598
+ /** Called with the new list of accepted files. */
2599
+ onChange?: (files: File[]) => void;
2600
+ /** Controlled file list. */
2601
+ value?: File[];
2602
+ /** Cap on file count when `multiple` is true. */
2603
+ maxFiles?: number;
2604
+ /** Max bytes per file. */
2605
+ maxSize?: number;
2606
+ /** Custom content shown inside the drop area (overrides defaults). */
2607
+ children?: ReactNode;
2608
+ /** Hide the file list rendered below the drop area. Default `false`. */
2609
+ hideFileList?: boolean;
2610
+ className?: string;
2611
+ };
2612
+ declare const Dropzone: ({ label, description, error: errorProp, multiple, accept, disabled, onChange, value, maxFiles, maxSize, children, hideFileList, className, }: DropzoneProps) => react_jsx_runtime.JSX.Element;
2613
+
2614
+ type FormFooterAlign = 'right' | 'between';
2615
+ type FormFooterProps = {
2616
+ /** Cancel button handler. Hidden when omitted. */
2617
+ onCancel?: () => void;
2618
+ cancelLabel?: string;
2619
+ /** Submit button. Defaults to `<button type="submit">`. Override via `submitProps.type`. */
2620
+ submitLabel?: string;
2621
+ /** When true, the submit button shows a spinner and is disabled. */
2622
+ submitting?: boolean;
2623
+ /** Disable the submit button (e.g. form invalid / not dirty). */
2624
+ submitDisabled?: boolean;
2625
+ /** Visual variant for the submit button. Default `primary`. */
2626
+ submitVariant?: ButtonVariant;
2627
+ /** Form name attribute (used by submit when the button is outside the form). */
2628
+ formId?: string;
2629
+ /** Where to render the buttons. Default `right`. */
2630
+ align?: FormFooterAlign;
2631
+ /** Render a top border separator. Default `true`. */
2632
+ bordered?: boolean;
2633
+ /** Optional content shown opposite the buttons (helper text, last-saved indicator…). */
2634
+ extra?: ReactNode;
2635
+ /** Replace the entire button row (still keeps padding + border). */
2636
+ children?: ReactNode;
2637
+ className?: string;
2638
+ };
2639
+ declare const FormFooter: ({ onCancel, cancelLabel, submitLabel, submitting, submitDisabled, submitVariant, formId, align, bordered, extra, children, className, }: FormFooterProps) => react_jsx_runtime.JSX.Element;
2640
+
2641
+ type CalendarProps = DayPickerProps & {
2642
+ className?: string;
2643
+ };
2644
+ /**
2645
+ * Thin Cosmos wrapper around react-day-picker's `<DayPicker>`. All DayPicker
2646
+ * props are accepted (see https://daypicker.dev). Cosmos applies its own
2647
+ * Tailwind class names on top of the defaults so the calendar matches the
2648
+ * rest of the design system.
2649
+ */
2650
+ declare const Calendar: ({ classNames, components, className, ...rest }: CalendarProps) => react_jsx_runtime.JSX.Element;
2651
+
2652
+ type DateRange = {
2653
+ from: Date | undefined;
2654
+ to: Date | undefined;
2655
+ };
2656
+ type DatePickerMode = 'single' | 'range';
2657
+ type SingleProps = {
2658
+ mode?: 'single';
2659
+ value?: Date;
2660
+ defaultValue?: Date;
2661
+ onChange?: (date: Date | undefined) => void;
2662
+ /** Placeholder for the (single) trigger. */
2663
+ placeholder?: string;
2664
+ };
2665
+ type RangeProps = {
2666
+ mode: 'range';
2667
+ value?: DateRange;
2668
+ defaultValue?: DateRange;
2669
+ onChange?: (range: DateRange) => void;
2670
+ /** Placeholder for the FROM trigger. */
2671
+ fromPlaceholder?: string;
2672
+ /** Placeholder for the TO trigger. */
2673
+ toPlaceholder?: string;
2674
+ };
2675
+ type CommonProps = {
2676
+ label?: string;
2677
+ description?: string;
2678
+ error?: string;
2679
+ disabled?: boolean;
2680
+ /** Earliest selectable date (inclusive). */
2681
+ fromDate?: Date;
2682
+ /** Latest selectable date (inclusive). */
2683
+ toDate?: Date;
2684
+ /** Year range for the year dropdown. Default: current year ±10. */
2685
+ fromYear?: number;
2686
+ toYear?: number;
2687
+ /** Caption style. `dropdown` (default) shows month + year as `<select>`s. */
2688
+ captionLayout?: 'dropdown' | 'dropdown-months' | 'dropdown-years' | 'label';
2689
+ /** Single mode only — show a "Today" shortcut button below the calendar. Default `true`. */
2690
+ showTodayButton?: boolean;
2691
+ /** Custom formatter for displayed dates. Default `DD MMM YYYY`. */
2692
+ format?: (date: Date) => string;
2693
+ /** Single mode only — fully replace the default footer (Today button) with custom JSX. */
2694
+ calendarFooter?: ReactNode;
2695
+ /** Stretch the trigger(s) to fill the parent. */
2696
+ fullWidth?: boolean;
2697
+ className?: string;
2698
+ };
2699
+ type DatePickerProps = (SingleProps | RangeProps) & CommonProps;
2700
+ declare const DatePicker: (props: DatePickerProps) => react_jsx_runtime.JSX.Element;
2701
+
2702
+ type TimePickerProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> & {
2703
+ label?: string;
2704
+ description?: string;
2705
+ error?: string;
2706
+ /** HH:MM (24h) string. */
2707
+ value?: string;
2708
+ defaultValue?: string;
2709
+ onChange?: (time: string, e: ChangeEvent<HTMLInputElement>) => void;
2710
+ /** Minute granularity. 1 = any minute, 60 = hours only. Default 1. */
2711
+ step?: number;
2712
+ /** Earliest time (HH:MM). */
2713
+ min?: string;
2714
+ /** Latest time (HH:MM). */
2715
+ max?: string;
2716
+ /**
2717
+ * Stretch the input to fill its parent (`w-full`). Default `false` —
2718
+ * the input sizes itself with a sensible `min-w-[140px]`. Use `fullWidth`
2719
+ * in form grids that should fill the column.
2720
+ */
2721
+ fullWidth?: boolean;
2722
+ };
2723
+ declare const TimePicker: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "type"> & {
2724
+ label?: string;
2725
+ description?: string;
2726
+ error?: string;
2727
+ /** HH:MM (24h) string. */
2728
+ value?: string;
2729
+ defaultValue?: string;
2730
+ onChange?: (time: string, e: ChangeEvent<HTMLInputElement>) => void;
2731
+ /** Minute granularity. 1 = any minute, 60 = hours only. Default 1. */
2732
+ step?: number;
2733
+ /** Earliest time (HH:MM). */
2734
+ min?: string;
2735
+ /** Latest time (HH:MM). */
2736
+ max?: string;
2737
+ /**
2738
+ * Stretch the input to fill its parent (`w-full`). Default `false` —
2739
+ * the input sizes itself with a sensible `min-w-[140px]`. Use `fullWidth`
2740
+ * in form grids that should fill the column.
2741
+ */
2742
+ fullWidth?: boolean;
2743
+ } & react.RefAttributes<HTMLInputElement>>;
2744
+
2745
+ type OtpInputProps = {
2746
+ /** Number of cells. Default 6. */
2747
+ length?: number;
2748
+ /** Current value. Length should be ≤ `length`. */
2749
+ value: string;
2750
+ onChange: (value: string) => void;
2751
+ /** Fired when the user reaches `length` characters. */
2752
+ onComplete?: (value: string) => void;
2753
+ disabled?: boolean;
2754
+ error?: boolean;
2755
+ /** Allow letters in addition to digits. Default `false` (digits only). */
2756
+ alphanumeric?: boolean;
2757
+ /** Render each filled cell as a `•` instead of the actual character. */
2758
+ mask?: boolean;
2759
+ autoFocus?: boolean;
2760
+ /** Hidden input `name` for native form submission. */
2761
+ name?: string;
2762
+ className?: string;
2763
+ ariaLabel?: string;
2764
+ };
2765
+ declare const OtpInput: ({ length, value, onChange, onComplete, disabled, error, alphanumeric, mask, autoFocus, name, className, ariaLabel, }: OtpInputProps) => react_jsx_runtime.JSX.Element;
2766
+
2767
+ type ActionPanelLayout = 'stacked' | 'inline';
2768
+ type ActionPanelProps = HTMLAttributes<HTMLDivElement> & {
2769
+ /** Section title (rendered as `<h3>`). */
2770
+ title: ReactNode;
2771
+ /** Body text shown under the title. */
2772
+ description?: ReactNode;
2773
+ /** Trailing action — button, link, toggle, etc. */
2774
+ action?: ReactNode;
2775
+ /**
2776
+ * Layout. `stacked` (default): action sits below the description.
2777
+ * `inline`: action floats top-right (TUI "With button at top right").
2778
+ */
2779
+ layout?: ActionPanelLayout;
2780
+ /**
2781
+ * Use a tinted gray surface instead of a white card (TUI "Simple well").
2782
+ */
2783
+ well?: boolean;
2784
+ };
2785
+ declare const ActionPanel: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
2786
+ /** Section title (rendered as `<h3>`). */
2787
+ title: ReactNode;
2788
+ /** Body text shown under the title. */
2789
+ description?: ReactNode;
2790
+ /** Trailing action — button, link, toggle, etc. */
2791
+ action?: ReactNode;
2792
+ /**
2793
+ * Layout. `stacked` (default): action sits below the description.
2794
+ * `inline`: action floats top-right (TUI "With button at top right").
2795
+ */
2796
+ layout?: ActionPanelLayout;
2797
+ /**
2798
+ * Use a tinted gray surface instead of a white card (TUI "Simple well").
2799
+ */
2800
+ well?: boolean;
2801
+ } & react.RefAttributes<HTMLDivElement>>;
2802
+
2803
+ type ComboboxOption = {
2804
+ value: string;
2805
+ label: string;
2806
+ /** Optional secondary text shown to the right (mirrors TUI "With secondary text"). */
2807
+ secondary?: ReactNode;
2808
+ /** Optional status dot/icon shown to the left (TUI "With status indicator"). */
2809
+ leading?: ReactNode;
2810
+ disabled?: boolean;
2811
+ };
2812
+ type ComboboxProps = {
2813
+ label?: ReactNode;
2814
+ /** Selected option value (controlled). */
2815
+ value?: string;
2816
+ /** Called when the user picks an option. */
2817
+ onChange?: (value: string) => void;
2818
+ options: ComboboxOption[];
2819
+ placeholder?: string;
2820
+ /** Show this when no option matches the typed query. */
2821
+ emptyMessage?: string;
2822
+ /** Disable the input + dropdown. */
2823
+ disabled?: boolean;
2824
+ /** Helper text under the input. */
2825
+ helperText?: string;
2826
+ /** Error message — replaces helperText when set. */
2827
+ error?: string;
2828
+ className?: string;
2829
+ };
2830
+ declare const Combobox: ({ label, value, onChange, options, placeholder, emptyMessage, disabled, helperText, error, className, }: ComboboxProps) => react_jsx_runtime.JSX.Element;
2831
+
2832
+ type DescriptionListItemProps = HTMLAttributes<HTMLDivElement> & {
2833
+ /** Label (`<dt>`). */
2834
+ label: ReactNode;
2835
+ /** Value (`<dd>`). */
2836
+ children: ReactNode;
2837
+ };
2838
+ type DescriptionListProps = HTMLAttributes<HTMLDListElement> & {
2839
+ /** Optional header title (rendered above the list). */
2840
+ title?: ReactNode;
2841
+ /** Optional header description (rendered below the title). */
2842
+ description?: ReactNode;
2843
+ /**
2844
+ * When `true`, wraps the list in a card surface with border + rounded +
2845
+ * shadow (TUI "Left-aligned in card" pattern).
2846
+ */
2847
+ inCard?: boolean;
2848
+ /**
2849
+ * When `true`, items get an alternating gray background (TUI "Left-aligned
2850
+ * striped" pattern). Implementation uses `even:bg-gray-50`.
2851
+ */
2852
+ striped?: boolean;
2853
+ children: ReactNode;
2854
+ };
2855
+ declare const DescriptionList: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDListElement> & {
2856
+ /** Optional header title (rendered above the list). */
2857
+ title?: ReactNode;
2858
+ /** Optional header description (rendered below the title). */
2859
+ description?: ReactNode;
2860
+ /**
2861
+ * When `true`, wraps the list in a card surface with border + rounded +
2862
+ * shadow (TUI "Left-aligned in card" pattern).
2863
+ */
2864
+ inCard?: boolean;
2865
+ /**
2866
+ * When `true`, items get an alternating gray background (TUI "Left-aligned
2867
+ * striped" pattern). Implementation uses `even:bg-gray-50`.
2868
+ */
2869
+ striped?: boolean;
2870
+ children: ReactNode;
2871
+ } & react.RefAttributes<HTMLDListElement>> & {
2872
+ Item: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
2873
+ /** Label (`<dt>`). */
2874
+ label: ReactNode;
2875
+ /** Value (`<dd>`). */
2876
+ children: ReactNode;
2877
+ } & react.RefAttributes<HTMLDivElement>>;
2878
+ };
2879
+
2880
+ type KpiCardProps = {
2881
+ label: string;
2882
+ value: ReactNode;
2883
+ /** Smaller text under the value — e.g. "across 3 sites". */
2884
+ sub?: ReactNode;
2885
+ className?: string;
2886
+ };
2887
+ /**
2888
+ * KpiCard — single key metric card : label + large value + optional sub-text.
2889
+ * Use in dashboards as the top-row at-a-glance panel.
2890
+ */
2891
+ declare const KpiCard: ({ label, value, sub, className }: KpiCardProps) => react_jsx_runtime.JSX.Element;
2892
+
2893
+ type TimelineItem = {
2894
+ id: string;
2895
+ /** Label or rendered title for the entry. */
2896
+ title: ReactNode;
2897
+ /** Optional secondary line under the title. */
2898
+ description?: ReactNode;
2899
+ /** Time label — e.g. "5m ago", "2026-05-07 14:32". */
2900
+ time?: ReactNode;
2901
+ /** Lucide icon — used by `dot` and `stepper` variants. */
2902
+ icon?: ElementType;
2903
+ /** Initials/name for `avatar` variant. */
2904
+ avatarName?: string;
2905
+ /** Optional image URL for `avatar` variant. */
2906
+ avatarSrc?: string;
2907
+ /**
2908
+ * Visual tone for `stepper` variant (icon circle background).
2909
+ * Defaults to `brand`.
2910
+ */
2911
+ tone?: TimelineTone;
2912
+ };
2913
+ type TimelineTone = 'brand' | 'success' | 'warning' | 'danger' | 'neutral';
2914
+ type TimelineVariant =
2915
+ /** Small coloured dot — concise activity stream. */
2916
+ 'dot'
2917
+ /** Avatar (initials or image) — useful when authorship matters. */
2918
+ | 'avatar'
2919
+ /**
2920
+ * Flowbite-style stepper timeline — large icon circle (40px) with the
2921
+ * Lucide icon at 20px, tinted background per `tone`. Best for hero
2922
+ * activity feeds or onboarding-style step-by-step views.
2923
+ */
2924
+ | 'stepper'
2925
+ /** Each entry rendered as a stand-alone card (no connector line). */
2926
+ | 'card';
2927
+ type TimelineProps = {
2928
+ items: TimelineItem[];
2929
+ variant?: TimelineVariant;
2930
+ className?: string;
2931
+ };
2932
+ declare const Timeline: ({ items, variant, className }: TimelineProps) => react_jsx_runtime.JSX.Element;
2933
+
2934
+ type MiniCalendarProps = {
2935
+ today?: Date;
2936
+ selected: Date;
2937
+ onSelect: (date: Date) => void;
2938
+ /** Set of ISO date strings (YYYY-MM-DD) marking days with events. */
2939
+ eventDays?: Set<string>;
2940
+ className?: string;
2941
+ };
2942
+ /**
2943
+ * MiniCalendar — compact ISO-week month picker with optional event dots.
2944
+ * Click the month title to jump back to today's month.
2945
+ */
2946
+ declare const MiniCalendar: ({ today, selected, onSelect, eventDays, className, }: MiniCalendarProps) => react_jsx_runtime.JSX.Element;
2947
+
2948
+ type SortDirection = 'asc' | 'desc';
2949
+ type ColumnDef<T> = {
2950
+ /** Stable key — used for sort/filter identity. */
2951
+ key: string;
2952
+ label: ReactNode;
2953
+ /** Optional fixed width (CSS value, e.g. `'20%'` or `'180px'`). */
2954
+ width?: string;
2955
+ /** Tailwind text alignment override. */
2956
+ align?: 'left' | 'right' | 'center';
2957
+ /** Renders the cell for a row. */
2958
+ render: (row: T) => ReactNode;
2959
+ /** Returns the raw sortable value for the row. */
2960
+ sortValue?: (row: T) => string | number | null;
2961
+ /** Returns the raw filterable string for the row. */
2962
+ filterValue?: (row: T) => string;
2963
+ /** Returns the searchable string for the row. Falls back to `filterValue` if absent. */
2964
+ searchValue?: (row: T) => string;
2965
+ sortable?: boolean;
2966
+ filterable?: boolean;
2967
+ };
2968
+
2969
+ type DataTableProps<T> = {
2970
+ rows: T[];
2971
+ columns: ColumnDef<T>[];
2972
+ rowKey: (row: T) => string | number;
2973
+ /** Optional right-edge action column (typically a `RowActionButton`). */
2974
+ renderRowAction?: (row: T) => React.ReactNode;
2975
+ pageSize?: number;
2976
+ loading?: boolean;
2977
+ error?: string | null;
2978
+ onRetry?: () => void;
2979
+ emptyTitle?: string;
2980
+ emptyDescription?: string;
2981
+ /** Show a checkbox column and enable row selection. */
2982
+ selectable?: boolean;
2983
+ /** Controlled selection set (row keys). */
2984
+ selection?: Set<string | number>;
2985
+ defaultSelection?: Set<string | number>;
2986
+ onSelectionChange?: (selection: Set<string | number>) => void;
2987
+ /** Toolbar rendered above the table when `selection.size > 0`. Receives the selected rows. */
2988
+ bulkActions?: (selectedRows: T[]) => ReactNode;
2989
+ /** Controlled search value. When provided, the search input is shown. */
2990
+ searchValue?: string;
2991
+ defaultSearchValue?: string;
2992
+ onSearchChange?: (value: string) => void;
2993
+ searchPlaceholder?: string;
2994
+ className?: string;
2995
+ };
2996
+ /**
2997
+ * DataTable — opinionated data table with sticky header, per-column sort and
2998
+ * filter, active filter chips bar, pagination, integrated loading / error /
2999
+ * empty states, optional row selection with bulk actions, and an optional
3000
+ * global search bar.
3001
+ */
3002
+ declare const DataTable: <T>({ rows, columns, rowKey, renderRowAction, pageSize, loading, error, onRetry, emptyTitle, emptyDescription, selectable, selection: selectionProp, defaultSelection, onSelectionChange, bulkActions, searchValue: searchValueProp, defaultSearchValue, onSearchChange, searchPlaceholder, className, }: DataTableProps<T>) => react_jsx_runtime.JSX.Element;
3003
+
3004
+ type ColumnHeaderProps = {
3005
+ label: ReactNode;
3006
+ align?: 'left' | 'right' | 'center';
3007
+ sortable?: boolean;
3008
+ filterable?: boolean;
3009
+ /** Current sort direction for this column, or null if not active. */
3010
+ sortDir?: SortDirection | null;
3011
+ onSortToggle?: () => void;
3012
+ /** Filter popover state — values, selected set, callbacks. */
3013
+ filterValues?: string[];
3014
+ filterSelected?: Set<string>;
3015
+ onFilterToggle?: (v: string) => void;
3016
+ onFilterClear?: () => void;
3017
+ className?: string;
3018
+ };
3019
+ declare const ColumnHeader: ({ label, align, sortable, filterable, sortDir, onSortToggle, filterValues, filterSelected, onFilterToggle, onFilterClear, className, }: ColumnHeaderProps) => react_jsx_runtime.JSX.Element;
3020
+
3021
+ type ColumnFilterDropdownProps = {
3022
+ values: string[];
3023
+ selected: Set<string>;
3024
+ searchable?: boolean;
3025
+ onToggle: (value: string) => void;
3026
+ onClear: () => void;
3027
+ className?: string;
3028
+ };
3029
+ /**
3030
+ * ColumnFilterDropdown — popover with multi-select checkboxes for filtering
3031
+ * a column. Optional search input filters the visible options.
3032
+ */
3033
+ declare const ColumnFilterDropdown: ({ values, selected, searchable, onToggle, onClear, className, }: ColumnFilterDropdownProps) => react_jsx_runtime.JSX.Element;
3034
+
3035
+ type ActiveFilter = {
3036
+ key: string;
3037
+ label: string;
3038
+ /** Comma-joined preview of selected values. */
3039
+ value: string;
3040
+ };
3041
+ type ActiveFiltersBarProps = {
3042
+ filters: ActiveFilter[];
3043
+ onClearOne: (key: string) => void;
3044
+ onClearAll: () => void;
3045
+ className?: string;
3046
+ };
3047
+ /**
3048
+ * ActiveFiltersBar — chips row showing current column filters with per-chip
3049
+ * dismiss + a "Clear all" action. Renders nothing when there are no filters.
3050
+ */
3051
+ declare const ActiveFiltersBar: ({ filters, onClearOne, onClearAll, className, }: ActiveFiltersBarProps) => react_jsx_runtime.JSX.Element | null;
3052
+
3053
+ type ErrorPageProps = {
3054
+ /** Big numeric code displayed prominently — e.g. `404`, `500`, `503`. */
3055
+ code: ReactNode;
3056
+ title: ReactNode;
3057
+ description?: ReactNode;
3058
+ /** Optional illustration (image, SVG, or animated component) shown above the code. */
3059
+ illustration?: ReactNode;
3060
+ /** Action buttons (typically two: primary + secondary). */
3061
+ actions?: ReactNode;
3062
+ className?: string;
3063
+ };
3064
+ /**
3065
+ * ErrorPage — generic full-page error layout reusable for 4xx / 5xx /
3066
+ * maintenance screens. Provide your own `illustration`, `actions`, and
3067
+ * `code`/`title` per scenario.
3068
+ *
3069
+ * Example (404):
3070
+ * <ErrorPage
3071
+ * code={404}
3072
+ * title="Page not found"
3073
+ * description="Sorry, the page you're looking for doesn't exist."
3074
+ * actions={
3075
+ * <>
3076
+ * <Button as="a" href="/">Go home</Button>
3077
+ * <Button variant="secondary" onClick={() => history.back()}>Back</Button>
3078
+ * </>
3079
+ * }
3080
+ * />
3081
+ */
3082
+ declare const ErrorPage: ({ code, title, description, illustration, actions, className, }: ErrorPageProps) => react_jsx_runtime.JSX.Element;
3083
+
3084
+ type StickyScrollNavSection = {
3085
+ id: string;
3086
+ label: string;
3087
+ };
3088
+ type StickyScrollNavProps = {
3089
+ sections: StickyScrollNavSection[];
3090
+ /** Custom scroll behavior — defaults to `scrollIntoView({ behavior: 'smooth', block: 'start' })`. */
3091
+ onNavigate?: (id: string) => void;
3092
+ /** CSS top offset (px) — pass the height of any fixed header above. */
3093
+ topOffset?: number;
3094
+ className?: string;
3095
+ };
3096
+ /**
3097
+ * StickyScrollNav — sticky horizontal nav row that scrolls to in-page
3098
+ * sections by id. Useful for long template gallery pages and docs.
3099
+ */
3100
+ declare const StickyScrollNav: ({ sections, onNavigate, topOffset, className, }: StickyScrollNavProps) => react_jsx_runtime.JSX.Element;
3101
+
3102
+ type ColorSwatchProps = {
3103
+ /** Color hex (e.g. `#465fff`). */
3104
+ hex: string;
3105
+ /** Visible label below the swatch. */
3106
+ label: string;
3107
+ /** Whether this swatch is currently selected. */
3108
+ active?: boolean;
3109
+ onClick?: () => void;
3110
+ className?: string;
3111
+ };
3112
+ /**
3113
+ * ColorSwatch — single colour pick button. A filled rectangle with the
3114
+ * colour, an optional checkmark when active, and a small caption below.
3115
+ */
3116
+ declare const ColorSwatch: ({ hex, label, active, onClick, className, }: ColorSwatchProps) => react_jsx_runtime.JSX.Element;
3117
+
3118
+ type AccentColor = {
3119
+ /** Stable identifier (used as React key + value). */
3120
+ id: string;
3121
+ /** Visible label. */
3122
+ label: string;
3123
+ /** Color hex. */
3124
+ hex: string;
3125
+ };
3126
+ type AccentPickerProps = {
3127
+ /** Available accent colours. */
3128
+ colors: AccentColor[];
3129
+ /** Currently selected colour id. */
3130
+ value: string;
3131
+ onChange: (id: string) => void;
3132
+ /** Number of columns on small screens (default 5). */
3133
+ cols?: number;
3134
+ /** Number of columns from `sm:` breakpoint (default 10). */
3135
+ smCols?: number;
3136
+ className?: string;
3137
+ };
3138
+ /**
3139
+ * AccentPicker — grid of `<ColorSwatch>` buttons. Use to let the user
3140
+ * pick the primary brand colour. Inspired by rackscope's appearance settings.
3141
+ */
3142
+ declare const AccentPicker: ({ colors, value, onChange, cols, smCols, className, }: AccentPickerProps) => react_jsx_runtime.JSX.Element;
3143
+
3144
+ type PalettePreview = {
3145
+ /** Page background. */
3146
+ bg: string;
3147
+ /** Card / panel background (sits above `bg`). */
3148
+ surface: string;
3149
+ /** Borders and faint dividers. */
3150
+ border: string;
3151
+ };
3152
+ type PaletteMeta = {
3153
+ /** Stable identifier. */
3154
+ id: string;
3155
+ /** Display name (e.g. "Pure Light"). */
3156
+ label: string;
3157
+ /** Short description (e.g. "white surfaces"). */
3158
+ desc?: string;
3159
+ /** Three colours used to render a mini mockup. */
3160
+ preview: PalettePreview;
3161
+ };
3162
+ type PaletteCardProps = {
3163
+ meta: PaletteMeta;
3164
+ active?: boolean;
3165
+ onClick?: () => void;
3166
+ className?: string;
3167
+ };
3168
+ /**
3169
+ * PaletteCard — preview card showing a tiny mockup (sidebar strip + card)
3170
+ * of a palette plus its label. Use inside `<PalettePicker>` to let the
3171
+ * user pick a light/dark theme palette.
3172
+ */
3173
+ declare const PaletteCard: ({ meta, active, onClick, className }: PaletteCardProps) => react_jsx_runtime.JSX.Element;
3174
+
3175
+ type PalettePickerProps = {
3176
+ palettes: PaletteMeta[];
3177
+ value: string;
3178
+ onChange: (id: string) => void;
3179
+ /** Number of columns. Default 4. */
3180
+ cols?: number;
3181
+ className?: string;
3182
+ };
3183
+ /**
3184
+ * PalettePicker — responsive grid of `<PaletteCard>` previews. Use one for
3185
+ * the light theme set and another for the dark theme set.
3186
+ */
3187
+ declare const PalettePicker: ({ palettes, value, onChange, cols, className, }: PalettePickerProps) => react_jsx_runtime.JSX.Element;
3188
+
3189
+ type OptionCardProps = {
3190
+ /** Stable identifier (used as React key + value). */
3191
+ id: string;
3192
+ /** Visible label. */
3193
+ label: string;
3194
+ /** Optional small description below the label. */
3195
+ desc?: string;
3196
+ /** Visual content rendered above the text — typically an icon, mockup, or preview. */
3197
+ preview?: ReactNode;
3198
+ active?: boolean;
3199
+ onClick?: () => void;
3200
+ className?: string;
3201
+ };
3202
+ /**
3203
+ * OptionCard — generic selectable card with a preview slot, label, and
3204
+ * optional description. Use to build pickers for icon styles, view modes,
3205
+ * layout variants, etc.
3206
+ */
3207
+ declare const OptionCard: ({ label, desc, preview, active, onClick, className, }: OptionCardProps) => react_jsx_runtime.JSX.Element;
3208
+
3209
+ type OptionItem = Pick<OptionCardProps, 'id' | 'label' | 'desc' | 'preview'>;
3210
+ type OptionPickerProps = {
3211
+ options: OptionItem[];
3212
+ value: string;
3213
+ onChange: (id: string) => void;
3214
+ /** Number of grid columns. Default 5. */
3215
+ cols?: number;
3216
+ className?: string;
3217
+ };
3218
+ /**
3219
+ * OptionPicker — responsive grid of `<OptionCard>` previews. Use for
3220
+ * generic single-select pickers (icon styles, view modes, density, etc.).
3221
+ */
3222
+ declare const OptionPicker: ({ options, value, onChange, cols, className, }: OptionPickerProps) => react_jsx_runtime.JSX.Element;
3223
+
3224
+ type BlockquoteVariant = 'plain' | 'solid' | 'icon' | 'testimonial';
3225
+ type BlockquoteSize = 'sm' | 'md' | 'lg';
3226
+ type BlockquoteAlign = 'left' | 'center' | 'right';
3227
+ type BlockquoteProps = {
3228
+ children: ReactNode;
3229
+ /**
3230
+ * Visual treatment:
3231
+ * - `plain` (default): bare italic quote
3232
+ * - `solid`: muted background + brand-coloured left border
3233
+ * - `icon`: large quote glyph above the text
3234
+ * - `testimonial`: solid background + author block in the footer
3235
+ */
3236
+ variant?: BlockquoteVariant;
3237
+ size?: BlockquoteSize;
3238
+ align?: BlockquoteAlign;
3239
+ /** Author / source — required when `variant="testimonial"`. */
3240
+ author?: ReactNode;
3241
+ /** Author's role / company. Rendered below `author`. */
3242
+ role?: ReactNode;
3243
+ /** Optional avatar URL. Replaced by initials of `author` if it fails. */
3244
+ authorAvatar?: string;
3245
+ className?: string;
3246
+ };
3247
+ declare const Blockquote: ({ children, variant, size, align, author, role, authorAvatar, className, }: BlockquoteProps) => react_jsx_runtime.JSX.Element;
3248
+
3249
+ type KbdSize = 'sm' | 'md';
3250
+ type KbdProps = {
3251
+ children: ReactNode;
3252
+ size?: KbdSize;
3253
+ className?: string;
3254
+ };
3255
+ /**
3256
+ * `Kbd` — represents a keyboard key. Use single instances for one-key shortcuts
3257
+ * (`⌘`, `K`) or compose multiple `<Kbd>` together with a `+` between them for
3258
+ * combos.
3259
+ *
3260
+ * <Kbd>⌘</Kbd> <Kbd>K</Kbd>
3261
+ *
3262
+ * The component intentionally stays passive — no state, no overlay — so it can
3263
+ * sit inside tooltips, help screens, paragraphs and badges without coupling.
3264
+ */
3265
+ declare const Kbd: ({ children, size, className }: KbdProps) => react_jsx_runtime.JSX.Element;
3266
+
3267
+ type FigureAlign = 'left' | 'center' | 'right';
3268
+ type FigureSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
3269
+ type FigureRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
3270
+ type FigureProps = Omit<ImgHTMLAttributes<HTMLImageElement>, 'children'> & {
3271
+ src: string;
3272
+ alt: string;
3273
+ caption?: ReactNode;
3274
+ align?: FigureAlign;
3275
+ /** Constrain image width. `full` (default) → fills parent. */
3276
+ size?: FigureSize;
3277
+ /** Image corner radius. */
3278
+ radius?: FigureRadius;
3279
+ /** Drop shadow under the image. */
3280
+ shadow?: boolean;
3281
+ /** Wrapper className (the `<figure>`). */
3282
+ wrapperClassName?: string;
3283
+ };
3284
+ /**
3285
+ * `Figure` — image + optional caption pair. Wraps the native `<figure>` /
3286
+ * `<figcaption>` pattern so consumers get semantic HTML for free plus the
3287
+ * common visual knobs (alignment, size, rounding, shadow) without re-doing
3288
+ * the Tailwind tetris each time.
3289
+ */
3290
+ declare const Figure: ({ src, alt, caption, align, size, radius, shadow, className, wrapperClassName, ...rest }: FigureProps) => react_jsx_runtime.JSX.Element;
3291
+
3292
+ export { type AccentColor, AccentPicker, type AccentPickerProps, Accordion, type AccordionContentProps, type AccordionItemProps, type AccordionProps, type AccordionTriggerProps, ActionPanel, type ActionPanelLayout, type ActionPanelProps, type ActiveFilter, ActiveFiltersBar, type ActiveFiltersBarProps, ActivityFeed, type ActivityFeedIntent, type ActivityFeedItemProps, type ActivityFeedProps, AlertBanner, type AlertBannerProps, type AlertVariant, AnnouncementBar, type AnnouncementBarIntent, type AnnouncementBarProps, Avatar, type AvatarProps, type AvatarSize, AvatarUploader, type AvatarUploaderProps, type AvatarUploaderSize, BackToTopFab, type BackToTopFabIntent, type BackToTopFabPosition, type BackToTopFabProps, Backdrop, type BackdropProps, Badge, type BadgeAppearance, type BadgeProps, type BadgeSize, type BadgeVariant, Blockquote, type BlockquoteAlign, type BlockquoteProps, type BlockquoteSize, type BlockquoteVariant, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, type BreadcrumbSeparator, Button, ButtonGroup, type ButtonGroupOrientation, type ButtonGroupProps, type ButtonProps, type ButtonShape, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Card, type CardImageProps, type CardProps, Carousel, type CarouselControlsProps, type CarouselIndicatorsProps, type CarouselOptions, type CarouselProps, CarouselRoot, type CarouselSlideProps, type CarouselViewportProps, Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, ClickableRow, type ClickableRowProps, Clipboard, type ClipboardProps, type ClipboardSize, type ClipboardVariant, CodeBlock, type CodeBlockProps, ColBox, type ColBoxProps, ColorSwatch, type ColorSwatchProps, type ColumnDef, ColumnFilterDropdown, type ColumnFilterDropdownProps, ColumnHeader, type ColumnHeaderProps, Combobox, type ComboboxOption, type ComboboxProps, CommandPalette, type CommandPaletteFooterProps, type CommandPaletteGroupProps, type CommandPaletteInputProps, type CommandPaletteItemProps, type CommandPaletteListProps, type CommandPaletteProps, ConfirmationModal, type ConfirmationModalProps, ContentNarrow, type ContentNarrowProps, ContentStackedList, type ContentStackedListItemProps, type ContentStackedListProps, CookieBanner, type CookieBannerPosition, type CookieBannerProps, type CosmosToasterProps, DataTable, type DataTableProps, DatePicker, type DatePickerMode, type DatePickerProps, type DateRange, DescriptionList, type DescriptionListItemProps, type DescriptionListProps, Divider, type DividerAlign, type DividerIconProps, type DividerProps, type DividerRowProps, Drawer, type DrawerHeaderProps, type DrawerProps, type DrawerSide, type DrawerSize, Dropdown, type DropdownDivider, type DropdownItem, type DropdownOption, type DropdownProps, Dropzone, type DropzoneProps, EmptyState, type EmptyStateProps, ErrorPage, type ErrorPageProps, ErrorState, type ErrorStateProps, Figure, type FigureAlign, type FigureProps, type FigureRadius, type FigureSize, FileInput, type FileInputProps, type FilterOption, FilterPills, type FilterPillsProps, FormFooter, type FormFooterAlign, type FormFooterProps, FormRow, type FormRowProps, GridList, type GridListCardProps, type GridListCols, type GridListFooterActionProps, type GridListFooterProps, type GridListProps, HealthBadge, type HealthBadgeProps, HealthDot, type HealthDotProps, type HealthStatus, HelpOverlay, type HelpOverlayProps, type HelpOverlaySectionProps, type HelpOverlayShortcutProps, IconBox, type IconBoxProps, type IconBoxSize, ImageGrid, type ImageGridColumns, type ImageGridGap, type ImageGridProps, Input, type InputProps, Kbd, type KbdProps, type KbdSize, KpiCard, type KpiCardProps, Link, type LinkProps, type LinkVariant, List, type ListItemProps, type ListMarker, type ListOrientation, type ListProps, type ListSpacing, type ListVariant, LoadingState, type LoadingStateProps, MediaObject, type MediaObjectAlign, type MediaObjectBodyProps, type MediaObjectImageProps, type MediaObjectPosition, type MediaObjectProps, MiniCalendar, type MiniCalendarProps, Modal, type ModalAlertIntent, type ModalAlertLayout, type ModalAlertProps, type ModalHeaderProps, type ModalProps, type ModalSize, NarrowStackedList, type NarrowStackedListHeaderProps, type NarrowStackedListItemProps, type NarrowStackedListProps, Navbar, type NavbarItemProps, type NavbarMobileMenuButtonProps, type NavbarProps, type NavbarTheme, NotificationCard, type NotificationCardCondensedProps, type NotificationCardSimpleProps, type NotificationIntent, type NotificationSeverity, NotificationsPanel, type NotificationsPanelContentProps, type NotificationsPanelCountersProps, type NotificationsPanelEmptyProps, type NotificationsPanelFooterProps, type NotificationsPanelHeaderActionProps, type NotificationsPanelHeaderProps, type NotificationsPanelItemProps, type NotificationsPanelListProps, type NotificationsPanelProps, type NotificationsPanelTriggerProps, NumberInput, type NumberInputProps, OptionCard, type OptionCardProps, type OptionItem, OptionPicker, type OptionPickerProps, OtpInput, type OtpInputProps, PageActionButton, type PageActionButtonProps, PageActionIconButton, type PageActionIconButtonProps, type PageActionVariant, PageBreadcrumb, type PageBreadcrumbItem, type PageBreadcrumbProps, PageCard, type PageCardProps, PageHeader, type PageHeaderMetaItemProps, type PageHeaderProps, Pagination, type PaginationProps, type PaginationSize, type PaginationVariant, PaletteCard, type PaletteCardProps, type PaletteMeta, PalettePicker, type PalettePickerProps, type PalettePreview, PasswordInput, type PasswordInputProps, PasswordPolicyChecker, type PasswordPolicyCheckerProps, type PasswordRule, type PlaceholderAvatarOptions, type PlaceholderCoverOptions, Popover, type PopoverContentProps, type PopoverPosition, type PopoverProps, type PopoverTriggerProps, ProgressBar, type ProgressBarIntent, type ProgressBarLabel, type ProgressBarProps, type ProgressBarSize, REFRESH_OPTIONS, Radio, RadioGroup, type RadioGroupOption, type RadioGroupProps, type RadioProps, type RadioSize, RefreshButton, type RefreshButtonProps, type RefreshOption, Ribbon, type RibbonIntent, type RibbonPosition, type RibbonProps, type RibbonShape, RowActionButton, type RowActionButtonProps, STATUS_COLOR, STATUS_PILL, type SaveState, SearchInput, type SearchInputProps, SectionCard, type SectionCardProps, SectionLabel, type SectionLabelProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Select, SelectInput, type SelectInputOption, type SelectInputProps, type SelectOption, type SelectProps, Shell, type ShellProps, Sidebar, type SidebarGroupProps, type SidebarItemProps, type SidebarProps, type SidebarSectionProps, SimpleRow, type SimpleRowProps, Sk, type SkProps, SkeletonList, type SkeletonListProps, SkeletonTable, type SkeletonTableProps, SkeletonText, type SkeletonTextProps, type SortDirection, Spinner, type SpinnerProps, type SpinnerSize, StackedList, StackedListInCard, type StackedListInCardProps, type StackedListItemProps, type StackedListProps, StatefulSaveButton, type StatefulSaveButtonProps, StatusBadge, type StatusBadgeProps, StatusRow, type StatusRowProps, type StepStatus, Stepper, StepperInput, type StepperInputProps, type StepperOrientation, type StepperProps, StepperRoot, type StepperSize, type StepperStepProps, type StepperVariant, StickyScrollNav, type StickyScrollNavProps, type StickyScrollNavSection, type TabProps, Tabs, type TabsOrientation, type TabsProps, Textarea, type TextareaProps, type TextareaResize, type ThemeMode, ThemeToggle, type ThemeToggleProps, type ThemeToggleSize, ThemeToggleTri, type ThemeToggleTriProps, type ThemeToggleTriSize, TimePicker, type TimePickerProps, Timeline, type TimelineItem, type TimelineProps, type TimelineTone, type TimelineVariant, Toaster, Toggle, type ToggleProps, Tooltip, TooltipHelp, type TooltipPosition, type TooltipProps, type TooltipVariant, Topbar, type TopbarProps, UnsavedIndicator, type UnsavedIndicatorProps, UserMenu, type UserMenuContentProps, type UserMenuHeaderProps, type UserMenuItemProps, type UserMenuItemVariant, type UserMenuProps, type UserMenuTriggerProps, VerticalNavigation, type VerticalNavigationItemProps, type VerticalNavigationProps, type VerticalNavigationSectionProps, VideoEmbed, type VideoEmbedAspect, type VideoEmbedProps, ZoomBar, type ZoomBarProps, defaultPasswordRules, placeholderAvatar, placeholderCover, portalDocsParams, useAutoRefresh };