ng-kinintel 0.0.397 → 20.0.2

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 (184) hide show
  1. package/fesm2022/ng-kinintel.mjs +11874 -0
  2. package/fesm2022/ng-kinintel.mjs.map +1 -0
  3. package/index.d.ts +2818 -5
  4. package/package.json +6 -14
  5. package/esm2020/lib/components/alert-groups/alert-groups.component.mjs +0 -76
  6. package/esm2020/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.mjs +0 -83
  7. package/esm2020/lib/components/dashboard-editor/configure-item/configure-item.component.mjs +0 -853
  8. package/esm2020/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.mjs +0 -56
  9. package/esm2020/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.mjs +0 -114
  10. package/esm2020/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.mjs +0 -163
  11. package/esm2020/lib/components/dashboard-editor/configure-item/vis-network-options.json +0 -135
  12. package/esm2020/lib/components/dashboard-editor/dashboard-editor.component.mjs +0 -580
  13. package/esm2020/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.mjs +0 -15
  14. package/esm2020/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.mjs +0 -50
  15. package/esm2020/lib/components/dashboard-editor/item-component/item-component.component.mjs +0 -1226
  16. package/esm2020/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.mjs +0 -111
  17. package/esm2020/lib/components/dashboards/dashboards.component.mjs +0 -163
  18. package/esm2020/lib/components/dashboards/view-dashboard/view-dashboard.component.mjs +0 -429
  19. package/esm2020/lib/components/data-explorer/change-source-warning/change-source-warning.component.mjs +0 -20
  20. package/esm2020/lib/components/data-explorer/data-explorer.component.mjs +0 -243
  21. package/esm2020/lib/components/data-explorer/export-data/export-data.component.mjs +0 -62
  22. package/esm2020/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.mjs +0 -70
  23. package/esm2020/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.mjs +0 -190
  24. package/esm2020/lib/components/data-picker/data-picker.component.mjs +0 -79
  25. package/esm2020/lib/components/data-search/data-search.component.mjs +0 -11
  26. package/esm2020/lib/components/data-sharing-invite/data-sharing-invite.component.mjs +0 -52
  27. package/esm2020/lib/components/dataset/create-dataset/create-dataset.component.mjs +0 -47
  28. package/esm2020/lib/components/dataset/dataset-editor/available-columns/available-columns.component.mjs +0 -28
  29. package/esm2020/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.mjs +0 -344
  30. package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.mjs +0 -80
  31. package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.mjs +0 -54
  32. package/esm2020/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.mjs +0 -67
  33. package/esm2020/lib/components/dataset/dataset-editor/dataset-editor.component.mjs +0 -1134
  34. package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.mjs +0 -201
  35. package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.mjs +0 -25
  36. package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.mjs +0 -72
  37. package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.mjs +0 -62
  38. package/esm2020/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.mjs +0 -41
  39. package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.mjs +0 -78
  40. package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.mjs +0 -39
  41. package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.mjs +0 -75
  42. package/esm2020/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.mjs +0 -107
  43. package/esm2020/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.mjs +0 -20
  44. package/esm2020/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.mjs +0 -20
  45. package/esm2020/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.mjs +0 -58
  46. package/esm2020/lib/components/dataset/dataset-editor/share-query/share-query.component.mjs +0 -110
  47. package/esm2020/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.mjs +0 -20
  48. package/esm2020/lib/components/dataset/dataset.component.mjs +0 -294
  49. package/esm2020/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.mjs +0 -130
  50. package/esm2020/lib/components/datasource/create-datasource/api-access/api-access.component.mjs +0 -132
  51. package/esm2020/lib/components/datasource/create-datasource/create-datasource.component.mjs +0 -729
  52. package/esm2020/lib/components/datasource/create-datasource/import-data/import-data.component.mjs +0 -146
  53. package/esm2020/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.mjs +0 -165
  54. package/esm2020/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.mjs +0 -145
  55. package/esm2020/lib/components/datasource/datasource.component.mjs +0 -162
  56. package/esm2020/lib/components/datasource/document-datasource/document-datasource.component.mjs +0 -297
  57. package/esm2020/lib/components/export-project/export-project.component.mjs +0 -29
  58. package/esm2020/lib/components/feeds/feed/feed.component.mjs +0 -92
  59. package/esm2020/lib/components/feeds/feeds.component.mjs +0 -145
  60. package/esm2020/lib/components/job-tasks/job-tasks.component.mjs +0 -25
  61. package/esm2020/lib/components/marketplace/marketplace.component.mjs +0 -65
  62. package/esm2020/lib/components/metadata/metadata.component.mjs +0 -65
  63. package/esm2020/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.mjs +0 -113
  64. package/esm2020/lib/components/notification-groups/notification-groups.component.mjs +0 -86
  65. package/esm2020/lib/components/project-picker/project-picker.component.mjs +0 -118
  66. package/esm2020/lib/components/project-settings/project-link-selection/project-link-selection.component.mjs +0 -104
  67. package/esm2020/lib/components/project-settings/project-settings.component.mjs +0 -155
  68. package/esm2020/lib/components/query-caching/edit-query-cache/edit-query-cache.component.mjs +0 -51
  69. package/esm2020/lib/components/query-caching/query-cache-view/query-cache-view.component.mjs +0 -121
  70. package/esm2020/lib/components/query-caching/query-caching.component.mjs +0 -162
  71. package/esm2020/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.mjs +0 -45
  72. package/esm2020/lib/components/shared-with-me/shared-with-me.component.mjs +0 -174
  73. package/esm2020/lib/components/snapshots/snapshots.component.mjs +0 -244
  74. package/esm2020/lib/components/tag-picker/tag-picker.component.mjs +0 -74
  75. package/esm2020/lib/components/task-time-periods/task-time-periods.component.mjs +0 -55
  76. package/esm2020/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.mjs +0 -40
  77. package/esm2020/lib/guards/dashboard-changes.guard.mjs +0 -22
  78. package/esm2020/lib/kinintel-config.mjs +0 -3
  79. package/esm2020/lib/ng-kinintel.module.mjs +0 -437
  80. package/esm2020/lib/objects/action-event.mjs +0 -16
  81. package/esm2020/lib/services/alert.service.mjs +0 -52
  82. package/esm2020/lib/services/dashboard.service.mjs +0 -75
  83. package/esm2020/lib/services/data-processor.service.mjs +0 -56
  84. package/esm2020/lib/services/data-search.service.mjs +0 -36
  85. package/esm2020/lib/services/dataset.service.mjs +0 -187
  86. package/esm2020/lib/services/datasource.service.mjs +0 -93
  87. package/esm2020/lib/services/external.service.mjs +0 -33
  88. package/esm2020/lib/services/feed.service.mjs +0 -50
  89. package/esm2020/lib/services/notification.service.mjs +0 -41
  90. package/esm2020/lib/services/project.service.mjs +0 -130
  91. package/esm2020/lib/services/tag.service.mjs +0 -63
  92. package/esm2020/ng-kinintel.mjs +0 -5
  93. package/esm2020/public-api.mjs +0 -43
  94. package/fesm2015/ng-kinintel.mjs +0 -12182
  95. package/fesm2015/ng-kinintel.mjs.map +0 -1
  96. package/fesm2020/ng-kinintel.mjs +0 -11872
  97. package/fesm2020/ng-kinintel.mjs.map +0 -1
  98. package/lib/components/alert-groups/alert-groups.component.d.ts +0 -30
  99. package/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.d.ts +0 -28
  100. package/lib/components/dashboard-editor/configure-item/configure-item.component.d.ts +0 -256
  101. package/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.d.ts +0 -16
  102. package/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.d.ts +0 -59
  103. package/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.d.ts +0 -26
  104. package/lib/components/dashboard-editor/dashboard-editor.component.d.ts +0 -85
  105. package/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.d.ts +0 -8
  106. package/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.d.ts +0 -22
  107. package/lib/components/dashboard-editor/item-component/item-component.component.d.ts +0 -264
  108. package/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.d.ts +0 -30
  109. package/lib/components/dashboards/dashboards.component.d.ts +0 -56
  110. package/lib/components/dashboards/view-dashboard/view-dashboard.component.d.ts +0 -81
  111. package/lib/components/data-explorer/change-source-warning/change-source-warning.component.d.ts +0 -11
  112. package/lib/components/data-explorer/data-explorer.component.d.ts +0 -61
  113. package/lib/components/data-explorer/export-data/export-data.component.d.ts +0 -17
  114. package/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.d.ts +0 -25
  115. package/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.d.ts +0 -44
  116. package/lib/components/data-picker/data-picker.component.d.ts +0 -32
  117. package/lib/components/data-search/data-search.component.d.ts +0 -5
  118. package/lib/components/data-sharing-invite/data-sharing-invite.component.d.ts +0 -21
  119. package/lib/components/dataset/create-dataset/create-dataset.component.d.ts +0 -17
  120. package/lib/components/dataset/dataset-editor/available-columns/available-columns.component.d.ts +0 -12
  121. package/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.d.ts +0 -61
  122. package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.d.ts +0 -21
  123. package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.d.ts +0 -20
  124. package/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.d.ts +0 -19
  125. package/lib/components/dataset/dataset-editor/dataset-editor.component.d.ts +0 -131
  126. package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.d.ts +0 -63
  127. package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.d.ts +0 -11
  128. package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.d.ts +0 -20
  129. package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.d.ts +0 -16
  130. package/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.d.ts +0 -18
  131. package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.d.ts +0 -23
  132. package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.d.ts +0 -13
  133. package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.d.ts +0 -22
  134. package/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.d.ts +0 -27
  135. package/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.d.ts +0 -11
  136. package/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.d.ts +0 -11
  137. package/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.d.ts +0 -25
  138. package/lib/components/dataset/dataset-editor/share-query/share-query.component.d.ts +0 -41
  139. package/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.d.ts +0 -11
  140. package/lib/components/dataset/dataset.component.d.ts +0 -74
  141. package/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.d.ts +0 -26
  142. package/lib/components/datasource/create-datasource/api-access/api-access.component.d.ts +0 -31
  143. package/lib/components/datasource/create-datasource/create-datasource.component.d.ts +0 -112
  144. package/lib/components/datasource/create-datasource/import-data/import-data.component.d.ts +0 -28
  145. package/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.d.ts +0 -40
  146. package/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.d.ts +0 -34
  147. package/lib/components/datasource/datasource.component.d.ts +0 -46
  148. package/lib/components/datasource/document-datasource/document-datasource.component.d.ts +0 -64
  149. package/lib/components/export-project/export-project.component.d.ts +0 -9
  150. package/lib/components/feeds/feed/feed.component.d.ts +0 -30
  151. package/lib/components/feeds/feeds.component.d.ts +0 -47
  152. package/lib/components/job-tasks/job-tasks.component.d.ts +0 -11
  153. package/lib/components/marketplace/marketplace.component.d.ts +0 -42
  154. package/lib/components/metadata/metadata.component.d.ts +0 -24
  155. package/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.d.ts +0 -37
  156. package/lib/components/notification-groups/notification-groups.component.d.ts +0 -28
  157. package/lib/components/project-picker/project-picker.component.d.ts +0 -37
  158. package/lib/components/project-settings/project-link-selection/project-link-selection.component.d.ts +0 -32
  159. package/lib/components/project-settings/project-settings.component.d.ts +0 -40
  160. package/lib/components/query-caching/edit-query-cache/edit-query-cache.component.d.ts +0 -17
  161. package/lib/components/query-caching/query-cache-view/query-cache-view.component.d.ts +0 -35
  162. package/lib/components/query-caching/query-caching.component.d.ts +0 -38
  163. package/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.d.ts +0 -21
  164. package/lib/components/shared-with-me/shared-with-me.component.d.ts +0 -43
  165. package/lib/components/snapshots/snapshots.component.d.ts +0 -52
  166. package/lib/components/tag-picker/tag-picker.component.d.ts +0 -27
  167. package/lib/components/task-time-periods/task-time-periods.component.d.ts +0 -20
  168. package/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.d.ts +0 -17
  169. package/lib/guards/dashboard-changes.guard.d.ts +0 -11
  170. package/lib/kinintel-config.d.ts +0 -10
  171. package/lib/ng-kinintel.module.d.ts +0 -116
  172. package/lib/objects/action-event.d.ts +0 -12
  173. package/lib/services/alert.service.d.ts +0 -17
  174. package/lib/services/dashboard.service.d.ts +0 -25
  175. package/lib/services/data-processor.service.d.ts +0 -18
  176. package/lib/services/data-search.service.d.ts +0 -14
  177. package/lib/services/dataset.service.d.ts +0 -56
  178. package/lib/services/datasource.service.d.ts +0 -34
  179. package/lib/services/external.service.d.ts +0 -12
  180. package/lib/services/feed.service.d.ts +0 -19
  181. package/lib/services/notification.service.d.ts +0 -16
  182. package/lib/services/project.service.d.ts +0 -27
  183. package/lib/services/tag.service.d.ts +0 -19
  184. package/public-api.d.ts +0 -38
@@ -1,56 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/legacy-dialog";
5
- import * as i2 from "../../../../services/alert.service";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "@angular/material/legacy-button";
8
- import * as i5 from "@angular/material/icon";
9
- import * as i6 from "@angular/cdk/drag-drop";
10
- import * as i7 from "@angular/forms";
11
- import * as i8 from "@angular/material/legacy-select";
12
- import * as i9 from "@angular/material/legacy-core";
13
- import * as i10 from "@angular/material/legacy-slide-toggle";
14
- import * as i11 from "../../../dataset/dataset-editor/dataset-filters/dataset-filters.component";
15
- export class EditDashboardAlertComponent {
16
- constructor(dialogRef, data, alertService) {
17
- this.dialogRef = dialogRef;
18
- this.data = data;
19
- this.alertService = alertService;
20
- this.alert = {};
21
- this.filterFields = [];
22
- this.alertGroups = [];
23
- }
24
- ngOnInit() {
25
- this.alertService.getAlertGroups().toPromise().then(groups => {
26
- this.alertGroups = groups;
27
- });
28
- this.alert = this.data.alert || {
29
- filterTransformation: {
30
- logic: 'AND',
31
- filters: [{
32
- lhsExpression: '',
33
- rhsExpression: '',
34
- filterType: ''
35
- }],
36
- filterJunctions: []
37
- },
38
- matchRuleConfiguration: {
39
- matchType: 'equals',
40
- value: 1
41
- },
42
- enabled: true
43
- };
44
- this.filterFields = this.data.filterFields;
45
- }
46
- }
47
- EditDashboardAlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDashboardAlertComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
48
- EditDashboardAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditDashboardAlertComponent, selector: "ki-edit-dashboard-alert", host: { classAttribute: "dialog-wrapper" }, ngImport: i0, template: "<div class=\"dialog\" cdkDrag cdkDragRootElement=\".cdk-overlay-pane\">\n\n <div class=\"dialog-title\" cdkDragHandle>\n <h2 mat-dialog-title>Edit Alert</h2>\n\n <button mat-icon-button mat-dialog-close>\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content\">\n\n <div><b>Enable Alert</b></div>\n <mat-slide-toggle class=\"mb-4\" [(ngModel)]=\"alert.enabled\">\n <ng-template [ngIf]=\"alert.enabled\">Alerts enabled</ng-template>\n <ng-template [ngIf]=\"!alert.enabled\">Alerts disabled</ng-template>\n </mat-slide-toggle>\n\n <div class=\"my-2\"><b>Alert Title<span class=\"ml-1 text-red-600\">*</span></b></div>\n\n <input type=\"text\" class=\"w-full\" #alertTitle=\"ngModel\"\n [ngClass]=\"{'border border-red-600': alertTitle.invalid}\"\n [(ngModel)]=\"alert.title\" required>\n\n <div class=\"mt-2\"><b>Conditions</b></div>\n <ki-dataset-filters [filterFields]=\"filterFields\"\n [filterJunction]=\"alert.filterTransformation\"></ki-dataset-filters>\n\n <div class=\"my-2\"><b>Matches</b></div>\n <div class=\"align-center justify-between\">\n <mat-select class=\"mr-2 w-1/2\" [(ngModel)]=\"alert.matchRuleConfiguration.matchType\">\n <mat-option value=\"equals\">Equals</mat-option>\n <mat-option value=\"greater\">Greater than</mat-option>\n <mat-option value=\"less\">Less than</mat-option>\n </mat-select>\n <input class=\"mr-2 flex-1\" type=\"number\" [(ngModel)]=\"alert.matchRuleConfiguration.value\">\n <div>Rows</div>\n </div>\n\n <div class=\"my-2\"><b>Alert Group</b></div>\n\n <mat-select [(ngModel)]=\"alert.alertGroupId\">\n <mat-option *ngFor=\"let alertGroup of alertGroups\" [value]=\"alertGroup.id\">\n {{alertGroup.title}}\n </mat-option>\n </mat-select>\n\n <div class=\"my-2\"><b>Summary Template<span class=\"ml-1 text-red-600\">*</span></b></div>\n\n <input type=\"text\" class=\"w-full\" #summaryTemplate=\"ngModel\"\n [ngClass]=\"{'border border-red-600': summaryTemplate.invalid}\"\n [(ngModel)]=\"alert.summaryTemplate\" required>\n <small>Used for display on dashboard</small>\n\n <div class=\"my-2\"><b>Notification Template<span class=\"ml-1 text-red-600\">*</span></b></div>\n\n <textarea class=\"w-full\" rows=\"5\" #notificationTemplate=\"ngModel\"\n [ngClass]=\"{'border border-red-600': notificationTemplate.invalid}\"\n [(ngModel)]=\"alert.notificationTemplate\" required></textarea>\n <small>Used for the notification</small>\n\n <div class=\"my-2\"><b>Notification Call To Action</b></div>\n\n <input type=\"text\" class=\"w-full\" [(ngModel)]=\"alert.notificationCta\">\n <small>Used for providing a click through for this alert for eg. a dashboard.</small>\n\n </div>\n\n <div class=\"dialog-footer\">\n\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\n\n <button mat-flat-button color=\"primary\" [mat-dialog-close]=\"alert\"\n [disabled]=\"!alert.title || !alert.summaryTemplate || !alert.notificationTemplate\">\n {{alert.id ? 'Update' : 'Add'}} Alert\n </button>\n </div>\n\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatLegacyDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.MatLegacySlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i11.DatasetFiltersComponent, selector: "ki-dataset-filters", inputs: ["filterJunction", "filterFields", "joinFilterFields", "joinFieldsName", "openSide", "parameterValues"] }] });
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDashboardAlertComponent, decorators: [{
50
- type: Component,
51
- args: [{ selector: 'ki-edit-dashboard-alert', host: { class: 'dialog-wrapper' }, template: "<div class=\"dialog\" cdkDrag cdkDragRootElement=\".cdk-overlay-pane\">\n\n <div class=\"dialog-title\" cdkDragHandle>\n <h2 mat-dialog-title>Edit Alert</h2>\n\n <button mat-icon-button mat-dialog-close>\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content\">\n\n <div><b>Enable Alert</b></div>\n <mat-slide-toggle class=\"mb-4\" [(ngModel)]=\"alert.enabled\">\n <ng-template [ngIf]=\"alert.enabled\">Alerts enabled</ng-template>\n <ng-template [ngIf]=\"!alert.enabled\">Alerts disabled</ng-template>\n </mat-slide-toggle>\n\n <div class=\"my-2\"><b>Alert Title<span class=\"ml-1 text-red-600\">*</span></b></div>\n\n <input type=\"text\" class=\"w-full\" #alertTitle=\"ngModel\"\n [ngClass]=\"{'border border-red-600': alertTitle.invalid}\"\n [(ngModel)]=\"alert.title\" required>\n\n <div class=\"mt-2\"><b>Conditions</b></div>\n <ki-dataset-filters [filterFields]=\"filterFields\"\n [filterJunction]=\"alert.filterTransformation\"></ki-dataset-filters>\n\n <div class=\"my-2\"><b>Matches</b></div>\n <div class=\"align-center justify-between\">\n <mat-select class=\"mr-2 w-1/2\" [(ngModel)]=\"alert.matchRuleConfiguration.matchType\">\n <mat-option value=\"equals\">Equals</mat-option>\n <mat-option value=\"greater\">Greater than</mat-option>\n <mat-option value=\"less\">Less than</mat-option>\n </mat-select>\n <input class=\"mr-2 flex-1\" type=\"number\" [(ngModel)]=\"alert.matchRuleConfiguration.value\">\n <div>Rows</div>\n </div>\n\n <div class=\"my-2\"><b>Alert Group</b></div>\n\n <mat-select [(ngModel)]=\"alert.alertGroupId\">\n <mat-option *ngFor=\"let alertGroup of alertGroups\" [value]=\"alertGroup.id\">\n {{alertGroup.title}}\n </mat-option>\n </mat-select>\n\n <div class=\"my-2\"><b>Summary Template<span class=\"ml-1 text-red-600\">*</span></b></div>\n\n <input type=\"text\" class=\"w-full\" #summaryTemplate=\"ngModel\"\n [ngClass]=\"{'border border-red-600': summaryTemplate.invalid}\"\n [(ngModel)]=\"alert.summaryTemplate\" required>\n <small>Used for display on dashboard</small>\n\n <div class=\"my-2\"><b>Notification Template<span class=\"ml-1 text-red-600\">*</span></b></div>\n\n <textarea class=\"w-full\" rows=\"5\" #notificationTemplate=\"ngModel\"\n [ngClass]=\"{'border border-red-600': notificationTemplate.invalid}\"\n [(ngModel)]=\"alert.notificationTemplate\" required></textarea>\n <small>Used for the notification</small>\n\n <div class=\"my-2\"><b>Notification Call To Action</b></div>\n\n <input type=\"text\" class=\"w-full\" [(ngModel)]=\"alert.notificationCta\">\n <small>Used for providing a click through for this alert for eg. a dashboard.</small>\n\n </div>\n\n <div class=\"dialog-footer\">\n\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\n\n <button mat-flat-button color=\"primary\" [mat-dialog-close]=\"alert\"\n [disabled]=\"!alert.title || !alert.summaryTemplate || !alert.notificationTemplate\">\n {{alert.id ? 'Update' : 'Add'}} Alert\n </button>\n </div>\n\n</div>\n\n\n" }]
52
- }], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
53
- type: Inject,
54
- args: [MAT_DIALOG_DATA]
55
- }] }, { type: i2.AlertService }]; } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1kYXNoYm9hcmQtYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1lZGl0b3IvY29uZmlndXJlLWl0ZW0vZWRpdC1kYXNoYm9hcmQtYWxlcnQvZWRpdC1kYXNoYm9hcmQtYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1lZGl0b3IvY29uZmlndXJlLWl0ZW0vZWRpdC1kYXNoYm9hcmQtYWxlcnQvZWRpdC1kYXNoYm9hcmQtYWxlcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFDLHNCQUFzQixJQUFJLGVBQWUsRUFBcUMsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVM5SCxNQUFNLE9BQU8sMkJBQTJCO0lBTXBDLFlBQW1CLFNBQW9ELEVBQzNCLElBQVMsRUFDakMsWUFBMEI7UUFGM0IsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQU52QyxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ2hCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO0lBSzdCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJO1lBQzVCLG9CQUFvQixFQUFFO2dCQUNsQixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsQ0FBQzt3QkFDTixhQUFhLEVBQUUsRUFBRTt3QkFDakIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFVBQVUsRUFBRSxFQUFFO3FCQUNqQixDQUFDO2dCQUNGLGVBQWUsRUFBRSxFQUFFO2FBQ3RCO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3BCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixLQUFLLEVBQUUsQ0FBQzthQUNYO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUdGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDL0MsQ0FBQzs7eUhBbkNRLDJCQUEyQixvREFPaEIsZUFBZTs2R0FQMUIsMkJBQTJCLDJHQ1Z4Qyw0N0dBaUZBOzRGRHZFYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0kseUJBQXlCLFFBRzdCLEVBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFDOzswQkFTbEIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0xFR0FDWV9ESUFMT0dfREFUQSBhcyBNQVRfRElBTE9HX0RBVEEsIE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHtBbGVydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2tpLWVkaXQtZGFzaGJvYXJkLWFsZXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1kYXNoYm9hcmQtYWxlcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXQtZGFzaGJvYXJkLWFsZXJ0LmNvbXBvbmVudC5zYXNzJ10sXG4gICAgaG9zdDoge2NsYXNzOiAnZGlhbG9nLXdyYXBwZXInfVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0RGFzaGJvYXJkQWxlcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHVibGljIGFsZXJ0OiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgZmlsdGVyRmllbGRzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgYWxlcnRHcm91cHM6IGFueSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEVkaXREYXNoYm9hcmRBbGVydENvbXBvbmVudD4sXG4gICAgICAgICAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5nZXRBbGVydEdyb3VwcygpLnRvUHJvbWlzZSgpLnRoZW4oZ3JvdXBzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRHcm91cHMgPSBncm91cHM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWxlcnQgPSB0aGlzLmRhdGEuYWxlcnQgfHwge1xuICAgICAgICAgICAgZmlsdGVyVHJhbnNmb3JtYXRpb246IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgbGhzRXhwcmVzc2lvbjogJycsXG4gICAgICAgICAgICAgICAgICAgIHJoc0V4cHJlc3Npb246ICcnLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlOiAnJ1xuICAgICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgICAgIGZpbHRlckp1bmN0aW9uczogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXRjaFJ1bGVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbWF0Y2hUeXBlOiAnZXF1YWxzJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgfTtcblxuXG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdGhpcy5kYXRhLmZpbHRlckZpZWxkcztcbiAgICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkaWFsb2dcIiBjZGtEcmFnIGNka0RyYWdSb290RWxlbWVudD1cIi5jZGstb3ZlcmxheS1wYW5lXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLXRpdGxlXCIgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+RWRpdCBBbGVydDwvaDI+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0LWRpYWxvZy1jbG9zZT5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XG5cbiAgICAgICAgPGRpdj48Yj5FbmFibGUgQWxlcnQ8L2I+PC9kaXY+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwibWItNFwiIFsobmdNb2RlbCldPVwiYWxlcnQuZW5hYmxlZFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImFsZXJ0LmVuYWJsZWRcIj5BbGVydHMgZW5hYmxlZDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWFsZXJ0LmVuYWJsZWRcIj5BbGVydHMgZGlzYWJsZWQ8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj48Yj5BbGVydCBUaXRsZTxzcGFuIGNsYXNzPVwibWwtMSB0ZXh0LXJlZC02MDBcIj4qPC9zcGFuPjwvYj48L2Rpdj5cblxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInctZnVsbFwiICNhbGVydFRpdGxlPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2JvcmRlciBib3JkZXItcmVkLTYwMCc6IGFsZXJ0VGl0bGUuaW52YWxpZH1cIlxuICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbGVydC50aXRsZVwiIHJlcXVpcmVkPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+PGI+Q29uZGl0aW9uczwvYj48L2Rpdj5cbiAgICAgICAgPGtpLWRhdGFzZXQtZmlsdGVycyBbZmlsdGVyRmllbGRzXT1cImZpbHRlckZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlckp1bmN0aW9uXT1cImFsZXJ0LmZpbHRlclRyYW5zZm9ybWF0aW9uXCI+PC9raS1kYXRhc2V0LWZpbHRlcnM+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj48Yj5NYXRjaGVzPC9iPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24tY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJtci0yIHctMS8yXCIgWyhuZ01vZGVsKV09XCJhbGVydC5tYXRjaFJ1bGVDb25maWd1cmF0aW9uLm1hdGNoVHlwZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiZXF1YWxzXCI+RXF1YWxzPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiZ3JlYXRlclwiPkdyZWF0ZXIgdGhhbjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImxlc3NcIj5MZXNzIHRoYW48L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtci0yIGZsZXgtMVwiIHR5cGU9XCJudW1iZXJcIiBbKG5nTW9kZWwpXT1cImFsZXJ0Lm1hdGNoUnVsZUNvbmZpZ3VyYXRpb24udmFsdWVcIj5cbiAgICAgICAgICAgIDxkaXY+Um93czwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPjxiPkFsZXJ0IEdyb3VwPC9iPjwvZGl2PlxuXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiYWxlcnQuYWxlcnRHcm91cElkXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYWxlcnRHcm91cCBvZiBhbGVydEdyb3Vwc1wiIFt2YWx1ZV09XCJhbGVydEdyb3VwLmlkXCI+XG4gICAgICAgICAgICAgICAge3thbGVydEdyb3VwLnRpdGxlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+PGI+U3VtbWFyeSBUZW1wbGF0ZTxzcGFuIGNsYXNzPVwibWwtMSB0ZXh0LXJlZC02MDBcIj4qPC9zcGFuPjwvYj48L2Rpdj5cblxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInctZnVsbFwiICNzdW1tYXJ5VGVtcGxhdGU9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyIGJvcmRlci1yZWQtNjAwJzogc3VtbWFyeVRlbXBsYXRlLmludmFsaWR9XCJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWxlcnQuc3VtbWFyeVRlbXBsYXRlXCIgcmVxdWlyZWQ+XG4gICAgICAgIDxzbWFsbD5Vc2VkIGZvciBkaXNwbGF5IG9uIGRhc2hib2FyZDwvc21hbGw+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj48Yj5Ob3RpZmljYXRpb24gVGVtcGxhdGU8c3BhbiBjbGFzcz1cIm1sLTEgdGV4dC1yZWQtNjAwXCI+Kjwvc3Bhbj48L2I+PC9kaXY+XG5cbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsXCIgcm93cz1cIjVcIiAjbm90aWZpY2F0aW9uVGVtcGxhdGU9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyIGJvcmRlci1yZWQtNjAwJzogbm90aWZpY2F0aW9uVGVtcGxhdGUuaW52YWxpZH1cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbGVydC5ub3RpZmljYXRpb25UZW1wbGF0ZVwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XG4gICAgICAgIDxzbWFsbD5Vc2VkIGZvciB0aGUgbm90aWZpY2F0aW9uPC9zbWFsbD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPjxiPk5vdGlmaWNhdGlvbiBDYWxsIFRvIEFjdGlvbjwvYj48L2Rpdj5cblxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInctZnVsbFwiIFsobmdNb2RlbCldPVwiYWxlcnQubm90aWZpY2F0aW9uQ3RhXCI+XG4gICAgICAgIDxzbWFsbD5Vc2VkIGZvciBwcm92aWRpbmcgYSBjbGljayB0aHJvdWdoIGZvciB0aGlzIGFsZXJ0IGZvciBlZy4gYSBkYXNoYm9hcmQuPC9zbWFsbD5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1mb290ZXJcIj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZGlhbG9nLWNsb3NlPkNhbmNlbDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFttYXQtZGlhbG9nLWNsb3NlXT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFsZXJ0LnRpdGxlIHx8ICFhbGVydC5zdW1tYXJ5VGVtcGxhdGUgfHwgIWFsZXJ0Lm5vdGlmaWNhdGlvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7e2FsZXJ0LmlkID8gJ1VwZGF0ZScgOiAnQWRkJ319IEFsZXJ0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cblxuXG4iXX0=
@@ -1,114 +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 HtmlDocumentationComponent {
5
- constructor() {
6
- this.availableColumns = [];
7
- this.showData = false;
8
- this.Object = Object;
9
- this.documentation = [
10
- {
11
- title: 'HTML Classes',
12
- description: 'Available classes for styling HTML elements.',
13
- data: [
14
- {
15
- description: 'Change colour of text',
16
- classes: {
17
- Class: 'text-{colour}-{value}',
18
- '{colour}': 'red, blue, green, gray',
19
- '{value}': '100, 200, 300, ..., 900'
20
- }
21
- },
22
- {
23
- description: 'Change background colour',
24
- classes: {
25
- Class: 'bg-{colour}-{value}',
26
- '{colour}': 'red, blue, green, gray',
27
- '{value}': '100, 200, 300, ..., 900'
28
- }
29
- },
30
- {
31
- description: 'Add padding to an element.',
32
- classes: {
33
- Class: 'p{t|r|b|l}-{size}, py-{size}, px-{size}',
34
- '{size}': '0, 1, 1.5, 2, 2.5, ..., p-10',
35
- Value: '1 = .25rem, 2 = .5rem, 4 = 1rem'
36
- }
37
- },
38
- {
39
- description: 'Add margin to an element.',
40
- classes: {
41
- Class: 'm{t|r|b|l}-{size}, my-{size}, mx-{size}',
42
- '{size}': '0, 1, 1.5, 2, 2.5, ..., p-10',
43
- Value: '1 = .25rem, 2 = .5rem, 4 = 1rem'
44
- }
45
- },
46
- {
47
- description: 'Change font size',
48
- classes: {
49
- Class: 'text-{size}',
50
- '{size}': 'xs, sm, base, lg, xl, 2xl, ..., 9xl',
51
- Value: 'xs = .75rem, sm = .875rem, base = 1rem'
52
- }
53
- },
54
- {
55
- description: 'Change font weight',
56
- classes: {
57
- Class: 'font-{weight}',
58
- '{weight}': 'thin, light, normal, medium, bold',
59
- Value: 'thin = 100, light = 300, medium = 500, bold = 700'
60
- }
61
- }
62
- ]
63
- },
64
- {
65
- title: 'Dynamic Templating',
66
- description: 'Attribute and template functionality for iterating and conditioning',
67
- data: [
68
- {
69
- description: 'Iterate over whole dataset and display each item name.',
70
- classes: {
71
- Template: 'd-each-item="dataSet"',
72
- Example: '<div d-each-item="dataSet">[[item.name]]</div>'
73
- }
74
- },
75
- {
76
- description: 'Show/Hide element based on value.',
77
- classes: {
78
- Template: 'd-if="item.value"',
79
- Example: '<section d-if="item.value"></section>'
80
- }
81
- },
82
- {
83
- description: 'Dynamically add a class to an element.',
84
- classes: {
85
- Template: 'd-class-completed="item.completed"',
86
- Example: '<li d-class-completed="item.completed">[[item.name]]</li>'
87
- }
88
- }
89
- ]
90
- }
91
- ];
92
- }
93
- ngOnInit() {
94
- if (this.columns) {
95
- this.columns.subscribe(columns => {
96
- this.availableColumns = columns;
97
- });
98
- }
99
- }
100
- ngOnDestroy() {
101
- if (this.columns) {
102
- this.columns.unsubscribe();
103
- }
104
- }
105
- }
106
- HtmlDocumentationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HtmlDocumentationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
107
- HtmlDocumentationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: HtmlDocumentationComponent, selector: "ki-html-documentation", inputs: { columns: "columns" }, ngImport: i0, template: "<div class=\"max-w-3xl mx-auto divide-y-2 divide-gray-200\">\n <h2 class=\"mt-4 text-center text-xl font-extrabold text-gray-900\">\n Documentation\n </h2>\n <dl class=\"mt-6 space-y-6 divide-y divide-gray-200\">\n <ng-template ngFor let-doc [ngForOf]=\"documentation\">\n <div class=\"pt-6\">\n <dt class=\"text-lg\">\n <!-- Expand/collapse question button -->\n <button type=\"button\" (click)=\"doc.show = !doc.show\"\n class=\"text-left w-full flex justify-between items-start text-gray-400\"\n aria-controls=\"faq-0\" aria-expanded=\"false\">\n <span class=\"font-medium text-gray-900\"> {{doc.title}} </span>\n <span class=\"ml-6 h-7 flex items-center\">\n <svg [ngClass]=\"{'rotate-0': !doc.show, '-rotate-180': doc.show}\"\n class=\"h-6 w-6 transform\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"/>\n </svg>\n </span>\n </button>\n </dt>\n <dd class=\"mt-2\" *ngIf=\"doc.show\">\n <p class=\"text-base text-gray-500\">{{doc.description}}</p>\n <ng-template ngFor let-data [ngForOf]=\"doc.data\">\n <div class=\"mt-3 mb-2 text-gray-900\">{{data.description}}</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\"\n *ngFor=\"let key of Object.keys(data.classes)\">\n {{key}}\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr>\n <td class=\"p-2 text-sm \"\n [ngClass]=\"{'text-gray-900 font-semibold': i === 0, 'text-gray-500': i !== 0}\"\n *ngFor=\"let key of Object.keys(data.classes); let i = index\">\n {{data.classes[key]}}</td>\n </tr>\n </tbody>\n </table>\n </ng-template>\n </dd>\n </div>\n </ng-template>\n <!--AVAILABLE DATA FIELDS-->\n <div class=\"pt-6\">\n <dt class=\"text-lg\">\n <!-- Expand/collapse question button -->\n <button type=\"button\" (click)=\"showData = !showData\"\n class=\"text-left w-full flex justify-between items-start text-gray-400\"\n aria-controls=\"faq-0\" aria-expanded=\"false\">\n <span class=\"font-medium text-gray-900\"> Data Access </span>\n <span class=\"ml-6 h-7 flex items-center\">\n <svg [ngClass]=\"{'rotate-0': !showData, '-rotate-180': showData}\"\n class=\"h-6 w-6 transform\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"/>\n </svg>\n </span>\n </button>\n </dt>\n <dd class=\"mt-2\" *ngIf=\"showData\">\n <p class=\"text-base text-gray-500\">Access the underlying data via exposed variables.</p>\n <div class=\"mt-3 mb-2 text-gray-900\">Access top level parameters.</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Variable\n </th>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Notes\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr>\n <td class=\"p-2 text-sm text-gray-900 font-semibold\">\n {{\"{{parameterName\\}\\}\"}}\n </td>\n <td class=\"p-2 text-sm text-gray-500\">\n Access the value of parameters defined in the dataset.\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"mt-3 mb-2 text-gray-900\">Access the whole dataset.</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Variable\n </th>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Notes\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr>\n <td class=\"p-2 text-sm text-gray-900 font-semibold\">\n [[dataSet]]\n </td>\n <td class=\"p-2 text-sm text-gray-500\">\n The whole dataset can be access via the \"dataSet\" variable\n </td>\n </tr>\n </tbody>\n </table>\n <ng-template [ngIf]=\"availableColumns && availableColumns.length\">\n <div class=\"mt-3 mb-2 text-gray-900\">Access first row field values</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Variable\n </th>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Notes\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr *ngFor=\"let column of availableColumns\">\n <td class=\"p-2 text-sm text-gray-900 font-semibold\">\n [[{{column.name}}]]\n </td>\n <td class=\"p-2 text-sm text-gray-500\">\n {{column.title}}\n </td>\n </tr>\n </tbody>\n </table>\n </ng-template>\n </dd>\n </div>\n </dl>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HtmlDocumentationComponent, decorators: [{
109
- type: Component,
110
- args: [{ selector: 'ki-html-documentation', template: "<div class=\"max-w-3xl mx-auto divide-y-2 divide-gray-200\">\n <h2 class=\"mt-4 text-center text-xl font-extrabold text-gray-900\">\n Documentation\n </h2>\n <dl class=\"mt-6 space-y-6 divide-y divide-gray-200\">\n <ng-template ngFor let-doc [ngForOf]=\"documentation\">\n <div class=\"pt-6\">\n <dt class=\"text-lg\">\n <!-- Expand/collapse question button -->\n <button type=\"button\" (click)=\"doc.show = !doc.show\"\n class=\"text-left w-full flex justify-between items-start text-gray-400\"\n aria-controls=\"faq-0\" aria-expanded=\"false\">\n <span class=\"font-medium text-gray-900\"> {{doc.title}} </span>\n <span class=\"ml-6 h-7 flex items-center\">\n <svg [ngClass]=\"{'rotate-0': !doc.show, '-rotate-180': doc.show}\"\n class=\"h-6 w-6 transform\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"/>\n </svg>\n </span>\n </button>\n </dt>\n <dd class=\"mt-2\" *ngIf=\"doc.show\">\n <p class=\"text-base text-gray-500\">{{doc.description}}</p>\n <ng-template ngFor let-data [ngForOf]=\"doc.data\">\n <div class=\"mt-3 mb-2 text-gray-900\">{{data.description}}</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\"\n *ngFor=\"let key of Object.keys(data.classes)\">\n {{key}}\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr>\n <td class=\"p-2 text-sm \"\n [ngClass]=\"{'text-gray-900 font-semibold': i === 0, 'text-gray-500': i !== 0}\"\n *ngFor=\"let key of Object.keys(data.classes); let i = index\">\n {{data.classes[key]}}</td>\n </tr>\n </tbody>\n </table>\n </ng-template>\n </dd>\n </div>\n </ng-template>\n <!--AVAILABLE DATA FIELDS-->\n <div class=\"pt-6\">\n <dt class=\"text-lg\">\n <!-- Expand/collapse question button -->\n <button type=\"button\" (click)=\"showData = !showData\"\n class=\"text-left w-full flex justify-between items-start text-gray-400\"\n aria-controls=\"faq-0\" aria-expanded=\"false\">\n <span class=\"font-medium text-gray-900\"> Data Access </span>\n <span class=\"ml-6 h-7 flex items-center\">\n <svg [ngClass]=\"{'rotate-0': !showData, '-rotate-180': showData}\"\n class=\"h-6 w-6 transform\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"/>\n </svg>\n </span>\n </button>\n </dt>\n <dd class=\"mt-2\" *ngIf=\"showData\">\n <p class=\"text-base text-gray-500\">Access the underlying data via exposed variables.</p>\n <div class=\"mt-3 mb-2 text-gray-900\">Access top level parameters.</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Variable\n </th>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Notes\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr>\n <td class=\"p-2 text-sm text-gray-900 font-semibold\">\n {{\"{{parameterName\\}\\}\"}}\n </td>\n <td class=\"p-2 text-sm text-gray-500\">\n Access the value of parameters defined in the dataset.\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"mt-3 mb-2 text-gray-900\">Access the whole dataset.</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Variable\n </th>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Notes\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr>\n <td class=\"p-2 text-sm text-gray-900 font-semibold\">\n [[dataSet]]\n </td>\n <td class=\"p-2 text-sm text-gray-500\">\n The whole dataset can be access via the \"dataSet\" variable\n </td>\n </tr>\n </tbody>\n </table>\n <ng-template [ngIf]=\"availableColumns && availableColumns.length\">\n <div class=\"mt-3 mb-2 text-gray-900\">Access first row field values</div>\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Variable\n </th>\n <th scope=\"col\" class=\"p-2 text-left text-sm font-semibold text-gray-900\">\n Notes\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr *ngFor=\"let column of availableColumns\">\n <td class=\"p-2 text-sm text-gray-900 font-semibold\">\n [[{{column.name}}]]\n </td>\n <td class=\"p-2 text-sm text-gray-500\">\n {{column.title}}\n </td>\n </tr>\n </tbody>\n </table>\n </ng-template>\n </dd>\n </div>\n </dl>\n</div>\n" }]
111
- }], ctorParameters: function () { return []; }, propDecorators: { columns: [{
112
- type: Input
113
- }] } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1kb2N1bWVudGF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWtpbmludGVsL3NyYy9saWIvY29tcG9uZW50cy9kYXNoYm9hcmQtZWRpdG9yL2NvbmZpZ3VyZS1pdGVtL2h0bWwtZG9jdW1lbnRhdGlvbi9odG1sLWRvY3VtZW50YXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1lZGl0b3IvY29uZmlndXJlLWl0ZW0vaHRtbC1kb2N1bWVudGF0aW9uL2h0bWwtZG9jdW1lbnRhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7OztBQVFsRSxNQUFNLE9BQU8sMEJBQTBCO0lBMkZuQztRQXZGTyxxQkFBZ0IsR0FBUSxFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixXQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ2hCLGtCQUFhLEdBQUc7WUFDbkI7Z0JBQ0ksS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLFdBQVcsRUFBRSw4Q0FBOEM7Z0JBQzNELElBQUksRUFBRTtvQkFDRjt3QkFDSSxXQUFXLEVBQUUsdUJBQXVCO3dCQUNwQyxPQUFPLEVBQUU7NEJBQ0wsS0FBSyxFQUFFLHVCQUF1Qjs0QkFDOUIsVUFBVSxFQUFFLHdCQUF3Qjs0QkFDcEMsU0FBUyxFQUFFLHlCQUF5Qjt5QkFDdkM7cUJBQ0o7b0JBQ0Q7d0JBQ0ksV0FBVyxFQUFFLDBCQUEwQjt3QkFDdkMsT0FBTyxFQUFFOzRCQUNMLEtBQUssRUFBRSxxQkFBcUI7NEJBQzVCLFVBQVUsRUFBRSx3QkFBd0I7NEJBQ3BDLFNBQVMsRUFBRSx5QkFBeUI7eUJBQ3ZDO3FCQUNKO29CQUNEO3dCQUNJLFdBQVcsRUFBRSw0QkFBNEI7d0JBQ3pDLE9BQU8sRUFBRTs0QkFDTCxLQUFLLEVBQUUseUNBQXlDOzRCQUNoRCxRQUFRLEVBQUUsOEJBQThCOzRCQUN4QyxLQUFLLEVBQUUsaUNBQWlDO3lCQUMzQztxQkFDSjtvQkFDRDt3QkFDSSxXQUFXLEVBQUUsMkJBQTJCO3dCQUN4QyxPQUFPLEVBQUU7NEJBQ0wsS0FBSyxFQUFFLHlDQUF5Qzs0QkFDaEQsUUFBUSxFQUFFLDhCQUE4Qjs0QkFDeEMsS0FBSyxFQUFFLGlDQUFpQzt5QkFDM0M7cUJBQ0o7b0JBQ0Q7d0JBQ0ksV0FBVyxFQUFFLGtCQUFrQjt3QkFDL0IsT0FBTyxFQUFFOzRCQUNMLEtBQUssRUFBRSxhQUFhOzRCQUNwQixRQUFRLEVBQUUscUNBQXFDOzRCQUMvQyxLQUFLLEVBQUUsd0NBQXdDO3lCQUNsRDtxQkFDSjtvQkFDRDt3QkFDSSxXQUFXLEVBQUUsb0JBQW9CO3dCQUNqQyxPQUFPLEVBQUU7NEJBQ0wsS0FBSyxFQUFFLGVBQWU7NEJBQ3RCLFVBQVUsRUFBRSxtQ0FBbUM7NEJBQy9DLEtBQUssRUFBRSxtREFBbUQ7eUJBQzdEO3FCQUNKO2lCQUNKO2FBQ0o7WUFDRDtnQkFDSSxLQUFLLEVBQUUsb0JBQW9CO2dCQUMzQixXQUFXLEVBQUUscUVBQXFFO2dCQUNsRixJQUFJLEVBQUU7b0JBQ0Y7d0JBQ0ksV0FBVyxFQUFFLHdEQUF3RDt3QkFDckUsT0FBTyxFQUFFOzRCQUNMLFFBQVEsRUFBRSx1QkFBdUI7NEJBQ2pDLE9BQU8sRUFBRSxnREFBZ0Q7eUJBQzVEO3FCQUNKO29CQUNEO3dCQUNJLFdBQVcsRUFBRSxtQ0FBbUM7d0JBQ2hELE9BQU8sRUFBRTs0QkFDTCxRQUFRLEVBQUUsbUJBQW1COzRCQUM3QixPQUFPLEVBQUUsdUNBQXVDO3lCQUNuRDtxQkFDSjtvQkFDRDt3QkFDSSxXQUFXLEVBQUUsd0NBQXdDO3dCQUNyRCxPQUFPLEVBQUU7NEJBQ0wsUUFBUSxFQUFFLG9DQUFvQzs0QkFDOUMsT0FBTyxFQUFFLDJEQUEyRDt5QkFDdkU7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKLENBQUM7SUFHRixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUI7SUFDTCxDQUFDOzt3SEExR1EsMEJBQTBCOzRHQUExQiwwQkFBMEIsNkZDUnZDLDR0UEE4SUE7NEZEdElhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSx1QkFBdUI7MEVBTXhCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdraS1odG1sLWRvY3VtZW50YXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9odG1sLWRvY3VtZW50YXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2h0bWwtZG9jdW1lbnRhdGlvbi5jb21wb25lbnQuc2FzcyddXG59KVxuZXhwb3J0IGNsYXNzIEh0bWxEb2N1bWVudGF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgY29sdW1uczogU3ViamVjdDxhbnk+O1xuXG4gICAgcHVibGljIGF2YWlsYWJsZUNvbHVtbnM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBzaG93RGF0YSA9IGZhbHNlO1xuICAgIHB1YmxpYyBPYmplY3QgPSBPYmplY3Q7XG4gICAgcHVibGljIGRvY3VtZW50YXRpb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnSFRNTCBDbGFzc2VzJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXZhaWxhYmxlIGNsYXNzZXMgZm9yIHN0eWxpbmcgSFRNTCBlbGVtZW50cy4nLFxuICAgICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDaGFuZ2UgY29sb3VyIG9mIHRleHQnLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDbGFzczogJ3RleHQte2NvbG91cn0te3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICAgICAgICAne2NvbG91cn0nOiAncmVkLCBibHVlLCBncmVlbiwgZ3JheScsXG4gICAgICAgICAgICAgICAgICAgICAgICAne3ZhbHVlfSc6ICcxMDAsIDIwMCwgMzAwLCAuLi4sIDkwMCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NoYW5nZSBiYWNrZ3JvdW5kIGNvbG91cicsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzOiAnYmcte2NvbG91cn0te3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICAgICAgICAne2NvbG91cn0nOiAncmVkLCBibHVlLCBncmVlbiwgZ3JheScsXG4gICAgICAgICAgICAgICAgICAgICAgICAne3ZhbHVlfSc6ICcxMDAsIDIwMCwgMzAwLCAuLi4sIDkwMCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FkZCBwYWRkaW5nIHRvIGFuIGVsZW1lbnQuJyxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICdwe3R8cnxifGx9LXtzaXplfSwgcHkte3NpemV9LCBweC17c2l6ZX0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3tzaXplfSc6ICcwLCAxLCAxLjUsIDIsIDIuNSwgLi4uLCBwLTEwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlOiAnMSA9IC4yNXJlbSwgMiA9IC41cmVtLCA0ID0gMXJlbSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FkZCBtYXJnaW4gdG8gYW4gZWxlbWVudC4nLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDbGFzczogJ217dHxyfGJ8bH0te3NpemV9LCBteS17c2l6ZX0sIG14LXtzaXplfScsXG4gICAgICAgICAgICAgICAgICAgICAgICAne3NpemV9JzogJzAsIDEsIDEuNSwgMiwgMi41LCAuLi4sIHAtMTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWU6ICcxID0gLjI1cmVtLCAyID0gLjVyZW0sIDQgPSAxcmVtJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhbmdlIGZvbnQgc2l6ZScsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzOiAndGV4dC17c2l6ZX0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3tzaXplfSc6ICd4cywgc20sIGJhc2UsIGxnLCB4bCwgMnhsLCAuLi4sIDl4bCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZTogJ3hzID0gLjc1cmVtLCBzbSA9IC44NzVyZW0sIGJhc2UgPSAxcmVtJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhbmdlIGZvbnQgd2VpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICdmb250LXt3ZWlnaHR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd7d2VpZ2h0fSc6ICd0aGluLCBsaWdodCwgbm9ybWFsLCBtZWRpdW0sIGJvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWU6ICd0aGluID0gMTAwLCBsaWdodCA9IDMwMCwgbWVkaXVtID0gNTAwLCBib2xkID0gNzAwJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0R5bmFtaWMgVGVtcGxhdGluZycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F0dHJpYnV0ZSBhbmQgdGVtcGxhdGUgZnVuY3Rpb25hbGl0eSBmb3IgaXRlcmF0aW5nIGFuZCBjb25kaXRpb25pbmcnLFxuICAgICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdJdGVyYXRlIG92ZXIgd2hvbGUgZGF0YXNldCBhbmQgZGlzcGxheSBlYWNoIGl0ZW0gbmFtZS4nLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZTogJ2QtZWFjaC1pdGVtPVwiZGF0YVNldFwiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6ICc8ZGl2IGQtZWFjaC1pdGVtPVwiZGF0YVNldFwiPltbaXRlbS5uYW1lXV08L2Rpdj4nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTaG93L0hpZGUgZWxlbWVudCBiYXNlZCBvbiB2YWx1ZS4nLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZTogJ2QtaWY9XCJpdGVtLnZhbHVlXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZTogJzxzZWN0aW9uIGQtaWY9XCJpdGVtLnZhbHVlXCI+PC9zZWN0aW9uPidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0R5bmFtaWNhbGx5IGFkZCBhIGNsYXNzIHRvIGFuIGVsZW1lbnQuJyxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGU6ICdkLWNsYXNzLWNvbXBsZXRlZD1cIml0ZW0uY29tcGxldGVkXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZTogJzxsaSBkLWNsYXNzLWNvbXBsZXRlZD1cIml0ZW0uY29tcGxldGVkXCI+W1tpdGVtLm5hbWVdXTwvbGk+J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuc3Vic2NyaWJlKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm1heC13LTN4bCBteC1hdXRvIGRpdmlkZS15LTIgZGl2aWRlLWdyYXktMjAwXCI+XG4gICAgPGgyIGNsYXNzPVwibXQtNCB0ZXh0LWNlbnRlciB0ZXh0LXhsIGZvbnQtZXh0cmFib2xkIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgRG9jdW1lbnRhdGlvblxuICAgIDwvaDI+XG4gICAgPGRsIGNsYXNzPVwibXQtNiBzcGFjZS15LTYgZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtZG9jIFtuZ0Zvck9mXT1cImRvY3VtZW50YXRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC02XCI+XG4gICAgICAgICAgICAgICAgPGR0IGNsYXNzPVwidGV4dC1sZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBxdWVzdGlvbiBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkb2Muc2hvdyA9ICFkb2Muc2hvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxlZnQgdy1mdWxsIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IHRleHQtZ3JheS00MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJmYXEtMFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwXCI+IHt7ZG9jLnRpdGxlfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC02IGgtNyBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJ7J3JvdGF0ZS0wJzogIWRvYy5zaG93LCAnLXJvdGF0ZS0xODAnOiBkb2Muc2hvd31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtNiB3LTYgdHJhbnNmb3JtXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjJcIiBkPVwiTTE5IDlsLTcgNy03LTdcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2R0PlxuICAgICAgICAgICAgICAgIDxkZCBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImRvYy5zaG93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtZ3JheS01MDBcIj57e2RvYy5kZXNjcmlwdGlvbn19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWRhdGEgW25nRm9yT2ZdPVwiZG9jLmRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTIgdGV4dC1ncmF5LTkwMFwiPnt7ZGF0YS5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJtaW4tdy1mdWxsIGRpdmlkZS15IGRpdmlkZS1ncmF5LTMwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwicC0yIHRleHQtbGVmdCB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQga2V5IG9mIE9iamVjdC5rZXlzKGRhdGEuY2xhc3NlcylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7a2V5fX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTIgdGV4dC1zbSAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1ncmF5LTkwMCBmb250LXNlbWlib2xkJzogaSA9PT0gMCwgJ3RleHQtZ3JheS01MDAnOiBpICE9PSAwfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQga2V5IG9mIE9iamVjdC5rZXlzKGRhdGEuY2xhc3Nlcyk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YS5jbGFzc2VzW2tleV19fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwhLS1BVkFJTEFCTEUgREFUQSBGSUVMRFMtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB0LTZcIj5cbiAgICAgICAgICAgIDxkdCBjbGFzcz1cInRleHQtbGdcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBxdWVzdGlvbiBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNob3dEYXRhID0gIXNob3dEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sZWZ0IHctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydCB0ZXh0LWdyYXktNDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJmYXEtMFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDBcIj4gRGF0YSBBY2Nlc3MgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTYgaC03IGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInsncm90YXRlLTAnOiAhc2hvd0RhdGEsICctcm90YXRlLTE4MCc6IHNob3dEYXRhfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC02IHctNiB0cmFuc2Zvcm1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNMTkgOWwtNyA3LTctN1wiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2R0PlxuICAgICAgICAgICAgPGRkIGNsYXNzPVwibXQtMlwiICpuZ0lmPVwic2hvd0RhdGFcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWdyYXktNTAwXCI+QWNjZXNzIHRoZSB1bmRlcmx5aW5nIGRhdGEgdmlhIGV4cG9zZWQgdmFyaWFibGVzLjwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtYi0yIHRleHQtZ3JheS05MDBcIj5BY2Nlc3MgdG9wIGxldmVsIHBhcmFtZXRlcnMuPC9kaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwibWluLXctZnVsbCBkaXZpZGUteSBkaXZpZGUtZ3JheS0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiYmctZ3JheS01MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInAtMiB0ZXh0LWxlZnQgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwicC0yIHRleHQtbGVmdCB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDAgYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0yIHRleHQtc20gdGV4dC1ncmF5LTkwMCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcInt7cGFyYW1ldGVyTmFtZVxcfVxcfVwifX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTIgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSB2YWx1ZSBvZiBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIGRhdGFzZXQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMiB0ZXh0LWdyYXktOTAwXCI+QWNjZXNzIHRoZSB3aG9sZSBkYXRhc2V0LjwvZGl2PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cIm1pbi13LWZ1bGwgZGl2aWRlLXkgZGl2aWRlLWdyYXktMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTIgdGV4dC1sZWZ0IHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInAtMiB0ZXh0LWxlZnQgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMiB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZGF0YVNldF1dXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0yIHRleHQtc20gdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB3aG9sZSBkYXRhc2V0IGNhbiBiZSBhY2Nlc3MgdmlhIHRoZSBcImRhdGFTZXRcIiB2YXJpYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJhdmFpbGFibGVDb2x1bW5zICYmIGF2YWlsYWJsZUNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTIgdGV4dC1ncmF5LTkwMFwiPkFjY2VzcyBmaXJzdCByb3cgZmllbGQgdmFsdWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cIm1pbi13LWZ1bGwgZGl2aWRlLXkgZGl2aWRlLWdyYXktMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJiZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTIgdGV4dC1sZWZ0IHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInAtMiB0ZXh0LWxlZnQgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDAgYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGF2YWlsYWJsZUNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTIgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1t7e2NvbHVtbi5uYW1lfX1dXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0yIHRleHQtc20gdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2RkPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuPC9kaXY+XG4iXX0=
@@ -1,163 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import moment from 'moment';
3
- import * as lodash from 'lodash';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../../../services/dashboard.service";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/material/legacy-input";
8
- import * as i4 from "@angular/forms";
9
- import * as i5 from "@angular/material/legacy-checkbox";
10
- const _ = lodash.default;
11
- export class TableCellFormatterComponent {
12
- constructor(dashboardService) {
13
- this.dashboardService = dashboardService;
14
- this.data = {};
15
- this.currencies = [];
16
- this.dashboards = [];
17
- this.sharedDashboards = [];
18
- this.privateDashboards = [];
19
- this.dashboardParameters = [];
20
- this.actionEvents = [];
21
- this.dateFormats = [
22
- {
23
- title: 'None',
24
- value: null
25
- },
26
- {
27
- title: moment().format('dddd, D MMMM YYYY'),
28
- value: 'dddd, D MMMM YYYY'
29
- },
30
- {
31
- title: moment().format('ddd, D MMM YYYY'),
32
- value: 'ddd, D MMM YYYY'
33
- },
34
- {
35
- title: moment().format('D MMMM YYYY'),
36
- value: 'D MMMM YYYY'
37
- },
38
- {
39
- title: moment().format('D MMM YYYY'),
40
- value: 'D MMM YYYY'
41
- },
42
- {
43
- title: moment().format('D MMMM'),
44
- value: 'D MMMM'
45
- },
46
- {
47
- title: moment().format('MMM D'),
48
- value: 'MMM D'
49
- },
50
- {
51
- title: moment().format('MMMM YYYY'),
52
- value: 'MMMM YYYY'
53
- },
54
- {
55
- title: moment().format('MMMM'),
56
- value: 'MMMM'
57
- },
58
- {
59
- title: moment().format('YYYY'),
60
- value: 'YYYY'
61
- },
62
- {
63
- title: moment().format('D/M/YYYY'),
64
- value: 'D/M/YYYY'
65
- },
66
- {
67
- title: moment().format('DD/MM/YYYY'),
68
- value: 'DD/MM/YYYY'
69
- },
70
- {
71
- title: moment().format('YYYY-MM-DD'),
72
- value: 'YYYY-MM-DD'
73
- }
74
- ];
75
- this.timeFormats = [
76
- {
77
- title: 'None',
78
- value: null
79
- },
80
- {
81
- title: moment().format('h a'),
82
- value: 'ha'
83
- },
84
- {
85
- title: moment().format('h:mm a'),
86
- value: 'h:mm a'
87
- },
88
- {
89
- title: moment().format('h:mm:ss a'),
90
- value: 'h:mm:ss a'
91
- },
92
- {
93
- title: moment().format('HH:mm'),
94
- value: 'HH:mm'
95
- },
96
- {
97
- title: moment().format('HH:mm:ss'),
98
- value: 'HH:mm:ss'
99
- }
100
- ];
101
- }
102
- ngOnInit() {
103
- if (this.data.linkType === 'dashboard' && this.data.dashboardLink) {
104
- this.dashboardParamUpdate(this.data.dashboardLink);
105
- }
106
- }
107
- selectOption(c1, c2) {
108
- if (!c2) {
109
- return true;
110
- }
111
- return c1.value === c2.value;
112
- }
113
- ctaSelectOption(c1, c2) {
114
- return c1 === c2;
115
- }
116
- setDecimalValue(value) {
117
- if (value === 'undefined') {
118
- delete this.data.decimal;
119
- }
120
- }
121
- async dashboardParamUpdate(selection) {
122
- if (!this.data.dashboardLinkParams || Array.isArray(this.data.dashboardLinkParams)) {
123
- this.data.dashboardLinkParams = {};
124
- }
125
- const dashboard = await this.dashboardService.getDashboard(selection.value);
126
- if (dashboard.layoutSettings.parameters) {
127
- this.dashboardParameters = _.values(dashboard.layoutSettings.parameters);
128
- setTimeout(() => {
129
- const el = document.getElementsByClassName('dashboard-param-pick').item(0);
130
- if (el) {
131
- el.scrollIntoView();
132
- }
133
- }, 0);
134
- }
135
- }
136
- }
137
- TableCellFormatterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableCellFormatterComponent, deps: [{ token: i1.DashboardService }], target: i0.ɵɵFactoryTarget.Component });
138
- TableCellFormatterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableCellFormatterComponent, selector: "ki-table-cell-formatter", inputs: { type: "type", data: "data", currencies: "currencies", openSide: "openSide", dataset: "dataset", dashboards: "dashboards", sharedDashboards: "sharedDashboards", privateDashboards: "privateDashboards", dashboardParameters: "dashboardParameters", actionEvents: "actionEvents" }, ngImport: i0, template: "<ng-template [ngIf]=\"type === 'number'\">\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.decimal\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'currency'\">\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.decimal\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n\n <div class=\"mb-4 flex items-center\">\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"data.thousandsSeparator\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Thousands Separator</p>\n </div>\n\n <label class=\"mb-4\">\n Currency\n <select matNativeControl [compareWith]=\"selectOption\" [(ngModel)]=\"data.currency\">\n <option value=\"\">-- Select Currency --</option>\n <option [ngValue]=\"currency\" *ngFor=\"let currency of currencies\">\n {{currency.name}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'percentage'\">\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.decimal\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n\n <div class=\"mb-4 flex items-center\">\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"data.thousandsSeparator\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Thousands Separator</p>\n </div>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'datetime'\">\n <label class=\"mb-2\">\n Date Format\n <select matNativeControl [(ngModel)]=\"data.dateFormat\">\n <option *ngFor=\"let format of dateFormats\"\n [value]=\"format.value\">\n {{format.title}}\n </option>\n </select>\n </label>\n <label class=\"mb-2\">\n Time Format\n <select matNativeControl [(ngModel)]=\"data.timeFormat\">\n <option *ngFor=\"let format of timeFormats\"\n [value]=\"format.value\">\n {{format.title}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'comparison'\">\n <label class=\"mb-2\">\n Select Column to compare\n <select matNativeControl [(ngModel)]=\"data.comparisonColumn\">\n <option [value]=\"undefined\">-- Select Column --</option>\n <ng-template [ngIf]=\"dataset\">\n <option *ngFor=\"let column of dataset.columns\"\n [value]=\"column.name\">\n {{column.title}}\n </option>\n </ng-template>\n </select>\n </label>\n\n <div class=\"mb-4 flex items-center\">\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"data.comparisonPercentage\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Display Change as Percentage</p>\n </div>\n\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.comparisonDecimals\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'link'\">\n <label class=\"mb-2\">\n Link Settings\n <select matNativeControl [(ngModel)]=\"data.linkType\">\n <option value=\"\">External Link</option>\n <option value=\"custom\">Custom Link</option>\n <option value=\"dashboard\">Existing Dashboard</option>\n </select>\n <small class=\"font-normal\">Select the destination for the action link</small>\n </label>\n\n <ng-template [ngIf]=\"data.linkType === 'custom'\">\n <p>Please enter the link for this call to action.</p>\n\n <label class=\"mb-2\">\n Link\n <input type=\"text\" [(ngModel)]=\"data.customLink\">\n </label>\n </ng-template>\n\n <ng-template [ngIf]=\"data.linkType === 'dashboard'\">\n <label class=\"mb-2\">\n Select Dashboard\n <select matNativeControl [(ngModel)]=\"data.dashboardLink\"\n [compareWith]=\"selectOption\" (ngModelChange)=\"dashboardParamUpdate($event)\">\n <optgroup label=\"Dashboards\">\n <option *ngFor=\"let dashboard of dashboards\"\n [ngValue]=\"{value: dashboard.id, label: dashboard.title}\">\n {{dashboard.title}}\n </option>\n </optgroup>\n <optgroup label=\"Shared Dashboards\">\n <option *ngFor=\"let dashboard of sharedDashboards\"\n [ngValue]=\"{value: dashboard.id, label: dashboard.title}\">\n {{dashboard.title}}\n </option>\n </optgroup>\n <optgroup label=\"Private Dashboards\" *ngIf=\"privateDashboards.length\">\n <option *ngFor=\"let dashboard of privateDashboards\"\n [ngValue]=\"{value: dashboard.id, label: dashboard.title}\">\n {{dashboard.title}}\n </option>\n </optgroup>\n </select>\n <small class=\"font-normal\">Select the destination for the action link</small>\n </label>\n </ng-template>\n\n <ng-template [ngIf]=\"data.dashboardLinkParams && dashboardParameters.length\">\n <p>Please enter the following parameters to use with this dashboard</p>\n\n <ng-template ngFor let-param [ngForOf]=\"dashboardParameters\">\n <label>{{param.title}}</label>\n <label *ngIf=\"!data.dashboardLinkParams['custom-'+param.name]\"\n class=\"mb-2 dashboard-param-pick\">\n <select matNativeControl [(ngModel)]=\"data.dashboardLinkParams[param.name]\"\n [compareWith]=\"ctaSelectOption\">\n <option>-- Select Value --</option>\n <ng-template [ngIf]=\"dataset\">\n <option *ngFor=\"let column of dataset.columns\"\n [value]=\"'[['+column.name+']]'\">\n {{column.title}}\n </option>\n </ng-template>\n </select>\n </label>\n <div class=\"mb-2 flex items-center\">\n <mat-checkbox class=\"mr-2\"\n [(ngModel)]=\"data.dashboardLinkParams['custom-'+param.name]\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Use custom value</p>\n </div>\n <label class=\"mb-2 dashboard-param-pick\">\n <input type=\"text\" *ngIf=\"data.dashboardLinkParams['custom-'+param.name]\"\n placeholder=\"Enter custom parameter value\"\n [(ngModel)]=\"data.dashboardLinkParams[param.name]\">\n </label>\n </ng-template>\n </ng-template>\n\n\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'custom'\">\n <div class=\"flex items-center mb-2 justify-between\">\n <div class=\"font-semibold\">Enter the HTML/Text for this item</div>\n <a (click)=\"openSide.next(true)\"\n class=\"text-xs ml-2 hover:underline flex items-center primary\">\n view help docs&nbsp;\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\"\n fill=\"currentColor\">\n <path\n d=\"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z\"/>\n <path\n d=\"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z\"/>\n </svg>\n </a>\n </div>\n\n <textarea class=\"font-mono w-full\"\n cols=\"30\" rows=\"10\" [(ngModel)]=\"data.customText\"></textarea>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'action'\">\n <label class=\"mb-2\">\n Action Event\n <select matNativeControl [(ngModel)]=\"data.actionEvent\">\n <option *ngFor=\"let actionEvent of actionEvents\" [value]=\"actionEvent.name\">\n {{actionEvent.title}}\n </option>\n </select>\n <small class=\"font-normal\">Select the action event to be triggered when this item is clicked.</small>\n </label>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "component", type: i5.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableCellFormatterComponent, decorators: [{
140
- type: Component,
141
- args: [{ selector: 'ki-table-cell-formatter', template: "<ng-template [ngIf]=\"type === 'number'\">\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.decimal\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'currency'\">\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.decimal\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n\n <div class=\"mb-4 flex items-center\">\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"data.thousandsSeparator\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Thousands Separator</p>\n </div>\n\n <label class=\"mb-4\">\n Currency\n <select matNativeControl [compareWith]=\"selectOption\" [(ngModel)]=\"data.currency\">\n <option value=\"\">-- Select Currency --</option>\n <option [ngValue]=\"currency\" *ngFor=\"let currency of currencies\">\n {{currency.name}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'percentage'\">\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.decimal\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n\n <div class=\"mb-4 flex items-center\">\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"data.thousandsSeparator\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Thousands Separator</p>\n </div>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'datetime'\">\n <label class=\"mb-2\">\n Date Format\n <select matNativeControl [(ngModel)]=\"data.dateFormat\">\n <option *ngFor=\"let format of dateFormats\"\n [value]=\"format.value\">\n {{format.title}}\n </option>\n </select>\n </label>\n <label class=\"mb-2\">\n Time Format\n <select matNativeControl [(ngModel)]=\"data.timeFormat\">\n <option *ngFor=\"let format of timeFormats\"\n [value]=\"format.value\">\n {{format.title}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'comparison'\">\n <label class=\"mb-2\">\n Select Column to compare\n <select matNativeControl [(ngModel)]=\"data.comparisonColumn\">\n <option [value]=\"undefined\">-- Select Column --</option>\n <ng-template [ngIf]=\"dataset\">\n <option *ngFor=\"let column of dataset.columns\"\n [value]=\"column.name\">\n {{column.title}}\n </option>\n </ng-template>\n </select>\n </label>\n\n <div class=\"mb-4 flex items-center\">\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"data.comparisonPercentage\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Display Change as Percentage</p>\n </div>\n\n <label class=\"mb-2\">\n Decimals\n <select matNativeControl [(ngModel)]=\"data.comparisonDecimals\"\n (ngModelChange)=\"setDecimalValue($event)\">\n <option *ngFor=\"let decimal of [0,1,2,3,4,5,6,7,8,9]\"\n [value]=\"decimal\">\n {{decimal}}\n </option>\n </select>\n </label>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'link'\">\n <label class=\"mb-2\">\n Link Settings\n <select matNativeControl [(ngModel)]=\"data.linkType\">\n <option value=\"\">External Link</option>\n <option value=\"custom\">Custom Link</option>\n <option value=\"dashboard\">Existing Dashboard</option>\n </select>\n <small class=\"font-normal\">Select the destination for the action link</small>\n </label>\n\n <ng-template [ngIf]=\"data.linkType === 'custom'\">\n <p>Please enter the link for this call to action.</p>\n\n <label class=\"mb-2\">\n Link\n <input type=\"text\" [(ngModel)]=\"data.customLink\">\n </label>\n </ng-template>\n\n <ng-template [ngIf]=\"data.linkType === 'dashboard'\">\n <label class=\"mb-2\">\n Select Dashboard\n <select matNativeControl [(ngModel)]=\"data.dashboardLink\"\n [compareWith]=\"selectOption\" (ngModelChange)=\"dashboardParamUpdate($event)\">\n <optgroup label=\"Dashboards\">\n <option *ngFor=\"let dashboard of dashboards\"\n [ngValue]=\"{value: dashboard.id, label: dashboard.title}\">\n {{dashboard.title}}\n </option>\n </optgroup>\n <optgroup label=\"Shared Dashboards\">\n <option *ngFor=\"let dashboard of sharedDashboards\"\n [ngValue]=\"{value: dashboard.id, label: dashboard.title}\">\n {{dashboard.title}}\n </option>\n </optgroup>\n <optgroup label=\"Private Dashboards\" *ngIf=\"privateDashboards.length\">\n <option *ngFor=\"let dashboard of privateDashboards\"\n [ngValue]=\"{value: dashboard.id, label: dashboard.title}\">\n {{dashboard.title}}\n </option>\n </optgroup>\n </select>\n <small class=\"font-normal\">Select the destination for the action link</small>\n </label>\n </ng-template>\n\n <ng-template [ngIf]=\"data.dashboardLinkParams && dashboardParameters.length\">\n <p>Please enter the following parameters to use with this dashboard</p>\n\n <ng-template ngFor let-param [ngForOf]=\"dashboardParameters\">\n <label>{{param.title}}</label>\n <label *ngIf=\"!data.dashboardLinkParams['custom-'+param.name]\"\n class=\"mb-2 dashboard-param-pick\">\n <select matNativeControl [(ngModel)]=\"data.dashboardLinkParams[param.name]\"\n [compareWith]=\"ctaSelectOption\">\n <option>-- Select Value --</option>\n <ng-template [ngIf]=\"dataset\">\n <option *ngFor=\"let column of dataset.columns\"\n [value]=\"'[['+column.name+']]'\">\n {{column.title}}\n </option>\n </ng-template>\n </select>\n </label>\n <div class=\"mb-2 flex items-center\">\n <mat-checkbox class=\"mr-2\"\n [(ngModel)]=\"data.dashboardLinkParams['custom-'+param.name]\"></mat-checkbox>\n <p class=\"mb-0 mt-1\">Use custom value</p>\n </div>\n <label class=\"mb-2 dashboard-param-pick\">\n <input type=\"text\" *ngIf=\"data.dashboardLinkParams['custom-'+param.name]\"\n placeholder=\"Enter custom parameter value\"\n [(ngModel)]=\"data.dashboardLinkParams[param.name]\">\n </label>\n </ng-template>\n </ng-template>\n\n\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'custom'\">\n <div class=\"flex items-center mb-2 justify-between\">\n <div class=\"font-semibold\">Enter the HTML/Text for this item</div>\n <a (click)=\"openSide.next(true)\"\n class=\"text-xs ml-2 hover:underline flex items-center primary\">\n view help docs&nbsp;\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\"\n fill=\"currentColor\">\n <path\n d=\"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z\"/>\n <path\n d=\"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z\"/>\n </svg>\n </a>\n </div>\n\n <textarea class=\"font-mono w-full\"\n cols=\"30\" rows=\"10\" [(ngModel)]=\"data.customText\"></textarea>\n</ng-template>\n\n<ng-template [ngIf]=\"type === 'action'\">\n <label class=\"mb-2\">\n Action Event\n <select matNativeControl [(ngModel)]=\"data.actionEvent\">\n <option *ngFor=\"let actionEvent of actionEvents\" [value]=\"actionEvent.name\">\n {{actionEvent.title}}\n </option>\n </select>\n <small class=\"font-normal\">Select the action event to be triggered when this item is clicked.</small>\n </label>\n</ng-template>\n" }]
142
- }], ctorParameters: function () { return [{ type: i1.DashboardService }]; }, propDecorators: { type: [{
143
- type: Input
144
- }], data: [{
145
- type: Input
146
- }], currencies: [{
147
- type: Input
148
- }], openSide: [{
149
- type: Input
150
- }], dataset: [{
151
- type: Input
152
- }], dashboards: [{
153
- type: Input
154
- }], sharedDashboards: [{
155
- type: Input
156
- }], privateDashboards: [{
157
- type: Input
158
- }], dashboardParameters: [{
159
- type: Input
160
- }], actionEvents: [{
161
- type: Input
162
- }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC1mb3JtYXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1lZGl0b3IvY29uZmlndXJlLWl0ZW0vdGFibGUtY2VsbC1mb3JtYXR0ZXIvdGFibGUtY2VsbC1mb3JtYXR0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1lZGl0b3IvY29uZmlndXJlLWl0ZW0vdGFibGUtY2VsbC1mb3JtYXR0ZXIvdGFibGUtY2VsbC1mb3JtYXR0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7O0FBQ2pDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFPekIsTUFBTSxPQUFPLDJCQUEyQjtJQThGcEMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEzRjdDLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBR3JCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBQzNCLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQUM1Qix3QkFBbUIsR0FBUSxFQUFFLENBQUM7UUFDOUIsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFFekIsZ0JBQVcsR0FBUTtZQUN0QjtnQkFDSSxLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztnQkFDM0MsS0FBSyxFQUFFLG1CQUFtQjthQUM3QjtZQUNEO2dCQUNJLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxpQkFBaUI7YUFDM0I7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDckMsS0FBSyxFQUFFLGFBQWE7YUFDdkI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDcEMsS0FBSyxFQUFFLFlBQVk7YUFDdEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDaEMsS0FBSyxFQUFFLFFBQVE7YUFDbEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDL0IsS0FBSyxFQUFFLE9BQU87YUFDakI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsS0FBSyxFQUFFLFdBQVc7YUFDckI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsS0FBSyxFQUFFLE1BQU07YUFDaEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsS0FBSyxFQUFFLE1BQU07YUFDaEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLFVBQVU7YUFDcEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDcEMsS0FBSyxFQUFFLFlBQVk7YUFDdEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDcEMsS0FBSyxFQUFFLFlBQVk7YUFDdEI7U0FDSixDQUFDO1FBQ0ssZ0JBQVcsR0FBUTtZQUN0QjtnQkFDSSxLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDaEMsS0FBSyxFQUFFLFFBQVE7YUFDbEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsS0FBSyxFQUFFLFdBQVc7YUFDckI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDL0IsS0FBSyxFQUFFLE9BQU87YUFDakI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLFVBQVU7YUFDcEI7U0FDSixDQUFDO0lBR0YsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMvRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUM7SUFFTSxZQUFZLENBQUMsRUFBTyxFQUFFLEVBQU87UUFDaEMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRU0sZUFBZSxDQUFDLEVBQU8sRUFBRSxFQUFPO1FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLG9CQUFvQixDQUFDLFNBQVM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7U0FDdEM7UUFDRCxNQUFNLFNBQVMsR0FBUSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV6RSxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxFQUFFLEVBQUU7b0JBQ0osRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN2QjtZQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNUO0lBQ0wsQ0FBQzs7eUhBdklRLDJCQUEyQjs2R0FBM0IsMkJBQTJCLDZWQ1h4QyxxaFNBZ09BOzRGRHJOYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0kseUJBQXlCO3VHQU0xQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9kYXNoYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBsb2Rhc2ggZnJvbSAnbG9kYXNoJztcbmNvbnN0IF8gPSBsb2Rhc2guZGVmYXVsdDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdraS10YWJsZS1jZWxsLWZvcm1hdHRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWNlbGwtZm9ybWF0dGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS1jZWxsLWZvcm1hdHRlci5jb21wb25lbnQuc2FzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbEZvcm1hdHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSB0eXBlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YTogYW55ID0ge307XG4gICAgQElucHV0KCkgY3VycmVuY2llczogYW55ID0gW107XG4gICAgQElucHV0KCkgb3BlblNpZGU6IGFueTtcbiAgICBASW5wdXQoKSBkYXRhc2V0OiBhbnk7XG4gICAgQElucHV0KCkgZGFzaGJvYXJkczogYW55ID0gW107XG4gICAgQElucHV0KCkgc2hhcmVkRGFzaGJvYXJkczogYW55ID0gW107XG4gICAgQElucHV0KCkgcHJpdmF0ZURhc2hib2FyZHM6IGFueSA9IFtdO1xuICAgIEBJbnB1dCgpIGRhc2hib2FyZFBhcmFtZXRlcnM6IGFueSA9IFtdO1xuICAgIEBJbnB1dCgpIGFjdGlvbkV2ZW50czogYW55ID0gW107XG5cbiAgICBwdWJsaWMgZGF0ZUZvcm1hdHM6IGFueSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdOb25lJyxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBtb21lbnQoKS5mb3JtYXQoJ2RkZGQsIEQgTU1NTSBZWVlZJyksXG4gICAgICAgICAgICB2YWx1ZTogJ2RkZGQsIEQgTU1NTSBZWVlZJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdkZGQsIEQgTU1NIFlZWVknKSxcbiAgICAgICAgICAgIHZhbHVlOiAnZGRkLCBEIE1NTSBZWVlZJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdEIE1NTU0gWVlZWScpLFxuICAgICAgICAgICAgdmFsdWU6ICdEIE1NTU0gWVlZWSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IG1vbWVudCgpLmZvcm1hdCgnRCBNTU0gWVlZWScpLFxuICAgICAgICAgICAgdmFsdWU6ICdEIE1NTSBZWVlZJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdEIE1NTU0nKSxcbiAgICAgICAgICAgIHZhbHVlOiAnRCBNTU1NJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdNTU0gRCcpLFxuICAgICAgICAgICAgdmFsdWU6ICdNTU0gRCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IG1vbWVudCgpLmZvcm1hdCgnTU1NTSBZWVlZJyksXG4gICAgICAgICAgICB2YWx1ZTogJ01NTU0gWVlZWSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IG1vbWVudCgpLmZvcm1hdCgnTU1NTScpLFxuICAgICAgICAgICAgdmFsdWU6ICdNTU1NJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdZWVlZJyksXG4gICAgICAgICAgICB2YWx1ZTogJ1lZWVknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBtb21lbnQoKS5mb3JtYXQoJ0QvTS9ZWVlZJyksXG4gICAgICAgICAgICB2YWx1ZTogJ0QvTS9ZWVlZJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdERC9NTS9ZWVlZJyksXG4gICAgICAgICAgICB2YWx1ZTogJ0REL01NL1lZWVknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcbiAgICAgICAgICAgIHZhbHVlOiAnWVlZWS1NTS1ERCdcbiAgICAgICAgfVxuICAgIF07XG4gICAgcHVibGljIHRpbWVGb3JtYXRzOiBhbnkgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnTm9uZScsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdoIGEnKSxcbiAgICAgICAgICAgIHZhbHVlOiAnaGEnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBtb21lbnQoKS5mb3JtYXQoJ2g6bW0gYScpLFxuICAgICAgICAgICAgdmFsdWU6ICdoOm1tIGEnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBtb21lbnQoKS5mb3JtYXQoJ2g6bW06c3MgYScpLFxuICAgICAgICAgICAgdmFsdWU6ICdoOm1tOnNzIGEnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBtb21lbnQoKS5mb3JtYXQoJ0hIOm1tJyksXG4gICAgICAgICAgICB2YWx1ZTogJ0hIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogbW9tZW50KCkuZm9ybWF0KCdISDptbTpzcycpLFxuICAgICAgICAgICAgdmFsdWU6ICdISDptbTpzcydcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5saW5rVHlwZSA9PT0gJ2Rhc2hib2FyZCcgJiYgdGhpcy5kYXRhLmRhc2hib2FyZExpbmspIHtcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkUGFyYW1VcGRhdGUodGhpcy5kYXRhLmRhc2hib2FyZExpbmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdE9wdGlvbihjMTogYW55LCBjMjogYW55KSB7XG4gICAgICAgIGlmICghYzIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjMS52YWx1ZSA9PT0gYzIudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGN0YVNlbGVjdE9wdGlvbihjMTogYW55LCBjMjogYW55KSB7XG4gICAgICAgIHJldHVybiBjMSA9PT0gYzI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERlY2ltYWxWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhLmRlY2ltYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGFzaGJvYXJkUGFyYW1VcGRhdGUoc2VsZWN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhLmRhc2hib2FyZExpbmtQYXJhbXMgfHwgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZGFzaGJvYXJkTGlua1BhcmFtcykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5kYXNoYm9hcmRMaW5rUGFyYW1zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGFzaGJvYXJkOiBhbnkgPSBhd2FpdCB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0RGFzaGJvYXJkKHNlbGVjdGlvbi52YWx1ZSk7XG4gICAgICAgIGlmIChkYXNoYm9hcmQubGF5b3V0U2V0dGluZ3MucGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRQYXJhbWV0ZXJzID0gXy52YWx1ZXMoZGFzaGJvYXJkLmxheW91dFNldHRpbmdzLnBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Rhc2hib2FyZC1wYXJhbS1waWNrJykuaXRlbSgwKTtcbiAgICAgICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInR5cGUgPT09ICdudW1iZXInXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwibWItMlwiPlxuICAgICAgICBEZWNpbWFsc1xuICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgWyhuZ01vZGVsKV09XCJkYXRhLmRlY2ltYWxcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldERlY2ltYWxWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkZWNpbWFsIG9mIFswLDEsMiwzLDQsNSw2LDcsOCw5XVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkZWNpbWFsXCI+XG4gICAgICAgICAgICAgICAge3tkZWNpbWFsfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInR5cGUgPT09ICdjdXJyZW5jeSdcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgIERlY2ltYWxzXG4gICAgICAgIDxzZWxlY3QgbWF0TmF0aXZlQ29udHJvbCBbKG5nTW9kZWwpXT1cImRhdGEuZGVjaW1hbFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RGVjaW1hbFZhbHVlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGRlY2ltYWwgb2YgWzAsMSwyLDMsNCw1LDYsNyw4LDldXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlY2ltYWxcIj5cbiAgICAgICAgICAgICAgICB7e2RlY2ltYWx9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgIDwvbGFiZWw+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItNCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwibXItMlwiIFsobmdNb2RlbCldPVwiZGF0YS50aG91c2FuZHNTZXBhcmF0b3JcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi0wIG10LTFcIj5UaG91c2FuZHMgU2VwYXJhdG9yPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGxhYmVsIGNsYXNzPVwibWItNFwiPlxuICAgICAgICBDdXJyZW5jeVxuICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgW2NvbXBhcmVXaXRoXT1cInNlbGVjdE9wdGlvblwiIFsobmdNb2RlbCldPVwiZGF0YS5jdXJyZW5jeVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIFNlbGVjdCBDdXJyZW5jeSAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJjdXJyZW5jeVwiICpuZ0Zvcj1cImxldCBjdXJyZW5jeSBvZiBjdXJyZW5jaWVzXCI+XG4gICAgICAgICAgICAgICAge3tjdXJyZW5jeS5uYW1lfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInR5cGUgPT09ICdwZXJjZW50YWdlJ1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgRGVjaW1hbHNcbiAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIFsobmdNb2RlbCldPVwiZGF0YS5kZWNpbWFsXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXREZWNpbWFsVmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZGVjaW1hbCBvZiBbMCwxLDIsMyw0LDUsNiw3LDgsOV1cIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGVjaW1hbFwiPlxuICAgICAgICAgICAgICAgIHt7ZGVjaW1hbH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi00IGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJtci0yXCIgWyhuZ01vZGVsKV09XCJkYXRhLnRob3VzYW5kc1NlcGFyYXRvclwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTAgbXQtMVwiPlRob3VzYW5kcyBTZXBhcmF0b3I8L3A+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgW25nSWZdPVwidHlwZSA9PT0gJ2RhdGV0aW1lJ1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgRGF0ZSBGb3JtYXRcbiAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIFsobmdNb2RlbCldPVwiZGF0YS5kYXRlRm9ybWF0XCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmb3JtYXQgb2YgZGF0ZUZvcm1hdHNcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAge3tmb3JtYXQudGl0bGV9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgIDwvbGFiZWw+XG4gICAgPGxhYmVsIGNsYXNzPVwibWItMlwiPlxuICAgICAgICBUaW1lIEZvcm1hdFxuICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgWyhuZ01vZGVsKV09XCJkYXRhLnRpbWVGb3JtYXRcIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGZvcm1hdCBvZiB0aW1lRm9ybWF0c1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7e2Zvcm1hdC50aXRsZX19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgPC9sYWJlbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0eXBlID09PSAnY29tcGFyaXNvbidcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgIFNlbGVjdCBDb2x1bW4gdG8gY29tcGFyZVxuICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgWyhuZ01vZGVsKV09XCJkYXRhLmNvbXBhcmlzb25Db2x1bW5cIj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cInVuZGVmaW5lZFwiPi0tIFNlbGVjdCBDb2x1bW4gLS08L29wdGlvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRhdGFzZXQuY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sdW1uLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tjb2x1bW4udGl0bGV9fVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi00IGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJtci0yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmNvbXBhcmlzb25QZXJjZW50YWdlXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMCBtdC0xXCI+RGlzcGxheSBDaGFuZ2UgYXMgUGVyY2VudGFnZTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgRGVjaW1hbHNcbiAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIFsobmdNb2RlbCldPVwiZGF0YS5jb21wYXJpc29uRGVjaW1hbHNcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldERlY2ltYWxWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkZWNpbWFsIG9mIFswLDEsMiwzLDQsNSw2LDcsOCw5XVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkZWNpbWFsXCI+XG4gICAgICAgICAgICAgICAge3tkZWNpbWFsfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInR5cGUgPT09ICdsaW5rJ1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgTGluayBTZXR0aW5nc1xuICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgWyhuZ01vZGVsKV09XCJkYXRhLmxpbmtUeXBlXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+RXh0ZXJuYWwgTGluazwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImN1c3RvbVwiPkN1c3RvbSBMaW5rPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGFzaGJvYXJkXCI+RXhpc3RpbmcgRGFzaGJvYXJkPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJmb250LW5vcm1hbFwiPlNlbGVjdCB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBhY3Rpb24gbGluazwvc21hbGw+XG4gICAgPC9sYWJlbD5cblxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkYXRhLmxpbmtUeXBlID09PSAnY3VzdG9tJ1wiPlxuICAgICAgICA8cD5QbGVhc2UgZW50ZXIgdGhlIGxpbmsgZm9yIHRoaXMgY2FsbCB0byBhY3Rpb24uPC9wPlxuXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgIExpbmtcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiZGF0YS5jdXN0b21MaW5rXCI+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkYXRhLmxpbmtUeXBlID09PSAnZGFzaGJvYXJkJ1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICBTZWxlY3QgRGFzaGJvYXJkXG4gICAgICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgWyhuZ01vZGVsKV09XCJkYXRhLmRhc2hib2FyZExpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwic2VsZWN0T3B0aW9uXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZGFzaGJvYXJkUGFyYW1VcGRhdGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkRhc2hib2FyZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZGFzaGJvYXJkIG9mIGRhc2hib2FyZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInt2YWx1ZTogZGFzaGJvYXJkLmlkLCBsYWJlbDogZGFzaGJvYXJkLnRpdGxlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXNoYm9hcmQudGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIlNoYXJlZCBEYXNoYm9hcmRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGRhc2hib2FyZCBvZiBzaGFyZWREYXNoYm9hcmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJ7dmFsdWU6IGRhc2hib2FyZC5pZCwgbGFiZWw6IGRhc2hib2FyZC50aXRsZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGFzaGJvYXJkLnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9XCJQcml2YXRlIERhc2hib2FyZHNcIiAqbmdJZj1cInByaXZhdGVEYXNoYm9hcmRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkYXNoYm9hcmQgb2YgcHJpdmF0ZURhc2hib2FyZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInt2YWx1ZTogZGFzaGJvYXJkLmlkLCBsYWJlbDogZGFzaGJvYXJkLnRpdGxlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXNoYm9hcmQudGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmb250LW5vcm1hbFwiPlNlbGVjdCB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBhY3Rpb24gbGluazwvc21hbGw+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkYXRhLmRhc2hib2FyZExpbmtQYXJhbXMgJiYgZGFzaGJvYXJkUGFyYW1ldGVycy5sZW5ndGhcIj5cbiAgICAgICAgPHA+UGxlYXNlIGVudGVyIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyB0byB1c2Ugd2l0aCB0aGlzIGRhc2hib2FyZDwvcD5cblxuICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LXBhcmFtIFtuZ0Zvck9mXT1cImRhc2hib2FyZFBhcmFtZXRlcnNcIj5cbiAgICAgICAgICAgIDxsYWJlbD57e3BhcmFtLnRpdGxlfX08L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWRhdGEuZGFzaGJvYXJkTGlua1BhcmFtc1snY3VzdG9tLScrcGFyYW0ubmFtZV1cIlxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBkYXNoYm9hcmQtcGFyYW0tcGlja1wiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgbWF0TmF0aXZlQ29udHJvbCBbKG5nTW9kZWwpXT1cImRhdGEuZGFzaGJvYXJkTGlua1BhcmFtc1twYXJhbS5uYW1lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY3RhU2VsZWN0T3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gU2VsZWN0IFZhbHVlIC0tPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YXNldC5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIidbWycrY29sdW1uLm5hbWUrJ11dJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhLmRhc2hib2FyZExpbmtQYXJhbXNbJ2N1c3RvbS0nK3BhcmFtLm5hbWVdXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIG10LTFcIj5Vc2UgY3VzdG9tIHZhbHVlPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGRhc2hib2FyZC1wYXJhbS1waWNrXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKm5nSWY9XCJkYXRhLmRhc2hib2FyZExpbmtQYXJhbXNbJ2N1c3RvbS0nK3BhcmFtLm5hbWVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBjdXN0b20gcGFyYW1ldGVyIHZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhLmRhc2hib2FyZExpbmtQYXJhbXNbcGFyYW0ubmFtZV1cIj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuXG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgW25nSWZdPVwidHlwZSA9PT0gJ2N1c3RvbSdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj5FbnRlciB0aGUgSFRNTC9UZXh0IGZvciB0aGlzIGl0ZW08L2Rpdj5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5TaWRlLm5leHQodHJ1ZSlcIlxuICAgICAgICAgICBjbGFzcz1cInRleHQteHMgbWwtMiBob3Zlcjp1bmRlcmxpbmUgZmxleCBpdGVtcy1jZW50ZXIgcHJpbWFyeVwiPlxuICAgICAgICAgICAgdmlldyBoZWxwIGRvY3MmbmJzcDtcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaC00IHctNFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAzYTEgMSAwIDEwMCAyaDIuNTg2bC02LjI5MyA2LjI5M2ExIDEgMCAxMDEuNDE0IDEuNDE0TDE1IDYuNDE0VjlhMSAxIDAgMTAyIDBWNGExIDEgMCAwMC0xLTFoLTV6XCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNSA1YTIgMiAwIDAwLTIgMnY4YTIgMiAwIDAwMiAyaDhhMiAyIDAgMDAyLTJ2LTNhMSAxIDAgMTAtMiAwdjNINVY3aDNhMSAxIDAgMDAwLTJINXpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9hPlxuICAgIDwvZGl2PlxuXG4gICAgPHRleHRhcmVhIGNsYXNzPVwiZm9udC1tb25vIHctZnVsbFwiXG4gICAgICAgICAgICAgIGNvbHM9XCIzMFwiIHJvd3M9XCIxMFwiIFsobmdNb2RlbCldPVwiZGF0YS5jdXN0b21UZXh0XCI+PC90ZXh0YXJlYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0eXBlID09PSAnYWN0aW9uJ1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgQWN0aW9uIEV2ZW50XG4gICAgICAgIDxzZWxlY3QgbWF0TmF0aXZlQ29udHJvbCBbKG5nTW9kZWwpXT1cImRhdGEuYWN0aW9uRXZlbnRcIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFjdGlvbkV2ZW50IG9mIGFjdGlvbkV2ZW50c1wiIFt2YWx1ZV09XCJhY3Rpb25FdmVudC5uYW1lXCI+XG4gICAgICAgICAgICAgICAge3thY3Rpb25FdmVudC50aXRsZX19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cImZvbnQtbm9ybWFsXCI+U2VsZWN0IHRoZSBhY3Rpb24gZXZlbnQgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhpcyBpdGVtIGlzIGNsaWNrZWQuPC9zbWFsbD5cbiAgICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==