@uipath/apollo-wind 2.31.0 → 2.32.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/dist/components/custom/panel-flow.cjs +3 -3
- package/dist/components/custom/panel-flow.d.ts +2 -0
- package/dist/components/custom/panel-flow.js +3 -3
- package/dist/components/ui/file-upload.cjs +22 -16
- package/dist/components/ui/file-upload.d.ts +19 -1
- package/dist/components/ui/file-upload.js +22 -16
- package/dist/components/ui/index.cjs +18 -18
- package/dist/components/ui/lockable-value-field/components/field-header.cjs +327 -0
- package/dist/components/ui/lockable-value-field/components/field-header.d.ts +19 -0
- package/dist/components/ui/lockable-value-field/components/field-header.js +293 -0
- package/dist/components/ui/lockable-value-field/components/lock-toggle-button.cjs +67 -0
- package/dist/components/ui/lockable-value-field/components/lock-toggle-button.d.ts +9 -0
- package/dist/components/ui/lockable-value-field/components/lock-toggle-button.js +33 -0
- package/dist/components/ui/lockable-value-field/components/mode-menu-item.cjs +63 -0
- package/dist/components/ui/lockable-value-field/components/mode-menu-item.d.ts +9 -0
- package/dist/components/ui/lockable-value-field/components/mode-menu-item.js +29 -0
- package/dist/components/ui/lockable-value-field/index.cjs +43 -0
- package/dist/components/ui/lockable-value-field/index.d.ts +3 -0
- package/dist/components/ui/lockable-value-field/index.js +3 -0
- package/dist/components/ui/lockable-value-field/lockable-value-field.cjs +264 -0
- package/dist/components/ui/lockable-value-field/lockable-value-field.d.ts +14 -0
- package/dist/components/ui/lockable-value-field/lockable-value-field.js +230 -0
- package/dist/components/ui/lockable-value-field/types.cjs +99 -0
- package/dist/components/ui/lockable-value-field/types.d.ts +78 -0
- package/dist/components/ui/lockable-value-field/types.js +62 -0
- package/dist/components/ui/lockable-value-field/utils.cjs +117 -0
- package/dist/components/ui/lockable-value-field/utils.d.ts +24 -0
- package/dist/components/ui/lockable-value-field/utils.js +68 -0
- package/dist/components/ui/multi-select.cjs +7 -3
- package/dist/components/ui/multi-select.d.ts +4 -0
- package/dist/components/ui/multi-select.js +7 -3
- package/dist/components/ui/search.cjs +1 -1
- package/dist/components/ui/search.js +1 -1
- package/dist/index.cjs +28 -18
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -1
- package/dist/styles.css +71 -0
- package/package.json +2 -2
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type LucideIcon } from 'lucide-react';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export type LockableValueFieldMode = 'fixed' | 'expression';
|
|
4
|
+
export type LockableFieldType = 'string' | 'integer' | 'date' | 'boolean' | 'single-select' | 'multi-select' | 'file';
|
|
5
|
+
interface FieldTypeMeta {
|
|
6
|
+
label: string;
|
|
7
|
+
icon: LucideIcon;
|
|
8
|
+
supportsExpression: boolean;
|
|
9
|
+
fixedLabel: string;
|
|
10
|
+
fixedDescription: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const FIELD_TYPE_META: Record<LockableFieldType, FieldTypeMeta>;
|
|
13
|
+
export declare const FIELD_TYPE_ORDER: LockableFieldType[];
|
|
14
|
+
export interface LockableValueFieldOption {
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}
|
|
18
|
+
export interface LockableValueFieldProps {
|
|
19
|
+
/** Current field value. Encoding depends on fieldType (e.g. multi-select is a JSON array string). */
|
|
20
|
+
value?: string;
|
|
21
|
+
/** Called when the user edits the value (only fires while unlocked). */
|
|
22
|
+
onValueChange?: (value: string) => void;
|
|
23
|
+
/** Called when the active value control loses focus. */
|
|
24
|
+
onValueBlur?: () => void;
|
|
25
|
+
/** Whether the field is read-only. Defaults to true. */
|
|
26
|
+
locked?: boolean;
|
|
27
|
+
/** Called when the user toggles the lock. */
|
|
28
|
+
onLockedChange?: (locked: boolean) => void;
|
|
29
|
+
/** Fixed value vs. JS expression. Defaults to 'fixed'. Ignored for types that don't support expressions. */
|
|
30
|
+
mode?: LockableValueFieldMode;
|
|
31
|
+
/** Called when the user switches modes. */
|
|
32
|
+
onModeChange?: (mode: LockableValueFieldMode) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Optional expression editor used in place of the built-in monospace input.
|
|
35
|
+
* Consumers can use this to supply a syntax-aware editor such as Monaco.
|
|
36
|
+
*/
|
|
37
|
+
renderExpressionEditor?: (props: {
|
|
38
|
+
id: string;
|
|
39
|
+
value: string;
|
|
40
|
+
onValueChange?: (value: string) => void;
|
|
41
|
+
onBlur?: () => void;
|
|
42
|
+
readOnly: boolean;
|
|
43
|
+
placeholder: string;
|
|
44
|
+
fieldType: LockableFieldType;
|
|
45
|
+
}) => ReactNode;
|
|
46
|
+
/** The field's data type. Defaults to 'string'. Determines which control renders the value. */
|
|
47
|
+
fieldType?: LockableFieldType;
|
|
48
|
+
/** Called when the user switches the field type. */
|
|
49
|
+
onFieldTypeChange?: (fieldType: LockableFieldType) => void;
|
|
50
|
+
/** Shows a required-field asterisk next to the default label. Ignored when `label` is provided. */
|
|
51
|
+
required?: boolean;
|
|
52
|
+
/** Called when the user toggles required/optional. Renders the Required switch when provided. */
|
|
53
|
+
onRequiredChange?: (required: boolean) => void;
|
|
54
|
+
/** Overrides the default mode-based label (e.g. a field name instead of "String value"). */
|
|
55
|
+
label?: ReactNode;
|
|
56
|
+
/** Accessible name for the file-upload dropzone. Defaults to a string `label`, then the computed field label. */
|
|
57
|
+
fileUploadAriaLabel?: string;
|
|
58
|
+
/** Extra content rendered after the built-in AI assist / Insert variable buttons (e.g. a delete button). */
|
|
59
|
+
headerActions?: ReactNode;
|
|
60
|
+
/** Forces the header row into its narrow-container icon-only layout, regardless of actual width. For demos/comparisons. */
|
|
61
|
+
compact?: boolean;
|
|
62
|
+
/** Whether the field-type, AI-assist, and insert-variable controls are always shown or only on hover. Defaults to 'visible'. */
|
|
63
|
+
controlsVisibility?: 'visible' | 'hover';
|
|
64
|
+
/** Whether the AI-assist and Insert-variable actions render at all. Set to false for read-only reviewer contexts where field configuration isn't editable. Defaults to true. */
|
|
65
|
+
showFieldActions?: boolean;
|
|
66
|
+
/** Options for 'single-select' / 'multi-select' field types. Defaults to a small set of demo options. */
|
|
67
|
+
options?: LockableValueFieldOption[];
|
|
68
|
+
/** Called with the entered prompt when the user clicks Generate in the AI-assist popover. */
|
|
69
|
+
onGenerateWithAi?: (prompt: string) => void;
|
|
70
|
+
/**
|
|
71
|
+
* Variables offered by the "Insert variable" popover; clicking one appends its value to the
|
|
72
|
+
* current value. The button is disabled when this is empty (the default).
|
|
73
|
+
*/
|
|
74
|
+
variables?: LockableValueFieldOption[];
|
|
75
|
+
id?: string;
|
|
76
|
+
className?: string;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ALargeSmall, Calendar, File, Hash, List, ListChecks, ToggleLeft } from "lucide-react";
|
|
2
|
+
const FIELD_TYPE_META = {
|
|
3
|
+
string: {
|
|
4
|
+
label: 'String',
|
|
5
|
+
icon: ALargeSmall,
|
|
6
|
+
supportsExpression: true,
|
|
7
|
+
fixedLabel: 'Fixed value',
|
|
8
|
+
fixedDescription: 'Use a literal string value'
|
|
9
|
+
},
|
|
10
|
+
integer: {
|
|
11
|
+
label: 'Integer',
|
|
12
|
+
icon: Hash,
|
|
13
|
+
supportsExpression: true,
|
|
14
|
+
fixedLabel: 'Fixed value',
|
|
15
|
+
fixedDescription: 'Use a literal number value'
|
|
16
|
+
},
|
|
17
|
+
date: {
|
|
18
|
+
label: 'Date',
|
|
19
|
+
icon: Calendar,
|
|
20
|
+
supportsExpression: true,
|
|
21
|
+
fixedLabel: 'Fixed date',
|
|
22
|
+
fixedDescription: 'Use a literal date value'
|
|
23
|
+
},
|
|
24
|
+
boolean: {
|
|
25
|
+
label: 'Boolean',
|
|
26
|
+
icon: ToggleLeft,
|
|
27
|
+
supportsExpression: true,
|
|
28
|
+
fixedLabel: 'Fixed value',
|
|
29
|
+
fixedDescription: 'Use a literal true or false value'
|
|
30
|
+
},
|
|
31
|
+
'single-select': {
|
|
32
|
+
label: 'Single select',
|
|
33
|
+
icon: List,
|
|
34
|
+
supportsExpression: false,
|
|
35
|
+
fixedLabel: 'Fixed value',
|
|
36
|
+
fixedDescription: 'Choose one option'
|
|
37
|
+
},
|
|
38
|
+
'multi-select': {
|
|
39
|
+
label: 'Multi select',
|
|
40
|
+
icon: ListChecks,
|
|
41
|
+
supportsExpression: false,
|
|
42
|
+
fixedLabel: 'Fixed value',
|
|
43
|
+
fixedDescription: 'Choose one or more options'
|
|
44
|
+
},
|
|
45
|
+
file: {
|
|
46
|
+
label: 'File',
|
|
47
|
+
icon: File,
|
|
48
|
+
supportsExpression: false,
|
|
49
|
+
fixedLabel: 'Fixed value',
|
|
50
|
+
fixedDescription: 'Upload a file'
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const FIELD_TYPE_ORDER = [
|
|
54
|
+
'string',
|
|
55
|
+
'integer',
|
|
56
|
+
'date',
|
|
57
|
+
'boolean',
|
|
58
|
+
'single-select',
|
|
59
|
+
'multi-select',
|
|
60
|
+
'file'
|
|
61
|
+
];
|
|
62
|
+
export { FIELD_TYPE_META, FIELD_TYPE_ORDER };
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
DEFAULT_SELECT_OPTIONS: ()=>DEFAULT_SELECT_OPTIONS,
|
|
28
|
+
formatDateValue: ()=>formatDateValue,
|
|
29
|
+
getLockedDisplayValue: ()=>getLockedDisplayValue,
|
|
30
|
+
parseDateValue: ()=>parseDateValue,
|
|
31
|
+
parseListValue: ()=>parseListValue,
|
|
32
|
+
toDateOnlyString: ()=>toDateOnlyString
|
|
33
|
+
});
|
|
34
|
+
const DEFAULT_SELECT_OPTIONS = [
|
|
35
|
+
{
|
|
36
|
+
label: 'Option 1',
|
|
37
|
+
value: 'option-1'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
label: 'Option 2',
|
|
41
|
+
value: 'option-2'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
label: 'Option 3',
|
|
45
|
+
value: 'option-3'
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
function parseListValue(value) {
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(value);
|
|
51
|
+
return Array.isArray(parsed) ? parsed.filter((v)=>'string' == typeof v) : [];
|
|
52
|
+
} catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
57
|
+
function parseDateValue(value) {
|
|
58
|
+
if (DATE_ONLY_PATTERN.test(value)) {
|
|
59
|
+
const [year, month, day] = value.split('-').map(Number);
|
|
60
|
+
const date = new Date(year, month - 1, day);
|
|
61
|
+
const isValid = !Number.isNaN(date.getTime()) && date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
|
|
62
|
+
return isValid ? date : void 0;
|
|
63
|
+
}
|
|
64
|
+
const date = new Date(value);
|
|
65
|
+
return Number.isNaN(date.getTime()) ? void 0 : date;
|
|
66
|
+
}
|
|
67
|
+
function toDateOnlyString(date) {
|
|
68
|
+
const year = date.getFullYear();
|
|
69
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
70
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
71
|
+
return `${year}-${month}-${day}`;
|
|
72
|
+
}
|
|
73
|
+
function formatDateValue(value) {
|
|
74
|
+
const date = parseDateValue(value);
|
|
75
|
+
return date ? date.toLocaleDateString(void 0, {
|
|
76
|
+
year: 'numeric',
|
|
77
|
+
month: 'long',
|
|
78
|
+
day: 'numeric'
|
|
79
|
+
}) : value;
|
|
80
|
+
}
|
|
81
|
+
function getLockedDisplayValue(fieldType, value, options) {
|
|
82
|
+
switch(fieldType){
|
|
83
|
+
case 'boolean':
|
|
84
|
+
if ('true' === value) return 'True';
|
|
85
|
+
if ('false' === value) return 'False';
|
|
86
|
+
return '';
|
|
87
|
+
case 'date':
|
|
88
|
+
return value ? formatDateValue(value) : '';
|
|
89
|
+
case 'single-select':
|
|
90
|
+
return options.find((option)=>option.value === value)?.label ?? value;
|
|
91
|
+
case 'multi-select':
|
|
92
|
+
{
|
|
93
|
+
const parsed = parseListValue(value);
|
|
94
|
+
if (0 === parsed.length && value && '[]' !== value) return value;
|
|
95
|
+
return parsed.map((v)=>options.find((option)=>option.value === v)?.label ?? v).join(', ');
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.DEFAULT_SELECT_OPTIONS = __webpack_exports__.DEFAULT_SELECT_OPTIONS;
|
|
102
|
+
exports.formatDateValue = __webpack_exports__.formatDateValue;
|
|
103
|
+
exports.getLockedDisplayValue = __webpack_exports__.getLockedDisplayValue;
|
|
104
|
+
exports.parseDateValue = __webpack_exports__.parseDateValue;
|
|
105
|
+
exports.parseListValue = __webpack_exports__.parseListValue;
|
|
106
|
+
exports.toDateOnlyString = __webpack_exports__.toDateOnlyString;
|
|
107
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
108
|
+
"DEFAULT_SELECT_OPTIONS",
|
|
109
|
+
"formatDateValue",
|
|
110
|
+
"getLockedDisplayValue",
|
|
111
|
+
"parseDateValue",
|
|
112
|
+
"parseListValue",
|
|
113
|
+
"toDateOnlyString"
|
|
114
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
115
|
+
Object.defineProperty(exports, '__esModule', {
|
|
116
|
+
value: true
|
|
117
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LockableFieldType, LockableValueFieldOption } from './types';
|
|
2
|
+
export declare const DEFAULT_SELECT_OPTIONS: LockableValueFieldOption[];
|
|
3
|
+
export declare function parseListValue(value: string): string[];
|
|
4
|
+
/**
|
|
5
|
+
* Parses a date field's stored value, returning undefined for empty or invalid input.
|
|
6
|
+
*
|
|
7
|
+
* Date-only strings (`YYYY-MM-DD`) are parsed as a local date instead of going through
|
|
8
|
+
* `new Date(string)` directly -- the latter treats date-only strings as UTC midnight,
|
|
9
|
+
* which rolls over to the previous day once formatted in a negative-UTC-offset
|
|
10
|
+
* timezone. Full ISO timestamps (which already carry explicit time/zone info) go
|
|
11
|
+
* through `new Date` as-is.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseDateValue(value: string): Date | undefined;
|
|
14
|
+
/** Formats a Date as a local `YYYY-MM-DD` string, the inverse of parseDateValue's date-only path. */
|
|
15
|
+
export declare function toDateOnlyString(date: Date): string;
|
|
16
|
+
/** Formats a date field's value for display, falling back to the raw value if it isn't a valid date. */
|
|
17
|
+
export declare function formatDateValue(value: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Computes the plain-text shown in place of the real control once a field is locked.
|
|
20
|
+
* Boolean/single-select/multi-select resolve their stored value to a display label;
|
|
21
|
+
* everything else (including an invalid date, so the component never throws on
|
|
22
|
+
* external input) falls back to the raw value.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLockedDisplayValue(fieldType: LockableFieldType, value: string, options: LockableValueFieldOption[]): string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const DEFAULT_SELECT_OPTIONS = [
|
|
2
|
+
{
|
|
3
|
+
label: 'Option 1',
|
|
4
|
+
value: 'option-1'
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
label: 'Option 2',
|
|
8
|
+
value: 'option-2'
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
label: 'Option 3',
|
|
12
|
+
value: 'option-3'
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
function parseListValue(value) {
|
|
16
|
+
try {
|
|
17
|
+
const parsed = JSON.parse(value);
|
|
18
|
+
return Array.isArray(parsed) ? parsed.filter((v)=>'string' == typeof v) : [];
|
|
19
|
+
} catch {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
24
|
+
function parseDateValue(value) {
|
|
25
|
+
if (DATE_ONLY_PATTERN.test(value)) {
|
|
26
|
+
const [year, month, day] = value.split('-').map(Number);
|
|
27
|
+
const date = new Date(year, month - 1, day);
|
|
28
|
+
const isValid = !Number.isNaN(date.getTime()) && date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
|
|
29
|
+
return isValid ? date : void 0;
|
|
30
|
+
}
|
|
31
|
+
const date = new Date(value);
|
|
32
|
+
return Number.isNaN(date.getTime()) ? void 0 : date;
|
|
33
|
+
}
|
|
34
|
+
function toDateOnlyString(date) {
|
|
35
|
+
const year = date.getFullYear();
|
|
36
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
37
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
38
|
+
return `${year}-${month}-${day}`;
|
|
39
|
+
}
|
|
40
|
+
function formatDateValue(value) {
|
|
41
|
+
const date = parseDateValue(value);
|
|
42
|
+
return date ? date.toLocaleDateString(void 0, {
|
|
43
|
+
year: 'numeric',
|
|
44
|
+
month: 'long',
|
|
45
|
+
day: 'numeric'
|
|
46
|
+
}) : value;
|
|
47
|
+
}
|
|
48
|
+
function getLockedDisplayValue(fieldType, value, options) {
|
|
49
|
+
switch(fieldType){
|
|
50
|
+
case 'boolean':
|
|
51
|
+
if ('true' === value) return 'True';
|
|
52
|
+
if ('false' === value) return 'False';
|
|
53
|
+
return '';
|
|
54
|
+
case 'date':
|
|
55
|
+
return value ? formatDateValue(value) : '';
|
|
56
|
+
case 'single-select':
|
|
57
|
+
return options.find((option)=>option.value === value)?.label ?? value;
|
|
58
|
+
case 'multi-select':
|
|
59
|
+
{
|
|
60
|
+
const parsed = parseListValue(value);
|
|
61
|
+
if (0 === parsed.length && value && '[]' !== value) return value;
|
|
62
|
+
return parsed.map((v)=>options.find((option)=>option.value === v)?.label ?? v).join(', ');
|
|
63
|
+
}
|
|
64
|
+
default:
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export { DEFAULT_SELECT_OPTIONS, formatDateValue, getLockedDisplayValue, parseDateValue, parseListValue, toDateOnlyString };
|
|
@@ -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(({ options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText }, 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 }, ref)=>{
|
|
39
39
|
const [open, setOpen] = external_react_namespaceObject.useState(false);
|
|
40
40
|
const handleUnselect = (value)=>{
|
|
41
41
|
onChange(selected.filter((s)=>s !== value));
|
|
@@ -58,15 +58,19 @@ const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ o
|
|
|
58
58
|
className: (0, index_cjs_namespaceObject.cn)('relative', className),
|
|
59
59
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover, {
|
|
60
60
|
open: open,
|
|
61
|
-
onOpenChange:
|
|
61
|
+
onOpenChange: (nextOpen)=>{
|
|
62
|
+
setOpen(nextOpen);
|
|
63
|
+
if (!nextOpen && open) onBlur?.();
|
|
64
|
+
},
|
|
62
65
|
children: [
|
|
63
66
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger, {
|
|
64
67
|
asChild: true,
|
|
65
68
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button, {
|
|
69
|
+
id: id,
|
|
66
70
|
variant: "outline",
|
|
67
71
|
role: "combobox",
|
|
68
72
|
"aria-expanded": open,
|
|
69
|
-
"aria-label": selected.length > 0 ? `${selected.length} items selected` : placeholder,
|
|
73
|
+
"aria-label": id ? void 0 : selected.length > 0 ? `${selected.length} ${1 === selected.length ? 'item' : 'items'} selected` : placeholder,
|
|
70
74
|
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'),
|
|
71
75
|
disabled: disabled,
|
|
72
76
|
children: [
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
export interface MultiSelectProps {
|
|
3
|
+
/** Applied to the trigger button, so a `<label htmlFor>` pointing at it associates correctly. */
|
|
4
|
+
id?: string;
|
|
3
5
|
options: {
|
|
4
6
|
label: string;
|
|
5
7
|
value: string;
|
|
@@ -13,6 +15,8 @@ export interface MultiSelectProps {
|
|
|
13
15
|
disabled?: boolean;
|
|
14
16
|
searchPlaceholder?: string;
|
|
15
17
|
clearAllText?: string | ((count: number) => string);
|
|
18
|
+
/** Called when the multi-select popover closes after being opened. */
|
|
19
|
+
onBlur?: () => void;
|
|
16
20
|
}
|
|
17
21
|
declare const MultiSelect: React.ForwardRefExoticComponent<MultiSelectProps & React.RefAttributes<HTMLDivElement>>;
|
|
18
22
|
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(({ options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText }, 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 }, ref)=>{
|
|
11
11
|
const [open, setOpen] = useState(false);
|
|
12
12
|
const handleUnselect = (value)=>{
|
|
13
13
|
onChange(selected.filter((s)=>s !== value));
|
|
@@ -30,15 +30,19 @@ const MultiSelect = /*#__PURE__*/ forwardRef(({ options, selected, onChange, pla
|
|
|
30
30
|
className: cn('relative', className),
|
|
31
31
|
children: /*#__PURE__*/ jsxs(Popover, {
|
|
32
32
|
open: open,
|
|
33
|
-
onOpenChange:
|
|
33
|
+
onOpenChange: (nextOpen)=>{
|
|
34
|
+
setOpen(nextOpen);
|
|
35
|
+
if (!nextOpen && open) onBlur?.();
|
|
36
|
+
},
|
|
34
37
|
children: [
|
|
35
38
|
/*#__PURE__*/ jsx(PopoverTrigger, {
|
|
36
39
|
asChild: true,
|
|
37
40
|
children: /*#__PURE__*/ jsxs(Button, {
|
|
41
|
+
id: id,
|
|
38
42
|
variant: "outline",
|
|
39
43
|
role: "combobox",
|
|
40
44
|
"aria-expanded": open,
|
|
41
|
-
"aria-label": selected.length > 0 ? `${selected.length} items selected` : placeholder,
|
|
45
|
+
"aria-label": id ? void 0 : selected.length > 0 ? `${selected.length} ${1 === selected.length ? 'item' : 'items'} selected` : placeholder,
|
|
42
46
|
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'),
|
|
43
47
|
disabled: disabled,
|
|
44
48
|
children: [
|
|
@@ -52,7 +52,7 @@ const Search = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ classN
|
|
|
52
52
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_input_group_cjs_namespaceObject.InputGroupInput, {
|
|
53
53
|
ref: ref,
|
|
54
54
|
type: "search",
|
|
55
|
-
className: className,
|
|
55
|
+
className: (0, index_cjs_namespaceObject.cn)('[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none', className),
|
|
56
56
|
value: value,
|
|
57
57
|
onChange: (e)=>onChange?.(e.target.value),
|
|
58
58
|
...props
|
|
@@ -23,7 +23,7 @@ const search_Search = /*#__PURE__*/ forwardRef(({ className, value, onChange, on
|
|
|
23
23
|
/*#__PURE__*/ jsx(InputGroupInput, {
|
|
24
24
|
ref: ref,
|
|
25
25
|
type: "search",
|
|
26
|
-
className: className,
|
|
26
|
+
className: cn('[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none', className),
|
|
27
27
|
value: value,
|
|
28
28
|
onChange: (e)=>onChange?.(e.target.value),
|
|
29
29
|
...props
|
package/dist/index.cjs
CHANGED
|
@@ -47,28 +47,28 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
47
47
|
CommandEmpty: ()=>command_cjs_namespaceObject.CommandEmpty,
|
|
48
48
|
Skeleton: ()=>skeleton_cjs_namespaceObject.Skeleton,
|
|
49
49
|
AlertDialogOverlay: ()=>alert_dialog_cjs_namespaceObject.AlertDialogOverlay,
|
|
50
|
-
|
|
50
|
+
FIELD_TYPE_ORDER: ()=>index_cjs_namespaceObject.FIELD_TYPE_ORDER,
|
|
51
51
|
DropdownMenuSubTrigger: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuSubTrigger,
|
|
52
52
|
ButtonGroupText: ()=>button_group_cjs_namespaceObject.ButtonGroupText,
|
|
53
|
-
|
|
53
|
+
PaginationContent: ()=>pagination_cjs_namespaceObject.PaginationContent,
|
|
54
54
|
ContextMenuLabel: ()=>context_menu_cjs_namespaceObject.ContextMenuLabel,
|
|
55
|
-
|
|
55
|
+
SelectGroup: ()=>select_cjs_namespaceObject.SelectGroup,
|
|
56
56
|
ContextMenuSeparator: ()=>context_menu_cjs_namespaceObject.ContextMenuSeparator,
|
|
57
57
|
DropdownMenuContent: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuContent,
|
|
58
58
|
ContextMenuSub: ()=>context_menu_cjs_namespaceObject.ContextMenuSub,
|
|
59
|
+
LockableValueField: ()=>index_cjs_namespaceObject.LockableValueField,
|
|
59
60
|
PopoverTrigger: ()=>popover_cjs_namespaceObject.PopoverTrigger,
|
|
60
61
|
Separator: ()=>separator_cjs_namespaceObject.Separator,
|
|
61
|
-
TreeView: ()=>tree_view_cjs_default(),
|
|
62
62
|
CardDescription: ()=>card_cjs_namespaceObject.CardDescription,
|
|
63
63
|
ContextMenuContent: ()=>context_menu_cjs_namespaceObject.ContextMenuContent,
|
|
64
64
|
Pagination: ()=>pagination_cjs_namespaceObject.Pagination,
|
|
65
65
|
SheetFooter: ()=>sheet_cjs_namespaceObject.SheetFooter,
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
TooltipTrigger: ()=>tooltip_cjs_namespaceObject.TooltipTrigger,
|
|
67
|
+
TreeView: ()=>tree_view_cjs_default(),
|
|
68
68
|
CommandSeparator: ()=>command_cjs_namespaceObject.CommandSeparator,
|
|
69
69
|
FormFieldRenderer: ()=>field_renderer_cjs_namespaceObject.FormFieldRenderer,
|
|
70
70
|
EditableCell: ()=>editable_cell_cjs_namespaceObject.EditableCell,
|
|
71
|
-
PromptEditor: ()=>
|
|
71
|
+
PromptEditor: ()=>prompt_editor_index_cjs_namespaceObject.PromptEditor,
|
|
72
72
|
ScrollableTabsList: ()=>tabs_cjs_namespaceObject.ScrollableTabsList,
|
|
73
73
|
Spinner: ()=>spinner_cjs_namespaceObject.Spinner,
|
|
74
74
|
SheetOverlay: ()=>sheet_cjs_namespaceObject.SheetOverlay,
|
|
@@ -78,17 +78,18 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
78
78
|
TabsList: ()=>tabs_cjs_namespaceObject.TabsList,
|
|
79
79
|
ContextMenuItem: ()=>context_menu_cjs_namespaceObject.ContextMenuItem,
|
|
80
80
|
TooltipContent: ()=>tooltip_cjs_namespaceObject.TooltipContent,
|
|
81
|
-
|
|
81
|
+
auditPlugin: ()=>form_plugins_cjs_namespaceObject.auditPlugin,
|
|
82
82
|
TableBody: ()=>table_cjs_namespaceObject.TableBody,
|
|
83
83
|
AvatarImage: ()=>avatar_cjs_namespaceObject.AvatarImage,
|
|
84
84
|
RuleBuilder: ()=>rules_engine_cjs_namespaceObject.RuleBuilder,
|
|
85
|
-
|
|
85
|
+
buttonVariants: ()=>button_cjs_namespaceObject.buttonVariants,
|
|
86
86
|
AlertDialogTitle: ()=>alert_dialog_cjs_namespaceObject.AlertDialogTitle,
|
|
87
87
|
DataSourceBuilder: ()=>data_fetcher_cjs_namespaceObject.DataSourceBuilder,
|
|
88
88
|
BreadcrumbEllipsis: ()=>breadcrumb_cjs_namespaceObject.BreadcrumbEllipsis,
|
|
89
89
|
BreadcrumbLink: ()=>breadcrumb_cjs_namespaceObject.BreadcrumbLink,
|
|
90
90
|
badgeVariants: ()=>badge_cjs_namespaceObject.badgeVariants,
|
|
91
91
|
createEditableColumn: ()=>editable_cell_cjs_namespaceObject.createEditableColumn,
|
|
92
|
+
toggleVariants: ()=>toggle_cjs_namespaceObject.toggleVariants,
|
|
92
93
|
AccordionItem: ()=>accordion_cjs_namespaceObject.AccordionItem,
|
|
93
94
|
DropdownMenuLabel: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuLabel,
|
|
94
95
|
Column: ()=>column_cjs_namespaceObject.Column,
|
|
@@ -132,7 +133,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
132
133
|
TooltipProvider: ()=>tooltip_cjs_namespaceObject.TooltipProvider,
|
|
133
134
|
DataFetcher: ()=>data_fetcher_cjs_namespaceObject.DataFetcher,
|
|
134
135
|
DialogPortal: ()=>dialog_cjs_namespaceObject.DialogPortal,
|
|
135
|
-
VARIABLE_DRAG_MIME: ()=>
|
|
136
|
+
VARIABLE_DRAG_MIME: ()=>prompt_editor_index_cjs_namespaceObject.VARIABLE_DRAG_MIME,
|
|
136
137
|
analyticsPlugin: ()=>form_plugins_cjs_namespaceObject.analyticsPlugin,
|
|
137
138
|
cn: ()=>utils_cjs_namespaceObject.cn,
|
|
138
139
|
DropdownMenuSub: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuSub,
|
|
@@ -202,6 +203,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
202
203
|
SheetPortal: ()=>sheet_cjs_namespaceObject.SheetPortal,
|
|
203
204
|
hasMinMaxStep: ()=>form_schema_cjs_namespaceObject.hasMinMaxStep,
|
|
204
205
|
isFileField: ()=>form_schema_cjs_namespaceObject.isFileField,
|
|
206
|
+
toast: ()=>sonner_cjs_namespaceObject.toast,
|
|
205
207
|
workflowPlugin: ()=>form_plugins_cjs_namespaceObject.workflowPlugin,
|
|
206
208
|
AlertDialogDescription: ()=>alert_dialog_cjs_namespaceObject.AlertDialogDescription,
|
|
207
209
|
CommandInput: ()=>command_cjs_namespaceObject.CommandInput,
|
|
@@ -209,21 +211,21 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
209
211
|
DropdownMenuShortcut: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuShortcut,
|
|
210
212
|
FetchAdapter: ()=>data_fetcher_cjs_namespaceObject.FetchAdapter,
|
|
211
213
|
DataTableSelectColumn: ()=>data_table_cjs_namespaceObject.DataTableSelectColumn,
|
|
212
|
-
FormStateViewer: ()=>form_state_viewer_cjs_namespaceObject.FormStateViewer,
|
|
213
|
-
CollapsibleTrigger: ()=>collapsible_cjs_namespaceObject.CollapsibleTrigger,
|
|
214
214
|
DropdownMenu: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenu,
|
|
215
|
+
CollapsibleTrigger: ()=>collapsible_cjs_namespaceObject.CollapsibleTrigger,
|
|
216
|
+
FormStateViewer: ()=>form_state_viewer_cjs_namespaceObject.FormStateViewer,
|
|
215
217
|
RadioGroup: ()=>radio_group_cjs_namespaceObject.RadioGroup,
|
|
216
218
|
MultiSelect: ()=>multi_select_cjs_namespaceObject.MultiSelect,
|
|
217
219
|
AspectRatio: ()=>aspect_ratio_cjs_namespaceObject.AspectRatio,
|
|
218
220
|
DataTableColumnHeader: ()=>data_table_cjs_namespaceObject.DataTableColumnHeader,
|
|
219
|
-
|
|
221
|
+
FormDesigner: ()=>form_designer_cjs_namespaceObject.FormDesigner,
|
|
220
222
|
Alert: ()=>alert_cjs_namespaceObject.Alert,
|
|
221
|
-
|
|
223
|
+
DialogContent: ()=>dialog_cjs_namespaceObject.DialogContent,
|
|
222
224
|
CommandDialog: ()=>command_cjs_namespaceObject.CommandDialog,
|
|
225
|
+
DialogTrigger: ()=>dialog_cjs_namespaceObject.DialogTrigger,
|
|
223
226
|
DropdownMenuRadioGroup: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuRadioGroup,
|
|
224
|
-
DropdownMenuRadioItem: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuRadioItem,
|
|
225
227
|
Accordion: ()=>accordion_cjs_namespaceObject.Accordion,
|
|
226
|
-
|
|
228
|
+
DropdownMenuRadioItem: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuRadioItem,
|
|
227
229
|
Progress: ()=>progress_cjs_namespaceObject.Progress,
|
|
228
230
|
ResizableHandle: ()=>resizable_cjs_namespaceObject.ResizableHandle,
|
|
229
231
|
AlertDialogCancel: ()=>alert_dialog_cjs_namespaceObject.AlertDialogCancel,
|
|
@@ -236,10 +238,11 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
236
238
|
Dialog: ()=>dialog_cjs_namespaceObject.Dialog,
|
|
237
239
|
DatePicker: ()=>date_picker_cjs_namespaceObject.DatePicker,
|
|
238
240
|
SelectTrigger: ()=>select_cjs_namespaceObject.SelectTrigger,
|
|
241
|
+
FIELD_TYPE_META: ()=>index_cjs_namespaceObject.FIELD_TYPE_META,
|
|
239
242
|
ToggleGroup: ()=>toggle_group_cjs_namespaceObject.ToggleGroup,
|
|
240
|
-
spinnerVariants: ()=>spinner_cjs_namespaceObject.spinnerVariants,
|
|
241
243
|
DataTransformers: ()=>data_fetcher_cjs_namespaceObject.DataTransformers,
|
|
242
244
|
RadioGroupItem: ()=>radio_group_cjs_namespaceObject.RadioGroupItem,
|
|
245
|
+
spinnerVariants: ()=>spinner_cjs_namespaceObject.spinnerVariants,
|
|
243
246
|
PopoverAnchor: ()=>popover_cjs_namespaceObject.PopoverAnchor,
|
|
244
247
|
DropdownMenuPortal: ()=>dropdown_menu_cjs_namespaceObject.DropdownMenuPortal,
|
|
245
248
|
ButtonGroupSeparator: ()=>button_group_cjs_namespaceObject.ButtonGroupSeparator,
|
|
@@ -265,6 +268,7 @@ const toggle_cjs_namespaceObject = require("./components/ui/toggle.cjs");
|
|
|
265
268
|
const toggle_group_cjs_namespaceObject = require("./components/ui/toggle-group.cjs");
|
|
266
269
|
const input_cjs_namespaceObject = require("./components/ui/input.cjs");
|
|
267
270
|
const input_group_cjs_namespaceObject = require("./components/ui/input-group.cjs");
|
|
271
|
+
const index_cjs_namespaceObject = require("./components/ui/lockable-value-field/index.cjs");
|
|
268
272
|
const textarea_cjs_namespaceObject = require("./components/ui/textarea.cjs");
|
|
269
273
|
const label_cjs_namespaceObject = require("./components/ui/label.cjs");
|
|
270
274
|
const checkbox_cjs_namespaceObject = require("./components/ui/checkbox.cjs");
|
|
@@ -287,7 +291,7 @@ const table_cjs_namespaceObject = require("./components/ui/table.cjs");
|
|
|
287
291
|
const data_table_cjs_namespaceObject = require("./components/ui/data-table.cjs");
|
|
288
292
|
const editable_cell_cjs_namespaceObject = require("./components/ui/editable-cell.cjs");
|
|
289
293
|
const progress_cjs_namespaceObject = require("./components/ui/progress.cjs");
|
|
290
|
-
const
|
|
294
|
+
const prompt_editor_index_cjs_namespaceObject = require("./components/ui/prompt-editor/index.cjs");
|
|
291
295
|
const skeleton_cjs_namespaceObject = require("./components/ui/skeleton.cjs");
|
|
292
296
|
const spinner_cjs_namespaceObject = require("./components/ui/spinner.cjs");
|
|
293
297
|
const empty_state_cjs_namespaceObject = require("./components/ui/empty-state.cjs");
|
|
@@ -430,6 +434,8 @@ exports.DropdownMenuTrigger = __webpack_exports__.DropdownMenuTrigger;
|
|
|
430
434
|
exports.EditableCell = __webpack_exports__.EditableCell;
|
|
431
435
|
exports.EmptyState = __webpack_exports__.EmptyState;
|
|
432
436
|
exports.ExpressionBuilder = __webpack_exports__.ExpressionBuilder;
|
|
437
|
+
exports.FIELD_TYPE_META = __webpack_exports__.FIELD_TYPE_META;
|
|
438
|
+
exports.FIELD_TYPE_ORDER = __webpack_exports__.FIELD_TYPE_ORDER;
|
|
433
439
|
exports.FetchAdapter = __webpack_exports__.FetchAdapter;
|
|
434
440
|
exports.FileUpload = __webpack_exports__.FileUpload;
|
|
435
441
|
exports.FormDesigner = __webpack_exports__.FormDesigner;
|
|
@@ -447,6 +453,7 @@ exports.InputGroupInput = __webpack_exports__.InputGroupInput;
|
|
|
447
453
|
exports.InputGroupText = __webpack_exports__.InputGroupText;
|
|
448
454
|
exports.InputGroupTextarea = __webpack_exports__.InputGroupTextarea;
|
|
449
455
|
exports.Label = __webpack_exports__.Label;
|
|
456
|
+
exports.LockableValueField = __webpack_exports__.LockableValueField;
|
|
450
457
|
exports.MetadataForm = __webpack_exports__.MetadataForm;
|
|
451
458
|
exports.MultiSelect = __webpack_exports__.MultiSelect;
|
|
452
459
|
exports.Pagination = __webpack_exports__.Pagination;
|
|
@@ -652,6 +659,8 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
652
659
|
"EditableCell",
|
|
653
660
|
"EmptyState",
|
|
654
661
|
"ExpressionBuilder",
|
|
662
|
+
"FIELD_TYPE_META",
|
|
663
|
+
"FIELD_TYPE_ORDER",
|
|
655
664
|
"FetchAdapter",
|
|
656
665
|
"FileUpload",
|
|
657
666
|
"FormDesigner",
|
|
@@ -669,6 +678,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
669
678
|
"InputGroupText",
|
|
670
679
|
"InputGroupTextarea",
|
|
671
680
|
"Label",
|
|
681
|
+
"LockableValueField",
|
|
672
682
|
"MetadataForm",
|
|
673
683
|
"MultiSelect",
|
|
674
684
|
"Pagination",
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export { Input } from './components/ui/input';
|
|
|
14
14
|
export type { InputProps } from './components/ui/input';
|
|
15
15
|
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, } from './components/ui/input-group';
|
|
16
16
|
export type { InputGroupProps, InputGroupAddonProps, InputGroupButtonProps, InputGroupTextProps, InputGroupInputProps, InputGroupTextareaProps, } from './components/ui/input-group';
|
|
17
|
+
export { FIELD_TYPE_META, FIELD_TYPE_ORDER, LockableValueField, } from './components/ui/lockable-value-field';
|
|
18
|
+
export type { LockableValueFieldProps, LockableValueFieldMode, LockableFieldType, LockableValueFieldOption, } from './components/ui/lockable-value-field';
|
|
17
19
|
export { Textarea } from './components/ui/textarea';
|
|
18
20
|
export type { TextareaProps } from './components/ui/textarea';
|
|
19
21
|
export { Label } from './components/ui/label';
|