@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.
Files changed (116) hide show
  1. package/README.md +27 -1
  2. package/dist/components/checkbox.d.cts +2 -2
  3. package/dist/components/checkbox.d.ts +2 -2
  4. package/dist/components/column.d.ts +2 -2
  5. package/dist/components/context/context.d.cts +1 -1
  6. package/dist/components/context/context.d.ts +1 -1
  7. package/dist/components/context/form-context.d.cts +34 -5
  8. package/dist/components/context/form-context.d.ts +34 -5
  9. package/dist/components/context/index.d.cts +1 -1
  10. package/dist/components/context/index.d.ts +1 -1
  11. package/dist/components/date-picker.d.cts +3 -3
  12. package/dist/components/date-picker.d.ts +3 -3
  13. package/dist/components/file-upload/file-upload-inline.d.cts +8 -8
  14. package/dist/components/file-upload/file-upload-inline.d.ts +8 -8
  15. package/dist/components/file-upload/file-upload.d.cts +8 -8
  16. package/dist/components/file-upload/file-upload.d.ts +8 -8
  17. package/dist/components/form-grid.d.ts +2 -2
  18. package/dist/components/form-item/base-form-item.cjs +85 -0
  19. package/dist/components/form-item/base-form-item.d.cts +2 -0
  20. package/dist/components/form-item/base-form-item.d.ts +2 -0
  21. package/dist/components/form-item/base-form-item.js +80 -0
  22. package/dist/components/form-item/connected-form-item.cjs +47 -0
  23. package/dist/components/form-item/connected-form-item.d.cts +13 -0
  24. package/dist/components/form-item/connected-form-item.d.ts +13 -0
  25. package/dist/components/form-item/connected-form-item.js +44 -0
  26. package/dist/components/form-item/form-item-description-popover.cjs +42 -0
  27. package/dist/components/form-item/form-item-description-popover.js +37 -0
  28. package/dist/components/form-item/form-item-label.cjs +29 -0
  29. package/dist/components/form-item/form-item-label.js +25 -0
  30. package/dist/components/form-item/form-item-types.d.cts +23 -0
  31. package/dist/components/form-item/form-item-types.d.ts +23 -0
  32. package/dist/components/form-item/form-item.cjs +2 -0
  33. package/dist/components/form-item/form-item.d.cts +4 -0
  34. package/dist/components/form-item/form-item.d.ts +4 -0
  35. package/dist/components/form-item/form-item.js +2 -0
  36. package/dist/components/form-item/index.cjs +3 -0
  37. package/dist/components/form-item/index.d.cts +4 -0
  38. package/dist/components/form-item/index.d.ts +4 -0
  39. package/dist/components/form-item/index.js +3 -0
  40. package/dist/components/form-item/spacing-config.cjs +24 -0
  41. package/dist/components/form-item/spacing-config.js +23 -0
  42. package/dist/components/form-items-container.cjs +2 -1
  43. package/dist/components/form-items-container.js +2 -1
  44. package/dist/components/form.cjs +4 -11
  45. package/dist/components/form.d.cts +1 -3
  46. package/dist/components/form.d.ts +1 -3
  47. package/dist/components/form.js +4 -11
  48. package/dist/components/icon-picker.d.ts +3 -3
  49. package/dist/components/input.d.cts +2 -2
  50. package/dist/components/input.d.ts +2 -2
  51. package/dist/components/json-schema-form-renderer/index.cjs +4 -0
  52. package/dist/components/json-schema-form-renderer/index.d.cts +5 -0
  53. package/dist/components/json-schema-form-renderer/index.d.ts +5 -0
  54. package/dist/components/json-schema-form-renderer/index.js +4 -0
  55. package/dist/components/json-schema-form-renderer/json-schema-form-basic.cjs +35 -0
  56. package/dist/components/json-schema-form-renderer/json-schema-form-basic.d.cts +14 -0
  57. package/dist/components/json-schema-form-renderer/json-schema-form-basic.d.ts +14 -0
  58. package/dist/components/json-schema-form-renderer/json-schema-form-basic.js +32 -0
  59. package/dist/components/json-schema-form-renderer/json-schema-form-extended.cjs +35 -0
  60. package/dist/components/json-schema-form-renderer/json-schema-form-extended.d.cts +14 -0
  61. package/dist/components/json-schema-form-renderer/json-schema-form-extended.d.ts +14 -0
  62. package/dist/components/json-schema-form-renderer/json-schema-form-extended.js +32 -0
  63. package/dist/components/{json-schema-form-renderer.cjs → json-schema-form-renderer/json-schema-form-renderer.cjs} +16 -17
  64. package/dist/components/json-schema-form-renderer/json-schema-form-renderer.d.cts +7 -0
  65. package/dist/components/json-schema-form-renderer/json-schema-form-renderer.d.ts +7 -0
  66. package/dist/components/{json-schema-form-renderer.js → json-schema-form-renderer/json-schema-form-renderer.js} +14 -15
  67. package/dist/components/json-schema-form-renderer/json-schema-form.cjs +36 -0
  68. package/dist/components/json-schema-form-renderer/json-schema-form.d.cts +14 -0
  69. package/dist/components/json-schema-form-renderer/json-schema-form.d.ts +14 -0
  70. package/dist/components/json-schema-form-renderer/json-schema-form.js +33 -0
  71. package/dist/components/json-schema-form-renderer/types.d.cts +23 -0
  72. package/dist/components/json-schema-form-renderer/types.d.ts +23 -0
  73. package/dist/components/number-input.d.cts +2 -2
  74. package/dist/components/number-input.d.ts +2 -2
  75. package/dist/components/object-container.cjs +13 -6
  76. package/dist/components/object-container.js +13 -6
  77. package/dist/components/schema-field/index.d.cts +3 -3
  78. package/dist/components/schema-field/index.d.ts +3 -3
  79. package/dist/components/schema-field/index.js +3 -3
  80. package/dist/components/schema-field/schema-field-basics.cjs +66 -23
  81. package/dist/components/schema-field/schema-field-basics.d.cts +283 -198
  82. package/dist/components/schema-field/schema-field-basics.d.ts +294 -209
  83. package/dist/components/schema-field/schema-field-basics.js +65 -23
  84. package/dist/components/schema-field/schema-field-extended.cjs +23 -8
  85. package/dist/components/schema-field/schema-field-extended.d.cts +566 -431
  86. package/dist/components/schema-field/schema-field-extended.d.ts +566 -431
  87. package/dist/components/schema-field/schema-field-extended.js +23 -9
  88. package/dist/components/schema-field/schema-field.cjs +23 -8
  89. package/dist/components/schema-field/schema-field.d.cts +334 -233
  90. package/dist/components/schema-field/schema-field.d.ts +340 -239
  91. package/dist/components/schema-field/schema-field.js +23 -9
  92. package/dist/components/separator.d.cts +2 -2
  93. package/dist/components/separator.d.ts +2 -2
  94. package/dist/components/slider.d.cts +2 -2
  95. package/dist/components/slider.d.ts +2 -2
  96. package/dist/components/switch.d.cts +2 -2
  97. package/dist/components/switch.d.ts +2 -2
  98. package/dist/components/tags-input-inline.d.cts +2 -2
  99. package/dist/components/tags-input-inline.d.ts +2 -2
  100. package/dist/components/textarea.d.cts +2 -2
  101. package/dist/components/textarea.d.ts +2 -2
  102. package/dist/index.cjs +17 -6
  103. package/dist/index.d.cts +14 -6
  104. package/dist/index.d.ts +14 -6
  105. package/dist/index.js +11 -6
  106. package/dist/types/form-item.d.cts +5 -0
  107. package/dist/types/form-item.d.ts +5 -0
  108. package/dist/utils/extract-components.cjs +11 -0
  109. package/dist/utils/extract-components.js +10 -0
  110. package/package.json +7 -7
  111. package/dist/components/form-item.cjs +0 -118
  112. package/dist/components/form-item.d.cts +0 -22
  113. package/dist/components/form-item.d.ts +0 -22
  114. package/dist/components/form-item.js +0 -112
  115. package/dist/components/json-schema-form-renderer.d.cts +0 -20
  116. 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 form={form} onSubmit={(values) => console.log(values)}>
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 react1 from "react";
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: react1.ForwardRefExoticComponent<Omit<Partial<_radix_ui_react_checkbox0.CheckboxProps & react1.RefAttributes<HTMLButtonElement>>, "ref"> & react1.RefAttributes<unknown>>;
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 react0 from "react";
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: react0.ForwardRefExoticComponent<Omit<Partial<_radix_ui_react_checkbox0.CheckboxProps & react0.RefAttributes<HTMLButtonElement>>, "ref"> & react0.RefAttributes<unknown>>;
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 react_jsx_runtime0 from "react/jsx-runtime";
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): react_jsx_runtime0.JSX.Element;
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
- interface FormContextStates extends FormSpace {
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
- className?: string;
42
+ classes?: {
43
+ label?: string;
44
+ description?: string;
45
+ inputWrapper?: string;
46
+ errorMessage?: string;
47
+ };
31
48
  };
32
- objectContainerProps?: {
33
- className?: string;
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
- interface FormContextStates extends FormSpace {
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
- className?: string;
42
+ classes?: {
43
+ label?: string;
44
+ description?: string;
45
+ inputWrapper?: string;
46
+ errorMessage?: string;
47
+ };
31
48
  };
32
- objectContainerProps?: {
33
- className?: string;
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 react0 from "react";
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: react0.ForwardRefExoticComponent<Partial<{
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">> & react0.RefAttributes<unknown>>;
9
+ } & Omit<DatePickerProps, "onSelect" | "selected" | "mode">> & react2.RefAttributes<unknown>>;
10
10
  //#endregion
11
11
  export { DatePicker };
@@ -1,11 +1,11 @@
1
- import * as react2 from "react";
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: react2.ForwardRefExoticComponent<Partial<{
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">> & react2.RefAttributes<unknown>>;
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 _pixpilot_shadcn_ui8 from "@pixpilot/shadcn-ui";
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<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
10
+ declare const FileUploadInline: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
11
11
  multiple: true;
12
- value?: _pixpilot_shadcn_ui8.FileMetadata[];
13
- onChange?: _pixpilot_shadcn_ui8.OnChangeMultipleFiles;
14
- } & _pixpilot_shadcn_ui8.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
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?: _pixpilot_shadcn_ui8.FileMetadata | null;
17
- onChange?: _pixpilot_shadcn_ui8.OnChangeSingleFile;
18
- } & _pixpilot_shadcn_ui8.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
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 _pixpilot_shadcn_ui0 from "@pixpilot/shadcn-ui";
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<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
10
+ declare const FileUploadInline$1: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui294.FileUploadInlineBaseProps & {
11
11
  multiple: true;
12
- value?: _pixpilot_shadcn_ui0.FileMetadata[];
13
- onChange?: _pixpilot_shadcn_ui0.OnChangeMultipleFiles;
14
- } & _pixpilot_shadcn_ui0.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
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?: _pixpilot_shadcn_ui0.FileMetadata | null;
17
- onChange?: _pixpilot_shadcn_ui0.OnChangeSingleFile;
18
- } & _pixpilot_shadcn_ui0.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
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 _pixpilot_shadcn_ui0 from "@pixpilot/shadcn-ui";
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<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
10
+ declare const FileUpload: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
11
11
  multiple: true;
12
- value?: _pixpilot_shadcn_ui0.FileMetadata[];
13
- onChange?: _pixpilot_shadcn_ui0.OnChangeMultipleFiles;
14
- } & _pixpilot_shadcn_ui0.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui0.FileUploadInlineBaseProps & {
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?: _pixpilot_shadcn_ui0.FileMetadata | null;
17
- onChange?: _pixpilot_shadcn_ui0.OnChangeSingleFile;
18
- } & _pixpilot_shadcn_ui0.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
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 _pixpilot_shadcn_ui8 from "@pixpilot/shadcn-ui";
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<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
10
+ declare const FileUpload$1: React.ForwardRefExoticComponent<(Omit<Partial<_pixpilot_shadcn_ui286.FileUploadInlineBaseProps & {
11
11
  multiple: true;
12
- value?: _pixpilot_shadcn_ui8.FileMetadata[];
13
- onChange?: _pixpilot_shadcn_ui8.OnChangeMultipleFiles;
14
- } & _pixpilot_shadcn_ui8.FileUploadBaseProps>, "ref"> | Omit<Partial<_pixpilot_shadcn_ui8.FileUploadInlineBaseProps & {
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?: _pixpilot_shadcn_ui8.FileMetadata | null;
17
- onChange?: _pixpilot_shadcn_ui8.OnChangeSingleFile;
18
- } & _pixpilot_shadcn_ui8.FileUploadBaseProps>, "ref">) & React.RefAttributes<unknown>>;
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 react_jsx_runtime1 from "react/jsx-runtime";
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): react_jsx_runtime1.JSX.Element;
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,2 @@
1
+ import "./form-item-types.cjs";
2
+ import React from "react";
@@ -0,0 +1,2 @@
1
+ import "./form-item-types.js";
2
+ import React from "react";
@@ -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 };