@pixpilot/formily-shadcn 0.10.0 → 0.11.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/README.md +27 -1
- package/dist/components/checkbox.d.cts +2 -2
- package/dist/components/checkbox.d.ts +2 -2
- package/dist/components/column.d.ts +2 -2
- package/dist/components/context/context.d.cts +1 -1
- package/dist/components/context/context.d.ts +1 -1
- package/dist/components/context/form-context.d.cts +34 -5
- package/dist/components/context/form-context.d.ts +34 -5
- package/dist/components/context/index.d.cts +1 -1
- package/dist/components/context/index.d.ts +1 -1
- package/dist/components/date-picker.d.cts +3 -3
- package/dist/components/date-picker.d.ts +3 -3
- package/dist/components/file-upload/file-upload-inline.d.cts +8 -8
- package/dist/components/file-upload/file-upload-inline.d.ts +8 -8
- package/dist/components/file-upload/file-upload.d.cts +8 -8
- package/dist/components/file-upload/file-upload.d.ts +8 -8
- package/dist/components/form-grid.d.ts +2 -2
- package/dist/components/form-item/base-form-item.cjs +85 -0
- package/dist/components/form-item/base-form-item.d.cts +2 -0
- package/dist/components/form-item/base-form-item.d.ts +2 -0
- package/dist/components/form-item/base-form-item.js +80 -0
- package/dist/components/form-item/connected-form-item.cjs +47 -0
- package/dist/components/form-item/connected-form-item.d.cts +13 -0
- package/dist/components/form-item/connected-form-item.d.ts +13 -0
- package/dist/components/form-item/connected-form-item.js +44 -0
- package/dist/components/form-item/form-item-description-popover.cjs +42 -0
- package/dist/components/form-item/form-item-description-popover.js +37 -0
- package/dist/components/form-item/form-item-label.cjs +29 -0
- package/dist/components/form-item/form-item-label.js +25 -0
- package/dist/components/form-item/form-item-types.d.cts +23 -0
- package/dist/components/form-item/form-item-types.d.ts +23 -0
- package/dist/components/form-item/form-item.cjs +2 -0
- package/dist/components/form-item/form-item.d.cts +4 -0
- package/dist/components/form-item/form-item.d.ts +4 -0
- package/dist/components/form-item/form-item.js +2 -0
- package/dist/components/form-item/index.cjs +3 -0
- package/dist/components/form-item/index.d.cts +4 -0
- package/dist/components/form-item/index.d.ts +4 -0
- package/dist/components/form-item/index.js +3 -0
- package/dist/components/form-item/spacing-config.cjs +24 -0
- package/dist/components/form-item/spacing-config.js +23 -0
- package/dist/components/form-items-container.cjs +2 -1
- package/dist/components/form-items-container.js +2 -1
- package/dist/components/form.cjs +4 -11
- package/dist/components/form.d.cts +1 -3
- package/dist/components/form.d.ts +1 -3
- package/dist/components/form.js +4 -11
- package/dist/components/icon-picker.d.ts +3 -3
- package/dist/components/input.d.cts +2 -2
- package/dist/components/input.d.ts +2 -2
- package/dist/components/json-schema-form-renderer/index.cjs +4 -0
- package/dist/components/json-schema-form-renderer/index.d.cts +5 -0
- package/dist/components/json-schema-form-renderer/index.d.ts +5 -0
- package/dist/components/json-schema-form-renderer/index.js +4 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-basic.cjs +35 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-basic.d.cts +14 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-basic.d.ts +14 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-basic.js +32 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-extended.cjs +35 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-extended.d.cts +14 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-extended.d.ts +14 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-extended.js +32 -0
- package/dist/components/{json-schema-form-renderer.cjs → json-schema-form-renderer/json-schema-form-renderer.cjs} +16 -17
- package/dist/components/json-schema-form-renderer/json-schema-form-renderer.d.cts +7 -0
- package/dist/components/json-schema-form-renderer/json-schema-form-renderer.d.ts +7 -0
- package/dist/components/{json-schema-form-renderer.js → json-schema-form-renderer/json-schema-form-renderer.js} +14 -15
- package/dist/components/json-schema-form-renderer/json-schema-form.cjs +36 -0
- package/dist/components/json-schema-form-renderer/json-schema-form.d.cts +14 -0
- package/dist/components/json-schema-form-renderer/json-schema-form.d.ts +14 -0
- package/dist/components/json-schema-form-renderer/json-schema-form.js +33 -0
- package/dist/components/json-schema-form-renderer/types.d.cts +23 -0
- package/dist/components/json-schema-form-renderer/types.d.ts +23 -0
- package/dist/components/number-input.d.cts +2 -2
- package/dist/components/number-input.d.ts +2 -2
- package/dist/components/object-container.cjs +13 -6
- package/dist/components/object-container.js +13 -6
- package/dist/components/schema-field/index.d.cts +3 -3
- package/dist/components/schema-field/index.d.ts +3 -3
- package/dist/components/schema-field/index.js +3 -3
- package/dist/components/schema-field/schema-field-basics.cjs +66 -23
- package/dist/components/schema-field/schema-field-basics.d.cts +283 -198
- package/dist/components/schema-field/schema-field-basics.d.ts +294 -209
- package/dist/components/schema-field/schema-field-basics.js +65 -23
- package/dist/components/schema-field/schema-field-extended.cjs +23 -8
- package/dist/components/schema-field/schema-field-extended.d.cts +566 -431
- package/dist/components/schema-field/schema-field-extended.d.ts +566 -431
- package/dist/components/schema-field/schema-field-extended.js +23 -9
- package/dist/components/schema-field/schema-field.cjs +23 -8
- package/dist/components/schema-field/schema-field.d.cts +334 -233
- package/dist/components/schema-field/schema-field.d.ts +340 -239
- package/dist/components/schema-field/schema-field.js +23 -9
- package/dist/components/separator.d.cts +2 -2
- package/dist/components/separator.d.ts +2 -2
- package/dist/components/slider.d.cts +2 -2
- package/dist/components/slider.d.ts +2 -2
- package/dist/components/switch.d.cts +2 -2
- package/dist/components/switch.d.ts +2 -2
- package/dist/components/tags-input-inline.d.cts +2 -2
- package/dist/components/tags-input-inline.d.ts +2 -2
- package/dist/components/textarea.d.cts +2 -2
- package/dist/components/textarea.d.ts +2 -2
- package/dist/index.cjs +17 -6
- package/dist/index.d.cts +14 -6
- package/dist/index.d.ts +14 -6
- package/dist/index.js +11 -6
- package/dist/types/form-item.d.cts +5 -0
- package/dist/types/form-item.d.ts +5 -0
- package/dist/utils/extract-components.cjs +11 -0
- package/dist/utils/extract-components.js +10 -0
- package/package.json +7 -7
- package/dist/components/form-item.cjs +0 -118
- package/dist/components/form-item.d.cts +0 -22
- package/dist/components/form-item.d.ts +0 -22
- package/dist/components/form-item.js +0 -112
- package/dist/components/json-schema-form-renderer.d.cts +0 -20
- package/dist/components/json-schema-form-renderer.d.ts +0 -20
package/README.md
CHANGED
|
@@ -56,7 +56,11 @@ const schema = {
|
|
|
56
56
|
|
|
57
57
|
function MyForm() {
|
|
58
58
|
return (
|
|
59
|
-
<Form
|
|
59
|
+
<Form
|
|
60
|
+
form={form}
|
|
61
|
+
layout={{ density: 'comfortable' }}
|
|
62
|
+
onSubmit={(values) => console.log(values)}
|
|
63
|
+
>
|
|
60
64
|
<SchemaField schema={schema} />
|
|
61
65
|
<button type="submit">Submit</button>
|
|
62
66
|
</Form>
|
|
@@ -149,6 +153,28 @@ import {
|
|
|
149
153
|
- `x-component-props`: Props passed to the component
|
|
150
154
|
- `x-decorator-props`: Props passed to the decorator
|
|
151
155
|
|
|
156
|
+
## Documentation
|
|
157
|
+
|
|
158
|
+
### [Form Layout Options](./docs/form-layout-options.md)
|
|
159
|
+
|
|
160
|
+
Learn how to configure form layout and visual settings using the `FormLayoutOptions` interface:
|
|
161
|
+
|
|
162
|
+
- **Density** - Control spacing between form elements (compact, normal, comfortable, responsive)
|
|
163
|
+
- **Description Placement** - Configure where field descriptions appear (top, bottom, popover)
|
|
164
|
+
- **Label Placement** - Set label position relative to inputs (top, bottom, start, end)
|
|
165
|
+
- **Custom Classes** - Apply custom CSS classes to form elements
|
|
166
|
+
|
|
167
|
+
[Read the full documentation →](./docs/form-layout-options.md)
|
|
168
|
+
|
|
169
|
+
### [JSON Schema Form: Headless vs Default Pattern](./docs/json-schema-form-headless-vs-default.md)
|
|
170
|
+
|
|
171
|
+
Learn about the difference between `JsonSchemaFormRenderer` (headless) and `JsonSchemaForm` (batteries-included) components:
|
|
172
|
+
|
|
173
|
+
- **`JsonSchemaFormRenderer`** - Pure, headless component that requires you to provide all components explicitly. Ideal for custom component registries and bundle size optimization.
|
|
174
|
+
- **`JsonSchemaForm`** - Convenience wrapper that comes pre-loaded with all standard components (Slider, Combobox, TagsInput, etc.). Perfect for getting started quickly.
|
|
175
|
+
|
|
176
|
+
[Read the full documentation →](./docs/json-schema-form-headless-vs-default.md)
|
|
177
|
+
|
|
152
178
|
## API Reference
|
|
153
179
|
|
|
154
180
|
### createForm
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react0 from "react";
|
|
2
2
|
import * as _radix_ui_react_checkbox0 from "@radix-ui/react-checkbox";
|
|
3
3
|
|
|
4
4
|
//#region src/components/checkbox.d.ts
|
|
@@ -6,6 +6,6 @@ import * as _radix_ui_react_checkbox0 from "@radix-ui/react-checkbox";
|
|
|
6
6
|
* Formily-connected Checkbox component
|
|
7
7
|
* Maps Formily field checked state to shadcn Checkbox
|
|
8
8
|
*/
|
|
9
|
-
declare const Checkbox:
|
|
9
|
+
declare const Checkbox: react0.ForwardRefExoticComponent<Omit<Partial<_radix_ui_react_checkbox0.CheckboxProps & react0.RefAttributes<HTMLButtonElement>>, "ref"> & react0.RefAttributes<unknown>>;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { Checkbox };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react5 from "react";
|
|
2
2
|
import * as _radix_ui_react_checkbox0 from "@radix-ui/react-checkbox";
|
|
3
3
|
|
|
4
4
|
//#region src/components/checkbox.d.ts
|
|
@@ -6,6 +6,6 @@ import * as _radix_ui_react_checkbox0 from "@radix-ui/react-checkbox";
|
|
|
6
6
|
* Formily-connected Checkbox component
|
|
7
7
|
* Maps Formily field checked state to shadcn Checkbox
|
|
8
8
|
*/
|
|
9
|
-
declare const Checkbox:
|
|
9
|
+
declare const Checkbox: react5.ForwardRefExoticComponent<Omit<Partial<_radix_ui_react_checkbox0.CheckboxProps & react5.RefAttributes<HTMLButtonElement>>, "ref"> & react5.RefAttributes<unknown>>;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { Checkbox };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime1 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/column.d.ts
|
|
5
5
|
interface IColumnProps {
|
|
@@ -36,6 +36,6 @@ interface IColumnProps {
|
|
|
36
36
|
declare function Column({
|
|
37
37
|
className,
|
|
38
38
|
children
|
|
39
|
-
}: IColumnProps):
|
|
39
|
+
}: IColumnProps): react_jsx_runtime1.JSX.Element;
|
|
40
40
|
//#endregion
|
|
41
41
|
export { Column };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { FormContextStates } from "./form-context.cjs";
|
|
1
|
+
import { FormContextStates, FormLayoutOptions } from "./form-context.cjs";
|
|
2
2
|
import "react";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { FormContextStates } from "./form-context.js";
|
|
1
|
+
import { FormContextStates, FormLayoutOptions } from "./form-context.js";
|
|
2
2
|
import "react";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FormSpace } from "../../types/form.cjs";
|
|
2
|
+
import { DescriptionPlacement, LabelPlacement } from "../../types/form-item.cjs";
|
|
2
3
|
import React from "react";
|
|
3
4
|
import { FileUploadProgressCallBacks, IconProvider, RichTextEditorProps } from "@pixpilot/shadcn-ui";
|
|
4
5
|
|
|
@@ -25,14 +26,42 @@ interface FormConfigProps {
|
|
|
25
26
|
fileUpload?: FomFileUpload;
|
|
26
27
|
richTextEditor?: RichTextEditorProps;
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Layout configuration options for form components.
|
|
31
|
+
* Groups all visual and layout-related settings.
|
|
32
|
+
*/
|
|
33
|
+
interface FormLayoutOptions {
|
|
34
|
+
/** Form density - affects spacing between elements */
|
|
35
|
+
density?: FormSpace['density'];
|
|
36
|
+
/** Default description placement for FormItem decorators */
|
|
37
|
+
descriptionPlacement?: DescriptionPlacement;
|
|
38
|
+
/** Default label placement for FormItem decorators */
|
|
39
|
+
labelPlacement?: LabelPlacement;
|
|
40
|
+
/** Custom class names for FormItem elements */
|
|
29
41
|
itemProps?: {
|
|
30
|
-
|
|
42
|
+
classes?: {
|
|
43
|
+
label?: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
inputWrapper?: string;
|
|
46
|
+
errorMessage?: string;
|
|
47
|
+
};
|
|
31
48
|
};
|
|
32
|
-
|
|
33
|
-
|
|
49
|
+
/** Custom class names for ObjectContainer elements */
|
|
50
|
+
objectContainer?: {
|
|
51
|
+
classes?: {
|
|
52
|
+
card?: string;
|
|
53
|
+
header?: string;
|
|
54
|
+
title?: string;
|
|
55
|
+
description?: string;
|
|
56
|
+
content?: string;
|
|
57
|
+
};
|
|
34
58
|
};
|
|
59
|
+
}
|
|
60
|
+
interface FormContextStates {
|
|
61
|
+
/** Layout configuration options */
|
|
62
|
+
layout?: FormLayoutOptions;
|
|
63
|
+
/** Form-level configuration settings */
|
|
35
64
|
settings?: FormConfigProps;
|
|
36
65
|
}
|
|
37
66
|
//#endregion
|
|
38
|
-
export { FomFileUpload, FormConfigProps, FormContextStates };
|
|
67
|
+
export { FomFileUpload, FormConfigProps, FormContextStates, FormLayoutOptions };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FormSpace } from "../../types/form.js";
|
|
2
|
+
import { DescriptionPlacement, LabelPlacement } from "../../types/form-item.js";
|
|
2
3
|
import React from "react";
|
|
3
4
|
import { FileUploadProgressCallBacks, IconProvider, RichTextEditorProps } from "@pixpilot/shadcn-ui";
|
|
4
5
|
|
|
@@ -25,14 +26,42 @@ interface FormConfigProps {
|
|
|
25
26
|
fileUpload?: FomFileUpload;
|
|
26
27
|
richTextEditor?: RichTextEditorProps;
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Layout configuration options for form components.
|
|
31
|
+
* Groups all visual and layout-related settings.
|
|
32
|
+
*/
|
|
33
|
+
interface FormLayoutOptions {
|
|
34
|
+
/** Form density - affects spacing between elements */
|
|
35
|
+
density?: FormSpace['density'];
|
|
36
|
+
/** Default description placement for FormItem decorators */
|
|
37
|
+
descriptionPlacement?: DescriptionPlacement;
|
|
38
|
+
/** Default label placement for FormItem decorators */
|
|
39
|
+
labelPlacement?: LabelPlacement;
|
|
40
|
+
/** Custom class names for FormItem elements */
|
|
29
41
|
itemProps?: {
|
|
30
|
-
|
|
42
|
+
classes?: {
|
|
43
|
+
label?: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
inputWrapper?: string;
|
|
46
|
+
errorMessage?: string;
|
|
47
|
+
};
|
|
31
48
|
};
|
|
32
|
-
|
|
33
|
-
|
|
49
|
+
/** Custom class names for ObjectContainer elements */
|
|
50
|
+
objectContainer?: {
|
|
51
|
+
classes?: {
|
|
52
|
+
card?: string;
|
|
53
|
+
header?: string;
|
|
54
|
+
title?: string;
|
|
55
|
+
description?: string;
|
|
56
|
+
content?: string;
|
|
57
|
+
};
|
|
34
58
|
};
|
|
59
|
+
}
|
|
60
|
+
interface FormContextStates {
|
|
61
|
+
/** Layout configuration options */
|
|
62
|
+
layout?: FormLayoutOptions;
|
|
63
|
+
/** Form-level configuration settings */
|
|
35
64
|
settings?: FormConfigProps;
|
|
36
65
|
}
|
|
37
66
|
//#endregion
|
|
38
|
-
export { FomFileUpload, FormConfigProps, FormContextStates };
|
|
67
|
+
export { FomFileUpload, FormConfigProps, FormContextStates, FormLayoutOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { FomFileUpload, FormConfigProps, FormContextStates } from "./form-context.cjs";
|
|
1
|
+
import { FomFileUpload, FormConfigProps, FormContextStates, FormLayoutOptions } from "./form-context.cjs";
|
|
2
2
|
import "./context.cjs";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { FomFileUpload, FormConfigProps, FormContextStates } from "./form-context.js";
|
|
1
|
+
import { FomFileUpload, FormConfigProps, FormContextStates, FormLayoutOptions } from "./form-context.js";
|
|
2
2
|
import "./context.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react2 from "react";
|
|
2
2
|
import { DatePickerProps } from "@pixpilot/shadcn-ui";
|
|
3
3
|
|
|
4
4
|
//#region src/components/date-picker.d.ts
|
|
5
|
-
declare const DatePicker:
|
|
5
|
+
declare const DatePicker: react2.ForwardRefExoticComponent<Partial<{
|
|
6
6
|
value?: Date;
|
|
7
7
|
onChange?: (date: Date | undefined) => void;
|
|
8
8
|
placeholder?: string;
|
|
9
|
-
} & Omit<DatePickerProps, "onSelect" | "selected" | "mode">> &
|
|
9
|
+
} & Omit<DatePickerProps, "onSelect" | "selected" | "mode">> & react2.RefAttributes<unknown>>;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { DatePicker };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react16 from "react";
|
|
2
2
|
import { DatePickerProps } from "@pixpilot/shadcn-ui";
|
|
3
3
|
|
|
4
4
|
//#region src/components/date-picker.d.ts
|
|
5
|
-
declare const DatePicker$1:
|
|
5
|
+
declare const DatePicker$1: react16.ForwardRefExoticComponent<Partial<{
|
|
6
6
|
value?: Date;
|
|
7
7
|
onChange?: (date: Date | undefined) => void;
|
|
8
8
|
placeholder?: string;
|
|
9
|
-
} & Omit<DatePickerProps, "onSelect" | "selected" | "mode">> &
|
|
9
|
+
} & Omit<DatePickerProps, "onSelect" | "selected" | "mode">> & react16.RefAttributes<unknown>>;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { DatePicker$1 as DatePicker };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _pixpilot_shadcn_ui0 from "@pixpilot/shadcn-ui";
|
|
3
3
|
|
|
4
4
|
//#region src/components/file-upload/file-upload-inline.d.ts
|
|
5
5
|
|
|
@@ -7,14 +7,14 @@ import * as _pixpilot_shadcn_ui8 from "@pixpilot/shadcn-ui";
|
|
|
7
7
|
* Formily-connected FileUploadInline component
|
|
8
8
|
* Automatically connects shadcn FileUploadInline to Formily field state
|
|
9
9
|
*/
|
|
10
|
-
declare const FileUploadInline: React.ForwardRefExoticComponent<(Omit<Partial<
|
|
10
|
+
declare const FileUploadInline: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
|
|
11
11
|
multiple: true;
|
|
12
|
-
value?:
|
|
13
|
-
onChange?:
|
|
14
|
-
} &
|
|
12
|
+
value?: _pixpilot_shadcn_ui0.FileMetadata[];
|
|
13
|
+
onChange?: _pixpilot_shadcn_ui0.OnChangeMultipleFiles;
|
|
14
|
+
} & _pixpilot_shadcn_ui0.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
|
|
15
15
|
multiple?: false;
|
|
16
|
-
value?:
|
|
17
|
-
onChange?:
|
|
18
|
-
} &
|
|
16
|
+
value?: _pixpilot_shadcn_ui0.FileMetadata | null;
|
|
17
|
+
onChange?: _pixpilot_shadcn_ui0.OnChangeSingleFile;
|
|
18
|
+
} & _pixpilot_shadcn_ui0.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { FileUploadInline };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _pixpilot_shadcn_ui294 from "@pixpilot/shadcn-ui";
|
|
3
3
|
|
|
4
4
|
//#region src/components/file-upload/file-upload-inline.d.ts
|
|
5
5
|
|
|
@@ -7,14 +7,14 @@ import * as _pixpilot_shadcn_ui0 from "@pixpilot/shadcn-ui";
|
|
|
7
7
|
* Formily-connected FileUploadInline component
|
|
8
8
|
* Automatically connects shadcn FileUploadInline to Formily field state
|
|
9
9
|
*/
|
|
10
|
-
declare const FileUploadInline$1: React.ForwardRefExoticComponent<(Omit<Partial<
|
|
10
|
+
declare const FileUploadInline$1: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui294.FileUploadInlineBaseProps & {
|
|
11
11
|
multiple: true;
|
|
12
|
-
value?:
|
|
13
|
-
onChange?:
|
|
14
|
-
} &
|
|
12
|
+
value?: _pixpilot_shadcn_ui294.FileMetadata[];
|
|
13
|
+
onChange?: _pixpilot_shadcn_ui294.OnChangeMultipleFiles;
|
|
14
|
+
} & _pixpilot_shadcn_ui294.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui294.FileUploadInlineBaseProps & {
|
|
15
15
|
multiple?: false;
|
|
16
|
-
value?:
|
|
17
|
-
onChange?:
|
|
18
|
-
} &
|
|
16
|
+
value?: _pixpilot_shadcn_ui294.FileMetadata | null;
|
|
17
|
+
onChange?: _pixpilot_shadcn_ui294.OnChangeSingleFile;
|
|
18
|
+
} & _pixpilot_shadcn_ui294.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { FileUploadInline$1 as FileUploadInline };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _pixpilot_shadcn_ui8 from "@pixpilot/shadcn-ui";
|
|
3
3
|
|
|
4
4
|
//#region src/components/file-upload/file-upload.d.ts
|
|
5
5
|
|
|
@@ -7,14 +7,14 @@ import * as _pixpilot_shadcn_ui0 from "@pixpilot/shadcn-ui";
|
|
|
7
7
|
* Formily-connected FileUploadInline component
|
|
8
8
|
* Automatically connects shadcn FileUploadInline to Formily field state
|
|
9
9
|
*/
|
|
10
|
-
declare const FileUpload: React.ForwardRefExoticComponent<(Omit<Partial<
|
|
10
|
+
declare const FileUpload: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
|
|
11
11
|
multiple: true;
|
|
12
|
-
value?:
|
|
13
|
-
onChange?:
|
|
14
|
-
} &
|
|
12
|
+
value?: _pixpilot_shadcn_ui8.FileMetadata[];
|
|
13
|
+
onChange?: _pixpilot_shadcn_ui8.OnChangeMultipleFiles;
|
|
14
|
+
} & _pixpilot_shadcn_ui8.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
|
|
15
15
|
multiple?: false;
|
|
16
|
-
value?:
|
|
17
|
-
onChange?:
|
|
18
|
-
} &
|
|
16
|
+
value?: _pixpilot_shadcn_ui8.FileMetadata | null;
|
|
17
|
+
onChange?: _pixpilot_shadcn_ui8.OnChangeSingleFile;
|
|
18
|
+
} & _pixpilot_shadcn_ui8.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { FileUpload };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _pixpilot_shadcn_ui286 from "@pixpilot/shadcn-ui";
|
|
3
3
|
|
|
4
4
|
//#region src/components/file-upload/file-upload.d.ts
|
|
5
5
|
|
|
@@ -7,14 +7,14 @@ import * as _pixpilot_shadcn_ui8 from "@pixpilot/shadcn-ui";
|
|
|
7
7
|
* Formily-connected FileUploadInline component
|
|
8
8
|
* Automatically connects shadcn FileUploadInline to Formily field state
|
|
9
9
|
*/
|
|
10
|
-
declare const FileUpload$1: React.ForwardRefExoticComponent<(Omit<Partial<
|
|
10
|
+
declare const FileUpload$1: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui286.FileUploadInlineBaseProps & {
|
|
11
11
|
multiple: true;
|
|
12
|
-
value?:
|
|
13
|
-
onChange?:
|
|
14
|
-
} &
|
|
12
|
+
value?: _pixpilot_shadcn_ui286.FileMetadata[];
|
|
13
|
+
onChange?: _pixpilot_shadcn_ui286.OnChangeMultipleFiles;
|
|
14
|
+
} & _pixpilot_shadcn_ui286.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui286.FileUploadInlineBaseProps & {
|
|
15
15
|
multiple?: false;
|
|
16
|
-
value?:
|
|
17
|
-
onChange?:
|
|
18
|
-
} &
|
|
16
|
+
value?: _pixpilot_shadcn_ui286.FileMetadata | null;
|
|
17
|
+
onChange?: _pixpilot_shadcn_ui286.OnChangeSingleFile;
|
|
18
|
+
} & _pixpilot_shadcn_ui286.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { FileUpload$1 as FileUpload };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/form-grid.d.ts
|
|
5
5
|
interface IFormGridProps extends React.HTMLAttributes<HTMLDivElement> {}
|
|
@@ -7,6 +7,6 @@ declare function FormGrid({
|
|
|
7
7
|
className,
|
|
8
8
|
children,
|
|
9
9
|
...rest
|
|
10
|
-
}: IFormGridProps):
|
|
10
|
+
}: IFormGridProps): react_jsx_runtime0.JSX.Element;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { FormGrid };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_use_form_context = require('../../hooks/use-form-context.cjs');
|
|
3
|
+
const require_use_label = require('../../hooks/use-label.cjs');
|
|
4
|
+
require('../../hooks/index.cjs');
|
|
5
|
+
const require_form_item_label = require('./form-item-label.cjs');
|
|
6
|
+
const require_spacing_config = require('./spacing-config.cjs');
|
|
7
|
+
let __formily_react = require("@formily/react");
|
|
8
|
+
__formily_react = require_rolldown_runtime.__toESM(__formily_react);
|
|
9
|
+
let react = require("react");
|
|
10
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
11
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
+
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
13
|
+
let __pixpilot_shadcn = require("@pixpilot/shadcn");
|
|
14
|
+
__pixpilot_shadcn = require_rolldown_runtime.__toESM(__pixpilot_shadcn);
|
|
15
|
+
|
|
16
|
+
//#region src/components/form-item/base-form-item.tsx
|
|
17
|
+
function resolveLegacyDescriptionPlacement(labelPlacement) {
|
|
18
|
+
return labelPlacement === "top" ? "top" : "bottom";
|
|
19
|
+
}
|
|
20
|
+
const BaseFormItem = ({ className, children, label, description, descriptionPlacement, asterisk, feedbackStatus, feedbackText, labelPlacement = "top",...props }) => {
|
|
21
|
+
const field = (0, __formily_react.useField)();
|
|
22
|
+
const fieldProps = field?.componentProps ?? {};
|
|
23
|
+
const effectiveLabel = require_use_label.useLabel(label);
|
|
24
|
+
const { layout } = require_use_form_context.useFormContext();
|
|
25
|
+
const { classes } = layout?.itemProps || {};
|
|
26
|
+
const contextDescriptionPlacement = layout?.descriptionPlacement;
|
|
27
|
+
const effectiveLabelPlacement = fieldProps.labelPlacement ?? labelPlacement;
|
|
28
|
+
const resolvedDescriptionPlacement = fieldProps.descriptionPlacement ?? descriptionPlacement ?? contextDescriptionPlacement ?? resolveLegacyDescriptionPlacement(effectiveLabelPlacement);
|
|
29
|
+
const id = field?.componentProps?.id ?? `form-${field?.address?.toString()?.replace(/\./gu, "-")}`;
|
|
30
|
+
const descriptionId = react.default.useId();
|
|
31
|
+
const feedbackId = react.default.useId();
|
|
32
|
+
const descriptionRenderedInline = description != null && resolvedDescriptionPlacement !== "popover";
|
|
33
|
+
const spacingConfig = require_spacing_config.getSpacingConfig(resolvedDescriptionPlacement, descriptionRenderedInline);
|
|
34
|
+
const ariaDescribedBy = [descriptionRenderedInline ? descriptionId : void 0, feedbackText != null ? feedbackId : void 0].filter(Boolean).join(" ");
|
|
35
|
+
const labelElement = effectiveLabel != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_form_item_label.FormItemLabel, {
|
|
36
|
+
id,
|
|
37
|
+
label: effectiveLabel,
|
|
38
|
+
asterisk,
|
|
39
|
+
error: feedbackStatus === "error",
|
|
40
|
+
shrink: effectiveLabelPlacement === "end" || effectiveLabelPlacement === "start",
|
|
41
|
+
labelClassName: (0, __pixpilot_shadcn.cn)(spacingConfig.label, classes?.label),
|
|
42
|
+
description,
|
|
43
|
+
descriptionInPopover: resolvedDescriptionPlacement === "popover" && description != null
|
|
44
|
+
});
|
|
45
|
+
const inputElement = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
46
|
+
className: (0, __pixpilot_shadcn.cn)("relative", classes?.inputWrapper),
|
|
47
|
+
children: react.default.isValidElement(children) ? react.default.cloneElement(children, {
|
|
48
|
+
id,
|
|
49
|
+
"aria-describedby": ariaDescribedBy || void 0,
|
|
50
|
+
"aria-invalid": feedbackStatus === "error" ? "true" : void 0
|
|
51
|
+
}) : children
|
|
52
|
+
});
|
|
53
|
+
const descriptionElement = descriptionRenderedInline ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
54
|
+
id: descriptionId,
|
|
55
|
+
className: (0, __pixpilot_shadcn.cn)("text-muted-foreground text-[0.8rem]", spacingConfig.description, classes?.description),
|
|
56
|
+
children: description
|
|
57
|
+
}) : null;
|
|
58
|
+
const contentElement = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
59
|
+
effectiveLabelPlacement === "top" && labelElement,
|
|
60
|
+
resolvedDescriptionPlacement === "top" && descriptionElement,
|
|
61
|
+
(effectiveLabelPlacement === "start" || effectiveLabelPlacement === "end") && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
62
|
+
className: (0, __pixpilot_shadcn.cn)("flex items-center gap-2", effectiveLabelPlacement === "start" && "flex-row"),
|
|
63
|
+
children: [
|
|
64
|
+
effectiveLabelPlacement === "start" && labelElement,
|
|
65
|
+
inputElement,
|
|
66
|
+
effectiveLabelPlacement === "end" && labelElement
|
|
67
|
+
]
|
|
68
|
+
}),
|
|
69
|
+
effectiveLabelPlacement === "top" && inputElement,
|
|
70
|
+
resolvedDescriptionPlacement === "bottom" && descriptionElement
|
|
71
|
+
] });
|
|
72
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
73
|
+
"data-slot": "form-item",
|
|
74
|
+
className: (0, __pixpilot_shadcn.cn)("flex flex-col ", className),
|
|
75
|
+
...props,
|
|
76
|
+
children: [contentElement, Boolean(feedbackText) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
77
|
+
id: feedbackId,
|
|
78
|
+
className: (0, __pixpilot_shadcn.cn)("text-[0.8rem]", spacingConfig.feedback, feedbackStatus === "error" && "text-destructive font-medium", feedbackStatus === "warning" && "text-amber-600", feedbackStatus === "success" && "text-green-600", classes?.errorMessage),
|
|
79
|
+
children: typeof feedbackText === "string" ? feedbackText.split("\n").map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.default.Fragment, { children: [line, index < feedbackText.split("\n").length - 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("br", {})] }, index)) : feedbackText
|
|
80
|
+
})]
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
//#endregion
|
|
85
|
+
exports.BaseFormItem = BaseFormItem;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { useFormContext } from "../../hooks/use-form-context.js";
|
|
2
|
+
import { useLabel } from "../../hooks/use-label.js";
|
|
3
|
+
import "../../hooks/index.js";
|
|
4
|
+
import { FormItemLabel } from "./form-item-label.js";
|
|
5
|
+
import { getSpacingConfig } from "./spacing-config.js";
|
|
6
|
+
import { useField } from "@formily/react";
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { cn } from "@pixpilot/shadcn";
|
|
10
|
+
|
|
11
|
+
//#region src/components/form-item/base-form-item.tsx
|
|
12
|
+
function resolveLegacyDescriptionPlacement(labelPlacement) {
|
|
13
|
+
return labelPlacement === "top" ? "top" : "bottom";
|
|
14
|
+
}
|
|
15
|
+
const BaseFormItem = ({ className, children, label, description, descriptionPlacement, asterisk, feedbackStatus, feedbackText, labelPlacement = "top",...props }) => {
|
|
16
|
+
const field = useField();
|
|
17
|
+
const fieldProps = field?.componentProps ?? {};
|
|
18
|
+
const effectiveLabel = useLabel(label);
|
|
19
|
+
const { layout } = useFormContext();
|
|
20
|
+
const { classes } = layout?.itemProps || {};
|
|
21
|
+
const contextDescriptionPlacement = layout?.descriptionPlacement;
|
|
22
|
+
const effectiveLabelPlacement = fieldProps.labelPlacement ?? labelPlacement;
|
|
23
|
+
const resolvedDescriptionPlacement = fieldProps.descriptionPlacement ?? descriptionPlacement ?? contextDescriptionPlacement ?? resolveLegacyDescriptionPlacement(effectiveLabelPlacement);
|
|
24
|
+
const id = field?.componentProps?.id ?? `form-${field?.address?.toString()?.replace(/\./gu, "-")}`;
|
|
25
|
+
const descriptionId = React.useId();
|
|
26
|
+
const feedbackId = React.useId();
|
|
27
|
+
const descriptionRenderedInline = description != null && resolvedDescriptionPlacement !== "popover";
|
|
28
|
+
const spacingConfig = getSpacingConfig(resolvedDescriptionPlacement, descriptionRenderedInline);
|
|
29
|
+
const ariaDescribedBy = [descriptionRenderedInline ? descriptionId : void 0, feedbackText != null ? feedbackId : void 0].filter(Boolean).join(" ");
|
|
30
|
+
const labelElement = effectiveLabel != null && /* @__PURE__ */ jsx(FormItemLabel, {
|
|
31
|
+
id,
|
|
32
|
+
label: effectiveLabel,
|
|
33
|
+
asterisk,
|
|
34
|
+
error: feedbackStatus === "error",
|
|
35
|
+
shrink: effectiveLabelPlacement === "end" || effectiveLabelPlacement === "start",
|
|
36
|
+
labelClassName: cn(spacingConfig.label, classes?.label),
|
|
37
|
+
description,
|
|
38
|
+
descriptionInPopover: resolvedDescriptionPlacement === "popover" && description != null
|
|
39
|
+
});
|
|
40
|
+
const inputElement = /* @__PURE__ */ jsx("div", {
|
|
41
|
+
className: cn("relative", classes?.inputWrapper),
|
|
42
|
+
children: React.isValidElement(children) ? React.cloneElement(children, {
|
|
43
|
+
id,
|
|
44
|
+
"aria-describedby": ariaDescribedBy || void 0,
|
|
45
|
+
"aria-invalid": feedbackStatus === "error" ? "true" : void 0
|
|
46
|
+
}) : children
|
|
47
|
+
});
|
|
48
|
+
const descriptionElement = descriptionRenderedInline ? /* @__PURE__ */ jsx("p", {
|
|
49
|
+
id: descriptionId,
|
|
50
|
+
className: cn("text-muted-foreground text-[0.8rem]", spacingConfig.description, classes?.description),
|
|
51
|
+
children: description
|
|
52
|
+
}) : null;
|
|
53
|
+
const contentElement = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
|
+
effectiveLabelPlacement === "top" && labelElement,
|
|
55
|
+
resolvedDescriptionPlacement === "top" && descriptionElement,
|
|
56
|
+
(effectiveLabelPlacement === "start" || effectiveLabelPlacement === "end") && /* @__PURE__ */ jsxs("div", {
|
|
57
|
+
className: cn("flex items-center gap-2", effectiveLabelPlacement === "start" && "flex-row"),
|
|
58
|
+
children: [
|
|
59
|
+
effectiveLabelPlacement === "start" && labelElement,
|
|
60
|
+
inputElement,
|
|
61
|
+
effectiveLabelPlacement === "end" && labelElement
|
|
62
|
+
]
|
|
63
|
+
}),
|
|
64
|
+
effectiveLabelPlacement === "top" && inputElement,
|
|
65
|
+
resolvedDescriptionPlacement === "bottom" && descriptionElement
|
|
66
|
+
] });
|
|
67
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
68
|
+
"data-slot": "form-item",
|
|
69
|
+
className: cn("flex flex-col ", className),
|
|
70
|
+
...props,
|
|
71
|
+
children: [contentElement, Boolean(feedbackText) && /* @__PURE__ */ jsx("p", {
|
|
72
|
+
id: feedbackId,
|
|
73
|
+
className: cn("text-[0.8rem]", spacingConfig.feedback, feedbackStatus === "error" && "text-destructive font-medium", feedbackStatus === "warning" && "text-amber-600", feedbackStatus === "success" && "text-green-600", classes?.errorMessage),
|
|
74
|
+
children: typeof feedbackText === "string" ? feedbackText.split("\n").map((line, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [line, index < feedbackText.split("\n").length - 1 && /* @__PURE__ */ jsx("br", {})] }, index)) : feedbackText
|
|
75
|
+
})]
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
export { BaseFormItem };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_base_form_item = require('./base-form-item.cjs');
|
|
3
|
+
let __formily_react = require("@formily/react");
|
|
4
|
+
__formily_react = require_rolldown_runtime.__toESM(__formily_react);
|
|
5
|
+
let __formily_core = require("@formily/core");
|
|
6
|
+
__formily_core = require_rolldown_runtime.__toESM(__formily_core);
|
|
7
|
+
|
|
8
|
+
//#region src/components/form-item/connected-form-item.tsx
|
|
9
|
+
/**
|
|
10
|
+
* FormItem component connected to Formily field state.
|
|
11
|
+
* Automatically maps field validation state to component props.
|
|
12
|
+
*/
|
|
13
|
+
const FormItem = (0, __formily_react.connect)(require_base_form_item.BaseFormItem, (0, __formily_react.mapProps)((props, field) => {
|
|
14
|
+
if ((0, __formily_core.isVoidField)(field)) return {
|
|
15
|
+
label: field.title ?? props.label,
|
|
16
|
+
description: props.description ?? field.description,
|
|
17
|
+
asterisk: props.asterisk
|
|
18
|
+
};
|
|
19
|
+
const takeFeedbackStatus = () => {
|
|
20
|
+
if (field.validating) return void 0;
|
|
21
|
+
if (field.selfErrors?.length) return "error";
|
|
22
|
+
if (field.selfWarnings?.length) return "warning";
|
|
23
|
+
if (field.selfSuccesses?.length) return "success";
|
|
24
|
+
};
|
|
25
|
+
const takeFeedbackText = () => {
|
|
26
|
+
if (field.validating) return void 0;
|
|
27
|
+
if (props.feedbackText != null) return props.feedbackText;
|
|
28
|
+
if (field.selfErrors?.length) return field.selfErrors.join(", ");
|
|
29
|
+
if (field.selfWarnings?.length) return field.selfWarnings.join(", ");
|
|
30
|
+
if (field.selfSuccesses?.length) return field.selfSuccesses.join(", ");
|
|
31
|
+
};
|
|
32
|
+
const takeAsterisk = () => {
|
|
33
|
+
if (field.required && field.pattern !== "readPretty") return true;
|
|
34
|
+
if ("asterisk" in props) return Boolean(props.asterisk);
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
label: props.label ?? field.title,
|
|
39
|
+
description: props.description ?? field.description,
|
|
40
|
+
feedbackStatus: takeFeedbackStatus(),
|
|
41
|
+
feedbackText: takeFeedbackText(),
|
|
42
|
+
asterisk: takeAsterisk()
|
|
43
|
+
};
|
|
44
|
+
}));
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
exports.FormItem = FormItem;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FormItemProps } from "./form-item-types.cjs";
|
|
2
|
+
import * as react1341 from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/form-item/connected-form-item.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* FormItem component connected to Formily field state.
|
|
7
|
+
* Automatically maps field validation state to component props.
|
|
8
|
+
*/
|
|
9
|
+
declare const FormItem: react1341.ForwardRefExoticComponent<Omit<Partial<FormItemProps & {
|
|
10
|
+
children?: react1341.ReactNode | undefined;
|
|
11
|
+
}>, "ref"> & react1341.RefAttributes<unknown>>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { FormItem };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FormItemProps } from "./form-item-types.js";
|
|
2
|
+
import * as react1341 from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/form-item/connected-form-item.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* FormItem component connected to Formily field state.
|
|
7
|
+
* Automatically maps field validation state to component props.
|
|
8
|
+
*/
|
|
9
|
+
declare const FormItem: react1341.ForwardRefExoticComponent<Omit<Partial<FormItemProps & {
|
|
10
|
+
children?: react1341.ReactNode | undefined;
|
|
11
|
+
}>, "ref"> & react1341.RefAttributes<unknown>>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { FormItem };
|