@tachui/forms 0.7.0-alpha1
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 +363 -0
- package/dist/Form-ueYEcSg1.cjs +2 -0
- package/dist/Form-ueYEcSg1.cjs.map +1 -0
- package/dist/Form-ylAr3o_e.js +376 -0
- package/dist/Form-ylAr3o_e.js.map +1 -0
- package/dist/components/Form.d.ts +76 -0
- package/dist/components/Form.d.ts.map +1 -0
- package/dist/components/index.cjs +2 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +31 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/input/Checkbox.d.ts +42 -0
- package/dist/components/input/Checkbox.d.ts.map +1 -0
- package/dist/components/input/Radio.d.ts +36 -0
- package/dist/components/input/Radio.d.ts.map +1 -0
- package/dist/components/input/Select.d.ts +21 -0
- package/dist/components/input/Select.d.ts.map +1 -0
- package/dist/components/input/TextField.d.ts +58 -0
- package/dist/components/input/TextField.d.ts.map +1 -0
- package/dist/components/input/index.d.ts +11 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/forms-complex-BiQsZZlT.js +361 -0
- package/dist/forms-complex-BiQsZZlT.js.map +1 -0
- package/dist/forms-complex-DLEnXXJ5.cjs +2 -0
- package/dist/forms-complex-DLEnXXJ5.cjs.map +1 -0
- package/dist/forms-core-B1bx1drO.js +839 -0
- package/dist/forms-core-B1bx1drO.js.map +1 -0
- package/dist/forms-core-W_JGVLAI.cjs +9 -0
- package/dist/forms-core-W_JGVLAI.cjs.map +1 -0
- package/dist/forms-inputs-6QdeMWFk.js +1075 -0
- package/dist/forms-inputs-6QdeMWFk.js.map +1 -0
- package/dist/forms-inputs-DQ5QI_SU.cjs +2 -0
- package/dist/forms-inputs-DQ5QI_SU.cjs.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +383 -0
- package/dist/index.js.map +1 -0
- package/dist/state/index.cjs +2 -0
- package/dist/state/index.cjs.map +1 -0
- package/dist/state/index.d.ts +46 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +9 -0
- package/dist/state/index.js.map +1 -0
- package/dist/types/index.d.ts +452 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/formatters.d.ts +98 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/validators.d.ts +101 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/validation/component-validation.d.ts +52 -0
- package/dist/validation/component-validation.d.ts.map +1 -0
- package/dist/validation/index.cjs +2 -0
- package/dist/validation/index.cjs.map +1 -0
- package/dist/validation/index.d.ts +141 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +21 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +65 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { F as n, a as d } from "./Form-ylAr3o_e.js";
|
|
2
|
+
import { b as Q } from "./Form-ylAr3o_e.js";
|
|
3
|
+
import { d as c, a as m, c as u, b as g, V as f, C as p, r as F, g as h } from "./forms-core-B1bx1drO.js";
|
|
4
|
+
import { m as Y, F as ee, l as te, j as re, k as ae, i as se, n as ie, e as oe, u as le, h as ne, f as de, v as ce } from "./forms-core-B1bx1drO.js";
|
|
5
|
+
import { k as v, l as N, i as b, E as I, P as S, g as V, U as x, e as y, N as C, d as R, h as A, f as T, T as P, D as L, j as D, c as E, C as _, S as M, a as U, R as w, b as $ } from "./forms-inputs-6QdeMWFk.js";
|
|
6
|
+
import { S as k, M as G, C as H } from "./forms-complex-BiQsZZlT.js";
|
|
7
|
+
const O = {
|
|
8
|
+
/**
|
|
9
|
+
* Email validation
|
|
10
|
+
*/
|
|
11
|
+
email: (e) => {
|
|
12
|
+
if (!e) return { valid: !0 };
|
|
13
|
+
const r = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e);
|
|
14
|
+
return {
|
|
15
|
+
valid: r,
|
|
16
|
+
...r ? {} : { message: "Please enter a valid email address", code: "INVALID_EMAIL" }
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
/**
|
|
20
|
+
* Phone number validation
|
|
21
|
+
*/
|
|
22
|
+
phone: (e) => {
|
|
23
|
+
if (!e) return { valid: !0 };
|
|
24
|
+
const t = /^[+]?[1-9][\d]{0,15}$/, r = e.replace(/\s/g, ""), a = t.test(r);
|
|
25
|
+
return {
|
|
26
|
+
valid: a,
|
|
27
|
+
...a ? {} : { message: "Please enter a valid phone number", code: "INVALID_PHONE" }
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* URL validation
|
|
32
|
+
*/
|
|
33
|
+
url: (e) => {
|
|
34
|
+
if (!e) return { valid: !0 };
|
|
35
|
+
try {
|
|
36
|
+
return new URL(e), { valid: !0 };
|
|
37
|
+
} catch {
|
|
38
|
+
return { valid: !1, message: "Please enter a valid URL", code: "INVALID_URL" };
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
/**
|
|
42
|
+
* Minimum length validation
|
|
43
|
+
*/
|
|
44
|
+
minLength: (e) => (t) => {
|
|
45
|
+
const r = !t || t.length >= e;
|
|
46
|
+
return {
|
|
47
|
+
valid: r,
|
|
48
|
+
...r ? {} : { message: `Minimum length is ${e} characters`, code: "MIN_LENGTH" }
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* Maximum length validation
|
|
53
|
+
*/
|
|
54
|
+
maxLength: (e) => (t) => {
|
|
55
|
+
const r = !t || t.length <= e;
|
|
56
|
+
return {
|
|
57
|
+
valid: r,
|
|
58
|
+
...r ? {} : { message: `Maximum length is ${e} characters`, code: "MAX_LENGTH" }
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
/**
|
|
62
|
+
* Required field validation
|
|
63
|
+
*/
|
|
64
|
+
required: (e) => {
|
|
65
|
+
const t = !!(e && e.trim().length > 0);
|
|
66
|
+
return {
|
|
67
|
+
valid: t,
|
|
68
|
+
...t ? {} : { message: "This field is required", code: "REQUIRED" }
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
/**
|
|
72
|
+
* Pattern validation
|
|
73
|
+
*/
|
|
74
|
+
pattern: (e, t = "Invalid format") => (r) => {
|
|
75
|
+
if (!r) return { valid: !0 };
|
|
76
|
+
const a = e.test(r);
|
|
77
|
+
return {
|
|
78
|
+
valid: a,
|
|
79
|
+
...a ? {} : { message: t, code: "PATTERN_MISMATCH" }
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
/**
|
|
83
|
+
* Numeric validation
|
|
84
|
+
*/
|
|
85
|
+
numeric: (e) => {
|
|
86
|
+
if (!e) return { valid: !0 };
|
|
87
|
+
const t = !Number.isNaN(Number(e)) && Number.isFinite(Number(e));
|
|
88
|
+
return {
|
|
89
|
+
valid: t,
|
|
90
|
+
...t ? {} : { message: "Please enter a valid number", code: "INVALID_NUMBER" }
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
/**
|
|
94
|
+
* Integer validation
|
|
95
|
+
*/
|
|
96
|
+
integer: (e) => {
|
|
97
|
+
if (!e) return { valid: !0 };
|
|
98
|
+
const t = Number(e), r = Number.isInteger(t);
|
|
99
|
+
return {
|
|
100
|
+
valid: r,
|
|
101
|
+
...r ? {} : { message: "Please enter a whole number", code: "INVALID_INTEGER" }
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
/**
|
|
105
|
+
* Minimum value validation
|
|
106
|
+
*/
|
|
107
|
+
min: (e) => (t) => {
|
|
108
|
+
if (!t) return { valid: !0 };
|
|
109
|
+
const r = Number(t), a = !Number.isNaN(r) && r >= e;
|
|
110
|
+
return {
|
|
111
|
+
valid: a,
|
|
112
|
+
...a ? {} : { message: `Value must be at least ${e}`, code: "MIN_VALUE" }
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
/**
|
|
116
|
+
* Maximum value validation
|
|
117
|
+
*/
|
|
118
|
+
max: (e) => (t) => {
|
|
119
|
+
if (!t) return { valid: !0 };
|
|
120
|
+
const r = Number(t), a = !Number.isNaN(r) && r <= e;
|
|
121
|
+
return {
|
|
122
|
+
valid: a,
|
|
123
|
+
...a ? {} : { message: `Value must be at most ${e}`, code: "MAX_VALUE" }
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
/**
|
|
127
|
+
* Range validation
|
|
128
|
+
*/
|
|
129
|
+
range: (e, t) => (r) => {
|
|
130
|
+
if (!r) return { valid: !0 };
|
|
131
|
+
const a = Number(r), o = !Number.isNaN(a) && a >= e && a <= t;
|
|
132
|
+
return {
|
|
133
|
+
valid: o,
|
|
134
|
+
...o ? {} : { message: `Value must be between ${e} and ${t}`, code: "OUT_OF_RANGE" }
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
/**
|
|
138
|
+
* Credit card validation (Luhn algorithm)
|
|
139
|
+
*/
|
|
140
|
+
creditCard: (e) => {
|
|
141
|
+
if (!e) return { valid: !0 };
|
|
142
|
+
const t = e.replace(/\D/g, "");
|
|
143
|
+
if (t.length < 13 || t.length > 19)
|
|
144
|
+
return {
|
|
145
|
+
valid: !1,
|
|
146
|
+
message: "Credit card number must be 13-19 digits",
|
|
147
|
+
code: "INVALID_CREDIT_CARD"
|
|
148
|
+
};
|
|
149
|
+
let r = 0, a = !1;
|
|
150
|
+
for (let i = t.length - 1; i >= 0; i--) {
|
|
151
|
+
let s = parseInt(t[i]);
|
|
152
|
+
a && (s *= 2, s > 9 && (s -= 9)), r += s, a = !a;
|
|
153
|
+
}
|
|
154
|
+
const o = r % 10 === 0;
|
|
155
|
+
return {
|
|
156
|
+
valid: o,
|
|
157
|
+
...o ? {} : { message: "Please enter a valid credit card number", code: "INVALID_CREDIT_CARD" }
|
|
158
|
+
};
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* Social Security Number validation
|
|
162
|
+
*/
|
|
163
|
+
ssn: (e) => {
|
|
164
|
+
if (!e) return { valid: !0 };
|
|
165
|
+
const t = e.replace(/\D/g, ""), a = /^(?!666|000|9\d{2})\d{3}(?!00)\d{2}(?!0{4})\d{4}$/.test(t);
|
|
166
|
+
return {
|
|
167
|
+
valid: a,
|
|
168
|
+
...a ? {} : { message: "Please enter a valid Social Security Number", code: "INVALID_SSN" }
|
|
169
|
+
};
|
|
170
|
+
},
|
|
171
|
+
/**
|
|
172
|
+
* US ZIP code validation
|
|
173
|
+
*/
|
|
174
|
+
zipCode: (e) => {
|
|
175
|
+
if (!e) return { valid: !0 };
|
|
176
|
+
const r = /^\d{5}(-\d{4})?$/.test(e);
|
|
177
|
+
return {
|
|
178
|
+
valid: r,
|
|
179
|
+
...r ? {} : { message: "Please enter a valid ZIP code", code: "INVALID_ZIP" }
|
|
180
|
+
};
|
|
181
|
+
},
|
|
182
|
+
/**
|
|
183
|
+
* Strong password validation
|
|
184
|
+
*/
|
|
185
|
+
strongPassword: (e) => {
|
|
186
|
+
if (!e) return { valid: !0 };
|
|
187
|
+
const t = /[a-z]/.test(e), r = /[A-Z]/.test(e), a = /\d/.test(e), o = /[!@#$%^&*(),.?":{}|<>]/.test(e), i = e.length >= 8, s = [];
|
|
188
|
+
i || s.push("at least 8 characters"), t || s.push("lowercase letter"), r || s.push("uppercase letter"), a || s.push("number"), o || s.push("special character");
|
|
189
|
+
const l = s.length === 0;
|
|
190
|
+
return {
|
|
191
|
+
valid: l,
|
|
192
|
+
...l ? {} : {
|
|
193
|
+
message: `Password must contain ${s.join(", ")}`,
|
|
194
|
+
code: "WEAK_PASSWORD"
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
/**
|
|
199
|
+
* Date validation (YYYY-MM-DD format)
|
|
200
|
+
*/
|
|
201
|
+
date: (e) => {
|
|
202
|
+
if (!e) return { valid: !0 };
|
|
203
|
+
const t = new Date(e), r = !Number.isNaN(t.getTime());
|
|
204
|
+
return {
|
|
205
|
+
valid: r,
|
|
206
|
+
...r ? {} : { message: "Please enter a valid date", code: "INVALID_DATE" }
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
/**
|
|
210
|
+
* Time validation (HH:MM format)
|
|
211
|
+
*/
|
|
212
|
+
time: (e) => {
|
|
213
|
+
if (!e) return { valid: !0 };
|
|
214
|
+
const r = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/.test(e);
|
|
215
|
+
return {
|
|
216
|
+
valid: r,
|
|
217
|
+
...r ? {} : { message: "Please enter a valid time (HH:MM)", code: "INVALID_TIME" }
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
/**
|
|
221
|
+
* Composite validator - combines multiple validators with AND logic
|
|
222
|
+
*/
|
|
223
|
+
and: (...e) => (t) => {
|
|
224
|
+
for (const r of e) {
|
|
225
|
+
const a = r(t);
|
|
226
|
+
if (!a.valid)
|
|
227
|
+
return a;
|
|
228
|
+
}
|
|
229
|
+
return { valid: !0 };
|
|
230
|
+
},
|
|
231
|
+
/**
|
|
232
|
+
* Composite validator - combines multiple validators with OR logic
|
|
233
|
+
*/
|
|
234
|
+
or: (...e) => (t) => {
|
|
235
|
+
const r = e.map((i) => i(t));
|
|
236
|
+
return r.some((i) => i.valid) ? { valid: !0 } : r.find((i) => !i.valid) || { valid: !1, message: "Validation failed", code: "VALIDATION_FAILED" };
|
|
237
|
+
},
|
|
238
|
+
/**
|
|
239
|
+
* Custom validator factory
|
|
240
|
+
*/
|
|
241
|
+
custom: (e) => e
|
|
242
|
+
}, z = {
|
|
243
|
+
name: "@tachui/forms",
|
|
244
|
+
version: "0.1.0",
|
|
245
|
+
async install(e) {
|
|
246
|
+
const t = (r, a, o) => {
|
|
247
|
+
e.registerComponent(r, a, o);
|
|
248
|
+
};
|
|
249
|
+
t("Form", n, {
|
|
250
|
+
category: "forms",
|
|
251
|
+
tags: ["form", "container", "validation"]
|
|
252
|
+
}), t("FormSection", d, {
|
|
253
|
+
category: "forms",
|
|
254
|
+
tags: ["form", "section", "fieldset"]
|
|
255
|
+
}), t("TextField", b, {
|
|
256
|
+
category: "forms",
|
|
257
|
+
tags: ["input", "text", "validation"]
|
|
258
|
+
}), t("EmailField", I, {
|
|
259
|
+
category: "forms",
|
|
260
|
+
tags: ["input", "email", "validation"]
|
|
261
|
+
}), t("PasswordField", S, {
|
|
262
|
+
category: "forms",
|
|
263
|
+
tags: ["input", "password", "validation"]
|
|
264
|
+
}), t("SearchField", V, {
|
|
265
|
+
category: "forms",
|
|
266
|
+
tags: ["input", "search"]
|
|
267
|
+
}), t("URLField", x, {
|
|
268
|
+
category: "forms",
|
|
269
|
+
tags: ["input", "url", "validation"]
|
|
270
|
+
}), t("PhoneField", y, {
|
|
271
|
+
category: "forms",
|
|
272
|
+
tags: ["input", "phone", "validation"]
|
|
273
|
+
}), t("NumberField", C, {
|
|
274
|
+
category: "forms",
|
|
275
|
+
tags: ["input", "number", "numeric", "validation"]
|
|
276
|
+
}), t("CreditCardField", R, {
|
|
277
|
+
category: "forms",
|
|
278
|
+
tags: ["input", "credit-card", "payment", "validation"]
|
|
279
|
+
}), t("SSNField", A, {
|
|
280
|
+
category: "forms",
|
|
281
|
+
tags: ["input", "ssn", "social-security", "validation"]
|
|
282
|
+
}), t("PostalCodeField", T, {
|
|
283
|
+
category: "forms",
|
|
284
|
+
tags: ["input", "postal-code", "zip", "validation"]
|
|
285
|
+
}), t("TextArea", P, {
|
|
286
|
+
category: "forms",
|
|
287
|
+
tags: ["input", "textarea", "multiline"]
|
|
288
|
+
}), t("DateField", L, {
|
|
289
|
+
category: "forms",
|
|
290
|
+
tags: ["input", "date", "calendar", "validation"]
|
|
291
|
+
}), t("TimeField", D, {
|
|
292
|
+
category: "forms",
|
|
293
|
+
tags: ["input", "time", "clock", "validation"]
|
|
294
|
+
}), t("ColorField", E, {
|
|
295
|
+
category: "forms",
|
|
296
|
+
tags: ["input", "color", "picker"]
|
|
297
|
+
}), t("Checkbox", _, {
|
|
298
|
+
category: "forms",
|
|
299
|
+
tags: ["input", "checkbox", "boolean"]
|
|
300
|
+
}), t("Switch", M, {
|
|
301
|
+
category: "forms",
|
|
302
|
+
tags: ["input", "switch", "toggle", "boolean"]
|
|
303
|
+
}), t("CheckboxGroup", U, {
|
|
304
|
+
category: "forms",
|
|
305
|
+
tags: ["input", "checkbox", "group", "multiple"]
|
|
306
|
+
}), t("Radio", w, {
|
|
307
|
+
category: "forms",
|
|
308
|
+
tags: ["input", "radio", "choice"]
|
|
309
|
+
}), t("RadioGroup", $, {
|
|
310
|
+
category: "forms",
|
|
311
|
+
tags: ["input", "radio", "group", "choice"]
|
|
312
|
+
}), t("Select", k, {
|
|
313
|
+
category: "forms",
|
|
314
|
+
tags: ["input", "select", "dropdown", "choice"]
|
|
315
|
+
}), t("MultiSelect", G, {
|
|
316
|
+
category: "forms",
|
|
317
|
+
tags: ["input", "select", "multiple", "choice"]
|
|
318
|
+
}), t("Combobox", H, {
|
|
319
|
+
category: "forms",
|
|
320
|
+
tags: ["input", "combobox", "search", "choice"]
|
|
321
|
+
}), e.registerService("formsConfig", {
|
|
322
|
+
theme: "default",
|
|
323
|
+
validation: {},
|
|
324
|
+
accessibility: {}
|
|
325
|
+
}), e.registerService("validationMessageFormatter", c), e.registerService("createFormState", m), e.registerService("createField", u), e.registerService("createMultiStepFormState", g), e.registerService("ValidationPresets", f), e.registerService("CrossFieldValidators", p), e.registerService("TextFieldFormatters", v), e.registerService("TextFieldParsers", N), e.registerService("TextFieldValidators", O), await F(), console.log("📝 TachUI Forms plugin installed successfully"), console.log(" • 24 form components (including enhanced TextField variants)"), console.log(` • ${h().length} validation rules`), console.log(" • TextField formatters and validators included");
|
|
326
|
+
},
|
|
327
|
+
async uninstall() {
|
|
328
|
+
console.log("📝 TachUI Forms plugin uninstalled");
|
|
329
|
+
}
|
|
330
|
+
}, W = async (e) => z.install(e);
|
|
331
|
+
export {
|
|
332
|
+
_ as Checkbox,
|
|
333
|
+
U as CheckboxGroup,
|
|
334
|
+
E as ColorField,
|
|
335
|
+
H as Combobox,
|
|
336
|
+
R as CreditCardField,
|
|
337
|
+
p as CrossFieldValidators,
|
|
338
|
+
L as DateField,
|
|
339
|
+
I as EmailField,
|
|
340
|
+
n as Form,
|
|
341
|
+
d as FormSection,
|
|
342
|
+
Q as FormUtils,
|
|
343
|
+
Y as FormsComponentValidation,
|
|
344
|
+
ee as FormsValidationError,
|
|
345
|
+
G as MultiSelect,
|
|
346
|
+
C as NumberField,
|
|
347
|
+
S as PasswordField,
|
|
348
|
+
y as PhoneField,
|
|
349
|
+
T as PostalCodeField,
|
|
350
|
+
w as Radio,
|
|
351
|
+
$ as RadioGroup,
|
|
352
|
+
A as SSNField,
|
|
353
|
+
V as SearchField,
|
|
354
|
+
k as Select,
|
|
355
|
+
M as Switch,
|
|
356
|
+
P as TextArea,
|
|
357
|
+
b as TextField,
|
|
358
|
+
v as TextFieldFormatters,
|
|
359
|
+
N as TextFieldParsers,
|
|
360
|
+
O as TextFieldValidators,
|
|
361
|
+
D as TimeField,
|
|
362
|
+
x as URLField,
|
|
363
|
+
te as VALIDATION_RULES,
|
|
364
|
+
re as ValidationMessageFormatter,
|
|
365
|
+
f as ValidationPresets,
|
|
366
|
+
ae as ValidationUtils,
|
|
367
|
+
se as createDebouncedValidator,
|
|
368
|
+
u as createField,
|
|
369
|
+
m as createFormState,
|
|
370
|
+
ie as createFormsValidators,
|
|
371
|
+
g as createMultiStepFormState,
|
|
372
|
+
z as default,
|
|
373
|
+
c as defaultMessageFormatter,
|
|
374
|
+
h as getValidationRules,
|
|
375
|
+
W as installFormsPlugin,
|
|
376
|
+
F as registerFormsValidators,
|
|
377
|
+
oe as registerValidationRule,
|
|
378
|
+
le as unregisterValidationRule,
|
|
379
|
+
ne as validateField,
|
|
380
|
+
de as validateValue,
|
|
381
|
+
ce as validateValueAsync
|
|
382
|
+
};
|
|
383
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/validators.ts","../src/index.ts"],"sourcesContent":["/**\n * TextField Validators\n *\n * Pre-built validation functions for common input types.\n * Migrated and enhanced from core TextField to forms plugin.\n */\n\nimport type { ValidationResult } from '../types'\n\n/**\n * Validation function type\n */\nexport type ValidationFunction = (value: string) => ValidationResult\n\n/**\n * Common validation functions\n */\nexport const TextFieldValidators = {\n /**\n * Email validation\n */\n email: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n const valid = emailRegex.test(value)\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a valid email address', code: 'INVALID_EMAIL' }),\n }\n },\n\n /**\n * Phone number validation\n */\n phone: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const phoneRegex = /^[+]?[1-9][\\d]{0,15}$/\n const digits = value.replace(/\\s/g, '')\n const valid = phoneRegex.test(digits)\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a valid phone number', code: 'INVALID_PHONE' }),\n }\n },\n\n /**\n * URL validation\n */\n url: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n try {\n new URL(value)\n return { valid: true }\n } catch {\n return { valid: false, message: 'Please enter a valid URL', code: 'INVALID_URL' }\n }\n },\n\n /**\n * Minimum length validation\n */\n minLength:\n (min: number) =>\n (value: string): ValidationResult => {\n const valid = !value || value.length >= min\n return {\n valid,\n ...(valid ? {} : { message: `Minimum length is ${min} characters`, code: 'MIN_LENGTH' }),\n }\n },\n\n /**\n * Maximum length validation\n */\n maxLength:\n (max: number) =>\n (value: string): ValidationResult => {\n const valid = !value || value.length <= max\n return {\n valid,\n ...(valid ? {} : { message: `Maximum length is ${max} characters`, code: 'MAX_LENGTH' }),\n }\n },\n\n /**\n * Required field validation\n */\n required: (value: string): ValidationResult => {\n const valid = Boolean(value && value.trim().length > 0)\n return {\n valid,\n ...(valid ? {} : { message: 'This field is required', code: 'REQUIRED' }),\n }\n },\n\n /**\n * Pattern validation\n */\n pattern:\n (regex: RegExp, message: string = 'Invalid format') =>\n (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const valid = regex.test(value)\n return {\n valid,\n ...(valid ? {} : { message, code: 'PATTERN_MISMATCH' }),\n }\n },\n\n /**\n * Numeric validation\n */\n numeric: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const valid = !Number.isNaN(Number(value)) && Number.isFinite(Number(value))\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a valid number', code: 'INVALID_NUMBER' }),\n }\n },\n\n /**\n * Integer validation\n */\n integer: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const number = Number(value)\n const valid = Number.isInteger(number)\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a whole number', code: 'INVALID_INTEGER' }),\n }\n },\n\n /**\n * Minimum value validation\n */\n min:\n (minValue: number) =>\n (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const number = Number(value)\n const valid = !Number.isNaN(number) && number >= minValue\n return {\n valid,\n ...(valid ? {} : { message: `Value must be at least ${minValue}`, code: 'MIN_VALUE' }),\n }\n },\n\n /**\n * Maximum value validation\n */\n max:\n (maxValue: number) =>\n (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const number = Number(value)\n const valid = !Number.isNaN(number) && number <= maxValue\n return {\n valid,\n ...(valid ? {} : { message: `Value must be at most ${maxValue}`, code: 'MAX_VALUE' }),\n }\n },\n\n /**\n * Range validation\n */\n range:\n (min: number, max: number) =>\n (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const number = Number(value)\n const valid = !Number.isNaN(number) && number >= min && number <= max\n return {\n valid,\n ...(valid\n ? {}\n : { message: `Value must be between ${min} and ${max}`, code: 'OUT_OF_RANGE' }),\n }\n },\n\n /**\n * Credit card validation (Luhn algorithm)\n */\n creditCard: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const digits = value.replace(/\\D/g, '')\n\n if (digits.length < 13 || digits.length > 19) {\n return {\n valid: false,\n message: 'Credit card number must be 13-19 digits',\n code: 'INVALID_CREDIT_CARD',\n }\n }\n\n // Luhn algorithm\n let sum = 0\n let isEven = false\n\n for (let i = digits.length - 1; i >= 0; i--) {\n let digit = parseInt(digits[i])\n\n if (isEven) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n isEven = !isEven\n }\n\n const valid = sum % 10 === 0\n return {\n valid,\n ...(valid\n ? {}\n : { message: 'Please enter a valid credit card number', code: 'INVALID_CREDIT_CARD' }),\n }\n },\n\n /**\n * Social Security Number validation\n */\n ssn: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const digits = value.replace(/\\D/g, '')\n const ssnRegex = /^(?!666|000|9\\d{2})\\d{3}(?!00)\\d{2}(?!0{4})\\d{4}$/\n const valid = ssnRegex.test(digits)\n return {\n valid,\n ...(valid\n ? {}\n : { message: 'Please enter a valid Social Security Number', code: 'INVALID_SSN' }),\n }\n },\n\n /**\n * US ZIP code validation\n */\n zipCode: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const zipRegex = /^\\d{5}(-\\d{4})?$/\n const valid = zipRegex.test(value)\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a valid ZIP code', code: 'INVALID_ZIP' }),\n }\n },\n\n /**\n * Strong password validation\n */\n strongPassword: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const hasLowerCase = /[a-z]/.test(value)\n const hasUpperCase = /[A-Z]/.test(value)\n const hasNumbers = /\\d/.test(value)\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(value)\n const hasMinLength = value.length >= 8\n\n const issues = []\n if (!hasMinLength) issues.push('at least 8 characters')\n if (!hasLowerCase) issues.push('lowercase letter')\n if (!hasUpperCase) issues.push('uppercase letter')\n if (!hasNumbers) issues.push('number')\n if (!hasSpecialChar) issues.push('special character')\n\n const valid = issues.length === 0\n return {\n valid,\n ...(valid\n ? {}\n : {\n message: `Password must contain ${issues.join(', ')}`,\n code: 'WEAK_PASSWORD',\n }),\n }\n },\n\n /**\n * Date validation (YYYY-MM-DD format)\n */\n date: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const date = new Date(value)\n const valid = !Number.isNaN(date.getTime())\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a valid date', code: 'INVALID_DATE' }),\n }\n },\n\n /**\n * Time validation (HH:MM format)\n */\n time: (value: string): ValidationResult => {\n if (!value) return { valid: true } // Allow empty unless required\n\n const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/\n const valid = timeRegex.test(value)\n return {\n valid,\n ...(valid ? {} : { message: 'Please enter a valid time (HH:MM)', code: 'INVALID_TIME' }),\n }\n },\n\n /**\n * Composite validator - combines multiple validators with AND logic\n */\n and:\n (...validators: ValidationFunction[]) =>\n (value: string): ValidationResult => {\n for (const validator of validators) {\n const result = validator(value)\n if (!result.valid) {\n return result\n }\n }\n return { valid: true }\n },\n\n /**\n * Composite validator - combines multiple validators with OR logic\n */\n or:\n (...validators: ValidationFunction[]) =>\n (value: string): ValidationResult => {\n const results = validators.map((validator) => validator(value))\n const hasValid = results.some((result) => result.valid)\n\n if (hasValid) {\n return { valid: true }\n }\n\n // Return the first error message\n const firstError = results.find((result) => !result.valid)\n return firstError || { valid: false, message: 'Validation failed', code: 'VALIDATION_FAILED' }\n },\n\n /**\n * Custom validator factory\n */\n custom: (validateFn: (value: string) => ValidationResult): ValidationFunction => validateFn,\n}\n","/**\n * TachUI Forms Plugin - Simplified Implementation\n *\n * Complete form solution for TachUI with validation, state management,\n * and SwiftUI-inspired component APIs. Reduces bundle size by ~35KB\n * for applications that don't need form functionality.\n */\n\nimport type { TachUIPlugin, TachUIInstance } from '@tachui/core/plugins'\nimport type { Component } from '@tachui/core/runtime/types'\n\n// Import all form components\nimport {\n Checkbox,\n CheckboxGroup,\n ColorField,\n Combobox,\n CreditCardField,\n DateField,\n EmailField,\n Form,\n FormSection,\n MultiSelect,\n NumberField,\n PasswordField,\n PhoneField,\n PostalCodeField,\n Radio,\n RadioGroup,\n SearchField,\n Select,\n SSNField,\n Switch,\n TextArea,\n TextField,\n TimeField,\n URLField,\n} from './components'\n// Import state management\nimport { createField, createFormState, createMultiStepFormState } from './state'\n// Import TextField utilities\nimport { TextFieldFormatters, TextFieldParsers } from './utils/formatters'\nimport { TextFieldValidators } from './utils/validators'\n// Import validation system\nimport {\n CrossFieldValidators,\n defaultMessageFormatter,\n getValidationRules,\n registerFormsValidators,\n ValidationPresets,\n} from './validation'\n\n/**\n * TachUI Forms Plugin Implementation - Simplified\n */\nconst FormsPlugin: TachUIPlugin = {\n name: '@tachui/forms',\n version: '0.1.0',\n\n async install(instance: TachUIInstance) {\n // Helper to register form components with proper typing\n const registerFormComponent = (name: string, component: any, options: { category: string; tags: string[] }) => {\n instance.registerComponent(name, component as Component, options)\n }\n\n // Register all form components\n registerFormComponent('Form', Form, {\n category: 'forms',\n tags: ['form', 'container', 'validation'],\n })\n\n registerFormComponent('FormSection', FormSection, {\n category: 'forms',\n tags: ['form', 'section', 'fieldset'],\n })\n\n // Input components\n registerFormComponent('TextField', TextField, {\n category: 'forms',\n tags: ['input', 'text', 'validation'],\n })\n\n registerFormComponent('EmailField', EmailField, {\n category: 'forms',\n tags: ['input', 'email', 'validation'],\n })\n\n registerFormComponent('PasswordField', PasswordField, {\n category: 'forms',\n tags: ['input', 'password', 'validation'],\n })\n\n registerFormComponent('SearchField', SearchField, {\n category: 'forms',\n tags: ['input', 'search'],\n })\n\n registerFormComponent('URLField', URLField, {\n category: 'forms',\n tags: ['input', 'url', 'validation'],\n })\n\n registerFormComponent('PhoneField', PhoneField, {\n category: 'forms',\n tags: ['input', 'phone', 'validation'],\n })\n\n registerFormComponent('NumberField', NumberField, {\n category: 'forms',\n tags: ['input', 'number', 'numeric', 'validation'],\n })\n\n registerFormComponent('CreditCardField', CreditCardField, {\n category: 'forms',\n tags: ['input', 'credit-card', 'payment', 'validation'],\n })\n\n registerFormComponent('SSNField', SSNField, {\n category: 'forms',\n tags: ['input', 'ssn', 'social-security', 'validation'],\n })\n\n registerFormComponent('PostalCodeField', PostalCodeField, {\n category: 'forms',\n tags: ['input', 'postal-code', 'zip', 'validation'],\n })\n\n registerFormComponent('TextArea', TextArea, {\n category: 'forms',\n tags: ['input', 'textarea', 'multiline'],\n })\n\n registerFormComponent('DateField', DateField, {\n category: 'forms',\n tags: ['input', 'date', 'calendar', 'validation'],\n })\n\n registerFormComponent('TimeField', TimeField, {\n category: 'forms',\n tags: ['input', 'time', 'clock', 'validation'],\n })\n\n registerFormComponent('ColorField', ColorField, {\n category: 'forms',\n tags: ['input', 'color', 'picker'],\n })\n\n registerFormComponent('Checkbox', Checkbox, {\n category: 'forms',\n tags: ['input', 'checkbox', 'boolean'],\n })\n\n registerFormComponent('Switch', Switch, {\n category: 'forms',\n tags: ['input', 'switch', 'toggle', 'boolean'],\n })\n\n registerFormComponent('CheckboxGroup', CheckboxGroup, {\n category: 'forms',\n tags: ['input', 'checkbox', 'group', 'multiple'],\n })\n\n registerFormComponent('Radio', Radio, {\n category: 'forms',\n tags: ['input', 'radio', 'choice'],\n })\n\n registerFormComponent('RadioGroup', RadioGroup, {\n category: 'forms',\n tags: ['input', 'radio', 'group', 'choice'],\n })\n\n registerFormComponent('Select', Select, {\n category: 'forms',\n tags: ['input', 'select', 'dropdown', 'choice'],\n })\n\n registerFormComponent('MultiSelect', MultiSelect, {\n category: 'forms',\n tags: ['input', 'select', 'multiple', 'choice'],\n })\n\n registerFormComponent('Combobox', Combobox, {\n category: 'forms',\n tags: ['input', 'combobox', 'search', 'choice'],\n })\n\n // Register essential services using simplified API\n instance.registerService('formsConfig', {\n theme: 'default',\n validation: {},\n accessibility: {}\n })\n \n instance.registerService('validationMessageFormatter', defaultMessageFormatter)\n \n // Make form utilities available through services\n instance.registerService('createFormState', createFormState)\n instance.registerService('createField', createField)\n instance.registerService('createMultiStepFormState', createMultiStepFormState)\n instance.registerService('ValidationPresets', ValidationPresets)\n instance.registerService('CrossFieldValidators', CrossFieldValidators)\n instance.registerService('TextFieldFormatters', TextFieldFormatters)\n instance.registerService('TextFieldParsers', TextFieldParsers)\n instance.registerService('TextFieldValidators', TextFieldValidators)\n\n // Register Forms component validators with Core validation system\n await registerFormsValidators()\n\n console.log('📝 TachUI Forms plugin installed successfully')\n console.log(' • 24 form components (including enhanced TextField variants)')\n console.log(` • ${getValidationRules().length} validation rules`)\n console.log(' • TextField formatters and validators included')\n },\n\n async uninstall() {\n console.log('📝 TachUI Forms plugin uninstalled')\n },\n}\n\n// Export the plugin as default\nexport default FormsPlugin\n\n// Export all form functionality for direct usage\nexport * from './components'\nexport * from './state'\nexport * from './types'\n// Export enhanced TextField utilities\nexport { TextFieldFormatters, TextFieldParsers } from './utils/formatters'\nexport { TextFieldValidators } from './utils/validators'\nexport * from './validation'\n\n// Convenience function to install the plugin\nexport const installFormsPlugin = async (instance: TachUIInstance) => {\n return FormsPlugin.install(instance)\n}\n"],"names":["TextFieldValidators","value","valid","phoneRegex","digits","min","max","regex","message","number","minValue","maxValue","sum","isEven","digit","hasLowerCase","hasUpperCase","hasNumbers","hasSpecialChar","hasMinLength","issues","date","validators","validator","result","results","validateFn","FormsPlugin","instance","registerFormComponent","name","component","options","Form","FormSection","TextField","EmailField","PasswordField","SearchField","URLField","PhoneField","NumberField","CreditCardField","SSNField","PostalCodeField","TextArea","DateField","TimeField","ColorField","Checkbox","Switch","CheckboxGroup","Radio","RadioGroup","Select","MultiSelect","Combobox","defaultMessageFormatter","createFormState","createField","createMultiStepFormState","ValidationPresets","CrossFieldValidators","TextFieldFormatters","TextFieldParsers","registerFormsValidators","getValidationRules","installFormsPlugin"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@tachui/core");const e=require("../forms-core-W_JGVLAI.cjs");exports.createField=e.createField;exports.createFormState=e.createFormState;exports.createMultiStepFormState=e.createMultiStepFormState;exports.validateValueAsync=e.validateValueAsync;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TachUI Forms State Management
|
|
3
|
+
*
|
|
4
|
+
* Reactive form state management with validation, field tracking,
|
|
5
|
+
* and form lifecycle management using TachUI's signal system.
|
|
6
|
+
*/
|
|
7
|
+
import type { FieldValidation, UseFormReturn } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Create a form state manager
|
|
10
|
+
*/
|
|
11
|
+
export declare function createFormState(initialValues?: Record<string, any>): UseFormReturn;
|
|
12
|
+
/**
|
|
13
|
+
* Form field hook for individual field management
|
|
14
|
+
*/
|
|
15
|
+
export declare function createField<T = any>(_name: string, initialValue?: T, validation?: FieldValidation): {
|
|
16
|
+
value: () => T;
|
|
17
|
+
setValue: (value: T) => void;
|
|
18
|
+
error: () => string | undefined;
|
|
19
|
+
touched: () => boolean;
|
|
20
|
+
dirty: () => boolean;
|
|
21
|
+
valid: () => boolean;
|
|
22
|
+
validating: () => boolean;
|
|
23
|
+
focused: () => boolean;
|
|
24
|
+
onFocus: () => void;
|
|
25
|
+
onBlur: () => void;
|
|
26
|
+
validate: () => Promise<boolean>;
|
|
27
|
+
reset: () => void;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Multi-step form state manager
|
|
31
|
+
*/
|
|
32
|
+
export declare function createMultiStepFormState(steps: string[], initialValues?: Record<string, any>): {
|
|
33
|
+
currentStep: () => number;
|
|
34
|
+
completedSteps: () => Set<number>;
|
|
35
|
+
nextStep: (validateCurrent?: boolean) => Promise<boolean>;
|
|
36
|
+
previousStep: () => boolean;
|
|
37
|
+
goToStep: (stepIndex: number) => boolean;
|
|
38
|
+
getCurrentForm: () => UseFormReturn | undefined;
|
|
39
|
+
getAllValues: () => Record<string, any>;
|
|
40
|
+
validateAllSteps: () => Promise<boolean>;
|
|
41
|
+
getStepForm: (stepIndex: number) => UseFormReturn | undefined;
|
|
42
|
+
isStepCompleted: (stepIndex: number) => boolean;
|
|
43
|
+
canGoToStep: (stepIndex: number) => boolean;
|
|
44
|
+
};
|
|
45
|
+
export { validateValueAsync } from '../validation';
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAEV,eAAe,EAGf,aAAa,EAEd,MAAM,UAAU,CAAA;AAmEjB;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,aAAa,CAgOtF;AA6BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,CAAC,EAChB,UAAU,CAAC,EAAE,eAAe,GAC3B;IACD,KAAK,EAAE,MAAM,CAAC,CAAA;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAC5B,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,KAAK,EAAE,MAAM,OAAO,CAAA;IACpB,KAAK,EAAE,MAAM,OAAO,CAAA;IACpB,UAAU,EAAE,MAAM,OAAO,CAAA;IACzB,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAqEA;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;;;6CAqB9C,OAAO,CAAC,OAAO,CAAC;wBAoBxC,OAAO;0BASH,MAAM,KAAG,OAAO;0BAQlB,aAAa,GAAG,SAAS;wBAI3B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;4BAaT,OAAO,CAAC,OAAO,CAAC;6BAexB,MAAM;iCACF,MAAM;6BACV,MAAM;EAGlC;AAGD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|