tuain-ng-forms-lib 15.2.12 → 17.1.0

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 (81) hide show
  1. package/esm2022/lib/classes/forms/action.mjs +104 -0
  2. package/esm2022/lib/classes/forms/element.mjs +23 -0
  3. package/esm2022/lib/classes/forms/field.mjs +468 -0
  4. package/esm2022/lib/classes/forms/form.mjs +581 -0
  5. package/esm2022/lib/classes/forms/piece-propagate.mjs +39 -0
  6. package/esm2022/lib/classes/forms/piece.mjs +126 -0
  7. package/esm2022/lib/classes/forms/section.mjs +151 -0
  8. package/esm2022/lib/classes/forms/subsection.mjs +99 -0
  9. package/esm2022/lib/classes/forms/table/action.mjs +38 -0
  10. package/esm2022/lib/classes/forms/table/column.mjs +74 -0
  11. package/esm2022/lib/classes/forms/table/row-data.mjs +116 -0
  12. package/esm2022/lib/classes/forms/table/table.mjs +523 -0
  13. package/esm2022/lib/components/elements/action.component.mjs +62 -0
  14. package/esm2022/lib/components/elements/field.component.mjs +99 -0
  15. package/esm2022/lib/components/elements/layout/element.component.mjs +21 -0
  16. package/esm2022/lib/components/elements/layout/form-error.component.mjs +23 -0
  17. package/esm2022/lib/components/elements/layout/form-header.component.mjs +23 -0
  18. package/esm2022/lib/components/elements/layout/piece.component.mjs +64 -0
  19. package/esm2022/lib/components/elements/layout/section.component.mjs +48 -0
  20. package/esm2022/lib/components/elements/layout/sub-section.component.mjs +48 -0
  21. package/esm2022/lib/components/elements/tables/table-record-action.component.mjs +72 -0
  22. package/esm2022/lib/components/elements/tables/table-record-field.component.mjs +31 -0
  23. package/esm2022/lib/components/elements/tables/table.component.mjs +98 -0
  24. package/esm2022/lib/components/forms/basic-form.mjs +1314 -0
  25. package/esm2022/lib/services/event-manager.service.mjs +43 -0
  26. package/esm2022/lib/services/form-manager.service.mjs +81 -0
  27. package/{esm2020 → esm2022}/lib/tuain-ng-forms-lib.module.mjs +29 -29
  28. package/{fesm2020 → fesm2022}/tuain-ng-forms-lib.mjs +832 -603
  29. package/fesm2022/tuain-ng-forms-lib.mjs.map +1 -0
  30. package/lib/classes/forms/action.d.ts +30 -14
  31. package/lib/classes/forms/field.d.ts +9 -4
  32. package/lib/classes/forms/section.d.ts +18 -6
  33. package/lib/classes/forms/subsection.d.ts +28 -10
  34. package/lib/classes/forms/table/table.d.ts +63 -21
  35. package/lib/components/elements/action.component.d.ts +9 -2
  36. package/lib/components/elements/field.component.d.ts +22 -16
  37. package/lib/components/elements/layout/element.component.d.ts +1 -1
  38. package/lib/components/elements/layout/form-error.component.d.ts +1 -1
  39. package/lib/components/elements/layout/form-header.component.d.ts +1 -1
  40. package/lib/components/elements/layout/piece.component.d.ts +9 -5
  41. package/lib/components/elements/layout/section.component.d.ts +2 -1
  42. package/lib/components/elements/layout/sub-section.component.d.ts +2 -1
  43. package/lib/components/elements/tables/table-record-action.component.d.ts +2 -1
  44. package/lib/components/elements/tables/table-record-field.component.d.ts +1 -1
  45. package/lib/components/elements/tables/table.component.d.ts +12 -5
  46. package/lib/components/forms/basic-form.d.ts +1 -1
  47. package/package.json +7 -13
  48. package/esm2020/lib/classes/forms/action.mjs +0 -72
  49. package/esm2020/lib/classes/forms/element.mjs +0 -18
  50. package/esm2020/lib/classes/forms/field.mjs +0 -454
  51. package/esm2020/lib/classes/forms/form.mjs +0 -574
  52. package/esm2020/lib/classes/forms/piece-propagate.mjs +0 -38
  53. package/esm2020/lib/classes/forms/piece.mjs +0 -123
  54. package/esm2020/lib/classes/forms/section.mjs +0 -138
  55. package/esm2020/lib/classes/forms/subsection.mjs +0 -81
  56. package/esm2020/lib/classes/forms/table/action.mjs +0 -30
  57. package/esm2020/lib/classes/forms/table/column.mjs +0 -74
  58. package/esm2020/lib/classes/forms/table/row-data.mjs +0 -116
  59. package/esm2020/lib/classes/forms/table/table.mjs +0 -464
  60. package/esm2020/lib/components/elements/action.component.mjs +0 -55
  61. package/esm2020/lib/components/elements/field.component.mjs +0 -99
  62. package/esm2020/lib/components/elements/layout/element.component.mjs +0 -20
  63. package/esm2020/lib/components/elements/layout/form-error.component.mjs +0 -20
  64. package/esm2020/lib/components/elements/layout/form-header.component.mjs +0 -24
  65. package/esm2020/lib/components/elements/layout/piece.component.mjs +0 -40
  66. package/esm2020/lib/components/elements/layout/section.component.mjs +0 -39
  67. package/esm2020/lib/components/elements/layout/sub-section.component.mjs +0 -39
  68. package/esm2020/lib/components/elements/tables/table-record-action.component.mjs +0 -67
  69. package/esm2020/lib/components/elements/tables/table-record-field.component.mjs +0 -30
  70. package/esm2020/lib/components/elements/tables/table.component.mjs +0 -92
  71. package/esm2020/lib/components/forms/basic-form.mjs +0 -1310
  72. package/esm2020/lib/services/event-manager.service.mjs +0 -43
  73. package/esm2020/lib/services/form-manager.service.mjs +0 -80
  74. package/fesm2015/tuain-ng-forms-lib.mjs +0 -4305
  75. package/fesm2015/tuain-ng-forms-lib.mjs.map +0 -1
  76. package/fesm2020/tuain-ng-forms-lib.mjs.map +0 -1
  77. /package/{esm2020 → esm2022}/lib/classes/forms/form.constants.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/services/file-manager.service.mjs +0 -0
  79. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  80. /package/{esm2020 → esm2022}/tuain-ng-forms-lib.mjs +0 -0
  81. /package/{tuain-ng-forms-lib.d.ts → index.d.ts} +0 -0
@@ -1,43 +0,0 @@
1
- import { Subject, BehaviorSubject, ReplaySubject } from 'rxjs';
2
- export class LibEventManagerService {
3
- constructor(eventSet) {
4
- this.eventSubjects = {};
5
- this.eventSubjectParams = {};
6
- eventSet.forEach((event) => { this.addEventName(event); });
7
- }
8
- addEventName(event, rebuild = false) {
9
- const eventObject = (typeof event === 'string') ? { name: event } : event;
10
- const { name, type, initialValue, windowTime, timestampProvider } = eventObject;
11
- const currentSubject = this.eventSubjects[name];
12
- if (rebuild || !currentSubject) {
13
- if (type === 'behaviour') {
14
- const newEventSubject = new BehaviorSubject(initialValue);
15
- this.eventSubjects[name] = newEventSubject;
16
- }
17
- else if (type === 'subject') {
18
- const newEventSubject = new Subject();
19
- this.eventSubjects[name] = newEventSubject;
20
- }
21
- else {
22
- const newEventSubject = new ReplaySubject(initialValue, windowTime, timestampProvider);
23
- this.eventSubjects[name] = newEventSubject;
24
- }
25
- this.eventSubjectParams[name] = { name: name, windowTime, timestampProvider };
26
- }
27
- }
28
- resetSubject(eventClassName) {
29
- const { name, windowTime, timestampProvider } = this.eventSubjectParams[eventClassName];
30
- return this.addEventName({ name, windowTime, timestampProvider });
31
- }
32
- getEventNames() { return Object.keys(this.eventSubjects); }
33
- getSubject(eventClassName) { return eventClassName ? this.eventSubjects[eventClassName] : null; }
34
- subscribe(eventClassName, callback) { return this.getSubject(eventClassName).subscribe(callback); }
35
- next(eventClassName, data) {
36
- const subject = this.getSubject(eventClassName);
37
- if (!subject) {
38
- console.log(`No se encontró subject ${eventClassName}`);
39
- }
40
- subject.next(data);
41
- }
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVhaW4tbmctZm9ybXMtbGliL3NyYy9saWIvc2VydmljZXMvZXZlbnQtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRCxNQUFNLE9BQU8sc0JBQXNCO0lBSWpDLFlBQVksUUFBZTtRQUgzQixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4Qix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFHM0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLE9BQU8sR0FBRyxLQUFLO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDMUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUNoRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzlCLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtnQkFDeEIsTUFBTSxlQUFlLEdBQXlCLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQzthQUM1QztpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQzdCLE1BQU0sZUFBZSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQzthQUM1QztpQkFBTTtnQkFDTCxNQUFNLGVBQWUsR0FBdUIsSUFBSSxhQUFhLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMzRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQzthQUM1QztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUM7U0FDL0U7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLGNBQWM7UUFDekIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGFBQWEsS0FBSyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxVQUFVLENBQUMsY0FBYyxJQUFJLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSTtRQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIExpYkV2ZW50TWFuYWdlclNlcnZpY2Uge1xuICBldmVudFN1YmplY3RzOiBhbnkgPSB7fTtcbiAgZXZlbnRTdWJqZWN0UGFyYW1zOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihldmVudFNldDogYW55W10pIHtcbiAgICBldmVudFNldC5mb3JFYWNoKChldmVudCkgPT4geyB0aGlzLmFkZEV2ZW50TmFtZShldmVudCk7IH0pO1xuICB9XG5cbiAgYWRkRXZlbnROYW1lKGV2ZW50OiBhbnksIHJlYnVpbGQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGV2ZW50T2JqZWN0ID0gKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpID8geyBuYW1lOiBldmVudCB9IDogZXZlbnQ7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlLCBpbml0aWFsVmFsdWUsIHdpbmRvd1RpbWUsIHRpbWVzdGFtcFByb3ZpZGVyIH0gPSBldmVudE9iamVjdDtcbiAgICBjb25zdCBjdXJyZW50U3ViamVjdCA9IHRoaXMuZXZlbnRTdWJqZWN0c1tuYW1lXTtcbiAgICBpZiAocmVidWlsZCB8fCAhY3VycmVudFN1YmplY3QpIHtcbiAgICAgIGlmICh0eXBlID09PSAnYmVoYXZpb3VyJykge1xuICAgICAgICBjb25zdCBuZXdFdmVudFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChpbml0aWFsVmFsdWUpO1xuICAgICAgICB0aGlzLmV2ZW50U3ViamVjdHNbbmFtZV0gPSBuZXdFdmVudFN1YmplY3Q7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdWJqZWN0Jykge1xuICAgICAgICBjb25zdCBuZXdFdmVudFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0c1tuYW1lXSA9IG5ld0V2ZW50U3ViamVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld0V2ZW50U3ViamVjdDogUmVwbGF5U3ViamVjdDxhbnk+ID0gbmV3IFJlcGxheVN1YmplY3QoaW5pdGlhbFZhbHVlLCB3aW5kb3dUaW1lLCB0aW1lc3RhbXBQcm92aWRlcik7XG4gICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0c1tuYW1lXSA9IG5ld0V2ZW50U3ViamVjdDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRTdWJqZWN0UGFyYW1zW25hbWVdID0geyBuYW1lOiBuYW1lLCB3aW5kb3dUaW1lLCB0aW1lc3RhbXBQcm92aWRlciB9O1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U3ViamVjdChldmVudENsYXNzTmFtZSkge1xuICAgIGNvbnN0IHsgbmFtZSwgd2luZG93VGltZSwgdGltZXN0YW1wUHJvdmlkZXIgfSA9IHRoaXMuZXZlbnRTdWJqZWN0UGFyYW1zW2V2ZW50Q2xhc3NOYW1lXTtcbiAgICByZXR1cm4gdGhpcy5hZGRFdmVudE5hbWUoeyBuYW1lLCB3aW5kb3dUaW1lLCB0aW1lc3RhbXBQcm92aWRlciB9KTtcbiAgfVxuXG4gIGdldEV2ZW50TmFtZXMoKSB7IHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmV2ZW50U3ViamVjdHMpOyB9XG4gIGdldFN1YmplY3QoZXZlbnRDbGFzc05hbWUpIHsgcmV0dXJuIGV2ZW50Q2xhc3NOYW1lID8gdGhpcy5ldmVudFN1YmplY3RzW2V2ZW50Q2xhc3NOYW1lXSA6IG51bGw7IH1cbiAgc3Vic2NyaWJlKGV2ZW50Q2xhc3NOYW1lLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KGV2ZW50Q2xhc3NOYW1lKS5zdWJzY3JpYmUoY2FsbGJhY2spOyB9XG4gIG5leHQoZXZlbnRDbGFzc05hbWUsIGRhdGEpIHsgXG4gICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuZ2V0U3ViamVjdChldmVudENsYXNzTmFtZSk7XG4gICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gc2UgZW5jb250csOzIHN1YmplY3QgJHtldmVudENsYXNzTmFtZX1gKTtcbiAgICB9XG4gICAgc3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG59XG4iXX0=
@@ -1,80 +0,0 @@
1
- import { nanoid } from 'nanoid';
2
- export class LibFormManagerService {
3
- constructor() {
4
- this.cleanStack();
5
- }
6
- // Métodos virtuales para las aplicaciones
7
- getFormDefinition(formCode) { }
8
- execServerAction(actionDetail) { }
9
- goToForm(formCode, token, subject) { }
10
- async loadStack() { }
11
- saveStack() { }
12
- cleanStack() { this.pageStack = []; }
13
- resetPageStack() { this.cleanStack(); }
14
- findFormInStack(token) {
15
- const index = this.pageStack.findIndex(item => item?.token === token);
16
- const data = (index >= 0) ? this.pageStack[index] : null;
17
- return { index, data };
18
- }
19
- replaceItem(token, formInfo) {
20
- if (!token || !formInfo) {
21
- return;
22
- }
23
- const { index, data: storedForm } = this.findFormInStack(token);
24
- let updatedForm = null;
25
- if (index >= 0) {
26
- updatedForm = { ...storedForm };
27
- updatedForm.subject = formInfo?.subject ?? storedForm.subject;
28
- updatedForm.state = formInfo?.state ?? storedForm.state;
29
- updatedForm.fields = storedForm?.fields ?? {};
30
- updatedForm.extra = storedForm?.extra ?? {};
31
- if (formInfo.fields) {
32
- Object.assign(updatedForm.fields, formInfo.fields);
33
- }
34
- if (formInfo.extra) {
35
- Object.assign(updatedForm.extra, formInfo.extra);
36
- }
37
- this.pageStack[index] = updatedForm;
38
- this.saveStack();
39
- }
40
- }
41
- stack(origin, target) {
42
- const token = nanoid(6);
43
- this.replaceItem(target.originToken, origin);
44
- this.pageStack.push({ token, ...target });
45
- this.saveStack();
46
- return token;
47
- }
48
- unstack(token = null) {
49
- let index = (token) ? this.findFormInStack(token).index : this.pageStack.length - 2;
50
- let formInfo = null;
51
- if (index >= 0) {
52
- formInfo = this.pageStack[index];
53
- this.pageStack.splice(index + 1);
54
- this.saveStack();
55
- }
56
- return formInfo;
57
- }
58
- getFormInfo(token) {
59
- const { data } = this.findFormInStack(token);
60
- return {
61
- token: data?.token,
62
- subject: data?.subject,
63
- state: data?.state,
64
- originToken: data?.originToken,
65
- fields: data?.fields ?? {},
66
- extra: data?.extra ?? {}
67
- };
68
- }
69
- openForm(origin, target) {
70
- (!origin) && this.cleanStack();
71
- target.originToken = origin?.token ?? null;
72
- const token = this.stack(origin, target);
73
- this.goToForm(target.name, token, target.subject);
74
- }
75
- backTo(targetToken = null) {
76
- const formInfo = this.unstack(targetToken);
77
- formInfo && formInfo.name && this.goToForm(formInfo.name, formInfo.token, formInfo.subject);
78
- }
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLE1BQU0sT0FBTyxxQkFBcUI7SUFHaEM7UUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxpQkFBaUIsQ0FBQyxRQUFRLElBQUksQ0FBQztJQUMvQixnQkFBZ0IsQ0FBQyxZQUFZLElBQUksQ0FBQztJQUNsQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QyxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUM7SUFDckIsU0FBUyxLQUFLLENBQUM7SUFFZixVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLGNBQWMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRXRDLGVBQWUsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN0RSxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLLEVBQUUs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O1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQVcsRUFBRSxNQUFXO1FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJO1FBQ3ZCLE1BQU0sUUFBUSxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5cbmV4cG9ydCBjbGFzcyBMaWJGb3JtTWFuYWdlclNlcnZpY2Uge1xuICBwYWdlU3RhY2s6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYW5TdGFjaygpO1xuICB9XG5cbiAgLy8gTcOpdG9kb3MgdmlydHVhbGVzIHBhcmEgbGFzIGFwbGljYWNpb25lc1xuICBnZXRGb3JtRGVmaW5pdGlvbihmb3JtQ29kZSkgeyB9XG4gIGV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKSB7IH1cbiAgZ29Ub0Zvcm0oZm9ybUNvZGUsIHRva2VuLCBzdWJqZWN0KSB7IH1cbiAgYXN5bmMgbG9hZFN0YWNrKCkgeyB9XG4gIHNhdmVTdGFjaygpIHsgfVxuXG4gIGNsZWFuU3RhY2soKSB7IHRoaXMucGFnZVN0YWNrID0gW107IH1cbiAgcmVzZXRQYWdlU3RhY2soKSB7IHRoaXMuY2xlYW5TdGFjaygpIH1cblxuICBmaW5kRm9ybUluU3RhY2sodG9rZW4pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZVN0YWNrLmZpbmRJbmRleChpdGVtID0+IGl0ZW0/LnRva2VuID09PSB0b2tlbik7XG4gICAgY29uc3QgZGF0YSA9IChpbmRleCA+PSAwKSA/IHRoaXMucGFnZVN0YWNrW2luZGV4XSA6IG51bGw7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGRhdGEgfTtcbiAgfVxuXG4gIHJlcGxhY2VJdGVtKHRva2VuLCBmb3JtSW5mbykge1xuICAgIGlmICghdG9rZW4gfHwgIWZvcm1JbmZvKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHsgaW5kZXgsIGRhdGE6IHN0b3JlZEZvcm0gfSA9IHRoaXMuZmluZEZvcm1JblN0YWNrKHRva2VuKTtcbiAgICBsZXQgdXBkYXRlZEZvcm06IGFueSA9IG51bGw7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHVwZGF0ZWRGb3JtID0geyAuLi5zdG9yZWRGb3JtIH07XG4gICAgICB1cGRhdGVkRm9ybS5zdWJqZWN0ID0gZm9ybUluZm8/LnN1YmplY3QgPz8gc3RvcmVkRm9ybS5zdWJqZWN0O1xuICAgICAgdXBkYXRlZEZvcm0uc3RhdGUgPSBmb3JtSW5mbz8uc3RhdGUgPz8gc3RvcmVkRm9ybS5zdGF0ZTtcbiAgICAgIHVwZGF0ZWRGb3JtLmZpZWxkcyA9IHN0b3JlZEZvcm0/LmZpZWxkcyA/PyB7fTtcbiAgICAgIHVwZGF0ZWRGb3JtLmV4dHJhID0gc3RvcmVkRm9ybT8uZXh0cmEgPz8ge307XG4gICAgICBpZiAoZm9ybUluZm8uZmllbGRzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odXBkYXRlZEZvcm0uZmllbGRzLCBmb3JtSW5mby5maWVsZHMpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1JbmZvLmV4dHJhKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odXBkYXRlZEZvcm0uZXh0cmEsIGZvcm1JbmZvLmV4dHJhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZVN0YWNrW2luZGV4XSA9IHVwZGF0ZWRGb3JtO1xuICAgICAgdGhpcy5zYXZlU3RhY2soKTtcbiAgICB9XG4gIH1cblxuICBzdGFjayhvcmlnaW4sIHRhcmdldCkge1xuICAgIGNvbnN0IHRva2VuID0gbmFub2lkKDYpO1xuICAgIHRoaXMucmVwbGFjZUl0ZW0odGFyZ2V0Lm9yaWdpblRva2VuLCBvcmlnaW4pO1xuICAgIHRoaXMucGFnZVN0YWNrLnB1c2goeyB0b2tlbiwgLi4udGFyZ2V0IH0pO1xuICAgIHRoaXMuc2F2ZVN0YWNrKCk7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgdW5zdGFjayh0b2tlbiA9IG51bGwpIHtcbiAgICBsZXQgaW5kZXggPSAodG9rZW4pID8gdGhpcy5maW5kRm9ybUluU3RhY2sodG9rZW4pLmluZGV4IDogdGhpcy5wYWdlU3RhY2subGVuZ3RoIC0gMjtcbiAgICBsZXQgZm9ybUluZm8gPSBudWxsO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBmb3JtSW5mbyA9IHRoaXMucGFnZVN0YWNrW2luZGV4XTtcbiAgICAgIHRoaXMucGFnZVN0YWNrLnNwbGljZShpbmRleCArIDEpO1xuICAgICAgdGhpcy5zYXZlU3RhY2soKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1JbmZvO1xuICB9XG5cbiAgZ2V0Rm9ybUluZm8odG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5maW5kRm9ybUluU3RhY2sodG9rZW4pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZGF0YT8udG9rZW4sXG4gICAgICBzdWJqZWN0OiBkYXRhPy5zdWJqZWN0LFxuICAgICAgc3RhdGU6IGRhdGE/LnN0YXRlLFxuICAgICAgb3JpZ2luVG9rZW46IGRhdGE/Lm9yaWdpblRva2VuLFxuICAgICAgZmllbGRzOiBkYXRhPy5maWVsZHMgPz8ge30sXG4gICAgICBleHRyYTogZGF0YT8uZXh0cmEgPz8ge31cbiAgICB9O1xuICB9XG5cbiAgb3BlbkZvcm0ob3JpZ2luOiBhbnksIHRhcmdldDogYW55KSB7XG4gICAgKCFvcmlnaW4pICYmIHRoaXMuY2xlYW5TdGFjaygpO1xuICAgIHRhcmdldC5vcmlnaW5Ub2tlbiA9IG9yaWdpbj8udG9rZW4gPz8gbnVsbDtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc3RhY2sob3JpZ2luLCB0YXJnZXQpO1xuICAgIHRoaXMuZ29Ub0Zvcm0odGFyZ2V0Lm5hbWUsIHRva2VuLCB0YXJnZXQuc3ViamVjdCk7XG4gIH1cblxuICBiYWNrVG8odGFyZ2V0VG9rZW4gPSBudWxsKSB7XG4gICAgY29uc3QgZm9ybUluZm86IGFueSA9IHRoaXMudW5zdGFjayh0YXJnZXRUb2tlbik7XG4gICAgZm9ybUluZm8gJiYgZm9ybUluZm8ubmFtZSAmJiB0aGlzLmdvVG9Gb3JtKGZvcm1JbmZvLm5hbWUsIGZvcm1JbmZvLnRva2VuLCBmb3JtSW5mby5zdWJqZWN0KTtcbiAgfVxufVxuIl19