@aginies/ui 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -2
- package/dist/index.cjs +7740 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3003 -0
- package/dist/index.d.ts +3003 -0
- package/dist/index.js +7512 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +2515 -0
- package/package.json +65 -4
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,3003 @@
|
|
|
1
|
+
// generated by sync-from-ds; edit the design system, not this file
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
// React 19 types dropped the global JSX namespace; the declarations below name JSX.Element.
|
|
4
|
+
import JSX = React.JSX;
|
|
5
|
+
|
|
6
|
+
// --- core ---
|
|
7
|
+
/** A Lucide glyph by name, inline, inheriting currentColor. Stroke 2 at ≤16px, 1.75 above. */
|
|
8
|
+
export interface IconProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'color' | 'name' | 'size' | 'title'> {
|
|
9
|
+
/** Lucide name in kebab-case (circle-check, triangle-alert, loader-circle, sparkles) */
|
|
10
|
+
name: string;
|
|
11
|
+
/** 16 in controls, 20 in headers, 24 in tiles */
|
|
12
|
+
size?: number;
|
|
13
|
+
/** Accessible name; without it the icon is aria-hidden */
|
|
14
|
+
title?: string;
|
|
15
|
+
strokeWidth?: number;
|
|
16
|
+
color?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function Icon(props: IconProps): JSX.Element;
|
|
19
|
+
/** One of the seven product-family glyphs from aginies.com. */
|
|
20
|
+
export interface ProductIconProps extends Omit<React.HTMLAttributes<HTMLElement>, 'size' | 'title'> {
|
|
21
|
+
product: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
22
|
+
/** 24 default; 16–20 beside a name in navigation */
|
|
23
|
+
size?: number;
|
|
24
|
+
/** The 40px soft-ground tile with the glyph in link colour */
|
|
25
|
+
boxed?: boolean;
|
|
26
|
+
title?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function ProductIcon(props: ProductIconProps): JSX.Element;
|
|
29
|
+
export declare const PRODUCT_NAMES: Record<ProductIconProps['product'], string>;
|
|
30
|
+
/** The Aginies mark as inline SVG — the one place the brand gradients appear. */
|
|
31
|
+
export interface AginiesMarkProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'size' | 'title'> {
|
|
32
|
+
/** 22–44px on screen, 96 in the page loader */
|
|
33
|
+
size?: number;
|
|
34
|
+
/** Accessible name (default "Aginies") */
|
|
35
|
+
title?: string;
|
|
36
|
+
/** Hide from assistive technology when a wordmark sits beside it */
|
|
37
|
+
decorative?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function AginiesMark(props: AginiesMarkProps): JSX.Element;
|
|
40
|
+
/** Mark + wordmark lockup in Bricolage Grotesque 600; optional product name. */
|
|
41
|
+
export interface AginiesLogoProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'size'> {
|
|
42
|
+
size?: number;
|
|
43
|
+
wordmark?: boolean;
|
|
44
|
+
/** "Code", "Dialog": appended in regular weight */
|
|
45
|
+
product?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function AginiesLogo(props: AginiesLogoProps): JSX.Element;
|
|
48
|
+
export declare function cx(...classes: Array<string | false | null | undefined>): string;
|
|
49
|
+
/** The mono uppercase eyebrow that names the group a page or section belongs to ("OBSERVE · LOGS"). Sits above a title; link-coloured, or mute when quiet. */
|
|
50
|
+
export interface EyebrowProps extends React.HTMLAttributes<HTMLElement> {
|
|
51
|
+
/** Mute instead of link colour: inside cards and lists, where it must not compete with the page eyebrow */
|
|
52
|
+
quiet?: boolean;
|
|
53
|
+
/** Tag to render (div default; span inline, h2/h3 when it is the real heading) */
|
|
54
|
+
as?: any;
|
|
55
|
+
}
|
|
56
|
+
export declare function Eyebrow(props: EyebrowProps): JSX.Element;
|
|
57
|
+
/** Keyboard hint (⌘K, Esc) rendered as mono glyphs on panel-2 chips. Use beside a menu item, in the command palette footer, in tooltips. */
|
|
58
|
+
export interface KbdProps extends Omit<React.HTMLAttributes<HTMLElement>, 'size'> {
|
|
59
|
+
/** One chip per key: ['⌘', 'K']; omit to render children as a single chip */
|
|
60
|
+
keys?: string[];
|
|
61
|
+
/** sm 18px chips inside menu items and footers; md 20px */
|
|
62
|
+
size?: 'sm' | 'md';
|
|
63
|
+
}
|
|
64
|
+
export declare function Kbd(props: KbdProps): JSX.Element;
|
|
65
|
+
/** Typography helper: renders one of the type styles in tokens.json (family, size, line-height, weight, tracking) as a class. Use it instead of ad-hoc font CSS. */
|
|
66
|
+
export interface TextProps extends React.HTMLAttributes<HTMLElement> {
|
|
67
|
+
/** Display and headings (Bricolage), text (Instrument Sans), mono (JetBrains Mono) */
|
|
68
|
+
variant?: 'display' | 'h1' | 'h2' | 'h3' | 'title' | 'h4' | 'heading' | 'stat' | 'lede' | 'body' | 'body-2' | 'small' | 'ui' | 'ui-sm' | 'ui-xs' | 'eyebrow' | 'label' | 'tag' | 'code' | 'code-sm';
|
|
69
|
+
/** Tag override; each variant has a sensible default (h1 for display/h1/title, p for text, code for code) */
|
|
70
|
+
as?: any;
|
|
71
|
+
/** Colour; status tones are legible on the grounds and must come with a word or icon */
|
|
72
|
+
tone?: 'text' | 'text-2' | 'mute' | 'link' | 'ok' | 'warn' | 'bad';
|
|
73
|
+
/** tabular-nums for numbers in tables and stats */
|
|
74
|
+
tabular?: boolean;
|
|
75
|
+
/** Single line with ellipsis */
|
|
76
|
+
truncate?: boolean;
|
|
77
|
+
}
|
|
78
|
+
export declare function Text(props: TextProps): JSX.Element;
|
|
79
|
+
|
|
80
|
+
// --- actions ---
|
|
81
|
+
/** Action trigger. One primary (signal) button per view; neutral for the rest; ghost inside toolbars and cards. */
|
|
82
|
+
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'icon' | 'selected' | 'size'> {
|
|
83
|
+
variant?: 'primary' | 'ink' | 'neutral' | 'outline' | 'ghost' | 'destructive' | 'destructive-text' | 'success' | 'link';
|
|
84
|
+
/** xs 26 · sm 28 · md 32 · lg 40 (comfortable density scales md to 40) */
|
|
85
|
+
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
86
|
+
/** Lucide name, leading */
|
|
87
|
+
icon?: string;
|
|
88
|
+
/** Lucide name, trailing (slides 3px on hover) */
|
|
89
|
+
iconRight?: string;
|
|
90
|
+
/** Full width: mobile sheets and login only */
|
|
91
|
+
stretch?: boolean;
|
|
92
|
+
/** Pressed state of a stateful toggle (aria-pressed) */
|
|
93
|
+
selected?: boolean;
|
|
94
|
+
/** Keeps the width, shows a spinner, sets aria-busy and disables */
|
|
95
|
+
loading?: boolean;
|
|
96
|
+
/** Render as another tag, e.g. "a" */
|
|
97
|
+
as?: any;
|
|
98
|
+
}
|
|
99
|
+
export declare function Button(props: ButtonProps): JSX.Element;
|
|
100
|
+
/** Icon-only button; label is required (accessible name + tooltip). */
|
|
101
|
+
export interface ButtonIconProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'icon' | 'label' | 'size'> {
|
|
102
|
+
icon: string;
|
|
103
|
+
label: string;
|
|
104
|
+
variant?: ButtonProps['variant'];
|
|
105
|
+
size?: ButtonProps['size'];
|
|
106
|
+
/** Red dot for unread state */
|
|
107
|
+
notification?: boolean;
|
|
108
|
+
}
|
|
109
|
+
export declare function ButtonIcon(props: ButtonIconProps): JSX.Element;
|
|
110
|
+
/** Groups related buttons; joined removes inner radii, list keeps the control gap. */
|
|
111
|
+
export interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
112
|
+
joined?: boolean;
|
|
113
|
+
}
|
|
114
|
+
export declare function ButtonGroup(props: ButtonGroupProps): JSX.Element;
|
|
115
|
+
/** Toggle button with three labels: off, on, and on-hover (Follow · Following · Unfollow). Use for follow, subscribe, watch and pin actions where "undo" must be visible before the click. */
|
|
116
|
+
export interface ButtonStatefulProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'selected' | 'size'> {
|
|
117
|
+
/** Pressed state (aria-pressed) */
|
|
118
|
+
selected?: boolean;
|
|
119
|
+
onChange?: (selected: boolean) => void;
|
|
120
|
+
/** off "Follow" · on "Following" · hover "Unfollow"; all three are laid out so the width never jumps */
|
|
121
|
+
labels?: { off?: string; on?: string; hover?: string };
|
|
122
|
+
/** Lucide names per state (plus · check · x) */
|
|
123
|
+
icons?: { off?: string; on?: string; hover?: string };
|
|
124
|
+
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
125
|
+
/** neutral default; ghost inside toolbars */
|
|
126
|
+
variant?: 'neutral' | 'ghost' | 'outline';
|
|
127
|
+
}
|
|
128
|
+
export declare function ButtonStateful(props: ButtonStatefulProps): JSX.Element;
|
|
129
|
+
export interface MenuItem {
|
|
130
|
+
label?: React.ReactNode;
|
|
131
|
+
/** Identity for selected and keys */
|
|
132
|
+
value?: string;
|
|
133
|
+
/** Lucide name, leading, mute */
|
|
134
|
+
icon?: string;
|
|
135
|
+
/** Second line in mute */
|
|
136
|
+
meta?: string;
|
|
137
|
+
/** Keyboard hint rendered as Kbd */
|
|
138
|
+
shortcut?: string;
|
|
139
|
+
disabled?: boolean;
|
|
140
|
+
/** Red item for destructive actions (Delete agent) */
|
|
141
|
+
danger?: boolean;
|
|
142
|
+
/** Checked item in a single-select menu */
|
|
143
|
+
selected?: boolean;
|
|
144
|
+
/** Shows a trailing chevron */
|
|
145
|
+
submenu?: boolean;
|
|
146
|
+
/** separator and header rows; 'separator' as a bare string also works */
|
|
147
|
+
type?: 'item' | 'separator' | 'header';
|
|
148
|
+
onClick?: (item: MenuItem) => void;
|
|
149
|
+
}
|
|
150
|
+
/** Dropdown menu anchored to a trigger (Button or ButtonIcon): actions, overflow and single-select lists. searchable adds a filter field (the dynamic menu) and footer a closing action. */
|
|
151
|
+
export interface MenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect' | 'open' | 'selected' | 'width'> {
|
|
152
|
+
items: (MenuItem | 'separator')[];
|
|
153
|
+
/** The element that opens it; receives aria-haspopup/expanded and the click */
|
|
154
|
+
trigger?: React.ReactElement;
|
|
155
|
+
/** Controlled open state */
|
|
156
|
+
open?: boolean;
|
|
157
|
+
onOpenChange?: (open: boolean) => void;
|
|
158
|
+
/** Which edge of the trigger the menu aligns to */
|
|
159
|
+
align?: 'left' | 'right';
|
|
160
|
+
onSelect?: (item: MenuItem) => void;
|
|
161
|
+
/** Filter field at the top; type-ahead is off while it is on */
|
|
162
|
+
searchable?: boolean;
|
|
163
|
+
/** Value of the checked item (single-select menu, menuitemradio) */
|
|
164
|
+
selected?: string;
|
|
165
|
+
header?: React.ReactNode;
|
|
166
|
+
/** Bottom slot above a divider: "Manage tenants…" */
|
|
167
|
+
footer?: React.ReactNode;
|
|
168
|
+
/** Render inline without trigger or positioning */
|
|
169
|
+
static?: boolean;
|
|
170
|
+
/** Fixed width (default min 200, max 320) */
|
|
171
|
+
width?: number | string;
|
|
172
|
+
labels?: { search?: string; empty?: string };
|
|
173
|
+
}
|
|
174
|
+
export declare function Menu(props: MenuProps): JSX.Element;
|
|
175
|
+
/** Removable token for selections, filters and recipients, with a leading avatar or icon. */
|
|
176
|
+
export interface PillProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'icon' | 'label' | 'size'> {
|
|
177
|
+
label: React.ReactNode;
|
|
178
|
+
icon?: string;
|
|
179
|
+
/** Image URL, or 1–2 initials rendered on a signal-soft circle */
|
|
180
|
+
avatar?: string;
|
|
181
|
+
/** Shows the × button */
|
|
182
|
+
onRemove?: () => void;
|
|
183
|
+
/** Makes the label a link */
|
|
184
|
+
href?: string;
|
|
185
|
+
/** Unresolved or rejected entry: bad border and circle-alert icon */
|
|
186
|
+
invalid?: boolean;
|
|
187
|
+
/** CSS max-width that truncates the label */
|
|
188
|
+
truncate?: string | number;
|
|
189
|
+
size?: 'sm' | 'md';
|
|
190
|
+
labels?: { remove?: string };
|
|
191
|
+
}
|
|
192
|
+
export declare function Pill(props: PillProps): JSX.Element;
|
|
193
|
+
/** Wrapping container for pills: a bordered field-like box, or bare inside another control. */
|
|
194
|
+
export interface PillContainerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
195
|
+
bare?: boolean;
|
|
196
|
+
}
|
|
197
|
+
export declare function PillContainer(props: PillContainerProps): JSX.Element;
|
|
198
|
+
/** The website's filter chip: a 32px pill that toggles (aria-pressed), 28px as sm. Use for filters, facets and quick scopes above a list. */
|
|
199
|
+
export interface ChipProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'icon' | 'size'> {
|
|
200
|
+
active?: boolean;
|
|
201
|
+
icon?: string;
|
|
202
|
+
/** Trailing count in mono */
|
|
203
|
+
count?: number | string;
|
|
204
|
+
size?: 'sm' | 'md';
|
|
205
|
+
/** Render as another tag, e.g. "a" for a filter link */
|
|
206
|
+
as?: any;
|
|
207
|
+
}
|
|
208
|
+
export declare function Chip(props: ChipProps): JSX.Element;
|
|
209
|
+
export interface ChipOption { label: React.ReactNode; value: string; icon?: string; count?: number | string; disabled?: boolean; }
|
|
210
|
+
/** A set of chips with single (radio-like, click again to clear) or multiple selection. */
|
|
211
|
+
export interface ChipGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'onChange' | 'size' | 'value'> {
|
|
212
|
+
options: (string | ChipOption)[];
|
|
213
|
+
/** A string, or an array when multiple */
|
|
214
|
+
value?: string | string[];
|
|
215
|
+
onChange?: (value: any) => void;
|
|
216
|
+
multiple?: boolean;
|
|
217
|
+
size?: 'sm' | 'md';
|
|
218
|
+
/** Accessible name of the group */
|
|
219
|
+
label?: string;
|
|
220
|
+
}
|
|
221
|
+
export declare function ChipGroup(props: ChipGroupProps): JSX.Element;
|
|
222
|
+
export interface CommandItem {
|
|
223
|
+
id?: string;
|
|
224
|
+
label: string;
|
|
225
|
+
/** Right-aligned mute text: tenant, path, type */
|
|
226
|
+
meta?: string;
|
|
227
|
+
/** Section heading when searching */
|
|
228
|
+
group?: string;
|
|
229
|
+
icon?: string;
|
|
230
|
+
/** Product glyph instead of a Lucide icon */
|
|
231
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
232
|
+
/** Kbd hint: a string or one key per array item */
|
|
233
|
+
shortcut?: string | string[];
|
|
234
|
+
/** Extra words the search matches */
|
|
235
|
+
keywords?: string;
|
|
236
|
+
onSelect?: (item: CommandItem) => void;
|
|
237
|
+
}
|
|
238
|
+
/** ⌘K overlay: search field, grouped results, recent items while the query is empty, arrow-key navigation and Kbd hints. */
|
|
239
|
+
export interface CommandPaletteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClose' | 'onSelect' | 'open' | 'placeholder'> {
|
|
240
|
+
open: boolean;
|
|
241
|
+
onClose?: () => void;
|
|
242
|
+
items: CommandItem[];
|
|
243
|
+
onSelect?: (item: CommandItem) => void;
|
|
244
|
+
/** Shown under "Recent" while the query is empty */
|
|
245
|
+
recent?: CommandItem[];
|
|
246
|
+
placeholder?: string;
|
|
247
|
+
/** Render without backdrop, in flow (docs) */
|
|
248
|
+
static?: boolean;
|
|
249
|
+
labels?: { placeholder?: string; recent?: string; results?: string; suggestions?: string; empty?: string; navigate?: string; open?: string; close?: string; title?: string };
|
|
250
|
+
}
|
|
251
|
+
export declare function CommandPalette(props: CommandPaletteProps): JSX.Element | null;
|
|
252
|
+
export type Theme = 'light' | 'dark' | 'system';
|
|
253
|
+
/** Theme switch: light / dark / system as a segmented icon control, or one button that cycles. Uncontrolled it drives useTheme; controlled it only reports. */
|
|
254
|
+
export interface ThemeToggleProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'size' | 'value'> {
|
|
255
|
+
value?: Theme;
|
|
256
|
+
onChange?: (value: Theme) => void;
|
|
257
|
+
/** Subset and order of the choices */
|
|
258
|
+
options?: Theme[];
|
|
259
|
+
variant?: 'segmented' | 'button';
|
|
260
|
+
size?: 'sm' | 'md';
|
|
261
|
+
/** Text beside each icon */
|
|
262
|
+
showLabels?: boolean;
|
|
263
|
+
labels?: { light?: string; dark?: string; system?: string; title?: string };
|
|
264
|
+
}
|
|
265
|
+
export declare function ThemeToggle(props: ThemeToggleProps): JSX.Element;
|
|
266
|
+
/** [theme, setTheme, resolved]. Reads localStorage "agn-theme" (try/catch), else the current data-theme on <html>, else the default; writes the resolved theme to data-theme and follows the OS while "system". */
|
|
267
|
+
export declare function useTheme(defaultTheme?: Theme): [Theme, (t: Theme) => void, 'light' | 'dark'];
|
|
268
|
+
export declare function resolveTheme(t: Theme): 'light' | 'dark';
|
|
269
|
+
|
|
270
|
+
// --- forms ---
|
|
271
|
+
type FormsSize = 'sm' | 'md' | 'lg';
|
|
272
|
+
/** Label + control + help/error wrapper for every field. Wires id, aria-describedby and aria-invalid onto a single child control; readOnly renders the record-view stacked value with an inline-edit pencil; inline renders a settings row with the label in the left column. */
|
|
273
|
+
export interface FormElementProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'value'> {
|
|
274
|
+
label?: React.ReactNode;
|
|
275
|
+
/** Red asterisk plus sr text; also passed to the child */
|
|
276
|
+
required?: boolean;
|
|
277
|
+
/** "Optional" after the label (use when most fields are required) */
|
|
278
|
+
optional?: boolean;
|
|
279
|
+
/** Mute line under the control (beside the label when inline) */
|
|
280
|
+
help?: React.ReactNode;
|
|
281
|
+
/** Replaces help; bad text with circle-alert, role="alert"; sets invalid on the child */
|
|
282
|
+
error?: React.ReactNode;
|
|
283
|
+
/** Info icon after the label with this as its title */
|
|
284
|
+
hint?: string;
|
|
285
|
+
/** Two-column settings row: label left, control right, divider below */
|
|
286
|
+
inline?: boolean;
|
|
287
|
+
/** Record view: shows value instead of the control */
|
|
288
|
+
readOnly?: boolean;
|
|
289
|
+
/** Displayed when readOnly; "—" when empty */
|
|
290
|
+
value?: React.ReactNode;
|
|
291
|
+
/** Shows the pencil in readOnly mode */
|
|
292
|
+
onEdit?: () => void;
|
|
293
|
+
/** Id of the control; generated when omitted */
|
|
294
|
+
htmlFor?: string;
|
|
295
|
+
labels?: { required?: string; optional?: string; edit?: string };
|
|
296
|
+
}
|
|
297
|
+
export declare function FormElement(props: FormElementProps): JSX.Element;
|
|
298
|
+
/** Single-line text field with leading icon, trailing action, prefix/suffix and invalid state. Wrap in FormElement for label, help and error. */
|
|
299
|
+
export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'action' | 'icon' | 'prefix' | 'size'> {
|
|
300
|
+
/** Lucide name, leading, mute */
|
|
301
|
+
icon?: string;
|
|
302
|
+
/** Lucide name, trailing, mute (hidden while a clear button shows) */
|
|
303
|
+
iconRight?: string;
|
|
304
|
+
/** Mono text before the value: "https://", "₺" */
|
|
305
|
+
prefix?: React.ReactNode;
|
|
306
|
+
/** Mono text after the value: "ms", ".aginies.com" */
|
|
307
|
+
suffix?: React.ReactNode;
|
|
308
|
+
/** Trailing icon button inside the field */
|
|
309
|
+
action?: { icon: string; label: string; onClick: () => void };
|
|
310
|
+
/** Shows × while there is a value */
|
|
311
|
+
onClear?: () => void;
|
|
312
|
+
invalid?: boolean;
|
|
313
|
+
/** sm 28 · md 32 · lg 40 */
|
|
314
|
+
size?: FormsSize;
|
|
315
|
+
/** No border or background: inline editing in tables and headers */
|
|
316
|
+
bare?: boolean;
|
|
317
|
+
/** Props for the wrapping div */
|
|
318
|
+
/** Props for the .agn-field wrapper; className and style merge with the field's own (they no longer replace them) */
|
|
319
|
+
wrapperProps?: React.HTMLAttributes<HTMLDivElement>;
|
|
320
|
+
/** clear: aria-label of the clear button (default "Clear") */
|
|
321
|
+
labels?: { clear?: string };
|
|
322
|
+
}
|
|
323
|
+
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
324
|
+
/** Multi-line text field; autoGrow follows the content and maxLength shows a counter. */
|
|
325
|
+
export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
|
|
326
|
+
invalid?: boolean;
|
|
327
|
+
size?: FormsSize;
|
|
328
|
+
/** Height follows the content */
|
|
329
|
+
autoGrow?: boolean;
|
|
330
|
+
/** "{n} / {max}" counter; over the limit it turns bad and sets aria-invalid */
|
|
331
|
+
maxLength?: number;
|
|
332
|
+
labels?: { counter?: string };
|
|
333
|
+
}
|
|
334
|
+
export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
335
|
+
export interface SelectOption { label: string; value: string; disabled?: boolean; }
|
|
336
|
+
/** Native select styled like Input, with the chevron drawn in CSS. For search, meta lines or multi-select use Combobox. */
|
|
337
|
+
export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'icon' | 'placeholder' | 'size'> {
|
|
338
|
+
/** Strings, options or { label, options } groups; children options also work */
|
|
339
|
+
options?: (string | SelectOption | { label: string; options: (string | SelectOption)[] })[];
|
|
340
|
+
/** Empty first option; hidden once required */
|
|
341
|
+
placeholder?: string;
|
|
342
|
+
icon?: string;
|
|
343
|
+
invalid?: boolean;
|
|
344
|
+
size?: FormsSize;
|
|
345
|
+
}
|
|
346
|
+
export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
|
|
347
|
+
/** Checkbox with label and description; indeterminate for a select-all that covers part of the set. */
|
|
348
|
+
export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'checked' | 'label' | 'onChange' | 'size'> {
|
|
349
|
+
label?: React.ReactNode;
|
|
350
|
+
description?: React.ReactNode;
|
|
351
|
+
checked?: boolean;
|
|
352
|
+
/** Dash instead of a check; aria-checked="mixed" */
|
|
353
|
+
indeterminate?: boolean;
|
|
354
|
+
invalid?: boolean;
|
|
355
|
+
size?: 'sm' | 'md';
|
|
356
|
+
onChange?: (checked: boolean, e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
357
|
+
}
|
|
358
|
+
export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
359
|
+
/** A titled fieldset of checkboxes; inline lays them in a row. */
|
|
360
|
+
export interface CheckboxGroupProps extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, 'label'> {
|
|
361
|
+
label?: React.ReactNode;
|
|
362
|
+
inline?: boolean;
|
|
363
|
+
invalid?: boolean;
|
|
364
|
+
error?: React.ReactNode;
|
|
365
|
+
help?: React.ReactNode;
|
|
366
|
+
}
|
|
367
|
+
export declare function CheckboxGroup(props: CheckboxGroupProps): JSX.Element;
|
|
368
|
+
/** Switch for a setting that applies immediately (no save step). Label left or right; optional on/off word. */
|
|
369
|
+
export interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'checked' | 'label' | 'onChange' | 'size'> {
|
|
370
|
+
label?: React.ReactNode;
|
|
371
|
+
description?: React.ReactNode;
|
|
372
|
+
checked?: boolean;
|
|
373
|
+
onChange?: (checked: boolean, e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
374
|
+
/** right default; left for settings rows where the switch sits at the end */
|
|
375
|
+
labelPosition?: 'left' | 'right';
|
|
376
|
+
/** Mono "On"/"Off" beside the track */
|
|
377
|
+
showState?: boolean;
|
|
378
|
+
/** md 36×20 · sm 28×16 */
|
|
379
|
+
size?: 'sm' | 'md';
|
|
380
|
+
labels?: { on?: string; off?: string };
|
|
381
|
+
}
|
|
382
|
+
export declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLInputElement>>;
|
|
383
|
+
/** Icon-only checkbox rendered as a pressed button (add to list, star, watch); label is the accessible name. */
|
|
384
|
+
export interface CheckboxButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'checked' | 'icon' | 'label' | 'onChange' | 'size'> {
|
|
385
|
+
checked?: boolean;
|
|
386
|
+
onChange?: (checked: boolean) => void;
|
|
387
|
+
/** Lucide name when off (plus) */
|
|
388
|
+
icon?: string;
|
|
389
|
+
/** Lucide name when on (check) */
|
|
390
|
+
iconChecked?: string;
|
|
391
|
+
label: string;
|
|
392
|
+
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
393
|
+
}
|
|
394
|
+
export declare function CheckboxButton(props: CheckboxButtonProps): JSX.Element;
|
|
395
|
+
export interface RadioOption { label: React.ReactNode; value: string; description?: React.ReactNode; icon?: string; disabled?: boolean; }
|
|
396
|
+
/** Single choice. list renders stacked radios with descriptions; button renders the joined segmented radio button group. */
|
|
397
|
+
export interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'label' | 'name' | 'onChange' | 'size' | 'value'> {
|
|
398
|
+
name?: string;
|
|
399
|
+
options: (string | RadioOption)[];
|
|
400
|
+
value?: string;
|
|
401
|
+
onChange?: (value: string) => void;
|
|
402
|
+
/** Radios in a row (list variant) */
|
|
403
|
+
inline?: boolean;
|
|
404
|
+
variant?: 'list' | 'button';
|
|
405
|
+
size?: 'sm' | 'md';
|
|
406
|
+
disabled?: boolean;
|
|
407
|
+
invalid?: boolean;
|
|
408
|
+
/** Accessible name of the group */
|
|
409
|
+
label?: string;
|
|
410
|
+
}
|
|
411
|
+
export declare function RadioGroup(props: RadioGroupProps): JSX.Element;
|
|
412
|
+
export interface ComboboxOption {
|
|
413
|
+
label: string;
|
|
414
|
+
value: string;
|
|
415
|
+
/** Second line in mute */
|
|
416
|
+
meta?: string;
|
|
417
|
+
icon?: string;
|
|
418
|
+
/** Image URL or a name (initials are derived) */
|
|
419
|
+
avatar?: string;
|
|
420
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
421
|
+
disabled?: boolean;
|
|
422
|
+
/** Group heading row */
|
|
423
|
+
type?: 'option' | 'header';
|
|
424
|
+
}
|
|
425
|
+
/** Searchable single/multi select with option meta and a leading icon, avatar or product glyph. picklist is a closed list; lookup is a search over records (agents, people, tenants). id and aria-* props go to the combobox input; other HTML props go to the wrapper. */
|
|
426
|
+
export interface ComboboxProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'icon' | 'onChange' | 'open' | 'placeholder' | 'size' | 'value'> {
|
|
427
|
+
options: (string | ComboboxOption)[];
|
|
428
|
+
/** A value, or an array when multiple */
|
|
429
|
+
value?: string | string[] | null;
|
|
430
|
+
onChange?: (value: any) => void;
|
|
431
|
+
multiple?: boolean;
|
|
432
|
+
/** picklist: no typing, chevron, type-ahead; lookup: search icon, filter as you type */
|
|
433
|
+
mode?: 'picklist' | 'lookup';
|
|
434
|
+
/** Override the mode's typing behaviour */
|
|
435
|
+
searchable?: boolean;
|
|
436
|
+
placeholder?: string;
|
|
437
|
+
disabled?: boolean;
|
|
438
|
+
invalid?: boolean;
|
|
439
|
+
size?: FormsSize;
|
|
440
|
+
/** Leading icon in the field */
|
|
441
|
+
icon?: string;
|
|
442
|
+
/** Controlled open state (docs, custom triggers) */
|
|
443
|
+
open?: boolean;
|
|
444
|
+
onOpenChange?: (open: boolean) => void;
|
|
445
|
+
/** Selected values as Pills under the field (multiple) */
|
|
446
|
+
inlinePills?: boolean;
|
|
447
|
+
renderOption?: (o: ComboboxOption) => React.ReactNode;
|
|
448
|
+
labels?: { empty?: string; clear?: string; remove?: string; placeholder?: string; search?: string };
|
|
449
|
+
}
|
|
450
|
+
export declare function Combobox(props: ComboboxProps): JSX.Element;
|
|
451
|
+
export interface SegmentOption { label: string; value: string; icon?: string; iconOnly?: boolean; disabled?: boolean; }
|
|
452
|
+
/** Compact single-select for views, periods and modes (List · Board · Timeline): 26px items in a 32px track with radio semantics. */
|
|
453
|
+
export interface SegmentedControlProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'onChange' | 'size' | 'value'> {
|
|
454
|
+
options: (string | SegmentOption)[];
|
|
455
|
+
value?: string;
|
|
456
|
+
onChange?: (value: string) => void;
|
|
457
|
+
/** md 32 track · sm 28 track */
|
|
458
|
+
size?: 'sm' | 'md';
|
|
459
|
+
/** Fill the width, items share it */
|
|
460
|
+
stretch?: boolean;
|
|
461
|
+
/** Accessible name of the group */
|
|
462
|
+
label?: string;
|
|
463
|
+
}
|
|
464
|
+
export declare function SegmentedControl(props: SegmentedControlProps): JSX.Element;
|
|
465
|
+
/** Masked value (API key, token) in mono with reveal and copy. Read-only unless onChange is given. */
|
|
466
|
+
export interface SecretFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'size'> {
|
|
467
|
+
value?: string;
|
|
468
|
+
/** Makes the field editable */
|
|
469
|
+
onChange?: (value: string) => void;
|
|
470
|
+
/** Characters left visible at the end (4) */
|
|
471
|
+
revealLast?: number;
|
|
472
|
+
size?: FormsSize;
|
|
473
|
+
invalid?: boolean;
|
|
474
|
+
labels?: { reveal?: string; hide?: string; copy?: string; copied?: string };
|
|
475
|
+
}
|
|
476
|
+
export declare function SecretField(props: SecretFieldProps): JSX.Element;
|
|
477
|
+
/** Free-text tokens: Enter or comma adds, Backspace removes the last, paste splits. validate marks a pill invalid. */
|
|
478
|
+
export interface TagInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'max' | 'onChange' | 'placeholder' | 'value'> {
|
|
479
|
+
value?: string[];
|
|
480
|
+
onChange?: (value: string[]) => void;
|
|
481
|
+
/** Returns false for an entry to show as invalid (bad e-mail, unknown id) */
|
|
482
|
+
validate?: (entry: string) => boolean;
|
|
483
|
+
/** Stops accepting once reached */
|
|
484
|
+
max?: number;
|
|
485
|
+
placeholder?: string;
|
|
486
|
+
disabled?: boolean;
|
|
487
|
+
invalid?: boolean;
|
|
488
|
+
/** Regex that splits typed and pasted text (comma, newline, semicolon) */
|
|
489
|
+
separators?: RegExp;
|
|
490
|
+
inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
|
|
491
|
+
labels?: { remove?: string; placeholder?: string };
|
|
492
|
+
}
|
|
493
|
+
export declare function TagInput(props: TagInputProps): JSX.Element;
|
|
494
|
+
|
|
495
|
+
// --- pickers ---
|
|
496
|
+
type PickersSize = 'sm' | 'md' | 'lg';
|
|
497
|
+
/** Date field with a calendar popover; the value is a Date. Formats 15.10.2026 for tr and 15 Oct 2026 for en through locale. */
|
|
498
|
+
export interface DatepickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'max' | 'min' | 'onChange' | 'open' | 'placeholder' | 'size' | 'value'> {
|
|
499
|
+
/** A date, or [from, to] with range */
|
|
500
|
+
value?: Date | null | [Date | null, Date | null];
|
|
501
|
+
/** Receives a date, or [from, to] with range (to is null after the first click) */
|
|
502
|
+
onChange?: (d: any) => void;
|
|
503
|
+
/** Pick a from–to range: "15.10.2026 – 22.10.2026"; closes when both ends are set */
|
|
504
|
+
range?: boolean;
|
|
505
|
+
/** Shown while empty; defaults to the locale's pattern (GG.AA.YYYY / DD MMM YYYY) */
|
|
506
|
+
placeholder?: string;
|
|
507
|
+
/** "tr" or "tr-TR" → 15.10.2026; anything else → 15 Oct 2026 */
|
|
508
|
+
locale?: string;
|
|
509
|
+
disabled?: boolean;
|
|
510
|
+
invalid?: boolean;
|
|
511
|
+
size?: PickersSize;
|
|
512
|
+
min?: Date;
|
|
513
|
+
max?: Date;
|
|
514
|
+
/** 0 Sunday · 1 Monday (default) */
|
|
515
|
+
weekStartsOn?: 0 | 1;
|
|
516
|
+
/** Controlled popover state (docs) */
|
|
517
|
+
open?: boolean;
|
|
518
|
+
onOpenChange?: (open: boolean) => void;
|
|
519
|
+
labels?: CalendarProps['labels'];
|
|
520
|
+
}
|
|
521
|
+
export declare function Datepicker(props: DatepickerProps): JSX.Element;
|
|
522
|
+
/** Inline month grid with keyboard navigation; range mode picks a start and an end. Used by Datepicker and standalone in filters and reports. */
|
|
523
|
+
export interface CalendarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'max' | 'min' | 'onChange' | 'value'> {
|
|
524
|
+
value?: Date | null;
|
|
525
|
+
onChange?: (d: Date | null) => void;
|
|
526
|
+
min?: Date;
|
|
527
|
+
max?: Date;
|
|
528
|
+
locale?: string;
|
|
529
|
+
weekStartsOn?: 0 | 1;
|
|
530
|
+
/** Month shown first (defaults to value or today) */
|
|
531
|
+
month?: Date;
|
|
532
|
+
/** Two-click range selection; reports through onRangeChange */
|
|
533
|
+
range?: boolean;
|
|
534
|
+
rangeStart?: Date | null;
|
|
535
|
+
rangeEnd?: Date | null;
|
|
536
|
+
onRangeChange?: (r: { start: Date | null; end: Date | null }) => void;
|
|
537
|
+
labels?: { prev?: string; next?: string; today?: string; clear?: string; grid?: string };
|
|
538
|
+
}
|
|
539
|
+
export declare function Calendar(props: CalendarProps): JSX.Element;
|
|
540
|
+
/** 15.10.2026 for a tr locale, 15 Oct 2026 otherwise; empty string for null. */
|
|
541
|
+
export declare function fmtDate(d: Date | string | null | undefined, locale?: string): string;
|
|
542
|
+
/** 24h time on a Combobox: slots every step minutes, typeable. */
|
|
543
|
+
export interface TimepickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'max' | 'min' | 'onChange' | 'open' | 'placeholder' | 'size' | 'step' | 'value'> {
|
|
544
|
+
/** "14:30" */
|
|
545
|
+
value?: string | null;
|
|
546
|
+
onChange?: (v: string | null) => void;
|
|
547
|
+
/** Minutes between slots (30) */
|
|
548
|
+
step?: number;
|
|
549
|
+
/** "09:00" — first slot */
|
|
550
|
+
min?: string;
|
|
551
|
+
/** "18:00" — last slot */
|
|
552
|
+
max?: string;
|
|
553
|
+
placeholder?: string;
|
|
554
|
+
disabled?: boolean;
|
|
555
|
+
invalid?: boolean;
|
|
556
|
+
size?: PickersSize;
|
|
557
|
+
open?: boolean;
|
|
558
|
+
labels?: { empty?: string; clear?: string };
|
|
559
|
+
}
|
|
560
|
+
export declare function Timepicker(props: TimepickerProps): JSX.Element;
|
|
561
|
+
/** Datepicker and Timepicker side by side for a scheduled run or a callback. */
|
|
562
|
+
export interface DatetimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'max' | 'min' | 'onChange' | 'size' | 'step'> {
|
|
563
|
+
date?: Date | null;
|
|
564
|
+
time?: string | null;
|
|
565
|
+
onDateChange?: (d: Date | null) => void;
|
|
566
|
+
onTimeChange?: (t: string | null) => void;
|
|
567
|
+
locale?: string;
|
|
568
|
+
step?: number;
|
|
569
|
+
min?: Date;
|
|
570
|
+
max?: Date;
|
|
571
|
+
disabled?: boolean;
|
|
572
|
+
invalid?: boolean;
|
|
573
|
+
size?: PickersSize;
|
|
574
|
+
labels?: CalendarProps['labels'];
|
|
575
|
+
}
|
|
576
|
+
export declare function DatetimePicker(props: DatetimePickerProps): JSX.Element;
|
|
577
|
+
/** "00:00" … "23:30" at the given step, optionally clipped to [min, max]. */
|
|
578
|
+
export declare function timeSlots(step?: number, min?: string, max?: string): string[];
|
|
579
|
+
/** Slider with a filled track and a mono value readout; range renders two thumbs. Native range inputs, so arrow keys step. */
|
|
580
|
+
export interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'format' | 'label' | 'max' | 'min' | 'onChange' | 'size' | 'step' | 'value'> {
|
|
581
|
+
/** A number, or [min, max] when range */
|
|
582
|
+
value?: number | [number, number];
|
|
583
|
+
onChange?: (v: any) => void;
|
|
584
|
+
min?: number;
|
|
585
|
+
max?: number;
|
|
586
|
+
step?: number;
|
|
587
|
+
range?: boolean;
|
|
588
|
+
/** Readout at the right (true) */
|
|
589
|
+
showValue?: boolean;
|
|
590
|
+
/** Formats the readout: v => v + ' ms' */
|
|
591
|
+
format?: (v: number) => string;
|
|
592
|
+
/** Accessible name */
|
|
593
|
+
label?: string;
|
|
594
|
+
disabled?: boolean;
|
|
595
|
+
size?: 'sm' | 'md';
|
|
596
|
+
}
|
|
597
|
+
export declare function Slider(props: SliderProps): JSX.Element;
|
|
598
|
+
export interface Swatch { value: string; label: string; }
|
|
599
|
+
/** Hex field with a swatch and a popover of the data palette (token swatches) plus the native picker. Emits a resolved #rrggbb. */
|
|
600
|
+
export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'onChange' | 'open' | 'size' | 'value'> {
|
|
601
|
+
/** "#0077c2" */
|
|
602
|
+
value?: string;
|
|
603
|
+
onChange?: (hex: string) => void;
|
|
604
|
+
/** CSS colours or var(--token) values; defaultSwatches is data-1…6 plus the signal/ok/warn/bad ramps */
|
|
605
|
+
swatches?: (string | Swatch)[];
|
|
606
|
+
disabled?: boolean;
|
|
607
|
+
invalid?: boolean;
|
|
608
|
+
size?: PickersSize;
|
|
609
|
+
open?: boolean;
|
|
610
|
+
onOpenChange?: (open: boolean) => void;
|
|
611
|
+
labels?: { open?: string; custom?: string; swatches?: string; hex?: string };
|
|
612
|
+
}
|
|
613
|
+
export declare function ColorPicker(props: ColorPickerProps): JSX.Element;
|
|
614
|
+
export declare const defaultSwatches: Swatch[];
|
|
615
|
+
/** Numeric stepper (− value +) for seats, retries, concurrency. Arrow keys step, Shift ×10, typed values clamp on blur. */
|
|
616
|
+
export interface CounterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'format' | 'label' | 'max' | 'min' | 'onChange' | 'size' | 'step' | 'value'> {
|
|
617
|
+
value?: number;
|
|
618
|
+
onChange?: (v: number) => void;
|
|
619
|
+
min?: number;
|
|
620
|
+
max?: number;
|
|
621
|
+
step?: number;
|
|
622
|
+
disabled?: boolean;
|
|
623
|
+
invalid?: boolean;
|
|
624
|
+
size?: PickersSize;
|
|
625
|
+
/** Mono unit after the value: "calls", "dk" */
|
|
626
|
+
suffix?: React.ReactNode;
|
|
627
|
+
/** Formats the displayed value while not editing */
|
|
628
|
+
format?: (v: number) => string;
|
|
629
|
+
/** Accessible name */
|
|
630
|
+
label?: string;
|
|
631
|
+
labels?: { decrement?: string; increment?: string };
|
|
632
|
+
}
|
|
633
|
+
export declare function Counter(props: CounterProps): JSX.Element;
|
|
634
|
+
export interface PicklistOption { label: string; value: string; icon?: string; meta?: string; }
|
|
635
|
+
/** Two-list transfer for an ordered multi-selection (columns, fields, permissions). Keyboard: arrows, Space, Enter or ←/→ transfer, Alt+↑/↓ reorder, ⌘A. */
|
|
636
|
+
export interface DuelingPicklistProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'height' | 'label' | 'onChange' | 'value'> {
|
|
637
|
+
options: (string | PicklistOption)[];
|
|
638
|
+
/** Ordered selected values */
|
|
639
|
+
value?: string[];
|
|
640
|
+
onChange?: (v: string[]) => void;
|
|
641
|
+
/** Accessible name of the whole control */
|
|
642
|
+
label?: string;
|
|
643
|
+
/** List height in px (200) */
|
|
644
|
+
height?: number;
|
|
645
|
+
disabled?: boolean;
|
|
646
|
+
labels?: { available?: string; selected?: string; add?: string; remove?: string; up?: string; down?: string; empty?: string; count?: string };
|
|
647
|
+
}
|
|
648
|
+
export declare function DuelingPicklist(props: DuelingPicklistProps): JSX.Element;
|
|
649
|
+
export interface FileEntry { id?: string; name: string; size?: number; status?: 'uploading' | 'done' | 'failed'; progress?: number; error?: string; }
|
|
650
|
+
/** Upload control: a drop zone or a one-line row over a hidden file input, plus the list of chosen files. Enforces maxSize (10 MB) and maxFiles (5) and names each rejection. */
|
|
651
|
+
export interface FileSelectorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'label'> {
|
|
652
|
+
/** Accepted files after the checks */
|
|
653
|
+
onFiles?: (files: File[]) => void;
|
|
654
|
+
/** Rejection messages, already worded */
|
|
655
|
+
onReject?: (messages: string[]) => void;
|
|
656
|
+
/** ".pdf,.wav,audio/*" */
|
|
657
|
+
accept?: string;
|
|
658
|
+
multiple?: boolean;
|
|
659
|
+
/** Bytes per file (10 MB) */
|
|
660
|
+
maxSize?: number;
|
|
661
|
+
/** Total files including those already listed (5) */
|
|
662
|
+
maxFiles?: number;
|
|
663
|
+
variant?: 'dropzone' | 'row';
|
|
664
|
+
/** Files already chosen or uploading */
|
|
665
|
+
files?: FileEntry[];
|
|
666
|
+
onRemove?: (index: number, file: FileEntry) => void;
|
|
667
|
+
disabled?: boolean;
|
|
668
|
+
invalid?: boolean;
|
|
669
|
+
/** For the size format (1,5 MB in tr) */
|
|
670
|
+
locale?: string;
|
|
671
|
+
/** Replaces the zone text */
|
|
672
|
+
label?: string;
|
|
673
|
+
labels?: { drop?: string; browse?: string; hint?: string; remove?: string; tooLarge?: string; tooMany?: string; wrongType?: string; uploading?: string; done?: string; failed?: string };
|
|
674
|
+
}
|
|
675
|
+
export declare function FileSelector(props: FileSelectorProps): JSX.Element;
|
|
676
|
+
/** "1.5 MB" / "1,5 MB" */
|
|
677
|
+
export declare function fmtSize(bytes: number | null | undefined, locale?: string): string;
|
|
678
|
+
/** contentEditable editor with a small toolbar (bold, italic, list, link, code). Emits HTML; ⌘B/I/K/E work. */
|
|
679
|
+
export interface RichTextEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'onChange' | 'placeholder' | 'value'> {
|
|
680
|
+
/** HTML */
|
|
681
|
+
value?: string;
|
|
682
|
+
onChange?: (html: string) => void;
|
|
683
|
+
placeholder?: string;
|
|
684
|
+
disabled?: boolean;
|
|
685
|
+
invalid?: boolean;
|
|
686
|
+
minHeight?: number | string;
|
|
687
|
+
/** Defaults: Bold, Italic, Bulleted list, Link, Code, Link address, Formatting (the toolbar's accessible name) */
|
|
688
|
+
labels?: { bold?: string; italic?: string; list?: string; link?: string; code?: string; linkPrompt?: string; toolbar?: string };
|
|
689
|
+
}
|
|
690
|
+
export declare function RichTextEditor(props: RichTextEditorProps): JSX.Element;
|
|
691
|
+
export interface VisualPickerOption { label: string; value: string; description?: string; icon?: string; product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce'; meta?: string; disabled?: boolean; }
|
|
692
|
+
/** Large selectable tiles with icon, title and description for a template, plan, channel or product choice; single or multi. */
|
|
693
|
+
export interface VisualPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'name' | 'onChange' | 'size' | 'value'> {
|
|
694
|
+
options: VisualPickerOption[];
|
|
695
|
+
/** A value, or an array when multiple */
|
|
696
|
+
value?: string | string[];
|
|
697
|
+
onChange?: (v: any) => void;
|
|
698
|
+
multiple?: boolean;
|
|
699
|
+
/** tile: grid of cards · wide: one full-width row per option */
|
|
700
|
+
variant?: 'tile' | 'wide';
|
|
701
|
+
size?: 'sm' | 'md';
|
|
702
|
+
name?: string;
|
|
703
|
+
/** Fixed column count instead of auto-fill */
|
|
704
|
+
columns?: number;
|
|
705
|
+
/** Accessible name */
|
|
706
|
+
label?: string;
|
|
707
|
+
}
|
|
708
|
+
export declare function VisualPicker(props: VisualPickerProps): JSX.Element;
|
|
709
|
+
export interface ExpressionRow { field?: string; op?: string; value?: string; }
|
|
710
|
+
export interface ExpressionField { label: string; value: string; type?: 'text' | 'number' | 'date' | 'select'; /** Fixed values render a Select */ options?: (string | { label: string; value: string })[]; /** Operators for this field only */ operators?: (string | { label: string; value: string })[]; }
|
|
711
|
+
export interface ExpressionGroup { logic: 'AND' | 'OR'; rows: ExpressionRow[]; }
|
|
712
|
+
/** Condition builder: numbered field · operator · value rows joined by AND or OR, with optional nested groups. For routing rules, QA checks and filters. */
|
|
713
|
+
export interface ExpressionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'title'> {
|
|
714
|
+
title?: string;
|
|
715
|
+
logic?: 'AND' | 'OR';
|
|
716
|
+
onLogicChange?: (l: 'AND' | 'OR') => void;
|
|
717
|
+
rows: ExpressionRow[];
|
|
718
|
+
onChange?: (rows: ExpressionRow[]) => void;
|
|
719
|
+
/** One level of nested groups, each with its own logic */
|
|
720
|
+
groups?: ExpressionGroup[];
|
|
721
|
+
/** Enables the "Add group" action */
|
|
722
|
+
onGroupsChange?: (groups: ExpressionGroup[]) => void;
|
|
723
|
+
fields: (string | ExpressionField)[];
|
|
724
|
+
/** Default operators (equals, does not equal, contains, is greater than, is less than, is empty, is not empty) */
|
|
725
|
+
operators?: (string | { label: string; value: string })[];
|
|
726
|
+
/** Override the default "append an empty row" */
|
|
727
|
+
onAdd?: () => void;
|
|
728
|
+
labels?: { all?: string; any?: string; and?: string; or?: string; add?: string; addGroup?: string; remove?: string; removeGroup?: string; field?: string; operator?: string; value?: string; fieldPlaceholder?: string; valuePlaceholder?: string; logic?: string };
|
|
729
|
+
}
|
|
730
|
+
export declare function Expression(props: ExpressionProps): JSX.Element;
|
|
731
|
+
/** Sticky Save/Cancel bar for long forms, with an unsaved-changes note. */
|
|
732
|
+
export interface DockedFormFooterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled'> {
|
|
733
|
+
onSave?: () => void;
|
|
734
|
+
onCancel?: () => void;
|
|
735
|
+
/** Count drives the note ("3 unsaved changes", "All changes saved") and disables Save at 0 */
|
|
736
|
+
changes?: number;
|
|
737
|
+
/** Free text instead of the count */
|
|
738
|
+
message?: string;
|
|
739
|
+
saving?: boolean;
|
|
740
|
+
disabled?: boolean;
|
|
741
|
+
/** Slot between the note and the actions */
|
|
742
|
+
extra?: React.ReactNode;
|
|
743
|
+
align?: 'left' | 'center' | 'right';
|
|
744
|
+
/** position: fixed to the viewport instead of sticky in the scroll container */
|
|
745
|
+
fixed?: boolean;
|
|
746
|
+
labels?: { save?: string; cancel?: string; changes?: string; change?: string; saved?: string };
|
|
747
|
+
}
|
|
748
|
+
export declare function DockedFormFooter(props: DockedFormFooterProps): JSX.Element;
|
|
749
|
+
|
|
750
|
+
// --- data ---
|
|
751
|
+
export type Tone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
|
|
752
|
+
export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
753
|
+
|
|
754
|
+
/** One column of a DataTable or TreeGrid. */
|
|
755
|
+
export interface DataColumn<T = any> {
|
|
756
|
+
/** Field name on the row; also the sort key */
|
|
757
|
+
key: string;
|
|
758
|
+
/** Header text (mono 11px uppercase) */
|
|
759
|
+
label: React.ReactNode;
|
|
760
|
+
/** Sortable header: click cycles asc → desc → none */
|
|
761
|
+
sortable?: boolean;
|
|
762
|
+
/** Value used for sorting when it differs from row[key] */
|
|
763
|
+
sortValue?: (row: T) => any;
|
|
764
|
+
/** right for numbers and amounts */
|
|
765
|
+
align?: 'left' | 'right' | 'center';
|
|
766
|
+
width?: number | string;
|
|
767
|
+
minWidth?: number | string;
|
|
768
|
+
/** Custom cell; receives (value, row, index) */
|
|
769
|
+
render?: (value: any, row: T, index: number) => React.ReactNode;
|
|
770
|
+
/** Inline edit on double-click, F2 or the pencil (needs onCellEdit) */
|
|
771
|
+
editable?: boolean;
|
|
772
|
+
/** Mono 12px with tabular digits (IDs, counts) */
|
|
773
|
+
mono?: boolean;
|
|
774
|
+
/** Truncate with an ellipsis and a title */
|
|
775
|
+
ellipsis?: boolean;
|
|
776
|
+
/** Lucide icon before the header text */
|
|
777
|
+
icon?: string;
|
|
778
|
+
className?: string;
|
|
779
|
+
}
|
|
780
|
+
/** Visible strings of a DataTable, overridable per locale. */
|
|
781
|
+
export interface DataTableLabels { empty?: string; emptyHint?: string; loading?: string; error?: string; errorHint?: string; retry?: string; selectAll?: string; selectRow?: string; actions?: string; sortedAsc?: string; sortedDesc?: string; edit?: string; }
|
|
782
|
+
/** Dense record grid for agents, runs, approvals and tenants: sortable columns, selection with select-all, inline cell edit, row actions, sticky header, and the states error → loading → empty → rows. Rows are 32px compact and 44px comfortable. */
|
|
783
|
+
export interface DataTableProps<T = any> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'selected' | 'value'> {
|
|
784
|
+
columns: DataColumn<T>[];
|
|
785
|
+
rows: T[];
|
|
786
|
+
/** Field (default "id") or function giving each row's key */
|
|
787
|
+
rowKey?: string | ((row: T, index: number) => string | number);
|
|
788
|
+
/** Checkbox column with select-all (indeterminate when partial) */
|
|
789
|
+
selectable?: boolean;
|
|
790
|
+
/** Controlled selected keys */
|
|
791
|
+
selected?: Array<string | number>;
|
|
792
|
+
defaultSelected?: Array<string | number>;
|
|
793
|
+
onSelectChange?: (keys: Array<string | number>) => void;
|
|
794
|
+
/** Controlled sort; null for none */
|
|
795
|
+
sort?: { key: string; dir: 'asc' | 'desc' } | null;
|
|
796
|
+
defaultSort?: { key: string; dir: 'asc' | 'desc' } | null;
|
|
797
|
+
onSortChange?: (sort: { key: string; dir: 'asc' | 'desc' } | null) => void;
|
|
798
|
+
/** Row opens on click and Enter; rows become focusable (↑ ↓ Home End, Space selects) */
|
|
799
|
+
onRowClick?: (row: T, index: number) => void;
|
|
800
|
+
/** Trailing cell per row, e.g. a ButtonIcon or menu trigger */
|
|
801
|
+
rowActions?: (row: T, index: number) => React.ReactNode;
|
|
802
|
+
/** Header stays visible inside the scroll (default true) */
|
|
803
|
+
stickyHeader?: boolean;
|
|
804
|
+
/** Scroll height of the body */
|
|
805
|
+
maxHeight?: number | string;
|
|
806
|
+
/** Rendered in this order: error, loading, empty, ready. Omitted: empty when rows is empty, else ready */
|
|
807
|
+
state?: 'error' | 'loading' | 'empty' | 'ready';
|
|
808
|
+
labels?: DataTableLabels;
|
|
809
|
+
/** Shows a "Try again" button in the error state */
|
|
810
|
+
onRetry?: () => void;
|
|
811
|
+
/** Footer slot on the right: a Pagination */
|
|
812
|
+
pagination?: React.ReactNode;
|
|
813
|
+
/** Footer slot on the left: a selection summary or totals */
|
|
814
|
+
footer?: React.ReactNode;
|
|
815
|
+
/** Visually hidden table caption */
|
|
816
|
+
caption?: string;
|
|
817
|
+
striped?: boolean;
|
|
818
|
+
/** No outer border or radius (inside a Card with padding none) */
|
|
819
|
+
bare?: boolean;
|
|
820
|
+
/** Commit of an inline edit; the cell shows an input until Enter or blur */
|
|
821
|
+
onCellEdit?: (row: T, key: string, value: string) => void;
|
|
822
|
+
/** Skeleton rows while loading (default 5) */
|
|
823
|
+
skeletonRows?: number;
|
|
824
|
+
rowClassName?: (row: T, index: number) => string | false | undefined;
|
|
825
|
+
/** Key of the row whose detail is open (side panel, split view): aria-current, --selection ground and a --signal edge. Independent of `selected` */
|
|
826
|
+
activeKey?: string | number | null;
|
|
827
|
+
}
|
|
828
|
+
export declare function DataTable<T = any>(props: DataTableProps<T>): JSX.Element;
|
|
829
|
+
|
|
830
|
+
/** A TreeGrid row: any fields plus optional children. */
|
|
831
|
+
export interface TreeGridRow { id: string | number; children?: TreeGridRow[]; /** Open on first render */ expanded?: boolean; /** Lucide icon shown in the first cell */ icon?: string; [key: string]: any; }
|
|
832
|
+
/** Table whose first column expands nested rows: a run and its steps, a tenant and its agents. ← → collapse and expand, ↑ ↓ move. */
|
|
833
|
+
export interface TreeGridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'selected'> {
|
|
834
|
+
columns: DataColumn<TreeGridRow>[];
|
|
835
|
+
rows: TreeGridRow[];
|
|
836
|
+
/** Ids open on first render (else rows with expanded: true) */
|
|
837
|
+
defaultExpanded?: Array<string | number>;
|
|
838
|
+
/** Controlled open ids */
|
|
839
|
+
expanded?: Array<string | number>;
|
|
840
|
+
onExpandChange?: (ids: Array<string | number>) => void;
|
|
841
|
+
onRowClick?: (row: TreeGridRow) => void;
|
|
842
|
+
selected?: string | number;
|
|
843
|
+
stickyHeader?: boolean;
|
|
844
|
+
maxHeight?: number | string;
|
|
845
|
+
/** Pixels per depth level (default 20) */
|
|
846
|
+
indent?: number;
|
|
847
|
+
bare?: boolean;
|
|
848
|
+
labels?: { expand?: string; collapse?: string; empty?: string };
|
|
849
|
+
}
|
|
850
|
+
export declare function TreeGrid(props: TreeGridProps): JSX.Element;
|
|
851
|
+
|
|
852
|
+
/** A Tree node. kind picks the default icon; folders toggle, other kinds select. */
|
|
853
|
+
export interface TreeNode { id: string; label: string; kind?: 'folder' | 'agent' | 'file' | 'tenant' | 'run' | 'tool' | 'kb' | string; icon?: string; /** Product glyph instead of an icon */ product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce'; meta?: string; count?: number; expanded?: boolean; /** A folder that can itself be selected */ selectable?: boolean; children?: TreeNode[]; }
|
|
854
|
+
/** Navigation tree with folders: agents in folders, files in a knowledge base. One selected node; arrows move, ← → collapse and expand, Enter selects. */
|
|
855
|
+
export interface TreeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect' | 'selected'> {
|
|
856
|
+
items: TreeNode[];
|
|
857
|
+
selected?: string;
|
|
858
|
+
onSelect?: (node: TreeNode) => void;
|
|
859
|
+
defaultExpanded?: string[];
|
|
860
|
+
expanded?: string[];
|
|
861
|
+
onExpandChange?: (ids: string[]) => void;
|
|
862
|
+
/** Mono eyebrow above the tree */
|
|
863
|
+
header?: React.ReactNode;
|
|
864
|
+
/** Pixels per depth level (default 16) */
|
|
865
|
+
indent?: number;
|
|
866
|
+
labels?: { expand?: string; collapse?: string; empty?: string };
|
|
867
|
+
}
|
|
868
|
+
export declare function Tree(props: TreeProps): JSX.Element;
|
|
869
|
+
|
|
870
|
+
/** Compact record summary: media, title, meta line, actions. The row unit of a related list. */
|
|
871
|
+
export interface TileProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'selected' | 'title'> {
|
|
872
|
+
title: React.ReactNode;
|
|
873
|
+
/** Lucide icon when there is no media */
|
|
874
|
+
icon?: string;
|
|
875
|
+
/** A BlockIcon, Avatar or ProductIcon */
|
|
876
|
+
media?: React.ReactNode;
|
|
877
|
+
href?: string;
|
|
878
|
+
onClick?: (e: React.MouseEvent) => void;
|
|
879
|
+
/** One or more meta fragments, separated by a middle dot */
|
|
880
|
+
meta?: React.ReactNode | React.ReactNode[];
|
|
881
|
+
actions?: React.ReactNode;
|
|
882
|
+
/** 1px line and radius-lg around the tile */
|
|
883
|
+
boxed?: boolean;
|
|
884
|
+
selected?: boolean;
|
|
885
|
+
as?: any;
|
|
886
|
+
}
|
|
887
|
+
export declare function Tile(props: TileProps): JSX.Element;
|
|
888
|
+
|
|
889
|
+
/** One key field of a SummaryDetail. */
|
|
890
|
+
export interface SummaryField { key?: string; label: React.ReactNode; value?: React.ReactNode; /** Mono tabular value (IDs, counts) */ mono?: boolean; /** Colours the value: ok, warn or bad, with the value itself carrying the word */ tone?: 'ok' | 'warn' | 'bad'; }
|
|
891
|
+
/** Key fields in a row under a record title: mono label over a value, hairlines between. The at-a-glance strip of a record page. */
|
|
892
|
+
export interface SummaryDetailProps extends Omit<React.HTMLAttributes<HTMLDListElement>, 'max'> {
|
|
893
|
+
fields: SummaryField[];
|
|
894
|
+
/** Show only the first n fields */
|
|
895
|
+
max?: number;
|
|
896
|
+
/** Tighter gaps for side panels */
|
|
897
|
+
dense?: boolean;
|
|
898
|
+
}
|
|
899
|
+
export declare function SummaryDetail(props: SummaryDetailProps): JSX.Element;
|
|
900
|
+
|
|
901
|
+
/** Avatar. People are circles; systems and agents are radius-md squares. Initials fall back on neutral-ramp grounds. */
|
|
902
|
+
export interface AvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'icon' | 'name' | 'size'> {
|
|
903
|
+
src?: string;
|
|
904
|
+
/** Used for initials, the accessible name and the ground choice */
|
|
905
|
+
name?: string;
|
|
906
|
+
/** person = circle; agent and system = square */
|
|
907
|
+
kind?: 'person' | 'agent' | 'system';
|
|
908
|
+
/** xs 20 · sm 24 · md 32 · lg 40 · xl 56 */
|
|
909
|
+
size?: Size;
|
|
910
|
+
/** Lucide icon instead of initials */
|
|
911
|
+
icon?: string;
|
|
912
|
+
/** Product glyph for a system avatar */
|
|
913
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
914
|
+
/** Presence dot; named in the accessible label */
|
|
915
|
+
status?: 'online' | 'busy' | 'away' | 'offline';
|
|
916
|
+
labels?: { online?: string; busy?: string; away?: string; offline?: string };
|
|
917
|
+
}
|
|
918
|
+
export declare function Avatar(props: AvatarProps): JSX.Element;
|
|
919
|
+
/** Overlapping avatars with a "+n" overflow. Items are names or Avatar props. */
|
|
920
|
+
export interface AvatarGroupProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'size'> { items: Array<string | AvatarProps>; /** Shown before the overflow (default 4) */ max?: number; size?: Size; kind?: AvatarProps['kind']; }
|
|
921
|
+
export declare function AvatarGroup(props: AvatarGroupProps): JSX.Element;
|
|
922
|
+
|
|
923
|
+
/** Count or one-word status on a pill. Solid signal for unread counts; soft tones for status words. */
|
|
924
|
+
export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'icon' | 'max' | 'size'> {
|
|
925
|
+
tone?: Tone;
|
|
926
|
+
/** Numeric badge; renders max+ above max */
|
|
927
|
+
count?: number;
|
|
928
|
+
max?: number;
|
|
929
|
+
/** Solid fill with ink (notification counts) */
|
|
930
|
+
solid?: boolean;
|
|
931
|
+
/** Transparent ground with a 1px border in the tone (neutral uses --edge): quiet states such as Disabled or Draft. Ignored with solid */
|
|
932
|
+
outline?: boolean;
|
|
933
|
+
icon?: string;
|
|
934
|
+
size?: 'sm' | 'md';
|
|
935
|
+
}
|
|
936
|
+
export declare function Badge(props: BadgeProps): JSX.Element;
|
|
937
|
+
|
|
938
|
+
/** The website's .tag: mono 11.5px on radius-sm with a soft wash and a 45% tinted border. */
|
|
939
|
+
export interface TagProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon'> {
|
|
940
|
+
tone?: Tone;
|
|
941
|
+
/** Live dot before the word (running); pulses for info and signal */
|
|
942
|
+
dot?: boolean;
|
|
943
|
+
icon?: string;
|
|
944
|
+
as?: any;
|
|
945
|
+
}
|
|
946
|
+
export declare function Tag(props: TagProps): JSX.Element;
|
|
947
|
+
|
|
948
|
+
/** The 24px rounded icon tile of a canvas block or a tool. color is the ONE place a third-party brand colour may enter the UI. */
|
|
949
|
+
export interface BlockIconProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'color' | 'icon' | 'size' | 'title'> {
|
|
950
|
+
/** Lucide icon (default box) */
|
|
951
|
+
icon?: string;
|
|
952
|
+
/** Product glyph instead of an icon */
|
|
953
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
954
|
+
/** signal by default; tones carry state (ok ran, bad failed, warn needs attention) */
|
|
955
|
+
tone?: Tone;
|
|
956
|
+
/** Exception: a tool's brand colour (e.g. Slack). Washed to 14% for the ground, full for the glyph. Document the tool when you use it. */
|
|
957
|
+
color?: string;
|
|
958
|
+
/** sm 20 · md 24 · lg 32 · xl 40 */
|
|
959
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
960
|
+
/** Accessible name; without it the tile is decorative */
|
|
961
|
+
title?: string;
|
|
962
|
+
/** Custom glyph (a brand SVG) instead of icon */
|
|
963
|
+
children?: React.ReactNode;
|
|
964
|
+
}
|
|
965
|
+
export declare function BlockIcon(props: BlockIconProps): JSX.Element;
|
|
966
|
+
|
|
967
|
+
/** A file as a card or a row: name, type, size, modified, thumbnail, actions. */
|
|
968
|
+
export interface FileCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'name' | 'selected' | 'size' | 'type'> {
|
|
969
|
+
name: string;
|
|
970
|
+
/** Extension; inferred from the name when omitted */
|
|
971
|
+
type?: string;
|
|
972
|
+
/** Pre-formatted, e.g. "1,2 MB" */
|
|
973
|
+
size?: string;
|
|
974
|
+
modified?: string;
|
|
975
|
+
/** Image URL shown as the thumbnail */
|
|
976
|
+
preview?: string;
|
|
977
|
+
variant?: 'card' | 'row';
|
|
978
|
+
selected?: boolean;
|
|
979
|
+
onOpen?: () => void;
|
|
980
|
+
href?: string;
|
|
981
|
+
actions?: React.ReactNode;
|
|
982
|
+
meta?: React.ReactNode;
|
|
983
|
+
}
|
|
984
|
+
export declare function FileCard(props: FileCardProps): JSX.Element;
|
|
985
|
+
|
|
986
|
+
/** Container for FeedPosts (role feed). */
|
|
987
|
+
export interface FeedProps extends React.HTMLAttributes<HTMLDivElement> { children?: React.ReactNode; }
|
|
988
|
+
export declare function Feed(props: FeedProps): JSX.Element;
|
|
989
|
+
export interface FeedReply { id?: string; author: string | { name: string }; avatar?: string; kind?: AvatarProps['kind']; time?: string; text: React.ReactNode; }
|
|
990
|
+
/** One feed entry: avatar, who did what to which object, the time, the text, actions and replies. */
|
|
991
|
+
export interface FeedPostProps extends Omit<React.HTMLAttributes<HTMLElement>, 'action' | 'target'> {
|
|
992
|
+
author: string | { name: string; src?: string; kind?: AvatarProps['kind']; product?: AvatarProps['product'] };
|
|
993
|
+
avatar?: string;
|
|
994
|
+
kind?: AvatarProps['kind'];
|
|
995
|
+
/** Verb phrase: "approved", "commented on" */
|
|
996
|
+
action?: React.ReactNode;
|
|
997
|
+
/** Object name after the action */
|
|
998
|
+
target?: React.ReactNode;
|
|
999
|
+
time?: string;
|
|
1000
|
+
/** The body text */
|
|
1001
|
+
children?: React.ReactNode;
|
|
1002
|
+
actions?: React.ReactNode;
|
|
1003
|
+
replies?: FeedReply[];
|
|
1004
|
+
likes?: number;
|
|
1005
|
+
liked?: boolean;
|
|
1006
|
+
onLike?: () => void;
|
|
1007
|
+
onReply?: () => void;
|
|
1008
|
+
/** warn wraps the body in a warn-soft panel (an escalation) */
|
|
1009
|
+
tone?: 'warn';
|
|
1010
|
+
labels?: { reply?: string; like?: string; liked?: string };
|
|
1011
|
+
}
|
|
1012
|
+
export declare function FeedPost(props: FeedPostProps): JSX.Element;
|
|
1013
|
+
|
|
1014
|
+
/** One event on an ActivityTimeline. kind picks the icon and default tone. */
|
|
1015
|
+
export interface TimelineItem { id?: string; kind?: 'run' | 'step' | 'approval' | 'call' | 'message' | 'note' | 'agent' | 'deploy' | 'edit' | 'error' | 'success' | 'warn' | 'handoff' | 'email' | 'event'; icon?: string; tone?: Tone; title: React.ReactNode; description?: React.ReactNode; time?: string; /** Expandable content under the item */ detail?: React.ReactNode; open?: boolean; /** Date header rendered when it changes */ group?: string; /** Signal ring on the marker */ current?: boolean; /** false draws a dashed, dimmed future step */ done?: boolean; }
|
|
1016
|
+
/** Vertical timeline of events with an icon per kind and a time: run history, case history. */
|
|
1017
|
+
export interface ActivityTimelineProps extends React.HTMLAttributes<HTMLOListElement> { items: TimelineItem[]; compact?: boolean; labels?: { show?: string; hide?: string }; }
|
|
1018
|
+
export declare function ActivityTimeline(props: ActivityTimelineProps): JSX.Element;
|
|
1019
|
+
|
|
1020
|
+
/** Empty, error and first-run states built from tokens alone. Twelve scenes; no bitmaps. */
|
|
1021
|
+
export interface IllustrationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'action' | 'icon' | 'size' | 'title'> {
|
|
1022
|
+
scene?: 'empty' | 'search' | 'error' | 'locked' | 'offline' | 'success' | 'agent' | 'chart' | 'calendar' | 'files' | 'team' | 'build';
|
|
1023
|
+
/** Overrides the scene's glyph */
|
|
1024
|
+
icon?: string;
|
|
1025
|
+
/** Product glyph in the box (the agent scene uses platform) */
|
|
1026
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
1027
|
+
title?: React.ReactNode;
|
|
1028
|
+
message?: React.ReactNode;
|
|
1029
|
+
/** Custom action node */
|
|
1030
|
+
action?: React.ReactNode;
|
|
1031
|
+
/** Renders a primary Button with this label */
|
|
1032
|
+
actionLabel?: string;
|
|
1033
|
+
onAction?: () => void;
|
|
1034
|
+
size?: 'sm' | 'md';
|
|
1035
|
+
}
|
|
1036
|
+
export declare function Illustration(props: IllustrationProps): JSX.Element;
|
|
1037
|
+
export declare const illustrationScenes: string[];
|
|
1038
|
+
|
|
1039
|
+
/** The website's .stat: display-600 tabular value over a mono uppercase label. */
|
|
1040
|
+
export interface StatProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'label' | 'size' | 'value'> {
|
|
1041
|
+
value: React.ReactNode;
|
|
1042
|
+
label: React.ReactNode;
|
|
1043
|
+
/** A number (+12 → "+12%"), a string ("−2,1%": a U+2212 or ASCII minus reads as down), or { value, direction, unit, label }; unit "" prints no unit */
|
|
1044
|
+
/** A number is formatted (sign, locale, unit); a string is shown as written and `unit` does not apply to it */
|
|
1045
|
+
delta?: number | string | { value: number | string; direction?: 'up' | 'down' | 'flat'; unit?: string; label?: React.ReactNode };
|
|
1046
|
+
/** Down is good (costs, latency, errors) */
|
|
1047
|
+
invert?: boolean;
|
|
1048
|
+
sub?: React.ReactNode;
|
|
1049
|
+
icon?: string;
|
|
1050
|
+
/** sm 20px · md 32px · lg 44px value */
|
|
1051
|
+
size?: 'sm' | 'md' | 'lg';
|
|
1052
|
+
/** A Sparkline or MiniChart under the value */
|
|
1053
|
+
chart?: React.ReactNode;
|
|
1054
|
+
/** BCP 47 locale for numeric deltas ("tr-TR" → "+8,2%", "−2,1%" with U+2212). Omitted: the number prints as written */
|
|
1055
|
+
locale?: string;
|
|
1056
|
+
as?: any;
|
|
1057
|
+
}
|
|
1058
|
+
export declare function Stat(props: StatProps): JSX.Element;
|
|
1059
|
+
|
|
1060
|
+
export interface ChartSeries { name: string; values: number[]; /** Dashed line, no fill or end point: the comparison series (last period, target). Line and area only */ dashed?: boolean; }
|
|
1061
|
+
/** Small SVG charts at the six data colours: line, area, bar. Faint grid, emphasised last point, tabular labels. */
|
|
1062
|
+
export interface MiniChartProps extends Omit<React.HTMLAttributes<HTMLElement>, 'data' | 'format' | 'height' | 'max' | 'min' | 'title' | 'type' | 'width'> {
|
|
1063
|
+
type?: 'line' | 'area' | 'bar';
|
|
1064
|
+
/** Single series */
|
|
1065
|
+
data?: number[];
|
|
1066
|
+
/** Up to six series, coloured data-1…6 in order */
|
|
1067
|
+
series?: ChartSeries[];
|
|
1068
|
+
/** X labels; thinned by count and by the measured width so they never overlap */
|
|
1069
|
+
labels?: string[];
|
|
1070
|
+
height?: number;
|
|
1071
|
+
/** First-paint width; the chart then draws at its container's measured width (ResizeObserver), so text never stretches */
|
|
1072
|
+
width?: number;
|
|
1073
|
+
/** Stack series (bar and area only): one bar per label with segments, or bands on cumulative lines */
|
|
1074
|
+
stacked?: boolean;
|
|
1075
|
+
max?: number;
|
|
1076
|
+
min?: number;
|
|
1077
|
+
grid?: boolean;
|
|
1078
|
+
legend?: boolean;
|
|
1079
|
+
format?: (v: number) => string;
|
|
1080
|
+
/** Accessible title of the chart */
|
|
1081
|
+
title?: string;
|
|
1082
|
+
/** last emphasises the final point or bar; none for flat */
|
|
1083
|
+
emphasis?: 'last' | 'none';
|
|
1084
|
+
/** Reference line (a number or { value, label }): dashed --line-3 with a label at the right, not a series */
|
|
1085
|
+
reference?: number | { value: number; label?: string };
|
|
1086
|
+
/** Target band { from, to, label } on --signal-soft behind the marks */
|
|
1087
|
+
band?: { from: number; to: number; label?: string };
|
|
1088
|
+
}
|
|
1089
|
+
export declare function MiniChart(props: MiniChartProps): JSX.Element;
|
|
1090
|
+
/** Inline trend line for table cells and Stat tiles: no axes, the end point emphasised. */
|
|
1091
|
+
export interface SparklineProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'color' | 'height' | 'max' | 'min' | 'width'> { data: number[]; width?: number; height?: number; area?: boolean; /** data colour index 1–6 */ color?: 1 | 2 | 3 | 4 | 5 | 6; /** Status colour instead of a data colour */ tone?: 'ok' | 'warn' | 'bad'; /** Scale bounds; either one turns off the forced zero */ min?: number; max?: number; /** Include zero in the scale (default true); false fits the data so a 27–36 s trend is not flat */ zero?: boolean; }
|
|
1092
|
+
export declare function Sparkline(props: SparklineProps): JSX.Element;
|
|
1093
|
+
|
|
1094
|
+
/** One Kanban column. */
|
|
1095
|
+
export interface KanbanColumn { id: string; label: string; /** WIP limit; the count turns bad above it */ limit?: number; tone?: Tone; }
|
|
1096
|
+
/** One Kanban card; extra fields pass through to renderCard. */
|
|
1097
|
+
export interface KanbanCard { id: string | number; column: string; title: React.ReactNode; sub?: React.ReactNode; tags?: string[]; priority?: 'high' | 'medium' | 'low'; assignee?: string | { name: string; src?: string; kind?: AvatarProps['kind'] }; due?: string; overdue?: boolean; /** Comment count */ count?: number; /** Left edge colour for state */ tone?: 'ok' | 'warn' | 'bad'; [key: string]: any; }
|
|
1098
|
+
/** Board of columns and cards: approvals by stage, cases by status. Drag between columns; Enter opens, ← → move, ↑ ↓ walk the column. */
|
|
1099
|
+
export interface KanbanProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1100
|
+
columns: KanbanColumn[];
|
|
1101
|
+
cards: KanbanCard[];
|
|
1102
|
+
/** Enables drag and arrow-key moves */
|
|
1103
|
+
onMove?: (cardId: string | number, toColumn: string, card: KanbanCard) => void;
|
|
1104
|
+
onCardClick?: (card: KanbanCard) => void;
|
|
1105
|
+
/** Plus button in each column header */
|
|
1106
|
+
onAdd?: (column: string) => void;
|
|
1107
|
+
renderCard?: (card: KanbanCard) => React.ReactNode;
|
|
1108
|
+
labels?: { add?: string; limit?: string; empty?: string; moveTo?: string };
|
|
1109
|
+
}
|
|
1110
|
+
export declare function Kanban(props: KanbanProps): JSX.Element;
|
|
1111
|
+
|
|
1112
|
+
/** A CalendarView event. */
|
|
1113
|
+
export interface CalendarEvent { id?: string | number; title: string; start: Date | string; end?: Date | string; allDay?: boolean; tone?: Tone; [key: string]: any; }
|
|
1114
|
+
/** Month grid with schedule chips: scheduled runs, campaigns, maintenance windows. */
|
|
1115
|
+
export interface CalendarViewProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1116
|
+
/** Any date in the month to show (default: today's month) */
|
|
1117
|
+
month?: Date | string;
|
|
1118
|
+
events?: CalendarEvent[];
|
|
1119
|
+
/** BCP 47 tag for weekday and month names (default "en") */
|
|
1120
|
+
locale?: string;
|
|
1121
|
+
/** 1 = Monday (default), 0 = Sunday */
|
|
1122
|
+
weekStartsOn?: 0 | 1;
|
|
1123
|
+
today?: Date;
|
|
1124
|
+
/** Chips per day before "+n more" (default 3) */
|
|
1125
|
+
maxPerDay?: number;
|
|
1126
|
+
onEventClick?: (e: CalendarEvent) => void;
|
|
1127
|
+
onDayClick?: (d: Date) => void;
|
|
1128
|
+
/** Enables the month navigation in the header */
|
|
1129
|
+
onMonthChange?: (firstOfMonth: Date) => void;
|
|
1130
|
+
header?: boolean;
|
|
1131
|
+
labels?: { more?: string; today?: string; prev?: string; next?: string };
|
|
1132
|
+
}
|
|
1133
|
+
export declare function CalendarView(props: CalendarViewProps): JSX.Element;
|
|
1134
|
+
|
|
1135
|
+
/** A Gantt task. */
|
|
1136
|
+
export interface GanttTask { id: string | number; title: React.ReactNode; start: Date | string; end?: Date | string; /** 0–1 */ progress?: number; tone?: Tone; /** Thin summary bar */ group?: boolean; depth?: number; /** Diamond at start */ milestone?: boolean; /** Text inside the bar */ assignee?: string; }
|
|
1137
|
+
/** Bars on a day or week scale with a today line: rollout plans, campaign windows. */
|
|
1138
|
+
export interface GanttProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'start'> {
|
|
1139
|
+
tasks: GanttTask[];
|
|
1140
|
+
/** Range; defaults to the tasks' extent */
|
|
1141
|
+
start?: Date | string;
|
|
1142
|
+
end?: Date | string;
|
|
1143
|
+
unit?: 'day' | 'week';
|
|
1144
|
+
/** Pixels per unit (default 32 day, 72 week) */
|
|
1145
|
+
colWidth?: number;
|
|
1146
|
+
today?: Date;
|
|
1147
|
+
locale?: string;
|
|
1148
|
+
/** Width of the task name column (default 200) */
|
|
1149
|
+
labelWidth?: number;
|
|
1150
|
+
onTaskClick?: (t: GanttTask) => void;
|
|
1151
|
+
labels?: { today?: string; progress?: string };
|
|
1152
|
+
}
|
|
1153
|
+
export declare function Gantt(props: GanttProps): JSX.Element;
|
|
1154
|
+
|
|
1155
|
+
/** One pair of a DescriptionList. */
|
|
1156
|
+
export interface DescriptionItem { key?: string; label: React.ReactNode; value?: React.ReactNode; mono?: boolean; /** Spans all columns */ span?: boolean; }
|
|
1157
|
+
/** Label/value pairs for record detail: stacked or horizontal, 1–3 columns. */
|
|
1158
|
+
export interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {
|
|
1159
|
+
/** Items or [label, value] tuples */
|
|
1160
|
+
items: Array<DescriptionItem | [React.ReactNode, React.ReactNode]>;
|
|
1161
|
+
columns?: 1 | 2 | 3;
|
|
1162
|
+
/** Label left, value right */
|
|
1163
|
+
horizontal?: boolean;
|
|
1164
|
+
/** Label column width in horizontal mode (default 120px) */
|
|
1165
|
+
labelWidth?: string;
|
|
1166
|
+
}
|
|
1167
|
+
export declare function DescriptionList(props: DescriptionListProps): JSX.Element;
|
|
1168
|
+
|
|
1169
|
+
/** Locale money or number with tabular digits. tr-TR ₺1.250.000,00 · en ₺1,250,000.00. Negative reads in bad with a minus. */
|
|
1170
|
+
export interface AmountProps extends Omit<React.HTMLAttributes<HTMLElement>, 'value'> {
|
|
1171
|
+
value: number;
|
|
1172
|
+
/** ISO code (default TRY); null for a plain number */
|
|
1173
|
+
currency?: string | null;
|
|
1174
|
+
/** BCP 47 (default tr-TR) */
|
|
1175
|
+
locale?: string;
|
|
1176
|
+
decimals?: number;
|
|
1177
|
+
/** Also show + for positive, in ok */
|
|
1178
|
+
signed?: boolean;
|
|
1179
|
+
strong?: boolean;
|
|
1180
|
+
/** Fraction digits in mute */
|
|
1181
|
+
muteDecimals?: boolean;
|
|
1182
|
+
/** Overrides the automatic sign colouring */
|
|
1183
|
+
tone?: 'ok' | 'bad';
|
|
1184
|
+
as?: any;
|
|
1185
|
+
}
|
|
1186
|
+
export declare function Amount(props: AmountProps): JSX.Element;
|
|
1187
|
+
export declare function formatAmount(value: number, opts?: { currency?: string | null; locale?: string; decimals?: number; style?: 'currency' | 'decimal' }): string;
|
|
1188
|
+
|
|
1189
|
+
/** Code well: mono 13px, line numbers, copy, language label, wrap toggle; json, bash and js get token colours. */
|
|
1190
|
+
export interface CodeBlockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'wrap'> {
|
|
1191
|
+
code: string;
|
|
1192
|
+
/** json | bash | js | ts | text (default). Others render plain with the label */
|
|
1193
|
+
language?: string;
|
|
1194
|
+
/** Filename or caption in the bar */
|
|
1195
|
+
title?: string;
|
|
1196
|
+
lineNumbers?: boolean;
|
|
1197
|
+
copy?: boolean;
|
|
1198
|
+
/** Initial wrap state */
|
|
1199
|
+
wrap?: boolean;
|
|
1200
|
+
wrapToggle?: boolean;
|
|
1201
|
+
maxHeight?: number | string;
|
|
1202
|
+
/** 1-based line numbers to highlight */
|
|
1203
|
+
highlight?: number[];
|
|
1204
|
+
startLine?: number;
|
|
1205
|
+
labels?: { copy?: string; copied?: string; wrap?: string; unwrap?: string };
|
|
1206
|
+
}
|
|
1207
|
+
export declare function CodeBlock(props: CodeBlockProps): JSX.Element;
|
|
1208
|
+
export declare function tokenize(line: string, lang: 'json' | 'bash' | 'js'): Array<[string, string]>;
|
|
1209
|
+
|
|
1210
|
+
/** Collapsible JSON view for run inputs, outputs and tool calls. */
|
|
1211
|
+
export interface JsonTreeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'data' | 'title'> {
|
|
1212
|
+
data: any;
|
|
1213
|
+
/** Levels open on first render (default 2) */
|
|
1214
|
+
defaultDepth?: number;
|
|
1215
|
+
title?: string;
|
|
1216
|
+
copy?: boolean;
|
|
1217
|
+
maxHeight?: number | string;
|
|
1218
|
+
labels?: { items?: string; keys?: string; expand?: string; collapse?: string; copy?: string; copied?: string };
|
|
1219
|
+
}
|
|
1220
|
+
export declare function JsonTree(props: JsonTreeProps): JSX.Element;
|
|
1221
|
+
|
|
1222
|
+
/** One diff line. */
|
|
1223
|
+
export interface DiffLine { type: 'ctx' | 'add' | 'del'; text: string; /** Line number before */ a?: number; /** Line number after */ b?: number; }
|
|
1224
|
+
/** Unified or split diff of two texts: prompt versions, agent configs. Added on ok-soft, removed on bad-soft, each with a marker. */
|
|
1225
|
+
export interface DiffViewProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'wrap'> {
|
|
1226
|
+
before?: string;
|
|
1227
|
+
after?: string;
|
|
1228
|
+
/** Pre-computed lines instead of before/after */
|
|
1229
|
+
lines?: DiffLine[];
|
|
1230
|
+
/** split: two fixed 50/50 columns, each scrolling horizontally on its own (or wrapping, with wrap) */
|
|
1231
|
+
mode?: 'unified' | 'split';
|
|
1232
|
+
/** Highlight the changed words inside each removed/added pair (transcript adjudication, prompt edits) */
|
|
1233
|
+
words?: boolean;
|
|
1234
|
+
/** Wrap long lines instead of scrolling; in split mode both sides share one table so wrapped rows stay aligned */
|
|
1235
|
+
wrap?: boolean;
|
|
1236
|
+
title?: string;
|
|
1237
|
+
/** Unchanged lines kept around each change; null shows everything */
|
|
1238
|
+
context?: number | null;
|
|
1239
|
+
maxHeight?: number | string;
|
|
1240
|
+
labels?: { added?: string; removed?: string; before?: string; after?: string; unchanged?: string };
|
|
1241
|
+
}
|
|
1242
|
+
export declare function DiffView(props: DiffViewProps): JSX.Element;
|
|
1243
|
+
export declare function diffLines(before: string, after: string): DiffLine[];
|
|
1244
|
+
|
|
1245
|
+
/** Grid of cells coloured by a threshold scale on the ok/warn/bad ramps (per-agent success by day), or by a sequential signal ramp for load and volume. */
|
|
1246
|
+
export interface HeatmapProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'format'> {
|
|
1247
|
+
/** Row labels (agents) */
|
|
1248
|
+
rows: Array<string | { label: string }>;
|
|
1249
|
+
/** Column labels (days) */
|
|
1250
|
+
columns: Array<string | { label: string }>;
|
|
1251
|
+
/** values[row][column]: 0–1 for the threshold scale, any number for sequential; null for no runs */
|
|
1252
|
+
values: Array<Array<number | null>>;
|
|
1253
|
+
/** threshold (default): ok/warn/bad ramps; sequential: five steps of the signal ramp (signal-100 → signal-700) */
|
|
1254
|
+
scale?: 'threshold' | 'sequential';
|
|
1255
|
+
/** Sequential only: [low, high] of the ramp (default [min(0, values), max(values)]) */
|
|
1256
|
+
domain?: [number, number];
|
|
1257
|
+
/** ok at or above (default .97), warn at or above (default .9), bad below */
|
|
1258
|
+
thresholds?: { ok?: number; warn?: number };
|
|
1259
|
+
format?: (v: number | null) => string;
|
|
1260
|
+
/** Print the value inside each cell */
|
|
1261
|
+
showValues?: boolean;
|
|
1262
|
+
/** Cell size in px (default 28) */
|
|
1263
|
+
cellSize?: number;
|
|
1264
|
+
legend?: boolean;
|
|
1265
|
+
onCellClick?: (cell: { row: any; column: any; value: number | null; rowIndex: number; columnIndex: number }) => void;
|
|
1266
|
+
labels?: { ok?: string; warn?: string; bad?: string; none?: string; low?: string; high?: string };
|
|
1267
|
+
}
|
|
1268
|
+
export declare function Heatmap(props: HeatmapProps): JSX.Element;
|
|
1269
|
+
export declare function heatmapSequentialColor(value: number | null, low?: number, high?: number): { bg: string; ink: string; tone: 'seq' | 'none'; step?: number };
|
|
1270
|
+
export declare function heatmapColor(value: number | null, thresholds?: { ok?: number; warn?: number }): { bg: string; ink: string; tone: 'ok' | 'warn' | 'bad' | 'none' };
|
|
1271
|
+
|
|
1272
|
+
// --- layout ---
|
|
1273
|
+
/** Flat card: 1px line, radius-lg, no shadow. 44px header with optional icon, count and actions; body; centred "View all" footer. A panel only for an object that is really separate. */
|
|
1274
|
+
export interface CardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'selected' | 'title'> {
|
|
1275
|
+
/** Header title in heading style (15px/600) */
|
|
1276
|
+
title?: React.ReactNode;
|
|
1277
|
+
/** Lucide icon before the title */
|
|
1278
|
+
icon?: string;
|
|
1279
|
+
/** Mono count after the title */
|
|
1280
|
+
count?: number | string;
|
|
1281
|
+
/** Right side of the header: ghost buttons, a menu trigger */
|
|
1282
|
+
actions?: React.ReactNode;
|
|
1283
|
+
/** Custom footer content (replaces viewAll) */
|
|
1284
|
+
footer?: React.ReactNode;
|
|
1285
|
+
/** Centred "View all" link button: a handler, or a custom label with viewAllHref */
|
|
1286
|
+
viewAll?: (() => void) | string;
|
|
1287
|
+
viewAllHref?: string;
|
|
1288
|
+
/** Body padding: md 16 (default), sm 12, none for tables and code */
|
|
1289
|
+
padding?: 'none' | 'sm' | 'md';
|
|
1290
|
+
/** On bg-2: a well inside a panel */
|
|
1291
|
+
sunken?: boolean;
|
|
1292
|
+
/** Hover border for a clickable card */
|
|
1293
|
+
interactive?: boolean;
|
|
1294
|
+
selected?: boolean;
|
|
1295
|
+
labels?: { viewAll?: string };
|
|
1296
|
+
/** Tag of the root; as="button" or "a" is reset (font, colour, left-aligned text, full width) so the card looks the same */
|
|
1297
|
+
as?: any;
|
|
1298
|
+
}
|
|
1299
|
+
export declare function Card(props: CardProps): JSX.Element;
|
|
1300
|
+
|
|
1301
|
+
/** 32px row above a list or board: ghost buttons, a segmented control, a search field; sticky over the scroll. */
|
|
1302
|
+
export interface ToolbarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
1303
|
+
/** Heading-style title on the left */
|
|
1304
|
+
title?: React.ReactNode;
|
|
1305
|
+
/** Mono count after the title */
|
|
1306
|
+
count?: React.ReactNode;
|
|
1307
|
+
/** Inline search field; onChange receives the string */
|
|
1308
|
+
search?: { value?: string; defaultValue?: string; placeholder?: string; label?: string; onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement>) => void; onSubmit?: (value: string) => void };
|
|
1309
|
+
/** Controls after the title */
|
|
1310
|
+
left?: React.ReactNode;
|
|
1311
|
+
/** Controls pushed to the right edge */
|
|
1312
|
+
right?: React.ReactNode;
|
|
1313
|
+
/** Sticks to the top of the scroll container */
|
|
1314
|
+
sticky?: boolean;
|
|
1315
|
+
/** Transparent ground (over a Card) */
|
|
1316
|
+
bare?: boolean;
|
|
1317
|
+
labels?: { search?: string; clear?: string };
|
|
1318
|
+
}
|
|
1319
|
+
export declare function Toolbar(props: ToolbarProps): JSX.Element;
|
|
1320
|
+
/** Vertical hairline between toolbar groups. */
|
|
1321
|
+
export declare function ToolbarSeparator(props: React.HTMLAttributes<HTMLSpanElement>): JSX.Element;
|
|
1322
|
+
|
|
1323
|
+
/** The console frame: optional GlobalHeader on top, VerticalNavigation on the left, a scrolling main area with the console gutter, optional side panel on the right. It measures its own width: ≥ 1280 everything docked; 1024–1279 the sidebar on its 56px rail; < 1024 the sidebar is a drawer and the side panel a sheet from the right, both opened from a 48px page bar; < 768 the gutter is 16px. */
|
|
1324
|
+
export interface PageLayoutProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1325
|
+
/** A GlobalHeader (brand screens) — consoles usually omit it */
|
|
1326
|
+
header?: React.ReactNode;
|
|
1327
|
+
/** A VerticalNavigation; it reads its state (docked, rail, drawer) from the PageLayout */
|
|
1328
|
+
navigation?: React.ReactNode;
|
|
1329
|
+
/** A side panel: inspector, artifact, conversation. A SidePanel passed without a mode is docked in the frame */
|
|
1330
|
+
sidePanel?: React.ReactNode;
|
|
1331
|
+
/** Defaults to --panel-w (288) */
|
|
1332
|
+
sidePanelWidth?: number | string;
|
|
1333
|
+
/** Content width preset: reading (--content-reading 960: settings, documents, wizards) · default (--content-max 1440) · wide (--content-wide 1920: dashboards that add columns) · full (no cap: tables and canvases) */
|
|
1334
|
+
width?: 'reading' | 'default' | 'wide' | 'full';
|
|
1335
|
+
/** Content max width; overrides width */
|
|
1336
|
+
maxWidth?: number | string;
|
|
1337
|
+
/** No gutter or max width, and the content fills the main area's height (canvas, split views) */
|
|
1338
|
+
flush?: boolean;
|
|
1339
|
+
/** Sidebar state: auto (default, from the measured width), or forced docked / rail / overlay */
|
|
1340
|
+
sidebarMode?: 'auto' | 'docked' | 'rail' | 'overlay';
|
|
1341
|
+
/** Side panel state: auto (default: docked ≥ 1024, overlay below), or forced docked / overlay */
|
|
1342
|
+
panelMode?: 'auto' | 'docked' | 'overlay';
|
|
1343
|
+
/** Overlay drawer open (controlled); uncontrolled it opens from the page bar */
|
|
1344
|
+
sidebarOpen?: boolean;
|
|
1345
|
+
onSidebarOpenChange?: (open: boolean) => void;
|
|
1346
|
+
/** Overlay sheet open (controlled); uncontrolled it opens from the page bar and when a side panel appears while the page is narrow */
|
|
1347
|
+
panelOpen?: boolean;
|
|
1348
|
+
onPanelOpenChange?: (open: boolean) => void;
|
|
1349
|
+
/** The 48px page bar shown while the sidebar or panel is an overlay: false hides it (open them through usePageLayout), a node replaces the mark in its middle */
|
|
1350
|
+
bar?: boolean | React.ReactNode;
|
|
1351
|
+
labels?: { openNav?: string; closeNav?: string; openPanel?: string; closePanel?: string; navigation?: string; details?: string };
|
|
1352
|
+
as?: any;
|
|
1353
|
+
}
|
|
1354
|
+
export declare function PageLayout(props: PageLayoutProps): JSX.Element;
|
|
1355
|
+
|
|
1356
|
+
/** State of the enclosing PageLayout, for a page that needs to adapt (drop table columns, put the menu button in its own header). */
|
|
1357
|
+
export interface PageLayoutState {
|
|
1358
|
+
/** Breakpoint of the page's own width */
|
|
1359
|
+
bp: Breakpoint;
|
|
1360
|
+
sidebar: 'docked' | 'rail' | 'overlay' | null;
|
|
1361
|
+
panel: 'docked' | 'overlay' | null;
|
|
1362
|
+
railExpanded: boolean;
|
|
1363
|
+
setRailExpanded: (expanded: boolean) => void;
|
|
1364
|
+
sidebarOpen: boolean;
|
|
1365
|
+
openSidebar: () => void;
|
|
1366
|
+
closeSidebar: () => void;
|
|
1367
|
+
panelOpen: boolean;
|
|
1368
|
+
openPanel: () => void;
|
|
1369
|
+
closePanel: () => void;
|
|
1370
|
+
}
|
|
1371
|
+
/** The enclosing PageLayout's state; null outside one. */
|
|
1372
|
+
export declare function usePageLayout(): PageLayoutState | null;
|
|
1373
|
+
export declare const PageLayoutContext: React.Context<PageLayoutState | null>;
|
|
1374
|
+
|
|
1375
|
+
/** Breakpoint names: base < 640 ≤ sm < 768 ≤ md < 1024 ≤ lg < 1280 ≤ xl < 1536 ≤ 2xl (tokens bp-sm … bp-2xl). */
|
|
1376
|
+
export type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
1377
|
+
/** A value per breakpoint, mobile first: each one holds until a larger breakpoint sets another. */
|
|
1378
|
+
export type Responsive<T> = T | Partial<Record<Breakpoint, T>>;
|
|
1379
|
+
|
|
1380
|
+
/** 12-column grid (--grid-columns, --grid-gap) laid out by its own width through a container query, so it responds to its pane, not the window. Dashboards, record bodies, card galleries. */
|
|
1381
|
+
export interface GridProps extends React.HTMLAttributes<HTMLElement> {
|
|
1382
|
+
/** Gallery mode: auto-fill columns at least this wide (number = px), e.g. 280 for cards. GridItem spans are ignored */
|
|
1383
|
+
min?: number | string;
|
|
1384
|
+
/** Column count (default --grid-columns, 12) */
|
|
1385
|
+
columns?: number;
|
|
1386
|
+
/** Gap: lg (default, --grid-gap 24), md 16, sm 12, none, or any length */
|
|
1387
|
+
gap?: 'none' | 'sm' | 'md' | 'lg' | number | string;
|
|
1388
|
+
/** Row gap when it differs from gap */
|
|
1389
|
+
rowGap?: 'none' | 'sm' | 'md' | 'lg' | number | string;
|
|
1390
|
+
/** Vertical alignment of items in a row (default stretch) */
|
|
1391
|
+
align?: 'start' | 'center' | 'end';
|
|
1392
|
+
/** Back-fills holes left by wide items */
|
|
1393
|
+
dense?: boolean;
|
|
1394
|
+
as?: any;
|
|
1395
|
+
}
|
|
1396
|
+
export declare function Grid(props: GridProps): JSX.Element;
|
|
1397
|
+
/** One cell of a Grid. */
|
|
1398
|
+
export interface GridItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
1399
|
+
/** Columns to span: a number, 'full', or per breakpoint of the Grid's width ({ base: 12, lg: 6, xl: 4 }). Default 12 */
|
|
1400
|
+
span?: Responsive<number | 'full'>;
|
|
1401
|
+
/** Starting column line */
|
|
1402
|
+
start?: number;
|
|
1403
|
+
/** Rows to span */
|
|
1404
|
+
rowSpan?: number;
|
|
1405
|
+
as?: any;
|
|
1406
|
+
}
|
|
1407
|
+
export declare function GridItem(props: GridItemProps): JSX.Element;
|
|
1408
|
+
|
|
1409
|
+
/** Breakpoint values in px (= tokens): { sm: 640, md: 768, lg: 1024, xl: 1280, '2xl': 1536 }. */
|
|
1410
|
+
export declare const BREAKPOINTS: Record<Exclude<Breakpoint, 'base'>, number>;
|
|
1411
|
+
/** Name of the largest breakpoint a width reaches. */
|
|
1412
|
+
export declare function breakpointFor(width: number): Breakpoint;
|
|
1413
|
+
/** Width (px) of an element, kept current with a ResizeObserver; null until measured. */
|
|
1414
|
+
export declare function useElementWidth(ref: React.RefObject<Element>): number | null;
|
|
1415
|
+
/** Breakpoint of an element's own width; null until measured. Use it to drop low-priority table columns in a narrow pane. */
|
|
1416
|
+
export declare function useBreakpoint(ref: React.RefObject<Element>): Breakpoint | null;
|
|
1417
|
+
/** Drawer/sheet focus handling: focus moves into the container on open, Tab stays inside, Esc calls onClose, focus returns on close. */
|
|
1418
|
+
export declare function useOverlayFocus(ref: React.RefObject<HTMLElement>, open: boolean, onClose?: () => void): void;
|
|
1419
|
+
|
|
1420
|
+
/** The website's .room: a section that inverts the theme inside — sets data-theme opposite to its ancestor and paints --bg. */
|
|
1421
|
+
export interface RoomProps extends React.HTMLAttributes<HTMLElement> {
|
|
1422
|
+
/** Force a theme instead of inverting the ancestor's */
|
|
1423
|
+
theme?: 'light' | 'dark';
|
|
1424
|
+
/** lg 48px/gutter (default), md 24px/console gutter, none */
|
|
1425
|
+
padding?: 'lg' | 'md' | 'none';
|
|
1426
|
+
as?: any;
|
|
1427
|
+
}
|
|
1428
|
+
export declare function Room(props: RoomProps): JSX.Element;
|
|
1429
|
+
|
|
1430
|
+
// --- navigation ---
|
|
1431
|
+
type NavigationProduct = 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
1432
|
+
type NavigationTone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
|
|
1433
|
+
|
|
1434
|
+
/** 48px top bar: logo lockup with the product name, a search trigger with its shortcut, actions, the user's avatar. panel for consoles, ink for brand screens. */
|
|
1435
|
+
export interface GlobalHeaderProps extends React.HTMLAttributes<HTMLElement> {
|
|
1436
|
+
/** NavigationProduct name after the wordmark ("Platform", "Dialog") */
|
|
1437
|
+
product?: string;
|
|
1438
|
+
/** panel (default) on --panel with a line below; ink on --text for brand screens */
|
|
1439
|
+
tone?: 'panel' | 'ink';
|
|
1440
|
+
/** Show the search trigger (default true) */
|
|
1441
|
+
search?: boolean;
|
|
1442
|
+
onSearch?: () => void;
|
|
1443
|
+
/** Shown in a kbd next to the search hint (default ⌘K) */
|
|
1444
|
+
shortcut?: string;
|
|
1445
|
+
/** Extra ButtonIcons before the avatar */
|
|
1446
|
+
actions?: React.ReactNode;
|
|
1447
|
+
user?: string | { name: string; src?: string };
|
|
1448
|
+
onUserClick?: () => void;
|
|
1449
|
+
/** Unread count on the bell */
|
|
1450
|
+
notifications?: number;
|
|
1451
|
+
onNotifications?: () => void;
|
|
1452
|
+
/** Shows the grip that opens an AppLauncher */
|
|
1453
|
+
onApps?: () => void;
|
|
1454
|
+
/** Replaces the AginiesLogo */
|
|
1455
|
+
brand?: React.ReactNode;
|
|
1456
|
+
/** Slot after the brand (breadcrumbs, a tenant switcher) */
|
|
1457
|
+
left?: React.ReactNode;
|
|
1458
|
+
labels?: { search?: string; searchHint?: string; notifications?: string; apps?: string; user?: string };
|
|
1459
|
+
}
|
|
1460
|
+
export declare function GlobalHeader(props: GlobalHeaderProps): JSX.Element;
|
|
1461
|
+
|
|
1462
|
+
/** One sidebar item. */
|
|
1463
|
+
export interface NavItem { id: string; label: string; icon?: string; href?: string; /** Count badge; a dot when collapsed */ count?: number; countTone?: NavigationTone; disabled?: boolean; }
|
|
1464
|
+
/** A sidebar group with its mono eyebrow (build, observe, organisation). */
|
|
1465
|
+
export interface NavGroup { id?: string; label?: string; items: NavItem[]; }
|
|
1466
|
+
/** The console sidebar: 232px (56 collapsed; `width` or `resizable`), logo top-left, search, an optional tree slot, groups under mono eyebrows, 32px items with icon, label and count; product switcher at the bottom. */
|
|
1467
|
+
export interface VerticalNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange' | 'onResize' | 'width'> {
|
|
1468
|
+
groups: NavGroup[];
|
|
1469
|
+
active?: string;
|
|
1470
|
+
onChange?: (id: string, item: NavItem) => void;
|
|
1471
|
+
collapsed?: boolean;
|
|
1472
|
+
/** Shows the collapse toggle */
|
|
1473
|
+
onCollapse?: (collapsed: boolean) => void;
|
|
1474
|
+
/** NavigationProduct name in the logo lockup */
|
|
1475
|
+
product?: string;
|
|
1476
|
+
/** Search trigger under the logo */
|
|
1477
|
+
search?: { onClick?: () => void; label?: string; placeholder?: string; shortcut?: string };
|
|
1478
|
+
/** Bottom slot: an AppLauncher trigger or the current product */
|
|
1479
|
+
switcher?: React.ReactNode;
|
|
1480
|
+
/** Bottom slot above the switcher: the tenant or the user */
|
|
1481
|
+
footer?: React.ReactNode;
|
|
1482
|
+
/** Slot between the search and the groups, scrolling with them: the folder/agent Tree. Hidden when collapsed */
|
|
1483
|
+
tree?: React.ReactNode;
|
|
1484
|
+
/** Expanded width (number = px): sets --sidebar-w on the element (default 232px from the token) */
|
|
1485
|
+
width?: number | string;
|
|
1486
|
+
/** Drag handle on the right edge (pointer, or ←/→ ±16px and Home/End when focused) */
|
|
1487
|
+
resizable?: boolean;
|
|
1488
|
+
/** Resize bounds in px (default 180 / 400) */
|
|
1489
|
+
minWidth?: number;
|
|
1490
|
+
maxWidth?: number;
|
|
1491
|
+
/** Each new width while resizing; persist it and pass it back as width */
|
|
1492
|
+
onResize?: (width: number) => void;
|
|
1493
|
+
logoHref?: string;
|
|
1494
|
+
/** Layout state. Omit it inside PageLayout, which sets it from its width: docked ≥ 1280, rail 1024–1279 (collapsed to 56px until the user expands it), overlay < 1024 (a drawer with a close button that closes when an item is chosen). Standalone default: docked */
|
|
1495
|
+
mode?: 'docked' | 'rail' | 'overlay';
|
|
1496
|
+
labels?: { search?: string; collapse?: string; expand?: string; navigation?: string; resize?: string; close?: string };
|
|
1497
|
+
}
|
|
1498
|
+
export declare function VerticalNavigation(props: VerticalNavigationProps): JSX.Element;
|
|
1499
|
+
|
|
1500
|
+
/** One tab. */
|
|
1501
|
+
export interface TabItem { id: string; label: React.ReactNode; icon?: string; count?: number; disabled?: boolean; /** Panel content when the tab is active */ content?: React.ReactNode; /** Close button on this tab (needs onClose); overrides the Tabs-level closable */ closable?: boolean; }
|
|
1502
|
+
/** Tabs for views of one object: line (underline), pill (segmented), vertical (settings). Arrow keys move; each tab may carry a count. */
|
|
1503
|
+
export interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onClose' | 'size'> {
|
|
1504
|
+
items: TabItem[];
|
|
1505
|
+
/** Controlled active id */
|
|
1506
|
+
active?: string;
|
|
1507
|
+
defaultActive?: string;
|
|
1508
|
+
onChange?: (id: string, item: TabItem) => void;
|
|
1509
|
+
variant?: 'line' | 'pill' | 'vertical';
|
|
1510
|
+
size?: 'sm' | 'md';
|
|
1511
|
+
/** Right side of the bar */
|
|
1512
|
+
actions?: React.ReactNode;
|
|
1513
|
+
/** Render the panel (default true); children show when the item has no content */
|
|
1514
|
+
panel?: boolean;
|
|
1515
|
+
panelClassName?: string;
|
|
1516
|
+
/** Every tab closable (items can opt out with closable: false); needs onClose */
|
|
1517
|
+
closable?: boolean;
|
|
1518
|
+
/** Close request from the × button or Delete/Backspace on the focused tab; the consumer removes the item and picks the next active tab */
|
|
1519
|
+
onClose?: (id: string, item: TabItem) => void;
|
|
1520
|
+
labels?: { close?: string };
|
|
1521
|
+
}
|
|
1522
|
+
export declare function Tabs(props: TabsProps): JSX.Element;
|
|
1523
|
+
|
|
1524
|
+
/** One top-navigation item. */
|
|
1525
|
+
export interface GlobalNavItem { id: string; label: React.ReactNode; icon?: string; href?: string; /** Count badge (signal on the active item unless countTone) */ count?: number; countTone?: NavigationTone; disabled?: boolean; }
|
|
1526
|
+
/** Horizontal top navigation for GlobalHeader shells: the product's sections in a row, the active one underlined in --signal, ←/→ between items, overflow into a More menu. Pages, not views of one object (that is Tabs). */
|
|
1527
|
+
export interface GlobalNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
1528
|
+
items: GlobalNavItem[];
|
|
1529
|
+
/** Id of the current section (aria-current="page") */
|
|
1530
|
+
active?: string;
|
|
1531
|
+
onChange?: (id: string, item: GlobalNavItem) => void;
|
|
1532
|
+
/** Most items shown before the rest go into More (default: as many as fit the measured width) */
|
|
1533
|
+
maxVisible?: number;
|
|
1534
|
+
labels?: { navigation?: string; more?: string };
|
|
1535
|
+
}
|
|
1536
|
+
export declare function GlobalNavigation(props: GlobalNavigationProps): JSX.Element;
|
|
1537
|
+
|
|
1538
|
+
/** Hierarchy trail above a page header; the last item is the current page. */
|
|
1539
|
+
export interface BreadcrumbsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'max'> {
|
|
1540
|
+
items: Array<{ label: React.ReactNode; href?: string; icon?: string; onClick?: (e: React.MouseEvent) => void }>;
|
|
1541
|
+
/** Items shown before the middle collapses into an ellipsis (default 4) */
|
|
1542
|
+
max?: number;
|
|
1543
|
+
labels?: { nav?: string; more?: string };
|
|
1544
|
+
}
|
|
1545
|
+
export declare function Breadcrumbs(props: BreadcrumbsProps): JSX.Element;
|
|
1546
|
+
|
|
1547
|
+
/** Record stage path: chevron steps. Done in ok with a check, current in text, upcoming on panel-2. */
|
|
1548
|
+
export interface PathProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange' | 'step'> {
|
|
1549
|
+
steps: Array<string | { id: string; label: string }>;
|
|
1550
|
+
/** Id of the current stage */
|
|
1551
|
+
current?: string;
|
|
1552
|
+
/** Makes steps clickable */
|
|
1553
|
+
onChange?: (id: string, step: { id: string; label: string }) => void;
|
|
1554
|
+
/** Thin segment bar with a caption, for narrow spaces */
|
|
1555
|
+
compact?: boolean;
|
|
1556
|
+
/** The current stage is a terminal failure (closed, rejected) */
|
|
1557
|
+
lost?: boolean;
|
|
1558
|
+
labels?: { stage?: string; done?: string; current?: string; upcoming?: string; lost?: string };
|
|
1559
|
+
}
|
|
1560
|
+
export declare function Path(props: PathProps): JSX.Element;
|
|
1561
|
+
|
|
1562
|
+
/** Numbered steps for a real sequence (wizard, deploy checklist): done, current, upcoming, error. Not for status that is not a sequence. */
|
|
1563
|
+
export interface ProgressIndicatorProps extends Omit<React.HTMLAttributes<HTMLOListElement>, 'step'> {
|
|
1564
|
+
steps: Array<string | { label: string; description?: React.ReactNode }>;
|
|
1565
|
+
/** 0-based index of the current step */
|
|
1566
|
+
current?: number;
|
|
1567
|
+
/** Makes done, current and error steps clickable */
|
|
1568
|
+
onStepClick?: (index: number, step: any) => void;
|
|
1569
|
+
vertical?: boolean;
|
|
1570
|
+
/** Indexes shown in bad with a warning glyph */
|
|
1571
|
+
errorSteps?: number[];
|
|
1572
|
+
labels?: { step?: string; done?: string; current?: string; upcoming?: string; error?: string; of?: string };
|
|
1573
|
+
}
|
|
1574
|
+
export declare function ProgressIndicator(props: ProgressIndicatorProps): JSX.Element;
|
|
1575
|
+
|
|
1576
|
+
/** A SplitView list entry; extra fields pass through to renderItem. */
|
|
1577
|
+
export interface SplitViewItem { id: string; title?: React.ReactNode; subtitle?: React.ReactNode; meta?: React.ReactNode; icon?: string; [key: string]: any; }
|
|
1578
|
+
/** List + detail: a record list on the left (panel-w-lg, resizable), the selected record as children on the right. */
|
|
1579
|
+
export interface SplitViewProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect' | 'selected' | 'title'> {
|
|
1580
|
+
items: SplitViewItem[];
|
|
1581
|
+
selected?: string;
|
|
1582
|
+
onSelect?: (item: SplitViewItem) => void;
|
|
1583
|
+
renderItem?: (item: SplitViewItem, selected: boolean) => React.ReactNode;
|
|
1584
|
+
title?: React.ReactNode;
|
|
1585
|
+
count?: number;
|
|
1586
|
+
headerActions?: React.ReactNode;
|
|
1587
|
+
/** Initial list width (default --panel-w-lg 360) */
|
|
1588
|
+
listWidth?: number | string;
|
|
1589
|
+
minWidth?: number;
|
|
1590
|
+
maxWidth?: number;
|
|
1591
|
+
/** Divider drag and ← → (default true) */
|
|
1592
|
+
resizable?: boolean;
|
|
1593
|
+
/** Shows a toggle that hides the list */
|
|
1594
|
+
collapsible?: boolean;
|
|
1595
|
+
/** Width of the SplitView itself (a breakpoint name or px) below which list and detail stack: the list fills the pane and a picked record opens as a full pane with a back button. Default 'md' (768); false never stacks. Below 'lg' (1024) the list narrows to --panel-w */
|
|
1596
|
+
stackBelow?: 'sm' | 'md' | 'lg' | 'xl' | number | false;
|
|
1597
|
+
/** Pane shown first when stacked (default 'list') */
|
|
1598
|
+
defaultStackedView?: 'list' | 'detail';
|
|
1599
|
+
/** Called when the stacked pane changes */
|
|
1600
|
+
onStackedViewChange?: (view: 'list' | 'detail') => void;
|
|
1601
|
+
/** Called by the stacked detail's back button (after it returns to the list) */
|
|
1602
|
+
onBack?: () => void;
|
|
1603
|
+
labels?: { resize?: string; empty?: string; collapse?: string; expand?: string; back?: string };
|
|
1604
|
+
}
|
|
1605
|
+
export declare function SplitView(props: SplitViewProps): JSX.Element;
|
|
1606
|
+
|
|
1607
|
+
/** NavigationProduct switcher: the seven boxed product glyphs with their names, the current one marked. */
|
|
1608
|
+
export interface AppLauncherProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1609
|
+
/** Ids or { id, name, description, href } (default all seven) */
|
|
1610
|
+
products?: Array<NavigationProduct | { id: NavigationProduct; name?: string; description?: string; href?: string }>;
|
|
1611
|
+
current?: NavigationProduct;
|
|
1612
|
+
onOpen?: (id: NavigationProduct, product: any) => void;
|
|
1613
|
+
hrefs?: Partial<Record<NavigationProduct, string>>;
|
|
1614
|
+
descriptions?: Partial<Record<NavigationProduct, string>>;
|
|
1615
|
+
/** No popover frame (inside a sidebar footer) */
|
|
1616
|
+
inline?: boolean;
|
|
1617
|
+
labels?: { title?: string; current?: string };
|
|
1618
|
+
}
|
|
1619
|
+
export declare const AppLauncher: ((props: AppLauncherProps) => JSX.Element) & { Trigger: typeof AppLauncherTrigger };
|
|
1620
|
+
/** The sidebar's product-switcher row: current product glyph, name and an up-down chevron, styled as a nav item; opens an AppLauncher in a Popover. Also AppLauncher.Trigger. */
|
|
1621
|
+
export interface AppLauncherTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'name' | 'open'> {
|
|
1622
|
+
/** Current product (default platform) */
|
|
1623
|
+
product?: NavigationProduct;
|
|
1624
|
+
/** Overrides the product name */
|
|
1625
|
+
name?: string;
|
|
1626
|
+
/** Lucide icon instead of the product glyph, for a surface that has none (the data console: "database") */
|
|
1627
|
+
icon?: string;
|
|
1628
|
+
/** Second line under the name: tenant and user ("Zurich · Ayşe Demir"); hidden when collapsed, kept in the tooltip */
|
|
1629
|
+
meta?: React.ReactNode;
|
|
1630
|
+
/** Icon only (inside a collapsed VerticalNavigation) */
|
|
1631
|
+
collapsed?: boolean;
|
|
1632
|
+
/** Whether the launcher is open (aria-expanded) */
|
|
1633
|
+
open?: boolean;
|
|
1634
|
+
labels?: { switchProduct?: string };
|
|
1635
|
+
}
|
|
1636
|
+
export declare function AppLauncherTrigger(props: AppLauncherTriggerProps): JSX.Element;
|
|
1637
|
+
|
|
1638
|
+
/** The head of every console page: mono eyebrow naming the sidebar group, title, description, actions, optional meta row and tabs, back link. */
|
|
1639
|
+
export interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
1640
|
+
/** The sidebar group: "Build", "Observe", "Organisation" */
|
|
1641
|
+
eyebrow?: React.ReactNode;
|
|
1642
|
+
title: React.ReactNode;
|
|
1643
|
+
description?: React.ReactNode;
|
|
1644
|
+
/** One primary at most */
|
|
1645
|
+
actions?: React.ReactNode;
|
|
1646
|
+
/** Row of Tags, SummaryDetail or small facts under the title */
|
|
1647
|
+
meta?: React.ReactNode;
|
|
1648
|
+
/** A Tabs element flush with the header's bottom */
|
|
1649
|
+
tabs?: React.ReactNode;
|
|
1650
|
+
/** true, a handler, or { label, href, onClick } */
|
|
1651
|
+
back?: boolean | (() => void) | { label?: string; href?: string; onClick?: (e: React.MouseEvent) => void };
|
|
1652
|
+
/** A BlockIcon or Avatar left of the title */
|
|
1653
|
+
media?: React.ReactNode;
|
|
1654
|
+
/** A Breadcrumbs element above */
|
|
1655
|
+
breadcrumbs?: React.ReactNode;
|
|
1656
|
+
labels?: { back?: string };
|
|
1657
|
+
as?: any;
|
|
1658
|
+
}
|
|
1659
|
+
export declare function PageHeader(props: PageHeaderProps): JSX.Element;
|
|
1660
|
+
|
|
1661
|
+
/** The agent builder's top bar: back, name, version tag, status Tag, Versions and the one primary Deploy. */
|
|
1662
|
+
export interface BuilderHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'name'> {
|
|
1663
|
+
name: React.ReactNode;
|
|
1664
|
+
/** Version tag ("v8") */
|
|
1665
|
+
version?: string;
|
|
1666
|
+
/** Status Tag: a word or { label, tone, dot, icon } */
|
|
1667
|
+
status?: string | { label: string; tone?: NavigationTone; dot?: boolean; icon?: string };
|
|
1668
|
+
onBack?: () => void;
|
|
1669
|
+
backHref?: string;
|
|
1670
|
+
onDeploy?: () => void;
|
|
1671
|
+
deployDisabled?: boolean;
|
|
1672
|
+
deploying?: boolean;
|
|
1673
|
+
onVersions?: () => void;
|
|
1674
|
+
onRename?: () => void;
|
|
1675
|
+
saving?: boolean;
|
|
1676
|
+
saved?: boolean;
|
|
1677
|
+
/** Draft notice (true for the default text) */
|
|
1678
|
+
draft?: boolean | string;
|
|
1679
|
+
/** Extra actions before Versions */
|
|
1680
|
+
actions?: React.ReactNode;
|
|
1681
|
+
/** Slot after the name */
|
|
1682
|
+
left?: React.ReactNode;
|
|
1683
|
+
labels?: { back?: string; deploy?: string; versions?: string; saving?: string; saved?: string; draft?: string; rename?: string };
|
|
1684
|
+
}
|
|
1685
|
+
export declare function BuilderHeader(props: BuilderHeaderProps): JSX.Element;
|
|
1686
|
+
|
|
1687
|
+
/** The one gradient in the system: a band in the ancestor's --text with a soft --signal radial glow, for login and welcome. Inside is a Room, so the content's tokens flip. */
|
|
1688
|
+
export interface BrandBandProps extends Omit<React.HTMLAttributes<HTMLElement>, 'height'> {
|
|
1689
|
+
/** sm 160 · md 280 · lg 420 · full 100vh · or any CSS length */
|
|
1690
|
+
height?: 'sm' | 'md' | 'lg' | 'full' | string;
|
|
1691
|
+
/** Where the glow sits */
|
|
1692
|
+
glow?: 'top-right' | 'top-left' | 'center' | 'bottom';
|
|
1693
|
+
align?: 'start' | 'center' | 'end';
|
|
1694
|
+
as?: any;
|
|
1695
|
+
}
|
|
1696
|
+
export declare function BrandBand(props: BrandBandProps): JSX.Element;
|
|
1697
|
+
|
|
1698
|
+
/** One Accordion section. */
|
|
1699
|
+
export interface AccordionItem { id: string; label: React.ReactNode; content?: React.ReactNode; icon?: string; meta?: React.ReactNode; actions?: React.ReactNode; disabled?: boolean; }
|
|
1700
|
+
/** Stacked collapsible sections, one or many open. */
|
|
1701
|
+
export interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'open'> {
|
|
1702
|
+
items: AccordionItem[];
|
|
1703
|
+
/** Several sections open at once */
|
|
1704
|
+
multiple?: boolean;
|
|
1705
|
+
defaultOpen?: string[];
|
|
1706
|
+
/** Controlled open ids */
|
|
1707
|
+
open?: string[];
|
|
1708
|
+
onChange?: (ids: string[]) => void;
|
|
1709
|
+
/** 1px line and radius-lg around the stack */
|
|
1710
|
+
boxed?: boolean;
|
|
1711
|
+
}
|
|
1712
|
+
export declare function Accordion(props: AccordionProps): JSX.Element;
|
|
1713
|
+
/** One collapsible section with a hairline header; the record-layout section. */
|
|
1714
|
+
export interface ExpandableSectionProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onToggle' | 'open' | 'title'> {
|
|
1715
|
+
title: React.ReactNode;
|
|
1716
|
+
open?: boolean;
|
|
1717
|
+
defaultOpen?: boolean;
|
|
1718
|
+
onToggle?: (open: boolean) => void;
|
|
1719
|
+
actions?: React.ReactNode;
|
|
1720
|
+
count?: number;
|
|
1721
|
+
}
|
|
1722
|
+
export declare function ExpandableSection(props: ExpandableSectionProps): JSX.Element;
|
|
1723
|
+
|
|
1724
|
+
/** One Carousel slide. */
|
|
1725
|
+
export interface CarouselSlide { title: React.ReactNode; description?: React.ReactNode; eyebrow?: React.ReactNode; icon?: string; media?: React.ReactNode; action?: React.ReactNode; }
|
|
1726
|
+
/** Cards one at a time with dots and arrows: onboarding tips, release notes. Arrow keys move; autoplay pauses on hover and respects reduced motion. */
|
|
1727
|
+
export interface CarouselProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
1728
|
+
slides: CarouselSlide[];
|
|
1729
|
+
/** Controlled index */
|
|
1730
|
+
index?: number;
|
|
1731
|
+
defaultIndex?: number;
|
|
1732
|
+
onChange?: (index: number) => void;
|
|
1733
|
+
autoPlay?: boolean;
|
|
1734
|
+
/** ms between slides (default 6000) */
|
|
1735
|
+
interval?: number;
|
|
1736
|
+
loop?: boolean;
|
|
1737
|
+
labels?: { prev?: string; next?: string; goTo?: string; of?: string };
|
|
1738
|
+
}
|
|
1739
|
+
export declare function Carousel(props: CarouselProps): JSX.Element;
|
|
1740
|
+
|
|
1741
|
+
/** One setup step. */
|
|
1742
|
+
export interface SetupStep { id?: string; title: React.ReactNode; description?: React.ReactNode; /** "2 min" */ time?: string; done?: boolean; optional?: boolean; /** A label (renders a Button) or a node */ action?: React.ReactNode | string; onAction?: () => void; href?: string; }
|
|
1743
|
+
/** Checklist of setup steps with progress; the next open step carries the one primary action. */
|
|
1744
|
+
export interface SetupAssistantProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
1745
|
+
/** Optional: without title and description only the progress shows in the head */
|
|
1746
|
+
title?: React.ReactNode;
|
|
1747
|
+
/** No border, ground or padding: inside a Card or widget that already frames it */
|
|
1748
|
+
bare?: boolean;
|
|
1749
|
+
description?: React.ReactNode;
|
|
1750
|
+
steps: SetupStep[];
|
|
1751
|
+
labels?: { progress?: string; done?: string; optional?: string };
|
|
1752
|
+
}
|
|
1753
|
+
export declare function SetupAssistant(props: SetupAssistantProps): JSX.Element;
|
|
1754
|
+
|
|
1755
|
+
/** First-run card: brand pane on the left, first steps on the right. Render inside a modal or on the empty workspace. */
|
|
1756
|
+
export interface WelcomeMatProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
1757
|
+
title: React.ReactNode;
|
|
1758
|
+
subtitle?: React.ReactNode;
|
|
1759
|
+
steps: Array<{ id?: string; title: React.ReactNode; description?: React.ReactNode; icon?: string; done?: boolean }>;
|
|
1760
|
+
/** Makes open steps clickable */
|
|
1761
|
+
onStep?: (step: any, index: number) => void;
|
|
1762
|
+
footer?: React.ReactNode;
|
|
1763
|
+
/** Shows a "Skip for now" link */
|
|
1764
|
+
onSkip?: () => void;
|
|
1765
|
+
/** Replaces the mark in the brand pane */
|
|
1766
|
+
brand?: React.ReactNode;
|
|
1767
|
+
labels?: { done?: string; skip?: string; progress?: string };
|
|
1768
|
+
}
|
|
1769
|
+
export declare function WelcomeMat(props: WelcomeMatProps): JSX.Element;
|
|
1770
|
+
|
|
1771
|
+
/** 56px bottom bar for phones: up to five items, 44px targets, active in link colour. */
|
|
1772
|
+
export interface MobileTabBarProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
1773
|
+
items: Array<{ id: string; label: string; icon: string; href?: string; /** Count or a short word */ badge?: number | string }>;
|
|
1774
|
+
active?: string;
|
|
1775
|
+
onChange?: (id: string, item: any) => void;
|
|
1776
|
+
labels?: { navigation?: string };
|
|
1777
|
+
}
|
|
1778
|
+
export declare function MobileTabBar(props: MobileTabBarProps): JSX.Element;
|
|
1779
|
+
|
|
1780
|
+
/** Page controls under a list: range text "1–25 of 312", page size, previous and next. */
|
|
1781
|
+
export interface PaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
1782
|
+
/** 1-based */
|
|
1783
|
+
page?: number;
|
|
1784
|
+
pageSize?: number;
|
|
1785
|
+
total: number;
|
|
1786
|
+
onChange?: (page: number) => void;
|
|
1787
|
+
/** Shows the page-size select */
|
|
1788
|
+
onPageSizeChange?: (size: number) => void;
|
|
1789
|
+
pageSizes?: number[];
|
|
1790
|
+
/** Range and arrows only */
|
|
1791
|
+
compact?: boolean;
|
|
1792
|
+
/** First and last buttons */
|
|
1793
|
+
showEdges?: boolean;
|
|
1794
|
+
/** Digit grouping locale */
|
|
1795
|
+
locale?: string;
|
|
1796
|
+
labels?: { of?: string; perPage?: string; prev?: string; next?: string; first?: string; last?: string; page?: string; pageSize?: string };
|
|
1797
|
+
}
|
|
1798
|
+
export declare function Pagination(props: PaginationProps): JSX.Element;
|
|
1799
|
+
|
|
1800
|
+
/** Read-only step progress with done, current and upcoming states, horizontal or vertical. Shows where a run or rollout is; it does not navigate. */
|
|
1801
|
+
export interface StepperProps extends Omit<React.HTMLAttributes<HTMLOListElement>, 'size'> {
|
|
1802
|
+
steps: Array<string | { label: string; description?: React.ReactNode; meta?: React.ReactNode; error?: boolean }>;
|
|
1803
|
+
/** 0-based index of the step in progress */
|
|
1804
|
+
current?: number;
|
|
1805
|
+
vertical?: boolean;
|
|
1806
|
+
size?: 'sm' | 'md';
|
|
1807
|
+
errorSteps?: number[];
|
|
1808
|
+
labels?: { done?: string; current?: string; upcoming?: string; error?: string; step?: string; of?: string };
|
|
1809
|
+
}
|
|
1810
|
+
export declare function Stepper(props: StepperProps): JSX.Element;
|
|
1811
|
+
|
|
1812
|
+
// --- feedback ---
|
|
1813
|
+
/** The brand loader: the Aginies mark animated with CSS keyframes only. Use it wherever the product itself is working (boot, page data, an agent run); use Spinner for a single control. */
|
|
1814
|
+
export interface AginiesLoaderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'label'> {
|
|
1815
|
+
/** page = 96px full-viewport overlay with wordmark and label · region = 40px centred in its container (default) · inline = 16px inside a line of text */
|
|
1816
|
+
tier?: 'page' | 'region' | 'inline';
|
|
1817
|
+
/** orbit = ring turns once per --loader-spin, core counter-turns in eased quarters, crescent breathes · pulse = signal-soft halo beats per --loader-pulse · draw = ring draws over half a spin, then the core, then both fade */
|
|
1818
|
+
variant?: 'orbit' | 'pulse' | 'draw';
|
|
1819
|
+
/** Accessible text (and the visible label on the page tier); defaults to labels.loading */
|
|
1820
|
+
label?: string;
|
|
1821
|
+
/** Show the label visibly on region and inline tiers (page always shows it) */
|
|
1822
|
+
showLabel?: boolean;
|
|
1823
|
+
/** Visible strings: loading */
|
|
1824
|
+
labels?: { loading?: string };
|
|
1825
|
+
}
|
|
1826
|
+
export declare function AginiesLoader(props: AginiesLoaderProps): JSX.Element;
|
|
1827
|
+
/** Content placeholder with a slow pulse while a region loads. Mirror the shape of what will appear; never more than one screen of it. */
|
|
1828
|
+
export interface SkeletonProps extends Omit<React.HTMLAttributes<HTMLElement>, 'height' | 'width'> {
|
|
1829
|
+
/** text = a paragraph of lines (last one shorter) · line = one 10px bar · rect = a block · circle = an avatar */
|
|
1830
|
+
shape?: 'text' | 'line' | 'rect' | 'circle';
|
|
1831
|
+
/** Lines of a text skeleton (default 3) */
|
|
1832
|
+
lines?: number;
|
|
1833
|
+
width?: number | string;
|
|
1834
|
+
height?: number | string;
|
|
1835
|
+
}
|
|
1836
|
+
export declare function Skeleton(props: SkeletonProps): JSX.Element;
|
|
1837
|
+
/** Whole-page placeholder: page header (eyebrow, title, action) and a table of rows. Render it in place of the page until its data arrives. */
|
|
1838
|
+
export interface PageSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1839
|
+
/** Show the header block (default true) */
|
|
1840
|
+
header?: boolean;
|
|
1841
|
+
/** Table rows (default 6) */
|
|
1842
|
+
rows?: number;
|
|
1843
|
+
/** Table columns; the first is twice as wide (default 4) */
|
|
1844
|
+
columns?: number;
|
|
1845
|
+
/** Visible strings: loading (screen-reader text) */
|
|
1846
|
+
labels?: { loading?: string };
|
|
1847
|
+
}
|
|
1848
|
+
export declare function PageSkeleton(props: PageSkeletonProps): JSX.Element;
|
|
1849
|
+
/** Inline alert inside a page, card or form: tone wash, icon, title, text, actions and optional dismiss. Says what happened and what to do next. */
|
|
1850
|
+
export interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'icon' | 'title'> {
|
|
1851
|
+
/** info · ok · warn · bad — bad gets role="alert" */
|
|
1852
|
+
tone?: 'info' | 'ok' | 'warn' | 'bad';
|
|
1853
|
+
/** Lucide name; defaults per tone (info, circle-check, triangle-alert, circle-alert) */
|
|
1854
|
+
icon?: string;
|
|
1855
|
+
title?: React.ReactNode;
|
|
1856
|
+
/** The text; children */
|
|
1857
|
+
children?: React.ReactNode;
|
|
1858
|
+
/** Buttons or links rendered under the text */
|
|
1859
|
+
actions?: React.ReactNode;
|
|
1860
|
+
/** Shows the dismiss button */
|
|
1861
|
+
onDismiss?: () => void;
|
|
1862
|
+
/** Visible strings: dismiss */
|
|
1863
|
+
labels?: { dismiss?: string };
|
|
1864
|
+
}
|
|
1865
|
+
export declare function Alert(props: AlertProps): JSX.Element;
|
|
1866
|
+
/** Default Lucide glyph per tone, as Alert uses it: info, circle-check, triangle-alert, circle-alert. */
|
|
1867
|
+
export declare const TONE_ICON: Record<"info" | "ok" | "warn" | "bad" | "neutral" | "signal", string>;
|
|
1868
|
+
/** Transient confirmation after an action, bottom-right, sliding 12px up. The platform uses ok and bad only; no sonner. */
|
|
1869
|
+
export interface ToastProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'action' | 'title'> {
|
|
1870
|
+
tone?: 'ok' | 'bad' | 'info' | 'warn';
|
|
1871
|
+
title?: React.ReactNode;
|
|
1872
|
+
/** One line of detail */
|
|
1873
|
+
children?: React.ReactNode;
|
|
1874
|
+
/** One action (a link Button): "Undo", "View run" */
|
|
1875
|
+
action?: React.ReactNode;
|
|
1876
|
+
/** Shows the dismiss button; called on auto-dismiss too */
|
|
1877
|
+
onDismiss?: () => void;
|
|
1878
|
+
/** Auto-dismiss after ms when used without useToasts */
|
|
1879
|
+
duration?: number;
|
|
1880
|
+
labels?: { dismiss?: string };
|
|
1881
|
+
}
|
|
1882
|
+
export declare function Toast(props: ToastProps): JSX.Element;
|
|
1883
|
+
/** Fixed stack for toasts (z-toast). */
|
|
1884
|
+
export interface ToastContainerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1885
|
+
/** Corner or edge; "static" is the same as static */
|
|
1886
|
+
position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'top-center' | 'bottom-center' | 'static';
|
|
1887
|
+
/** Render in flow instead of fixed (docs, previews) */
|
|
1888
|
+
static?: boolean;
|
|
1889
|
+
/** Absolute inside the nearest positioned ancestor (a phone frame, a panel) instead of fixed to the viewport */
|
|
1890
|
+
contained?: boolean;
|
|
1891
|
+
}
|
|
1892
|
+
export declare function ToastContainer(props: ToastContainerProps): JSX.Element;
|
|
1893
|
+
export interface ToastItem extends Omit<ToastProps, 'children' | 'onDismiss'> { id: string; /** Body text */ text?: React.ReactNode; }
|
|
1894
|
+
/** Toast queue: push() returns an id, at most `max` are live, the rest wait their turn; each auto-dismisses after `duration` ms (0 keeps it). */
|
|
1895
|
+
export declare function useToasts(options?: { duration?: number; max?: number }): { toasts: ToastItem[]; push: (toast: Omit<ToastItem, 'id'>) => string; dismiss: (id: string) => void; clear: () => void };
|
|
1896
|
+
/** In-context notice at the top of a card, form or section: one line and an optional action. Not page-wide and not dismissable. */
|
|
1897
|
+
export interface ScopedNotificationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'action' | 'icon'> {
|
|
1898
|
+
tone?: 'neutral' | 'info' | 'ok' | 'warn' | 'bad';
|
|
1899
|
+
/** Lucide name; defaults per tone */
|
|
1900
|
+
icon?: string;
|
|
1901
|
+
children?: React.ReactNode;
|
|
1902
|
+
/** A link Button on the right */
|
|
1903
|
+
action?: React.ReactNode;
|
|
1904
|
+
}
|
|
1905
|
+
export declare function ScopedNotification(props: ScopedNotificationProps): JSX.Element;
|
|
1906
|
+
/** One in-app notification row: unread dot, initials avatar or icon tile, title, message, time. */
|
|
1907
|
+
export interface NotificationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'title'> {
|
|
1908
|
+
title: React.ReactNode;
|
|
1909
|
+
message?: React.ReactNode;
|
|
1910
|
+
/** Short relative or clock time: "5 min", "09:41" */
|
|
1911
|
+
time?: string;
|
|
1912
|
+
unread?: boolean;
|
|
1913
|
+
/** Person's name; rendered as initials */
|
|
1914
|
+
avatar?: string;
|
|
1915
|
+
/** Lucide name for a system notification (default bell) */
|
|
1916
|
+
icon?: string;
|
|
1917
|
+
/** The object it concerns, in mono: "run_7f3a" */
|
|
1918
|
+
object?: string;
|
|
1919
|
+
/** Makes the row a button */
|
|
1920
|
+
onClick?: () => void;
|
|
1921
|
+
as?: any;
|
|
1922
|
+
/** Screen-reader word after an unread title (default "unread") */
|
|
1923
|
+
labels?: { unread?: string };
|
|
1924
|
+
}
|
|
1925
|
+
export declare function Notification(props: NotificationProps): JSX.Element;
|
|
1926
|
+
export interface NotificationListItem extends NotificationProps { id?: string; /** Group label; overrides date */ day?: string; /** Date used to group into Today / Yesterday / dd.mm.yyyy */ date?: string | Date; }
|
|
1927
|
+
/** The bell panel: titled list of notifications grouped by day with "Mark all as read". */
|
|
1928
|
+
export interface NotificationListProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
1929
|
+
title?: React.ReactNode;
|
|
1930
|
+
items?: NotificationListItem[];
|
|
1931
|
+
/** Extra rows after the groups */
|
|
1932
|
+
children?: React.ReactNode;
|
|
1933
|
+
onMarkAll?: () => void;
|
|
1934
|
+
/** Locale for the day labels (default tr-TR) */
|
|
1935
|
+
locale?: string;
|
|
1936
|
+
/** No floating frame (shadow, border, 360px width, body max-height): inside a Card or dashboard widget */
|
|
1937
|
+
bare?: boolean;
|
|
1938
|
+
/** Show the title row with the count and Mark all (default true) */
|
|
1939
|
+
header?: boolean;
|
|
1940
|
+
/** Visible strings: title, markAll, today, yesterday, empty; unread is the screen-reader word on unread rows */
|
|
1941
|
+
labels?: { title?: string; markAll?: string; today?: string; yesterday?: string; empty?: string; unread?: string };
|
|
1942
|
+
}
|
|
1943
|
+
export declare function NotificationList(props: NotificationListProps): JSX.Element;
|
|
1944
|
+
/** Modal dialog over an --overlay scrim: header with title and close, scrollable body, footer with the actions. Traps focus, restores it on close, closes on Esc, locks page scroll. */
|
|
1945
|
+
export interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClose' | 'open' | 'size' | 'title'> {
|
|
1946
|
+
/** Renders nothing while false */
|
|
1947
|
+
open: boolean;
|
|
1948
|
+
onClose?: () => void;
|
|
1949
|
+
title?: React.ReactNode;
|
|
1950
|
+
/** One line under the title (aria-describedby) */
|
|
1951
|
+
description?: React.ReactNode;
|
|
1952
|
+
/** sm 400 · md 560 · lg 800 · full = viewport minus 24px */
|
|
1953
|
+
size?: 'sm' | 'md' | 'lg' | 'full';
|
|
1954
|
+
footer?: React.ReactNode;
|
|
1955
|
+
children?: React.ReactNode;
|
|
1956
|
+
hideClose?: boolean;
|
|
1957
|
+
/** Clicking the scrim closes (default true) */
|
|
1958
|
+
scrimClose?: boolean;
|
|
1959
|
+
bodyClassName?: string;
|
|
1960
|
+
labels?: { close?: string };
|
|
1961
|
+
}
|
|
1962
|
+
export declare function Modal(props: ModalProps): JSX.Element | null;
|
|
1963
|
+
/** Confirm dialog: a question as the title, the consequence spelled out, Cancel and one confirming action (solid destructive when tone is bad). */
|
|
1964
|
+
export interface PromptProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'icon' | 'onClose' | 'open' | 'title'> {
|
|
1965
|
+
open: boolean;
|
|
1966
|
+
onClose?: () => void;
|
|
1967
|
+
onConfirm?: () => void;
|
|
1968
|
+
/** A question: "Delete this agent?" */
|
|
1969
|
+
title: React.ReactNode;
|
|
1970
|
+
/** What happens */
|
|
1971
|
+
children?: React.ReactNode;
|
|
1972
|
+
/** The spelled-out side effect in a tone wash: "…and 14 related runs will be deleted." */
|
|
1973
|
+
consequence?: React.ReactNode;
|
|
1974
|
+
/** bad = destructive · warn (default) · info · ok */
|
|
1975
|
+
tone?: 'bad' | 'warn' | 'info' | 'ok';
|
|
1976
|
+
icon?: string;
|
|
1977
|
+
confirmLabel?: string;
|
|
1978
|
+
cancelLabel?: string;
|
|
1979
|
+
/** Confirm button shows a spinner and both are disabled */
|
|
1980
|
+
loading?: boolean;
|
|
1981
|
+
labels?: { confirm?: string; cancel?: string };
|
|
1982
|
+
}
|
|
1983
|
+
export declare function Prompt(props: PromptProps): JSX.Element | null;
|
|
1984
|
+
/** Dialog behaviour hook shared by Modal and Prompt: Esc, focus trap, focus restore, scroll lock. */
|
|
1985
|
+
export declare function useDialog(open: boolean, onClose: (() => void) | undefined, ref: React.RefObject<HTMLElement>, options?: { lockScroll?: boolean; autoFocus?: boolean }): void;
|
|
1986
|
+
/** Non-modal layer anchored to a trigger: header, body, footer, 8 placements, optional arrow. Closes on outside click and Esc. */
|
|
1987
|
+
export interface PopoverProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'open' | 'title' | 'width'> {
|
|
1988
|
+
/** The element that toggles it; receives onClick, aria-expanded, aria-controls */
|
|
1989
|
+
trigger?: React.ReactElement;
|
|
1990
|
+
/** Controlled open state (previews render it open) */
|
|
1991
|
+
open?: boolean;
|
|
1992
|
+
defaultOpen?: boolean;
|
|
1993
|
+
onOpenChange?: (open: boolean) => void;
|
|
1994
|
+
placement?: 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';
|
|
1995
|
+
/** Pointer toward the trigger (default false) */
|
|
1996
|
+
arrow?: boolean;
|
|
1997
|
+
title?: React.ReactNode;
|
|
1998
|
+
footer?: React.ReactNode;
|
|
1999
|
+
children?: React.ReactNode;
|
|
2000
|
+
/** Width in px (default 288) */
|
|
2001
|
+
width?: number | string;
|
|
2002
|
+
hideClose?: boolean;
|
|
2003
|
+
/** Render the layer in flow without a trigger (docs) */
|
|
2004
|
+
static?: boolean;
|
|
2005
|
+
labels?: { close?: string };
|
|
2006
|
+
}
|
|
2007
|
+
export declare function Popover(props: PopoverProps): JSX.Element;
|
|
2008
|
+
/** Short hint on hover or focus, 12px mono on a --text ground. Max two lines, never an action; kbd shows the shortcut. */
|
|
2009
|
+
export interface TooltipProps extends Omit<React.HTMLAttributes<HTMLElement>, 'content' | 'open'> {
|
|
2010
|
+
content: React.ReactNode;
|
|
2011
|
+
/** Keyboard shortcut shown after the text: "⌘K" */
|
|
2012
|
+
kbd?: string;
|
|
2013
|
+
placement?: 'top' | 'bottom' | 'left' | 'right';
|
|
2014
|
+
/** Delay before showing, ms (default 400) */
|
|
2015
|
+
delay?: number;
|
|
2016
|
+
/** Force open (previews) */
|
|
2017
|
+
open?: boolean;
|
|
2018
|
+
/** Exactly one focusable element */
|
|
2019
|
+
children: React.ReactElement;
|
|
2020
|
+
}
|
|
2021
|
+
export declare function Tooltip(props: TooltipProps): JSX.Element;
|
|
2022
|
+
/** Generic activity spinner with a --link stroke. For a control or a small region; AginiesLoader is the brand loader. */
|
|
2023
|
+
export interface SpinnerProps extends Omit<React.HTMLAttributes<HTMLElement>, 'label' | 'size'> {
|
|
2024
|
+
/** xs 12 · sm 16 · md 20 · lg 32 */
|
|
2025
|
+
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
2026
|
+
/** signal (link) · neutral (text-2) · inverse (on a signal fill) */
|
|
2027
|
+
tone?: 'signal' | 'neutral' | 'inverse';
|
|
2028
|
+
/** Visible text beside it */
|
|
2029
|
+
label?: string;
|
|
2030
|
+
/** Overlay the nearest positioned parent with a panel wash */
|
|
2031
|
+
cover?: boolean;
|
|
2032
|
+
labels?: { loading?: string };
|
|
2033
|
+
}
|
|
2034
|
+
export declare function Spinner(props: SpinnerProps): JSX.Element;
|
|
2035
|
+
/** Linear progress: determinate or indeterminate, label left, value right in mono. The tone says what the bar means. */
|
|
2036
|
+
export interface ProgressBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'max' | 'size' | 'value'> {
|
|
2037
|
+
value?: number;
|
|
2038
|
+
max?: number;
|
|
2039
|
+
indeterminate?: boolean;
|
|
2040
|
+
tone?: 'signal' | 'ok' | 'warn' | 'bad' | 'neutral';
|
|
2041
|
+
/** Track height: sm 4 · md 6 · lg 10 */
|
|
2042
|
+
size?: 'sm' | 'md' | 'lg';
|
|
2043
|
+
label?: React.ReactNode;
|
|
2044
|
+
showValue?: boolean;
|
|
2045
|
+
/** Replaces the percentage: "7 / 12 steps" */
|
|
2046
|
+
valueText?: string;
|
|
2047
|
+
labels?: { working?: string };
|
|
2048
|
+
}
|
|
2049
|
+
export declare function ProgressBar(props: ProgressBarProps): JSX.Element;
|
|
2050
|
+
/** Circular progress with the value in the centre set like a stat, and a mono label under it. */
|
|
2051
|
+
export interface ProgressRingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'max' | 'size' | 'value'> {
|
|
2052
|
+
value?: number;
|
|
2053
|
+
max?: number;
|
|
2054
|
+
/** Diameter in px (default 64) */
|
|
2055
|
+
size?: number;
|
|
2056
|
+
strokeWidth?: number;
|
|
2057
|
+
tone?: 'signal' | 'ok' | 'warn' | 'bad' | 'neutral';
|
|
2058
|
+
showValue?: boolean;
|
|
2059
|
+
/** Replaces the percentage in the centre: "4.6" */
|
|
2060
|
+
valueText?: string;
|
|
2061
|
+
/** Mono label under the ring */
|
|
2062
|
+
label?: React.ReactNode;
|
|
2063
|
+
/** Custom centre content */
|
|
2064
|
+
children?: React.ReactNode;
|
|
2065
|
+
}
|
|
2066
|
+
export declare function ProgressRing(props: ProgressRingProps): JSX.Element;
|
|
2067
|
+
/** Right-docked panel (inspector, artifact, conversation): header with eyebrow, title and close; tabs slot; scrolling body; footer. overlay slides over the page at z-panel; docked sits in the layout. */
|
|
2068
|
+
export interface SidePanelProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClose' | 'open' | 'size' | 'title' | 'width'> {
|
|
2069
|
+
/** Renders nothing while false (default true) */
|
|
2070
|
+
open?: boolean;
|
|
2071
|
+
/** Shows the close button; Esc closes in overlay mode */
|
|
2072
|
+
onClose?: () => void;
|
|
2073
|
+
title?: React.ReactNode;
|
|
2074
|
+
/** Mono eyebrow above the title: "Block · HTTP request" */
|
|
2075
|
+
eyebrow?: React.ReactNode;
|
|
2076
|
+
subtitle?: React.ReactNode;
|
|
2077
|
+
/** A Tabs row under the header */
|
|
2078
|
+
tabs?: React.ReactNode;
|
|
2079
|
+
/** Icon buttons beside the close */
|
|
2080
|
+
actions?: React.ReactNode;
|
|
2081
|
+
footer?: React.ReactNode;
|
|
2082
|
+
/** md = --panel-w 288 · lg = --panel-w-lg 360 */
|
|
2083
|
+
size?: 'md' | 'lg';
|
|
2084
|
+
/** Any width (number = px), overriding size: a 600px trace inspector, "40vw" */
|
|
2085
|
+
width?: number | string;
|
|
2086
|
+
/** docked sits in the layout (inside PageLayout, a SidePanel with no mode is docked); overlay (default) is a modal sheet from the right: scrim, focus moved in and kept inside, Esc and scrim click call onClose, focus restored */
|
|
2087
|
+
mode?: 'overlay' | 'docked';
|
|
2088
|
+
/** Overlay only: the --overlay scrim behind the sheet (default true) */
|
|
2089
|
+
scrim?: boolean;
|
|
2090
|
+
children?: React.ReactNode;
|
|
2091
|
+
labels?: { close?: string };
|
|
2092
|
+
}
|
|
2093
|
+
export declare function SidePanel(props: SidePanelProps): JSX.Element | null;
|
|
2094
|
+
/** Bottom sheet for phones and narrow frames: scrim, a panel rising from the bottom with radius-2xl top corners, a grab handle, title, scrolling body and footer; focus trapped and restored, Esc and the scrim close it. */
|
|
2095
|
+
export interface SheetProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClose' | 'open' | 'title'> {
|
|
2096
|
+
/** Renders nothing while false */
|
|
2097
|
+
open?: boolean;
|
|
2098
|
+
/** Esc, the scrim and the close button call it */
|
|
2099
|
+
onClose?: () => void;
|
|
2100
|
+
title?: React.ReactNode;
|
|
2101
|
+
description?: React.ReactNode;
|
|
2102
|
+
/** Actions, stacked full-width at 44px (primary first) */
|
|
2103
|
+
footer?: React.ReactNode;
|
|
2104
|
+
children?: React.ReactNode;
|
|
2105
|
+
hideClose?: boolean;
|
|
2106
|
+
/** Clicking the scrim closes (default true) */
|
|
2107
|
+
scrimClose?: boolean;
|
|
2108
|
+
/** Absolute inside the nearest positioned ancestor (a phone frame) instead of fixed to the viewport; no body scroll lock */
|
|
2109
|
+
contained?: boolean;
|
|
2110
|
+
/** Default 85% of the frame */
|
|
2111
|
+
maxHeight?: number | string;
|
|
2112
|
+
labels?: { close?: string };
|
|
2113
|
+
}
|
|
2114
|
+
export declare function Sheet(props: SheetProps): JSX.Element | null;
|
|
2115
|
+
/** Bottom-docked floating composer for a note, e-mail or draft: header with minimise and close, body, toolbar on the left, actions on the right. */
|
|
2116
|
+
export interface DockedComposerProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'onClose' | 'title'> {
|
|
2117
|
+
title: React.ReactNode;
|
|
2118
|
+
/** Lucide name in the header (default pen-line) */
|
|
2119
|
+
icon?: string;
|
|
2120
|
+
/** Controlled minimised state */
|
|
2121
|
+
minimized?: boolean;
|
|
2122
|
+
defaultMinimized?: boolean;
|
|
2123
|
+
onMinimize?: (minimized: boolean) => void;
|
|
2124
|
+
onClose?: () => void;
|
|
2125
|
+
/** Icon buttons on the left of the footer */
|
|
2126
|
+
toolbar?: React.ReactNode;
|
|
2127
|
+
/** Buttons on the right of the footer */
|
|
2128
|
+
footer?: React.ReactNode;
|
|
2129
|
+
children?: React.ReactNode;
|
|
2130
|
+
side?: 'right' | 'left';
|
|
2131
|
+
/** Render in flow (docs) */
|
|
2132
|
+
static?: boolean;
|
|
2133
|
+
labels?: { minimize?: string; restore?: string; close?: string };
|
|
2134
|
+
}
|
|
2135
|
+
export declare function DockedComposer(props: DockedComposerProps): JSX.Element;
|
|
2136
|
+
/** Bottom bar of utilities (history, notes, chat) for the service console; the active one opens its panel above the bar. */
|
|
2137
|
+
export interface DockedUtilityBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
2138
|
+
items: { id: string; label: string; icon?: string; badge?: number | string }[];
|
|
2139
|
+
active?: string | null;
|
|
2140
|
+
/** Called with the id, or null when the active item is pressed again */
|
|
2141
|
+
onChange?: (id: string | null) => void;
|
|
2142
|
+
/** Content of the open panel */
|
|
2143
|
+
panel?: React.ReactNode;
|
|
2144
|
+
static?: boolean;
|
|
2145
|
+
labels?: { utilities?: string };
|
|
2146
|
+
}
|
|
2147
|
+
export declare function DockedUtilityBar(props: DockedUtilityBarProps): JSX.Element;
|
|
2148
|
+
/** Post composer for a feed or a record's notes: avatar, textarea that expands on focus, attach and mention tools, one submit (⌘/Ctrl+Enter). */
|
|
2149
|
+
export interface PublisherProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange' | 'onSubmit' | 'placeholder' | 'value'> {
|
|
2150
|
+
/** The author; initials are shown */
|
|
2151
|
+
user?: string | { name?: string };
|
|
2152
|
+
placeholder?: string;
|
|
2153
|
+
value?: string;
|
|
2154
|
+
defaultValue?: string;
|
|
2155
|
+
onChange?: (value: string) => void;
|
|
2156
|
+
onSubmit?: (value: string) => void;
|
|
2157
|
+
onAttach?: () => void;
|
|
2158
|
+
onMention?: () => void;
|
|
2159
|
+
submitLabel?: string;
|
|
2160
|
+
/** Force the expanded state */
|
|
2161
|
+
expanded?: boolean;
|
|
2162
|
+
labels?: { placeholder?: string; submit?: string; attach?: string; mention?: string };
|
|
2163
|
+
}
|
|
2164
|
+
export declare function Publisher(props: PublisherProps): JSX.Element;
|
|
2165
|
+
/** Empty region: an illustration or a boxed icon, an h4 title, one line of text and at most two actions. compact for tables and lists. */
|
|
2166
|
+
export interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'action' | 'icon' | 'title'> {
|
|
2167
|
+
/** Custom illustration node (takes precedence) */
|
|
2168
|
+
illustration?: React.ReactNode;
|
|
2169
|
+
/** Lucide name in a 44px signal-soft box */
|
|
2170
|
+
icon?: string;
|
|
2171
|
+
/** Product glyph instead of a Lucide icon */
|
|
2172
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
2173
|
+
title?: React.ReactNode;
|
|
2174
|
+
/** The text */
|
|
2175
|
+
children?: React.ReactNode;
|
|
2176
|
+
/** Primary Button */
|
|
2177
|
+
action?: React.ReactNode;
|
|
2178
|
+
/** Secondary Button or link */
|
|
2179
|
+
secondary?: React.ReactNode;
|
|
2180
|
+
/** Horizontal, smaller: inside a table or list */
|
|
2181
|
+
compact?: boolean;
|
|
2182
|
+
}
|
|
2183
|
+
export declare function EmptyState(props: EmptyStateProps): JSX.Element;
|
|
2184
|
+
|
|
2185
|
+
// --- chat ---
|
|
2186
|
+
/** Scroll container of a conversation (platform logs, QA transcripts, hosted chat, the Contact desk): messages, events and dividers, newest at the bottom. Sticks to the bottom as children change. */
|
|
2187
|
+
export interface ChatThreadProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2188
|
+
children?: React.ReactNode;
|
|
2189
|
+
/** Scroll to the bottom whenever children change (default true) */
|
|
2190
|
+
stickToBottom?: boolean;
|
|
2191
|
+
/** Which side the user's bubbles sit on: start (customer on the left, as in the desk) or end (hosted chat, where the viewer is the user) */
|
|
2192
|
+
userSide?: 'start' | 'end';
|
|
2193
|
+
maxHeight?: number | string;
|
|
2194
|
+
labels?: { thread?: string };
|
|
2195
|
+
}
|
|
2196
|
+
export declare function ChatThread(props: ChatThreadProps): JSX.Element;
|
|
2197
|
+
/** Day separator ("Today", "15.10.2026") or the "New messages" line. */
|
|
2198
|
+
export interface ChatDividerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2199
|
+
variant?: 'day' | 'new';
|
|
2200
|
+
/** The label; "new" defaults to labels.newMessages */
|
|
2201
|
+
children?: React.ReactNode;
|
|
2202
|
+
labels?: { newMessages?: string };
|
|
2203
|
+
}
|
|
2204
|
+
export declare function ChatDivider(props: ChatDividerProps): JSX.Element;
|
|
2205
|
+
export type ChatRole = 'user' | 'agent' | 'human-agent' | 'system';
|
|
2206
|
+
export type ChatDelivery = 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
|
|
2207
|
+
export interface ChatAction { label: string; value?: string; icon?: string; variant?: 'neutral' | 'primary' | 'outline' | 'ghost'; }
|
|
2208
|
+
export interface ChatStructured {
|
|
2209
|
+
/** Row of reply buttons */
|
|
2210
|
+
buttons?: ChatAction[];
|
|
2211
|
+
/** Horizontal cards with title, text, image and actions */
|
|
2212
|
+
cards?: { title: React.ReactNode; text?: React.ReactNode; image?: string; imageAlt?: string; actions?: ChatAction[] }[];
|
|
2213
|
+
/** A small table */
|
|
2214
|
+
table?: { columns: React.ReactNode[]; rows: React.ReactNode[][] };
|
|
2215
|
+
/** One image with a caption */
|
|
2216
|
+
image?: { src: string; alt?: string; caption?: React.ReactNode };
|
|
2217
|
+
}
|
|
2218
|
+
export interface ChatSource { label: string; href?: string; icon?: string; }
|
|
2219
|
+
/** One message in a thread: name line above (11px semibold), bubble, time and delivery ticks below; markdown body; structured replies, sources and tool calls under the bubble. */
|
|
2220
|
+
export interface ChatMessageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'action' | 'name' | 'role'> {
|
|
2221
|
+
/** user = the customer · agent = the bot (agent icon tile) · human-agent = a person at the desk (initials) · system = centred note */
|
|
2222
|
+
role?: ChatRole;
|
|
2223
|
+
/** Name line; agents default to labels.agent */
|
|
2224
|
+
name?: React.ReactNode;
|
|
2225
|
+
/** Clock time under the bubble */
|
|
2226
|
+
time?: string;
|
|
2227
|
+
/** Delivery tick: clock / check / check-check; read is link-coloured; failed is bad with a word */
|
|
2228
|
+
status?: ChatDelivery;
|
|
2229
|
+
/** Person's name for initials, or a node */
|
|
2230
|
+
avatar?: React.ReactNode;
|
|
2231
|
+
/** A string renders as markdown (headings, bold, italic, inline and fenced code, lists, links, tables, blockquote); nodes render as given */
|
|
2232
|
+
children?: React.ReactNode;
|
|
2233
|
+
/** Set false to show a string verbatim */
|
|
2234
|
+
markdown?: boolean;
|
|
2235
|
+
structured?: ChatStructured;
|
|
2236
|
+
sources?: ChatSource[];
|
|
2237
|
+
/** Collapsible ToolCallCards under the message */
|
|
2238
|
+
tools?: ToolCallCardProps[];
|
|
2239
|
+
/** Shows a cursor (or the busy dots while empty) */
|
|
2240
|
+
streaming?: boolean;
|
|
2241
|
+
/** Called with the value of a structured button or card action */
|
|
2242
|
+
onAction?: (value: string, action: ChatAction) => void;
|
|
2243
|
+
labels?: { sending?: string; sent?: string; delivered?: string; read?: string; failed?: string; sources?: string; tools?: string; tool?: string; agent?: string };
|
|
2244
|
+
}
|
|
2245
|
+
export declare function ChatMessage(props: ChatMessageProps): JSX.Element;
|
|
2246
|
+
/** Markdown renderer used inside ChatMessage. Never renders raw HTML. */
|
|
2247
|
+
export interface ChatMarkdownProps extends React.HTMLAttributes<HTMLDivElement> { source: string; }
|
|
2248
|
+
export declare function ChatMarkdown(props: ChatMarkdownProps): JSX.Element;
|
|
2249
|
+
export declare function parseBlocks(source: string): any[];
|
|
2250
|
+
export declare function renderInline(text: string): React.ReactNode[];
|
|
2251
|
+
export type ChatEventKind = 'handoff-requested' | 'handoff-accepted' | 'closed' | 'call-started' | 'call-ended' | 'approval' | 'info';
|
|
2252
|
+
/** Centred event pill in a thread: handoff requested / accepted, closed, call started / ended, approval. Warn tone for things a person must act on. */
|
|
2253
|
+
export interface ChatEventProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'icon'> {
|
|
2254
|
+
kind?: ChatEventKind;
|
|
2255
|
+
/** Overrides the kind's tone */
|
|
2256
|
+
tone?: 'neutral' | 'info' | 'ok' | 'warn' | 'bad';
|
|
2257
|
+
/** Overrides the kind's Lucide icon */
|
|
2258
|
+
icon?: string;
|
|
2259
|
+
time?: string;
|
|
2260
|
+
/** The text; defaults to the kind's label */
|
|
2261
|
+
children?: React.ReactNode;
|
|
2262
|
+
}
|
|
2263
|
+
export declare function ChatEvent(props: ChatEventProps): JSX.Element;
|
|
2264
|
+
export declare const EVENT_KINDS: Record<ChatEventKind, { icon: string; tone: string; label: string }>;
|
|
2265
|
+
/** Row of suggested prompts as chips; picking one sends it or fills the composer. */
|
|
2266
|
+
export interface ChatSuggestionsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2267
|
+
items: (string | { label: string; value?: string; icon?: string })[];
|
|
2268
|
+
onPick?: (value: string, item: { label: string; value?: string; icon?: string }) => void;
|
|
2269
|
+
/** One scrolling row instead of wrapping */
|
|
2270
|
+
row?: boolean;
|
|
2271
|
+
labels?: { suggestions?: string };
|
|
2272
|
+
}
|
|
2273
|
+
export declare function ChatSuggestions(props: ChatSuggestionsProps): JSX.Element;
|
|
2274
|
+
export interface ChatFile { name: string; size?: number; }
|
|
2275
|
+
/** The chat input: auto-growing textarea (Enter sends, Shift+Enter breaks), attach with limits, dictation and hands-free voice, send or stop while streaming, and a model footnote. */
|
|
2276
|
+
export interface ChatComposerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'disabled' | 'onChange' | 'placeholder' | 'value'> {
|
|
2277
|
+
value?: string;
|
|
2278
|
+
defaultValue?: string;
|
|
2279
|
+
onChange?: (value: string) => void;
|
|
2280
|
+
onSend?: (value: string, files: ChatFile[]) => void;
|
|
2281
|
+
/** Stop button replaces send while streaming */
|
|
2282
|
+
onStop?: () => void;
|
|
2283
|
+
streaming?: boolean;
|
|
2284
|
+
disabled?: boolean;
|
|
2285
|
+
placeholder?: string;
|
|
2286
|
+
/** Show the attach button (default true) */
|
|
2287
|
+
attach?: boolean;
|
|
2288
|
+
/** Default 5 */
|
|
2289
|
+
maxFiles?: number;
|
|
2290
|
+
/** Bytes; default 10 MB */
|
|
2291
|
+
maxFileSize?: number;
|
|
2292
|
+
/** Attached files shown as chips */
|
|
2293
|
+
files?: ChatFile[];
|
|
2294
|
+
onAttach?: (files: File[]) => void;
|
|
2295
|
+
onRemoveFile?: (file: ChatFile, index: number) => void;
|
|
2296
|
+
/** off hides the voice buttons; idle / listening / speaking show their state */
|
|
2297
|
+
voice?: 'off' | 'idle' | 'listening' | 'speaking';
|
|
2298
|
+
onDictate?: () => void;
|
|
2299
|
+
onHandsFree?: () => void;
|
|
2300
|
+
/** Line under the box (mono, mute, centred): text or any node — a caution with a link, a context meter */
|
|
2301
|
+
footnote?: React.ReactNode;
|
|
2302
|
+
/** Nodes in the bar after attach and voice: a model picker, a mode Select, a context chip */
|
|
2303
|
+
toolbar?: React.ReactNode;
|
|
2304
|
+
/** Row inside the box above the files and textarea: a context bar (open file, selected run, @mentions) */
|
|
2305
|
+
header?: React.ReactNode;
|
|
2306
|
+
/** Rows before the textarea scrolls (default 8) */
|
|
2307
|
+
maxRows?: number;
|
|
2308
|
+
labels?: { placeholder?: string; send?: string; stop?: string; attach?: string; attachHint?: string; dictate?: string; handsFree?: string; listening?: string; speaking?: string; remove?: string; tooMany?: string; tooLarge?: string };
|
|
2309
|
+
}
|
|
2310
|
+
export declare function ChatComposer(props: ChatComposerProps): JSX.Element;
|
|
2311
|
+
/** One tool call: name in mono, status tag, duration; opens to the input and output JSON. */
|
|
2312
|
+
export interface ToolCallCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'name' | 'onToggle' | 'open' | 'summary'> {
|
|
2313
|
+
id?: string;
|
|
2314
|
+
name: string;
|
|
2315
|
+
status?: 'running' | 'ok' | 'bad' | 'pending';
|
|
2316
|
+
/** ms (formatted) or a preformatted string */
|
|
2317
|
+
duration?: number | string;
|
|
2318
|
+
/** Object (pretty-printed) or string */
|
|
2319
|
+
input?: any;
|
|
2320
|
+
output?: any;
|
|
2321
|
+
/** One line shown in the header */
|
|
2322
|
+
summary?: React.ReactNode;
|
|
2323
|
+
/** Controlled open state */
|
|
2324
|
+
open?: boolean;
|
|
2325
|
+
defaultOpen?: boolean;
|
|
2326
|
+
onToggle?: (open: boolean) => void;
|
|
2327
|
+
locale?: string;
|
|
2328
|
+
labels?: { input?: string; output?: string; running?: string; ok?: string; bad?: string; pending?: string };
|
|
2329
|
+
}
|
|
2330
|
+
export declare function ToolCallCard(props: ToolCallCardProps): JSX.Element;
|
|
2331
|
+
/** ms → "420 ms", "1,2 s", "2:05" */
|
|
2332
|
+
export declare function formatDuration(ms: number, locale?: string): string;
|
|
2333
|
+
/** Busy dots and a shining "Thinking…" while the agent streams; reduced motion stops both. */
|
|
2334
|
+
export interface StreamingIndicatorProps extends Omit<React.HTMLAttributes<HTMLElement>, 'label'> {
|
|
2335
|
+
label?: React.ReactNode;
|
|
2336
|
+
dots?: boolean;
|
|
2337
|
+
inline?: boolean;
|
|
2338
|
+
labels?: { thinking?: string };
|
|
2339
|
+
}
|
|
2340
|
+
export declare function StreamingIndicator(props: StreamingIndicatorProps): JSX.Element;
|
|
2341
|
+
export interface TranscriptTurn { id?: string | number; n?: number; speaker?: 'agent' | 'customer' | 'system'; name?: string; time?: string; text: React.ReactNode; latencyMs?: number; flagged?: boolean; note?: React.ReactNode; }
|
|
2342
|
+
export interface TranscriptVerdict { tone?: 'ok' | 'bad' | 'warn' | 'neutral'; label: React.ReactNode; score?: React.ReactNode; summary?: React.ReactNode; dimensions?: { name: string; pass: boolean }[]; }
|
|
2343
|
+
/** Read-only transcript of a run or a call: numbered turns with speaker, time, latency and text, and an optional judge verdict strip. Used in Logs and QA. */
|
|
2344
|
+
export interface TranscriptPanelProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect' | 'selected' | 'title'> {
|
|
2345
|
+
title?: React.ReactNode;
|
|
2346
|
+
/** Mono line on the right of the title: run id, duration */
|
|
2347
|
+
meta?: React.ReactNode;
|
|
2348
|
+
turns: TranscriptTurn[];
|
|
2349
|
+
verdict?: TranscriptVerdict;
|
|
2350
|
+
/** Selected turn id (or number) */
|
|
2351
|
+
selected?: string | number;
|
|
2352
|
+
/** Makes turns buttons */
|
|
2353
|
+
onSelect?: (id: string | number, turn: TranscriptTurn) => void;
|
|
2354
|
+
/** Scroll height of the turn list (default 420) */
|
|
2355
|
+
maxHeight?: number | string;
|
|
2356
|
+
locale?: string;
|
|
2357
|
+
labels?: { agent?: string; customer?: string; system?: string; judge?: string; latency?: string; flagged?: string; empty?: string };
|
|
2358
|
+
}
|
|
2359
|
+
export declare function TranscriptPanel(props: TranscriptPanelProps): JSX.Element;
|
|
2360
|
+
|
|
2361
|
+
// --- widgets ---
|
|
2362
|
+
export type RunStatusValue = 'queued' | 'running' | 'paused' | 'completed' | 'failed' | 'cancelled' | 'pending' | 'claimed' | 'resuming' | 'resumed';
|
|
2363
|
+
export declare const RUN_STATUS: Record<RunStatusValue, { tone: string; icon: string; label: string; spin?: boolean }>;
|
|
2364
|
+
/** Status tag for a run — icon + word in the status tone — with an optional detail ("approval") and the time it has been so. Run vocabulary: queued · running · paused · completed · failed · cancelled; resume vocabulary: pending / paused warn, queued neutral, claimed / resuming signal, resumed / completed ok, failed bad. */
|
|
2365
|
+
export interface RunStatusProps extends Omit<React.HTMLAttributes<HTMLElement>, 'size'> {
|
|
2366
|
+
status?: RunStatusValue;
|
|
2367
|
+
/** Extra word after the status: "approval" for a paused run */
|
|
2368
|
+
detail?: React.ReactNode;
|
|
2369
|
+
/** Clock time or relative: "09:41", "4 min" */
|
|
2370
|
+
since?: string;
|
|
2371
|
+
size?: 'sm' | 'md';
|
|
2372
|
+
/** Visible strings: since + one per status */
|
|
2373
|
+
labels?: Partial<Record<RunStatusValue | 'since', string>>;
|
|
2374
|
+
}
|
|
2375
|
+
export declare function RunStatus(props: RunStatusProps): JSX.Element;
|
|
2376
|
+
export interface ApprovalField { key: string; label: string; type?: 'string' | 'number' | 'boolean' | 'json' | 'select'; value?: any; options?: (string | { value: string; label: string })[]; placeholder?: string; help?: React.ReactNode; required?: boolean; min?: number; max?: number; step?: number; }
|
|
2377
|
+
/** The human-in-the-loop card: why the agent stopped (warn), what it proposes, the approver's form (string, number, boolean, JSON, select) and Approve / Reject / Ask; queued, approved and rejected states. Designed for compact and comfortable density. */
|
|
2378
|
+
export interface ApprovalCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange' | 'value'> {
|
|
2379
|
+
/** The agent's name: "Card debt payment" */
|
|
2380
|
+
agent: React.ReactNode;
|
|
2381
|
+
runId?: string;
|
|
2382
|
+
tenant?: string;
|
|
2383
|
+
/** "15.10.2026 09:41" */
|
|
2384
|
+
requestedAt?: string;
|
|
2385
|
+
requester?: string;
|
|
2386
|
+
/** Why the agent stopped, in the warn card */
|
|
2387
|
+
reason?: React.ReactNode;
|
|
2388
|
+
/** What the agent proposes, as label/value rows (mono for ids and amounts) */
|
|
2389
|
+
proposal?: { label: React.ReactNode; value: React.ReactNode; mono?: boolean }[];
|
|
2390
|
+
/** The approver's form */
|
|
2391
|
+
fields?: ApprovalField[];
|
|
2392
|
+
/** Controlled field values by key */
|
|
2393
|
+
values?: Record<string, any>;
|
|
2394
|
+
onChange?: (key: string, value: any, values: Record<string, any>) => void;
|
|
2395
|
+
status?: 'pending' | 'approved' | 'rejected' | 'queued';
|
|
2396
|
+
/** Items ahead when queued: "Queued (2 ahead)" */
|
|
2397
|
+
queuePosition?: number;
|
|
2398
|
+
decidedBy?: string;
|
|
2399
|
+
decidedAt?: string;
|
|
2400
|
+
/** Each receives the current values */
|
|
2401
|
+
onApprove?: (values: Record<string, any>) => void;
|
|
2402
|
+
onReject?: (values: Record<string, any>) => void;
|
|
2403
|
+
/** Shows the Ask button */
|
|
2404
|
+
onAsk?: (values: Record<string, any>) => void;
|
|
2405
|
+
/** approval (default); permission: a tool-permission prompt — Allow once (onApprove) · Always allow (onAlways) · Deny (onReject) — with no run-status chip */
|
|
2406
|
+
variant?: 'approval' | 'permission';
|
|
2407
|
+
/** Permission variant: "Always allow" */
|
|
2408
|
+
onAlways?: (values: Record<string, any>) => void;
|
|
2409
|
+
/** Replaces the default buttons while pending; each onClick receives the current values */
|
|
2410
|
+
actions?: { id?: string; label: React.ReactNode; icon?: string; variant?: 'primary' | 'neutral' | 'success' | 'destructive' | 'destructive-text' | 'ghost' | 'outline'; disabled?: boolean; loading?: boolean; onClick?: (values: Record<string, any>) => void }[];
|
|
2411
|
+
loading?: boolean;
|
|
2412
|
+
compact?: boolean;
|
|
2413
|
+
labels?: { allowOnce?: string; always?: string; deny?: string; eyebrow?: string; reason?: string; proposes?: string; decision?: string; approve?: string; reject?: string; ask?: string; queued?: string; ahead?: string; by?: string; pending?: string; approved?: string; rejected?: string };
|
|
2414
|
+
}
|
|
2415
|
+
export declare function ApprovalCard(props: ApprovalCardProps): JSX.Element;
|
|
2416
|
+
export interface RunStep { id?: string | number; name: React.ReactNode; /** Block type in mono: "HTTP request" */ kind?: string; /** ms from the run start */ start?: number; /** ms */ duration?: number; status?: RunStatusValue; tokens?: number; /** In the card's currency */ cost?: number; }
|
|
2417
|
+
/** The run replay: steps on a time scale with duration bars, status per step, tokens and cost; click a row to select it. */
|
|
2418
|
+
export interface RunTimelineProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect' | 'selected' | 'step'> {
|
|
2419
|
+
steps: RunStep[];
|
|
2420
|
+
/** Scale length in ms; defaults to the last step's end. Tick labels thin to the scale column's measured width (1–4 intervals) */
|
|
2421
|
+
total?: number;
|
|
2422
|
+
selected?: string | number;
|
|
2423
|
+
/** Makes rows buttons */
|
|
2424
|
+
onSelect?: (id: string | number, step: RunStep) => void;
|
|
2425
|
+
showCost?: boolean;
|
|
2426
|
+
showTokens?: boolean;
|
|
2427
|
+
locale?: string;
|
|
2428
|
+
currency?: string;
|
|
2429
|
+
labels?: { step?: string; time?: string; tokens?: string; cost?: string; total?: string };
|
|
2430
|
+
}
|
|
2431
|
+
export declare function RunTimeline(props: RunTimelineProps): JSX.Element;
|
|
2432
|
+
export interface TraceSpan { id?: string | number; name: string; /** Service or tool in a small tag */ service?: string; kind?: 'llm' | 'tool' | 'http' | 'workflow' | 'db' | 'other'; /** ms from the trace start */ start?: number; duration?: number; status?: 'ok' | 'bad'; children?: TraceSpan[]; }
|
|
2433
|
+
/** Trace viewer: nested spans as bars on one time scale (name, service or tool, duration, status), indented per depth; parents collapse. */
|
|
2434
|
+
export interface TraceSpansProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect' | 'selected' | 'span'> {
|
|
2435
|
+
spans: TraceSpan[];
|
|
2436
|
+
total?: number;
|
|
2437
|
+
selected?: string | number;
|
|
2438
|
+
onSelect?: (id: string | number, span: TraceSpan) => void;
|
|
2439
|
+
locale?: string;
|
|
2440
|
+
labels?: { spans?: string; collapse?: string; expand?: string; error?: string };
|
|
2441
|
+
}
|
|
2442
|
+
export declare function TraceSpans(props: TraceSpansProps): JSX.Element;
|
|
2443
|
+
export declare const SPAN_KINDS: string[];
|
|
2444
|
+
/** One run as a card: agent, trigger, status with since, started, duration, steps done of total, cost and tokens; stop, retry and open. */
|
|
2445
|
+
export interface AgentRunCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'selected'> {
|
|
2446
|
+
agent: React.ReactNode;
|
|
2447
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
2448
|
+
runId?: string;
|
|
2449
|
+
tenant?: string;
|
|
2450
|
+
trigger?: 'manual' | 'webhook' | 'schedule' | 'call' | 'chat' | 'api';
|
|
2451
|
+
status?: RunStatusValue;
|
|
2452
|
+
/** Passed to RunStatus */
|
|
2453
|
+
since?: string;
|
|
2454
|
+
/** "15.10.2026 09:41" */
|
|
2455
|
+
started?: string;
|
|
2456
|
+
/** ms or preformatted */
|
|
2457
|
+
duration?: number | string;
|
|
2458
|
+
steps?: { done: number; total: number };
|
|
2459
|
+
cost?: number;
|
|
2460
|
+
tokens?: number;
|
|
2461
|
+
selected?: boolean;
|
|
2462
|
+
/** Shown while queued, running or paused */
|
|
2463
|
+
onStop?: () => void;
|
|
2464
|
+
/** Shown when failed or cancelled */
|
|
2465
|
+
onRetry?: () => void;
|
|
2466
|
+
onOpen?: () => void;
|
|
2467
|
+
locale?: string;
|
|
2468
|
+
currency?: string;
|
|
2469
|
+
labels?: { stop?: string; retry?: string; open?: string; duration?: string; steps?: string; cost?: string; tokens?: string; started?: string; manual?: string; webhook?: string; schedule?: string; call?: string; chat?: string; api?: string };
|
|
2470
|
+
}
|
|
2471
|
+
export declare function AgentRunCard(props: AgentRunCardProps): JSX.Element;
|
|
2472
|
+
/** Cost by scenario, unit or channel as horizontal bars with values; series colours --data-1…6 by index, or one signal colour. */
|
|
2473
|
+
export interface CostBarsProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'max'> {
|
|
2474
|
+
items: { id?: string; label: React.ReactNode; /** Mono line under the label */ sub?: React.ReactNode; value: number; tokens?: number; tone?: 'ok' | 'warn' | 'bad' }[];
|
|
2475
|
+
/** currency (₺ in every locale: narrowSymbol, as Amount) · tokens · percent · number */
|
|
2476
|
+
unit?: 'currency' | 'tokens' | 'percent' | 'number';
|
|
2477
|
+
currency?: string;
|
|
2478
|
+
locale?: string;
|
|
2479
|
+
/** Scale maximum; defaults to the largest value */
|
|
2480
|
+
max?: number;
|
|
2481
|
+
showValues?: boolean;
|
|
2482
|
+
/** Token count under the value */
|
|
2483
|
+
showTokens?: boolean;
|
|
2484
|
+
/** index = --data-1…6 per row · single = --signal */
|
|
2485
|
+
colorBy?: 'index' | 'single';
|
|
2486
|
+
sort?: 'desc';
|
|
2487
|
+
labels?: { costs?: string; tokens?: string };
|
|
2488
|
+
}
|
|
2489
|
+
export declare function CostBars(props: CostBarsProps): JSX.Element;
|
|
2490
|
+
/** The builder block card on the canvas: 250px, icon tile, name (two lines, then clipped) and kind, key/value rows, a state ring (selected / running / done / waiting / error / disabled), a warn "next step" tab, a hover action bar and ports on any side. */
|
|
2491
|
+
export interface CanvasBlockProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'name' | 'onSelect'> {
|
|
2492
|
+
name: React.ReactNode;
|
|
2493
|
+
/** Block type in mono: "LLM · understand" */
|
|
2494
|
+
kind?: React.ReactNode;
|
|
2495
|
+
/** Lucide name (default box) */
|
|
2496
|
+
icon?: string;
|
|
2497
|
+
/** Product glyph instead of a Lucide icon */
|
|
2498
|
+
product?: 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
2499
|
+
rows?: { label: React.ReactNode; value: React.ReactNode; /** default true */ mono?: boolean }[];
|
|
2500
|
+
/** done: ok border and circle-check; waiting: dashed border and circle-dashed (not reached yet); disabled: eye-off, dimmed */
|
|
2501
|
+
state?: 'default' | 'selected' | 'running' | 'done' | 'waiting' | 'error' | 'disabled';
|
|
2502
|
+
/** Text of the warn "next step" tab: "connect the output" */
|
|
2503
|
+
next?: React.ReactNode;
|
|
2504
|
+
/** Hover action bar (icon buttons) */
|
|
2505
|
+
actions?: { icon: string; label: string; onClick?: (e: React.MouseEvent) => void; variant?: 'ghost' | 'destructive-text' }[];
|
|
2506
|
+
/** true for the default side (in: left, out: right), a side name for vertical flows, false for none */
|
|
2507
|
+
ports?: { in?: boolean | PortSide; out?: boolean | PortSide };
|
|
2508
|
+
/** Makes the card a button */
|
|
2509
|
+
onSelect?: (e: React.MouseEvent) => void;
|
|
2510
|
+
labels?: { running?: string; error?: string; done?: string; waiting?: string; disabled?: string; next?: string };
|
|
2511
|
+
}
|
|
2512
|
+
export declare function CanvasBlock(props: CanvasBlockProps): JSX.Element;
|
|
2513
|
+
export type PortSide = 'top' | 'right' | 'bottom' | 'left';
|
|
2514
|
+
/** SVG helper for a connector between two blocks; render inside the consumer's <svg> or a Canvas's `edges`. Smooth-step path with rounded corners; the arrow follows the last segment. */
|
|
2515
|
+
export interface CanvasEdgeProps extends Omit<React.SVGAttributes<SVGGElement>, 'from' | 'label' | 'to'> {
|
|
2516
|
+
from: { x: number; y: number };
|
|
2517
|
+
to: { x: number; y: number };
|
|
2518
|
+
/** Side the edge leaves the source port (default right) */
|
|
2519
|
+
fromSide?: PortSide;
|
|
2520
|
+
/** Side the edge enters the target port (default left); orients the arrow */
|
|
2521
|
+
toSide?: PortSide;
|
|
2522
|
+
state?: 'default' | 'active' | 'running' | 'deleted';
|
|
2523
|
+
/** Corner radius (default 8) */
|
|
2524
|
+
radius?: number;
|
|
2525
|
+
/** Mono label at the midpoint */
|
|
2526
|
+
label?: string;
|
|
2527
|
+
arrow?: boolean;
|
|
2528
|
+
}
|
|
2529
|
+
export declare function CanvasEdge(props: CanvasEdgeProps): JSX.Element;
|
|
2530
|
+
export declare function smoothStepPath(x1: number, y1: number, x2: number, y2: number, r?: number, fromSide?: PortSide, toSide?: PortSide): string;
|
|
2531
|
+
/** The builder canvas: dotted grid on --canvas-bg, one transformed layer with absolutely positioned blocks and an SVG of edges; drag or wheel to pan, Ctrl/⌘-wheel or the controls to zoom, keyboard + − 0 and arrows. */
|
|
2532
|
+
export interface CanvasProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2533
|
+
/** Blocks and notes, positioned with style left/top in canvas units */
|
|
2534
|
+
children?: React.ReactNode;
|
|
2535
|
+
/** CanvasEdge elements, drawn under the blocks in the same coordinates */
|
|
2536
|
+
edges?: React.ReactNode;
|
|
2537
|
+
/** Controlled zoom (1 = 100%) */
|
|
2538
|
+
zoom?: number;
|
|
2539
|
+
defaultZoom?: number;
|
|
2540
|
+
onZoomChange?: (zoom: number) => void;
|
|
2541
|
+
/** Controlled pan offset in px */
|
|
2542
|
+
pan?: { x: number; y: number };
|
|
2543
|
+
defaultPan?: { x: number; y: number };
|
|
2544
|
+
onPanChange?: (pan: { x: number; y: number }) => void;
|
|
2545
|
+
/** Default .25 */
|
|
2546
|
+
minZoom?: number;
|
|
2547
|
+
/** Default 2 */
|
|
2548
|
+
maxZoom?: number;
|
|
2549
|
+
/** Dotted 20px grid that scales and pans with the layer (default true) */
|
|
2550
|
+
grid?: boolean;
|
|
2551
|
+
/** Zoom out · percentage (resets) · zoom in, bottom-left (default true) */
|
|
2552
|
+
controls?: boolean;
|
|
2553
|
+
/** false: a static picture (no pan, zoom or focus) */
|
|
2554
|
+
interactive?: boolean;
|
|
2555
|
+
/** Unscaled nodes over the canvas: a minimap, a toolbar */
|
|
2556
|
+
overlay?: React.ReactNode;
|
|
2557
|
+
labels?: { canvas?: string; zoomIn?: string; zoomOut?: string; reset?: string };
|
|
2558
|
+
}
|
|
2559
|
+
export declare function Canvas(props: CanvasProps): JSX.Element;
|
|
2560
|
+
/** Sticky note on the canvas: title, free text, author and time. For the builder's remarks, not for configuration. */
|
|
2561
|
+
export interface CanvasNoteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'width'> {
|
|
2562
|
+
title?: React.ReactNode;
|
|
2563
|
+
children?: React.ReactNode;
|
|
2564
|
+
author?: string;
|
|
2565
|
+
time?: string;
|
|
2566
|
+
tone?: 'warn' | 'neutral' | 'info';
|
|
2567
|
+
width?: number | string;
|
|
2568
|
+
onEdit?: () => void;
|
|
2569
|
+
onDelete?: () => void;
|
|
2570
|
+
labels?: { edit?: string; delete?: string };
|
|
2571
|
+
}
|
|
2572
|
+
export declare function CanvasNote(props: CanvasNoteProps): JSX.Element;
|
|
2573
|
+
/** Contact desk queue item: channel, customer, last message, waiting time, SLA tag and the owner (bot, a person, or the queue). */
|
|
2574
|
+
export interface QueueCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'selected'> {
|
|
2575
|
+
channel?: 'whatsapp' | 'voice' | 'web' | 'email';
|
|
2576
|
+
customer: React.ReactNode;
|
|
2577
|
+
phone?: string;
|
|
2578
|
+
/** Last message, one line */
|
|
2579
|
+
preview?: React.ReactNode;
|
|
2580
|
+
/** "4 min", "12 sn" */
|
|
2581
|
+
waiting?: string;
|
|
2582
|
+
sla?: { tone?: 'ok' | 'warn' | 'bad' | 'neutral'; label: React.ReactNode };
|
|
2583
|
+
owner?: { kind: 'bot' | 'agent' | 'queue'; name?: string };
|
|
2584
|
+
/** Unread count */
|
|
2585
|
+
unread?: number;
|
|
2586
|
+
selected?: boolean;
|
|
2587
|
+
/** Makes the row a button */
|
|
2588
|
+
onClick?: () => void;
|
|
2589
|
+
tenant?: string;
|
|
2590
|
+
labels?: { waiting?: string; unread?: string; whatsapp?: string; voice?: string; web?: string; email?: string; bot?: string; agent?: string; queue?: string };
|
|
2591
|
+
}
|
|
2592
|
+
export declare function QueueCard(props: QueueCardProps): JSX.Element;
|
|
2593
|
+
/** A voice call: number and name, direction, live duration, state (ringing / in call / on hold / ended), waveform placeholder and answer / hold / transfer / hang up. */
|
|
2594
|
+
export interface CallCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'name'> {
|
|
2595
|
+
number: string;
|
|
2596
|
+
name?: React.ReactNode;
|
|
2597
|
+
direction?: 'inbound' | 'outbound';
|
|
2598
|
+
state?: 'ringing' | 'in-call' | 'on-hold' | 'ended';
|
|
2599
|
+
/** Elapsed seconds at render */
|
|
2600
|
+
seconds?: number;
|
|
2601
|
+
/** Tick the timer every second while in call */
|
|
2602
|
+
live?: boolean;
|
|
2603
|
+
/** The person on the call */
|
|
2604
|
+
agent?: string;
|
|
2605
|
+
tenant?: string;
|
|
2606
|
+
onAnswer?: () => void;
|
|
2607
|
+
onDecline?: () => void;
|
|
2608
|
+
onHold?: () => void;
|
|
2609
|
+
onResume?: () => void;
|
|
2610
|
+
onTransfer?: () => void;
|
|
2611
|
+
onHangup?: () => void;
|
|
2612
|
+
onCallBack?: () => void;
|
|
2613
|
+
labels?: { answer?: string; decline?: string; hold?: string; resume?: string; transfer?: string; hangup?: string; callBack?: string; inbound?: string; outbound?: string; ringing?: string; 'in-call'?: string; 'on-hold'?: string; ended?: string };
|
|
2614
|
+
}
|
|
2615
|
+
export declare function CallCard(props: CallCardProps): JSX.Element;
|
|
2616
|
+
/** ₺1.250.000,00 in the locale */
|
|
2617
|
+
export declare function fmtMoney(value: number, locale?: string, currency?: string, digits?: number): string;
|
|
2618
|
+
export declare function fmtInt(value: number, locale?: string): string;
|
|
2619
|
+
/** seconds → "4:05" or "1:02:09" */
|
|
2620
|
+
export declare function fmtClock(seconds: number): string;
|
|
2621
|
+
|
|
2622
|
+
// --- dashboard ---
|
|
2623
|
+
type DashboardProduct = 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
|
|
2624
|
+
type DashboardTone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
|
|
2625
|
+
|
|
2626
|
+
/** Dashboard KPI: a Stat (value, label, delta) with a Sparkline in a flat Card. Use plain (or KpiRow) when the KPIs are the page summary, which is never boxed. */
|
|
2627
|
+
export interface KpiWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'label' | 'size' | 'value'> {
|
|
2628
|
+
/** Mono uppercase label: "Runs this week" */
|
|
2629
|
+
label: React.ReactNode;
|
|
2630
|
+
/** Pre-formatted value in the locale: "12.840", "₺18.420,50" */
|
|
2631
|
+
value: React.ReactNode;
|
|
2632
|
+
/** Passed to Stat: a number (+12 → "+12%", dot decimals), a string, or { value, direction, unit, label } */
|
|
2633
|
+
delta?: number | string | { value: number | string; direction?: 'up' | 'down' | 'flat'; unit?: string; label?: React.ReactNode };
|
|
2634
|
+
/** Down is good (cost, latency, waiting approvals) */
|
|
2635
|
+
invert?: boolean;
|
|
2636
|
+
/** Mute line under the value */
|
|
2637
|
+
sub?: React.ReactNode;
|
|
2638
|
+
/** Lucide icon before the label */
|
|
2639
|
+
icon?: string;
|
|
2640
|
+
/** Sparkline values (two or more) */
|
|
2641
|
+
spark?: number[];
|
|
2642
|
+
/** Status colour for the sparkline instead of a data colour */
|
|
2643
|
+
sparkTone?: 'ok' | 'warn' | 'bad';
|
|
2644
|
+
/** Data colour index 1–6 for the sparkline (1) */
|
|
2645
|
+
sparkColor?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
2646
|
+
/** Items of the options Menu (top-right ellipsis) */
|
|
2647
|
+
menuItems?: any[];
|
|
2648
|
+
onMenuSelect?: (item: any) => void;
|
|
2649
|
+
/** No card: a cell of the page summary row */
|
|
2650
|
+
plain?: boolean;
|
|
2651
|
+
/** Stat size: sm 20 · md 32 · lg 44 */
|
|
2652
|
+
size?: 'sm' | 'md' | 'lg';
|
|
2653
|
+
/** Visible and accessible strings: options, trend */
|
|
2654
|
+
labels?: { options?: string; trend?: string };
|
|
2655
|
+
}
|
|
2656
|
+
export declare function KpiWidget(props: KpiWidgetProps): JSX.Element;
|
|
2657
|
+
/** The page summary row: plain KpiWidgets side by side with hairlines between them. */
|
|
2658
|
+
export interface KpiRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label'> {
|
|
2659
|
+
items?: KpiWidgetProps[];
|
|
2660
|
+
/** Accessible name of the group ("This week") */
|
|
2661
|
+
label?: string;
|
|
2662
|
+
/** Custom cells instead of items */
|
|
2663
|
+
children?: React.ReactNode;
|
|
2664
|
+
}
|
|
2665
|
+
export declare function KpiRow(props: KpiRowProps): JSX.Element;
|
|
2666
|
+
|
|
2667
|
+
/** A chart in a Card: title with its unit, a period SegmentedControl, an optional headline Stat, a MiniChart (line, area, bar or stacked bars) that measures its own width, with a legend, and the loading and empty states. */
|
|
2668
|
+
export interface ChartCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'data' | 'format' | 'height' | 'icon' | 'title' | 'type'> {
|
|
2669
|
+
title: React.ReactNode;
|
|
2670
|
+
/** Lucide icon before the title */
|
|
2671
|
+
icon?: string;
|
|
2672
|
+
/** Mono unit after the title: "₺", "runs", "ms", "%" */
|
|
2673
|
+
unit?: string;
|
|
2674
|
+
/** Period options; renders the SegmentedControl in the header */
|
|
2675
|
+
periods?: (string | { label: string; value: string })[];
|
|
2676
|
+
/** Controlled period */
|
|
2677
|
+
period?: string;
|
|
2678
|
+
/** Initial period when uncontrolled (default the first) */
|
|
2679
|
+
defaultPeriod?: string;
|
|
2680
|
+
onPeriodChange?: (value: string) => void;
|
|
2681
|
+
/** stacked = MiniChart type="bar" with stacked: series bottom-up in data-1…6 order, 1px gap between segments, y from zero */
|
|
2682
|
+
type?: 'line' | 'area' | 'bar' | 'stacked';
|
|
2683
|
+
/** Up to six series, coloured data-1…6 in order */
|
|
2684
|
+
series?: { name: string; values: number[] }[];
|
|
2685
|
+
/** A single series (named after the title) */
|
|
2686
|
+
data?: number[];
|
|
2687
|
+
/** X-axis labels: "09.10", "Mon" */
|
|
2688
|
+
categories?: string[];
|
|
2689
|
+
/** Plot height in px (160) */
|
|
2690
|
+
height?: number;
|
|
2691
|
+
/** Formats values for the legend and the accessible description */
|
|
2692
|
+
format?: (v: number) => string;
|
|
2693
|
+
/** Legend with the last value per series (default true) */
|
|
2694
|
+
legend?: boolean;
|
|
2695
|
+
/** Stat props shown above the plot */
|
|
2696
|
+
headline?: { label: React.ReactNode; value: React.ReactNode; delta?: any; invert?: boolean; sub?: React.ReactNode };
|
|
2697
|
+
/** loading shows a skeleton; empty (or no values) the empty state */
|
|
2698
|
+
state?: 'loading' | 'empty' | 'ready';
|
|
2699
|
+
/** Mute line under the plot: source, price date */
|
|
2700
|
+
footnote?: React.ReactNode;
|
|
2701
|
+
/** Extra header controls after the periods */
|
|
2702
|
+
actions?: React.ReactNode;
|
|
2703
|
+
/** Card "View all" footer */
|
|
2704
|
+
viewAll?: (() => void) | string;
|
|
2705
|
+
/** Visible strings: period (accessible name), loading, empty, emptyHint */
|
|
2706
|
+
labels?: { period?: string; loading?: string; empty?: string; emptyHint?: string };
|
|
2707
|
+
}
|
|
2708
|
+
export declare function ChartCard(props: ChartCardProps): JSX.Element;
|
|
2709
|
+
|
|
2710
|
+
/** One task row. */
|
|
2711
|
+
export interface TaskItem { id: string | number; title: React.ReactNode; done?: boolean; /** Pre-formatted: "15.10.2026" */ due?: string; /** Past due; adds the word "Overdue" in bad */ overdue?: boolean; priority?: 'high' | 'medium' | 'low'; /** Owner's name (initials avatar) */ owner?: string; ownerKind?: 'person' | 'agent' | 'system'; /** Mono line: run or approval ids, the KB */ related?: React.ReactNode; }
|
|
2712
|
+
/** A checklist of tasks in a Card: Checkbox to complete, due date (overdue carries the word), owner Avatar, priority Tag, and an Add task action. */
|
|
2713
|
+
export interface TaskListWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onToggle' | 'title'> {
|
|
2714
|
+
tasks: TaskItem[];
|
|
2715
|
+
/** Called after the internal toggle */
|
|
2716
|
+
onToggle?: (task: TaskItem, done: boolean) => void;
|
|
2717
|
+
/** Makes titles buttons */
|
|
2718
|
+
onOpen?: (task: TaskItem) => void;
|
|
2719
|
+
/** Shows "Add task" in the header */
|
|
2720
|
+
onAdd?: () => void;
|
|
2721
|
+
title?: React.ReactNode;
|
|
2722
|
+
/** Hide completed tasks */
|
|
2723
|
+
hideDone?: boolean;
|
|
2724
|
+
viewAll?: (() => void) | string;
|
|
2725
|
+
labels?: { title?: string; add?: string; empty?: string; emptyHint?: string; overdue?: string; due?: string; high?: string; medium?: string; low?: string; viewAll?: string };
|
|
2726
|
+
}
|
|
2727
|
+
export declare function TaskListWidget(props: TaskListWidgetProps): JSX.Element;
|
|
2728
|
+
|
|
2729
|
+
/** One claim the insight rests on. */
|
|
2730
|
+
export interface InsightEvidence { id?: string; text: React.ReactNode; /** Where it comes from: a run, a QA run, a KB article */ source?: string | { label: string; icon?: string; href?: string }; }
|
|
2731
|
+
/** An AI-generated recommendation in a Card: the sparkles "AI-generated" header with confidence and model, the insight, its evidence with sources, Apply / Dismiss and thumbs feedback. */
|
|
2732
|
+
export interface AiInsightWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
2733
|
+
/** The recommendation as a sentence */
|
|
2734
|
+
title?: React.ReactNode;
|
|
2735
|
+
/** The why, one or two sentences */
|
|
2736
|
+
children?: React.ReactNode;
|
|
2737
|
+
evidence?: InsightEvidence[];
|
|
2738
|
+
/** 0–1, shown as "82% confidence" */
|
|
2739
|
+
confidence?: number;
|
|
2740
|
+
/** Model name: "Opus 5" */
|
|
2741
|
+
model?: string;
|
|
2742
|
+
/** "09:41", "15.10.2026" */
|
|
2743
|
+
time?: string;
|
|
2744
|
+
/** Controlled state; uncontrolled it follows Apply and Dismiss */
|
|
2745
|
+
status?: 'open' | 'applied' | 'dismissed';
|
|
2746
|
+
onApply?: () => void;
|
|
2747
|
+
onDismiss?: () => void;
|
|
2748
|
+
/** Overrides labels.apply: "Raise to 6 s" */
|
|
2749
|
+
applyLabel?: string;
|
|
2750
|
+
/** Controlled vote */
|
|
2751
|
+
feedback?: 'up' | 'down' | null;
|
|
2752
|
+
/** Called with the new vote, null when withdrawn */
|
|
2753
|
+
onFeedback?: (vote: 'up' | 'down' | null) => void;
|
|
2754
|
+
labels?: { generated?: string; evidence?: string; apply?: string; dismiss?: string; helpful?: string; yes?: string; no?: string; thanks?: string; applied?: string; dismissed?: string; confidence?: string };
|
|
2755
|
+
}
|
|
2756
|
+
export declare function AiInsightWidget(props: AiInsightWidgetProps): JSX.Element;
|
|
2757
|
+
|
|
2758
|
+
/** An active filter shown as a Pill. */
|
|
2759
|
+
export interface ActiveFilter { key: string; label: React.ReactNode; icon?: string; }
|
|
2760
|
+
/** The filter row above a list or board: search Input, quick filter Chips, a "More filters" Menu, a saved views Combobox, and the active filters as removable Pills with Clear all. Every value is controlled or uncontrolled. */
|
|
2761
|
+
export interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2762
|
+
search?: string;
|
|
2763
|
+
defaultSearch?: string;
|
|
2764
|
+
onSearch?: (value: string) => void;
|
|
2765
|
+
/** Quick filters (ChipGroup, multiple) */
|
|
2766
|
+
chips?: (string | { label: React.ReactNode; value: string; icon?: string; count?: number | string })[];
|
|
2767
|
+
chipValue?: string[];
|
|
2768
|
+
defaultChipValue?: string[];
|
|
2769
|
+
onChipChange?: (values: string[]) => void;
|
|
2770
|
+
/** Menu items; picking one adds a Pill { key: value, label } */
|
|
2771
|
+
moreFilters?: any[];
|
|
2772
|
+
onMoreFilter?: (item: any) => void;
|
|
2773
|
+
/** Controlled open state of the More filters menu (previews) */
|
|
2774
|
+
moreOpen?: boolean;
|
|
2775
|
+
onMoreOpenChange?: (open: boolean) => void;
|
|
2776
|
+
/** Saved views (Combobox options) */
|
|
2777
|
+
views?: (string | { label: string; value: string; meta?: string })[];
|
|
2778
|
+
view?: string | null;
|
|
2779
|
+
defaultView?: string | null;
|
|
2780
|
+
onViewChange?: (value: string | null) => void;
|
|
2781
|
+
/** Filters shown as Pills */
|
|
2782
|
+
active?: ActiveFilter[];
|
|
2783
|
+
defaultActive?: ActiveFilter[];
|
|
2784
|
+
onActiveChange?: (filters: ActiveFilter[]) => void;
|
|
2785
|
+
/** After Clear all has emptied search, chips and pills */
|
|
2786
|
+
onClear?: () => void;
|
|
2787
|
+
/** Controls at the right end of the row */
|
|
2788
|
+
right?: React.ReactNode;
|
|
2789
|
+
labels?: { search?: string; searchLabel?: string; filters?: string; more?: string; views?: string; active?: string; clear?: string; remove?: string };
|
|
2790
|
+
}
|
|
2791
|
+
export declare function FilterBar(props: FilterBarProps): JSX.Element;
|
|
2792
|
+
|
|
2793
|
+
/** A record at a glance in a Card: avatar or BlockIcon, object eyebrow, title, status Tag, SummaryDetail key fields, the Path stage and quick actions. */
|
|
2794
|
+
export interface RecordSummaryWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'title'> {
|
|
2795
|
+
/** Mono eyebrow: "Agent · Voice", "Case · WhatsApp" */
|
|
2796
|
+
object?: React.ReactNode;
|
|
2797
|
+
title: React.ReactNode;
|
|
2798
|
+
subtitle?: React.ReactNode;
|
|
2799
|
+
/** Custom media node */
|
|
2800
|
+
media?: React.ReactNode;
|
|
2801
|
+
/** A person's name: renders a 40px Avatar */
|
|
2802
|
+
avatar?: string;
|
|
2803
|
+
/** Lucide icon for the BlockIcon (bot) */
|
|
2804
|
+
icon?: string;
|
|
2805
|
+
/** DashboardProduct glyph for the BlockIcon */
|
|
2806
|
+
product?: DashboardProduct;
|
|
2807
|
+
/** A word or { label, tone, dot, icon } */
|
|
2808
|
+
status?: string | { label: React.ReactNode; tone?: DashboardTone; dot?: boolean; icon?: string };
|
|
2809
|
+
/** SummaryDetail fields (dense) */
|
|
2810
|
+
fields?: { key?: string; label: React.ReactNode; value?: React.ReactNode; mono?: boolean; tone?: 'ok' | 'warn' | 'bad' }[];
|
|
2811
|
+
/** Path steps; omit for records without stages */
|
|
2812
|
+
stages?: Array<string | { id: string; label: string }>;
|
|
2813
|
+
/** Id of the current stage */
|
|
2814
|
+
stage?: string;
|
|
2815
|
+
/** Current stage is a terminal failure */
|
|
2816
|
+
lost?: boolean;
|
|
2817
|
+
/** Thin segment bar instead of chevrons (narrow columns) */
|
|
2818
|
+
pathCompact?: boolean;
|
|
2819
|
+
/** Small buttons: the first neutral, the rest ghost unless variant is given */
|
|
2820
|
+
actions?: { label: string; icon?: string; variant?: string; onClick?: () => void; disabled?: boolean }[];
|
|
2821
|
+
/** Shows the open button */
|
|
2822
|
+
onOpen?: () => void;
|
|
2823
|
+
/** Visible strings: open, stage, and path (Path labels) */
|
|
2824
|
+
labels?: { open?: string; stage?: string; path?: { done?: string; current?: string; upcoming?: string; lost?: string } };
|
|
2825
|
+
}
|
|
2826
|
+
export declare function RecordSummaryWidget(props: RecordSummaryWidgetProps): JSX.Element;
|
|
2827
|
+
|
|
2828
|
+
/** One person (or agent) and their load. */
|
|
2829
|
+
export interface WorkloadMember { id?: string; name: string; role?: string; kind?: 'person' | 'agent' | 'system'; status?: 'online' | 'busy' | 'away' | 'offline'; value: number; capacity: number; }
|
|
2830
|
+
/** People against their capacity in a Card: a ProgressBar per row, over capacity in warn with the word, and the count of who is over in the header. */
|
|
2831
|
+
export interface TeamWorkloadWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
2832
|
+
members: WorkloadMember[];
|
|
2833
|
+
title?: React.ReactNode;
|
|
2834
|
+
/** Unit after "7 / 8": "chats", "tasks" (labels.unit) */
|
|
2835
|
+
unit?: string;
|
|
2836
|
+
/** Ratio above which a row is over capacity (1) */
|
|
2837
|
+
overAt?: number;
|
|
2838
|
+
/** Makes names buttons */
|
|
2839
|
+
onMember?: (m: WorkloadMember) => void;
|
|
2840
|
+
viewAll?: (() => void) | string;
|
|
2841
|
+
labels?: { title?: string; over?: string; overCount?: string; unit?: string; load?: string; viewAll?: string };
|
|
2842
|
+
}
|
|
2843
|
+
export declare function TeamWorkloadWidget(props: TeamWorkloadWidgetProps): JSX.Element;
|
|
2844
|
+
|
|
2845
|
+
/** An ActivityTimeline in a Card with a type filter (all, runs, approvals, conversations, notes). */
|
|
2846
|
+
export interface ActivityWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'max' | 'title' | 'type'> {
|
|
2847
|
+
/** ActivityTimeline items; kind decides which filter they fall under */
|
|
2848
|
+
items: any[];
|
|
2849
|
+
/** Custom filter options; kinds lists the item kinds each one shows (none = all) */
|
|
2850
|
+
types?: { label: string; value: string; kinds?: string[] }[];
|
|
2851
|
+
type?: string;
|
|
2852
|
+
defaultType?: string;
|
|
2853
|
+
onTypeChange?: (value: string) => void;
|
|
2854
|
+
title?: React.ReactNode;
|
|
2855
|
+
/** Items shown after filtering */
|
|
2856
|
+
max?: number;
|
|
2857
|
+
/** Compact timeline (default true) */
|
|
2858
|
+
compact?: boolean;
|
|
2859
|
+
viewAll?: (() => void) | string;
|
|
2860
|
+
labels?: { title?: string; filter?: string; all?: string; runs?: string; approvals?: string; conversations?: string; notes?: string; empty?: string; emptyHint?: string; viewAll?: string; show?: string; hide?: string };
|
|
2861
|
+
}
|
|
2862
|
+
export declare function ActivityWidget(props: ActivityWidgetProps): JSX.Element;
|
|
2863
|
+
|
|
2864
|
+
/** One action tile. */
|
|
2865
|
+
export interface QuickAction { id?: string; label: string; icon?: string; product?: DashboardProduct; description?: string; /** Kbd hint: ["⌘", "N"] or "G L" (the consumer binds the keys) */ shortcut?: string | string[]; tone?: DashboardTone; badge?: number; disabled?: boolean; onClick?: (a: QuickAction) => void; }
|
|
2866
|
+
/** A grid of action tiles (BlockIcon, label, optional line, Kbd hint, badge) for the shortcuts people take most; inside a Card when titled. */
|
|
2867
|
+
export interface QuickActionsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
2868
|
+
actions: QuickAction[];
|
|
2869
|
+
onAction?: (a: QuickAction) => void;
|
|
2870
|
+
/** Fixed columns instead of auto-fill */
|
|
2871
|
+
columns?: number;
|
|
2872
|
+
/** Minimum tile width for auto-fill (168) */
|
|
2873
|
+
minTile?: number;
|
|
2874
|
+
/** Wraps the grid in a Card with this title */
|
|
2875
|
+
title?: React.ReactNode;
|
|
2876
|
+
/** Accessible name when untitled */
|
|
2877
|
+
labels?: { title?: string };
|
|
2878
|
+
}
|
|
2879
|
+
export declare function QuickActions(props: QuickActionsProps): JSX.Element;
|
|
2880
|
+
|
|
2881
|
+
/** The NotificationList in a flat Card: grouped by day, unread count, Mark all as read and View all. Read state is tracked inside. */
|
|
2882
|
+
export interface NotificationsWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'max' | 'title'> {
|
|
2883
|
+
/** NotificationList items (title, message, time, unread, avatar or icon, object, day or date) */
|
|
2884
|
+
items: any[];
|
|
2885
|
+
title?: React.ReactNode;
|
|
2886
|
+
onMarkAll?: () => void;
|
|
2887
|
+
/** Makes rows buttons and marks the row read */
|
|
2888
|
+
onItem?: (item: any) => void;
|
|
2889
|
+
max?: number;
|
|
2890
|
+
/** Day labels locale (tr-TR) */
|
|
2891
|
+
locale?: string;
|
|
2892
|
+
viewAll?: (() => void) | string;
|
|
2893
|
+
labels?: { title?: string; markAll?: string; today?: string; yesterday?: string; empty?: string; viewAll?: string };
|
|
2894
|
+
}
|
|
2895
|
+
export declare function NotificationsWidget(props: NotificationsWidgetProps): JSX.Element;
|
|
2896
|
+
|
|
2897
|
+
/** One step of the mini canvas. */
|
|
2898
|
+
export interface FlowStep { id?: string; name: React.ReactNode; /** Block type in mono: "LLM · understand" */ kind?: React.ReactNode; icon?: string; product?: DashboardProduct; /** done · running (execution ring) · error · waiting (warn ring, human approval) · upcoming (dashed) */ state?: 'done' | 'running' | 'error' | 'waiting' | 'upcoming'; /** Runs at or through this step */ runs?: number; }
|
|
2899
|
+
/** A read-only mini canvas in a Card: three to six CanvasBlocks in a row joined by CanvasEdges, the running step ringed in execution, a caption per step saying where the live runs are. */
|
|
2900
|
+
export interface AgentFlowWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
2901
|
+
agent?: React.ReactNode;
|
|
2902
|
+
/** Replaces the agent name in the header */
|
|
2903
|
+
title?: React.ReactNode;
|
|
2904
|
+
steps: FlowStep[];
|
|
2905
|
+
/** Live runs Tag in the header */
|
|
2906
|
+
liveRuns?: number;
|
|
2907
|
+
/** Mono version after the name: "v8" */
|
|
2908
|
+
version?: string;
|
|
2909
|
+
/** Block width in px (160); the strip scrolls sideways when it does not fit */
|
|
2910
|
+
blockWidth?: number;
|
|
2911
|
+
/** Edge length in px (24) */
|
|
2912
|
+
gap?: number;
|
|
2913
|
+
/** Shows "Open in builder" */
|
|
2914
|
+
onOpen?: () => void;
|
|
2915
|
+
labels?: { flow?: string; done?: string; running?: string; error?: string; waiting?: string; upcoming?: string; live?: string; liveOne?: string; open?: string };
|
|
2916
|
+
}
|
|
2917
|
+
export declare function AgentFlowWidget(props: AgentFlowWidgetProps): JSX.Element;
|
|
2918
|
+
|
|
2919
|
+
/** One ranked row. */
|
|
2920
|
+
export interface LeaderRow { id?: string; name: string; sub?: React.ReactNode; kind?: 'agent' | 'person' | 'system'; product?: DashboardProduct; icon?: string; value: number; /** Change since the last period, in the value's unit */ delta?: number; }
|
|
2921
|
+
/** Ranked rows in a Card: an agent or a person, a bar against the leader, the value and the change since the last period; optional period switch. */
|
|
2922
|
+
export interface LeaderboardWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'format' | 'max' | 'title'> {
|
|
2923
|
+
rows: LeaderRow[];
|
|
2924
|
+
title?: React.ReactNode;
|
|
2925
|
+
/** Value column header: "Resolved" */
|
|
2926
|
+
metric?: React.ReactNode;
|
|
2927
|
+
periods?: (string | { label: string; value: string })[];
|
|
2928
|
+
period?: string;
|
|
2929
|
+
defaultPeriod?: string;
|
|
2930
|
+
onPeriodChange?: (v: string) => void;
|
|
2931
|
+
format?: (v: number) => string;
|
|
2932
|
+
deltaFormat?: (v: number) => string;
|
|
2933
|
+
/** Lower is better: sorts ascending and greens a fall */
|
|
2934
|
+
invert?: boolean;
|
|
2935
|
+
/** id or name of the row to tint (you, the agent on screen) */
|
|
2936
|
+
highlight?: string;
|
|
2937
|
+
max?: number;
|
|
2938
|
+
/** Sort by value (default true) */
|
|
2939
|
+
sort?: boolean;
|
|
2940
|
+
viewAll?: (() => void) | string;
|
|
2941
|
+
labels?: { title?: string; period?: string; name?: string; value?: string; change?: string; up?: string; down?: string; flat?: string; viewAll?: string };
|
|
2942
|
+
}
|
|
2943
|
+
export declare function LeaderboardWidget(props: LeaderboardWidgetProps): JSX.Element;
|
|
2944
|
+
|
|
2945
|
+
/** A CalendarView event with the agenda's extra fields. */
|
|
2946
|
+
export interface AgendaEvent { id?: string | number; title: string; start: Date | string; end?: Date | string; allDay?: boolean; tone?: DashboardTone; kind?: 'run' | 'review' | 'call' | 'maintenance' | 'deploy' | 'meeting' | string; tenant?: string; meta?: React.ReactNode; }
|
|
2947
|
+
/** One day of CalendarView events in a Card: a time rail, a tone bar per event, done / live / in n min, and a now line. */
|
|
2948
|
+
export interface AgendaWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'max' | 'title'> {
|
|
2949
|
+
/** Events of any day; only the shown day's are listed */
|
|
2950
|
+
events: AgendaEvent[];
|
|
2951
|
+
/** Day to show (default now) */
|
|
2952
|
+
date?: Date | string;
|
|
2953
|
+
/** The current time (default the clock) */
|
|
2954
|
+
now?: Date | string;
|
|
2955
|
+
/** tr-TR → 15.10.2026; en → 15 Oct 2026; 24h times */
|
|
2956
|
+
locale?: string;
|
|
2957
|
+
title?: React.ReactNode;
|
|
2958
|
+
/** Makes titles buttons */
|
|
2959
|
+
onEvent?: (e: AgendaEvent) => void;
|
|
2960
|
+
/** Shows the schedule button */
|
|
2961
|
+
onAdd?: () => void;
|
|
2962
|
+
max?: number;
|
|
2963
|
+
viewAll?: (() => void) | string;
|
|
2964
|
+
/** soon is a template: "in {n} min" */
|
|
2965
|
+
labels?: { title?: string; add?: string; empty?: string; emptyHint?: string; now?: string; done?: string; live?: string; soon?: string; allDay?: string; run?: string; review?: string; call?: string; maintenance?: string; deploy?: string; meeting?: string; viewAll?: string };
|
|
2966
|
+
}
|
|
2967
|
+
export declare function AgendaWidget(props: AgendaWidgetProps): JSX.Element;
|
|
2968
|
+
|
|
2969
|
+
/** The SetupAssistant in a dashboard Card: goal, progress, numbered steps with the next one carrying the action, a hide button, and a done state. */
|
|
2970
|
+
export interface OnboardingWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
2971
|
+
/** Card title (labels.title "Get started") */
|
|
2972
|
+
title?: React.ReactNode;
|
|
2973
|
+
/** The goal: "Launch your first agent on Zurich" */
|
|
2974
|
+
heading?: React.ReactNode;
|
|
2975
|
+
description?: React.ReactNode;
|
|
2976
|
+
/** SetupAssistant steps: title, description, time, done, optional, action, onAction */
|
|
2977
|
+
steps: any[];
|
|
2978
|
+
/** Shows the hide button */
|
|
2979
|
+
onDismiss?: () => void;
|
|
2980
|
+
labels?: { title?: string; hide?: string; complete?: string; completeHint?: string; progress?: string; done?: string; optional?: string };
|
|
2981
|
+
}
|
|
2982
|
+
export declare function OnboardingWidget(props: OnboardingWidgetProps): JSX.Element;
|
|
2983
|
+
|
|
2984
|
+
/** One comment: FeedPost fields plus resolved. */
|
|
2985
|
+
export interface CommentItem { id?: string | number; author: string | { name: string; kind?: 'person' | 'agent' | 'system'; product?: DashboardProduct }; kind?: 'person' | 'agent' | 'system'; action?: React.ReactNode; target?: React.ReactNode; time?: string; /** @handles are picked out in link colour */ text: React.ReactNode; replies?: any[]; likes?: number; liked?: boolean; resolved?: boolean; /** warn wraps the body (an escalation) */ tone?: 'warn'; }
|
|
2986
|
+
/** A comment thread in a Card: FeedPosts with @mentions picked out, replies and likes, and the Publisher docked under the list. */
|
|
2987
|
+
export interface CommentsWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSubmit' | 'title'> {
|
|
2988
|
+
comments: CommentItem[];
|
|
2989
|
+
/** The author of new comments (initials) */
|
|
2990
|
+
user?: string;
|
|
2991
|
+
/** Without it, new comments are appended locally */
|
|
2992
|
+
onSubmit?: (text: string) => void;
|
|
2993
|
+
onLike?: (c: CommentItem) => void;
|
|
2994
|
+
onReply?: (c: CommentItem) => void;
|
|
2995
|
+
title?: React.ReactNode;
|
|
2996
|
+
/** Scroll height of the list (360) */
|
|
2997
|
+
maxHeight?: number | string;
|
|
2998
|
+
labels?: { title?: string; placeholder?: string; submit?: string; empty?: string; emptyHint?: string; now?: string; reply?: string; like?: string; liked?: string; attach?: string; mention?: string; resolved?: string };
|
|
2999
|
+
}
|
|
3000
|
+
export declare function CommentsWidget(props: CommentsWidgetProps): JSX.Element;
|
|
3001
|
+
|
|
3002
|
+
// Only the declarations marked export above are public.
|
|
3003
|
+
export {};
|