zod-form-engine 0.0.3

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/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ Copyright (c) 2026 Omar Rahal
2
+
3
+ All rights reserved.
4
+
5
+ Permission is granted to use this package as a dependency in your applications.
6
+
7
+ You may not:
8
+ - Copy the source code.
9
+ - Modify the source code.
10
+ - Redistribute this package.
11
+ - Publish modified versions.
12
+ - Reverse engineer this package.
13
+
14
+ For commercial usage, contact the author.
package/README.md ADDED
@@ -0,0 +1,449 @@
1
+ # @omar-ra7al/zod-form
2
+
3
+ Auto-generate React forms from a Zod schema. Define your fields, validation, and UI in one place — `ZodForm` renders the form for you.
4
+
5
+ ---
6
+
7
+ ## What this package provides
8
+
9
+
10
+ | Feature | Description |
11
+ | --------------------------- | ------------------------------------------------------------ |
12
+ | **Schema-driven forms** | Build forms from a `z.object()` Zod schema |
13
+ | **Validation** | Powered by Zod + `react-hook-form` + `@hookform/resolvers` |
14
+ | **Custom field components** | Attach any React input via `field()` |
15
+ | **Nested objects** | Automatically renders grouped sections |
16
+ | **Dynamic arrays** | Add/remove repeating items (objects or primitives) |
17
+ | **Container styling** | Grid column spans and wrapper classes per field via Tailwind |
18
+ | **Live `onChange`** | Get form values as the user types |
19
+ | **JSON editor** | Paste JSON to fill the form, or export current values |
20
+ | **Submit UI** | Custom label, icon, styles, and loading state |
21
+
22
+
23
+ **Exports:** `ZodForm` (default), `field`, `getFieldMeta`.
24
+
25
+ ---
26
+
27
+ ## Requirements
28
+
29
+
30
+ | Package | Version |
31
+ | --------------------- | --------- |
32
+ | `react` | `^19.0.0` |
33
+ | `react-dom` | `^19.0.0` |
34
+ | `zod` | `^4.0.0` |
35
+ | `react-hook-form` | `^7.0.0` |
36
+ | `@hookform/resolvers` | `^5.0.0` |
37
+ | `lucide-react` | `^1.20.0` |
38
+
39
+
40
+ ---
41
+
42
+ ## Installation
43
+
44
+ ```bash
45
+ npm install @omar-ra7al/zod-form
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Quick start
51
+
52
+ ### 1. Create a field component
53
+
54
+ Your component receives `value`, `onChange`, and anything you pass in `props`.
55
+
56
+ ```tsx
57
+ type InputProps = {
58
+ value: string;
59
+ onChange: (value: string) => void;
60
+ };
61
+
62
+ function Input({ value, onChange, ...props }: InputProps) {
63
+ return (
64
+ <input
65
+ value={value}
66
+ onChange={(e) => onChange(e.target.value)}
67
+ className="w-full border p-2 rounded-md"
68
+ {...props}
69
+ />
70
+ );
71
+ }
72
+ ```
73
+
74
+ ### 2. Define a Zod schema with `field()`
75
+
76
+ Wrap each field with `field(zodSchema, meta)`:
77
+
78
+ ```tsx
79
+ import z from "zod";
80
+ import ZodForm, { field } from "@omar-ra7al/zod-form";
81
+
82
+ const schema = z.object({
83
+ name: field(z.string().min(1, "Name is required"), {
84
+ label: "Name",
85
+ containerClassName: "col-span-1",
86
+ component: Input,
87
+ }),
88
+ email: field(z.email(), {
89
+ label: "Email",
90
+ containerClassName: "col-span-1",
91
+ component: Input,
92
+ }),
93
+ });
94
+ ```
95
+
96
+ ### 3. Render the form
97
+
98
+ ```tsx
99
+ function MyForm() {
100
+ return (
101
+ <ZodForm
102
+ zodSchema={schema}
103
+ onSubmit={(data) => console.log(data)}
104
+ mode="onSubmit"
105
+ className="w-full max-w-2xl"
106
+ />
107
+ );
108
+ }
109
+ ```
110
+
111
+ ---
112
+
113
+ ## How it works
114
+
115
+ ```
116
+ Zod schema + field() → ZodForm → react-hook-form → Your components
117
+ ↓ ↓
118
+ validation grid layout
119
+ ```
120
+
121
+ 1. You define a `z.object()` schema using normal `z.object()`, `z.array()`, etc.
122
+ 2. Each field that needs UI config is wrapped with `field(zodSchema, meta)`.
123
+ 3. `field()` returns the same Zod schema and stores metadata separately (not on `zod.meta()`).
124
+ 4. `ZodForm` walks the schema, looks up metadata per field, and renders the matching components.
125
+ 5. On submit, validated data is passed to your `onSubmit` handler.
126
+
127
+ ---
128
+
129
+ ## `field()` usage rules
130
+
131
+ 1. **Call `field()` last** — after all Zod chaining:
132
+ - `field(z.string().min(1), { label: "Name" })` — correct
133
+ - `field(z.string(), { label: "Name" }).min(1)` — wrong (`.min()` returns a new instance, meta is lost)
134
+ 2. **Wrap anything that needs UI config** with `field()`:
135
+ - Leaf inputs: `field(z.string(), { component, label, ... })`
136
+ - Nested sections: `field(z.object({ ... }), { label: "Profile", containerClassName })`
137
+ - Arrays: `field(z.array(...), { label: "Contacts" })`
138
+ - Array item cards (optional): `field(z.object({...}), { containerClassName })`
139
+ 3. **Don't reuse one schema instance** across multiple `field()` calls (the second call overwrites metadata).
140
+
141
+ ---
142
+
143
+ ## `field()` meta options
144
+
145
+ ### Leaf fields (with `component`)
146
+
147
+
148
+ | Option | Type | Description |
149
+ | -------------------- | ---------------------------------- | -------------------------------------------------------------------------------------- |
150
+ | `label` | `string` or `{ text, className? }` | Label shown above the field |
151
+ | `component` | `React component` | **Required.** Input component to render |
152
+ | `containerClassName` | `string` | Classes on the engine's field wrapper (label + input + error). Default: `"col-span-2"` |
153
+ | `props` | `object` | Extra props spread onto your component |
154
+ | `defaultValue` | `any` | Fallback when value is empty |
155
+
156
+
157
+ `props` and `defaultValue` are fully typed based on your Zod schema output type and component props.
158
+
159
+ ### Nested objects
160
+
161
+ Use `field(z.object({ ... }), { label, containerClassName })`. Each nested object becomes a section heading with its own grid. **There is no depth limit** — objects and arrays can nest as deeply as your schema requires.
162
+
163
+
164
+ | Option | Type | Description |
165
+ | -------------------- | ---------------------------------- | ---------------------------------------------------------------------------- |
166
+ | `label` | `string` or `{ text, className? }` | Section heading |
167
+ | `containerClassName` | `string` | Classes on the section wrapper. Replaces the default section styles when set |
168
+ | `props` | `object` | Extra props spread onto the section wrapper element |
169
+
170
+
171
+ ```tsx
172
+ const schema = z.object({
173
+ profile: field(
174
+ z.object({
175
+ name: field(z.string(), { label: "Name", component: Input }),
176
+ address: field(
177
+ z.object({
178
+ street: field(z.string(), { label: "Street", component: Input }),
179
+ location: field(
180
+ z.object({
181
+ city: field(z.string(), { label: "City", component: Input }),
182
+ zip: field(z.string(), { label: "ZIP", component: Input }),
183
+ }),
184
+ { label: "Location" },
185
+ ),
186
+ }),
187
+ { label: "Address" },
188
+ ),
189
+ }),
190
+ {
191
+ label: "Profile",
192
+ containerClassName: "col-span-2 border-l-2 border-primary/20 pl-4 my-2 bg-muted/30",
193
+ },
194
+ ),
195
+ });
196
+ ```
197
+
198
+ ### Dynamic arrays
199
+
200
+ Use `field(z.array(...), { label: "..." })`. Users can add/remove items with **New item** / **×** buttons.
201
+
202
+ **Array of objects:**
203
+
204
+ ```tsx
205
+ const schema = z.object({
206
+ contacts: field(
207
+ z.array(
208
+ z.object({
209
+ phone: field(z.string(), { label: "Phone", component: Input }),
210
+ email: field(z.email(), { label: "Email", component: Input }),
211
+ }),
212
+ ),
213
+ { label: "Contacts" },
214
+ ),
215
+ });
216
+ ```
217
+
218
+ **Array of primitives** (renders a plain text input per item):
219
+
220
+ ```tsx
221
+ const schema = z.object({
222
+ tags: field(z.array(z.string()), { label: "Tags" }),
223
+ });
224
+ ```
225
+
226
+ **Arrays and objects together:**
227
+
228
+ ```tsx
229
+ const schema = z.object({
230
+ projects: field(
231
+ z.array(
232
+ z.object({
233
+ title: field(z.string(), { label: "Title", component: Input }),
234
+ tasks: field(
235
+ z.array(
236
+ z.object({
237
+ name: field(z.string(), { label: "Task", component: Input }),
238
+ }),
239
+ ),
240
+ { label: "Tasks" },
241
+ ),
242
+ }),
243
+ ),
244
+ { label: "Projects" },
245
+ ),
246
+ });
247
+ ```
248
+
249
+ #### Array-specific meta
250
+
251
+
252
+ | Level | Options |
253
+ | ----------------------------------- | -------------------------------------- |
254
+ | **Array** (`field(z.array(), {})`) | `label`, `containerClassName`, `props` |
255
+ | **Array item** (wrapped `z.object`) | `label`, `containerClassName`, `props` |
256
+
257
+
258
+ Array `containerClassName` defaults to `"grid-cols-2"` on the items grid. Array item `containerClassName` defaults to `"col-span-2"` on each item card.
259
+
260
+ ---
261
+
262
+ ## `ZodForm` props
263
+
264
+ ```tsx
265
+ <ZodForm
266
+ zodSchema={schema} // required — z.object() schema
267
+ onSubmit={(data) => {}} // required — called with validated data
268
+ onChange={(data) => {}} // optional — called on every value change
269
+ defaultValues={{}} // optional — initial / reset values
270
+ mode="onChange" // optional — react-hook-form validation mode
271
+ className="" // optional — extra classes on the form wrapper
272
+ jsonConfig={{}} // optional — JSON editor (see below)
273
+ submitConfig={{}} // optional — submit button (see below)
274
+ />
275
+ ```
276
+
277
+ ### `mode`
278
+
279
+ When validation runs. Same as [react-hook-form `mode](https://react-hook-form.com/docs/useform#mode)`:
280
+
281
+
282
+ | Value | When validation runs |
283
+ | ------------- | -------------------------------------- |
284
+ | `"onChange"` | On every change (default) |
285
+ | `"onSubmit"` | On submit only |
286
+ | `"onBlur"` | On blur |
287
+ | `"onTouched"` | After first blur, then on every change |
288
+ | `"all"` | On blur and change |
289
+
290
+
291
+ ### `jsonConfig`
292
+
293
+
294
+ | Option | Type | Default | Description |
295
+ | ---------- | --------- | ------- | ----------------------------------------- |
296
+ | `enabled` | `boolean` | `false` | Show the JSON editor panel |
297
+ | `liveData` | `boolean` | `false` | Auto-sync editor with current form values |
298
+
299
+
300
+ ```tsx
301
+ <ZodForm
302
+ zodSchema={schema}
303
+ onSubmit={handleSubmit}
304
+ jsonConfig={{ enabled: true, liveData: true }}
305
+ />
306
+ ```
307
+
308
+ ### `submitConfig`
309
+
310
+
311
+ | Option | Type | Default | Description |
312
+ | ----------------- | ----------- | ---------------- | ------------------------- |
313
+ | `disabled` | `boolean` | `false` | Disable the submit button |
314
+ | `submitLabel` | `string` | `"Save Changes"` | Button text |
315
+ | `submitIcon` | `ReactNode` | save icon | Icon next to the label |
316
+ | `submitClassName` | `string` | built-in styles | Custom button classes |
317
+
318
+
319
+ ```tsx
320
+ <ZodForm
321
+ zodSchema={schema}
322
+ onSubmit={handleSubmit}
323
+ submitConfig={{
324
+ submitLabel: "Create account",
325
+ submitClassName: "w-full bg-blue-600 text-white py-2 rounded-lg",
326
+ }}
327
+ />
328
+ ```
329
+
330
+ ---
331
+
332
+ ## Custom components
333
+
334
+ `ZodForm` always passes `**value**` and `**onChange**` to your component.
335
+
336
+ **Same prop names?** Use it directly:
337
+
338
+ ```tsx
339
+ name: field(z.string(), {
340
+ label: "Name",
341
+ component: Input,
342
+ props: { placeholder: "Enter your name" },
343
+ }),
344
+ ```
345
+
346
+ Use `props` for extras like `placeholder` or `disabled` — not to rename `value` / `onChange`.
347
+
348
+ **Different prop names?** Wrap the component and map them. Common with shadcn/ui (`checked` / `onCheckedChange`, `onValueChange`, `onSelect`, etc.):
349
+
350
+ ```tsx
351
+ function FormCheckbox({ value, onChange }: { value: boolean; onChange: (v: boolean) => void }) {
352
+ return <Checkbox checked={value} onCheckedChange={onChange} />;
353
+ }
354
+ ```
355
+
356
+ ---
357
+
358
+ ## Full example
359
+
360
+ ```tsx
361
+ import z from "zod";
362
+ import ZodForm, { field } from "@omar-ra7al/zod-form";
363
+
364
+ const Input = ({ value, onChange, ...props }: any) => (
365
+ <input
366
+ value={value}
367
+ onChange={(e) => onChange(e.target.value)}
368
+ className="w-full border p-2 rounded-md"
369
+ {...props}
370
+ />
371
+ );
372
+
373
+ const schema = z.object({
374
+ name: field(z.string().min(1), {
375
+ label: "Name",
376
+ containerClassName: "col-span-1",
377
+ component: Input,
378
+ }),
379
+ email: field(z.email(), {
380
+ label: "Email",
381
+ containerClassName: "col-span-1",
382
+ component: Input,
383
+ }),
384
+ details: field(
385
+ z.object({
386
+ phone: field(z.string(), { label: "Phone", component: Input }),
387
+ }),
388
+ {
389
+ label: "Contact details",
390
+ containerClassName: "col-span-2 border-l-2 border-primary/20 pl-4 my-2",
391
+ },
392
+ ),
393
+ password: field(z.string().min(8), {
394
+ label: "Password",
395
+ component: Input,
396
+ }),
397
+ });
398
+
399
+ export function SignUpForm() {
400
+ return (
401
+ <ZodForm
402
+ zodSchema={schema}
403
+ mode="onSubmit"
404
+ defaultValues={{ name: "", email: "", password: "" }}
405
+ onChange={(data) => console.log("changed:", data)}
406
+ onSubmit={async (data) => {
407
+ await fetch("/api/signup", {
408
+ method: "POST",
409
+ body: JSON.stringify(data),
410
+ });
411
+ }}
412
+ className="w-full max-w-2xl"
413
+ />
414
+ );
415
+ }
416
+ ```
417
+
418
+ ---
419
+
420
+ ## TypeScript
421
+
422
+ Infer form data from your schema:
423
+
424
+ ```tsx
425
+ type FormData = z.infer<typeof schema>;
426
+
427
+ <ZodForm
428
+ zodSchema={schema}
429
+ onSubmit={(data: FormData) => {
430
+ // data is fully typed
431
+ }}
432
+ />;
433
+ ```
434
+
435
+ `field()` provides autocomplete for `props` and `defaultValue` based on your component and Zod schema types.
436
+
437
+ ---
438
+
439
+ ## License
440
+
441
+ See [LICENSE](./LICENSE). Usage as a dependency is permitted. Copying, modifying, or redistributing the source is not.
442
+
443
+ ---
444
+
445
+ ## Links
446
+
447
+ - [GitHub](https://github.com/Omar-Ra7al/zodForm)
448
+ - [npm](https://www.npmjs.com/package/@omar-ra7al/zod-form)
449
+
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ 'use client';function _0x40fc(){const _0x45afa7=['zgL2','yMCTChjPBwfYEsb0zxH0lxbYAw1HCNKTzM9YzwDYB3vUzcbWEc00ihb5ltiGCM91BMrLzc1SzYbMBgv4igL0zw1ZlwnLBNrLCIbNyxaTmG','zxjYB3i','mti4nJCWnMTADxLYsW','BgfIzwW','ywjZB2X1DguGDg9WlteGCMLNAhqTmsbIzY1YzwqTntaWihrLEhqTD2HPDguGCM91BMrLzc10CI1Tzcb3ltyGAc02igzSzxGGAxrLBxmTy2vUDgvYigP1C3rPzNKTy2vUDgvY','BxqTncbZCgfJzs15ltm','wM9KtNvTyMvY','Dgv4Da','zgLZywjSzwq','C3vIBwL0','Dgv4DgfYzwe','DY00igGTna','zw5HyMXLza','zMXLEcbQDxn0Awz5lwnLBNrLCIbPDgvTCY1Jzw50zxiGz2fWltiGCM91BMrLzc1SzYa','C3rYAw5N','DY1MDwXSigGTndGGCc0ZigzVBNqTBw9UBYb0zxH0lxHZigjVCMrLCIbYB3vUzgvKlwXNigjNlwjHy2TNCM91BMqGC2HHzg93lwLUBMvYigzVy3vZoNjPBMCTmIbMB2n1CZPYAw5NlxbYAw1HCNKVmJaGB3v0BgLUzs1UB25L','ChjVChm','CMvKDwnL','BxqTC3bHy2uTnsbOlteWihCTzNvSBcbNyxaTmIbYB3vUzgvKlwXNigjVCMrLCIbIB3jKzxiTAw5WDxqGChKTC3bHy2uTnceGDgv4Dc1ZBsbMB250lw1LzgL1Bsb1ChbLCMnHC2u','zMXLEcbNyxaTmG','CMvHy3qUBwvTB19JywnOzv9Zzw50Aw5LBa','nZu4ntmXAhrJz2Pj','C3bHBG','Bg9N','mtiXmJyWmZbKCuXoq0q','yNv0Dg9U','qxbWBhKGDg8GrM9YBq','nJuXu2f0BNfn','sw52ywXPzcbku09oigzVCM1HDc4GugXLyxnLignOzwnRihLVDxiGC3LUDgf4lG','zM9Y','wM9KqM9VBgvHBG','y29UDgfPBMvYq2XHC3noyw1L','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','C3bSAxq','Aw5WDxq','u2f2zsbdAgfUz2vZ','ChGTncbWEs0YigjNlxbYAw1HCNKGDgv4Dc1WCMLTyxj5lwzVCMvNCM91BMqGDgv4Dc14CYbYB3vUzgvKlw1KigzVBNqTC2vTAwjVBgq','zw50CMLLCW','y29TCg9Uzw50','DgfYz2v0','DY1MDwXSigjVCMrLCIbWltiGCM91BMrLzc1Tza','C2HHCgu','BwfW','ntKXotq4me9WD0zmta','BgvUz3rO','zNjVBuvUDhjPzxm','C3vIBwL0tgfIzwW','y2HLy2TLza','y29SlxnWyw4TmIbIB3jKzxiTBc0YigjVCMrLCI1WCMLTyxj5lZiWihbSltqGBxKTmG','mtb0BLr1q3m','yw5PBwf0zs1ZCgLU','Dgv4Dc14CYb0zxH0lxbYAw1HCNKGDw5KzxjSAw5L','t3bLBIbku09oievKAxrVCG','C3r5Bgu','y3vYC29YlxbVAw50zxi','y3vYCMvUDa','AgvHza','CgfYC2u','DY1MDwXSigjVCMrLCIbIB3jKzxiTzgfZAgvKigjVCMrLCI1WCMLTyxj5lZmWihjVDw5KzwqTEgWGyMCTBxv0zwqVmJaGCc00ig1Ilty','ugfZDguGEw91CIbku09oigHLCMuUlI4','zM9YBq','cIaGicaGicaG','BwvZC2fNzq','C3rYAw5NAwz5','y29SlxnWyw4TmG','Dgv4Dc1ZBsbMB250lw1LzgL1BsbTyI0XlJuGyMXVy2SG','sLnptIbeyxrHifrVB2XZ','y3jLyxrLvgv4De5Vzgu','Dgv4Dc1ZBsbMB250lwjVBgqGDgv4Dc1TDxrLzc1MB3jLz3jVDw5KihvWCgvYy2fZzsb0CMfJA2LUzY10AwDODa','zwXLBwvUDa','C2v0','DMfSDwu','zMXLEcbMBgv4lwnVBcbNyxaTnIbIzY1JyxjKigjVCMrLCIbIB3jKzxiTyM9YzgvYihjVDw5KzwqTEgWGCc02ig0Tyxv0BYb3ltj4Bca','yxbWzw5Kq2HPBgq','CMvSyxrPDMuGCc01igjVCMrLCIbYB3vUzgvKlxHSia','DY1MDwXSigDYAwqGz3jPzc1JB2XZltiGAxrLBxmTC3rHCNqGz2fWltq','odqZofLrs0rKyq','mtq5nte1mMLcshbLAa','z2v0','y3jLyxrLrwXLBwvUDa','mJHZq2DvvNy','y3vYC29Ylw5VDc1HBgXVD2vK','z3jPzcbNCMLKlwnVBhmTmIbNyxaTna','BgL2zurHDge','Dgv4Dc1YzwqTnJaWihrLEhqTEhmGBxqTms41igzVBNqTBwvKAxvT','zMXLEcbQDxn0Awz5lwjLDhDLzw4GAxrLBxmTy2vUDgvY','C3vIBwL0swnVBG','DML0zs1WBhvNAw4Ty3nZlwLUAMvJDgvKlwj5lwPZ','oti1mZa0CLLQBg9O'];_0x40fc=function(){return _0x45afa7;};return _0x40fc();}(function(_0x4a8a8e,_0x2b709f){const _0x174589=_0x3073,_0x2b8d4c=_0x4a8a8e();while(!![]){try{const _0x5b679d=parseInt(_0x174589(0xd2))/0x1+parseInt(_0x174589(0xaf))/0x2*(parseInt(_0x174589(0xd8))/0x3)+-parseInt(_0x174589(0xbb))/0x4*(parseInt(_0x174589(0x94))/0x5)+parseInt(_0x174589(0xbf))/0x6*(-parseInt(_0x174589(0xb3))/0x7)+-parseInt(_0x174589(0xb0))/0x8+-parseInt(_0x174589(0x8e))/0x9+parseInt(_0x174589(0xd5))/0xa;if(_0x5b679d===_0x2b709f)break;else _0x2b8d4c['push'](_0x2b8d4c['shift']());}catch(_0x298b82){_0x2b8d4c['push'](_0x2b8d4c['shift']());}}}(_0x40fc,0xb02b3));(function(){const _0x244c3f=_0x3073;try{if(typeof document<'u'){var _0x4b5e82=document[_0x244c3f(0xb2)](_0x244c3f(0x98));_0x4b5e82[_0x244c3f(0xac)](document[_0x244c3f(0xa6)](_0x244c3f(0x83))),document[_0x244c3f(0x9b)][_0x244c3f(0xac)](_0x4b5e82);}}catch(_0x41b46d){console[_0x244c3f(0xbe)](_0x244c3f(0xba),_0x41b46d);}}());import{c as _0x390dda}from'react/compiler-runtime';import{zodResolver as _0x1cc7ca}from'@hookform/resolvers/zod';import{useEffect as _0xe5da2c,useRef as _0x3584fa,useState as _0x2aca6e}from'react';import{Controller as _0x57799a,useFieldArray as _0xba613f,useForm as _0x3182f7,useWatch as _0x78ac86}from'react-hook-form';function _0x3073(_0x5e9213,_0x5119d5){_0x5e9213=_0x5e9213-0x81;const _0x40fc6e=_0x40fc();let _0x3073db=_0x40fc6e[_0x5e9213];if(_0x3073['DruyFX']===undefined){var _0x5db179=function(_0x1d0b0d){const _0x25def6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x390dda='',_0x1cc7ca='';for(let _0xe5da2c=0x0,_0x3584fa,_0x2aca6e,_0x57799a=0x0;_0x2aca6e=_0x1d0b0d['charAt'](_0x57799a++);~_0x2aca6e&&(_0x3584fa=_0xe5da2c%0x4?_0x3584fa*0x40+_0x2aca6e:_0x2aca6e,_0xe5da2c++%0x4)?_0x390dda+=String['fromCharCode'](0xff&_0x3584fa>>(-0x2*_0xe5da2c&0x6)):0x0){_0x2aca6e=_0x25def6['indexOf'](_0x2aca6e);}for(let _0xba613f=0x0,_0x3182f7=_0x390dda['length'];_0xba613f<_0x3182f7;_0xba613f++){_0x1cc7ca+='%'+('00'+_0x390dda['charCodeAt'](_0xba613f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1cc7ca);};_0x3073['IqxceY']=_0x5db179,_0x3073['HMTaPI']={},_0x3073['DruyFX']=!![];}const _0x1e1866=_0x40fc6e[0x0],_0x47951e=_0x5e9213+_0x1e1866,_0x21894b=_0x3073['HMTaPI'][_0x47951e];return!_0x21894b?(_0x3073db=_0x3073['IqxceY'](_0x3073db),_0x3073['HMTaPI'][_0x47951e]=_0x3073db):_0x3073db=_0x21894b,_0x3073db;}import _0x35927b,{ZodArray as _0x301a81,ZodObject as _0x14dcaf}from'zod';import{Loader2 as _0xa85486,PlusIcon as _0x52e1cc,SaveIcon as _0x4d5d76,XIcon as _0x4eabab}from'lucide-react';import{Fragment as _0x4f9e57,jsx as _0x1414dc,jsxs as _0x3d0ec3}from'react/jsx-runtime';var y=new WeakMap();function b(_0x1bcab3,_0x2ff365=''){const _0x206d1d=_0x3073;return _0x1bcab3?typeof _0x1bcab3==_0x206d1d(0xcb)?_0x1bcab3:_0x1bcab3[_0x206d1d(0xc4)]:_0x2ff365;}function x(_0x462b96){if(!(!_0x462b96||typeof _0x462b96=='string'))return _0x462b96['className'];}function S(_0x190b4b){const _0x5a48e1=_0x3073;return y[_0x5a48e1(0xb1)](_0x190b4b)??{};}function C(_0x4e0330,_0x1c6bb8){const _0x19f3ec=_0x3073;return y[_0x19f3ec(0xa9)](_0x4e0330,_0x1c6bb8),_0x4e0330;}var w=({zodSchema:_0x11edd6,onSubmit:_0x1d6a57,onChange:_0x661447,defaultValues:_0x2ffb1a={},mode:_0x310021='onChange',className:_0x39b38c,jsonConfig:_0x2667d1,submitConfig:_0x48fce3})=>{const _0xefaf5b=_0x3073;let {handleSubmit:_0x544c20,control:_0x28087b,formState:{errors:_0x10920f},reset:_0x4821b3}=_0x3182f7({'resolver':_0x1cc7ca(_0x11edd6),'defaultValues':_0x2ffb1a,'mode':_0x310021}),[_0x56ecbd,_0x111853]=_0x2aca6e(!0x1),_0x466110=_0x3584fa(_0x2ffb1a);_0xe5da2c(()=>{const _0x36616a=_0x3073;JSON[_0x36616a(0xa2)](_0x466110['current'])!==JSON[_0x36616a(0xa2)](_0x2ffb1a)&&(_0x4821b3(_0x2ffb1a),_0x466110[_0x36616a(0x9a)]=_0x2ffb1a);},[_0x2ffb1a,_0x4821b3]);let _0x4ab1f6=_0x78ac86({'control':_0x28087b});_0xe5da2c(()=>{_0x661447&&_0x661447(_0x4ab1f6);},[_0x4ab1f6,_0x661447]);let _0x4b44c2=async _0x1e1707=>{_0x111853(!0x0);try{await _0x1d6a57(_0x1e1707);}finally{_0x111853(!0x1);}},_0x49238b=(_0x4f47e1,_0x1769d8='')=>Object[_0xefaf5b(0x88)](_0x4f47e1)['map'](([_0x431c40,_0x5bc9ee])=>{const _0x46a0f1=_0xefaf5b;let _0x8475c9=_0x1769d8?_0x1769d8+'.'+_0x431c40:_0x431c40,_0x239b83=S(_0x5bc9ee);if(_0x5bc9ee instanceof _0x301a81)return _0x1414dc(T,{'meta':_0x239b83,'fieldName':_0x8475c9,'fieldSchema':_0x5bc9ee,'control':_0x28087b,'renderFields':_0x49238b},_0x8475c9);if(_0x5bc9ee instanceof _0x14dcaf)return _0x3d0ec3(_0x46a0f1(0xbc),{'className':_0x239b83['containerClassName']??_0x46a0f1(0x93),'children':[_0x1414dc('h3',{'className':'text-xs\x20font-bold\x20mb-3\x20uppercase\x20tracking-wider\x20text-muted-foreground\x20'+(x(_0x239b83['label'])||''),'children':b(_0x239b83['label'],_0x431c40)}),_0x1414dc(_0x46a0f1(0xbc),{'className':_0x46a0f1(0xb5),'children':_0x49238b(_0x5bc9ee[_0x46a0f1(0x8c)],_0x8475c9)})]},_0x8475c9);let _0x394aae=_0x239b83,_0x338fd5=_0x394aae[_0x46a0f1(0x89)];if(!_0x338fd5)return null;let _0x196cf6=_0x5bc9ee instanceof _0x35927b[_0x46a0f1(0xc3)],_0x21ed47=_0x5bc9ee instanceof _0x35927b[_0x46a0f1(0x81)];return _0x3d0ec3(_0x46a0f1(0xbc),{'className':_0x394aae['containerClassName']||_0x46a0f1(0xa3),'children':[_0x1414dc(_0x46a0f1(0xc0),{'className':_0x46a0f1(0xa4)+(x(_0x394aae[_0x46a0f1(0xc0)])||''),'htmlFor':_0x8475c9,'children':b(_0x394aae['label'])}),_0x1414dc(_0x57799a,{'name':_0x8475c9,'control':_0x28087b,'render':({field:_0x443d9c})=>_0x1414dc(_0x338fd5,{..._0x443d9c,..._0x394aae[_0x46a0f1(0xcd)],'id':_0x8475c9,'name':_0x8475c9,'onChange':_0x19afa5=>{const _0x12daa0=_0x46a0f1;let _0x51a6bc=_0x19afa5?.[_0x12daa0(0x8a)]?_0x19afa5[_0x12daa0(0x8a)][_0x12daa0(0xaa)]:_0x19afa5;_0x196cf6?_0x51a6bc=_0x51a6bc===''?void 0x0:Number(_0x51a6bc):_0x21ed47&&(_0x51a6bc=_0x19afa5?.[_0x12daa0(0x8a)]?_0x19afa5[_0x12daa0(0x8a)][_0x12daa0(0x92)]:!!_0x51a6bc),_0x443d9c['onChange'](_0x51a6bc);},'value':_0x443d9c['value']??_0x394aae['defaultValue']})}),_0x1414dc(E,{'errors':_0x10920f,'name':_0x8475c9})]},_0x8475c9);});return _0x3d0ec3(_0xefaf5b(0x9f),{'className':_0xefaf5b(0xab)+_0x39b38c,'onSubmit':_0x544c20(_0x4b44c2),'children':[_0x2667d1?.[_0xefaf5b(0xc9)]&&_0x1414dc(D,{'control':_0x28087b,'onApply':_0x4b9198=>_0x4821b3(_0x4b9198),'liveJsonData':_0x2667d1?.[_0xefaf5b(0xb6)]??!0x1}),_0x1414dc(_0xefaf5b(0xbc),{'className':_0xefaf5b(0xae),'children':_0x49238b(_0x11edd6['shape'])}),_0x1414dc(_0xefaf5b(0xd6),{'type':_0xefaf5b(0xc6),'disabled':_0x48fce3?.[_0xefaf5b(0xc5)]||_0x56ecbd,'className':_0xefaf5b(0xca)+(_0x48fce3?.[_0xefaf5b(0xc5)]?_0xefaf5b(0xb4):_0xefaf5b(0x99))+_0xefaf5b(0xa0)+(_0x48fce3?.['submitClassName']||_0xefaf5b(0xcf)),'children':_0x56ecbd?_0x1414dc(_0xa85486,{'className':_0xefaf5b(0x95)}):_0x3d0ec3(_0x4f9e57,{'children':[_0x48fce3?.[_0xefaf5b(0x91)]||_0xefaf5b(0x86),_0x48fce3?.[_0xefaf5b(0xb9)]||_0x1414dc(_0x4d5d76,{'className':_0xefaf5b(0xc8)})]})})]});},T=_0x53a211=>{const _0xb93639=_0x3073;let _0x3ac8b6=_0x390dda(0x2e),{fieldName:_0x476baf,fieldSchema:_0x524a22,control:_0x3e65e8,renderFields:_0x2b17c9}=_0x53a211,_0x4b4b85;_0x3ac8b6[0x0]!==_0x3e65e8||_0x3ac8b6[0x1]!==_0x476baf?(_0x4b4b85={'control':_0x3e65e8,'name':_0x476baf},_0x3ac8b6[0x0]=_0x3e65e8,_0x3ac8b6[0x1]=_0x476baf,_0x3ac8b6[0x2]=_0x4b4b85):_0x4b4b85=_0x3ac8b6[0x2];let {fields:_0x439098,append:_0x180bd8,remove:_0x2bc429}=_0xba613f(_0x4b4b85),_0xd63e3c=_0x524a22[_0xb93639(0xa8)],_0x55db51;_0x3ac8b6[0x3]===_0xd63e3c?_0x55db51=_0x3ac8b6[0x4]:(_0x55db51=S(_0xd63e3c),_0x3ac8b6[0x3]=_0xd63e3c,_0x3ac8b6[0x4]=_0x55db51);let _0x5b76ac=_0x55db51,_0x40f19b=S(_0x524a22),_0x32eae3=_0x524a22[_0xb93639(0xa8)],_0x2a4dec=_0x32eae3 instanceof _0x14dcaf,_0xfb1e14=_0x2a4dec?_0x32eae3[_0xb93639(0x8c)]:null,_0x5a3ea6;_0x3ac8b6[0x5]!==_0x180bd8||_0x3ac8b6[0x6]!==_0x2a4dec||_0x3ac8b6[0x7]!==_0xfb1e14?(_0x5a3ea6=()=>_0x180bd8(_0x2a4dec?Object[_0xb93639(0x90)](Object['keys'](_0xfb1e14)[_0xb93639(0x8d)](O)):'',{'shouldFocus':!0x1}),_0x3ac8b6[0x5]=_0x180bd8,_0x3ac8b6[0x6]=_0x2a4dec,_0x3ac8b6[0x7]=_0xfb1e14,_0x3ac8b6[0x8]=_0x5a3ea6):_0x5a3ea6=_0x3ac8b6[0x8];let _0x5b65b0=_0x5a3ea6,_0x56a83e=_0x3584fa(!0x1),_0x4a6239,_0x1fd1a3;_0x3ac8b6[0x9]!==_0x439098['length']||_0x3ac8b6[0xa]!==_0x5b65b0?(_0x4a6239=()=>{const _0x14a1cc=_0xb93639;_0x56a83e[_0x14a1cc(0x9a)]||_0x439098[_0x14a1cc(0x8f)]===0x0&&(_0x5b65b0(),_0x56a83e[_0x14a1cc(0x9a)]=!0x0);},_0x1fd1a3=[_0x439098['length'],_0x5b65b0],_0x3ac8b6[0x9]=_0x439098[_0xb93639(0x8f)],_0x3ac8b6[0xa]=_0x5b65b0,_0x3ac8b6[0xb]=_0x4a6239,_0x3ac8b6[0xc]=_0x1fd1a3):(_0x4a6239=_0x3ac8b6[0xb],_0x1fd1a3=_0x3ac8b6[0xc]),_0xe5da2c(_0x4a6239,_0x1fd1a3);let _0x372024='text-sm\x20font-bold\x20uppercase\x20tracking-wider\x20'+(x(_0x40f19b['label'])||''),_0x14f96f=b(_0x40f19b['label'],_0x476baf),_0x55f52c;_0x3ac8b6[0xd]!==_0x372024||_0x3ac8b6[0xe]!==_0x14f96f?(_0x55f52c=_0x1414dc('h3',{'className':_0x372024,'children':_0x14f96f}),_0x3ac8b6[0xd]=_0x372024,_0x3ac8b6[0xe]=_0x14f96f,_0x3ac8b6[0xf]=_0x55f52c):_0x55f52c=_0x3ac8b6[0xf];let _0x2121d8;_0x3ac8b6[0x10]===Symbol['for'](_0xb93639(0xd1))?(_0x2121d8=_0x1414dc(_0x52e1cc,{'className':_0xb93639(0xc8)}),_0x3ac8b6[0x10]=_0x2121d8):_0x2121d8=_0x3ac8b6[0x10];let _0x1c06ea;_0x3ac8b6[0x11]===_0x5b65b0?_0x1c06ea=_0x3ac8b6[0x12]:(_0x1c06ea=_0x3d0ec3(_0xb93639(0xd6),{'type':'button','onClick':_0x5b65b0,'className':_0xb93639(0xbd),'children':['New\x20item\x20',_0x2121d8]}),_0x3ac8b6[0x11]=_0x5b65b0,_0x3ac8b6[0x12]=_0x1c06ea);let _0x13f86f;_0x3ac8b6[0x13]!==_0x55f52c||_0x3ac8b6[0x14]!==_0x1c06ea?(_0x13f86f=_0x3d0ec3('div',{'className':_0xb93639(0xb8),'children':[_0x55f52c,_0x1c06ea]}),_0x3ac8b6[0x13]=_0x55f52c,_0x3ac8b6[0x14]=_0x1c06ea,_0x3ac8b6[0x15]=_0x13f86f):_0x13f86f=_0x3ac8b6[0x15];let _0x5b39d5='grid\x20grid-cols-1\x20gap-4\x20'+(_0x40f19b['containerClassName']||'grid-cols-2'),_0x49feea;if(_0x3ac8b6[0x16]!==_0x3e65e8||_0x3ac8b6[0x17]!==_0x5b76ac||_0x3ac8b6[0x18]!==_0x476baf||_0x3ac8b6[0x19]!==_0x439098||_0x3ac8b6[0x1a]!==_0x2a4dec||_0x3ac8b6[0x1b]!==_0xfb1e14||_0x3ac8b6[0x1c]!==_0x2bc429||_0x3ac8b6[0x1d]!==_0x2b17c9){let _0x32b239;_0x3ac8b6[0x1f]!==_0x3e65e8||_0x3ac8b6[0x20]!==_0x5b76ac||_0x3ac8b6[0x21]!==_0x476baf||_0x3ac8b6[0x22]!==_0x439098[_0xb93639(0x8f)]||_0x3ac8b6[0x23]!==_0x2a4dec||_0x3ac8b6[0x24]!==_0xfb1e14||_0x3ac8b6[0x25]!==_0x2bc429||_0x3ac8b6[0x26]!==_0x2b17c9?(_0x32b239=(_0xfb57d9,_0x249364)=>_0x3d0ec3(_0xb93639(0xbc),{'className':_0xb93639(0xad)+(_0x5b76ac[_0xb93639(0x82)]||'col-span-2'),'children':[_0x439098[_0xb93639(0x8f)]>0x1&&_0x1414dc('button',{'className':_0xb93639(0xc1),'type':_0xb93639(0xd6),'onClick':()=>_0x2bc429(_0x249364),'children':_0x1414dc(_0x4eabab,{'className':_0xb93639(0xc8)})}),_0x2a4dec?_0x1414dc(_0xb93639(0xbc),{'className':_0xb93639(0xb5),'children':_0x2b17c9(_0xfb1e14,_0x476baf+'.'+_0x249364)}):_0x1414dc(_0x57799a,{'name':_0x476baf+'.'+_0x249364,'control':_0x3e65e8,'render':k})]},_0xfb57d9['id']),_0x3ac8b6[0x1f]=_0x3e65e8,_0x3ac8b6[0x20]=_0x5b76ac,_0x3ac8b6[0x21]=_0x476baf,_0x3ac8b6[0x22]=_0x439098[_0xb93639(0x8f)],_0x3ac8b6[0x23]=_0x2a4dec,_0x3ac8b6[0x24]=_0xfb1e14,_0x3ac8b6[0x25]=_0x2bc429,_0x3ac8b6[0x26]=_0x2b17c9,_0x3ac8b6[0x27]=_0x32b239):_0x32b239=_0x3ac8b6[0x27],_0x49feea=_0x439098[_0xb93639(0x8d)](_0x32b239),_0x3ac8b6[0x16]=_0x3e65e8,_0x3ac8b6[0x17]=_0x5b76ac,_0x3ac8b6[0x18]=_0x476baf,_0x3ac8b6[0x19]=_0x439098,_0x3ac8b6[0x1a]=_0x2a4dec,_0x3ac8b6[0x1b]=_0xfb1e14,_0x3ac8b6[0x1c]=_0x2bc429,_0x3ac8b6[0x1d]=_0x2b17c9,_0x3ac8b6[0x1e]=_0x49feea;}else _0x49feea=_0x3ac8b6[0x1e];let _0xf6572e;_0x3ac8b6[0x28]!==_0x5b39d5||_0x3ac8b6[0x29]!==_0x49feea?(_0xf6572e=_0x1414dc(_0xb93639(0xbc),{'className':_0x5b39d5,'children':_0x49feea}),_0x3ac8b6[0x28]=_0x5b39d5,_0x3ac8b6[0x29]=_0x49feea,_0x3ac8b6[0x2a]=_0xf6572e):_0xf6572e=_0x3ac8b6[0x2a];let _0x306730;return _0x3ac8b6[0x2b]!==_0x13f86f||_0x3ac8b6[0x2c]!==_0xf6572e?(_0x306730=_0x3d0ec3(_0xb93639(0xbc),{'className':'col-span-2\x20space-y-4\x20border-t\x20border-border\x20pt-6\x20mt-4','children':[_0x13f86f,_0xf6572e]}),_0x3ac8b6[0x2b]=_0x13f86f,_0x3ac8b6[0x2c]=_0xf6572e,_0x3ac8b6[0x2d]=_0x306730):_0x306730=_0x3ac8b6[0x2d],_0x306730;},E=_0x26bdf2=>{const _0x457fce=_0x3073;let _0x3fe26a=_0x390dda(0x5),{errors:_0x580990,name:_0x39953d}=_0x26bdf2,_0x3cb728;_0x3fe26a[0x0]!==_0x580990||_0x3fe26a[0x1]!==_0x39953d?(_0x3cb728=_0x39953d[_0x457fce(0x84)]('.')[_0x457fce(0xce)](A,_0x580990),_0x3fe26a[0x0]=_0x580990,_0x3fe26a[0x1]=_0x39953d,_0x3fe26a[0x2]=_0x3cb728):_0x3cb728=_0x3fe26a[0x2];let _0x4eb46c=_0x3cb728;if(!_0x4eb46c)return null;let _0x2de135=_0x4eb46c[_0x457fce(0xa1)]||'Invalid\x20field',_0x3c0455;return _0x3fe26a[0x3]===_0x2de135?_0x3c0455=_0x3fe26a[0x4]:(_0x3c0455=_0x1414dc(_0x457fce(0xd3),{'className':_0x457fce(0xb7),'children':_0x2de135}),_0x3fe26a[0x3]=_0x2de135,_0x3fe26a[0x4]=_0x3c0455),_0x3c0455;},D=_0x4458f0=>{const _0x141265=_0x3073;let _0x1940a9=_0x390dda(0x1c),{control:_0x38a4ac,onApply:_0x2c5b41,liveJsonData:_0x4a9a09}=_0x4458f0,_0x45ed0f=_0x4a9a09===void 0x0?!0x1:_0x4a9a09,_0x61f121;_0x1940a9[0x0]===_0x38a4ac?_0x61f121=_0x1940a9[0x1]:(_0x61f121={'control':_0x38a4ac},_0x1940a9[0x0]=_0x38a4ac,_0x1940a9[0x1]=_0x61f121);let _0x373a8a=_0x78ac86(_0x61f121),[_0x34b8d9,_0x3cb0c1]=_0x2aca6e(''),[_0x517e6c,_0x2cd9a5]=_0x2aca6e(!0x1),_0x5ef54e;_0x1940a9[0x2]!==_0x34b8d9||_0x1940a9[0x3]!==_0x2c5b41?(_0x5ef54e=()=>{const _0x3c17d5=_0x3073;try{_0x2c5b41(JSON[_0x3c17d5(0x9c)](_0x34b8d9)),_0x2cd9a5(!0x1);}catch(_0x159cf1){console[_0x3c17d5(0xd4)](_0x159cf1),alert(_0x3c17d5(0xd9));}},_0x1940a9[0x2]=_0x34b8d9,_0x1940a9[0x3]=_0x2c5b41,_0x1940a9[0x4]=_0x5ef54e):_0x5ef54e=_0x1940a9[0x4];let _0x1786c5=_0x5ef54e,_0x5bd7e4;_0x1940a9[0x5]===_0x373a8a?_0x5bd7e4=_0x1940a9[0x6]:(_0x5bd7e4=()=>{_0x3cb0c1(JSON['stringify'](_0x373a8a,j,0x2));},_0x1940a9[0x5]=_0x373a8a,_0x1940a9[0x6]=_0x5bd7e4);let _0x1225c6=_0x5bd7e4,_0x3b06d3;_0x1940a9[0x7]!==_0x1225c6||_0x1940a9[0x8]!==_0x45ed0f?(_0x3b06d3=()=>{if(!_0x45ed0f)return;let _0x93e71=setTimeout(()=>{_0x1225c6();},0xa);return()=>clearTimeout(_0x93e71);},_0x1940a9[0x7]=_0x1225c6,_0x1940a9[0x8]=_0x45ed0f,_0x1940a9[0x9]=_0x3b06d3):_0x3b06d3=_0x1940a9[0x9];let _0x27a0a7;_0x1940a9[0xa]!==_0x1225c6||_0x1940a9[0xb]!==_0x45ed0f||_0x1940a9[0xc]!==_0x373a8a?(_0x27a0a7=[_0x373a8a,_0x1225c6,_0x45ed0f],_0x1940a9[0xa]=_0x1225c6,_0x1940a9[0xb]=_0x45ed0f,_0x1940a9[0xc]=_0x373a8a,_0x1940a9[0xd]=_0x27a0a7):_0x27a0a7=_0x1940a9[0xd],_0xe5da2c(_0x3b06d3,_0x27a0a7);let _0x2a0450;_0x1940a9[0xe]===Symbol[_0x141265(0xda)]('react.memo_cache_sentinel')?(_0x2a0450=_0x1414dc('h4',{'className':_0x141265(0xa7),'children':_0x141265(0xa5)}),_0x1940a9[0xe]=_0x2a0450):_0x2a0450=_0x1940a9[0xe];let _0x4161a4;_0x1940a9[0xf]===_0x517e6c?_0x4161a4=_0x1940a9[0x10]:(_0x4161a4=()=>_0x2cd9a5(!_0x517e6c),_0x1940a9[0xf]=_0x517e6c,_0x1940a9[0x10]=_0x4161a4);let _0x16051c=_0x517e6c?'Close\x20Editor':_0x141265(0x97),_0x537766;_0x1940a9[0x11]!==_0x4161a4||_0x1940a9[0x12]!==_0x16051c?(_0x537766=_0x3d0ec3(_0x141265(0xbc),{'className':_0x141265(0xb8),'children':[_0x2a0450,_0x1414dc(_0x141265(0xd6),{'type':_0x141265(0xd6),'onClick':_0x4161a4,'className':_0x141265(0x96),'children':_0x16051c})]}),_0x1940a9[0x11]=_0x4161a4,_0x1940a9[0x12]=_0x16051c,_0x1940a9[0x13]=_0x537766):_0x537766=_0x1940a9[0x13];let _0x5bf199;_0x1940a9[0x14]!==_0x1786c5||_0x1940a9[0x15]!==_0x1225c6||_0x1940a9[0x16]!==_0x517e6c||_0x1940a9[0x17]!==_0x34b8d9?(_0x5bf199=_0x517e6c&&_0x3d0ec3('div',{'className':_0x141265(0xc2),'children':[_0x1414dc(_0x141265(0xc7),{'value':_0x34b8d9,'onChange':_0x362410=>_0x3cb0c1(_0x362410[_0x141265(0x8a)][_0x141265(0xaa)]),'placeholder':_0x141265(0x9e),'className':_0x141265(0xcc)}),_0x3d0ec3('div',{'className':_0x141265(0xd0),'children':[_0x1414dc(_0x141265(0xd6),{'type':_0x141265(0xd6),'onClick':_0x1786c5,'className':_0x141265(0x87),'children':_0x141265(0xd7)}),_0x1414dc(_0x141265(0xd6),{'type':_0x141265(0xd6),'onClick':_0x1225c6,'className':'px-4\x20py-2\x20border\x20bg-background\x20text-xs\x20rounded-md\x20font-semibold','children':'Get\x20Current\x20Form\x20Data'})]})]}),_0x1940a9[0x14]=_0x1786c5,_0x1940a9[0x15]=_0x1225c6,_0x1940a9[0x16]=_0x517e6c,_0x1940a9[0x17]=_0x34b8d9,_0x1940a9[0x18]=_0x5bf199):_0x5bf199=_0x1940a9[0x18];let _0x58410d;return _0x1940a9[0x19]!==_0x537766||_0x1940a9[0x1a]!==_0x5bf199?(_0x58410d=_0x3d0ec3(_0x141265(0xbc),{'className':_0x141265(0x9d),'children':[_0x537766,_0x5bf199]}),_0x1940a9[0x19]=_0x537766,_0x1940a9[0x1a]=_0x5bf199,_0x1940a9[0x1b]=_0x58410d):_0x58410d=_0x1940a9[0x1b],_0x58410d;};function O(_0x16f3d1){return[_0x16f3d1,''];}function k(_0x1190b1){const _0xd2e5c4=_0x3073;let {field:_0x417a75}=_0x1190b1;return _0x1414dc(_0xd2e5c4(0x85),{..._0x417a75,'className':_0xd2e5c4(0x8b)});}function A(_0x1a5ff2,_0x2d0b1e){return _0x1a5ff2?.[_0x2d0b1e];}function j(_0x19a336,_0x276ac4){return _0x276ac4===''?null:_0x276ac4;}export{w as ZodForm,w as default,C as field,S as getFieldMeta};
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+ import { ZodObject, ZodRawShape } from 'zod';
3
+ interface ZodFormProps<T extends Record<string, any>> {
4
+ zodSchema: ZodObject<ZodRawShape>;
5
+ defaultValues?: Partial<T>;
6
+ onSubmit: (data: T) => void;
7
+ onChange?: (data: T) => void;
8
+ className?: string;
9
+ mode?: "onChange" | "onSubmit" | "onBlur" | "onTouched" | "all";
10
+ jsonConfig?: {
11
+ enabled?: boolean;
12
+ liveData?: boolean;
13
+ };
14
+ submitConfig?: {
15
+ disabled?: boolean;
16
+ submitLabel?: string;
17
+ submitIcon?: ReactNode;
18
+ submitClassName?: string;
19
+ };
20
+ }
21
+ declare const ZodForm: <T extends Record<string, any>>({ zodSchema, onSubmit, onChange, defaultValues, mode, className, jsonConfig, submitConfig, }: ZodFormProps<T>) => import("react").JSX.Element;
22
+ export default ZodForm;
@@ -0,0 +1,9 @@
1
+ import { ComponentType } from 'react';
2
+ import { ZodArray, ZodObject, ZodTypeAny } from 'zod';
3
+ import { ArrayFieldMeta, LabelMeta, LeafFieldMeta, SectionFieldMeta } from './types';
4
+ export declare function getLabelText(label?: LabelMeta, fallback?: string): string;
5
+ export declare function getLabelClassName(label?: LabelMeta): string | undefined;
6
+ export declare function getFieldMeta(schema: object): LeafFieldMeta | SectionFieldMeta | ArrayFieldMeta;
7
+ export declare function field<TSchema extends ZodTypeAny, TComponent extends ComponentType<any>>(schema: TSchema, meta: LeafFieldMeta<TSchema, TComponent>): TSchema;
8
+ export declare function field<TSchema extends ZodObject>(schema: TSchema, meta: SectionFieldMeta): TSchema;
9
+ export declare function field<TSchema extends ZodArray>(schema: TSchema, meta: ArrayFieldMeta): TSchema;
@@ -0,0 +1,2 @@
1
+ export { field, getFieldMeta } from './field.js';
2
+ export { default, default as ZodForm } from './engine.js';
@@ -0,0 +1,24 @@
1
+ import { ComponentType } from 'react';
2
+ import { z } from 'zod';
3
+ export type LabelMeta = string | {
4
+ text: string;
5
+ className?: string;
6
+ };
7
+ type ComponentProps<C extends ComponentType<any>> = Omit<React.ComponentProps<C>, "value" | "onChange" | "name" | "id">;
8
+ export type LeafFieldMeta<TSchema extends z.ZodTypeAny = z.ZodTypeAny, TComponent extends ComponentType<any> = ComponentType<any>> = {
9
+ label?: LabelMeta;
10
+ component: TComponent;
11
+ defaultValue?: z.infer<TSchema>;
12
+ containerClassName?: string;
13
+ props?: ComponentProps<TComponent>;
14
+ };
15
+ export type SectionFieldMeta = {
16
+ label?: LabelMeta;
17
+ containerClassName?: string;
18
+ };
19
+ export type ArrayFieldMeta = {
20
+ label?: LabelMeta;
21
+ containerClassName?: string;
22
+ };
23
+ export type FieldMeta = LeafFieldMeta | SectionFieldMeta | ArrayFieldMeta;
24
+ export {};
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "zod-form-engine",
3
+ "private": false,
4
+ "version": "0.0.3",
5
+ "type": "module",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Omar-Ra7al/zod-form-engine.git"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "scripts": {
15
+ "dev": "vite",
16
+ "build": "tsc -b && vite build && npm run obfuscate",
17
+ "build:watch": "vite build --watch",
18
+ "obfuscate": "node scripts/obfuscate.js",
19
+ "lint": "eslint .",
20
+ "preview": "vite preview",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/types/index.d.ts",
29
+ "import": "./dist/index.js",
30
+ "default": "./dist/index.js"
31
+ }
32
+ },
33
+ "peerDependencies": {
34
+ "@hookform/resolvers": "^5.0.0",
35
+ "lucide-react": "^1.20.0",
36
+ "react": "^19.0.0",
37
+ "react-dom": "^19.0.0",
38
+ "react-hook-form": "^7.0.0",
39
+ "zod": "^4.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "@babel/core": "^7.29.0",
43
+ "@eslint/js": "^10.0.1",
44
+ "@rolldown/plugin-babel": "^0.2.3",
45
+ "@tailwindcss/vite": "^4.3.1",
46
+ "@types/babel__core": "^7.20.5",
47
+ "@types/node": "^24.12.3",
48
+ "@types/react": "^19.2.14",
49
+ "@types/react-dom": "^19.2.3",
50
+ "@vitejs/plugin-react": "^6.0.1",
51
+ "babel-plugin-react-compiler": "^1.0.0",
52
+ "eslint": "^10.3.0",
53
+ "eslint-plugin-react-hooks": "^7.1.1",
54
+ "eslint-plugin-react-refresh": "^0.5.2",
55
+ "globals": "^17.6.0",
56
+ "javascript-obfuscator": "^5.4.3",
57
+ "tailwindcss": "^4.3.1",
58
+ "typescript": "~6.0.2",
59
+ "typescript-eslint": "^8.59.2",
60
+ "vite": "^8.0.12",
61
+ "vite-plugin-dts": "^5.0.2"
62
+ },
63
+ "dependencies": {
64
+ "vite-plugin-css-injected-by-js": "^5.0.1"
65
+ }
66
+ }