1class __KopState { 2 constructor(value) { 3 this._value = value; 4 this._listeners = []; 5 } 6 get Value() { return this._value; } 7 set Value(v) { 8 this._value = v; 9 for (const listener of this._listeners) listener(v); 10 } 11 Subscribe(listener) { 12 this._listeners.push(listener); 13 return () => { this._listeners = this._listeners.filter((l) => l !== listener); }; 14 } 15} 16 17export function CombineValidators2(v1, v2) { 18 return (value) => { 19 let r1 = v1(value); 20 if ((r1 !== null)) { 21 return r1; 22 } 23 return v2(value); 24}; 25} 26export function CombineValidators3(v1, v2, v3) { 27 return (value) => { 28 let r1 = v1(value); 29 if ((r1 !== null)) { 30 return r1; 31 } 32 let r2 = v2(value); 33 if ((r2 !== null)) { 34 return r2; 35 } 36 return v3(value); 37}; 38} 39export class FormField { 40 constructor(initial, validate) { 41 this.Value = new __KopState(initial); 42 this.Error = new __KopState(validate(initial)); 43 this.Touched = new __KopState(false); 44 this.Value.Subscribe((v) => { 45 this.Error.Value = validate(v); 46}); 47 } 48 49 Touch() { 50 this.Touched.Value = true; 51 } 52 53 Valid() { 54 return (this.Error.Value === null); 55 } 56} 57export class Validators { 58 static Required(value) { 59 if ((value.trim().length === 0)) { 60 return "Required"; 61 } 62 return null; 63 } 64 65 static MinLength(value, min) { 66 if ((value.length < min)) { 67 return `Must be at least ${min} characters`; 68 } 69 return null; 70 } 71 72 static MaxLength(value, max) { 73 if ((value.length > max)) { 74 return `Must be at most ${max} characters`; 75 } 76 return null; 77 } 78 79 static Email(value) { 80 return (() => { 81 const __subject0 = value; 82 if (new RegExp("^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$").test(__subject0)) { 83 return null; 84 } 85 else { 86 return "Must be a valid email"; 87 } 88})(); 89 } 90 91 static Min(value, min) { 92 if ((value < min)) { 93 return `Must be at least ${min}`; 94 } 95 return null; 96 } 97 98 static Max(value, max) { 99 if ((value > max)) { 100 return `Must be at most ${max}`; 101 } 102 return null; 103 } 104} 105 106//# sourceMappingURL=forms.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.