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.
- package/fesm2022/ng-kinintel.mjs +11874 -0
- package/fesm2022/ng-kinintel.mjs.map +1 -0
- package/index.d.ts +2818 -5
- package/package.json +6 -14
- package/esm2020/lib/components/alert-groups/alert-groups.component.mjs +0 -76
- package/esm2020/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.mjs +0 -83
- package/esm2020/lib/components/dashboard-editor/configure-item/configure-item.component.mjs +0 -853
- package/esm2020/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.mjs +0 -56
- package/esm2020/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.mjs +0 -114
- package/esm2020/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.mjs +0 -163
- package/esm2020/lib/components/dashboard-editor/configure-item/vis-network-options.json +0 -135
- package/esm2020/lib/components/dashboard-editor/dashboard-editor.component.mjs +0 -580
- package/esm2020/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.mjs +0 -15
- package/esm2020/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.mjs +0 -50
- package/esm2020/lib/components/dashboard-editor/item-component/item-component.component.mjs +0 -1226
- package/esm2020/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.mjs +0 -111
- package/esm2020/lib/components/dashboards/dashboards.component.mjs +0 -163
- package/esm2020/lib/components/dashboards/view-dashboard/view-dashboard.component.mjs +0 -429
- package/esm2020/lib/components/data-explorer/change-source-warning/change-source-warning.component.mjs +0 -20
- package/esm2020/lib/components/data-explorer/data-explorer.component.mjs +0 -243
- package/esm2020/lib/components/data-explorer/export-data/export-data.component.mjs +0 -62
- package/esm2020/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.mjs +0 -70
- package/esm2020/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.mjs +0 -190
- package/esm2020/lib/components/data-picker/data-picker.component.mjs +0 -79
- package/esm2020/lib/components/data-search/data-search.component.mjs +0 -11
- package/esm2020/lib/components/data-sharing-invite/data-sharing-invite.component.mjs +0 -52
- package/esm2020/lib/components/dataset/create-dataset/create-dataset.component.mjs +0 -47
- package/esm2020/lib/components/dataset/dataset-editor/available-columns/available-columns.component.mjs +0 -28
- package/esm2020/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.mjs +0 -344
- package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.mjs +0 -80
- package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.mjs +0 -54
- package/esm2020/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.mjs +0 -67
- package/esm2020/lib/components/dataset/dataset-editor/dataset-editor.component.mjs +0 -1134
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.mjs +0 -201
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.mjs +0 -25
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.mjs +0 -72
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.mjs +0 -62
- package/esm2020/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.mjs +0 -41
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.mjs +0 -78
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.mjs +0 -39
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.mjs +0 -75
- package/esm2020/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.mjs +0 -107
- package/esm2020/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.mjs +0 -58
- package/esm2020/lib/components/dataset/dataset-editor/share-query/share-query.component.mjs +0 -110
- package/esm2020/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset.component.mjs +0 -294
- package/esm2020/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.mjs +0 -130
- package/esm2020/lib/components/datasource/create-datasource/api-access/api-access.component.mjs +0 -132
- package/esm2020/lib/components/datasource/create-datasource/create-datasource.component.mjs +0 -729
- package/esm2020/lib/components/datasource/create-datasource/import-data/import-data.component.mjs +0 -146
- package/esm2020/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.mjs +0 -165
- package/esm2020/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.mjs +0 -145
- package/esm2020/lib/components/datasource/datasource.component.mjs +0 -162
- package/esm2020/lib/components/datasource/document-datasource/document-datasource.component.mjs +0 -297
- package/esm2020/lib/components/export-project/export-project.component.mjs +0 -29
- package/esm2020/lib/components/feeds/feed/feed.component.mjs +0 -92
- package/esm2020/lib/components/feeds/feeds.component.mjs +0 -145
- package/esm2020/lib/components/job-tasks/job-tasks.component.mjs +0 -25
- package/esm2020/lib/components/marketplace/marketplace.component.mjs +0 -65
- package/esm2020/lib/components/metadata/metadata.component.mjs +0 -65
- package/esm2020/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.mjs +0 -113
- package/esm2020/lib/components/notification-groups/notification-groups.component.mjs +0 -86
- package/esm2020/lib/components/project-picker/project-picker.component.mjs +0 -118
- package/esm2020/lib/components/project-settings/project-link-selection/project-link-selection.component.mjs +0 -104
- package/esm2020/lib/components/project-settings/project-settings.component.mjs +0 -155
- package/esm2020/lib/components/query-caching/edit-query-cache/edit-query-cache.component.mjs +0 -51
- package/esm2020/lib/components/query-caching/query-cache-view/query-cache-view.component.mjs +0 -121
- package/esm2020/lib/components/query-caching/query-caching.component.mjs +0 -162
- package/esm2020/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.mjs +0 -45
- package/esm2020/lib/components/shared-with-me/shared-with-me.component.mjs +0 -174
- package/esm2020/lib/components/snapshots/snapshots.component.mjs +0 -244
- package/esm2020/lib/components/tag-picker/tag-picker.component.mjs +0 -74
- package/esm2020/lib/components/task-time-periods/task-time-periods.component.mjs +0 -55
- package/esm2020/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.mjs +0 -40
- package/esm2020/lib/guards/dashboard-changes.guard.mjs +0 -22
- package/esm2020/lib/kinintel-config.mjs +0 -3
- package/esm2020/lib/ng-kinintel.module.mjs +0 -437
- package/esm2020/lib/objects/action-event.mjs +0 -16
- package/esm2020/lib/services/alert.service.mjs +0 -52
- package/esm2020/lib/services/dashboard.service.mjs +0 -75
- package/esm2020/lib/services/data-processor.service.mjs +0 -56
- package/esm2020/lib/services/data-search.service.mjs +0 -36
- package/esm2020/lib/services/dataset.service.mjs +0 -187
- package/esm2020/lib/services/datasource.service.mjs +0 -93
- package/esm2020/lib/services/external.service.mjs +0 -33
- package/esm2020/lib/services/feed.service.mjs +0 -50
- package/esm2020/lib/services/notification.service.mjs +0 -41
- package/esm2020/lib/services/project.service.mjs +0 -130
- package/esm2020/lib/services/tag.service.mjs +0 -63
- package/esm2020/ng-kinintel.mjs +0 -5
- package/esm2020/public-api.mjs +0 -43
- package/fesm2015/ng-kinintel.mjs +0 -12182
- package/fesm2015/ng-kinintel.mjs.map +0 -1
- package/fesm2020/ng-kinintel.mjs +0 -11872
- package/fesm2020/ng-kinintel.mjs.map +0 -1
- package/lib/components/alert-groups/alert-groups.component.d.ts +0 -30
- package/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.d.ts +0 -28
- package/lib/components/dashboard-editor/configure-item/configure-item.component.d.ts +0 -256
- package/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.d.ts +0 -16
- package/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.d.ts +0 -59
- package/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.d.ts +0 -26
- package/lib/components/dashboard-editor/dashboard-editor.component.d.ts +0 -85
- package/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.d.ts +0 -8
- package/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.d.ts +0 -22
- package/lib/components/dashboard-editor/item-component/item-component.component.d.ts +0 -264
- package/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.d.ts +0 -30
- package/lib/components/dashboards/dashboards.component.d.ts +0 -56
- package/lib/components/dashboards/view-dashboard/view-dashboard.component.d.ts +0 -81
- package/lib/components/data-explorer/change-source-warning/change-source-warning.component.d.ts +0 -11
- package/lib/components/data-explorer/data-explorer.component.d.ts +0 -61
- package/lib/components/data-explorer/export-data/export-data.component.d.ts +0 -17
- package/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.d.ts +0 -25
- package/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.d.ts +0 -44
- package/lib/components/data-picker/data-picker.component.d.ts +0 -32
- package/lib/components/data-search/data-search.component.d.ts +0 -5
- package/lib/components/data-sharing-invite/data-sharing-invite.component.d.ts +0 -21
- package/lib/components/dataset/create-dataset/create-dataset.component.d.ts +0 -17
- package/lib/components/dataset/dataset-editor/available-columns/available-columns.component.d.ts +0 -12
- package/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.d.ts +0 -61
- package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.d.ts +0 -21
- package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.d.ts +0 -20
- package/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.d.ts +0 -19
- package/lib/components/dataset/dataset-editor/dataset-editor.component.d.ts +0 -131
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.d.ts +0 -63
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.d.ts +0 -20
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.d.ts +0 -16
- package/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.d.ts +0 -18
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.d.ts +0 -23
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.d.ts +0 -13
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.d.ts +0 -22
- package/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.d.ts +0 -27
- package/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.d.ts +0 -25
- package/lib/components/dataset/dataset-editor/share-query/share-query.component.d.ts +0 -41
- package/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.d.ts +0 -11
- package/lib/components/dataset/dataset.component.d.ts +0 -74
- package/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.d.ts +0 -26
- package/lib/components/datasource/create-datasource/api-access/api-access.component.d.ts +0 -31
- package/lib/components/datasource/create-datasource/create-datasource.component.d.ts +0 -112
- package/lib/components/datasource/create-datasource/import-data/import-data.component.d.ts +0 -28
- package/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.d.ts +0 -40
- package/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.d.ts +0 -34
- package/lib/components/datasource/datasource.component.d.ts +0 -46
- package/lib/components/datasource/document-datasource/document-datasource.component.d.ts +0 -64
- package/lib/components/export-project/export-project.component.d.ts +0 -9
- package/lib/components/feeds/feed/feed.component.d.ts +0 -30
- package/lib/components/feeds/feeds.component.d.ts +0 -47
- package/lib/components/job-tasks/job-tasks.component.d.ts +0 -11
- package/lib/components/marketplace/marketplace.component.d.ts +0 -42
- package/lib/components/metadata/metadata.component.d.ts +0 -24
- package/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.d.ts +0 -37
- package/lib/components/notification-groups/notification-groups.component.d.ts +0 -28
- package/lib/components/project-picker/project-picker.component.d.ts +0 -37
- package/lib/components/project-settings/project-link-selection/project-link-selection.component.d.ts +0 -32
- package/lib/components/project-settings/project-settings.component.d.ts +0 -40
- package/lib/components/query-caching/edit-query-cache/edit-query-cache.component.d.ts +0 -17
- package/lib/components/query-caching/query-cache-view/query-cache-view.component.d.ts +0 -35
- package/lib/components/query-caching/query-caching.component.d.ts +0 -38
- package/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.d.ts +0 -21
- package/lib/components/shared-with-me/shared-with-me.component.d.ts +0 -43
- package/lib/components/snapshots/snapshots.component.d.ts +0 -52
- package/lib/components/tag-picker/tag-picker.component.d.ts +0 -27
- package/lib/components/task-time-periods/task-time-periods.component.d.ts +0 -20
- package/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.d.ts +0 -17
- package/lib/guards/dashboard-changes.guard.d.ts +0 -11
- package/lib/kinintel-config.d.ts +0 -10
- package/lib/ng-kinintel.module.d.ts +0 -116
- package/lib/objects/action-event.d.ts +0 -12
- package/lib/services/alert.service.d.ts +0 -17
- package/lib/services/dashboard.service.d.ts +0 -25
- package/lib/services/data-processor.service.d.ts +0 -18
- package/lib/services/data-search.service.d.ts +0 -14
- package/lib/services/dataset.service.d.ts +0 -56
- package/lib/services/datasource.service.d.ts +0 -34
- package/lib/services/external.service.d.ts +0 -12
- package/lib/services/feed.service.d.ts +0 -19
- package/lib/services/notification.service.d.ts +0 -16
- package/lib/services/project.service.d.ts +0 -27
- package/lib/services/tag.service.d.ts +0 -19
- 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 \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 \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==
|