@tuki-io/tuki-widgets 0.0.219-dev.5 → 0.0.219-dev.51

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 (193) hide show
  1. package/di2mt/api/api.endpoints.d.ts +3 -0
  2. package/esm2020/di2mt/api/api.endpoints.mjs +4 -1
  3. package/esm2020/locations/public-api.mjs +8 -0
  4. package/esm2020/locations/src/app.constants.mjs +14 -0
  5. package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +23 -0
  6. package/esm2020/locations/src/locations.component.mjs +351 -0
  7. package/esm2020/locations/src/locations.module.mjs +42 -0
  8. package/esm2020/locations/src/material.module.mjs +55 -0
  9. package/esm2020/locations/src/services/api.service.mjs +67 -0
  10. package/esm2020/locations/src/services/locations.service.mjs +65 -0
  11. package/esm2020/locations/src/types/location.mjs +2 -0
  12. package/esm2020/locations/src/utils/app-loader/app-loader.mjs +14 -0
  13. package/esm2020/locations/tuki-io-tuki-widgets-locations.mjs +5 -0
  14. package/esm2020/meetings/public-api.mjs +8 -0
  15. package/esm2020/meetings/src/app.constants.mjs +9 -0
  16. package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +107 -0
  17. package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +98 -0
  18. package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +110 -0
  19. package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +65 -0
  20. package/esm2020/meetings/src/material.module.mjs +76 -0
  21. package/esm2020/meetings/src/meetings.component.mjs +65 -0
  22. package/esm2020/meetings/src/meetings.module.mjs +51 -0
  23. package/esm2020/meetings/src/services/api.service.mjs +67 -0
  24. package/esm2020/meetings/src/services/live-meetings.service.mjs +178 -0
  25. package/esm2020/meetings/src/services/meeting-spaces.service.mjs +102 -0
  26. package/esm2020/meetings/src/types/live-meeting.mjs +2 -0
  27. package/esm2020/meetings/src/types/meeting-space.mjs +2 -0
  28. package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +14 -0
  29. package/esm2020/meetings/tuki-io-tuki-widgets-meetings.mjs +5 -0
  30. package/esm2020/shared/public-api.mjs +4 -0
  31. package/esm2020/shared/src/ui/material.module.mjs +188 -0
  32. package/esm2020/shared/src/ui/shared.module.mjs +36 -0
  33. package/esm2020/shared/src/ui/tk-page-section/tk-page-section.component.mjs +13 -0
  34. package/esm2020/shared/src/ui/tk-page-section-row/tk-page-section-row.component.mjs +13 -0
  35. package/esm2020/shared/src/ui/ui.module.mjs +37 -0
  36. package/esm2020/shared/tuki-io-tuki-widgets-shared.mjs +5 -0
  37. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
  38. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +4 -0
  39. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
  40. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +60 -13
  41. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +2 -1
  42. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +8 -6
  43. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +13 -9
  44. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  45. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +1 -4
  46. package/esm2020/user-manage/src/app.constants.mjs +7 -1
  47. package/esm2020/user-manage/src/classes/simplified-user.mjs +5 -3
  48. package/esm2020/user-manage/src/device-list/device-list.component.mjs +7 -4
  49. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +6 -3
  50. package/esm2020/user-manage/src/material.module.mjs +14 -7
  51. package/esm2020/user-manage/src/services/dcp-api.service.mjs +79 -0
  52. package/esm2020/user-manage/src/services/user.service.mjs +65 -19
  53. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +12 -7
  54. package/esm2020/user-manage/src/user-manage-widget.component.mjs +64 -23
  55. package/esm2020/user-manage/src/user-manage.module.mjs +10 -3
  56. package/esm2020/users-list/src/app.constants.mjs +2 -1
  57. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  58. package/esm2020/users-list/src/classes/user-list.mjs +2 -1
  59. package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +3 -3
  60. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +14 -3
  61. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -3
  62. package/esm2020/users-list/src/users-list.component.mjs +100 -17
  63. package/esm2020/workspaces/public-api.mjs +8 -0
  64. package/esm2020/workspaces/src/app.constants.mjs +27 -0
  65. package/esm2020/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.mjs +32 -0
  66. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +61 -0
  67. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
  68. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +127 -0
  69. package/esm2020/workspaces/src/material.module.mjs +83 -0
  70. package/esm2020/workspaces/src/services/api-webex.service.mjs +14 -0
  71. package/esm2020/workspaces/src/services/api.service.mjs +67 -0
  72. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +122 -0
  73. package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +59 -0
  74. package/esm2020/workspaces/src/services/workspaces.service.mjs +105 -0
  75. package/esm2020/workspaces/src/types/workspace.mjs +4 -0
  76. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
  77. package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
  78. package/esm2020/workspaces/src/utils/workspace-name.mjs +8 -0
  79. package/esm2020/workspaces/src/workspaces.component.mjs +306 -0
  80. package/esm2020/workspaces/src/workspaces.module.mjs +51 -0
  81. package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
  82. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +3 -0
  83. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  84. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +623 -0
  85. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -0
  86. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +894 -0
  87. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
  88. package/fesm2015/tuki-io-tuki-widgets-shared.mjs +280 -0
  89. package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -0
  90. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +111 -32
  91. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  92. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +0 -13
  93. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  94. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +253 -60
  95. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  96. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +121 -22
  97. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  98. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +1082 -0
  99. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  100. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +3 -0
  101. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  102. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +617 -0
  103. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -0
  104. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +902 -0
  105. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
  106. package/fesm2020/tuki-io-tuki-widgets-shared.mjs +280 -0
  107. package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -0
  108. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +104 -28
  109. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  110. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +0 -13
  111. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  112. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +248 -58
  113. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  114. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +120 -22
  115. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  116. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +1089 -0
  117. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  118. package/locations/index.d.ts +5 -0
  119. package/locations/public-api.d.ts +2 -0
  120. package/locations/src/app.constants.d.ts +9 -0
  121. package/locations/src/location-confirm-dialog/location-confirm-dialog.component.d.ts +15 -0
  122. package/locations/src/locations.component.d.ts +86 -0
  123. package/locations/src/locations.module.d.ts +13 -0
  124. package/locations/src/material.module.d.ts +12 -0
  125. package/locations/src/services/api.service.d.ts +18 -0
  126. package/locations/src/services/locations.service.d.ts +19 -0
  127. package/locations/src/types/location.d.ts +28 -0
  128. package/locations/src/utils/app-loader/app-loader.d.ts +6 -0
  129. package/meetings/index.d.ts +5 -0
  130. package/meetings/public-api.d.ts +2 -0
  131. package/meetings/src/app.constants.d.ts +8 -0
  132. package/meetings/src/components/live-meetings/live-meeting/live-meeting.component.d.ts +34 -0
  133. package/meetings/src/components/live-meetings/live-meetings.component.d.ts +43 -0
  134. package/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.d.ts +39 -0
  135. package/meetings/src/components/meeting-spaces/meeting-spaces.component.d.ts +27 -0
  136. package/meetings/src/material.module.d.ts +15 -0
  137. package/meetings/src/meetings.component.d.ts +29 -0
  138. package/meetings/src/meetings.module.d.ts +16 -0
  139. package/meetings/src/services/api.service.d.ts +18 -0
  140. package/meetings/src/services/live-meetings.service.d.ts +9 -0
  141. package/meetings/src/services/meeting-spaces.service.d.ts +16 -0
  142. package/meetings/src/types/live-meeting.d.ts +71 -0
  143. package/meetings/src/types/meeting-space.d.ts +52 -0
  144. package/meetings/src/utils/app-loader/app-loader.d.ts +6 -0
  145. package/package.json +33 -1
  146. package/shared/index.d.ts +5 -0
  147. package/shared/public-api.d.ts +3 -0
  148. package/shared/src/ui/material.module.d.ts +28 -0
  149. package/shared/src/ui/shared.module.d.ts +10 -0
  150. package/{user-device-manage/src/shared/tk-page-section/page-section.component.d.ts → shared/src/ui/tk-page-section/tk-page-section.component.d.ts} +1 -1
  151. package/shared/src/ui/tk-page-section-row/tk-page-section-row.component.d.ts +6 -0
  152. package/shared/src/ui/ui.module.d.ts +11 -0
  153. package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
  154. package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +1 -0
  155. package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
  156. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +2 -0
  157. package/user-device-manage/src/classes/simplified-user.d.ts +1 -1
  158. package/user-device-manage/src/user-device-manage.module.d.ts +9 -10
  159. package/user-manage/src/app.constants.d.ts +6 -0
  160. package/user-manage/src/classes/simplified-user.d.ts +11 -1
  161. package/user-manage/src/device-list/device-list.component.d.ts +2 -0
  162. package/user-manage/src/material.module.d.ts +2 -1
  163. package/user-manage/src/services/dcp-api.service.d.ts +21 -0
  164. package/user-manage/src/services/user.service.d.ts +8 -1
  165. package/user-manage/src/user-calling/user-calling.component.d.ts +3 -2
  166. package/user-manage/src/user-manage-widget.component.d.ts +10 -2
  167. package/user-manage/src/user-manage.module.d.ts +2 -1
  168. package/users-list/src/app.constants.d.ts +1 -0
  169. package/users-list/src/classes/simlified-user.d.ts +1 -1
  170. package/users-list/src/classes/user-list.d.ts +4 -0
  171. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +3 -1
  172. package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +2 -1
  173. package/users-list/src/users-list.component.d.ts +6 -1
  174. package/workspaces/index.d.ts +5 -0
  175. package/workspaces/public-api.d.ts +2 -0
  176. package/workspaces/src/app.constants.d.ts +25 -0
  177. package/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.d.ts +20 -0
  178. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +25 -0
  179. package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
  180. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +42 -0
  181. package/workspaces/src/material.module.d.ts +16 -0
  182. package/workspaces/src/services/api-webex.service.d.ts +6 -0
  183. package/workspaces/src/services/api.service.d.ts +18 -0
  184. package/workspaces/src/services/workspace-detail.service.d.ts +20 -0
  185. package/workspaces/src/services/workspaces-migration.service.d.ts +18 -0
  186. package/workspaces/src/services/workspaces.service.d.ts +11 -0
  187. package/workspaces/src/types/workspace.d.ts +416 -0
  188. package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
  189. package/workspaces/src/utils/device-icon.d.ts +1 -0
  190. package/workspaces/src/utils/workspace-name.d.ts +1 -0
  191. package/workspaces/src/workspaces.component.d.ts +74 -0
  192. package/workspaces/src/workspaces.module.d.ts +16 -0
  193. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +0 -13
@@ -0,0 +1,127 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { getDeviceIcon as resolveDeviceIcon } from '../../utils/device-icon';
3
+ import { withoutSep } from '../../utils/workspace-name';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/material/icon";
7
+ import * as i3 from "@angular/material/progress-spinner";
8
+ import * as i4 from "@angular/material/menu";
9
+ import * as i5 from "@angular/material/paginator";
10
+ import * as i6 from "@angular/material/tooltip";
11
+ export class WorkspacesTableComponent {
12
+ constructor() {
13
+ this.workspaces = [];
14
+ this.total = 0;
15
+ this.pageIndex = 0;
16
+ this.pageSize = 10;
17
+ this.pageSizeOptions = [10, 25, 50, 100];
18
+ this.pendingWorkspaceIds = new Set();
19
+ this.openWorkspace = new EventEmitter();
20
+ this.licenseWithHybrid = new EventEmitter();
21
+ this.migrateToMT = new EventEmitter();
22
+ this.enableWebexCalling = new EventEmitter();
23
+ this.migrateToUCM = new EventEmitter();
24
+ this.addDevice = new EventEmitter();
25
+ this.pageChange = new EventEmitter();
26
+ this.selectedIds = new Set();
27
+ }
28
+ get allSelected() {
29
+ return this.workspaces.length > 0 && this.selectedIds.size === this.workspaces.length;
30
+ }
31
+ get someSelected() {
32
+ return this.selectedIds.size > 0 && !this.allSelected;
33
+ }
34
+ toggleAll() {
35
+ this.selectedIds = this.allSelected ? new Set() : new Set(this.workspaces.map(workspace => workspace.id));
36
+ }
37
+ toggleRow(workspaceId) {
38
+ const nextSelection = new Set(this.selectedIds);
39
+ if (nextSelection.has(workspaceId)) {
40
+ nextSelection.delete(workspaceId);
41
+ }
42
+ else {
43
+ nextSelection.add(workspaceId);
44
+ }
45
+ this.selectedIds = nextSelection;
46
+ }
47
+ isSelected(workspaceId) {
48
+ return this.selectedIds.has(workspaceId);
49
+ }
50
+ onOpenWorkspace(workspace, connectionType) {
51
+ if (!this.canOpenWorkspace(workspace)) {
52
+ return;
53
+ }
54
+ this.openWorkspace.emit({ id: workspace.id, connectionType: connectionType ?? this.resolveConnectionType(workspace) });
55
+ }
56
+ canOpenWorkspace(workspace) {
57
+ return !!workspace.location;
58
+ }
59
+ resolveConnectionType(workspace) {
60
+ return !workspace.isHybrid && workspace.device.webexUUID != null ? 'webex' : 'di';
61
+ }
62
+ onAddDevice(workspace, event) {
63
+ event.stopPropagation();
64
+ this.addDevice.emit(workspace.id);
65
+ }
66
+ onPage(event) {
67
+ this.selectedIds = new Set();
68
+ this.pageChange.emit({ pageIndex: event.pageIndex, pageSize: event.pageSize });
69
+ }
70
+ getDeviceIcon(model) {
71
+ return resolveDeviceIcon(model);
72
+ }
73
+ getDisplayName(workspace) {
74
+ return withoutSep(workspace.displayName);
75
+ }
76
+ isPending(workspaceId) {
77
+ return this.pendingWorkspaceIds.has(workspaceId);
78
+ }
79
+ isMoveToMTDisabled(workspace) {
80
+ if (workspace.status !== 'active') {
81
+ return true;
82
+ }
83
+ return !workspace.isHybrid && !!workspace.device.webexUUID;
84
+ }
85
+ isEnableWebexCallingDisabled(workspace) {
86
+ if (workspace.status !== 'inactive') {
87
+ return true;
88
+ }
89
+ return !workspace.isHybrid && !workspace.device.webexUUID;
90
+ }
91
+ isMigrateToUCMDisabled(workspace) {
92
+ return !workspace.device.webexUUID || workspace.status !== 'active';
93
+ }
94
+ }
95
+ WorkspacesTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
96
+ WorkspacesTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WorkspacesTableComponent, selector: "tk-workspaces-table", inputs: { workspaces: "workspaces", total: "total", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", pendingWorkspaceIds: "pendingWorkspaceIds" }, outputs: { openWorkspace: "openWorkspace", licenseWithHybrid: "licenseWithHybrid", migrateToMT: "migrateToMT", enableWebexCalling: "enableWebexCalling", migrateToUCM: "migrateToUCM", addDevice: "addDevice", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"tk-workspaces-table__bulk-bar\">Select one or more workspaces for bulk actions</div>\n\n<div class=\"tk-workspaces-table__wrapper\">\n <table class=\"tk-workspaces-table__table\">\n <thead>\n <tr>\n <th class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"allSelected\" [indeterminate]=\"someSelected\" (change)=\"toggleAll()\" />\n </th>\n <th>Name</th>\n <th>Devices</th>\n <th>Scheduling</th>\n <th>Calling</th>\n <th>Provisioning Type</th>\n <th>Status</th>\n <th class=\"tk-workspaces-table__settings-cell\">\n <mat-icon class=\"tk-workspaces-table__settings-icon\">settings</mat-icon>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let workspace of workspaces\"\n [class.tk-workspaces-table__row--selected]=\"isSelected(workspace.id)\"\n [class.tk-workspaces-table__row--disabled]=\"!canOpenWorkspace(workspace)\">\n <td class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"isSelected(workspace.id)\" (change)=\"toggleRow(workspace.id)\" />\n </td>\n <td class=\"tk-workspaces-table__name-cell\" (click)=\"onOpenWorkspace(workspace)\">\n <div class=\"tk-workspaces-table__name-wrapper\">\n <span class=\"tk-workspaces-table__name-icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspaces-table__name-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspaces-table__name-link\">{{ getDisplayName(workspace) }}</a>\n <div class=\"tk-workspaces-table__name-meta\">\n <span class=\"tk-workspaces-table__name-type\">{{ workspace.typeLabel }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__name-capacity\">{{ workspace.capacity ?? 'No capacity' }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <!-- <mat-icon class=\"tk-workspaces-table__meta-icon\">location_on</mat-icon> -->\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <a\n *ngIf=\"workspace.location; else noLocation\"\n href=\"javascript:void(0)\"\n class=\"tk-workspaces-table__location-link\">{{ workspace.location }}</a>\n <ng-template #noLocation>\n <span class=\"tk-workspaces-table__location-empty\">No location</span>\n </ng-template>\n </div>\n </div>\n </div>\n </td>\n <td>\n <div class=\"tk-workspaces-table__devices\">\n <ng-container *ngIf=\"workspace.devices.length; else noDevices\">\n <span *ngFor=\"let device of workspace.devices\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container>\n <!-- <ng-container *ngFor=\"let device of workspace.devices\">\n <span *ngIf=\"device && device.model else noDevice\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container> -->\n <ng-template #noDevices>\n <button\n type=\"button\"\n class=\"tk-workspaces-table__device-add\"\n (click)=\"onAddDevice(workspace, $event)\">\n <span class=\"tk-workspaces-table__device-add-label\">\n <img\n class=\"tk-workspaces-table__device-add-icon\"\n src=\"assets/icons/multipled-devices-regular.svg\"\n alt=\"\" />\n Add device\n </span>\n </button>\n </ng-template>\n </div>\n </td>\n <td>{{ workspace.scheduling }}</td>\n <td class=\"tk-workspaces-table__calling-cell\">\n <span class=\"tk-workspaces-table__calling-content\">\n <img class=\"tk-workspaces-table__calling-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__calling-text\" title=\"Cisco Webex Calling Professional Workspace\">Cisco Webex Calling Professional Workspace</span>\n </span>\n </td>\n <td>\n <div *ngIf=\"workspace.isHybrid\" class=\"tk-workspaces-table__provisioning-icons\">\n <span class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'webex'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'di'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </div>\n <ng-container *ngIf=\"!workspace.isHybrid\">\n <span *ngIf=\"workspace.device.cucmId != null\" class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'di'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span *ngIf=\"workspace.device.webexUUID != null\" class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'webex'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </ng-container>\n </td>\n <td>\n <span class=\"tk-workspaces-table__status\">\n <span\n class=\"tk-workspaces-table__status-dot\"\n [class.tk-workspaces-table__status-dot--hybrid]=\"workspace.isHybrid\"\n [class.tk-workspaces-table__status-dot--active]=\"!workspace.isHybrid\"></span>\n {{ workspace.isHybrid ? 'Hybrid' : 'Active' }}\n </span>\n </td>\n <td class=\"tk-workspaces-table__actions-cell\">\n <mat-progress-spinner\n *ngIf=\"isPending(workspace.id)\"\n class=\"tk-workspaces-table__actions-spinner\"\n [diameter]=\"20\"\n strokeWidth=\"2\"\n mode=\"indeterminate\">\n </mat-progress-spinner>\n <button\n *ngIf=\"!isPending(workspace.id)\"\n type=\"button\"\n class=\"tk-workspaces-table__actions-button\"\n [matMenuTriggerFor]=\"rowMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\">\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"licenseWithHybrid.emit(workspace)\">\n License with Cloud Intelligence\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"migrateToMT.emit(workspace)\">\n Migrate Workspace To Webex Calling\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isEnableWebexCallingDisabled(workspace)\"\n (click)=\"enableWebexCalling.emit(workspace)\">\n Enable Webex Calling\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMigrateToUCMDisabled(workspace)\"\n (click)=\"migrateToUCM.emit(workspace)\">\n Migrate User to UCM\n </button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!workspaces.length\">\n <td [attr.colspan]=\"8\" class=\"tk-workspaces-table__empty\">No workspaces to display.</td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<mat-paginator\n class=\"tk-workspaces-table__paginator\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\">\n</mat-paginator>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-workspaces-table__bulk-bar{margin-bottom:1rem;font-size:.875rem;color:#000000f2}.tk-workspaces-table__wrapper{overflow-x:auto}.tk-workspaces-table__paginator{border:1px solid rgba(0,0,0,.12);border-top:none;background:#fff;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-workspaces-table__table{width:100%;border-collapse:collapse;font-family:Inter,sans-serif}.tk-workspaces-table__table th{height:39px;padding:.5rem 1.5rem .5rem .75rem;background-color:#ededed;text-align:start;font-size:.75rem;font-weight:500;color:#000000b3;word-break:break-all;max-inline-size:100%;cursor:pointer}.tk-workspaces-table__table th:hover{background-color:#dedede}.tk-workspaces-table__table td{height:49px;padding:.5rem 1.5rem .5rem .75rem;box-shadow:inset 0 -1px #0003;background-color:#fff;text-align:start;font-size:.875rem;color:#000000f2;word-break:break-all;cursor:pointer;transition:background-color .2s,box-shadow .2s}.tk-workspaces-table__table tbody tr:hover td{background:#ededed}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--selected td{background:#f0f6ff}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--disabled td{cursor:default}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--disabled:hover td{background:#ffffff}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--disabled.tk-workspaces-table__row--selected:hover td{background:#f0f6ff}.tk-workspaces-table__checkbox-cell{width:2.5rem;cursor:default}.tk-workspaces-table__settings-cell{width:2.5rem;text-align:center}.tk-workspaces-table__settings-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#00000080}.tk-workspaces-table__name-cell{min-width:14rem}.tk-workspaces-table__name-wrapper{display:flex;align-items:center;gap:.625rem}.tk-workspaces-table__name-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;flex-shrink:0;border-radius:50%;background:#2b2b2b;color:#fff}.tk-workspaces-table__name-icon img{height:1.125rem;width:1.125rem;filter:brightness(0) invert(1)}.tk-workspaces-table__name-info{display:flex;flex-direction:column;gap:.5rem;min-width:0}.tk-workspaces-table__name-link{color:#000000de;font-weight:500;text-decoration:none}.tk-workspaces-table__name-meta{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:#0009;white-space:nowrap}.tk-workspaces-table__name-meta .tk-workspaces-table__name-type,.tk-workspaces-table__name-meta .tk-workspaces-table__name-capacity{color:#0006}.tk-workspaces-table__meta-icon{font-size:.875rem;height:.875rem;width:.875rem;color:#0006}.tk-workspaces-table__meta-sep{color:#0000004d}.tk-workspaces-table__location-link{color:#0353a8;text-decoration:none}.tk-workspaces-table__location-empty{color:#0009}.tk-workspaces-table__devices{display:flex;align-items:flex-start;gap:.625rem;padding:.5rem 0}.tk-workspaces-table__device-card{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:.5rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;background:#fff;box-sizing:border-box;padding:12px;block-size:60px}.tk-workspaces-table__device-icon{inline-size:40px;display:inline-block;vertical-align:middle;max-inline-size:100%;block-size:auto}.tk-workspaces-table__device-avatar{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:50%;background:#757575;color:#fff;font-size:.6875rem;font-weight:600}.tk-workspaces-table__device-add{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.5rem;padding:.5rem 1.25rem;border:none;border-radius:.5rem;background-color:#fff;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%22186%22 height%3D%2274%22 viewBox%3D%220 0 186 74%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22url(%23paint0_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22url(%23paint1_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22url(%23paint2_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22url(%23paint3_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22url(%23paint4_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cdefs%3E%3CradialGradient id%3D%22paint0_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint1_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint2_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint3_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint4_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;background-position:center;background-size:contain;font-family:inherit;white-space:nowrap;cursor:pointer;box-sizing:border-box}.tk-workspaces-table__device-add-label{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border-radius:999px;color:#000000f2;font-size:.875rem;transition:background-color .15s}.tk-workspaces-table__device-add:hover .tk-workspaces-table__device-add-label{background-color:#ededed}.tk-workspaces-table__device-add-icon{height:1.125rem;width:1.125rem}.tk-workspaces-table__devices-empty{color:#0000004d}.tk-workspaces-table__calling-cell{max-width:14rem}.tk-workspaces-table__calling-content{display:flex;align-items:center;gap:.375rem}.tk-workspaces-table__calling-icon{flex:none;width:1rem;height:1rem;opacity:.4}.tk-workspaces-table__calling-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tk-workspaces-table__provisioning-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0009}.tk-workspaces-table__provisioning-icons{display:flex;align-items:center;gap:.5rem}.tk-workspaces-table__status{display:inline-flex;align-items:center;gap:.375rem;white-space:nowrap}.tk-workspaces-table__status-dot{width:.5rem;height:.5rem;border-radius:50%;background:rgba(0,0,0,.3);flex-shrink:0}.tk-workspaces-table__status-dot--active{background:#1d805f}.tk-workspaces-table__status-dot--inactive{background:#c73636}.tk-workspaces-table__status-dot--hybrid{background:#639fff}.tk-workspaces-table__actions-cell{width:2.5rem;text-align:center}.tk-workspaces-table__actions-button{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:.25rem;color:#00000080;cursor:pointer;border-radius:4px}.tk-workspaces-table__actions-button:hover{background:rgba(0,0,0,.06)}.tk-workspaces-table__actions-spinner{display:inline-flex;margin:0 auto}.tk-workspaces-table__empty{padding:1.5rem;text-align:center;color:#0009;cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesTableComponent, decorators: [{
98
+ type: Component,
99
+ args: [{ selector: 'tk-workspaces-table', template: "<div class=\"tk-workspaces-table__bulk-bar\">Select one or more workspaces for bulk actions</div>\n\n<div class=\"tk-workspaces-table__wrapper\">\n <table class=\"tk-workspaces-table__table\">\n <thead>\n <tr>\n <th class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"allSelected\" [indeterminate]=\"someSelected\" (change)=\"toggleAll()\" />\n </th>\n <th>Name</th>\n <th>Devices</th>\n <th>Scheduling</th>\n <th>Calling</th>\n <th>Provisioning Type</th>\n <th>Status</th>\n <th class=\"tk-workspaces-table__settings-cell\">\n <mat-icon class=\"tk-workspaces-table__settings-icon\">settings</mat-icon>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let workspace of workspaces\"\n [class.tk-workspaces-table__row--selected]=\"isSelected(workspace.id)\"\n [class.tk-workspaces-table__row--disabled]=\"!canOpenWorkspace(workspace)\">\n <td class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"isSelected(workspace.id)\" (change)=\"toggleRow(workspace.id)\" />\n </td>\n <td class=\"tk-workspaces-table__name-cell\" (click)=\"onOpenWorkspace(workspace)\">\n <div class=\"tk-workspaces-table__name-wrapper\">\n <span class=\"tk-workspaces-table__name-icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspaces-table__name-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspaces-table__name-link\">{{ getDisplayName(workspace) }}</a>\n <div class=\"tk-workspaces-table__name-meta\">\n <span class=\"tk-workspaces-table__name-type\">{{ workspace.typeLabel }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__name-capacity\">{{ workspace.capacity ?? 'No capacity' }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <!-- <mat-icon class=\"tk-workspaces-table__meta-icon\">location_on</mat-icon> -->\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <a\n *ngIf=\"workspace.location; else noLocation\"\n href=\"javascript:void(0)\"\n class=\"tk-workspaces-table__location-link\">{{ workspace.location }}</a>\n <ng-template #noLocation>\n <span class=\"tk-workspaces-table__location-empty\">No location</span>\n </ng-template>\n </div>\n </div>\n </div>\n </td>\n <td>\n <div class=\"tk-workspaces-table__devices\">\n <ng-container *ngIf=\"workspace.devices.length; else noDevices\">\n <span *ngFor=\"let device of workspace.devices\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container>\n <!-- <ng-container *ngFor=\"let device of workspace.devices\">\n <span *ngIf=\"device && device.model else noDevice\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container> -->\n <ng-template #noDevices>\n <button\n type=\"button\"\n class=\"tk-workspaces-table__device-add\"\n (click)=\"onAddDevice(workspace, $event)\">\n <span class=\"tk-workspaces-table__device-add-label\">\n <img\n class=\"tk-workspaces-table__device-add-icon\"\n src=\"assets/icons/multipled-devices-regular.svg\"\n alt=\"\" />\n Add device\n </span>\n </button>\n </ng-template>\n </div>\n </td>\n <td>{{ workspace.scheduling }}</td>\n <td class=\"tk-workspaces-table__calling-cell\">\n <span class=\"tk-workspaces-table__calling-content\">\n <img class=\"tk-workspaces-table__calling-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__calling-text\" title=\"Cisco Webex Calling Professional Workspace\">Cisco Webex Calling Professional Workspace</span>\n </span>\n </td>\n <td>\n <div *ngIf=\"workspace.isHybrid\" class=\"tk-workspaces-table__provisioning-icons\">\n <span class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'webex'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'di'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </div>\n <ng-container *ngIf=\"!workspace.isHybrid\">\n <span *ngIf=\"workspace.device.cucmId != null\" class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'di'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span *ngIf=\"workspace.device.webexUUID != null\" class=\"icon-wrapper\" (click)=\"onOpenWorkspace(workspace, 'webex'); $event.stopPropagation()\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </ng-container>\n </td>\n <td>\n <span class=\"tk-workspaces-table__status\">\n <span\n class=\"tk-workspaces-table__status-dot\"\n [class.tk-workspaces-table__status-dot--hybrid]=\"workspace.isHybrid\"\n [class.tk-workspaces-table__status-dot--active]=\"!workspace.isHybrid\"></span>\n {{ workspace.isHybrid ? 'Hybrid' : 'Active' }}\n </span>\n </td>\n <td class=\"tk-workspaces-table__actions-cell\">\n <mat-progress-spinner\n *ngIf=\"isPending(workspace.id)\"\n class=\"tk-workspaces-table__actions-spinner\"\n [diameter]=\"20\"\n strokeWidth=\"2\"\n mode=\"indeterminate\">\n </mat-progress-spinner>\n <button\n *ngIf=\"!isPending(workspace.id)\"\n type=\"button\"\n class=\"tk-workspaces-table__actions-button\"\n [matMenuTriggerFor]=\"rowMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\">\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"licenseWithHybrid.emit(workspace)\">\n License with Cloud Intelligence\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"migrateToMT.emit(workspace)\">\n Migrate Workspace To Webex Calling\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isEnableWebexCallingDisabled(workspace)\"\n (click)=\"enableWebexCalling.emit(workspace)\">\n Enable Webex Calling\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMigrateToUCMDisabled(workspace)\"\n (click)=\"migrateToUCM.emit(workspace)\">\n Migrate User to UCM\n </button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!workspaces.length\">\n <td [attr.colspan]=\"8\" class=\"tk-workspaces-table__empty\">No workspaces to display.</td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<mat-paginator\n class=\"tk-workspaces-table__paginator\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\">\n</mat-paginator>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-workspaces-table__bulk-bar{margin-bottom:1rem;font-size:.875rem;color:#000000f2}.tk-workspaces-table__wrapper{overflow-x:auto}.tk-workspaces-table__paginator{border:1px solid rgba(0,0,0,.12);border-top:none;background:#fff;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-workspaces-table__table{width:100%;border-collapse:collapse;font-family:Inter,sans-serif}.tk-workspaces-table__table th{height:39px;padding:.5rem 1.5rem .5rem .75rem;background-color:#ededed;text-align:start;font-size:.75rem;font-weight:500;color:#000000b3;word-break:break-all;max-inline-size:100%;cursor:pointer}.tk-workspaces-table__table th:hover{background-color:#dedede}.tk-workspaces-table__table td{height:49px;padding:.5rem 1.5rem .5rem .75rem;box-shadow:inset 0 -1px #0003;background-color:#fff;text-align:start;font-size:.875rem;color:#000000f2;word-break:break-all;cursor:pointer;transition:background-color .2s,box-shadow .2s}.tk-workspaces-table__table tbody tr:hover td{background:#ededed}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--selected td{background:#f0f6ff}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--disabled td{cursor:default}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--disabled:hover td{background:#ffffff}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--disabled.tk-workspaces-table__row--selected:hover td{background:#f0f6ff}.tk-workspaces-table__checkbox-cell{width:2.5rem;cursor:default}.tk-workspaces-table__settings-cell{width:2.5rem;text-align:center}.tk-workspaces-table__settings-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#00000080}.tk-workspaces-table__name-cell{min-width:14rem}.tk-workspaces-table__name-wrapper{display:flex;align-items:center;gap:.625rem}.tk-workspaces-table__name-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;flex-shrink:0;border-radius:50%;background:#2b2b2b;color:#fff}.tk-workspaces-table__name-icon img{height:1.125rem;width:1.125rem;filter:brightness(0) invert(1)}.tk-workspaces-table__name-info{display:flex;flex-direction:column;gap:.5rem;min-width:0}.tk-workspaces-table__name-link{color:#000000de;font-weight:500;text-decoration:none}.tk-workspaces-table__name-meta{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:#0009;white-space:nowrap}.tk-workspaces-table__name-meta .tk-workspaces-table__name-type,.tk-workspaces-table__name-meta .tk-workspaces-table__name-capacity{color:#0006}.tk-workspaces-table__meta-icon{font-size:.875rem;height:.875rem;width:.875rem;color:#0006}.tk-workspaces-table__meta-sep{color:#0000004d}.tk-workspaces-table__location-link{color:#0353a8;text-decoration:none}.tk-workspaces-table__location-empty{color:#0009}.tk-workspaces-table__devices{display:flex;align-items:flex-start;gap:.625rem;padding:.5rem 0}.tk-workspaces-table__device-card{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:.5rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;background:#fff;box-sizing:border-box;padding:12px;block-size:60px}.tk-workspaces-table__device-icon{inline-size:40px;display:inline-block;vertical-align:middle;max-inline-size:100%;block-size:auto}.tk-workspaces-table__device-avatar{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:50%;background:#757575;color:#fff;font-size:.6875rem;font-weight:600}.tk-workspaces-table__device-add{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.5rem;padding:.5rem 1.25rem;border:none;border-radius:.5rem;background-color:#fff;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%22186%22 height%3D%2274%22 viewBox%3D%220 0 186 74%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22url(%23paint0_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22url(%23paint1_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22url(%23paint2_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22url(%23paint3_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22url(%23paint4_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cdefs%3E%3CradialGradient id%3D%22paint0_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint1_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint2_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint3_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint4_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;background-position:center;background-size:contain;font-family:inherit;white-space:nowrap;cursor:pointer;box-sizing:border-box}.tk-workspaces-table__device-add-label{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border-radius:999px;color:#000000f2;font-size:.875rem;transition:background-color .15s}.tk-workspaces-table__device-add:hover .tk-workspaces-table__device-add-label{background-color:#ededed}.tk-workspaces-table__device-add-icon{height:1.125rem;width:1.125rem}.tk-workspaces-table__devices-empty{color:#0000004d}.tk-workspaces-table__calling-cell{max-width:14rem}.tk-workspaces-table__calling-content{display:flex;align-items:center;gap:.375rem}.tk-workspaces-table__calling-icon{flex:none;width:1rem;height:1rem;opacity:.4}.tk-workspaces-table__calling-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tk-workspaces-table__provisioning-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0009}.tk-workspaces-table__provisioning-icons{display:flex;align-items:center;gap:.5rem}.tk-workspaces-table__status{display:inline-flex;align-items:center;gap:.375rem;white-space:nowrap}.tk-workspaces-table__status-dot{width:.5rem;height:.5rem;border-radius:50%;background:rgba(0,0,0,.3);flex-shrink:0}.tk-workspaces-table__status-dot--active{background:#1d805f}.tk-workspaces-table__status-dot--inactive{background:#c73636}.tk-workspaces-table__status-dot--hybrid{background:#639fff}.tk-workspaces-table__actions-cell{width:2.5rem;text-align:center}.tk-workspaces-table__actions-button{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:.25rem;color:#00000080;cursor:pointer;border-radius:4px}.tk-workspaces-table__actions-button:hover{background:rgba(0,0,0,.06)}.tk-workspaces-table__actions-spinner{display:inline-flex;margin:0 auto}.tk-workspaces-table__empty{padding:1.5rem;text-align:center;color:#0009;cursor:default}\n"] }]
100
+ }], propDecorators: { workspaces: [{
101
+ type: Input
102
+ }], total: [{
103
+ type: Input
104
+ }], pageIndex: [{
105
+ type: Input
106
+ }], pageSize: [{
107
+ type: Input
108
+ }], pageSizeOptions: [{
109
+ type: Input
110
+ }], pendingWorkspaceIds: [{
111
+ type: Input
112
+ }], openWorkspace: [{
113
+ type: Output
114
+ }], licenseWithHybrid: [{
115
+ type: Output
116
+ }], migrateToMT: [{
117
+ type: Output
118
+ }], enableWebexCalling: [{
119
+ type: Output
120
+ }], migrateToUCM: [{
121
+ type: Output
122
+ }], addDevice: [{
123
+ type: Output
124
+ }], pageChange: [{
125
+ type: Output
126
+ }] } });
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvd29ya3NwYWNlcy9zcmMvY29tcG9uZW50cy93b3Jrc3BhY2VzLXRhYmxlL3dvcmtzcGFjZXMtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL2NvbXBvbmVudHMvd29ya3NwYWNlcy10YWJsZS93b3Jrc3BhY2VzLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLGFBQWEsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFZeEQsTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQU1XLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQzdCLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLG9CQUFlLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUU1QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQ3ZELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBQzVDLHVCQUFrQixHQUFHLElBQUksWUFBWSxF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Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBXb3Jrc3BhY2UsIFdvcmtzcGFjZUNvbm5lY3Rpb25UeXBlLCBXb3Jrc3BhY2VPcGVuRXZlbnQgfSBmcm9tICcuLi8uLi90eXBlcy93b3Jrc3BhY2UnO1xuaW1wb3J0IHsgZ2V0RGV2aWNlSWNvbiBhcyByZXNvbHZlRGV2aWNlSWNvbiB9IGZyb20gJy4uLy4uL3V0aWxzL2RldmljZS1pY29uJztcbmltcG9ydCB7IHdpdGhvdXRTZXAgfSBmcm9tICcuLi8uLi91dGlscy93b3Jrc3BhY2UtbmFtZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlc1BhZ2VDaGFuZ2Uge1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGstd29ya3NwYWNlcy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3Jrc3BhY2VzLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd29ya3NwYWNlcy10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VzVGFibGVDb21wb25lbnQge1xuICBASW5wdXQoKSB3b3Jrc3BhY2VzOiBXb3Jrc3BhY2VbXSA9IFtdO1xuICBASW5wdXQoKSB0b3RhbCA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VJbmRleCA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplID0gMTA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MCwgMTAwXTtcbiAgQElucHV0KCkgcGVuZGluZ1dvcmtzcGFjZUlkczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgQE91dHB1dCgpIG9wZW5Xb3Jrc3BhY2UgPSBuZXcgRXZlbnRFbWl0dGVyPFdvcmtzcGFjZU9wZW5FdmVudD4oKTtcbiAgQE91dHB1dCgpIGxpY2Vuc2VXaXRoSHlicmlkID0gbmV3IEV2ZW50RW1pdHRlcjxXb3Jrc3BhY2U+KCk7XG4gIEBPdXRwdXQoKSBtaWdyYXRlVG9NVCA9IG5ldyBFdmVudEVtaXR0ZXI8V29ya3NwYWNlPigpO1xuICBAT3V0cHV0KCkgZW5hYmxlV2ViZXhDYWxsaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxXb3Jrc3BhY2U+KCk7XG4gIEBPdXRwdXQoKSBtaWdyYXRlVG9VQ00gPSBuZXcgRXZlbnRFbWl0dGVyPFdvcmtzcGFjZT4oKTtcbiAgQE91dHB1dCgpIGFkZERldmljZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8V29ya3NwYWNlc1BhZ2VDaGFuZ2U+KCk7XG5cbiAgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBnZXQgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRJZHMuc2l6ZSA9PT0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuc2l6ZSA+IDAgJiYgIXRoaXMuYWxsU2VsZWN0ZWQ7XG4gIH1cblxuICB0b2dnbGVBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IHRoaXMuYWxsU2VsZWN0ZWQgPyBuZXcgU2V0KCkgOiBuZXcgU2V0KHRoaXMud29ya3NwYWNlcy5tYXAod29ya3NwYWNlID0+IHdvcmtzcGFjZS5pZCkpO1xuICB9XG5cbiAgdG9nZ2xlUm93KHdvcmtzcGFjZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkSWRzKTtcbiAgICBpZiAobmV4dFNlbGVjdGlvbi5oYXMod29ya3NwYWNlSWQpKSB7XG4gICAgICBuZXh0U2VsZWN0aW9uLmRlbGV0ZSh3b3Jrc3BhY2VJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRTZWxlY3Rpb24uYWRkKHdvcmtzcGFjZUlkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IG5leHRTZWxlY3Rpb247XG4gIH1cblxuICBpc1NlbGVjdGVkKHdvcmtzcGFjZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZElkcy5oYXMod29ya3NwYWNlSWQpO1xuICB9XG5cbiAgb25PcGVuV29ya3NwYWNlKHdvcmtzcGFjZTogV29ya3NwYWNlLCBjb25uZWN0aW9uVHlwZT86IFdvcmtzcGFjZUNvbm5lY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbk9wZW5Xb3Jrc3BhY2Uod29ya3NwYWNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5Xb3Jrc3BhY2UuZW1pdCh7IGlkOiB3b3Jrc3BhY2UuaWQsIGNvbm5lY3Rpb25UeXBlOiBjb25uZWN0aW9uVHlwZSA/PyB0aGlzLnJlc29sdmVDb25uZWN0aW9uVHlwZSh3b3Jrc3BhY2UpIH0pO1xuICB9XG5cbiAgY2FuT3BlbldvcmtzcGFjZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXdvcmtzcGFjZS5sb2NhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNvbm5lY3Rpb25UeXBlKHdvcmtzcGFjZTogV29ya3NwYWNlKTogV29ya3NwYWNlQ29ubmVjdGlvblR5cGUge1xuICAgIHJldHVybiAhd29ya3NwYWNlLmlzSHlicmlkICYmIHdvcmtzcGFjZS5kZXZpY2Uud2ViZXhVVUlEICE9IG51bGwgPyAnd2ViZXgnIDogJ2RpJztcbiAgfVxuXG4gIG9uQWRkRGV2aWNlKHdvcmtzcGFjZTogV29ya3NwYWNlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmFkZERldmljZS5lbWl0KHdvcmtzcGFjZS5pZCk7XG4gIH1cblxuICBvblBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IGV2ZW50LnBhZ2VJbmRleCwgcGFnZVNpemU6IGV2ZW50LnBhZ2VTaXplIH0pO1xuICB9XG5cbiAgZ2V0RGV2aWNlSWNvbihtb2RlbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVEZXZpY2VJY29uKG1vZGVsKTtcbiAgfVxuXG4gIGdldERpc3BsYXlOYW1lKHdvcmtzcGFjZTogV29ya3NwYWNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gd2l0aG91dFNlcCh3b3Jrc3BhY2UuZGlzcGxheU5hbWUpO1xuICB9XG5cbiAgaXNQZW5kaW5nKHdvcmtzcGFjZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nV29ya3NwYWNlSWRzLmhhcyh3b3Jrc3BhY2VJZCk7XG4gIH1cblxuICBpc01vdmVUb01URGlzYWJsZWQod29ya3NwYWNlOiBXb3Jrc3BhY2UpOiBib29sZWFuIHtcbiAgICBpZiAod29ya3NwYWNlLnN0YXR1cyAhPT0gJ2FjdGl2ZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIXdvcmtzcGFjZS5pc0h5YnJpZCAmJiAhIXdvcmtzcGFjZS5kZXZpY2Uud2ViZXhVVUlEO1xuICB9XG5cbiAgaXNFbmFibGVXZWJleENhbGxpbmdEaXNhYmxlZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZSk6IGJvb2xlYW4ge1xuICAgIGlmICh3b3Jrc3BhY2Uuc3RhdHVzICE9PSAnaW5hY3RpdmUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICF3b3Jrc3BhY2UuaXNIeWJyaWQgJiYgIXdvcmtzcGFjZS5kZXZpY2Uud2ViZXhVVUlEO1xuICB9XG5cbiAgaXNNaWdyYXRlVG9VQ01EaXNhYmxlZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhd29ya3NwYWNlLmRldmljZS53ZWJleFVVSUQgfHwgd29ya3NwYWNlLnN0YXR1cyAhPT0gJ2FjdGl2ZSc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19idWxrLWJhclwiPlNlbGVjdCBvbmUgb3IgbW9yZSB3b3Jrc3BhY2VzIGZvciBidWxrIGFjdGlvbnM8L2Rpdj5cblxuPGRpdiBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX3dyYXBwZXJcIj5cbiAgPHRhYmxlIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fdGFibGVcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX2NoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZUFsbCgpXCIgLz5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICA8dGg+RGV2aWNlczwvdGg+XG4gICAgICAgIDx0aD5TY2hlZHVsaW5nPC90aD5cbiAgICAgICAgPHRoPkNhbGxpbmc8L3RoPlxuICAgICAgICA8dGg+UHJvdmlzaW9uaW5nIFR5cGU8L3RoPlxuICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fc2V0dGluZ3MtY2VsbFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX3NldHRpbmdzLWljb25cIj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgICAgPHRyXG4gICAgICAgICpuZ0Zvcj1cImxldCB3b3Jrc3BhY2Ugb2Ygd29ya3NwYWNlc1wiXG4gICAgICAgIFtjbGFzcy50ay13b3Jrc3BhY2VzLXRhYmxlX19yb3ctLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQod29ya3NwYWNlLmlkKVwiXG4gICAgICAgIFtjbGFzcy50ay13b3Jrc3BhY2VzLXRhYmxlX19yb3ctLWRpc2FibGVkXT1cIiFjYW5PcGVuV29ya3NwYWNlKHdvcmtzcGFjZSlcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fY2hlY2tib3gtY2VsbFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKHdvcmtzcGFjZS5pZClcIiAoY2hhbmdlKT1cInRvZ2dsZVJvdyh3b3Jrc3BhY2UuaWQpXCIgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbmFtZS1jZWxsXCIgKGNsaWNrKT1cIm9uT3BlbldvcmtzcGFjZSh3b3Jrc3BhY2UpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX25hbWUtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19uYW1lLWljb25cIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZGV2aWNlLWluLXJvb20tcmVndWxhci5zdmdcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX25hbWUtaW5mb1wiPlxuICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19uYW1lLWxpbmtcIj57eyBnZXREaXNwbGF5TmFtZSh3b3Jrc3BhY2UpIH19PC9hPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbmFtZS1tZXRhXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19uYW1lLXR5cGVcIj57eyB3b3Jrc3BhY2UudHlwZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbWV0YS1zZXBcIj4mbWlkZG90Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbWV0YS1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL3Blb3BsZS1yZWd1bGFyLnN2Z1wiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19uYW1lLWNhcGFjaXR5XCI+e3sgd29ya3NwYWNlLmNhcGFjaXR5ID8/ICdObyBjYXBhY2l0eScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19tZXRhLXNlcFwiPiZtaWRkb3Q7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbWV0YS1pY29uXCI+bG9jYXRpb25fb248L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbWV0YS1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2xvY2F0aW9uLXJlZ3VsYXIuc3ZnXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ3b3Jrc3BhY2UubG9jYXRpb247IGVsc2Ugbm9Mb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fbG9jYXRpb24tbGlua1wiPnt7IHdvcmtzcGFjZS5sb2NhdGlvbiB9fTwvYT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTG9jYXRpb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX2xvY2F0aW9uLWVtcHR5XCI+Tm8gbG9jYXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19kZXZpY2VzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid29ya3NwYWNlLmRldmljZXMubGVuZ3RoOyBlbHNlIG5vRGV2aWNlc1wiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgZGV2aWNlIG9mIHdvcmtzcGFjZS5kZXZpY2VzXCIgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19kZXZpY2UtY2FyZFwiIFt0aXRsZV09XCJkZXZpY2UubGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX2RldmljZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RGV2aWNlSWNvbihkZXZpY2UubW9kZWwpXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiZGV2aWNlLmxhYmVsXCIgLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRldmljZSBvZiB3b3Jrc3BhY2UuZGV2aWNlc1wiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRldmljZSAmJiBkZXZpY2UubW9kZWwgZWxzZSBub0RldmljZVwiIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fZGV2aWNlLWNhcmRcIiBbdGl0bGVdPVwiZGV2aWNlLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19kZXZpY2UtaWNvblwiXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImdldERldmljZUljb24oZGV2aWNlLm1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICBbYWx0XT1cImRldmljZS5sYWJlbFwiIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EZXZpY2VzPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19kZXZpY2UtYWRkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGREZXZpY2Uod29ya3NwYWNlLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19kZXZpY2UtYWRkLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fZGV2aWNlLWFkZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL211bHRpcGxlZC1kZXZpY2VzLXJlZ3VsYXIuc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgIEFkZCBkZXZpY2VcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkPnt7IHdvcmtzcGFjZS5zY2hlZHVsaW5nIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fY2FsbGluZy1jZWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19jYWxsaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19jYWxsaW5nLWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvbG9jYXRpb24tcmVndWxhci5zdmdcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19jYWxsaW5nLXRleHRcIiB0aXRsZT1cIkNpc2NvIFdlYmV4IENhbGxpbmcgUHJvZmVzc2lvbmFsIFdvcmtzcGFjZVwiPkNpc2NvIFdlYmV4IENhbGxpbmcgUHJvZmVzc2lvbmFsIFdvcmtzcGFjZTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwid29ya3NwYWNlLmlzSHlicmlkXCIgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19wcm92aXNpb25pbmctaWNvbnNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi13cmFwcGVyXCIgKGNsaWNrKT1cIm9uT3BlbldvcmtzcGFjZSh3b3Jrc3BhY2UsICd3ZWJleCcpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+PGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy93ZWJleC5zdmdcIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidXZWJleCBDYWxsaW5nJ1wiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAvPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi13cmFwcGVyXCIgKGNsaWNrKT1cIm9uT3BlbldvcmtzcGFjZSh3b3Jrc3BhY2UsICdkaScpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+PGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9kaV9jbG91ZF8yNC5zdmdcIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidXZWJleCBDYWxsaW5nIERJJ1wiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAvPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXdvcmtzcGFjZS5pc0h5YnJpZFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3b3Jrc3BhY2UuZGV2aWNlLmN1Y21JZCAhPSBudWxsXCIgY2xhc3M9XCJpY29uLXdyYXBwZXJcIiAoY2xpY2spPVwib25PcGVuV29ya3NwYWNlKHdvcmtzcGFjZSwgJ2RpJyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID48aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2RpX2Nsb3VkXzI0LnN2Z1wiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1dlYmV4IENhbGxpbmcgREknXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgIC8+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3b3Jrc3BhY2UuZGV2aWNlLndlYmV4VVVJRCAhPSBudWxsXCIgY2xhc3M9XCJpY29uLXdyYXBwZXJcIiAoY2xpY2spPVwib25PcGVuV29ya3NwYWNlKHdvcmtzcGFjZSwgJ3dlYmV4Jyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID48aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL3dlYmV4LnN2Z1wiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1dlYmV4IENhbGxpbmcnXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgIC8+PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19zdGF0dXNcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fc3RhdHVzLWRvdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy50ay13b3Jrc3BhY2VzLXRhYmxlX19zdGF0dXMtZG90LS1oeWJyaWRdPVwid29ya3NwYWNlLmlzSHlicmlkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnRrLXdvcmtzcGFjZXMtdGFibGVfX3N0YXR1cy1kb3QtLWFjdGl2ZV09XCIhd29ya3NwYWNlLmlzSHlicmlkXCI+PC9zcGFuPlxuICAgICAgICAgICAge3sgd29ya3NwYWNlLmlzSHlicmlkID8gJ0h5YnJpZCcgOiAnQWN0aXZlJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAqbmdJZj1cImlzUGVuZGluZyh3b3Jrc3BhY2UuaWQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fYWN0aW9ucy1zcGlubmVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXG4gICAgICAgICAgICBzdHJva2VXaWR0aD1cIjJcIlxuICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj5cbiAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIWlzUGVuZGluZyh3b3Jrc3BhY2UuaWQpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ay13b3Jrc3BhY2VzLXRhYmxlX19hY3Rpb25zLWJ1dHRvblwiXG4gICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwicm93TWVudVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPG1hdC1tZW51ICNyb3dNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNNb3ZlVG9NVERpc2FibGVkKHdvcmtzcGFjZSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibGljZW5zZVdpdGhIeWJyaWQuZW1pdCh3b3Jrc3BhY2UpXCI+XG4gICAgICAgICAgICAgIExpY2Vuc2Ugd2l0aCBDbG91ZCBJbnRlbGxpZ2VuY2VcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNNb3ZlVG9NVERpc2FibGVkKHdvcmtzcGFjZSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibWlncmF0ZVRvTVQuZW1pdCh3b3Jrc3BhY2UpXCI+XG4gICAgICAgICAgICAgIE1pZ3JhdGUgV29ya3NwYWNlIFRvIFdlYmV4IENhbGxpbmdcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNFbmFibGVXZWJleENhbGxpbmdEaXNhYmxlZCh3b3Jrc3BhY2UpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVuYWJsZVdlYmV4Q2FsbGluZy5lbWl0KHdvcmtzcGFjZSlcIj5cbiAgICAgICAgICAgICAgRW5hYmxlIFdlYmV4IENhbGxpbmdcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNNaWdyYXRlVG9VQ01EaXNhYmxlZCh3b3Jrc3BhY2UpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1pZ3JhdGVUb1VDTS5lbWl0KHdvcmtzcGFjZSlcIj5cbiAgICAgICAgICAgICAgTWlncmF0ZSBVc2VyIHRvIFVDTVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nSWY9XCIhd29ya3NwYWNlcy5sZW5ndGhcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiOFwiIGNsYXNzPVwidGstd29ya3NwYWNlcy10YWJsZV9fZW1wdHlcIj5ObyB3b3Jrc3BhY2VzIHRvIGRpc3BsYXkuPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvZGl2PlxuXG48bWF0LXBhZ2luYXRvclxuICBjbGFzcz1cInRrLXdvcmtzcGFjZXMtdGFibGVfX3BhZ2luYXRvclwiXG4gIFtsZW5ndGhdPVwidG90YWxcIlxuICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgKHBhZ2UpPVwib25QYWdlKCRldmVudClcIj5cbjwvbWF0LXBhZ2luYXRvcj5cbiJdfQ==
@@ -0,0 +1,83 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { MatButtonModule } from '@angular/material/button';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+ import { MatTableModule } from '@angular/material/table';
5
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatInputModule } from '@angular/material/input';
8
+ import { MatMenuModule } from '@angular/material/menu';
9
+ import { MatPaginatorModule } from '@angular/material/paginator';
10
+ import { MatTooltipModule } from '@angular/material/tooltip';
11
+ import { MatDialogModule } from '@angular/material/dialog';
12
+ import * as i0 from "@angular/core";
13
+ export class MaterialModule {
14
+ }
15
+ MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16
+ MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
17
+ MatIconModule,
18
+ MatTableModule,
19
+ MatProgressSpinnerModule,
20
+ MatFormFieldModule,
21
+ MatInputModule,
22
+ MatMenuModule,
23
+ MatPaginatorModule,
24
+ MatTooltipModule,
25
+ MatDialogModule], exports: [MatButtonModule,
26
+ MatIconModule,
27
+ MatTableModule,
28
+ MatProgressSpinnerModule,
29
+ MatFormFieldModule,
30
+ MatInputModule,
31
+ MatMenuModule,
32
+ MatPaginatorModule,
33
+ MatTooltipModule,
34
+ MatDialogModule] });
35
+ MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
36
+ MatIconModule,
37
+ MatTableModule,
38
+ MatProgressSpinnerModule,
39
+ MatFormFieldModule,
40
+ MatInputModule,
41
+ MatMenuModule,
42
+ MatPaginatorModule,
43
+ MatTooltipModule,
44
+ MatDialogModule, MatButtonModule,
45
+ MatIconModule,
46
+ MatTableModule,
47
+ MatProgressSpinnerModule,
48
+ MatFormFieldModule,
49
+ MatInputModule,
50
+ MatMenuModule,
51
+ MatPaginatorModule,
52
+ MatTooltipModule,
53
+ MatDialogModule] });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, decorators: [{
55
+ type: NgModule,
56
+ args: [{
57
+ imports: [
58
+ MatButtonModule,
59
+ MatIconModule,
60
+ MatTableModule,
61
+ MatProgressSpinnerModule,
62
+ MatFormFieldModule,
63
+ MatInputModule,
64
+ MatMenuModule,
65
+ MatPaginatorModule,
66
+ MatTooltipModule,
67
+ MatDialogModule,
68
+ ],
69
+ exports: [
70
+ MatButtonModule,
71
+ MatIconModule,
72
+ MatTableModule,
73
+ MatProgressSpinnerModule,
74
+ MatFormFieldModule,
75
+ MatInputModule,
76
+ MatMenuModule,
77
+ MatPaginatorModule,
78
+ MatTooltipModule,
79
+ MatDialogModule,
80
+ ]
81
+ }]
82
+ }] });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL21hdGVyaWFsLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQTRCM0QsTUFBTSxPQUFPLGNBQWM7OzRHQUFkLGNBQWM7NkdBQWQsY0FBYyxZQXhCdkIsZUFBZTtRQUNmLGFBQWE7UUFDYixjQUFjO1FBQ2Qsd0JBQXdCO1FBQ3hCLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsZUFBZSxhQUdmLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLHdCQUF3QjtRQUN4QixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLGVBQWU7NkdBR04sY0FBYyxZQXhCdkIsZUFBZTtRQUNmLGFBQWE7UUFDYixjQUFjO1FBQ2Qsd0JBQXdCO1FBQ3hCLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsZUFBZSxFQUdmLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLHdCQUF3QjtRQUN4QixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLGVBQWU7NEZBR04sY0FBYztrQkExQjFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixlQUFlO3FCQUNoQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,14 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { APIService } from './api.service';
3
+ import * as i0 from "@angular/core";
4
+ export class ApiWebexService extends APIService {
5
+ }
6
+ ApiWebexService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiWebexService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
7
+ ApiWebexService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiWebexService, providedIn: 'root' });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiWebexService, decorators: [{
9
+ type: Injectable,
10
+ args: [{
11
+ providedIn: 'root',
12
+ }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXdlYmV4LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvd29ya3NwYWNlcy9zcmMvc2VydmljZXMvYXBpLXdlYmV4LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxVQUFVOzs2R0FBbEMsZUFBZTtpSEFBZixlQUFlLGNBRmQsTUFBTTs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwaVdlYmV4U2VydmljZSBleHRlbmRzIEFQSVNlcnZpY2UgeyB9XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ export class APIService {
6
+ constructor(httpClient) {
7
+ this.httpClient = httpClient;
8
+ }
9
+ fetch(url, params, cache) {
10
+ const headers = this.getHeaders(cache);
11
+ params = params || {};
12
+ return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });
13
+ }
14
+ post(url, body, params = {}) {
15
+ body = body || null;
16
+ const headers = this.getHeaders();
17
+ return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });
18
+ }
19
+ put(url, body = null, params = {}) {
20
+ const headers = this.getHeaders();
21
+ return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });
22
+ }
23
+ delete(url, params = {}) {
24
+ const headers = this.getHeaders();
25
+ return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });
26
+ }
27
+ prepareEncodedParams(params) {
28
+ const result = {};
29
+ if (!params) {
30
+ return {};
31
+ }
32
+ for (const key of Object.keys(params)) {
33
+ if (params[key] !== undefined && params[key] !== null && params[key] !== '') {
34
+ const stringParam = params[key].toString();
35
+ result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;
36
+ }
37
+ }
38
+ return result;
39
+ }
40
+ getHeaders(cache) {
41
+ let headers = new HttpHeaders();
42
+ if (cache) {
43
+ headers = headers.append('_Cache', 'true ');
44
+ }
45
+ const token = this.token || this.getParameterByName('token');
46
+ headers = headers.append('Authorization', 'Bearer ' + token);
47
+ return headers;
48
+ }
49
+ getParameterByName(name, url = window.location.href) {
50
+ name = name.replace(/[\[\]]/g, '\\$&');
51
+ var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url);
52
+ if (!results)
53
+ return null;
54
+ if (!results[2])
55
+ return '';
56
+ return decodeURIComponent(results[2].replace(/\+/g, ' '));
57
+ }
58
+ }
59
+ APIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
60
+ APIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, providedIn: 'root' });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, decorators: [{
62
+ type: Injectable,
63
+ args: [{
64
+ providedIn: 'root'
65
+ }]
66
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvd29ya3NwYWNlcy9zcmMvc2VydmljZXMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQU0vRCxNQUFNLE9BQU8sVUFBVTtJQUlyQixZQUNVLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDNUIsQ0FBQztJQUVMLEtBQUssQ0FBQyxHQUFXLEVBQUUsTUFBWSxFQUFFLEtBQWU7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBVyxFQUFFLElBQVMsRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUN0QyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENB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LFVBQVU7NEdBQVYsVUFBVSxjQUZULE1BQU07NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZSB7XG4gIHRva2VuITogc3RyaW5nO1xuICBhcGlVcmwhOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XG4gICkgeyB9XG5cbiAgZmV0Y2godXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgY2FjaGU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKGNhY2hlKTtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5hcGlVcmwgKyB1cmwsIHsgcGFyYW1zOiB0aGlzLnByZXBhcmVFbmNvZGVkUGFyYW1zKHBhcmFtcyksIGhlYWRlcnMgfSk7XG4gIH1cblxuICBwb3N0KHVybDogc3RyaW5nLCBib2R5OiBhbnksIHBhcmFtcyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBib2R5ID0gYm9keSB8fCBudWxsO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5hcGlVcmwgKyB1cmwsIGJvZHksIHsgcGFyYW1zOiB0aGlzLnByZXBhcmVFbmNvZGVkUGFyYW1zKHBhcmFtcyksIGhlYWRlcnMgfSk7XG4gIH1cblxuICBwdXQodXJsOiBzdHJpbmcsIGJvZHk6IGFueSA9IG51bGwsIHBhcmFtcyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5hcGlVcmwgKyB1cmwsIGJvZHksIHsgaGVhZGVycywgcGFyYW1zOiB0aGlzLnByZXBhcmVFbmNvZGVkUGFyYW1zKHBhcmFtcykgfSk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycygpO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZGVsZXRlKHRoaXMuYXBpVXJsICsgdXJsLCB7IGhlYWRlcnMsIHBhcmFtczogdGhpcy5wcmVwYXJlRW5jb2RlZFBhcmFtcyhwYXJhbXMpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlRW5jb2RlZFBhcmFtcyhwYXJhbXM6IGFueSkge1xuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cbiAgICBpZiAoIXBhcmFtcykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICBpZiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNba2V5XSAhPT0gbnVsbCAmJiBwYXJhbXNba2V5XSAhPT0gJycpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW0gPSBwYXJhbXNba2V5XS50b1N0cmluZygpO1xuICAgICAgICByZXN1bHRba2V5XSA9IHN0cmluZ1BhcmFtLmluY2x1ZGVzKCcrJykgPyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nUGFyYW0pIDogc3RyaW5nUGFyYW07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlcnMoY2FjaGU/OiBib29sZWFuKTogSHR0cEhlYWRlcnMge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoJ19DYWNoZScsICd0cnVlICcpO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW4gfHwgdGhpcy5nZXRQYXJhbWV0ZXJCeU5hbWUoJ3Rva2VuJyk7XG4gICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgdG9rZW4pO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbWV0ZXJCeU5hbWUobmFtZTogYW55LCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZikge1xuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcXFtcXF1dL2csICdcXFxcJCYnKTtcbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdbPyZdJyArIG5hbWUgKyAnKD0oW14mI10qKXwmfCN8JCknKSxcbiAgICAgIHJlc3VsdHMgPSByZWdleC5leGVjKHVybCk7XG4gICAgaWYgKCFyZXN1bHRzKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXJlc3VsdHNbMl0pIHJldHVybiAnJztcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdHNbMl0ucmVwbGFjZSgvXFwrL2csICcgJykpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,122 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { forkJoin } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { API } from '../app.constants';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./api.service";
7
+ import * as i2 from "./api-webex.service";
8
+ export class WorkspaceDetailService {
9
+ constructor(apiService, apiWebexService) {
10
+ this.apiService = apiService;
11
+ this.apiWebexService = apiWebexService;
12
+ }
13
+ getByWorkspace(workspace, connectionType, customerId) {
14
+ if (connectionType === 'webex' && workspace.device.webexUUID) {
15
+ return this.getWebexDetails(customerId, workspace.device.webexUUID);
16
+ }
17
+ return this.getCucmDetails(workspace);
18
+ }
19
+ getWebexDetails(customerId, workspaceId) {
20
+ const params = { customerId: String(customerId), workspaceId };
21
+ return forkJoin([
22
+ this.apiWebexService.fetch(this.buildUrl(API.DETAILS.WEBEX.WORKSPACE, params)),
23
+ this.apiWebexService.fetch(this.buildUrl(API.DETAILS.WEBEX.NUMBERS, params)),
24
+ this.apiWebexService.fetch(this.buildUrl(API.DETAILS.WEBEX.CALLERID, params)),
25
+ ]).pipe(map(([workspaceRes, numbersRes, callerIdRes]) => this.toWebexDetails(workspaceRes, numbersRes, callerIdRes)));
26
+ }
27
+ toWebexDetails(workspaceRes, numbersRes, callerIdRes) {
28
+ const primaryNumber = numbersRes.phoneNumbers?.find(number => number.primary) ?? numbersRes.phoneNumbers?.[0];
29
+ return {
30
+ issues: this.buildIssues(workspaceRes.type, workspaceRes.capacity),
31
+ location: {
32
+ country: numbersRes.location?.name || workspaceRes.locationName || 'Not set',
33
+ address: numbersRes.location?.address || 'Address not available',
34
+ },
35
+ calling: {
36
+ license: workspaceRes.licenseName || 'Not set',
37
+ sipAddress: workspaceRes.sipAddress || 'Not assigned',
38
+ directoryNumber: primaryNumber?.external || primaryNumber?.extension || 'Not assigned',
39
+ routePartition: '',
40
+ callingSearchSpace: '',
41
+ securityProfile: '',
42
+ externalCallerIdName: callerIdRes.locationExternalCallerIdName || callerIdRes.customExternalCallerIdName || undefined,
43
+ externalCallerIdNumber: callerIdRes.locationNumber || callerIdRes.customNumber || callerIdRes.directNumber || undefined,
44
+ },
45
+ schedulingConfigured: false,
46
+ plannedMaintenanceEnabled: false,
47
+ notes: null,
48
+ capacity: workspaceRes.capacity,
49
+ };
50
+ }
51
+ getCucmDetails(workspace) {
52
+ const siteId = String(workspace.siteId);
53
+ const params = { siteId, workspaceId: workspace.id };
54
+ return forkJoin([
55
+ this.apiService.fetch(this.buildUrl(API.DETAILS.CUCM.WORKSPACE, params)),
56
+ this.apiService.fetch(this.buildUrl(API.DETAILS.CUCM.SITE, { siteId })),
57
+ ]).pipe(map(([workspaceRes, siteRes]) => this.toCucmDetails(workspace, workspaceRes, siteRes)));
58
+ }
59
+ toCucmDetails(workspace, workspaceRes, siteRes) {
60
+ const device = workspaceRes.device;
61
+ const directoryNumber = device.associatedDNs?.[0]?.directoryNumber ?? '';
62
+ const sipAddress = `${(device.name || workspace.displayName || 'workspace').toLowerCase()}@tukidev.rooms.webex.com`;
63
+ const address = [siteRes.address2, siteRes.address3].filter(Boolean).join(', ');
64
+ return {
65
+ issues: this.buildIssues(workspace.typeLabel, workspace.capacity),
66
+ location: {
67
+ country: siteRes.country || 'Not set',
68
+ address: address || 'Address not available',
69
+ },
70
+ calling: {
71
+ license: workspace.callingLicense || 'Cisco Webex Calling Professional Workspace',
72
+ sipAddress,
73
+ directoryNumber: directoryNumber || 'Not assigned',
74
+ routePartition: device.associatedDNs?.[0]?.routePartitionName || 'Not set',
75
+ callingSearchSpace: device.callingSearchSpaceName || 'Not set',
76
+ securityProfile: device.securityProfile || 'Not set',
77
+ },
78
+ schedulingConfigured: false,
79
+ plannedMaintenanceEnabled: false,
80
+ notes: null,
81
+ };
82
+ }
83
+ buildUrl(template, params) {
84
+ return Object.keys(params).reduce((url, key) => url.replace(`:${key}`, params[key]), template);
85
+ }
86
+ buildIssues(typeLabel, capacity) {
87
+ const timestamp = this.formatTimestamp(new Date());
88
+ return [
89
+ !typeLabel || typeLabel === 'No type' || typeLabel.toLowerCase() === 'notset' ? {
90
+ id: 'type',
91
+ message: 'Workspace type not set',
92
+ timestamp,
93
+ actionLabel: 'Assign type',
94
+ } : null,
95
+ capacity == null ? {
96
+ id: 'capacity',
97
+ message: 'Workspace capacity not set',
98
+ timestamp,
99
+ actionLabel: 'Set capacity',
100
+ } : null,
101
+ ].filter((issue) => issue !== null);
102
+ }
103
+ formatTimestamp(date) {
104
+ return date.toLocaleString('en-US', {
105
+ year: '2-digit',
106
+ month: 'numeric',
107
+ day: 'numeric',
108
+ hour: 'numeric',
109
+ minute: '2-digit',
110
+ hour12: true,
111
+ });
112
+ }
113
+ }
114
+ WorkspaceDetailService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailService, deps: [{ token: i1.APIService }, { token: i2.ApiWebexService }], target: i0.ɵɵFactoryTarget.Injectable });
115
+ WorkspaceDetailService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailService, providedIn: 'root' });
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailService, decorators: [{
117
+ type: Injectable,
118
+ args: [{
119
+ providedIn: 'root'
120
+ }]
121
+ }], ctorParameters: function () { return [{ type: i1.APIService }, { type: i2.ApiWebexService }]; } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWRldGFpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL3NlcnZpY2VzL3dvcmtzcGFjZS1kZXRhaWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQWtCdkMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLFVBQXNCLEVBQ3RCLGVBQWdDO1FBRGhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3RDLENBQUM7SUFFTCxjQUFjLENBQ1osU0FBb0IsRUFDcEIsY0FBdUMsRUFDdkMsVUFBMkI7UUFFM0IsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sZUFBZSxDQUFDLFVBQTJCLEVBQUUsV0FBbUI7UUFDdEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRS9ELE9BQU8sUUFBUSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxD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QzFFLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBVTtRQUNoQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQ2xDLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsR0FBRyxFQUFFLFNBQVM7WUFDZCxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7b0hBMUlVLHNCQUFzQjt3SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBUEkgfSBmcm9tICcuLi9hcHAuY29uc3RhbnRzJztcbmltcG9ydCB7IEFwaVdlYmV4U2VydmljZSB9IGZyb20gJy4vYXBpLXdlYmV4LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVBJU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3VjbVNpdGVSZXNwb25zZSxcbiAgQ3VjbVdvcmtzcGFjZURldGFpbHNSZXNwb25zZSxcbiAgV2ViZXhDYWxsZXJJZFJlc3BvbnNlLFxuICBXZWJleE51bWJlcnNSZXNwb25zZSxcbiAgV2ViZXhXb3Jrc3BhY2VEZXRhaWxzUmVzcG9uc2UsXG4gIFdvcmtzcGFjZSxcbiAgV29ya3NwYWNlQ29ubmVjdGlvblR5cGUsXG4gIFdvcmtzcGFjZURldGFpbHMsXG4gIFdvcmtzcGFjZUlzc3VlLFxufSBmcm9tICcuLi90eXBlcy93b3Jrc3BhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VEZXRhaWxTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBpV2ViZXhTZXJ2aWNlOiBBcGlXZWJleFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgZ2V0QnlXb3Jrc3BhY2UoXG4gICAgd29ya3NwYWNlOiBXb3Jrc3BhY2UsXG4gICAgY29ubmVjdGlvblR5cGU6IFdvcmtzcGFjZUNvbm5lY3Rpb25UeXBlLFxuICAgIGN1c3RvbWVySWQ6IHN0cmluZyB8IG51bWJlcixcbiAgKTogT2JzZXJ2YWJsZTxXb3Jrc3BhY2VEZXRhaWxzPiB7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlID09PSAnd2ViZXgnICYmIHdvcmtzcGFjZS5kZXZpY2Uud2ViZXhVVUlEKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRXZWJleERldGFpbHMoY3VzdG9tZXJJZCwgd29ya3NwYWNlLmRldmljZS53ZWJleFVVSUQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRDdWNtRGV0YWlscyh3b3Jrc3BhY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXZWJleERldGFpbHMoY3VzdG9tZXJJZDogc3RyaW5nIHwgbnVtYmVyLCB3b3Jrc3BhY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxXb3Jrc3BhY2VEZXRhaWxzPiB7XG4gICAgY29uc3QgcGFyYW1zID0geyBjdXN0b21lcklkOiBTdHJpbmcoY3VzdG9tZXJJZCksIHdvcmtzcGFjZUlkIH07XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW1xuICAgICAgdGhpcy5hcGlXZWJleFNlcnZpY2UuZmV0Y2godGhpcy5idWlsZFVybChBUEkuREVUQUlMUy5XRUJFWC5XT1JLU1BBQ0UsIHBhcmFtcykpLFxuICAgICAgdGhpcy5hcGlXZWJleFNlcnZpY2UuZmV0Y2godGhpcy5idWlsZFVybChBUEkuREVUQUlMUy5XRUJFWC5OVU1CRVJTLCBwYXJhbXMpKSxcbiAgICAgIHRoaXMuYXBpV2ViZXhTZXJ2aWNlLmZldGNoKHRoaXMuYnVpbGRVcmwoQVBJLkRFVEFJTFMuV0VCRVguQ0FMTEVSSUQsIHBhcmFtcykpLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt3b3Jrc3BhY2VSZXMsIG51bWJlcnNSZXMsIGNhbGxlcklkUmVzXTogW1xuICAgICAgICBXZWJleFdvcmtzcGFjZURldGFpbHNSZXNwb25zZSxcbiAgICAgICAgV2ViZXhOdW1iZXJzUmVzcG9uc2UsXG4gICAgICAgIFdlYmV4Q2FsbGVySWRSZXNwb25zZSxcbiAgICAgIF0pID0+IHRoaXMudG9XZWJleERldGFpbHMod29ya3NwYWNlUmVzLCBudW1iZXJzUmVzLCBjYWxsZXJJZFJlcykpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRvV2ViZXhEZXRhaWxzKFxuICAgIHdvcmtzcGFjZVJlczogV2ViZXhXb3Jrc3BhY2VEZXRhaWxzUmVzcG9uc2UsXG4gICAgbnVtYmVyc1JlczogV2ViZXhOdW1iZXJzUmVzcG9uc2UsXG4gICAgY2FsbGVySWRSZXM6IFdlYmV4Q2FsbGVySWRSZXNwb25zZSxcbiAgKTogV29ya3NwYWNlRGV0YWlscyB7XG4gICAgY29uc3QgcHJpbWFyeU51bWJlciA9IG51bWJlcnNSZXMucGhvbmVOdW1iZXJzPy5maW5kKG51bWJlciA9PiBudW1iZXIucHJpbWFyeSkgPz8gbnVtYmVyc1Jlcy5waG9uZU51bWJlcnM/LlswXTtcblxuICAgIHJldHVybiB7XG4gICAgICBpc3N1ZXM6IHRoaXMuYnVpbGRJc3N1ZXMod29ya3NwYWNlUmVzLnR5cGUsIHdvcmtzcGFjZVJlcy5jYXBhY2l0eSksXG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBjb3VudHJ5OiBudW1iZXJzUmVzLmxvY2F0aW9uPy5uYW1lIHx8IHdvcmtzcGFjZVJlcy5sb2NhdGlvbk5hbWUgfHwgJ05vdCBzZXQnLFxuICAgICAgICBhZGRyZXNzOiBudW1iZXJzUmVzLmxvY2F0aW9uPy5hZGRyZXNzIHx8ICdBZGRyZXNzIG5vdCBhdmFpbGFibGUnLFxuICAgICAgfSxcbiAgICAgIGNhbGxpbmc6IHtcbiAgICAgICAgbGljZW5zZTogd29ya3NwYWNlUmVzLmxpY2Vuc2VOYW1lIHx8ICdOb3Qgc2V0JyxcbiAgICAgICAgc2lwQWRkcmVzczogd29ya3NwYWNlUmVzLnNpcEFkZHJlc3MgfHwgJ05vdCBhc3NpZ25lZCcsXG4gICAgICAgIGRpcmVjdG9yeU51bWJlcjogcHJpbWFyeU51bWJlcj8uZXh0ZXJuYWwgfHwgcHJpbWFyeU51bWJlcj8uZXh0ZW5zaW9uIHx8ICdOb3QgYXNzaWduZWQnLFxuICAgICAgICByb3V0ZVBhcnRpdGlvbjogJycsXG4gICAgICAgIGNhbGxpbmdTZWFyY2hTcGFjZTogJycsXG4gICAgICAgIHNlY3VyaXR5UHJvZmlsZTogJycsXG4gICAgICAgIGV4dGVybmFsQ2FsbGVySWROYW1lOiBjYWxsZXJJZFJlcy5sb2NhdGlvbkV4dGVybmFsQ2FsbGVySWROYW1lIHx8IGNhbGxlcklkUmVzLmN1c3RvbUV4dGVybmFsQ2FsbGVySWROYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZXh0ZXJuYWxDYWxsZXJJZE51bWJlcjogY2FsbGVySWRSZXMubG9jYXRpb25OdW1iZXIgfHwgY2FsbGVySWRSZXMuY3VzdG9tTnVtYmVyIHx8IGNhbGxlcklkUmVzLmRpcmVjdE51bWJlciB8fCB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgc2NoZWR1bGluZ0NvbmZpZ3VyZWQ6IGZhbHNlLFxuICAgICAgcGxhbm5lZE1haW50ZW5hbmNlRW5hYmxlZDogZmFsc2UsXG4gICAgICBub3RlczogbnVsbCxcbiAgICAgIGNhcGFjaXR5OiB3b3Jrc3BhY2VSZXMuY2FwYWNpdHksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VjbURldGFpbHMod29ya3NwYWNlOiBXb3Jrc3BhY2UpOiBPYnNlcnZhYmxlPFdvcmtzcGFjZURldGFpbHM+IHtcbiAgICBjb25zdCBzaXRlSWQgPSBTdHJpbmcod29ya3NwYWNlLnNpdGVJZCk7XG4gICAgY29uc3QgcGFyYW1zID0geyBzaXRlSWQsIHdvcmtzcGFjZUlkOiB3b3Jrc3BhY2UuaWQgfTtcblxuICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZmV0Y2godGhpcy5idWlsZFVybChBUEkuREVUQUlMUy5DVUNNLldPUktTUEFDRSwgcGFyYW1zKSksXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZmV0Y2godGhpcy5idWlsZFVybChBUEkuREVUQUlMUy5DVUNNLlNJVEUsIHsgc2l0ZUlkIH0pKSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbd29ya3NwYWNlUmVzLCBzaXRlUmVzXTogW0N1Y21Xb3Jrc3BhY2VEZXRhaWxzUmVzcG9uc2UsIEN1Y21TaXRlUmVzcG9uc2VdKSA9PlxuICAgICAgICB0aGlzLnRvQ3VjbURldGFpbHMod29ya3NwYWNlLCB3b3Jrc3BhY2VSZXMsIHNpdGVSZXMpKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0N1Y21EZXRhaWxzKFxuICAgIHdvcmtzcGFjZTogV29ya3NwYWNlLFxuICAgIHdvcmtzcGFjZVJlczogQ3VjbVdvcmtzcGFjZURldGFpbHNSZXNwb25zZSxcbiAgICBzaXRlUmVzOiBDdWNtU2l0ZVJlc3BvbnNlLFxuICApOiBXb3Jrc3BhY2VEZXRhaWxzIHtcbiAgICBjb25zdCBkZXZpY2UgPSB3b3Jrc3BhY2VSZXMuZGV2aWNlO1xuICAgIGNvbnN0IGRpcmVjdG9yeU51bWJlciA9IGRldmljZS5hc3NvY2lhdGVkRE5zPy5bMF0/LmRpcmVjdG9yeU51bWJlciA/PyAnJztcbiAgICBjb25zdCBzaXBBZGRyZXNzID0gYCR7KGRldmljZS5uYW1lIHx8IHdvcmtzcGFjZS5kaXNwbGF5TmFtZSB8fCAnd29ya3NwYWNlJykudG9Mb3dlckNhc2UoKX1AdHVraWRldi5yb29tcy53ZWJleC5jb21gO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBbc2l0ZVJlcy5hZGRyZXNzMiwgc2l0ZVJlcy5hZGRyZXNzM10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNzdWVzOiB0aGlzLmJ1aWxkSXNzdWVzKHdvcmtzcGFjZS50eXBlTGFiZWwsIHdvcmtzcGFjZS5jYXBhY2l0eSksXG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBjb3VudHJ5OiBzaXRlUmVzLmNvdW50cnkgfHwgJ05vdCBzZXQnLFxuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzIHx8ICdBZGRyZXNzIG5vdCBhdmFpbGFibGUnLFxuICAgICAgfSxcbiAgICAgIGNhbGxpbmc6IHtcbiAgICAgICAgbGljZW5zZTogd29ya3NwYWNlLmNhbGxpbmdMaWNlbnNlIHx8ICdDaXNjbyBXZWJleCBDYWxsaW5nIFByb2Zlc3Npb25hbCBXb3Jrc3BhY2UnLFxuICAgICAgICBzaXBBZGRyZXNzLFxuICAgICAgICBkaXJlY3RvcnlOdW1iZXI6IGRpcmVjdG9yeU51bWJlciB8fCAnTm90IGFzc2lnbmVkJyxcbiAgICAgICAgcm91dGVQYXJ0aXRpb246IGRldmljZS5hc3NvY2lhdGVkRE5zPy5bMF0/LnJvdXRlUGFydGl0aW9uTmFtZSB8fCAnTm90IHNldCcsXG4gICAgICAgIGNhbGxpbmdTZWFyY2hTcGFjZTogZGV2aWNlLmNhbGxpbmdTZWFyY2hTcGFjZU5hbWUgfHwgJ05vdCBzZXQnLFxuICAgICAgICBzZWN1cml0eVByb2ZpbGU6IGRldmljZS5zZWN1cml0eVByb2ZpbGUgfHwgJ05vdCBzZXQnLFxuICAgICAgfSxcbiAgICAgIHNjaGVkdWxpbmdDb25maWd1cmVkOiBmYWxzZSxcbiAgICAgIHBsYW5uZWRNYWludGVuYW5jZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgbm90ZXM6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwodGVtcGxhdGU6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW1zKS5yZWR1Y2UoKHVybCwga2V5KSA9PiB1cmwucmVwbGFjZShgOiR7a2V5fWAsIHBhcmFtc1trZXldKSwgdGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZElzc3Vlcyh0eXBlTGFiZWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGNhcGFjaXR5OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogV29ya3NwYWNlSXNzdWVbXSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5mb3JtYXRUaW1lc3RhbXAobmV3IERhdGUoKSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgIXR5cGVMYWJlbCB8fCB0eXBlTGFiZWwgPT09ICdObyB0eXBlJyB8fCB0eXBlTGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gJ25vdHNldCcgPyB7XG4gICAgICAgIGlkOiAndHlwZScsXG4gICAgICAgIG1lc3NhZ2U6ICdXb3Jrc3BhY2UgdHlwZSBub3Qgc2V0JyxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBhY3Rpb25MYWJlbDogJ0Fzc2lnbiB0eXBlJyxcbiAgICAgIH0gOiBudWxsLFxuICAgICAgY2FwYWNpdHkgPT0gbnVsbCA/IHtcbiAgICAgICAgaWQ6ICdjYXBhY2l0eScsXG4gICAgICAgIG1lc3NhZ2U6ICdXb3Jrc3BhY2UgY2FwYWNpdHkgbm90IHNldCcsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYWN0aW9uTGFiZWw6ICdTZXQgY2FwYWNpdHknLFxuICAgICAgfSA6IG51bGwsXG4gICAgXS5maWx0ZXIoKGlzc3VlKTogaXNzdWUgaXMgTm9uTnVsbGFibGU8dHlwZW9mIGlzc3VlPiA9PiBpc3N1ZSAhPT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRpbWVzdGFtcChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICB5ZWFyOiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJ251bWVyaWMnLFxuICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19