PageSourceSearch

https://kopular.dev/vendor/kopular/forms.js

js kopular.dev collected 2026-10-05 05:37:53 UTC 2,078 bytes, 106 lines download raw bytes

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.