@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.
Files changed (62) hide show
  1. package/LICENSE +363 -0
  2. package/dist/Form-ueYEcSg1.cjs +2 -0
  3. package/dist/Form-ueYEcSg1.cjs.map +1 -0
  4. package/dist/Form-ylAr3o_e.js +376 -0
  5. package/dist/Form-ylAr3o_e.js.map +1 -0
  6. package/dist/components/Form.d.ts +76 -0
  7. package/dist/components/Form.d.ts.map +1 -0
  8. package/dist/components/index.cjs +2 -0
  9. package/dist/components/index.cjs.map +1 -0
  10. package/dist/components/index.d.ts +9 -0
  11. package/dist/components/index.d.ts.map +1 -0
  12. package/dist/components/index.js +31 -0
  13. package/dist/components/index.js.map +1 -0
  14. package/dist/components/input/Checkbox.d.ts +42 -0
  15. package/dist/components/input/Checkbox.d.ts.map +1 -0
  16. package/dist/components/input/Radio.d.ts +36 -0
  17. package/dist/components/input/Radio.d.ts.map +1 -0
  18. package/dist/components/input/Select.d.ts +21 -0
  19. package/dist/components/input/Select.d.ts.map +1 -0
  20. package/dist/components/input/TextField.d.ts +58 -0
  21. package/dist/components/input/TextField.d.ts.map +1 -0
  22. package/dist/components/input/index.d.ts +11 -0
  23. package/dist/components/input/index.d.ts.map +1 -0
  24. package/dist/forms-complex-BiQsZZlT.js +361 -0
  25. package/dist/forms-complex-BiQsZZlT.js.map +1 -0
  26. package/dist/forms-complex-DLEnXXJ5.cjs +2 -0
  27. package/dist/forms-complex-DLEnXXJ5.cjs.map +1 -0
  28. package/dist/forms-core-B1bx1drO.js +839 -0
  29. package/dist/forms-core-B1bx1drO.js.map +1 -0
  30. package/dist/forms-core-W_JGVLAI.cjs +9 -0
  31. package/dist/forms-core-W_JGVLAI.cjs.map +1 -0
  32. package/dist/forms-inputs-6QdeMWFk.js +1075 -0
  33. package/dist/forms-inputs-6QdeMWFk.js.map +1 -0
  34. package/dist/forms-inputs-DQ5QI_SU.cjs +2 -0
  35. package/dist/forms-inputs-DQ5QI_SU.cjs.map +1 -0
  36. package/dist/index.cjs +2 -0
  37. package/dist/index.cjs.map +1 -0
  38. package/dist/index.d.ts +21 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +383 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/state/index.cjs +2 -0
  43. package/dist/state/index.cjs.map +1 -0
  44. package/dist/state/index.d.ts +46 -0
  45. package/dist/state/index.d.ts.map +1 -0
  46. package/dist/state/index.js +9 -0
  47. package/dist/state/index.js.map +1 -0
  48. package/dist/types/index.d.ts +452 -0
  49. package/dist/types/index.d.ts.map +1 -0
  50. package/dist/utils/formatters.d.ts +98 -0
  51. package/dist/utils/formatters.d.ts.map +1 -0
  52. package/dist/utils/validators.d.ts +101 -0
  53. package/dist/utils/validators.d.ts.map +1 -0
  54. package/dist/validation/component-validation.d.ts +52 -0
  55. package/dist/validation/component-validation.d.ts.map +1 -0
  56. package/dist/validation/index.cjs +2 -0
  57. package/dist/validation/index.cjs.map +1 -0
  58. package/dist/validation/index.d.ts +141 -0
  59. package/dist/validation/index.d.ts.map +1 -0
  60. package/dist/validation/index.js +21 -0
  61. package/dist/validation/index.js.map +1 -0
  62. 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,9 @@
1
+ import "@tachui/core";
2
+ import { c as r, a as c, b as o, v as s } from "../forms-core-B1bx1drO.js";
3
+ export {
4
+ r as createField,
5
+ c as createFormState,
6
+ o as createMultiStepFormState,
7
+ s as validateValueAsync
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}