@uipath/apollo-wind 2.36.2 → 2.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/forms/field-renderer.cjs +2 -3
- package/dist/components/forms/field-renderer.js +3 -4
- package/dist/components/forms/form-designer.cjs +2 -3
- package/dist/components/forms/form-designer.js +3 -4
- package/dist/components/ui/file-upload.cjs +8 -2
- package/dist/components/ui/file-upload.d.ts +3 -0
- package/dist/components/ui/file-upload.js +8 -2
- package/dist/components/ui/index.cjs +12 -12
- package/dist/components/ui/input-group.cjs +59 -15
- package/dist/components/ui/input-group.d.ts +5 -1
- package/dist/components/ui/input-group.js +61 -17
- package/dist/components/ui/input.cjs +31 -7
- package/dist/components/ui/input.d.ts +7 -0
- package/dist/components/ui/input.js +33 -9
- package/dist/components/ui/label.cjs +20 -1
- package/dist/components/ui/label.d.ts +15 -1
- package/dist/components/ui/label.js +18 -2
- package/dist/components/ui/lockable-value-field/components/field-header.cjs +1 -4
- package/dist/components/ui/lockable-value-field/components/field-header.js +2 -5
- package/dist/components/ui/lockable-value-field/lockable-value-field.cjs +38 -5
- package/dist/components/ui/lockable-value-field/lockable-value-field.d.ts +1 -1
- package/dist/components/ui/lockable-value-field/lockable-value-field.js +38 -5
- package/dist/components/ui/lockable-value-field/types.d.ts +9 -1
- package/dist/components/ui/multi-select.cjs +4 -1
- package/dist/components/ui/multi-select.d.ts +3 -0
- package/dist/components/ui/multi-select.js +4 -1
- package/dist/components/ui/prompt-editor/components/MarkdownPreview.cjs +2 -2
- package/dist/components/ui/prompt-editor/components/MarkdownPreview.js +2 -2
- package/dist/components/ui/prompt-editor/types.cjs +5 -5
- package/dist/components/ui/prompt-editor/types.js +5 -5
- package/dist/index.cjs +3 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/styles.css +87 -6
- package/package.json +1 -1
|
@@ -4,4 +4,18 @@ import * as React from 'react';
|
|
|
4
4
|
declare const labelVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
5
5
|
export type LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>;
|
|
6
6
|
declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import("class-variance-authority/types").ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
|
|
7
|
-
export
|
|
7
|
+
export interface RequiredIndicatorProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children' | 'aria-hidden'> {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Marks a field as required. Place it right after the label text.
|
|
11
|
+
*
|
|
12
|
+
* Uses `text-current` rather than an error/destructive color: an untouched
|
|
13
|
+
* required field isn't in an error state, so coloring the asterisk red reads
|
|
14
|
+
* as a validation failure before the person has done anything. The asterisk
|
|
15
|
+
* glyph is `aria-hidden` since it's a visual affordance, not the thing that
|
|
16
|
+
* makes the field required to assistive tech; a `sr-only` "(required)" is
|
|
17
|
+
* included alongside it so the label still announces the requirement even if
|
|
18
|
+
* the field's own control is missing `required`/`aria-required`.
|
|
19
|
+
*/
|
|
20
|
+
declare const RequiredIndicator: React.ForwardRefExoticComponent<RequiredIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
|
|
21
|
+
export { Label, RequiredIndicator };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Root } from "@radix-ui/react-label";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -11,4 +11,20 @@ const Label = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE
|
|
|
11
11
|
...props
|
|
12
12
|
}));
|
|
13
13
|
Label.displayName = Root.displayName;
|
|
14
|
-
|
|
14
|
+
const RequiredIndicator = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsxs("span", {
|
|
15
|
+
ref: ref,
|
|
16
|
+
...props,
|
|
17
|
+
className: cn('ml-0.5 text-current', className),
|
|
18
|
+
children: [
|
|
19
|
+
/*#__PURE__*/ jsx("span", {
|
|
20
|
+
"aria-hidden": "true",
|
|
21
|
+
children: "*"
|
|
22
|
+
}),
|
|
23
|
+
/*#__PURE__*/ jsx("span", {
|
|
24
|
+
className: "sr-only",
|
|
25
|
+
children: " (required)"
|
|
26
|
+
})
|
|
27
|
+
]
|
|
28
|
+
}));
|
|
29
|
+
RequiredIndicator.displayName = 'RequiredIndicator';
|
|
30
|
+
export { Label, RequiredIndicator };
|
|
@@ -54,10 +54,7 @@ function FieldHeader({ label, fieldId, fieldLabel, required, fieldType, onFieldT
|
|
|
54
54
|
className: "text-xs font-medium text-foreground-muted",
|
|
55
55
|
children: [
|
|
56
56
|
fieldLabel,
|
|
57
|
-
required && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(
|
|
58
|
-
className: "ml-0.5 text-destructive",
|
|
59
|
-
children: "*"
|
|
60
|
-
})
|
|
57
|
+
required && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_label_cjs_namespaceObject.RequiredIndicator, {})
|
|
61
58
|
]
|
|
62
59
|
}),
|
|
63
60
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_tooltip_cjs_namespaceObject.TooltipProvider, {
|
|
@@ -3,7 +3,7 @@ import { Asterisk, Braces, ChevronDown, Sparkles } from "lucide-react";
|
|
|
3
3
|
import { useId, useState } from "react";
|
|
4
4
|
import { Button } from "../../button.js";
|
|
5
5
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../../dropdown-menu.js";
|
|
6
|
-
import { Label } from "../../label.js";
|
|
6
|
+
import { Label, RequiredIndicator } from "../../label.js";
|
|
7
7
|
import { Popover, PopoverContent, PopoverTrigger } from "../../popover.js";
|
|
8
8
|
import { Switch } from "../../switch.js";
|
|
9
9
|
import { Textarea } from "../../textarea.js";
|
|
@@ -26,10 +26,7 @@ function FieldHeader({ label, fieldId, fieldLabel, required, fieldType, onFieldT
|
|
|
26
26
|
className: "text-xs font-medium text-foreground-muted",
|
|
27
27
|
children: [
|
|
28
28
|
fieldLabel,
|
|
29
|
-
required && /*#__PURE__*/ jsx(
|
|
30
|
-
className: "ml-0.5 text-destructive",
|
|
31
|
-
children: "*"
|
|
32
|
-
})
|
|
29
|
+
required && /*#__PURE__*/ jsx(RequiredIndicator, {})
|
|
33
30
|
]
|
|
34
31
|
}),
|
|
35
32
|
/*#__PURE__*/ jsx(TooltipProvider, {
|
|
@@ -44,11 +44,12 @@ const lock_toggle_button_cjs_namespaceObject = require("./components/lock-toggle
|
|
|
44
44
|
const mode_menu_item_cjs_namespaceObject = require("./components/mode-menu-item.cjs");
|
|
45
45
|
const external_types_cjs_namespaceObject = require("./types.cjs");
|
|
46
46
|
const external_utils_cjs_namespaceObject = require("./utils.cjs");
|
|
47
|
-
function LockableValueField({ value = '', onValueChange, onValueBlur, locked = true, onLockedChange, mode = 'fixed', onModeChange, renderExpressionEditor, fieldType = 'string', onFieldTypeChange, required, onRequiredChange, label, fileUploadAriaLabel, headerActions, compact, controlsVisibility = 'visible', showFieldActions = true, options = external_utils_cjs_namespaceObject.DEFAULT_SELECT_OPTIONS, onGenerateWithAi, variables = [], id, className }) {
|
|
48
|
-
const generatedId = (0, external_react_namespaceObject.useId)();
|
|
47
|
+
function LockableValueField({ value = '', onValueChange, onValueBlur, locked = true, onLockedChange, mode = 'fixed', onModeChange, renderExpressionEditor, fieldType = 'string', onFieldTypeChange, required, onRequiredChange, label, error, errorId, fileUploadAriaLabel, headerActions, compact, controlsVisibility = 'visible', showFieldActions = true, options = external_utils_cjs_namespaceObject.DEFAULT_SELECT_OPTIONS, onGenerateWithAi, variables = [], id, className }) {
|
|
48
|
+
const generatedId = (0, external_react_namespaceObject.useId)().replace(/:/g, '');
|
|
49
49
|
const [datePopoverOpen, setDatePopoverOpen] = (0, external_react_namespaceObject.useState)(false);
|
|
50
50
|
const [selectOpen, setSelectOpen] = (0, external_react_namespaceObject.useState)(false);
|
|
51
51
|
const fieldId = id ?? generatedId;
|
|
52
|
+
const validationId = errorId ?? `${fieldId}-error`;
|
|
52
53
|
const typeMeta = external_types_cjs_namespaceObject.FIELD_TYPE_META[fieldType];
|
|
53
54
|
const effectiveMode = typeMeta.supportsExpression ? mode : 'fixed';
|
|
54
55
|
const editableOnValueChange = locked ? void 0 : onValueChange;
|
|
@@ -77,6 +78,8 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
77
78
|
headerActions: headerActions
|
|
78
79
|
}),
|
|
79
80
|
typeMeta.supportsExpression ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_input_group_cjs_namespaceObject.InputGroup, {
|
|
81
|
+
error: error,
|
|
82
|
+
errorId: validationId,
|
|
80
83
|
children: [
|
|
81
84
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_input_group_cjs_namespaceObject.InputGroupAddon, {
|
|
82
85
|
align: "inline-start",
|
|
@@ -92,7 +95,11 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
92
95
|
onBlur: onValueBlur,
|
|
93
96
|
readOnly: !editableOnValueChange,
|
|
94
97
|
placeholder: fieldLabel,
|
|
95
|
-
fieldType
|
|
98
|
+
fieldType,
|
|
99
|
+
'aria-invalid': error ? true : void 0,
|
|
100
|
+
'aria-describedby': error ? validationId : void 0,
|
|
101
|
+
'aria-errormessage': error ? validationId : void 0,
|
|
102
|
+
'data-slot': 'input-group-control'
|
|
96
103
|
}) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_input_group_cjs_namespaceObject.InputGroupInput, {
|
|
97
104
|
id: fieldId,
|
|
98
105
|
readOnly: !editableOnValueChange,
|
|
@@ -111,6 +118,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
111
118
|
className: "flex h-full flex-1 items-center px-3",
|
|
112
119
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_switch_cjs_namespaceObject.Switch, {
|
|
113
120
|
id: fieldId,
|
|
121
|
+
"aria-invalid": error ? true : void 0,
|
|
122
|
+
"aria-describedby": error ? validationId : void 0,
|
|
123
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
114
124
|
checked: 'true' === value,
|
|
115
125
|
onCheckedChange: (checked)=>onValueChange?.(String(checked)),
|
|
116
126
|
onBlur: onValueBlur,
|
|
@@ -129,6 +139,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
129
139
|
type: "button",
|
|
130
140
|
id: fieldId,
|
|
131
141
|
"data-slot": "input-group-control",
|
|
142
|
+
"aria-invalid": error ? true : void 0,
|
|
143
|
+
"aria-describedby": error ? validationId : void 0,
|
|
144
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
132
145
|
disabled: !onValueChange,
|
|
133
146
|
className: "flex h-full flex-1 items-center text-left text-sm text-foreground outline-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
134
147
|
children: value ? (0, external_utils_cjs_namespaceObject.formatDateValue)(value) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
|
|
@@ -204,6 +217,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
204
217
|
}),
|
|
205
218
|
locked ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_input_cjs_namespaceObject.Input, {
|
|
206
219
|
id: fieldId,
|
|
220
|
+
"aria-invalid": error ? true : void 0,
|
|
221
|
+
"aria-describedby": error ? validationId : void 0,
|
|
222
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
207
223
|
readOnly: true,
|
|
208
224
|
value: lockedDisplayValue,
|
|
209
225
|
placeholder: fieldLabel,
|
|
@@ -222,6 +238,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
222
238
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger, {
|
|
223
239
|
id: fieldId,
|
|
224
240
|
className: "flex-1",
|
|
241
|
+
"aria-invalid": error ? true : void 0,
|
|
242
|
+
"aria-describedby": error ? validationId : void 0,
|
|
243
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
225
244
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue, {
|
|
226
245
|
placeholder: "Select an option"
|
|
227
246
|
})
|
|
@@ -241,16 +260,30 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
241
260
|
onChange: (selected)=>onValueChange?.(JSON.stringify(selected)),
|
|
242
261
|
placeholder: "Select options...",
|
|
243
262
|
disabled: !onValueChange,
|
|
244
|
-
onBlur: onValueBlur
|
|
263
|
+
onBlur: onValueBlur,
|
|
264
|
+
"aria-invalid": error ? true : void 0,
|
|
265
|
+
"aria-describedby": error ? validationId : void 0,
|
|
266
|
+
"aria-errormessage": error ? validationId : void 0
|
|
245
267
|
}) : 'file' === fieldType && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_file_upload_cjs_namespaceObject.FileUpload, {
|
|
246
268
|
id: fieldId,
|
|
247
269
|
ariaLabel: fileUploadAriaLabel ?? ('string' == typeof label ? label : fieldLabel),
|
|
248
270
|
className: "flex-1",
|
|
249
271
|
onFilesChange: (files)=>onValueChange?.(files.map((f)=>f.name).join(', ')),
|
|
250
272
|
disabled: !onValueChange,
|
|
251
|
-
onBlur: onValueBlur
|
|
273
|
+
onBlur: onValueBlur,
|
|
274
|
+
"aria-invalid": error ? true : void 0,
|
|
275
|
+
"aria-describedby": error ? validationId : void 0,
|
|
276
|
+
"aria-errormessage": error ? validationId : void 0
|
|
252
277
|
})
|
|
253
278
|
]
|
|
279
|
+
}),
|
|
280
|
+
error && !typeMeta.supportsExpression && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
|
|
281
|
+
id: validationId,
|
|
282
|
+
"data-slot": "lockable-value-field-error",
|
|
283
|
+
"aria-live": "polite",
|
|
284
|
+
"aria-atomic": "true",
|
|
285
|
+
className: "mt-1 text-xs leading-4 text-error",
|
|
286
|
+
children: error
|
|
254
287
|
})
|
|
255
288
|
]
|
|
256
289
|
});
|
|
@@ -11,4 +11,4 @@ import type { LockableValueFieldProps } from './types';
|
|
|
11
11
|
* Insert-variable menu is empty (and disabled) unless `variables` is
|
|
12
12
|
* provided; file uploads aren't persisted anywhere.
|
|
13
13
|
*/
|
|
14
|
-
export declare function LockableValueField({ value, onValueChange, onValueBlur, locked, onLockedChange, mode, onModeChange, renderExpressionEditor, fieldType, onFieldTypeChange, required, onRequiredChange, label, fileUploadAriaLabel, headerActions, compact, controlsVisibility, showFieldActions, options, onGenerateWithAi, variables, id, className, }: LockableValueFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function LockableValueField({ value, onValueChange, onValueBlur, locked, onLockedChange, mode, onModeChange, renderExpressionEditor, fieldType, onFieldTypeChange, required, onRequiredChange, label, error, errorId, fileUploadAriaLabel, headerActions, compact, controlsVisibility, showFieldActions, options, onGenerateWithAi, variables, id, className, }: LockableValueFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -16,11 +16,12 @@ import { LockToggleButton } from "./components/lock-toggle-button.js";
|
|
|
16
16
|
import { ModeMenuItem } from "./components/mode-menu-item.js";
|
|
17
17
|
import { FIELD_TYPE_META } from "./types.js";
|
|
18
18
|
import { DEFAULT_SELECT_OPTIONS, formatDateValue, getLockedDisplayValue, parseDateValue, parseListValue, toDateOnlyString } from "./utils.js";
|
|
19
|
-
function LockableValueField({ value = '', onValueChange, onValueBlur, locked = true, onLockedChange, mode = 'fixed', onModeChange, renderExpressionEditor, fieldType = 'string', onFieldTypeChange, required, onRequiredChange, label, fileUploadAriaLabel, headerActions, compact, controlsVisibility = 'visible', showFieldActions = true, options = DEFAULT_SELECT_OPTIONS, onGenerateWithAi, variables = [], id, className }) {
|
|
20
|
-
const generatedId = useId();
|
|
19
|
+
function LockableValueField({ value = '', onValueChange, onValueBlur, locked = true, onLockedChange, mode = 'fixed', onModeChange, renderExpressionEditor, fieldType = 'string', onFieldTypeChange, required, onRequiredChange, label, error, errorId, fileUploadAriaLabel, headerActions, compact, controlsVisibility = 'visible', showFieldActions = true, options = DEFAULT_SELECT_OPTIONS, onGenerateWithAi, variables = [], id, className }) {
|
|
20
|
+
const generatedId = useId().replace(/:/g, '');
|
|
21
21
|
const [datePopoverOpen, setDatePopoverOpen] = useState(false);
|
|
22
22
|
const [selectOpen, setSelectOpen] = useState(false);
|
|
23
23
|
const fieldId = id ?? generatedId;
|
|
24
|
+
const validationId = errorId ?? `${fieldId}-error`;
|
|
24
25
|
const typeMeta = FIELD_TYPE_META[fieldType];
|
|
25
26
|
const effectiveMode = typeMeta.supportsExpression ? mode : 'fixed';
|
|
26
27
|
const editableOnValueChange = locked ? void 0 : onValueChange;
|
|
@@ -49,6 +50,8 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
49
50
|
headerActions: headerActions
|
|
50
51
|
}),
|
|
51
52
|
typeMeta.supportsExpression ? /*#__PURE__*/ jsxs(InputGroup, {
|
|
53
|
+
error: error,
|
|
54
|
+
errorId: validationId,
|
|
52
55
|
children: [
|
|
53
56
|
/*#__PURE__*/ jsx(InputGroupAddon, {
|
|
54
57
|
align: "inline-start",
|
|
@@ -64,7 +67,11 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
64
67
|
onBlur: onValueBlur,
|
|
65
68
|
readOnly: !editableOnValueChange,
|
|
66
69
|
placeholder: fieldLabel,
|
|
67
|
-
fieldType
|
|
70
|
+
fieldType,
|
|
71
|
+
'aria-invalid': error ? true : void 0,
|
|
72
|
+
'aria-describedby': error ? validationId : void 0,
|
|
73
|
+
'aria-errormessage': error ? validationId : void 0,
|
|
74
|
+
'data-slot': 'input-group-control'
|
|
68
75
|
}) : /*#__PURE__*/ jsx(InputGroupInput, {
|
|
69
76
|
id: fieldId,
|
|
70
77
|
readOnly: !editableOnValueChange,
|
|
@@ -83,6 +90,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
83
90
|
className: "flex h-full flex-1 items-center px-3",
|
|
84
91
|
children: /*#__PURE__*/ jsx(Switch, {
|
|
85
92
|
id: fieldId,
|
|
93
|
+
"aria-invalid": error ? true : void 0,
|
|
94
|
+
"aria-describedby": error ? validationId : void 0,
|
|
95
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
86
96
|
checked: 'true' === value,
|
|
87
97
|
onCheckedChange: (checked)=>onValueChange?.(String(checked)),
|
|
88
98
|
onBlur: onValueBlur,
|
|
@@ -101,6 +111,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
101
111
|
type: "button",
|
|
102
112
|
id: fieldId,
|
|
103
113
|
"data-slot": "input-group-control",
|
|
114
|
+
"aria-invalid": error ? true : void 0,
|
|
115
|
+
"aria-describedby": error ? validationId : void 0,
|
|
116
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
104
117
|
disabled: !onValueChange,
|
|
105
118
|
className: "flex h-full flex-1 items-center text-left text-sm text-foreground outline-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
106
119
|
children: value ? formatDateValue(value) : /*#__PURE__*/ jsx("span", {
|
|
@@ -176,6 +189,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
176
189
|
}),
|
|
177
190
|
locked ? /*#__PURE__*/ jsx(Input, {
|
|
178
191
|
id: fieldId,
|
|
192
|
+
"aria-invalid": error ? true : void 0,
|
|
193
|
+
"aria-describedby": error ? validationId : void 0,
|
|
194
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
179
195
|
readOnly: true,
|
|
180
196
|
value: lockedDisplayValue,
|
|
181
197
|
placeholder: fieldLabel,
|
|
@@ -194,6 +210,9 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
194
210
|
/*#__PURE__*/ jsx(SelectTrigger, {
|
|
195
211
|
id: fieldId,
|
|
196
212
|
className: "flex-1",
|
|
213
|
+
"aria-invalid": error ? true : void 0,
|
|
214
|
+
"aria-describedby": error ? validationId : void 0,
|
|
215
|
+
"aria-errormessage": error ? validationId : void 0,
|
|
197
216
|
children: /*#__PURE__*/ jsx(SelectValue, {
|
|
198
217
|
placeholder: "Select an option"
|
|
199
218
|
})
|
|
@@ -213,16 +232,30 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
|
|
|
213
232
|
onChange: (selected)=>onValueChange?.(JSON.stringify(selected)),
|
|
214
233
|
placeholder: "Select options...",
|
|
215
234
|
disabled: !onValueChange,
|
|
216
|
-
onBlur: onValueBlur
|
|
235
|
+
onBlur: onValueBlur,
|
|
236
|
+
"aria-invalid": error ? true : void 0,
|
|
237
|
+
"aria-describedby": error ? validationId : void 0,
|
|
238
|
+
"aria-errormessage": error ? validationId : void 0
|
|
217
239
|
}) : 'file' === fieldType && /*#__PURE__*/ jsx(FileUpload, {
|
|
218
240
|
id: fieldId,
|
|
219
241
|
ariaLabel: fileUploadAriaLabel ?? ('string' == typeof label ? label : fieldLabel),
|
|
220
242
|
className: "flex-1",
|
|
221
243
|
onFilesChange: (files)=>onValueChange?.(files.map((f)=>f.name).join(', ')),
|
|
222
244
|
disabled: !onValueChange,
|
|
223
|
-
onBlur: onValueBlur
|
|
245
|
+
onBlur: onValueBlur,
|
|
246
|
+
"aria-invalid": error ? true : void 0,
|
|
247
|
+
"aria-describedby": error ? validationId : void 0,
|
|
248
|
+
"aria-errormessage": error ? validationId : void 0
|
|
224
249
|
})
|
|
225
250
|
]
|
|
251
|
+
}),
|
|
252
|
+
error && !typeMeta.supportsExpression && /*#__PURE__*/ jsx("p", {
|
|
253
|
+
id: validationId,
|
|
254
|
+
"data-slot": "lockable-value-field-error",
|
|
255
|
+
"aria-live": "polite",
|
|
256
|
+
"aria-atomic": "true",
|
|
257
|
+
className: "mt-1 text-xs leading-4 text-error",
|
|
258
|
+
children: error
|
|
226
259
|
})
|
|
227
260
|
]
|
|
228
261
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type LucideIcon } from 'lucide-react';
|
|
2
|
-
import type { ReactNode } from 'react';
|
|
2
|
+
import type { AriaAttributes, ReactNode } from 'react';
|
|
3
3
|
export type LockableValueFieldMode = 'fixed' | 'expression';
|
|
4
4
|
export type LockableFieldType = 'string' | 'integer' | 'date' | 'boolean' | 'single-select' | 'multi-select' | 'file';
|
|
5
5
|
interface FieldTypeMeta {
|
|
@@ -42,6 +42,10 @@ export interface LockableValueFieldProps {
|
|
|
42
42
|
readOnly: boolean;
|
|
43
43
|
placeholder: string;
|
|
44
44
|
fieldType: LockableFieldType;
|
|
45
|
+
'aria-invalid'?: AriaAttributes['aria-invalid'];
|
|
46
|
+
'aria-describedby'?: string;
|
|
47
|
+
'aria-errormessage'?: string;
|
|
48
|
+
'data-slot'?: string;
|
|
45
49
|
}) => ReactNode;
|
|
46
50
|
/** The field's data type. Defaults to 'string'. Determines which control renders the value. */
|
|
47
51
|
fieldType?: LockableFieldType;
|
|
@@ -53,6 +57,10 @@ export interface LockableValueFieldProps {
|
|
|
53
57
|
onRequiredChange?: (required: boolean) => void;
|
|
54
58
|
/** Overrides the default mode-based label (e.g. a field name instead of "String value"). */
|
|
55
59
|
label?: ReactNode;
|
|
60
|
+
/** Field-specific validation feedback rendered immediately below the active control. */
|
|
61
|
+
error?: ReactNode;
|
|
62
|
+
/** Optional id for the inline validation message. */
|
|
63
|
+
errorId?: string;
|
|
56
64
|
/** Accessible name for the file-upload dropzone. Defaults to a string `label`, then the computed field label. */
|
|
57
65
|
fileUploadAriaLabel?: string;
|
|
58
66
|
/** Extra content rendered after the built-in AI assist / Insert variable buttons (e.g. a delete button). */
|
|
@@ -35,7 +35,7 @@ const external_checkbox_cjs_namespaceObject = require("./checkbox.cjs");
|
|
|
35
35
|
const external_command_cjs_namespaceObject = require("./command.cjs");
|
|
36
36
|
const external_popover_cjs_namespaceObject = require("./popover.cjs");
|
|
37
37
|
const index_cjs_namespaceObject = require("../../lib/index.cjs");
|
|
38
|
-
const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ id, options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText, onBlur }, ref)=>{
|
|
38
|
+
const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ id, options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText, onBlur, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, 'aria-errormessage': ariaErrorMessage }, ref)=>{
|
|
39
39
|
const [open, setOpen] = external_react_namespaceObject.useState(false);
|
|
40
40
|
const handleUnselect = (value)=>{
|
|
41
41
|
onChange(selected.filter((s)=>s !== value));
|
|
@@ -71,6 +71,9 @@ const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ i
|
|
|
71
71
|
variant: "outline",
|
|
72
72
|
role: "combobox",
|
|
73
73
|
"aria-expanded": open,
|
|
74
|
+
"aria-invalid": ariaInvalid,
|
|
75
|
+
"aria-describedby": ariaDescribedBy,
|
|
76
|
+
"aria-errormessage": ariaErrorMessage,
|
|
74
77
|
"aria-label": id ? void 0 : selected.length > 0 ? `${selected.length} ${1 === selected.length ? 'item' : 'items'} selected` : placeholder,
|
|
75
78
|
className: (0, index_cjs_namespaceObject.cn)('w-full justify-between future:rounded-xl future:border-0 future:bg-surface-overlay future:hover:bg-surface-hover future:font-normal future:text-muted-foreground', selected.length > 0 ? 'h-auto min-h-10' : 'h-10'),
|
|
76
79
|
disabled: disabled,
|
|
@@ -17,6 +17,9 @@ export interface MultiSelectProps {
|
|
|
17
17
|
clearAllText?: string | ((count: number) => string);
|
|
18
18
|
/** Called when the multi-select popover closes after being opened. */
|
|
19
19
|
onBlur?: () => void;
|
|
20
|
+
'aria-invalid'?: React.AriaAttributes['aria-invalid'];
|
|
21
|
+
'aria-describedby'?: string;
|
|
22
|
+
'aria-errormessage'?: string;
|
|
20
23
|
}
|
|
21
24
|
declare const MultiSelect: React.ForwardRefExoticComponent<MultiSelectProps & React.RefAttributes<HTMLDivElement>>;
|
|
22
25
|
export { MultiSelect };
|
|
@@ -7,7 +7,7 @@ import { Checkbox } from "./checkbox.js";
|
|
|
7
7
|
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "./command.js";
|
|
8
8
|
import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
|
|
9
9
|
import { cn } from "../../lib/index.js";
|
|
10
|
-
const MultiSelect = /*#__PURE__*/ forwardRef(({ id, options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText, onBlur }, ref)=>{
|
|
10
|
+
const MultiSelect = /*#__PURE__*/ forwardRef(({ id, options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText, onBlur, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, 'aria-errormessage': ariaErrorMessage }, ref)=>{
|
|
11
11
|
const [open, setOpen] = useState(false);
|
|
12
12
|
const handleUnselect = (value)=>{
|
|
13
13
|
onChange(selected.filter((s)=>s !== value));
|
|
@@ -43,6 +43,9 @@ const MultiSelect = /*#__PURE__*/ forwardRef(({ id, options, selected, onChange,
|
|
|
43
43
|
variant: "outline",
|
|
44
44
|
role: "combobox",
|
|
45
45
|
"aria-expanded": open,
|
|
46
|
+
"aria-invalid": ariaInvalid,
|
|
47
|
+
"aria-describedby": ariaDescribedBy,
|
|
48
|
+
"aria-errormessage": ariaErrorMessage,
|
|
46
49
|
"aria-label": id ? void 0 : selected.length > 0 ? `${selected.length} ${1 === selected.length ? 'item' : 'items'} selected` : placeholder,
|
|
47
50
|
className: cn('w-full justify-between future:rounded-xl future:border-0 future:bg-surface-overlay future:hover:bg-surface-hover future:font-normal future:text-muted-foreground', selected.length > 0 ? 'h-auto min-h-10' : 'h-10'),
|
|
48
51
|
disabled: disabled,
|
|
@@ -70,8 +70,8 @@ const MARKDOWN_PREVIEW_STYLES = `
|
|
|
70
70
|
.prompt-editor-preview th { font-weight: 600; background-color: var(--color-muted); }
|
|
71
71
|
.prompt-editor-preview strong { font-weight: 700; }
|
|
72
72
|
.prompt-editor-preview em { font-style: italic; }
|
|
73
|
-
.prompt-editor-preview .token-pill { display: inline-flex; align-items: center; gap: 3px; height: 20px; padding: 0 4px; border-radius: 4px; font-size: 13px; line-height: 20px; vertical-align: middle; background: var(--color-
|
|
74
|
-
.prompt-editor-preview .token-pill svg { display: block; flex-shrink: 0; color: var(--color-
|
|
73
|
+
.prompt-editor-preview .token-pill { display: inline-flex; align-items: center; gap: 3px; height: 20px; padding: 0 4px; border-radius: 4px; font-size: 13px; line-height: 20px; vertical-align: middle; background: var(--color-info-background); color: var(--color-info-text); }
|
|
74
|
+
.prompt-editor-preview .token-pill svg { display: block; flex-shrink: 0; color: var(--color-info-icon); width: 14px; height: 14px; }
|
|
75
75
|
`;
|
|
76
76
|
const PURIFY_CONFIG = {
|
|
77
77
|
ALLOWED_TAGS: [
|
|
@@ -32,8 +32,8 @@ const MARKDOWN_PREVIEW_STYLES = `
|
|
|
32
32
|
.prompt-editor-preview th { font-weight: 600; background-color: var(--color-muted); }
|
|
33
33
|
.prompt-editor-preview strong { font-weight: 700; }
|
|
34
34
|
.prompt-editor-preview em { font-style: italic; }
|
|
35
|
-
.prompt-editor-preview .token-pill { display: inline-flex; align-items: center; gap: 3px; height: 20px; padding: 0 4px; border-radius: 4px; font-size: 13px; line-height: 20px; vertical-align: middle; background: var(--color-
|
|
36
|
-
.prompt-editor-preview .token-pill svg { display: block; flex-shrink: 0; color: var(--color-
|
|
35
|
+
.prompt-editor-preview .token-pill { display: inline-flex; align-items: center; gap: 3px; height: 20px; padding: 0 4px; border-radius: 4px; font-size: 13px; line-height: 20px; vertical-align: middle; background: var(--color-info-background); color: var(--color-info-text); }
|
|
36
|
+
.prompt-editor-preview .token-pill svg { display: block; flex-shrink: 0; color: var(--color-info-icon); width: 14px; height: 14px; }
|
|
37
37
|
`;
|
|
38
38
|
const PURIFY_CONFIG = {
|
|
39
39
|
ALLOWED_TAGS: [
|
|
@@ -31,14 +31,14 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
});
|
|
32
32
|
const getPromptEditorTokenColors = ()=>({
|
|
33
33
|
valid: {
|
|
34
|
-
background: 'var(--color-
|
|
35
|
-
border: 'var(--color-
|
|
36
|
-
text: 'var(--color-
|
|
37
|
-
icon: 'var(--color-
|
|
34
|
+
background: 'var(--color-info-background)',
|
|
35
|
+
border: 'var(--color-info-icon)',
|
|
36
|
+
text: 'var(--color-info-text)',
|
|
37
|
+
icon: 'var(--color-info-icon)'
|
|
38
38
|
},
|
|
39
39
|
invalid: {
|
|
40
40
|
background: 'var(--color-error-background)',
|
|
41
|
-
border: 'var(--color-error)',
|
|
41
|
+
border: 'var(--color-error-icon)',
|
|
42
42
|
text: 'var(--color-error-text)',
|
|
43
43
|
icon: 'var(--color-error-icon)'
|
|
44
44
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
const getPromptEditorTokenColors = ()=>({
|
|
2
2
|
valid: {
|
|
3
|
-
background: 'var(--color-
|
|
4
|
-
border: 'var(--color-
|
|
5
|
-
text: 'var(--color-
|
|
6
|
-
icon: 'var(--color-
|
|
3
|
+
background: 'var(--color-info-background)',
|
|
4
|
+
border: 'var(--color-info-icon)',
|
|
5
|
+
text: 'var(--color-info-text)',
|
|
6
|
+
icon: 'var(--color-info-icon)'
|
|
7
7
|
},
|
|
8
8
|
invalid: {
|
|
9
9
|
background: 'var(--color-error-background)',
|
|
10
|
-
border: 'var(--color-error)',
|
|
10
|
+
border: 'var(--color-error-icon)',
|
|
11
11
|
text: 'var(--color-error-text)',
|
|
12
12
|
icon: 'var(--color-error-icon)'
|
|
13
13
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -71,6 +71,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
71
71
|
Column: ()=>column_cjs_namespaceObject.Column,
|
|
72
72
|
AlertDialogTrigger: ()=>alert_dialog_cjs_namespaceObject.AlertDialogTrigger,
|
|
73
73
|
DrawerOverlay: ()=>drawer_cjs_namespaceObject.DrawerOverlay,
|
|
74
|
+
RequiredIndicator: ()=>label_cjs_namespaceObject.RequiredIndicator,
|
|
74
75
|
CardContent: ()=>card_cjs_namespaceObject.CardContent,
|
|
75
76
|
SelectValue: ()=>select_cjs_namespaceObject.SelectValue,
|
|
76
77
|
Slider: ()=>slider_cjs_namespaceObject.Slider,
|
|
@@ -509,6 +510,7 @@ exports.Progress = __webpack_exports__.Progress;
|
|
|
509
510
|
exports.PromptEditor = __webpack_exports__.PromptEditor;
|
|
510
511
|
exports.RadioGroup = __webpack_exports__.RadioGroup;
|
|
511
512
|
exports.RadioGroupItem = __webpack_exports__.RadioGroupItem;
|
|
513
|
+
exports.RequiredIndicator = __webpack_exports__.RequiredIndicator;
|
|
512
514
|
exports.ResizableHandle = __webpack_exports__.ResizableHandle;
|
|
513
515
|
exports.ResizablePanel = __webpack_exports__.ResizablePanel;
|
|
514
516
|
exports.ResizablePanelGroup = __webpack_exports__.ResizablePanelGroup;
|
|
@@ -752,6 +754,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
752
754
|
"PromptEditor",
|
|
753
755
|
"RadioGroup",
|
|
754
756
|
"RadioGroupItem",
|
|
757
|
+
"RequiredIndicator",
|
|
755
758
|
"ResizableHandle",
|
|
756
759
|
"ResizablePanel",
|
|
757
760
|
"ResizablePanelGroup",
|
package/dist/index.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export { FIELD_TYPE_META, FIELD_TYPE_ORDER, LockableValueField, } from './compon
|
|
|
18
18
|
export type { LockableValueFieldProps, LockableValueFieldMode, LockableFieldType, LockableValueFieldOption, } from './components/ui/lockable-value-field';
|
|
19
19
|
export { Textarea } from './components/ui/textarea';
|
|
20
20
|
export type { TextareaProps } from './components/ui/textarea';
|
|
21
|
-
export { Label } from './components/ui/label';
|
|
22
|
-
export type { LabelProps } from './components/ui/label';
|
|
21
|
+
export { Label, RequiredIndicator } from './components/ui/label';
|
|
22
|
+
export type { LabelProps, RequiredIndicatorProps } from './components/ui/label';
|
|
23
23
|
export { Checkbox } from './components/ui/checkbox';
|
|
24
24
|
export type { CheckboxProps } from './components/ui/checkbox';
|
|
25
25
|
export { RadioGroup, RadioGroupItem } from './components/ui/radio-group';
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import { Input } from "./components/ui/input.js";
|
|
|
10
10
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea } from "./components/ui/input-group.js";
|
|
11
11
|
import { FIELD_TYPE_META, FIELD_TYPE_ORDER, LockableValueField } from "./components/ui/lockable-value-field/index.js";
|
|
12
12
|
import { Textarea } from "./components/ui/textarea.js";
|
|
13
|
-
import { Label } from "./components/ui/label.js";
|
|
13
|
+
import { Label, RequiredIndicator } from "./components/ui/label.js";
|
|
14
14
|
import { Checkbox } from "./components/ui/checkbox.js";
|
|
15
15
|
import { RadioGroup, RadioGroupItem } from "./components/ui/radio-group.js";
|
|
16
16
|
import { Switch } from "./components/ui/switch.js";
|
|
@@ -69,4 +69,4 @@ import { ExpressionBuilder, RuleBuilder, RulesEngine } from "./components/forms/
|
|
|
69
69
|
import { DataFetcher, DataSourceBuilder, DataTransformers, FetchAdapter } from "./components/forms/data-fetcher.js";
|
|
70
70
|
import { analyticsPlugin, auditPlugin, autoSavePlugin, formattingPlugin, validationPlugin, workflowPlugin } from "./components/forms/form-plugins.js";
|
|
71
71
|
import { hasMinMaxStep, hasOptions, isCustomField, isFileField } from "./components/forms/form-schema.js";
|
|
72
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Column, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataFetcher, DataSourceBuilder, DataTable, DataTableColumnHeader, DataTableSelectColumn, DataTransformers, DatePicker, DateTimePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableCell, EmptyState, ExpressionBuilder, FIELD_TYPE_META, FIELD_TYPE_ORDER, FetchAdapter, FileUpload, FormDesigner, FormFieldRenderer, FormStateViewer, Grid, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Label, LockableValueField, MetadataForm, MultiSelect, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PortalContainerProvider, Progress, PromptEditor, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, Row, RuleBuilder, RulesEngine, ScrollArea, ScrollBar, ScrollableTabsList, Search, SearchWithSuggestions, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, Spinner, StatsCard, Stepper, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, tree_view as TreeView, VARIABLE_DRAG_MIME, VariablePicker, VariablePickerContent, analyticsPlugin, auditPlugin, autoSavePlugin, badgeVariants, buttonVariants, cn, createEditableColumn, formattingPlugin, hasMinMaxStep, hasOptions, isCustomField, isFileField, spinnerVariants, toast, toggleVariants, validationPlugin, workflowPlugin };
|
|
72
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Column, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataFetcher, DataSourceBuilder, DataTable, DataTableColumnHeader, DataTableSelectColumn, DataTransformers, DatePicker, DateTimePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableCell, EmptyState, ExpressionBuilder, FIELD_TYPE_META, FIELD_TYPE_ORDER, FetchAdapter, FileUpload, FormDesigner, FormFieldRenderer, FormStateViewer, Grid, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Label, LockableValueField, MetadataForm, MultiSelect, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PortalContainerProvider, Progress, PromptEditor, RadioGroup, RadioGroupItem, RequiredIndicator, ResizableHandle, ResizablePanel, ResizablePanelGroup, Row, RuleBuilder, RulesEngine, ScrollArea, ScrollBar, ScrollableTabsList, Search, SearchWithSuggestions, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, Spinner, StatsCard, Stepper, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, tree_view as TreeView, VARIABLE_DRAG_MIME, VariablePicker, VariablePickerContent, analyticsPlugin, auditPlugin, autoSavePlugin, badgeVariants, buttonVariants, cn, createEditableColumn, formattingPlugin, hasMinMaxStep, hasOptions, isCustomField, isFileField, spinnerVariants, toast, toggleVariants, validationPlugin, workflowPlugin };
|