@abgov/angular-components 4.0.0 → 4.0.1-alpha.1
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/esm2022/index.mjs +2 -3
- package/fesm2022/abgov-angular-components.mjs +2 -240
- package/fesm2022/abgov-angular-components.mjs.map +1 -1
- package/index.d.ts +1 -2
- package/package.json +2 -1
- package/esm2022/lib/public-form-utils.mjs +0 -34
- package/esm2022/lib/validation.mjs +0 -205
- package/lib/public-form-utils.d.ts +0 -18
- package/lib/validation.d.ts +0 -44
package/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "https://github.com/GovAlta/ui-components/issues"
|
|
6
6
|
},
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
|
-
"version": "4.0.
|
|
8
|
+
"version": "4.0.1-alpha.1",
|
|
9
9
|
"keywords": [
|
|
10
10
|
"Goab",
|
|
11
11
|
"ui-components",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"directory": "libs/angular-components"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
20
|
+
"@abgov/ui-components-common": "^0.0.0 || ^1.0.0",
|
|
20
21
|
"@angular/forms": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
21
22
|
"@angular/common": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
22
23
|
"@angular/core": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export function dispatch(el, eventName, detail, opts) {
|
|
2
|
-
if (!el) {
|
|
3
|
-
console.error("dispatch element is null");
|
|
4
|
-
return;
|
|
5
|
-
}
|
|
6
|
-
el.dispatchEvent(new CustomEvent(eventName, {
|
|
7
|
-
composed: true,
|
|
8
|
-
bubbles: opts?.bubbles,
|
|
9
|
-
detail: detail,
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
|
-
export function relay(el, eventName, data, opts) {
|
|
13
|
-
if (!el) {
|
|
14
|
-
console.error("dispatch element is null");
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
// console.log(`RELAY(${eventName}):`, data, el);
|
|
18
|
-
el.dispatchEvent(new CustomEvent("msg", {
|
|
19
|
-
composed: true,
|
|
20
|
-
bubbles: opts?.bubbles,
|
|
21
|
-
detail: {
|
|
22
|
-
action: eventName,
|
|
23
|
-
data,
|
|
24
|
-
},
|
|
25
|
-
}));
|
|
26
|
-
}
|
|
27
|
-
// TODO: Logic similar to this needs to be done on the React side as well i.e. an initial onMount
|
|
28
|
-
// event that passes a ref to the form,
|
|
29
|
-
export function continueTo(el, name) {
|
|
30
|
-
relay(el, "external::continue", {
|
|
31
|
-
next: name,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWZvcm0tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL3B1YmxpYy1mb3JtLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE1BQU0sVUFBVSxRQUFRLENBQ3RCLEVBQTRDLEVBQzVDLFNBQWlCLEVBQ2pCLE1BQVUsRUFDVixJQUE0QjtJQUU1QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDMUMsT0FBTztJQUNULENBQUM7SUFDRCxFQUFFLENBQUMsYUFBYSxDQUNkLElBQUksV0FBVyxDQUFJLFNBQVMsRUFBRTtRQUM1QixRQUFRLEVBQUUsSUFBSTtRQUNkLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTztRQUN0QixNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQ25CLEVBQTRDLEVBQzVDLFNBQWlCLEVBQ2pCLElBQVEsRUFDUixJQUE0QjtJQUU1QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDMUMsT0FBTztJQUNULENBQUM7SUFDRCxpREFBaUQ7SUFDakQsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLFdBQVcsQ0FBK0IsS0FBSyxFQUFFO1FBQ25ELFFBQVEsRUFBRSxJQUFJO1FBQ2QsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPO1FBQ3RCLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLElBQUk7U0FDTDtLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELGlHQUFpRztBQUNqRyx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUFlLEVBQUUsSUFBWTtJQUN0RCxLQUFLLENBQW1CLEVBQUUsRUFBRSxvQkFBb0IsRUFBRTtRQUNoRCxJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBcHBTdGF0ZSA9IHtcbiAgZm9ybTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRmllbGRzZXRJdGVtU3RhdGU+W10+O1xuICBoaXN0b3J5OiBzdHJpbmdbXTtcbiAgZWRpdHRpbmc6IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkPzogRGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkc2V0SXRlbVN0YXRlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8vIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoPFQ+KFxuICBlbDogSFRNTEVsZW1lbnQgfCBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIGRldGFpbD86IFQsXG4gIG9wdHM/OiB7IGJ1YmJsZXM/OiBib29sZWFuIH0sXG4pIHtcbiAgaWYgKCFlbCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJkaXNwYXRjaCBlbGVtZW50IGlzIG51bGxcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsLmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50PFQ+KGV2ZW50TmFtZSwge1xuICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICBidWJibGVzOiBvcHRzPy5idWJibGVzLFxuICAgICAgZGV0YWlsOiBkZXRhaWwsXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxheTxUPihcbiAgZWw6IEhUTUxFbGVtZW50IHwgRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGV2ZW50TmFtZTogc3RyaW5nLFxuICBkYXRhPzogVCxcbiAgb3B0cz86IHsgYnViYmxlcz86IGJvb2xlYW4gfSxcbikge1xuICBpZiAoIWVsKSB7XG4gICAgY29uc29sZS5lcnJvcihcImRpc3BhdGNoIGVsZW1lbnQgaXMgbnVsbFwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gY29uc29sZS5sb2coYFJFTEFZKCR7ZXZlbnROYW1lfSk6YCwgZGF0YSwgZWwpO1xuICBlbC5kaXNwYXRjaEV2ZW50KFxuICAgIG5ldyBDdXN0b21FdmVudDx7IGFjdGlvbjogc3RyaW5nOyBkYXRhPzogVCB9PihcIm1zZ1wiLCB7XG4gICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgIGJ1YmJsZXM6IG9wdHM/LmJ1YmJsZXMsXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgYWN0aW9uOiBldmVudE5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgIH0pLFxuICApO1xufVxuXG4vLyBUT0RPOiBMb2dpYyBzaW1pbGFyIHRvIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBvbiB0aGUgUmVhY3Qgc2lkZSBhcyB3ZWxsIGkuZS4gYW4gaW5pdGlhbCBvbk1vdW50XG4vLyBldmVudCB0aGF0IHBhc3NlcyBhIHJlZiB0byB0aGUgZm9ybSxcbmV4cG9ydCBmdW5jdGlvbiBjb250aW51ZVRvKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogc3RyaW5nKSB7XG4gIHJlbGF5PHsgbmV4dDogc3RyaW5nIH0+KGVsLCBcImV4dGVybmFsOjpjb250aW51ZVwiLCB7XG4gICAgbmV4dDogbmFtZSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
2
|
-
export function validate(field, fieldsetEl, fieldsetState, validators) {
|
|
3
|
-
const value = fieldsetState?.[field]?.value;
|
|
4
|
-
for (const validator of validators) {
|
|
5
|
-
const msg = validator(value);
|
|
6
|
-
if (msg) {
|
|
7
|
-
dispatchError(fieldsetEl, field, msg);
|
|
8
|
-
return [false, ""];
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return [true, value];
|
|
12
|
-
}
|
|
13
|
-
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
14
|
-
function dispatchError(el, name, msg) {
|
|
15
|
-
el.dispatchEvent(new CustomEvent("msg", {
|
|
16
|
-
composed: true,
|
|
17
|
-
detail: {
|
|
18
|
-
action: "external::set:error",
|
|
19
|
-
data: {
|
|
20
|
-
name,
|
|
21
|
-
msg,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
export class FormValidator {
|
|
27
|
-
constructor(validators) {
|
|
28
|
-
this.validators = validators || {};
|
|
29
|
-
}
|
|
30
|
-
add(fieldName, ...validators) {
|
|
31
|
-
this.validators[fieldName] = validators;
|
|
32
|
-
}
|
|
33
|
-
validate(data) {
|
|
34
|
-
const errors = {};
|
|
35
|
-
Object.entries(this.validators).forEach(([name, validators]) => {
|
|
36
|
-
const err = validators
|
|
37
|
-
.map((validatorFn) => {
|
|
38
|
-
const errMsg = validatorFn(data[name]);
|
|
39
|
-
return errMsg;
|
|
40
|
-
})
|
|
41
|
-
.find((msg) => !!msg);
|
|
42
|
-
if (err) {
|
|
43
|
-
errors[name] = err;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
return errors;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// **********
|
|
50
|
-
// Validators
|
|
51
|
-
// **********
|
|
52
|
-
export function birthDayValidator() {
|
|
53
|
-
return [
|
|
54
|
-
requiredValidator("Day is required"),
|
|
55
|
-
numericValidator({
|
|
56
|
-
min: 1,
|
|
57
|
-
max: 31,
|
|
58
|
-
minMsg: "Day must be between 1 and 31",
|
|
59
|
-
maxMsg: "Day must be between 1 and 31",
|
|
60
|
-
}),
|
|
61
|
-
];
|
|
62
|
-
}
|
|
63
|
-
export function birthMonthValidator() {
|
|
64
|
-
return [
|
|
65
|
-
requiredValidator("Month is required"),
|
|
66
|
-
numericValidator({
|
|
67
|
-
min: 0,
|
|
68
|
-
max: 11,
|
|
69
|
-
minMsg: "Month must be between Jan and Dec",
|
|
70
|
-
maxMsg: "Month must be between Jan and Dec",
|
|
71
|
-
}),
|
|
72
|
-
];
|
|
73
|
-
}
|
|
74
|
-
export function birthYearValidator() {
|
|
75
|
-
const maxYear = new Date().getFullYear();
|
|
76
|
-
return [
|
|
77
|
-
requiredValidator("Year is required"),
|
|
78
|
-
numericValidator({
|
|
79
|
-
min: 1900,
|
|
80
|
-
max: maxYear,
|
|
81
|
-
minMsg: "Year must be greater than 1900",
|
|
82
|
-
maxMsg: `Year must be less than ${maxYear}`,
|
|
83
|
-
}),
|
|
84
|
-
];
|
|
85
|
-
}
|
|
86
|
-
export function requiredValidator(msg) {
|
|
87
|
-
return (value) => {
|
|
88
|
-
msg = msg || "Required";
|
|
89
|
-
if (typeof value === "number" && !isNaN(value)) {
|
|
90
|
-
return "";
|
|
91
|
-
}
|
|
92
|
-
if (value) {
|
|
93
|
-
return "";
|
|
94
|
-
}
|
|
95
|
-
return msg;
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
export function phoneNumberValidator(msg) {
|
|
99
|
-
const regex = new RegExp(/^\+?[\d-() ]{10,18}$/);
|
|
100
|
-
return regexValidator(regex, msg || "Invalid phone number");
|
|
101
|
-
}
|
|
102
|
-
export function emailValidator(msg) {
|
|
103
|
-
// emailregex.com
|
|
104
|
-
const regex = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
|
|
105
|
-
return regexValidator(regex, msg || "Invalid email address");
|
|
106
|
-
}
|
|
107
|
-
export function SINValidator() {
|
|
108
|
-
return (value) => {
|
|
109
|
-
if (!value)
|
|
110
|
-
return "";
|
|
111
|
-
const checkValue = "121121121".split("").map((c) => parseInt(c));
|
|
112
|
-
const valueStr = value.replace(/\D/g, "");
|
|
113
|
-
if (valueStr.length !== 9)
|
|
114
|
-
return "SIN must contain 9 numbers";
|
|
115
|
-
const checkSum = valueStr
|
|
116
|
-
.split("")
|
|
117
|
-
.map((c) => parseInt(c))
|
|
118
|
-
.map((num, index) => {
|
|
119
|
-
const val = num * checkValue[index];
|
|
120
|
-
if (val < 10) {
|
|
121
|
-
return val;
|
|
122
|
-
}
|
|
123
|
-
return `${val}`
|
|
124
|
-
.split("")
|
|
125
|
-
.map((c) => parseInt(c))
|
|
126
|
-
.reduce((acc, val) => acc * val, 1);
|
|
127
|
-
})
|
|
128
|
-
.reduce((acc, val) => acc + val, 0);
|
|
129
|
-
if (checkSum % 10 === 0) {
|
|
130
|
-
return "";
|
|
131
|
-
}
|
|
132
|
-
return "Invalid SIN";
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
export function postalCodeValidator() {
|
|
136
|
-
return regexValidator(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, "Invalid postal code");
|
|
137
|
-
}
|
|
138
|
-
export function regexValidator(regex, msg) {
|
|
139
|
-
return (value) => {
|
|
140
|
-
if (!value) {
|
|
141
|
-
return "";
|
|
142
|
-
}
|
|
143
|
-
if (value.match(regex)) {
|
|
144
|
-
return "";
|
|
145
|
-
}
|
|
146
|
-
return msg;
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
export function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }) {
|
|
150
|
-
return (date) => {
|
|
151
|
-
let _date = new Date(0);
|
|
152
|
-
if (typeof date === "string") {
|
|
153
|
-
_date = new Date(date);
|
|
154
|
-
}
|
|
155
|
-
if (date.toDateString) {
|
|
156
|
-
_date = date;
|
|
157
|
-
}
|
|
158
|
-
if (_date.toString() === "Invalid Date" || _date.getTime() === 0) {
|
|
159
|
-
return invalidMsg || "Invalid date";
|
|
160
|
-
}
|
|
161
|
-
if (_date && start && _date < start) {
|
|
162
|
-
return startMsg || `Must be after ${start}`;
|
|
163
|
-
}
|
|
164
|
-
if (_date && end && _date > end) {
|
|
165
|
-
return endMsg || `Must be before ${end}`;
|
|
166
|
-
}
|
|
167
|
-
return "";
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
export function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
171
|
-
return (value) => {
|
|
172
|
-
let _value = Number.MAX_VALUE;
|
|
173
|
-
if (typeof value === "string") {
|
|
174
|
-
_value = parseFloat(value);
|
|
175
|
-
}
|
|
176
|
-
if (typeof value === "number") {
|
|
177
|
-
_value = value;
|
|
178
|
-
}
|
|
179
|
-
if (isNaN(_value)) {
|
|
180
|
-
return invalidTypeMsg || "Must be a numeric value";
|
|
181
|
-
}
|
|
182
|
-
if (_value > max) {
|
|
183
|
-
return maxMsg || `Must be less than or equal to ${max}`;
|
|
184
|
-
}
|
|
185
|
-
if (_value < min) {
|
|
186
|
-
return minMsg || `Must be greater than or equal to ${min}`;
|
|
187
|
-
}
|
|
188
|
-
return "";
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
export function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
192
|
-
return (value) => {
|
|
193
|
-
if (typeof value !== "string") {
|
|
194
|
-
return invalidTypeMsg || "Invalid type";
|
|
195
|
-
}
|
|
196
|
-
if (value.length > max) {
|
|
197
|
-
return maxMsg || `Must be less than ${max} characters`;
|
|
198
|
-
}
|
|
199
|
-
if (value.length < min) {
|
|
200
|
-
return minMsg || `Must be greater than ${min} characters`;
|
|
201
|
-
}
|
|
202
|
-
return "";
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsS0FBYSxFQUNiLFVBQXVCLEVBQ3ZCLGFBQTRCLEVBQzVCLFVBQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUU1QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELDhGQUE4RjtBQUM5RixTQUFTLGFBQWEsQ0FBQyxFQUFlLEVBQUUsSUFBWSxFQUFFLEdBQVc7SUFDL0QsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDckIsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUscUJBQXFCO1lBQzdCLElBQUksRUFBRTtnQkFDSixJQUFJO2dCQUNKLEdBQUc7YUFDSjtTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBWSxVQUE2QztRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDckMs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O1FBRUQsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsT0FBTyxNQUFNLElBQUksaUNBQWlDLEdBQUcsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNqQixPQUFPLE1BQU0sSUFBSSxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsY0FBYyxFQUNkLE1BQU0sRUFDTixNQUFNLEVBQ04sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFDdkIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQ0M7SUFDdkIsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxjQUFjLElBQUksY0FBYyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUkscUJBQXFCLEdBQUcsYUFBYSxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUksd0JBQXdCLEdBQUcsYUFBYSxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZHNldEl0ZW1TdGF0ZSB9IGZyb20gXCIuL3B1YmxpYy1mb3JtLXV0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkVmFsaWRhdG9yID0gKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBGaWVsZHNldFN0YXRlID0gUmVjb3JkPHN0cmluZywgRmllbGRzZXRJdGVtU3RhdGU+O1xuXG4vLyBUT0RPOiBtb3ZlIHRoaXMgaW50byB0aGUgZm9ybS11dGlscyBmaWxlLCBzaW5jZSBpdCBpcyBzcGVjaWZpYyB0byB0aGUgcHVibGljIGZvcm0gY29tcG9uZW50XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGZpZWxkc2V0RWw6IEhUTUxFbGVtZW50LFxuICBmaWVsZHNldFN0YXRlOiBGaWVsZHNldFN0YXRlLFxuICB2YWxpZGF0b3JzOiBGaWVsZFZhbGlkYXRvcltdLFxuKTogW2Jvb2xlYW4sIHN0cmluZ10ge1xuICBjb25zdCB2YWx1ZSA9IGZpZWxkc2V0U3RhdGU/LltmaWVsZF0/LnZhbHVlO1xuXG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCBtc2cgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgIGlmIChtc2cpIHtcbiAgICAgIGRpc3BhdGNoRXJyb3IoZmllbGRzZXRFbCwgZmllbGQsIG1zZyk7XG4gICAgICByZXR1cm4gW2ZhbHNlLCBcIlwiXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt0cnVlLCB2YWx1ZV07XG59XG5cbi8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHRoZSBmb3JtLXV0aWxzIGZpbGUsIHNpbmNlIGl0IGlzIHNwZWNpZmljIHRvIHRoZSBwdWJsaWMgZm9ybSBjb21wb25lbnRcbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGVsLmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwibXNnXCIsIHtcbiAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGFjdGlvbjogXCJleHRlcm5hbDo6c2V0OmVycm9yXCIsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSB2YWxpZGF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFZhbGlkYXRvcltdPjtcbiAgY29uc3RydWN0b3IodmFsaWRhdG9ycz86IFJlY29yZDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yW10+KSB7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gdmFsaWRhdG9ycyB8fCB7fTtcbiAgfVxuXG4gIGFkZChmaWVsZE5hbWU6IHN0cmluZywgLi4udmFsaWRhdG9yczogRmllbGRWYWxpZGF0b3JbXSkge1xuICAgIHRoaXMudmFsaWRhdG9yc1tmaWVsZE5hbWVdID0gdmFsaWRhdG9ycztcbiAgfVxuXG4gIHZhbGlkYXRlKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdG9ycykuZm9yRWFjaCgoW25hbWUsIHZhbGlkYXRvcnNdKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSB2YWxpZGF0b3JzXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvckZuKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gdmFsaWRhdG9yRm4oZGF0YVtuYW1lXSk7XG4gICAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmQoKG1zZykgPT4gISFtc2cpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBlcnI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG59XG5cbi8vICoqKioqKioqKipcbi8vIFZhbGlkYXRvcnNcbi8vICoqKioqKioqKipcblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoRGF5VmFsaWRhdG9yKCk6IEZpZWxkVmFsaWRhdG9yW10ge1xuICByZXR1cm4gW1xuICAgIHJlcXVpcmVkVmFsaWRhdG9yKFwiRGF5IGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAxLFxuICAgICAgbWF4OiAzMSxcbiAgICAgIG1pbk1zZzogXCJEYXkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMxXCIsXG4gICAgICBtYXhNc2c6IFwiRGF5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzMVwiLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlydGhNb250aFZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIk1vbnRoIGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMSxcbiAgICAgIG1pbk1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICAgIG1heE1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICB9KSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoWWVhclZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgY29uc3QgbWF4WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIlllYXIgaXMgcmVxdWlyZWRcIiksXG4gICAgbnVtZXJpY1ZhbGlkYXRvcih7XG4gICAgICBtaW46IDE5MDAsXG4gICAgICBtYXg6IG1heFllYXIsXG4gICAgICBtaW5Nc2c6IFwiWWVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxOTAwXCIsXG4gICAgICBtYXhNc2c6IGBZZWFyIG11c3QgYmUgbGVzcyB0aGFuICR7bWF4WWVhcn1gLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWRWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgbXNnID0gbXNnIHx8IFwiUmVxdWlyZWRcIjtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaG9uZU51bWJlclZhbGlkYXRvcihtc2c/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXlxcKz9bXFxkLSgpIF17MTAsMTh9JC8pO1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IocmVnZXgsIG1zZyB8fCBcIkludmFsaWQgcGhvbmUgbnVtYmVyXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICAvLyBlbWFpbHJlZ2V4LmNvbVxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31dKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgKTtcbiAgcmV0dXJuIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4LCBtc2cgfHwgXCJJbnZhbGlkIGVtYWlsIGFkZHJlc3NcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTSU5WYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgY2hlY2tWYWx1ZSA9IFwiMTIxMTIxMTIxXCIuc3BsaXQoXCJcIikubWFwKChjKSA9PiBwYXJzZUludChjKSk7XG4gICAgY29uc3QgdmFsdWVTdHIgPSAodmFsdWUgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG5cbiAgICBpZiAodmFsdWVTdHIubGVuZ3RoICE9PSA5KSByZXR1cm4gXCJTSU4gbXVzdCBjb250YWluIDkgbnVtYmVyc1wiO1xuXG4gICAgY29uc3QgY2hlY2tTdW0gPSB2YWx1ZVN0clxuICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAubWFwKChjKSA9PiBwYXJzZUludChjKSlcbiAgICAgIC5tYXAoKG51bSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbnVtICogY2hlY2tWYWx1ZVtpbmRleF07XG4gICAgICAgIGlmICh2YWwgPCAxMCkge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbH1gXG4gICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgLm1hcCgoYykgPT4gcGFyc2VJbnQoYykpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqIHZhbCwgMSk7XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XG5cbiAgICBpZiAoY2hlY2tTdW0gJSAxMCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiSW52YWxpZCBTSU5cIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3RhbENvZGVWYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IoXG4gICAgL15bQUJDRUdISi1OUFJTVFZYWV1cXGRbQUJDRUdISi1OUFJTVFYtWl1bIC1dP1xcZFtBQkNFR0hKLU5QUlNUVi1aXVxcZCQvaSxcbiAgICBcIkludmFsaWQgcG9zdGFsIGNvZGVcIixcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4OiBSZWdFeHAsIG1zZzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICgodmFsdWUgYXMgc3RyaW5nKS5tYXRjaChyZWdleCkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGludmFsaWRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0TXNnPzogc3RyaW5nO1xuICBlbmRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0PzogRGF0ZTtcbiAgZW5kPzogRGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVmFsaWRhdG9yKHtcbiAgaW52YWxpZE1zZyxcbiAgc3RhcnRNc2csXG4gIGVuZE1zZyxcbiAgc3RhcnQsXG4gIGVuZCxcbn06IERhdGVWYWxpZGF0b3JPcHRpb25zKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKGRhdGU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX2RhdGU6IERhdGUgPSBuZXcgRGF0ZSgwKTtcblxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX2RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB9XG4gICAgaWYgKChkYXRlIGFzIERhdGUpLnRvRGF0ZVN0cmluZykge1xuICAgICAgX2RhdGUgPSBkYXRlIGFzIERhdGU7XG4gICAgfVxuXG4gICAgaWYgKF9kYXRlLnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgfHwgX2RhdGUuZ2V0VGltZSgpID09PSAwKSB7XG4gICAgICByZXR1cm4gaW52YWxpZE1zZyB8fCBcIkludmFsaWQgZGF0ZVwiO1xuICAgIH1cblxuICAgIGlmIChfZGF0ZSAmJiBzdGFydCAmJiBfZGF0ZSA8IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gc3RhcnRNc2cgfHwgYE11c3QgYmUgYWZ0ZXIgJHtzdGFydH1gO1xuICAgIH1cbiAgICBpZiAoX2RhdGUgJiYgZW5kICYmIF9kYXRlID4gZW5kKSB7XG4gICAgICByZXR1cm4gZW5kTXNnIHx8IGBNdXN0IGJlIGJlZm9yZSAke2VuZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMge1xuICBpbnZhbGlkVHlwZU1zZz86IHN0cmluZztcbiAgbWluTXNnPzogc3RyaW5nO1xuICBtYXhNc2c/OiBzdHJpbmc7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWVyaWNWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX3ZhbHVlOiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX3ZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChpc05hTihfdmFsdWUpKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2cgfHwgXCJNdXN0IGJlIGEgbnVtZXJpYyB2YWx1ZVwiO1xuICAgIH1cblxuICAgIGlmIChfdmFsdWUgPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7bWF4fWA7XG4gICAgfVxuICAgIGlmIChfdmFsdWUgPCBtaW4pIHtcbiAgICAgIHJldHVybiBtaW5Nc2cgfHwgYE11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG5cbmludGVyZmFjZSBMZW5ndGhWYWxpZGF0b3JPcHRpb25zIHtcbiAgaW52YWxpZFR5cGVNc2c/OiBzdHJpbmc7XG4gIG1pbk1zZz86IHN0cmluZztcbiAgbWF4TXNnPzogc3RyaW5nO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVHlwZU1zZyB8fCBcIkludmFsaWQgdHlwZVwiO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuICR7bWF4fSBjaGFyYWN0ZXJzYDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgbWluKSB7XG4gICAgICByZXR1cm4gbWluTXNnIHx8IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAke21pbn0gY2hhcmFjdGVyc2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export type AppState = {
|
|
2
|
-
form: Record<string, Record<string, FieldsetItemState>[]>;
|
|
3
|
-
history: string[];
|
|
4
|
-
editting: string;
|
|
5
|
-
lastModified?: Date;
|
|
6
|
-
};
|
|
7
|
-
export type FieldsetItemState = {
|
|
8
|
-
name: string;
|
|
9
|
-
label: string;
|
|
10
|
-
value: string;
|
|
11
|
-
};
|
|
12
|
-
export declare function dispatch<T>(el: HTMLElement | Element | null | undefined, eventName: string, detail?: T, opts?: {
|
|
13
|
-
bubbles?: boolean;
|
|
14
|
-
}): void;
|
|
15
|
-
export declare function relay<T>(el: HTMLElement | Element | null | undefined, eventName: string, data?: T, opts?: {
|
|
16
|
-
bubbles?: boolean;
|
|
17
|
-
}): void;
|
|
18
|
-
export declare function continueTo(el: HTMLElement, name: string): void;
|
package/lib/validation.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { FieldsetItemState } from "./public-form-utils";
|
|
2
|
-
export type FieldValidator = (value: unknown) => string;
|
|
3
|
-
export type FieldsetState = Record<string, FieldsetItemState>;
|
|
4
|
-
export declare function validate(field: string, fieldsetEl: HTMLElement, fieldsetState: FieldsetState, validators: FieldValidator[]): [boolean, string];
|
|
5
|
-
export declare class FormValidator {
|
|
6
|
-
private readonly validators;
|
|
7
|
-
constructor(validators?: Record<string, FieldValidator[]>);
|
|
8
|
-
add(fieldName: string, ...validators: FieldValidator[]): void;
|
|
9
|
-
validate(data: Record<string, string>): Record<string, string>;
|
|
10
|
-
}
|
|
11
|
-
export declare function birthDayValidator(): FieldValidator[];
|
|
12
|
-
export declare function birthMonthValidator(): FieldValidator[];
|
|
13
|
-
export declare function birthYearValidator(): FieldValidator[];
|
|
14
|
-
export declare function requiredValidator(msg?: string): FieldValidator;
|
|
15
|
-
export declare function phoneNumberValidator(msg?: string): FieldValidator;
|
|
16
|
-
export declare function emailValidator(msg?: string): FieldValidator;
|
|
17
|
-
export declare function SINValidator(): FieldValidator;
|
|
18
|
-
export declare function postalCodeValidator(): FieldValidator;
|
|
19
|
-
export declare function regexValidator(regex: RegExp, msg: string): FieldValidator;
|
|
20
|
-
interface DateValidatorOptions {
|
|
21
|
-
invalidMsg?: string;
|
|
22
|
-
startMsg?: string;
|
|
23
|
-
endMsg?: string;
|
|
24
|
-
start?: Date;
|
|
25
|
-
end?: Date;
|
|
26
|
-
}
|
|
27
|
-
export declare function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }: DateValidatorOptions): FieldValidator;
|
|
28
|
-
interface NumericValidatorOptions {
|
|
29
|
-
invalidTypeMsg?: string;
|
|
30
|
-
minMsg?: string;
|
|
31
|
-
maxMsg?: string;
|
|
32
|
-
min?: number;
|
|
33
|
-
max?: number;
|
|
34
|
-
}
|
|
35
|
-
export declare function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min, max, }: NumericValidatorOptions): FieldValidator;
|
|
36
|
-
interface LengthValidatorOptions {
|
|
37
|
-
invalidTypeMsg?: string;
|
|
38
|
-
minMsg?: string;
|
|
39
|
-
maxMsg?: string;
|
|
40
|
-
max?: number;
|
|
41
|
-
min?: number;
|
|
42
|
-
}
|
|
43
|
-
export declare function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min, max, }: LengthValidatorOptions): FieldValidator;
|
|
44
|
-
export {};
|