tuain-ng-forms-lib 0.12.23 → 12.0.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.
Files changed (36) hide show
  1. package/bundles/tuain-ng-forms-lib.umd.js +624 -662
  2. package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
  3. package/esm2015/lib/classes/forms/action.js +5 -5
  4. package/esm2015/lib/classes/forms/element.js +7 -6
  5. package/esm2015/lib/classes/forms/field.js +149 -166
  6. package/esm2015/lib/classes/forms/form.constants.js +11 -82
  7. package/esm2015/lib/classes/forms/form.js +8 -8
  8. package/esm2015/lib/classes/forms/subsection.js +6 -6
  9. package/esm2015/lib/classes/forms/table/column.js +5 -5
  10. package/esm2015/lib/classes/forms/table/row-data.js +6 -4
  11. package/esm2015/lib/classes/forms/table/table.js +15 -13
  12. package/esm2015/lib/components/elements/action.component.js +3 -1
  13. package/esm2015/lib/components/elements/field.component.js +45 -7
  14. package/esm2015/lib/components/elements/layout/element.component.js +3 -6
  15. package/esm2015/lib/components/elements/layout/form-error.component.js +1 -1
  16. package/esm2015/lib/components/elements/tables/table.component.js +7 -7
  17. package/esm2015/lib/components/forms/basic-form.js +89 -85
  18. package/esm2015/lib/services/form-manager.service.js +60 -54
  19. package/fesm2015/tuain-ng-forms-lib.js +410 -440
  20. package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
  21. package/lib/classes/forms/action.d.ts +1 -1
  22. package/lib/classes/forms/element.d.ts +3 -2
  23. package/lib/classes/forms/field.d.ts +19 -13
  24. package/lib/classes/forms/form.constants.d.ts +10 -74
  25. package/lib/classes/forms/form.d.ts +2 -1
  26. package/lib/classes/forms/table/column.d.ts +2 -1
  27. package/lib/classes/forms/table/table.d.ts +1 -1
  28. package/lib/components/elements/action.component.d.ts +1 -0
  29. package/lib/components/elements/field.component.d.ts +17 -2
  30. package/lib/components/elements/layout/element.component.d.ts +1 -2
  31. package/lib/components/elements/layout/form-error.component.d.ts +0 -1
  32. package/lib/components/elements/tables/table.component.d.ts +1 -0
  33. package/lib/components/forms/basic-form.d.ts +23 -4
  34. package/lib/services/form-manager.service.d.ts +22 -15
  35. package/package.json +1 -1
  36. package/tuain-ng-forms-lib.metadata.json +1 -1
@@ -3,71 +3,77 @@ export class LibFormManagerService {
3
3
  constructor() {
4
4
  this.cleanStack();
5
5
  }
6
- /**
7
- * Métodos virtuales de manejo de formularios
8
- */
6
+ // Métodos virtuales para las aplicaciones
9
7
  getFormDefinition(formCode) { }
8
+ getFormRoute(formCode) { }
9
+ getRouteForm(path) { }
10
10
  execServerAction(actionDetail) { }
11
- goToRoute(navigationArray) { }
12
- /**
13
- * Manejo del stack de navegación con atributos estados y parámetros
14
- */
15
- resetPageStack() { this.cleanStack(); }
16
- cleanStack() {
17
- this.pageStack = [];
18
- }
11
+ goToForm(formCode, token, subject) { }
19
12
  loadStack() { }
20
13
  saveStack() { }
21
- stack(data) {
22
- const id = nanoid(6);
23
- this.pageStack.push({ id, data });
24
- this.saveStack();
25
- return id;
14
+ cleanStack() { this.pageStack = []; }
15
+ resetPageStack() { this.cleanStack(); }
16
+ findFormInStack(token) {
17
+ const index = this.pageStack.findIndex(item => (item === null || item === void 0 ? void 0 : item.token) === token);
18
+ const data = (index >= 0) ? this.pageStack[index] : null;
19
+ return { index, data };
26
20
  }
27
- unstack(id) {
28
- const stackIdx = this.pageStack.findIndex(item => item.id === id);
29
- if (stackIdx >= 0) {
30
- const formData = this.pageStack[stackIdx].data;
31
- // Se eliminan los formularios posteriores al solicitado
32
- this.pageStack.splice(stackIdx + 1);
21
+ replaceItem(token, formInfo) {
22
+ var _a, _b;
23
+ if (!token || !formInfo) {
24
+ return;
25
+ }
26
+ const { index, data: storedForm } = this.findFormInStack(token);
27
+ let updatedForm = null;
28
+ if (index >= 0) {
29
+ updatedForm = Object.assign({}, storedForm);
30
+ updatedForm.subject = (_a = formInfo === null || formInfo === void 0 ? void 0 : formInfo.subject) !== null && _a !== void 0 ? _a : storedForm.subject;
31
+ updatedForm.state = (_b = formInfo === null || formInfo === void 0 ? void 0 : formInfo.state) !== null && _b !== void 0 ? _b : storedForm.state;
32
+ Object.assign(updatedForm.fields, formInfo.fields);
33
+ Object.assign(updatedForm.extra, formInfo.extra);
34
+ this.pageStack[index] = updatedForm;
33
35
  this.saveStack();
34
- return formData;
35
36
  }
36
37
  }
37
- getInputData(id) {
38
- const stackIdx = (id) ? this.pageStack.findIndex(item => item.id === id) : -1;
39
- if (stackIdx >= 0) {
40
- const { target: { predefinedFields } } = this.pageStack[stackIdx].data;
41
- return predefinedFields;
42
- }
43
- return null;
38
+ stack(origin, target) {
39
+ const token = nanoid(6);
40
+ this.replaceItem(target.originToken, origin);
41
+ this.pageStack.push(Object.assign({ token }, target));
42
+ this.saveStack();
43
+ return token;
44
44
  }
45
- getOriginInfo(id) {
46
- const stackIdx = (id) ? this.pageStack.findIndex(item => item.id === id) : -1;
47
- if (stackIdx >= 0) {
48
- const { origin } = this.pageStack[stackIdx].data;
49
- return JSON.parse(JSON.stringify(origin));
45
+ unstack(token = null) {
46
+ let index = (token) ? this.findFormInStack(token).index : this.pageStack.length - 2;
47
+ let formInfo = null;
48
+ if (index >= 0) {
49
+ formInfo = this.pageStack[index];
50
+ this.pageStack.splice(index + 1);
51
+ this.saveStack();
50
52
  }
51
- return null;
53
+ return formInfo;
52
54
  }
53
- changeForm(origin, target) {
54
- if (!origin) {
55
- this.cleanStack();
56
- }
57
- const { url, params } = target;
58
- const newToken = this.stack({ origin, target });
59
- const navigationArray = [url, ...params, newToken];
60
- this.goToRoute(navigationArray);
55
+ getFormInfo(token) {
56
+ var _a, _b;
57
+ const { data } = this.findFormInStack(token);
58
+ return {
59
+ token: data === null || data === void 0 ? void 0 : data.token,
60
+ subject: data === null || data === void 0 ? void 0 : data.subject,
61
+ state: data === null || data === void 0 ? void 0 : data.state,
62
+ originToken: data === null || data === void 0 ? void 0 : data.originToken,
63
+ fields: (_a = data === null || data === void 0 ? void 0 : data.fields) !== null && _a !== void 0 ? _a : {},
64
+ extra: (_b = data === null || data === void 0 ? void 0 : data.extra) !== null && _b !== void 0 ? _b : {}
65
+ };
61
66
  }
62
- changePreviousForm(transitionToken) {
63
- const prevForm = this.unstack(transitionToken);
64
- if (!prevForm) {
65
- return;
66
- }
67
- const { origin: { url, params, token } } = prevForm;
68
- const navigationArray = [url, ...params];
69
- token && navigationArray.push(token);
70
- this.goToRoute(navigationArray);
67
+ openForm(origin, target) {
68
+ var _a;
69
+ (!origin) && this.cleanStack();
70
+ target.originToken = (_a = origin === null || origin === void 0 ? void 0 : origin.token) !== null && _a !== void 0 ? _a : null;
71
+ const token = this.stack(origin, target);
72
+ this.goToForm(target.name, token, target.subject);
73
+ }
74
+ backTo(targetToken = null) {
75
+ const formInfo = this.unstack(targetToken);
76
+ formInfo && formInfo.name && this.goToForm(formInfo.name, formInfo.token, formInfo.subject);
71
77
  }
72
78
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLE1BQU0sT0FBTyxxQkFBcUI7SUFHaEM7UUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBRUgsaUJBQWlCLENBQUMsUUFBUSxJQUFJLENBQUM7SUFDL0IsZ0JBQWdCLENBQUMsWUFBWSxJQUFJLENBQUM7SUFDbEMsU0FBUyxDQUFDLGVBQXNCLElBQUksQ0FBQztJQUVyQzs7T0FFRztJQUVILGNBQWMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRXRDLFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUyxLQUFLLENBQUM7SUFDZixTQUFTLEtBQUssQ0FBQztJQUVmLEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFFO1FBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtZQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvQyx3REFBd0Q7WUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPLFFBQVEsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsRUFBVTtRQUNyQixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtZQUNqQixNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLE9BQU8sZ0JBQWdCLENBQUM7U0FDekI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBVTtRQUN0QixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtZQUNqQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXLEVBQUUsTUFBVztRQUNqQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLGVBQXVCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUMxQixNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNwRCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcblxuZXhwb3J0IGNsYXNzIExpYkZvcm1NYW5hZ2VyU2VydmljZSB7XG4gIHBhZ2VTdGFjazogYW55W107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jbGVhblN0YWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kb3MgdmlydHVhbGVzIGRlIG1hbmVqbyBkZSBmb3JtdWxhcmlvc1xuICAgKi9cblxuICBnZXRGb3JtRGVmaW5pdGlvbihmb3JtQ29kZSkgeyB9XG4gIGV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKSB7IH1cbiAgZ29Ub1JvdXRlKG5hdmlnYXRpb25BcnJheTogYW55W10pIHsgfVxuXG4gIC8qKlxuICAgKiBNYW5lam8gZGVsIHN0YWNrIGRlIG5hdmVnYWNpw7NuIGNvbiBhdHJpYnV0b3MgZXN0YWRvcyB5IHBhcsOhbWV0cm9zXG4gICAqL1xuXG4gIHJlc2V0UGFnZVN0YWNrKCkgeyB0aGlzLmNsZWFuU3RhY2soKSB9XG5cbiAgY2xlYW5TdGFjaygpIHtcbiAgICB0aGlzLnBhZ2VTdGFjayA9IFtdO1xuICB9XG5cbiAgbG9hZFN0YWNrKCkgeyB9XG4gIHNhdmVTdGFjaygpIHsgfVxuXG4gIHN0YWNrKGRhdGEpIHtcbiAgICBjb25zdCBpZCA9IG5hbm9pZCg2KTtcbiAgICB0aGlzLnBhZ2VTdGFjay5wdXNoKHsgaWQsIGRhdGEgfSk7XG4gICAgdGhpcy5zYXZlU3RhY2soKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICB1bnN0YWNrKGlkKSB7XG4gICAgY29uc3Qgc3RhY2tJZHggPSB0aGlzLnBhZ2VTdGFjay5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG4gICAgaWYgKHN0YWNrSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5wYWdlU3RhY2tbc3RhY2tJZHhdLmRhdGE7XG4gICAgICAvLyBTZSBlbGltaW5hbiBsb3MgZm9ybXVsYXJpb3MgcG9zdGVyaW9yZXMgYWwgc29saWNpdGFkb1xuICAgICAgdGhpcy5wYWdlU3RhY2suc3BsaWNlKHN0YWNrSWR4ICsgMSk7XG4gICAgICB0aGlzLnNhdmVTdGFjaygpO1xuICAgICAgcmV0dXJuIGZvcm1EYXRhO1xuICAgIH1cbiAgfVxuXG4gIGdldElucHV0RGF0YShpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RhY2tJZHggPSAoaWQpID8gdGhpcy5wYWdlU3RhY2suZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpIDogLTE7XG4gICAgaWYgKHN0YWNrSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IHsgdGFyZ2V0OiB7IHByZWRlZmluZWRGaWVsZHMgfSB9ID0gdGhpcy5wYWdlU3RhY2tbc3RhY2tJZHhdLmRhdGE7XG4gICAgICByZXR1cm4gcHJlZGVmaW5lZEZpZWxkcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRPcmlnaW5JbmZvKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFja0lkeCA9IChpZCkgPyB0aGlzLnBhZ2VTdGFjay5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBpZCkgOiAtMTtcbiAgICBpZiAoc3RhY2tJZHggPj0gMCkge1xuICAgICAgY29uc3QgeyBvcmlnaW4gfSA9IHRoaXMucGFnZVN0YWNrW3N0YWNrSWR4XS5kYXRhO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luKSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY2hhbmdlRm9ybShvcmlnaW46IGFueSwgdGFyZ2V0OiBhbnkpIHtcbiAgICBpZiAoIW9yaWdpbikge1xuICAgICAgdGhpcy5jbGVhblN0YWNrKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgdXJsLCBwYXJhbXMgfSA9IHRhcmdldDtcbiAgICBjb25zdCBuZXdUb2tlbiA9IHRoaXMuc3RhY2soeyBvcmlnaW4sIHRhcmdldCB9KTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uQXJyYXkgPSBbdXJsLCAuLi5wYXJhbXMsIG5ld1Rva2VuXTtcbiAgICB0aGlzLmdvVG9Sb3V0ZShuYXZpZ2F0aW9uQXJyYXkpO1xuICB9XG5cbiAgY2hhbmdlUHJldmlvdXNGb3JtKHRyYW5zaXRpb25Ub2tlbjogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJldkZvcm0gPSB0aGlzLnVuc3RhY2sodHJhbnNpdGlvblRva2VuKTtcbiAgICBpZiAoIXByZXZGb3JtKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHsgb3JpZ2luOiB7IHVybCwgcGFyYW1zLCB0b2tlbiB9IH0gPSBwcmV2Rm9ybTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uQXJyYXkgPSBbdXJsLCAuLi5wYXJhbXNdO1xuICAgIHRva2VuICYmIG5hdmlnYXRpb25BcnJheS5wdXNoKHRva2VuKTtcbiAgICB0aGlzLmdvVG9Sb3V0ZShuYXZpZ2F0aW9uQXJyYXkpO1xuICB9XG59XG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLE1BQU0sT0FBTyxxQkFBcUI7SUFHaEM7UUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxpQkFBaUIsQ0FBQyxRQUFRLElBQUksQ0FBQztJQUMvQixZQUFZLENBQUMsUUFBUSxJQUFJLENBQUM7SUFDMUIsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3RCLGdCQUFnQixDQUFDLFlBQVksSUFBSSxDQUFDO0lBQ2xDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RDLFNBQVMsS0FBSyxDQUFDO0lBQ2YsU0FBUyxLQUFLLENBQUM7SUFFZixVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLGNBQWMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRXRDLGVBQWUsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSyxNQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7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LEtBQUssRUFBRSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLG1DQUFJLEVBQUU7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBVyxFQUFFLE1BQVc7O1FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLG1DQUFJLElBQUksQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5cbmV4cG9ydCBjbGFzcyBMaWJGb3JtTWFuYWdlclNlcnZpY2Uge1xuICBwYWdlU3RhY2s6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYW5TdGFjaygpO1xuICB9XG5cbiAgLy8gTcOpdG9kb3MgdmlydHVhbGVzIHBhcmEgbGFzIGFwbGljYWNpb25lc1xuICBnZXRGb3JtRGVmaW5pdGlvbihmb3JtQ29kZSkgeyB9XG4gIGdldEZvcm1Sb3V0ZShmb3JtQ29kZSkgeyB9XG4gIGdldFJvdXRlRm9ybShwYXRoKSB7IH1cbiAgZXhlY1NlcnZlckFjdGlvbihhY3Rpb25EZXRhaWwpIHsgfVxuICBnb1RvRm9ybShmb3JtQ29kZSwgdG9rZW4sIHN1YmplY3QpIHsgfVxuICBsb2FkU3RhY2soKSB7IH1cbiAgc2F2ZVN0YWNrKCkgeyB9XG5cbiAgY2xlYW5TdGFjaygpIHsgdGhpcy5wYWdlU3RhY2sgPSBbXTsgfVxuICByZXNldFBhZ2VTdGFjaygpIHsgdGhpcy5jbGVhblN0YWNrKCkgfVxuXG4gIGZpbmRGb3JtSW5TdGFjayh0b2tlbikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYWdlU3RhY2suZmluZEluZGV4KGl0ZW0gPT4gaXRlbT8udG9rZW4gPT09IHRva2VuKTtcbiAgICBjb25zdCBkYXRhID0gKGluZGV4ID49IDApID8gdGhpcy5wYWdlU3RhY2tbaW5kZXhdIDogbnVsbDtcbiAgICByZXR1cm4geyBpbmRleCwgZGF0YSB9O1xuICB9XG5cbiAgcmVwbGFjZUl0ZW0odG9rZW4sIGZvcm1JbmZvKSB7XG4gICAgaWYgKCF0b2tlbiB8fCAhZm9ybUluZm8pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgeyBpbmRleCwgZGF0YTogc3RvcmVkRm9ybSB9ID0gdGhpcy5maW5kRm9ybUluU3RhY2sodG9rZW4pO1xuICAgIGxldCB1cGRhdGVkRm9ybTogYW55ID0gbnVsbDtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdXBkYXRlZEZvcm0gPSB7IC4uLnN0b3JlZEZvcm0gfTtcbiAgICAgIHVwZGF0ZWRGb3JtLnN1YmplY3QgPSBmb3JtSW5mbz8uc3ViamVjdCA/PyBzdG9yZWRGb3JtLnN1YmplY3Q7XG4gICAgICB1cGRhdGVkRm9ybS5zdGF0ZSA9IGZvcm1JbmZvPy5zdGF0ZSA/PyBzdG9yZWRGb3JtLnN0YXRlO1xuICAgICAgT2JqZWN0LmFzc2lnbih1cGRhdGVkRm9ybS5maWVsZHMsIGZvcm1JbmZvLmZpZWxkcyk7XG4gICAgICBPYmplY3QuYXNzaWduKHVwZGF0ZWRGb3JtLmV4dHJhLCBmb3JtSW5mby5leHRyYSk7XG4gICAgICB0aGlzLnBhZ2VTdGFja1tpbmRleF0gPSB1cGRhdGVkRm9ybTtcbiAgICAgIHRoaXMuc2F2ZVN0YWNrKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhY2sob3JpZ2luLCB0YXJnZXQpIHtcbiAgICBjb25zdCB0b2tlbiA9IG5hbm9pZCg2KTtcbiAgICB0aGlzLnJlcGxhY2VJdGVtKHRhcmdldC5vcmlnaW5Ub2tlbiwgb3JpZ2luKTtcbiAgICB0aGlzLnBhZ2VTdGFjay5wdXNoKHsgdG9rZW4sIC4uLnRhcmdldCB9KTtcbiAgICB0aGlzLnNhdmVTdGFjaygpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHVuc3RhY2sodG9rZW4gPSBudWxsKSB7XG4gICAgbGV0IGluZGV4ID0gKHRva2VuKSA/IHRoaXMuZmluZEZvcm1JblN0YWNrKHRva2VuKS5pbmRleCA6IHRoaXMucGFnZVN0YWNrLmxlbmd0aCAtIDI7XG4gICAgbGV0IGZvcm1JbmZvID0gbnVsbDtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgZm9ybUluZm8gPSB0aGlzLnBhZ2VTdGFja1tpbmRleF07XG4gICAgICB0aGlzLnBhZ2VTdGFjay5zcGxpY2UoaW5kZXggKyAxKTtcbiAgICAgIHRoaXMuc2F2ZVN0YWNrKCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtSW5mbztcbiAgfVxuXG4gIGdldEZvcm1JbmZvKHRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuZmluZEZvcm1JblN0YWNrKHRva2VuKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IGRhdGE/LnRva2VuLFxuICAgICAgc3ViamVjdDogZGF0YT8uc3ViamVjdCxcbiAgICAgIHN0YXRlOiBkYXRhPy5zdGF0ZSxcbiAgICAgIG9yaWdpblRva2VuOiBkYXRhPy5vcmlnaW5Ub2tlbixcbiAgICAgIGZpZWxkczogZGF0YT8uZmllbGRzID8/IHt9LFxuICAgICAgZXh0cmE6IGRhdGE/LmV4dHJhID8/IHt9XG4gICAgfTtcbiAgfVxuXG4gIG9wZW5Gb3JtKG9yaWdpbjogYW55LCB0YXJnZXQ6IGFueSkge1xuICAgICghb3JpZ2luKSAmJiB0aGlzLmNsZWFuU3RhY2soKTtcbiAgICB0YXJnZXQub3JpZ2luVG9rZW4gPSBvcmlnaW4/LnRva2VuID8/IG51bGw7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnN0YWNrKG9yaWdpbiwgdGFyZ2V0KTtcbiAgICB0aGlzLmdvVG9Gb3JtKHRhcmdldC5uYW1lLCB0b2tlbiwgdGFyZ2V0LnN1YmplY3QpO1xuICB9XG5cbiAgYmFja1RvKHRhcmdldFRva2VuID0gbnVsbCkge1xuICAgIGNvbnN0IGZvcm1JbmZvID0gdGhpcy51bnN0YWNrKHRhcmdldFRva2VuKTtcbiAgICBmb3JtSW5mbyAmJiBmb3JtSW5mby5uYW1lICYmIHRoaXMuZ29Ub0Zvcm0oZm9ybUluZm8ubmFtZSwgZm9ybUluZm8udG9rZW4sIGZvcm1JbmZvLnN1YmplY3QpO1xuICB9XG59XG4iXX0=