@macrulez/vue-form-schema 0.1.7 → 0.2.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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +461 -180
  3. package/dist/MaskEngine-BEXwX4BK.js +144 -0
  4. package/dist/MaskEngine-CPr-fSPy.cjs +1 -0
  5. package/dist/ValidationEngine-BC4U1ef1.js +135 -0
  6. package/dist/ValidationEngine-Diz-qTFs.cjs +1 -0
  7. package/dist/_plugin-vue_export-helper-BHFhmbuH.cjs +1 -0
  8. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  9. package/dist/core/ConditionEvaluator.d.ts.map +1 -1
  10. package/dist/core/MaskEngine.d.ts.map +1 -1
  11. package/dist/core/ValidationEngine.d.ts +13 -0
  12. package/dist/core/ValidationEngine.d.ts.map +1 -1
  13. package/dist/core/formRegistry.d.ts +33 -0
  14. package/dist/core/formRegistry.d.ts.map +1 -0
  15. package/dist/core/inferTypes.d.ts.map +1 -1
  16. package/dist/core/schemaUtils.d.ts +38 -0
  17. package/dist/core/schemaUtils.d.ts.map +1 -1
  18. package/dist/core/serverErrors.d.ts +69 -0
  19. package/dist/core/serverErrors.d.ts.map +1 -0
  20. package/dist/core/types.d.ts +22 -2
  21. package/dist/core/types.d.ts.map +1 -1
  22. package/dist/core/useForm.d.ts +4 -1
  23. package/dist/core/useForm.d.ts.map +1 -1
  24. package/dist/core/useMultiStepForm.d.ts.map +1 -1
  25. package/dist/devtools/index.d.ts +26 -0
  26. package/dist/devtools/index.d.ts.map +1 -0
  27. package/dist/devtools.cjs +1 -0
  28. package/dist/devtools.d.ts +6 -0
  29. package/dist/devtools.js +93 -0
  30. package/dist/formRegistry-Bv1eaWQ-.js +31 -0
  31. package/dist/formRegistry-DaDmXyYY.cjs +1 -0
  32. package/dist/index.cjs +1 -1
  33. package/dist/index.d.ts +5 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +392 -359
  36. package/dist/openapi.cjs +1 -0
  37. package/dist/openapi.d.ts +202 -0
  38. package/dist/openapi.js +118 -0
  39. package/dist/parsers/json.d.ts.map +1 -1
  40. package/dist/parsers/openapi.d.ts +139 -0
  41. package/dist/parsers/openapi.d.ts.map +1 -0
  42. package/dist/parsers/valibot.d.ts +13 -4
  43. package/dist/parsers/valibot.d.ts.map +1 -1
  44. package/dist/parsers/yup.d.ts +10 -4
  45. package/dist/parsers/yup.d.ts.map +1 -1
  46. package/dist/parsers/zod.d.ts +18 -4
  47. package/dist/parsers/zod.d.ts.map +1 -1
  48. package/dist/schemaUtils-Cc7CwGXB.cjs +1 -0
  49. package/dist/schemaUtils-Cvlsk24U.js +337 -0
  50. package/dist/style.css +1 -0
  51. package/dist/ui/index.d.ts +1 -0
  52. package/dist/ui/index.d.ts.map +1 -1
  53. package/dist/ui/naive/index.d.ts +11 -0
  54. package/dist/ui/naive/index.d.ts.map +1 -0
  55. package/dist/ui/primevue/index.d.ts +11 -0
  56. package/dist/ui/primevue/index.d.ts.map +1 -0
  57. package/dist/ui/shadcn/index.d.ts +11 -0
  58. package/dist/ui/shadcn/index.d.ts.map +1 -0
  59. package/dist/ui/tailwind/index.d.ts +11 -0
  60. package/dist/ui/tailwind/index.d.ts.map +1 -0
  61. package/dist/ui-naive.cjs +1 -0
  62. package/dist/ui-naive.d.ts +411 -0
  63. package/dist/ui-naive.js +667 -0
  64. package/dist/ui-primevue.cjs +1 -0
  65. package/dist/ui-primevue.d.ts +411 -0
  66. package/dist/ui-primevue.js +651 -0
  67. package/dist/ui-shadcn.cjs +1 -0
  68. package/dist/ui-shadcn.d.ts +411 -0
  69. package/dist/ui-shadcn.js +650 -0
  70. package/dist/ui-tailwind.cjs +1 -0
  71. package/dist/ui-tailwind.d.ts +411 -0
  72. package/dist/ui-tailwind.js +669 -0
  73. package/dist/ui.cjs +1 -1
  74. package/dist/ui.d.ts +61 -10
  75. package/dist/ui.js +434 -299
  76. package/dist/valibot.cjs +1 -1
  77. package/dist/valibot.d.ts +35 -4
  78. package/dist/valibot.js +47 -20
  79. package/dist/yup.cjs +1 -1
  80. package/dist/yup.d.ts +33 -5
  81. package/dist/yup.js +16 -15
  82. package/dist/zod.cjs +1 -1
  83. package/dist/zod.d.ts +41 -5
  84. package/dist/zod.js +58 -28
  85. package/package.json +99 -25
  86. package/dist/MaskEngine-BqJQYybS.js +0 -233
  87. package/dist/MaskEngine-BwAs2Zb0.cjs +0 -1
  88. package/dist/__tests__/ConditionEvaluator.test.d.ts +0 -2
  89. package/dist/__tests__/ConditionEvaluator.test.d.ts.map +0 -1
  90. package/dist/__tests__/MaskEngine.test.d.ts +0 -2
  91. package/dist/__tests__/MaskEngine.test.d.ts.map +0 -1
  92. package/dist/__tests__/ValidationEngine.test.d.ts +0 -2
  93. package/dist/__tests__/ValidationEngine.test.d.ts.map +0 -1
  94. package/dist/__tests__/parsers.test.d.ts +0 -2
  95. package/dist/__tests__/parsers.test.d.ts.map +0 -1
  96. package/dist/__tests__/phase3.test.d.ts +0 -2
  97. package/dist/__tests__/phase3.test.d.ts.map +0 -1
  98. package/dist/__tests__/phase4.test.d.ts +0 -2
  99. package/dist/__tests__/phase4.test.d.ts.map +0 -1
  100. package/dist/__tests__/useFieldArray.test.d.ts +0 -2
  101. package/dist/__tests__/useFieldArray.test.d.ts.map +0 -1
  102. package/dist/__tests__/useForm.test.d.ts +0 -2
  103. package/dist/__tests__/useForm.test.d.ts.map +0 -1
  104. package/dist/__tests__/useMultiStepForm.test.d.ts +0 -2
  105. package/dist/__tests__/useMultiStepForm.test.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,56 +1,106 @@
1
1
  {
2
2
  "name": "@macrulez/vue-form-schema",
3
- "version": "0.1.7",
4
- "description": "Reactive forms from JSON/Zod/Yup/Valibot schema with validation, masking and conditional UI for Vue 3",
3
+ "version": "0.2.0",
4
+ "description": "Reactive Vue 3 forms generated from JSON, Zod, Yup or Valibot schemas, with validation, input masking, conditional UI and SSR support.",
5
+ "author": "macrulez <macrulezru@gmail.com> (https://macrulez.ru/en)",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/macrulezru/vue-form-schema#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/macrulezru/vue-form-schema.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/macrulezru/vue-form-schema/issues"
14
+ },
5
15
  "type": "module",
16
+ "workspaces": [
17
+ "packages/*"
18
+ ],
6
19
  "main": "./dist/index.cjs",
7
20
  "module": "./dist/index.js",
8
21
  "types": "./dist/index.d.ts",
9
22
  "exports": {
10
23
  ".": {
24
+ "types": "./dist/index.d.ts",
11
25
  "import": "./dist/index.js",
12
- "require": "./dist/index.cjs",
13
- "types": "./dist/index.d.ts"
26
+ "require": "./dist/index.cjs"
14
27
  },
15
28
  "./zod": {
29
+ "types": "./dist/zod.d.ts",
16
30
  "import": "./dist/zod.js",
17
- "require": "./dist/zod.cjs",
18
- "types": "./dist/zod.d.ts"
31
+ "require": "./dist/zod.cjs"
19
32
  },
20
33
  "./yup": {
34
+ "types": "./dist/yup.d.ts",
21
35
  "import": "./dist/yup.js",
22
- "require": "./dist/yup.cjs",
23
- "types": "./dist/yup.d.ts"
36
+ "require": "./dist/yup.cjs"
24
37
  },
25
38
  "./valibot": {
39
+ "types": "./dist/valibot.d.ts",
26
40
  "import": "./dist/valibot.js",
27
- "require": "./dist/valibot.cjs",
28
- "types": "./dist/valibot.d.ts"
41
+ "require": "./dist/valibot.cjs"
42
+ },
43
+ "./openapi": {
44
+ "types": "./dist/openapi.d.ts",
45
+ "import": "./dist/openapi.js",
46
+ "require": "./dist/openapi.cjs"
29
47
  },
30
48
  "./ui": {
49
+ "types": "./dist/ui.d.ts",
31
50
  "import": "./dist/ui.js",
32
- "require": "./dist/ui.cjs",
33
- "types": "./dist/ui.d.ts"
51
+ "require": "./dist/ui.cjs"
34
52
  },
35
53
  "./ui/tailwind": {
54
+ "types": "./dist/ui-tailwind.d.ts",
36
55
  "import": "./dist/ui-tailwind.js",
37
- "require": "./dist/ui-tailwind.cjs",
38
- "types": "./dist/ui-tailwind.d.ts"
56
+ "require": "./dist/ui-tailwind.cjs"
57
+ },
58
+ "./ui/shadcn": {
59
+ "types": "./dist/ui-shadcn.d.ts",
60
+ "import": "./dist/ui-shadcn.js",
61
+ "require": "./dist/ui-shadcn.cjs"
62
+ },
63
+ "./ui/primevue": {
64
+ "types": "./dist/ui-primevue.d.ts",
65
+ "import": "./dist/ui-primevue.js",
66
+ "require": "./dist/ui-primevue.cjs"
67
+ },
68
+ "./ui/naive": {
69
+ "types": "./dist/ui-naive.d.ts",
70
+ "import": "./dist/ui-naive.js",
71
+ "require": "./dist/ui-naive.cjs"
72
+ },
73
+ "./devtools": {
74
+ "types": "./dist/devtools.d.ts",
75
+ "import": "./dist/devtools.js",
76
+ "require": "./dist/devtools.cjs"
39
77
  }
40
78
  },
41
79
  "files": [
42
- "dist"
80
+ "dist",
81
+ "README.md",
82
+ "LICENSE"
43
83
  ],
84
+ "engines": {
85
+ "node": ">=20.12"
86
+ },
44
87
  "publishConfig": {
45
88
  "access": "public"
46
89
  },
47
90
  "scripts": {
91
+ "prepublishOnly": "npm run typecheck && npm run lint && npm run format:check && npm run test:run && npm run build",
48
92
  "dev": "vite",
49
93
  "build": "vite build && tsc -p tsconfig.build.json",
50
94
  "demo": "vite --config vite.demo.config.ts",
51
95
  "test": "vitest --config vitest.config.ts",
96
+ "test:run": "vitest --config vitest.config.ts --run",
52
97
  "test:coverage": "vitest --config vitest.config.ts --coverage",
53
- "typecheck": "tsc --noEmit"
98
+ "typecheck": "vue-tsc --noEmit",
99
+ "lint": "eslint .",
100
+ "format": "prettier --write .",
101
+ "format:check": "prettier --check .",
102
+ "build:nuxt": "npm run build --workspace=packages/nuxt",
103
+ "typecheck:nuxt": "npm run typecheck --workspace=packages/nuxt"
54
104
  },
55
105
  "keywords": [
56
106
  "vue",
@@ -60,18 +110,21 @@
60
110
  "validation",
61
111
  "zod",
62
112
  "yup",
63
- "composable",
113
+ "valibot",
114
+ "json-schema",
115
+ "openapi",
64
116
  "mask",
65
- "reactive"
117
+ "ssr",
118
+ "typescript"
66
119
  ],
67
- "author": "macrulez",
68
- "license": "MIT",
69
- "bugs": {
70
- "url": "https://github.com/macrulezru/vue-form-schema"
71
- },
72
- "homepage": "https://macrulez.ru/en",
73
120
  "peerDependencies": {
74
- "vue": "^3.3.0"
121
+ "@vue/devtools-api": "^6 || ^7 || ^8",
122
+ "naive-ui": ">=2.38.0",
123
+ "primevue": ">=4.0.0",
124
+ "valibot": ">=1.0.0",
125
+ "vue": "^3.3.0",
126
+ "yup": ">=1.3.0",
127
+ "zod": ">=3.22.0"
75
128
  },
76
129
  "peerDependenciesMeta": {
77
130
  "zod": {
@@ -82,22 +135,43 @@
82
135
  },
83
136
  "valibot": {
84
137
  "optional": true
138
+ },
139
+ "primevue": {
140
+ "optional": true
141
+ },
142
+ "naive-ui": {
143
+ "optional": true
144
+ },
145
+ "@vue/devtools-api": {
146
+ "optional": true
85
147
  }
86
148
  },
87
149
  "devDependencies": {
150
+ "@eslint/js": "^9.39.5",
151
+ "@primeuix/themes": "^3.0.0",
88
152
  "@vitejs/plugin-vue": "^5.0.0",
89
153
  "@vitest/coverage-v8": "^1.0.0",
154
+ "@vue/devtools-api": "^8.2.1",
90
155
  "@vue/test-utils": "^2.4.0",
91
156
  "autoprefixer": "^10.5.0",
157
+ "eslint": "^9.39.5",
158
+ "eslint-config-prettier": "^9.1.2",
159
+ "eslint-plugin-vue": "^9.33.0",
92
160
  "happy-dom": "^20.9.0",
161
+ "naive-ui": "^2.45.1",
93
162
  "postcss": "^8.5.15",
163
+ "prettier": "^3.9.6",
164
+ "primevue": "^5.0.1",
94
165
  "tailwindcss": "^3.4.19",
95
166
  "typescript": "^5.3.0",
167
+ "typescript-eslint": "^8.67.0",
96
168
  "valibot": "^1.4.0",
97
169
  "vite": "^5.0.0",
98
170
  "vite-plugin-dts": "^3.7.0",
99
171
  "vitest": "^1.0.0",
100
172
  "vue": "^3.4.0",
173
+ "vue-eslint-parser": "^9.4.3",
174
+ "vue-tsc": "^2.2.12",
101
175
  "yup": "^1.3.0",
102
176
  "zod": "^3.22.0"
103
177
  }
@@ -1,233 +0,0 @@
1
- import { inject as $, provide as w, computed as p } from "vue";
2
- const m = Symbol("vfs:registry");
3
- function P(t) {
4
- return {
5
- install(n) {
6
- n.provide(m, t);
7
- }
8
- };
9
- }
10
- function k() {
11
- return $(m, {});
12
- }
13
- function L(t) {
14
- w(m, t);
15
- }
16
- function j(t, n) {
17
- const e = p(() => T(t.fields.value, n)), r = p(() => (t.getField(n) ?? []).map((c, u) => {
18
- var g;
19
- return {
20
- key: `${n}__${u}`,
21
- index: u,
22
- fields: F(((g = e.value) == null ? void 0 : g.fields) ?? [], n, u)
23
- };
24
- })), i = p(() => r.value.length);
25
- function s() {
26
- return [...t.getField(n) ?? []];
27
- }
28
- function o(f = {}) {
29
- const c = s();
30
- c.push(f), t.setField(n, c);
31
- }
32
- function l(f = {}) {
33
- const c = s();
34
- c.unshift(f), t.setField(n, c);
35
- }
36
- function a(f) {
37
- const c = s();
38
- c.splice(f, 1), t.setField(n, c);
39
- }
40
- function d(f, c) {
41
- const u = s(), [g] = u.splice(f, 1);
42
- u.splice(c, 0, g), t.setField(n, u);
43
- }
44
- function h(f, c) {
45
- const u = s();
46
- [u[f], u[c]] = [u[c], u[f]], t.setField(n, u);
47
- }
48
- function I(f, c) {
49
- const u = s();
50
- u[f] = c, t.setField(n, u);
51
- }
52
- return { rows: r, count: i, append: o, prepend: l, remove: a, move: d, swap: h, replace: I };
53
- }
54
- function F(t, n, e) {
55
- return t.map((r) => ({
56
- ...r,
57
- name: `${n}.${e}.${r.name}`,
58
- fields: r.fields ? F(r.fields, n, e) : void 0
59
- }));
60
- }
61
- function T(t, n) {
62
- for (const e of t) {
63
- if (e.name === n) return e;
64
- if (e.fields) {
65
- const r = T(e.fields, n);
66
- if (r) return r;
67
- }
68
- }
69
- }
70
- const b = (t) => t == null || t === "" || Array.isArray(t) && t.length === 0 ? "This field is required" : null, q = (t, n) => (e) => typeof e != "string" && !Array.isArray(e) || e.length >= t ? null : n ?? `Minimum length is ${t}`, C = (t, n) => (e) => typeof e != "string" && !Array.isArray(e) || e.length <= t ? null : n ?? `Maximum length is ${t}`, _ = (t, n) => (e) => {
71
- const r = Number(e);
72
- return isNaN(r) || r >= t ? null : n ?? `Minimum value is ${t}`;
73
- }, U = (t, n) => (e) => {
74
- const r = Number(e);
75
- return isNaN(r) || r <= t ? null : n ?? `Maximum value is ${t}`;
76
- }, B = (t, n) => (e) => typeof e != "string" || t.test(e) ? null : n ?? "Invalid format", V = (t) => t ? /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(t)) ? null : "Invalid email address" : null, Y = (t) => {
77
- if (!t) return null;
78
- try {
79
- return new URL(String(t)), null;
80
- } catch {
81
- return "Invalid URL";
82
- }
83
- }, z = (t, n) => (e, r) => e === r[t] ? null : n ?? `Must match ${t}`;
84
- class G {
85
- constructor(n = 300, e = "first") {
86
- this.asyncTimers = /* @__PURE__ */ new Map(), this.debounceMs = n, this.validateMode = e;
87
- }
88
- /** Run sync validators for a single field; returns list of error messages */
89
- validateField(n, e, r) {
90
- const i = [];
91
- if (n.required) {
92
- const s = b(e);
93
- if (s && (i.push(s), this.validateMode === "first"))
94
- return i;
95
- }
96
- for (const s of n.validators ?? []) {
97
- const o = s(e, r);
98
- if (o && (i.push(o), this.validateMode === "first"))
99
- return i;
100
- }
101
- return i;
102
- }
103
- /** Run all sync validators across all visible fields */
104
- validateAll(n, e) {
105
- const r = {};
106
- return this.collectErrors(n, e, r), r;
107
- }
108
- collectErrors(n, e, r) {
109
- for (const i of n) {
110
- const s = x(e, i.name), o = this.validateField(i, s, e);
111
- o.length && (r[i.name] = o), (i.type === "group" || i.type === "array") && i.fields && this.collectErrors(i.fields, e, r);
112
- }
113
- }
114
- /** Run async validators with debounce; calls onResult when done */
115
- validateAsync(n, e, r, i) {
116
- var l;
117
- if (!((l = n.asyncValidators) != null && l.length)) return;
118
- const s = this.asyncTimers.get(n.name);
119
- s && clearTimeout(s);
120
- const o = setTimeout(async () => {
121
- const d = (await Promise.all(
122
- n.asyncValidators.map((h) => h(e, r))
123
- )).filter((h) => h !== null);
124
- i(n.name, d), this.asyncTimers.delete(n.name);
125
- }, this.debounceMs);
126
- this.asyncTimers.set(n.name, o);
127
- }
128
- destroy() {
129
- for (const n of this.asyncTimers.values()) clearTimeout(n);
130
- this.asyncTimers.clear();
131
- }
132
- }
133
- function x(t, n) {
134
- return n.split(".").reduce((e, r) => {
135
- if (e && typeof e == "object") return e[r];
136
- }, t);
137
- }
138
- function K(t, n, e) {
139
- const r = n.split("."), i = { ...t };
140
- let s = i;
141
- for (let o = 0; o < r.length - 1; o++) {
142
- const l = r[o], a = s[l];
143
- Array.isArray(a) ? s[l] = [...a] : a && typeof a == "object" ? s[l] = { ...a } : s[l] = {}, s = s[l];
144
- }
145
- return s[r[r.length - 1]] = e, i;
146
- }
147
- const R = {
148
- "phone-ru": "+7 (###) ###-##-##",
149
- "phone-eu": "+## (##) ###-##-##",
150
- date: "##.##.####",
151
- inn: "############",
152
- iban: "AA## #### #### #### #### #### ####"
153
- };
154
- function E(t) {
155
- return t.preset ? R[t.preset] : t.pattern ?? "";
156
- }
157
- function y(t) {
158
- return t === "#" || t === "A";
159
- }
160
- function v(t, n) {
161
- return n === "#" ? /\d/.test(t) : n === "A" ? /[a-zA-Z]/.test(t) : !1;
162
- }
163
- function A(t, n) {
164
- const r = E(typeof n == "string" ? { pattern: n } : n);
165
- if (!r) return t;
166
- const i = Array.from(t);
167
- let s = 0, o = -1;
168
- for (let a = 0; a < r.length && s < i.length; a++) {
169
- const d = r[a];
170
- if (y(d)) {
171
- for (; s < i.length && !v(i[s], d); ) s++;
172
- s < i.length && (o = a, s++);
173
- }
174
- }
175
- if (o === -1) return "";
176
- let l = "";
177
- s = 0;
178
- for (let a = 0; a <= o; a++) {
179
- const d = r[a];
180
- if (y(d)) {
181
- for (; s < i.length && !v(i[s], d); ) s++;
182
- s < i.length && (l += d === "A" ? i[s++].toUpperCase() : i[s++]);
183
- } else
184
- l += d;
185
- }
186
- return l;
187
- }
188
- function M(t, n) {
189
- const r = E(typeof n == "string" ? { pattern: n } : n);
190
- if (!r) return t;
191
- const i = [];
192
- let s = 0;
193
- for (let o = 0; o < r.length && s < t.length; o++) {
194
- const l = r[o], a = t[s];
195
- y(l) ? (i.push(a), s++) : a === l && s++;
196
- }
197
- return i.join("");
198
- }
199
- function Z(t, n) {
200
- function e() {
201
- const i = M(t.value, n), s = A(i, n);
202
- if (t.value !== s) {
203
- const o = t.selectionStart ?? s.length;
204
- t.value = s;
205
- const l = Math.min(o, s.length);
206
- t.setSelectionRange(l, l);
207
- }
208
- }
209
- t.addEventListener("input", e);
210
- const r = A(M(t.value, n), n);
211
- return t.value !== r && r && (t.value = r), () => t.removeEventListener("input", e);
212
- }
213
- export {
214
- G as V,
215
- A as a,
216
- Z as b,
217
- P as c,
218
- C as d,
219
- V as e,
220
- _ as f,
221
- x as g,
222
- q as h,
223
- L as i,
224
- b as j,
225
- K as k,
226
- j as l,
227
- U as m,
228
- k as n,
229
- B as p,
230
- M as r,
231
- z as s,
232
- Y as u
233
- };
@@ -1 +0,0 @@
1
- "use strict";const g=require("vue"),A=Symbol("vfs:registry");function w(t){return{install(e){e.provide(A,t)}}}function x(){return g.inject(A,{})}function b(t){g.provide(A,t)}function P(t,e){const n=g.computed(()=>T(t.fields.value,e)),r=g.computed(()=>(t.getField(e)??[]).map((u,a)=>{var y;return{key:`${e}__${a}`,index:a,fields:F(((y=n.value)==null?void 0:y.fields)??[],e,a)}})),i=g.computed(()=>r.value.length);function s(){return[...t.getField(e)??[]]}function o(f={}){const u=s();u.push(f),t.setField(e,u)}function l(f={}){const u=s();u.unshift(f),t.setField(e,u)}function c(f){const u=s();u.splice(f,1),t.setField(e,u)}function d(f,u){const a=s(),[y]=a.splice(f,1);a.splice(u,0,y),t.setField(e,a)}function h(f,u){const a=s();[a[f],a[u]]=[a[u],a[f]],t.setField(e,a)}function $(f,u){const a=s();a[f]=u,t.setField(e,a)}return{rows:r,count:i,append:o,prepend:l,remove:c,move:d,swap:h,replace:$}}function F(t,e,n){return t.map(r=>({...r,name:`${e}.${n}.${r.name}`,fields:r.fields?F(r.fields,e,n):void 0}))}function T(t,e){for(const n of t){if(n.name===e)return n;if(n.fields){const r=T(n.fields,e);if(r)return r}}}const E=t=>t==null||t===""||Array.isArray(t)&&t.length===0?"This field is required":null,S=(t,e)=>n=>typeof n!="string"&&!Array.isArray(n)||n.length>=t?null:e??`Minimum length is ${t}`,k=(t,e)=>n=>typeof n!="string"&&!Array.isArray(n)||n.length<=t?null:e??`Maximum length is ${t}`,L=(t,e)=>n=>{const r=Number(n);return isNaN(r)||r>=t?null:e??`Minimum value is ${t}`},q=(t,e)=>n=>{const r=Number(n);return isNaN(r)||r<=t?null:e??`Maximum value is ${t}`},j=(t,e)=>n=>typeof n!="string"||t.test(n)?null:e??"Invalid format",B=t=>t?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(t))?null:"Invalid email address":null,C=t=>{if(!t)return null;try{return new URL(String(t)),null}catch{return"Invalid URL"}},_=(t,e)=>(n,r)=>n===r[t]?null:e??`Must match ${t}`;class U{constructor(e=300,n="first"){this.asyncTimers=new Map,this.debounceMs=e,this.validateMode=n}validateField(e,n,r){const i=[];if(e.required){const s=E(n);if(s&&(i.push(s),this.validateMode==="first"))return i}for(const s of e.validators??[]){const o=s(n,r);if(o&&(i.push(o),this.validateMode==="first"))return i}return i}validateAll(e,n){const r={};return this.collectErrors(e,n,r),r}collectErrors(e,n,r){for(const i of e){const s=R(n,i.name),o=this.validateField(i,s,n);o.length&&(r[i.name]=o),(i.type==="group"||i.type==="array")&&i.fields&&this.collectErrors(i.fields,n,r)}}validateAsync(e,n,r,i){var l;if(!((l=e.asyncValidators)!=null&&l.length))return;const s=this.asyncTimers.get(e.name);s&&clearTimeout(s);const o=setTimeout(async()=>{const d=(await Promise.all(e.asyncValidators.map(h=>h(n,r)))).filter(h=>h!==null);i(e.name,d),this.asyncTimers.delete(e.name)},this.debounceMs);this.asyncTimers.set(e.name,o)}destroy(){for(const e of this.asyncTimers.values())clearTimeout(e);this.asyncTimers.clear()}}function R(t,e){return e.split(".").reduce((n,r)=>{if(n&&typeof n=="object")return n[r]},t)}function V(t,e,n){const r=e.split("."),i={...t};let s=i;for(let o=0;o<r.length-1;o++){const l=r[o],c=s[l];Array.isArray(c)?s[l]=[...c]:c&&typeof c=="object"?s[l]={...c}:s[l]={},s=s[l]}return s[r[r.length-1]]=n,i}const Y={"phone-ru":"+7 (###) ###-##-##","phone-eu":"+## (##) ###-##-##",date:"##.##.####",inn:"############",iban:"AA## #### #### #### #### #### ####"};function I(t){return t.preset?Y[t.preset]:t.pattern??""}function p(t){return t==="#"||t==="A"}function M(t,e){return e==="#"?/\d/.test(t):e==="A"?/[a-zA-Z]/.test(t):!1}function m(t,e){const r=I(typeof e=="string"?{pattern:e}:e);if(!r)return t;const i=Array.from(t);let s=0,o=-1;for(let c=0;c<r.length&&s<i.length;c++){const d=r[c];if(p(d)){for(;s<i.length&&!M(i[s],d);)s++;s<i.length&&(o=c,s++)}}if(o===-1)return"";let l="";s=0;for(let c=0;c<=o;c++){const d=r[c];if(p(d)){for(;s<i.length&&!M(i[s],d);)s++;s<i.length&&(l+=d==="A"?i[s++].toUpperCase():i[s++])}else l+=d}return l}function v(t,e){const r=I(typeof e=="string"?{pattern:e}:e);if(!r)return t;const i=[];let s=0;for(let o=0;o<r.length&&s<t.length;o++){const l=r[o],c=t[s];p(l)?(i.push(c),s++):c===l&&s++}return i.join("")}function z(t,e){function n(){const i=v(t.value,e),s=m(i,e);if(t.value!==s){const o=t.selectionStart??s.length;t.value=s;const l=Math.min(o,s.length);t.setSelectionRange(l,l)}}t.addEventListener("input",n);const r=m(v(t.value,e),e);return t.value!==r&&r&&(t.value=r),()=>t.removeEventListener("input",n)}exports.ValidationEngine=U;exports.applyMask=m;exports.bindMask=z;exports.createFormRegistry=w;exports.email=B;exports.getByPath=R;exports.max=q;exports.maxLength=k;exports.min=L;exports.minLength=S;exports.pattern=j;exports.provideRegistry=b;exports.removeMask=v;exports.required=E;exports.sameAs=_;exports.setByPath=V;exports.url=C;exports.useFieldArray=P;exports.useRegistry=x;
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ConditionEvaluator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConditionEvaluator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ConditionEvaluator.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MaskEngine.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MaskEngine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MaskEngine.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ValidationEngine.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ValidationEngine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ValidationEngine.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parsers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parsers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/parsers.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=phase3.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phase3.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/phase3.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=phase4.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phase4.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/phase4.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useFieldArray.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFieldArray.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/useFieldArray.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useForm.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useForm.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/useForm.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useMultiStepForm.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMultiStepForm.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/useMultiStepForm.test.ts"],"names":[],"mappings":""}