@wertzui/ngx-restworld-client 7.2.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/esm2020/lib/components/restworld-file/restworld-file.component.mjs +57 -0
  2. package/esm2020/lib/components/restworld-form/restworld-form.component.mjs +188 -0
  3. package/esm2020/lib/components/restworld-id-navigation/restworld-id-navigation.component.mjs +65 -0
  4. package/esm2020/lib/components/restworld-image/restworld-image.component.mjs +164 -0
  5. package/esm2020/lib/components/restworld-inputs/restworld-inputs.mjs +306 -0
  6. package/esm2020/lib/components/restworld-label/restworld-label.component.mjs +24 -0
  7. package/esm2020/lib/components/restworld-menu-button/restworld-menu-button.component.mjs +40 -0
  8. package/esm2020/lib/components/restworld-table/restworld-table.component.mjs +157 -0
  9. package/esm2020/lib/components/restworld-validation-errors/restworld-validation-errors.component.mjs +21 -0
  10. package/esm2020/lib/models/o-data.mjs +2 -0
  11. package/esm2020/lib/models/restworld-image.mjs +2 -0
  12. package/esm2020/lib/models/restworld-options.mjs +2 -2
  13. package/esm2020/lib/models/special-properties.mjs +6 -0
  14. package/esm2020/lib/models/templating.mjs +2 -0
  15. package/esm2020/lib/restworld-client.module.mjs +83 -25
  16. package/esm2020/lib/services/o-data.service.mjs +6 -3
  17. package/esm2020/lib/services/restworld-client-collection.mjs +7 -7
  18. package/esm2020/lib/services/restworld-client.mjs +40 -29
  19. package/esm2020/lib/services/settings.service.mjs +5 -5
  20. package/esm2020/lib/views/restworld-edit-view/restworld-edit-view.component.mjs +24 -255
  21. package/esm2020/lib/views/restworld-list-view/restworld-list-view.component.mjs +49 -101
  22. package/esm2020/public-api.mjs +17 -6
  23. package/fesm2015/wertzui-ngx-restworld-client.mjs +1373 -1017
  24. package/fesm2015/wertzui-ngx-restworld-client.mjs.map +1 -1
  25. package/fesm2020/wertzui-ngx-restworld-client.mjs +1322 -978
  26. package/fesm2020/wertzui-ngx-restworld-client.mjs.map +1 -1
  27. package/index.d.ts +1 -0
  28. package/lib/components/restworld-avatar/restworld-avatar.component.d.ts +1 -0
  29. package/lib/components/restworld-avatar/restworld-avatar.component.d.ts.map +1 -0
  30. package/lib/{views/restworld-file-view/restworld-file-view.component.d.ts → components/restworld-file/restworld-file.component.d.ts} +4 -3
  31. package/lib/components/restworld-file/restworld-file.component.d.ts.map +1 -0
  32. package/lib/components/restworld-form/restworld-form.component.d.ts +53 -0
  33. package/lib/components/restworld-form/restworld-form.component.d.ts.map +1 -0
  34. package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts +27 -0
  35. package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts.map +1 -0
  36. package/lib/components/restworld-image/restworld-image.component.d.ts +62 -0
  37. package/lib/components/restworld-image/restworld-image.component.d.ts.map +1 -0
  38. package/lib/components/restworld-inputs/restworld-inputs.d.ts +146 -0
  39. package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +1 -0
  40. package/lib/components/restworld-label/restworld-label.component.d.ts +14 -0
  41. package/lib/components/restworld-label/restworld-label.component.d.ts.map +1 -0
  42. package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts +12 -0
  43. package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts.map +1 -0
  44. package/lib/components/restworld-table/restworld-table.component.d.ts +54 -0
  45. package/lib/components/restworld-table/restworld-table.component.d.ts.map +1 -0
  46. package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts +15 -0
  47. package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts.map +1 -0
  48. package/lib/constants/link-names.d.ts +1 -0
  49. package/lib/constants/link-names.d.ts.map +1 -0
  50. package/lib/models/api-url.d.ts +1 -0
  51. package/lib/models/api-url.d.ts.map +1 -0
  52. package/lib/models/client-settings.d.ts +1 -0
  53. package/lib/models/client-settings.d.ts.map +1 -0
  54. package/lib/models/o-data.d.ts +7 -0
  55. package/lib/models/o-data.d.ts.map +1 -0
  56. package/lib/models/problem-details.d.ts +1 -0
  57. package/lib/models/problem-details.d.ts.map +1 -0
  58. package/lib/models/restworld-image.d.ts +28 -0
  59. package/lib/models/restworld-image.d.ts.map +1 -0
  60. package/lib/models/restworld-options.d.ts +2 -1
  61. package/lib/models/restworld-options.d.ts.map +1 -0
  62. package/lib/models/special-properties.d.ts +9 -0
  63. package/lib/models/special-properties.d.ts.map +1 -0
  64. package/lib/models/templating.d.ts +8 -0
  65. package/lib/models/templating.d.ts.map +1 -0
  66. package/lib/pipes/as.pipe.d.ts +1 -0
  67. package/lib/pipes/as.pipe.d.ts.map +1 -0
  68. package/lib/pipes/safe-url.pipe.d.ts +1 -0
  69. package/lib/pipes/safe-url.pipe.d.ts.map +1 -0
  70. package/lib/restworld-client.module.d.ts +45 -37
  71. package/lib/restworld-client.module.d.ts.map +1 -0
  72. package/lib/services/avatar-generator.d.ts +1 -0
  73. package/lib/services/avatar-generator.d.ts.map +1 -0
  74. package/lib/services/form.service.d.ts +1 -0
  75. package/lib/services/form.service.d.ts.map +1 -0
  76. package/lib/services/o-data.service.d.ts +1 -0
  77. package/lib/services/o-data.service.d.ts.map +1 -0
  78. package/lib/services/restworld-client-collection.d.ts +9 -8
  79. package/lib/services/restworld-client-collection.d.ts.map +1 -0
  80. package/lib/services/restworld-client.d.ts +12 -4
  81. package/lib/services/restworld-client.d.ts.map +1 -0
  82. package/lib/services/settings.service.d.ts +3 -2
  83. package/lib/services/settings.service.d.ts.map +1 -0
  84. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts +16 -68
  85. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts.map +1 -0
  86. package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +25 -41
  87. package/lib/views/restworld-list-view/restworld-list-view.component.d.ts.map +1 -0
  88. package/package.json +6 -6
  89. package/public-api.d.ts +17 -5
  90. package/public-api.d.ts.map +1 -0
  91. package/wertzui-ngx-restworld-client.d.ts.map +1 -0
  92. package/esm2020/lib/views/restworld-edit-form/restworld-edit-form.component.mjs +0 -233
  93. package/esm2020/lib/views/restworld-file-view/restworld-file-view.component.mjs +0 -57
  94. package/esm2020/lib/views/restworld-image-view/restworld-image-view.component.mjs +0 -139
  95. package/lib/views/restworld-edit-form/restworld-edit-form.component.d.ts +0 -74
  96. package/lib/views/restworld-image-view/restworld-image-view.component.d.ts +0 -57
@@ -1,30 +1,12 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { PropertyType } from '@wertzui/ngx-hal-client';
3
2
  import * as _ from 'lodash';
4
3
  import { ProblemDetails } from '../../models/problem-details';
5
- import { ODataService } from '../../services/o-data.service';
6
4
  import * as i0 from "@angular/core";
7
5
  import * as i1 from "../../services/restworld-client-collection";
8
6
  import * as i2 from "primeng/api";
9
7
  import * as i3 from "../../services/avatar-generator";
10
8
  import * as i4 from "@angular/router";
11
- import * as i5 from "@angular/common";
12
- import * as i6 from "@angular/forms";
13
- import * as i7 from "primeng/table";
14
- import * as i8 from "primeng/tooltip";
15
- import * as i9 from "primeng/button";
16
- import * as i10 from "primeng/confirmdialog";
17
- import * as i11 from "primeng/toast";
18
- import * as i12 from "primeng/tristatecheckbox";
19
- import * as i13 from "primeng/splitbutton";
20
- import * as i14 from "../../components/restworld-avatar/restworld-avatar.component";
21
- export var ColumnFilterType;
22
- (function (ColumnFilterType) {
23
- ColumnFilterType["text"] = "text";
24
- ColumnFilterType["numeric"] = "numeric";
25
- ColumnFilterType["boolean"] = "boolean";
26
- ColumnFilterType["date"] = "date";
27
- })(ColumnFilterType || (ColumnFilterType = {}));
9
+ import * as i5 from "../../components/restworld-table/restworld-table.component";
28
10
  export class RESTworldListViewComponent {
29
11
  constructor(_clients, _confirmationService, _messageService, avatarGenerator, _router) {
30
12
  this._clients = _clients;
@@ -33,32 +15,30 @@ export class RESTworldListViewComponent {
33
15
  this.avatarGenerator = avatarGenerator;
34
16
  this._router = _router;
35
17
  this.isLoading = false;
36
- this.load = _.debounce(this.load2, 100);
18
+ this.load = _.debounce(this.loadInternal, 100);
37
19
  this._editLink = '/edit';
38
- this._sortField = '';
39
- this._sortOrder = 1;
20
+ this._lastParameters = {};
40
21
  this._totalRecords = 0;
41
- this.rowsPerPage = [10, 25, 50];
42
- this._lastEvent = {
43
- rows: this.rowsPerPage[0]
22
+ this.headerMenu = [];
23
+ this.rowMenu = (row, openedByRightClick) => {
24
+ return [
25
+ {
26
+ icon: "fas fa-edit",
27
+ label: openedByRightClick ? "View / Edit" : undefined,
28
+ tooltip: !openedByRightClick ? "View / Edit" : undefined,
29
+ tooltipPosition: "left",
30
+ routerLink: [this.editLink, this.apiName, this.rel, row._links?.self[0].href]
31
+ }, {
32
+ icon: "fas fa-trash-alt",
33
+ label: openedByRightClick ? "Delete" : undefined,
34
+ tooltip: !openedByRightClick ? "Delete" : undefined,
35
+ tooltipPosition: "left",
36
+ styleClass: "p-button-danger",
37
+ command: () => this.showDeleteConfirmatioModal(row)
38
+ }
39
+ ];
44
40
  };
45
41
  }
46
- get PropertyType() {
47
- return PropertyType;
48
- }
49
- get apiName() {
50
- return this._apiName;
51
- }
52
- set apiName(value) {
53
- this._apiName = value;
54
- this.load(this._lastEvent);
55
- }
56
- get columns() {
57
- return this.template?.properties.filter(p => p.type !== PropertyType.Hidden) ?? [];
58
- }
59
- get dateFormat() {
60
- return RESTworldListViewComponent._dateFormat;
61
- }
62
42
  get editLink() {
63
43
  return this._editLink;
64
44
  }
@@ -66,6 +46,14 @@ export class RESTworldListViewComponent {
66
46
  if (value)
67
47
  this._editLink = value;
68
48
  }
49
+ set apiName(value) {
50
+ this._apiName = value;
51
+ this.load(this._lastParameters);
52
+ }
53
+ ;
54
+ get apiName() {
55
+ return this._apiName;
56
+ }
69
57
  get newHref() {
70
58
  return this.resource?.findLink('new')?.href;
71
59
  }
@@ -74,26 +62,7 @@ export class RESTworldListViewComponent {
74
62
  }
75
63
  set rel(value) {
76
64
  this._rel = value;
77
- this.load(this._lastEvent);
78
- }
79
- get rows() {
80
- return this._lastEvent?.rows || 0;
81
- }
82
- get sortField() {
83
- return this._sortField;
84
- }
85
- set sortField(value) {
86
- this._sortField = value ?? '';
87
- this._lastEvent.sortField = value;
88
- this.load(this._lastEvent);
89
- }
90
- get sortOrder() {
91
- return this._sortOrder;
92
- }
93
- set sortOrder(value) {
94
- this._sortOrder = value ?? 1;
95
- this._lastEvent.sortOrder = value;
96
- this.load(this._lastEvent);
65
+ this.load(this._lastParameters);
97
66
  }
98
67
  get template() {
99
68
  return this._template;
@@ -104,9 +73,6 @@ export class RESTworldListViewComponent {
104
73
  get value() {
105
74
  return this.resource?._embedded?.items || [];
106
75
  }
107
- set totalRecords(value) {
108
- this._totalRecords = value || 0;
109
- }
110
76
  createNew() {
111
77
  return this._router.navigate([this.editLink, this.apiName, this.rel, this.newHref]);
112
78
  }
@@ -115,14 +81,12 @@ export class RESTworldListViewComponent {
115
81
  return;
116
82
  await this.getClient().delete(resource);
117
83
  this._messageService.add({ severity: 'success', summary: 'Deleted', detail: 'The resource has been deleted.' });
118
- this.load(this._lastEvent);
84
+ this.loadInternal(this._lastParameters);
119
85
  }
120
- async load2(event) {
86
+ async loadInternal(parameters) {
121
87
  if (!this.apiName || !this.rel)
122
88
  return;
123
89
  this.isLoading = true;
124
- this._lastEvent = event;
125
- const parameters = ODataService.createParametersFromTableLoadEvent(event, this.template);
126
90
  const response = await this.getClient().getList(this.rel, parameters);
127
91
  if (!response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body) {
128
92
  this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API.', data: response });
@@ -138,7 +102,17 @@ export class RESTworldListViewComponent {
138
102
  this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API. ' + e, data: e });
139
103
  }
140
104
  this.resource = response.body;
141
- this.totalRecords = this.resource.totalPages && parameters.$top ? this.resource.totalPages * parameters.$top : undefined;
105
+ const rowsPerPage = parameters.$top ?? response.body._embedded.items.length;
106
+ const totalPages = response.body.totalPages ?? 1;
107
+ this._totalRecords = totalPages * rowsPerPage;
108
+ this.headerMenu = [
109
+ {
110
+ icon: "fas fa-plus",
111
+ styleClass: "p-button-success",
112
+ routerLink: [this.editLink, this.apiName, this.rel, this.newHref],
113
+ items: this.createButtonMenu
114
+ }
115
+ ];
142
116
  }
143
117
  this.isLoading = false;
144
118
  }
@@ -150,50 +124,24 @@ export class RESTworldListViewComponent {
150
124
  accept: () => this.delete(resource)
151
125
  });
152
126
  }
153
- toColumnFilterType(propertyType) {
154
- switch (propertyType) {
155
- case PropertyType.Number:
156
- return ColumnFilterType.numeric;
157
- case PropertyType.Bool:
158
- return ColumnFilterType.boolean;
159
- case PropertyType.Date:
160
- case PropertyType.DatetimeLocal:
161
- case PropertyType.DatetimeOffset:
162
- return ColumnFilterType.date;
163
- default:
164
- return ColumnFilterType.text;
165
- }
166
- }
167
127
  getClient() {
168
128
  if (!this.apiName)
169
129
  throw new Error('Cannot get a client, because the apiName is not set.');
170
130
  return this._clients.getClient(this.apiName);
171
131
  }
172
132
  }
173
- RESTworldListViewComponent._dateFormat = new Date(3333, 10, 22)
174
- .toLocaleDateString()
175
- .replace("22", "dd")
176
- .replace("11", "MM")
177
- .replace("3333", "y")
178
- .replace("33", "yy");
179
- RESTworldListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RESTworldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
180
- RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: RESTworldListViewComponent, selector: "rw-list", inputs: { createButtonMenu: "createButtonMenu", rowsPerPage: "rowsPerPage", apiName: "apiName", editLink: "editLink", rel: "rel", sortField: "sortField", sortOrder: "sortOrder" }, ngImport: i0, template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.prompt}}\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\">\r\n <a *ngIf=\"!createButtonMenu\" class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"[editLink, apiName, rel, newHref]\" pTooltip=\"Create new\" tooltipPosition=\"left\"></a>\r\n <p-splitButton *ngIf=\"createButtonMenu\" styleClass=\"p-button-success\" icon=\"fas fa-plus\" pTooltip=\"Create new\" tooltipPosition=\"left\" (onClick)=\"createNew()\" [model]=\"createButtonMenu\" appendTo=\"body\"></p-splitButton>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\">\r\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\r\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\r\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name]}}</span>\r\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\"></p-triStateCheckbox></span>\r\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\r\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\r\n </td>\r\n <td>\r\n <div class=\"flex justify-content-end\">\r\n <a pButton pTooltip=\"View/Edit\" tooltipPosition=\"left\" [routerLink]=\"[editLink, apiName, rel, entity._links?.self[0].href]\" icon=\"fas fa-edit\"></a>\r\n <button pTooltip=\"Delete\" tooltipPosition=\"left\" pButton *ngIf=\"entity._links.delete\" (click)=\"showDeleteConfirmatioModal(entity)\" icon=\"fas fa-trash-alt\" type=\"button\" class=\"mx-2 p-button-danger\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No entries found.</td>\r\n </tr>\r\n </ng-template>\r\n\r\n</p-table>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i7.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i7.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i7.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i10.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "component", type: i11.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: i12.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { kind: "component", type: i13.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { kind: "component", type: i14.RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }] });
133
+ RESTworldListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RestWorldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
134
+ RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: RESTworldListViewComponent, selector: "rw-list", inputs: { createButtonMenu: "createButtonMenu", editLink: "editLink", apiName: "apiName", rel: "rel" }, ngImport: i0, template: "<rw-table\r\n [api]=\"apiName\"\r\n [template]=\"template\"\r\n [rows]=\"value\"\r\n [headerMenu]=\"headerMenu\"\r\n [rowMenu]=\"rowMenu\"\r\n [totalRecords]=\"totalRecords\"\r\n [isLoading]=\"isLoading\"\r\n (onFilterOrSortChanged)=\"load($event)\">\r\n</rw-table>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "component", type: i5.RestWorldTableComponent, selector: "rw-table", inputs: ["api", "template", "rows", "rowsPerPageOptions", "headerMenu", "rowMenu", "showRowMenuAsColumn", "showRowMenuOnRightClick", "totalRecords", "styleClass", "tableStyle", "scrollable", "scrollHeight", "isLoading"], outputs: ["onFilterOrSortChanged"] }] });
181
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
182
136
  type: Component,
183
- args: [{ selector: 'rw-list', template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.prompt}}\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\">\r\n <a *ngIf=\"!createButtonMenu\" class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"[editLink, apiName, rel, newHref]\" pTooltip=\"Create new\" tooltipPosition=\"left\"></a>\r\n <p-splitButton *ngIf=\"createButtonMenu\" styleClass=\"p-button-success\" icon=\"fas fa-plus\" pTooltip=\"Create new\" tooltipPosition=\"left\" (onClick)=\"createNew()\" [model]=\"createButtonMenu\" appendTo=\"body\"></p-splitButton>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\">\r\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\r\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\r\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name]}}</span>\r\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\"></p-triStateCheckbox></span>\r\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\r\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\r\n </td>\r\n <td>\r\n <div class=\"flex justify-content-end\">\r\n <a pButton pTooltip=\"View/Edit\" tooltipPosition=\"left\" [routerLink]=\"[editLink, apiName, rel, entity._links?.self[0].href]\" icon=\"fas fa-edit\"></a>\r\n <button pTooltip=\"Delete\" tooltipPosition=\"left\" pButton *ngIf=\"entity._links.delete\" (click)=\"showDeleteConfirmatioModal(entity)\" icon=\"fas fa-trash-alt\" type=\"button\" class=\"mx-2 p-button-danger\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No entries found.</td>\r\n </tr>\r\n </ng-template>\r\n\r\n</p-table>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
184
- }], ctorParameters: function () { return [{ type: i1.RESTworldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.AvatarGenerator }, { type: i4.Router }]; }, propDecorators: { createButtonMenu: [{
137
+ args: [{ selector: 'rw-list', template: "<rw-table\r\n [api]=\"apiName\"\r\n [template]=\"template\"\r\n [rows]=\"value\"\r\n [headerMenu]=\"headerMenu\"\r\n [rowMenu]=\"rowMenu\"\r\n [totalRecords]=\"totalRecords\"\r\n [isLoading]=\"isLoading\"\r\n (onFilterOrSortChanged)=\"load($event)\">\r\n</rw-table>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
138
+ }], ctorParameters: function () { return [{ type: i1.RestWorldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.AvatarGenerator }, { type: i4.Router }]; }, propDecorators: { createButtonMenu: [{
185
139
  type: Input
186
- }], rowsPerPage: [{
140
+ }], editLink: [{
187
141
  type: Input
188
142
  }], apiName: [{
189
143
  type: Input
190
- }], editLink: [{
191
- type: Input
192
144
  }], rel: [{
193
145
  type: Input
194
- }], sortField: [{
195
- type: Input
196
- }], sortOrder: [{
197
- type: Input
198
146
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQStCLFlBQVksRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNySCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUk1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRTVELE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsaUNBQWEsQ0FBQTtJQUNiLHVDQUFtQixDQUFBO0lBQ25CLHVDQUFtQixDQUFBO0lBQ25CLGlDQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUszQjtBQU9ELE1BQU0sT0FBTywwQkFBMEI7SUF5QnJDLFlBQ1UsUUFBbUMsRUFDbkMsb0JBQXlDLEVBQ3pDLGVBQStCLEVBQ2hDLGVBQWdDLEVBQ3RCLE9BQWU7UUFKeEIsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDbkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxvQkFBZSxHQUFmLGVBQWUsQ0FB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QXNELENBQUMsQ0FBQztRQUUxRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDOztBQXZNYyxzQ0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQ2hELGtCQUFrQixFQUFFO0tBQ3BCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQ25CLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO0tBQ3BCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7dUhBTlosMEJBQTBCOzJHQUExQiwwQkFBMEIsbU9DdkJ2QyxrcElBcUVBOzJGRDlDYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsU0FBUztrT0FhWixnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBTUMsV0FBVztzQkFEakIsS0FBSztnQkFrQ0ssT0FBTztzQkFEakIsS0FBSztnQkFtQkssUUFBUTtzQkFEbEIsS0FBSztnQkFlSyxHQUFHO3NCQURiLEtBQUs7Z0JBZUssU0FBUztzQkFEbkIsS0FBSztnQkFZSyxTQUFTO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlZExpc3RSZXNvdXJjZSwgUHJvcGVydHksIFByb3BlcnR5VHlwZSwgUmVzb3VyY2UsIFJlc291cmNlRHRvLCBUZW1wbGF0ZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1ldGFkYXRhLCBMYXp5TG9hZEV2ZW50LCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvYmxlbS1kZXRhaWxzJztcclxuaW1wb3J0IHsgQXZhdGFyR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tZGF0YS5zZXJ2aWNlJ1xyXG5cclxuZXhwb3J0IGVudW0gQ29sdW1uRmlsdGVyVHlwZSB7XHJcbiAgdGV4dCA9ICd0ZXh0JyxcclxuICBudW1lcmljID0gJ251bWVyaWMnLFxyXG4gIGJvb2xlYW4gPSAnYm9vbGVhbicsXHJcbiAgZGF0ZSA9ICdkYXRlJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQ8VExpc3REdG8gZXh0ZW5kcyBSZXNvdXJjZUR0bz4ge1xyXG4gIHByaXZhdGUgc3RhdGljIF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKVxyXG4gICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXHJcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiZGRcIilcclxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJNTVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzM1wiLCBcInl5XCIpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjcmVhdGVCdXR0b25NZW51PzogTWVudUl0ZW1bXTtcclxuICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHVibGljIGxvYWQgPSBfLmRlYm91bmNlKHRoaXMubG9hZDIsIDEwMCk7XHJcbiAgcHVibGljIHJlc291cmNlPzogUGFnZWRMaXN0UmVzb3VyY2U8VExpc3REdG8+O1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJvd3NQZXJQYWdlOiBudW1iZXJbXTtcclxuXHJcbiAgcHJpdmF0ZSBfYXBpTmFtZT86IHN0cmluZztcclxuICBwcml2YXRlIF9lZGl0TGluayA9ICcvZWRpdCc7XHJcbiAgcHJpdmF0ZSBfbGFzdEV2ZW50OiBMYXp5TG9hZEV2ZW50O1xyXG4gIHByaXZhdGUgX3JlbD86IHN0cmluZztcclxuICBwcml2YXRlIF9zb3J0RmllbGQgPSAnJztcclxuICBwcml2YXRlIF9zb3J0T3JkZXIgPSAxO1xyXG4gIHByaXZhdGUgX3RlbXBsYXRlPzogVGVtcGxhdGU7XHJcbiAgcHJpdmF0ZSBfdG90YWxSZWNvcmRzID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jbGllbnRzOiBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBhdmF0YXJHZW5lcmF0b3I6IEF2YXRhckdlbmVyYXRvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyKSB7XHJcbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gWzEwLCAyNSwgNTBdO1xyXG5cclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IHtcclxuICAgICAgcm93czogdGhpcy5yb3dzUGVyUGFnZVswXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCk6IHR5cGVvZiBQcm9wZXJ0eVR5cGUge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FwaU5hbWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBQcm9wZXJ0eVtdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlPy5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAudHlwZSAhPT0gUHJvcGVydHlUeXBlLkhpZGRlbikgPz8gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5fZGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZWRpdExpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRpdExpbms7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZWRpdExpbmsodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKVxyXG4gICAgICB0aGlzLl9lZGl0TGluayA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZXdIcmVmKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uZmluZExpbmsoJ25ldycpPy5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWw7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcmVsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3JlbCA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXN0RXZlbnQ/LnJvd3MgfHwgMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc29ydEZpZWxkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNvcnRGaWVsZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zb3J0RmllbGQgPSB2YWx1ZSA/PyAnJztcclxuICAgIHRoaXMuX2xhc3RFdmVudC5zb3J0RmllbGQgPSB2YWx1ZTtcclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzb3J0T3JkZXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0T3JkZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc29ydE9yZGVyKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3NvcnRPcmRlciA9IHZhbHVlID8/IDE7XHJcbiAgICB0aGlzLl9sYXN0RXZlbnQuc29ydE9yZGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbFJlY29yZHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFJlc291cmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/Ll9lbWJlZGRlZD8uaXRlbXMgfHwgW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCB0b3RhbFJlY29yZHModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWUgfHwgMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVOZXcoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFt0aGlzLmVkaXRMaW5rLCB0aGlzLmFwaU5hbWUsIHRoaXMucmVsLCB0aGlzLm5ld0hyZWZdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGUocmVzb3VyY2U6IFJlc291cmNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy5yZWwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmdldENsaWVudCgpLmRlbGV0ZShyZXNvdXJjZSk7XHJcblxyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0RlbGV0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gZGVsZXRlZC4nIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWQyKGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy5yZWwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9sYXN0RXZlbnQgPSBldmVudDtcclxuXHJcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gT0RhdGFTZXJ2aWNlLmNyZWF0ZVBhcmFtZXRlcnNGcm9tVGFibGVMb2FkRXZlbnQoZXZlbnQsIHRoaXMudGVtcGxhdGUpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldExpc3Q8VExpc3REdG8+KHRoaXMucmVsLCBwYXJhbWV0ZXJzKTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldEFsbFRlbXBsYXRlcyhyZXNwb25zZS5ib2R5KTtcclxuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHRlbXBsYXRlc1tcIlNlYXJjaFwiXTtcclxuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlYXJjaCB0ZW1wbGF0ZSBmb3VuZCBpbiB0aGUgQVBJIHJlc3BvbnNlLlwiKTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgQVBJLiAnICsgZSwgZGF0YTogZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5yZXNvdXJjZS50b3RhbFBhZ2VzICYmIHBhcmFtZXRlcnMuJHRvcCA/IHRoaXMucmVzb3VyY2UudG90YWxQYWdlcyAqIHBhcmFtZXRlcnMuJHRvcCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKHJlc291cmNlOiBSZXNvdXJjZSkge1xyXG4gICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgbWVzc2FnZTogJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyByZXNvdXJjZT8nLFxyXG4gICAgICBoZWFkZXI6ICdDb25maXJtIGRlbGV0ZScsXHJcbiAgICAgIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JyxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB0aGlzLmRlbGV0ZShyZXNvdXJjZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvQ29sdW1uRmlsdGVyVHlwZShwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZSkgOiBDb2x1bW5GaWx0ZXJUeXBle1xyXG4gICAgc3dpdGNoKHByb3BlcnR5VHlwZSkge1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5OdW1iZXI6XHJcbiAgICAgICAgcmV0dXJuIENvbHVtbkZpbHRlclR5cGUubnVtZXJpYztcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuQm9vbDpcclxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS5ib29sZWFuO1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRlOlxyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRldGltZUxvY2FsOlxyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRldGltZU9mZnNldDpcclxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS5kYXRlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBDb2x1bW5GaWx0ZXJUeXBlLnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSRVNUd29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxufVxyXG4iLCI8cC10YWJsZSBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICBbbGF6eV09XCJ0cnVlXCJcclxuICAgICAgICAgW2xhenlMb2FkT25Jbml0XT1cImZhbHNlXCJcclxuICAgICAgICAgKG9uTGF6eUxvYWQpPVwibG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICBbc2hvd0luaXRpYWxTb3J0QmFkZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXHJcbiAgICAgICAgIFtzb3J0T3JkZXJdPVwic29ydE9yZGVyXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbC5wcm9tcHR9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wubmFtZVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwidG9Db2x1bW5GaWx0ZXJUeXBlKGNvbC50eXBlKVwiIFtmaWVsZF09XCJjb2wubmFtZVwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhY3JlYXRlQnV0dG9uTWVudVwiIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIGljb249XCJmYXMgZmEtcGx1c1wiIHBCdXR0b24gW3JvdXRlckxpbmtdPVwiW2VkaXRMaW5rLCBhcGlOYW1lLCByZWwsIG5ld0hyZWZdXCIgcFRvb2x0aXA9XCJDcmVhdGUgbmV3XCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtc3BsaXRCdXR0b24gKm5nSWY9XCJjcmVhdGVCdXR0b25NZW51XCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3NcIiBpY29uPVwiZmFzIGZhLXBsdXNcIiBwVG9vbHRpcD1cIkNyZWF0ZSBuZXdcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCIgKG9uQ2xpY2spPVwiY3JlYXRlTmV3KClcIiBbbW9kZWxdPVwiY3JlYXRlQnV0dG9uTWVudVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1zcGxpdEJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVudGl0eSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0ZCBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJ3LWF2YXRhciAqbmdJZj1cImNvbC5uYW1lID09PSAnY3JlYXRlZEJ5JyB8fCBjb2wubmFtZSA9PT0gJ2xhc3RDaGFuZ2VkQnknXCIgW3VzZXJdPVwiZW50aXR5W2NvbC5uYW1lXVwiPjwvcnctYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLm5hbWUgIT09ICdjcmVhdGVkQnknICYmIGNvbC5uYW1lICE9PSAnbGFzdENoYW5nZWRCeSdcIj57e2VudGl0eVtjb2wubmFtZV19fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5OdW1iZXJcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5Cb29sXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48cC10cmlTdGF0ZUNoZWNrYm94IFsobmdNb2RlbCldPVwiZW50aXR5W2NvbC5uYW1lXVwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9wLXRyaVN0YXRlQ2hlY2tib3g+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRlXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBkYXRlOmRhdGVGb3JtYXR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVMb2NhbFwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgZGF0ZTpkYXRlRm9ybWF0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lT2Zmc2V0XCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBkYXRlOmRhdGVGb3JtYXR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+PHAgKm5nRm9yPVwibGV0IGFycmF5RWxlbWVudCBvZiBlbnRpdHlbY29sLm5hbWVdXCI+e3thcnJheUVsZW1lbnQgfCBqc29ufX08L3A+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5PYmplY3RcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IGpzb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIHBCdXR0b24gcFRvb2x0aXA9XCJWaWV3L0VkaXRcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCIgW3JvdXRlckxpbmtdPVwiW2VkaXRMaW5rLCBhcGlOYW1lLCByZWwsIGVudGl0eS5fbGlua3M/LnNlbGZbMF0uaHJlZl1cIiBpY29uPVwiZmFzIGZhLWVkaXRcIj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwVG9vbHRpcD1cIkRlbGV0ZVwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBwQnV0dG9uICpuZ0lmPVwiZW50aXR5Ll9saW5rcy5kZWxldGVcIiAoY2xpY2spPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoZW50aXR5KVwiIGljb249XCJmYXMgZmEtdHJhc2gtYWx0XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXgtMiBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiOFwiPk5vIGVudHJpZXMgZm91bmQuPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvcC10YWJsZT5cclxuXHJcbjxwLXRvYXN0PjwvcC10b2FzdD5cclxuPHAtY29uZmlybURpYWxvZz48L3AtY29uZmlybURpYWxvZz5cclxuIl19
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUk1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFVOUQsTUFBTSxPQUFPLDBCQUEwQjtJQTJDckMsWUFDbUIsUUFBbUMsRUFDbkMsb0JBQXlDLEVBQ3pDLGVBQStCLEVBQ2hDLGVBQWdDLEVBQy9CLE9BQWU7UUFKZixhQUFRLEdBQVIsUUFBUSxDQUEyQjtRQUNuQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDL0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQTVDM0IsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixTQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBR3pDLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFXcEIsb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBRXZDLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLGVBQVUsR0FB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LENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFFMUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7dUhBN0pVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHVKQ2hCdkMsdVJBVUE7MkZETWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLFNBQVM7a09BT1osZ0JBQWdCO3NCQUR0QixLQUFLO2dCQWFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBd0NLLE9BQU87c0JBRGpCLEtBQUs7Z0JBbUJLLEdBQUc7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZWRMaXN0UmVzb3VyY2UsIFJlc291cmNlLCBSZXNvdXJjZUR0bywgUmVzb3VyY2VPZkR0bywgVGVtcGxhdGUgfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IFByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2JsZW0tZGV0YWlscyc7XHJcbmltcG9ydCB7IEF2YXRhckdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F2YXRhci1nZW5lcmF0b3InO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPRGF0YVBhcmFtZXRlcnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvby1kYXRhJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1saXN0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1saXN0LXZpZXcuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudDxUTGlzdER0byBleHRlbmRzIFJlc291cmNlRHRvPiB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNyZWF0ZUJ1dHRvbk1lbnU/OiBNZW51SXRlbVtdO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgbG9hZCA9IF8uZGVib3VuY2UodGhpcy5sb2FkSW50ZXJuYWwsIDEwMCk7XHJcbiAgcHVibGljIHJlc291cmNlPzogUGFnZWRMaXN0UmVzb3VyY2U8VExpc3REdG8+O1xyXG5cclxuICBwcml2YXRlIF9lZGl0TGluayA9ICcvZWRpdCc7XHJcblxyXG4gIHB1YmxpYyBnZXQgZWRpdExpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRpdExpbms7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZWRpdExpbmsodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYodmFsdWUpXHJcbiAgICAgIHRoaXMuX2VkaXRMaW5rID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xhc3RQYXJhbWV0ZXJzOiBPRGF0YVBhcmFtZXRlcnMgPSB7fTtcclxuICBwcml2YXRlIF90ZW1wbGF0ZT86IFRlbXBsYXRlO1xyXG4gIHB1YmxpYyBfdG90YWxSZWNvcmRzID0gMDtcclxuXHJcbiAgcHVibGljIGhlYWRlck1lbnU6IE1lbnVJdGVtW10gPSBbXTtcclxuICBwdWJsaWMgcm93TWVudTogKHJvdzogUmVzb3VyY2VPZkR0bzxUTGlzdER0bz4sIG9wZW5lZEJ5UmlnaHRDbGljazogYm9vbGVhbikgPT4gTWVudUl0ZW1bXSA9IChyb3csIG9wZW5lZEJ5UmlnaHRDbGljaykgPT4ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGljb246IFwiZmFzIGZhLWVkaXRcIixcclxuICAgICAgICBsYWJlbDogb3BlbmVkQnlSaWdodENsaWNrID8gXCJWaWV3IC8gRWRpdFwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRvb2x0aXA6ICFvcGVuZWRCeVJpZ2h0Q2xpY2sgPyBcIlZpZXcgLyBFZGl0XCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uOiBcImxlZnRcIixcclxuICAgICAgICByb3V0ZXJMaW5rOiBbdGhpcy5lZGl0TGluaywgdGhpcy5hcGlOYW1lLCB0aGlzLnJlbCwgcm93Ll9saW5rcz8uc2VsZlswXS5ocmVmXVxyXG4gICAgICB9LCB7XHJcbiAgICAgICAgaWNvbjogXCJmYXMgZmEtdHJhc2gtYWx0XCIsXHJcbiAgICAgICAgbGFiZWw6IG9wZW5lZEJ5UmlnaHRDbGljayA/IFwiRGVsZXRlXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdG9vbHRpcDogIW9wZW5lZEJ5UmlnaHRDbGljayA/IFwiRGVsZXRlXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uOiBcImxlZnRcIixcclxuICAgICAgICBzdHlsZUNsYXNzOiBcInAtYnV0dG9uLWRhbmdlclwiLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocm93KVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRzOiBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyByZWFkb25seSBhdmF0YXJHZW5lcmF0b3I6IEF2YXRhckdlbmVyYXRvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcGlOYW1lPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdFBhcmFtZXRlcnMpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hcGlOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZXdIcmVmKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uZmluZExpbmsoJ25ldycpPy5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVsITogc3RyaW5nO1xyXG4gIHB1YmxpYyBnZXQgcmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVsO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcmVsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JlbCA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RQYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbFJlY29yZHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFJlc291cmNlT2ZEdG88VExpc3REdG8+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/Ll9lbWJlZGRlZD8uaXRlbXMgfHwgW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlTmV3KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbdGhpcy5lZGl0TGluaywgdGhpcy5hcGlOYW1lLCB0aGlzLnJlbCwgdGhpcy5uZXdIcmVmXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGUocmVzb3VyY2UpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRJbnRlcm5hbCh0aGlzLl9sYXN0UGFyYW1ldGVycyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZEludGVybmFsKHBhcmFtZXRlcnM6IE9EYXRhUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0PFRMaXN0RHRvPih0aGlzLnJlbCwgcGFyYW1ldGVycyk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlcyBmcm9tIHRoZSBBUEkuJywgZGF0YTogcmVzcG9uc2UgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRBbGxUZW1wbGF0ZXMocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbXCJTZWFyY2hcIl07XHJcbiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZWFyY2ggdGVtcGxhdGUgZm91bmQgaW4gdGhlIEFQSSByZXNwb25zZS5cIik7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIEFQSS4gJyArIGUsIGRhdGE6IGUgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNwb25zZS5ib2R5O1xyXG4gICAgICBjb25zdCByb3dzUGVyUGFnZSA9IHBhcmFtZXRlcnMuJHRvcCA/PyByZXNwb25zZS5ib2R5Ll9lbWJlZGRlZC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSByZXNwb25zZS5ib2R5LnRvdGFsUGFnZXMgPz8gMTtcclxuICAgICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdG90YWxQYWdlcyAqIHJvd3NQZXJQYWdlO1xyXG5cclxuICAgICAgdGhpcy5oZWFkZXJNZW51ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGljb246IFwiZmFzIGZhLXBsdXNcIixcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6IFwicC1idXR0b24tc3VjY2Vzc1wiLFxyXG4gICAgICAgICAgcm91dGVyTGluazogW3RoaXMuZWRpdExpbmssIHRoaXMuYXBpTmFtZSwgdGhpcy5yZWwsIHRoaXMubmV3SHJlZl0sXHJcbiAgICAgICAgICBpdGVtczogdGhpcy5jcmVhdGVCdXR0b25NZW51XHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XHJcbiAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXHJcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKHJlc291cmNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSZXN0V29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxufVxyXG4iLCI8cnctdGFibGVcclxuICBbYXBpXT1cImFwaU5hbWVcIlxyXG4gIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiXHJcbiAgW3Jvd3NdPVwidmFsdWVcIlxyXG4gIFtoZWFkZXJNZW51XT1cImhlYWRlck1lbnVcIlxyXG4gIFtyb3dNZW51XT1cInJvd01lbnVcIlxyXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgKG9uRmlsdGVyT3JTb3J0Q2hhbmdlZCk9XCJsb2FkKCRldmVudClcIj5cclxuPC9ydy10YWJsZT5cclxuIl19
@@ -3,22 +3,33 @@
3
3
  */
4
4
  export * from './lib/constants/link-names';
5
5
  export * from './lib/components/restworld-avatar/restworld-avatar.component';
6
+ export * from './lib/components/restworld-file/restworld-file.component';
7
+ export * from './lib/components/restworld-form/restworld-form.component';
8
+ export * from './lib/components/restworld-id-navigation/restworld-id-navigation.component';
9
+ export * from './lib/components/restworld-image/restworld-image.component';
10
+ export * from './lib/components/restworld-inputs/restworld-inputs';
11
+ export * from './lib/components/restworld-label/restworld-label.component';
12
+ export * from './lib/components/restworld-menu-button/restworld-menu-button.component';
13
+ export * from './lib/components/restworld-table/restworld-table.component';
14
+ export * from './lib/components/restworld-validation-errors/restworld-validation-errors.component';
15
+ export * from './lib/constants/link-names';
6
16
  export * from './lib/models/api-url';
7
17
  export * from './lib/models/client-settings';
18
+ export * from './lib/models/o-data';
8
19
  export * from './lib/models/problem-details';
20
+ export * from './lib/models/restworld-image';
9
21
  export * from './lib/models/restworld-options';
10
- export * from './lib/pipes/safe-url.pipe';
22
+ export * from './lib/models/special-properties';
23
+ export * from './lib/models/templating';
11
24
  export * from './lib/pipes/as.pipe';
25
+ export * from './lib/pipes/safe-url.pipe';
12
26
  export * from './lib/services/avatar-generator';
13
27
  export * from './lib/services/form.service';
14
28
  export * from './lib/services/o-data.service';
15
- export * from './lib/services/restworld-client';
16
29
  export * from './lib/services/restworld-client-collection';
30
+ export * from './lib/services/restworld-client';
17
31
  export * from './lib/services/settings.service';
18
- export * from './lib/views/restworld-edit-form/restworld-edit-form.component';
19
32
  export * from './lib/views/restworld-edit-view/restworld-edit-view.component';
20
- export * from './lib/views/restworld-file-view/restworld-file-view.component';
21
- export * from './lib/views/restworld-image-view/restworld-image-view.component';
22
33
  export * from './lib/views/restworld-list-view/restworld-list-view.component';
23
34
  export * from './lib/restworld-client.module';
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLDhEQUE4RCxDQUFBO0FBRTVFLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLHFCQUFxQixDQUFBO0FBRW5DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELGNBQWMsK0RBQStELENBQUM7QUFDOUUsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLCtEQUErRCxDQUFBO0FBQzdFLGNBQWMsaUVBQWlFLENBQUE7QUFDL0UsY0FBYywrREFBK0QsQ0FBQTtBQUU3RSxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtcmVzdHdvcmxkLWNsaWVudFxuICovXHJcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzL2xpbmstbmFtZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1hdmF0YXIvcmVzdHdvcmxkLWF2YXRhci5jb21wb25lbnQnXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hcGktdXJsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jbGllbnQtc2V0dGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3Byb2JsZW0tZGV0YWlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvcmVzdHdvcmxkLW9wdGlvbnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9zYWZlLXVybC5waXBlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvYXMucGlwZSdcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvby1kYXRhLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2V0dGluZ3Muc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZpZXdzL3Jlc3R3b3JsZC1lZGl0LWZvcm0vcmVzdHdvcmxkLWVkaXQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWVkaXQtdmlldy9yZXN0d29ybGQtZWRpdC12aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92aWV3cy9yZXN0d29ybGQtZmlsZS12aWV3L3Jlc3R3b3JsZC1maWxlLXZpZXcuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWltYWdlLXZpZXcvcmVzdHdvcmxkLWltYWdlLXZpZXcuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWxpc3Qtdmlldy9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudCdcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzdHdvcmxkLWNsaWVudC5tb2R1bGUnOyJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLDRFQUE0RSxDQUFDO0FBQzNGLGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLG9GQUFvRixDQUFDO0FBRW5HLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsK0RBQStELENBQUM7QUFFOUUsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LXJlc3R3b3JsZC1jbGllbnRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMvbGluay1uYW1lcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWF2YXRhci9yZXN0d29ybGQtYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1maWxlL3Jlc3R3b3JsZC1maWxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pZC1uYXZpZ2F0aW9uL3Jlc3R3b3JsZC1pZC1uYXZpZ2F0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbWFnZS9yZXN0d29ybGQtaW1hZ2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWxhYmVsL3Jlc3R3b3JsZC1sYWJlbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtbWVudS1idXR0b24vcmVzdHdvcmxkLW1lbnUtYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC10YWJsZS9yZXN0d29ybGQtdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLXZhbGlkYXRpb24tZXJyb3JzL3Jlc3R3b3JsZC12YWxpZGF0aW9uLWVycm9ycy5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMvbGluay1uYW1lcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hcGktdXJsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jbGllbnQtc2V0dGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL28tZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvcHJvYmxlbS1kZXRhaWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yZXN0d29ybGQtaW1hZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3Jlc3R3b3JsZC1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9zcGVjaWFsLXByb3BlcnRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3RlbXBsYXRpbmcnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9hcy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3NhZmUtdXJsLnBpcGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdmF0YXItZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9vLWRhdGEuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWVkaXQtdmlldy9yZXN0d29ybGQtZWRpdC12aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92aWV3cy9yZXN0d29ybGQtbGlzdC12aWV3L3Jlc3R3b3JsZC1saXN0LXZpZXcuY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzdHdvcmxkLWNsaWVudC5tb2R1bGUnOyJdfQ==