@valtimo/dossier 12.0.0 → 12.1.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 (90) hide show
  1. package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +11 -7
  2. package/esm2022/lib/components/dossier-detail/tab/not-found/not-found.component.mjs +1 -1
  3. package/esm2022/lib/components/dossier-detail/tab/notes/notes.component.mjs +1 -1
  4. package/esm2022/lib/components/dossier-detail/tab/progress/progress.component.mjs +1 -1
  5. package/esm2022/lib/components/dossier-detail/tab/summary/summary.component.mjs +13 -78
  6. package/esm2022/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.mjs +192 -0
  7. package/esm2022/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.mjs +80 -0
  8. package/esm2022/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.mjs +116 -0
  9. package/esm2022/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.mjs +67 -0
  10. package/esm2022/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.mjs +126 -0
  11. package/esm2022/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.mjs +154 -0
  12. package/esm2022/lib/components/dossier-detail/tab/widgets/components/widgets-container/widgets-container.component.mjs +74 -0
  13. package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.component.mjs +74 -0
  14. package/esm2022/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.mjs +131 -0
  15. package/esm2022/lib/components/dossier-list/dossier-list.component.mjs +4 -4
  16. package/esm2022/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.mjs +47 -7
  17. package/esm2022/lib/constants/case-widget.constants.mjs +19 -0
  18. package/esm2022/lib/constants/custom-case-widget-token.mjs +19 -0
  19. package/esm2022/lib/constants/index.mjs +3 -1
  20. package/esm2022/lib/dossier.module.mjs +11 -3
  21. package/esm2022/lib/models/case-widget-content.model.mjs +17 -0
  22. package/esm2022/lib/models/case-widget-display.model.mjs +13 -0
  23. package/esm2022/lib/models/case-widget.model.mjs +25 -0
  24. package/esm2022/lib/models/index.mjs +6 -3
  25. package/esm2022/lib/models/tab-api.model.mjs +2 -1
  26. package/esm2022/lib/models/tabs.model.mjs +16 -7
  27. package/esm2022/lib/services/dossier-tab-api.service.mjs +17 -11
  28. package/esm2022/lib/services/dossier-tab.service.mjs +39 -11
  29. package/esm2022/lib/services/dossier-widgets-api.service.mjs +46 -0
  30. package/esm2022/lib/services/dossier-widgets-layout.service.mjs +97 -0
  31. package/esm2022/lib/services/index.mjs +3 -1
  32. package/fesm2022/valtimo-dossier.mjs +1383 -233
  33. package/fesm2022/valtimo-dossier.mjs.map +1 -1
  34. package/lib/components/dossier-detail/dossier-detail.component.d.ts +2 -0
  35. package/lib/components/dossier-detail/dossier-detail.component.d.ts.map +1 -1
  36. package/lib/components/dossier-detail/tab/summary/summary.component.d.ts +7 -26
  37. package/lib/components/dossier-detail/tab/summary/summary.component.d.ts.map +1 -1
  38. package/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.d.ts +47 -0
  39. package/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.d.ts.map +1 -0
  40. package/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.d.ts +22 -0
  41. package/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.d.ts.map +1 -0
  42. package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts +31 -0
  43. package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts.map +1 -0
  44. package/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.d.ts +21 -0
  45. package/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.d.ts.map +1 -0
  46. package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts +31 -0
  47. package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts.map +1 -0
  48. package/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.d.ts +43 -0
  49. package/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.d.ts.map +1 -0
  50. package/lib/components/dossier-detail/tab/widgets/components/widgets-container/widgets-container.component.d.ts +20 -0
  51. package/lib/components/dossier-detail/tab/widgets/components/widgets-container/widgets-container.component.d.ts.map +1 -0
  52. package/lib/components/dossier-detail/tab/widgets/widgets.component.d.ts +25 -0
  53. package/lib/components/dossier-detail/tab/widgets/widgets.component.d.ts.map +1 -0
  54. package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts +26 -0
  55. package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts.map +1 -0
  56. package/lib/components/dossier-list/dossier-list.component.d.ts +1 -1
  57. package/lib/components/dossier-list/dossier-list.component.d.ts.map +1 -1
  58. package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts +12 -4
  59. package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +1 -1
  60. package/lib/constants/case-widget.constants.d.ts +4 -0
  61. package/lib/constants/case-widget.constants.d.ts.map +1 -0
  62. package/lib/constants/custom-case-widget-token.d.ts +5 -0
  63. package/lib/constants/custom-case-widget-token.d.ts.map +1 -0
  64. package/lib/constants/index.d.ts +2 -0
  65. package/lib/constants/index.d.ts.map +1 -1
  66. package/lib/dossier.module.d.ts +3 -1
  67. package/lib/dossier.module.d.ts.map +1 -1
  68. package/lib/models/case-widget-content.model.d.ts +51 -0
  69. package/lib/models/case-widget-content.model.d.ts.map +1 -0
  70. package/lib/models/case-widget-display.model.d.ts +44 -0
  71. package/lib/models/case-widget-display.model.d.ts.map +1 -0
  72. package/lib/models/case-widget.model.d.ts +105 -0
  73. package/lib/models/case-widget.model.d.ts.map +1 -0
  74. package/lib/models/index.d.ts +5 -2
  75. package/lib/models/index.d.ts.map +1 -1
  76. package/lib/models/tab-api.model.d.ts +13 -2
  77. package/lib/models/tab-api.model.d.ts.map +1 -1
  78. package/lib/models/tabs.model.d.ts +6 -1
  79. package/lib/models/tabs.model.d.ts.map +1 -1
  80. package/lib/services/dossier-tab-api.service.d.ts +6 -7
  81. package/lib/services/dossier-tab-api.service.d.ts.map +1 -1
  82. package/lib/services/dossier-tab.service.d.ts +12 -2
  83. package/lib/services/dossier-tab.service.d.ts.map +1 -1
  84. package/lib/services/dossier-widgets-api.service.d.ts +15 -0
  85. package/lib/services/dossier-widgets-api.service.d.ts.map +1 -0
  86. package/lib/services/dossier-widgets-layout.service.d.ts +35 -0
  87. package/lib/services/dossier-widgets-layout.service.d.ts.map +1 -0
  88. package/lib/services/index.d.ts +2 -0
  89. package/lib/services/index.d.ts.map +1 -1
  90. package/package.json +4 -2
@@ -0,0 +1,116 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ChangeDetectionStrategy, Component, HostBinding, Input, signal, ViewChild, ViewEncapsulation, } from '@angular/core';
17
+ import { CarbonListModule } from '@valtimo/components';
18
+ import { CommonModule } from '@angular/common';
19
+ import { BehaviorSubject, combineLatest, map } from 'rxjs';
20
+ import { InputModule } from 'carbon-components-angular';
21
+ import { TranslateModule } from '@ngx-translate/core';
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "@valtimo/components";
24
+ import * as i2 from "@angular/common";
25
+ import * as i3 from "carbon-components-angular";
26
+ import * as i4 from "@ngx-translate/core";
27
+ export class WidgetFieldComponent {
28
+ set widgetConfiguration(value) {
29
+ if (!value)
30
+ return;
31
+ this.widgetConfiguration$.next(value);
32
+ }
33
+ set widgetData(value) {
34
+ if (!value)
35
+ return;
36
+ this.widgetData$.next(value);
37
+ this.isEmptyWidgetData$.next(this.checkEmptyWidgetData(value));
38
+ }
39
+ constructor(viewContentService) {
40
+ this.viewContentService = viewContentService;
41
+ this.class = 'widget-field';
42
+ this.collapseVertically = false;
43
+ this.isEmptyWidgetData$ = new BehaviorSubject(false);
44
+ this.renderVertically = signal(0);
45
+ this.widgetConfiguration$ = new BehaviorSubject(null);
46
+ this.widgetData$ = new BehaviorSubject(null);
47
+ this.widgetPropertyValue$ = combineLatest([this.widgetConfiguration$, this.widgetData$]).pipe(map(([widget, widgetData]) => widget?.properties.columns.map(column => column.reduce((columnFields, property) => [
48
+ ...columnFields,
49
+ ...(widgetData?.hasOwnProperty(property.key)
50
+ ? [
51
+ {
52
+ title: property.title,
53
+ value: widgetData[property.key] !== null && widgetData[property.key] !== undefined
54
+ ? this.viewContentService.get(widgetData[property.key], {
55
+ ...property.displayProperties,
56
+ viewType: property.displayProperties?.type ?? 'text',
57
+ })
58
+ : '-',
59
+ },
60
+ ]
61
+ : []),
62
+ ], []))));
63
+ }
64
+ ngAfterViewInit() {
65
+ if (this.collapseVertically && this._widgetFieldRef)
66
+ this.openWidthObserver();
67
+ }
68
+ ngOnDestroy() {
69
+ this._observer?.disconnect();
70
+ }
71
+ openWidthObserver() {
72
+ this._observer = new ResizeObserver(event => {
73
+ this.observerMutation(event);
74
+ });
75
+ this._observer.observe(this._widgetFieldRef.nativeElement);
76
+ }
77
+ observerMutation(event) {
78
+ const elementWidth = event[0]?.borderBoxSize[0]?.inlineSize;
79
+ if (typeof elementWidth === 'number' && elementWidth !== 0) {
80
+ if (elementWidth < 640) {
81
+ this.renderVertically.set(1);
82
+ }
83
+ else if (elementWidth > 640 && elementWidth <= 768) {
84
+ this.renderVertically.set(2);
85
+ }
86
+ else if (elementWidth > 768 && elementWidth <= 1080) {
87
+ this.renderVertically.set(3);
88
+ }
89
+ else if (elementWidth > 1080) {
90
+ this.renderVertically.set(4);
91
+ }
92
+ }
93
+ }
94
+ checkEmptyWidgetData(widgetData) {
95
+ return widgetData && Object.keys(widgetData).length === 0;
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetFieldComponent, deps: [{ token: i1.ViewContentService }], target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: WidgetFieldComponent, isStandalone: true, selector: "valtimo-widget-field", inputs: { collapseVertically: "collapseVertically", widgetConfiguration: "widgetConfiguration", widgetData: "widgetData" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "_widgetFieldRef", first: true, predicate: ["widgetField"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n widgetConfiguration: widgetConfiguration$ | async,\n widgetPropertyValue: widgetPropertyValue$ | async,\n widgetData: widgetData$ | async,\n isEmptyWidgetData: isEmptyWidgetData$ | async\n } as obs\"\n>\n <h4 class=\"widget-field__title\">{{ obs?.widgetConfiguration?.title }}</h4>\n\n @if (obs?.isEmptyWidgetData) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n } @else {\n <div\n #widgetField\n [ngClass]=\"{\n 'widget-field__render-vertically': renderVertically() === 1,\n 'widget-field__render-two-columns': renderVertically() === 2,\n 'widget-field__render-three-columns': renderVertically() === 3,\n 'widget-field__container': renderVertically() === 4\n }\"\n >\n @for (column of obs?.widgetPropertyValue; track column.key) {\n <div class=\"widget-field__column\">\n @for (property of column; track property) {\n <cds-label>\n {{ property?.title }}\n\n <input cdsText [value]=\"property?.value\" [readonly]=\"true\" />\n </cds-label>\n }\n </div>\n }\n </div>\n }\n</ng-container>\n", styles: [".widget-field{padding:24px}.widget-field,.widget-field__column{display:flex;flex-direction:column;gap:16px}.widget-field__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.widget-field__container{display:grid;grid-gap:24px;grid-template-columns:repeat(4,1fr)}.widget-field__render-vertically,.widget-field__render-two-columns,.widget-field__render-three-columns{display:grid;grid-gap:24px}.widget-field__render-vertically{grid-template-columns:repeat(1,1fr)}.widget-field__render-two-columns{grid-template-columns:repeat(2,1fr)}.widget-field__render-three-columns{grid-template-columns:repeat(3,1fr)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetFieldComponent, decorators: [{
101
+ type: Component,
102
+ args: [{ selector: 'valtimo-widget-field', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, WidgetFieldComponent, InputModule, TranslateModule, CarbonListModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n widgetConfiguration: widgetConfiguration$ | async,\n widgetPropertyValue: widgetPropertyValue$ | async,\n widgetData: widgetData$ | async,\n isEmptyWidgetData: isEmptyWidgetData$ | async\n } as obs\"\n>\n <h4 class=\"widget-field__title\">{{ obs?.widgetConfiguration?.title }}</h4>\n\n @if (obs?.isEmptyWidgetData) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n } @else {\n <div\n #widgetField\n [ngClass]=\"{\n 'widget-field__render-vertically': renderVertically() === 1,\n 'widget-field__render-two-columns': renderVertically() === 2,\n 'widget-field__render-three-columns': renderVertically() === 3,\n 'widget-field__container': renderVertically() === 4\n }\"\n >\n @for (column of obs?.widgetPropertyValue; track column.key) {\n <div class=\"widget-field__column\">\n @for (property of column; track property) {\n <cds-label>\n {{ property?.title }}\n\n <input cdsText [value]=\"property?.value\" [readonly]=\"true\" />\n </cds-label>\n }\n </div>\n }\n </div>\n }\n</ng-container>\n", styles: [".widget-field{padding:24px}.widget-field,.widget-field__column{display:flex;flex-direction:column;gap:16px}.widget-field__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.widget-field__container{display:grid;grid-gap:24px;grid-template-columns:repeat(4,1fr)}.widget-field__render-vertically,.widget-field__render-two-columns,.widget-field__render-three-columns{display:grid;grid-gap:24px}.widget-field__render-vertically{grid-template-columns:repeat(1,1fr)}.widget-field__render-two-columns{grid-template-columns:repeat(2,1fr)}.widget-field__render-three-columns{grid-template-columns:repeat(3,1fr)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
103
+ }], ctorParameters: () => [{ type: i1.ViewContentService }], propDecorators: { class: [{
104
+ type: HostBinding,
105
+ args: ['class']
106
+ }], _widgetFieldRef: [{
107
+ type: ViewChild,
108
+ args: ['widgetField']
109
+ }], collapseVertically: [{
110
+ type: Input
111
+ }], widgetConfiguration: [{
112
+ type: Input
113
+ }], widgetData: [{
114
+ type: Input
115
+ }] } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1kZXRhaWwvdGFiL3dpZGdldHMvY29tcG9uZW50cy9maWVsZC93aWRnZXQtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2ZpZWxkL3dpZGdldC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFxQixNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBV3BELE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsSUFBb0IsbUJBQW1CLENBQUMsS0FBdUI7UUFDN0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFD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O3NCQUFoRCxTQUFTO3VCQUFDLGFBQWE7Z0JBRWYsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNjLG1CQUFtQjtzQkFBdEMsS0FBSztnQkFNYyxVQUFVO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NhcmJvbkxpc3RNb2R1bGUsIFZpZXdDb250ZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGaWVsZHNDYXNlV2lkZ2V0fSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtJbnB1dE1vZHVsZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8td2lkZ2V0LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dpZGdldC1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV2lkZ2V0RmllbGRDb21wb25lbnQsIElucHV0TW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIENhcmJvbkxpc3RNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwdWJsaWMgcmVhZG9ubHkgY2xhc3MgPSAnd2lkZ2V0LWZpZWxkJztcblxuICBAVmlld0NoaWxkKCd3aWRnZXRGaWVsZCcpIHByaXZhdGUgX3dpZGdldEZpZWxkUmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBASW5wdXQoKSBjb2xsYXBzZVZlcnRpY2FsbHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNldCB3aWRnZXRDb25maWd1cmF0aW9uKHZhbHVlOiBGaWVsZHNDYXNlV2lkZ2V0KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMud2lkZ2V0Q29uZmlndXJhdGlvbiQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IGlzRW1wdHlXaWRnZXREYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgd2lkZ2V0RGF0YSh2YWx1ZTogb2JqZWN0KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMud2lkZ2V0RGF0YSQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5pc0VtcHR5V2lkZ2V0RGF0YSQubmV4dCh0aGlzLmNoZWNrRW1wdHlXaWRnZXREYXRhKHZhbHVlKSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyVmVydGljYWxseSA9IHNpZ25hbCgwKTtcbiAgcHVibGljIHJlYWRvbmx5IHdpZGdldENvbmZpZ3VyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWVsZHNDYXNlV2lkZ2V0IHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXREYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0IHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdpZGdldFByb3BlcnR5VmFsdWUkOiBPYnNlcnZhYmxlPHt0aXRsZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfVtdW10+ID1cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldENvbmZpZ3VyYXRpb24kLCB0aGlzLndpZGdldERhdGEkXSkucGlwZShcbiAgICAgIG1hcCgoW3dpZGdldCwgd2lkZ2V0RGF0YV0pID0+XG4gICAgICAgIHdpZGdldD8ucHJvcGVydGllcy5jb2x1bW5zLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBjb2x1bW4ucmVkdWNlKFxuICAgICAgICAgICAgKGNvbHVtbkZpZWxkcywgcHJvcGVydHkpID0+IFtcbiAgICAgICAgICAgICAgLi4uY29sdW1uRmllbGRzLFxuICAgICAgICAgICAgICAuLi4od2lkZ2V0RGF0YT8uaGFzT3duUHJvcGVydHkocHJvcGVydHkua2V5KVxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb3BlcnR5LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0RGF0YVtwcm9wZXJ0eS5rZXldICE9PSBudWxsICYmIHdpZGdldERhdGFbcHJvcGVydHkua2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy52aWV3Q29udGVudFNlcnZpY2UuZ2V0KHdpZGdldERhdGFbcHJvcGVydHkua2V5XSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJvcGVydHkuZGlzcGxheVByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VHlwZTogcHJvcGVydHkuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPz8gJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0nLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIF9vYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UpIHt9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZVZlcnRpY2FsbHkgJiYgdGhpcy5fd2lkZ2V0RmllbGRSZWYpIHRoaXMub3BlbldpZHRoT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuV2lkdGhPYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihldmVudCA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVyTXV0YXRpb24oZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy5fd2lkZ2V0RmllbGRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVyTXV0YXRpb24oZXZlbnQ6IEFycmF5PFJlc2l6ZU9ic2VydmVyRW50cnk+KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudFdpZHRoID0gZXZlbnRbMF0/LmJvcmRlckJveFNpemVbMF0/LmlubGluZVNpemU7XG5cbiAgICBpZiAodHlwZW9mIGVsZW1lbnRXaWR0aCA9PT0gJ251bWJlcicgJiYgZWxlbWVudFdpZHRoICE9PSAwKSB7XG4gICAgICBpZiAoZWxlbWVudFdpZHRoIDwgNjQwKSB7XG4gICAgICAgIHRoaXMucmVuZGVyVmVydGljYWxseS5zZXQoMSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaWR0aCA+IDY0MCAmJiBlbGVtZW50V2lkdGggPD0gNzY4KSB7XG4gICAgICAgIHRoaXMucmVuZGVyVmVydGljYWxseS5zZXQoMik7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaWR0aCA+IDc2OCAmJiBlbGVtZW50V2lkdGggPD0gMTA4MCkge1xuICAgICAgICB0aGlzLnJlbmRlclZlcnRpY2FsbHkuc2V0KDMpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50V2lkdGggPiAxMDgwKSB7XG4gICAgICAgIHRoaXMucmVuZGVyVmVydGljYWxseS5zZXQoNCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0VtcHR5V2lkZ2V0RGF0YSh3aWRnZXREYXRhOiBPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2lkZ2V0RGF0YSAmJiBPYmplY3Qua2V5cyh3aWRnZXREYXRhKS5sZW5ndGggPT09IDA7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICB3aWRnZXRDb25maWd1cmF0aW9uOiB3aWRnZXRDb25maWd1cmF0aW9uJCB8IGFzeW5jLFxuICAgIHdpZGdldFByb3BlcnR5VmFsdWU6IHdpZGdldFByb3BlcnR5VmFsdWUkIHwgYXN5bmMsXG4gICAgd2lkZ2V0RGF0YTogd2lkZ2V0RGF0YSQgfCBhc3luYyxcbiAgICBpc0VtcHR5V2lkZ2V0RGF0YTogaXNFbXB0eVdpZGdldERhdGEkIHwgYXN5bmNcbiAgfSBhcyBvYnNcIlxuPlxuICA8aDQgY2xhc3M9XCJ3aWRnZXQtZmllbGRfX3RpdGxlXCI+e3sgb2JzPy53aWRnZXRDb25maWd1cmF0aW9uPy50aXRsZSB9fTwvaDQ+XG5cbiAgQGlmIChvYnM/LmlzRW1wdHlXaWRnZXREYXRhKSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2NvbGxhcHNlVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci53aWRnZXRzLm5vRGF0YScgfCB0cmFuc2xhdGVcIlxuICAgICAgW3NtYWxsUGFkZGluZ109XCJ0cnVlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgICN3aWRnZXRGaWVsZFxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnd2lkZ2V0LWZpZWxkX19yZW5kZXItdmVydGljYWxseSc6IHJlbmRlclZlcnRpY2FsbHkoKSA9PT0gMSxcbiAgICAgICAgJ3dpZGdldC1maWVsZF9fcmVuZGVyLXR3by1jb2x1bW5zJzogcmVuZGVyVmVydGljYWxseSgpID09PSAyLFxuICAgICAgICAnd2lkZ2V0LWZpZWxkX19yZW5kZXItdGhyZWUtY29sdW1ucyc6IHJlbmRlclZlcnRpY2FsbHkoKSA9PT0gMyxcbiAgICAgICAgJ3dpZGdldC1maWVsZF9fY29udGFpbmVyJzogcmVuZGVyVmVydGljYWxseSgpID09PSA0XG4gICAgICB9XCJcbiAgICA+XG4gICAgICBAZm9yIChjb2x1bW4gb2Ygb2JzPy53aWRnZXRQcm9wZXJ0eVZhbHVlOyB0cmFjayBjb2x1bW4ua2V5KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtZmllbGRfX2NvbHVtblwiPlxuICAgICAgICAgIEBmb3IgKHByb3BlcnR5IG9mIGNvbHVtbjsgdHJhY2sgcHJvcGVydHkpIHtcbiAgICAgICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IHByb3BlcnR5Py50aXRsZSB9fVxuXG4gICAgICAgICAgICAgIDxpbnB1dCBjZHNUZXh0IFt2YWx1ZV09XCJwcm9wZXJ0eT8udmFsdWVcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,67 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
17
+ import { CommonModule } from '@angular/common';
18
+ import { TranslateModule } from '@ngx-translate/core';
19
+ import { BehaviorSubject, combineLatest, filter, map, of, switchMap, tap } from 'rxjs';
20
+ import { FormIoModule } from '@valtimo/components';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@valtimo/form";
23
+ import * as i2 from "../../../../../../services";
24
+ import * as i3 from "@angular/common";
25
+ import * as i4 from "@valtimo/components";
26
+ export class WidgetFormioComponent {
27
+ set documentId(value) {
28
+ if (value)
29
+ this._documentIdSubject$.next(value);
30
+ }
31
+ set widgetConfiguration(value) {
32
+ if (!value)
33
+ return;
34
+ this.layoutService.setWidgetWithExternalData(value.uuid);
35
+ this._widgetConfigurationSubject$.next(value);
36
+ }
37
+ get widgetConfiguration$() {
38
+ return this._widgetConfigurationSubject$.pipe(filter(config => !!config));
39
+ }
40
+ get _documentId$() {
41
+ return this._documentIdSubject$.pipe(filter(id => !!id));
42
+ }
43
+ constructor(formService, layoutService) {
44
+ this.formService = formService;
45
+ this.layoutService = layoutService;
46
+ this._widgetConfigurationSubject$ = new BehaviorSubject(null);
47
+ this._documentIdSubject$ = new BehaviorSubject('');
48
+ this.prefilledFormDefinition$ = combineLatest([
49
+ this.widgetConfiguration$,
50
+ this._documentId$,
51
+ ]).pipe(switchMap(([config, documentId]) => combineLatest([
52
+ this.formService.getFormDefinitionByNamePreFilled(config.properties.formDefinitionName, documentId),
53
+ of(config),
54
+ ])), tap(([_, config]) => this.layoutService.setWidgetWithExternalDataReady(config.uuid)), map(([formDef]) => formDef));
55
+ }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetFormioComponent, deps: [{ token: i1.FormService }, { token: i2.DossierWidgetsLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
57
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: WidgetFormioComponent, isStandalone: true, selector: "valtimo-widget-formio", inputs: { documentId: "documentId", widgetConfiguration: "widgetConfiguration" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"formio-widget\" *ngIf=\"prefilledFormDefinition$ | async as prefilledFormDefinition\">\n <h4 class=\"formio-widget__title\">{{ (widgetConfiguration$ | async)?.title || '-' }}</h4>\n\n <valtimo-form-io [form]=\"prefilledFormDefinition\"></valtimo-form-io>\n</div>\n", styles: [".formio-widget{padding:24px}.formio-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px;margin-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormIoModule }, { kind: "component", type: i4.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetFormioComponent, decorators: [{
60
+ type: Component,
61
+ args: [{ selector: 'valtimo-widget-formio', standalone: true, imports: [CommonModule, TranslateModule, FormIoModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"formio-widget\" *ngIf=\"prefilledFormDefinition$ | async as prefilledFormDefinition\">\n <h4 class=\"formio-widget__title\">{{ (widgetConfiguration$ | async)?.title || '-' }}</h4>\n\n <valtimo-form-io [form]=\"prefilledFormDefinition\"></valtimo-form-io>\n</div>\n", styles: [".formio-widget{padding:24px}.formio-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px;margin-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
62
+ }], ctorParameters: () => [{ type: i1.FormService }, { type: i2.DossierWidgetsLayoutService }], propDecorators: { documentId: [{
63
+ type: Input
64
+ }], widgetConfiguration: [{
65
+ type: Input
66
+ }] } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWZvcm1pby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsL3RhYi93aWRnZXRzL2NvbXBvbmVudHMvZm9ybWlvL3dpZGdldC1mb3JtaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2Zvcm1pby93aWRnZXQtZm9ybWlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSWpHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBVWpELE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsSUFBb0IsVUFBVSxDQUFDLEtBQWE7UUFDMUMsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsSUFBb0IsbUJBQW1CLENBQUMsS0FBcUM7UUFDM0UsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUlELElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBR0QsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBbUJELFlBQ21CLFdBQXdCLEVBQ3hCLGFBQTBDO1FBRDFDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUE2QjtRQTlCNUMsaUNBQTRCLEdBQzNDLElBQUksZUFBZSxDQUF3QyxJQUFJLENBQUMsQ0FBQztRQUtsRCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUt2RCw2QkFBd0IsR0FBMkIsYUFBYSxDQUFDO1lBQy9FLElBQUksQ0FBQyxvQkFBb0I7WUFDekIsSUFBSSxDQUFDLFlBQVk7U0FDbEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQ2pDLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLENBQy9DLE1BQU0sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQ3BDLFVBQVUsQ0FDWDtZQUNELEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDWCxDQUFDLENBQ0gsRUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEYsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQzVCLENBQUM7SUFLQyxDQUFDOzhHQXpDTyxxQkFBcUI7a0dBQXJCLHFCQUFxQixtS0NsQ2xDLHk2QkFxQkEsNDBCRFVZLFlBQVksdUxBQUUsZUFBZSw4QkFBRSxZQUFZOzsyRkFHMUMscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxtQkFDckMsdUJBQXVCLENBQUMsTUFBTTswSEFHM0IsVUFBVTtzQkFBN0IsS0FBSztnQkFHYyxtQkFBbUI7c0JBQXRDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9DYXNlV2lkZ2V0V2lkZ2V0V2l0aFV1aWR9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Zvcm1TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9mb3JtJztcbmltcG9ydCB7RG9zc2llcldpZGdldHNMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0Zvcm1pb0Zvcm19IGZyb20gJ0Bmb3JtaW8vYW5ndWxhcic7XG5pbXBvcnQge0Zvcm1Jb01vZHVsZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8td2lkZ2V0LWZvcm1pbycsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtZm9ybWlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2lkZ2V0LWZvcm1pby5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEZvcm1Jb01vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRGb3JtaW9Db21wb25lbnQge1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGRvY3VtZW50SWQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5fZG9jdW1lbnRJZFN1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgd2lkZ2V0Q29uZmlndXJhdGlvbih2YWx1ZTogRm9ybWlvQ2FzZVdpZGdldFdpZGdldFdpdGhVdWlkKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMubGF5b3V0U2VydmljZS5zZXRXaWRnZXRXaXRoRXh0ZXJuYWxEYXRhKHZhbHVlLnV1aWQpO1xuICAgIHRoaXMuX3dpZGdldENvbmZpZ3VyYXRpb25TdWJqZWN0JC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZGdldENvbmZpZ3VyYXRpb25TdWJqZWN0JCA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtaW9DYXNlV2lkZ2V0V2lkZ2V0V2l0aFV1aWQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIGdldCB3aWRnZXRDb25maWd1cmF0aW9uJCgpOiBPYnNlcnZhYmxlPEZvcm1pb0Nhc2VXaWRnZXRXaWRnZXRXaXRoVXVpZD4ge1xuICAgIHJldHVybiB0aGlzLl93aWRnZXRDb25maWd1cmF0aW9uU3ViamVjdCQucGlwZShmaWx0ZXIoY29uZmlnID0+ICEhY29uZmlnKSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudElkU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIGdldCBfZG9jdW1lbnRJZCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRJZFN1YmplY3QkLnBpcGUoZmlsdGVyKGlkID0+ICEhaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaWxsZWRGb3JtRGVmaW5pdGlvbiQ6IE9ic2VydmFibGU8Rm9ybWlvRm9ybT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpZGdldENvbmZpZ3VyYXRpb24kLFxuICAgIHRoaXMuX2RvY3VtZW50SWQkLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2NvbmZpZywgZG9jdW1lbnRJZF0pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbkJ5TmFtZVByZUZpbGxlZChcbiAgICAgICAgICBjb25maWcucHJvcGVydGllcy5mb3JtRGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgZG9jdW1lbnRJZFxuICAgICAgICApLFxuICAgICAgICBvZihjb25maWcpLFxuICAgICAgXSlcbiAgICApLFxuICAgIHRhcCgoW18sIGNvbmZpZ10pID0+IHRoaXMubGF5b3V0U2VydmljZS5zZXRXaWRnZXRXaXRoRXh0ZXJuYWxEYXRhUmVhZHkoY29uZmlnLnV1aWQpKSxcbiAgICBtYXAoKFtmb3JtRGVmXSkgPT4gZm9ybURlZilcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFNlcnZpY2U6IERvc3NpZXJXaWRnZXRzTGF5b3V0U2VydmljZVxuICApIHt9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJmb3JtaW8td2lkZ2V0XCIgKm5nSWY9XCJwcmVmaWxsZWRGb3JtRGVmaW5pdGlvbiQgfCBhc3luYyBhcyBwcmVmaWxsZWRGb3JtRGVmaW5pdGlvblwiPlxuICA8aDQgY2xhc3M9XCJmb3JtaW8td2lkZ2V0X190aXRsZVwiPnt7ICh3aWRnZXRDb25maWd1cmF0aW9uJCB8IGFzeW5jKT8udGl0bGUgfHwgJy0nIH19PC9oND5cblxuICA8dmFsdGltby1mb3JtLWlvIFtmb3JtXT1cInByZWZpbGxlZEZvcm1EZWZpbml0aW9uXCI+PC92YWx0aW1vLWZvcm0taW8+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,126 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { CommonModule } from '@angular/common';
17
+ import { ChangeDetectionStrategy, Component, Input, signal, ViewEncapsulation, } from '@angular/core';
18
+ import { TranslateModule } from '@ngx-translate/core';
19
+ import { CarbonListModule, ViewType } from '@valtimo/components';
20
+ import { PaginationModel, PaginationModule, TilesModule } from 'carbon-components-angular';
21
+ import { BehaviorSubject, combineLatest, filter, map, of, switchMap } from 'rxjs';
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "../../../../../../services";
24
+ import * as i2 from "@angular/common";
25
+ import * as i3 from "@valtimo/components";
26
+ import * as i4 from "carbon-components-angular";
27
+ import * as i5 from "@ngx-translate/core";
28
+ export class WidgetTableComponent {
29
+ set widgetConfiguration(value) {
30
+ this._widgetConfiguration = value;
31
+ this.fields$.next(value.properties.columns.map((column, index) => ({
32
+ key: column.key,
33
+ label: column.title,
34
+ viewType: column.displayProperties?.type ?? ViewType.TEXT,
35
+ className: `valtimo-widget-table--transparent ${index === 0 && value.properties.firstColumnAsTitle ? 'valtimo-widget-table--title' : ''}`,
36
+ ...(!!column.displayProperties?.['format'] && {
37
+ format: column.displayProperties['format'],
38
+ }),
39
+ ...(!!column.displayProperties?.['digitsInfo'] && {
40
+ digitsInfo: column.displayProperties['digitsInfo'],
41
+ }),
42
+ ...(!!column.displayProperties?.['display'] && {
43
+ display: column.displayProperties['display'],
44
+ }),
45
+ ...(!!column.displayProperties?.['currencyCode'] && {
46
+ currencyCode: column.displayProperties['currencyCode'],
47
+ }),
48
+ })));
49
+ this.cdr.detectChanges();
50
+ }
51
+ get widgetConfiguration() {
52
+ return this._widgetConfiguration;
53
+ }
54
+ get _initialNumberOfElements$() {
55
+ return this._initialNumberOfElementsSubject$.pipe(filter(numberOfElements => numberOfElements !== null));
56
+ }
57
+ set widgetData(value) {
58
+ if (!value)
59
+ return;
60
+ this.showPagination$.next(value.totalElements > value.size);
61
+ this._initialNumberOfElementsSubject$.next(value.numberOfElements);
62
+ this._widgetData$.next(value.content);
63
+ this.paginationModel.set(value.totalPages < 2
64
+ ? null
65
+ : {
66
+ currentPage: 1,
67
+ totalDataLength: Math.ceil(value.totalElements / value.size),
68
+ pageLength: value.size,
69
+ });
70
+ this.cdr.detectChanges();
71
+ }
72
+ constructor(dossierWidgetsApiService, cdr) {
73
+ this.dossierWidgetsApiService = dossierWidgetsApiService;
74
+ this.cdr = cdr;
75
+ this._initialNumberOfElementsSubject$ = new BehaviorSubject(null);
76
+ this.showPagination$ = new BehaviorSubject(false);
77
+ this._widgetData$ = new BehaviorSubject(null);
78
+ this.fields$ = new BehaviorSubject([]);
79
+ this._queryParams$ = new BehaviorSubject(null);
80
+ this.paginationModel = signal(new PaginationModel());
81
+ this.widgetData$ = combineLatest([
82
+ this._widgetData$,
83
+ this._queryParams$,
84
+ this._initialNumberOfElements$,
85
+ ]).pipe(switchMap(([data, queryParams, initialNumberOfElements]) => combineLatest([
86
+ !queryParams
87
+ ? of(data)
88
+ : this.dossierWidgetsApiService
89
+ .getWidgetData(this.documentId, this.tabKey, this.widgetConfiguration.key, queryParams)
90
+ .pipe(map((res) => res.content)),
91
+ of(initialNumberOfElements),
92
+ ])), filter(([items]) => !!items), map(([items, initialNumberOfElements]) => {
93
+ if (items.length === initialNumberOfElements) {
94
+ return items;
95
+ }
96
+ const rows = new Array(initialNumberOfElements).fill(null);
97
+ return rows.map((_, index) => items[index] || {});
98
+ }));
99
+ }
100
+ onSelectPage(page) {
101
+ this._queryParams$.next(`page=${page - 1}&size=${this.paginationModel().pageLength}`);
102
+ this.paginationModel.update((model) => ({
103
+ ...model,
104
+ currentPage: page,
105
+ }));
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTableComponent, deps: [{ token: i1.DossierWidgetsApiService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: WidgetTableComponent, isStandalone: true, selector: "valtimo-widget-table", inputs: { documentId: "documentId", tabKey: "tabKey", widgetConfiguration: "widgetConfiguration", widgetData: "widgetData" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-tile\n *ngIf=\"{\n fields: fields$ | async,\n widgetData: widgetData$ | async\n } as obs\"\n class=\"valtimo-widget-table\"\n>\n <span class=\"widget-title\">{{ widgetConfiguration?.title }}</span>\n\n @if (obs.widgetData && obs.fields && obs.widgetData.length) {\n <section class=\"valtimo-widget-table__content\">\n <valtimo-carbon-list\n [header]=\"false\"\n [hideToolbar]=\"true\"\n [fields]=\"obs.fields\"\n [items]=\"obs.widgetData\"\n >\n </valtimo-carbon-list>\n\n <cds-pagination-nav\n *ngIf=\"paginationModel()\"\n class=\"valtimo-widget-table__pagination\"\n [model]=\"paginationModel()\"\n (selectPage)=\"onSelectPage($event)\"\n >\n </cds-pagination-nav>\n </section>\n } @else {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n</cds-tile>\n", styles: [".valtimo-widget-table{padding:24px;display:flex;flex-direction:column;gap:16px}.valtimo-widget-table__content{display:flex;align-items:center;flex-direction:column}.valtimo-widget-table__content valtimo-carbon-list{width:100%}.valtimo-widget-table__pagination{padding:8px 0}.valtimo-widget-table .cds--data-table>thead{background:transparent!important}.valtimo-widget-table .cds--data-table td,.valtimo-widget-table .cds--data-table tr,.valtimo-widget-table .cds--data-table th{display:flex;width:100%}.valtimo-widget-table .cds--data-table td{white-space:nowrap;overflow:hidden}.valtimo-widget-table .cds--data-table td span{text-overflow:ellipsis;overflow:hidden}.valtimo-widget-table .cds--data-table tr{gap:16px}.valtimo-widget-table .cds--table-header-label>span{font-weight:400;font-size:12px;color:var(--cds-text-secondary)}.valtimo-widget-table--transparent{background:transparent!important}.valtimo-widget-table--title{border:none!important;font-style:italic}.valtimo-widget-table .widget-title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i3.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i3.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: PaginationModule }, { kind: "component", type: i4.PaginationNav, selector: "cds-pagination-nav, ibm-pagination-navm", inputs: ["model", "disabled", "numOfItemsToShow", "translations"], outputs: ["selectPage"] }, { kind: "ngmodule", type: TilesModule }, { kind: "component", type: i4.Tile, selector: "cds-tile, ibm-tile", inputs: ["theme"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTableComponent, decorators: [{
111
+ type: Component,
112
+ args: [{ selector: 'valtimo-widget-table', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, CarbonListModule, PaginationModule, TilesModule, TranslateModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-tile\n *ngIf=\"{\n fields: fields$ | async,\n widgetData: widgetData$ | async\n } as obs\"\n class=\"valtimo-widget-table\"\n>\n <span class=\"widget-title\">{{ widgetConfiguration?.title }}</span>\n\n @if (obs.widgetData && obs.fields && obs.widgetData.length) {\n <section class=\"valtimo-widget-table__content\">\n <valtimo-carbon-list\n [header]=\"false\"\n [hideToolbar]=\"true\"\n [fields]=\"obs.fields\"\n [items]=\"obs.widgetData\"\n >\n </valtimo-carbon-list>\n\n <cds-pagination-nav\n *ngIf=\"paginationModel()\"\n class=\"valtimo-widget-table__pagination\"\n [model]=\"paginationModel()\"\n (selectPage)=\"onSelectPage($event)\"\n >\n </cds-pagination-nav>\n </section>\n } @else {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n</cds-tile>\n", styles: [".valtimo-widget-table{padding:24px;display:flex;flex-direction:column;gap:16px}.valtimo-widget-table__content{display:flex;align-items:center;flex-direction:column}.valtimo-widget-table__content valtimo-carbon-list{width:100%}.valtimo-widget-table__pagination{padding:8px 0}.valtimo-widget-table .cds--data-table>thead{background:transparent!important}.valtimo-widget-table .cds--data-table td,.valtimo-widget-table .cds--data-table tr,.valtimo-widget-table .cds--data-table th{display:flex;width:100%}.valtimo-widget-table .cds--data-table td{white-space:nowrap;overflow:hidden}.valtimo-widget-table .cds--data-table td span{text-overflow:ellipsis;overflow:hidden}.valtimo-widget-table .cds--data-table tr{gap:16px}.valtimo-widget-table .cds--table-header-label>span{font-weight:400;font-size:12px;color:var(--cds-text-secondary)}.valtimo-widget-table--transparent{background:transparent!important}.valtimo-widget-table--title{border:none!important;font-style:italic}.valtimo-widget-table .widget-title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\n"] }]
113
+ }], ctorParameters: () => [{ type: i1.DossierWidgetsApiService }, { type: i0.ChangeDetectorRef }], propDecorators: { documentId: [{
114
+ type: Input,
115
+ args: [{ required: true }]
116
+ }], tabKey: [{
117
+ type: Input,
118
+ args: [{ required: true }]
119
+ }], widgetConfiguration: [{
120
+ type: Input,
121
+ args: [{ required: true }]
122
+ }], widgetData: [{
123
+ type: Input,
124
+ args: [{ required: true }]
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1kZXRhaWwvdGFiL3dpZGdldHMvY29tcG9uZW50cy90YWJsZS93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL3RhYmxlL3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFpQixnQkFBZ0IsRUFBZ0IsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFN0YsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFhNUYsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixJQUFvQyxtQkFBbUIsQ0FBQyxLQUFzQjtRQUM1RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxD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UyxNQUFNO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFHYSxtQkFBbUI7c0JBQXRELEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQXVDTSxVQUFVO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NhcmJvbkxpc3RJdGVtLCBDYXJib25MaXN0TW9kdWxlLCBDb2x1bW5Db25maWcsIFZpZXdUeXBlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7UGFnaW5hdGlvbk1vZGVsLCBQYWdpbmF0aW9uTW9kdWxlLCBUaWxlc01vZHVsZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGaWVsZHNDYXNlV2lkZ2V0VmFsdWUsIFRhYmxlQ2FzZVdpZGdldH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7RG9zc2llcldpZGdldHNBcGlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8td2lkZ2V0LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dpZGdldC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2FyYm9uTGlzdE1vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgVGlsZXNNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRhYmxlQ29tcG9uZW50IHtcbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBkb2N1bWVudElkOiBzdHJpbmc7XG4gIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgdGFiS2V5OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfd2lkZ2V0Q29uZmlndXJhdGlvbjogVGFibGVDYXNlV2lkZ2V0O1xuICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIHNldCB3aWRnZXRDb25maWd1cmF0aW9uKHZhbHVlOiBUYWJsZUNhc2VXaWRnZXQpIHtcbiAgICB0aGlzLl93aWRnZXRDb25maWd1cmF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5maWVsZHMkLm5leHQoXG4gICAgICB2YWx1ZS5wcm9wZXJ0aWVzLmNvbHVtbnMubWFwKChjb2x1bW46IEZpZWxkc0Nhc2VXaWRnZXRWYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ua2V5LFxuICAgICAgICBsYWJlbDogY29sdW1uLnRpdGxlLFxuICAgICAgICB2aWV3VHlwZTogY29sdW1uLmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID8/IFZpZXdUeXBlLlRFWFQsXG4gICAgICAgIGNsYXNzTmFtZTogYHZhbHRpbW8td2lkZ2V0LXRhYmxlLS10cmFuc3BhcmVudCAke2luZGV4ID09PSAwICYmIHZhbHVlLnByb3BlcnRpZXMuZmlyc3RDb2x1bW5Bc1RpdGxlID8gJ3ZhbHRpbW8td2lkZ2V0LXRhYmxlLS10aXRsZScgOiAnJ31gLFxuICAgICAgICAuLi4oISFjb2x1bW4uZGlzcGxheVByb3BlcnRpZXM/LlsnZm9ybWF0J10gJiYge1xuICAgICAgICAgIGZvcm1hdDogY29sdW1uLmRpc3BsYXlQcm9wZXJ0aWVzWydmb3JtYXQnXSxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLighIWNvbHVtbi5kaXNwbGF5UHJvcGVydGllcz8uWydkaWdpdHNJbmZvJ10gJiYge1xuICAgICAgICAgIGRpZ2l0c0luZm86IGNvbHVtbi5kaXNwbGF5UHJvcGVydGllc1snZGlnaXRzSW5mbyddLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKCEhY29sdW1uLmRpc3BsYXlQcm9wZXJ0aWVzPy5bJ2Rpc3BsYXknXSAmJiB7XG4gICAgICAgICAgZGlzcGxheTogY29sdW1uLmRpc3BsYXlQcm9wZXJ0aWVzWydkaXNwbGF5J10sXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oISFjb2x1bW4uZGlzcGxheVByb3BlcnRpZXM/LlsnY3VycmVuY3lDb2RlJ10gJiYge1xuICAgICAgICAgIGN1cnJlbmN5Q29kZTogY29sdW1uLmRpc3BsYXlQcm9wZXJ0aWVzWydjdXJyZW5jeUNvZGUnXSxcbiAgICAgICAgfSksXG4gICAgICB9KSlcbiAgICApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZGdldENvbmZpZ3VyYXRpb24oKTogVGFibGVDYXNlV2lkZ2V0IHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxOdW1iZXJPZkVsZW1lbnRzU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4obnVsbCk7XG5cbiAgcHJpdmF0ZSBnZXQgX2luaXRpYWxOdW1iZXJPZkVsZW1lbnRzJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsTnVtYmVyT2ZFbGVtZW50c1N1YmplY3QkLnBpcGUoXG4gICAgICBmaWx0ZXIobnVtYmVyT2ZFbGVtZW50cyA9PiBudW1iZXJPZkVsZW1lbnRzICE9PSBudWxsKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1BhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfd2lkZ2V0RGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RJdGVtW10gfCBudWxsPihudWxsKTtcbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHNldCB3aWRnZXREYXRhKHZhbHVlOiBQYWdlPENhcmJvbkxpc3RJdGVtPiB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uJC5uZXh0KHZhbHVlLnRvdGFsRWxlbWVudHMgPiB2YWx1ZS5zaXplKTtcbiAgICB0aGlzLl9pbml0aWFsTnVtYmVyT2ZFbGVtZW50c1N1YmplY3QkLm5leHQodmFsdWUubnVtYmVyT2ZFbGVtZW50cyk7XG4gICAgdGhpcy5fd2lkZ2V0RGF0YSQubmV4dCh2YWx1ZS5jb250ZW50KTtcblxuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsLnNldChcbiAgICAgIHZhbHVlLnRvdGFsUGFnZXMgPCAyXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgICAgICAgICAgdG90YWxEYXRhTGVuZ3RoOiBNYXRoLmNlaWwodmFsdWUudG90YWxFbGVtZW50cyAvIHZhbHVlLnNpemUpLFxuICAgICAgICAgICAgcGFnZUxlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sdW1uQ29uZmlnW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlQYXJhbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdGlvbk1vZGVsID0gc2lnbmFsPFBhZ2luYXRpb25Nb2RlbD4obmV3IFBhZ2luYXRpb25Nb2RlbCgpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgd2lkZ2V0RGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl93aWRnZXREYXRhJCxcbiAgICB0aGlzLl9xdWVyeVBhcmFtcyQsXG4gICAgdGhpcy5faW5pdGlhbE51bWJlck9mRWxlbWVudHMkLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2RhdGEsIHF1ZXJ5UGFyYW1zLCBpbml0aWFsTnVtYmVyT2ZFbGVtZW50c10pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgIXF1ZXJ5UGFyYW1zXG4gICAgICAgICAgPyBvZihkYXRhKVxuICAgICAgICAgIDogdGhpcy5kb3NzaWVyV2lkZ2V0c0FwaVNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldFdpZGdldERhdGEoXG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudElkLFxuICAgICAgICAgICAgICAgIHRoaXMudGFiS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29uZmlndXJhdGlvbi5rZXksXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucGlwZShtYXAoKHJlczogUGFnZTxDYXJib25MaXN0SXRlbT4pID0+IHJlcy5jb250ZW50KSksXG4gICAgICAgIG9mKGluaXRpYWxOdW1iZXJPZkVsZW1lbnRzKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBmaWx0ZXIoKFtpdGVtc10pID0+ICEhaXRlbXMpLFxuICAgIG1hcCgoW2l0ZW1zLCBpbml0aWFsTnVtYmVyT2ZFbGVtZW50c10pID0+IHtcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IGluaXRpYWxOdW1iZXJPZkVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm93cyA9IG5ldyBBcnJheTxudW1iZXI+KGluaXRpYWxOdW1iZXJPZkVsZW1lbnRzKS5maWxsKG51bGwpO1xuXG4gICAgICByZXR1cm4gcm93cy5tYXAoKF8sIGluZGV4KSA9PiBpdGVtc1tpbmRleF0gfHwge30pO1xuICAgIH0pXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyV2lkZ2V0c0FwaVNlcnZpY2U6IERvc3NpZXJXaWRnZXRzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcXVlcnlQYXJhbXMkLm5leHQoYHBhZ2U9JHtwYWdlIC0gMX0mc2l6ZT0ke3RoaXMucGFnaW5hdGlvbk1vZGVsKCkucGFnZUxlbmd0aH1gKTtcbiAgICB0aGlzLnBhZ2luYXRpb25Nb2RlbC51cGRhdGUoKG1vZGVsOiBQYWdpbmF0aW9uTW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGN1cnJlbnRQYWdlOiBwYWdlLFxuICAgIH0pKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48Y2RzLXRpbGVcbiAgKm5nSWY9XCJ7XG4gICAgZmllbGRzOiBmaWVsZHMkIHwgYXN5bmMsXG4gICAgd2lkZ2V0RGF0YTogd2lkZ2V0RGF0YSQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4gIGNsYXNzPVwidmFsdGltby13aWRnZXQtdGFibGVcIlxuPlxuICA8c3BhbiBjbGFzcz1cIndpZGdldC10aXRsZVwiPnt7IHdpZGdldENvbmZpZ3VyYXRpb24/LnRpdGxlIH19PC9zcGFuPlxuXG4gIEBpZiAob2JzLndpZGdldERhdGEgJiYgb2JzLmZpZWxkcyAmJiBvYnMud2lkZ2V0RGF0YS5sZW5ndGgpIHtcbiAgICA8c2VjdGlvbiBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LXRhYmxlX19jb250ZW50XCI+XG4gICAgICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgICAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICAgICAgW2hpZGVUb29sYmFyXT1cInRydWVcIlxuICAgICAgICBbZmllbGRzXT1cIm9icy5maWVsZHNcIlxuICAgICAgICBbaXRlbXNdPVwib2JzLndpZGdldERhdGFcIlxuICAgICAgPlxuICAgICAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuXG4gICAgICA8Y2RzLXBhZ2luYXRpb24tbmF2XG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbk1vZGVsKClcIlxuICAgICAgICBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LXRhYmxlX19wYWdpbmF0aW9uXCJcbiAgICAgICAgW21vZGVsXT1cInBhZ2luYXRpb25Nb2RlbCgpXCJcbiAgICAgICAgKHNlbGVjdFBhZ2UpPVwib25TZWxlY3RQYWdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9jZHMtcGFnaW5hdGlvbi1uYXY+XG4gICAgPC9zZWN0aW9uPlxuICB9IEBlbHNlIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbY29sbGFwc2VWZXJ0aWNhbGx5XT1cInRydWVcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLndpZGdldHMubm9EYXRhJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbc21hbGxQYWRkaW5nXT1cInRydWVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuPC9jZHMtdGlsZT5cbiJdfQ==