pdyform 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +28 -1
  2. package/example/README.md +36 -0
  3. package/example/react-demo/dist/assets/index-BBU9cJqy.css +1 -0
  4. package/example/react-demo/dist/assets/index-DeJS8UcQ.js +105 -0
  5. package/example/react-demo/dist/index.html +13 -0
  6. package/example/react-demo/index.html +12 -0
  7. package/example/react-demo/node_modules/.bin/browserslist +17 -0
  8. package/example/react-demo/node_modules/.bin/tsc +17 -0
  9. package/example/react-demo/node_modules/.bin/tsserver +17 -0
  10. package/example/react-demo/node_modules/.bin/vite +17 -0
  11. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-checkbox.js +300 -0
  12. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-checkbox.js.map +7 -0
  13. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-label.js +194 -0
  14. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-label.js.map +7 -0
  15. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-radio-group.js +530 -0
  16. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-radio-group.js.map +7 -0
  17. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-select.js +4808 -0
  18. package/example/react-demo/node_modules/.vite/deps/@radix-ui_react-select.js.map +7 -0
  19. package/example/react-demo/node_modules/.vite/deps/_metadata.json +115 -0
  20. package/example/react-demo/node_modules/.vite/deps/chunk-3D5PZ6F6.js +49 -0
  21. package/example/react-demo/node_modules/.vite/deps/chunk-3D5PZ6F6.js.map +7 -0
  22. package/example/react-demo/node_modules/.vite/deps/chunk-5Q2RBQLA.js +127 -0
  23. package/example/react-demo/node_modules/.vite/deps/chunk-5Q2RBQLA.js.map +7 -0
  24. package/example/react-demo/node_modules/.vite/deps/chunk-G3PMV62Z.js +36 -0
  25. package/example/react-demo/node_modules/.vite/deps/chunk-G3PMV62Z.js.map +7 -0
  26. package/example/react-demo/node_modules/.vite/deps/chunk-GX7YZ5KV.js +370 -0
  27. package/example/react-demo/node_modules/.vite/deps/chunk-GX7YZ5KV.js.map +7 -0
  28. package/example/react-demo/node_modules/.vite/deps/chunk-PUFJGYAC.js +928 -0
  29. package/example/react-demo/node_modules/.vite/deps/chunk-PUFJGYAC.js.map +7 -0
  30. package/example/react-demo/node_modules/.vite/deps/chunk-SIU35MPB.js +21 -0
  31. package/example/react-demo/node_modules/.vite/deps/chunk-SIU35MPB.js.map +7 -0
  32. package/example/react-demo/node_modules/.vite/deps/chunk-TOMGVNQP.js +1906 -0
  33. package/example/react-demo/node_modules/.vite/deps/chunk-TOMGVNQP.js.map +7 -0
  34. package/example/react-demo/node_modules/.vite/deps/chunk-YYN6DZAU.js +21628 -0
  35. package/example/react-demo/node_modules/.vite/deps/chunk-YYN6DZAU.js.map +7 -0
  36. package/example/react-demo/node_modules/.vite/deps/chunk-ZE5VSJFE.js +144 -0
  37. package/example/react-demo/node_modules/.vite/deps/chunk-ZE5VSJFE.js.map +7 -0
  38. package/example/react-demo/node_modules/.vite/deps/class-variance-authority.js +51 -0
  39. package/example/react-demo/node_modules/.vite/deps/class-variance-authority.js.map +7 -0
  40. package/example/react-demo/node_modules/.vite/deps/clsx.js +10 -0
  41. package/example/react-demo/node_modules/.vite/deps/clsx.js.map +7 -0
  42. package/example/react-demo/node_modules/.vite/deps/lucide-react.js +29725 -0
  43. package/example/react-demo/node_modules/.vite/deps/lucide-react.js.map +7 -0
  44. package/example/react-demo/node_modules/.vite/deps/package.json +3 -0
  45. package/example/react-demo/node_modules/.vite/deps/react-dom.js +7 -0
  46. package/example/react-demo/node_modules/.vite/deps/react-dom.js.map +7 -0
  47. package/example/react-demo/node_modules/.vite/deps/react-dom_client.js +39 -0
  48. package/example/react-demo/node_modules/.vite/deps/react-dom_client.js.map +7 -0
  49. package/example/react-demo/node_modules/.vite/deps/react.js +6 -0
  50. package/example/react-demo/node_modules/.vite/deps/react.js.map +7 -0
  51. package/example/react-demo/node_modules/.vite/deps/react_jsx-dev-runtime.js +913 -0
  52. package/example/react-demo/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +7 -0
  53. package/example/react-demo/node_modules/.vite/deps/react_jsx-runtime.js +7 -0
  54. package/example/react-demo/node_modules/.vite/deps/react_jsx-runtime.js.map +7 -0
  55. package/example/react-demo/node_modules/.vite/deps/tailwind-merge.js +2534 -0
  56. package/example/react-demo/node_modules/.vite/deps/tailwind-merge.js.map +7 -0
  57. package/example/react-demo/package.json +23 -0
  58. package/example/react-demo/postcss.config.mjs +6 -0
  59. package/example/react-demo/src/App.tsx +64 -0
  60. package/example/react-demo/src/main.tsx +10 -0
  61. package/example/react-demo/src/styles.css +102 -0
  62. package/example/react-demo/tailwind.config.mjs +50 -0
  63. package/example/react-demo/tsconfig.json +16 -0
  64. package/example/react-demo/vite.config.ts +14 -0
  65. package/example/shared/defaultSchema.ts +68 -0
  66. package/example/vue-demo/dist/assets/index-BhWj3D5x.css +1 -0
  67. package/example/vue-demo/dist/assets/index-Bw3THsrD.js +44 -0
  68. package/example/vue-demo/dist/index.html +13 -0
  69. package/example/vue-demo/index.html +12 -0
  70. package/example/vue-demo/node_modules/.bin/tsc +17 -0
  71. package/example/vue-demo/node_modules/.bin/tsserver +17 -0
  72. package/example/vue-demo/node_modules/.bin/vite +17 -0
  73. package/example/vue-demo/node_modules/.vite/deps/_metadata.json +46 -0
  74. package/example/vue-demo/node_modules/.vite/deps/chunk-PZ5AY32C.js +10 -0
  75. package/example/vue-demo/node_modules/.vite/deps/chunk-PZ5AY32C.js.map +7 -0
  76. package/example/vue-demo/node_modules/.vite/deps/chunk-TCXBSQ4M.js +12877 -0
  77. package/example/vue-demo/node_modules/.vite/deps/chunk-TCXBSQ4M.js.map +7 -0
  78. package/example/vue-demo/node_modules/.vite/deps/clsx.js +22 -0
  79. package/example/vue-demo/node_modules/.vite/deps/clsx.js.map +7 -0
  80. package/example/vue-demo/node_modules/.vite/deps/lucide-vue-next.js +29720 -0
  81. package/example/vue-demo/node_modules/.vite/deps/lucide-vue-next.js.map +7 -0
  82. package/example/vue-demo/node_modules/.vite/deps/package.json +3 -0
  83. package/example/vue-demo/node_modules/.vite/deps/radix-vue.js +24321 -0
  84. package/example/vue-demo/node_modules/.vite/deps/radix-vue.js.map +7 -0
  85. package/example/vue-demo/node_modules/.vite/deps/tailwind-merge.js +2534 -0
  86. package/example/vue-demo/node_modules/.vite/deps/tailwind-merge.js.map +7 -0
  87. package/example/vue-demo/node_modules/.vite/deps/vue.js +348 -0
  88. package/example/vue-demo/node_modules/.vite/deps/vue.js.map +7 -0
  89. package/example/vue-demo/package.json +20 -0
  90. package/example/vue-demo/postcss.config.mjs +6 -0
  91. package/example/vue-demo/src/App.vue +61 -0
  92. package/example/vue-demo/src/env.d.ts +1 -0
  93. package/example/vue-demo/src/main.ts +5 -0
  94. package/example/vue-demo/src/style.css +102 -0
  95. package/example/vue-demo/tailwind.config.mjs +50 -0
  96. package/example/vue-demo/tsconfig.json +15 -0
  97. package/example/vue-demo/vite.config.ts +14 -0
  98. package/package.json +10 -2
  99. package/packages/core/dist/{chunk-KQR3LFND.js → chunk-GQASS6PM.js} +20 -0
  100. package/packages/core/dist/index.cjs +20 -0
  101. package/packages/core/dist/index.js +1 -1
  102. package/packages/core/dist/utils.cjs +20 -0
  103. package/packages/core/dist/utils.js +1 -1
  104. package/packages/core/node_modules/.bin/jiti +17 -0
  105. package/packages/core/node_modules/.bin/tsup +2 -2
  106. package/packages/core/node_modules/.bin/tsup-node +2 -2
  107. package/packages/core/node_modules/.vite/vitest/results.json +1 -1
  108. package/packages/core/src/utils.ts +21 -0
  109. package/packages/core/test/utils.test.ts +99 -0
  110. package/packages/react/dist/index.cjs +383 -110
  111. package/packages/react/dist/index.d.cts +80 -4
  112. package/packages/react/dist/index.d.ts +80 -4
  113. package/packages/react/dist/index.js +355 -110
  114. package/packages/react/node_modules/.bin/jiti +17 -0
  115. package/packages/react/node_modules/.bin/tsup +2 -2
  116. package/packages/react/node_modules/.bin/tsup-node +2 -2
  117. package/packages/react/node_modules/.bin/vite +4 -4
  118. package/packages/react/node_modules/.vite/vitest/results.json +1 -1
  119. package/packages/react/package.json +7 -2
  120. package/packages/react/postcss.config.mjs +6 -0
  121. package/packages/react/src/FormFieldRenderer.tsx +32 -112
  122. package/packages/react/src/components/Checkbox.tsx +28 -0
  123. package/packages/react/src/components/CheckboxRenderer.tsx +37 -0
  124. package/packages/react/src/components/Input.tsx +24 -0
  125. package/packages/react/src/components/InputRenderer.tsx +29 -0
  126. package/packages/react/src/components/Label.tsx +24 -0
  127. package/packages/react/src/components/RadioGroup.tsx +42 -0
  128. package/packages/react/src/components/RadioRenderer.tsx +29 -0
  129. package/packages/react/src/components/Select.tsx +93 -0
  130. package/packages/react/src/components/SelectRenderer.tsx +27 -0
  131. package/packages/react/src/components/Textarea.tsx +23 -0
  132. package/packages/react/src/components/TextareaRenderer.tsx +17 -0
  133. package/packages/react/src/components/index.ts +55 -0
  134. package/packages/react/src/components/types.ts +17 -0
  135. package/packages/react/src/index.tsx +1 -0
  136. package/packages/react/src/utils.ts +7 -0
  137. package/packages/react/tailwind.config.mjs +10 -0
  138. package/packages/react/test/FormFieldRenderer.test.tsx +127 -0
  139. package/packages/vue/dist/index.d.ts +33 -0
  140. package/packages/vue/dist/index.js +28 -1
  141. package/packages/vue/dist/index.mjs +6798 -142
  142. package/packages/vue/node_modules/.bin/tsc +2 -2
  143. package/packages/vue/node_modules/.bin/tsserver +2 -2
  144. package/packages/vue/node_modules/.bin/vite +2 -2
  145. package/packages/vue/node_modules/.bin/vitest +2 -2
  146. package/packages/vue/node_modules/.bin/vue-tsc +2 -2
  147. package/packages/vue/node_modules/.vite/vitest/results.json +1 -1
  148. package/packages/vue/package.json +4 -2
  149. package/packages/vue/postcss.config.mjs +6 -0
  150. package/packages/vue/src/FormFieldRenderer.vue +46 -90
  151. package/packages/vue/src/components/Checkbox.vue +28 -0
  152. package/packages/vue/src/components/CheckboxRenderer.vue +35 -0
  153. package/packages/vue/src/components/Input.vue +21 -0
  154. package/packages/vue/src/components/InputRenderer.vue +28 -0
  155. package/packages/vue/src/components/Label.vue +21 -0
  156. package/packages/vue/src/components/RadioGroup.vue +30 -0
  157. package/packages/vue/src/components/RadioGroupItem.vue +26 -0
  158. package/packages/vue/src/components/RadioRenderer.vue +24 -0
  159. package/packages/vue/src/components/Select.vue +40 -0
  160. package/packages/vue/src/components/SelectContent.vue +38 -0
  161. package/packages/vue/src/components/SelectItem.vue +43 -0
  162. package/packages/vue/src/components/SelectRenderer.vue +30 -0
  163. package/packages/vue/src/components/SelectTrigger.vue +27 -0
  164. package/packages/vue/src/components/Textarea.vue +19 -0
  165. package/packages/vue/src/components/TextareaRenderer.vue +18 -0
  166. package/packages/vue/src/components/index.ts +24 -0
  167. package/packages/vue/src/fieldComponentMap.ts +34 -0
  168. package/packages/vue/src/index.ts +2 -0
  169. package/packages/vue/src/utils.ts +6 -0
  170. package/packages/vue/tailwind.config.mjs +10 -0
  171. package/packages/vue/test/FormFieldRenderer.test.ts +133 -0
  172. package/pnpm-workspace.yaml +1 -1
  173. package/packages/core/src/index.test.ts +0 -37
  174. /package/packages/react/{src → test}/DynamicForm.test.tsx +0 -0
  175. /package/packages/vue/{src → test}/DynamicForm.test.ts +0 -0
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,13 +17,39 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/index.tsx
21
31
  var index_exports = {};
22
32
  __export(index_exports, {
33
+ Checkbox: () => Checkbox,
34
+ CheckboxRenderer: () => CheckboxRenderer_default,
23
35
  DynamicForm: () => DynamicForm,
24
- FormFieldRenderer: () => FormFieldRenderer
36
+ FormFieldRenderer: () => FormFieldRenderer,
37
+ Input: () => Input,
38
+ InputRenderer: () => InputRenderer_default,
39
+ Label: () => Label,
40
+ RadioGroup: () => RadioGroup,
41
+ RadioGroupItem: () => RadioGroupItem,
42
+ RadioRenderer: () => RadioRenderer_default,
43
+ Select: () => Select,
44
+ SelectContent: () => SelectContent,
45
+ SelectGroup: () => SelectGroup,
46
+ SelectItem: () => SelectItem,
47
+ SelectRenderer: () => SelectRenderer_default,
48
+ SelectTrigger: () => SelectTrigger,
49
+ SelectValue: () => SelectValue,
50
+ Textarea: () => Textarea,
51
+ TextareaRenderer: () => TextareaRenderer_default,
52
+ defaultComponentMap: () => defaultComponentMap
25
53
  });
26
54
  module.exports = __toCommonJS(index_exports);
27
55
 
@@ -29,119 +57,346 @@ module.exports = __toCommonJS(index_exports);
29
57
  var import_react = require("react");
30
58
  var import_core = require("pdyform/core");
31
59
 
32
- // src/FormFieldRenderer.tsx
60
+ // src/components/Input.tsx
61
+ var React = __toESM(require("react"), 1);
62
+
63
+ // src/utils.ts
64
+ var import_clsx = require("clsx");
65
+ var import_tailwind_merge = require("tailwind-merge");
66
+ function cn(...inputs) {
67
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
68
+ }
69
+
70
+ // src/components/Input.tsx
33
71
  var import_jsx_runtime = require("react/jsx-runtime");
34
- var FormFieldRenderer = ({ field, value, onChange, onBlur, error }) => {
35
- const { type, label, placeholder, options, description, disabled, name } = field;
36
- const fieldId = `field-${name}`;
37
- const baseInputClasses = "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50";
38
- const renderInput = () => {
39
- switch (type) {
40
- case "textarea":
41
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
42
- "textarea",
43
- {
44
- id: fieldId,
45
- className: `${baseInputClasses} min-h-[80px]`,
46
- placeholder,
47
- value: value || "",
48
- onChange: (e) => onChange(e.target.value),
49
- onBlur,
50
- disabled,
51
- name
52
- }
53
- );
54
- case "select":
55
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
56
- "select",
57
- {
58
- id: fieldId,
59
- className: baseInputClasses,
60
- value: value || "",
61
- onChange: (e) => onChange(e.target.value),
62
- onBlur,
63
- disabled,
64
- name,
65
- children: [
66
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "", disabled: true, children: placeholder || "Select an option" }),
67
- options?.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: opt.value, children: opt.label }, opt.value))
68
- ]
69
- }
70
- );
71
- case "checkbox":
72
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-4", children: options?.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex items-center space-x-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: [
73
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
74
- "input",
75
- {
76
- type: "checkbox",
77
- className: "h-4 w-4 rounded border-primary text-primary focus:ring-primary",
78
- checked: Array.isArray(value) && value.includes(opt.value),
79
- onChange: (e) => {
80
- const newValue = Array.isArray(value) ? [...value] : [];
81
- if (e.target.checked) {
82
- newValue.push(opt.value);
83
- } else {
84
- const index = newValue.indexOf(opt.value);
85
- if (index > -1) newValue.splice(index, 1);
86
- }
87
- onChange(newValue);
88
- },
89
- onBlur,
90
- disabled
91
- }
92
- ),
93
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: opt.label })
94
- ] }, opt.value)) });
95
- case "radio":
96
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-4", children: options?.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex items-center space-x-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: [
97
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
98
- "input",
99
- {
100
- type: "radio",
101
- className: "h-4 w-4 border-primary text-primary focus:ring-primary",
102
- name: field.name,
103
- checked: value === opt.value,
104
- onChange: () => onChange(opt.value),
105
- onBlur,
106
- disabled
107
- }
108
- ),
109
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: opt.label })
110
- ] }, opt.value)) });
111
- default:
112
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
113
- "input",
114
- {
115
- id: fieldId,
116
- type,
117
- className: baseInputClasses,
118
- placeholder,
119
- value: value || "",
120
- onChange: (e) => onChange(e.target.value),
121
- onBlur,
122
- disabled,
123
- name
124
- }
125
- );
72
+ var Input = React.forwardRef(
73
+ ({ className, type, ...props }, ref) => {
74
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
75
+ "input",
76
+ {
77
+ type,
78
+ className: cn(
79
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
80
+ className
81
+ ),
82
+ ref,
83
+ ...props
84
+ }
85
+ );
86
+ }
87
+ );
88
+ Input.displayName = "Input";
89
+
90
+ // src/components/Textarea.tsx
91
+ var React2 = __toESM(require("react"), 1);
92
+ var import_jsx_runtime2 = require("react/jsx-runtime");
93
+ var Textarea = React2.forwardRef(
94
+ ({ className, ...props }, ref) => {
95
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
96
+ "textarea",
97
+ {
98
+ className: cn(
99
+ "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
100
+ className
101
+ ),
102
+ ref,
103
+ ...props
104
+ }
105
+ );
106
+ }
107
+ );
108
+ Textarea.displayName = "Textarea";
109
+
110
+ // src/components/Checkbox.tsx
111
+ var React3 = __toESM(require("react"), 1);
112
+ var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"), 1);
113
+ var import_lucide_react = require("lucide-react");
114
+ var import_jsx_runtime3 = require("react/jsx-runtime");
115
+ var Checkbox = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
116
+ CheckboxPrimitive.Root,
117
+ {
118
+ ref,
119
+ className: cn(
120
+ "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
121
+ className
122
+ ),
123
+ ...props,
124
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
125
+ CheckboxPrimitive.Indicator,
126
+ {
127
+ className: cn("flex items-center justify-center text-current"),
128
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.Check, { className: "h-4 w-4" })
129
+ }
130
+ )
131
+ }
132
+ ));
133
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
134
+
135
+ // src/components/RadioGroup.tsx
136
+ var React4 = __toESM(require("react"), 1);
137
+ var RadioGroupPrimitive = __toESM(require("@radix-ui/react-radio-group"), 1);
138
+ var import_lucide_react2 = require("lucide-react");
139
+ var import_jsx_runtime4 = require("react/jsx-runtime");
140
+ var RadioGroup = React4.forwardRef(({ className, ...props }, ref) => {
141
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
142
+ RadioGroupPrimitive.Root,
143
+ {
144
+ className: cn("grid gap-2", className),
145
+ ...props,
146
+ ref
147
+ }
148
+ );
149
+ });
150
+ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
151
+ var RadioGroupItem = React4.forwardRef(({ className, ...props }, ref) => {
152
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
153
+ RadioGroupPrimitive.Item,
154
+ {
155
+ ref,
156
+ className: cn(
157
+ "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
158
+ className
159
+ ),
160
+ ...props,
161
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
126
162
  }
163
+ );
164
+ });
165
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
166
+
167
+ // src/components/Select.tsx
168
+ var React5 = __toESM(require("react"), 1);
169
+ var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
170
+ var import_lucide_react3 = require("lucide-react");
171
+ var import_jsx_runtime5 = require("react/jsx-runtime");
172
+ var Select = SelectPrimitive.Root;
173
+ var SelectGroup = SelectPrimitive.Group;
174
+ var SelectValue = SelectPrimitive.Value;
175
+ var SelectTrigger = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
176
+ SelectPrimitive.Trigger,
177
+ {
178
+ ref,
179
+ className: cn(
180
+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
181
+ className
182
+ ),
183
+ ...props,
184
+ children: [
185
+ children,
186
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
187
+ ]
188
+ }
189
+ ));
190
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
191
+ var SelectContent = React5.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
192
+ SelectPrimitive.Content,
193
+ {
194
+ ref,
195
+ className: cn(
196
+ "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
197
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
198
+ className
199
+ ),
200
+ position,
201
+ ...props,
202
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
203
+ SelectPrimitive.Viewport,
204
+ {
205
+ className: cn(
206
+ "p-1",
207
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
208
+ ),
209
+ children
210
+ }
211
+ )
212
+ }
213
+ ) }));
214
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
215
+ var SelectItem = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
216
+ SelectPrimitive.Item,
217
+ {
218
+ ref,
219
+ className: cn(
220
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
221
+ className
222
+ ),
223
+ ...props,
224
+ children: [
225
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Check, { className: "h-4 w-4" }) }) }),
226
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SelectPrimitive.ItemText, { children })
227
+ ]
228
+ }
229
+ ));
230
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
231
+
232
+ // src/components/Label.tsx
233
+ var React6 = __toESM(require("react"), 1);
234
+ var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
235
+ var import_class_variance_authority = require("class-variance-authority");
236
+ var import_jsx_runtime6 = require("react/jsx-runtime");
237
+ var labelVariants = (0, import_class_variance_authority.cva)(
238
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
239
+ );
240
+ var Label = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
241
+ LabelPrimitive.Root,
242
+ {
243
+ ref,
244
+ className: cn(labelVariants(), className),
245
+ ...props
246
+ }
247
+ ));
248
+ Label.displayName = LabelPrimitive.Root.displayName;
249
+
250
+ // src/components/InputRenderer.tsx
251
+ var import_jsx_runtime7 = require("react/jsx-runtime");
252
+ var InputRenderer = ({ field, value, onChange, onBlur, fieldId }) => {
253
+ const handleChange = (nextValue) => {
254
+ if (field.type !== "number") {
255
+ onChange(nextValue);
256
+ return;
257
+ }
258
+ onChange(nextValue === "" ? "" : Number(nextValue));
127
259
  };
128
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: `space-y-2 ${field.className || ""}`, children: [
129
- label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
130
- "label",
260
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
261
+ Input,
262
+ {
263
+ id: fieldId,
264
+ type: field.type,
265
+ placeholder: field.placeholder,
266
+ value: value ?? "",
267
+ onChange: (e) => handleChange(e.target.value),
268
+ onBlur,
269
+ disabled: field.disabled,
270
+ name: field.name
271
+ }
272
+ );
273
+ };
274
+ var InputRenderer_default = InputRenderer;
275
+
276
+ // src/components/TextareaRenderer.tsx
277
+ var import_jsx_runtime8 = require("react/jsx-runtime");
278
+ var TextareaRenderer = ({ field, value, onChange, onBlur, fieldId }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
279
+ Textarea,
280
+ {
281
+ id: fieldId,
282
+ placeholder: field.placeholder,
283
+ value: value ?? "",
284
+ onChange: (e) => onChange(e.target.value),
285
+ onBlur,
286
+ disabled: field.disabled,
287
+ name: field.name
288
+ }
289
+ );
290
+ var TextareaRenderer_default = TextareaRenderer;
291
+
292
+ // src/components/SelectRenderer.tsx
293
+ var import_jsx_runtime9 = require("react/jsx-runtime");
294
+ var SelectRenderer = ({ field, value, onChange, onBlur, fieldId }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
295
+ Select,
296
+ {
297
+ value: value != null ? String(value) : "",
298
+ onValueChange: onChange,
299
+ disabled: field.disabled,
300
+ name: field.name,
301
+ children: [
302
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { id: fieldId, onBlur, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, { placeholder: field.placeholder || "Select an option" }) }),
303
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectContent, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectGroup, { children: field.options?.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: String(opt.value), children: opt.label }, opt.value)) }) })
304
+ ]
305
+ }
306
+ );
307
+ var SelectRenderer_default = SelectRenderer;
308
+
309
+ // src/components/CheckboxRenderer.tsx
310
+ var import_jsx_runtime10 = require("react/jsx-runtime");
311
+ var CheckboxRenderer = ({ field, value, onChange, onBlur }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-wrap gap-4", children: field.options?.map((opt) => {
312
+ const checked = Array.isArray(value) && value.includes(opt.value);
313
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center space-x-2", children: [
314
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
315
+ Checkbox,
131
316
  {
132
- htmlFor: fieldId,
133
- className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
134
- children: label
317
+ id: `checkbox-${field.name}-${opt.value}`,
318
+ checked,
319
+ disabled: field.disabled,
320
+ onCheckedChange: (c) => {
321
+ const next = Array.isArray(value) ? [...value] : [];
322
+ if (c) {
323
+ next.push(opt.value);
324
+ } else {
325
+ const idx = next.indexOf(opt.value);
326
+ if (idx > -1) next.splice(idx, 1);
327
+ }
328
+ onChange(next);
329
+ },
330
+ onBlur
135
331
  }
136
332
  ),
137
- renderInput(),
138
- description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-muted-foreground", children: description }),
139
- error && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-destructive", children: error })
333
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Label, { htmlFor: `checkbox-${field.name}-${opt.value}`, className: "font-normal", children: opt.label })
334
+ ] }, opt.value);
335
+ }) });
336
+ var CheckboxRenderer_default = CheckboxRenderer;
337
+
338
+ // src/components/RadioRenderer.tsx
339
+ var import_jsx_runtime11 = require("react/jsx-runtime");
340
+ var RadioRenderer = ({ field, value, onChange, onBlur }) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
341
+ RadioGroup,
342
+ {
343
+ value: value != null ? String(value) : "",
344
+ onValueChange: onChange,
345
+ disabled: field.disabled,
346
+ name: field.name,
347
+ className: "flex flex-wrap gap-4",
348
+ children: field.options?.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center space-x-2", children: [
349
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
350
+ RadioGroupItem,
351
+ {
352
+ value: String(opt.value),
353
+ id: `radio-${field.name}-${opt.value}`,
354
+ onBlur
355
+ }
356
+ ),
357
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Label, { htmlFor: `radio-${field.name}-${opt.value}`, className: "font-normal", children: opt.label })
358
+ ] }, opt.value))
359
+ }
360
+ );
361
+ var RadioRenderer_default = RadioRenderer;
362
+
363
+ // src/components/index.ts
364
+ var defaultComponentMap = {
365
+ text: InputRenderer_default,
366
+ number: InputRenderer_default,
367
+ password: InputRenderer_default,
368
+ email: InputRenderer_default,
369
+ date: InputRenderer_default,
370
+ textarea: TextareaRenderer_default,
371
+ select: SelectRenderer_default,
372
+ checkbox: CheckboxRenderer_default,
373
+ radio: RadioRenderer_default
374
+ };
375
+
376
+ // src/FormFieldRenderer.tsx
377
+ var import_jsx_runtime12 = require("react/jsx-runtime");
378
+ var FormFieldRenderer = ({
379
+ field,
380
+ value,
381
+ onChange,
382
+ onBlur,
383
+ error,
384
+ componentMap
385
+ }) => {
386
+ const { label, description, name, type } = field;
387
+ const fieldId = `field-${name}`;
388
+ const resolvedMap = componentMap ? { ...defaultComponentMap, ...componentMap } : defaultComponentMap;
389
+ const FieldComponent = resolvedMap[type] ?? InputRenderer_default;
390
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: `space-y-2 ${field.className || ""}`, children: [
391
+ label && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Label, { htmlFor: fieldId, children: label }),
392
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FieldComponent, { field, value, onChange, onBlur, fieldId }),
393
+ description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-[0.8rem] text-muted-foreground", children: description }),
394
+ error && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-[0.8rem] font-medium text-destructive", children: error })
140
395
  ] });
141
396
  };
142
397
 
143
398
  // src/DynamicForm.tsx
144
- var import_jsx_runtime2 = require("react/jsx-runtime");
399
+ var import_jsx_runtime13 = require("react/jsx-runtime");
145
400
  var DynamicForm = ({ schema, onSubmit, className }) => {
146
401
  const [values, setValues] = (0, import_react.useState)((0, import_core.getDefaultValues)(schema.fields));
147
402
  const [errors, setErrors] = (0, import_react.useState)({});
@@ -185,10 +440,10 @@ var DynamicForm = ({ schema, onSubmit, className }) => {
185
440
  }
186
441
  setIsSubmitting(false);
187
442
  };
188
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("form", { onSubmit: handleSubmit, className: `space-y-6 ${className || ""}`, children: [
189
- schema.title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h2", { className: "text-2xl font-bold tracking-tight", children: schema.title }),
190
- schema.description && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "text-muted-foreground", children: schema.description }),
191
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "space-y-4", children: schema.fields.map((field) => !field.hidden && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
443
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("form", { onSubmit: handleSubmit, className: `space-y-6 ${className || ""}`, children: [
444
+ schema.title && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { className: "text-2xl font-bold tracking-tight", children: schema.title }),
445
+ schema.description && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-muted-foreground", children: schema.description }),
446
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "space-y-4", children: schema.fields.map((field) => !field.hidden && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
192
447
  FormFieldRenderer,
193
448
  {
194
449
  field,
@@ -199,7 +454,7 @@ var DynamicForm = ({ schema, onSubmit, className }) => {
199
454
  },
200
455
  field.name
201
456
  )) }),
202
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
457
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
203
458
  "button",
204
459
  {
205
460
  type: "submit",
@@ -212,6 +467,24 @@ var DynamicForm = ({ schema, onSubmit, className }) => {
212
467
  };
213
468
  // Annotate the CommonJS export names for ESM import in node:
214
469
  0 && (module.exports = {
470
+ Checkbox,
471
+ CheckboxRenderer,
215
472
  DynamicForm,
216
- FormFieldRenderer
473
+ FormFieldRenderer,
474
+ Input,
475
+ InputRenderer,
476
+ Label,
477
+ RadioGroup,
478
+ RadioGroupItem,
479
+ RadioRenderer,
480
+ Select,
481
+ SelectContent,
482
+ SelectGroup,
483
+ SelectItem,
484
+ SelectRenderer,
485
+ SelectTrigger,
486
+ SelectValue,
487
+ Textarea,
488
+ TextareaRenderer,
489
+ defaultComponentMap
217
490
  });
@@ -1,12 +1,77 @@
1
- import React from 'react';
1
+ import * as React from 'react';
2
+ import React__default from 'react';
2
3
  import { FormSchema, FormField } from 'pdyform/core';
4
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
5
+ import * as class_variance_authority_types from 'class-variance-authority/types';
6
+ import * as LabelPrimitive from '@radix-ui/react-label';
7
+ import { VariantProps } from 'class-variance-authority';
8
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
9
+ import * as SelectPrimitive from '@radix-ui/react-select';
3
10
 
4
11
  interface DynamicFormProps {
5
12
  schema: FormSchema;
6
13
  onSubmit: (values: Record<string, any>) => void;
7
14
  className?: string;
8
15
  }
9
- declare const DynamicForm: React.FC<DynamicFormProps>;
16
+ declare const DynamicForm: React__default.FC<DynamicFormProps>;
17
+
18
+ interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
19
+ }
20
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
21
+
22
+ interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
23
+ }
24
+ declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
25
+
26
+ declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
27
+
28
+ declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
29
+ declare const RadioGroupItem: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
30
+
31
+ declare const Select: React.FC<SelectPrimitive.SelectProps>;
32
+ declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
33
+ declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
34
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
35
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
36
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
37
+
38
+ declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: class_variance_authority_types.ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
39
+
40
+ /** All props passed into each individual field renderer component */
41
+ interface FieldRenderContext {
42
+ field: FormField;
43
+ value: any;
44
+ onChange: (value: any) => void;
45
+ onBlur?: () => void;
46
+ fieldId: string;
47
+ }
48
+ /** A React component that renders a specific field type */
49
+ type FieldRenderer = React__default.ComponentType<FieldRenderContext>;
50
+ /** Map from field `type` string to its renderer component */
51
+ type FieldComponentMap = Record<string, FieldRenderer>;
52
+
53
+ declare const InputRenderer: React__default.FC<FieldRenderContext>;
54
+
55
+ declare const TextareaRenderer: React__default.FC<FieldRenderContext>;
56
+
57
+ declare const SelectRenderer: React__default.FC<FieldRenderContext>;
58
+
59
+ declare const CheckboxRenderer: React__default.FC<FieldRenderContext>;
60
+
61
+ declare const RadioRenderer: React__default.FC<FieldRenderContext>;
62
+
63
+ /**
64
+ * The default built-in component map.
65
+ * Import and spread this to extend or override individual field types:
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * import { defaultComponentMap } from 'pdyform-react';
70
+ * const myMap = { ...defaultComponentMap, text: MyInput, rating: StarRating };
71
+ * <FormFieldRenderer componentMap={myMap} ... />
72
+ * ```
73
+ */
74
+ declare const defaultComponentMap: FieldComponentMap;
10
75
 
11
76
  interface FormFieldRendererProps {
12
77
  field: FormField;
@@ -14,7 +79,18 @@ interface FormFieldRendererProps {
14
79
  onChange: (value: any) => void;
15
80
  onBlur?: () => void;
16
81
  error?: string;
82
+ /**
83
+ * Custom component map merged with the default map — external entries win.
84
+ *
85
+ * @example
86
+ * ```tsx
87
+ * import { defaultComponentMap } from 'pdyform-react';
88
+ * const myMap = { ...defaultComponentMap, text: MyInput, rating: StarRating };
89
+ * <FormFieldRenderer componentMap={myMap} ... />
90
+ * ```
91
+ */
92
+ componentMap?: FieldComponentMap;
17
93
  }
18
- declare const FormFieldRenderer: React.FC<FormFieldRendererProps>;
94
+ declare const FormFieldRenderer: React__default.FC<FormFieldRendererProps>;
19
95
 
20
- export { DynamicForm, FormFieldRenderer };
96
+ export { Checkbox, CheckboxRenderer, DynamicForm, type FieldComponentMap, type FieldRenderContext, type FieldRenderer, FormFieldRenderer, type FormFieldRendererProps, Input, InputRenderer, Label, RadioGroup, RadioGroupItem, RadioRenderer, Select, SelectContent, SelectGroup, SelectItem, SelectRenderer, SelectTrigger, SelectValue, Textarea, TextareaRenderer, defaultComponentMap };