@almadar/ui 1.0.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/LICENSE +72 -0
- package/README.md +335 -0
- package/dist/ThemeContext-lI5bo85E.d.ts +103 -0
- package/dist/components/index.d.ts +4789 -0
- package/dist/components/index.js +21566 -0
- package/dist/components/index.js.map +1 -0
- package/dist/context/index.d.ts +208 -0
- package/dist/context/index.js +443 -0
- package/dist/context/index.js.map +1 -0
- package/dist/event-bus-types-8-cjyMxw.d.ts +65 -0
- package/dist/hooks/index.d.ts +1006 -0
- package/dist/hooks/index.js +2262 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/lib/index.d.ts +291 -0
- package/dist/lib/index.js +431 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/offline-executor-CHr4uAhf.d.ts +401 -0
- package/dist/providers/index.d.ts +386 -0
- package/dist/providers/index.js +1111 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/renderer/index.d.ts +382 -0
- package/dist/renderer/index.js +808 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/stores/index.d.ts +151 -0
- package/dist/stores/index.js +196 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/useUISlots-mnggE9X9.d.ts +105 -0
- package/package.json +121 -0
- package/themes/almadar.css +196 -0
- package/themes/index.css +11 -0
- package/themes/minimalist.css +193 -0
- package/themes/wireframe.css +188 -0
|
@@ -0,0 +1,4789 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
|
+
import { SExpr } from '@orbital/shared';
|
|
5
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
6
|
+
import { Entity } from '../stores/index.js';
|
|
7
|
+
import { E as EventBusContextType } from '../event-bus-types-8-cjyMxw.js';
|
|
8
|
+
import { S as SlotContent, a as UISlot } from '../useUISlots-mnggE9X9.js';
|
|
9
|
+
|
|
10
|
+
type ButtonVariant = "primary" | "secondary" | "ghost" | "danger" | "success" | "warning" | "default";
|
|
11
|
+
type ButtonSize = "sm" | "md" | "lg";
|
|
12
|
+
interface ButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
13
|
+
variant?: ButtonVariant;
|
|
14
|
+
size?: ButtonSize;
|
|
15
|
+
isLoading?: boolean;
|
|
16
|
+
/** Left icon as ReactNode (preferred) */
|
|
17
|
+
leftIcon?: React__default.ReactNode;
|
|
18
|
+
/** Right icon as ReactNode (preferred) */
|
|
19
|
+
rightIcon?: React__default.ReactNode;
|
|
20
|
+
/** Left icon as Lucide icon component (convenience prop, renders with default size) */
|
|
21
|
+
icon?: LucideIcon;
|
|
22
|
+
/** Right icon as Lucide icon component (convenience prop) */
|
|
23
|
+
iconRight?: LucideIcon;
|
|
24
|
+
}
|
|
25
|
+
declare const Button: React__default.ForwardRefExoticComponent<ButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
|
|
26
|
+
|
|
27
|
+
interface SelectOption$1 {
|
|
28
|
+
value: string;
|
|
29
|
+
label: string;
|
|
30
|
+
}
|
|
31
|
+
interface InputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "onChange"> {
|
|
32
|
+
/** Input type - supports 'select' and 'textarea' in addition to standard types */
|
|
33
|
+
type?: "text" | "email" | "password" | "number" | "tel" | "url" | "search" | "date" | "datetime-local" | "time" | "checkbox" | "select" | "textarea";
|
|
34
|
+
error?: string;
|
|
35
|
+
leftIcon?: React__default.ReactNode;
|
|
36
|
+
rightIcon?: React__default.ReactNode;
|
|
37
|
+
/** Lucide icon component for left side (convenience prop) */
|
|
38
|
+
icon?: LucideIcon;
|
|
39
|
+
/** Show clear button when input has value */
|
|
40
|
+
clearable?: boolean;
|
|
41
|
+
/** Callback when clear button is clicked */
|
|
42
|
+
onClear?: () => void;
|
|
43
|
+
/** Options for select type */
|
|
44
|
+
options?: SelectOption$1[];
|
|
45
|
+
/** Rows for textarea type */
|
|
46
|
+
rows?: number;
|
|
47
|
+
/** onChange handler - accepts events from input, select, or textarea */
|
|
48
|
+
onChange?: React__default.ChangeEventHandler<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>;
|
|
49
|
+
}
|
|
50
|
+
declare const Input: React__default.ForwardRefExoticComponent<InputProps & React__default.RefAttributes<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>>;
|
|
51
|
+
|
|
52
|
+
interface LabelProps extends React__default.LabelHTMLAttributes<HTMLLabelElement> {
|
|
53
|
+
required?: boolean;
|
|
54
|
+
}
|
|
55
|
+
declare const Label: React__default.ForwardRefExoticComponent<LabelProps & React__default.RefAttributes<HTMLLabelElement>>;
|
|
56
|
+
|
|
57
|
+
interface TextareaProps extends React__default.TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
58
|
+
error?: string;
|
|
59
|
+
}
|
|
60
|
+
declare const Textarea: React__default.ForwardRefExoticComponent<TextareaProps & React__default.RefAttributes<HTMLTextAreaElement>>;
|
|
61
|
+
|
|
62
|
+
interface SelectOption {
|
|
63
|
+
value: string;
|
|
64
|
+
label: string;
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
}
|
|
67
|
+
interface SelectProps extends Omit<React__default.SelectHTMLAttributes<HTMLSelectElement>, "children"> {
|
|
68
|
+
options: SelectOption[];
|
|
69
|
+
placeholder?: string;
|
|
70
|
+
error?: string;
|
|
71
|
+
}
|
|
72
|
+
declare const Select: React__default.ForwardRefExoticComponent<SelectProps & React__default.RefAttributes<HTMLSelectElement>>;
|
|
73
|
+
|
|
74
|
+
interface CheckboxProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type"> {
|
|
75
|
+
label?: string;
|
|
76
|
+
}
|
|
77
|
+
declare const Checkbox: React__default.ForwardRefExoticComponent<CheckboxProps & React__default.RefAttributes<HTMLInputElement>>;
|
|
78
|
+
|
|
79
|
+
type CardShadow = "none" | "sm" | "md" | "lg";
|
|
80
|
+
interface CardProps$1 extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
81
|
+
variant?: "default" | "bordered" | "elevated" | "interactive";
|
|
82
|
+
padding?: "none" | "sm" | "md" | "lg";
|
|
83
|
+
/** Card title - renders in header if provided */
|
|
84
|
+
title?: string;
|
|
85
|
+
/** Card subtitle - renders below title */
|
|
86
|
+
subtitle?: string;
|
|
87
|
+
/** Shadow size override */
|
|
88
|
+
shadow?: CardShadow;
|
|
89
|
+
}
|
|
90
|
+
declare const Card$1: React__default.ForwardRefExoticComponent<CardProps$1 & React__default.RefAttributes<HTMLDivElement>>;
|
|
91
|
+
declare const CardHeader: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLDivElement> & React__default.RefAttributes<HTMLDivElement>>;
|
|
92
|
+
declare const CardTitle: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLHeadingElement> & React__default.RefAttributes<HTMLHeadingElement>>;
|
|
93
|
+
declare const CardContent: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLDivElement> & React__default.RefAttributes<HTMLDivElement>>;
|
|
94
|
+
declare const CardBody: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLDivElement> & React__default.RefAttributes<HTMLDivElement>>;
|
|
95
|
+
declare const CardFooter: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLDivElement> & React__default.RefAttributes<HTMLDivElement>>;
|
|
96
|
+
|
|
97
|
+
type BadgeVariant = "default" | "primary" | "secondary" | "success" | "warning" | "danger" | "error" | "info" | "neutral";
|
|
98
|
+
type BadgeSize = "sm" | "md" | "lg";
|
|
99
|
+
interface BadgeProps extends React__default.HTMLAttributes<HTMLSpanElement> {
|
|
100
|
+
variant?: BadgeVariant;
|
|
101
|
+
size?: BadgeSize;
|
|
102
|
+
}
|
|
103
|
+
declare const Badge: React__default.ForwardRefExoticComponent<BadgeProps & React__default.RefAttributes<HTMLSpanElement>>;
|
|
104
|
+
|
|
105
|
+
type SpinnerSize = "xs" | "sm" | "md" | "lg";
|
|
106
|
+
interface SpinnerProps extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
107
|
+
size?: SpinnerSize;
|
|
108
|
+
}
|
|
109
|
+
declare const Spinner: React__default.ForwardRefExoticComponent<SpinnerProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Avatar Atom Component
|
|
113
|
+
*
|
|
114
|
+
* A versatile avatar component supporting images, initials, icons, and status indicators.
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
type AvatarSize = "xs" | "sm" | "md" | "lg" | "xl";
|
|
118
|
+
type AvatarStatus = "online" | "offline" | "away" | "busy";
|
|
119
|
+
interface AvatarProps {
|
|
120
|
+
/**
|
|
121
|
+
* Image source URL
|
|
122
|
+
*/
|
|
123
|
+
src?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Alt text for the image
|
|
126
|
+
*/
|
|
127
|
+
alt?: string;
|
|
128
|
+
/**
|
|
129
|
+
* Full name - initials will be generated automatically
|
|
130
|
+
*/
|
|
131
|
+
name?: string;
|
|
132
|
+
/**
|
|
133
|
+
* Initials to display (e.g., "JD" for John Doe)
|
|
134
|
+
* If not provided but name is, initials will be auto-generated
|
|
135
|
+
*/
|
|
136
|
+
initials?: string;
|
|
137
|
+
/**
|
|
138
|
+
* Icon to display when no image or initials
|
|
139
|
+
*/
|
|
140
|
+
icon?: LucideIcon;
|
|
141
|
+
/**
|
|
142
|
+
* Size of the avatar
|
|
143
|
+
* @default 'md'
|
|
144
|
+
*/
|
|
145
|
+
size?: AvatarSize;
|
|
146
|
+
/**
|
|
147
|
+
* Status indicator
|
|
148
|
+
*/
|
|
149
|
+
status?: AvatarStatus;
|
|
150
|
+
/**
|
|
151
|
+
* Badge content (e.g., notification count)
|
|
152
|
+
*/
|
|
153
|
+
badge?: string | number;
|
|
154
|
+
/**
|
|
155
|
+
* Additional CSS classes
|
|
156
|
+
*/
|
|
157
|
+
className?: string;
|
|
158
|
+
/**
|
|
159
|
+
* Click handler
|
|
160
|
+
*/
|
|
161
|
+
onClick?: () => void;
|
|
162
|
+
}
|
|
163
|
+
declare const Avatar: React__default.FC<AvatarProps>;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Box Component
|
|
167
|
+
*
|
|
168
|
+
* A versatile layout primitive that provides spacing, background, border, and shadow controls.
|
|
169
|
+
* Think of it as a styled div with consistent design tokens.
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
type BoxPadding = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
173
|
+
type BoxMargin = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "auto";
|
|
174
|
+
type BoxBg = "transparent" | "primary" | "secondary" | "muted" | "accent" | "surface" | "overlay";
|
|
175
|
+
type BoxRounded = "none" | "sm" | "md" | "lg" | "xl" | "2xl" | "full";
|
|
176
|
+
type BoxShadow = "none" | "sm" | "md" | "lg" | "xl";
|
|
177
|
+
interface BoxProps extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
178
|
+
/** Padding on all sides */
|
|
179
|
+
padding?: BoxPadding;
|
|
180
|
+
/** Horizontal padding (overrides padding for x-axis) */
|
|
181
|
+
paddingX?: BoxPadding;
|
|
182
|
+
/** Vertical padding (overrides padding for y-axis) */
|
|
183
|
+
paddingY?: BoxPadding;
|
|
184
|
+
/** Margin on all sides */
|
|
185
|
+
margin?: BoxMargin;
|
|
186
|
+
/** Horizontal margin */
|
|
187
|
+
marginX?: BoxMargin;
|
|
188
|
+
/** Vertical margin */
|
|
189
|
+
marginY?: BoxMargin;
|
|
190
|
+
/** Background color */
|
|
191
|
+
bg?: BoxBg;
|
|
192
|
+
/** Show border */
|
|
193
|
+
border?: boolean;
|
|
194
|
+
/** Border radius */
|
|
195
|
+
rounded?: BoxRounded;
|
|
196
|
+
/** Box shadow */
|
|
197
|
+
shadow?: BoxShadow;
|
|
198
|
+
/** Display type */
|
|
199
|
+
display?: "block" | "inline" | "inline-block" | "flex" | "inline-flex" | "grid";
|
|
200
|
+
/** Fill available width */
|
|
201
|
+
fullWidth?: boolean;
|
|
202
|
+
/** Fill available height */
|
|
203
|
+
fullHeight?: boolean;
|
|
204
|
+
/** Overflow behavior */
|
|
205
|
+
overflow?: "auto" | "hidden" | "visible" | "scroll";
|
|
206
|
+
/** Position */
|
|
207
|
+
position?: "relative" | "absolute" | "fixed" | "sticky";
|
|
208
|
+
/** HTML element to render as */
|
|
209
|
+
as?: React__default.ElementType;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Box - Versatile container component with design tokens
|
|
213
|
+
*/
|
|
214
|
+
declare const Box: React__default.ForwardRefExoticComponent<BoxProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Center Component
|
|
218
|
+
*
|
|
219
|
+
* A layout utility that centers its children horizontally and/or vertically.
|
|
220
|
+
*/
|
|
221
|
+
|
|
222
|
+
interface CenterProps {
|
|
223
|
+
/** Center inline (width fits content) vs block (full width) */
|
|
224
|
+
inline?: boolean;
|
|
225
|
+
/** Center only horizontally */
|
|
226
|
+
horizontal?: boolean;
|
|
227
|
+
/** Center only vertically */
|
|
228
|
+
vertical?: boolean;
|
|
229
|
+
/** Minimum height (useful for vertical centering) */
|
|
230
|
+
minHeight?: string | number;
|
|
231
|
+
/** Fill available height */
|
|
232
|
+
fullHeight?: boolean;
|
|
233
|
+
/** Fill available width */
|
|
234
|
+
fullWidth?: boolean;
|
|
235
|
+
/** Custom class name */
|
|
236
|
+
className?: string;
|
|
237
|
+
/** Inline styles */
|
|
238
|
+
style?: React__default.CSSProperties;
|
|
239
|
+
/** Children elements */
|
|
240
|
+
children: React__default.ReactNode;
|
|
241
|
+
/** HTML element to render as */
|
|
242
|
+
as?: React__default.ElementType;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Center - Centers content horizontally and/or vertically
|
|
246
|
+
*/
|
|
247
|
+
declare const Center: React__default.FC<CenterProps>;
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Divider Atom Component
|
|
251
|
+
*
|
|
252
|
+
* A divider component for separating content sections.
|
|
253
|
+
*/
|
|
254
|
+
|
|
255
|
+
type DividerOrientation = "horizontal" | "vertical";
|
|
256
|
+
type DividerVariant = "solid" | "dashed" | "dotted";
|
|
257
|
+
interface DividerProps {
|
|
258
|
+
/**
|
|
259
|
+
* Orientation of the divider
|
|
260
|
+
* @default 'horizontal'
|
|
261
|
+
*/
|
|
262
|
+
orientation?: DividerOrientation;
|
|
263
|
+
/**
|
|
264
|
+
* Text label to display in the divider
|
|
265
|
+
*/
|
|
266
|
+
label?: string;
|
|
267
|
+
/**
|
|
268
|
+
* Line style variant
|
|
269
|
+
* @default 'solid'
|
|
270
|
+
*/
|
|
271
|
+
variant?: DividerVariant;
|
|
272
|
+
/**
|
|
273
|
+
* Additional CSS classes
|
|
274
|
+
*/
|
|
275
|
+
className?: string;
|
|
276
|
+
}
|
|
277
|
+
declare const Divider: React__default.FC<DividerProps>;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Icon Atom Component
|
|
281
|
+
*
|
|
282
|
+
* A wrapper component for Lucide icons with consistent sizing and styling.
|
|
283
|
+
* Uses theme-aware CSS variables for stroke width and color.
|
|
284
|
+
*
|
|
285
|
+
* Supports two APIs:
|
|
286
|
+
* - `icon` prop: Pass a LucideIcon component directly
|
|
287
|
+
* - `name` prop: Pass a string icon name (resolved from iconMap)
|
|
288
|
+
*/
|
|
289
|
+
|
|
290
|
+
type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
291
|
+
type IconAnimation = 'spin' | 'pulse' | 'none';
|
|
292
|
+
interface IconProps {
|
|
293
|
+
/** Lucide icon component (preferred for type-safe usage) */
|
|
294
|
+
icon?: LucideIcon;
|
|
295
|
+
/** Icon name as string (resolved from iconMap) */
|
|
296
|
+
name?: string;
|
|
297
|
+
/** Size of the icon */
|
|
298
|
+
size?: IconSize;
|
|
299
|
+
/** Color class (Tailwind color class) or 'inherit' for theme default */
|
|
300
|
+
color?: string;
|
|
301
|
+
/** Animation type */
|
|
302
|
+
animation?: IconAnimation;
|
|
303
|
+
/** Additional CSS classes */
|
|
304
|
+
className?: string;
|
|
305
|
+
/** Icon stroke width - uses theme default if not specified */
|
|
306
|
+
strokeWidth?: number;
|
|
307
|
+
/** Inline style */
|
|
308
|
+
style?: React__default.CSSProperties;
|
|
309
|
+
}
|
|
310
|
+
declare const Icon: React__default.FC<IconProps>;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* ProgressBar Atom Component
|
|
314
|
+
*
|
|
315
|
+
* A progress bar component with linear, circular, and stepped variants.
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
type ProgressBarType = "linear" | "circular" | "stepped";
|
|
319
|
+
type ProgressBarVariant = "default" | "primary" | "success" | "warning" | "danger";
|
|
320
|
+
type ProgressBarColor = ProgressBarVariant;
|
|
321
|
+
interface ProgressBarProps {
|
|
322
|
+
/**
|
|
323
|
+
* Progress value (0-100)
|
|
324
|
+
*/
|
|
325
|
+
value: number;
|
|
326
|
+
/**
|
|
327
|
+
* Maximum value (for calculating percentage)
|
|
328
|
+
* @default 100
|
|
329
|
+
*/
|
|
330
|
+
max?: number;
|
|
331
|
+
/**
|
|
332
|
+
* Type of the progress bar (linear, circular, stepped)
|
|
333
|
+
* @default 'linear'
|
|
334
|
+
*/
|
|
335
|
+
type?: ProgressBarType;
|
|
336
|
+
/**
|
|
337
|
+
* Variant/color of the progress bar
|
|
338
|
+
* @default 'primary'
|
|
339
|
+
*/
|
|
340
|
+
variant?: ProgressBarVariant;
|
|
341
|
+
/**
|
|
342
|
+
* Color variant (alias for variant)
|
|
343
|
+
* @default 'primary'
|
|
344
|
+
*/
|
|
345
|
+
color?: ProgressBarColor;
|
|
346
|
+
/**
|
|
347
|
+
* Show percentage text
|
|
348
|
+
* @default false
|
|
349
|
+
*/
|
|
350
|
+
showPercentage?: boolean;
|
|
351
|
+
/**
|
|
352
|
+
* Alias for showPercentage (pattern compatibility)
|
|
353
|
+
*/
|
|
354
|
+
showLabel?: boolean;
|
|
355
|
+
/**
|
|
356
|
+
* Label text
|
|
357
|
+
*/
|
|
358
|
+
label?: string;
|
|
359
|
+
/**
|
|
360
|
+
* Size (for circular variant)
|
|
361
|
+
* @default 'md'
|
|
362
|
+
*/
|
|
363
|
+
size?: "sm" | "md" | "lg";
|
|
364
|
+
/**
|
|
365
|
+
* Number of steps (for stepped variant)
|
|
366
|
+
* @default 5
|
|
367
|
+
*/
|
|
368
|
+
steps?: number;
|
|
369
|
+
/**
|
|
370
|
+
* Additional CSS classes
|
|
371
|
+
*/
|
|
372
|
+
className?: string;
|
|
373
|
+
}
|
|
374
|
+
declare const ProgressBar: React__default.FC<ProgressBarProps>;
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Radio Atom Component
|
|
378
|
+
*
|
|
379
|
+
* A radio button component with label support and accessibility.
|
|
380
|
+
*/
|
|
381
|
+
|
|
382
|
+
interface RadioProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> {
|
|
383
|
+
/**
|
|
384
|
+
* Label text displayed next to the radio button
|
|
385
|
+
*/
|
|
386
|
+
label?: string;
|
|
387
|
+
/**
|
|
388
|
+
* Helper text displayed below the radio button
|
|
389
|
+
*/
|
|
390
|
+
helperText?: string;
|
|
391
|
+
/**
|
|
392
|
+
* Error message displayed below the radio button
|
|
393
|
+
*/
|
|
394
|
+
error?: string;
|
|
395
|
+
/**
|
|
396
|
+
* Size of the radio button
|
|
397
|
+
* @default 'md'
|
|
398
|
+
*/
|
|
399
|
+
size?: "sm" | "md" | "lg";
|
|
400
|
+
}
|
|
401
|
+
declare const Radio: React__default.ForwardRefExoticComponent<RadioProps & React__default.RefAttributes<HTMLInputElement>>;
|
|
402
|
+
|
|
403
|
+
interface SwitchProps {
|
|
404
|
+
checked?: boolean;
|
|
405
|
+
defaultChecked?: boolean;
|
|
406
|
+
onChange?: (checked: boolean) => void;
|
|
407
|
+
disabled?: boolean;
|
|
408
|
+
label?: string;
|
|
409
|
+
id?: string;
|
|
410
|
+
name?: string;
|
|
411
|
+
className?: string;
|
|
412
|
+
}
|
|
413
|
+
declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Spacer Component
|
|
417
|
+
*
|
|
418
|
+
* A flexible spacer that expands to fill available space in a flex container.
|
|
419
|
+
* Useful for pushing elements apart or creating consistent spacing.
|
|
420
|
+
*/
|
|
421
|
+
|
|
422
|
+
type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';
|
|
423
|
+
interface SpacerProps {
|
|
424
|
+
/** Fixed size (auto = flex grow) */
|
|
425
|
+
size?: SpacerSize;
|
|
426
|
+
/** Orientation (for fixed sizes) */
|
|
427
|
+
axis?: 'horizontal' | 'vertical';
|
|
428
|
+
/** Custom class name */
|
|
429
|
+
className?: string;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Spacer - Flexible spacing element for flex layouts
|
|
433
|
+
*
|
|
434
|
+
* Usage:
|
|
435
|
+
* - size="auto" (default): Expands to fill available space (flex: 1)
|
|
436
|
+
* - size="md": Fixed size spacing
|
|
437
|
+
*/
|
|
438
|
+
declare const Spacer: React__default.FC<SpacerProps>;
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Stack Component
|
|
442
|
+
*
|
|
443
|
+
* A layout primitive for arranging children in a vertical or horizontal stack with consistent spacing.
|
|
444
|
+
* Includes convenience exports VStack and HStack for common use cases.
|
|
445
|
+
*/
|
|
446
|
+
|
|
447
|
+
type StackDirection = "horizontal" | "vertical";
|
|
448
|
+
type StackGap = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
449
|
+
type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
|
|
450
|
+
type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
451
|
+
interface StackProps {
|
|
452
|
+
/** Stack direction */
|
|
453
|
+
direction?: StackDirection;
|
|
454
|
+
/** Gap between children */
|
|
455
|
+
gap?: StackGap;
|
|
456
|
+
/** Align items on the cross axis */
|
|
457
|
+
align?: StackAlign;
|
|
458
|
+
/** Justify items on the main axis */
|
|
459
|
+
justify?: StackJustify;
|
|
460
|
+
/** Allow items to wrap */
|
|
461
|
+
wrap?: boolean;
|
|
462
|
+
/** Reverse the order of children */
|
|
463
|
+
reverse?: boolean;
|
|
464
|
+
/** Fill available space (flex: 1) */
|
|
465
|
+
flex?: boolean;
|
|
466
|
+
/** Custom class name */
|
|
467
|
+
className?: string;
|
|
468
|
+
/** Inline styles */
|
|
469
|
+
style?: React__default.CSSProperties;
|
|
470
|
+
/** Children elements */
|
|
471
|
+
children?: React__default.ReactNode;
|
|
472
|
+
/** HTML element to render as */
|
|
473
|
+
as?: React__default.ElementType;
|
|
474
|
+
/** Click handler */
|
|
475
|
+
onClick?: (e: React__default.MouseEvent) => void;
|
|
476
|
+
/** Keyboard handler */
|
|
477
|
+
onKeyDown?: (e: React__default.KeyboardEvent) => void;
|
|
478
|
+
/** Role for accessibility */
|
|
479
|
+
role?: string;
|
|
480
|
+
/** Tab index for focus management */
|
|
481
|
+
tabIndex?: number;
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Stack - Flexible layout component for arranging children
|
|
485
|
+
*/
|
|
486
|
+
declare const Stack: React__default.FC<StackProps>;
|
|
487
|
+
/**
|
|
488
|
+
* VStack - Vertical stack shorthand
|
|
489
|
+
*/
|
|
490
|
+
interface VStackProps extends Omit<StackProps, "direction"> {
|
|
491
|
+
}
|
|
492
|
+
declare const VStack: React__default.FC<VStackProps>;
|
|
493
|
+
/**
|
|
494
|
+
* HStack - Horizontal stack shorthand
|
|
495
|
+
*/
|
|
496
|
+
interface HStackProps extends Omit<StackProps, "direction"> {
|
|
497
|
+
}
|
|
498
|
+
declare const HStack: React__default.FC<HStackProps>;
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* TextHighlight Atom Component
|
|
502
|
+
*
|
|
503
|
+
* A styled span component for highlighting text with annotations (questions or notes).
|
|
504
|
+
* Uses different colors for different annotation types:
|
|
505
|
+
* - Questions: Blue highlight
|
|
506
|
+
* - Notes: Yellow highlight
|
|
507
|
+
*/
|
|
508
|
+
|
|
509
|
+
type HighlightType = "question" | "note";
|
|
510
|
+
interface TextHighlightProps {
|
|
511
|
+
/**
|
|
512
|
+
* Type of highlight (determines color)
|
|
513
|
+
*/
|
|
514
|
+
type: HighlightType;
|
|
515
|
+
/**
|
|
516
|
+
* Whether the highlight is currently active/focused
|
|
517
|
+
* @default false
|
|
518
|
+
*/
|
|
519
|
+
isActive?: boolean;
|
|
520
|
+
/**
|
|
521
|
+
* Callback when highlight is clicked
|
|
522
|
+
*/
|
|
523
|
+
onClick?: () => void;
|
|
524
|
+
/**
|
|
525
|
+
* Callback when highlight is hovered
|
|
526
|
+
*/
|
|
527
|
+
onMouseEnter?: () => void;
|
|
528
|
+
/**
|
|
529
|
+
* Callback when hover ends
|
|
530
|
+
*/
|
|
531
|
+
onMouseLeave?: () => void;
|
|
532
|
+
/**
|
|
533
|
+
* Unique ID for the annotation
|
|
534
|
+
*/
|
|
535
|
+
annotationId?: string;
|
|
536
|
+
/**
|
|
537
|
+
* Additional CSS classes
|
|
538
|
+
*/
|
|
539
|
+
className?: string;
|
|
540
|
+
/**
|
|
541
|
+
* Highlighted text content
|
|
542
|
+
*/
|
|
543
|
+
children: React__default.ReactNode;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* TextHighlight component for rendering highlighted text annotations
|
|
547
|
+
*/
|
|
548
|
+
declare const TextHighlight: React__default.FC<TextHighlightProps>;
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Typography Atom Component
|
|
552
|
+
*
|
|
553
|
+
* Text elements following the KFlow design system with theme-aware styling.
|
|
554
|
+
*/
|
|
555
|
+
|
|
556
|
+
type TypographyVariant = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "body1" | "body2" | "body" | "caption" | "overline" | "small" | "large" | "label";
|
|
557
|
+
type TypographySize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
|
|
558
|
+
interface TypographyProps {
|
|
559
|
+
/** Typography variant */
|
|
560
|
+
variant?: TypographyVariant;
|
|
561
|
+
/** Heading level (1-6) - alternative to variant for headings */
|
|
562
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
563
|
+
/** Text color */
|
|
564
|
+
color?: "primary" | "secondary" | "muted" | "error" | "success" | "warning" | "inherit";
|
|
565
|
+
/** Text alignment */
|
|
566
|
+
align?: "left" | "center" | "right";
|
|
567
|
+
/** Font weight override */
|
|
568
|
+
weight?: "light" | "normal" | "medium" | "semibold" | "bold";
|
|
569
|
+
/** Font size override */
|
|
570
|
+
size?: TypographySize;
|
|
571
|
+
/** Truncate with ellipsis */
|
|
572
|
+
truncate?: boolean;
|
|
573
|
+
/** Custom HTML element */
|
|
574
|
+
as?: keyof JSX.IntrinsicElements;
|
|
575
|
+
/** HTML id attribute */
|
|
576
|
+
id?: string;
|
|
577
|
+
/** Additional class names */
|
|
578
|
+
className?: string;
|
|
579
|
+
/** Inline style */
|
|
580
|
+
style?: React__default.CSSProperties;
|
|
581
|
+
/** Text content (alternative to children) */
|
|
582
|
+
content?: React__default.ReactNode;
|
|
583
|
+
/** Children elements */
|
|
584
|
+
children?: React__default.ReactNode;
|
|
585
|
+
}
|
|
586
|
+
declare const Typography: React__default.FC<TypographyProps>;
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* ThemeToggle Atom Component
|
|
590
|
+
*
|
|
591
|
+
* A button that toggles between light and dark themes.
|
|
592
|
+
* Uses Sun and Moon icons to indicate current/target theme.
|
|
593
|
+
*
|
|
594
|
+
* @packageDocumentation
|
|
595
|
+
*/
|
|
596
|
+
|
|
597
|
+
interface ThemeToggleProps {
|
|
598
|
+
/** Additional CSS classes */
|
|
599
|
+
className?: string;
|
|
600
|
+
/** Size variant */
|
|
601
|
+
size?: "sm" | "md" | "lg";
|
|
602
|
+
/** Show label text */
|
|
603
|
+
showLabel?: boolean;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* ThemeToggle component for switching between light and dark modes
|
|
607
|
+
*
|
|
608
|
+
* @example
|
|
609
|
+
* ```tsx
|
|
610
|
+
* // Basic usage
|
|
611
|
+
* <ThemeToggle />
|
|
612
|
+
*
|
|
613
|
+
* // With label
|
|
614
|
+
* <ThemeToggle showLabel />
|
|
615
|
+
*
|
|
616
|
+
* // Custom size
|
|
617
|
+
* <ThemeToggle size="lg" />
|
|
618
|
+
* ```
|
|
619
|
+
*/
|
|
620
|
+
declare const ThemeToggle: React__default.FC<ThemeToggleProps>;
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* ThemeSelector - Design theme selector component
|
|
624
|
+
*
|
|
625
|
+
* A dropdown/toggle component for switching between design themes.
|
|
626
|
+
*
|
|
627
|
+
* @packageDocumentation
|
|
628
|
+
*/
|
|
629
|
+
|
|
630
|
+
interface ThemeSelectorProps {
|
|
631
|
+
/** Optional className */
|
|
632
|
+
className?: string;
|
|
633
|
+
/** Show as dropdown or buttons */
|
|
634
|
+
variant?: "dropdown" | "buttons";
|
|
635
|
+
/** Show labels */
|
|
636
|
+
showLabels?: boolean;
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* ThemeSelector component for switching design themes
|
|
640
|
+
*/
|
|
641
|
+
declare const ThemeSelector: React__default.FC<ThemeSelectorProps>;
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* Overlay Atom Component
|
|
645
|
+
*
|
|
646
|
+
* A fixed backdrop for modals and drawers.
|
|
647
|
+
*/
|
|
648
|
+
|
|
649
|
+
interface OverlayProps {
|
|
650
|
+
isVisible?: boolean;
|
|
651
|
+
onClick?: (e: React__default.MouseEvent) => void;
|
|
652
|
+
className?: string;
|
|
653
|
+
blur?: boolean;
|
|
654
|
+
}
|
|
655
|
+
declare const Overlay: React__default.FC<OverlayProps>;
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* ConditionalWrapper Atom Component
|
|
659
|
+
*
|
|
660
|
+
* A wrapper component that conditionally renders its children based on
|
|
661
|
+
* S-expression evaluation. Used for dynamic field visibility in inspection forms.
|
|
662
|
+
*/
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* Context for conditional evaluation
|
|
666
|
+
*/
|
|
667
|
+
interface ConditionalContext {
|
|
668
|
+
formValues: Record<string, unknown>;
|
|
669
|
+
globalVariables: Record<string, unknown>;
|
|
670
|
+
localVariables?: Record<string, unknown>;
|
|
671
|
+
entity?: Record<string, unknown>;
|
|
672
|
+
}
|
|
673
|
+
interface ConditionalWrapperProps {
|
|
674
|
+
/** The S-expression condition to evaluate */
|
|
675
|
+
condition?: SExpr;
|
|
676
|
+
/** Context for evaluating the condition */
|
|
677
|
+
context: ConditionalContext;
|
|
678
|
+
/** Children to render when condition is true (or when no condition is provided) */
|
|
679
|
+
children: React__default.ReactNode;
|
|
680
|
+
/** Optional fallback to render when condition is false */
|
|
681
|
+
fallback?: React__default.ReactNode;
|
|
682
|
+
/** Whether to animate the transition (uses CSS transitions) */
|
|
683
|
+
animate?: boolean;
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* ConditionalWrapper conditionally renders children based on S-expression evaluation.
|
|
687
|
+
*
|
|
688
|
+
* Supported bindings:
|
|
689
|
+
* - @entity.formValues.fieldId - Access form field values
|
|
690
|
+
* - @entity.globalVariables.HG_VAR - Access global inspection variables
|
|
691
|
+
* - @entity.localVariables.H_VAR - Access document-local variables
|
|
692
|
+
* - @state - Current state machine state
|
|
693
|
+
* - @now - Current timestamp
|
|
694
|
+
*
|
|
695
|
+
* @example
|
|
696
|
+
* // Simple condition - show field when another field equals a value
|
|
697
|
+
* <ConditionalWrapper
|
|
698
|
+
* condition={["=", "@entity.formValues.vehicleType", "commercial"]}
|
|
699
|
+
* context={{ formValues: { vehicleType: "commercial" }, globalVariables: {} }}
|
|
700
|
+
* >
|
|
701
|
+
* <Input name="commercialLicenseNumber" />
|
|
702
|
+
* </ConditionalWrapper>
|
|
703
|
+
*
|
|
704
|
+
* @example
|
|
705
|
+
* // With fallback - show message when condition not met
|
|
706
|
+
* <ConditionalWrapper
|
|
707
|
+
* condition={[">=", "@entity.formValues.loadWeight", 3500]}
|
|
708
|
+
* context={formContext}
|
|
709
|
+
* fallback={<Typography variant="small">Load weight must be at least 3500kg</Typography>}
|
|
710
|
+
* >
|
|
711
|
+
* <HeavyVehicleFields />
|
|
712
|
+
* </ConditionalWrapper>
|
|
713
|
+
*
|
|
714
|
+
* @example
|
|
715
|
+
* // Using global variables for cross-form conditions
|
|
716
|
+
* <ConditionalWrapper
|
|
717
|
+
* condition={["=", "@entity.globalVariables.HG_POTROSNIKI", "DA"]}
|
|
718
|
+
* context={{ formValues: {}, globalVariables: { HG_POTROSNIKI: "DA" } }}
|
|
719
|
+
* >
|
|
720
|
+
* <PriceMarkingSection />
|
|
721
|
+
* </ConditionalWrapper>
|
|
722
|
+
*/
|
|
723
|
+
declare const ConditionalWrapper: React__default.FC<ConditionalWrapperProps>;
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* LawReferenceTooltip Atom Component
|
|
727
|
+
*
|
|
728
|
+
* A specialized tooltip for displaying law references in inspection forms.
|
|
729
|
+
* Shows law name, article number, and relevant clause text.
|
|
730
|
+
*/
|
|
731
|
+
|
|
732
|
+
/**
|
|
733
|
+
* Law reference definition
|
|
734
|
+
*/
|
|
735
|
+
interface LawReference {
|
|
736
|
+
/** Law identifier (e.g., "VVO", "TPED") */
|
|
737
|
+
law: string;
|
|
738
|
+
/** Full name of the law */
|
|
739
|
+
lawName?: string;
|
|
740
|
+
/** Article number (e.g., "§8", "Artikel 5") */
|
|
741
|
+
article: string;
|
|
742
|
+
/** Clause or paragraph text */
|
|
743
|
+
clause?: string;
|
|
744
|
+
/** Optional link to full law text */
|
|
745
|
+
link?: string;
|
|
746
|
+
}
|
|
747
|
+
interface LawReferenceTooltipProps {
|
|
748
|
+
/** The law reference to display */
|
|
749
|
+
reference: LawReference;
|
|
750
|
+
/** Children element that triggers the tooltip */
|
|
751
|
+
children: React__default.ReactNode;
|
|
752
|
+
/** Tooltip position */
|
|
753
|
+
position?: "top" | "bottom" | "left" | "right";
|
|
754
|
+
/** Additional CSS classes */
|
|
755
|
+
className?: string;
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* LawReferenceTooltip displays legal references with structured formatting.
|
|
759
|
+
*
|
|
760
|
+
* @example
|
|
761
|
+
* <LawReferenceTooltip
|
|
762
|
+
* reference={{
|
|
763
|
+
* law: "VVO",
|
|
764
|
+
* lawName: "Verkehrsverordnung",
|
|
765
|
+
* article: "§8 Abs. 3",
|
|
766
|
+
* clause: "Die zulässige Gesamtmasse darf 3500 kg nicht überschreiten."
|
|
767
|
+
* }}
|
|
768
|
+
* >
|
|
769
|
+
* <Typography variant="small" className="text-blue-600 underline cursor-help">VVO §8</Typography>
|
|
770
|
+
* </LawReferenceTooltip>
|
|
771
|
+
*/
|
|
772
|
+
declare const LawReferenceTooltip: React__default.FC<LawReferenceTooltipProps>;
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* FormField Molecule Component
|
|
776
|
+
*
|
|
777
|
+
* A form field wrapper with label, hint, and error message support.
|
|
778
|
+
* **Atomic Design**: Composed using Label and Typography atoms.
|
|
779
|
+
*/
|
|
780
|
+
|
|
781
|
+
interface FormFieldProps {
|
|
782
|
+
label: string;
|
|
783
|
+
required?: boolean;
|
|
784
|
+
error?: string;
|
|
785
|
+
hint?: string;
|
|
786
|
+
className?: string;
|
|
787
|
+
children: React__default.ReactNode;
|
|
788
|
+
}
|
|
789
|
+
declare const FormField: React__default.FC<FormFieldProps>;
|
|
790
|
+
|
|
791
|
+
interface EmptyStateProps {
|
|
792
|
+
/**
|
|
793
|
+
* Icon to display. Accepts either:
|
|
794
|
+
* - A Lucide icon component (LucideIcon)
|
|
795
|
+
* - A string icon name (e.g., "check-circle", "x-circle")
|
|
796
|
+
*/
|
|
797
|
+
icon?: LucideIcon | string;
|
|
798
|
+
/** Primary text to display - use title or message (message is alias for backwards compat) */
|
|
799
|
+
title?: string;
|
|
800
|
+
/** Alias for title - used by schema patterns */
|
|
801
|
+
message?: string;
|
|
802
|
+
description?: string;
|
|
803
|
+
actionLabel?: string;
|
|
804
|
+
onAction?: () => void;
|
|
805
|
+
className?: string;
|
|
806
|
+
/** Destructive styling for confirmation dialogs */
|
|
807
|
+
destructive?: boolean;
|
|
808
|
+
/** Variant for color styling */
|
|
809
|
+
variant?: "default" | "success" | "error" | "warning" | "info";
|
|
810
|
+
}
|
|
811
|
+
declare const EmptyState: React__default.FC<EmptyStateProps>;
|
|
812
|
+
|
|
813
|
+
interface LoadingStateProps {
|
|
814
|
+
title?: string;
|
|
815
|
+
message?: string;
|
|
816
|
+
className?: string;
|
|
817
|
+
}
|
|
818
|
+
declare const LoadingState: React__default.FC<LoadingStateProps>;
|
|
819
|
+
|
|
820
|
+
interface ErrorStateProps {
|
|
821
|
+
title?: string;
|
|
822
|
+
/** Error message to display */
|
|
823
|
+
message?: string;
|
|
824
|
+
/** Alias for message (schema compatibility) */
|
|
825
|
+
description?: string;
|
|
826
|
+
onRetry?: () => void;
|
|
827
|
+
className?: string;
|
|
828
|
+
}
|
|
829
|
+
declare const ErrorState: React__default.FC<ErrorStateProps>;
|
|
830
|
+
|
|
831
|
+
/**
|
|
832
|
+
* Accordion Molecule Component
|
|
833
|
+
*
|
|
834
|
+
* A collapsible content component with single or multiple open items.
|
|
835
|
+
* Uses Button, Icon, Typography, and Divider atoms.
|
|
836
|
+
*/
|
|
837
|
+
|
|
838
|
+
interface AccordionItem {
|
|
839
|
+
/**
|
|
840
|
+
* Item ID (auto-generated from header/title if not provided)
|
|
841
|
+
*/
|
|
842
|
+
id?: string;
|
|
843
|
+
/**
|
|
844
|
+
* Item header/title
|
|
845
|
+
*/
|
|
846
|
+
header?: React__default.ReactNode;
|
|
847
|
+
/**
|
|
848
|
+
* Alias for header (pattern compatibility)
|
|
849
|
+
*/
|
|
850
|
+
title?: React__default.ReactNode;
|
|
851
|
+
/**
|
|
852
|
+
* Item content
|
|
853
|
+
*/
|
|
854
|
+
content: React__default.ReactNode;
|
|
855
|
+
/**
|
|
856
|
+
* Disable item
|
|
857
|
+
*/
|
|
858
|
+
disabled?: boolean;
|
|
859
|
+
/**
|
|
860
|
+
* Default open state
|
|
861
|
+
*/
|
|
862
|
+
defaultOpen?: boolean;
|
|
863
|
+
}
|
|
864
|
+
interface AccordionProps {
|
|
865
|
+
/**
|
|
866
|
+
* Accordion items
|
|
867
|
+
*/
|
|
868
|
+
items: AccordionItem[];
|
|
869
|
+
/**
|
|
870
|
+
* Allow multiple items open at once
|
|
871
|
+
* @default false
|
|
872
|
+
*/
|
|
873
|
+
multiple?: boolean;
|
|
874
|
+
/**
|
|
875
|
+
* Default open items (IDs)
|
|
876
|
+
*/
|
|
877
|
+
defaultOpenItems?: string[];
|
|
878
|
+
/**
|
|
879
|
+
* Default open items by index (pattern compatibility)
|
|
880
|
+
*/
|
|
881
|
+
defaultOpen?: number[];
|
|
882
|
+
/**
|
|
883
|
+
* Controlled open items (IDs)
|
|
884
|
+
*/
|
|
885
|
+
openItems?: string[];
|
|
886
|
+
/**
|
|
887
|
+
* Callback when item opens/closes
|
|
888
|
+
*/
|
|
889
|
+
onItemToggle?: (itemId: string, isOpen: boolean) => void;
|
|
890
|
+
/**
|
|
891
|
+
* Additional CSS classes
|
|
892
|
+
*/
|
|
893
|
+
className?: string;
|
|
894
|
+
}
|
|
895
|
+
declare const Accordion: React__default.FC<AccordionProps>;
|
|
896
|
+
|
|
897
|
+
/**
|
|
898
|
+
* Alert Molecule Component
|
|
899
|
+
*
|
|
900
|
+
* A component for displaying alert messages with different variants and actions.
|
|
901
|
+
* Uses theme-aware CSS variables for styling.
|
|
902
|
+
*/
|
|
903
|
+
|
|
904
|
+
type AlertVariant = "info" | "success" | "warning" | "error";
|
|
905
|
+
interface AlertProps {
|
|
906
|
+
/** Alert content (children or message) */
|
|
907
|
+
children?: React__default.ReactNode;
|
|
908
|
+
/** Alert message (alias for children) */
|
|
909
|
+
message?: string;
|
|
910
|
+
variant?: AlertVariant;
|
|
911
|
+
title?: string;
|
|
912
|
+
dismissible?: boolean;
|
|
913
|
+
onDismiss?: () => void;
|
|
914
|
+
onClose?: () => void;
|
|
915
|
+
actions?: React__default.ReactNode;
|
|
916
|
+
className?: string;
|
|
917
|
+
}
|
|
918
|
+
declare const Alert: React__default.FC<AlertProps>;
|
|
919
|
+
|
|
920
|
+
/**
|
|
921
|
+
* Breadcrumb Molecule Component
|
|
922
|
+
*
|
|
923
|
+
* A breadcrumb navigation component with separators and icons.
|
|
924
|
+
* Uses Button, Icon, and Typography atoms.
|
|
925
|
+
*/
|
|
926
|
+
|
|
927
|
+
interface BreadcrumbItem {
|
|
928
|
+
/**
|
|
929
|
+
* Item label
|
|
930
|
+
*/
|
|
931
|
+
label: string;
|
|
932
|
+
/**
|
|
933
|
+
* Item href (if provided, renders as link)
|
|
934
|
+
*/
|
|
935
|
+
href?: string;
|
|
936
|
+
/**
|
|
937
|
+
* Item path (alias for href, for schema compatibility)
|
|
938
|
+
*/
|
|
939
|
+
path?: string;
|
|
940
|
+
/**
|
|
941
|
+
* Item icon
|
|
942
|
+
*/
|
|
943
|
+
icon?: LucideIcon;
|
|
944
|
+
/**
|
|
945
|
+
* Click handler (if href not provided)
|
|
946
|
+
*/
|
|
947
|
+
onClick?: () => void;
|
|
948
|
+
/**
|
|
949
|
+
* Is current page
|
|
950
|
+
*/
|
|
951
|
+
isCurrent?: boolean;
|
|
952
|
+
}
|
|
953
|
+
interface BreadcrumbProps {
|
|
954
|
+
/**
|
|
955
|
+
* Breadcrumb items
|
|
956
|
+
*/
|
|
957
|
+
items: BreadcrumbItem[];
|
|
958
|
+
/**
|
|
959
|
+
* Separator icon
|
|
960
|
+
*/
|
|
961
|
+
separator?: LucideIcon;
|
|
962
|
+
/**
|
|
963
|
+
* Maximum items to show (truncates with ellipsis)
|
|
964
|
+
*/
|
|
965
|
+
maxItems?: number;
|
|
966
|
+
/**
|
|
967
|
+
* Additional CSS classes
|
|
968
|
+
*/
|
|
969
|
+
className?: string;
|
|
970
|
+
}
|
|
971
|
+
declare const Breadcrumb: React__default.FC<BreadcrumbProps>;
|
|
972
|
+
|
|
973
|
+
/**
|
|
974
|
+
* ButtonGroup Molecule Component
|
|
975
|
+
*
|
|
976
|
+
* A component for grouping buttons together with connected styling.
|
|
977
|
+
* Supports both children-based and form-actions pattern (primary/secondary) usage.
|
|
978
|
+
* Uses Button atoms.
|
|
979
|
+
*/
|
|
980
|
+
|
|
981
|
+
type ButtonGroupVariant = 'default' | 'segmented' | 'toggle';
|
|
982
|
+
/** Action button config for form-actions pattern */
|
|
983
|
+
interface ActionButton {
|
|
984
|
+
label: string;
|
|
985
|
+
/** Action type - 'submit' renders as submit button, others render as button */
|
|
986
|
+
actionType?: string;
|
|
987
|
+
event?: string;
|
|
988
|
+
navigatesTo?: string;
|
|
989
|
+
/** Button variant - matches Button component variants. Accepts string for schema compatibility. */
|
|
990
|
+
variant?: string;
|
|
991
|
+
}
|
|
992
|
+
/** Filter definition for filter-group pattern */
|
|
993
|
+
interface FilterDefinition$1 {
|
|
994
|
+
field: string;
|
|
995
|
+
label: string;
|
|
996
|
+
/** Filter type (checkbox, select, etc.) */
|
|
997
|
+
type?: 'checkbox' | 'select' | 'toggle';
|
|
998
|
+
/** Options for select filters */
|
|
999
|
+
options?: readonly string[];
|
|
1000
|
+
}
|
|
1001
|
+
interface ButtonGroupProps {
|
|
1002
|
+
/**
|
|
1003
|
+
* Button group content (Button components) - use this OR primary/secondary
|
|
1004
|
+
*/
|
|
1005
|
+
children?: React__default.ReactNode;
|
|
1006
|
+
/**
|
|
1007
|
+
* Primary action button config (for form-actions pattern)
|
|
1008
|
+
* Accepts Readonly for compatibility with generated const objects
|
|
1009
|
+
*/
|
|
1010
|
+
primary?: Readonly<ActionButton>;
|
|
1011
|
+
/**
|
|
1012
|
+
* Secondary action buttons config (for form-actions pattern)
|
|
1013
|
+
* Accepts readonly array for compatibility with generated const arrays
|
|
1014
|
+
*/
|
|
1015
|
+
secondary?: readonly Readonly<ActionButton>[];
|
|
1016
|
+
/**
|
|
1017
|
+
* Visual variant
|
|
1018
|
+
* @default 'default'
|
|
1019
|
+
*/
|
|
1020
|
+
variant?: ButtonGroupVariant;
|
|
1021
|
+
/**
|
|
1022
|
+
* Orientation
|
|
1023
|
+
* @default 'horizontal'
|
|
1024
|
+
*/
|
|
1025
|
+
orientation?: 'horizontal' | 'vertical';
|
|
1026
|
+
/**
|
|
1027
|
+
* Additional CSS classes
|
|
1028
|
+
*/
|
|
1029
|
+
className?: string;
|
|
1030
|
+
/**
|
|
1031
|
+
* Entity type for filter-group pattern (schema metadata)
|
|
1032
|
+
*/
|
|
1033
|
+
entity?: string;
|
|
1034
|
+
/**
|
|
1035
|
+
* Filter definitions for filter-group pattern
|
|
1036
|
+
*/
|
|
1037
|
+
filters?: readonly FilterDefinition$1[];
|
|
1038
|
+
}
|
|
1039
|
+
declare const ButtonGroup: React__default.FC<ButtonGroupProps>;
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* FilterGroup Molecule Component
|
|
1043
|
+
*
|
|
1044
|
+
* A component for filtering entity data. Composes atoms (Button, Select, Badge, HStack)
|
|
1045
|
+
* and follows the design system using CSS variables.
|
|
1046
|
+
*
|
|
1047
|
+
* Implements the Closed Circuit principle:
|
|
1048
|
+
* - FilterGroup updates QuerySingleton filters via query prop
|
|
1049
|
+
* - FilterGroup emits UI:FILTER events for trait state machines
|
|
1050
|
+
* - entity-list/entity-cards read filtered data via query prop
|
|
1051
|
+
*
|
|
1052
|
+
* Supports Query Singleton pattern via `query` prop for std/Filter behavior.
|
|
1053
|
+
*/
|
|
1054
|
+
|
|
1055
|
+
/** Filter definition from schema */
|
|
1056
|
+
interface FilterDefinition {
|
|
1057
|
+
field: string;
|
|
1058
|
+
label: string;
|
|
1059
|
+
/** Filter type - 'date' renders a date picker, 'date-range'/'daterange' renders two date pickers */
|
|
1060
|
+
filterType?: "select" | "toggle" | "checkbox" | "date" | "daterange" | "date-range";
|
|
1061
|
+
/** Alias for filterType (schema compatibility) */
|
|
1062
|
+
type?: "select" | "toggle" | "checkbox" | "date" | "daterange" | "date-range";
|
|
1063
|
+
/** Options for select/toggle filters */
|
|
1064
|
+
options?: readonly string[];
|
|
1065
|
+
}
|
|
1066
|
+
interface FilterGroupProps {
|
|
1067
|
+
/** Entity name to filter */
|
|
1068
|
+
entity: string;
|
|
1069
|
+
/** Filter definitions from schema */
|
|
1070
|
+
filters: readonly FilterDefinition[];
|
|
1071
|
+
/** Callback when a filter changes - for EntityStore integration */
|
|
1072
|
+
onFilterChange?: (field: string, value: string | null) => void;
|
|
1073
|
+
/** Callback to clear all filters */
|
|
1074
|
+
onClearAll?: () => void;
|
|
1075
|
+
/** Additional CSS classes */
|
|
1076
|
+
className?: string;
|
|
1077
|
+
/** Variant style */
|
|
1078
|
+
variant?: "default" | "compact" | "pills" | "vertical";
|
|
1079
|
+
/** Show filter icon */
|
|
1080
|
+
showIcon?: boolean;
|
|
1081
|
+
/**
|
|
1082
|
+
* Query singleton binding for state management.
|
|
1083
|
+
* When provided, syncs filter state with the query singleton.
|
|
1084
|
+
* Example: "@TaskQuery"
|
|
1085
|
+
*/
|
|
1086
|
+
query?: string;
|
|
1087
|
+
/** Loading state indicator */
|
|
1088
|
+
isLoading?: boolean;
|
|
1089
|
+
}
|
|
1090
|
+
/**
|
|
1091
|
+
* FilterGroup - Renders filter controls for entity data
|
|
1092
|
+
* Uses atoms: Button, Select, Badge, HStack
|
|
1093
|
+
*/
|
|
1094
|
+
declare const FilterGroup: React__default.FC<FilterGroupProps>;
|
|
1095
|
+
|
|
1096
|
+
interface CardAction {
|
|
1097
|
+
label: string;
|
|
1098
|
+
onClick: () => void;
|
|
1099
|
+
variant?: "default" | "primary" | "danger";
|
|
1100
|
+
icon?: string;
|
|
1101
|
+
disabled?: boolean;
|
|
1102
|
+
}
|
|
1103
|
+
interface CardProps {
|
|
1104
|
+
/** Card title */
|
|
1105
|
+
title?: string;
|
|
1106
|
+
/** Card subtitle or description */
|
|
1107
|
+
subtitle?: string;
|
|
1108
|
+
/** Image URL to display at top of card */
|
|
1109
|
+
image?: string;
|
|
1110
|
+
/** Action buttons to display in card footer */
|
|
1111
|
+
actions?: CardAction[];
|
|
1112
|
+
/** Card content */
|
|
1113
|
+
children?: React__default.ReactNode;
|
|
1114
|
+
/** Click handler for the entire card */
|
|
1115
|
+
onClick?: () => void;
|
|
1116
|
+
/** Additional CSS classes */
|
|
1117
|
+
className?: string;
|
|
1118
|
+
}
|
|
1119
|
+
/**
|
|
1120
|
+
* Card component for displaying content in a contained box
|
|
1121
|
+
*/
|
|
1122
|
+
declare function Card({ title, subtitle, image, actions, children, onClick, className, }: CardProps): react_jsx_runtime.JSX.Element;
|
|
1123
|
+
|
|
1124
|
+
/**
|
|
1125
|
+
* Container Component
|
|
1126
|
+
*
|
|
1127
|
+
* A max-width wrapper that centers content horizontally.
|
|
1128
|
+
* Essential for controlling page width and maintaining consistent margins.
|
|
1129
|
+
*/
|
|
1130
|
+
|
|
1131
|
+
type ContainerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';
|
|
1132
|
+
type ContainerPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1133
|
+
interface ContainerProps {
|
|
1134
|
+
/** Maximum width */
|
|
1135
|
+
size?: ContainerSize;
|
|
1136
|
+
/** Alias for size (pattern compatibility) */
|
|
1137
|
+
maxWidth?: ContainerSize;
|
|
1138
|
+
/** Horizontal padding */
|
|
1139
|
+
padding?: ContainerPadding;
|
|
1140
|
+
/** Center horizontally */
|
|
1141
|
+
center?: boolean;
|
|
1142
|
+
/** Custom class name */
|
|
1143
|
+
className?: string;
|
|
1144
|
+
/** Children elements */
|
|
1145
|
+
children?: React__default.ReactNode;
|
|
1146
|
+
/** HTML element to render as */
|
|
1147
|
+
as?: React__default.ElementType;
|
|
1148
|
+
}
|
|
1149
|
+
/**
|
|
1150
|
+
* Container - Centers and constrains content width
|
|
1151
|
+
*/
|
|
1152
|
+
declare const Container: React__default.FC<ContainerProps>;
|
|
1153
|
+
|
|
1154
|
+
/**
|
|
1155
|
+
* Flex Component
|
|
1156
|
+
*
|
|
1157
|
+
* A flexbox wrapper with all common flex properties exposed as props.
|
|
1158
|
+
* More explicit than Stack for when you need full flex control.
|
|
1159
|
+
*/
|
|
1160
|
+
|
|
1161
|
+
type FlexDirection = 'row' | 'row-reverse' | 'col' | 'col-reverse';
|
|
1162
|
+
type FlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse';
|
|
1163
|
+
type FlexAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
1164
|
+
type FlexJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
|
|
1165
|
+
type FlexGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
1166
|
+
interface FlexProps {
|
|
1167
|
+
/** Flex direction */
|
|
1168
|
+
direction?: FlexDirection;
|
|
1169
|
+
/** Flex wrap */
|
|
1170
|
+
wrap?: FlexWrap;
|
|
1171
|
+
/** Align items */
|
|
1172
|
+
align?: FlexAlign;
|
|
1173
|
+
/** Justify content */
|
|
1174
|
+
justify?: FlexJustify;
|
|
1175
|
+
/** Gap between items */
|
|
1176
|
+
gap?: FlexGap;
|
|
1177
|
+
/** Inline flex */
|
|
1178
|
+
inline?: boolean;
|
|
1179
|
+
/** Flex grow */
|
|
1180
|
+
grow?: boolean | number;
|
|
1181
|
+
/** Flex shrink */
|
|
1182
|
+
shrink?: boolean | number;
|
|
1183
|
+
/** Flex basis */
|
|
1184
|
+
basis?: string | number;
|
|
1185
|
+
/** Custom class name */
|
|
1186
|
+
className?: string;
|
|
1187
|
+
/** Children elements */
|
|
1188
|
+
children: React__default.ReactNode;
|
|
1189
|
+
/** HTML element to render as */
|
|
1190
|
+
as?: React__default.ElementType;
|
|
1191
|
+
}
|
|
1192
|
+
/**
|
|
1193
|
+
* Flex - Full-featured flexbox container
|
|
1194
|
+
*/
|
|
1195
|
+
declare const Flex: React__default.FC<FlexProps>;
|
|
1196
|
+
|
|
1197
|
+
/**
|
|
1198
|
+
* FloatingActionButton Molecule Component
|
|
1199
|
+
*
|
|
1200
|
+
* A floating action button that can expand into multiple actions vertically.
|
|
1201
|
+
* Uses Button atom.
|
|
1202
|
+
*/
|
|
1203
|
+
|
|
1204
|
+
interface FloatingAction {
|
|
1205
|
+
/**
|
|
1206
|
+
* Action ID
|
|
1207
|
+
*/
|
|
1208
|
+
id: string;
|
|
1209
|
+
/**
|
|
1210
|
+
* Action label
|
|
1211
|
+
*/
|
|
1212
|
+
label: string;
|
|
1213
|
+
/**
|
|
1214
|
+
* Action icon
|
|
1215
|
+
*/
|
|
1216
|
+
icon: LucideIcon;
|
|
1217
|
+
/**
|
|
1218
|
+
* Action click handler
|
|
1219
|
+
*/
|
|
1220
|
+
onClick: () => void;
|
|
1221
|
+
/**
|
|
1222
|
+
* Action variant
|
|
1223
|
+
*/
|
|
1224
|
+
variant?: "primary" | "secondary" | "success" | "danger" | "warning";
|
|
1225
|
+
}
|
|
1226
|
+
interface FloatingActionButtonProps {
|
|
1227
|
+
/**
|
|
1228
|
+
* Single action (if only one action, button will directly trigger onClick)
|
|
1229
|
+
*/
|
|
1230
|
+
action?: {
|
|
1231
|
+
icon: LucideIcon;
|
|
1232
|
+
onClick: () => void;
|
|
1233
|
+
label?: string;
|
|
1234
|
+
variant?: "primary" | "secondary" | "success" | "danger" | "warning";
|
|
1235
|
+
};
|
|
1236
|
+
/**
|
|
1237
|
+
* Multiple actions (if provided, button will expand to show all actions)
|
|
1238
|
+
*/
|
|
1239
|
+
actions?: FloatingAction[];
|
|
1240
|
+
/**
|
|
1241
|
+
* Icon name (simplified API for pattern compatibility)
|
|
1242
|
+
*/
|
|
1243
|
+
icon?: string;
|
|
1244
|
+
/**
|
|
1245
|
+
* Click handler (simplified API for pattern compatibility)
|
|
1246
|
+
*/
|
|
1247
|
+
onClick?: () => void;
|
|
1248
|
+
/**
|
|
1249
|
+
* Variant (simplified API for pattern compatibility)
|
|
1250
|
+
*/
|
|
1251
|
+
variant?: "primary" | "secondary" | "success" | "danger" | "warning";
|
|
1252
|
+
/**
|
|
1253
|
+
* Button position
|
|
1254
|
+
* @default 'bottom-right'
|
|
1255
|
+
*/
|
|
1256
|
+
position?: "bottom-right" | "bottom-left" | "bottom-center" | "top-right" | "top-left" | "top-center" | string;
|
|
1257
|
+
/**
|
|
1258
|
+
* Additional CSS classes
|
|
1259
|
+
*/
|
|
1260
|
+
className?: string;
|
|
1261
|
+
}
|
|
1262
|
+
declare const FloatingActionButton: React__default.FC<FloatingActionButtonProps>;
|
|
1263
|
+
|
|
1264
|
+
/**
|
|
1265
|
+
* Grid Component
|
|
1266
|
+
*
|
|
1267
|
+
* A CSS Grid wrapper with responsive column support.
|
|
1268
|
+
* Useful for creating multi-column layouts.
|
|
1269
|
+
*/
|
|
1270
|
+
|
|
1271
|
+
type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'none';
|
|
1272
|
+
type GridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
1273
|
+
type GridAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
1274
|
+
type GridJustify = 'start' | 'center' | 'end' | 'stretch';
|
|
1275
|
+
interface ResponsiveGridCols {
|
|
1276
|
+
/** Base/mobile columns */
|
|
1277
|
+
base?: GridCols;
|
|
1278
|
+
/** Small screens (640px+) */
|
|
1279
|
+
sm?: GridCols;
|
|
1280
|
+
/** Medium screens (768px+) */
|
|
1281
|
+
md?: GridCols;
|
|
1282
|
+
/** Large screens (1024px+) */
|
|
1283
|
+
lg?: GridCols;
|
|
1284
|
+
/** Extra large screens (1280px+) */
|
|
1285
|
+
xl?: GridCols;
|
|
1286
|
+
}
|
|
1287
|
+
interface GridProps {
|
|
1288
|
+
/** Number of columns (can be responsive object) */
|
|
1289
|
+
cols?: GridCols | ResponsiveGridCols;
|
|
1290
|
+
/** Number of rows */
|
|
1291
|
+
rows?: number;
|
|
1292
|
+
/** Gap between items */
|
|
1293
|
+
gap?: GridGap;
|
|
1294
|
+
/** Row gap (overrides gap for rows) */
|
|
1295
|
+
rowGap?: GridGap;
|
|
1296
|
+
/** Column gap (overrides gap for columns) */
|
|
1297
|
+
colGap?: GridGap;
|
|
1298
|
+
/** Align items on block axis */
|
|
1299
|
+
alignItems?: GridAlign;
|
|
1300
|
+
/** Justify items on inline axis */
|
|
1301
|
+
justifyItems?: GridJustify;
|
|
1302
|
+
/** Auto-flow direction */
|
|
1303
|
+
flow?: 'row' | 'col' | 'row-dense' | 'col-dense';
|
|
1304
|
+
/** Custom class name */
|
|
1305
|
+
className?: string;
|
|
1306
|
+
/** Inline styles */
|
|
1307
|
+
style?: React__default.CSSProperties;
|
|
1308
|
+
/** Children elements */
|
|
1309
|
+
children: React__default.ReactNode;
|
|
1310
|
+
/** HTML element to render as */
|
|
1311
|
+
as?: React__default.ElementType;
|
|
1312
|
+
}
|
|
1313
|
+
/**
|
|
1314
|
+
* Grid - CSS Grid layout wrapper
|
|
1315
|
+
*/
|
|
1316
|
+
declare const Grid: React__default.FC<GridProps>;
|
|
1317
|
+
|
|
1318
|
+
/**
|
|
1319
|
+
* InputGroup Molecule Component
|
|
1320
|
+
*
|
|
1321
|
+
* A component for grouping input with addons (icons, buttons, text).
|
|
1322
|
+
* Uses Input, Button, Icon, and Typography atoms.
|
|
1323
|
+
*/
|
|
1324
|
+
|
|
1325
|
+
interface InputGroupProps extends Omit<InputProps, "icon" | "iconRight"> {
|
|
1326
|
+
/**
|
|
1327
|
+
* Left addon (icon, button, or text)
|
|
1328
|
+
*/
|
|
1329
|
+
leftAddon?: React__default.ReactNode | LucideIcon;
|
|
1330
|
+
/**
|
|
1331
|
+
* Right addon (icon, button, or text)
|
|
1332
|
+
*/
|
|
1333
|
+
rightAddon?: React__default.ReactNode | LucideIcon;
|
|
1334
|
+
/**
|
|
1335
|
+
* Additional CSS classes
|
|
1336
|
+
*/
|
|
1337
|
+
className?: string;
|
|
1338
|
+
}
|
|
1339
|
+
declare const InputGroup: React__default.FC<InputGroupProps>;
|
|
1340
|
+
|
|
1341
|
+
/**
|
|
1342
|
+
* Menu Molecule Component
|
|
1343
|
+
*
|
|
1344
|
+
* A dropdown menu component with items, icons, dividers, and sub-menus.
|
|
1345
|
+
* Uses theme-aware CSS variables for styling.
|
|
1346
|
+
*/
|
|
1347
|
+
|
|
1348
|
+
interface MenuItem {
|
|
1349
|
+
/** Item ID (auto-generated from label if not provided) */
|
|
1350
|
+
id?: string;
|
|
1351
|
+
/** Item label */
|
|
1352
|
+
label: string;
|
|
1353
|
+
/** Item icon (LucideIcon or string name) */
|
|
1354
|
+
icon?: LucideIcon | string;
|
|
1355
|
+
/** Item badge */
|
|
1356
|
+
badge?: string | number;
|
|
1357
|
+
/** Disable item */
|
|
1358
|
+
disabled?: boolean;
|
|
1359
|
+
/** Item click handler */
|
|
1360
|
+
onClick?: () => void;
|
|
1361
|
+
/** Event name for pattern compatibility */
|
|
1362
|
+
event?: string;
|
|
1363
|
+
/** Variant for styling (pattern compatibility) */
|
|
1364
|
+
variant?: "default" | "danger";
|
|
1365
|
+
/** Sub-menu items */
|
|
1366
|
+
subMenu?: MenuItem[];
|
|
1367
|
+
}
|
|
1368
|
+
type MenuPosition = "top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-start" | "top-end" | "bottom-start" | "bottom-end";
|
|
1369
|
+
interface MenuProps {
|
|
1370
|
+
/** Menu trigger element */
|
|
1371
|
+
trigger: React__default.ReactNode;
|
|
1372
|
+
/** Menu items */
|
|
1373
|
+
items: MenuItem[];
|
|
1374
|
+
/** Menu position */
|
|
1375
|
+
position?: MenuPosition;
|
|
1376
|
+
/** Additional CSS classes */
|
|
1377
|
+
className?: string;
|
|
1378
|
+
}
|
|
1379
|
+
declare const Menu: React__default.FC<MenuProps>;
|
|
1380
|
+
|
|
1381
|
+
/**
|
|
1382
|
+
* Modal Molecule Component
|
|
1383
|
+
*
|
|
1384
|
+
* A modal dialog component with overlay, header, content, and footer.
|
|
1385
|
+
* Uses theme-aware CSS variables for styling.
|
|
1386
|
+
*/
|
|
1387
|
+
|
|
1388
|
+
type ModalSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
1389
|
+
interface ModalProps {
|
|
1390
|
+
/** Whether the modal is open (defaults to true when rendered by slot wrapper) */
|
|
1391
|
+
isOpen?: boolean;
|
|
1392
|
+
/** Callback when modal should close (injected by slot wrapper) */
|
|
1393
|
+
onClose?: () => void;
|
|
1394
|
+
title?: string;
|
|
1395
|
+
/** Modal content (can be empty if using slot content) */
|
|
1396
|
+
children?: React__default.ReactNode;
|
|
1397
|
+
footer?: React__default.ReactNode;
|
|
1398
|
+
size?: ModalSize;
|
|
1399
|
+
showCloseButton?: boolean;
|
|
1400
|
+
closeOnOverlayClick?: boolean;
|
|
1401
|
+
closeOnEscape?: boolean;
|
|
1402
|
+
className?: string;
|
|
1403
|
+
}
|
|
1404
|
+
declare const Modal: React__default.FC<ModalProps>;
|
|
1405
|
+
|
|
1406
|
+
/**
|
|
1407
|
+
* Pagination Molecule Component
|
|
1408
|
+
*
|
|
1409
|
+
* A pagination component with page numbers, previous/next buttons, and ellipsis.
|
|
1410
|
+
* Uses Button, Icon, Typography, and Input atoms.
|
|
1411
|
+
*/
|
|
1412
|
+
|
|
1413
|
+
interface PaginationProps {
|
|
1414
|
+
/**
|
|
1415
|
+
* Current page (1-indexed)
|
|
1416
|
+
*/
|
|
1417
|
+
currentPage: number;
|
|
1418
|
+
/**
|
|
1419
|
+
* Total number of pages
|
|
1420
|
+
*/
|
|
1421
|
+
totalPages: number;
|
|
1422
|
+
/**
|
|
1423
|
+
* Callback when page changes (optional - can be a no-op if not interactive)
|
|
1424
|
+
*/
|
|
1425
|
+
onPageChange?: (page: number) => void;
|
|
1426
|
+
/**
|
|
1427
|
+
* Show page size selector
|
|
1428
|
+
* @default false
|
|
1429
|
+
*/
|
|
1430
|
+
showPageSize?: boolean;
|
|
1431
|
+
/**
|
|
1432
|
+
* Page size options
|
|
1433
|
+
*/
|
|
1434
|
+
pageSizeOptions?: number[];
|
|
1435
|
+
/**
|
|
1436
|
+
* Current page size
|
|
1437
|
+
*/
|
|
1438
|
+
pageSize?: number;
|
|
1439
|
+
/**
|
|
1440
|
+
* Callback when page size changes
|
|
1441
|
+
*/
|
|
1442
|
+
onPageSizeChange?: (size: number) => void;
|
|
1443
|
+
/**
|
|
1444
|
+
* Show jump to page input
|
|
1445
|
+
* @default false
|
|
1446
|
+
*/
|
|
1447
|
+
showJumpToPage?: boolean;
|
|
1448
|
+
/**
|
|
1449
|
+
* Show total count
|
|
1450
|
+
* @default false
|
|
1451
|
+
*/
|
|
1452
|
+
showTotal?: boolean;
|
|
1453
|
+
/**
|
|
1454
|
+
* Total items count
|
|
1455
|
+
*/
|
|
1456
|
+
totalItems?: number;
|
|
1457
|
+
/**
|
|
1458
|
+
* Maximum number of page buttons to show
|
|
1459
|
+
* @default 7
|
|
1460
|
+
*/
|
|
1461
|
+
maxVisiblePages?: number;
|
|
1462
|
+
/**
|
|
1463
|
+
* Additional CSS classes
|
|
1464
|
+
*/
|
|
1465
|
+
className?: string;
|
|
1466
|
+
}
|
|
1467
|
+
declare const Pagination: React__default.FC<PaginationProps>;
|
|
1468
|
+
|
|
1469
|
+
/**
|
|
1470
|
+
* Popover Molecule Component
|
|
1471
|
+
*
|
|
1472
|
+
* A popover component with position variants and click/hover triggers.
|
|
1473
|
+
* Uses Button, Typography, and Icon atoms.
|
|
1474
|
+
*/
|
|
1475
|
+
|
|
1476
|
+
type PopoverPosition = "top" | "bottom" | "left" | "right";
|
|
1477
|
+
type PopoverTrigger = "click" | "hover";
|
|
1478
|
+
interface PopoverProps {
|
|
1479
|
+
/**
|
|
1480
|
+
* Popover content
|
|
1481
|
+
*/
|
|
1482
|
+
content: React__default.ReactNode;
|
|
1483
|
+
/**
|
|
1484
|
+
* Popover trigger element (ReactElement or ReactNode that will be wrapped in span)
|
|
1485
|
+
*/
|
|
1486
|
+
children: React__default.ReactNode;
|
|
1487
|
+
/**
|
|
1488
|
+
* Popover position
|
|
1489
|
+
* @default 'bottom'
|
|
1490
|
+
*/
|
|
1491
|
+
position?: PopoverPosition;
|
|
1492
|
+
/**
|
|
1493
|
+
* Trigger type
|
|
1494
|
+
* @default 'click'
|
|
1495
|
+
*/
|
|
1496
|
+
trigger?: PopoverTrigger;
|
|
1497
|
+
/**
|
|
1498
|
+
* Show arrow
|
|
1499
|
+
* @default true
|
|
1500
|
+
*/
|
|
1501
|
+
showArrow?: boolean;
|
|
1502
|
+
/**
|
|
1503
|
+
* Additional CSS classes
|
|
1504
|
+
*/
|
|
1505
|
+
className?: string;
|
|
1506
|
+
}
|
|
1507
|
+
declare const Popover: React__default.FC<PopoverProps>;
|
|
1508
|
+
|
|
1509
|
+
/**
|
|
1510
|
+
* RelationSelect Molecule Component
|
|
1511
|
+
*
|
|
1512
|
+
* A searchable select component for relation fields.
|
|
1513
|
+
* Allows users to search and select from related entities.
|
|
1514
|
+
*
|
|
1515
|
+
* Composed from: Box, HStack, VStack, Input, Button, Spinner, Typography atoms
|
|
1516
|
+
*/
|
|
1517
|
+
|
|
1518
|
+
interface RelationOption {
|
|
1519
|
+
/** The value to store (typically the ID) */
|
|
1520
|
+
value: string;
|
|
1521
|
+
/** The display label */
|
|
1522
|
+
label: string;
|
|
1523
|
+
/** Optional description */
|
|
1524
|
+
description?: string;
|
|
1525
|
+
/** Whether this option is disabled */
|
|
1526
|
+
disabled?: boolean;
|
|
1527
|
+
}
|
|
1528
|
+
interface RelationSelectProps {
|
|
1529
|
+
/** Current value (ID) */
|
|
1530
|
+
value?: string;
|
|
1531
|
+
/** Callback when value changes */
|
|
1532
|
+
onChange?: (value: string | undefined) => void;
|
|
1533
|
+
/** Available options - accepts readonly for compatibility with generated const arrays */
|
|
1534
|
+
options: readonly RelationOption[];
|
|
1535
|
+
/** Placeholder text */
|
|
1536
|
+
placeholder?: string;
|
|
1537
|
+
/** Whether the field is required */
|
|
1538
|
+
required?: boolean;
|
|
1539
|
+
/** Whether the field is disabled */
|
|
1540
|
+
disabled?: boolean;
|
|
1541
|
+
/** Whether data is loading */
|
|
1542
|
+
isLoading?: boolean;
|
|
1543
|
+
/** Error message */
|
|
1544
|
+
error?: string;
|
|
1545
|
+
/** Allow clearing the selection */
|
|
1546
|
+
clearable?: boolean;
|
|
1547
|
+
/** Name attribute for forms */
|
|
1548
|
+
name?: string;
|
|
1549
|
+
/** Additional CSS classes */
|
|
1550
|
+
className?: string;
|
|
1551
|
+
/** Search placeholder */
|
|
1552
|
+
searchPlaceholder?: string;
|
|
1553
|
+
/** Empty state message */
|
|
1554
|
+
emptyMessage?: string;
|
|
1555
|
+
}
|
|
1556
|
+
declare const RelationSelect: React__default.FC<RelationSelectProps>;
|
|
1557
|
+
|
|
1558
|
+
/**
|
|
1559
|
+
* SearchInput Molecule Component
|
|
1560
|
+
*
|
|
1561
|
+
* A search input component with icon, clear button, and loading state.
|
|
1562
|
+
* Uses Input, Icon, Button, and Spinner atoms.
|
|
1563
|
+
*
|
|
1564
|
+
* Supports Query Singleton pattern via `query` prop for std/Search behavior.
|
|
1565
|
+
*/
|
|
1566
|
+
|
|
1567
|
+
interface SearchInputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
1568
|
+
/**
|
|
1569
|
+
* Search value (controlled mode)
|
|
1570
|
+
*/
|
|
1571
|
+
value?: string;
|
|
1572
|
+
/**
|
|
1573
|
+
* Callback when search value changes
|
|
1574
|
+
*/
|
|
1575
|
+
onSearch?: (value: string) => void;
|
|
1576
|
+
/**
|
|
1577
|
+
* Debounce delay in milliseconds
|
|
1578
|
+
* @default 300
|
|
1579
|
+
*/
|
|
1580
|
+
debounceMs?: number;
|
|
1581
|
+
/**
|
|
1582
|
+
* Show loading state
|
|
1583
|
+
* @default false
|
|
1584
|
+
*/
|
|
1585
|
+
isLoading?: boolean;
|
|
1586
|
+
/**
|
|
1587
|
+
* Placeholder text
|
|
1588
|
+
* @default 'Search...'
|
|
1589
|
+
*/
|
|
1590
|
+
placeholder?: string;
|
|
1591
|
+
/**
|
|
1592
|
+
* Show clear button
|
|
1593
|
+
* @default true
|
|
1594
|
+
*/
|
|
1595
|
+
clearable?: boolean;
|
|
1596
|
+
/**
|
|
1597
|
+
* Additional CSS classes
|
|
1598
|
+
*/
|
|
1599
|
+
className?: string;
|
|
1600
|
+
/**
|
|
1601
|
+
* Event name to dispatch on search (schema metadata, wired by trait)
|
|
1602
|
+
* This is metadata used by the trait generator, not by the component.
|
|
1603
|
+
*/
|
|
1604
|
+
event?: string;
|
|
1605
|
+
/**
|
|
1606
|
+
* Entity type for context-aware search.
|
|
1607
|
+
* When provided, search events include entity context.
|
|
1608
|
+
*/
|
|
1609
|
+
entity?: string;
|
|
1610
|
+
/**
|
|
1611
|
+
* Query singleton binding for state management.
|
|
1612
|
+
* When provided, syncs search state with the query singleton.
|
|
1613
|
+
* Example: "@TaskQuery"
|
|
1614
|
+
*/
|
|
1615
|
+
query?: string;
|
|
1616
|
+
}
|
|
1617
|
+
declare const SearchInput: React__default.FC<SearchInputProps>;
|
|
1618
|
+
|
|
1619
|
+
/**
|
|
1620
|
+
* SidePanel Molecule Component
|
|
1621
|
+
*
|
|
1622
|
+
* A side panel that slides in from the right (or left) with header and content.
|
|
1623
|
+
* Uses Button, Typography atoms.
|
|
1624
|
+
*/
|
|
1625
|
+
|
|
1626
|
+
interface SidePanelProps {
|
|
1627
|
+
/**
|
|
1628
|
+
* Panel title
|
|
1629
|
+
*/
|
|
1630
|
+
title: string;
|
|
1631
|
+
/**
|
|
1632
|
+
* Panel content
|
|
1633
|
+
*/
|
|
1634
|
+
children: React__default.ReactNode;
|
|
1635
|
+
/**
|
|
1636
|
+
* Is panel open
|
|
1637
|
+
*/
|
|
1638
|
+
isOpen: boolean;
|
|
1639
|
+
/**
|
|
1640
|
+
* On close handler
|
|
1641
|
+
*/
|
|
1642
|
+
onClose: () => void;
|
|
1643
|
+
/**
|
|
1644
|
+
* Panel width
|
|
1645
|
+
* @default 'w-96'
|
|
1646
|
+
*/
|
|
1647
|
+
width?: string;
|
|
1648
|
+
/**
|
|
1649
|
+
* Panel position
|
|
1650
|
+
* @default 'right'
|
|
1651
|
+
*/
|
|
1652
|
+
position?: "left" | "right";
|
|
1653
|
+
/**
|
|
1654
|
+
* Show overlay on mobile
|
|
1655
|
+
* @default true
|
|
1656
|
+
*/
|
|
1657
|
+
showOverlay?: boolean;
|
|
1658
|
+
/**
|
|
1659
|
+
* Additional CSS classes
|
|
1660
|
+
*/
|
|
1661
|
+
className?: string;
|
|
1662
|
+
}
|
|
1663
|
+
declare const SidePanel: React__default.FC<SidePanelProps>;
|
|
1664
|
+
|
|
1665
|
+
/**
|
|
1666
|
+
* SimpleGrid Component
|
|
1667
|
+
*
|
|
1668
|
+
* A simplified grid that automatically adjusts columns based on available space.
|
|
1669
|
+
* Perfect for card layouts and item collections.
|
|
1670
|
+
*/
|
|
1671
|
+
|
|
1672
|
+
type SimpleGridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1673
|
+
interface SimpleGridProps {
|
|
1674
|
+
/** Minimum width of each child (e.g., 200, "200px", "15rem") */
|
|
1675
|
+
minChildWidth?: number | string;
|
|
1676
|
+
/** Maximum number of columns */
|
|
1677
|
+
maxCols?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
1678
|
+
/** Exact number of columns (disables auto-fit) */
|
|
1679
|
+
cols?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
1680
|
+
/** Gap between items */
|
|
1681
|
+
gap?: SimpleGridGap;
|
|
1682
|
+
/** Custom class name */
|
|
1683
|
+
className?: string;
|
|
1684
|
+
/** Children elements */
|
|
1685
|
+
children: React__default.ReactNode;
|
|
1686
|
+
}
|
|
1687
|
+
/**
|
|
1688
|
+
* SimpleGrid - Auto-responsive grid layout
|
|
1689
|
+
*/
|
|
1690
|
+
declare const SimpleGrid: React__default.FC<SimpleGridProps>;
|
|
1691
|
+
|
|
1692
|
+
/**
|
|
1693
|
+
* Tabs Molecule Component
|
|
1694
|
+
*
|
|
1695
|
+
* A tabbed interface component with keyboard navigation and badge support.
|
|
1696
|
+
* Uses theme-aware CSS variables for styling.
|
|
1697
|
+
*/
|
|
1698
|
+
|
|
1699
|
+
interface TabItem {
|
|
1700
|
+
/** Tab ID */
|
|
1701
|
+
id: string;
|
|
1702
|
+
/** Tab label */
|
|
1703
|
+
label: string;
|
|
1704
|
+
/** Tab content - optional for event-driven tabs */
|
|
1705
|
+
content?: React__default.ReactNode;
|
|
1706
|
+
/** Tab icon */
|
|
1707
|
+
icon?: LucideIcon;
|
|
1708
|
+
/** Tab badge */
|
|
1709
|
+
badge?: string | number;
|
|
1710
|
+
/** Disable tab */
|
|
1711
|
+
disabled?: boolean;
|
|
1712
|
+
/** Event to emit when tab is clicked (for trait state machine integration) */
|
|
1713
|
+
event?: string;
|
|
1714
|
+
/** Whether this tab is currently active (for controlled tabs) */
|
|
1715
|
+
active?: boolean;
|
|
1716
|
+
}
|
|
1717
|
+
interface TabsProps {
|
|
1718
|
+
/** Tab items */
|
|
1719
|
+
items?: TabItem[];
|
|
1720
|
+
/** Tab items (alias for items - used by generated code) */
|
|
1721
|
+
tabs?: TabItem[];
|
|
1722
|
+
/** Default active tab ID */
|
|
1723
|
+
defaultActiveTab?: string;
|
|
1724
|
+
/** Controlled active tab ID */
|
|
1725
|
+
activeTab?: string;
|
|
1726
|
+
/** Callback when tab changes */
|
|
1727
|
+
onTabChange?: (tabId: string) => void;
|
|
1728
|
+
/** Tab variant */
|
|
1729
|
+
variant?: 'default' | 'pills' | 'underline';
|
|
1730
|
+
/** Tab orientation */
|
|
1731
|
+
orientation?: 'horizontal' | 'vertical';
|
|
1732
|
+
/** Additional CSS classes */
|
|
1733
|
+
className?: string;
|
|
1734
|
+
}
|
|
1735
|
+
declare const Tabs: React__default.FC<TabsProps>;
|
|
1736
|
+
|
|
1737
|
+
/**
|
|
1738
|
+
* Toast Molecule Component
|
|
1739
|
+
*
|
|
1740
|
+
* A toast notification component with auto-dismiss and action buttons.
|
|
1741
|
+
* Uses theme-aware CSS variables for styling.
|
|
1742
|
+
*/
|
|
1743
|
+
|
|
1744
|
+
type ToastVariant = "success" | "error" | "info" | "warning";
|
|
1745
|
+
interface ToastProps {
|
|
1746
|
+
/** Toast variant */
|
|
1747
|
+
variant?: ToastVariant;
|
|
1748
|
+
/** Toast message */
|
|
1749
|
+
message: string;
|
|
1750
|
+
/** Toast title (optional) */
|
|
1751
|
+
title?: string;
|
|
1752
|
+
/** Auto-dismiss duration in milliseconds (0 = no auto-dismiss) */
|
|
1753
|
+
duration?: number;
|
|
1754
|
+
/** Show dismiss button */
|
|
1755
|
+
dismissible?: boolean;
|
|
1756
|
+
/** Callback when toast is dismissed */
|
|
1757
|
+
onDismiss?: () => void;
|
|
1758
|
+
/** Action button label */
|
|
1759
|
+
actionLabel?: string;
|
|
1760
|
+
/** Action button click handler */
|
|
1761
|
+
onAction?: () => void;
|
|
1762
|
+
/** Badge count (optional) */
|
|
1763
|
+
badge?: string | number;
|
|
1764
|
+
/** Additional CSS classes */
|
|
1765
|
+
className?: string;
|
|
1766
|
+
}
|
|
1767
|
+
declare const Toast: React__default.FC<ToastProps>;
|
|
1768
|
+
|
|
1769
|
+
/**
|
|
1770
|
+
* Tooltip Molecule Component
|
|
1771
|
+
*
|
|
1772
|
+
* A tooltip component with position variants and delay options.
|
|
1773
|
+
* Uses theme-aware CSS variables for styling.
|
|
1774
|
+
*/
|
|
1775
|
+
|
|
1776
|
+
type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
1777
|
+
interface TooltipProps {
|
|
1778
|
+
/** Tooltip content */
|
|
1779
|
+
content: React__default.ReactNode;
|
|
1780
|
+
/** Tooltip trigger element (ReactElement or ReactNode that will be wrapped in span) */
|
|
1781
|
+
children: React__default.ReactNode;
|
|
1782
|
+
/** Tooltip position */
|
|
1783
|
+
position?: TooltipPosition;
|
|
1784
|
+
/** Show delay in milliseconds */
|
|
1785
|
+
delay?: number;
|
|
1786
|
+
/** Hide delay in milliseconds */
|
|
1787
|
+
hideDelay?: number;
|
|
1788
|
+
/** Show arrow */
|
|
1789
|
+
showArrow?: boolean;
|
|
1790
|
+
/** Additional CSS classes */
|
|
1791
|
+
className?: string;
|
|
1792
|
+
}
|
|
1793
|
+
declare const Tooltip: React__default.FC<TooltipProps>;
|
|
1794
|
+
|
|
1795
|
+
/**
|
|
1796
|
+
* Drawer Molecule Component
|
|
1797
|
+
*
|
|
1798
|
+
* A slide-in drawer component for displaying secondary content.
|
|
1799
|
+
* Used by the UI Slot system for render_ui effects targeting the drawer slot.
|
|
1800
|
+
*
|
|
1801
|
+
* Features:
|
|
1802
|
+
* - Left/right positioning
|
|
1803
|
+
* - Configurable width
|
|
1804
|
+
* - Overlay backdrop
|
|
1805
|
+
* - Click-outside to dismiss
|
|
1806
|
+
* - Slide animation
|
|
1807
|
+
* - Escape key to close
|
|
1808
|
+
*
|
|
1809
|
+
* @packageDocumentation
|
|
1810
|
+
*/
|
|
1811
|
+
|
|
1812
|
+
type DrawerPosition = "left" | "right";
|
|
1813
|
+
type DrawerSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
1814
|
+
interface DrawerProps {
|
|
1815
|
+
/** Whether the drawer is open (defaults to true when rendered by slot wrapper) */
|
|
1816
|
+
isOpen?: boolean;
|
|
1817
|
+
/** Callback when drawer should close (injected by slot wrapper) */
|
|
1818
|
+
onClose?: () => void;
|
|
1819
|
+
/** Drawer title */
|
|
1820
|
+
title?: string;
|
|
1821
|
+
/** Drawer content (can be empty if using slot content) */
|
|
1822
|
+
children?: React__default.ReactNode;
|
|
1823
|
+
/** Footer content */
|
|
1824
|
+
footer?: React__default.ReactNode;
|
|
1825
|
+
/** Position (left or right) */
|
|
1826
|
+
position?: DrawerPosition;
|
|
1827
|
+
/** Width (CSS value or preset size) */
|
|
1828
|
+
width?: string | DrawerSize;
|
|
1829
|
+
/** Show close button */
|
|
1830
|
+
showCloseButton?: boolean;
|
|
1831
|
+
/** Close on overlay click */
|
|
1832
|
+
closeOnOverlayClick?: boolean;
|
|
1833
|
+
/** Close on escape key */
|
|
1834
|
+
closeOnEscape?: boolean;
|
|
1835
|
+
/** Additional class name */
|
|
1836
|
+
className?: string;
|
|
1837
|
+
}
|
|
1838
|
+
declare const Drawer: React__default.FC<DrawerProps>;
|
|
1839
|
+
|
|
1840
|
+
/**
|
|
1841
|
+
* WizardProgress Component
|
|
1842
|
+
*
|
|
1843
|
+
* Step progress indicator for multi-step wizards.
|
|
1844
|
+
* Shows current step, completed steps, and allows navigation to completed steps.
|
|
1845
|
+
*
|
|
1846
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
1847
|
+
*/
|
|
1848
|
+
|
|
1849
|
+
/**
|
|
1850
|
+
* Step info needed by WizardProgress.
|
|
1851
|
+
* Compatible with WizardContainer's WizardStep (subset of fields).
|
|
1852
|
+
*/
|
|
1853
|
+
interface WizardProgressStep {
|
|
1854
|
+
/** Step identifier */
|
|
1855
|
+
id: string;
|
|
1856
|
+
/** Step title */
|
|
1857
|
+
title: string;
|
|
1858
|
+
/** Step description (optional) */
|
|
1859
|
+
description?: string;
|
|
1860
|
+
}
|
|
1861
|
+
interface WizardProgressProps {
|
|
1862
|
+
/** Step definitions (compatible with WizardContainer's WizardStep) */
|
|
1863
|
+
steps: WizardProgressStep[];
|
|
1864
|
+
/** Current step index (0-based) */
|
|
1865
|
+
currentStep: number;
|
|
1866
|
+
/** Callback when a completed step is clicked */
|
|
1867
|
+
onStepClick?: (stepIndex: number) => void;
|
|
1868
|
+
/** Allow clicking on completed steps to navigate back */
|
|
1869
|
+
allowNavigation?: boolean;
|
|
1870
|
+
/** Compact mode (smaller, no titles) */
|
|
1871
|
+
compact?: boolean;
|
|
1872
|
+
/** Additional CSS classes */
|
|
1873
|
+
className?: string;
|
|
1874
|
+
}
|
|
1875
|
+
/**
|
|
1876
|
+
* WizardProgress - Step progress indicator
|
|
1877
|
+
*/
|
|
1878
|
+
declare const WizardProgress: React__default.FC<WizardProgressProps>;
|
|
1879
|
+
|
|
1880
|
+
/**
|
|
1881
|
+
* WizardNavigation Component
|
|
1882
|
+
*
|
|
1883
|
+
* Navigation buttons for multi-step wizards.
|
|
1884
|
+
* Includes Back, Next, and Complete buttons with proper state handling.
|
|
1885
|
+
*
|
|
1886
|
+
* Emits events via useEventBus for trait integration.
|
|
1887
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
1888
|
+
*/
|
|
1889
|
+
|
|
1890
|
+
interface WizardNavigationProps {
|
|
1891
|
+
/** Current step index (0-based) */
|
|
1892
|
+
currentStep: number;
|
|
1893
|
+
/** Total number of steps */
|
|
1894
|
+
totalSteps: number;
|
|
1895
|
+
/** Whether the current step is valid (enables Next/Complete) */
|
|
1896
|
+
isValid?: boolean;
|
|
1897
|
+
/** Show the Back button */
|
|
1898
|
+
showBack?: boolean;
|
|
1899
|
+
/** Show the Next button */
|
|
1900
|
+
showNext?: boolean;
|
|
1901
|
+
/** Show the Complete button (on last step) */
|
|
1902
|
+
showComplete?: boolean;
|
|
1903
|
+
/** Custom label for Back button */
|
|
1904
|
+
backLabel?: string;
|
|
1905
|
+
/** Custom label for Next button */
|
|
1906
|
+
nextLabel?: string;
|
|
1907
|
+
/** Custom label for Complete button */
|
|
1908
|
+
completeLabel?: string;
|
|
1909
|
+
/** Event to emit on Back click */
|
|
1910
|
+
onBack?: string;
|
|
1911
|
+
/** Event to emit on Next click */
|
|
1912
|
+
onNext?: string;
|
|
1913
|
+
/** Event to emit on Complete click */
|
|
1914
|
+
onComplete?: string;
|
|
1915
|
+
/** Direct callback for Back (alternative to event) */
|
|
1916
|
+
onBackClick?: () => void;
|
|
1917
|
+
/** Direct callback for Next (alternative to event) */
|
|
1918
|
+
onNextClick?: () => void;
|
|
1919
|
+
/** Direct callback for Complete (alternative to event) */
|
|
1920
|
+
onCompleteClick?: () => void;
|
|
1921
|
+
/** Compact mode (smaller padding) */
|
|
1922
|
+
compact?: boolean;
|
|
1923
|
+
/** Additional CSS classes */
|
|
1924
|
+
className?: string;
|
|
1925
|
+
}
|
|
1926
|
+
/**
|
|
1927
|
+
* WizardNavigation - Wizard navigation buttons
|
|
1928
|
+
*/
|
|
1929
|
+
declare const WizardNavigation: React__default.FC<WizardNavigationProps>;
|
|
1930
|
+
|
|
1931
|
+
/**
|
|
1932
|
+
* RepeatableFormSection
|
|
1933
|
+
*
|
|
1934
|
+
* A form section that can be repeated multiple times.
|
|
1935
|
+
* Used for collecting multiple entries (participants, findings, etc.)
|
|
1936
|
+
*
|
|
1937
|
+
* Enhanced with trackAddedInState for inspection audit trails.
|
|
1938
|
+
*
|
|
1939
|
+
* Event Contract:
|
|
1940
|
+
* - Emits: UI:SECTION_ADDED { sectionType, index, addedInState? }
|
|
1941
|
+
* - Emits: UI:SECTION_REMOVED { sectionType, index, itemId }
|
|
1942
|
+
*/
|
|
1943
|
+
|
|
1944
|
+
interface RepeatableItem {
|
|
1945
|
+
id: string;
|
|
1946
|
+
/** State in which this item was added (for audit trails) */
|
|
1947
|
+
addedInState?: string;
|
|
1948
|
+
/** Timestamp when item was added */
|
|
1949
|
+
addedAt?: string;
|
|
1950
|
+
[key: string]: unknown;
|
|
1951
|
+
}
|
|
1952
|
+
interface RepeatableFormSectionProps {
|
|
1953
|
+
/** Section type identifier */
|
|
1954
|
+
sectionType: string;
|
|
1955
|
+
/** Section title */
|
|
1956
|
+
title: string;
|
|
1957
|
+
/** Items in the section */
|
|
1958
|
+
items: RepeatableItem[];
|
|
1959
|
+
/** Render function for each item */
|
|
1960
|
+
renderItem: (item: RepeatableItem, index: number) => React__default.ReactNode;
|
|
1961
|
+
/** Minimum items required */
|
|
1962
|
+
minItems?: number;
|
|
1963
|
+
/** Maximum items allowed */
|
|
1964
|
+
maxItems?: number;
|
|
1965
|
+
/** Allow reordering */
|
|
1966
|
+
allowReorder?: boolean;
|
|
1967
|
+
/** Add button label */
|
|
1968
|
+
addLabel?: string;
|
|
1969
|
+
/** Empty state message */
|
|
1970
|
+
emptyMessage?: string;
|
|
1971
|
+
/** Read-only mode */
|
|
1972
|
+
readOnly?: boolean;
|
|
1973
|
+
/** Additional CSS classes */
|
|
1974
|
+
className?: string;
|
|
1975
|
+
/** Add handler */
|
|
1976
|
+
onAdd?: () => void;
|
|
1977
|
+
/** Remove handler */
|
|
1978
|
+
onRemove?: (itemId: string, index: number) => void;
|
|
1979
|
+
/** Reorder handler */
|
|
1980
|
+
onReorder?: (fromIndex: number, toIndex: number) => void;
|
|
1981
|
+
/** Track the state in which items are added (for inspection audit) */
|
|
1982
|
+
trackAddedInState?: boolean;
|
|
1983
|
+
/** Current inspection state (used when trackAddedInState is true) */
|
|
1984
|
+
currentState?: string;
|
|
1985
|
+
/** Show audit metadata (addedInState, addedAt) */
|
|
1986
|
+
showAuditInfo?: boolean;
|
|
1987
|
+
}
|
|
1988
|
+
declare const RepeatableFormSection: React__default.FC<RepeatableFormSectionProps>;
|
|
1989
|
+
|
|
1990
|
+
/**
|
|
1991
|
+
* ViolationAlert
|
|
1992
|
+
*
|
|
1993
|
+
* Displays inspection violations with law references and action types.
|
|
1994
|
+
* Used in inspection forms to show detected compliance violations.
|
|
1995
|
+
*
|
|
1996
|
+
* Action Types:
|
|
1997
|
+
* - measure: Corrective measure required (warning)
|
|
1998
|
+
* - admin: Administrative action (error)
|
|
1999
|
+
* - penalty: Penalty proceedings (error, severe)
|
|
2000
|
+
*/
|
|
2001
|
+
|
|
2002
|
+
interface ViolationRecord {
|
|
2003
|
+
/** Unique violation identifier */
|
|
2004
|
+
id: string;
|
|
2005
|
+
/** Law reference (e.g., "ZVPOT-1") */
|
|
2006
|
+
law: string;
|
|
2007
|
+
/** Article reference (e.g., "14/1") */
|
|
2008
|
+
article: string;
|
|
2009
|
+
/** Violation message */
|
|
2010
|
+
message: string;
|
|
2011
|
+
/** Action type determines severity */
|
|
2012
|
+
actionType: "measure" | "admin" | "penalty";
|
|
2013
|
+
/** Administrative action reference (e.g., "ZVPOT-1 234/1-4") */
|
|
2014
|
+
adminAction?: string;
|
|
2015
|
+
/** Penalty action reference (e.g., "ZVPOT-1 240/1-9") */
|
|
2016
|
+
penaltyAction?: string;
|
|
2017
|
+
/** Field that triggered this violation */
|
|
2018
|
+
fieldId?: string;
|
|
2019
|
+
/** Tab/form where violation occurred */
|
|
2020
|
+
tabId?: string;
|
|
2021
|
+
}
|
|
2022
|
+
interface ViolationAlertProps {
|
|
2023
|
+
/** Violation data */
|
|
2024
|
+
violation: ViolationRecord;
|
|
2025
|
+
/** Visual severity (derived from actionType if not specified) */
|
|
2026
|
+
severity?: "warning" | "error";
|
|
2027
|
+
/** Dismissible alert */
|
|
2028
|
+
dismissible?: boolean;
|
|
2029
|
+
/** Dismiss handler */
|
|
2030
|
+
onDismiss?: () => void;
|
|
2031
|
+
/** Navigate to the field that caused violation */
|
|
2032
|
+
onNavigateToField?: (fieldId: string) => void;
|
|
2033
|
+
/** Compact display mode */
|
|
2034
|
+
compact?: boolean;
|
|
2035
|
+
/** Additional CSS classes */
|
|
2036
|
+
className?: string;
|
|
2037
|
+
}
|
|
2038
|
+
declare const ViolationAlert: React__default.FC<ViolationAlertProps>;
|
|
2039
|
+
|
|
2040
|
+
/**
|
|
2041
|
+
* FormSectionHeader
|
|
2042
|
+
*
|
|
2043
|
+
* Header component for collapsible form sections.
|
|
2044
|
+
* Provides consistent styling and interaction for section headers.
|
|
2045
|
+
*/
|
|
2046
|
+
|
|
2047
|
+
interface FormSectionHeaderProps {
|
|
2048
|
+
/** Section title */
|
|
2049
|
+
title: string;
|
|
2050
|
+
/** Section subtitle */
|
|
2051
|
+
subtitle?: string;
|
|
2052
|
+
/** Whether section is collapsed */
|
|
2053
|
+
isCollapsed?: boolean;
|
|
2054
|
+
/** Toggle collapse handler (makes header clickable) */
|
|
2055
|
+
onToggle?: () => void;
|
|
2056
|
+
/** Badge text (e.g., "3 fields", "Required", "Complete") */
|
|
2057
|
+
badge?: string;
|
|
2058
|
+
/** Badge variant */
|
|
2059
|
+
badgeVariant?: "default" | "primary" | "success" | "warning" | "danger";
|
|
2060
|
+
/** Icon name to show before title */
|
|
2061
|
+
icon?: string;
|
|
2062
|
+
/** Whether section has validation errors */
|
|
2063
|
+
hasErrors?: boolean;
|
|
2064
|
+
/** Whether section is complete */
|
|
2065
|
+
isComplete?: boolean;
|
|
2066
|
+
/** Additional CSS classes */
|
|
2067
|
+
className?: string;
|
|
2068
|
+
}
|
|
2069
|
+
declare const FormSectionHeader: React__default.FC<FormSectionHeaderProps>;
|
|
2070
|
+
|
|
2071
|
+
interface Column<T> {
|
|
2072
|
+
key: keyof T | string;
|
|
2073
|
+
header: string;
|
|
2074
|
+
width?: string;
|
|
2075
|
+
sortable?: boolean;
|
|
2076
|
+
render?: (value: unknown, row: T, index: number) => React__default.ReactNode;
|
|
2077
|
+
}
|
|
2078
|
+
interface RowAction<T> {
|
|
2079
|
+
label: string;
|
|
2080
|
+
icon?: LucideIcon;
|
|
2081
|
+
onClick: (row: T) => void;
|
|
2082
|
+
variant?: "default" | "danger";
|
|
2083
|
+
show?: (row: T) => boolean;
|
|
2084
|
+
/** Event name for testability (data-event attribute) */
|
|
2085
|
+
event?: string;
|
|
2086
|
+
}
|
|
2087
|
+
interface DataTableProps<T extends {
|
|
2088
|
+
id: string | number;
|
|
2089
|
+
}> {
|
|
2090
|
+
/** Fields to display - accepts string[] or Column[] for unified interface. Alias for columns */
|
|
2091
|
+
fields?: readonly Column<T>[] | readonly string[];
|
|
2092
|
+
/** Columns can be Column objects or simple string field names - accepts readonly for generated const arrays */
|
|
2093
|
+
columns?: readonly Column<T>[] | readonly string[];
|
|
2094
|
+
/** Data array - primary prop for data. Accepts readonly or mutable arrays, and unknown for generated components */
|
|
2095
|
+
data?: readonly T[] | T[] | readonly unknown[] | unknown[] | unknown;
|
|
2096
|
+
/** Entity name for auto-fetch OR data array (backwards compatible) */
|
|
2097
|
+
entity?: string | readonly T[] | T[];
|
|
2098
|
+
/** Item actions from generated code - maps to rowActions */
|
|
2099
|
+
itemActions?: readonly {
|
|
2100
|
+
label: string;
|
|
2101
|
+
event?: string;
|
|
2102
|
+
/** Navigation URL - supports template interpolation like "/products/{{id}}" or "/products/:id" */
|
|
2103
|
+
navigatesTo?: string;
|
|
2104
|
+
/** Action used by generated code - alternative to event */
|
|
2105
|
+
action?: string;
|
|
2106
|
+
/** Placement accepts string for compatibility with generated code */
|
|
2107
|
+
placement?: "row" | "bulk" | string;
|
|
2108
|
+
icon?: LucideIcon;
|
|
2109
|
+
/** Variant accepts all button variants for compatibility */
|
|
2110
|
+
variant?: "default" | "primary" | "secondary" | "ghost" | "danger" | string;
|
|
2111
|
+
/** Click handler from generated code */
|
|
2112
|
+
onClick?: (row: T) => void;
|
|
2113
|
+
}[];
|
|
2114
|
+
/** Loading state indicator */
|
|
2115
|
+
isLoading?: boolean;
|
|
2116
|
+
/** Error state */
|
|
2117
|
+
error?: Error | null;
|
|
2118
|
+
emptyIcon?: LucideIcon;
|
|
2119
|
+
emptyTitle?: string;
|
|
2120
|
+
emptyDescription?: string;
|
|
2121
|
+
emptyAction?: {
|
|
2122
|
+
label: string;
|
|
2123
|
+
onClick: () => void;
|
|
2124
|
+
};
|
|
2125
|
+
selectable?: boolean;
|
|
2126
|
+
selectedIds?: readonly (string | number)[];
|
|
2127
|
+
onSelectionChange?: (ids: (string | number)[]) => void;
|
|
2128
|
+
sortBy?: string;
|
|
2129
|
+
sortDirection?: "asc" | "desc";
|
|
2130
|
+
onSort?: (key: string, direction: "asc" | "desc") => void;
|
|
2131
|
+
pagination?: {
|
|
2132
|
+
page: number;
|
|
2133
|
+
pageSize: number;
|
|
2134
|
+
total: number;
|
|
2135
|
+
onPageChange: (page: number) => void;
|
|
2136
|
+
onPageSizeChange?: (size: number) => void;
|
|
2137
|
+
};
|
|
2138
|
+
enablePagination?: boolean;
|
|
2139
|
+
/** Items per page for automatic pagination (default: 20) */
|
|
2140
|
+
defaultPageSize?: number;
|
|
2141
|
+
/** Show total count in pagination */
|
|
2142
|
+
showTotal?: boolean;
|
|
2143
|
+
searchable?: boolean;
|
|
2144
|
+
searchValue?: string;
|
|
2145
|
+
onSearch?: (value: string) => void;
|
|
2146
|
+
searchPlaceholder?: string;
|
|
2147
|
+
onRowClick?: (row: T) => void;
|
|
2148
|
+
rowActions?: readonly RowAction<T>[];
|
|
2149
|
+
bulkActions?: ReadonlyArray<{
|
|
2150
|
+
label: string;
|
|
2151
|
+
icon?: LucideIcon;
|
|
2152
|
+
onClick: (selectedRows: T[]) => void;
|
|
2153
|
+
variant?: "default" | "danger";
|
|
2154
|
+
}>;
|
|
2155
|
+
headerActions?: React__default.ReactNode;
|
|
2156
|
+
/**
|
|
2157
|
+
* Query singleton binding for filter/sort state.
|
|
2158
|
+
* When provided, syncs with the query singleton for filtering and sorting.
|
|
2159
|
+
* Example: "@TaskQuery"
|
|
2160
|
+
*/
|
|
2161
|
+
query?: string;
|
|
2162
|
+
className?: string;
|
|
2163
|
+
}
|
|
2164
|
+
declare function DataTable<T extends {
|
|
2165
|
+
id: string | number;
|
|
2166
|
+
}>({ fields, columns, data, entity, itemActions, isLoading, error: externalError, emptyIcon, emptyTitle, emptyDescription, emptyAction, selectable, selectedIds, onSelectionChange, sortBy: externalSortBy, sortDirection: externalSortDirection, onSort, pagination, enablePagination, defaultPageSize, showTotal, searchable, searchValue, onSearch, searchPlaceholder, onRowClick, rowActions: externalRowActions, bulkActions, headerActions, query, className, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
2167
|
+
|
|
2168
|
+
/**
|
|
2169
|
+
* Schema metric definition
|
|
2170
|
+
* Supports both computed metrics (with field) and static metrics (with value)
|
|
2171
|
+
*/
|
|
2172
|
+
interface MetricDefinition {
|
|
2173
|
+
/** Field name for computed metrics (optional if value is provided) */
|
|
2174
|
+
field?: string;
|
|
2175
|
+
/** Display label */
|
|
2176
|
+
label: string;
|
|
2177
|
+
/** Static value for display (alternative to field-based computation) */
|
|
2178
|
+
value?: string | number;
|
|
2179
|
+
/** Icon name for display */
|
|
2180
|
+
icon?: string;
|
|
2181
|
+
/** Value format (e.g., 'currency', 'percent', 'number') */
|
|
2182
|
+
format?: "currency" | "percent" | "number" | string;
|
|
2183
|
+
}
|
|
2184
|
+
interface StatCardProps {
|
|
2185
|
+
/** Main label */
|
|
2186
|
+
label?: string;
|
|
2187
|
+
/** Title (alias for label) */
|
|
2188
|
+
title?: string;
|
|
2189
|
+
/** Primary value - accepts array/unknown from generated code (will use first element or length) */
|
|
2190
|
+
value?: string | number | (string | number | undefined)[] | unknown;
|
|
2191
|
+
/** Previous value for comparison */
|
|
2192
|
+
previousValue?: number;
|
|
2193
|
+
/** Current value as number for trend calculation */
|
|
2194
|
+
currentValue?: number;
|
|
2195
|
+
/** Manual trend percentage (overrides calculation) */
|
|
2196
|
+
trend?: number;
|
|
2197
|
+
/** Trend direction (overrides calculation) */
|
|
2198
|
+
trendDirection?: "up" | "down" | "neutral";
|
|
2199
|
+
/** Whether up is good (green) or bad (red) */
|
|
2200
|
+
invertTrend?: boolean;
|
|
2201
|
+
/** Icon to display */
|
|
2202
|
+
icon?: LucideIcon;
|
|
2203
|
+
/** Icon background color */
|
|
2204
|
+
iconBg?: string;
|
|
2205
|
+
/** Icon color */
|
|
2206
|
+
iconColor?: string;
|
|
2207
|
+
/** Subtitle or description */
|
|
2208
|
+
subtitle?: string;
|
|
2209
|
+
/** Action button */
|
|
2210
|
+
action?: {
|
|
2211
|
+
label: string;
|
|
2212
|
+
/** Event to dispatch via event bus (for trait state machine integration) */
|
|
2213
|
+
event?: string;
|
|
2214
|
+
/** Navigation URL - supports template interpolation */
|
|
2215
|
+
navigatesTo?: string;
|
|
2216
|
+
/** Legacy onClick callback */
|
|
2217
|
+
onClick?: () => void;
|
|
2218
|
+
};
|
|
2219
|
+
className?: string;
|
|
2220
|
+
/** Entity name for schema-driven stats */
|
|
2221
|
+
entity?: string;
|
|
2222
|
+
/** Metrics to display (schema format) - accepts readonly for compatibility with generated const arrays */
|
|
2223
|
+
metrics?: readonly MetricDefinition[];
|
|
2224
|
+
/** Data to calculate stats from - accepts readonly for compatibility with generated const arrays */
|
|
2225
|
+
data?: readonly Record<string, unknown>[];
|
|
2226
|
+
/** Loading state indicator */
|
|
2227
|
+
isLoading?: boolean;
|
|
2228
|
+
/** Error state */
|
|
2229
|
+
error?: Error | null;
|
|
2230
|
+
}
|
|
2231
|
+
declare const StatCard: React__default.FC<StatCardProps>;
|
|
2232
|
+
|
|
2233
|
+
interface PageBreadcrumb {
|
|
2234
|
+
label: string;
|
|
2235
|
+
href?: string;
|
|
2236
|
+
}
|
|
2237
|
+
/**
|
|
2238
|
+
* Schema-based action definition
|
|
2239
|
+
*/
|
|
2240
|
+
interface SchemaAction {
|
|
2241
|
+
label: string;
|
|
2242
|
+
/** Navigate to URL when clicked */
|
|
2243
|
+
navigatesTo?: string;
|
|
2244
|
+
/** Custom click handler */
|
|
2245
|
+
onClick?: () => void;
|
|
2246
|
+
/** Event to dispatch via event bus (for trait state machine integration) */
|
|
2247
|
+
event?: string;
|
|
2248
|
+
variant?: "primary" | "secondary" | "ghost" | "danger";
|
|
2249
|
+
icon?: LucideIcon;
|
|
2250
|
+
loading?: boolean;
|
|
2251
|
+
disabled?: boolean;
|
|
2252
|
+
}
|
|
2253
|
+
interface PageHeaderProps {
|
|
2254
|
+
/** Page title - accepts unknown to handle generated code accessing dynamic entity data */
|
|
2255
|
+
title?: string | number | unknown;
|
|
2256
|
+
/** Optional subtitle/description */
|
|
2257
|
+
subtitle?: string | number | unknown;
|
|
2258
|
+
/** Show back button */
|
|
2259
|
+
showBack?: boolean;
|
|
2260
|
+
/** Event to emit when back is clicked (default: BACK) */
|
|
2261
|
+
backEvent?: string;
|
|
2262
|
+
/** Breadcrumbs */
|
|
2263
|
+
breadcrumbs?: readonly PageBreadcrumb[];
|
|
2264
|
+
/** Status badge */
|
|
2265
|
+
status?: {
|
|
2266
|
+
label: string;
|
|
2267
|
+
variant?: "default" | "success" | "warning" | "danger" | "info";
|
|
2268
|
+
};
|
|
2269
|
+
/** Actions array - first action with variant='primary' (or first action) is the main action */
|
|
2270
|
+
actions?: readonly Readonly<SchemaAction>[];
|
|
2271
|
+
/** Loading state indicator */
|
|
2272
|
+
isLoading?: boolean;
|
|
2273
|
+
/** Tabs for sub-navigation */
|
|
2274
|
+
tabs?: ReadonlyArray<{
|
|
2275
|
+
label: string;
|
|
2276
|
+
value: string;
|
|
2277
|
+
count?: number;
|
|
2278
|
+
}>;
|
|
2279
|
+
activeTab?: string;
|
|
2280
|
+
onTabChange?: (value: string) => void;
|
|
2281
|
+
/** Custom content in the header */
|
|
2282
|
+
children?: React__default.ReactNode;
|
|
2283
|
+
className?: string;
|
|
2284
|
+
}
|
|
2285
|
+
declare const PageHeader: React__default.FC<PageHeaderProps>;
|
|
2286
|
+
|
|
2287
|
+
/**
|
|
2288
|
+
* DetailPanel Organism Component
|
|
2289
|
+
*
|
|
2290
|
+
* Composes atoms and molecules to create a professional detail view.
|
|
2291
|
+
*
|
|
2292
|
+
* When `entity` prop is provided without `data`, automatically fetches data
|
|
2293
|
+
* using the useEntityDetail hook with ID from URL params.
|
|
2294
|
+
*/
|
|
2295
|
+
|
|
2296
|
+
interface DetailField {
|
|
2297
|
+
label: string;
|
|
2298
|
+
value: React__default.ReactNode;
|
|
2299
|
+
icon?: LucideIcon;
|
|
2300
|
+
copyable?: boolean;
|
|
2301
|
+
}
|
|
2302
|
+
interface DetailSection {
|
|
2303
|
+
title: string;
|
|
2304
|
+
fields: DetailField[];
|
|
2305
|
+
}
|
|
2306
|
+
/**
|
|
2307
|
+
* Action definition for DetailPanel
|
|
2308
|
+
*/
|
|
2309
|
+
interface DetailPanelAction {
|
|
2310
|
+
label: string;
|
|
2311
|
+
icon?: LucideIcon;
|
|
2312
|
+
onClick?: () => void;
|
|
2313
|
+
/** Event to emit via event bus */
|
|
2314
|
+
event?: string;
|
|
2315
|
+
/** Navigation URL */
|
|
2316
|
+
navigatesTo?: string;
|
|
2317
|
+
/** Button variant (primary for main action, others for secondary) */
|
|
2318
|
+
variant?: "primary" | "secondary" | "ghost" | "danger";
|
|
2319
|
+
}
|
|
2320
|
+
/**
|
|
2321
|
+
* Field definition for unified interface - can be a simple string or object
|
|
2322
|
+
*/
|
|
2323
|
+
type FieldDef$2 = string | {
|
|
2324
|
+
key: string;
|
|
2325
|
+
header?: string;
|
|
2326
|
+
};
|
|
2327
|
+
interface DetailPanelProps {
|
|
2328
|
+
title?: string;
|
|
2329
|
+
subtitle?: string;
|
|
2330
|
+
status?: {
|
|
2331
|
+
label: string;
|
|
2332
|
+
variant?: "default" | "success" | "warning" | "danger" | "info";
|
|
2333
|
+
};
|
|
2334
|
+
avatar?: React__default.ReactNode;
|
|
2335
|
+
sections?: readonly DetailSection[];
|
|
2336
|
+
/** Unified actions array - first action with variant='primary' is the main action */
|
|
2337
|
+
actions?: readonly DetailPanelAction[];
|
|
2338
|
+
footer?: React__default.ReactNode;
|
|
2339
|
+
slideOver?: boolean;
|
|
2340
|
+
onClose?: () => void;
|
|
2341
|
+
className?: string;
|
|
2342
|
+
entity?: string;
|
|
2343
|
+
/** Fields to display - accepts string[] or {key, header}[] for unified interface */
|
|
2344
|
+
fields?: readonly FieldDef$2[] | readonly DetailField[];
|
|
2345
|
+
/** Alias for fields - backwards compatibility */
|
|
2346
|
+
fieldNames?: readonly string[];
|
|
2347
|
+
data?: Record<string, unknown> | unknown;
|
|
2348
|
+
isLoading?: boolean;
|
|
2349
|
+
error?: Error | null;
|
|
2350
|
+
/** Panel position (for drawer/sidebar placement) */
|
|
2351
|
+
position?: "left" | "right";
|
|
2352
|
+
/** Panel width (CSS value, e.g., '400px', '50%') */
|
|
2353
|
+
width?: string;
|
|
2354
|
+
}
|
|
2355
|
+
declare const DetailPanel: React__default.FC<DetailPanelProps>;
|
|
2356
|
+
|
|
2357
|
+
interface FormSectionProps {
|
|
2358
|
+
/** Section title */
|
|
2359
|
+
title?: string;
|
|
2360
|
+
/** Section description */
|
|
2361
|
+
description?: string;
|
|
2362
|
+
/** Form fields */
|
|
2363
|
+
children: React__default.ReactNode;
|
|
2364
|
+
/** Collapsible */
|
|
2365
|
+
collapsible?: boolean;
|
|
2366
|
+
/** Default collapsed state */
|
|
2367
|
+
defaultCollapsed?: boolean;
|
|
2368
|
+
/** Use card wrapper */
|
|
2369
|
+
card?: boolean;
|
|
2370
|
+
/** Grid columns for fields */
|
|
2371
|
+
columns?: 1 | 2 | 3;
|
|
2372
|
+
className?: string;
|
|
2373
|
+
}
|
|
2374
|
+
declare const FormSection$1: React__default.FC<FormSectionProps>;
|
|
2375
|
+
/**
|
|
2376
|
+
* Form layout with multiple sections
|
|
2377
|
+
*/
|
|
2378
|
+
interface FormLayoutProps {
|
|
2379
|
+
children: React__default.ReactNode;
|
|
2380
|
+
/** Show section dividers */
|
|
2381
|
+
dividers?: boolean;
|
|
2382
|
+
className?: string;
|
|
2383
|
+
}
|
|
2384
|
+
declare const FormLayout: React__default.FC<FormLayoutProps>;
|
|
2385
|
+
/**
|
|
2386
|
+
* Form actions bar (submit/cancel buttons)
|
|
2387
|
+
*/
|
|
2388
|
+
interface FormActionsProps {
|
|
2389
|
+
children: React__default.ReactNode;
|
|
2390
|
+
/** Sticky at bottom */
|
|
2391
|
+
sticky?: boolean;
|
|
2392
|
+
/** Alignment */
|
|
2393
|
+
align?: "left" | "right" | "between" | "center";
|
|
2394
|
+
className?: string;
|
|
2395
|
+
}
|
|
2396
|
+
declare const FormActions: React__default.FC<FormActionsProps>;
|
|
2397
|
+
|
|
2398
|
+
/**
|
|
2399
|
+
* Form Organism Component
|
|
2400
|
+
*
|
|
2401
|
+
* A form container component with submit/reset handling.
|
|
2402
|
+
* Supports both children-based and schema-based form generation.
|
|
2403
|
+
* Renders correct input types based on field definitions including relations.
|
|
2404
|
+
*
|
|
2405
|
+
* Extended for inspection forms with:
|
|
2406
|
+
* - Conditional field visibility via S-expressions
|
|
2407
|
+
* - Hidden calculations that emit GLOBAL_VARIABLE_SET events
|
|
2408
|
+
* - Violation triggers that emit VIOLATION_DETECTED events
|
|
2409
|
+
* - Nested sections with collapsible support
|
|
2410
|
+
*/
|
|
2411
|
+
|
|
2412
|
+
/**
|
|
2413
|
+
* S-Expression type for conditional logic (re-export from @orbital/shared)
|
|
2414
|
+
*/
|
|
2415
|
+
type SExpression = SExpr;
|
|
2416
|
+
/**
|
|
2417
|
+
* Form-specific evaluation context
|
|
2418
|
+
*/
|
|
2419
|
+
interface FormEvaluationContext {
|
|
2420
|
+
formValues: Record<string, unknown>;
|
|
2421
|
+
globalVariables: Record<string, unknown>;
|
|
2422
|
+
localVariables?: Record<string, unknown>;
|
|
2423
|
+
entity?: Record<string, unknown>;
|
|
2424
|
+
}
|
|
2425
|
+
/**
|
|
2426
|
+
* Hidden calculation definition
|
|
2427
|
+
*/
|
|
2428
|
+
interface HiddenCalculation {
|
|
2429
|
+
variableName: string;
|
|
2430
|
+
expression: SExpression;
|
|
2431
|
+
triggerFields: string[];
|
|
2432
|
+
}
|
|
2433
|
+
/**
|
|
2434
|
+
* Violation definition
|
|
2435
|
+
*/
|
|
2436
|
+
interface ViolationDefinition {
|
|
2437
|
+
law: string;
|
|
2438
|
+
article: string;
|
|
2439
|
+
actionType: "measure" | "admin" | "penalty";
|
|
2440
|
+
message: string;
|
|
2441
|
+
}
|
|
2442
|
+
/**
|
|
2443
|
+
* Violation trigger definition
|
|
2444
|
+
*/
|
|
2445
|
+
interface ViolationTrigger {
|
|
2446
|
+
condition: SExpression;
|
|
2447
|
+
violation: ViolationDefinition;
|
|
2448
|
+
fieldId?: string;
|
|
2449
|
+
}
|
|
2450
|
+
/**
|
|
2451
|
+
* Form section definition for nested sections
|
|
2452
|
+
*/
|
|
2453
|
+
interface FormSection {
|
|
2454
|
+
id: string;
|
|
2455
|
+
title: string;
|
|
2456
|
+
condition?: SExpression;
|
|
2457
|
+
fields: SchemaField[];
|
|
2458
|
+
collapsible?: boolean;
|
|
2459
|
+
}
|
|
2460
|
+
/**
|
|
2461
|
+
* Relation configuration for foreign key fields
|
|
2462
|
+
*/
|
|
2463
|
+
interface RelationConfig {
|
|
2464
|
+
/** Target entity name (e.g., 'User', 'Project') */
|
|
2465
|
+
entity: string;
|
|
2466
|
+
/** Field on target entity to display (defaults to 'name') */
|
|
2467
|
+
displayField?: string;
|
|
2468
|
+
/** Cardinality: one-to-one or one-to-many */
|
|
2469
|
+
cardinality?: "one" | "many";
|
|
2470
|
+
}
|
|
2471
|
+
/**
|
|
2472
|
+
* Schema field definition
|
|
2473
|
+
* Supports both 'name' and 'field' for compatibility with different schema formats
|
|
2474
|
+
*/
|
|
2475
|
+
interface SchemaField {
|
|
2476
|
+
/** Field name (primary) */
|
|
2477
|
+
name?: string;
|
|
2478
|
+
/** Field name (alias for compatibility) */
|
|
2479
|
+
field?: string;
|
|
2480
|
+
/** Display label */
|
|
2481
|
+
label?: string;
|
|
2482
|
+
/** Field type (string, number, email, date, boolean, enum, relation, etc.) */
|
|
2483
|
+
type?: string;
|
|
2484
|
+
/** Input type for rendering (text, select, textarea, checkbox, etc.) */
|
|
2485
|
+
inputType?: string;
|
|
2486
|
+
/** Placeholder text */
|
|
2487
|
+
placeholder?: string;
|
|
2488
|
+
/** Whether field is required */
|
|
2489
|
+
required?: boolean;
|
|
2490
|
+
/** Default value */
|
|
2491
|
+
defaultValue?: unknown;
|
|
2492
|
+
/** Options for select/enum fields - accepts readonly for generated const arrays */
|
|
2493
|
+
options?: readonly SelectOption[];
|
|
2494
|
+
/** Enum values (alternative to options, just strings) - accepts readonly for generated const arrays */
|
|
2495
|
+
values?: readonly string[];
|
|
2496
|
+
/** Relation configuration for foreign key references */
|
|
2497
|
+
relation?: RelationConfig;
|
|
2498
|
+
/** Minimum value (for number) or length (for string) */
|
|
2499
|
+
min?: number;
|
|
2500
|
+
/** Maximum value or length */
|
|
2501
|
+
max?: number;
|
|
2502
|
+
/** Pattern for validation */
|
|
2503
|
+
pattern?: string;
|
|
2504
|
+
/** Validation rules */
|
|
2505
|
+
validation?: Record<string, unknown>;
|
|
2506
|
+
/** Whether field is readonly (displays value but cannot edit) */
|
|
2507
|
+
readonly?: boolean;
|
|
2508
|
+
/** Whether field is disabled (alternative to readonly for compatibility) */
|
|
2509
|
+
disabled?: boolean;
|
|
2510
|
+
}
|
|
2511
|
+
interface FormProps extends Omit<React__default.FormHTMLAttributes<HTMLFormElement>, "onSubmit"> {
|
|
2512
|
+
/** Form fields (traditional React children) */
|
|
2513
|
+
children?: React__default.ReactNode;
|
|
2514
|
+
/** Submit handler - receives form data, or event name string for trait dispatch */
|
|
2515
|
+
onSubmit?: ((e: React__default.FormEvent<HTMLFormElement>, data?: Record<string, unknown>) => void) | string;
|
|
2516
|
+
/** Cancel handler - function or event name string for trait dispatch */
|
|
2517
|
+
onCancel?: (() => void) | string;
|
|
2518
|
+
/** Form layout */
|
|
2519
|
+
layout?: "vertical" | "horizontal" | "inline";
|
|
2520
|
+
/** Gap between fields */
|
|
2521
|
+
gap?: "sm" | "md" | "lg";
|
|
2522
|
+
/** Additional CSS classes */
|
|
2523
|
+
className?: string;
|
|
2524
|
+
/** Entity type name (schema format) */
|
|
2525
|
+
entity?: string;
|
|
2526
|
+
/** Form mode - 'create' for new records, 'edit' for updating existing */
|
|
2527
|
+
mode?: "create" | "edit";
|
|
2528
|
+
/** Fields definition (schema format) - accepts readonly for generated const arrays */
|
|
2529
|
+
fields?: readonly Readonly<SchemaField>[];
|
|
2530
|
+
/** Initial form data */
|
|
2531
|
+
initialData?: Record<string, unknown> | unknown;
|
|
2532
|
+
/** Loading state */
|
|
2533
|
+
isLoading?: boolean;
|
|
2534
|
+
/** Error state */
|
|
2535
|
+
error?: Error | null;
|
|
2536
|
+
/** Submit button label */
|
|
2537
|
+
submitLabel?: string;
|
|
2538
|
+
/** Cancel button label (if provided, shows cancel button) */
|
|
2539
|
+
cancelLabel?: string;
|
|
2540
|
+
/** Show cancel button (defaults to true for schema forms) */
|
|
2541
|
+
showCancel?: boolean;
|
|
2542
|
+
/** Form title (used by ModalSlot to extract title) */
|
|
2543
|
+
title?: string;
|
|
2544
|
+
/** Event to dispatch on successful submit (defaults to 'SAVE') */
|
|
2545
|
+
submitEvent?: string;
|
|
2546
|
+
/** Event to dispatch on cancel (defaults to 'CANCEL') */
|
|
2547
|
+
cancelEvent?: string;
|
|
2548
|
+
/** Data for relation fields: { fieldName: RelationOption[] } */
|
|
2549
|
+
relationsData?: Record<string, readonly RelationOption[]>;
|
|
2550
|
+
/** Loading state for relation data: { fieldName: boolean } */
|
|
2551
|
+
relationsLoading?: Record<string, boolean>;
|
|
2552
|
+
/** Map of fieldId → S-expression condition for conditional field display (boolean true means enabled but config loaded separately) */
|
|
2553
|
+
conditionalFields?: Record<string, SExpression> | boolean;
|
|
2554
|
+
/** Hidden calculations that emit GLOBAL_VARIABLE_SET on field change (boolean true means enabled but config loaded separately) */
|
|
2555
|
+
hiddenCalculations?: HiddenCalculation[] | boolean;
|
|
2556
|
+
/** Violation conditions that emit VIOLATION_DETECTED when met (boolean true means enabled but config loaded separately) */
|
|
2557
|
+
violationTriggers?: ViolationTrigger[] | boolean;
|
|
2558
|
+
/** Context for S-expression evaluation - accepts flexible types from generated code */
|
|
2559
|
+
evaluationContext?: FormEvaluationContext | Record<string, unknown>;
|
|
2560
|
+
/** Nested form sections with optional conditions */
|
|
2561
|
+
sections?: FormSection[];
|
|
2562
|
+
/** Callback when any field value changes */
|
|
2563
|
+
onFieldChange?: (change: {
|
|
2564
|
+
fieldId: string;
|
|
2565
|
+
value: unknown;
|
|
2566
|
+
formValues: Record<string, unknown>;
|
|
2567
|
+
}) => void;
|
|
2568
|
+
/** Config path for form configuration (schema-driven) */
|
|
2569
|
+
configPath?: string;
|
|
2570
|
+
/** Whether the form supports repeatable entries */
|
|
2571
|
+
repeatable?: boolean;
|
|
2572
|
+
}
|
|
2573
|
+
declare const Form: React__default.FC<FormProps>;
|
|
2574
|
+
|
|
2575
|
+
/**
|
|
2576
|
+
* Header Organism Component
|
|
2577
|
+
*
|
|
2578
|
+
* A header component for mobile/responsive layouts with menu toggle, brand, and user avatar.
|
|
2579
|
+
* Styled to match the main Layout component's mobile header.
|
|
2580
|
+
*/
|
|
2581
|
+
|
|
2582
|
+
interface HeaderProps {
|
|
2583
|
+
/**
|
|
2584
|
+
* Logo/Brand content
|
|
2585
|
+
*/
|
|
2586
|
+
logo?: React__default.ReactNode;
|
|
2587
|
+
/**
|
|
2588
|
+
* Logo image source
|
|
2589
|
+
*/
|
|
2590
|
+
logoSrc?: string;
|
|
2591
|
+
/**
|
|
2592
|
+
* Brand/App name
|
|
2593
|
+
*/
|
|
2594
|
+
brandName?: string;
|
|
2595
|
+
/**
|
|
2596
|
+
* Navigation items (for desktop header variant)
|
|
2597
|
+
*/
|
|
2598
|
+
navigationItems?: Array<{
|
|
2599
|
+
label: string;
|
|
2600
|
+
href?: string;
|
|
2601
|
+
onClick?: () => void;
|
|
2602
|
+
icon?: LucideIcon;
|
|
2603
|
+
badge?: string | number;
|
|
2604
|
+
active?: boolean;
|
|
2605
|
+
}>;
|
|
2606
|
+
/**
|
|
2607
|
+
* Show menu toggle button
|
|
2608
|
+
* @default true
|
|
2609
|
+
*/
|
|
2610
|
+
showMenuToggle?: boolean;
|
|
2611
|
+
/**
|
|
2612
|
+
* Is menu open (for toggle icon)
|
|
2613
|
+
*/
|
|
2614
|
+
isMenuOpen?: boolean;
|
|
2615
|
+
/**
|
|
2616
|
+
* Menu toggle callback
|
|
2617
|
+
*/
|
|
2618
|
+
onMenuToggle?: () => void;
|
|
2619
|
+
/**
|
|
2620
|
+
* Show search input
|
|
2621
|
+
* @default false
|
|
2622
|
+
*/
|
|
2623
|
+
showSearch?: boolean;
|
|
2624
|
+
/**
|
|
2625
|
+
* Search placeholder
|
|
2626
|
+
*/
|
|
2627
|
+
searchPlaceholder?: string;
|
|
2628
|
+
/**
|
|
2629
|
+
* Search callback
|
|
2630
|
+
*/
|
|
2631
|
+
onSearch?: (value: string) => void;
|
|
2632
|
+
/**
|
|
2633
|
+
* User avatar configuration
|
|
2634
|
+
*/
|
|
2635
|
+
userAvatar?: {
|
|
2636
|
+
src?: string;
|
|
2637
|
+
alt?: string;
|
|
2638
|
+
initials?: string;
|
|
2639
|
+
};
|
|
2640
|
+
/**
|
|
2641
|
+
* User name (display name or email)
|
|
2642
|
+
*/
|
|
2643
|
+
userName?: string;
|
|
2644
|
+
/**
|
|
2645
|
+
* Callback when user avatar is clicked
|
|
2646
|
+
*/
|
|
2647
|
+
onUserClick?: () => void;
|
|
2648
|
+
/**
|
|
2649
|
+
* Action buttons (right side)
|
|
2650
|
+
*/
|
|
2651
|
+
actions?: React__default.ReactNode;
|
|
2652
|
+
/**
|
|
2653
|
+
* Sticky header
|
|
2654
|
+
* @default true
|
|
2655
|
+
*/
|
|
2656
|
+
sticky?: boolean;
|
|
2657
|
+
/**
|
|
2658
|
+
* Variant - mobile shows menu toggle, desktop shows full nav
|
|
2659
|
+
* @default 'mobile'
|
|
2660
|
+
*/
|
|
2661
|
+
variant?: "mobile" | "desktop";
|
|
2662
|
+
/**
|
|
2663
|
+
* Callback when logo/brand is clicked
|
|
2664
|
+
*/
|
|
2665
|
+
onLogoClick?: () => void;
|
|
2666
|
+
/**
|
|
2667
|
+
* Additional CSS classes
|
|
2668
|
+
*/
|
|
2669
|
+
className?: string;
|
|
2670
|
+
}
|
|
2671
|
+
declare const Header: React__default.FC<HeaderProps>;
|
|
2672
|
+
|
|
2673
|
+
/**
|
|
2674
|
+
* Navigation Organism Component
|
|
2675
|
+
*
|
|
2676
|
+
* A navigation component with items, active indicators, icons, and badges.
|
|
2677
|
+
* Uses Menu, ButtonGroup molecules and Button, Icon, Badge, Typography, Divider atoms.
|
|
2678
|
+
*/
|
|
2679
|
+
|
|
2680
|
+
interface NavigationItem {
|
|
2681
|
+
/**
|
|
2682
|
+
* Item ID
|
|
2683
|
+
*/
|
|
2684
|
+
id: string;
|
|
2685
|
+
/**
|
|
2686
|
+
* Item label
|
|
2687
|
+
*/
|
|
2688
|
+
label: string;
|
|
2689
|
+
/**
|
|
2690
|
+
* Item icon
|
|
2691
|
+
*/
|
|
2692
|
+
icon?: LucideIcon;
|
|
2693
|
+
/**
|
|
2694
|
+
* Item badge
|
|
2695
|
+
*/
|
|
2696
|
+
badge?: string | number;
|
|
2697
|
+
/**
|
|
2698
|
+
* Item href
|
|
2699
|
+
*/
|
|
2700
|
+
href?: string;
|
|
2701
|
+
/**
|
|
2702
|
+
* Item click handler
|
|
2703
|
+
*/
|
|
2704
|
+
onClick?: () => void;
|
|
2705
|
+
/**
|
|
2706
|
+
* Is active
|
|
2707
|
+
*/
|
|
2708
|
+
isActive?: boolean;
|
|
2709
|
+
/**
|
|
2710
|
+
* Disable item
|
|
2711
|
+
*/
|
|
2712
|
+
disabled?: boolean;
|
|
2713
|
+
/**
|
|
2714
|
+
* Sub-menu items
|
|
2715
|
+
*/
|
|
2716
|
+
subMenu?: NavigationItem[];
|
|
2717
|
+
}
|
|
2718
|
+
interface NavigationProps {
|
|
2719
|
+
/**
|
|
2720
|
+
* Navigation items
|
|
2721
|
+
*/
|
|
2722
|
+
items: NavigationItem[];
|
|
2723
|
+
/**
|
|
2724
|
+
* Navigation orientation
|
|
2725
|
+
* @default 'horizontal'
|
|
2726
|
+
*/
|
|
2727
|
+
orientation?: 'horizontal' | 'vertical';
|
|
2728
|
+
/**
|
|
2729
|
+
* Additional CSS classes
|
|
2730
|
+
*/
|
|
2731
|
+
className?: string;
|
|
2732
|
+
}
|
|
2733
|
+
declare const Navigation: React__default.FC<NavigationProps>;
|
|
2734
|
+
|
|
2735
|
+
/**
|
|
2736
|
+
* Section Component
|
|
2737
|
+
*
|
|
2738
|
+
* A semantic section wrapper with optional title, description, and action.
|
|
2739
|
+
* Perfect for grouping related content with consistent spacing.
|
|
2740
|
+
*/
|
|
2741
|
+
|
|
2742
|
+
type SectionPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2743
|
+
type SectionVariant = 'default' | 'card' | 'bordered' | 'filled';
|
|
2744
|
+
interface SectionProps {
|
|
2745
|
+
/** Section title */
|
|
2746
|
+
title?: string;
|
|
2747
|
+
/** Section subtitle/description */
|
|
2748
|
+
description?: string;
|
|
2749
|
+
/** Action element (e.g., button, link) */
|
|
2750
|
+
action?: React__default.ReactNode;
|
|
2751
|
+
/** Padding amount */
|
|
2752
|
+
padding?: SectionPadding;
|
|
2753
|
+
/** Visual variant */
|
|
2754
|
+
variant?: SectionVariant;
|
|
2755
|
+
/** Show divider below header */
|
|
2756
|
+
divider?: boolean;
|
|
2757
|
+
/** Custom class name */
|
|
2758
|
+
className?: string;
|
|
2759
|
+
/** Children elements */
|
|
2760
|
+
children: React__default.ReactNode;
|
|
2761
|
+
/** Header custom class name */
|
|
2762
|
+
headerClassName?: string;
|
|
2763
|
+
/** Content custom class name */
|
|
2764
|
+
contentClassName?: string;
|
|
2765
|
+
/** HTML element to render as */
|
|
2766
|
+
as?: React__default.ElementType;
|
|
2767
|
+
}
|
|
2768
|
+
/**
|
|
2769
|
+
* Section - Semantic content grouping with header
|
|
2770
|
+
*/
|
|
2771
|
+
declare const Section: React__default.FC<SectionProps>;
|
|
2772
|
+
|
|
2773
|
+
/**
|
|
2774
|
+
* Sidebar Organism Component
|
|
2775
|
+
*
|
|
2776
|
+
* A sidebar component with logo, navigation items, user section, and collapse/expand.
|
|
2777
|
+
* Styled to match the main Layout component with theme-aware CSS variables.
|
|
2778
|
+
*/
|
|
2779
|
+
|
|
2780
|
+
interface SidebarItem {
|
|
2781
|
+
/** Item ID */
|
|
2782
|
+
id: string;
|
|
2783
|
+
/** Item label */
|
|
2784
|
+
label: string;
|
|
2785
|
+
/** Item icon */
|
|
2786
|
+
icon?: LucideIcon;
|
|
2787
|
+
/** Item badge */
|
|
2788
|
+
badge?: string | number;
|
|
2789
|
+
/** Item href */
|
|
2790
|
+
href?: string;
|
|
2791
|
+
/** Item click handler */
|
|
2792
|
+
onClick?: () => void;
|
|
2793
|
+
/** Is active */
|
|
2794
|
+
active?: boolean;
|
|
2795
|
+
/** @deprecated Use `active` instead */
|
|
2796
|
+
isActive?: boolean;
|
|
2797
|
+
/** Sub-items (for nested navigation) */
|
|
2798
|
+
subItems?: SidebarItem[];
|
|
2799
|
+
}
|
|
2800
|
+
interface SidebarProps {
|
|
2801
|
+
/** Logo/Brand content - can be a ReactNode or logo config */
|
|
2802
|
+
logo?: React__default.ReactNode;
|
|
2803
|
+
/** Logo image source */
|
|
2804
|
+
logoSrc?: string;
|
|
2805
|
+
/** Brand/App name */
|
|
2806
|
+
brandName?: string;
|
|
2807
|
+
/** Navigation items */
|
|
2808
|
+
items: SidebarItem[];
|
|
2809
|
+
/** User section content */
|
|
2810
|
+
userSection?: React__default.ReactNode;
|
|
2811
|
+
/** Footer content (e.g., theme toggle) */
|
|
2812
|
+
footerContent?: React__default.ReactNode;
|
|
2813
|
+
/** Collapsed state (controlled) */
|
|
2814
|
+
collapsed?: boolean;
|
|
2815
|
+
/** Default collapsed state */
|
|
2816
|
+
defaultCollapsed?: boolean;
|
|
2817
|
+
/** Callback when collapse state changes */
|
|
2818
|
+
onCollapseChange?: (collapsed: boolean) => void;
|
|
2819
|
+
/** Hide the collapse/expand button */
|
|
2820
|
+
hideCollapseButton?: boolean;
|
|
2821
|
+
/** Show a close button (for mobile) */
|
|
2822
|
+
showCloseButton?: boolean;
|
|
2823
|
+
/** Callback when close button is clicked */
|
|
2824
|
+
onClose?: () => void;
|
|
2825
|
+
/** Callback when logo/brand is clicked */
|
|
2826
|
+
onLogoClick?: () => void;
|
|
2827
|
+
/** Additional CSS classes */
|
|
2828
|
+
className?: string;
|
|
2829
|
+
}
|
|
2830
|
+
declare const Sidebar: React__default.FC<SidebarProps>;
|
|
2831
|
+
|
|
2832
|
+
/**
|
|
2833
|
+
* Split Component
|
|
2834
|
+
*
|
|
2835
|
+
* A two-column layout with configurable ratios.
|
|
2836
|
+
* Perfect for sidebar/content layouts or side-by-side comparisons.
|
|
2837
|
+
*/
|
|
2838
|
+
|
|
2839
|
+
type SplitRatio = '1:1' | '1:2' | '2:1' | '1:3' | '3:1' | '1:4' | '4:1' | '2:3' | '3:2';
|
|
2840
|
+
type SplitGap = 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2841
|
+
interface SplitProps {
|
|
2842
|
+
/** Size ratio between left and right panels */
|
|
2843
|
+
ratio?: SplitRatio;
|
|
2844
|
+
/** Gap between panels */
|
|
2845
|
+
gap?: SplitGap;
|
|
2846
|
+
/** Reverse the order (right first) */
|
|
2847
|
+
reverse?: boolean;
|
|
2848
|
+
/** Stack vertically on mobile */
|
|
2849
|
+
stackOnMobile?: boolean;
|
|
2850
|
+
/** Breakpoint to switch from stacked to side-by-side */
|
|
2851
|
+
stackBreakpoint?: 'sm' | 'md' | 'lg' | 'xl';
|
|
2852
|
+
/** Align items vertically */
|
|
2853
|
+
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
2854
|
+
/** Custom class name */
|
|
2855
|
+
className?: string;
|
|
2856
|
+
/** Left/first panel class name */
|
|
2857
|
+
leftClassName?: string;
|
|
2858
|
+
/** Right/second panel class name */
|
|
2859
|
+
rightClassName?: string;
|
|
2860
|
+
/** Exactly two children: [left, right] */
|
|
2861
|
+
children: [React__default.ReactNode, React__default.ReactNode];
|
|
2862
|
+
}
|
|
2863
|
+
/**
|
|
2864
|
+
* Split - Two-column layout with flexible ratios
|
|
2865
|
+
*/
|
|
2866
|
+
declare const Split: React__default.FC<SplitProps>;
|
|
2867
|
+
|
|
2868
|
+
type SortDirection = "asc" | "desc" | null;
|
|
2869
|
+
interface TableColumn<T = any> {
|
|
2870
|
+
/**
|
|
2871
|
+
* Column key
|
|
2872
|
+
*/
|
|
2873
|
+
key: string;
|
|
2874
|
+
/**
|
|
2875
|
+
* Column header label
|
|
2876
|
+
*/
|
|
2877
|
+
label: string;
|
|
2878
|
+
/**
|
|
2879
|
+
* Sortable column
|
|
2880
|
+
* @default false
|
|
2881
|
+
*/
|
|
2882
|
+
sortable?: boolean;
|
|
2883
|
+
/**
|
|
2884
|
+
* Custom cell renderer
|
|
2885
|
+
*/
|
|
2886
|
+
render?: (value: any, row: T, index: number) => React__default.ReactNode;
|
|
2887
|
+
/**
|
|
2888
|
+
* Column width
|
|
2889
|
+
*/
|
|
2890
|
+
width?: string;
|
|
2891
|
+
}
|
|
2892
|
+
interface TableProps<T = any> {
|
|
2893
|
+
/**
|
|
2894
|
+
* Table columns
|
|
2895
|
+
*/
|
|
2896
|
+
columns: TableColumn<T>[];
|
|
2897
|
+
/**
|
|
2898
|
+
* Table entity data
|
|
2899
|
+
*/
|
|
2900
|
+
entity: T[];
|
|
2901
|
+
/**
|
|
2902
|
+
* Row key getter
|
|
2903
|
+
*/
|
|
2904
|
+
getRowKey: (row: T, index: number) => string;
|
|
2905
|
+
/**
|
|
2906
|
+
* Enable row selection
|
|
2907
|
+
* @default false
|
|
2908
|
+
*/
|
|
2909
|
+
selectable?: boolean;
|
|
2910
|
+
/**
|
|
2911
|
+
* Selected row keys
|
|
2912
|
+
*/
|
|
2913
|
+
selectedRows?: string[];
|
|
2914
|
+
/**
|
|
2915
|
+
* Callback when selection changes
|
|
2916
|
+
*/
|
|
2917
|
+
onSelectionChange?: (selectedKeys: string[]) => void;
|
|
2918
|
+
/**
|
|
2919
|
+
* Enable sorting
|
|
2920
|
+
* @default false
|
|
2921
|
+
*/
|
|
2922
|
+
sortable?: boolean;
|
|
2923
|
+
/**
|
|
2924
|
+
* Current sort column
|
|
2925
|
+
*/
|
|
2926
|
+
sortColumn?: string;
|
|
2927
|
+
/**
|
|
2928
|
+
* Current sort direction
|
|
2929
|
+
*/
|
|
2930
|
+
sortDirection?: SortDirection;
|
|
2931
|
+
/**
|
|
2932
|
+
* Callback when sort changes
|
|
2933
|
+
*/
|
|
2934
|
+
onSortChange?: (column: string, direction: SortDirection) => void;
|
|
2935
|
+
/**
|
|
2936
|
+
* Enable search/filter
|
|
2937
|
+
* @default false
|
|
2938
|
+
*/
|
|
2939
|
+
searchable?: boolean;
|
|
2940
|
+
/**
|
|
2941
|
+
* Search placeholder
|
|
2942
|
+
*/
|
|
2943
|
+
searchPlaceholder?: string;
|
|
2944
|
+
/**
|
|
2945
|
+
* Enable pagination
|
|
2946
|
+
* @default false
|
|
2947
|
+
*/
|
|
2948
|
+
paginated?: boolean;
|
|
2949
|
+
/**
|
|
2950
|
+
* Current page
|
|
2951
|
+
*/
|
|
2952
|
+
currentPage?: number;
|
|
2953
|
+
/**
|
|
2954
|
+
* Total pages
|
|
2955
|
+
*/
|
|
2956
|
+
totalPages?: number;
|
|
2957
|
+
/**
|
|
2958
|
+
* Callback when page changes
|
|
2959
|
+
*/
|
|
2960
|
+
onPageChange?: (page: number) => void;
|
|
2961
|
+
/**
|
|
2962
|
+
* Row actions menu items
|
|
2963
|
+
*/
|
|
2964
|
+
rowActions?: (row: T) => MenuItem[];
|
|
2965
|
+
/**
|
|
2966
|
+
* Empty state message
|
|
2967
|
+
*/
|
|
2968
|
+
emptyMessage?: string;
|
|
2969
|
+
/**
|
|
2970
|
+
* Loading state
|
|
2971
|
+
* @default false
|
|
2972
|
+
*/
|
|
2973
|
+
loading?: boolean;
|
|
2974
|
+
/**
|
|
2975
|
+
* Additional CSS classes
|
|
2976
|
+
*/
|
|
2977
|
+
className?: string;
|
|
2978
|
+
}
|
|
2979
|
+
declare const Table: {
|
|
2980
|
+
<T extends Record<string, any>>({ columns, entity, getRowKey, selectable, selectedRows, onSelectionChange, sortable, sortColumn, sortDirection, onSortChange, searchable, searchPlaceholder, paginated, currentPage, totalPages, onPageChange, rowActions, emptyMessage, loading, className, }: TableProps<T>): react_jsx_runtime.JSX.Element;
|
|
2981
|
+
displayName: string;
|
|
2982
|
+
};
|
|
2983
|
+
|
|
2984
|
+
/**
|
|
2985
|
+
* List Organism Component
|
|
2986
|
+
*
|
|
2987
|
+
* A beautifully designed, scannable list view.
|
|
2988
|
+
*
|
|
2989
|
+
* Design inspiration: Linear, Notion, Apple Reminders
|
|
2990
|
+
* - Soft, harmonious color palette
|
|
2991
|
+
* - Refined typography with proper hierarchy
|
|
2992
|
+
* - Subtle shadows and depth
|
|
2993
|
+
* - Delightful hover micro-interactions
|
|
2994
|
+
* - Elegant status indicators
|
|
2995
|
+
*
|
|
2996
|
+
* Orbital Component Interface Compliance:
|
|
2997
|
+
* - Entity binding with auto-fetch when entity is a string
|
|
2998
|
+
* - Event emission via useEventBus (UI:* events)
|
|
2999
|
+
* - Event listening for UI:SEARCH and UI:CLEAR_SEARCH
|
|
3000
|
+
* - isLoading and error state props
|
|
3001
|
+
*/
|
|
3002
|
+
|
|
3003
|
+
interface ListItem {
|
|
3004
|
+
id: string;
|
|
3005
|
+
title?: string;
|
|
3006
|
+
description?: string;
|
|
3007
|
+
icon?: LucideIcon;
|
|
3008
|
+
avatar?: {
|
|
3009
|
+
src?: string;
|
|
3010
|
+
alt?: string;
|
|
3011
|
+
initials?: string;
|
|
3012
|
+
};
|
|
3013
|
+
badge?: string | number;
|
|
3014
|
+
metadata?: React__default.ReactNode;
|
|
3015
|
+
onClick?: () => void;
|
|
3016
|
+
disabled?: boolean;
|
|
3017
|
+
completed?: boolean;
|
|
3018
|
+
[key: string]: unknown;
|
|
3019
|
+
_fields?: Record<string, unknown>;
|
|
3020
|
+
}
|
|
3021
|
+
interface SchemaItemAction {
|
|
3022
|
+
label: string;
|
|
3023
|
+
/** Event to dispatch on click */
|
|
3024
|
+
event?: string;
|
|
3025
|
+
navigatesTo?: string;
|
|
3026
|
+
/** Action placement - accepts all common placement values */
|
|
3027
|
+
placement?: "row" | "bulk" | "card" | "footer" | string;
|
|
3028
|
+
action?: string;
|
|
3029
|
+
variant?: "primary" | "secondary" | "ghost" | "danger" | "default";
|
|
3030
|
+
/** Click handler from generated code */
|
|
3031
|
+
onClick?: (row: unknown) => void;
|
|
3032
|
+
}
|
|
3033
|
+
/**
|
|
3034
|
+
* Field definition - can be a simple string or object with key/header
|
|
3035
|
+
*/
|
|
3036
|
+
type FieldDef$1 = string | {
|
|
3037
|
+
key: string;
|
|
3038
|
+
header?: string;
|
|
3039
|
+
};
|
|
3040
|
+
interface ListProps {
|
|
3041
|
+
/** Entity name for auto-fetch OR data array (backwards compatible) */
|
|
3042
|
+
entity?: ListItem[] | readonly {
|
|
3043
|
+
id: string;
|
|
3044
|
+
}[] | readonly unknown[] | string;
|
|
3045
|
+
/** Data array - primary prop for data */
|
|
3046
|
+
data?: ListItem[] | readonly {
|
|
3047
|
+
id: string;
|
|
3048
|
+
}[] | readonly unknown[] | unknown;
|
|
3049
|
+
/** Entity type name for display */
|
|
3050
|
+
type?: string;
|
|
3051
|
+
/** Loading state */
|
|
3052
|
+
isLoading?: boolean;
|
|
3053
|
+
/** Error state */
|
|
3054
|
+
error?: Error | null;
|
|
3055
|
+
selectable?: boolean;
|
|
3056
|
+
selectedItems?: readonly string[];
|
|
3057
|
+
onSelectionChange?: (selectedIds: string[]) => void;
|
|
3058
|
+
/** Item actions - schema-driven or function-based */
|
|
3059
|
+
itemActions?: ((item: ListItem) => MenuItem[]) | readonly SchemaItemAction[];
|
|
3060
|
+
showDividers?: boolean;
|
|
3061
|
+
variant?: "default" | "card";
|
|
3062
|
+
emptyMessage?: string;
|
|
3063
|
+
className?: string;
|
|
3064
|
+
renderItem?: (item: ListItem, index: number) => React__default.ReactNode;
|
|
3065
|
+
children?: React__default.ReactNode;
|
|
3066
|
+
onItemAction?: (action: string, item: ListItem, index: number) => void;
|
|
3067
|
+
onRowClick?: (item: ListItem) => void;
|
|
3068
|
+
/** Fields to display - accepts string[] or {key, header}[] for unified interface */
|
|
3069
|
+
fields?: readonly FieldDef$1[];
|
|
3070
|
+
/** Alias for fields - backwards compatibility */
|
|
3071
|
+
fieldNames?: readonly string[];
|
|
3072
|
+
/**
|
|
3073
|
+
* Query singleton binding for filter/sort state.
|
|
3074
|
+
* When provided, syncs with the query singleton for filtering and sorting.
|
|
3075
|
+
* Example: "@TaskQuery"
|
|
3076
|
+
*/
|
|
3077
|
+
query?: string;
|
|
3078
|
+
}
|
|
3079
|
+
declare const List: React__default.FC<ListProps>;
|
|
3080
|
+
|
|
3081
|
+
/**
|
|
3082
|
+
* CardGrid Component
|
|
3083
|
+
*
|
|
3084
|
+
* A responsive grid specifically designed for card layouts.
|
|
3085
|
+
* Uses CSS Grid auto-fit for automatic responsive columns.
|
|
3086
|
+
*
|
|
3087
|
+
* When `entity` prop is provided without `data`, automatically fetches data
|
|
3088
|
+
* using the useEntityList hook. Supports server-side pagination and search.
|
|
3089
|
+
*/
|
|
3090
|
+
|
|
3091
|
+
type CardGridGap = 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
3092
|
+
/**
|
|
3093
|
+
* Action configuration for card items (schema-driven)
|
|
3094
|
+
*/
|
|
3095
|
+
interface CardItemAction {
|
|
3096
|
+
/** Action button label */
|
|
3097
|
+
label: string;
|
|
3098
|
+
/** Event to dispatch on click (schema metadata) */
|
|
3099
|
+
event?: string;
|
|
3100
|
+
/** Navigation URL - supports template interpolation like "/products/{{row.id}}" */
|
|
3101
|
+
navigatesTo?: string;
|
|
3102
|
+
/** Callback on click */
|
|
3103
|
+
onClick?: (item: unknown) => void;
|
|
3104
|
+
/** Action used by generated code - alternative to event */
|
|
3105
|
+
action?: string;
|
|
3106
|
+
/** Action placement - accepts string for compatibility with generated code */
|
|
3107
|
+
placement?: 'card' | 'footer' | 'row' | string;
|
|
3108
|
+
/** Button variant - accepts string for compatibility with generated code */
|
|
3109
|
+
variant?: 'primary' | 'secondary' | 'ghost' | 'danger' | string;
|
|
3110
|
+
}
|
|
3111
|
+
/**
|
|
3112
|
+
* Field definition - can be a simple string or object with key/header
|
|
3113
|
+
*/
|
|
3114
|
+
type FieldDef = string | {
|
|
3115
|
+
key: string;
|
|
3116
|
+
header?: string;
|
|
3117
|
+
};
|
|
3118
|
+
interface CardGridProps {
|
|
3119
|
+
/** Minimum width of each card (default: 280px) */
|
|
3120
|
+
minCardWidth?: number;
|
|
3121
|
+
/** Maximum number of columns */
|
|
3122
|
+
maxCols?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
3123
|
+
/** Gap between cards */
|
|
3124
|
+
gap?: CardGridGap;
|
|
3125
|
+
/** Align cards vertically in their cells */
|
|
3126
|
+
alignItems?: 'start' | 'center' | 'end' | 'stretch';
|
|
3127
|
+
/** Custom class name */
|
|
3128
|
+
className?: string;
|
|
3129
|
+
/** Children elements (cards) - optional when using entity/data props */
|
|
3130
|
+
children?: React__default.ReactNode;
|
|
3131
|
+
/** Entity type for data-bound usage */
|
|
3132
|
+
entity?: string;
|
|
3133
|
+
/** Fields to display - accepts string[] or {key, header}[] for unified interface */
|
|
3134
|
+
fields?: readonly FieldDef[];
|
|
3135
|
+
/** Alias for fields - backwards compatibility */
|
|
3136
|
+
fieldNames?: readonly string[];
|
|
3137
|
+
/** Alias for fields - backwards compatibility */
|
|
3138
|
+
columns?: readonly FieldDef[];
|
|
3139
|
+
/** Data array for data-bound usage - accepts readonly for generated const arrays */
|
|
3140
|
+
data?: readonly unknown[] | unknown;
|
|
3141
|
+
/** Loading state indicator */
|
|
3142
|
+
isLoading?: boolean;
|
|
3143
|
+
/** Error state */
|
|
3144
|
+
error?: Error | null;
|
|
3145
|
+
/** Actions for each card item (schema-driven) */
|
|
3146
|
+
itemActions?: readonly CardItemAction[];
|
|
3147
|
+
/** Callback when a card is clicked */
|
|
3148
|
+
onCardClick?: (item: unknown) => void;
|
|
3149
|
+
/** Enable server-side pagination */
|
|
3150
|
+
enablePagination?: boolean;
|
|
3151
|
+
/** Items per page (default: 20) */
|
|
3152
|
+
pageSize?: number;
|
|
3153
|
+
/** Show total count in pagination */
|
|
3154
|
+
showTotal?: boolean;
|
|
3155
|
+
/** Filter configuration for entity data */
|
|
3156
|
+
filter?: {
|
|
3157
|
+
field: string;
|
|
3158
|
+
value?: string;
|
|
3159
|
+
};
|
|
3160
|
+
/**
|
|
3161
|
+
* Query singleton binding for filter/sort state.
|
|
3162
|
+
* When provided, syncs with the query singleton for filtering and sorting.
|
|
3163
|
+
* Example: "@TaskQuery"
|
|
3164
|
+
*/
|
|
3165
|
+
query?: string;
|
|
3166
|
+
}
|
|
3167
|
+
/**
|
|
3168
|
+
* CardGrid - Responsive card collection layout
|
|
3169
|
+
*
|
|
3170
|
+
* Can be used in two ways:
|
|
3171
|
+
* 1. With children: <CardGrid><Card>...</Card></CardGrid>
|
|
3172
|
+
* 2. With data: <CardGrid entity="Task" fieldNames={['title']} data={tasks} />
|
|
3173
|
+
*
|
|
3174
|
+
* Supports server-side pagination when enablePagination is true.
|
|
3175
|
+
*/
|
|
3176
|
+
declare const CardGrid: React__default.FC<CardGridProps>;
|
|
3177
|
+
|
|
3178
|
+
/**
|
|
3179
|
+
* MasterDetail Component
|
|
3180
|
+
*
|
|
3181
|
+
* A layout pattern that shows a list/table of entities.
|
|
3182
|
+
* This is a thin wrapper around DataTable that accepts master-detail specific props.
|
|
3183
|
+
*
|
|
3184
|
+
* When `entity` prop is provided without `data`, automatically fetches data
|
|
3185
|
+
* using the useEntityList hook.
|
|
3186
|
+
*
|
|
3187
|
+
* The "detail" part is typically rendered separately via another render_ui effect
|
|
3188
|
+
* to a sidebar or detail panel when an item is selected.
|
|
3189
|
+
*/
|
|
3190
|
+
|
|
3191
|
+
interface MasterDetailProps<T extends {
|
|
3192
|
+
id: string | number;
|
|
3193
|
+
} = {
|
|
3194
|
+
id: string | number;
|
|
3195
|
+
}> {
|
|
3196
|
+
/** Entity type name - when provided without data, auto-fetches from API */
|
|
3197
|
+
entity?: string;
|
|
3198
|
+
/** Fields to show in the master list (maps to DataTable columns) */
|
|
3199
|
+
masterFields?: readonly string[];
|
|
3200
|
+
/** Fields for detail view (passed through but typically handled by separate render_ui) */
|
|
3201
|
+
detailFields?: readonly string[];
|
|
3202
|
+
/** Data array - if not provided and entity is set, data is auto-fetched */
|
|
3203
|
+
data?: readonly T[] | T[];
|
|
3204
|
+
/** Loading state */
|
|
3205
|
+
loading?: boolean;
|
|
3206
|
+
/** Loading state alias */
|
|
3207
|
+
isLoading?: boolean;
|
|
3208
|
+
/** Error state */
|
|
3209
|
+
error?: Error | null;
|
|
3210
|
+
/** Row click handler */
|
|
3211
|
+
onRowClick?: (row: T) => void;
|
|
3212
|
+
/** Selection change handler */
|
|
3213
|
+
onSelectionChange?: (ids: (string | number)[]) => void;
|
|
3214
|
+
/** Additional class name */
|
|
3215
|
+
className?: string;
|
|
3216
|
+
}
|
|
3217
|
+
declare function MasterDetail<T extends {
|
|
3218
|
+
id: string | number;
|
|
3219
|
+
}>({ entity, masterFields, detailFields: _detailFields, // Captured but not used here - detail handled separately
|
|
3220
|
+
data: externalData, loading: externalLoading, isLoading: externalIsLoading, error: externalError, onRowClick, onSelectionChange, className, ...rest }: MasterDetailProps<T>): React__default.ReactElement;
|
|
3221
|
+
declare namespace MasterDetail {
|
|
3222
|
+
var displayName: string;
|
|
3223
|
+
}
|
|
3224
|
+
|
|
3225
|
+
/**
|
|
3226
|
+
* ConfirmDialog Component
|
|
3227
|
+
*
|
|
3228
|
+
* Confirmation dialog for destructive or important actions.
|
|
3229
|
+
* Composes Modal molecule with Button atoms.
|
|
3230
|
+
*
|
|
3231
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
3232
|
+
*/
|
|
3233
|
+
|
|
3234
|
+
type ConfirmDialogVariant = "danger" | "warning" | "info" | "default";
|
|
3235
|
+
interface ConfirmDialogProps {
|
|
3236
|
+
/** Whether the dialog is open (defaults to true when rendered by slot wrapper) */
|
|
3237
|
+
isOpen?: boolean;
|
|
3238
|
+
/** Callback when dialog is closed (injected by slot wrapper) */
|
|
3239
|
+
onClose?: () => void;
|
|
3240
|
+
/** Callback when action is confirmed (injected by slot wrapper) */
|
|
3241
|
+
onConfirm?: () => void;
|
|
3242
|
+
/** Dialog title */
|
|
3243
|
+
title: string;
|
|
3244
|
+
/** Dialog message/description */
|
|
3245
|
+
message?: string | React__default.ReactNode;
|
|
3246
|
+
/** Alias for message (schema compatibility) */
|
|
3247
|
+
description?: string | React__default.ReactNode;
|
|
3248
|
+
/** Confirm button text */
|
|
3249
|
+
confirmText?: string;
|
|
3250
|
+
/** Alias for confirmText (schema compatibility) */
|
|
3251
|
+
confirmLabel?: string;
|
|
3252
|
+
/** Cancel button text */
|
|
3253
|
+
cancelText?: string;
|
|
3254
|
+
/** Alias for cancelText (schema compatibility) */
|
|
3255
|
+
cancelLabel?: string;
|
|
3256
|
+
/** Dialog variant */
|
|
3257
|
+
variant?: ConfirmDialogVariant;
|
|
3258
|
+
/** Dialog size */
|
|
3259
|
+
size?: ModalSize;
|
|
3260
|
+
/** Loading state for confirm button */
|
|
3261
|
+
isLoading?: boolean;
|
|
3262
|
+
/** Additional CSS classes */
|
|
3263
|
+
className?: string;
|
|
3264
|
+
}
|
|
3265
|
+
/**
|
|
3266
|
+
* ConfirmDialog - Confirmation dialog for important actions
|
|
3267
|
+
*/
|
|
3268
|
+
declare const ConfirmDialog: React__default.FC<ConfirmDialogProps>;
|
|
3269
|
+
|
|
3270
|
+
/**
|
|
3271
|
+
* WizardContainer Component
|
|
3272
|
+
*
|
|
3273
|
+
* Multi-step wizard pattern with progress indicator.
|
|
3274
|
+
* Composes Box, Typography, and Button atoms.
|
|
3275
|
+
*
|
|
3276
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
3277
|
+
*/
|
|
3278
|
+
|
|
3279
|
+
/** Form field definition for wizard sections */
|
|
3280
|
+
interface WizardField {
|
|
3281
|
+
id: string;
|
|
3282
|
+
type: string;
|
|
3283
|
+
label?: string;
|
|
3284
|
+
required?: boolean;
|
|
3285
|
+
repeatable?: boolean;
|
|
3286
|
+
options?: Array<{
|
|
3287
|
+
value: string;
|
|
3288
|
+
label: string;
|
|
3289
|
+
isDefault?: boolean;
|
|
3290
|
+
}>;
|
|
3291
|
+
defaultValue?: unknown;
|
|
3292
|
+
condition?: unknown[];
|
|
3293
|
+
placeholder?: string;
|
|
3294
|
+
entityField?: string;
|
|
3295
|
+
minLength?: number;
|
|
3296
|
+
maxLength?: number;
|
|
3297
|
+
dataSource?: Record<string, unknown>;
|
|
3298
|
+
displayFields?: string[];
|
|
3299
|
+
searchConfig?: Record<string, unknown>;
|
|
3300
|
+
hiddenCalculations?: Array<{
|
|
3301
|
+
variable: string;
|
|
3302
|
+
expression: unknown;
|
|
3303
|
+
scope?: string;
|
|
3304
|
+
}>;
|
|
3305
|
+
signatureConfig?: Record<string, unknown>;
|
|
3306
|
+
displayTemplate?: Record<string, unknown>;
|
|
3307
|
+
lawReference?: Record<string, unknown>;
|
|
3308
|
+
contextMenu?: string[];
|
|
3309
|
+
calculated?: Record<string, unknown>;
|
|
3310
|
+
readOnly?: boolean;
|
|
3311
|
+
minDate?: unknown;
|
|
3312
|
+
stats?: Array<{
|
|
3313
|
+
label: string;
|
|
3314
|
+
value: unknown;
|
|
3315
|
+
icon?: string;
|
|
3316
|
+
}>;
|
|
3317
|
+
items?: Array<{
|
|
3318
|
+
id: string;
|
|
3319
|
+
label: string;
|
|
3320
|
+
autoCheck?: unknown;
|
|
3321
|
+
}>;
|
|
3322
|
+
[key: string]: unknown;
|
|
3323
|
+
}
|
|
3324
|
+
/** Section within a wizard step */
|
|
3325
|
+
interface WizardSection {
|
|
3326
|
+
id: string;
|
|
3327
|
+
title?: string;
|
|
3328
|
+
description?: string;
|
|
3329
|
+
fields?: WizardField[];
|
|
3330
|
+
subsections?: WizardSection[];
|
|
3331
|
+
condition?: unknown[];
|
|
3332
|
+
repeatable?: boolean;
|
|
3333
|
+
minItems?: number;
|
|
3334
|
+
addButtonLabel?: string;
|
|
3335
|
+
hiddenCalculations?: Array<{
|
|
3336
|
+
variable: string;
|
|
3337
|
+
expression: unknown;
|
|
3338
|
+
scope?: string;
|
|
3339
|
+
}>;
|
|
3340
|
+
dataSource?: Record<string, unknown>;
|
|
3341
|
+
readOnly?: boolean;
|
|
3342
|
+
[key: string]: unknown;
|
|
3343
|
+
}
|
|
3344
|
+
/** Entity mapping configuration */
|
|
3345
|
+
interface WizardEntityMapping {
|
|
3346
|
+
entity: string;
|
|
3347
|
+
mode: "search_or_create" | "create_multiple" | "select_one" | "update" | string;
|
|
3348
|
+
parentField?: string;
|
|
3349
|
+
idField?: string;
|
|
3350
|
+
[key: string]: unknown;
|
|
3351
|
+
}
|
|
3352
|
+
/** Validation rule for wizard steps */
|
|
3353
|
+
interface WizardValidationRule {
|
|
3354
|
+
condition: unknown[];
|
|
3355
|
+
message: string;
|
|
3356
|
+
}
|
|
3357
|
+
/** Law reference for compliance */
|
|
3358
|
+
interface WizardLawReference {
|
|
3359
|
+
law: string;
|
|
3360
|
+
article: string;
|
|
3361
|
+
description?: string;
|
|
3362
|
+
}
|
|
3363
|
+
interface WizardStep {
|
|
3364
|
+
/** Step identifier */
|
|
3365
|
+
id?: string;
|
|
3366
|
+
/** Tab identifier (schema-driven) */
|
|
3367
|
+
tabId?: string;
|
|
3368
|
+
/** Step title */
|
|
3369
|
+
title?: string;
|
|
3370
|
+
/** Step name (schema-driven, used as title if title not provided) */
|
|
3371
|
+
name?: string;
|
|
3372
|
+
/** Step description (optional) */
|
|
3373
|
+
description?: string;
|
|
3374
|
+
/** Step content (React component mode) */
|
|
3375
|
+
content?: React__default.ReactNode;
|
|
3376
|
+
/** Whether this step can be skipped */
|
|
3377
|
+
optional?: boolean;
|
|
3378
|
+
/** Custom validation for this step */
|
|
3379
|
+
isValid?: () => boolean;
|
|
3380
|
+
/** Form sections within this step */
|
|
3381
|
+
sections?: WizardSection[];
|
|
3382
|
+
/** Global variables required before entering this step */
|
|
3383
|
+
globalVariablesRequired?: string[];
|
|
3384
|
+
/** Global variables set by this step */
|
|
3385
|
+
globalVariablesSet?: string[];
|
|
3386
|
+
/** Local variables scoped to this step */
|
|
3387
|
+
localVariables?: string[];
|
|
3388
|
+
/** Entity mapping configuration */
|
|
3389
|
+
entityMapping?: WizardEntityMapping;
|
|
3390
|
+
/** Validation rules for this step */
|
|
3391
|
+
validationRules?: WizardValidationRule[];
|
|
3392
|
+
/** Law references for compliance */
|
|
3393
|
+
lawReferences?: WizardLawReference[];
|
|
3394
|
+
/** Phase of the inspection process */
|
|
3395
|
+
phase?: string;
|
|
3396
|
+
/** Context menu actions */
|
|
3397
|
+
contextMenu?: string[];
|
|
3398
|
+
/** Allow additional properties from schema */
|
|
3399
|
+
[key: string]: unknown;
|
|
3400
|
+
}
|
|
3401
|
+
interface WizardContainerProps {
|
|
3402
|
+
/** Wizard steps */
|
|
3403
|
+
steps: WizardStep[];
|
|
3404
|
+
/** Current step index (controlled) - accepts unknown for generated code compatibility */
|
|
3405
|
+
currentStep?: number | string | unknown;
|
|
3406
|
+
/** Callback when step changes */
|
|
3407
|
+
onStepChange?: (stepIndex: number) => void;
|
|
3408
|
+
/** Callback when wizard is completed */
|
|
3409
|
+
onComplete?: () => void;
|
|
3410
|
+
/** Show progress indicator */
|
|
3411
|
+
showProgress?: boolean;
|
|
3412
|
+
/** Allow navigation to previous steps */
|
|
3413
|
+
allowBack?: boolean;
|
|
3414
|
+
/** Modal mode (compact header, no padding) */
|
|
3415
|
+
compact?: boolean;
|
|
3416
|
+
/** Additional CSS classes */
|
|
3417
|
+
className?: string;
|
|
3418
|
+
/** Entity type name (schema-driven) */
|
|
3419
|
+
entity?: string;
|
|
3420
|
+
}
|
|
3421
|
+
/**
|
|
3422
|
+
* WizardContainer - Multi-step wizard
|
|
3423
|
+
*/
|
|
3424
|
+
declare const WizardContainer: React__default.FC<WizardContainerProps>;
|
|
3425
|
+
|
|
3426
|
+
/**
|
|
3427
|
+
* OrbitalVisualization Component
|
|
3428
|
+
*
|
|
3429
|
+
* Visualizes KFlow schemas as atomic orbitals based on complexity.
|
|
3430
|
+
* Uses CSS 3D transforms for lightweight rendering without Three.js.
|
|
3431
|
+
*
|
|
3432
|
+
* Orbital Types (based on complexity score):
|
|
3433
|
+
* - 1s (1-3): Simple sphere - Red
|
|
3434
|
+
* - 2s (4-8): Larger sphere - Orange
|
|
3435
|
+
* - 2p (9-15): Dumbbell shape - Yellow
|
|
3436
|
+
* - 3s (16-25): Sphere with node - Green
|
|
3437
|
+
* - 3p (26-40): Complex dumbbell - Blue
|
|
3438
|
+
* - 3d (41-60): Cloverleaf - Indigo
|
|
3439
|
+
* - 4f (61+): Multi-lobe - Violet
|
|
3440
|
+
*/
|
|
3441
|
+
|
|
3442
|
+
interface OrbitalVisualizationProps {
|
|
3443
|
+
/** Full KFlow schema object */
|
|
3444
|
+
schema?: {
|
|
3445
|
+
dataEntities?: unknown[];
|
|
3446
|
+
ui?: {
|
|
3447
|
+
pages?: {
|
|
3448
|
+
sections?: unknown[];
|
|
3449
|
+
}[];
|
|
3450
|
+
};
|
|
3451
|
+
traits?: unknown[];
|
|
3452
|
+
};
|
|
3453
|
+
/** Direct complexity override (1-100+) */
|
|
3454
|
+
complexity?: number;
|
|
3455
|
+
/** Size of the visualization */
|
|
3456
|
+
size?: "sm" | "md" | "lg" | "xl";
|
|
3457
|
+
/** Show complexity label */
|
|
3458
|
+
showLabel?: boolean;
|
|
3459
|
+
/** Animation enabled */
|
|
3460
|
+
animated?: boolean;
|
|
3461
|
+
/** Click handler */
|
|
3462
|
+
onClick?: () => void;
|
|
3463
|
+
/** Additional CSS classes */
|
|
3464
|
+
className?: string;
|
|
3465
|
+
}
|
|
3466
|
+
declare const OrbitalVisualization: React__default.FC<OrbitalVisualizationProps>;
|
|
3467
|
+
|
|
3468
|
+
/**
|
|
3469
|
+
* SplitPane Component
|
|
3470
|
+
*
|
|
3471
|
+
* Two-pane resizable split layout for master-detail views,
|
|
3472
|
+
* dual-pane editors, and code + preview layouts.
|
|
3473
|
+
*
|
|
3474
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
3475
|
+
*/
|
|
3476
|
+
|
|
3477
|
+
interface SplitPaneProps {
|
|
3478
|
+
/** Direction of the split */
|
|
3479
|
+
direction?: "horizontal" | "vertical";
|
|
3480
|
+
/** Initial ratio (0-100, percentage of first pane) */
|
|
3481
|
+
ratio?: number;
|
|
3482
|
+
/** Minimum size of either pane in pixels */
|
|
3483
|
+
minSize?: number;
|
|
3484
|
+
/** Allow user resizing */
|
|
3485
|
+
resizable?: boolean;
|
|
3486
|
+
/** Content for the left/top pane */
|
|
3487
|
+
left: React__default.ReactNode;
|
|
3488
|
+
/** Content for the right/bottom pane */
|
|
3489
|
+
right: React__default.ReactNode;
|
|
3490
|
+
/** Additional CSS classes */
|
|
3491
|
+
className?: string;
|
|
3492
|
+
/** Class for left/top pane */
|
|
3493
|
+
leftClassName?: string;
|
|
3494
|
+
/** Class for right/bottom pane */
|
|
3495
|
+
rightClassName?: string;
|
|
3496
|
+
}
|
|
3497
|
+
/**
|
|
3498
|
+
* SplitPane - Two-pane resizable layout
|
|
3499
|
+
*/
|
|
3500
|
+
declare const SplitPane: React__default.FC<SplitPaneProps>;
|
|
3501
|
+
|
|
3502
|
+
/**
|
|
3503
|
+
* DashboardGrid Component
|
|
3504
|
+
*
|
|
3505
|
+
* Multi-column grid for widgets and stats cards.
|
|
3506
|
+
* Supports cell spanning for flexible dashboard layouts.
|
|
3507
|
+
*
|
|
3508
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
3509
|
+
*/
|
|
3510
|
+
|
|
3511
|
+
interface DashboardGridCell {
|
|
3512
|
+
/** Unique cell ID */
|
|
3513
|
+
id: string;
|
|
3514
|
+
/** Content to render in the cell */
|
|
3515
|
+
content: React__default.ReactNode;
|
|
3516
|
+
/** Number of columns this cell spans (1-4) */
|
|
3517
|
+
colSpan?: 1 | 2 | 3 | 4;
|
|
3518
|
+
/** Number of rows this cell spans (1-2) */
|
|
3519
|
+
rowSpan?: 1 | 2;
|
|
3520
|
+
}
|
|
3521
|
+
interface DashboardGridProps {
|
|
3522
|
+
/** Number of columns */
|
|
3523
|
+
columns?: 2 | 3 | 4;
|
|
3524
|
+
/** Gap between cells */
|
|
3525
|
+
gap?: "sm" | "md" | "lg";
|
|
3526
|
+
/** Cell definitions */
|
|
3527
|
+
cells: DashboardGridCell[];
|
|
3528
|
+
/** Additional CSS classes */
|
|
3529
|
+
className?: string;
|
|
3530
|
+
}
|
|
3531
|
+
/**
|
|
3532
|
+
* DashboardGrid - Multi-column widget grid
|
|
3533
|
+
*/
|
|
3534
|
+
declare const DashboardGrid: React__default.FC<DashboardGridProps>;
|
|
3535
|
+
|
|
3536
|
+
/**
|
|
3537
|
+
* TabbedContainer Component
|
|
3538
|
+
*
|
|
3539
|
+
* Tabbed content areas with shared header/context.
|
|
3540
|
+
* Wraps the Tabs molecule with layout-specific styling.
|
|
3541
|
+
*
|
|
3542
|
+
* Uses wireframe theme styling (high contrast, sharp edges).
|
|
3543
|
+
*/
|
|
3544
|
+
|
|
3545
|
+
interface TabDefinition {
|
|
3546
|
+
/** Tab identifier */
|
|
3547
|
+
id: string;
|
|
3548
|
+
/** Tab label */
|
|
3549
|
+
label: string;
|
|
3550
|
+
/** Tab content (optional if using sectionId) */
|
|
3551
|
+
content?: React__default.ReactNode;
|
|
3552
|
+
/** Section ID to render (alternative to content) */
|
|
3553
|
+
sectionId?: string;
|
|
3554
|
+
/** Optional badge/count */
|
|
3555
|
+
badge?: string | number;
|
|
3556
|
+
/** Disable this tab */
|
|
3557
|
+
disabled?: boolean;
|
|
3558
|
+
}
|
|
3559
|
+
interface TabbedContainerProps {
|
|
3560
|
+
/** Tab definitions */
|
|
3561
|
+
tabs: TabDefinition[];
|
|
3562
|
+
/** Default active tab ID */
|
|
3563
|
+
defaultTab?: string;
|
|
3564
|
+
/** Controlled active tab */
|
|
3565
|
+
activeTab?: string;
|
|
3566
|
+
/** Callback when tab changes */
|
|
3567
|
+
onTabChange?: (tabId: string) => void;
|
|
3568
|
+
/** Tab position */
|
|
3569
|
+
position?: "top" | "left";
|
|
3570
|
+
/** Additional CSS classes */
|
|
3571
|
+
className?: string;
|
|
3572
|
+
}
|
|
3573
|
+
/**
|
|
3574
|
+
* TabbedContainer - Tabbed content areas
|
|
3575
|
+
*/
|
|
3576
|
+
declare const TabbedContainer: React__default.FC<TabbedContainerProps>;
|
|
3577
|
+
|
|
3578
|
+
/**
|
|
3579
|
+
* Game entity with position and rendering data
|
|
3580
|
+
*/
|
|
3581
|
+
interface GameEntity extends Entity {
|
|
3582
|
+
x: number;
|
|
3583
|
+
y: number;
|
|
3584
|
+
vx?: number;
|
|
3585
|
+
vy?: number;
|
|
3586
|
+
width?: number;
|
|
3587
|
+
height?: number;
|
|
3588
|
+
layer?: number;
|
|
3589
|
+
sprite?: string;
|
|
3590
|
+
color?: string;
|
|
3591
|
+
rotation?: number;
|
|
3592
|
+
scale?: number;
|
|
3593
|
+
visible?: boolean;
|
|
3594
|
+
collider?: {
|
|
3595
|
+
width: number;
|
|
3596
|
+
height: number;
|
|
3597
|
+
offsetX?: number;
|
|
3598
|
+
offsetY?: number;
|
|
3599
|
+
};
|
|
3600
|
+
}
|
|
3601
|
+
/**
|
|
3602
|
+
* Entity renderer function type
|
|
3603
|
+
*/
|
|
3604
|
+
type EntityRenderer = (ctx: CanvasRenderingContext2D, entity: GameEntity) => void;
|
|
3605
|
+
/** Input key bindings - supports both field-based and event-based formats */
|
|
3606
|
+
interface InputBinding$1 {
|
|
3607
|
+
key: string;
|
|
3608
|
+
/** Direct field mapping (e.g., 'left', 'right', 'jump') */
|
|
3609
|
+
field?: 'left' | 'right' | 'jump' | 'attack';
|
|
3610
|
+
/** Event-based mapping (e.g., 'MOVE_LEFT', 'JUMP') - mapped to fields */
|
|
3611
|
+
event?: string;
|
|
3612
|
+
/** Whether to hold the input (continuous) or trigger once */
|
|
3613
|
+
hold?: boolean;
|
|
3614
|
+
}
|
|
3615
|
+
/** Collision definition from schema */
|
|
3616
|
+
interface CollisionDef {
|
|
3617
|
+
/** Entity types that collide [typeA, typeB] */
|
|
3618
|
+
between: [string, string];
|
|
3619
|
+
/** Collision type: 'solid' resolves overlap, 'trigger' emits event */
|
|
3620
|
+
type: 'solid' | 'trigger';
|
|
3621
|
+
/** Event to emit for trigger collisions */
|
|
3622
|
+
emits?: string;
|
|
3623
|
+
}
|
|
3624
|
+
interface GameCanvasProps {
|
|
3625
|
+
/** Entity type names to render (optional filter) */
|
|
3626
|
+
renderEntities?: string[];
|
|
3627
|
+
/** Rendering functions per entity type */
|
|
3628
|
+
renderers?: Record<string, EntityRenderer>;
|
|
3629
|
+
/**
|
|
3630
|
+
* Renderer type hint from schema (e.g., 'phaser', 'canvas').
|
|
3631
|
+
* Currently ignored - component uses Canvas2D.
|
|
3632
|
+
* Reserved for future multi-renderer support.
|
|
3633
|
+
*/
|
|
3634
|
+
renderer?: string;
|
|
3635
|
+
/** Background color or gradient */
|
|
3636
|
+
background?: string;
|
|
3637
|
+
/** Canvas width in pixels or 'full' for responsive */
|
|
3638
|
+
width?: number | 'full';
|
|
3639
|
+
/** Canvas height in pixels or 'auto' for aspect ratio */
|
|
3640
|
+
height?: number | 'auto';
|
|
3641
|
+
/** Aspect ratio (e.g., '16:9', '4:3') */
|
|
3642
|
+
aspectRatio?: string;
|
|
3643
|
+
/** Camera offset for scrolling */
|
|
3644
|
+
cameraOffset?: {
|
|
3645
|
+
x: number;
|
|
3646
|
+
y: number;
|
|
3647
|
+
};
|
|
3648
|
+
/** Debug mode shows hitboxes and entity info */
|
|
3649
|
+
debug?: boolean;
|
|
3650
|
+
/** Additional CSS classes */
|
|
3651
|
+
className?: string;
|
|
3652
|
+
/** Click handler for canvas */
|
|
3653
|
+
onClick?: (x: number, y: number, entity?: GameEntity) => void;
|
|
3654
|
+
/** Enable keyboard input handling (updates Input entity) */
|
|
3655
|
+
enableInput?: boolean;
|
|
3656
|
+
/** Custom input key bindings */
|
|
3657
|
+
inputBindings?: InputBinding$1[];
|
|
3658
|
+
/** Collision definitions from schema */
|
|
3659
|
+
collisions?: CollisionDef[];
|
|
3660
|
+
/** Event bus for emitting collision events */
|
|
3661
|
+
eventBus?: {
|
|
3662
|
+
emit: (event: string, payload?: unknown) => void;
|
|
3663
|
+
};
|
|
3664
|
+
}
|
|
3665
|
+
declare function GameCanvas({ renderEntities, renderers, background, width, height, aspectRatio, cameraOffset, debug, className, onClick, enableInput, inputBindings, collisions, eventBus, }: GameCanvasProps): react_jsx_runtime.JSX.Element;
|
|
3666
|
+
declare namespace GameCanvas {
|
|
3667
|
+
var displayName: string;
|
|
3668
|
+
}
|
|
3669
|
+
|
|
3670
|
+
interface StatBadgeProps {
|
|
3671
|
+
/** Stat label */
|
|
3672
|
+
label: string;
|
|
3673
|
+
/** Current value (defaults to 0 if not provided) */
|
|
3674
|
+
value?: number | string;
|
|
3675
|
+
/** Maximum value (for bar/hearts format) */
|
|
3676
|
+
max?: number;
|
|
3677
|
+
/** Data source entity name (for schema config) */
|
|
3678
|
+
source?: string;
|
|
3679
|
+
/** Field name in the source (for schema config) */
|
|
3680
|
+
field?: string;
|
|
3681
|
+
/** Display format */
|
|
3682
|
+
format?: 'number' | 'hearts' | 'bar' | 'text' | string;
|
|
3683
|
+
/** Icon component or emoji */
|
|
3684
|
+
icon?: React.ReactNode;
|
|
3685
|
+
/** Size variant */
|
|
3686
|
+
size?: 'sm' | 'md' | 'lg' | string;
|
|
3687
|
+
/** Visual variant */
|
|
3688
|
+
variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | string;
|
|
3689
|
+
/** Additional CSS classes */
|
|
3690
|
+
className?: string;
|
|
3691
|
+
}
|
|
3692
|
+
|
|
3693
|
+
interface GameHudStat extends Omit<StatBadgeProps, "size"> {
|
|
3694
|
+
/** Data source entity name */
|
|
3695
|
+
source?: string;
|
|
3696
|
+
/** Field name in the source */
|
|
3697
|
+
field?: string;
|
|
3698
|
+
}
|
|
3699
|
+
/**
|
|
3700
|
+
* Schema-style HUD element definition.
|
|
3701
|
+
* Used when elements are passed from schema render_ui effects.
|
|
3702
|
+
*/
|
|
3703
|
+
interface GameHudElement {
|
|
3704
|
+
type: string;
|
|
3705
|
+
bind?: string;
|
|
3706
|
+
position?: string;
|
|
3707
|
+
label?: string;
|
|
3708
|
+
}
|
|
3709
|
+
interface GameHudProps {
|
|
3710
|
+
/** Position of the HUD */
|
|
3711
|
+
position?: "top" | "bottom" | "corners" | string;
|
|
3712
|
+
/** Stats to display - accepts readonly for compatibility with generated const arrays */
|
|
3713
|
+
stats?: readonly GameHudStat[];
|
|
3714
|
+
/** Alias for stats (schema compatibility) */
|
|
3715
|
+
items?: readonly GameHudStat[];
|
|
3716
|
+
/**
|
|
3717
|
+
* Schema-style elements array (alternative to stats).
|
|
3718
|
+
* Converted to stats internally for backwards compatibility.
|
|
3719
|
+
*/
|
|
3720
|
+
elements?: readonly GameHudElement[];
|
|
3721
|
+
/** Size variant */
|
|
3722
|
+
size?: "sm" | "md" | "lg";
|
|
3723
|
+
/** Additional CSS classes */
|
|
3724
|
+
className?: string;
|
|
3725
|
+
/** Whether to use a semi-transparent background */
|
|
3726
|
+
transparent?: boolean;
|
|
3727
|
+
}
|
|
3728
|
+
declare function GameHud({ position: propPosition, stats: propStats, items, elements, size, className, transparent, }: GameHudProps): react_jsx_runtime.JSX.Element;
|
|
3729
|
+
declare namespace GameHud {
|
|
3730
|
+
var displayName: string;
|
|
3731
|
+
}
|
|
3732
|
+
|
|
3733
|
+
interface GameControl {
|
|
3734
|
+
/** Unique identifier */
|
|
3735
|
+
id?: string;
|
|
3736
|
+
/** Alias for id (schema compatibility) */
|
|
3737
|
+
key?: string;
|
|
3738
|
+
/** Event to emit on press */
|
|
3739
|
+
event: string;
|
|
3740
|
+
/** Display label */
|
|
3741
|
+
label?: string;
|
|
3742
|
+
/** Icon component or emoji */
|
|
3743
|
+
icon?: React.ReactNode;
|
|
3744
|
+
/** Button variant */
|
|
3745
|
+
variant?: "primary" | "secondary" | "ghost" | string;
|
|
3746
|
+
}
|
|
3747
|
+
interface GameControlsProps {
|
|
3748
|
+
/** Control layout type */
|
|
3749
|
+
layout: "dpad" | "joystick" | "buttons" | "custom" | string;
|
|
3750
|
+
/** Position on screen */
|
|
3751
|
+
position: "bottom-left" | "bottom-right" | "bottom-center" | "split" | string;
|
|
3752
|
+
/** Controls to display - accepts readonly for compatibility with generated const arrays */
|
|
3753
|
+
controls?: readonly GameControl[];
|
|
3754
|
+
/** Called when control is pressed/released */
|
|
3755
|
+
onControl?: (event: string, pressed: boolean) => void;
|
|
3756
|
+
/** Size variant */
|
|
3757
|
+
size?: "sm" | "md" | "lg";
|
|
3758
|
+
/** Additional CSS classes */
|
|
3759
|
+
className?: string;
|
|
3760
|
+
/** Whether controls are visible */
|
|
3761
|
+
visible?: boolean;
|
|
3762
|
+
/** Opacity when visible */
|
|
3763
|
+
opacity?: number;
|
|
3764
|
+
}
|
|
3765
|
+
declare function GameControls({ layout, position, controls, onControl, size, className, visible, opacity, }: GameControlsProps): react_jsx_runtime.JSX.Element | null;
|
|
3766
|
+
declare namespace GameControls {
|
|
3767
|
+
var displayName: string;
|
|
3768
|
+
}
|
|
3769
|
+
|
|
3770
|
+
interface MenuOption {
|
|
3771
|
+
/** Optional ID (generated from index if not provided) */
|
|
3772
|
+
id?: string;
|
|
3773
|
+
/** Display label */
|
|
3774
|
+
label: string;
|
|
3775
|
+
/** Event to emit on click */
|
|
3776
|
+
event?: string;
|
|
3777
|
+
/** Page to navigate to */
|
|
3778
|
+
navigatesTo?: string;
|
|
3779
|
+
/** Button variant */
|
|
3780
|
+
variant?: "primary" | "secondary" | "ghost" | string;
|
|
3781
|
+
/** Whether the option is disabled */
|
|
3782
|
+
disabled?: boolean;
|
|
3783
|
+
/** Sub-label or description */
|
|
3784
|
+
subLabel?: string;
|
|
3785
|
+
/** Action identifier (alternative to event) */
|
|
3786
|
+
action?: string;
|
|
3787
|
+
}
|
|
3788
|
+
interface GameMenuProps {
|
|
3789
|
+
/** Menu title */
|
|
3790
|
+
title: string;
|
|
3791
|
+
/** Optional subtitle or version */
|
|
3792
|
+
subtitle?: string;
|
|
3793
|
+
/** Menu options - accepts readonly for compatibility with generated const arrays */
|
|
3794
|
+
options?: readonly MenuOption[];
|
|
3795
|
+
/** Alias for options (schema compatibility) */
|
|
3796
|
+
menuItems?: readonly MenuOption[];
|
|
3797
|
+
/** Called when an option is selected (legacy callback, prefer event bus) */
|
|
3798
|
+
onSelect?: (option: MenuOption) => void;
|
|
3799
|
+
/** Event bus for emitting UI events (optional, uses hook if not provided) */
|
|
3800
|
+
eventBus?: EventBusContextType;
|
|
3801
|
+
/** Background image or gradient */
|
|
3802
|
+
background?: string;
|
|
3803
|
+
/** Logo image URL */
|
|
3804
|
+
logo?: string;
|
|
3805
|
+
/** Additional CSS classes */
|
|
3806
|
+
className?: string;
|
|
3807
|
+
}
|
|
3808
|
+
declare function GameMenu({ title, subtitle, options, menuItems, onSelect, eventBus: eventBusProp, background, logo, className, }: GameMenuProps): react_jsx_runtime.JSX.Element;
|
|
3809
|
+
declare namespace GameMenu {
|
|
3810
|
+
var displayName: string;
|
|
3811
|
+
}
|
|
3812
|
+
|
|
3813
|
+
interface PauseOption {
|
|
3814
|
+
/** Display label */
|
|
3815
|
+
label: string;
|
|
3816
|
+
/** Event to emit on click */
|
|
3817
|
+
event?: string;
|
|
3818
|
+
/** Page to navigate to */
|
|
3819
|
+
navigatesTo?: string;
|
|
3820
|
+
/** Button variant */
|
|
3821
|
+
variant?: "primary" | "secondary" | "ghost" | "destructive";
|
|
3822
|
+
}
|
|
3823
|
+
interface GamePauseOverlayProps {
|
|
3824
|
+
/** Pause menu options */
|
|
3825
|
+
options?: PauseOption[];
|
|
3826
|
+
/** Alias for options (schema compatibility) */
|
|
3827
|
+
menuItems?: PauseOption[];
|
|
3828
|
+
/** Called when an option is selected (legacy callback, prefer event bus) */
|
|
3829
|
+
onSelect?: (option: PauseOption) => void;
|
|
3830
|
+
/** Event bus for emitting UI events (optional, uses hook if not provided) */
|
|
3831
|
+
eventBus?: EventBusContextType;
|
|
3832
|
+
/** Title (default: "PAUSED") */
|
|
3833
|
+
title?: string;
|
|
3834
|
+
/** Additional CSS classes */
|
|
3835
|
+
className?: string;
|
|
3836
|
+
/** Whether the pause menu is visible */
|
|
3837
|
+
visible?: boolean;
|
|
3838
|
+
/** Called when clicking outside the menu */
|
|
3839
|
+
onDismiss?: () => void;
|
|
3840
|
+
}
|
|
3841
|
+
declare function GamePauseOverlay({ options, menuItems, onSelect, eventBus: eventBusProp, title, className, visible, onDismiss, }: GamePauseOverlayProps): react_jsx_runtime.JSX.Element | null;
|
|
3842
|
+
declare namespace GamePauseOverlay {
|
|
3843
|
+
var displayName: string;
|
|
3844
|
+
}
|
|
3845
|
+
|
|
3846
|
+
interface GameOverStat {
|
|
3847
|
+
/** Stat label */
|
|
3848
|
+
label: string;
|
|
3849
|
+
/** Stat value (required if bind is not provided) */
|
|
3850
|
+
value?: number | string;
|
|
3851
|
+
/**
|
|
3852
|
+
* Schema-style data binding (e.g., "player.score").
|
|
3853
|
+
* Alternative to value - used when stats come from schema render_ui effects.
|
|
3854
|
+
* Component will display 0 as placeholder since runtime binding is not implemented.
|
|
3855
|
+
*/
|
|
3856
|
+
bind?: string;
|
|
3857
|
+
/** Display format */
|
|
3858
|
+
format?: "number" | "time" | "text";
|
|
3859
|
+
/** Icon */
|
|
3860
|
+
icon?: React.ReactNode;
|
|
3861
|
+
}
|
|
3862
|
+
interface GameOverAction {
|
|
3863
|
+
/** Display label */
|
|
3864
|
+
label: string;
|
|
3865
|
+
/** Event to emit on click */
|
|
3866
|
+
event?: string;
|
|
3867
|
+
/** Page to navigate to */
|
|
3868
|
+
navigatesTo?: string;
|
|
3869
|
+
/** Button variant */
|
|
3870
|
+
variant?: "primary" | "secondary" | "ghost";
|
|
3871
|
+
}
|
|
3872
|
+
interface GameOverScreenProps {
|
|
3873
|
+
/** Screen title (e.g., "Game Over", "Victory!") */
|
|
3874
|
+
title: string;
|
|
3875
|
+
/** Optional message */
|
|
3876
|
+
message?: string;
|
|
3877
|
+
/** Stats to display */
|
|
3878
|
+
stats?: GameOverStat[];
|
|
3879
|
+
/** Action buttons */
|
|
3880
|
+
actions?: GameOverAction[];
|
|
3881
|
+
/** Alias for actions (schema compatibility) */
|
|
3882
|
+
menuItems?: GameOverAction[];
|
|
3883
|
+
/** Called when an action is selected (legacy callback, prefer event bus) */
|
|
3884
|
+
onAction?: (action: GameOverAction) => void;
|
|
3885
|
+
/** Event bus for emitting UI events (optional, uses hook if not provided) */
|
|
3886
|
+
eventBus?: EventBusContextType;
|
|
3887
|
+
/** Victory or defeat variant */
|
|
3888
|
+
variant?: "victory" | "defeat" | "neutral";
|
|
3889
|
+
/** High score (optional, shows "NEW HIGH SCORE!" if exceeded) */
|
|
3890
|
+
highScore?: number | string;
|
|
3891
|
+
/** Current score for high score comparison (accepts string for schema bindings) */
|
|
3892
|
+
currentScore?: number | string;
|
|
3893
|
+
/** Additional CSS classes */
|
|
3894
|
+
className?: string;
|
|
3895
|
+
}
|
|
3896
|
+
declare function GameOverScreen({ title, message, stats, actions, menuItems, onAction, eventBus: eventBusProp, variant, highScore, currentScore, className, }: GameOverScreenProps): react_jsx_runtime.JSX.Element;
|
|
3897
|
+
declare namespace GameOverScreen {
|
|
3898
|
+
var displayName: string;
|
|
3899
|
+
}
|
|
3900
|
+
|
|
3901
|
+
interface LevelData {
|
|
3902
|
+
/** Unique level identifier */
|
|
3903
|
+
id: string;
|
|
3904
|
+
/** Level ID (alternative to id) */
|
|
3905
|
+
levelId?: string;
|
|
3906
|
+
/** Level number */
|
|
3907
|
+
number?: number;
|
|
3908
|
+
/** Level name/title */
|
|
3909
|
+
name?: string;
|
|
3910
|
+
/** Stars earned (0-3) */
|
|
3911
|
+
stars?: number;
|
|
3912
|
+
/** Difficulty level */
|
|
3913
|
+
difficulty?: 'easy' | 'medium' | 'hard' | string;
|
|
3914
|
+
/** Whether the level is locked */
|
|
3915
|
+
isLocked?: boolean;
|
|
3916
|
+
/** Best score on this level */
|
|
3917
|
+
bestScore?: number;
|
|
3918
|
+
/** Thumbnail image URL */
|
|
3919
|
+
thumbnail?: string;
|
|
3920
|
+
/** Allow additional properties from schema */
|
|
3921
|
+
[key: string]: unknown;
|
|
3922
|
+
}
|
|
3923
|
+
interface LevelFieldDisplay {
|
|
3924
|
+
/** Field name */
|
|
3925
|
+
field?: string;
|
|
3926
|
+
/** Display type */
|
|
3927
|
+
display?: 'title' | 'number' | 'stars' | 'locked' | 'thumbnail' | string;
|
|
3928
|
+
}
|
|
3929
|
+
interface LevelSelectProps {
|
|
3930
|
+
/** Level data */
|
|
3931
|
+
levels?: LevelData[];
|
|
3932
|
+
/** Entity name (schema config) */
|
|
3933
|
+
entity?: string;
|
|
3934
|
+
/** Layout variant */
|
|
3935
|
+
layout?: 'grid' | 'list' | 'carousel' | string;
|
|
3936
|
+
/** Fields to display per level */
|
|
3937
|
+
fields?: LevelFieldDisplay[];
|
|
3938
|
+
/** Event to emit on selection (schema config) */
|
|
3939
|
+
selectEvent?: string;
|
|
3940
|
+
/** Called when a level is selected */
|
|
3941
|
+
onSelect?: (level: LevelData) => void;
|
|
3942
|
+
/** Path to navigate to on selection. Supports :id, :levelId, :number placeholders */
|
|
3943
|
+
navigatesTo?: string;
|
|
3944
|
+
/** Currently selected level ID */
|
|
3945
|
+
selectedId?: string;
|
|
3946
|
+
/** Maximum stars possible per level */
|
|
3947
|
+
maxStars?: number;
|
|
3948
|
+
/** Additional CSS classes */
|
|
3949
|
+
className?: string;
|
|
3950
|
+
/** Title above the level grid */
|
|
3951
|
+
title?: string;
|
|
3952
|
+
}
|
|
3953
|
+
declare function LevelSelect({ levels, entity: _entity, layout, fields, selectEvent: _selectEvent, onSelect, navigatesTo, selectedId, maxStars, className, title, }: LevelSelectProps): react_jsx_runtime.JSX.Element;
|
|
3954
|
+
declare namespace LevelSelect {
|
|
3955
|
+
var displayName: string;
|
|
3956
|
+
}
|
|
3957
|
+
|
|
3958
|
+
/**
|
|
3959
|
+
* TilemapRenderer Component
|
|
3960
|
+
*
|
|
3961
|
+
* Canvas-based tilemap renderer with culling and parallax support.
|
|
3962
|
+
*/
|
|
3963
|
+
interface TileLayer {
|
|
3964
|
+
name: string;
|
|
3965
|
+
data: number[];
|
|
3966
|
+
width: number;
|
|
3967
|
+
height: number;
|
|
3968
|
+
visible?: boolean;
|
|
3969
|
+
}
|
|
3970
|
+
interface Tileset {
|
|
3971
|
+
url: string;
|
|
3972
|
+
tileWidth: number;
|
|
3973
|
+
tileHeight: number;
|
|
3974
|
+
columns: number;
|
|
3975
|
+
}
|
|
3976
|
+
interface ParallaxConfig {
|
|
3977
|
+
layer: string;
|
|
3978
|
+
factor: number;
|
|
3979
|
+
}
|
|
3980
|
+
interface TilemapRendererProps {
|
|
3981
|
+
/** Tile layers to render */
|
|
3982
|
+
layers: TileLayer[];
|
|
3983
|
+
/** Tileset configuration */
|
|
3984
|
+
tileset: Tileset;
|
|
3985
|
+
/** Camera position */
|
|
3986
|
+
camera: {
|
|
3987
|
+
x: number;
|
|
3988
|
+
y: number;
|
|
3989
|
+
};
|
|
3990
|
+
/** Viewport width in pixels */
|
|
3991
|
+
viewportWidth: number;
|
|
3992
|
+
/** Viewport height in pixels */
|
|
3993
|
+
viewportHeight: number;
|
|
3994
|
+
/** Enable pixel art rendering (no smoothing) */
|
|
3995
|
+
pixelArt?: boolean;
|
|
3996
|
+
/** Parallax configuration per layer */
|
|
3997
|
+
parallaxLayers?: ParallaxConfig[];
|
|
3998
|
+
/** Optional className */
|
|
3999
|
+
className?: string;
|
|
4000
|
+
/** Scale factor for rendering */
|
|
4001
|
+
scale?: number;
|
|
4002
|
+
/** Show debug grid */
|
|
4003
|
+
debug?: boolean;
|
|
4004
|
+
}
|
|
4005
|
+
/**
|
|
4006
|
+
* Tilemap renderer component with efficient canvas-based rendering
|
|
4007
|
+
*
|
|
4008
|
+
* @example
|
|
4009
|
+
* ```tsx
|
|
4010
|
+
* <TilemapRenderer
|
|
4011
|
+
* layers={levelData.layers}
|
|
4012
|
+
* tileset={{
|
|
4013
|
+
* url: '/tilesets/terrain.png',
|
|
4014
|
+
* tileWidth: 16,
|
|
4015
|
+
* tileHeight: 16,
|
|
4016
|
+
* columns: 16
|
|
4017
|
+
* }}
|
|
4018
|
+
* camera={{ x: playerX - 160, y: playerY - 120 }}
|
|
4019
|
+
* viewportWidth={320}
|
|
4020
|
+
* viewportHeight={240}
|
|
4021
|
+
* pixelArt
|
|
4022
|
+
* scale={2}
|
|
4023
|
+
* />
|
|
4024
|
+
* ```
|
|
4025
|
+
*/
|
|
4026
|
+
declare function TilemapRenderer({ layers, tileset, camera, viewportWidth, viewportHeight, pixelArt, parallaxLayers, className, scale, debug, }: TilemapRendererProps): JSX.Element;
|
|
4027
|
+
|
|
4028
|
+
/**
|
|
4029
|
+
* InventoryPanel Component
|
|
4030
|
+
*
|
|
4031
|
+
* Grid-based inventory UI with item selection and tooltips.
|
|
4032
|
+
*/
|
|
4033
|
+
interface InventoryItem {
|
|
4034
|
+
id: string;
|
|
4035
|
+
type: string;
|
|
4036
|
+
quantity: number;
|
|
4037
|
+
sprite?: string;
|
|
4038
|
+
name?: string;
|
|
4039
|
+
description?: string;
|
|
4040
|
+
}
|
|
4041
|
+
interface InventoryPanelProps {
|
|
4042
|
+
/** Array of items in inventory */
|
|
4043
|
+
items: InventoryItem[];
|
|
4044
|
+
/** Total number of slots */
|
|
4045
|
+
slots: number;
|
|
4046
|
+
/** Number of columns in grid */
|
|
4047
|
+
columns: number;
|
|
4048
|
+
/** Currently selected slot index */
|
|
4049
|
+
selectedSlot?: number;
|
|
4050
|
+
/** Called when a slot is selected */
|
|
4051
|
+
onSelectSlot: (index: number) => void;
|
|
4052
|
+
/** Called when an item is used (double-click or Enter) */
|
|
4053
|
+
onUseItem?: (item: InventoryItem) => void;
|
|
4054
|
+
/** Called when an item is dropped */
|
|
4055
|
+
onDropItem?: (item: InventoryItem) => void;
|
|
4056
|
+
/** Show item tooltips on hover */
|
|
4057
|
+
showTooltips?: boolean;
|
|
4058
|
+
/** Optional className */
|
|
4059
|
+
className?: string;
|
|
4060
|
+
/** Slot size in pixels */
|
|
4061
|
+
slotSize?: number;
|
|
4062
|
+
}
|
|
4063
|
+
/**
|
|
4064
|
+
* Inventory panel component with grid layout
|
|
4065
|
+
*
|
|
4066
|
+
* @example
|
|
4067
|
+
* ```tsx
|
|
4068
|
+
* <InventoryPanel
|
|
4069
|
+
* items={playerInventory}
|
|
4070
|
+
* slots={20}
|
|
4071
|
+
* columns={5}
|
|
4072
|
+
* selectedSlot={selectedSlot}
|
|
4073
|
+
* onSelectSlot={setSelectedSlot}
|
|
4074
|
+
* onUseItem={(item) => console.log('Used:', item.name)}
|
|
4075
|
+
* showTooltips
|
|
4076
|
+
* />
|
|
4077
|
+
* ```
|
|
4078
|
+
*/
|
|
4079
|
+
declare function InventoryPanel({ items, slots, columns, selectedSlot, onSelectSlot, onUseItem, onDropItem, showTooltips, className, slotSize, }: InventoryPanelProps): JSX.Element;
|
|
4080
|
+
|
|
4081
|
+
/**
|
|
4082
|
+
* DialogueBox Component
|
|
4083
|
+
*
|
|
4084
|
+
* NPC dialogue display with typewriter effect and choices.
|
|
4085
|
+
*/
|
|
4086
|
+
interface DialogueChoice {
|
|
4087
|
+
text: string;
|
|
4088
|
+
action?: string;
|
|
4089
|
+
next?: string;
|
|
4090
|
+
disabled?: boolean;
|
|
4091
|
+
}
|
|
4092
|
+
interface DialogueNode {
|
|
4093
|
+
id?: string;
|
|
4094
|
+
speaker: string;
|
|
4095
|
+
text: string;
|
|
4096
|
+
portrait?: string;
|
|
4097
|
+
choices?: DialogueChoice[];
|
|
4098
|
+
autoAdvance?: number;
|
|
4099
|
+
}
|
|
4100
|
+
interface DialogueBoxProps {
|
|
4101
|
+
/** Current dialogue node to display */
|
|
4102
|
+
dialogue: DialogueNode;
|
|
4103
|
+
/** Typewriter speed in ms per character (0 = instant) */
|
|
4104
|
+
typewriterSpeed?: number;
|
|
4105
|
+
/** Position of dialogue box */
|
|
4106
|
+
position?: 'top' | 'bottom';
|
|
4107
|
+
/** Called when text animation completes */
|
|
4108
|
+
onComplete?: () => void;
|
|
4109
|
+
/** Called when a choice is selected */
|
|
4110
|
+
onChoice?: (choice: DialogueChoice) => void;
|
|
4111
|
+
/** Called when dialogue is advanced (no choices) */
|
|
4112
|
+
onAdvance?: () => void;
|
|
4113
|
+
/** Optional className */
|
|
4114
|
+
className?: string;
|
|
4115
|
+
}
|
|
4116
|
+
/**
|
|
4117
|
+
* Dialogue box component with typewriter effect
|
|
4118
|
+
*
|
|
4119
|
+
* @example
|
|
4120
|
+
* ```tsx
|
|
4121
|
+
* <DialogueBox
|
|
4122
|
+
* dialogue={{
|
|
4123
|
+
* speaker: "Old Man",
|
|
4124
|
+
* text: "It's dangerous to go alone! Take this.",
|
|
4125
|
+
* portrait: "/portraits/oldman.png",
|
|
4126
|
+
* choices: [
|
|
4127
|
+
* { text: "Thank you!", action: "ACCEPT_ITEM" },
|
|
4128
|
+
* { text: "No thanks", next: "decline_node" }
|
|
4129
|
+
* ]
|
|
4130
|
+
* }}
|
|
4131
|
+
* typewriterSpeed={30}
|
|
4132
|
+
* onChoice={(choice) => handleChoice(choice)}
|
|
4133
|
+
* position="bottom"
|
|
4134
|
+
* />
|
|
4135
|
+
* ```
|
|
4136
|
+
*/
|
|
4137
|
+
declare function DialogueBox({ dialogue, typewriterSpeed, position, onComplete, onChoice, onAdvance, className, }: DialogueBoxProps): JSX.Element;
|
|
4138
|
+
|
|
4139
|
+
/**
|
|
4140
|
+
* InputListener - Invisible component that captures keyboard input
|
|
4141
|
+
*
|
|
4142
|
+
* Rendered by InputCapture trait via render_ui effect.
|
|
4143
|
+
* Listens for keydown/keyup events and:
|
|
4144
|
+
* 1. Updates the Input singleton entity
|
|
4145
|
+
* 2. Emits INPUT:* events via event bus
|
|
4146
|
+
*
|
|
4147
|
+
* This follows the closed circuit pattern:
|
|
4148
|
+
* Trait (render_ui) → Component (InputListener) → Events (INPUT:*) → Trait (state machine)
|
|
4149
|
+
*
|
|
4150
|
+
* @generated pattern component
|
|
4151
|
+
*/
|
|
4152
|
+
|
|
4153
|
+
/**
|
|
4154
|
+
* Input binding configuration
|
|
4155
|
+
*/
|
|
4156
|
+
interface InputBinding {
|
|
4157
|
+
/** Key code or key value (e.g., 'ArrowLeft', 'KeyA', 'Space') */
|
|
4158
|
+
key: string;
|
|
4159
|
+
/** Field name in the Input singleton (e.g., 'left', 'right', 'jump') */
|
|
4160
|
+
field: string;
|
|
4161
|
+
/** Optional custom event name (defaults to INPUT:{FIELD}_DOWN/UP) */
|
|
4162
|
+
event?: string;
|
|
4163
|
+
}
|
|
4164
|
+
/**
|
|
4165
|
+
* InputListener props
|
|
4166
|
+
*/
|
|
4167
|
+
interface InputListenerProps {
|
|
4168
|
+
/** Key bindings configuration */
|
|
4169
|
+
bindings?: readonly InputBinding[];
|
|
4170
|
+
/** Whether input listening is enabled */
|
|
4171
|
+
enabled?: boolean;
|
|
4172
|
+
/** Event bus for emitting events (optional, uses hook if not provided) */
|
|
4173
|
+
eventBus?: EventBusContextType;
|
|
4174
|
+
}
|
|
4175
|
+
/**
|
|
4176
|
+
* InputListener Component
|
|
4177
|
+
*
|
|
4178
|
+
* Invisible component that captures keyboard input and emits events.
|
|
4179
|
+
* Designed to be rendered by the InputCapture trait via render_ui effect.
|
|
4180
|
+
*/
|
|
4181
|
+
declare function InputListener({ bindings, enabled, eventBus: eventBusProp, }: InputListenerProps): null;
|
|
4182
|
+
declare namespace InputListener {
|
|
4183
|
+
var displayName: string;
|
|
4184
|
+
}
|
|
4185
|
+
|
|
4186
|
+
/**
|
|
4187
|
+
* CollisionDetector - Invisible component that runs collision detection
|
|
4188
|
+
*
|
|
4189
|
+
* Rendered by Collision2DSystem trait via render_ui effect.
|
|
4190
|
+
* Runs AABB collision checks each frame and emits collision events.
|
|
4191
|
+
*
|
|
4192
|
+
* This follows the closed circuit pattern:
|
|
4193
|
+
* Trait (render_ui) → Component (CollisionDetector) → Events (COLLISION_*) → Trait (state machine)
|
|
4194
|
+
*
|
|
4195
|
+
* @generated pattern component
|
|
4196
|
+
*/
|
|
4197
|
+
|
|
4198
|
+
/**
|
|
4199
|
+
* Collision rule configuration
|
|
4200
|
+
*/
|
|
4201
|
+
interface CollisionRule {
|
|
4202
|
+
/** Entity type A */
|
|
4203
|
+
typeA: string;
|
|
4204
|
+
/** Entity type B */
|
|
4205
|
+
typeB: string;
|
|
4206
|
+
/** Whether this is a trigger (pass-through) or solid collision */
|
|
4207
|
+
isTrigger?: boolean;
|
|
4208
|
+
/** Custom event name to emit (defaults to COLLISION_ENTER/TRIGGER_ENTER) */
|
|
4209
|
+
event?: string;
|
|
4210
|
+
}
|
|
4211
|
+
/**
|
|
4212
|
+
* CollisionDetector props
|
|
4213
|
+
*/
|
|
4214
|
+
interface CollisionDetectorProps {
|
|
4215
|
+
/** Collision detection algorithm */
|
|
4216
|
+
algorithm?: 'aabb' | 'circle';
|
|
4217
|
+
/** Collision rules to check */
|
|
4218
|
+
rules?: readonly CollisionRule[];
|
|
4219
|
+
/** Whether collision detection is enabled */
|
|
4220
|
+
enabled?: boolean;
|
|
4221
|
+
/** Event bus for emitting events (optional, uses hook if not provided) */
|
|
4222
|
+
eventBus?: EventBusContextType;
|
|
4223
|
+
}
|
|
4224
|
+
/**
|
|
4225
|
+
* CollisionDetector Component
|
|
4226
|
+
*
|
|
4227
|
+
* Invisible component that runs collision detection each frame and emits events.
|
|
4228
|
+
* Designed to be rendered by the Collision2DSystem trait via render_ui effect.
|
|
4229
|
+
*/
|
|
4230
|
+
declare function CollisionDetector({ algorithm, rules, enabled, eventBus: eventBusProp, }: CollisionDetectorProps): null;
|
|
4231
|
+
declare namespace CollisionDetector {
|
|
4232
|
+
var displayName: string;
|
|
4233
|
+
}
|
|
4234
|
+
|
|
4235
|
+
/**
|
|
4236
|
+
* UISlotRenderer Component
|
|
4237
|
+
*
|
|
4238
|
+
* Renders all UI slots. This is the central component that displays
|
|
4239
|
+
* content rendered by traits via render_ui effects.
|
|
4240
|
+
*
|
|
4241
|
+
* Slots are rendered as:
|
|
4242
|
+
* - Layout slots: Inline in the page flow (main, sidebar)
|
|
4243
|
+
* - Portal slots: Rendered via portals (modal, drawer, toast, etc.)
|
|
4244
|
+
* - HUD slots: Fixed position overlays (hud-top, hud-bottom)
|
|
4245
|
+
*
|
|
4246
|
+
* @packageDocumentation
|
|
4247
|
+
*/
|
|
4248
|
+
|
|
4249
|
+
interface UISlotComponentProps {
|
|
4250
|
+
slot: UISlot;
|
|
4251
|
+
portal?: boolean;
|
|
4252
|
+
position?: "left" | "right" | "top-right" | "top-left" | "bottom-right" | "bottom-left";
|
|
4253
|
+
className?: string;
|
|
4254
|
+
draggable?: boolean;
|
|
4255
|
+
}
|
|
4256
|
+
/**
|
|
4257
|
+
* Individual slot renderer.
|
|
4258
|
+
*
|
|
4259
|
+
* Handles different slot types with appropriate wrappers.
|
|
4260
|
+
*/
|
|
4261
|
+
declare function UISlotComponent({ slot, portal, position, className, }: UISlotComponentProps): React__default.ReactElement | null;
|
|
4262
|
+
interface SlotContentRendererProps {
|
|
4263
|
+
content: SlotContent;
|
|
4264
|
+
onDismiss: () => void;
|
|
4265
|
+
}
|
|
4266
|
+
/**
|
|
4267
|
+
* Renders the actual content of a slot.
|
|
4268
|
+
*
|
|
4269
|
+
* Dynamically renders pattern components from the registry.
|
|
4270
|
+
* For layout patterns with `hasChildren`, recursively renders nested patterns.
|
|
4271
|
+
*/
|
|
4272
|
+
declare function SlotContentRenderer({ content, onDismiss, }: SlotContentRendererProps): React__default.ReactElement;
|
|
4273
|
+
interface UISlotRendererProps {
|
|
4274
|
+
/** Include HUD slots */
|
|
4275
|
+
includeHud?: boolean;
|
|
4276
|
+
/** Include floating slot */
|
|
4277
|
+
includeFloating?: boolean;
|
|
4278
|
+
/** Additional class name for the container */
|
|
4279
|
+
className?: string;
|
|
4280
|
+
}
|
|
4281
|
+
/**
|
|
4282
|
+
* Main UI Slot Renderer component.
|
|
4283
|
+
*
|
|
4284
|
+
* Renders all slot containers. Place this in your page/layout component.
|
|
4285
|
+
*
|
|
4286
|
+
* @example
|
|
4287
|
+
* ```tsx
|
|
4288
|
+
* function PageLayout() {
|
|
4289
|
+
* return (
|
|
4290
|
+
* <div className="page-layout">
|
|
4291
|
+
* <UISlotRenderer />
|
|
4292
|
+
* </div>
|
|
4293
|
+
* );
|
|
4294
|
+
* }
|
|
4295
|
+
* ```
|
|
4296
|
+
*/
|
|
4297
|
+
declare function UISlotRenderer({ includeHud, includeFloating, className, }: UISlotRendererProps): React__default.ReactElement;
|
|
4298
|
+
declare namespace UISlotRenderer {
|
|
4299
|
+
var displayName: string;
|
|
4300
|
+
}
|
|
4301
|
+
|
|
4302
|
+
/**
|
|
4303
|
+
* ModalSlot Component
|
|
4304
|
+
*
|
|
4305
|
+
* Wraps modal slot content in a proper Modal component.
|
|
4306
|
+
* Used by trait-driven pages to display modal UI from render_ui effects.
|
|
4307
|
+
*
|
|
4308
|
+
* Handles:
|
|
4309
|
+
* - Auto-open when content is present
|
|
4310
|
+
* - Dispatches CLOSE/CANCEL events when closed
|
|
4311
|
+
* - Extracts title from Form components
|
|
4312
|
+
*/
|
|
4313
|
+
|
|
4314
|
+
interface ModalSlotProps {
|
|
4315
|
+
/** Content to display in the modal */
|
|
4316
|
+
children?: React__default.ReactNode;
|
|
4317
|
+
/** Override modal title (extracted from children if not provided) */
|
|
4318
|
+
title?: string;
|
|
4319
|
+
/** Modal size */
|
|
4320
|
+
size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
|
4321
|
+
/** Custom class name */
|
|
4322
|
+
className?: string;
|
|
4323
|
+
}
|
|
4324
|
+
/**
|
|
4325
|
+
* ModalSlot - Wrapper for modal slot content
|
|
4326
|
+
*
|
|
4327
|
+
* Automatically shows modal when children are present,
|
|
4328
|
+
* and dispatches close events when modal is dismissed.
|
|
4329
|
+
*/
|
|
4330
|
+
declare const ModalSlot: React__default.FC<ModalSlotProps>;
|
|
4331
|
+
|
|
4332
|
+
/**
|
|
4333
|
+
* DrawerSlot Component
|
|
4334
|
+
*
|
|
4335
|
+
* Wraps drawer slot content in a proper Drawer component.
|
|
4336
|
+
* Used by trait-driven pages to display drawer UI from render_ui effects.
|
|
4337
|
+
*
|
|
4338
|
+
* Handles:
|
|
4339
|
+
* - Auto-open when content is present
|
|
4340
|
+
* - Dispatches CLOSE/CANCEL events when closed
|
|
4341
|
+
* - Extracts title from Form or DetailPanel components
|
|
4342
|
+
* - Configurable position and size
|
|
4343
|
+
*/
|
|
4344
|
+
|
|
4345
|
+
interface DrawerSlotProps {
|
|
4346
|
+
/** Content to display in the drawer */
|
|
4347
|
+
children?: React__default.ReactNode;
|
|
4348
|
+
/** Override drawer title (extracted from children if not provided) */
|
|
4349
|
+
title?: string;
|
|
4350
|
+
/** Drawer position */
|
|
4351
|
+
position?: DrawerPosition;
|
|
4352
|
+
/** Drawer size */
|
|
4353
|
+
size?: DrawerSize;
|
|
4354
|
+
/** Custom class name */
|
|
4355
|
+
className?: string;
|
|
4356
|
+
}
|
|
4357
|
+
/**
|
|
4358
|
+
* DrawerSlot - Wrapper for drawer slot content
|
|
4359
|
+
*
|
|
4360
|
+
* Automatically shows drawer when children are present,
|
|
4361
|
+
* and dispatches close events when drawer is dismissed.
|
|
4362
|
+
*/
|
|
4363
|
+
declare const DrawerSlot: React__default.FC<DrawerSlotProps>;
|
|
4364
|
+
|
|
4365
|
+
/**
|
|
4366
|
+
* ToastSlot Component
|
|
4367
|
+
*
|
|
4368
|
+
* Wraps toast slot content in a proper Toast component with positioning.
|
|
4369
|
+
* Used by trait-driven pages to display toast UI from render_ui effects.
|
|
4370
|
+
*
|
|
4371
|
+
* Handles:
|
|
4372
|
+
* - Auto-show when content is present
|
|
4373
|
+
* - Dispatches DISMISS event when dismissed
|
|
4374
|
+
* - Fixed positioning in corner of screen
|
|
4375
|
+
*/
|
|
4376
|
+
|
|
4377
|
+
interface ToastSlotProps {
|
|
4378
|
+
/** Content to display in the toast (message or ReactNode) */
|
|
4379
|
+
children?: React__default.ReactNode;
|
|
4380
|
+
/** Toast variant */
|
|
4381
|
+
variant?: ToastVariant;
|
|
4382
|
+
/** Toast title */
|
|
4383
|
+
title?: string;
|
|
4384
|
+
/** Auto-dismiss duration in ms (0 = no auto-dismiss) */
|
|
4385
|
+
duration?: number;
|
|
4386
|
+
/** Custom class name */
|
|
4387
|
+
className?: string;
|
|
4388
|
+
}
|
|
4389
|
+
/**
|
|
4390
|
+
* ToastSlot - Wrapper for toast slot content
|
|
4391
|
+
*
|
|
4392
|
+
* Automatically shows toast when children are present,
|
|
4393
|
+
* and dispatches dismiss events when toast is dismissed.
|
|
4394
|
+
*/
|
|
4395
|
+
declare const ToastSlot: React__default.FC<ToastSlotProps>;
|
|
4396
|
+
|
|
4397
|
+
interface NavItem {
|
|
4398
|
+
label: string;
|
|
4399
|
+
href: string;
|
|
4400
|
+
icon: LucideIcon;
|
|
4401
|
+
badge?: string | number;
|
|
4402
|
+
children?: NavItem[];
|
|
4403
|
+
}
|
|
4404
|
+
interface DashboardLayoutProps {
|
|
4405
|
+
/** App name shown in sidebar */
|
|
4406
|
+
appName?: string;
|
|
4407
|
+
/** Logo component or URL */
|
|
4408
|
+
logo?: React__default.ReactNode;
|
|
4409
|
+
/** Navigation items */
|
|
4410
|
+
navItems?: NavItem[];
|
|
4411
|
+
/** Current user info (optional - auto-populated from auth context if not provided) */
|
|
4412
|
+
user?: {
|
|
4413
|
+
name: string;
|
|
4414
|
+
email: string;
|
|
4415
|
+
avatar?: string;
|
|
4416
|
+
};
|
|
4417
|
+
/** Header actions (notifications, etc.) */
|
|
4418
|
+
headerActions?: React__default.ReactNode;
|
|
4419
|
+
/** Show search in header */
|
|
4420
|
+
showSearch?: boolean;
|
|
4421
|
+
/** Custom sidebar footer */
|
|
4422
|
+
sidebarFooter?: React__default.ReactNode;
|
|
4423
|
+
/** Callback when user clicks sign out (optional - uses auth context signOut if not provided) */
|
|
4424
|
+
onSignOut?: () => void;
|
|
4425
|
+
}
|
|
4426
|
+
declare const DashboardLayout: React__default.FC<DashboardLayoutProps>;
|
|
4427
|
+
|
|
4428
|
+
interface AuthLayoutProps {
|
|
4429
|
+
/** App name */
|
|
4430
|
+
appName?: string;
|
|
4431
|
+
/** Logo component or URL */
|
|
4432
|
+
logo?: React__default.ReactNode;
|
|
4433
|
+
/** Background image URL */
|
|
4434
|
+
backgroundImage?: string;
|
|
4435
|
+
/** Show branding panel on the side */
|
|
4436
|
+
showBranding?: boolean;
|
|
4437
|
+
/** Branding panel content */
|
|
4438
|
+
brandingContent?: React__default.ReactNode;
|
|
4439
|
+
}
|
|
4440
|
+
declare const AuthLayout: React__default.FC<AuthLayoutProps>;
|
|
4441
|
+
|
|
4442
|
+
/**
|
|
4443
|
+
* CounterTemplate
|
|
4444
|
+
*
|
|
4445
|
+
* A presentational template for counter/incrementer features.
|
|
4446
|
+
* Supports increment, decrement, and reset operations.
|
|
4447
|
+
*/
|
|
4448
|
+
|
|
4449
|
+
type CounterSize = "sm" | "md" | "lg";
|
|
4450
|
+
type CounterVariant = "minimal" | "standard" | "full";
|
|
4451
|
+
interface CounterTemplateProps {
|
|
4452
|
+
/** Current count value */
|
|
4453
|
+
count: number;
|
|
4454
|
+
/** Minimum allowed value */
|
|
4455
|
+
min?: number;
|
|
4456
|
+
/** Maximum allowed value */
|
|
4457
|
+
max?: number;
|
|
4458
|
+
/** Step size for increment/decrement */
|
|
4459
|
+
step?: number;
|
|
4460
|
+
/** Called when increment is clicked */
|
|
4461
|
+
onIncrement?: () => void;
|
|
4462
|
+
/** Called when decrement is clicked */
|
|
4463
|
+
onDecrement?: () => void;
|
|
4464
|
+
/** Called when reset is clicked */
|
|
4465
|
+
onReset?: () => void;
|
|
4466
|
+
/** Title displayed above the counter */
|
|
4467
|
+
title?: string;
|
|
4468
|
+
/** Show reset button */
|
|
4469
|
+
showReset?: boolean;
|
|
4470
|
+
/** Counter display size */
|
|
4471
|
+
size?: CounterSize;
|
|
4472
|
+
/** Template variant */
|
|
4473
|
+
variant?: CounterVariant;
|
|
4474
|
+
/** Additional class name */
|
|
4475
|
+
className?: string;
|
|
4476
|
+
}
|
|
4477
|
+
declare const CounterTemplate: React__default.FC<CounterTemplateProps>;
|
|
4478
|
+
|
|
4479
|
+
/**
|
|
4480
|
+
* ListTemplate
|
|
4481
|
+
*
|
|
4482
|
+
* A presentational template for list-based features like todos, shopping lists, notes.
|
|
4483
|
+
* Supports add, toggle, delete, and filter operations.
|
|
4484
|
+
*/
|
|
4485
|
+
|
|
4486
|
+
type FilterValue = "all" | "active" | "completed";
|
|
4487
|
+
type ListVariant = "minimal" | "standard" | "full";
|
|
4488
|
+
interface ListTemplateItem {
|
|
4489
|
+
id: string;
|
|
4490
|
+
title: string;
|
|
4491
|
+
completed?: boolean;
|
|
4492
|
+
[key: string]: unknown;
|
|
4493
|
+
}
|
|
4494
|
+
interface ListTemplateProps {
|
|
4495
|
+
/** Array of list items */
|
|
4496
|
+
items: ListTemplateItem[];
|
|
4497
|
+
/** Whether data is loading */
|
|
4498
|
+
isLoading?: boolean;
|
|
4499
|
+
/** Error object if loading failed */
|
|
4500
|
+
error?: Error | string | null;
|
|
4501
|
+
/** Current filter value */
|
|
4502
|
+
filter?: FilterValue;
|
|
4503
|
+
/** Called when a new item is added */
|
|
4504
|
+
onAdd?: (title: string) => void;
|
|
4505
|
+
/** Called when an item is toggled */
|
|
4506
|
+
onToggle?: (id: string) => void;
|
|
4507
|
+
/** Called when an item is deleted */
|
|
4508
|
+
onDelete?: (id: string) => void;
|
|
4509
|
+
/** Called when filter changes */
|
|
4510
|
+
onFilterChange?: (filter: FilterValue) => void;
|
|
4511
|
+
/** Called to retry loading */
|
|
4512
|
+
onRetry?: () => void;
|
|
4513
|
+
/** Title displayed above the list */
|
|
4514
|
+
title?: string;
|
|
4515
|
+
/** Placeholder for the input field */
|
|
4516
|
+
placeholder?: string;
|
|
4517
|
+
/** Whether to show filter buttons */
|
|
4518
|
+
showFilters?: boolean;
|
|
4519
|
+
/** Whether to show item count */
|
|
4520
|
+
showCount?: boolean;
|
|
4521
|
+
/** Message shown when list is empty */
|
|
4522
|
+
emptyMessage?: string;
|
|
4523
|
+
/** Template variant */
|
|
4524
|
+
variant?: ListVariant;
|
|
4525
|
+
/** Additional class name */
|
|
4526
|
+
className?: string;
|
|
4527
|
+
}
|
|
4528
|
+
declare const ListTemplate: React__default.FC<ListTemplateProps>;
|
|
4529
|
+
|
|
4530
|
+
/**
|
|
4531
|
+
* FormTemplate
|
|
4532
|
+
*
|
|
4533
|
+
* A presentational template for form-based features like contact forms, feedback, surveys.
|
|
4534
|
+
* Supports submission, validation, and success/error states.
|
|
4535
|
+
*/
|
|
4536
|
+
|
|
4537
|
+
type FormVariant = "minimal" | "standard" | "full";
|
|
4538
|
+
interface FormFieldConfig {
|
|
4539
|
+
name: string;
|
|
4540
|
+
label: string;
|
|
4541
|
+
type: "text" | "email" | "password" | "tel" | "url" | "number" | "textarea" | "select" | "checkbox";
|
|
4542
|
+
placeholder?: string;
|
|
4543
|
+
required?: boolean;
|
|
4544
|
+
options?: Array<{
|
|
4545
|
+
value: string;
|
|
4546
|
+
label: string;
|
|
4547
|
+
}>;
|
|
4548
|
+
rows?: number;
|
|
4549
|
+
}
|
|
4550
|
+
interface FormTemplateProps {
|
|
4551
|
+
/** Current form field values */
|
|
4552
|
+
formData: Record<string, unknown>;
|
|
4553
|
+
/** Whether form is being submitted */
|
|
4554
|
+
isSubmitting?: boolean;
|
|
4555
|
+
/** Whether submission was successful */
|
|
4556
|
+
isSuccess?: boolean;
|
|
4557
|
+
/** Error object if submission failed */
|
|
4558
|
+
error?: Error | string | null;
|
|
4559
|
+
/** Field-level validation errors */
|
|
4560
|
+
validationErrors?: Record<string, string>;
|
|
4561
|
+
/** Called when form is submitted */
|
|
4562
|
+
onSubmit?: (formData: Record<string, unknown>) => void;
|
|
4563
|
+
/** Called when a field value changes */
|
|
4564
|
+
onFieldChange?: (field: string, value: unknown) => void;
|
|
4565
|
+
/** Called to reset the form */
|
|
4566
|
+
onReset?: () => void;
|
|
4567
|
+
/** Called to dismiss success message */
|
|
4568
|
+
onDismissSuccess?: () => void;
|
|
4569
|
+
/** Form title */
|
|
4570
|
+
title?: string;
|
|
4571
|
+
/** Form subtitle/description */
|
|
4572
|
+
subtitle?: string;
|
|
4573
|
+
/** Submit button label */
|
|
4574
|
+
submitLabel?: string;
|
|
4575
|
+
/** Success message */
|
|
4576
|
+
successMessage?: string;
|
|
4577
|
+
/** Whether to show reset button */
|
|
4578
|
+
showReset?: boolean;
|
|
4579
|
+
/** Form field definitions */
|
|
4580
|
+
fields?: FormFieldConfig[];
|
|
4581
|
+
/** Template variant */
|
|
4582
|
+
variant?: FormVariant;
|
|
4583
|
+
/** Additional class name */
|
|
4584
|
+
className?: string;
|
|
4585
|
+
}
|
|
4586
|
+
declare const FormTemplate: React__default.FC<FormTemplateProps>;
|
|
4587
|
+
|
|
4588
|
+
/**
|
|
4589
|
+
* CrudTemplate
|
|
4590
|
+
*
|
|
4591
|
+
* A presentational template for CRUD (Create, Read, Update, Delete) features.
|
|
4592
|
+
* Includes data table, search, and modal forms for create/edit.
|
|
4593
|
+
*/
|
|
4594
|
+
|
|
4595
|
+
type CrudVariant = "minimal" | "standard" | "full";
|
|
4596
|
+
interface CrudItem {
|
|
4597
|
+
id: string;
|
|
4598
|
+
[key: string]: unknown;
|
|
4599
|
+
}
|
|
4600
|
+
interface ColumnConfig {
|
|
4601
|
+
key: string;
|
|
4602
|
+
label: string;
|
|
4603
|
+
sortable?: boolean;
|
|
4604
|
+
width?: string;
|
|
4605
|
+
render?: (value: unknown, row: CrudItem) => React__default.ReactNode;
|
|
4606
|
+
}
|
|
4607
|
+
interface FieldConfig {
|
|
4608
|
+
key: string;
|
|
4609
|
+
label: string;
|
|
4610
|
+
type?: "text" | "email" | "number" | "textarea" | "select";
|
|
4611
|
+
required?: boolean;
|
|
4612
|
+
placeholder?: string;
|
|
4613
|
+
options?: Array<{
|
|
4614
|
+
value: string;
|
|
4615
|
+
label: string;
|
|
4616
|
+
}>;
|
|
4617
|
+
}
|
|
4618
|
+
interface CrudTemplateProps {
|
|
4619
|
+
/** Array of items to display */
|
|
4620
|
+
items: CrudItem[];
|
|
4621
|
+
/** Whether data is loading */
|
|
4622
|
+
isLoading?: boolean;
|
|
4623
|
+
/** Error object if loading failed */
|
|
4624
|
+
error?: Error | string | null;
|
|
4625
|
+
/** Currently selected item for editing */
|
|
4626
|
+
selectedItem?: CrudItem | null;
|
|
4627
|
+
/** Whether the create/edit modal is open */
|
|
4628
|
+
isModalOpen?: boolean;
|
|
4629
|
+
/** Current search query */
|
|
4630
|
+
searchQuery?: string;
|
|
4631
|
+
/** Current sort field */
|
|
4632
|
+
sortBy?: string;
|
|
4633
|
+
/** Current sort order */
|
|
4634
|
+
sortOrder?: "asc" | "desc";
|
|
4635
|
+
/** Called to load/refresh items */
|
|
4636
|
+
onLoad?: () => void;
|
|
4637
|
+
/** Called when creating a new item */
|
|
4638
|
+
onCreate?: (data: Record<string, unknown>) => void;
|
|
4639
|
+
/** Called when updating an item */
|
|
4640
|
+
onUpdate?: (id: string, data: Record<string, unknown>) => void;
|
|
4641
|
+
/** Called when deleting an item */
|
|
4642
|
+
onDelete?: (id: string) => void;
|
|
4643
|
+
/** Called when selecting an item for editing */
|
|
4644
|
+
onSelect?: (id: string) => void;
|
|
4645
|
+
/** Called when viewing an item */
|
|
4646
|
+
onView?: (id: string) => void;
|
|
4647
|
+
/** Called when search query changes */
|
|
4648
|
+
onSearch?: (query: string) => void;
|
|
4649
|
+
/** Called when sort changes */
|
|
4650
|
+
onSort?: (field: string, order: "asc" | "desc") => void;
|
|
4651
|
+
/** Called to open create/edit modal */
|
|
4652
|
+
onOpenModal?: () => void;
|
|
4653
|
+
/** Called to close modal */
|
|
4654
|
+
onCloseModal?: () => void;
|
|
4655
|
+
/** Page title */
|
|
4656
|
+
title?: string;
|
|
4657
|
+
/** Singular entity name for labels */
|
|
4658
|
+
entityName?: string;
|
|
4659
|
+
/** Table column definitions */
|
|
4660
|
+
columns?: ColumnConfig[];
|
|
4661
|
+
/** Form field definitions for create/edit */
|
|
4662
|
+
fields?: FieldConfig[];
|
|
4663
|
+
/** Whether to show search input */
|
|
4664
|
+
showSearch?: boolean;
|
|
4665
|
+
/** Search input placeholder */
|
|
4666
|
+
searchPlaceholder?: string;
|
|
4667
|
+
/** Whether to show view action */
|
|
4668
|
+
showViewAction?: boolean;
|
|
4669
|
+
/** Template variant */
|
|
4670
|
+
variant?: CrudVariant;
|
|
4671
|
+
/** Additional class name */
|
|
4672
|
+
className?: string;
|
|
4673
|
+
}
|
|
4674
|
+
declare const CrudTemplate: React__default.FC<CrudTemplateProps>;
|
|
4675
|
+
|
|
4676
|
+
/**
|
|
4677
|
+
* SettingsTemplate
|
|
4678
|
+
*
|
|
4679
|
+
* A presentational template for settings/preferences features.
|
|
4680
|
+
* Supports sections with various input types and save/reset operations.
|
|
4681
|
+
*/
|
|
4682
|
+
|
|
4683
|
+
type SettingsVariant = "minimal" | "standard" | "full";
|
|
4684
|
+
interface SettingsFieldConfig {
|
|
4685
|
+
key: string;
|
|
4686
|
+
label: string;
|
|
4687
|
+
type: "text" | "email" | "number" | "select" | "toggle" | "checkbox";
|
|
4688
|
+
description?: string;
|
|
4689
|
+
placeholder?: string;
|
|
4690
|
+
options?: string[] | Array<{
|
|
4691
|
+
value: string;
|
|
4692
|
+
label: string;
|
|
4693
|
+
}>;
|
|
4694
|
+
}
|
|
4695
|
+
interface SettingsSectionConfig {
|
|
4696
|
+
title: string;
|
|
4697
|
+
description?: string;
|
|
4698
|
+
fields: SettingsFieldConfig[];
|
|
4699
|
+
}
|
|
4700
|
+
interface SettingsTemplateProps {
|
|
4701
|
+
/** Current settings values */
|
|
4702
|
+
settings: Record<string, unknown>;
|
|
4703
|
+
/** Whether settings are being saved */
|
|
4704
|
+
isSaving?: boolean;
|
|
4705
|
+
/** Whether there are unsaved changes */
|
|
4706
|
+
hasChanges?: boolean;
|
|
4707
|
+
/** Error object if save failed */
|
|
4708
|
+
error?: Error | string | null;
|
|
4709
|
+
/** Success message after save */
|
|
4710
|
+
successMessage?: string | null;
|
|
4711
|
+
/** Called when saving settings */
|
|
4712
|
+
onSave?: (settings: Record<string, unknown>) => void;
|
|
4713
|
+
/** Called when a setting value changes */
|
|
4714
|
+
onChange?: (key: string, value: unknown) => void;
|
|
4715
|
+
/** Called to reset to default settings */
|
|
4716
|
+
onReset?: () => void;
|
|
4717
|
+
/** Called to revert unsaved changes */
|
|
4718
|
+
onRevert?: () => void;
|
|
4719
|
+
/** Called to dismiss success message */
|
|
4720
|
+
onDismissSuccess?: () => void;
|
|
4721
|
+
/** Page title */
|
|
4722
|
+
title?: string;
|
|
4723
|
+
/** Settings sections */
|
|
4724
|
+
sections?: SettingsSectionConfig[];
|
|
4725
|
+
/** Whether to show reset to defaults button */
|
|
4726
|
+
showResetToDefaults?: boolean;
|
|
4727
|
+
/** Template variant */
|
|
4728
|
+
variant?: SettingsVariant;
|
|
4729
|
+
/** Additional class name */
|
|
4730
|
+
className?: string;
|
|
4731
|
+
}
|
|
4732
|
+
declare const SettingsTemplate: React__default.FC<SettingsTemplateProps>;
|
|
4733
|
+
|
|
4734
|
+
/**
|
|
4735
|
+
* GameTemplate
|
|
4736
|
+
*
|
|
4737
|
+
* A presentational template for game applications.
|
|
4738
|
+
* Includes a main game canvas/area, HUD overlay, and an optional debug sidebar.
|
|
4739
|
+
* **Atomic Design**: Composed using Box, Typography, and Layout molecules/atoms.
|
|
4740
|
+
*/
|
|
4741
|
+
|
|
4742
|
+
interface GameTemplateProps {
|
|
4743
|
+
/** Title of the game */
|
|
4744
|
+
title?: string;
|
|
4745
|
+
/** The main game canvas or content */
|
|
4746
|
+
children: React__default.ReactNode;
|
|
4747
|
+
/** HUD overlay content (scores, health, etc.) */
|
|
4748
|
+
hud?: React__default.ReactNode;
|
|
4749
|
+
/** Debug panel content */
|
|
4750
|
+
debugPanel?: React__default.ReactNode;
|
|
4751
|
+
/** Whether the debug panel is visible */
|
|
4752
|
+
showDebugPanel?: boolean;
|
|
4753
|
+
/** Game controls */
|
|
4754
|
+
controls?: {
|
|
4755
|
+
onPlay?: () => void;
|
|
4756
|
+
onPause?: () => void;
|
|
4757
|
+
onReset?: () => void;
|
|
4758
|
+
isPlaying?: boolean;
|
|
4759
|
+
};
|
|
4760
|
+
/** Additional class name */
|
|
4761
|
+
className?: string;
|
|
4762
|
+
}
|
|
4763
|
+
declare const GameTemplate: React__default.FC<GameTemplateProps>;
|
|
4764
|
+
|
|
4765
|
+
/**
|
|
4766
|
+
* GenericAppTemplate
|
|
4767
|
+
*
|
|
4768
|
+
* A simple, generic template for any application.
|
|
4769
|
+
* Includes a header with title and actions, and a main content area.
|
|
4770
|
+
* **Atomic Design**: Composed using Box, Typography, and Button atoms.
|
|
4771
|
+
*/
|
|
4772
|
+
|
|
4773
|
+
interface GenericAppTemplateProps {
|
|
4774
|
+
/** Page title */
|
|
4775
|
+
title: string;
|
|
4776
|
+
/** Subtitle or description */
|
|
4777
|
+
subtitle?: string;
|
|
4778
|
+
/** Main content */
|
|
4779
|
+
children: React__default.ReactNode;
|
|
4780
|
+
/** Header actions (buttons, links) */
|
|
4781
|
+
headerActions?: React__default.ReactNode;
|
|
4782
|
+
/** Footer content */
|
|
4783
|
+
footer?: React__default.ReactNode;
|
|
4784
|
+
/** Additional class name */
|
|
4785
|
+
className?: string;
|
|
4786
|
+
}
|
|
4787
|
+
declare const GenericAppTemplate: React__default.FC<GenericAppTemplateProps>;
|
|
4788
|
+
|
|
4789
|
+
export { Accordion, type AccordionItem, type AccordionProps, Card as ActionCard, type CardProps as ActionCardProps, Alert, type AlertProps, type AlertVariant, AuthLayout, type AuthLayoutProps, Avatar, type AvatarProps, type AvatarSize, type AvatarStatus, Badge, type BadgeProps, Box, type BoxBg, type BoxMargin, type BoxPadding, type BoxProps, type BoxRounded, type BoxShadow, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Card$1 as Card, type CardAction, CardBody, CardContent, CardFooter, CardGrid, type CardGridGap, type CardGridProps, CardHeader, type CardProps$1 as CardProps, CardTitle, Center, type CenterProps, Checkbox, type CheckboxProps, type CollisionDef, CollisionDetector, type CollisionDetectorProps, type CollisionRule, type Column, type ColumnConfig, type ConditionalContext, ConditionalWrapper, type ConditionalWrapperProps, ConfirmDialog, type ConfirmDialogProps, type ConfirmDialogVariant, Container, type ContainerProps, type CounterSize, CounterTemplate, type CounterTemplateProps, type CounterVariant, type CrudItem, CrudTemplate, type CrudTemplateProps, type CrudVariant, DashboardGrid, type DashboardGridCell, type DashboardGridProps, DashboardLayout, type DashboardLayoutProps, DataTable, type DataTableProps, type DetailField, DetailPanel, type DetailPanelProps, type DetailSection, DialogueBox, type DialogueBoxProps, type DialogueChoice, type DialogueNode, Divider, type DividerOrientation, type DividerProps, Drawer, type DrawerPosition, type DrawerProps, type DrawerSize, DrawerSlot, type DrawerSlotProps, EmptyState, type EmptyStateProps, type EntityRenderer, ErrorState, type ErrorStateProps, type FieldConfig, type FilterDefinition, FilterGroup, type FilterGroupProps, type FilterValue, Flex, type FlexProps, FloatingActionButton, type FloatingActionButtonProps, Form, FormActions, type FormActionsProps, FormField, type FormFieldConfig, type FormFieldProps, FormLayout, type FormLayoutProps, type FormProps, FormSection$1 as FormSection, FormSectionHeader, type FormSectionHeaderProps, type FormSectionProps, FormTemplate, type FormTemplateProps, type FormVariant, GameCanvas, type GameCanvasProps, type GameControl, GameControls, type GameControlsProps, type GameEntity, GameHud, type GameHudElement, type GameHudProps, type GameHudStat, GameMenu, type GameMenuProps, type GameOverAction, GameOverScreen, type GameOverScreenProps, type GameOverStat, GamePauseOverlay, type GamePauseOverlayProps, GameTemplate, type GameTemplateProps, GenericAppTemplate, type GenericAppTemplateProps, Grid, type GridProps, HStack, type HStackProps, Header, type HeaderProps, type HighlightType, Icon, type IconAnimation, type IconProps, type IconSize, Input, type InputBinding, InputGroup, type InputGroupProps, InputListener, type InputListenerProps, type InputProps, type InventoryItem, InventoryPanel, type InventoryPanelProps, Label, type LabelProps, type LawReference, LawReferenceTooltip, type LawReferenceTooltipProps, type LevelData, type LevelFieldDisplay, LevelSelect, type LevelSelectProps, List, type ListItem, type ListProps, ListTemplate, type ListTemplateItem, type ListTemplateProps, type ListVariant, LoadingState, type LoadingStateProps, MasterDetail, type MasterDetailProps, Menu, type MenuItem, type MenuOption, type MenuProps, Modal, type ModalProps, type ModalSize, ModalSlot, type ModalSlotProps, type NavItem, Navigation, type NavigationItem, type NavigationProps, OrbitalVisualization, type OrbitalVisualizationProps, Overlay, type OverlayProps, type PageBreadcrumb, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, type ParallaxConfig, type PauseOption, Popover, type PopoverProps, ProgressBar, type ProgressBarColor, type ProgressBarProps, type ProgressBarVariant, Radio, type RadioProps, type RelationOption, RelationSelect, type RelationSelectProps, RepeatableFormSection, type RepeatableFormSectionProps, type RepeatableItem, type RowAction, SearchInput, type SearchInputProps, Section, type SectionProps, Select, type SelectOption, type SelectProps, type SettingsFieldConfig, type SettingsSectionConfig, SettingsTemplate, type SettingsTemplateProps, type SettingsVariant, SidePanel, type SidePanelProps, Sidebar, type SidebarItem, type SidebarProps, SimpleGrid, type SimpleGridProps, SlotContentRenderer, type SortDirection, Spacer, type SpacerProps, type SpacerSize, Spinner, type SpinnerProps, Split, SplitPane, type SplitPaneProps, type SplitProps, Stack, type StackAlign, type StackDirection, type StackGap, type StackJustify, type StackProps, StatCard, type StatCardProps, Switch, type SwitchProps, type TabDefinition, type TabItem, TabbedContainer, type TabbedContainerProps, Table, type TableColumn, type TableProps, Tabs, type TabsProps, TextHighlight, type TextHighlightProps, Textarea, type TextareaProps, ThemeSelector, ThemeToggle, type ThemeToggleProps, TilemapRenderer, type TilemapRendererProps, type TileLayer as TilemapTileLayer, type Tileset as TilemapTileset, Toast, type ToastProps, ToastSlot, type ToastSlotProps, type ToastVariant, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, UISlotComponent, UISlotRenderer, type UISlotRendererProps, VStack, type VStackProps, ViolationAlert, type ViolationAlertProps, type ViolationRecord, WizardContainer, type WizardContainerProps, WizardNavigation, type WizardNavigationProps, WizardProgress, type WizardProgressProps, type WizardProgressStep, type WizardStep };
|