@onecx/angular-accelerator 4.11.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 (130) hide show
  1. package/README.md +7 -0
  2. package/assets/i18n/de.json +130 -0
  3. package/assets/i18n/en.json +130 -0
  4. package/assets/images/placeholder.png +0 -0
  5. package/assets/styles.scss +8 -0
  6. package/esm2020/index.mjs +49 -0
  7. package/esm2020/lib/angular-accelerator-primeng.module.mjs +83 -0
  8. package/esm2020/lib/angular-accelerator.module.mjs +209 -0
  9. package/esm2020/lib/components/column-group-selection/column-group-selection.component.mjs +72 -0
  10. package/esm2020/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +108 -0
  11. package/esm2020/lib/components/data-layout-selection/data-layout-selection.component.mjs +45 -0
  12. package/esm2020/lib/components/data-list-grid/data-list-grid.component.mjs +358 -0
  13. package/esm2020/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +92 -0
  14. package/esm2020/lib/components/data-sort-base/data-sort-base.mjs +110 -0
  15. package/esm2020/lib/components/data-table/data-table.component.mjs +350 -0
  16. package/esm2020/lib/components/data-view/data-view.component.mjs +355 -0
  17. package/esm2020/lib/components/diagram/diagram.component.mjs +136 -0
  18. package/esm2020/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +109 -0
  19. package/esm2020/lib/components/interactive-data-view/interactive-data-view.component.mjs +342 -0
  20. package/esm2020/lib/components/page-header/page-header.component.mjs +189 -0
  21. package/esm2020/lib/components/search-config/search-config.component.mjs +34 -0
  22. package/esm2020/lib/components/search-header/search-header.component.mjs +136 -0
  23. package/esm2020/lib/directives/if-breakpoint.directive.mjs +39 -0
  24. package/esm2020/lib/directives/if-permission.directive.mjs +53 -0
  25. package/esm2020/lib/functions/flatten-object.mjs +20 -0
  26. package/esm2020/lib/model/breadcrumb-menu-item.model.mjs +2 -0
  27. package/esm2020/lib/model/column-type.model.mjs +9 -0
  28. package/esm2020/lib/model/data-action.mjs +2 -0
  29. package/esm2020/lib/model/data-column-name-id.model.mjs +2 -0
  30. package/esm2020/lib/model/data-sort-direction.mjs +2 -0
  31. package/esm2020/lib/model/data-table-column.model.mjs +2 -0
  32. package/esm2020/lib/model/diagram-column.mjs +2 -0
  33. package/esm2020/lib/model/diagram-data.mjs +2 -0
  34. package/esm2020/lib/model/diagram-type.mjs +2 -0
  35. package/esm2020/lib/model/search-config-info.mjs +2 -0
  36. package/esm2020/lib/pipes/dynamic.pipe.mjs +58 -0
  37. package/esm2020/lib/pipes/ocxtimeago.pipe.mjs +15 -0
  38. package/esm2020/lib/services/breadcrumb.service.mjs +79 -0
  39. package/esm2020/lib/services/translation-cache.service.mjs +54 -0
  40. package/esm2020/lib/utils/async-translate-loader.utils.mjs +12 -0
  41. package/esm2020/lib/utils/caching-translate-loader.utils.mjs +15 -0
  42. package/esm2020/lib/utils/colorutils.mjs +19 -0
  43. package/esm2020/lib/utils/create-translate-loader.utils.mjs +23 -0
  44. package/esm2020/lib/utils/dateutils.mjs +32 -0
  45. package/esm2020/lib/utils/objectutils.mjs +30 -0
  46. package/esm2020/lib/utils/ocxtimeagointl.utils.mjs +34 -0
  47. package/esm2020/lib/utils/primeicon.utils.mjs +2 -0
  48. package/esm2020/lib/utils/translate.combined.loader.mjs +36 -0
  49. package/esm2020/onecx-angular-accelerator.mjs +5 -0
  50. package/esm2020/testing/column-group-selection.harness.mjs +10 -0
  51. package/esm2020/testing/custom-group-column-selector.harness.mjs +31 -0
  52. package/esm2020/testing/data-layout-selection.harness.mjs +33 -0
  53. package/esm2020/testing/data-list-grid.harness.mjs +47 -0
  54. package/esm2020/testing/data-table.harness.mjs +57 -0
  55. package/esm2020/testing/data-view.harness.mjs +12 -0
  56. package/esm2020/testing/default-grid-item.harness.mjs +24 -0
  57. package/esm2020/testing/default-list-item.harness.mjs +24 -0
  58. package/esm2020/testing/diagram.harness.mjs +22 -0
  59. package/esm2020/testing/index.mjs +17 -0
  60. package/esm2020/testing/interactive-data-view.harness.mjs +19 -0
  61. package/esm2020/testing/more-actions-menu-button.harness.mjs +35 -0
  62. package/esm2020/testing/onecx-angular-accelerator-testing.mjs +5 -0
  63. package/esm2020/testing/page-header.harness.mjs +36 -0
  64. package/esm2020/testing/search-config.harness.mjs +10 -0
  65. package/fesm2015/onecx-angular-accelerator-testing.mjs +430 -0
  66. package/fesm2015/onecx-angular-accelerator-testing.mjs.map +1 -0
  67. package/fesm2015/onecx-angular-accelerator.mjs +3118 -0
  68. package/fesm2015/onecx-angular-accelerator.mjs.map +1 -0
  69. package/fesm2020/onecx-angular-accelerator-testing.mjs +338 -0
  70. package/fesm2020/onecx-angular-accelerator-testing.mjs.map +1 -0
  71. package/fesm2020/onecx-angular-accelerator.mjs +3085 -0
  72. package/fesm2020/onecx-angular-accelerator.mjs.map +1 -0
  73. package/index.d.ts +38 -0
  74. package/lib/angular-accelerator-primeng.module.d.ts +16 -0
  75. package/lib/angular-accelerator.module.d.ts +32 -0
  76. package/lib/components/column-group-selection/column-group-selection.component.d.ts +28 -0
  77. package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +45 -0
  78. package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +25 -0
  79. package/lib/components/data-list-grid/data-list-grid.component.d.ts +120 -0
  80. package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +30 -0
  81. package/lib/components/data-sort-base/data-sort-base.d.ts +32 -0
  82. package/lib/components/data-table/data-table.component.d.ts +124 -0
  83. package/lib/components/data-view/data-view.component.d.ts +112 -0
  84. package/lib/components/diagram/diagram.component.d.ts +43 -0
  85. package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +39 -0
  86. package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +108 -0
  87. package/lib/components/page-header/page-header.component.d.ts +90 -0
  88. package/lib/components/search-config/search-config.component.d.ts +16 -0
  89. package/lib/components/search-header/search-header.component.d.ts +46 -0
  90. package/lib/directives/if-breakpoint.directive.d.ts +12 -0
  91. package/lib/directives/if-permission.directive.d.ts +18 -0
  92. package/lib/functions/flatten-object.d.ts +14 -0
  93. package/lib/model/breadcrumb-menu-item.model.d.ts +60 -0
  94. package/lib/model/column-type.model.d.ts +7 -0
  95. package/lib/model/data-action.d.ts +9 -0
  96. package/lib/model/data-column-name-id.model.d.ts +4 -0
  97. package/lib/model/data-sort-direction.d.ts +5 -0
  98. package/lib/model/data-table-column.model.d.ts +9 -0
  99. package/lib/model/diagram-column.d.ts +5 -0
  100. package/lib/model/diagram-data.d.ts +4 -0
  101. package/lib/model/diagram-type.d.ts +5 -0
  102. package/lib/model/search-config-info.d.ts +4 -0
  103. package/lib/pipes/dynamic.pipe.d.ts +13 -0
  104. package/lib/pipes/ocxtimeago.pipe.d.ts +6 -0
  105. package/lib/services/breadcrumb.service.d.ts +20 -0
  106. package/lib/services/translation-cache.service.d.ts +12 -0
  107. package/lib/utils/async-translate-loader.utils.d.ts +9 -0
  108. package/lib/utils/caching-translate-loader.utils.d.ts +13 -0
  109. package/lib/utils/colorutils.d.ts +12 -0
  110. package/lib/utils/create-translate-loader.utils.d.ts +5 -0
  111. package/lib/utils/dateutils.d.ts +9 -0
  112. package/lib/utils/objectutils.d.ts +4 -0
  113. package/lib/utils/ocxtimeagointl.utils.d.ts +9 -0
  114. package/lib/utils/primeicon.utils.d.ts +5 -0
  115. package/lib/utils/translate.combined.loader.d.ts +9 -0
  116. package/package.json +55 -0
  117. package/testing/column-group-selection.harness.d.ts +6 -0
  118. package/testing/custom-group-column-selector.harness.d.ts +14 -0
  119. package/testing/data-layout-selection.harness.d.ts +11 -0
  120. package/testing/data-list-grid.harness.d.ts +15 -0
  121. package/testing/data-table.harness.d.ts +17 -0
  122. package/testing/data-view.harness.d.ts +8 -0
  123. package/testing/default-grid-item.harness.d.ts +11 -0
  124. package/testing/default-list-item.harness.d.ts +12 -0
  125. package/testing/diagram.harness.d.ts +10 -0
  126. package/testing/index.d.ts +16 -0
  127. package/testing/interactive-data-view.harness.d.ts +15 -0
  128. package/testing/more-actions-menu-button.harness.d.ts +10 -0
  129. package/testing/page-header.harness.d.ts +13 -0
  130. package/testing/search-config.harness.d.ts +6 -0
@@ -0,0 +1,209 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { CUSTOM_ELEMENTS_SCHEMA, LOCALE_ID, NgModule, importProvidersFrom } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { RouterModule } from '@angular/router';
5
+ import { HttpClient } from '@angular/common/http';
6
+ import { MissingTranslationHandler, TranslateLoader, TranslateModule, } from '@ngx-translate/core';
7
+ import { TimeagoClock, TimeagoCustomFormatter, TimeagoDefaultClock, TimeagoFormatter, TimeagoIntl, TimeagoModule, } from 'ngx-timeago';
8
+ import { AppStateService, UserService } from '@onecx/angular-integration-interface';
9
+ import { AngularAcceleratorPrimeNgModule } from './angular-accelerator-primeng.module';
10
+ import { ColumnGroupSelectionComponent } from './components/column-group-selection/column-group-selection.component';
11
+ import { CustomGroupColumnSelectorComponent } from './components/custom-group-column-selector/custom-group-column-selector.component';
12
+ import { DataLayoutSelectionComponent } from './components/data-layout-selection/data-layout-selection.component';
13
+ import { DataListGridSortingComponent } from './components/data-list-grid-sorting/data-list-grid-sorting.component';
14
+ import { DataListGridComponent } from './components/data-list-grid/data-list-grid.component';
15
+ import { DataTableComponent } from './components/data-table/data-table.component';
16
+ import { DataViewComponent } from './components/data-view/data-view.component';
17
+ import { InteractiveDataViewComponent } from './components/interactive-data-view/interactive-data-view.component';
18
+ import { SearchConfigComponent } from './components/search-config/search-config.component';
19
+ import { PageHeaderComponent } from './components/page-header/page-header.component';
20
+ import { SearchHeaderComponent } from './components/search-header/search-header.component';
21
+ import { GroupByCountDiagramComponent } from './components/group-by-count-diagram/group-by-count-diagram.component';
22
+ import { DiagramComponent } from './components/diagram/diagram.component';
23
+ import { DynamicPipe } from './pipes/dynamic.pipe';
24
+ import { IfPermissionDirective } from './directives/if-permission.directive';
25
+ import { IfBreakpointDirective } from './directives/if-breakpoint.directive';
26
+ import { OcxTimeAgoPipe } from './pipes/ocxtimeago.pipe';
27
+ import { OcxTimeagoIntl } from './utils/ocxtimeagointl.utils';
28
+ import { createTranslateLoader } from './utils/create-translate-loader.utils';
29
+ import { TranslationCacheService } from './services/translation-cache.service';
30
+ import * as i0 from "@angular/core";
31
+ import * as i1 from "@ngx-translate/core";
32
+ export class AngularAcceleratorMissingTranslationHandler {
33
+ handle(params) {
34
+ console.log(`Missing translation for ${params.key}`, params);
35
+ return params.key;
36
+ }
37
+ }
38
+ export class AngularAcceleratorModule {
39
+ }
40
+ AngularAcceleratorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularAcceleratorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
41
+ AngularAcceleratorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: AngularAcceleratorModule, declarations: [ColumnGroupSelectionComponent,
42
+ CustomGroupColumnSelectorComponent,
43
+ DataLayoutSelectionComponent,
44
+ DataListGridSortingComponent,
45
+ DataListGridComponent,
46
+ DataTableComponent,
47
+ DataViewComponent,
48
+ InteractiveDataViewComponent,
49
+ SearchConfigComponent,
50
+ PageHeaderComponent,
51
+ DynamicPipe,
52
+ SearchHeaderComponent,
53
+ DiagramComponent,
54
+ GroupByCountDiagramComponent,
55
+ IfPermissionDirective,
56
+ IfBreakpointDirective,
57
+ OcxTimeAgoPipe], imports: [CommonModule,
58
+ AngularAcceleratorPrimeNgModule, i1.TranslateModule, FormsModule,
59
+ RouterModule,
60
+ ReactiveFormsModule], exports: [ColumnGroupSelectionComponent,
61
+ CustomGroupColumnSelectorComponent,
62
+ DataLayoutSelectionComponent,
63
+ DataListGridComponent,
64
+ DataTableComponent,
65
+ DataViewComponent,
66
+ InteractiveDataViewComponent,
67
+ SearchConfigComponent,
68
+ PageHeaderComponent,
69
+ SearchHeaderComponent,
70
+ DiagramComponent,
71
+ GroupByCountDiagramComponent,
72
+ IfPermissionDirective,
73
+ IfBreakpointDirective,
74
+ OcxTimeAgoPipe] });
75
+ AngularAcceleratorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularAcceleratorModule, providers: [
76
+ {
77
+ provide: LOCALE_ID,
78
+ useFactory: (UserService) => {
79
+ return UserService.lang$.getValue();
80
+ },
81
+ deps: [UserService],
82
+ },
83
+ {
84
+ provide: TimeagoIntl,
85
+ useFactory: (userService) => {
86
+ return new OcxTimeagoIntl(userService);
87
+ },
88
+ deps: [UserService],
89
+ },
90
+ importProvidersFrom(TimeagoModule),
91
+ {
92
+ provide: TimeagoFormatter,
93
+ useFactory: (TimeagoIntl) => {
94
+ return new TimeagoCustomFormatter(TimeagoIntl);
95
+ },
96
+ deps: [TimeagoIntl],
97
+ },
98
+ {
99
+ provide: TimeagoClock,
100
+ useClass: TimeagoDefaultClock,
101
+ },
102
+ ], imports: [CommonModule,
103
+ AngularAcceleratorPrimeNgModule,
104
+ TranslateModule.forRoot({
105
+ isolate: true,
106
+ loader: {
107
+ provide: TranslateLoader,
108
+ useFactory: createTranslateLoader,
109
+ deps: [HttpClient, AppStateService, TranslationCacheService],
110
+ },
111
+ missingTranslationHandler: {
112
+ provide: MissingTranslationHandler,
113
+ useClass: AngularAcceleratorMissingTranslationHandler,
114
+ },
115
+ }),
116
+ FormsModule,
117
+ RouterModule,
118
+ ReactiveFormsModule] });
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularAcceleratorModule, decorators: [{
120
+ type: NgModule,
121
+ args: [{
122
+ imports: [
123
+ CommonModule,
124
+ AngularAcceleratorPrimeNgModule,
125
+ TranslateModule.forRoot({
126
+ isolate: true,
127
+ loader: {
128
+ provide: TranslateLoader,
129
+ useFactory: createTranslateLoader,
130
+ deps: [HttpClient, AppStateService, TranslationCacheService],
131
+ },
132
+ missingTranslationHandler: {
133
+ provide: MissingTranslationHandler,
134
+ useClass: AngularAcceleratorMissingTranslationHandler,
135
+ },
136
+ }),
137
+ FormsModule,
138
+ RouterModule,
139
+ ReactiveFormsModule,
140
+ ],
141
+ declarations: [
142
+ ColumnGroupSelectionComponent,
143
+ CustomGroupColumnSelectorComponent,
144
+ DataLayoutSelectionComponent,
145
+ DataListGridSortingComponent,
146
+ DataListGridComponent,
147
+ DataTableComponent,
148
+ DataViewComponent,
149
+ InteractiveDataViewComponent,
150
+ SearchConfigComponent,
151
+ PageHeaderComponent,
152
+ DynamicPipe,
153
+ SearchHeaderComponent,
154
+ DiagramComponent,
155
+ GroupByCountDiagramComponent,
156
+ IfPermissionDirective,
157
+ IfBreakpointDirective,
158
+ OcxTimeAgoPipe,
159
+ ],
160
+ providers: [
161
+ {
162
+ provide: LOCALE_ID,
163
+ useFactory: (UserService) => {
164
+ return UserService.lang$.getValue();
165
+ },
166
+ deps: [UserService],
167
+ },
168
+ {
169
+ provide: TimeagoIntl,
170
+ useFactory: (userService) => {
171
+ return new OcxTimeagoIntl(userService);
172
+ },
173
+ deps: [UserService],
174
+ },
175
+ importProvidersFrom(TimeagoModule),
176
+ {
177
+ provide: TimeagoFormatter,
178
+ useFactory: (TimeagoIntl) => {
179
+ return new TimeagoCustomFormatter(TimeagoIntl);
180
+ },
181
+ deps: [TimeagoIntl],
182
+ },
183
+ {
184
+ provide: TimeagoClock,
185
+ useClass: TimeagoDefaultClock,
186
+ },
187
+ ],
188
+ exports: [
189
+ ColumnGroupSelectionComponent,
190
+ CustomGroupColumnSelectorComponent,
191
+ DataLayoutSelectionComponent,
192
+ DataListGridComponent,
193
+ DataTableComponent,
194
+ DataViewComponent,
195
+ InteractiveDataViewComponent,
196
+ SearchConfigComponent,
197
+ PageHeaderComponent,
198
+ SearchHeaderComponent,
199
+ DiagramComponent,
200
+ GroupByCountDiagramComponent,
201
+ IfPermissionDirective,
202
+ IfBreakpointDirective,
203
+ OcxTimeAgoPipe,
204
+ // DataListGridSortingComponent,
205
+ ],
206
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
207
+ }]
208
+ }] });
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hY2NlbGVyYXRvci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9hbmd1bGFyLWFjY2VsZXJhdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDaEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUNMLHlCQUF5QixFQUV6QixlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFBO0FBQzVCLE9BQU8sRUFDTCxZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQTtBQUVwQixPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBRW5GLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3RGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFBO0FBQ3BILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtGQUFrRixDQUFBO0FBQ3JJLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFBO0FBQ2pILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNFQUFzRSxDQUFBO0FBQ25ILE9BQU8sRUFB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d0JBQ3JCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3dCQUNyQixxQkFBcUI7d0JBQ3JCLGNBQWM7d0JBQ2QsZ0NBQWdDO3FCQUNqQztvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBMT0NBTEVfSUQsIE5nTW9kdWxlLCBpbXBvcnRQcm92aWRlcnNGcm9tIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQge1xuICBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyLFxuICBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyUGFyYW1zLFxuICBUcmFuc2xhdGVMb2FkZXIsXG4gIFRyYW5zbGF0ZU1vZHVsZSxcbn0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7XG4gIFRpbWVhZ29DbG9jayxcbiAgVGltZWFnb0N1c3RvbUZvcm1hdHRlcixcbiAgVGltZWFnb0RlZmF1bHRDbG9jayxcbiAgVGltZWFnb0Zvcm1hdHRlcixcbiAgVGltZWFnb0ludGwsXG4gIFRpbWVhZ29Nb2R1bGUsXG59IGZyb20gJ25neC10aW1lYWdvJ1xuXG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQG9uZWN4L2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlJ1xuXG5pbXBvcnQgeyBBbmd1bGFyQWNjZWxlcmF0b3JQcmltZU5nTW9kdWxlIH0gZnJvbSAnLi9hbmd1bGFyLWFjY2VsZXJhdG9yLXByaW1lbmcubW9kdWxlJ1xuaW1wb3J0IHsgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sdW1uLWdyb3VwLXNlbGVjdGlvbi9jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uLmNvbXBvbmVudCdcbmltcG9ydCB7IEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YS1sYXlvdXQtc2VsZWN0aW9uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkLXNvcnRpbmcvZGF0YS1saXN0LWdyaWQtc29ydGluZy5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhTGlzdEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YS1saXN0LWdyaWQvZGF0YS1saXN0LWdyaWQuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRhLXZpZXcvZGF0YS12aWV3LmNvbXBvbmVudCdcbmltcG9ydCB7IEludGVyYWN0aXZlRGF0YVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtZGF0YS12aWV3L2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQnXG5pbXBvcnQgeyBTZWFyY2hDb25maWdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VhcmNoLWNvbmZpZy9zZWFyY2gtY29uZmlnLmNvbXBvbmVudCdcbmltcG9ydCB7IFBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50J1xuaW1wb3J0IHsgU2VhcmNoSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlYXJjaC1oZWFkZXIvc2VhcmNoLWhlYWRlci5jb21wb25lbnQnXG5pbXBvcnQgeyBHcm91cEJ5Q291bnREaWFncmFtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dyb3VwLWJ5LWNvdW50LWRpYWdyYW0vZ3JvdXAtYnktY291bnQtZGlhZ3JhbS5jb21wb25lbnQnXG5pbXBvcnQgeyBEaWFncmFtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RpYWdyYW0vZGlhZ3JhbS5jb21wb25lbnQnXG5pbXBvcnQgeyBEeW5hbWljUGlwZSB9IGZyb20gJy4vcGlwZXMvZHluYW1pYy5waXBlJ1xuaW1wb3J0IHsgSWZQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2lmLXBlcm1pc3Npb24uZGlyZWN0aXZlJ1xuaW1wb3J0IHsgSWZCcmVha3BvaW50RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2lmLWJyZWFrcG9pbnQuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgT2N4VGltZUFnb1BpcGUgfSBmcm9tICcuL3BpcGVzL29jeHRpbWVhZ28ucGlwZSdcbmltcG9ydCB7IE9jeFRpbWVhZ29JbnRsIH0gZnJvbSAnLi91dGlscy9vY3h0aW1lYWdvaW50bC51dGlscydcbmltcG9ydCB7IGNyZWF0ZVRyYW5zbGF0ZUxvYWRlciB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXRyYW5zbGF0ZS1sb2FkZXIudXRpbHMnXG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNhY2hlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24tY2FjaGUuc2VydmljZSdcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJBY2NlbGVyYXRvck1pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyIHtcbiAgaGFuZGxlKHBhcmFtczogTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlclBhcmFtcykge1xuICAgIGNvbnNvbGUubG9nKGBNaXNzaW5nIHRyYW5zbGF0aW9uIGZvciAke3BhcmFtcy5rZXl9YCwgcGFyYW1zKVxuICAgIHJldHVybiBwYXJhbXMua2V5XG4gIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBbmd1bGFyQWNjZWxlcmF0b3JQcmltZU5nTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JSb290KHtcbiAgICAgIGlzb2xhdGU6IHRydWUsXG4gICAgICBsb2FkZXI6IHtcbiAgICAgICAgcHJvdmlkZTogVHJhbnNsYXRlTG9hZGVyLFxuICAgICAgICB1c2VGYWN0b3J5OiBjcmVhdGVUcmFuc2xhdGVMb2FkZXIsXG4gICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50LCBBcHBTdGF0ZVNlcnZpY2UsIFRyYW5zbGF0aW9uQ2FjaGVTZXJ2aWNlXSxcbiAgICAgIH0sXG4gICAgICBtaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyOiB7XG4gICAgICAgIHByb3ZpZGU6IE1pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXIsXG4gICAgICAgIHVzZUNsYXNzOiBBbmd1bGFyQWNjZWxlcmF0b3JNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnQsXG4gICAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCxcbiAgICBEYXRhTGF5b3V0U2VsZWN0aW9uQ29tcG9uZW50LFxuICAgIERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnQsXG4gICAgRGF0YUxpc3RHcmlkQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICBEYXRhVmlld0NvbXBvbmVudCxcbiAgICBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50LFxuICAgIFNlYXJjaENvbmZpZ0NvbXBvbmVudCxcbiAgICBQYWdlSGVhZGVyQ29tcG9uZW50LFxuICAgIER5bmFtaWNQaXBlLFxuICAgIFNlYXJjaEhlYWRlckNvbXBvbmVudCxcbiAgICBEaWFncmFtQ29tcG9uZW50LFxuICAgIEdyb3VwQnlDb3VudERpYWdyYW1Db21wb25lbnQsXG4gICAgSWZQZXJtaXNzaW9uRGlyZWN0aXZlLFxuICAgIElmQnJlYWtwb2ludERpcmVjdGl2ZSxcbiAgICBPY3hUaW1lQWdvUGlwZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTE9DQUxFX0lELFxuICAgICAgdXNlRmFjdG9yeTogKFVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkgPT4ge1xuICAgICAgICByZXR1cm4gVXNlclNlcnZpY2UubGFuZyQuZ2V0VmFsdWUoKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtVc2VyU2VydmljZV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUaW1lYWdvSW50bCxcbiAgICAgIHVzZUZhY3Rvcnk6ICh1c2VyU2VydmljZTogVXNlclNlcnZpY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPY3hUaW1lYWdvSW50bCh1c2VyU2VydmljZSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbVXNlclNlcnZpY2VdLFxuICAgIH0sXG4gICAgaW1wb3J0UHJvdmlkZXJzRnJvbShUaW1lYWdvTW9kdWxlKSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUaW1lYWdvRm9ybWF0dGVyLFxuICAgICAgdXNlRmFjdG9yeTogKFRpbWVhZ29JbnRsOiBUaW1lYWdvSW50bCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFRpbWVhZ29DdXN0b21Gb3JtYXR0ZXIoVGltZWFnb0ludGwpXG4gICAgICB9LFxuICAgICAgZGVwczogW1RpbWVhZ29JbnRsXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRpbWVhZ29DbG9jayxcbiAgICAgIHVzZUNsYXNzOiBUaW1lYWdvRGVmYXVsdENsb2NrLFxuICAgIH0sXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudCxcbiAgICBDdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50LFxuICAgIERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnQsXG4gICAgRGF0YUxpc3RHcmlkQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICBEYXRhVmlld0NvbXBvbmVudCxcbiAgICBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50LFxuICAgIFNlYXJjaENvbmZpZ0NvbXBvbmVudCxcbiAgICBQYWdlSGVhZGVyQ29tcG9uZW50LFxuICAgIFNlYXJjaEhlYWRlckNvbXBvbmVudCxcbiAgICBEaWFncmFtQ29tcG9uZW50LFxuICAgIEdyb3VwQnlDb3VudERpYWdyYW1Db21wb25lbnQsXG4gICAgSWZQZXJtaXNzaW9uRGlyZWN0aXZlLFxuICAgIElmQnJlYWtwb2ludERpcmVjdGl2ZSxcbiAgICBPY3hUaW1lQWdvUGlwZSxcbiAgICAvLyBEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50LFxuICBdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJBY2NlbGVyYXRvck1vZHVsZSB7fVxuIl19
@@ -0,0 +1,72 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, map } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "primeng/dropdown";
6
+ import * as i3 from "primeng/api";
7
+ import * as i4 from "@angular/forms";
8
+ import * as i5 from "@ngx-translate/core";
9
+ export class ColumnGroupSelectionComponent {
10
+ constructor() {
11
+ this.selectedGroupKey$ = new BehaviorSubject('');
12
+ this.columns$ = new BehaviorSubject([]);
13
+ this.placeholderKey = '';
14
+ this.defaultGroupKey = '';
15
+ this.customGroupKey = '';
16
+ this.groupSelectionChanged = new EventEmitter();
17
+ }
18
+ get selectedGroupKey() {
19
+ return this.selectedGroupKey$.getValue();
20
+ }
21
+ set selectedGroupKey(value) {
22
+ this.selectedGroupKey$.next(value);
23
+ }
24
+ get columns() {
25
+ return this.columns$.getValue();
26
+ }
27
+ set columns(value) {
28
+ this.columns$.next(value);
29
+ }
30
+ ngOnInit() {
31
+ this.allGroupKeys$ = combineLatest([this.columns$, this.selectedGroupKey$]).pipe(map(([columns, selectedGroupKey]) => columns
32
+ .map((keys) => keys.predefinedGroupKeys || [])
33
+ .flat()
34
+ .concat([this.defaultGroupKey])
35
+ .concat([selectedGroupKey])
36
+ .filter((value) => !!value)
37
+ .filter((value, index, self) => self.indexOf(value) === index && value != null)));
38
+ }
39
+ changeGroupSelection(event) {
40
+ if (event.value === this.customGroupKey) {
41
+ return;
42
+ }
43
+ const activeColumns = this.columns.filter((c) => c.predefinedGroupKeys?.includes(event.value));
44
+ this.groupSelectionChanged.emit({ activeColumns, groupKey: event.value });
45
+ }
46
+ clearGroupSelection() {
47
+ let activeColumns = this.columns;
48
+ if (this.defaultGroupKey) {
49
+ activeColumns = this.columns.filter((column) => column.predefinedGroupKeys?.includes(this.defaultGroupKey));
50
+ }
51
+ this.groupSelectionChanged.emit({ activeColumns, groupKey: this.defaultGroupKey });
52
+ }
53
+ }
54
+ ColumnGroupSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColumnGroupSelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
55
+ ColumnGroupSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ColumnGroupSelectionComponent, selector: "ocx-column-group-selection", inputs: { selectedGroupKey: "selectedGroupKey", columns: "columns", placeholderKey: "placeholderKey", defaultGroupKey: "defaultGroupKey", customGroupKey: "customGroupKey" }, outputs: { groupSelectionChanged: "groupSelectionChanged" }, ngImport: i0, template: "<span class=\"p-float-label\">\n <p-dropdown\n id=\"columnGroupSelectionDropdown\"\n *ngIf=\"(allGroupKeys$ | async)?.length\"\n (onClear)=\"clearGroupSelection()\"\n (onChange)=\"changeGroupSelection($event)\"\n [options]=\"(allGroupKeys$ | async) || []\"\n [placeholder]=\"placeholderKey | translate\"\n [showClear]=\"selectedGroupKey !== defaultGroupKey\"\n [(ngModel)]=\"selectedGroupKey\"\n >\n <ng-template let-item pTemplate=\"item\"> {{ item ? (item | translate) : ''}} </ng-template>\n <ng-template let-item pTemplate=\"selectedItem\"> {{ item ? (item | translate) : ''}} </ng-template>\n </p-dropdown>\n <label *ngIf=\"(allGroupKeys$ | async)?.length\" for=\"columnGroupSelectionDropdown\"\n >{{ (\"OCX_CUSTOM_GROUP_COLUMN_SELECTOR.DROPDOWN_LABEL\" | translate) }}</label\n >\n</span>\n", styles: [":host ::ng-deep .p-dropdown{min-width:12rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColumnGroupSelectionComponent, decorators: [{
57
+ type: Component,
58
+ args: [{ selector: 'ocx-column-group-selection', template: "<span class=\"p-float-label\">\n <p-dropdown\n id=\"columnGroupSelectionDropdown\"\n *ngIf=\"(allGroupKeys$ | async)?.length\"\n (onClear)=\"clearGroupSelection()\"\n (onChange)=\"changeGroupSelection($event)\"\n [options]=\"(allGroupKeys$ | async) || []\"\n [placeholder]=\"placeholderKey | translate\"\n [showClear]=\"selectedGroupKey !== defaultGroupKey\"\n [(ngModel)]=\"selectedGroupKey\"\n >\n <ng-template let-item pTemplate=\"item\"> {{ item ? (item | translate) : ''}} </ng-template>\n <ng-template let-item pTemplate=\"selectedItem\"> {{ item ? (item | translate) : ''}} </ng-template>\n </p-dropdown>\n <label *ngIf=\"(allGroupKeys$ | async)?.length\" for=\"columnGroupSelectionDropdown\"\n >{{ (\"OCX_CUSTOM_GROUP_COLUMN_SELECTOR.DROPDOWN_LABEL\" | translate) }}</label\n >\n</span>\n", styles: [":host ::ng-deep .p-dropdown{min-width:12rem}\n"] }]
59
+ }], propDecorators: { selectedGroupKey: [{
60
+ type: Input
61
+ }], columns: [{
62
+ type: Input
63
+ }], placeholderKey: [{
64
+ type: Input
65
+ }], defaultGroupKey: [{
66
+ type: Input
67
+ }], customGroupKey: [{
68
+ type: Input
69
+ }], groupSelectionChanged: [{
70
+ type: Output
71
+ }] } });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQTs7Ozs7OztBQVN0RSxNQUFNLE9BQU8sNkJBQTZCO0lBTDFDO1FBTUUsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUE7UUFTbkQsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFvQixFQUFFLENBQUMsQ0FBQTtRQVE1QyxtQkFBYyxHQUFHLEVBQUUsQ0FBQTtRQUNuQixvQkFBZSxHQUFHLEVBQUUsQ0FBQTtRQUNwQixtQkFBYyxHQUFHLEVBQUUsQ0FBQTtRQUVsQiwwQkFBcUIsR0FBNkMsSUFBSSxZQUFZLEVBQUUsQ0FBQTtLQWlDL0Y7SUFyREMsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDMUMsQ0FBQztJQUNELElBQUksZ0JBQWdCLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFHRCxJQUNJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDakMsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFTRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5RSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FDbEMsT0FBTzthQUNKLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQzthQUM3QyxJQUFJLEVBQUU7YUFDTixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDOUIsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMxQixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDMUIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FDbEYsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQXdCO1FBQzNDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZDLE9BQU07U0FDUDtRQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzlGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUNoQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1NBQzVHO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUE7SUFDcEYsQ0FBQzs7MkhBdERVLDZCQUE2QjsrR0FBN0IsNkJBQTZCLDZTQ1YxQyxvMEJBa0JBOzRGRFJhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFFRSw0QkFBNEI7OEJBTWxDLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUkscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcblxuZXhwb3J0IHR5cGUgR3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgPSB7IGFjdGl2ZUNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdOyBncm91cEtleTogc3RyaW5nIH1cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHNlbGVjdG9yOiAnb2N4LWNvbHVtbi1ncm91cC1zZWxlY3Rpb24nLFxuICBzdHlsZVVybHM6IFsnLi9jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2VsZWN0ZWRHcm91cEtleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZEdyb3VwS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cEtleSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBzZWxlY3RlZEdyb3VwS2V5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkkLm5leHQodmFsdWUpXG4gIH1cblxuICBjb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVRhYmxlQ29sdW1uW10+KFtdKVxuICBASW5wdXQoKVxuICBnZXQgY29sdW1ucygpOiBEYXRhVGFibGVDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBjb2x1bW5zKHZhbHVlOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuY29sdW1ucyQubmV4dCh2YWx1ZSlcbiAgfVxuICBASW5wdXQoKSBwbGFjZWhvbGRlcktleSA9ICcnXG4gIEBJbnB1dCgpIGRlZmF1bHRHcm91cEtleSA9ICcnXG4gIEBJbnB1dCgpIGN1c3RvbUdyb3VwS2V5ID0gJydcblxuICBAT3V0cHV0KCkgZ3JvdXBTZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8R3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgYWxsR3JvdXBLZXlzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gfCB1bmRlZmluZWRcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFsbEdyb3VwS2V5cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNvbHVtbnMkLCB0aGlzLnNlbGVjdGVkR3JvdXBLZXkkXSkucGlwZShcbiAgICAgIG1hcCgoW2NvbHVtbnMsIHNlbGVjdGVkR3JvdXBLZXldKSA9PlxuICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgLm1hcCgoa2V5cykgPT4ga2V5cy5wcmVkZWZpbmVkR3JvdXBLZXlzIHx8IFtdKVxuICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAuY29uY2F0KFt0aGlzLmRlZmF1bHRHcm91cEtleV0pXG4gICAgICAgICAgLmNvbmNhdChbc2VsZWN0ZWRHcm91cEtleV0pXG4gICAgICAgICAgLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpXG4gICAgICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCAmJiB2YWx1ZSAhPSBudWxsKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNoYW5nZUdyb3VwU2VsZWN0aW9uKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIGlmIChldmVudC52YWx1ZSA9PT0gdGhpcy5jdXN0b21Hcm91cEtleSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLnByZWRlZmluZWRHcm91cEtleXM/LmluY2x1ZGVzKGV2ZW50LnZhbHVlKSlcbiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgYWN0aXZlQ29sdW1ucywgZ3JvdXBLZXk6IGV2ZW50LnZhbHVlIH0pXG4gIH1cblxuICBjbGVhckdyb3VwU2VsZWN0aW9uKCkge1xuICAgIGxldCBhY3RpdmVDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgaWYgKHRoaXMuZGVmYXVsdEdyb3VwS2V5KSB7XG4gICAgICBhY3RpdmVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4ucHJlZGVmaW5lZEdyb3VwS2V5cz8uaW5jbHVkZXModGhpcy5kZWZhdWx0R3JvdXBLZXkpKVxuICAgIH1cbiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgYWN0aXZlQ29sdW1ucywgZ3JvdXBLZXk6IHRoaXMuZGVmYXVsdEdyb3VwS2V5IH0pXG4gIH1cbn1cbiIsIjxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxuICA8cC1kcm9wZG93blxuICAgIGlkPVwiY29sdW1uR3JvdXBTZWxlY3Rpb25Ecm9wZG93blwiXG4gICAgKm5nSWY9XCIoYWxsR3JvdXBLZXlzJCB8IGFzeW5jKT8ubGVuZ3RoXCJcbiAgICAob25DbGVhcik9XCJjbGVhckdyb3VwU2VsZWN0aW9uKClcIlxuICAgIChvbkNoYW5nZSk9XCJjaGFuZ2VHcm91cFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICBbb3B0aW9uc109XCIoYWxsR3JvdXBLZXlzJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyS2V5IHwgdHJhbnNsYXRlXCJcbiAgICBbc2hvd0NsZWFyXT1cInNlbGVjdGVkR3JvdXBLZXkgIT09IGRlZmF1bHRHcm91cEtleVwiXG4gICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEdyb3VwS2V5XCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+IHt7IGl0ZW0gPyAoaXRlbSB8IHRyYW5zbGF0ZSkgOiAnJ319IDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiPiB7eyBpdGVtID8gKGl0ZW0gfCB0cmFuc2xhdGUpIDogJyd9fSA8L25nLXRlbXBsYXRlPlxuICA8L3AtZHJvcGRvd24+XG4gIDxsYWJlbCAqbmdJZj1cIihhbGxHcm91cEtleXMkIHwgYXN5bmMpPy5sZW5ndGhcIiBmb3I9XCJjb2x1bW5Hcm91cFNlbGVjdGlvbkRyb3Bkb3duXCJcbiAgICA+e3sgKFwiT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuRFJPUERPV05fTEFCRUxcIiB8IHRyYW5zbGF0ZSkgfX08L2xhYmVsXG4gID5cbjwvc3Bhbj5cbiJdfQ==
@@ -0,0 +1,108 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ngx-translate/core";
5
+ import * as i2 from "primeng/api";
6
+ import * as i3 from "primeng/button";
7
+ import * as i4 from "primeng/dialog";
8
+ import * as i5 from "primeng/picklist";
9
+ import * as i6 from "primeng/selectbutton";
10
+ import * as i7 from "@angular/forms";
11
+ export class CustomGroupColumnSelectorComponent {
12
+ constructor(translate) {
13
+ this.translate = translate;
14
+ this.columns = [];
15
+ this.displayedColumns = [];
16
+ this.dialogTitle = '';
17
+ this.openButtonTitle = '';
18
+ this.saveButtonLabel = '';
19
+ this.cancelButtonLabel = '';
20
+ this.activeColumnsLabel = '';
21
+ this.inactiveColumnsLabel = '';
22
+ this.frozenActionColumn = false;
23
+ this.actionColumnPosition = 'right';
24
+ this.columnSelectionChanged = new EventEmitter();
25
+ this.actionColumnConfigChanged = new EventEmitter();
26
+ this.hiddenColumnsModel = [];
27
+ this.displayedColumnsModel = [];
28
+ this.frozenActionColumnModel = false;
29
+ this.actionColumnPositionModel = 'right';
30
+ this.visible = false;
31
+ this.alignmentOptions = [
32
+ {
33
+ label: 'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.LEFT',
34
+ value: 'left',
35
+ },
36
+ {
37
+ label: 'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.RIGHT',
38
+ value: 'right',
39
+ },
40
+ ];
41
+ this.frozenOptions = [
42
+ {
43
+ label: 'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.YES',
44
+ value: true,
45
+ },
46
+ {
47
+ label: 'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.NO',
48
+ value: false,
49
+ },
50
+ ];
51
+ }
52
+ onOpenCustomGroupColumnSelectionDialogClick() {
53
+ this.displayedColumnsModel = [...this.displayedColumns];
54
+ this.hiddenColumnsModel = this.columns.filter((column) => !this.displayedColumnsModel.map((c) => c.id).includes(column.id));
55
+ this.frozenActionColumnModel = this.frozenActionColumn;
56
+ this.actionColumnPositionModel = this.actionColumnPosition;
57
+ this.visible = true;
58
+ }
59
+ onSaveClick() {
60
+ this.visible = false;
61
+ const colIdsBefore = this.displayedColumns.map((column) => column.id);
62
+ const colIdsAfter = this.displayedColumnsModel.map((column) => column.id);
63
+ if (!colIdsAfter.every((colId, i) => colId === colIdsBefore[i])) {
64
+ this.columnSelectionChanged.emit({ activeColumns: [...this.displayedColumnsModel] });
65
+ }
66
+ if (this.frozenActionColumn != this.frozenActionColumnModel ||
67
+ this.actionColumnPosition != this.actionColumnPositionModel) {
68
+ this.actionColumnConfigChanged.emit({
69
+ frozenActionColumn: this.frozenActionColumnModel,
70
+ actionColumnPosition: this.actionColumnPositionModel,
71
+ });
72
+ }
73
+ }
74
+ onCancelClick() {
75
+ this.visible = false;
76
+ }
77
+ }
78
+ CustomGroupColumnSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomGroupColumnSelectorComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
79
+ CustomGroupColumnSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CustomGroupColumnSelectorComponent, selector: "ocx-custom-group-column-selector", inputs: { columns: "columns", displayedColumns: "displayedColumns", dialogTitle: "dialogTitle", openButtonTitle: "openButtonTitle", saveButtonLabel: "saveButtonLabel", cancelButtonLabel: "cancelButtonLabel", activeColumnsLabel: "activeColumnsLabel", inactiveColumnsLabel: "inactiveColumnsLabel", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition" }, outputs: { columnSelectionChanged: "columnSelectionChanged", actionColumnConfigChanged: "actionColumnConfigChanged" }, ngImport: i0, template: "<p-button\n id=\"customGroupColumnSelectorButton\"\n type=\"button\"\n (click)=\"onOpenCustomGroupColumnSelectionDialogClick()\"\n [title]=\"openButtonTitle || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.OPEN_BUTTON_DETAIL' | translate)\"\n icon=\"pi pi-cog\"\n styleClass=\"p-button\"\n [ariaLabel]=\"openButtonTitle || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.OPEN_BUTTON_DETAIL' | translate)\"\n></p-button>\n\n<p-dialog header=\"Header\" [(visible)]=\"visible\" [style]=\"{ width: '70%' }\" [modal]=\"true\" [closeAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.CLOSE' | translate)\">\n <ng-template pTemplate=\"header\">\n <span class=\"text-xl font-bold\"\n >{{ dialogTitle || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.DIALOG_TITLE' | translate) }}</span\n >\n </ng-template>\n\n <p-pickList\n [source]=\"displayedColumnsModel\"\n [target]=\"hiddenColumnsModel\"\n [sourceHeader]=\"activeColumnsLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ACTIVE_COLUMNS_LABEL' | translate)\"\n [targetHeader]=\"inactiveColumnsLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.INACTIVE_COLUMNS_LABEL' | translate)\"\n [dragdrop]=\"true\"\n [responsive]=\"false\"\n [sourceStyle]=\"{ height: '300px' }\"\n [targetStyle]=\"{ height: '300px' }\"\n [upButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.UP' | translate)\"\n [topButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.TOP' | translate)\"\n [downButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.DOWN' | translate)\"\n [bottomButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.BOTTOM' | translate)\"\n [rightButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.RIGHT' | translate)\"\n [allRightButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.ALL_RIGHT' | translate)\"\n [leftButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.LEFT' | translate)\"\n [allLeftButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.ALL_LEFT' | translate)\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div>{{ item.nameKey | translate }}</div>\n </ng-template>\n </p-pickList>\n\n <div class=\"pt-4\">\n <p class=\"text-xl font-bold\">{{'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.TITLE' | translate}}</p>\n <div class=\"flex gap-6 px-3\">\n <div>\n <p class=\"mb-1\">{{'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.FREEZE' | translate}}</p>\n <p-selectButton\n [options]=\"frozenOptions\"\n [(ngModel)]=\"frozenActionColumnModel\"\n optionLabel=\"label\"\n optionValue=\"value\"\n id=\"frozenActionColumn\"\n name=\"frozen-action-column-select-button\"\n >\n <ng-template let-option pTemplate> {{option.label | translate}} </ng-template>\n </p-selectButton>\n </div>\n <div>\n <p class=\"mb-1\">{{'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.POSITION' | translate}}</p>\n <p-selectButton\n [options]=\"alignmentOptions\"\n [(ngModel)]=\"actionColumnPositionModel\"\n optionLabel=\"label\"\n optionValue=\"value\"\n id=\"actionColumnPosition\"\n class=\"mt-2\"\n name=\"action-column-position-select-button\"\n >\n <ng-template let-option pTemplate> {{option.label | translate}} </ng-template>\n </p-selectButton>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n id=\"cancelButton\"\n (onClick)=\"onCancelClick()\"\n [label]=\"cancelButtonLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CANCEL_BUTTON_LABEL' | translate)\"\n styleClass=\"p-button\"\n ></p-button>\n <p-button\n id=\"saveButton\"\n (onClick)=\"onSaveClick()\"\n [label]=\"saveButtonLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.SAVE_BUTTON_LABEL' | translate)\"\n ></p-button>\n </ng-template>\n</p-dialog>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}::ng-deep .p-picklist-item.cdk-drag-preview{z-index:2000!important}.p-button{height:100%}\n"], dependencies: [{ kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i4.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i5.PickList, selector: "p-pickList", inputs: ["source", "target", "sourceHeader", "rightButtonAriaLabel", "leftButtonAriaLabel", "allRightButtonAriaLabel", "allLeftButtonAriaLabel", "upButtonAriaLabel", "downButtonAriaLabel", "topButtonAriaLabel", "bottomButtonAriaLabel", "targetHeader", "responsive", "filterBy", "filterLocale", "trackBy", "sourceTrackBy", "targetTrackBy", "showSourceFilter", "showTargetFilter", "metaKeySelection", "dragdrop", "style", "styleClass", "sourceStyle", "targetStyle", "showSourceControls", "showTargetControls", "sourceFilterPlaceholder", "targetFilterPlaceholder", "disabled", "ariaSourceFilterLabel", "ariaTargetFilterLabel", "filterMatchMode", "breakpoint", "stripedRows", "keepSelection"], outputs: ["onMoveToSource", "onMoveAllToSource", "onMoveAllToTarget", "onMoveToTarget", "onSourceReorder", "onTargetReorder", "onSourceSelect", "onTargetSelect", "onSourceFilter", "onTargetFilter"] }, { kind: "component", type: i6.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomGroupColumnSelectorComponent, decorators: [{
81
+ type: Component,
82
+ args: [{ selector: 'ocx-custom-group-column-selector', template: "<p-button\n id=\"customGroupColumnSelectorButton\"\n type=\"button\"\n (click)=\"onOpenCustomGroupColumnSelectionDialogClick()\"\n [title]=\"openButtonTitle || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.OPEN_BUTTON_DETAIL' | translate)\"\n icon=\"pi pi-cog\"\n styleClass=\"p-button\"\n [ariaLabel]=\"openButtonTitle || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.OPEN_BUTTON_DETAIL' | translate)\"\n></p-button>\n\n<p-dialog header=\"Header\" [(visible)]=\"visible\" [style]=\"{ width: '70%' }\" [modal]=\"true\" [closeAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.CLOSE' | translate)\">\n <ng-template pTemplate=\"header\">\n <span class=\"text-xl font-bold\"\n >{{ dialogTitle || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.DIALOG_TITLE' | translate) }}</span\n >\n </ng-template>\n\n <p-pickList\n [source]=\"displayedColumnsModel\"\n [target]=\"hiddenColumnsModel\"\n [sourceHeader]=\"activeColumnsLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ACTIVE_COLUMNS_LABEL' | translate)\"\n [targetHeader]=\"inactiveColumnsLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.INACTIVE_COLUMNS_LABEL' | translate)\"\n [dragdrop]=\"true\"\n [responsive]=\"false\"\n [sourceStyle]=\"{ height: '300px' }\"\n [targetStyle]=\"{ height: '300px' }\"\n [upButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.UP' | translate)\"\n [topButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.TOP' | translate)\"\n [downButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.DOWN' | translate)\"\n [bottomButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.BOTTOM' | translate)\"\n [rightButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.RIGHT' | translate)\"\n [allRightButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.ALL_RIGHT' | translate)\"\n [leftButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.LEFT' | translate)\"\n [allLeftButtonAriaLabel]=\"('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.ARIA_LABELS.ALL_LEFT' | translate)\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div>{{ item.nameKey | translate }}</div>\n </ng-template>\n </p-pickList>\n\n <div class=\"pt-4\">\n <p class=\"text-xl font-bold\">{{'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.TITLE' | translate}}</p>\n <div class=\"flex gap-6 px-3\">\n <div>\n <p class=\"mb-1\">{{'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.FREEZE' | translate}}</p>\n <p-selectButton\n [options]=\"frozenOptions\"\n [(ngModel)]=\"frozenActionColumnModel\"\n optionLabel=\"label\"\n optionValue=\"value\"\n id=\"frozenActionColumn\"\n name=\"frozen-action-column-select-button\"\n >\n <ng-template let-option pTemplate> {{option.label | translate}} </ng-template>\n </p-selectButton>\n </div>\n <div>\n <p class=\"mb-1\">{{'OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CONFIGURE_ACTION_COLUMN.POSITION' | translate}}</p>\n <p-selectButton\n [options]=\"alignmentOptions\"\n [(ngModel)]=\"actionColumnPositionModel\"\n optionLabel=\"label\"\n optionValue=\"value\"\n id=\"actionColumnPosition\"\n class=\"mt-2\"\n name=\"action-column-position-select-button\"\n >\n <ng-template let-option pTemplate> {{option.label | translate}} </ng-template>\n </p-selectButton>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n id=\"cancelButton\"\n (onClick)=\"onCancelClick()\"\n [label]=\"cancelButtonLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.CANCEL_BUTTON_LABEL' | translate)\"\n styleClass=\"p-button\"\n ></p-button>\n <p-button\n id=\"saveButton\"\n (onClick)=\"onSaveClick()\"\n [label]=\"saveButtonLabel || ('OCX_CUSTOM_GROUP_COLUMN_SELECTOR.SAVE_BUTTON_LABEL' | translate)\"\n ></p-button>\n </ng-template>\n</p-dialog>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}::ng-deep .p-picklist-item.cdk-drag-preview{z-index:2000!important}.p-button{height:100%}\n"] }]
83
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { columns: [{
84
+ type: Input
85
+ }], displayedColumns: [{
86
+ type: Input
87
+ }], dialogTitle: [{
88
+ type: Input
89
+ }], openButtonTitle: [{
90
+ type: Input
91
+ }], saveButtonLabel: [{
92
+ type: Input
93
+ }], cancelButtonLabel: [{
94
+ type: Input
95
+ }], activeColumnsLabel: [{
96
+ type: Input
97
+ }], inactiveColumnsLabel: [{
98
+ type: Input
99
+ }], frozenActionColumn: [{
100
+ type: Input
101
+ }], actionColumnPosition: [{
102
+ type: Input
103
+ }], columnSelectionChanged: [{
104
+ type: Output
105
+ }], actionColumnConfigChanged: [{
106
+ type: Output
107
+ }] } });
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IvY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IvY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7Ozs7Ozs7QUFjdEQsTUFBTSxPQUFPLGtDQUFrQztJQTBDN0MsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUF6Q3RDLFlBQU8sR0FBc0IsRUFBRSxDQUFBO1FBQy9CLHFCQUFnQixHQUFzQixFQUFFLENBQUE7UUFDeEMsZ0JBQVcsR0FBRyxFQUFFLENBQUE7UUFDaEIsb0JBQWUsR0FBRyxFQUFFLENBQUE7UUFDcEIsb0JBQWUsR0FBRyxFQUFFLENBQUE7UUFDcEIsc0JBQWlCLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUN2Qix5QkFBb0IsR0FBRyxFQUFFLENBQUE7UUFDekIsdUJBQWtCLEdBQUcsS0FBSyxDQUFBO1FBQzFCLHlCQUFvQixHQUFxQixPQUFPLENBQUE7UUFFL0MsMkJBQXNCLEdBQThDLElBQUksWUFBWSxFQUFFLENB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Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcblxuZXhwb3J0IHR5cGUgQ29sdW1uU2VsZWN0aW9uQ2hhbmdlZEV2ZW50ID0geyBhY3RpdmVDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSB9XG5leHBvcnQgdHlwZSBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQgPSB7XG4gIGZyb3plbkFjdGlvbkNvbHVtbjogYm9vbGVhblxuICBhY3Rpb25Db2x1bW5Qb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0J1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50IHtcbiAgQElucHV0KCkgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10gPSBbXVxuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdXG4gIEBJbnB1dCgpIGRpYWxvZ1RpdGxlID0gJydcbiAgQElucHV0KCkgb3BlbkJ1dHRvblRpdGxlID0gJydcbiAgQElucHV0KCkgc2F2ZUJ1dHRvbkxhYmVsID0gJydcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uTGFiZWwgPSAnJ1xuICBASW5wdXQoKSBhY3RpdmVDb2x1bW5zTGFiZWwgPSAnJ1xuICBASW5wdXQoKSBpbmFjdGl2ZUNvbHVtbnNMYWJlbCA9ICcnXG4gIEBJbnB1dCgpIGZyb3plbkFjdGlvbkNvbHVtbiA9IGZhbHNlXG4gIEBJbnB1dCgpIGFjdGlvbkNvbHVtblBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0J1xuXG4gIEBPdXRwdXQoKSBjb2x1bW5TZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29sdW1uU2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgYWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFjdGlvbkNvbHVtbkNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBoaWRkZW5Db2x1bW5zTW9kZWw6IERhdGFUYWJsZUNvbHVtbltdID0gW11cbiAgZGlzcGxheWVkQ29sdW1uc01vZGVsOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdXG4gIGZyb3plbkFjdGlvbkNvbHVtbk1vZGVsID0gZmFsc2VcbiAgYWN0aW9uQ29sdW1uUG9zaXRpb25Nb2RlbDogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCdcbiAgdmlzaWJsZSA9IGZhbHNlXG4gIGFsaWdubWVudE9wdGlvbnMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5DT05GSUdVUkVfQUNUSU9OX0NPTFVNTi5MRUZUJyxcbiAgICAgIHZhbHVlOiAnbGVmdCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ09DWF9DVVNUT01fR1JPVVBfQ09MVU1OX1NFTEVDVE9SLkNPTkZJR1VSRV9BQ1RJT05fQ09MVU1OLlJJR0hUJyxcbiAgICAgIHZhbHVlOiAncmlnaHQnLFxuICAgIH0sXG4gIF1cblxuICBmcm96ZW5PcHRpb25zID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQ09ORklHVVJFX0FDVElPTl9DT0xVTU4uWUVTJyxcbiAgICAgIHZhbHVlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5DT05GSUdVUkVfQUNUSU9OX0NPTFVNTi5OTycsXG4gICAgICB2YWx1ZTogZmFsc2UsXG4gICAgfSxcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIG9uT3BlbkN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0aW9uRGlhbG9nQ2xpY2soKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zTW9kZWwgPSBbLi4udGhpcy5kaXNwbGF5ZWRDb2x1bW5zXVxuICAgIHRoaXMuaGlkZGVuQ29sdW1uc01vZGVsID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2x1bW4pID0+ICF0aGlzLmRpc3BsYXllZENvbHVtbnNNb2RlbC5tYXAoKGMpID0+IGMuaWQpLmluY2x1ZGVzKGNvbHVtbi5pZClcbiAgICApXG4gICAgdGhpcy5mcm96ZW5BY3Rpb25Db2x1bW5Nb2RlbCA9IHRoaXMuZnJvemVuQWN0aW9uQ29sdW1uXG4gICAgdGhpcy5hY3Rpb25Db2x1bW5Qb3NpdGlvbk1vZGVsID0gdGhpcy5hY3Rpb25Db2x1bW5Qb3NpdGlvblxuICAgIHRoaXMudmlzaWJsZSA9IHRydWVcbiAgfVxuXG4gIG9uU2F2ZUNsaWNrKCkge1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlXG4gICAgY29uc3QgY29sSWRzQmVmb3JlID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpXG4gICAgY29uc3QgY29sSWRzQWZ0ZXIgPSB0aGlzLmRpc3BsYXllZENvbHVtbnNNb2RlbC5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKVxuXG4gICAgaWYgKCFjb2xJZHNBZnRlci5ldmVyeSgoY29sSWQsIGkpID0+IGNvbElkID09PSBjb2xJZHNCZWZvcmVbaV0pKSB7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7IGFjdGl2ZUNvbHVtbnM6IFsuLi50aGlzLmRpc3BsYXllZENvbHVtbnNNb2RlbF0gfSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmZyb3plbkFjdGlvbkNvbHVtbiAhPSB0aGlzLmZyb3plbkFjdGlvbkNvbHVtbk1vZGVsIHx8XG4gICAgICB0aGlzLmFjdGlvbkNvbHVtblBvc2l0aW9uICE9IHRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb25Nb2RlbFxuICAgICkge1xuICAgICAgdGhpcy5hY3Rpb25Db2x1bW5Db25maWdDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmcm96ZW5BY3Rpb25Db2x1bW46IHRoaXMuZnJvemVuQWN0aW9uQ29sdW1uTW9kZWwsXG4gICAgICAgIGFjdGlvbkNvbHVtblBvc2l0aW9uOiB0aGlzLmFjdGlvbkNvbHVtblBvc2l0aW9uTW9kZWwsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsQ2xpY2soKSB7XG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2VcbiAgfVxufVxuIiwiPHAtYnV0dG9uXG4gIGlkPVwiY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckJ1dHRvblwiXG4gIHR5cGU9XCJidXR0b25cIlxuICAoY2xpY2spPVwib25PcGVuQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3Rpb25EaWFsb2dDbGljaygpXCJcbiAgW3RpdGxlXT1cIm9wZW5CdXR0b25UaXRsZSB8fCAoJ09DWF9DVVNUT01fR1JPVVBfQ09MVU1OX1NFTEVDVE9SLk9QRU5fQlVUVE9OX0RFVEFJTCcgfCB0cmFuc2xhdGUpXCJcbiAgaWNvbj1cInBpIHBpLWNvZ1wiXG4gIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvblwiXG4gIFthcmlhTGFiZWxdPVwib3BlbkJ1dHRvblRpdGxlIHx8ICgnT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuT1BFTl9CVVRUT05fREVUQUlMJyB8IHRyYW5zbGF0ZSlcIlxuPjwvcC1idXR0b24+XG5cbjxwLWRpYWxvZyBoZWFkZXI9XCJIZWFkZXJcIiBbKHZpc2libGUpXT1cInZpc2libGVcIiBbc3R5bGVdPVwieyB3aWR0aDogJzcwJScgfVwiIFttb2RhbF09XCJ0cnVlXCIgW2Nsb3NlQXJpYUxhYmVsXT1cIignT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQVJJQV9MQUJFTFMuQ0xPU0UnIHwgdHJhbnNsYXRlKVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtYm9sZFwiXG4gICAgICA+e3sgZGlhbG9nVGl0bGUgfHwgKCdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5ESUFMT0dfVElUTEUnIHwgdHJhbnNsYXRlKSB9fTwvc3BhblxuICAgID5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8cC1waWNrTGlzdFxuICAgIFtzb3VyY2VdPVwiZGlzcGxheWVkQ29sdW1uc01vZGVsXCJcbiAgICBbdGFyZ2V0XT1cImhpZGRlbkNvbHVtbnNNb2RlbFwiXG4gICAgW3NvdXJjZUhlYWRlcl09XCJhY3RpdmVDb2x1bW5zTGFiZWwgfHwgKCdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5BQ1RJVkVfQ09MVU1OU19MQUJFTCcgfCB0cmFuc2xhdGUpXCJcbiAgICBbdGFyZ2V0SGVhZGVyXT1cImluYWN0aXZlQ29sdW1uc0xhYmVsIHx8ICgnT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuSU5BQ1RJVkVfQ09MVU1OU19MQUJFTCcgfCB0cmFuc2xhdGUpXCJcbiAgICBbZHJhZ2Ryb3BdPVwidHJ1ZVwiXG4gICAgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIlxuICAgIFtzb3VyY2VTdHlsZV09XCJ7IGhlaWdodDogJzMwMHB4JyB9XCJcbiAgICBbdGFyZ2V0U3R5bGVdPVwieyBoZWlnaHQ6ICczMDBweCcgfVwiXG4gICAgW3VwQnV0dG9uQXJpYUxhYmVsXT1cIignT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQVJJQV9MQUJFTFMuVVAnIHwgdHJhbnNsYXRlKVwiXG4gICAgW3RvcEJ1dHRvbkFyaWFMYWJlbF09XCIoJ09DWF9DVVNUT01fR1JPVVBfQ09MVU1OX1NFTEVDVE9SLkFSSUFfTEFCRUxTLlRPUCcgfCB0cmFuc2xhdGUpXCJcbiAgICBbZG93bkJ1dHRvbkFyaWFMYWJlbF09XCIoJ09DWF9DVVNUT01fR1JPVVBfQ09MVU1OX1NFTEVDVE9SLkFSSUFfTEFCRUxTLkRPV04nIHwgdHJhbnNsYXRlKVwiXG4gICAgW2JvdHRvbUJ1dHRvbkFyaWFMYWJlbF09XCIoJ09DWF9DVVNUT01fR1JPVVBfQ09MVU1OX1NFTEVDVE9SLkFSSUFfTEFCRUxTLkJPVFRPTScgfCB0cmFuc2xhdGUpXCJcbiAgICBbcmlnaHRCdXR0b25BcmlhTGFiZWxdPVwiKCdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5BUklBX0xBQkVMUy5SSUdIVCcgfCB0cmFuc2xhdGUpXCJcbiAgICBbYWxsUmlnaHRCdXR0b25BcmlhTGFiZWxdPVwiKCdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5BUklBX0xBQkVMUy5BTExfUklHSFQnIHwgdHJhbnNsYXRlKVwiXG4gICAgW2xlZnRCdXR0b25BcmlhTGFiZWxdPVwiKCdPQ1hfQ1VTVE9NX0dST1VQX0NPTFVNTl9TRUxFQ1RPUi5BUklBX0xBQkVMUy5MRUZUJyB8IHRyYW5zbGF0ZSlcIlxuICAgIFthbGxMZWZ0QnV0dG9uQXJpYUxhYmVsXT1cIignT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQVJJQV9MQUJFTFMuQUxMX0xFRlQnIHwgdHJhbnNsYXRlKVwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgPGRpdj57eyBpdGVtLm5hbWVLZXkgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtcGlja0xpc3Q+XG5cbiAgPGRpdiBjbGFzcz1cInB0LTRcIj5cbiAgICA8cCBjbGFzcz1cInRleHQteGwgZm9udC1ib2xkXCI+e3snT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQ09ORklHVVJFX0FDVElPTl9DT0xVTU4uVElUTEUnIHwgdHJhbnNsYXRlfX08L3A+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTYgcHgtM1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+e3snT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQ09ORklHVVJFX0FDVElPTl9DT0xVTU4uRlJFRVpFJyB8IHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICA8cC1zZWxlY3RCdXR0b25cbiAgICAgICAgICBbb3B0aW9uc109XCJmcm96ZW5PcHRpb25zXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImZyb3plbkFjdGlvbkNvbHVtbk1vZGVsXCJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICBpZD1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgICAgICAgbmFtZT1cImZyb3plbi1hY3Rpb24tY29sdW1uLXNlbGVjdC1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb24gcFRlbXBsYXRlPiB7e29wdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZX19IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC1zZWxlY3RCdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7J09DWF9DVVNUT01fR1JPVVBfQ09MVU1OX1NFTEVDVE9SLkNPTkZJR1VSRV9BQ1RJT05fQ09MVU1OLlBPU0lUSU9OJyB8IHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICA8cC1zZWxlY3RCdXR0b25cbiAgICAgICAgICBbb3B0aW9uc109XCJhbGlnbm1lbnRPcHRpb25zXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImFjdGlvbkNvbHVtblBvc2l0aW9uTW9kZWxcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgIGlkPVwiYWN0aW9uQ29sdW1uUG9zaXRpb25cIlxuICAgICAgICAgIGNsYXNzPVwibXQtMlwiXG4gICAgICAgICAgbmFtZT1cImFjdGlvbi1jb2x1bW4tcG9zaXRpb24tc2VsZWN0LWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbiBwVGVtcGxhdGU+IHt7b3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlfX0gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLXNlbGVjdEJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPHAtYnV0dG9uXG4gICAgICBpZD1cImNhbmNlbEJ1dHRvblwiXG4gICAgICAob25DbGljayk9XCJvbkNhbmNlbENsaWNrKClcIlxuICAgICAgW2xhYmVsXT1cImNhbmNlbEJ1dHRvbkxhYmVsIHx8ICgnT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuQ0FOQ0VMX0JVVFRPTl9MQUJFTCcgfCB0cmFuc2xhdGUpXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvblwiXG4gICAgPjwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uXG4gICAgICBpZD1cInNhdmVCdXR0b25cIlxuICAgICAgKG9uQ2xpY2spPVwib25TYXZlQ2xpY2soKVwiXG4gICAgICBbbGFiZWxdPVwic2F2ZUJ1dHRvbkxhYmVsIHx8ICgnT0NYX0NVU1RPTV9HUk9VUF9DT0xVTU5fU0VMRUNUT1IuU0FWRV9CVVRUT05fTEFCRUwnIHwgdHJhbnNsYXRlKVwiXG4gICAgPjwvcC1idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuIl19
@@ -0,0 +1,45 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { PrimeIcons } from 'primeng/api';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "primeng/selectbutton";
6
+ import * as i3 from "@angular/forms";
7
+ import * as i4 from "@ngx-translate/core";
8
+ const ALL_VIEW_LAYOUTS = [
9
+ { icon: PrimeIcons.LIST, layout: 'list', titleKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.LIST' },
10
+ { icon: PrimeIcons.TH_LARGE, layout: 'grid', titleKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.GRID' },
11
+ { icon: PrimeIcons.TABLE, layout: 'table', titleKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.TABLE' },
12
+ ];
13
+ export class DataLayoutSelectionComponent {
14
+ constructor() {
15
+ this.supportedViewLayouts = [];
16
+ this.dataViewLayoutChange = new EventEmitter();
17
+ this.viewingLayouts = [];
18
+ }
19
+ set layout(value) {
20
+ this.selectedViewLayout = this.viewingLayouts.find((v) => v.layout === value);
21
+ }
22
+ get layout() {
23
+ return this.selectedViewLayout?.layout || 'table';
24
+ }
25
+ ngOnInit() {
26
+ this.viewingLayouts = ALL_VIEW_LAYOUTS.filter((vl) => this.supportedViewLayouts.includes(vl.layout));
27
+ this.layout = 'table';
28
+ }
29
+ onDataViewLayoutChange(event) {
30
+ this.dataViewLayoutChange.emit(event.layout);
31
+ }
32
+ }
33
+ DataLayoutSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DataLayoutSelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
+ DataLayoutSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: { supportedViewLayouts: "supportedViewLayouts", layout: "layout" }, outputs: { dataViewLayoutChange: "dataViewLayoutChange" }, ngImport: i0, template: "<div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <p-selectButton\n *ngIf=\"viewingLayouts.length > 1\"\n [options]=\"viewingLayouts\"\n [(ngModel)]=\"selectedViewLayout\"\n optionLabel=\"icon\"\n (onChange)=\"onDataViewLayoutChange($event.value)\"\n >\n <ng-template let-item>\n <i [class]=\"item.icon\" [title]=\"item.title || (item.titleKey | translate)\"></i>\n </ng-template>\n </p-selectButton>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DataLayoutSelectionComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'ocx-data-layout-selection', template: "<div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <p-selectButton\n *ngIf=\"viewingLayouts.length > 1\"\n [options]=\"viewingLayouts\"\n [(ngModel)]=\"selectedViewLayout\"\n optionLabel=\"icon\"\n (onChange)=\"onDataViewLayoutChange($event.value)\"\n >\n <ng-template let-item>\n <i [class]=\"item.icon\" [title]=\"item.title || (item.titleKey | translate)\"></i>\n </ng-template>\n </p-selectButton>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"] }]
38
+ }], propDecorators: { supportedViewLayouts: [{
39
+ type: Input
40
+ }], layout: [{
41
+ type: Input
42
+ }], dataViewLayoutChange: [{
43
+ type: Output
44
+ }] } });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sYXlvdXQtc2VsZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1sYXlvdXQtc2VsZWN0aW9uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBOzs7Ozs7QUFVeEMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDekMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSx1Q0FBdUMsRUFBRTtJQUM1RixFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLHVDQUF1QyxFQUFFO0lBQ2hHLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsd0NBQXdDLEVBQUU7Q0FDaEcsQ0FBQTtBQU9ELE1BQU0sT0FBTyw0QkFBNEI7SUFMekM7UUFNVyx5QkFBb0IsR0FBa0IsRUFBRSxDQUFBO1FBU3ZDLHlCQUFvQixHQUE0QyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBRTVGLG1CQUFjLEdBQXFCLEVBQUUsQ0FBQTtLQVd0QztJQXJCQyxJQUNJLE1BQU0sQ0FBQyxLQUFnQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUE7SUFDL0UsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUE7SUFDbkQsQ0FBQztJQU9ELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNwRyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBNkQ7UUFDbEYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUMsQ0FBQzs7MEhBdEJVLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLHdNQ3RCekMsOGRBYUE7NEZEU2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQjs4QkFLNUIsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVGLE1BQU07c0JBRFQsS0FBSztnQkFRSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFByaW1lSWNvbnMgfSBmcm9tICdwcmltZW5nL2FwaSdcbmltcG9ydCB7IFByaW1lSWNvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3ByaW1laWNvbi51dGlscydcblxuaW50ZXJmYWNlIFZpZXdpbmdMYXlvdXRzIHtcbiAgaWNvbjogUHJpbWVJY29uXG4gIGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJ1xuICB0aXRsZT86IHN0cmluZ1xuICB0aXRsZUtleTogc3RyaW5nXG59XG5cbmNvbnN0IEFMTF9WSUVXX0xBWU9VVFM6IFZpZXdpbmdMYXlvdXRzW10gPSBbXG4gIHsgaWNvbjogUHJpbWVJY29ucy5MSVNULCBsYXlvdXQ6ICdsaXN0JywgdGl0bGVLZXk6ICdPQ1hfREFUQV9MQVlPVVRfU0VMRUNUSU9OLkxBWU9VVC5MSVNUJyB9LFxuICB7IGljb246IFByaW1lSWNvbnMuVEhfTEFSR0UsIGxheW91dDogJ2dyaWQnLCB0aXRsZUtleTogJ09DWF9EQVRBX0xBWU9VVF9TRUxFQ1RJT04uTEFZT1VULkdSSUQnIH0sXG4gIHsgaWNvbjogUHJpbWVJY29ucy5UQUJMRSwgbGF5b3V0OiAndGFibGUnLCB0aXRsZUtleTogJ09DWF9EQVRBX0xBWU9VVF9TRUxFQ1RJT04uTEFZT1VULlRBQkxFJyB9LFxuXVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtZGF0YS1sYXlvdXQtc2VsZWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTGF5b3V0U2VsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc3VwcG9ydGVkVmlld0xheW91dHM6IEFycmF5PHN0cmluZz4gPSBbXVxuICBASW5wdXQoKVxuICBzZXQgbGF5b3V0KHZhbHVlOiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXdMYXlvdXQgPSB0aGlzLnZpZXdpbmdMYXlvdXRzLmZpbmQoKHYpID0+IHYubGF5b3V0ID09PSB2YWx1ZSlcbiAgfVxuICBnZXQgbGF5b3V0KCk6ICdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZScge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmlld0xheW91dD8ubGF5b3V0IHx8ICd0YWJsZSdcbiAgfVxuXG4gIEBPdXRwdXQoKSBkYXRhVmlld0xheW91dENoYW5nZTogRXZlbnRFbWl0dGVyPCdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZSc+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgdmlld2luZ0xheW91dHM6IFZpZXdpbmdMYXlvdXRzW10gPSBbXVxuICBzZWxlY3RlZFZpZXdMYXlvdXQ6IFZpZXdpbmdMYXlvdXRzIHwgdW5kZWZpbmVkXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3aW5nTGF5b3V0cyA9IEFMTF9WSUVXX0xBWU9VVFMuZmlsdGVyKCh2bCkgPT4gdGhpcy5zdXBwb3J0ZWRWaWV3TGF5b3V0cy5pbmNsdWRlcyh2bC5sYXlvdXQpKVxuICAgIHRoaXMubGF5b3V0ID0gJ3RhYmxlJ1xuICB9XG5cbiAgb25EYXRhVmlld0xheW91dENoYW5nZShldmVudDogeyBpY29uOiBQcmltZUljb247IGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJyB9KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhVmlld0xheW91dENoYW5nZS5lbWl0KGV2ZW50LmxheW91dClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweS0xIGdhcC0yXCI+XG4gIDxwLXNlbGVjdEJ1dHRvblxuICAgICpuZ0lmPVwidmlld2luZ0xheW91dHMubGVuZ3RoID4gMVwiXG4gICAgW29wdGlvbnNdPVwidmlld2luZ0xheW91dHNcIlxuICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWV3TGF5b3V0XCJcbiAgICBvcHRpb25MYWJlbD1cImljb25cIlxuICAgIChvbkNoYW5nZSk9XCJvbkRhdGFWaWV3TGF5b3V0Q2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPlxuICAgICAgPGkgW2NsYXNzXT1cIml0ZW0uaWNvblwiIFt0aXRsZV09XCJpdGVtLnRpdGxlIHx8IChpdGVtLnRpdGxlS2V5IHwgdHJhbnNsYXRlKVwiPjwvaT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3Atc2VsZWN0QnV0dG9uPlxuPC9kaXY+XG4iXX0=