@energycap/components 0.44.8 → 0.44.9-Angular19Upgrade.20260217-1620

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 (145) hide show
  1. package/fesm2022/energycap-components.mjs +379 -354
  2. package/fesm2022/energycap-components.mjs.map +1 -1
  3. package/lib/controls/button/copy-button-base.directive.d.ts +1 -1
  4. package/lib/controls/date-input/date-input.component.d.ts +1 -1
  5. package/lib/controls/form-control-base.d.ts +1 -1
  6. package/lib/core/date-time-helper.d.ts +2 -2
  7. package/lib/display/hierarchy/hierarchy-base.d.ts +1 -1
  8. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +1 -1
  9. package/lib/display/resizable/resizable-base.d.ts +1 -1
  10. package/lib/shared/display/pipes/date-display.pipe.d.ts +1 -1
  11. package/lib/shared/page/page-base/page-base.component.d.ts +1 -1
  12. package/lib/shared/testing/public-mocks.spec.d.ts +1 -1
  13. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +1 -1
  14. package/package.json +1 -3
  15. package/schematics/utilities/typescript.js +3 -4
  16. package/schematics/utilities/typescript.js.map +1 -1
  17. package/schematics/utilities/workspace.d.ts +0 -8
  18. package/schematics/utilities/workspace.js +48 -71
  19. package/schematics/utilities/workspace.js.map +1 -1
  20. package/esm2022/energycap-components.mjs +0 -5
  21. package/esm2022/lib/components.module.mjs +0 -425
  22. package/esm2022/lib/controls/banner/banner.component.mjs +0 -112
  23. package/esm2022/lib/controls/button/button.component.mjs +0 -114
  24. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  25. package/esm2022/lib/controls/button/copy-button.directive.mjs +0 -28
  26. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  27. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -91
  28. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -251
  29. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -2
  30. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  31. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +0 -38
  32. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  33. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  34. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  35. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  36. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  37. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  38. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  39. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  40. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  41. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -466
  42. package/esm2022/lib/controls/date-input/date-input.types.mjs +0 -44
  43. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  44. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  45. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -110
  46. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  47. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  48. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  49. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +0 -31
  50. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  51. package/esm2022/lib/controls/link-button/link-button.component.mjs +0 -11
  52. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  53. package/esm2022/lib/controls/navigation/link-item.mjs +0 -2
  54. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  55. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  56. package/esm2022/lib/controls/navigation/nav-item.mjs +0 -2
  57. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  58. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  59. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +0 -3
  60. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  61. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  62. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  63. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  64. package/esm2022/lib/core/cache.service.mjs +0 -105
  65. package/esm2022/lib/core/custom-validators.mjs +0 -29
  66. package/esm2022/lib/core/date-time-helper.mjs +0 -228
  67. package/esm2022/lib/core/error.service.mjs +0 -61
  68. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  69. package/esm2022/lib/core/scroll.service.mjs +0 -89
  70. package/esm2022/lib/core/telemetry-tracker.service.mjs +0 -16
  71. package/esm2022/lib/core/telemetry.service.mjs +0 -38
  72. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  73. package/esm2022/lib/core/validation-patterns.mjs +0 -31
  74. package/esm2022/lib/core/window.service.mjs +0 -186
  75. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -49
  76. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  77. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  78. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  79. package/esm2022/lib/display/dialog/dialog-content.mjs +0 -2
  80. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  81. package/esm2022/lib/display/dialog/dialog-types.mjs +0 -77
  82. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -287
  83. package/esm2022/lib/display/dialog/dialog.service.mjs +0 -71
  84. package/esm2022/lib/display/help/help-types.mjs +0 -2
  85. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  86. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +0 -54
  87. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -65
  88. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -83
  89. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  90. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  91. package/esm2022/lib/display/resizable/resizable.component.mjs +0 -57
  92. package/esm2022/lib/display/spinner/spinner.component.mjs +0 -12
  93. package/esm2022/lib/display/splash/splash.component.mjs +0 -61
  94. package/esm2022/lib/display/splash/splash.service.mjs +0 -35
  95. package/esm2022/lib/display/table/resizable-column.component.mjs +0 -20
  96. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  97. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -344
  98. package/esm2022/lib/display/table/table-detail-row.component.mjs +0 -28
  99. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  100. package/esm2022/lib/display/table/table-master-header-row.component.mjs +0 -14
  101. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  102. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  103. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  104. package/esm2022/lib/display/table/table.component.mjs +0 -257
  105. package/esm2022/lib/display/tags/tag.mjs +0 -18
  106. package/esm2022/lib/display/tags/tags.component.mjs +0 -82
  107. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  108. package/esm2022/lib/display/toast/toast-types.mjs +0 -8
  109. package/esm2022/lib/display/toast/toast.service.mjs +0 -35
  110. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  111. package/esm2022/lib/display/tooltip/tooltip.component.mjs +0 -28
  112. package/esm2022/lib/display/tooltip/tooltip.service.mjs +0 -78
  113. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  114. package/esm2022/lib/display/tree/tree.component.mjs +0 -139
  115. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  116. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  117. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  118. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -103
  119. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  120. package/esm2022/lib/shared/display/pipes/date-display-2.pipe.mjs +0 -39
  121. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -51
  122. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  123. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  124. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  125. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  126. package/esm2022/lib/shared/display.mjs +0 -6
  127. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  128. package/esm2022/lib/shared/json-helper.mjs +0 -19
  129. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  130. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  131. package/esm2022/lib/shared/page/page-statuses.mjs +0 -23
  132. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +0 -23
  133. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  134. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +0 -17
  135. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +0 -17
  136. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +0 -38
  137. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  138. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +0 -148
  139. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +0 -40
  140. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +0 -57
  141. package/esm2022/lib/shared/user-preference.service.mjs +0 -17
  142. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  143. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +0 -68
  144. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +0 -18
  145. package/esm2022/public-api.mjs +0 -115
@@ -1,344 +0,0 @@
1
- import { Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core';
2
- import { EMPTY, merge, Subject } from 'rxjs';
3
- import { catchError, debounceTime, map, pluck, skipUntil, switchMap, takeUntil, tap } from 'rxjs/operators';
4
- import { Overlay } from '../view-overlay/view-overlay.component';
5
- import { ResizableColumnComponent } from './resizable-column.component';
6
- import { TablePaginationComponent } from './table-pagination.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../core/error.service";
9
- import * as i2 from "@ngx-translate/core";
10
- import * as i3 from "../../shared/display/pipes/row-count.pipe";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "../../controls/textbox/textbox.component";
13
- import * as i6 from "../view-overlay/view-overlay.component";
14
- import * as i7 from "./table.component";
15
- import * as i8 from "./table-pagination.component";
16
- export class SearchableTableComponent {
17
- /** Reference to the searchModel */
18
- get searchModel() {
19
- return this.formModel.controls.searchModel;
20
- }
21
- constructor(errorService, translateService, rowCountPipe) {
22
- this.errorService = errorService;
23
- this.translateService = translateService;
24
- this.rowCountPipe = rowCountPipe;
25
- this.id = '';
26
- this.resizable = false;
27
- this.sortable = false;
28
- this.autofocus = false;
29
- /**Set to a space-separated set of strings that should be added to the ec-table class attribute
30
- * this allows finer control over styling.
31
- */
32
- this.tableClasses = '';
33
- /** Emits when table sort has changed */
34
- this.sortChange = new EventEmitter();
35
- /** Emits when the table page has changed */
36
- this.pageChangeEmitter = new EventEmitter();
37
- /** Placeholder text for the searchbox */
38
- this.searchboxPlaceholder = '';
39
- /**
40
- * Displayed in overlay when no data is returned (without searching).
41
- *
42
- * Defaults to "SearchableTable_Default_NoData_SC"
43
- */
44
- this.noDataMessage = 'SearchableTable_Default_NoData_SC';
45
- /**
46
- * Displayed in overlay when no data is returned (after searching).
47
- * Ensure translation has an interpolation placeholder for "searchText".
48
- *
49
- * Defaults to "SearchableTable_Default_NoMatches_SC"
50
- *
51
- * @example
52
- * // 7 requires single curly braces
53
- * No items found matching <strong>{{searchText}}</strong>
54
- */
55
- this.noSearchResultsMessage = 'SearchableTable_Default_NoMatches_SC';
56
- /** Allow the host component to supply an overlay to control the pending state of the table */
57
- this.status = new Overlay('hasData');
58
- /**
59
- * Sets the underlying table's layout to fixed.
60
- */
61
- this.tableLayoutFixed = false;
62
- /** Emits items returned by the getItems function, along with total count */
63
- this.itemsChange = new EventEmitter();
64
- /** Maximum number of items to show in the table (default: 100) */
65
- this.maxItemCount = 100;
66
- /** Set to true to hide search box (does not hide the other searchable table controls */
67
- this.hideSearchControl = false;
68
- /** Set to true to hide the entire header */
69
- this.hideHeader = false;
70
- /** Type of object in the table. Displayed in footer (default: 'results')*/
71
- this.objectType = 'results';
72
- /** Set to true to hide the table footer */
73
- this.hideFooter = false;
74
- /**
75
- * Set to true to enable paging. If paging is enabled, pageSize must be provided.
76
- * getItems will be passed both a search and a PagingInfo object when called. It must include totalItemsBeforePaging in the TableSearchResults output.
77
- * Here is a simple implementation:
78
- * @example
79
- * getItems(search?: string, pageChangeInfo?: PagingInfo): Observable<TableSearchResults> {
80
- let results: SimpleItem[] = [...this.paginatedTableItems];
81
- //apply search
82
- if(search) {
83
- results = this.paginatedTableItems.filter(i => i.a.toLowerCase().includes(search.toLowerCase()));
84
- }
85
- //get count before applying paging
86
- let countBeforePaging = results.length;
87
- //apply paging
88
- if(pageChangeInfo) {
89
- results = results.slice(pageChangeInfo!.skip, pageChangeInfo!.skip + pageChangeInfo!.pageSize);
90
- }
91
- return of({ items: results, totalItems: results.length, totalItemsBeforePaging: countBeforePaging });
92
- }
93
- */
94
- this.pageable = false;
95
- /**
96
- * Maximum number of page tabs to show
97
- */
98
- this.maxTabs = 10;
99
- /**
100
- * Makes the searchbox readonly if true.
101
- */
102
- this.searchboxReadonly = false;
103
- /** Optional text to add to the results count in the table footer. This text will be added after the count and objectType. */
104
- this.additionalCountText = '';
105
- /** Enables table row selection and row highlighting styles when true */
106
- this.selectable = false;
107
- /** When true, removes the card styles from the table wrapper */
108
- this.removeCard = false;
109
- /** Classes to add to the overlay/card element */
110
- this.overlayClasses = '';
111
- /** When true the overlay and table will not have flex-shrink-max but instead flex-grow */
112
- this.fillParentHeight = false;
113
- /** Passed to the pagination control component. Used to disable the pagination controls */
114
- this.disablePaginationControls = false;
115
- /**
116
- * Text displayed in the footer.
117
- * Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
118
- */
119
- this.tableCaption = this.translateService.instant(this.noDataMessage || 'SearchableTable_Default_NoData_SC');
120
- /** count of results displayed in the table */
121
- this.resultsCount = '';
122
- /** Items returned by the getItems function, along with total count */
123
- this.searchResults = { items: [], totalItems: 0 };
124
- /**
125
- * If passed an input for refresh, triggers reloading items.
126
- * Otherwise, completes immediately (will never trigger reload).
127
- */
128
- this.refreshTrigger = EMPTY;
129
- this.destroyed = new Subject();
130
- this.pageChanged = new Subject();
131
- /** Triggers the initial load of the table */
132
- this.initTable = new Subject();
133
- }
134
- ngOnChanges(changes) {
135
- if (changes.pageSize && !changes.pageSize.firstChange && this.pageable) {
136
- // If the pageSize changes, reset to the first page and refresh.
137
- this.pageInfo = TablePaginationComponent.getPagingInfo(1, this.pageSize);
138
- this.onPageChange(this.pageInfo);
139
- }
140
- }
141
- ngOnInit() {
142
- this.status.setStatus('pending', 'Loading');
143
- this.setUpRefreshTrigger();
144
- // Watch for searchbox/other control changes or refresh requests
145
- const searchOrRefresh = merge(this.formModel.valueChanges.pipe(skipUntil(this.ready), debounceTime(300)), this.refreshTrigger, this.initTable).pipe(tap(() => {
146
- //a change to any form control or a refresh should reset the pageInfo to the first page if the table is pageable.
147
- //(if we didnt reset the pageInfo, we'd have to call getItems with the previous pageInfo, which may not be valid for the new results)
148
- if (this.pageable) {
149
- this.pageInfo = TablePaginationComponent.getPagingInfo(1, this.pageSize);
150
- }
151
- }));
152
- const updateResults = merge(searchOrRefresh, this.pageChanged.pipe(
153
- // Prevent a call to getItems when the pageSize is set during page init and before ready is completed
154
- skipUntil(this.ready)));
155
- // Call getItems and watch for errors
156
- const getData = updateResults.pipe(
157
- // Pluck the searchModel value out of the formModel
158
- pluck('searchModel'),
159
- // Ensure search string is defined
160
- // Trim and lowercase it to aid case-insensitive searching
161
- map((searchString) => {
162
- let search = searchString || '';
163
- return search.trim().toLowerCase();
164
- }),
165
- // Show status overlay
166
- tap(() => this.status.setStatus('pending', 'Loading')),
167
- // Call passed function
168
- switchMap((searchString) =>
169
- //if the table is pageable, pageInfo will be defined.
170
- this.getItems(searchString, this.pageInfo)),
171
- // If passed function fails, show error status
172
- catchError((err, caught) => {
173
- this.status.setStatus('error', this.errorService.parseApiError(err));
174
- // return the caught observable so the subscription doesn't complete
175
- return caught;
176
- }), takeUntil(this.destroyed));
177
- // Handle returned data and notify parent
178
- getData.subscribe((results) => {
179
- // Limiting number of results to show if not pageable (if pageable the max number of items in the table
180
- // can be modified by increasing/decreasing the pageSize.)
181
- if (!this.pageable) {
182
- results.items = results.items.slice(0, this.maxItemCount);
183
- }
184
- // Need to know this (along with if there's a value in the formModel) to determine what to show in the footer
185
- this.searchResults = results;
186
- this.tableCaption = this.getCaption(results);
187
- this.resultsCount = this.pageable ? this.rowCountPipe.transform(results, this.objectType, undefined, this.pageInfo) :
188
- this.rowCountPipe.transform(results, this.objectType, this.maxItemCount);
189
- // Disable searchbox when in no-data state
190
- if (!results.items.length && !this.searchModel.value) {
191
- this.searchModel.disable({ emitEvent: false });
192
- }
193
- else if (this.searchModel.disabled) {
194
- // re-enable if it was disabled, but now has items
195
- this.searchModel.enable({ emitEvent: false });
196
- }
197
- this.status.setStatus('hasData');
198
- // Send the results to the parent component
199
- this.itemsChange.emit(results);
200
- });
201
- // When 'ready' is completed by the host, initialize the table with the current form model values
202
- this.ready.subscribe({
203
- complete: () => {
204
- this.initTable.next(this.formModel.value);
205
- this.initTable.complete();
206
- }
207
- });
208
- }
209
- ngOnDestroy() {
210
- this.destroyed.next();
211
- this.destroyed.unsubscribe();
212
- }
213
- /** Pass along sort to parent component */
214
- onSortChange(sort) {
215
- this.sortChange.emit(sort);
216
- }
217
- /**
218
- * When a page changes, store the new pagingInfo and emit the current value of the form to trigger getData.
219
- */
220
- onPageChange(pagingInfo) {
221
- this.status.setStatus('pending', 'Loading');
222
- this.pageInfo = pagingInfo;
223
- this.pageChangeEmitter.emit(pagingInfo);
224
- this.pageChanged.next(this.formModel.value);
225
- }
226
- /**
227
- * Wire up a handler to the `refresh` observable so that when
228
- * the host page context changes it can force the table to update as well.
229
- *
230
- * If the `refresh` observable passes options and the `clearSearch` property
231
- * is set to true, reset the searchModel and pass an empty string.
232
- *
233
- * If `refresh` observable does not pass options or the `clearSearch` property
234
- * is set to false, pass along the current searchModel Value.
235
- */
236
- setUpRefreshTrigger() {
237
- if (this.refresh) {
238
- this.refreshTrigger = this.refresh.pipe(map(opts => {
239
- if (opts && opts.clearSearch) {
240
- this.searchModel.reset('', { emitEvent: false });
241
- return { ...this.formModel, searchModel: '' };
242
- }
243
- return this.formModel.value;
244
- }), takeUntil(this.destroyed));
245
- }
246
- }
247
- /** Get text to display in the footer. */
248
- getCaption(results) {
249
- if (results.items.length) {
250
- return '';
251
- }
252
- if (this.searchModel.value) {
253
- return this.translateService.instant(this.noSearchResultsMessage || 'SearchableTable_Default_NoMatches_SC', { searchText: this.searchModel.value });
254
- }
255
- return this.translateService.instant(this.noDataMessage || 'SearchableTable_Default_NoData_SC');
256
- }
257
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchableTableComponent, deps: [{ token: i1.ErrorService }, { token: i2.TranslateService }, { token: i3.RowCountPipe }], target: i0.ɵɵFactoryTarget.Component }); }
258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchableTableComponent, selector: "ec-searchable-table", inputs: { id: "id", resizable: "resizable", sortable: "sortable", sort: "sort", autofocus: "autofocus", tableClasses: "tableClasses", searchboxPlaceholder: "searchboxPlaceholder", formModel: "formModel", noDataMessage: "noDataMessage", noSearchResultsMessage: "noSearchResultsMessage", ready: "ready", getItems: "getItems", refresh: "refresh", status: "status", tableLayoutFixed: "tableLayoutFixed", searchboxTabIndex: "searchboxTabIndex", maxItemCount: "maxItemCount", hideSearchControl: "hideSearchControl", hideHeader: "hideHeader", objectType: "objectType", hideFooter: "hideFooter", pageable: "pageable", pageSize: "pageSize", maxTabs: "maxTabs", searchboxReadonly: "searchboxReadonly", selectionContext: "selectionContext", selectionToolbarTemplate: "selectionToolbarTemplate", headerTitleTemplate: "headerTitleTemplate", additionalCountText: "additionalCountText", selectable: "selectable", customContentTemplate: "customContentTemplate", removeCard: "removeCard", overlayClasses: "overlayClasses", fillParentHeight: "fillParentHeight", disablePaginationControls: "disablePaginationControls" }, outputs: { sortChange: "sortChange", pageChangeEmitter: "pageChange", itemsChange: "itemsChange" }, queries: [{ propertyName: "resizableColumns", predicate: ResizableColumnComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<header *ngIf=\"!hideHeader\"\n class=\"d-flex flex-shrink align-items-center mb-3\">\n <ec-textbox id=\"{{id}}_searchbox\"\n *ngIf=\"!hideSearchControl\"\n class=\"mb-0 flex-grow mr-2\"\n [autofocus]=\"autofocus\"\n [formModel]=\"searchModel\"\n [tabindex]=\"searchboxTabIndex\"\n [placeholder]=\"searchboxPlaceholder\"\n [readonly]=\"searchboxReadonly\"></ec-textbox>\n <div class=\"flex-grow\">\n <ng-content select=\".searchable-table-controls\"></ng-content>\n </div>\n</header>\n<section id=\"{{id}}_card\"\n class=\"d-flex flex-column {{overlayClasses}}\"\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\n ecOverlay\n [status]=\"status.status\"\n [message]=\"status.message\"\n [displayAsMask]=\"true\">\n\n @if(!headerTitleTemplate) {\n <!-- Fallback to the projected content if a headerTitleTemplate is not found. This keeps us backwards compatible -->\n <ng-content select=\".card-header\"></ng-content>\n }\n\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\n </ng-container>\n\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \n If that doesn't work for you then you can specify a customContentTemplate to use instead\n and still retain all the event handling, header, footer pagination, etc support -->\n <ng-template #defaultContentTemplate>\n <ec-table id=\"{{id}}_table\"\n class=\"{{tableClasses}}\"\n [class.is-fixed]=\"tableLayoutFixed\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n (sortChange)=\"onSortChange($event)\"\n [resizable]=\"resizable\"\n [scrollable]=\"true\"\n [selectable]=\"selectable\"\n [selectionContext]=\"selectionContext\"\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\n [resizableColumns]=\"resizableColumns\"\n [headerTitleTemplate]=\"headerTitleTemplate\">\n <ng-content></ng-content>\n </ec-table>\n </ng-template>\n\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\n class=\"pagination-footer\"\n [class.border-top]=\"!customContentTemplate\">\n <ec-table-pagination id=\"{{id}}_pager\"\n class=\"font-color-primary\"\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\n [pageSize]=\"pageSize\"\n [maxTabs]=\"maxTabs\"\n [pageNumber]=\"pageInfo?.pageNumber\"\n [disablePaginationControls]=\"disablePaginationControls\"\n (pageChanged)=\"onPageChange($event)\">\n </ec-table-pagination>\n <div id=\"resultsCount\"\n *ngIf=\"searchResults?.items?.length\"\n class=\"ml-auto font-color-hint text-truncate\" \n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\n </footer>\n\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\n class=\"caption-footer\"\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\n <ng-content *ngIf=\"!tableCaption\"\n select=\".searchable-table-footer\"></ng-content>\n <div id=\"tableCaption\"\n *ngIf=\"tableCaption\"\n [innerHTML]=\"tableCaption\"></div>\n <div id=\"resultsCount\"\n *ngIf=\"searchResults?.items?.length\"\n class=\"ml-auto text-truncate\"\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\n </footer>\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i6.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i7.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "headerTitleTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i8.TablePaginationComponent, selector: "ec-table-pagination", inputs: ["id", "totalItems", "pageSize", "pageNumber", "maxTabs", "disablePaginationControls"], outputs: ["pageChanged"] }] }); }
259
- }
260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchableTableComponent, decorators: [{
261
- type: Component,
262
- args: [{ selector: 'ec-searchable-table', template: "<header *ngIf=\"!hideHeader\"\n class=\"d-flex flex-shrink align-items-center mb-3\">\n <ec-textbox id=\"{{id}}_searchbox\"\n *ngIf=\"!hideSearchControl\"\n class=\"mb-0 flex-grow mr-2\"\n [autofocus]=\"autofocus\"\n [formModel]=\"searchModel\"\n [tabindex]=\"searchboxTabIndex\"\n [placeholder]=\"searchboxPlaceholder\"\n [readonly]=\"searchboxReadonly\"></ec-textbox>\n <div class=\"flex-grow\">\n <ng-content select=\".searchable-table-controls\"></ng-content>\n </div>\n</header>\n<section id=\"{{id}}_card\"\n class=\"d-flex flex-column {{overlayClasses}}\"\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\n ecOverlay\n [status]=\"status.status\"\n [message]=\"status.message\"\n [displayAsMask]=\"true\">\n\n @if(!headerTitleTemplate) {\n <!-- Fallback to the projected content if a headerTitleTemplate is not found. This keeps us backwards compatible -->\n <ng-content select=\".card-header\"></ng-content>\n }\n\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\n </ng-container>\n\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \n If that doesn't work for you then you can specify a customContentTemplate to use instead\n and still retain all the event handling, header, footer pagination, etc support -->\n <ng-template #defaultContentTemplate>\n <ec-table id=\"{{id}}_table\"\n class=\"{{tableClasses}}\"\n [class.is-fixed]=\"tableLayoutFixed\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n (sortChange)=\"onSortChange($event)\"\n [resizable]=\"resizable\"\n [scrollable]=\"true\"\n [selectable]=\"selectable\"\n [selectionContext]=\"selectionContext\"\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\n [resizableColumns]=\"resizableColumns\"\n [headerTitleTemplate]=\"headerTitleTemplate\">\n <ng-content></ng-content>\n </ec-table>\n </ng-template>\n\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\n class=\"pagination-footer\"\n [class.border-top]=\"!customContentTemplate\">\n <ec-table-pagination id=\"{{id}}_pager\"\n class=\"font-color-primary\"\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\n [pageSize]=\"pageSize\"\n [maxTabs]=\"maxTabs\"\n [pageNumber]=\"pageInfo?.pageNumber\"\n [disablePaginationControls]=\"disablePaginationControls\"\n (pageChanged)=\"onPageChange($event)\">\n </ec-table-pagination>\n <div id=\"resultsCount\"\n *ngIf=\"searchResults?.items?.length\"\n class=\"ml-auto font-color-hint text-truncate\" \n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\n </footer>\n\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\n class=\"caption-footer\"\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\n <ng-content *ngIf=\"!tableCaption\"\n select=\".searchable-table-footer\"></ng-content>\n <div id=\"tableCaption\"\n *ngIf=\"tableCaption\"\n [innerHTML]=\"tableCaption\"></div>\n <div id=\"resultsCount\"\n *ngIf=\"searchResults?.items?.length\"\n class=\"ml-auto text-truncate\"\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\n </footer>\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"] }]
263
- }], ctorParameters: () => [{ type: i1.ErrorService }, { type: i2.TranslateService }, { type: i3.RowCountPipe }], propDecorators: { id: [{
264
- type: Input
265
- }], resizable: [{
266
- type: Input
267
- }], sortable: [{
268
- type: Input
269
- }], sort: [{
270
- type: Input
271
- }], autofocus: [{
272
- type: Input
273
- }], tableClasses: [{
274
- type: Input
275
- }], sortChange: [{
276
- type: Output
277
- }], pageChangeEmitter: [{
278
- type: Output,
279
- args: ['pageChange']
280
- }], searchboxPlaceholder: [{
281
- type: Input
282
- }], formModel: [{
283
- type: Input
284
- }], noDataMessage: [{
285
- type: Input
286
- }], noSearchResultsMessage: [{
287
- type: Input
288
- }], ready: [{
289
- type: Input
290
- }], getItems: [{
291
- type: Input
292
- }], refresh: [{
293
- type: Input
294
- }], status: [{
295
- type: Input
296
- }], tableLayoutFixed: [{
297
- type: Input
298
- }], itemsChange: [{
299
- type: Output
300
- }], searchboxTabIndex: [{
301
- type: Input
302
- }], maxItemCount: [{
303
- type: Input
304
- }], hideSearchControl: [{
305
- type: Input
306
- }], hideHeader: [{
307
- type: Input
308
- }], objectType: [{
309
- type: Input
310
- }], hideFooter: [{
311
- type: Input
312
- }], pageable: [{
313
- type: Input
314
- }], pageSize: [{
315
- type: Input
316
- }], maxTabs: [{
317
- type: Input
318
- }], searchboxReadonly: [{
319
- type: Input
320
- }], selectionContext: [{
321
- type: Input
322
- }], selectionToolbarTemplate: [{
323
- type: Input
324
- }], headerTitleTemplate: [{
325
- type: Input
326
- }], resizableColumns: [{
327
- type: ContentChildren,
328
- args: [ResizableColumnComponent, { descendants: true }]
329
- }], additionalCountText: [{
330
- type: Input
331
- }], selectable: [{
332
- type: Input
333
- }], customContentTemplate: [{
334
- type: Input
335
- }], removeCard: [{
336
- type: Input
337
- }], overlayClasses: [{
338
- type: Input
339
- }], fillParentHeight: [{
340
- type: Input
341
- }], disablePaginationControls: [{
342
- type: Input
343
- }] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFjLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFjcEYsTUFBTSxPQUFPLHdCQUF3QjtJQWlMbkMsbUNBQW1DO0lBQ25DLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQWlDLENBQUM7SUFDbkUsQ0FBQztJQTBCRCxZQUNVLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQjtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENB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QUFNO2dCQUdFLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFzQkcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFLRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRTBELGdCQUFnQjtzQkFBL0UsZUFBZTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBR3JELG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHlCQUF5QjtzQkFBakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBtYXAsIHBsdWNrLCBza2lwVW50aWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93Q291bnRQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Rpc3BsYXkvcGlwZXMvcm93LWNvdW50LnBpcGUnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uL3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5nSW5mbywgVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IH0gZnJvbSAnLi90YWJsZS1zZWxlY3RhYmxlLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVTb3J0IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBUYWJsZVNlYXJjaFJlc3VsdHMgPSB7IGl0ZW1zOiB1bmtub3duW10sIHRvdGFsSXRlbXM6IG51bWJlciwgdG90YWxJdGVtc0JlZm9yZVBhZ2luZz86IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgU2VhcmNoYWJsZVRhYmxlUmVmcmVzaE9wdGlvbnMgPSB7IGNsZWFyU2VhcmNoPzogYm9vbGVhbiB9O1xuXG50eXBlIFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbCA9IHsgc2VhcmNoTW9kZWw/OiBzdHJpbmcgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWMtc2VhcmNoYWJsZS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIGlkID0gJyc7XG4gIEBJbnB1dCgpIHJlc2l6YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzb3J0YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzb3J0PzogVGFibGVTb3J0IHwgVGFibGVTb3J0W107XG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlNldCB0byBhIHNwYWNlLXNlcGFyYXRlZCBzZXQgb2Ygc3RyaW5ncyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZWMtdGFibGUgY2xhc3MgYXR0cmlidXRlXG4gICAqIHRoaXMgYWxsb3dzIGZpbmVyIGNvbnRyb2wgb3ZlciBzdHlsaW5nLlxuICAgKi9cbiAgQElucHV0KCkgdGFibGVDbGFzc2VzOiBzdHJpbmcgPSAnJztcblxuICAvKiogRW1pdHMgd2hlbiB0YWJsZSBzb3J0IGhhcyBjaGFuZ2VkICovXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0IHwgVGFibGVTb3J0W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnQgfCBUYWJsZVNvcnRbXT4oKTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgdGFibGUgcGFnZSBoYXMgY2hhbmdlZCAqL1xuICBAT3V0cHV0KCdwYWdlQ2hhbmdlJykgcGFnZUNoYW5nZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQYWdpbmdJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnaW5nSW5mbz4oKTtcblxuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIHNlYXJjaGJveCAqL1xuICBASW5wdXQoKSBzZWFyY2hib3hQbGFjZWhvbGRlciA9ICcnO1xuXG4gIC8qKlxuICAgKiBGb3JtR3JvdXAgZm9yIHRoZSBzZWFyY2hib3hcbiAgICpcbiAgICogVGhlIHJlZmVyZW5jZWQgRm9ybUdyb3VwICoqbXVzdCoqIGNvbnRhaW4gYSBGb3JtQ29udHJvbCBjYWxsZWQgJ3NlYXJjaE1vZGVsJy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWwhOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5ZWQgaW4gb3ZlcmxheSB3aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQgKHdpdGhvdXQgc2VhcmNoaW5nKS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0NcIlxuICAgKi9cbiAgQElucHV0KCkgbm9EYXRhTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQyc7XG5cbiAgLyoqXG4gICAqIERpc3BsYXllZCBpbiBvdmVybGF5IHdoZW4gbm8gZGF0YSBpcyByZXR1cm5lZCAoYWZ0ZXIgc2VhcmNoaW5nKS5cbiAgICogRW5zdXJlIHRyYW5zbGF0aW9uIGhhcyBhbiBpbnRlcnBvbGF0aW9uIHBsYWNlaG9sZGVyIGZvciBcInNlYXJjaFRleHRcIi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0NcIlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyA3IHJlcXVpcmVzIHNpbmdsZSBjdXJseSBicmFjZXNcbiAgICogTm8gaXRlbXMgZm91bmQgbWF0Y2hpbmcgPHN0cm9uZz57e3NlYXJjaFRleHR9fTwvc3Ryb25nPlxuICAgKi9cbiAgQElucHV0KCkgbm9TZWFyY2hSZXN1bHRzTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vTWF0Y2hlc19TQyc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBob3N0aW5nIHBhZ2UgaXMgcmVhZHkgZm9yIHRoZSB0YWJsZSB0byBsb2FkIGRhdGEuXG4gICAqXG4gICAqIE5leHQgYW5kIENvbXBsZXRlIHRoaXMgb2JzZXJ2YWJsZSBhZnRlciBob3N0aW5nIHBhZ2UgaGFzIG1hZGUgYW55IHByZWxpbWluYXJ5XG4gICAqIEFQSSAob3Igb3RoZXIgYXN5bmNocm9ub3VzKSBjYWxscyB0byBsb2FkIHByZXJlcXVpc2l0ZSBkYXRhIHVwb24gd2hpY2ggdGhlIGNvZGVcbiAgICogaW4gdGhlIGBnZXRJdGVtc2AgZnVuY3Rpb24gZGVwZW5kcy4gIFVzZSBhIGBSZXBsYXlTdWJqZWN0YCB0byBlbnN1cmUgZXZlcnkgY29tcG9uZW50XG4gICAqIHRoYXQgdXNlcyB0aGlzIG9ic2VydmFibGUgZ2V0cyB0aGUgTmV4dCBhbmQgQ29tcGxldGUgbm90aWZpY2F0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHJlYWR5ITogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gY2FsbGVkIHRvIGdldCBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0YWJsZS5cbiAgICogSWYgcGFnZWFibGUgaXMgdHJ1ZSwgdGhlIFRhYmxlU2VhcmNoUmVzdWx0cyBuZWVkIHRvIGluY2x1ZGUgdG90YWxJdGVtc0JlZm9yZVBhZ2luZywgd2hpY2ggaXMgdGhlXG4gICAqIGNvdW50IG9mIGl0ZW1zIGJlZm9yZSB5b3UndmUgYXBwbGllZCBhbnkgcGFnaW5hdGlvbiAoaS5lLiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FtZSBiYWNrIGZyb20gdGhlIHNlYXJjaCkuXG4gICAqXG4gICAqIE1ha2Ugc3VyZSB0byBiaW5kIHRoZSBzY29wZSBpbiB0aGUgdGVtcGxhdGVcbiAgICogQGV4YW1wbGVcbiAgICogW2dldEl0ZW1zXT1cInlvdXJGdW5jdGlvbi5iaW5kKHRoaXMpXCJcbiAgICovXG4gIEBJbnB1dCgpIGdldEl0ZW1zITogKHNlYXJjaD86IHN0cmluZywgcGFnZUNoYW5nZUluZm8/OiBQYWdpbmdJbmZvKSA9PiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz47XG5cbiAgLyoqIE9ic2VydmFibGUgdGhhdCB3aWxsIGZvcmNlIHRoZSBnZXRJdGVtcyBmdW5jdGlvbiB0byBnZXQgY2FsbGVkIGFnYWluICovXG4gIEBJbnB1dCgpIHJlZnJlc2g/OiBPYnNlcnZhYmxlPFNlYXJjaGFibGVUYWJsZVJlZnJlc2hPcHRpb25zIHwgdm9pZD47XG5cbiAgLyoqIEFsbG93IHRoZSBob3N0IGNvbXBvbmVudCB0byBzdXBwbHkgYW4gb3ZlcmxheSB0byBjb250cm9sIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSB0YWJsZSAqL1xuICBASW5wdXQoKSBzdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1bmRlcmx5aW5nIHRhYmxlJ3MgbGF5b3V0IHRvIGZpeGVkLlxuICAgKi9cbiAgQElucHV0KCkgdGFibGVMYXlvdXRGaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0cyBpdGVtcyByZXR1cm5lZCBieSB0aGUgZ2V0SXRlbXMgZnVuY3Rpb24sIGFsb25nIHdpdGggdG90YWwgY291bnQgKi9cbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPigpO1xuXG4gIC8qKiBPcHRpb25hbCB0YWIgaW5kZXggZm9yIHRoZSBzZWFyY2hib3ggKi9cbiAgQElucHV0KCkgc2VhcmNoYm94VGFiSW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHRhYmxlIChkZWZhdWx0OiAxMDApICovXG4gIEBJbnB1dCgpIG1heEl0ZW1Db3VudDogbnVtYmVyID0gMTAwO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHNlYXJjaCBib3ggKGRvZXMgbm90IGhpZGUgdGhlIG90aGVyIHNlYXJjaGFibGUgdGFibGUgY29udHJvbHMgKi9cbiAgQElucHV0KCkgaGlkZVNlYXJjaENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSB0aGUgZW50aXJlIGhlYWRlciAqL1xuICBASW5wdXQoKSBoaWRlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFR5cGUgb2Ygb2JqZWN0IGluIHRoZSB0YWJsZS4gRGlzcGxheWVkIGluIGZvb3RlciAoZGVmYXVsdDogJ3Jlc3VsdHMnKSovXG4gIEBJbnB1dCgpIG9iamVjdFR5cGU6IHN0cmluZyA9ICdyZXN1bHRzJztcblxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSB0aGUgdGFibGUgZm9vdGVyICovXG4gIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHBhZ2luZy4gSWYgcGFnaW5nIGlzIGVuYWJsZWQsIHBhZ2VTaXplIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqIGdldEl0ZW1zIHdpbGwgYmUgcGFzc2VkIGJvdGggYSBzZWFyY2ggYW5kIGEgUGFnaW5nSW5mbyBvYmplY3Qgd2hlbiBjYWxsZWQuIEl0IG11c3QgaW5jbHVkZSB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nIGluIHRoZSBUYWJsZVNlYXJjaFJlc3VsdHMgb3V0cHV0LlxuICAgKiBIZXJlIGlzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uOiBcbiAgICogQGV4YW1wbGVcbiAgICogZ2V0SXRlbXMoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pOiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz4ge1xuICAgICAgbGV0IHJlc3VsdHM6IFNpbXBsZUl0ZW1bXSA9IFsuLi50aGlzLnBhZ2luYXRlZFRhYmxlSXRlbXNdO1xuICAgICAgLy9hcHBseSBzZWFyY2hcbiAgICAgIGlmKHNlYXJjaCkge1xuICAgICAgICByZXN1bHRzID0gdGhpcy5wYWdpbmF0ZWRUYWJsZUl0ZW1zLmZpbHRlcihpID0+IGkuYS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICB9XG4gICAgICAvL2dldCBjb3VudCBiZWZvcmUgYXBwbHlpbmcgcGFnaW5nXG4gICAgICBsZXQgY291bnRCZWZvcmVQYWdpbmcgPSByZXN1bHRzLmxlbmd0aDtcbiAgICAgIC8vYXBwbHkgcGFnaW5nXG4gICAgICBpZihwYWdlQ2hhbmdlSW5mbykge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zbGljZShwYWdlQ2hhbmdlSW5mbyEuc2tpcCwgcGFnZUNoYW5nZUluZm8hLnNraXAgKyBwYWdlQ2hhbmdlSW5mbyEucGFnZVNpemUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mKHsgaXRlbXM6IHJlc3VsdHMsIHRvdGFsSXRlbXM6IHJlc3VsdHMubGVuZ3RoLCB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nOiBjb3VudEJlZm9yZVBhZ2luZyB9KTtcbiAgICB9XG4gICovXG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE1heCBzaXplIG9mIGEgcGFnZS5cbiAgICovXG4gIEBJbnB1dCgpIHBhZ2VTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICogTWF4aW11bSBudW1iZXIgb2YgcGFnZSB0YWJzIHRvIHNob3dcbiAqL1xuICBASW5wdXQoKSBtYXhUYWJzPzogbnVtYmVyID0gMTA7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBzZWFyY2hib3ggcmVhZG9ubHkgaWYgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHNlYXJjaGJveFJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uQ29udGV4dD86IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQ7XG5cbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2hlbiAxIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQuIFJlcXVpcmVzIGBbc2VsZWN0aW9uQ29udGV4dF1gIHRvIGJlIGRlZmluZWQuICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIFxuICAvKiogUGFzc2VkIHRvIHRoZSBpbm5lciBUYWJsZUNvbXBvbmVudCB0byBkaXNwbGF5IHRoZSB0b29sYmFyL2hlYWRlciB0aXRsZSBhbmQgc3dhcCB0aGVtIG91dCBiYXNlZCBvbiBzZWxlY3Rpb24uXG4gICAqICBXaXRoIHRoaXMgc2V0LCB0aGUgc2VsZWN0aW9uIHRvb2xiYXIgd2lsbCBub3QgbWFzayB0aGUgdGFibGUgY29sdW1uIGhlYWRlcnMuIFJlcXVpcmVzIGBbc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlXWAgdG8gYmUgZGVmaW5lZCB0byBiZWhhdmUgdGhpcyB3YXkuXG4gICAqL1xuICBASW5wdXQoKSBoZWFkZXJUaXRsZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgcmVzaXphYmxlQ29sdW1ucyE6IFF1ZXJ5TGlzdDxSZXNpemFibGVDb2x1bW5Db21wb25lbnQ+O1xuXG4gIC8qKiBPcHRpb25hbCB0ZXh0IHRvIGFkZCB0byB0aGUgcmVzdWx0cyBjb3VudCBpbiB0aGUgdGFibGUgZm9vdGVyLiBUaGlzIHRleHQgd2lsbCBiZSBhZGRlZCBhZnRlciB0aGUgY291bnQgYW5kIG9iamVjdFR5cGUuICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb3VudFRleHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBFbmFibGVzIHRhYmxlIHJvdyBzZWxlY3Rpb24gYW5kIHJvdyBoaWdobGlnaHRpbmcgc3R5bGVzIHdoZW4gdHJ1ZSAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqRGVmYXVsdHMgdG8gdW5kZWZpbmVkLiBTcGVjaWZ5IHlvdXIgb3duIHRlbXBsYXRlIGlmIGFuIGVjLXRhYmxlIHdyYXBwZWQgYXJvdW5kIHlvdXIgdHJhbnNjbHVkZWQgY29udGVudCB3b24ndCBtZWV0IHlvdXIgbmVlZHNcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgcmVtb3ZlcyB0aGUgY2FyZCBzdHlsZXMgZnJvbSB0aGUgdGFibGUgd3JhcHBlciAqL1xuICBASW5wdXQoKSByZW1vdmVDYXJkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIENsYXNzZXMgdG8gYWRkIHRvIHRoZSBvdmVybGF5L2NhcmQgZWxlbWVudCAqL1xuICBASW5wdXQoKSBvdmVybGF5Q2xhc3Nlczogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFdoZW4gdHJ1ZSB0aGUgb3ZlcmxheSBhbmQgdGFibGUgd2lsbCBub3QgaGF2ZSBmbGV4LXNocmluay1tYXggYnV0IGluc3RlYWQgZmxleC1ncm93ICovXG4gIEBJbnB1dCgpIGZpbGxQYXJlbnRIZWlnaHQ/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFBhc3NlZCB0byB0aGUgcGFnaW5hdGlvbiBjb250cm9sIGNvbXBvbmVudC4gVXNlZCB0byBkaXNhYmxlIHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYWdpbmF0aW9uQ29udHJvbHM/OiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBQYWdpbmdJbmZvIGZvciB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcHVibGljIHBhZ2VJbmZvPzogUGFnaW5nSW5mbztcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzZWFyY2hNb2RlbCAqL1xuICBwdWJsaWMgZ2V0IHNlYXJjaE1vZGVsKCk6IFVudHlwZWRGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybU1vZGVsLmNvbnRyb2xzLnNlYXJjaE1vZGVsIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXh0IGRpc3BsYXllZCBpbiB0aGUgZm9vdGVyLlxuICAgKiBTb21ldGltZXMgYG5vRGF0YU1lc3NhZ2VgLCBzb21ldGltZXMgYG5vU2VhcmNoUmVzdWx0c01lc3NhZ2VgXG4gICAqL1xuICBwdWJsaWMgdGFibGVDYXB0aW9uOiBzdHJpbmcgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLm5vRGF0YU1lc3NhZ2UgfHwgJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQycpO1xuXG4gIC8qKiBjb3VudCBvZiByZXN1bHRzIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgKi9cbiAgcHVibGljIHJlc3VsdHNDb3VudDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIEl0ZW1zIHJldHVybmVkIGJ5IHRoZSBnZXRJdGVtcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0b3RhbCBjb3VudCAqL1xuICBwdWJsaWMgc2VhcmNoUmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzID0geyBpdGVtczogW10sIHRvdGFsSXRlbXM6IDAgfTtcblxuICAvKipcbiAgICogSWYgcGFzc2VkIGFuIGlucHV0IGZvciByZWZyZXNoLCB0cmlnZ2VycyByZWxvYWRpbmcgaXRlbXMuXG4gICAqIE90aGVyd2lzZSwgY29tcGxldGVzIGltbWVkaWF0ZWx5ICh3aWxsIG5ldmVyIHRyaWdnZXIgcmVsb2FkKS5cbiAgICovXG4gIHByaXZhdGUgcmVmcmVzaFRyaWdnZXI6IE9ic2VydmFibGU8U2VhcmNoYWJsZVRhYmxlRm9ybU1vZGVsIHwgdW5kZWZpbmVkPiA9IEVNUFRZO1xuICBwcml2YXRlIGRlc3Ryb3llZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBwYWdlQ2hhbmdlZDogU3ViamVjdDxTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWw+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKiogVHJpZ2dlcnMgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgdGFibGUgKi9cbiAgcHJpdmF0ZSBpbml0VGFibGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3dDb3VudFBpcGU6IFJvd0NvdW50UGlwZVxuICApIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5wYWdlU2l6ZSAmJiAhY2hhbmdlcy5wYWdlU2l6ZS5maXJzdENoYW5nZSAmJiB0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAvLyBJZiB0aGUgcGFnZVNpemUgY2hhbmdlcywgcmVzZXQgdG8gdGhlIGZpcnN0IHBhZ2UgYW5kIHJlZnJlc2guXG4gICAgICB0aGlzLnBhZ2VJbmZvID0gVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LmdldFBhZ2luZ0luZm8oMSwgdGhpcy5wYWdlU2l6ZSEpO1xuICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UodGhpcy5wYWdlSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcbiAgICB0aGlzLnNldFVwUmVmcmVzaFRyaWdnZXIoKTtcblxuICAgIC8vIFdhdGNoIGZvciBzZWFyY2hib3gvb3RoZXIgY29udHJvbCBjaGFuZ2VzIG9yIHJlZnJlc2ggcmVxdWVzdHNcbiAgICBjb25zdCBzZWFyY2hPclJlZnJlc2ggPSBtZXJnZShcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSksXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApXG4gICAgICApLFxuICAgICAgdGhpcy5yZWZyZXNoVHJpZ2dlcixcbiAgICAgIHRoaXMuaW5pdFRhYmxlXG4gICAgKS5waXBlKHRhcCgoKT0+IHtcbiAgICAgIC8vYSBjaGFuZ2UgdG8gYW55IGZvcm0gY29udHJvbCBvciBhIHJlZnJlc2ggc2hvdWxkIHJlc2V0IHRoZSBwYWdlSW5mbyB0byB0aGUgZmlyc3QgcGFnZSBpZiB0aGUgdGFibGUgaXMgcGFnZWFibGUuXG4gICAgICAvLyhpZiB3ZSBkaWRudCByZXNldCB0aGUgcGFnZUluZm8sIHdlJ2QgaGF2ZSB0byBjYWxsIGdldEl0ZW1zIHdpdGggdGhlIHByZXZpb3VzIHBhZ2VJbmZvLCB3aGljaCBtYXkgbm90IGJlIHZhbGlkIGZvciB0aGUgbmV3IHJlc3VsdHMpXG4gICAgICBpZih0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHRoaXMucGFnZUluZm8gPSBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbygxLCB0aGlzLnBhZ2VTaXplISk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgY29uc3QgdXBkYXRlUmVzdWx0cyA9IG1lcmdlKFxuICAgICAgc2VhcmNoT3JSZWZyZXNoLFxuICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5waXBlKFxuICAgICAgICAvLyBQcmV2ZW50IGEgY2FsbCB0byBnZXRJdGVtcyB3aGVuIHRoZSBwYWdlU2l6ZSBpcyBzZXQgZHVyaW5nIHBhZ2UgaW5pdCBhbmQgYmVmb3JlIHJlYWR5IGlzIGNvbXBsZXRlZFxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSlcbiAgICAgIClcbiAgICApXG5cbiAgICAvLyBDYWxsIGdldEl0ZW1zIGFuZCB3YXRjaCBmb3IgZXJyb3JzXG4gICAgY29uc3QgZ2V0RGF0YSA9IHVwZGF0ZVJlc3VsdHMucGlwZShcbiAgICAgIC8vIFBsdWNrIHRoZSBzZWFyY2hNb2RlbCB2YWx1ZSBvdXQgb2YgdGhlIGZvcm1Nb2RlbFxuICAgICAgcGx1Y2soJ3NlYXJjaE1vZGVsJyksXG5cbiAgICAgIC8vIEVuc3VyZSBzZWFyY2ggc3RyaW5nIGlzIGRlZmluZWRcbiAgICAgIC8vIFRyaW0gYW5kIGxvd2VyY2FzZSBpdCB0byBhaWQgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hpbmdcbiAgICAgIG1hcCgoc2VhcmNoU3RyaW5nPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxldCBzZWFyY2ggPSBzZWFyY2hTdHJpbmcgfHwgJyc7XG4gICAgICAgIHJldHVybiBzZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9KSxcblxuICAgICAgLy8gU2hvdyBzdGF0dXMgb3ZlcmxheVxuICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsICdMb2FkaW5nJykpLFxuXG4gICAgICAvLyBDYWxsIHBhc3NlZCBmdW5jdGlvblxuICAgICAgc3dpdGNoTWFwKChzZWFyY2hTdHJpbmc6IHN0cmluZykgPT4gXG4gICAgICAgIC8vaWYgdGhlIHRhYmxlIGlzIHBhZ2VhYmxlLCBwYWdlSW5mbyB3aWxsIGJlIGRlZmluZWQuXG4gICAgICAgIHRoaXMuZ2V0SXRlbXMoc2VhcmNoU3RyaW5nLCB0aGlzLnBhZ2VJbmZvKVxuICAgICAgKSxcblxuICAgICAgLy8gSWYgcGFzc2VkIGZ1bmN0aW9uIGZhaWxzLCBzaG93IGVycm9yIHN0YXR1c1xuICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHtcbiAgICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdlcnJvcicsIHRoaXMuZXJyb3JTZXJ2aWNlLnBhcnNlQXBpRXJyb3IoZXJyKSk7XG4gICAgICAgIC8vIHJldHVybiB0aGUgY2F1Z2h0IG9ic2VydmFibGUgc28gdGhlIHN1YnNjcmlwdGlvbiBkb2Vzbid0IGNvbXBsZXRlXG4gICAgICAgIHJldHVybiBjYXVnaHQ7XG4gICAgICB9KSxcblxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSxcbiAgICApO1xuXG4gICAgLy8gSGFuZGxlIHJldHVybmVkIGRhdGEgYW5kIG5vdGlmeSBwYXJlbnRcbiAgICBnZXREYXRhLnN1YnNjcmliZSgocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKSA9PiB7XG4gICAgICAvLyBMaW1pdGluZyBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93IGlmIG5vdCBwYWdlYWJsZSAoaWYgcGFnZWFibGUgdGhlIG1heCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRhYmxlXG4gICAgICAvLyBjYW4gYmUgbW9kaWZpZWQgYnkgaW5jcmVhc2luZy9kZWNyZWFzaW5nIHRoZSBwYWdlU2l6ZS4pXG4gICAgICBpZighdGhpcy5wYWdlYWJsZSkge1xuICAgICAgICByZXN1bHRzLml0ZW1zID0gcmVzdWx0cy5pdGVtcy5zbGljZSgwLCB0aGlzLm1heEl0ZW1Db3VudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5lZWQgdG8ga25vdyB0aGlzIChhbG9uZyB3aXRoIGlmIHRoZXJlJ3MgYSB2YWx1ZSBpbiB0aGUgZm9ybU1vZGVsKSB0byBkZXRlcm1pbmUgd2hhdCB0byBzaG93IGluIHRoZSBmb290ZXJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgXG4gICAgICB0aGlzLnRhYmxlQ2FwdGlvbiA9IHRoaXMuZ2V0Q2FwdGlvbihyZXN1bHRzKTtcbiAgICAgIHRoaXMucmVzdWx0c0NvdW50ID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucm93Q291bnRQaXBlLnRyYW5zZm9ybShyZXN1bHRzLCB0aGlzLm9iamVjdFR5cGUsIHVuZGVmaW5lZCwgdGhpcy5wYWdlSW5mbyk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0NvdW50UGlwZS50cmFuc2Zvcm0ocmVzdWx0cywgdGhpcy5vYmplY3RUeXBlLCB0aGlzLm1heEl0ZW1Db3VudCk7XG5cbiAgICAgIC8vIERpc2FibGUgc2VhcmNoYm94IHdoZW4gaW4gbm8tZGF0YSBzdGF0ZVxuICAgICAgaWYgKCFyZXN1bHRzLml0ZW1zLmxlbmd0aCAmJiAhdGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xuICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaE1vZGVsLmRpc2FibGVkKSB7XG4gICAgICAgIC8vIHJlLWVuYWJsZSBpZiBpdCB3YXMgZGlzYWJsZWQsIGJ1dCBub3cgaGFzIGl0ZW1zXG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZWwuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdoYXNEYXRhJyk7XG4gICAgICAvLyBTZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQocmVzdWx0cyk7XG4gICAgfSk7XG5cbiAgICAvLyBXaGVuICdyZWFkeScgaXMgY29tcGxldGVkIGJ5IHRoZSBob3N0LCBpbml0aWFsaXplIHRoZSB0YWJsZSB3aXRoIHRoZSBjdXJyZW50IGZvcm0gbW9kZWwgdmFsdWVzXG4gICAgdGhpcy5yZWFkeS5zdWJzY3JpYmUoe1xuICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0VGFibGUubmV4dCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKiBQYXNzIGFsb25nIHNvcnQgdG8gcGFyZW50IGNvbXBvbmVudCAqL1xuICBvblNvcnRDaGFuZ2Uoc29ydDogVGFibGVTb3J0IHwgVGFibGVTb3J0W10pOiB2b2lkIHtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChzb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGEgcGFnZSBjaGFuZ2VzLCBzdG9yZSB0aGUgbmV3IHBhZ2luZ0luZm8gYW5kIGVtaXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZvcm0gdG8gdHJpZ2dlciBnZXREYXRhLlxuICAgKi9cbiAgb25QYWdlQ2hhbmdlKHBhZ2luZ0luZm86IFBhZ2luZ0luZm8pIHtcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xuICAgIHRoaXMucGFnZUluZm8gPSBwYWdpbmdJbmZvO1xuICAgIHRoaXMucGFnZUNoYW5nZUVtaXR0ZXIuZW1pdChwYWdpbmdJbmZvKTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLm5leHQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xuICB9XG5cblxuICAvKipcbiAgICogV2lyZSB1cCBhIGhhbmRsZXIgdG8gdGhlIGByZWZyZXNoYCBvYnNlcnZhYmxlIHNvIHRoYXQgd2hlblxuICAgKiB0aGUgaG9zdCBwYWdlIGNvbnRleHQgY2hhbmdlcyBpdCBjYW4gZm9yY2UgdGhlIHRhYmxlIHRvIHVwZGF0ZSBhcyB3ZWxsLlxuICAgKlxuICAgKiBJZiB0aGUgYHJlZnJlc2hgIG9ic2VydmFibGUgcGFzc2VzIG9wdGlvbnMgYW5kIHRoZSBgY2xlYXJTZWFyY2hgIHByb3BlcnR5XG4gICAqIGlzIHNldCB0byB0cnVlLCByZXNldCB0aGUgc2VhcmNoTW9kZWwgYW5kIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBJZiBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBkb2VzIG5vdCBwYXNzIG9wdGlvbnMgb3IgdGhlIGBjbGVhclNlYXJjaGAgcHJvcGVydHlcbiAgICogaXMgc2V0IHRvIGZhbHNlLCBwYXNzIGFsb25nIHRoZSBjdXJyZW50IHNlYXJjaE1vZGVsIFZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRVcFJlZnJlc2hUcmlnZ2VyKCkge1xuICAgIGlmICh0aGlzLnJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaFRyaWdnZXIgPSB0aGlzLnJlZnJlc2gucGlwZShcbiAgICAgICAgbWFwKG9wdHMgPT4ge1xuICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2xlYXJTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTW9kZWwucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuZm9ybU1vZGVsLCBzZWFyY2hNb2RlbDogJycgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybU1vZGVsLnZhbHVlO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogR2V0IHRleHQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyLiAqL1xuICBwcml2YXRlIGdldENhcHRpb24ocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKTogc3RyaW5nIHtcbiAgICBpZiAocmVzdWx0cy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9TZWFyY2hSZXN1bHRzTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9NYXRjaGVzX1NDJywgeyBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaE1vZGVsLnZhbHVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLm5vRGF0YU1lc3NhZ2UgfHwgJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQycpO1xuICB9XG5cbn0iLCI8aGVhZGVyICpuZ0lmPVwiIWhpZGVIZWFkZXJcIlxuICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluayBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICA8ZWMtdGV4dGJveCBpZD1cInt7aWR9fV9zZWFyY2hib3hcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU2VhcmNoQ29udHJvbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWItMCBmbGV4LWdyb3cgbXItMlwiXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJzZWFyY2hNb2RlbFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWFyY2hib3hUYWJJbmRleFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hib3hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJzZWFyY2hib3hSZWFkb25seVwiPjwvZWMtdGV4dGJveD5cbiAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvd1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5zZWFyY2hhYmxlLXRhYmxlLWNvbnRyb2xzXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvaGVhZGVyPlxuPHNlY3Rpb24gaWQ9XCJ7e2lkfX1fY2FyZFwiXG4gICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiB7e292ZXJsYXlDbGFzc2VzfX1cIlxuICAgICAgICAgW25nQ2xhc3NdPVwieydpcy10cmFuc2x1Y2VudCc6IHN0YXR1cy5zdGF0dXMgIT09ICdlcnJvcicsICdoYXMtbWFzayc6IHN0YXR1cy5zdGF0dXMgIT09ICdoYXNEYXRhJywgJ2NhcmQgbS0wIGJnLWNvbnRlbnQnOiAhY3VzdG9tQ29udGVudFRlbXBsYXRlICYmICFyZW1vdmVDYXJkfVwiXG4gICAgICAgICBlY092ZXJsYXlcbiAgICAgICAgIFtzdGF0dXNdPVwic3RhdHVzLnN0YXR1c1wiXG4gICAgICAgICBbbWVzc2FnZV09XCJzdGF0dXMubWVzc2FnZVwiXG4gICAgICAgICBbZGlzcGxheUFzTWFza109XCJ0cnVlXCI+XG5cbiAgQGlmKCFoZWFkZXJUaXRsZVRlbXBsYXRlKSB7XG4gIDwhLS0gRmFsbGJhY2sgdG8gdGhlIHByb2plY3RlZCBjb250ZW50IGlmIGEgaGVhZGVyVGl0bGVUZW1wbGF0ZSBpcyBub3QgZm91bmQuIFRoaXMga2VlcHMgdXMgYmFja3dhcmRzIGNvbXBhdGlibGUgLS0+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5jYXJkLWhlYWRlclwiPjwvbmctY29udGVudD5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Db250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdENvbnRlbnRUZW1wbGF0ZVwiPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGlzIGFuIGVjLXRhYmxlIHdpdGggcHJveGllZC1vdmVyIHNlYXJjaGFibGUgdGFibGUgaW5wdXRzLiBcbiAgICBJZiB0aGF0IGRvZXNuJ3Qgd29yayBmb3IgeW91IHRoZW4geW91IGNhbiBzcGVjaWZ5IGEgY3VzdG9tQ29udGVudFRlbXBsYXRlIHRvIHVzZSBpbnN0ZWFkXG4gICAgYW5kIHN0aWxsIHJldGFpbiBhbGwgdGhlIGV2ZW50IGhhbmRsaW5nLCBoZWFkZXIsIGZvb3RlciBwYWdpbmF0aW9uLCBldGMgc3VwcG9ydCAtLT5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29udGVudFRlbXBsYXRlPlxuICAgIDxlYy10YWJsZSBpZD1cInt7aWR9fV90YWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3t0YWJsZUNsYXNzZXN9fVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1maXhlZF09XCJ0YWJsZUxheW91dEZpeGVkXCJcbiAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgW3NvcnRdPVwic29ydFwiXG4gICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVcIlxuICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgIFtzZWxlY3Rpb25Db250ZXh0XT1cInNlbGVjdGlvbkNvbnRleHRcIlxuICAgICAgICAgICAgICBbc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlXT1cInNlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInJlc2l6YWJsZUNvbHVtbnNcIlxuICAgICAgICAgICAgICBbaGVhZGVyVGl0bGVUZW1wbGF0ZV09XCJoZWFkZXJUaXRsZVRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9lYy10YWJsZT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIHBhZ2luYXRpb24gZm9vdGVyIHZpc2libGUgaWYgdGFibGUgaXMgcGFnZS1hYmxlIGFuZCB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIHJlc3VsdHMgLS0+XG4gIDxmb290ZXIgKm5nSWY9XCIhaGlkZUZvb3RlciAmJiBwYWdlYWJsZSAmJiBzZWFyY2hSZXN1bHRzLnRvdGFsSXRlbXNCZWZvcmVQYWdpbmchID4gcGFnZVNpemUhXCJcbiAgICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tZm9vdGVyXCJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXRvcF09XCIhY3VzdG9tQ29udGVudFRlbXBsYXRlXCI+XG4gICAgPGVjLXRhYmxlLXBhZ2luYXRpb24gaWQ9XCJ7e2lkfX1fcGFnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1jb2xvci1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJzZWFyY2hSZXN1bHRzLnRvdGFsSXRlbXNCZWZvcmVQYWdpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW21heFRhYnNdPVwibWF4VGFic1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZUluZm8/LnBhZ2VOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzXT1cImRpc2FibGVQYWdpbmF0aW9uQ29udHJvbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDwvZWMtdGFibGUtcGFnaW5hdGlvbj5cbiAgICA8ZGl2IGlkPVwicmVzdWx0c0NvdW50XCJcbiAgICAgICAgICpuZ0lmPVwic2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aFwiXG4gICAgICAgICBjbGFzcz1cIm1sLWF1dG8gZm9udC1jb2xvci1oaW50IHRleHQtdHJ1bmNhdGVcIiBcbiAgICAgICAgIHRpdGxlPVwie3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fVwiPnt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX08L2Rpdj5cbiAgPC9mb290ZXI+XG5cbiAgPCEtLSBkZWZhdWx0IGZvb3RlcjogdmlzaWJsZSBpZiBoaWRlRm9vdGVyIGlzIGZhbHNlIGFuZCB0YWJsZSBpcyBub3QgcGFnZS1hYmxlIG9yIHRoZXJlIGFyZSBvbmx5IG9uZSBwYWdlIG9mIHJlc3VsdHMgKGFsd2F5cyBzaG93cyBpZiB0aGVyZSBpcyBhIGNhcHRpb24gdG8gaW5kaWNhdGUgbm8gcmVzdWx0cykgLS0+XG4gIDxmb290ZXIgKm5nSWY9XCIoIWhpZGVGb290ZXIgJiYgKCFwYWdlYWJsZSB8fCBzZWFyY2hSZXN1bHRzLnRvdGFsSXRlbXNCZWZvcmVQYWdpbmchIDw9IHBhZ2VTaXplISkpIHx8IHRhYmxlQ2FwdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJjYXB0aW9uLWZvb3RlclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydoYXMtcmVzdWx0cyc6IHNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGgsICdib3JkZXItdG9wJzogc2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aCAmJiAhY3VzdG9tQ29udGVudFRlbXBsYXRlfVwiPlxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIXRhYmxlQ2FwdGlvblwiXG4gICAgICAgICAgICAgICAgc2VsZWN0PVwiLnNlYXJjaGFibGUtdGFibGUtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgaWQ9XCJ0YWJsZUNhcHRpb25cIlxuICAgICAgICAgKm5nSWY9XCJ0YWJsZUNhcHRpb25cIlxuICAgICAgICAgW2lubmVySFRNTF09XCJ0YWJsZUNhcHRpb25cIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwicmVzdWx0c0NvdW50XCJcbiAgICAgICAgICpuZ0lmPVwic2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aFwiXG4gICAgICAgICBjbGFzcz1cIm1sLWF1dG8gdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICB0aXRsZT1cInt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX1cIj57e3Jlc3VsdHNDb3VudH19IHt7YWRkaXRpb25hbENvdW50VGV4dH19PC9kaXY+XG4gIDwvZm9vdGVyPlxuPC9zZWN0aW9uPiJdfQ==
@@ -1,28 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/cdk/scrolling";
4
- export class TableDetailRowComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDetailRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableDetailRowComponent, selector: "[ecTableDetailRow]", inputs: { contentClass: "contentClass", contentColSpan: "contentColSpan", maxHeight: "maxHeight" }, ngImport: i0, template: `
7
- <td></td>
8
- <td [class.has-max-height]="maxHeight" class="table-detail-content {{contentClass}}" [attr.colspan]="contentColSpan">
9
- <div [style.max-height]="maxHeight" cdkScrollable><ng-content></ng-content></div>
10
- </td>
11
- `, isInline: true, styles: [":host{background-color:var(--ec-background-color-detail)}td:first-child{width:1.5rem;padding:.25rem 0!important;vertical-align:top}.table-detail-content{background-color:transparent;border-top:1px solid var(--ec-border-color);padding:1rem 2rem 1rem 0!important}.table-detail-content.has-max-height{padding:0!important}.table-detail-content.has-max-height>div{overflow-y:auto;padding:1rem 2rem 1rem 0}\n"], dependencies: [{ kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }] }); }
12
- }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDetailRowComponent, decorators: [{
14
- type: Component,
15
- args: [{ selector: '[ecTableDetailRow]', template: `
16
- <td></td>
17
- <td [class.has-max-height]="maxHeight" class="table-detail-content {{contentClass}}" [attr.colspan]="contentColSpan">
18
- <div [style.max-height]="maxHeight" cdkScrollable><ng-content></ng-content></div>
19
- </td>
20
- `, styles: [":host{background-color:var(--ec-background-color-detail)}td:first-child{width:1.5rem;padding:.25rem 0!important;vertical-align:top}.table-detail-content{background-color:transparent;border-top:1px solid var(--ec-border-color);padding:1rem 2rem 1rem 0!important}.table-detail-content.has-max-height{padding:0!important}.table-detail-content.has-max-height>div{overflow-y:auto;padding:1rem 2rem 1rem 0}\n"] }]
21
- }], propDecorators: { contentClass: [{
22
- type: Input
23
- }], contentColSpan: [{
24
- type: Input
25
- }], maxHeight: [{
26
- type: Input
27
- }] } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGV0YWlsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1kZXRhaWwtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBWWpELE1BQU0sT0FBTyx1QkFBdUI7K0dBQXZCLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhKQVJ4Qjs7Ozs7R0FLVDs7NEZBR1UsdUJBQXVCO2tCQVZuQyxTQUFTOytCQUNFLG9CQUFvQixZQUNwQjs7Ozs7R0FLVDs4QkFJUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW2VjVGFibGVEZXRhaWxSb3ddJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dGQ+PC90ZD5cbiAgICA8dGQgW2NsYXNzLmhhcy1tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiIGNsYXNzPVwidGFibGUtZGV0YWlsLWNvbnRlbnQge3tjb250ZW50Q2xhc3N9fVwiIFthdHRyLmNvbHNwYW5dPVwiY29udGVudENvbFNwYW5cIj5cbiAgICAgIDxkaXYgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCIgY2RrU2Nyb2xsYWJsZT48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgPC90ZD5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtZGV0YWlsLXJvdy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRGV0YWlsUm93Q29tcG9uZW50IHtcbiAgQElucHV0KCkgY29udGVudENsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKSBjb250ZW50Q29sU3BhbiE6IG51bWJlcjtcbiAgQElucHV0KCkgbWF4SGVpZ2h0Pzogc3RyaW5nO1xufVxuIl19
@@ -1,58 +0,0 @@
1
- import { Component, HostBinding, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class TableLockedColumnComponent {
4
- constructor(el) {
5
- this.el = el;
6
- this.borderRight = false;
7
- this.borderLeft = false;
8
- }
9
- ngOnInit() {
10
- if (this.el.nativeElement.classList.contains('is-resizable')) {
11
- throw new Error(`Failed to lock table column because it was also resizable. Resizable table columns cannot currently be locked. Remove the 'is-resizable' class from THs of table columms that have the [ecTableLockedColumn] component.`);
12
- }
13
- if (this.el.nativeElement.attributes.getNamedItem('colspan')) {
14
- throw new Error(`Failed to lock table column because it had a 'colspan'. Locked columns do not currently support THs or TDs with a 'colspan'. Remove the 'colspan' attribute from table columns that have the [ecTableLockedColumn] component.`);
15
- }
16
- this.updatePositionAndBorder();
17
- }
18
- ngOnChanges() {
19
- if (this.options) {
20
- this.updatePositionAndBorder();
21
- }
22
- }
23
- updatePositionAndBorder() {
24
- if (typeof this.options.left === 'number' && typeof this.options.right === 'number') {
25
- throw new Error(`Failed to lock table column because it had a value for both left and right. Only left or right can have a value.`);
26
- }
27
- if (typeof this.options.left === 'number') {
28
- this.left = this.options.left;
29
- this.borderRight = this.options.border || false;
30
- }
31
- else {
32
- this.right = this.options.right;
33
- this.borderLeft = this.options.border || false;
34
- }
35
- }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableLockedColumnComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableLockedColumnComponent, selector: "[ecTableLockedColumn]", inputs: { options: ["ecTableLockedColumn", "options"] }, host: { properties: { "style.left.px": "this.left", "style.right.px": "this.right", "class.border-right": "this.borderRight", "class.border-left": "this.borderLeft" } }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{background-color:var(--ec-background-color);position:sticky!important;z-index:calc(var(--ec-z-index-sticky-header) + 1)!important}:host(th){z-index:calc(var(--ec-z-index-sticky-header) + 2)!important}\n"] }); }
38
- }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableLockedColumnComponent, decorators: [{
40
- type: Component,
41
- args: [{ selector: '[ecTableLockedColumn]', template: `<ng-content></ng-content>`, styles: [":host{background-color:var(--ec-background-color);position:sticky!important;z-index:calc(var(--ec-z-index-sticky-header) + 1)!important}:host(th){z-index:calc(var(--ec-z-index-sticky-header) + 2)!important}\n"] }]
42
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{
43
- type: Input,
44
- args: ['ecTableLockedColumn']
45
- }], left: [{
46
- type: HostBinding,
47
- args: ['style.left.px']
48
- }], right: [{
49
- type: HostBinding,
50
- args: ['style.right.px']
51
- }], borderRight: [{
52
- type: HostBinding,
53
- args: ['class.border-right']
54
- }], borderLeft: [{
55
- type: HostBinding,
56
- args: ['class.border-left']
57
- }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbG9ja2VkLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1sb2NrZWQtY29sdW1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDOztBQU9sSCxNQUFNLE9BQU8sMEJBQTBCO0lBZ0JyQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUxsQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQixlQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW1CLENBQUM7SUFFdkMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMseU5BQXlOLENBQUMsQ0FBQztRQUM3TyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrTkFBK04sQ0FBQyxDQUFDO1FBQ25QLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLGtIQUFrSCxDQUFDLENBQUM7UUFDdEksQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQzsrR0FoRFUsMEJBQTBCO21HQUExQiwwQkFBMEIscVRBSDNCLDJCQUEyQjs7NEZBRzFCLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx1QkFBdUIsWUFDdkIsMkJBQTJCOytFQUtQLE9BQU87c0JBQXBDLEtBQUs7dUJBQUMscUJBQXFCO2dCQUc1QixJQUFJO3NCQURILFdBQVc7dUJBQUMsZUFBZTtnQkFJNUIsS0FBSztzQkFESixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJN0IsV0FBVztzQkFEVixXQUFXO3VCQUFDLG9CQUFvQjtnQkFJakMsVUFBVTtzQkFEVCxXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsIEhvc3QsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZUxvY2tlZENvbHVtbl0nLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1sb2NrZWQtY29sdW1uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVMb2NrZWRDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCdlY1RhYmxlTG9ja2VkQ29sdW1uJykgb3B0aW9ucyE6IHsgYm9yZGVyOiBib29sZWFuLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciB9O1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubGVmdC5weCcpXG4gIGxlZnQ/OiBudW1iZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5yaWdodC5weCcpXG4gIHJpZ2h0PzogbnVtYmVyO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYm9yZGVyLXJpZ2h0JylcbiAgYm9yZGVyUmlnaHQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJvcmRlci1sZWZ0JylcbiAgYm9yZGVyTGVmdCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1yZXNpemFibGUnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jayB0YWJsZSBjb2x1bW4gYmVjYXVzZSBpdCB3YXMgYWxzbyByZXNpemFibGUuIFJlc2l6YWJsZSB0YWJsZSBjb2x1bW5zIGNhbm5vdCBjdXJyZW50bHkgYmUgbG9ja2VkLiBSZW1vdmUgdGhlICdpcy1yZXNpemFibGUnIGNsYXNzIGZyb20gVEhzIG9mIHRhYmxlIGNvbHVtbXMgdGhhdCBoYXZlIHRoZSBbZWNUYWJsZUxvY2tlZENvbHVtbl0gY29tcG9uZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2NvbHNwYW4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jayB0YWJsZSBjb2x1bW4gYmVjYXVzZSBpdCBoYWQgYSAnY29sc3BhbicuIExvY2tlZCBjb2x1bW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBUSHMgb3IgVERzIHdpdGggYSAnY29sc3BhbicuIFJlbW92ZSB0aGUgJ2NvbHNwYW4nIGF0dHJpYnV0ZSBmcm9tIHRhYmxlIGNvbHVtbnMgdGhhdCBoYXZlIHRoZSBbZWNUYWJsZUxvY2tlZENvbHVtbl0gY29tcG9uZW50LmApO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb25BbmRCb3JkZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25BbmRCb3JkZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uQW5kQm9yZGVyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmxlZnQgPT09ICdudW1iZXInICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMucmlnaHQgPT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NrIHRhYmxlIGNvbHVtbiBiZWNhdXNlIGl0IGhhZCBhIHZhbHVlIGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0LiBPbmx5IGxlZnQgb3IgcmlnaHQgY2FuIGhhdmUgYSB2YWx1ZS5gKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5sZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5vcHRpb25zLmxlZnQ7XG4gICAgICB0aGlzLmJvcmRlclJpZ2h0ID0gdGhpcy5vcHRpb25zLmJvcmRlciB8fCBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yaWdodCA9IHRoaXMub3B0aW9ucy5yaWdodDtcbiAgICAgIHRoaXMuYm9yZGVyTGVmdCA9IHRoaXMub3B0aW9ucy5ib3JkZXIgfHwgZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- export class TableMasterHeaderRowComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableMasterHeaderRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableMasterHeaderRowComponent, selector: "[ecTableMasterHeaderRow]", inputs: { hideTableMaster: "hideTableMaster" }, ngImport: i0, template: `<th *ngIf="!hideTableMaster"></th><ng-content></ng-content>`, isInline: true, styles: ["th{width:1.5rem;padding:.25rem 0!important;vertical-align:top}th ::ng-deep+th,th ::ng-deep+th.is-resizable{padding-left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
7
- }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableMasterHeaderRowComponent, decorators: [{
9
- type: Component,
10
- args: [{ selector: '[ecTableMasterHeaderRow]', template: `<th *ngIf="!hideTableMaster"></th><ng-content></ng-content>`, styles: ["th{width:1.5rem;padding:.25rem 0!important;vertical-align:top}th ::ng-deep+th,th ::ng-deep+th.is-resizable{padding-left:0}\n"] }]
11
- }], propDecorators: { hideTableMaster: [{
12
- type: Input
13
- }] } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLDZCQUE2QjsrR0FBN0IsNkJBQTZCO21HQUE3Qiw2QkFBNkIsZ0hBSDlCLDZEQUE2RDs7NEZBRzVELDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSwwQkFBMEIsWUFDMUIsNkRBQTZEOzhCQU92RCxlQUFlO3NCQUE5QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZU1hc3RlckhlYWRlclJvd10nLFxuICB0ZW1wbGF0ZTogYDx0aCAqbmdJZj1cIiFoaWRlVGFibGVNYXN0ZXJcIj48L3RoPjxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1tYXN0ZXItaGVhZGVyLXJvdy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlTWFzdGVySGVhZGVyUm93Q29tcG9uZW50IHtcbiAgLyoqIFVzZWQgdG8gaGlkZSB0aGUgaGVhZGVyIGFkZGVkIHRvIHRoZSB0YWJsZS4gVXNlZnVsIGlmIGEgdGFibGUgaXMgc2hhcmVkIGJldHdlZW4gdmlld3MgYW5kIG5vdCBhbGxcbiAgICogIHN1cHBvcnQgdGhlIHRhYmxlIG1hc3RlciBzY2VuYXJpb1xuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGhpZGVUYWJsZU1hc3Rlcj86IGJvb2xlYW47XG59XG4iXX0=