@coherent.js/core 1.0.0-beta.2

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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +130 -0
  3. package/dist/coherent.d.ts +472 -0
  4. package/dist/coherent.d.ts.map +1 -0
  5. package/dist/coherent.js +590 -0
  6. package/dist/coherent.js.map +1 -0
  7. package/dist/components/component-system.d.ts +1138 -0
  8. package/dist/components/component-system.d.ts.map +1 -0
  9. package/dist/components/component-system.js +2220 -0
  10. package/dist/components/component-system.js.map +1 -0
  11. package/dist/components/lifecycle.d.ts +212 -0
  12. package/dist/components/lifecycle.d.ts.map +1 -0
  13. package/dist/components/lifecycle.js +525 -0
  14. package/dist/components/lifecycle.js.map +1 -0
  15. package/dist/core/html-utils.d.ts +14 -0
  16. package/dist/core/html-utils.d.ts.map +1 -0
  17. package/dist/core/html-utils.js +166 -0
  18. package/dist/core/html-utils.js.map +1 -0
  19. package/dist/core/object-factory.d.ts +38 -0
  20. package/dist/core/object-factory.d.ts.map +1 -0
  21. package/dist/core/object-factory.js +63 -0
  22. package/dist/core/object-factory.js.map +1 -0
  23. package/dist/core/object-utils.d.ts +77 -0
  24. package/dist/core/object-utils.d.ts.map +1 -0
  25. package/dist/core/object-utils.js +502 -0
  26. package/dist/core/object-utils.js.map +1 -0
  27. package/dist/dev/dev-tools.d.ts +194 -0
  28. package/dist/dev/dev-tools.d.ts.map +1 -0
  29. package/dist/dev/dev-tools.js +846 -0
  30. package/dist/dev/dev-tools.js.map +1 -0
  31. package/dist/forms/validation.d.ts +271 -0
  32. package/dist/forms/validation.d.ts.map +1 -0
  33. package/dist/forms/validation.js +573 -0
  34. package/dist/forms/validation.js.map +1 -0
  35. package/dist/index.cjs +5281 -0
  36. package/dist/index.cjs.map +7 -0
  37. package/dist/index.js +5204 -0
  38. package/dist/index.js.map +7 -0
  39. package/dist/performance/bundle-optimizer.d.ts +95 -0
  40. package/dist/performance/bundle-optimizer.d.ts.map +1 -0
  41. package/dist/performance/bundle-optimizer.js +192 -0
  42. package/dist/performance/bundle-optimizer.js.map +1 -0
  43. package/dist/performance/cache-manager.d.ts +107 -0
  44. package/dist/performance/cache-manager.d.ts.map +1 -0
  45. package/dist/performance/cache-manager.js +314 -0
  46. package/dist/performance/cache-manager.js.map +1 -0
  47. package/dist/performance/component-cache.d.ts +120 -0
  48. package/dist/performance/component-cache.d.ts.map +1 -0
  49. package/dist/performance/component-cache.js +364 -0
  50. package/dist/performance/component-cache.js.map +1 -0
  51. package/dist/performance/monitor.d.ts +189 -0
  52. package/dist/performance/monitor.d.ts.map +1 -0
  53. package/dist/performance/monitor.js +347 -0
  54. package/dist/performance/monitor.js.map +1 -0
  55. package/dist/rendering/base-renderer.d.ts +140 -0
  56. package/dist/rendering/base-renderer.d.ts.map +1 -0
  57. package/dist/rendering/base-renderer.js +409 -0
  58. package/dist/rendering/base-renderer.js.map +1 -0
  59. package/dist/rendering/css-manager.d.ts +73 -0
  60. package/dist/rendering/css-manager.d.ts.map +1 -0
  61. package/dist/rendering/css-manager.js +176 -0
  62. package/dist/rendering/css-manager.js.map +1 -0
  63. package/dist/rendering/dom-renderer.d.ts +62 -0
  64. package/dist/rendering/dom-renderer.d.ts.map +1 -0
  65. package/dist/rendering/dom-renderer.js +252 -0
  66. package/dist/rendering/dom-renderer.js.map +1 -0
  67. package/dist/rendering/html-renderer.d.ts +67 -0
  68. package/dist/rendering/html-renderer.d.ts.map +1 -0
  69. package/dist/rendering/html-renderer.js +444 -0
  70. package/dist/rendering/html-renderer.js.map +1 -0
  71. package/dist/rendering/renderer-config.d.ts +282 -0
  72. package/dist/rendering/renderer-config.d.ts.map +1 -0
  73. package/dist/rendering/renderer-config.js +144 -0
  74. package/dist/rendering/renderer-config.js.map +1 -0
  75. package/dist/rendering/streaming-renderer.d.ts +117 -0
  76. package/dist/rendering/streaming-renderer.d.ts.map +1 -0
  77. package/dist/rendering/streaming-renderer.js +326 -0
  78. package/dist/rendering/streaming-renderer.js.map +1 -0
  79. package/dist/rendering/vdom-diff.d.ts +47 -0
  80. package/dist/rendering/vdom-diff.d.ts.map +1 -0
  81. package/dist/rendering/vdom-diff.js +416 -0
  82. package/dist/rendering/vdom-diff.js.map +1 -0
  83. package/dist/routing/router.d.ts +241 -0
  84. package/dist/routing/router.d.ts.map +1 -0
  85. package/dist/routing/router.js +648 -0
  86. package/dist/routing/router.js.map +1 -0
  87. package/dist/state/reactive-state.d.ts +166 -0
  88. package/dist/state/reactive-state.d.ts.map +1 -0
  89. package/dist/state/reactive-state.js +546 -0
  90. package/dist/state/reactive-state.js.map +1 -0
  91. package/dist/state/state-manager.d.ts +45 -0
  92. package/dist/state/state-manager.d.ts.map +1 -0
  93. package/dist/state/state-manager.js +151 -0
  94. package/dist/state/state-manager.js.map +1 -0
  95. package/dist/types/constants.d.ts +8 -0
  96. package/dist/types/constants.d.ts.map +1 -0
  97. package/dist/types/constants.js +36 -0
  98. package/dist/types/constants.js.map +1 -0
  99. package/dist/utils/dependency-utils.d.ts +43 -0
  100. package/dist/utils/dependency-utils.d.ts.map +1 -0
  101. package/dist/utils/dependency-utils.js +105 -0
  102. package/dist/utils/dependency-utils.js.map +1 -0
  103. package/dist/utils/error-handler.d.ts +148 -0
  104. package/dist/utils/error-handler.d.ts.map +1 -0
  105. package/dist/utils/error-handler.js +468 -0
  106. package/dist/utils/error-handler.js.map +1 -0
  107. package/dist/utils/normalization.d.ts +3 -0
  108. package/dist/utils/normalization.d.ts.map +1 -0
  109. package/dist/utils/normalization.js +24 -0
  110. package/dist/utils/normalization.js.map +1 -0
  111. package/dist/utils/validation.d.ts +10 -0
  112. package/dist/utils/validation.d.ts.map +1 -0
  113. package/dist/utils/validation.js +32 -0
  114. package/dist/utils/validation.js.map +1 -0
  115. package/package.json +44 -0
  116. package/types/index.d.ts +734 -0
@@ -0,0 +1,573 @@
1
+ /**
2
+ * Form Validation and Data Binding System for Coherent.js
3
+ * Provides comprehensive form handling with reactive validation
4
+ */
5
+ import { ReactiveState, observable, computed } from '../state/reactive-state.js';
6
+ import { globalErrorHandler } from '../utils/error-handler.js';
7
+ /**
8
+ * Built-in validation rules
9
+ */
10
+ export const validationRules = {
11
+ required: (value, params = true) => {
12
+ if (!params)
13
+ return true;
14
+ const isEmpty = value === null || value === undefined || value === '' ||
15
+ (Array.isArray(value) && value.length === 0);
16
+ return !isEmpty || 'This field is required';
17
+ },
18
+ min: (value, minValue) => {
19
+ if (value === null || value === undefined || value === '')
20
+ return true;
21
+ const num = Number(value);
22
+ return isNaN(num) || num >= minValue || `Value must be at least ${minValue}`;
23
+ },
24
+ max: (value, maxValue) => {
25
+ if (value === null || value === undefined || value === '')
26
+ return true;
27
+ const num = Number(value);
28
+ return isNaN(num) || num <= maxValue || `Value must be no more than ${maxValue}`;
29
+ },
30
+ minLength: (value, minLen) => {
31
+ if (value === null || value === undefined)
32
+ return true;
33
+ const str = String(value);
34
+ return str.length >= minLen || `Must be at least ${minLen} characters`;
35
+ },
36
+ maxLength: (value, maxLen) => {
37
+ if (value === null || value === undefined)
38
+ return true;
39
+ const str = String(value);
40
+ return str.length <= maxLen || `Must be no more than ${maxLen} characters`;
41
+ },
42
+ pattern: (value, regex, message = 'Invalid format') => {
43
+ if (value === null || value === undefined || value === '')
44
+ return true;
45
+ const pattern = typeof regex === 'string' ? new RegExp(regex) : regex;
46
+ return pattern.test(String(value)) || message;
47
+ },
48
+ email: (value) => {
49
+ if (value === null || value === undefined || value === '')
50
+ return true;
51
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
52
+ return emailRegex.test(String(value)) || 'Please enter a valid email address';
53
+ },
54
+ url: (value) => {
55
+ if (value === null || value === undefined || value === '')
56
+ return true;
57
+ try {
58
+ new URL(String(value));
59
+ return true;
60
+ }
61
+ catch {
62
+ return 'Please enter a valid URL';
63
+ }
64
+ },
65
+ numeric: (value) => {
66
+ if (value === null || value === undefined || value === '')
67
+ return true;
68
+ return !isNaN(Number(value)) || 'Must be a valid number';
69
+ },
70
+ integer: (value) => {
71
+ if (value === null || value === undefined || value === '')
72
+ return true;
73
+ const num = Number(value);
74
+ return Number.isInteger(num) || 'Must be a whole number';
75
+ },
76
+ alpha: (value) => {
77
+ if (value === null || value === undefined || value === '')
78
+ return true;
79
+ return /^[a-zA-Z]+$/.test(String(value)) || 'Must contain only letters';
80
+ },
81
+ alphanumeric: (value) => {
82
+ if (value === null || value === undefined || value === '')
83
+ return true;
84
+ return /^[a-zA-Z0-9]+$/.test(String(value)) || 'Must contain only letters and numbers';
85
+ },
86
+ equals: (value, otherValue, fieldName = 'other field') => {
87
+ return value === otherValue || `Must match ${fieldName}`;
88
+ },
89
+ oneOf: (value, options, message = 'Invalid selection') => {
90
+ if (value === null || value === undefined || value === '')
91
+ return true;
92
+ return options.includes(value) || message;
93
+ },
94
+ custom: (value, validator, ...args) => {
95
+ if (typeof validator !== 'function') {
96
+ throw new Error('Custom validator must be a function');
97
+ }
98
+ return validator(value, ...args);
99
+ }
100
+ };
101
+ /**
102
+ * Field validation class
103
+ */
104
+ class FieldValidator {
105
+ constructor(name, rules = {}, options = {}) {
106
+ this.name = name;
107
+ this.rules = rules;
108
+ this.options = {
109
+ validateOnChange: options.validateOnChange !== false,
110
+ validateOnBlur: options.validateOnBlur !== false,
111
+ debounce: options.debounce || 0,
112
+ ...options
113
+ };
114
+ this.errors = observable([]);
115
+ this.isValid = computed(() => this.errors.value.length === 0);
116
+ this.isPending = observable(false);
117
+ this.isTouched = observable(false);
118
+ this.isDirty = observable(false);
119
+ this._debounceTimer = null;
120
+ }
121
+ /**
122
+ * Validate field value
123
+ */
124
+ async validate(value, formData = {}) {
125
+ this.isPending.value = true;
126
+ const errors = [];
127
+ try {
128
+ for (const [ruleName, ruleParams] of Object.entries(this.rules)) {
129
+ const validator = validationRules[ruleName];
130
+ if (!validator) {
131
+ console.warn(`Unknown validation rule: ${ruleName}`);
132
+ continue;
133
+ }
134
+ let result;
135
+ // Handle async validators
136
+ if (validator.constructor.name === 'AsyncFunction') {
137
+ result = await validator(value, ruleParams, formData);
138
+ }
139
+ else {
140
+ result = validator(value, ruleParams, formData);
141
+ }
142
+ if (result !== true) {
143
+ errors.push(typeof result === 'string' ? result : `Invalid ${this.name}`);
144
+ // Stop on first error unless configured otherwise
145
+ if (!this.options.validateAll) {
146
+ break;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ catch (error) {
152
+ globalErrorHandler.handle(error, {
153
+ type: 'validation-error',
154
+ context: { field: this.name, value, rules: this.rules }
155
+ });
156
+ errors.push('Validation error occurred');
157
+ }
158
+ finally {
159
+ this.isPending.value = false;
160
+ }
161
+ this.errors.value = errors;
162
+ return this.isValid.value;
163
+ }
164
+ /**
165
+ * Validate with debouncing
166
+ */
167
+ validateDebounced(value, formData = {}) {
168
+ if (this.options.debounce <= 0) {
169
+ return this.validate(value, formData);
170
+ }
171
+ return new Promise((resolve) => {
172
+ if (this._debounceTimer) {
173
+ clearTimeout(this._debounceTimer);
174
+ }
175
+ this._debounceTimer = setTimeout(async () => {
176
+ const result = await this.validate(value, formData);
177
+ resolve(result);
178
+ }, this.options.debounce);
179
+ });
180
+ }
181
+ /**
182
+ * Mark field as touched
183
+ */
184
+ touch() {
185
+ this.isTouched.value = true;
186
+ }
187
+ /**
188
+ * Mark field as dirty
189
+ */
190
+ dirty() {
191
+ this.isDirty.value = true;
192
+ }
193
+ /**
194
+ * Reset field state
195
+ */
196
+ reset() {
197
+ this.errors.value = [];
198
+ this.isTouched.value = false;
199
+ this.isDirty.value = false;
200
+ this.isPending.value = false;
201
+ }
202
+ /**
203
+ * Get field state
204
+ */
205
+ getState() {
206
+ return {
207
+ errors: this.errors.value,
208
+ isValid: this.isValid.value,
209
+ isPending: this.isPending.value,
210
+ isTouched: this.isTouched.value,
211
+ isDirty: this.isDirty.value,
212
+ hasError: this.errors.value.length > 0
213
+ };
214
+ }
215
+ }
216
+ /**
217
+ * Form validation and binding system
218
+ */
219
+ export class FormValidator {
220
+ constructor(schema = {}, options = {}) {
221
+ this.schema = schema;
222
+ this.options = {
223
+ validateOnSubmit: options.validateOnSubmit !== false,
224
+ validateOnChange: options.validateOnChange !== false,
225
+ stopOnFirstError: options.stopOnFirstError !== false,
226
+ ...options
227
+ };
228
+ this.data = new ReactiveState();
229
+ this.validators = new Map();
230
+ this.isSubmitting = observable(false);
231
+ this.submitCount = observable(0);
232
+ // Initialize validators
233
+ this.initializeValidators();
234
+ // Computed properties for form state
235
+ this.isValid = computed(() => {
236
+ return Array.from(this.validators.values()).every(validator => validator.isValid.value);
237
+ });
238
+ this.isPending = computed(() => {
239
+ return Array.from(this.validators.values()).some(validator => validator.isPending.value);
240
+ });
241
+ this.isTouched = computed(() => {
242
+ return Array.from(this.validators.values()).some(validator => validator.isTouched.value);
243
+ });
244
+ this.isDirty = computed(() => {
245
+ return Array.from(this.validators.values()).some(validator => validator.isDirty.value);
246
+ });
247
+ this.errors = computed(() => {
248
+ const allErrors = {};
249
+ for (const [name, validator] of this.validators.entries()) {
250
+ if (validator.errors.value.length > 0) {
251
+ allErrors[name] = validator.errors.value;
252
+ }
253
+ }
254
+ return allErrors;
255
+ });
256
+ }
257
+ /**
258
+ * Initialize field validators from schema
259
+ */
260
+ initializeValidators() {
261
+ for (const [fieldName, fieldSchema] of Object.entries(this.schema)) {
262
+ const rules = fieldSchema.rules || fieldSchema;
263
+ const _options = fieldSchema.options || {};
264
+ this.validators.set(fieldName, new FieldValidator(fieldName, rules, options));
265
+ // Initialize data
266
+ this.data.set(fieldName, fieldSchema.default || '');
267
+ // Watch for changes if validation on change is enabled
268
+ if (this.options.validateOnChange) {
269
+ this.data.watch(fieldName, (newValue) => {
270
+ const validator = this.validators.get(fieldName);
271
+ validator.dirty();
272
+ if (validator.options.validateOnChange) {
273
+ validator.validateDebounced(newValue, this.data.toObject());
274
+ }
275
+ });
276
+ }
277
+ }
278
+ }
279
+ /**
280
+ * Set field value
281
+ */
282
+ setField(name, value) {
283
+ this.data.set(name, value);
284
+ const validator = this.validators.get(name);
285
+ if (validator) {
286
+ validator.dirty();
287
+ }
288
+ }
289
+ /**
290
+ * Get field value
291
+ */
292
+ getField(name) {
293
+ return this.data.get(name);
294
+ }
295
+ /**
296
+ * Set multiple fields
297
+ */
298
+ setFields(fields) {
299
+ this.data.batch(fields);
300
+ }
301
+ /**
302
+ * Get all form data
303
+ */
304
+ getData() {
305
+ return this.data.toObject();
306
+ }
307
+ /**
308
+ * Validate specific field
309
+ */
310
+ async validateField(name) {
311
+ const validator = this.validators.get(name);
312
+ if (!validator) {
313
+ console.warn(`No validator found for field: ${name}`);
314
+ return true;
315
+ }
316
+ const value = this.data.get(name);
317
+ return validator.validate(value, this.data.toObject());
318
+ }
319
+ /**
320
+ * Validate all fields
321
+ */
322
+ async validateAll() {
323
+ const validationPromises = [];
324
+ for (const [name, validator] of this.validators.entries()) {
325
+ const value = this.data.get(name);
326
+ validationPromises.push(validator.validate(value, this.data.toObject()));
327
+ }
328
+ const results = await Promise.all(validationPromises);
329
+ return results.every(result => result === true);
330
+ }
331
+ /**
332
+ * Handle field blur event
333
+ */
334
+ handleBlur(name) {
335
+ const validator = this.validators.get(name);
336
+ if (validator) {
337
+ validator.touch();
338
+ if (validator.options.validateOnBlur) {
339
+ const value = this.data.get(name);
340
+ validator.validate(value, this.data.toObject());
341
+ }
342
+ }
343
+ }
344
+ /**
345
+ * Handle form submission
346
+ */
347
+ async handleSubmit(submitHandler) {
348
+ if (this.isSubmitting.value) {
349
+ return false;
350
+ }
351
+ this.isSubmitting.value = true;
352
+ this.submitCount.value += 1;
353
+ try {
354
+ // Mark all fields as touched
355
+ for (const validator of this.validators.values()) {
356
+ validator.touch();
357
+ }
358
+ // Validate all fields if required
359
+ let isValid = true;
360
+ if (this.options.validateOnSubmit) {
361
+ isValid = await this.validateAll();
362
+ }
363
+ if (!isValid) {
364
+ return false;
365
+ }
366
+ // Execute submit handler
367
+ if (typeof submitHandler === 'function') {
368
+ const result = await submitHandler(this.getData(), this);
369
+ return result !== false;
370
+ }
371
+ return true;
372
+ }
373
+ catch (error) {
374
+ globalErrorHandler.handle(error, {
375
+ type: 'form-submit-error',
376
+ context: { formData: this.getData() }
377
+ });
378
+ return false;
379
+ }
380
+ finally {
381
+ this.isSubmitting.value = false;
382
+ }
383
+ }
384
+ /**
385
+ * Reset form to initial state
386
+ */
387
+ reset() {
388
+ // Reset data to defaults
389
+ for (const [fieldName, fieldSchema] of Object.entries(this.schema)) {
390
+ this.data.set(fieldName, fieldSchema.default || '');
391
+ }
392
+ // Reset validators
393
+ for (const validator of this.validators.values()) {
394
+ validator.reset();
395
+ }
396
+ this.submitCount.value = 0;
397
+ }
398
+ /**
399
+ * Add custom validator
400
+ */
401
+ addValidator(name, rules, options = {}) {
402
+ this.validators.set(name, new FieldValidator(name, rules, options));
403
+ if (!this.data.has(name)) {
404
+ this.data.set(name, '');
405
+ }
406
+ }
407
+ /**
408
+ * Remove validator
409
+ */
410
+ removeValidator(name) {
411
+ this.validators.delete(name);
412
+ }
413
+ /**
414
+ * Get field validator
415
+ */
416
+ getValidator(name) {
417
+ return this.validators.get(name);
418
+ }
419
+ /**
420
+ * Get form state summary
421
+ */
422
+ getState() {
423
+ return {
424
+ isValid: this.isValid.value,
425
+ isPending: this.isPending.value,
426
+ isTouched: this.isTouched.value,
427
+ isDirty: this.isDirty.value,
428
+ isSubmitting: this.isSubmitting.value,
429
+ submitCount: this.submitCount.value,
430
+ errors: this.errors.value,
431
+ data: this.getData()
432
+ };
433
+ }
434
+ /**
435
+ * Watch form state changes
436
+ */
437
+ watch(callback, options = {}) {
438
+ const unsubscribers = [];
439
+ // Watch form-level computed properties
440
+ if (options.watchValid !== false) {
441
+ unsubscribers.push(this.isValid.watch(callback));
442
+ }
443
+ if (options.watchPending !== false) {
444
+ unsubscribers.push(this.isPending.watch(callback));
445
+ }
446
+ if (options.watchErrors !== false) {
447
+ unsubscribers.push(this.errors.watch(callback));
448
+ }
449
+ // Return unsubscribe function
450
+ return () => {
451
+ unsubscribers.forEach(unsub => unsub());
452
+ };
453
+ }
454
+ /**
455
+ * Cleanup form
456
+ */
457
+ destroy() {
458
+ this.data.destroy();
459
+ this.validators.clear();
460
+ }
461
+ }
462
+ /**
463
+ * Create form validator
464
+ */
465
+ export function createForm(schema, options = {}) {
466
+ return new FormValidator(schema, options);
467
+ }
468
+ /**
469
+ * Data binding utilities
470
+ */
471
+ export const binding = {
472
+ /**
473
+ * Two-way data binding for input elements
474
+ */
475
+ model(form, fieldName, options = {}) {
476
+ return {
477
+ value: form.getField(fieldName),
478
+ oninput: (event) => {
479
+ const value = options.number ? Number(event.target.value) : event.target.value;
480
+ form.setField(fieldName, value);
481
+ },
482
+ onblur: () => {
483
+ form.handleBlur(fieldName);
484
+ }
485
+ };
486
+ },
487
+ /**
488
+ * Checkbox binding
489
+ */
490
+ checkbox(form, fieldName) {
491
+ return {
492
+ checked: Boolean(form.getField(fieldName)),
493
+ onchange: (event) => {
494
+ form.setField(fieldName, event.target.checked);
495
+ },
496
+ onblur: () => {
497
+ form.handleBlur(fieldName);
498
+ }
499
+ };
500
+ },
501
+ /**
502
+ * Select dropdown binding
503
+ */
504
+ select(form, fieldName, options = {}) {
505
+ return {
506
+ value: form.getField(fieldName),
507
+ onchange: (event) => {
508
+ const value = options.multiple
509
+ ? Array.from(event.target.selectedOptions, opt => opt.value)
510
+ : event.target.value;
511
+ form.setField(fieldName, value);
512
+ },
513
+ onblur: () => {
514
+ form.handleBlur(fieldName);
515
+ }
516
+ };
517
+ },
518
+ /**
519
+ * Radio button binding
520
+ */
521
+ radio(form, fieldName, value) {
522
+ return {
523
+ checked: form.getField(fieldName) === value,
524
+ value: value,
525
+ onchange: (event) => {
526
+ if (event.target.checked) {
527
+ form.setField(fieldName, value);
528
+ }
529
+ }
530
+ };
531
+ }
532
+ };
533
+ /**
534
+ * Form component helpers
535
+ */
536
+ export const formComponents = {
537
+ /**
538
+ * Validation error display
539
+ */
540
+ ValidationError({ form, field, className = 'validation-error' }) {
541
+ const validator = form.getValidator(field);
542
+ if (!validator || validator.errors.value.length === 0) {
543
+ return null;
544
+ }
545
+ return {
546
+ div: {
547
+ className,
548
+ children: validator.errors.value.map(error => ({
549
+ span: { text: error, className: 'error-message' }
550
+ }))
551
+ }
552
+ };
553
+ },
554
+ /**
555
+ * Form field wrapper with validation
556
+ */
557
+ FormField({ form, field, label, children, showErrors = true }) {
558
+ const validator = form.getValidator(field);
559
+ const state = validator ? validator.getState() : {};
560
+ return {
561
+ div: {
562
+ className: `form-field ${state.hasError ? 'has-error' : ''} ${state.isTouched ? 'touched' : ''}`,
563
+ children: [
564
+ label ? { label: { text: label, htmlFor: field } } : null,
565
+ children,
566
+ showErrors && state.hasError ?
567
+ formComponents.ValidationError({ form, field }) : null
568
+ ].filter(Boolean)
569
+ }
570
+ };
571
+ }
572
+ };
573
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/forms/validation.js"],"names":[],"mappings":"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"}