@tuki-io/tuki-widgets 0.0.219-dev.3 → 0.0.219-dev.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
- package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
- package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
- package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
- package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
- package/esm2020/lib/widgets.component.mjs +9 -9
- package/esm2020/lib/widgets.module.mjs +1 -1
- package/esm2020/lib/widgets.service.mjs +1 -1
- package/esm2020/meetings/public-api.mjs +8 -0
- package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +107 -0
- package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +95 -0
- package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +96 -0
- package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +66 -0
- package/esm2020/meetings/src/material.module.mjs +62 -0
- package/esm2020/meetings/src/meetings.component.mjs +65 -0
- package/esm2020/meetings/src/meetings.module.mjs +48 -0
- package/esm2020/meetings/src/services/api.service.mjs +67 -0
- package/esm2020/meetings/src/services/live-meetings.service.mjs +178 -0
- package/esm2020/meetings/src/services/meeting-spaces.service.mjs +198 -0
- package/esm2020/meetings/src/types/live-meeting.mjs +2 -0
- package/esm2020/meetings/src/types/meeting-space.mjs +2 -0
- package/esm2020/meetings/tuki-io-tuki-widgets-meetings.mjs +5 -0
- package/esm2020/public-api.mjs +1 -1
- package/esm2020/shared/public-api.mjs +4 -0
- package/esm2020/shared/src/ui/material.module.mjs +188 -0
- package/esm2020/shared/src/ui/shared.module.mjs +36 -0
- package/esm2020/shared/src/ui/tk-page-section/tk-page-section.component.mjs +13 -0
- package/esm2020/shared/src/ui/tk-page-section-row/tk-page-section-row.component.mjs +13 -0
- package/esm2020/shared/src/ui/ui.module.mjs +37 -0
- package/esm2020/shared/tuki-io-tuki-widgets-shared.mjs +5 -0
- package/esm2020/user-creation/src/app.constants.mjs +1 -1
- package/esm2020/user-creation/src/classes/notification.mjs +1 -1
- package/esm2020/user-creation/src/classes/site.mjs +1 -1
- package/esm2020/user-creation/src/environments/environment.mjs +1 -1
- package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
- package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
- package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
- package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
- package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
- package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
- package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
- package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
- package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +4 -0
- package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
- package/esm2020/user-creation/src/utils/model.mjs +1 -1
- package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +60 -13
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +8 -6
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +13 -9
- package/esm2020/user-device-manage/public-api.mjs +1 -1
- package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
- package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
- package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
- package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
- package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
- package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
- package/esm2020/user-device-manage/src/material.module.mjs +1 -1
- package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
- package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
- package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +1 -4
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/user-manage/public-api.mjs +1 -1
- package/esm2020/user-manage/src/app.constants.mjs +7 -1
- package/esm2020/user-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
- package/esm2020/user-manage/src/classes/line.mjs +1 -1
- package/esm2020/user-manage/src/classes/notification.mjs +1 -1
- package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
- package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
- package/esm2020/user-manage/src/classes/simplified-user.mjs +5 -3
- package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
- package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
- package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
- package/esm2020/user-manage/src/common-functions.mjs +1 -1
- package/esm2020/user-manage/src/device-list/device-list.component.mjs +7 -4
- package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +6 -3
- package/esm2020/user-manage/src/environments/environment.mjs +1 -1
- package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
- package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
- package/esm2020/user-manage/src/material.module.mjs +14 -7
- package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
- package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-manage/src/services/api.service.mjs +1 -1
- package/esm2020/user-manage/src/services/dcp-api.service.mjs +79 -0
- package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
- package/esm2020/user-manage/src/services/line.service.mjs +1 -1
- package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
- package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
- package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
- package/esm2020/user-manage/src/services/user.service.mjs +65 -19
- package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
- package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
- package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +12 -7
- package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +64 -23
- package/esm2020/user-manage/src/user-manage.module.mjs +10 -3
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
- package/esm2020/users-list/public-api.mjs +1 -1
- package/esm2020/users-list/src/app.constants.mjs +3 -1
- package/esm2020/users-list/src/classes/app-location.mjs +1 -1
- package/esm2020/users-list/src/classes/device.mjs +1 -1
- package/esm2020/users-list/src/classes/line.mjs +1 -1
- package/esm2020/users-list/src/classes/move-user.mjs +1 -1
- package/esm2020/users-list/src/classes/notification.mjs +1 -1
- package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
- package/esm2020/users-list/src/classes/table-data.mjs +1 -1
- package/esm2020/users-list/src/classes/user-list.mjs +2 -1
- package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +14 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -3
- package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
- package/esm2020/users-list/src/services/api.service.mjs +1 -1
- package/esm2020/users-list/src/services/dns.service.mjs +1 -1
- package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
- package/esm2020/users-list/src/services/notification.service.mjs +1 -1
- package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
- package/esm2020/users-list/src/services/user.service.mjs +8 -1
- package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
- package/esm2020/users-list/src/users-list.component.mjs +118 -22
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
- package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
- package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +952 -0
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs +280 -0
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +114 -36
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -31
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +262 -69
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +157 -37
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
- package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +948 -0
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs +280 -0
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +107 -32
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -31
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +257 -67
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +156 -37
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
- package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
- package/meetings/index.d.ts +5 -0
- package/meetings/public-api.d.ts +2 -0
- package/meetings/src/components/live-meetings/live-meeting/live-meeting.component.d.ts +34 -0
- package/meetings/src/components/live-meetings/live-meetings.component.d.ts +42 -0
- package/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.d.ts +33 -0
- package/meetings/src/components/meeting-spaces/meeting-spaces.component.d.ts +28 -0
- package/meetings/src/material.module.d.ts +13 -0
- package/meetings/src/meetings.component.d.ts +29 -0
- package/meetings/src/meetings.module.d.ts +15 -0
- package/meetings/src/services/api.service.d.ts +18 -0
- package/meetings/src/services/live-meetings.service.d.ts +9 -0
- package/meetings/src/services/meeting-spaces.service.d.ts +16 -0
- package/meetings/src/types/live-meeting.d.ts +71 -0
- package/meetings/src/types/meeting-space.d.ts +50 -0
- package/package.json +17 -1
- package/shared/index.d.ts +5 -0
- package/shared/public-api.d.ts +3 -0
- package/shared/src/ui/material.module.d.ts +28 -0
- package/shared/src/ui/shared.module.d.ts +10 -0
- 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
- package/shared/src/ui/tk-page-section-row/tk-page-section-row.component.d.ts +6 -0
- package/shared/src/ui/ui.module.d.ts +11 -0
- package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
- package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +1 -0
- package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
- package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +2 -0
- package/user-device-manage/src/classes/simplified-user.d.ts +1 -1
- package/user-device-manage/src/user-device-manage.module.d.ts +9 -10
- package/user-manage/src/app.constants.d.ts +6 -0
- package/user-manage/src/classes/simplified-user.d.ts +11 -1
- package/user-manage/src/device-list/device-list.component.d.ts +2 -0
- package/user-manage/src/material.module.d.ts +2 -1
- package/user-manage/src/services/dcp-api.service.d.ts +21 -0
- package/user-manage/src/services/user.service.d.ts +8 -1
- package/user-manage/src/user-calling/user-calling.component.d.ts +3 -2
- package/user-manage/src/user-manage-widget.component.d.ts +10 -2
- package/user-manage/src/user-manage.module.d.ts +2 -1
- package/users-list/src/app.constants.d.ts +2 -0
- package/users-list/src/classes/simlified-user.d.ts +1 -1
- package/users-list/src/classes/user-list.d.ts +4 -0
- package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +3 -1
- package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +2 -1
- package/users-list/src/services/user.service.d.ts +1 -0
- package/users-list/src/users-list.component.d.ts +6 -1
- package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +0 -13
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Component, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/live-meetings.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "@angular/material/icon";
|
|
7
|
+
export class LiveMeetingsComponent {
|
|
8
|
+
constructor(liveMeetingsService) {
|
|
9
|
+
this.liveMeetingsService = liveMeetingsService;
|
|
10
|
+
this.openLiveMeeting = new EventEmitter();
|
|
11
|
+
this.meetings = [];
|
|
12
|
+
this.summary = null;
|
|
13
|
+
this.searchTerm = '';
|
|
14
|
+
this.isAutoRefreshOn = true;
|
|
15
|
+
this.lastUpdatedLabel = 'Updated just now';
|
|
16
|
+
this.isFilterPanelOpen = false;
|
|
17
|
+
this.filters = {
|
|
18
|
+
lockState: '',
|
|
19
|
+
cluster: '',
|
|
20
|
+
startTimeAfter: '',
|
|
21
|
+
minParticipants: null,
|
|
22
|
+
owner: '',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.load();
|
|
27
|
+
}
|
|
28
|
+
get statCards() {
|
|
29
|
+
if (!this.summary) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
return [
|
|
33
|
+
{ label: 'Active meetings', value: this.summary.activeMeetings },
|
|
34
|
+
{ label: 'Connected participants', value: this.summary.connectedParticipants },
|
|
35
|
+
{ label: 'Waiting in lobby', value: this.summary.waitingInLobby },
|
|
36
|
+
{ label: 'Recording', value: this.summary.recording, icon: 'record-active-regular' },
|
|
37
|
+
{ label: 'Streaming', value: this.summary.streaming, icon: 'wifi-signal-good-regular' },
|
|
38
|
+
{ label: 'Quality warnings', value: this.summary.qualityWarnings },
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
get filteredMeetings() {
|
|
42
|
+
const term = this.searchTerm.trim().toLowerCase();
|
|
43
|
+
const startTimeAfter = this.filters.startTimeAfter.trim();
|
|
44
|
+
const minParticipants = this.filters.minParticipants ?? 0;
|
|
45
|
+
return this.meetings.filter(meeting => (!term ||
|
|
46
|
+
meeting.title.toLowerCase().includes(term) ||
|
|
47
|
+
meeting.ownerEmail.toLowerCase().includes(term) ||
|
|
48
|
+
meeting.ownerName.toLowerCase().includes(term)) &&
|
|
49
|
+
(!this.filters.lockState || meeting.lockState === this.filters.lockState) &&
|
|
50
|
+
(!this.filters.cluster || meeting.cluster === this.filters.cluster) &&
|
|
51
|
+
(!this.filters.owner || meeting.ownerName === this.filters.owner) &&
|
|
52
|
+
(!startTimeAfter || meeting.startTime >= startTimeAfter) &&
|
|
53
|
+
meeting.participants >= minParticipants);
|
|
54
|
+
}
|
|
55
|
+
get owners() {
|
|
56
|
+
return Array.from(new Set(this.meetings.map(meeting => meeting.ownerName))).sort();
|
|
57
|
+
}
|
|
58
|
+
get clusters() {
|
|
59
|
+
return Array.from(new Set(this.meetings.map(meeting => meeting.cluster))).sort();
|
|
60
|
+
}
|
|
61
|
+
toggleFilterPanel() {
|
|
62
|
+
this.isFilterPanelOpen = !this.isFilterPanelOpen;
|
|
63
|
+
}
|
|
64
|
+
closeFilterPanel() {
|
|
65
|
+
this.isFilterPanelOpen = false;
|
|
66
|
+
}
|
|
67
|
+
clearFilters() {
|
|
68
|
+
this.filters = { lockState: '', cluster: '', startTimeAfter: '', minParticipants: null, owner: '' };
|
|
69
|
+
}
|
|
70
|
+
onOpenLiveMeeting(meeting) {
|
|
71
|
+
this.openLiveMeeting.emit(meeting.id);
|
|
72
|
+
}
|
|
73
|
+
toggleAutoRefresh() {
|
|
74
|
+
this.isAutoRefreshOn = !this.isAutoRefreshOn;
|
|
75
|
+
}
|
|
76
|
+
refresh() {
|
|
77
|
+
this.load();
|
|
78
|
+
this.lastUpdatedLabel = 'Updated just now';
|
|
79
|
+
}
|
|
80
|
+
load() {
|
|
81
|
+
this.liveMeetingsService.fetchLiveMeetings().subscribe(snapshot => {
|
|
82
|
+
this.summary = snapshot.summary;
|
|
83
|
+
this.meetings = snapshot.meetings;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
LiveMeetingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LiveMeetingsComponent, deps: [{ token: i1.LiveMeetingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
+
LiveMeetingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LiveMeetingsComponent, selector: "tk-live-meetings", outputs: { openLiveMeeting: "openLiveMeeting" }, ngImport: i0, template: "<div class=\"tk-live-meetings\">\r\n <div class=\"tk-live-meetings__stats\">\r\n <div class=\"tk-live-meetings__stat-card\" *ngFor=\"let stat of statCards\">\r\n <span class=\"tk-live-meetings__stat-label\">\r\n <img *ngIf=\"stat.icon\" class=\"tk-live-meetings__stat-icon\" [src]=\"'assets/icons/' + stat.icon + '.svg'\" alt=\"\">\r\n {{ stat.label }}\r\n </span>\r\n <span class=\"tk-live-meetings__stat-value\">{{ stat.value }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__toolbar\">\r\n <div class=\"tk-live-meetings__search\">\r\n <mat-icon class=\"tk-live-meetings__search-icon\">search</mat-icon>\r\n <input\r\n type=\"text\"\r\n class=\"tk-live-meetings__search-input\"\r\n placeholder=\"Search by Name, URI or Meeting ID\"\r\n [(ngModel)]=\"searchTerm\">\r\n </div>\r\n\r\n <button type=\"button\" class=\"tk-live-meetings__filter-button\" (click)=\"toggleFilterPanel()\">\r\n <img class=\"tk-live-meetings__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\r\n Filter\r\n </button>\r\n\r\n <span class=\"tk-live-meetings__count\">{{ filteredMeetings.length }} meetings</span>\r\n </div>\r\n\r\n <table class=\"tk-live-meetings__table\">\r\n <thead>\r\n <tr>\r\n <th>Meeting Title</th>\r\n <th>Owner</th>\r\n <th>Participants</th>\r\n <th>Lobby</th>\r\n <th>Lock</th>\r\n <th>Activity</th>\r\n <th>Start</th>\r\n <th>Duration</th>\r\n <th>Cluster</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let meeting of filteredMeetings\">\r\n <td class=\"tk-live-meetings__title-cell\">\r\n <a href=\"javascript:void(0)\" class=\"tk-live-meetings__title-link\" (click)=\"onOpenLiveMeeting(meeting)\">{{ meeting.title }}</a>\r\n <span class=\"tk-live-meetings__title-subtext\">{{ meeting.ownerEmail }}</span>\r\n </td>\r\n <td>{{ meeting.ownerName }}</td>\r\n <td>{{ meeting.participants }}</td>\r\n <td>{{ meeting.lobbyCount }}</td>\r\n <td>\r\n <span\r\n class=\"tk-live-meetings__lock-badge\"\r\n [class.tk-live-meetings__lock-badge--locked]=\"meeting.lockState === 'locked'\">\r\n <ng-container *ngIf=\"meeting.lockState === 'locked'; else unlockedLabel\">\r\n <span class=\"tk-live-meetings__lock-dot\"></span>\r\n <img class=\"tk-live-meetings__lock-icon\" src=\"assets/icons/secure-lock-regular.svg\" alt=\"\">\r\n Locked\r\n </ng-container>\r\n <ng-template #unlockedLabel>Unlocked</ng-template>\r\n </span>\r\n </td>\r\n <td>\r\n <span class=\"tk-live-meetings__activity\">\r\n <ng-container *ngIf=\"meeting.activity.recording || meeting.activity.streaming || meeting.activity.presenting; else noActivity\">\r\n <img *ngIf=\"meeting.activity.recording\" class=\"tk-live-meetings__activity-icon tk-live-meetings__activity-icon--recording\" src=\"assets/icons/record-active-regular.svg\" alt=\"Recording\" title=\"Recording\">\r\n <img *ngIf=\"meeting.activity.streaming\" class=\"tk-live-meetings__activity-icon\" src=\"assets/icons/wifi-signal-good-regular.svg\" alt=\"Streaming\" title=\"Streaming\">\r\n <img *ngIf=\"meeting.activity.presenting\" class=\"tk-live-meetings__activity-icon\" src=\"assets/icons/display-regular.svg\" alt=\"Presenting\" title=\"Presenting\">\r\n </ng-container>\r\n <ng-template #noActivity>—</ng-template>\r\n </span>\r\n </td>\r\n <td>{{ meeting.startTime }}</td>\r\n <td>{{ meeting.duration }}</td>\r\n <td>{{ meeting.cluster }}</td>\r\n <td>\r\n <span class=\"tk-live-meetings__action-link\" (click)=\"onOpenLiveMeeting(meeting)\">Open controls</span>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!filteredMeetings.length\">\r\n <td colspan=\"11\" class=\"tk-live-meetings__empty\">No live meetings match your search.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div\r\n class=\"tk-live-meetings__filter-backdrop\"\r\n *ngIf=\"isFilterPanelOpen\"\r\n (click)=\"closeFilterPanel()\">\r\n </div>\r\n\r\n <aside class=\"tk-live-meetings__filter-panel\" [class.tk-live-meetings__filter-panel--open]=\"isFilterPanelOpen\">\r\n <div class=\"tk-live-meetings__filter-panel-header\">\r\n <h3 class=\"tk-live-meetings__filter-panel-title\">Filter live meetings</h3>\r\n <button\r\n type=\"button\"\r\n class=\"tk-live-meetings__filter-panel-close\"\r\n aria-label=\"Close filter panel\"\r\n (click)=\"closeFilterPanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-panel-body\">\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-lock-state\">Lock state</label>\r\n <div class=\"tk-live-meetings__filter-select-wrap\">\r\n <select id=\"tk-live-meetings-filter-lock-state\" class=\"tk-live-meetings__filter-select\" [(ngModel)]=\"filters.lockState\">\r\n <option value=\"\">All</option>\r\n <option value=\"locked\">Locked</option>\r\n <option value=\"unlocked\">Unlocked</option>\r\n </select>\r\n <mat-icon class=\"tk-live-meetings__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-cluster\">Cluster</label>\r\n <div class=\"tk-live-meetings__filter-select-wrap\">\r\n <select id=\"tk-live-meetings-filter-cluster\" class=\"tk-live-meetings__filter-select\" [(ngModel)]=\"filters.cluster\">\r\n <option value=\"\">All clusters</option>\r\n <option *ngFor=\"let cluster of clusters\" [value]=\"cluster\">{{ cluster }}</option>\r\n </select>\r\n <mat-icon class=\"tk-live-meetings__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-start-time\">Start time (after)</label>\r\n <div class=\"tk-live-meetings__filter-input-wrap\">\r\n <input\r\n #startTimeInput\r\n id=\"tk-live-meetings-filter-start-time\"\r\n type=\"time\"\r\n class=\"tk-live-meetings__filter-input tk-live-meetings__filter-input--time\"\r\n [class.tk-live-meetings__filter-input--has-value]=\"filters.startTimeAfter\"\r\n [(ngModel)]=\"filters.startTimeAfter\">\r\n <mat-icon\r\n class=\"tk-live-meetings__filter-input-icon tk-live-meetings__filter-input-icon--clickable\"\r\n (click)=\"startTimeInput.showPicker()\">\r\n schedule\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-min-participants\">Minimum participants</label>\r\n <input\r\n id=\"tk-live-meetings-filter-min-participants\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"tk-live-meetings__filter-input\"\r\n placeholder=\"0\"\r\n [(ngModel)]=\"filters.minParticipants\">\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-owner\">Owner</label>\r\n <div class=\"tk-live-meetings__filter-select-wrap\">\r\n <select id=\"tk-live-meetings-filter-owner\" class=\"tk-live-meetings__filter-select\" [(ngModel)]=\"filters.owner\">\r\n <option value=\"\">All owners</option>\r\n <option *ngFor=\"let owner of owners\" [value]=\"owner\">{{ owner }}</option>\r\n </select>\r\n <mat-icon class=\"tk-live-meetings__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-panel-footer\">\r\n <button type=\"button\" class=\"tk-live-meetings__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\r\n <button type=\"button\" class=\"tk-live-meetings__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\r\n </div>\r\n </aside>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";.tk-live-meetings{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-live-meetings__stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:.75rem;margin-bottom:1rem}.tk-live-meetings__stat-card{display:flex;flex-direction:column;gap:.5rem;padding:1rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:8px}.tk-live-meetings__stat-label{display:inline-flex;align-items:center;gap:.375rem;font-size:.8125rem;color:#0009}.tk-live-meetings__stat-icon{width:.875rem;height:.875rem}.tk-live-meetings__stat-value{font-size:1.5rem;font-weight:600;color:#000000f2}.tk-live-meetings__toolbar{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem}.tk-live-meetings__search{display:flex;align-items:center;gap:.5rem;flex:1;max-width:22rem;padding:.5rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px}.tk-live-meetings__search-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006}.tk-live-meetings__search-input{flex:1;border:none;outline:none;font-family:inherit;font-size:.8125rem;color:#000000f2}.tk-live-meetings__search-input::placeholder{color:#0006}.tk-live-meetings__filter-button{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem .875rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;font-weight:500;color:#000000f2;cursor:pointer}.tk-live-meetings__filter-button:hover{background:rgba(0,0,0,.03)}.tk-live-meetings__filter-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-live-meetings__filter-icon{font-size:1rem;height:1rem;width:1rem;opacity:.6}.tk-live-meetings__refresh{display:inline-flex;align-items:center;gap:.5rem;margin-left:auto;font-size:.8125rem;color:#0009;white-space:nowrap}.tk-live-meetings__refresh-dot{width:.5rem;height:.5rem;border-radius:50%;background:#1d805f}.tk-live-meetings__refresh-dot--off{background:rgba(0,0,0,.3)}.tk-live-meetings__refresh-toggle{background:none;border:none;padding:0;font-family:inherit;font-size:.8125rem;font-weight:500;color:#1170cf;cursor:pointer}.tk-live-meetings__refresh-button{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;cursor:pointer;color:#0009}.tk-live-meetings__refresh-button:hover{color:#000000f2}.tk-live-meetings__refresh-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-live-meetings__table{width:100%;border-collapse:collapse;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-live-meetings__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-live-meetings__table th:hover{background-color:#dedede}.tk-live-meetings__table td{min-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-live-meetings__table tbody tr:hover td{background:#ededed}.tk-live-meetings__title-cell{display:flex;flex-direction:column;justify-content:center;gap:.125rem}.tk-live-meetings__title-link{color:#1170cf;font-weight:500;text-decoration:none}.tk-live-meetings__title-link:hover{text-decoration:underline}.tk-live-meetings__title-subtext{font-size:.75rem;color:#0009}.tk-live-meetings__lock-badge{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;color:#0009}.tk-live-meetings__lock-badge--locked{padding:.125rem .625rem;border-radius:999px;background:#e8e8ea;color:#47484c}.tk-live-meetings__lock-dot{width:.375rem;height:.375rem;border-radius:50%;background:currentColor}.tk-live-meetings__lock-icon{height:.75rem;width:.75rem;opacity:.75}.tk-live-meetings__activity{display:inline-flex;align-items:center;gap:.5rem;color:#0009}.tk-live-meetings__activity-icon{width:1rem;height:1rem;opacity:.7}.tk-live-meetings__activity-icon--recording{opacity:1;filter:invert(24%) sepia(89%) saturate(3000%) hue-rotate(340deg) brightness(90%) contrast(90%)}.tk-live-meetings__quality-badge{display:inline-flex;align-items:center;gap:.375rem;padding:.125rem .625rem;border-radius:999px;background:rgba(0,0,0,.04);font-size:.75rem;font-weight:500;color:#000000f2}.tk-live-meetings__quality-dot{width:.5rem;height:.5rem;border-radius:50%}.tk-live-meetings__quality-badge--good .tk-live-meetings__quality-dot{background:#1d805f}.tk-live-meetings__quality-badge--fair .tk-live-meetings__quality-dot{background:#b5860b}.tk-live-meetings__quality-badge--poor .tk-live-meetings__quality-dot{background:#c73636}.tk-live-meetings__action-link{font-weight:500;text-decoration:none}.tk-live-meetings__action-link:hover{cursor:pointer}.tk-live-meetings__empty{padding:1.5rem;text-align:center;color:#0009}.tk-live-meetings__count{margin-left:auto;font-size:.8125rem;color:#0009;white-space:nowrap}.tk-live-meetings__filter-backdrop{position:fixed;inset:0;z-index:1000;background-color:oklch(18% .01 260/20%)}.tk-live-meetings__filter-panel{position:fixed;top:0;right:0;bottom:0;z-index:1001;display:flex;flex-direction:column;width:22rem;max-width:100vw;background:#fff;border-left:1px solid rgba(0,0,0,.12);box-shadow:-4px 0 16px #00000014;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;transform:translate(100%);transition:transform .1s ease;will-change:transform}.tk-live-meetings__filter-panel--open{transform:translate(0)}.tk-live-meetings__filter-panel-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid rgba(0,0,0,.12)}.tk-live-meetings__filter-panel-title{margin:0;font-size:1rem;font-weight:600;color:#000000f2}.tk-live-meetings__filter-panel-close{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;color:#0009;cursor:pointer}.tk-live-meetings__filter-panel-close:hover{color:#000000f2}.tk-live-meetings__filter-panel-body{padding:1.5rem 1.5rem 0;overflow-y:auto}.tk-live-meetings__filter-field{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1.5rem}.tk-live-meetings__filter-label{font-size:.8125rem;font-weight:500;color:#000000f2}.tk-live-meetings__filter-select-wrap{position:relative;display:flex;align-items:center}.tk-live-meetings__filter-select,.tk-live-meetings__filter-input{width:100%;padding:.625rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2}.tk-live-meetings__filter-select:focus,.tk-live-meetings__filter-input:focus{outline:none;border-color:#0006}.tk-live-meetings__filter-select::placeholder,.tk-live-meetings__filter-input::placeholder{color:#0006}.tk-live-meetings__filter-select{appearance:none;padding-right:2rem;cursor:pointer}.tk-live-meetings__filter-select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-live-meetings__filter-input-wrap{position:relative;display:flex;align-items:center}.tk-live-meetings__filter-input-wrap .tk-live-meetings__filter-input{padding-right:2rem}.tk-live-meetings__filter-input-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-live-meetings__filter-input-icon--clickable{pointer-events:auto;cursor:pointer}.tk-live-meetings__filter-input-icon--clickable:hover{color:#000000f2}.tk-live-meetings__filter-input--time::-webkit-calendar-picker-indicator{opacity:0}.tk-live-meetings__filter-input--time::-webkit-datetime-edit{color:#0006}.tk-live-meetings__filter-input--time.tk-live-meetings__filter-input--has-value::-webkit-datetime-edit{color:#000000f2}.tk-live-meetings__filter-panel-footer{display:flex;align-items:center;justify-content:space-between;padding:0 1.5rem 1.5rem}.tk-live-meetings__filter-clear{background:none;border:none;padding:0;font-family:inherit;font-size:.813rem;font-weight:500;color:#000000f2;cursor:pointer;padding-inline:.75rem;height:2rem;border-radius:6px}.tk-live-meetings__filter-clear:hover{background-color:oklch(95.5% .005 260)}.tk-live-meetings__filter-done{background-color:#fff;border-radius:6px;font-weight:500;font-family:inherit;font-size:.813rem;cursor:pointer;border:1px solid oklch(92% .003 260);padding-inline:.75rem;height:2rem}.tk-live-meetings__filter-done:hover{background-color:oklch(95.5% .005 260)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LiveMeetingsComponent, decorators: [{
|
|
90
|
+
type: Component,
|
|
91
|
+
args: [{ selector: 'tk-live-meetings', template: "<div class=\"tk-live-meetings\">\r\n <div class=\"tk-live-meetings__stats\">\r\n <div class=\"tk-live-meetings__stat-card\" *ngFor=\"let stat of statCards\">\r\n <span class=\"tk-live-meetings__stat-label\">\r\n <img *ngIf=\"stat.icon\" class=\"tk-live-meetings__stat-icon\" [src]=\"'assets/icons/' + stat.icon + '.svg'\" alt=\"\">\r\n {{ stat.label }}\r\n </span>\r\n <span class=\"tk-live-meetings__stat-value\">{{ stat.value }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__toolbar\">\r\n <div class=\"tk-live-meetings__search\">\r\n <mat-icon class=\"tk-live-meetings__search-icon\">search</mat-icon>\r\n <input\r\n type=\"text\"\r\n class=\"tk-live-meetings__search-input\"\r\n placeholder=\"Search by Name, URI or Meeting ID\"\r\n [(ngModel)]=\"searchTerm\">\r\n </div>\r\n\r\n <button type=\"button\" class=\"tk-live-meetings__filter-button\" (click)=\"toggleFilterPanel()\">\r\n <img class=\"tk-live-meetings__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\r\n Filter\r\n </button>\r\n\r\n <span class=\"tk-live-meetings__count\">{{ filteredMeetings.length }} meetings</span>\r\n </div>\r\n\r\n <table class=\"tk-live-meetings__table\">\r\n <thead>\r\n <tr>\r\n <th>Meeting Title</th>\r\n <th>Owner</th>\r\n <th>Participants</th>\r\n <th>Lobby</th>\r\n <th>Lock</th>\r\n <th>Activity</th>\r\n <th>Start</th>\r\n <th>Duration</th>\r\n <th>Cluster</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let meeting of filteredMeetings\">\r\n <td class=\"tk-live-meetings__title-cell\">\r\n <a href=\"javascript:void(0)\" class=\"tk-live-meetings__title-link\" (click)=\"onOpenLiveMeeting(meeting)\">{{ meeting.title }}</a>\r\n <span class=\"tk-live-meetings__title-subtext\">{{ meeting.ownerEmail }}</span>\r\n </td>\r\n <td>{{ meeting.ownerName }}</td>\r\n <td>{{ meeting.participants }}</td>\r\n <td>{{ meeting.lobbyCount }}</td>\r\n <td>\r\n <span\r\n class=\"tk-live-meetings__lock-badge\"\r\n [class.tk-live-meetings__lock-badge--locked]=\"meeting.lockState === 'locked'\">\r\n <ng-container *ngIf=\"meeting.lockState === 'locked'; else unlockedLabel\">\r\n <span class=\"tk-live-meetings__lock-dot\"></span>\r\n <img class=\"tk-live-meetings__lock-icon\" src=\"assets/icons/secure-lock-regular.svg\" alt=\"\">\r\n Locked\r\n </ng-container>\r\n <ng-template #unlockedLabel>Unlocked</ng-template>\r\n </span>\r\n </td>\r\n <td>\r\n <span class=\"tk-live-meetings__activity\">\r\n <ng-container *ngIf=\"meeting.activity.recording || meeting.activity.streaming || meeting.activity.presenting; else noActivity\">\r\n <img *ngIf=\"meeting.activity.recording\" class=\"tk-live-meetings__activity-icon tk-live-meetings__activity-icon--recording\" src=\"assets/icons/record-active-regular.svg\" alt=\"Recording\" title=\"Recording\">\r\n <img *ngIf=\"meeting.activity.streaming\" class=\"tk-live-meetings__activity-icon\" src=\"assets/icons/wifi-signal-good-regular.svg\" alt=\"Streaming\" title=\"Streaming\">\r\n <img *ngIf=\"meeting.activity.presenting\" class=\"tk-live-meetings__activity-icon\" src=\"assets/icons/display-regular.svg\" alt=\"Presenting\" title=\"Presenting\">\r\n </ng-container>\r\n <ng-template #noActivity>—</ng-template>\r\n </span>\r\n </td>\r\n <td>{{ meeting.startTime }}</td>\r\n <td>{{ meeting.duration }}</td>\r\n <td>{{ meeting.cluster }}</td>\r\n <td>\r\n <span class=\"tk-live-meetings__action-link\" (click)=\"onOpenLiveMeeting(meeting)\">Open controls</span>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!filteredMeetings.length\">\r\n <td colspan=\"11\" class=\"tk-live-meetings__empty\">No live meetings match your search.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div\r\n class=\"tk-live-meetings__filter-backdrop\"\r\n *ngIf=\"isFilterPanelOpen\"\r\n (click)=\"closeFilterPanel()\">\r\n </div>\r\n\r\n <aside class=\"tk-live-meetings__filter-panel\" [class.tk-live-meetings__filter-panel--open]=\"isFilterPanelOpen\">\r\n <div class=\"tk-live-meetings__filter-panel-header\">\r\n <h3 class=\"tk-live-meetings__filter-panel-title\">Filter live meetings</h3>\r\n <button\r\n type=\"button\"\r\n class=\"tk-live-meetings__filter-panel-close\"\r\n aria-label=\"Close filter panel\"\r\n (click)=\"closeFilterPanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-panel-body\">\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-lock-state\">Lock state</label>\r\n <div class=\"tk-live-meetings__filter-select-wrap\">\r\n <select id=\"tk-live-meetings-filter-lock-state\" class=\"tk-live-meetings__filter-select\" [(ngModel)]=\"filters.lockState\">\r\n <option value=\"\">All</option>\r\n <option value=\"locked\">Locked</option>\r\n <option value=\"unlocked\">Unlocked</option>\r\n </select>\r\n <mat-icon class=\"tk-live-meetings__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-cluster\">Cluster</label>\r\n <div class=\"tk-live-meetings__filter-select-wrap\">\r\n <select id=\"tk-live-meetings-filter-cluster\" class=\"tk-live-meetings__filter-select\" [(ngModel)]=\"filters.cluster\">\r\n <option value=\"\">All clusters</option>\r\n <option *ngFor=\"let cluster of clusters\" [value]=\"cluster\">{{ cluster }}</option>\r\n </select>\r\n <mat-icon class=\"tk-live-meetings__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-start-time\">Start time (after)</label>\r\n <div class=\"tk-live-meetings__filter-input-wrap\">\r\n <input\r\n #startTimeInput\r\n id=\"tk-live-meetings-filter-start-time\"\r\n type=\"time\"\r\n class=\"tk-live-meetings__filter-input tk-live-meetings__filter-input--time\"\r\n [class.tk-live-meetings__filter-input--has-value]=\"filters.startTimeAfter\"\r\n [(ngModel)]=\"filters.startTimeAfter\">\r\n <mat-icon\r\n class=\"tk-live-meetings__filter-input-icon tk-live-meetings__filter-input-icon--clickable\"\r\n (click)=\"startTimeInput.showPicker()\">\r\n schedule\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-min-participants\">Minimum participants</label>\r\n <input\r\n id=\"tk-live-meetings-filter-min-participants\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"tk-live-meetings__filter-input\"\r\n placeholder=\"0\"\r\n [(ngModel)]=\"filters.minParticipants\">\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-field\">\r\n <label class=\"tk-live-meetings__filter-label\" for=\"tk-live-meetings-filter-owner\">Owner</label>\r\n <div class=\"tk-live-meetings__filter-select-wrap\">\r\n <select id=\"tk-live-meetings-filter-owner\" class=\"tk-live-meetings__filter-select\" [(ngModel)]=\"filters.owner\">\r\n <option value=\"\">All owners</option>\r\n <option *ngFor=\"let owner of owners\" [value]=\"owner\">{{ owner }}</option>\r\n </select>\r\n <mat-icon class=\"tk-live-meetings__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-live-meetings__filter-panel-footer\">\r\n <button type=\"button\" class=\"tk-live-meetings__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\r\n <button type=\"button\" class=\"tk-live-meetings__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\r\n </div>\r\n </aside>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";.tk-live-meetings{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-live-meetings__stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:.75rem;margin-bottom:1rem}.tk-live-meetings__stat-card{display:flex;flex-direction:column;gap:.5rem;padding:1rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:8px}.tk-live-meetings__stat-label{display:inline-flex;align-items:center;gap:.375rem;font-size:.8125rem;color:#0009}.tk-live-meetings__stat-icon{width:.875rem;height:.875rem}.tk-live-meetings__stat-value{font-size:1.5rem;font-weight:600;color:#000000f2}.tk-live-meetings__toolbar{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem}.tk-live-meetings__search{display:flex;align-items:center;gap:.5rem;flex:1;max-width:22rem;padding:.5rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px}.tk-live-meetings__search-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006}.tk-live-meetings__search-input{flex:1;border:none;outline:none;font-family:inherit;font-size:.8125rem;color:#000000f2}.tk-live-meetings__search-input::placeholder{color:#0006}.tk-live-meetings__filter-button{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem .875rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;font-weight:500;color:#000000f2;cursor:pointer}.tk-live-meetings__filter-button:hover{background:rgba(0,0,0,.03)}.tk-live-meetings__filter-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-live-meetings__filter-icon{font-size:1rem;height:1rem;width:1rem;opacity:.6}.tk-live-meetings__refresh{display:inline-flex;align-items:center;gap:.5rem;margin-left:auto;font-size:.8125rem;color:#0009;white-space:nowrap}.tk-live-meetings__refresh-dot{width:.5rem;height:.5rem;border-radius:50%;background:#1d805f}.tk-live-meetings__refresh-dot--off{background:rgba(0,0,0,.3)}.tk-live-meetings__refresh-toggle{background:none;border:none;padding:0;font-family:inherit;font-size:.8125rem;font-weight:500;color:#1170cf;cursor:pointer}.tk-live-meetings__refresh-button{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;cursor:pointer;color:#0009}.tk-live-meetings__refresh-button:hover{color:#000000f2}.tk-live-meetings__refresh-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-live-meetings__table{width:100%;border-collapse:collapse;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-live-meetings__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-live-meetings__table th:hover{background-color:#dedede}.tk-live-meetings__table td{min-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-live-meetings__table tbody tr:hover td{background:#ededed}.tk-live-meetings__title-cell{display:flex;flex-direction:column;justify-content:center;gap:.125rem}.tk-live-meetings__title-link{color:#1170cf;font-weight:500;text-decoration:none}.tk-live-meetings__title-link:hover{text-decoration:underline}.tk-live-meetings__title-subtext{font-size:.75rem;color:#0009}.tk-live-meetings__lock-badge{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;color:#0009}.tk-live-meetings__lock-badge--locked{padding:.125rem .625rem;border-radius:999px;background:#e8e8ea;color:#47484c}.tk-live-meetings__lock-dot{width:.375rem;height:.375rem;border-radius:50%;background:currentColor}.tk-live-meetings__lock-icon{height:.75rem;width:.75rem;opacity:.75}.tk-live-meetings__activity{display:inline-flex;align-items:center;gap:.5rem;color:#0009}.tk-live-meetings__activity-icon{width:1rem;height:1rem;opacity:.7}.tk-live-meetings__activity-icon--recording{opacity:1;filter:invert(24%) sepia(89%) saturate(3000%) hue-rotate(340deg) brightness(90%) contrast(90%)}.tk-live-meetings__quality-badge{display:inline-flex;align-items:center;gap:.375rem;padding:.125rem .625rem;border-radius:999px;background:rgba(0,0,0,.04);font-size:.75rem;font-weight:500;color:#000000f2}.tk-live-meetings__quality-dot{width:.5rem;height:.5rem;border-radius:50%}.tk-live-meetings__quality-badge--good .tk-live-meetings__quality-dot{background:#1d805f}.tk-live-meetings__quality-badge--fair .tk-live-meetings__quality-dot{background:#b5860b}.tk-live-meetings__quality-badge--poor .tk-live-meetings__quality-dot{background:#c73636}.tk-live-meetings__action-link{font-weight:500;text-decoration:none}.tk-live-meetings__action-link:hover{cursor:pointer}.tk-live-meetings__empty{padding:1.5rem;text-align:center;color:#0009}.tk-live-meetings__count{margin-left:auto;font-size:.8125rem;color:#0009;white-space:nowrap}.tk-live-meetings__filter-backdrop{position:fixed;inset:0;z-index:1000;background-color:oklch(18% .01 260/20%)}.tk-live-meetings__filter-panel{position:fixed;top:0;right:0;bottom:0;z-index:1001;display:flex;flex-direction:column;width:22rem;max-width:100vw;background:#fff;border-left:1px solid rgba(0,0,0,.12);box-shadow:-4px 0 16px #00000014;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;transform:translate(100%);transition:transform .1s ease;will-change:transform}.tk-live-meetings__filter-panel--open{transform:translate(0)}.tk-live-meetings__filter-panel-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid rgba(0,0,0,.12)}.tk-live-meetings__filter-panel-title{margin:0;font-size:1rem;font-weight:600;color:#000000f2}.tk-live-meetings__filter-panel-close{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;color:#0009;cursor:pointer}.tk-live-meetings__filter-panel-close:hover{color:#000000f2}.tk-live-meetings__filter-panel-body{padding:1.5rem 1.5rem 0;overflow-y:auto}.tk-live-meetings__filter-field{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1.5rem}.tk-live-meetings__filter-label{font-size:.8125rem;font-weight:500;color:#000000f2}.tk-live-meetings__filter-select-wrap{position:relative;display:flex;align-items:center}.tk-live-meetings__filter-select,.tk-live-meetings__filter-input{width:100%;padding:.625rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2}.tk-live-meetings__filter-select:focus,.tk-live-meetings__filter-input:focus{outline:none;border-color:#0006}.tk-live-meetings__filter-select::placeholder,.tk-live-meetings__filter-input::placeholder{color:#0006}.tk-live-meetings__filter-select{appearance:none;padding-right:2rem;cursor:pointer}.tk-live-meetings__filter-select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-live-meetings__filter-input-wrap{position:relative;display:flex;align-items:center}.tk-live-meetings__filter-input-wrap .tk-live-meetings__filter-input{padding-right:2rem}.tk-live-meetings__filter-input-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-live-meetings__filter-input-icon--clickable{pointer-events:auto;cursor:pointer}.tk-live-meetings__filter-input-icon--clickable:hover{color:#000000f2}.tk-live-meetings__filter-input--time::-webkit-calendar-picker-indicator{opacity:0}.tk-live-meetings__filter-input--time::-webkit-datetime-edit{color:#0006}.tk-live-meetings__filter-input--time.tk-live-meetings__filter-input--has-value::-webkit-datetime-edit{color:#000000f2}.tk-live-meetings__filter-panel-footer{display:flex;align-items:center;justify-content:space-between;padding:0 1.5rem 1.5rem}.tk-live-meetings__filter-clear{background:none;border:none;padding:0;font-family:inherit;font-size:.813rem;font-weight:500;color:#000000f2;cursor:pointer;padding-inline:.75rem;height:2rem;border-radius:6px}.tk-live-meetings__filter-clear:hover{background-color:oklch(95.5% .005 260)}.tk-live-meetings__filter-done{background-color:#fff;border-radius:6px;font-weight:500;font-family:inherit;font-size:.813rem;cursor:pointer;border:1px solid oklch(92% .003 260);padding-inline:.75rem;height:2rem}.tk-live-meetings__filter-done:hover{background-color:oklch(95.5% .005 260)}\n"] }]
|
|
92
|
+
}], ctorParameters: function () { return [{ type: i1.LiveMeetingsService }]; }, propDecorators: { openLiveMeeting: [{
|
|
93
|
+
type: Output
|
|
94
|
+
}] } });
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1tZWV0aW5ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvbWVldGluZ3Mvc3JjL2NvbXBvbmVudHMvbGl2ZS1tZWV0aW5ncy9saXZlLW1lZXRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9tZWV0aW5ncy9zcmMvY29tcG9uZW50cy9saXZlLW1lZXRpbmdzL2xpdmUtbWVldGluZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFleEUsTUFBTSxPQUFPLHFCQUFxQjtJQWtCaEMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFqQmxELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV2RCxhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQUM3QixZQUFPLEdBQStCLElBQUksQ0FBQztRQUMzQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLGtCQUFrQixDQUFDO1FBRXRDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixZQUFPLEdBQUc7WUFDUixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsY0FBYyxFQUFFLEVBQUU7WUFDbEIsZUFBZSxFQUFFLElBQXFCO1lBQ3RDLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztJQUU4RCxDQUFDO0lBRWpFLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU87WUFDTCxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDaEUsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDOUUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQ2pFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ3BGLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ3ZGLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtTQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDcEMsQ0FBQyxDQUFDLElBQUk7WUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDMUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUM7WUFDeEQsT0FBTyxDQUFDLFlBQVksSUFBSSxlQUFlLENBQ3hDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuRixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ25ELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3RHLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFvQjtRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0lBQzdDLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEE3RlUscUJBQXFCO3VHQUFyQixxQkFBcUIseUdDZmxDLDBrUkFpTEE7NEZEbEthLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxrQkFBa0I7MEdBS2xCLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGl2ZU1lZXRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpdmUtbWVldGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IExpdmVNZWV0aW5nLCBMaXZlTWVldGluZ3NTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vdHlwZXMvbGl2ZS1tZWV0aW5nJztcclxuXHJcbmludGVyZmFjZSBMaXZlTWVldGluZ3NTdGF0Q2FyZCB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGstbGl2ZS1tZWV0aW5ncycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpdmUtbWVldGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xpdmUtbWVldGluZ3MuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpdmVNZWV0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpIG9wZW5MaXZlTWVldGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBtZWV0aW5nczogTGl2ZU1lZXRpbmdbXSA9IFtdO1xyXG4gIHN1bW1hcnk6IExpdmVNZWV0aW5nc1N1bW1hcnkgfCBudWxsID0gbnVsbDtcclxuICBzZWFyY2hUZXJtID0gJyc7XHJcbiAgaXNBdXRvUmVmcmVzaE9uID0gdHJ1ZTtcclxuICBsYXN0VXBkYXRlZExhYmVsID0gJ1VwZGF0ZWQganVzdCBub3cnO1xyXG5cclxuICBpc0ZpbHRlclBhbmVsT3BlbiA9IGZhbHNlO1xyXG4gIGZpbHRlcnMgPSB7XHJcbiAgICBsb2NrU3RhdGU6ICcnLFxyXG4gICAgY2x1c3RlcjogJycsXHJcbiAgICBzdGFydFRpbWVBZnRlcjogJycsXHJcbiAgICBtaW5QYXJ0aWNpcGFudHM6IG51bGwgYXMgbnVtYmVyIHwgbnVsbCxcclxuICAgIG93bmVyOiAnJyxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxpdmVNZWV0aW5nc1NlcnZpY2U6IExpdmVNZWV0aW5nc1NlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXRDYXJkcygpOiBMaXZlTWVldGluZ3NTdGF0Q2FyZFtdIHtcclxuICAgIGlmICghdGhpcy5zdW1tYXJ5KSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXHJcbiAgICAgIHsgbGFiZWw6ICdBY3RpdmUgbWVldGluZ3MnLCB2YWx1ZTogdGhpcy5zdW1tYXJ5LmFjdGl2ZU1lZXRpbmdzIH0sXHJcbiAgICAgIHsgbGFiZWw6ICdDb25uZWN0ZWQgcGFydGljaXBhbnRzJywgdmFsdWU6IHRoaXMuc3VtbWFyeS5jb25uZWN0ZWRQYXJ0aWNpcGFudHMgfSxcclxuICAgICAgeyBsYWJlbDogJ1dhaXRpbmcgaW4gbG9iYnknLCB2YWx1ZTogdGhpcy5zdW1tYXJ5LndhaXRpbmdJbkxvYmJ5IH0sXHJcbiAgICAgIHsgbGFiZWw6ICdSZWNvcmRpbmcnLCB2YWx1ZTogdGhpcy5zdW1tYXJ5LnJlY29yZGluZywgaWNvbjogJ3JlY29yZC1hY3RpdmUtcmVndWxhcicgfSxcclxuICAgICAgeyBsYWJlbDogJ1N0cmVhbWluZycsIHZhbHVlOiB0aGlzLnN1bW1hcnkuc3RyZWFtaW5nLCBpY29uOiAnd2lmaS1zaWduYWwtZ29vZC1yZWd1bGFyJyB9LFxyXG4gICAgICB7IGxhYmVsOiAnUXVhbGl0eSB3YXJuaW5ncycsIHZhbHVlOiB0aGlzLnN1bW1hcnkucXVhbGl0eVdhcm5pbmdzIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkTWVldGluZ3MoKTogTGl2ZU1lZXRpbmdbXSB7XHJcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lQWZ0ZXIgPSB0aGlzLmZpbHRlcnMuc3RhcnRUaW1lQWZ0ZXIudHJpbSgpO1xyXG4gICAgY29uc3QgbWluUGFydGljaXBhbnRzID0gdGhpcy5maWx0ZXJzLm1pblBhcnRpY2lwYW50cyA/PyAwO1xyXG4gICAgcmV0dXJuIHRoaXMubWVldGluZ3MuZmlsdGVyKG1lZXRpbmcgPT5cclxuICAgICAgKCF0ZXJtIHx8XHJcbiAgICAgICAgbWVldGluZy50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pIHx8XHJcbiAgICAgICAgbWVldGluZy5vd25lckVtYWlsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkgfHxcclxuICAgICAgICBtZWV0aW5nLm93bmVyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pKSAmJlxyXG4gICAgICAoIXRoaXMuZmlsdGVycy5sb2NrU3RhdGUgfHwgbWVldGluZy5sb2NrU3RhdGUgPT09IHRoaXMuZmlsdGVycy5sb2NrU3RhdGUpICYmXHJcbiAgICAgICghdGhpcy5maWx0ZXJzLmNsdXN0ZXIgfHwgbWVldGluZy5jbHVzdGVyID09PSB0aGlzLmZpbHRlcnMuY2x1c3RlcikgJiZcclxuICAgICAgKCF0aGlzLmZpbHRlcnMub3duZXIgfHwgbWVldGluZy5vd25lck5hbWUgPT09IHRoaXMuZmlsdGVycy5vd25lcikgJiZcclxuICAgICAgKCFzdGFydFRpbWVBZnRlciB8fCBtZWV0aW5nLnN0YXJ0VGltZSA+PSBzdGFydFRpbWVBZnRlcikgJiZcclxuICAgICAgbWVldGluZy5wYXJ0aWNpcGFudHMgPj0gbWluUGFydGljaXBhbnRzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG93bmVycygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubWVldGluZ3MubWFwKG1lZXRpbmcgPT4gbWVldGluZy5vd25lck5hbWUpKSkuc29ydCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNsdXN0ZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5tZWV0aW5ncy5tYXAobWVldGluZyA9PiBtZWV0aW5nLmNsdXN0ZXIpKSkuc29ydCgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyUGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRmlsdGVyUGFuZWxPcGVuID0gIXRoaXMuaXNGaWx0ZXJQYW5lbE9wZW47XHJcbiAgfVxyXG5cclxuICBjbG9zZUZpbHRlclBhbmVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZpbHRlclBhbmVsT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJzID0geyBsb2NrU3RhdGU6ICcnLCBjbHVzdGVyOiAnJywgc3RhcnRUaW1lQWZ0ZXI6ICcnLCBtaW5QYXJ0aWNpcGFudHM6IG51bGwsIG93bmVyOiAnJyB9O1xyXG4gIH1cclxuXHJcbiAgb25PcGVuTGl2ZU1lZXRpbmcobWVldGluZzogTGl2ZU1lZXRpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMub3BlbkxpdmVNZWV0aW5nLmVtaXQobWVldGluZy5pZCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBdXRvUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBdXRvUmVmcmVzaE9uID0gIXRoaXMuaXNBdXRvUmVmcmVzaE9uO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZCgpO1xyXG4gICAgdGhpcy5sYXN0VXBkYXRlZExhYmVsID0gJ1VwZGF0ZWQganVzdCBub3cnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5saXZlTWVldGluZ3NTZXJ2aWNlLmZldGNoTGl2ZU1lZXRpbmdzKCkuc3Vic2NyaWJlKHNuYXBzaG90ID0+IHtcclxuICAgICAgdGhpcy5zdW1tYXJ5ID0gc25hcHNob3Quc3VtbWFyeTtcclxuICAgICAgdGhpcy5tZWV0aW5ncyA9IHNuYXBzaG90Lm1lZXRpbmdzO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX3N0YXRzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fc3RhdC1jYXJkXCIgKm5nRm9yPVwibGV0IHN0YXQgb2Ygc3RhdENhcmRzXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fc3RhdC1sYWJlbFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJzdGF0Lmljb25cIiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX3N0YXQtaWNvblwiIFtzcmNdPVwiJ2Fzc2V0cy9pY29ucy8nICsgc3RhdC5pY29uICsgJy5zdmcnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAge3sgc3RhdC5sYWJlbCB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fc3RhdC12YWx1ZVwiPnt7IHN0YXQudmFsdWUgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX3Rvb2xiYXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19zZWFyY2hcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fc2VhcmNoLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19zZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IE5hbWUsIFVSSSBvciBNZWV0aW5nIElEXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lbCgpXCI+XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9maWx0ZXItcmVndWxhci5zdmdcIiBhbHQ9XCJmaWx0ZXJfbGlzdFwiIHRpdGxlPVwiZmlsdGVyX2xpc3RcIj5cclxuICAgICAgICBGaWx0ZXJcclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fY291bnRcIj57eyBmaWx0ZXJlZE1lZXRpbmdzLmxlbmd0aCB9fSBtZWV0aW5nczwvc3Bhbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHRhYmxlIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fdGFibGVcIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aD5NZWV0aW5nIFRpdGxlPC90aD5cclxuICAgICAgICA8dGg+T3duZXI8L3RoPlxyXG4gICAgICAgIDx0aD5QYXJ0aWNpcGFudHM8L3RoPlxyXG4gICAgICAgIDx0aD5Mb2JieTwvdGg+XHJcbiAgICAgICAgPHRoPkxvY2s8L3RoPlxyXG4gICAgICAgIDx0aD5BY3Rpdml0eTwvdGg+XHJcbiAgICAgICAgPHRoPlN0YXJ0PC90aD5cclxuICAgICAgICA8dGg+RHVyYXRpb248L3RoPlxyXG4gICAgICAgIDx0aD5DbHVzdGVyPC90aD5cclxuICAgICAgICA8dGg+QWN0aW9uczwvdGg+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5PlxyXG4gICAgICA8dHIgKm5nRm9yPVwibGV0IG1lZXRpbmcgb2YgZmlsdGVyZWRNZWV0aW5nc1wiPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX3RpdGxlLWNlbGxcIj5cclxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX3RpdGxlLWxpbmtcIiAoY2xpY2spPVwib25PcGVuTGl2ZU1lZXRpbmcobWVldGluZylcIj57eyBtZWV0aW5nLnRpdGxlIH19PC9hPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX190aXRsZS1zdWJ0ZXh0XCI+e3sgbWVldGluZy5vd25lckVtYWlsIH19PC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IG1lZXRpbmcub3duZXJOYW1lIH19PC90ZD5cclxuICAgICAgICA8dGQ+e3sgbWVldGluZy5wYXJ0aWNpcGFudHMgfX08L3RkPlxyXG4gICAgICAgIDx0ZD57eyBtZWV0aW5nLmxvYmJ5Q291bnQgfX08L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fbG9jay1iYWRnZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy50ay1saXZlLW1lZXRpbmdzX19sb2NrLWJhZGdlLS1sb2NrZWRdPVwibWVldGluZy5sb2NrU3RhdGUgPT09ICdsb2NrZWQnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZWV0aW5nLmxvY2tTdGF0ZSA9PT0gJ2xvY2tlZCc7IGVsc2UgdW5sb2NrZWRMYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fbG9jay1kb3RcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2xvY2staWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9zZWN1cmUtbG9jay1yZWd1bGFyLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgIExvY2tlZFxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1bmxvY2tlZExhYmVsPlVubG9ja2VkPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fYWN0aXZpdHlcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lZXRpbmcuYWN0aXZpdHkucmVjb3JkaW5nIHx8IG1lZXRpbmcuYWN0aXZpdHkuc3RyZWFtaW5nIHx8IG1lZXRpbmcuYWN0aXZpdHkucHJlc2VudGluZzsgZWxzZSBub0FjdGl2aXR5XCI+XHJcbiAgICAgICAgICAgICAgPGltZyAqbmdJZj1cIm1lZXRpbmcuYWN0aXZpdHkucmVjb3JkaW5nXCIgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19hY3Rpdml0eS1pY29uIHRrLWxpdmUtbWVldGluZ3NfX2FjdGl2aXR5LWljb24tLXJlY29yZGluZ1wiIHNyYz1cImFzc2V0cy9pY29ucy9yZWNvcmQtYWN0aXZlLXJlZ3VsYXIuc3ZnXCIgYWx0PVwiUmVjb3JkaW5nXCIgdGl0bGU9XCJSZWNvcmRpbmdcIj5cclxuICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwibWVldGluZy5hY3Rpdml0eS5zdHJlYW1pbmdcIiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2FjdGl2aXR5LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvd2lmaS1zaWduYWwtZ29vZC1yZWd1bGFyLnN2Z1wiIGFsdD1cIlN0cmVhbWluZ1wiIHRpdGxlPVwiU3RyZWFtaW5nXCI+XHJcbiAgICAgICAgICAgICAgPGltZyAqbmdJZj1cIm1lZXRpbmcuYWN0aXZpdHkucHJlc2VudGluZ1wiIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fYWN0aXZpdHktaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9kaXNwbGF5LXJlZ3VsYXIuc3ZnXCIgYWx0PVwiUHJlc2VudGluZ1wiIHRpdGxlPVwiUHJlc2VudGluZ1wiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0FjdGl2aXR5PiZtZGFzaDs8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IG1lZXRpbmcuc3RhcnRUaW1lIH19PC90ZD5cclxuICAgICAgICA8dGQ+e3sgbWVldGluZy5kdXJhdGlvbiB9fTwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IG1lZXRpbmcuY2x1c3RlciB9fTwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19hY3Rpb24tbGlua1wiIChjbGljayk9XCJvbk9wZW5MaXZlTWVldGluZyhtZWV0aW5nKVwiPk9wZW4gY29udHJvbHM8L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRyICpuZ0lmPVwiIWZpbHRlcmVkTWVldGluZ3MubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRkIGNvbHNwYW49XCIxMVwiIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZW1wdHlcIj5ObyBsaXZlIG1lZXRpbmdzIG1hdGNoIHlvdXIgc2VhcmNoLjwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWJhY2tkcm9wXCJcclxuICAgICpuZ0lmPVwiaXNGaWx0ZXJQYW5lbE9wZW5cIlxyXG4gICAgKGNsaWNrKT1cImNsb3NlRmlsdGVyUGFuZWwoKVwiPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8YXNpZGUgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItcGFuZWxcIiBbY2xhc3MudGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLXBhbmVsLS1vcGVuXT1cImlzRmlsdGVyUGFuZWxPcGVuXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLXBhbmVsLWhlYWRlclwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItcGFuZWwtdGl0bGVcIj5GaWx0ZXIgbGl2ZSBtZWV0aW5nczwvaDM+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1wYW5lbC1jbG9zZVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIGZpbHRlciBwYW5lbFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlRmlsdGVyUGFuZWwoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1wYW5lbC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItZmllbGRcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItbGFiZWxcIiBmb3I9XCJ0ay1saXZlLW1lZXRpbmdzLWZpbHRlci1sb2NrLXN0YXRlXCI+TG9jayBzdGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1zZWxlY3Qtd3JhcFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBpZD1cInRrLWxpdmUtbWVldGluZ3MtZmlsdGVyLWxvY2stc3RhdGVcIiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMubG9ja1N0YXRlXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxvY2tlZFwiPkxvY2tlZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidW5sb2NrZWRcIj5VbmxvY2tlZDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItc2VsZWN0LWljb25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1maWVsZFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1sYWJlbFwiIGZvcj1cInRrLWxpdmUtbWVldGluZ3MtZmlsdGVyLWNsdXN0ZXJcIj5DbHVzdGVyPC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLXNlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IGlkPVwidGstbGl2ZS1tZWV0aW5ncy1maWx0ZXItY2x1c3RlclwiIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5jbHVzdGVyXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5BbGwgY2x1c3RlcnM8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY2x1c3RlciBvZiBjbHVzdGVyc1wiIFt2YWx1ZV09XCJjbHVzdGVyXCI+e3sgY2x1c3RlciB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItc2VsZWN0LWljb25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1maWVsZFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1sYWJlbFwiIGZvcj1cInRrLWxpdmUtbWVldGluZ3MtZmlsdGVyLXN0YXJ0LXRpbWVcIj5TdGFydCB0aW1lIChhZnRlcik8L2xhYmVsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItaW5wdXQtd3JhcFwiPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICNzdGFydFRpbWVJbnB1dFxyXG4gICAgICAgICAgICBpZD1cInRrLWxpdmUtbWVldGluZ3MtZmlsdGVyLXN0YXJ0LXRpbWVcIlxyXG4gICAgICAgICAgICB0eXBlPVwidGltZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWlucHV0IHRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1pbnB1dC0tdGltZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy50ay1saXZlLW1lZXRpbmdzX19maWx0ZXItaW5wdXQtLWhhcy12YWx1ZV09XCJmaWx0ZXJzLnN0YXJ0VGltZUFmdGVyXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLnN0YXJ0VGltZUFmdGVyXCI+XHJcbiAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItaW5wdXQtaWNvbiB0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItaW5wdXQtaWNvbi0tY2xpY2thYmxlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0VGltZUlucHV0LnNob3dQaWNrZXIoKVwiPlxyXG4gICAgICAgICAgICBzY2hlZHVsZVxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWZpZWxkXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWxhYmVsXCIgZm9yPVwidGstbGl2ZS1tZWV0aW5ncy1maWx0ZXItbWluLXBhcnRpY2lwYW50c1wiPk1pbmltdW0gcGFydGljaXBhbnRzPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIGlkPVwidGstbGl2ZS1tZWV0aW5ncy1maWx0ZXItbWluLXBhcnRpY2lwYW50c1wiXHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItaW5wdXRcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCIwXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVycy5taW5QYXJ0aWNpcGFudHNcIj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWZpZWxkXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLWxhYmVsXCIgZm9yPVwidGstbGl2ZS1tZWV0aW5ncy1maWx0ZXItb3duZXJcIj5Pd25lcjwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1zZWxlY3Qtd3JhcFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBpZD1cInRrLWxpdmUtbWVldGluZ3MtZmlsdGVyLW93bmVyXCIgY2xhc3M9XCJ0ay1saXZlLW1lZXRpbmdzX19maWx0ZXItc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLm93bmVyXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5BbGwgb3duZXJzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG93bmVyIG9mIG93bmVyc1wiIFt2YWx1ZV09XCJvd25lclwiPnt7IG93bmVyIH19PC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1zZWxlY3QtaWNvblwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGstbGl2ZS1tZWV0aW5nc19fZmlsdGVyLXBhbmVsLWZvb3RlclwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1jbGVhclwiIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiPkNsZWFyIGFsbDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRrLWxpdmUtbWVldGluZ3NfX2ZpbHRlci1kb25lXCIgKGNsaWNrKT1cImNsb3NlRmlsdGVyUGFuZWwoKVwiPkRvbmU8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYXNpZGU+XHJcbjwvZGl2PlxyXG4iXX0=
|
package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { createDefaultMeetingSpaceDetails } from '../../../services/meeting-spaces.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../services/meeting-spaces.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/forms";
|
|
7
|
+
import * as i4 from "@angular/material/icon";
|
|
8
|
+
export class MeetingSpaceComponent {
|
|
9
|
+
constructor(meetingSpacesService) {
|
|
10
|
+
this.meetingSpacesService = meetingSpacesService;
|
|
11
|
+
this.mode = 'create';
|
|
12
|
+
this.meetingSpaceId = null;
|
|
13
|
+
this.back = new EventEmitter();
|
|
14
|
+
this.saved = new EventEmitter();
|
|
15
|
+
this.details = createDefaultMeetingSpaceDetails();
|
|
16
|
+
this.clusters = ['us-east-1', 'eu-west-1', 'apac-south-1'];
|
|
17
|
+
this.videoLayouts = [
|
|
18
|
+
{ value: 'all-equal', label: 'All equal' },
|
|
19
|
+
{ value: 'speaker-only', label: 'Speaker only' },
|
|
20
|
+
{ value: 'telepresence', label: 'Telepresence' },
|
|
21
|
+
{ value: 'stacked', label: 'Stacked' },
|
|
22
|
+
{ value: 'one-plus-five', label: 'One plus five' },
|
|
23
|
+
{ value: 'one-plus-seven', label: 'One plus seven' },
|
|
24
|
+
{ value: 'one-plus-nine', label: 'One plus nine' },
|
|
25
|
+
{ value: 'more', label: 'More' },
|
|
26
|
+
];
|
|
27
|
+
this.videoQualities = [
|
|
28
|
+
{ value: '480p30', label: '480p 30fps' },
|
|
29
|
+
{ value: '720p30', label: '720p 30fps' },
|
|
30
|
+
{ value: '1080p30', label: '1080p 30fps' },
|
|
31
|
+
];
|
|
32
|
+
this.presentationQualities = [
|
|
33
|
+
{ value: '720p5', label: '720p 5fps' },
|
|
34
|
+
{ value: '1080p30', label: '1080p 30fps' },
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
ngOnInit() {
|
|
38
|
+
if (this.isEdit && this.meetingSpaceId) {
|
|
39
|
+
this.meetingSpacesService.getOne(this.meetingSpaceId).subscribe(details => {
|
|
40
|
+
this.details = details;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
get isEdit() {
|
|
45
|
+
return this.mode === 'edit';
|
|
46
|
+
}
|
|
47
|
+
get browserJoinLink() {
|
|
48
|
+
return `https://${this.details.cluster}-cms/en-us/meeting/${this.details.meetingId}`;
|
|
49
|
+
}
|
|
50
|
+
addAccessRole() {
|
|
51
|
+
const index = this.details.accessRoles.length + 1;
|
|
52
|
+
this.details.accessRoles = [
|
|
53
|
+
...this.details.accessRoles,
|
|
54
|
+
{
|
|
55
|
+
id: `role-${index}`,
|
|
56
|
+
name: `Role ${index}`,
|
|
57
|
+
visibility: 'members-only',
|
|
58
|
+
passcode: '',
|
|
59
|
+
activatesMeetingOnJoin: false,
|
|
60
|
+
allowUnauthenticatedJoin: false,
|
|
61
|
+
participantsWaitInLobby: false,
|
|
62
|
+
grantMeetingHostControls: false,
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
removeAccessRole(role) {
|
|
67
|
+
this.details.accessRoles = this.details.accessRoles.filter(r => r !== role);
|
|
68
|
+
}
|
|
69
|
+
trackByRoleId(_index, role) {
|
|
70
|
+
return role.id;
|
|
71
|
+
}
|
|
72
|
+
onCancel() {
|
|
73
|
+
this.back.emit();
|
|
74
|
+
}
|
|
75
|
+
onSubmit() {
|
|
76
|
+
const request = this.isEdit && this.meetingSpaceId
|
|
77
|
+
? this.meetingSpacesService.put(this.meetingSpaceId, this.details)
|
|
78
|
+
: this.meetingSpacesService.save(this.details);
|
|
79
|
+
request.subscribe(saved => this.saved.emit(saved));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
MeetingSpaceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MeetingSpaceComponent, deps: [{ token: i1.MeetingSpacesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
+
MeetingSpaceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MeetingSpaceComponent, selector: "tk-meeting-space", inputs: { mode: "mode", meetingSpaceId: "meetingSpaceId" }, outputs: { back: "back", saved: "saved" }, ngImport: i0, template: "<form class=\"tk-meeting-space\" (ngSubmit)=\"onSubmit()\">\n <div class=\"tk-meeting-space__breadcrumb\">\n <a href=\"javascript:void(0)\" class=\"tk-meeting-space__breadcrumb-link\" (click)=\"onCancel()\">Meetings</a>\n <span class=\"tk-meeting-space__breadcrumb-separator\">›</span>\n <span class=\"tk-meeting-space__breadcrumb-current\">{{ isEdit ? details.name : 'New meeting space' }}</span>\n </div>\n\n <div class=\"tk-meeting-space__header\">\n <div class=\"tk-meeting-space__icon\">\n <mat-icon>videocam</mat-icon>\n </div>\n <div class=\"tk-meeting-space__heading\">\n <h1 class=\"tk-meeting-space__title\">{{ isEdit ? details.name : 'New meeting space' }}</h1>\n <p class=\"tk-meeting-space__subtitle\" *ngIf=\"!isEdit\">Configure a reusable meeting environment with join details and access roles.</p>\n <p class=\"tk-meeting-space__status\" *ngIf=\"isEdit\">\n <span class=\"tk-meeting-space__status-dot\" [class.tk-meeting-space__status-dot--disabled]=\"!details.enabled\"></span>\n {{ details.enabled ? 'Enabled' : 'Disabled' }} · {{ details.meetingUri }} · {{ details.meetingId }}\n </p>\n </div>\n </div>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">General information</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Basic details, ownership and where this space runs.</p>\n </div>\n\n <div class=\"tk-meeting-space__grid\">\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Space name *</label>\n <input class=\"tk-meeting-space__input\" name=\"name\" placeholder=\"e.g. Executive Boardroom\" [(ngModel)]=\"details.name\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Owner *</label>\n <input class=\"tk-meeting-space__input\" name=\"owner\" placeholder=\"owner@tuki.io\" [(ngModel)]=\"details.owner\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Description</label>\n <input class=\"tk-meeting-space__input\" name=\"description\" placeholder=\"Weekly executive strategy sync\" [(ngModel)]=\"details.description\">\n <span class=\"tk-meeting-space__hint\">Shown in invitations and the space directory.</span>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Cluster</label>\n <select class=\"tk-meeting-space__select\" name=\"cluster\" [(ngModel)]=\"details.cluster\">\n <option *ngFor=\"let cluster of clusters\" [value]=\"cluster\">{{ cluster }}</option>\n </select>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Space tag</label>\n <input class=\"tk-meeting-space__input\" name=\"tag\" placeholder=\"e.g. Leadership\" [(ngModel)]=\"details.tag\">\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting ID *</label>\n <input class=\"tk-meeting-space__input\" name=\"meetingId\" placeholder=\"e.g. 4427100\" [(ngModel)]=\"details.meetingId\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting URI *</label>\n <input class=\"tk-meeting-space__input\" name=\"meetingUri\" placeholder=\"space@tuki.io\" [(ngModel)]=\"details.meetingUri\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Secondary URI</label>\n <input class=\"tk-meeting-space__input\" name=\"secondaryUri\" placeholder=\"space.alt@tuki.io\" [(ngModel)]=\"details.secondaryUri\">\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting password</label>\n <input class=\"tk-meeting-space__input\" name=\"password\" placeholder=\"Optional\" [(ngModel)]=\"details.password\">\n </div>\n </div>\n\n <div class=\"tk-meeting-space__status-row\">\n <div>\n <p class=\"tk-meeting-space__status-row-label\">Space status</p>\n <p class=\"tk-meeting-space__hint\">Disabled spaces cannot activate meetings but keep their configuration.</p>\n </div>\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.enabled\"\n (click)=\"details.enabled = !details.enabled\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.enabled ? 'Enabled' : 'Disabled' }}</span>\n </div>\n </section>\n\n <section class=\"tk-meeting-space__section\" *ngIf=\"isEdit\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">Join information</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Everything participants need to reach this space.</p>\n </div>\n\n <div class=\"tk-meeting-space__grid\">\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting ID</label>\n <input class=\"tk-meeting-space__input\" [value]=\"details.meetingId\" disabled>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Browser join link</label>\n <input class=\"tk-meeting-space__input\" [value]=\"browserJoinLink\" disabled>\n </div>\n </div>\n </section>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <div class=\"tk-meeting-space__section-header-text\">\n <h2 class=\"tk-meeting-space__section-title\">Access roles and security</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Different ways participants can join, with their own passcode and permissions.</p>\n </div>\n <div class=\"tk-meeting-space__section-header-actions\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.accessRolesEnabled\"\n (click)=\"details.accessRolesEnabled = !details.accessRolesEnabled\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.accessRolesEnabled ? 'Enabled' : 'Disabled' }}</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"details.accessRolesEnabled\">\n <div class=\"tk-meeting-space__roles-toolbar\">\n <button type=\"button\" class=\"tk-meeting-space__add-role\" (click)=\"addAccessRole()\">\n <mat-icon class=\"tk-meeting-space__add-role-icon\">add</mat-icon>\n Add role\n </button>\n </div>\n\n <div class=\"tk-meeting-space__role\" *ngFor=\"let role of details.accessRoles; trackBy: trackByRoleId\">\n <div class=\"tk-meeting-space__role-header\">\n <span class=\"tk-meeting-space__role-name\">{{ role.name }}</span>\n <span class=\"tk-meeting-space__role-primary-badge\" *ngIf=\"role.primary\">Primary</span>\n <button\n type=\"button\"\n class=\"tk-meeting-space__role-remove\"\n *ngIf=\"!role.primary\"\n (click)=\"removeAccessRole(role)\"\n aria-label=\"Remove role\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <div class=\"tk-meeting-space__grid\">\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Visibility</label>\n <select class=\"tk-meeting-space__select\" [name]=\"'visibility-' + role.id\" [(ngModel)]=\"role.visibility\">\n <option value=\"members-only\">Members only</option>\n <option value=\"public\">Public</option>\n <option value=\"private\">Private</option>\n </select>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Passcode</label>\n <input class=\"tk-meeting-space__input\" [name]=\"'passcode-' + role.id\" placeholder=\"\" [(ngModel)]=\"role.passcode\">\n <span class=\"tk-meeting-space__hint\">Numeric, minimum 4 digits (server policy).</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__checkboxes\">\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'activates-' + role.id\" [(ngModel)]=\"role.activatesMeetingOnJoin\">\n Activates the meeting on join\n </label>\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'wait-lobby-' + role.id\" [(ngModel)]=\"role.participantsWaitInLobby\">\n Participants wait in lobby\n </label>\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'unauth-' + role.id\" [(ngModel)]=\"role.allowUnauthenticatedJoin\">\n Allow unauthenticated join\n </label>\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'host-controls-' + role.id\" [(ngModel)]=\"role.grantMeetingHostControls\">\n Grant meeting host controls\n </label>\n </div>\n </div>\n </ng-container>\n </section>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">Meeting experience</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Defaults applied when a meeting activates in this space.</p>\n </div>\n\n <p class=\"tk-meeting-space__label\">Default video layout</p>\n <div class=\"tk-meeting-space__layouts\">\n <button\n type=\"button\"\n *ngFor=\"let layout of videoLayouts\"\n class=\"tk-meeting-space__layout\"\n [class.tk-meeting-space__layout--selected]=\"details.defaultVideoLayout === layout.value\"\n (click)=\"details.defaultVideoLayout = layout.value\">\n {{ layout.label }}\n </button>\n </div>\n\n <div class=\"tk-meeting-space__grid tk-meeting-space__grid--experience\">\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Participant labels</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.participantLabels\"\n (click)=\"details.participantLabels = !details.participantLabels\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.participantLabels ? 'On' : 'Off' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Allow presentation</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.allowPresentation\"\n (click)=\"details.allowPresentation = !details.allowPresentation\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.allowPresentation ? 'On' : 'Off' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Disconnect others allowed</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.disconnectOthersAllowed\"\n (click)=\"details.disconnectOthersAllowed = !details.disconnectOthersAllowed\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.disconnectOthersAllowed ? 'True' : 'False' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Video quality</label>\n <select class=\"tk-meeting-space__select\" name=\"videoQuality\" [(ngModel)]=\"details.videoQuality\">\n <option *ngFor=\"let quality of videoQualities\" [value]=\"quality.value\">{{ quality.label }}</option>\n </select>\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Presentation quality</label>\n <select class=\"tk-meeting-space__select\" name=\"presentationQuality\" [(ngModel)]=\"details.presentationQuality\">\n <option *ngFor=\"let quality of presentationQualities\" [value]=\"quality.value\">{{ quality.label }}</option>\n </select>\n </div>\n </div>\n </section>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">Recording and streaming</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Controls for capturing and broadcasting the meeting.</p>\n </div>\n\n <div class=\"tk-meeting-space__grid tk-meeting-space__grid--recording\">\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Allow recording</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.allowRecording\"\n (click)=\"details.allowRecording = !details.allowRecording\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.allowRecording ? 'True' : 'False' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Allow streaming</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.allowStreaming\"\n (click)=\"details.allowStreaming = !details.allowStreaming\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.allowStreaming ? 'True' : 'False' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">SIP recorder URI</label>\n <input class=\"tk-meeting-space__input\" name=\"sipRecorderUri\" placeholder=\"sip:recorder@tuki.io\" [(ngModel)]=\"details.sipRecorderUri\">\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">SIP streamer URI</label>\n <input class=\"tk-meeting-space__input\" name=\"sipStreamerUri\" placeholder=\"sip:streamer@tuki.io\" [(ngModel)]=\"details.sipStreamerUri\">\n </div>\n </div>\n </section>\n\n <div class=\"tk-meeting-space__footer\">\n <span class=\"tk-meeting-space__footer-hint\">Changes apply the next time the meeting activates.</span>\n <div class=\"tk-meeting-space__footer-actions\">\n <button type=\"button\" class=\"tk-meeting-space__cancel\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"submit\" class=\"tk-meeting-space__submit\">{{ isEdit ? 'Save' : 'Create' }}</button>\n </div>\n </div>\n</form>\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-meeting-space__breadcrumb{display:flex;align-items:center;gap:.375rem;margin-bottom:1rem;font-size:.8125rem;color:#0009}.tk-meeting-space__breadcrumb-link{color:#0009;text-decoration:none}.tk-meeting-space__breadcrumb-link:hover{color:#000000f2;text-decoration:underline}.tk-meeting-space__breadcrumb-current{color:#000000f2}.tk-meeting-space__header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1.5rem}.tk-meeting-space__icon{display:flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:8px;background:rgba(0,0,0,.04);color:#0009;flex-shrink:0}.tk-meeting-space__heading{display:flex;flex-direction:column;gap:.25rem}.tk-meeting-space__title{margin:0;font-size:1.25rem;font-weight:600}.tk-meeting-space__subtitle,.tk-meeting-space__status{margin:0;font-size:.8125rem;color:#0009}.tk-meeting-space__status{display:inline-flex;align-items:center;gap:.375rem}.tk-meeting-space__status-dot{width:.5rem;height:.5rem;border-radius:50%;background:#1d805f}.tk-meeting-space__status-dot--disabled{background:rgba(0,0,0,.3)}.tk-meeting-space__section{margin-bottom:1.5rem;padding:1.5rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:8px}.tk-meeting-space__section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.tk-meeting-space__section-header-text{display:flex;flex-direction:column;gap:.25rem}.tk-meeting-space__section-header-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.tk-meeting-space__section-title{margin:0;font-size:.9375rem;font-weight:600}.tk-meeting-space__section-subtitle{margin:0;font-size:.8125rem;color:#0009}.tk-meeting-space__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem 1.5rem}.tk-meeting-space__grid--experience,.tk-meeting-space__grid--recording{align-items:start}.tk-meeting-space__field,.tk-meeting-space__toggle-field{display:flex;flex-direction:column;gap:.375rem}.tk-meeting-space__label{font-size:.8125rem;font-weight:500;color:#000000f2}.tk-meeting-space__hint{font-size:.75rem;color:#0009}.tk-meeting-space__input,.tk-meeting-space__select{width:100%;padding:.625rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2}.tk-meeting-space__input::placeholder,.tk-meeting-space__select::placeholder{color:#0006}.tk-meeting-space__input:focus,.tk-meeting-space__select:focus{outline:none;border-color:#0006}.tk-meeting-space__input:disabled,.tk-meeting-space__select:disabled{background:rgba(0,0,0,.02);color:#0009}.tk-meeting-space__select{appearance:none;cursor:pointer}.tk-meeting-space__status-row{display:flex;align-items:center;gap:.75rem;margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid rgba(0,0,0,.12)}.tk-meeting-space__status-row-label{margin:0;font-size:.8125rem;font-weight:500}.tk-meeting-space__toggle{position:relative;width:2rem;height:1.125rem;padding:0;border:none;border-radius:999px;background:rgba(0,0,0,.2);cursor:pointer;flex-shrink:0;transition:background-color .15s ease}.tk-meeting-space__toggle--on{background:#0353a8}.tk-meeting-space__toggle-thumb{position:absolute;top:.1875rem;left:.1875rem;width:.75rem;height:.75rem;border-radius:50%;background:#fff;transition:transform .15s ease}.tk-meeting-space__toggle--on .tk-meeting-space__toggle-thumb{transform:translate(.875rem)}.tk-meeting-space__toggle-row{display:flex;align-items:center;gap:.5rem}.tk-meeting-space__toggle-label{font-size:.8125rem;color:#0009}.tk-meeting-space__roles-toolbar{display:flex;justify-content:flex-end;margin-bottom:.75rem}.tk-meeting-space__add-role{display:inline-flex;align-items:center;gap:.25rem;padding:.375rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;font-weight:500;cursor:pointer}.tk-meeting-space__add-role:hover{background:rgba(0,0,0,.03)}.tk-meeting-space__add-role-icon{font-size:1rem;height:1rem;width:1rem}.tk-meeting-space__role{padding:1.25rem;margin-bottom:1rem;background:rgba(0,0,0,.015);border:1px solid rgba(0,0,0,.12);border-radius:8px}.tk-meeting-space__role:last-child{margin-bottom:0}.tk-meeting-space__role-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.tk-meeting-space__role-name{font-size:.875rem;font-weight:600}.tk-meeting-space__role-primary-badge{padding:.125rem .5rem;border-radius:999px;background:rgba(3,83,168,.1);color:#0353a8;font-size:.6875rem;font-weight:500}.tk-meeting-space__role-remove{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;color:#0009;cursor:pointer}.tk-meeting-space__role-remove:hover{color:#c73636}.tk-meeting-space__checkboxes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1.5rem;margin-top:1rem}.tk-meeting-space__checkbox{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:#000000f2;cursor:pointer}.tk-meeting-space__checkbox input{margin:0}.tk-meeting-space__layouts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;margin:.5rem 0 1.5rem}.tk-meeting-space__layout{padding:.625rem .5rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.75rem;font-weight:500;color:#000000f2;cursor:pointer}.tk-meeting-space__layout:hover{background:rgba(0,0,0,.03)}.tk-meeting-space__layout--selected{border-color:#0353a8;color:#0353a8;background:rgba(3,83,168,.06)}.tk-meeting-space__footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-top:1rem}.tk-meeting-space__footer-hint{font-size:.8125rem;color:#0009}.tk-meeting-space__footer-actions{display:flex;align-items:center;gap:1rem;margin-left:auto}.tk-meeting-space__cancel{background:none;border:none;padding:.5rem 0;font-family:inherit;font-size:.8125rem;font-weight:500;color:#000000f2;cursor:pointer}.tk-meeting-space__submit{padding:.5rem 1.25rem;background:#000;color:#fff;border:none;border-radius:6px;font-family:inherit;font-size:.8125rem;font-weight:500;cursor:pointer}.tk-meeting-space__submit:hover{background:#222}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MeetingSpaceComponent, decorators: [{
|
|
85
|
+
type: Component,
|
|
86
|
+
args: [{ selector: 'tk-meeting-space', template: "<form class=\"tk-meeting-space\" (ngSubmit)=\"onSubmit()\">\n <div class=\"tk-meeting-space__breadcrumb\">\n <a href=\"javascript:void(0)\" class=\"tk-meeting-space__breadcrumb-link\" (click)=\"onCancel()\">Meetings</a>\n <span class=\"tk-meeting-space__breadcrumb-separator\">›</span>\n <span class=\"tk-meeting-space__breadcrumb-current\">{{ isEdit ? details.name : 'New meeting space' }}</span>\n </div>\n\n <div class=\"tk-meeting-space__header\">\n <div class=\"tk-meeting-space__icon\">\n <mat-icon>videocam</mat-icon>\n </div>\n <div class=\"tk-meeting-space__heading\">\n <h1 class=\"tk-meeting-space__title\">{{ isEdit ? details.name : 'New meeting space' }}</h1>\n <p class=\"tk-meeting-space__subtitle\" *ngIf=\"!isEdit\">Configure a reusable meeting environment with join details and access roles.</p>\n <p class=\"tk-meeting-space__status\" *ngIf=\"isEdit\">\n <span class=\"tk-meeting-space__status-dot\" [class.tk-meeting-space__status-dot--disabled]=\"!details.enabled\"></span>\n {{ details.enabled ? 'Enabled' : 'Disabled' }} · {{ details.meetingUri }} · {{ details.meetingId }}\n </p>\n </div>\n </div>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">General information</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Basic details, ownership and where this space runs.</p>\n </div>\n\n <div class=\"tk-meeting-space__grid\">\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Space name *</label>\n <input class=\"tk-meeting-space__input\" name=\"name\" placeholder=\"e.g. Executive Boardroom\" [(ngModel)]=\"details.name\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Owner *</label>\n <input class=\"tk-meeting-space__input\" name=\"owner\" placeholder=\"owner@tuki.io\" [(ngModel)]=\"details.owner\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Description</label>\n <input class=\"tk-meeting-space__input\" name=\"description\" placeholder=\"Weekly executive strategy sync\" [(ngModel)]=\"details.description\">\n <span class=\"tk-meeting-space__hint\">Shown in invitations and the space directory.</span>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Cluster</label>\n <select class=\"tk-meeting-space__select\" name=\"cluster\" [(ngModel)]=\"details.cluster\">\n <option *ngFor=\"let cluster of clusters\" [value]=\"cluster\">{{ cluster }}</option>\n </select>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Space tag</label>\n <input class=\"tk-meeting-space__input\" name=\"tag\" placeholder=\"e.g. Leadership\" [(ngModel)]=\"details.tag\">\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting ID *</label>\n <input class=\"tk-meeting-space__input\" name=\"meetingId\" placeholder=\"e.g. 4427100\" [(ngModel)]=\"details.meetingId\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting URI *</label>\n <input class=\"tk-meeting-space__input\" name=\"meetingUri\" placeholder=\"space@tuki.io\" [(ngModel)]=\"details.meetingUri\" required>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Secondary URI</label>\n <input class=\"tk-meeting-space__input\" name=\"secondaryUri\" placeholder=\"space.alt@tuki.io\" [(ngModel)]=\"details.secondaryUri\">\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting password</label>\n <input class=\"tk-meeting-space__input\" name=\"password\" placeholder=\"Optional\" [(ngModel)]=\"details.password\">\n </div>\n </div>\n\n <div class=\"tk-meeting-space__status-row\">\n <div>\n <p class=\"tk-meeting-space__status-row-label\">Space status</p>\n <p class=\"tk-meeting-space__hint\">Disabled spaces cannot activate meetings but keep their configuration.</p>\n </div>\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.enabled\"\n (click)=\"details.enabled = !details.enabled\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.enabled ? 'Enabled' : 'Disabled' }}</span>\n </div>\n </section>\n\n <section class=\"tk-meeting-space__section\" *ngIf=\"isEdit\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">Join information</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Everything participants need to reach this space.</p>\n </div>\n\n <div class=\"tk-meeting-space__grid\">\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Meeting ID</label>\n <input class=\"tk-meeting-space__input\" [value]=\"details.meetingId\" disabled>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Browser join link</label>\n <input class=\"tk-meeting-space__input\" [value]=\"browserJoinLink\" disabled>\n </div>\n </div>\n </section>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <div class=\"tk-meeting-space__section-header-text\">\n <h2 class=\"tk-meeting-space__section-title\">Access roles and security</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Different ways participants can join, with their own passcode and permissions.</p>\n </div>\n <div class=\"tk-meeting-space__section-header-actions\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.accessRolesEnabled\"\n (click)=\"details.accessRolesEnabled = !details.accessRolesEnabled\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.accessRolesEnabled ? 'Enabled' : 'Disabled' }}</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"details.accessRolesEnabled\">\n <div class=\"tk-meeting-space__roles-toolbar\">\n <button type=\"button\" class=\"tk-meeting-space__add-role\" (click)=\"addAccessRole()\">\n <mat-icon class=\"tk-meeting-space__add-role-icon\">add</mat-icon>\n Add role\n </button>\n </div>\n\n <div class=\"tk-meeting-space__role\" *ngFor=\"let role of details.accessRoles; trackBy: trackByRoleId\">\n <div class=\"tk-meeting-space__role-header\">\n <span class=\"tk-meeting-space__role-name\">{{ role.name }}</span>\n <span class=\"tk-meeting-space__role-primary-badge\" *ngIf=\"role.primary\">Primary</span>\n <button\n type=\"button\"\n class=\"tk-meeting-space__role-remove\"\n *ngIf=\"!role.primary\"\n (click)=\"removeAccessRole(role)\"\n aria-label=\"Remove role\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <div class=\"tk-meeting-space__grid\">\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Visibility</label>\n <select class=\"tk-meeting-space__select\" [name]=\"'visibility-' + role.id\" [(ngModel)]=\"role.visibility\">\n <option value=\"members-only\">Members only</option>\n <option value=\"public\">Public</option>\n <option value=\"private\">Private</option>\n </select>\n </div>\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Passcode</label>\n <input class=\"tk-meeting-space__input\" [name]=\"'passcode-' + role.id\" placeholder=\"\" [(ngModel)]=\"role.passcode\">\n <span class=\"tk-meeting-space__hint\">Numeric, minimum 4 digits (server policy).</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__checkboxes\">\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'activates-' + role.id\" [(ngModel)]=\"role.activatesMeetingOnJoin\">\n Activates the meeting on join\n </label>\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'wait-lobby-' + role.id\" [(ngModel)]=\"role.participantsWaitInLobby\">\n Participants wait in lobby\n </label>\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'unauth-' + role.id\" [(ngModel)]=\"role.allowUnauthenticatedJoin\">\n Allow unauthenticated join\n </label>\n <label class=\"tk-meeting-space__checkbox\">\n <input type=\"checkbox\" [name]=\"'host-controls-' + role.id\" [(ngModel)]=\"role.grantMeetingHostControls\">\n Grant meeting host controls\n </label>\n </div>\n </div>\n </ng-container>\n </section>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">Meeting experience</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Defaults applied when a meeting activates in this space.</p>\n </div>\n\n <p class=\"tk-meeting-space__label\">Default video layout</p>\n <div class=\"tk-meeting-space__layouts\">\n <button\n type=\"button\"\n *ngFor=\"let layout of videoLayouts\"\n class=\"tk-meeting-space__layout\"\n [class.tk-meeting-space__layout--selected]=\"details.defaultVideoLayout === layout.value\"\n (click)=\"details.defaultVideoLayout = layout.value\">\n {{ layout.label }}\n </button>\n </div>\n\n <div class=\"tk-meeting-space__grid tk-meeting-space__grid--experience\">\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Participant labels</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.participantLabels\"\n (click)=\"details.participantLabels = !details.participantLabels\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.participantLabels ? 'On' : 'Off' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Allow presentation</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.allowPresentation\"\n (click)=\"details.allowPresentation = !details.allowPresentation\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.allowPresentation ? 'On' : 'Off' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Disconnect others allowed</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.disconnectOthersAllowed\"\n (click)=\"details.disconnectOthersAllowed = !details.disconnectOthersAllowed\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.disconnectOthersAllowed ? 'True' : 'False' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Video quality</label>\n <select class=\"tk-meeting-space__select\" name=\"videoQuality\" [(ngModel)]=\"details.videoQuality\">\n <option *ngFor=\"let quality of videoQualities\" [value]=\"quality.value\">{{ quality.label }}</option>\n </select>\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">Presentation quality</label>\n <select class=\"tk-meeting-space__select\" name=\"presentationQuality\" [(ngModel)]=\"details.presentationQuality\">\n <option *ngFor=\"let quality of presentationQualities\" [value]=\"quality.value\">{{ quality.label }}</option>\n </select>\n </div>\n </div>\n </section>\n\n <section class=\"tk-meeting-space__section\">\n <div class=\"tk-meeting-space__section-header\">\n <h2 class=\"tk-meeting-space__section-title\">Recording and streaming</h2>\n <p class=\"tk-meeting-space__section-subtitle\">Controls for capturing and broadcasting the meeting.</p>\n </div>\n\n <div class=\"tk-meeting-space__grid tk-meeting-space__grid--recording\">\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Allow recording</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.allowRecording\"\n (click)=\"details.allowRecording = !details.allowRecording\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.allowRecording ? 'True' : 'False' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__toggle-field\">\n <label class=\"tk-meeting-space__label\">Allow streaming</label>\n <div class=\"tk-meeting-space__toggle-row\">\n <button\n type=\"button\"\n class=\"tk-meeting-space__toggle\"\n [class.tk-meeting-space__toggle--on]=\"details.allowStreaming\"\n (click)=\"details.allowStreaming = !details.allowStreaming\">\n <span class=\"tk-meeting-space__toggle-thumb\"></span>\n </button>\n <span class=\"tk-meeting-space__toggle-label\">{{ details.allowStreaming ? 'True' : 'False' }}</span>\n </div>\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">SIP recorder URI</label>\n <input class=\"tk-meeting-space__input\" name=\"sipRecorderUri\" placeholder=\"sip:recorder@tuki.io\" [(ngModel)]=\"details.sipRecorderUri\">\n </div>\n\n <div class=\"tk-meeting-space__field\">\n <label class=\"tk-meeting-space__label\">SIP streamer URI</label>\n <input class=\"tk-meeting-space__input\" name=\"sipStreamerUri\" placeholder=\"sip:streamer@tuki.io\" [(ngModel)]=\"details.sipStreamerUri\">\n </div>\n </div>\n </section>\n\n <div class=\"tk-meeting-space__footer\">\n <span class=\"tk-meeting-space__footer-hint\">Changes apply the next time the meeting activates.</span>\n <div class=\"tk-meeting-space__footer-actions\">\n <button type=\"button\" class=\"tk-meeting-space__cancel\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"submit\" class=\"tk-meeting-space__submit\">{{ isEdit ? 'Save' : 'Create' }}</button>\n </div>\n </div>\n</form>\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-meeting-space__breadcrumb{display:flex;align-items:center;gap:.375rem;margin-bottom:1rem;font-size:.8125rem;color:#0009}.tk-meeting-space__breadcrumb-link{color:#0009;text-decoration:none}.tk-meeting-space__breadcrumb-link:hover{color:#000000f2;text-decoration:underline}.tk-meeting-space__breadcrumb-current{color:#000000f2}.tk-meeting-space__header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1.5rem}.tk-meeting-space__icon{display:flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:8px;background:rgba(0,0,0,.04);color:#0009;flex-shrink:0}.tk-meeting-space__heading{display:flex;flex-direction:column;gap:.25rem}.tk-meeting-space__title{margin:0;font-size:1.25rem;font-weight:600}.tk-meeting-space__subtitle,.tk-meeting-space__status{margin:0;font-size:.8125rem;color:#0009}.tk-meeting-space__status{display:inline-flex;align-items:center;gap:.375rem}.tk-meeting-space__status-dot{width:.5rem;height:.5rem;border-radius:50%;background:#1d805f}.tk-meeting-space__status-dot--disabled{background:rgba(0,0,0,.3)}.tk-meeting-space__section{margin-bottom:1.5rem;padding:1.5rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:8px}.tk-meeting-space__section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.tk-meeting-space__section-header-text{display:flex;flex-direction:column;gap:.25rem}.tk-meeting-space__section-header-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.tk-meeting-space__section-title{margin:0;font-size:.9375rem;font-weight:600}.tk-meeting-space__section-subtitle{margin:0;font-size:.8125rem;color:#0009}.tk-meeting-space__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem 1.5rem}.tk-meeting-space__grid--experience,.tk-meeting-space__grid--recording{align-items:start}.tk-meeting-space__field,.tk-meeting-space__toggle-field{display:flex;flex-direction:column;gap:.375rem}.tk-meeting-space__label{font-size:.8125rem;font-weight:500;color:#000000f2}.tk-meeting-space__hint{font-size:.75rem;color:#0009}.tk-meeting-space__input,.tk-meeting-space__select{width:100%;padding:.625rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2}.tk-meeting-space__input::placeholder,.tk-meeting-space__select::placeholder{color:#0006}.tk-meeting-space__input:focus,.tk-meeting-space__select:focus{outline:none;border-color:#0006}.tk-meeting-space__input:disabled,.tk-meeting-space__select:disabled{background:rgba(0,0,0,.02);color:#0009}.tk-meeting-space__select{appearance:none;cursor:pointer}.tk-meeting-space__status-row{display:flex;align-items:center;gap:.75rem;margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid rgba(0,0,0,.12)}.tk-meeting-space__status-row-label{margin:0;font-size:.8125rem;font-weight:500}.tk-meeting-space__toggle{position:relative;width:2rem;height:1.125rem;padding:0;border:none;border-radius:999px;background:rgba(0,0,0,.2);cursor:pointer;flex-shrink:0;transition:background-color .15s ease}.tk-meeting-space__toggle--on{background:#0353a8}.tk-meeting-space__toggle-thumb{position:absolute;top:.1875rem;left:.1875rem;width:.75rem;height:.75rem;border-radius:50%;background:#fff;transition:transform .15s ease}.tk-meeting-space__toggle--on .tk-meeting-space__toggle-thumb{transform:translate(.875rem)}.tk-meeting-space__toggle-row{display:flex;align-items:center;gap:.5rem}.tk-meeting-space__toggle-label{font-size:.8125rem;color:#0009}.tk-meeting-space__roles-toolbar{display:flex;justify-content:flex-end;margin-bottom:.75rem}.tk-meeting-space__add-role{display:inline-flex;align-items:center;gap:.25rem;padding:.375rem .75rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.8125rem;font-weight:500;cursor:pointer}.tk-meeting-space__add-role:hover{background:rgba(0,0,0,.03)}.tk-meeting-space__add-role-icon{font-size:1rem;height:1rem;width:1rem}.tk-meeting-space__role{padding:1.25rem;margin-bottom:1rem;background:rgba(0,0,0,.015);border:1px solid rgba(0,0,0,.12);border-radius:8px}.tk-meeting-space__role:last-child{margin-bottom:0}.tk-meeting-space__role-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.tk-meeting-space__role-name{font-size:.875rem;font-weight:600}.tk-meeting-space__role-primary-badge{padding:.125rem .5rem;border-radius:999px;background:rgba(3,83,168,.1);color:#0353a8;font-size:.6875rem;font-weight:500}.tk-meeting-space__role-remove{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;color:#0009;cursor:pointer}.tk-meeting-space__role-remove:hover{color:#c73636}.tk-meeting-space__checkboxes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1.5rem;margin-top:1rem}.tk-meeting-space__checkbox{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:#000000f2;cursor:pointer}.tk-meeting-space__checkbox input{margin:0}.tk-meeting-space__layouts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;margin:.5rem 0 1.5rem}.tk-meeting-space__layout{padding:.625rem .5rem;background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:6px;font-family:inherit;font-size:.75rem;font-weight:500;color:#000000f2;cursor:pointer}.tk-meeting-space__layout:hover{background:rgba(0,0,0,.03)}.tk-meeting-space__layout--selected{border-color:#0353a8;color:#0353a8;background:rgba(3,83,168,.06)}.tk-meeting-space__footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-top:1rem}.tk-meeting-space__footer-hint{font-size:.8125rem;color:#0009}.tk-meeting-space__footer-actions{display:flex;align-items:center;gap:1rem;margin-left:auto}.tk-meeting-space__cancel{background:none;border:none;padding:.5rem 0;font-family:inherit;font-size:.8125rem;font-weight:500;color:#000000f2;cursor:pointer}.tk-meeting-space__submit{padding:.5rem 1.25rem;background:#000;color:#fff;border:none;border-radius:6px;font-family:inherit;font-size:.8125rem;font-weight:500;cursor:pointer}.tk-meeting-space__submit:hover{background:#222}\n"] }]
|
|
87
|
+
}], ctorParameters: function () { return [{ type: i1.MeetingSpacesService }]; }, propDecorators: { mode: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], meetingSpaceId: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], back: [{
|
|
92
|
+
type: Output
|
|
93
|
+
}], saved: [{
|
|
94
|
+
type: Output
|
|
95
|
+
}] } });
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVldGluZy1zcGFjZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvbWVldGluZ3Mvc3JjL2NvbXBvbmVudHMvbWVldGluZy1zcGFjZXMvbWVldGluZy1zcGFjZS9tZWV0aW5nLXNwYWNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9tZWV0aW5ncy9zcmMvY29tcG9uZW50cy9tZWV0aW5nLXNwYWNlcy9tZWV0aW5nLXNwYWNlL21lZXRpbmctc3BhY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQXdCLE1BQU0sMENBQTBDLENBQUM7Ozs7OztBQXFCbEgsTUFBTSxPQUFPLHFCQUFxQjtJQWdDaEMsWUFBb0Isb0JBQTBDO1FBQTFDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUEvQnJELFNBQUksR0FBeUIsUUFBUSxDQUFDO1FBQ3RDLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNwQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNoQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFFMUQsWUFBTyxHQUF3QixnQ0FBZ0MsRUFBRSxDQUFDO1FBRXpELGFBQVEsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFdEQsaUJBQVksR0FBc0M7WUFDekQsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDMUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDaEQsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDaEQsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7WUFDbEQsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1lBQ3BELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQ2xELEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1NBQ2pDLENBQUM7UUFFTyxtQkFBYyxHQUF1QztZQUM1RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUN4QyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUN4QyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtTQUMzQyxDQUFDO1FBRU8sMEJBQXFCLEdBQThDO1lBQzFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1NBQzNDLENBQUM7SUFFZ0UsQ0FBQztJQUVuRSxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLHNCQUFzQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRztZQUN6QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztZQUMzQjtnQkFDRSxFQUFFLEVBQUUsUUFBUSxLQUFLLEVBQUU7Z0JBQ25CLElBQUksRUFBRSxRQUFRLEtBQUssRUFBRTtnQkFDckIsVUFBVSxFQUFFLGNBQWM7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLHNCQUFzQixFQUFFLEtBQUs7Z0JBQzdCLHdCQUF3QixFQUFFLEtBQUs7Z0JBQy9CLHVCQUF1QixFQUFFLEtBQUs7Z0JBQzlCLHdCQUF3QixFQUFFLEtBQUs7YUFDaEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQTRCO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWMsRUFBRSxJQUE0QjtRQUN4RCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYztZQUNoRCxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpELE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O21IQXJGVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiwrSkN0QmxDLDJ4ZkF5VEE7NEZEblNhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxrQkFBa0I7MkdBS25CLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVEZWZhdWx0TWVldGluZ1NwYWNlRGV0YWlscywgTWVldGluZ1NwYWNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tZWV0aW5nLXNwYWNlcy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1lZXRpbmdTcGFjZUFjY2Vzc1JvbGUsXG4gIE1lZXRpbmdTcGFjZURldGFpbHMsXG4gIE1lZXRpbmdTcGFjZVByZXNlbnRhdGlvblF1YWxpdHksXG4gIE1lZXRpbmdTcGFjZVZpZGVvTGF5b3V0LFxuICBNZWV0aW5nU3BhY2VWaWRlb1F1YWxpdHksXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzL21lZXRpbmctc3BhY2UnO1xuXG5leHBvcnQgdHlwZSBNZWV0aW5nU3BhY2VGb3JtTW9kZSA9ICdjcmVhdGUnIHwgJ2VkaXQnO1xuXG5pbnRlcmZhY2UgT3B0aW9uPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RrLW1lZXRpbmctc3BhY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVldGluZy1zcGFjZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lZXRpbmctc3BhY2UuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVldGluZ1NwYWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZTogTWVldGluZ1NwYWNlRm9ybU1vZGUgPSAnY3JlYXRlJztcbiAgQElucHV0KCkgbWVldGluZ1NwYWNlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBAT3V0cHV0KCkgYmFjayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxNZWV0aW5nU3BhY2VEZXRhaWxzPigpO1xuXG4gIGRldGFpbHM6IE1lZXRpbmdTcGFjZURldGFpbHMgPSBjcmVhdGVEZWZhdWx0TWVldGluZ1NwYWNlRGV0YWlscygpO1xuXG4gIHJlYWRvbmx5IGNsdXN0ZXJzID0gWyd1cy1lYXN0LTEnLCAnZXUtd2VzdC0xJywgJ2FwYWMtc291dGgtMSddO1xuXG4gIHJlYWRvbmx5IHZpZGVvTGF5b3V0czogT3B0aW9uPE1lZXRpbmdTcGFjZVZpZGVvTGF5b3V0PltdID0gW1xuICAgIHsgdmFsdWU6ICdhbGwtZXF1YWwnLCBsYWJlbDogJ0FsbCBlcXVhbCcgfSxcbiAgICB7IHZhbHVlOiAnc3BlYWtlci1vbmx5JywgbGFiZWw6ICdTcGVha2VyIG9ubHknIH0sXG4gICAgeyB2YWx1ZTogJ3RlbGVwcmVzZW5jZScsIGxhYmVsOiAnVGVsZXByZXNlbmNlJyB9LFxuICAgIHsgdmFsdWU6ICdzdGFja2VkJywgbGFiZWw6ICdTdGFja2VkJyB9LFxuICAgIHsgdmFsdWU6ICdvbmUtcGx1cy1maXZlJywgbGFiZWw6ICdPbmUgcGx1cyBmaXZlJyB9LFxuICAgIHsgdmFsdWU6ICdvbmUtcGx1cy1zZXZlbicsIGxhYmVsOiAnT25lIHBsdXMgc2V2ZW4nIH0sXG4gICAgeyB2YWx1ZTogJ29uZS1wbHVzLW5pbmUnLCBsYWJlbDogJ09uZSBwbHVzIG5pbmUnIH0sXG4gICAgeyB2YWx1ZTogJ21vcmUnLCBsYWJlbDogJ01vcmUnIH0sXG4gIF07XG5cbiAgcmVhZG9ubHkgdmlkZW9RdWFsaXRpZXM6IE9wdGlvbjxNZWV0aW5nU3BhY2VWaWRlb1F1YWxpdHk+W10gPSBbXG4gICAgeyB2YWx1ZTogJzQ4MHAzMCcsIGxhYmVsOiAnNDgwcCAzMGZwcycgfSxcbiAgICB7IHZhbHVlOiAnNzIwcDMwJywgbGFiZWw6ICc3MjBwIDMwZnBzJyB9LFxuICAgIHsgdmFsdWU6ICcxMDgwcDMwJywgbGFiZWw6ICcxMDgwcCAzMGZwcycgfSxcbiAgXTtcblxuICByZWFkb25seSBwcmVzZW50YXRpb25RdWFsaXRpZXM6IE9wdGlvbjxNZWV0aW5nU3BhY2VQcmVzZW50YXRpb25RdWFsaXR5PltdID0gW1xuICAgIHsgdmFsdWU6ICc3MjBwNScsIGxhYmVsOiAnNzIwcCA1ZnBzJyB9LFxuICAgIHsgdmFsdWU6ICcxMDgwcDMwJywgbGFiZWw6ICcxMDgwcCAzMGZwcycgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1lZXRpbmdTcGFjZXNTZXJ2aWNlOiBNZWV0aW5nU3BhY2VzU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFZGl0ICYmIHRoaXMubWVldGluZ1NwYWNlSWQpIHtcbiAgICAgIHRoaXMubWVldGluZ1NwYWNlc1NlcnZpY2UuZ2V0T25lKHRoaXMubWVldGluZ1NwYWNlSWQpLnN1YnNjcmliZShkZXRhaWxzID0+IHtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0VkaXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnO1xuICB9XG5cbiAgZ2V0IGJyb3dzZXJKb2luTGluaygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3RoaXMuZGV0YWlscy5jbHVzdGVyfS1jbXMvZW4tdXMvbWVldGluZy8ke3RoaXMuZGV0YWlscy5tZWV0aW5nSWR9YDtcbiAgfVxuXG4gIGFkZEFjY2Vzc1JvbGUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRldGFpbHMuYWNjZXNzUm9sZXMubGVuZ3RoICsgMTtcbiAgICB0aGlzLmRldGFpbHMuYWNjZXNzUm9sZXMgPSBbXG4gICAgICAuLi50aGlzLmRldGFpbHMuYWNjZXNzUm9sZXMsXG4gICAgICB7XG4gICAgICAgIGlkOiBgcm9sZS0ke2luZGV4fWAsXG4gICAgICAgIG5hbWU6IGBSb2xlICR7aW5kZXh9YCxcbiAgICAgICAgdmlzaWJpbGl0eTogJ21lbWJlcnMtb25seScsXG4gICAgICAgIHBhc3Njb2RlOiAnJyxcbiAgICAgICAgYWN0aXZhdGVzTWVldGluZ09uSm9pbjogZmFsc2UsXG4gICAgICAgIGFsbG93VW5hdXRoZW50aWNhdGVkSm9pbjogZmFsc2UsXG4gICAgICAgIHBhcnRpY2lwYW50c1dhaXRJbkxvYmJ5OiBmYWxzZSxcbiAgICAgICAgZ3JhbnRNZWV0aW5nSG9zdENvbnRyb2xzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHJlbW92ZUFjY2Vzc1JvbGUocm9sZTogTWVldGluZ1NwYWNlQWNjZXNzUm9sZSk6IHZvaWQge1xuICAgIHRoaXMuZGV0YWlscy5hY2Nlc3NSb2xlcyA9IHRoaXMuZGV0YWlscy5hY2Nlc3NSb2xlcy5maWx0ZXIociA9PiByICE9PSByb2xlKTtcbiAgfVxuXG4gIHRyYWNrQnlSb2xlSWQoX2luZGV4OiBudW1iZXIsIHJvbGU6IE1lZXRpbmdTcGFjZUFjY2Vzc1JvbGUpOiBzdHJpbmcge1xuICAgIHJldHVybiByb2xlLmlkO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrLmVtaXQoKTtcbiAgfVxuXG4gIG9uU3VibWl0KCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmlzRWRpdCAmJiB0aGlzLm1lZXRpbmdTcGFjZUlkXG4gICAgICA/IHRoaXMubWVldGluZ1NwYWNlc1NlcnZpY2UucHV0KHRoaXMubWVldGluZ1NwYWNlSWQsIHRoaXMuZGV0YWlscylcbiAgICAgIDogdGhpcy5tZWV0aW5nU3BhY2VzU2VydmljZS5zYXZlKHRoaXMuZGV0YWlscyk7XG5cbiAgICByZXF1ZXN0LnN1YnNjcmliZShzYXZlZCA9PiB0aGlzLnNhdmVkLmVtaXQoc2F2ZWQpKTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2JyZWFkY3J1bWJcIj5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19icmVhZGNydW1iLWxpbmtcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPk1lZXRpbmdzPC9hPlxuICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fYnJlYWRjcnVtYi1zZXBhcmF0b3JcIj4mcnNhcXVvOzwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2JyZWFkY3J1bWItY3VycmVudFwiPnt7IGlzRWRpdCA/IGRldGFpbHMubmFtZSA6ICdOZXcgbWVldGluZyBzcGFjZScgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faWNvblwiPlxuICAgICAgPG1hdC1pY29uPnZpZGVvY2FtPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faGVhZGluZ1wiPlxuICAgICAgPGgxIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdGl0bGVcIj57eyBpc0VkaXQgPyBkZXRhaWxzLm5hbWUgOiAnTmV3IG1lZXRpbmcgc3BhY2UnIH19PC9oMT5cbiAgICAgIDxwIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc3VidGl0bGVcIiAqbmdJZj1cIiFpc0VkaXRcIj5Db25maWd1cmUgYSByZXVzYWJsZSBtZWV0aW5nIGVudmlyb25tZW50IHdpdGggam9pbiBkZXRhaWxzIGFuZCBhY2Nlc3Mgcm9sZXMuPC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zdGF0dXNcIiAqbmdJZj1cImlzRWRpdFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3N0YXR1cy1kb3RcIiBbY2xhc3MudGstbWVldGluZy1zcGFjZV9fc3RhdHVzLWRvdC0tZGlzYWJsZWRdPVwiIWRldGFpbHMuZW5hYmxlZFwiPjwvc3Bhbj5cbiAgICAgICAge3sgZGV0YWlscy5lbmFibGVkID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJyB9fSAmbWlkZG90OyB7eyBkZXRhaWxzLm1lZXRpbmdVcmkgfX0gJm1pZGRvdDsge3sgZGV0YWlscy5tZWV0aW5nSWQgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8aDIgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLXRpdGxlXCI+R2VuZXJhbCBpbmZvcm1hdGlvbjwvaDI+XG4gICAgICA8cCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb24tc3VidGl0bGVcIj5CYXNpYyBkZXRhaWxzLCBvd25lcnNoaXAgYW5kIHdoZXJlIHRoaXMgc3BhY2UgcnVucy48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZ3JpZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+U3BhY2UgbmFtZSAqPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faW5wdXRcIiBuYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiZS5nLiBFeGVjdXRpdmUgQm9hcmRyb29tXCIgWyhuZ01vZGVsKV09XCJkZXRhaWxzLm5hbWVcIiByZXF1aXJlZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+T3duZXIgKjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2lucHV0XCIgbmFtZT1cIm93bmVyXCIgcGxhY2Vob2xkZXI9XCJvd25lckB0dWtpLmlvXCIgWyhuZ01vZGVsKV09XCJkZXRhaWxzLm93bmVyXCIgcmVxdWlyZWQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faW5wdXRcIiBuYW1lPVwiZGVzY3JpcHRpb25cIiBwbGFjZWhvbGRlcj1cIldlZWtseSBleGVjdXRpdmUgc3RyYXRlZ3kgc3luY1wiIFsobmdNb2RlbCldPVwiZGV0YWlscy5kZXNjcmlwdGlvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2hpbnRcIj5TaG93biBpbiBpbnZpdGF0aW9ucyBhbmQgdGhlIHNwYWNlIGRpcmVjdG9yeS48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPkNsdXN0ZXI8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc2VsZWN0XCIgbmFtZT1cImNsdXN0ZXJcIiBbKG5nTW9kZWwpXT1cImRldGFpbHMuY2x1c3RlclwiPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNsdXN0ZXIgb2YgY2x1c3RlcnNcIiBbdmFsdWVdPVwiY2x1c3RlclwiPnt7IGNsdXN0ZXIgfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPlNwYWNlIHRhZzwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2lucHV0XCIgbmFtZT1cInRhZ1wiIHBsYWNlaG9sZGVyPVwiZS5nLiBMZWFkZXJzaGlwXCIgWyhuZ01vZGVsKV09XCJkZXRhaWxzLnRhZ1wiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fbGFiZWxcIj5NZWV0aW5nIElEICo8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19pbnB1dFwiIG5hbWU9XCJtZWV0aW5nSWRcIiBwbGFjZWhvbGRlcj1cImUuZy4gNDQyNzEwMFwiIFsobmdNb2RlbCldPVwiZGV0YWlscy5tZWV0aW5nSWRcIiByZXF1aXJlZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+TWVldGluZyBVUkkgKjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2lucHV0XCIgbmFtZT1cIm1lZXRpbmdVcmlcIiBwbGFjZWhvbGRlcj1cInNwYWNlQHR1a2kuaW9cIiBbKG5nTW9kZWwpXT1cImRldGFpbHMubWVldGluZ1VyaVwiIHJlcXVpcmVkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fbGFiZWxcIj5TZWNvbmRhcnkgVVJJPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faW5wdXRcIiBuYW1lPVwic2Vjb25kYXJ5VXJpXCIgcGxhY2Vob2xkZXI9XCJzcGFjZS5hbHRAdHVraS5pb1wiIFsobmdNb2RlbCldPVwiZGV0YWlscy5zZWNvbmRhcnlVcmlcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+TWVldGluZyBwYXNzd29yZDwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2lucHV0XCIgbmFtZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiIFsobmdNb2RlbCldPVwiZGV0YWlscy5wYXNzd29yZFwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc3RhdHVzLXJvd1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zdGF0dXMtcm93LWxhYmVsXCI+U3BhY2Ugc3RhdHVzPC9wPlxuICAgICAgICA8cCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2hpbnRcIj5EaXNhYmxlZCBzcGFjZXMgY2Fubm90IGFjdGl2YXRlIG1lZXRpbmdzIGJ1dCBrZWVwIHRoZWlyIGNvbmZpZ3VyYXRpb24uPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZVwiXG4gICAgICAgIFtjbGFzcy50ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtLW9uXT1cImRldGFpbHMuZW5hYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJkZXRhaWxzLmVuYWJsZWQgPSAhZGV0YWlscy5lbmFibGVkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLXRodW1iXCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS1sYWJlbFwiPnt7IGRldGFpbHMuZW5hYmxlZCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCcgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cblxuICA8c2VjdGlvbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb25cIiAqbmdJZj1cImlzRWRpdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgPGgyIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc2VjdGlvbi10aXRsZVwiPkpvaW4gaW5mb3JtYXRpb248L2gyPlxuICAgICAgPHAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLXN1YnRpdGxlXCI+RXZlcnl0aGluZyBwYXJ0aWNpcGFudHMgbmVlZCB0byByZWFjaCB0aGlzIHNwYWNlLjwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19ncmlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fbGFiZWxcIj5NZWV0aW5nIElEPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faW5wdXRcIiBbdmFsdWVdPVwiZGV0YWlscy5tZWV0aW5nSWRcIiBkaXNhYmxlZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+QnJvd3NlciBqb2luIGxpbms8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19pbnB1dFwiIFt2YWx1ZV09XCJicm93c2VySm9pbkxpbmtcIiBkaXNhYmxlZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc2VjdGlvbi1oZWFkZXItdGV4dFwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLXRpdGxlXCI+QWNjZXNzIHJvbGVzIGFuZCBzZWN1cml0eTwvaDI+XG4gICAgICAgIDxwIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc2VjdGlvbi1zdWJ0aXRsZVwiPkRpZmZlcmVudCB3YXlzIHBhcnRpY2lwYW50cyBjYW4gam9pbiwgd2l0aCB0aGVpciBvd24gcGFzc2NvZGUgYW5kIHBlcm1pc3Npb25zLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb24taGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlXCJcbiAgICAgICAgICBbY2xhc3MudGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLS1vbl09XCJkZXRhaWxzLmFjY2Vzc1JvbGVzRW5hYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImRldGFpbHMuYWNjZXNzUm9sZXNFbmFibGVkID0gIWRldGFpbHMuYWNjZXNzUm9sZXNFbmFibGVkXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtdGh1bWJcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS1sYWJlbFwiPnt7IGRldGFpbHMuYWNjZXNzUm9sZXNFbmFibGVkID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldGFpbHMuYWNjZXNzUm9sZXNFbmFibGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fcm9sZXMtdG9vbGJhclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2FkZC1yb2xlXCIgKGNsaWNrKT1cImFkZEFjY2Vzc1JvbGUoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2FkZC1yb2xlLWljb25cIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgIEFkZCByb2xlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19yb2xlXCIgKm5nRm9yPVwibGV0IHJvbGUgb2YgZGV0YWlscy5hY2Nlc3NSb2xlczsgdHJhY2tCeTogdHJhY2tCeVJvbGVJZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fcm9sZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3JvbGUtbmFtZVwiPnt7IHJvbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3JvbGUtcHJpbWFyeS1iYWRnZVwiICpuZ0lmPVwicm9sZS5wcmltYXJ5XCI+UHJpbWFyeTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fcm9sZS1yZW1vdmVcIlxuICAgICAgICAgICAgKm5nSWY9XCIhcm9sZS5wcmltYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVBY2Nlc3NSb2xlKHJvbGUpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW1vdmUgcm9sZVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19ncmlkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPlZpc2liaWxpdHk8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlbGVjdFwiIFtuYW1lXT1cIid2aXNpYmlsaXR5LScgKyByb2xlLmlkXCIgWyhuZ01vZGVsKV09XCJyb2xlLnZpc2liaWxpdHlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1lbWJlcnMtb25seVwiPk1lbWJlcnMgb25seTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHVibGljXCI+UHVibGljPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcml2YXRlXCI+UHJpdmF0ZTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPlBhc3Njb2RlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2lucHV0XCIgW25hbWVdPVwiJ3Bhc3Njb2RlLScgKyByb2xlLmlkXCIgcGxhY2Vob2xkZXI9XCJcIiBbKG5nTW9kZWwpXT1cInJvbGUucGFzc2NvZGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faGludFwiPk51bWVyaWMsIG1pbmltdW0gNCBkaWdpdHMgKHNlcnZlciBwb2xpY3kpLjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2NoZWNrYm94ZXNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19jaGVja2JveFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtuYW1lXT1cIidhY3RpdmF0ZXMtJyArIHJvbGUuaWRcIiBbKG5nTW9kZWwpXT1cInJvbGUuYWN0aXZhdGVzTWVldGluZ09uSm9pblwiPlxuICAgICAgICAgICAgQWN0aXZhdGVzIHRoZSBtZWV0aW5nIG9uIGpvaW5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2NoZWNrYm94XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW25hbWVdPVwiJ3dhaXQtbG9iYnktJyArIHJvbGUuaWRcIiBbKG5nTW9kZWwpXT1cInJvbGUucGFydGljaXBhbnRzV2FpdEluTG9iYnlcIj5cbiAgICAgICAgICAgIFBhcnRpY2lwYW50cyB3YWl0IGluIGxvYmJ5XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19jaGVja2JveFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtuYW1lXT1cIid1bmF1dGgtJyArIHJvbGUuaWRcIiBbKG5nTW9kZWwpXT1cInJvbGUuYWxsb3dVbmF1dGhlbnRpY2F0ZWRKb2luXCI+XG4gICAgICAgICAgICBBbGxvdyB1bmF1dGhlbnRpY2F0ZWQgam9pblxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbbmFtZV09XCInaG9zdC1jb250cm9scy0nICsgcm9sZS5pZFwiIFsobmdNb2RlbCldPVwicm9sZS5ncmFudE1lZXRpbmdIb3N0Q29udHJvbHNcIj5cbiAgICAgICAgICAgIEdyYW50IG1lZXRpbmcgaG9zdCBjb250cm9sc1xuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc2VjdGlvbj5cblxuICA8c2VjdGlvbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgIDxoMiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb24tdGl0bGVcIj5NZWV0aW5nIGV4cGVyaWVuY2U8L2gyPlxuICAgICAgPHAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLXN1YnRpdGxlXCI+RGVmYXVsdHMgYXBwbGllZCB3aGVuIGEgbWVldGluZyBhY3RpdmF0ZXMgaW4gdGhpcyBzcGFjZS48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8cCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+RGVmYXVsdCB2aWRlbyBsYXlvdXQ8L3A+XG4gICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xheW91dHNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBsYXlvdXQgb2YgdmlkZW9MYXlvdXRzXCJcbiAgICAgICAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYXlvdXRcIlxuICAgICAgICBbY2xhc3MudGstbWVldGluZy1zcGFjZV9fbGF5b3V0LS1zZWxlY3RlZF09XCJkZXRhaWxzLmRlZmF1bHRWaWRlb0xheW91dCA9PT0gbGF5b3V0LnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImRldGFpbHMuZGVmYXVsdFZpZGVvTGF5b3V0ID0gbGF5b3V0LnZhbHVlXCI+XG4gICAgICAgIHt7IGxheW91dC5sYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZ3JpZCB0ay1tZWV0aW5nLXNwYWNlX19ncmlkLS1leHBlcmllbmNlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+UGFydGljaXBhbnQgbGFiZWxzPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS1yb3dcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlXCJcbiAgICAgICAgICAgIFtjbGFzcy50ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtLW9uXT1cImRldGFpbHMucGFydGljaXBhbnRMYWJlbHNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRldGFpbHMucGFydGljaXBhbnRMYWJlbHMgPSAhZGV0YWlscy5wYXJ0aWNpcGFudExhYmVsc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtdGh1bWJcIj48L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtbGFiZWxcIj57eyBkZXRhaWxzLnBhcnRpY2lwYW50TGFiZWxzID8gJ09uJyA6ICdPZmYnIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+QWxsb3cgcHJlc2VudGF0aW9uPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS1yb3dcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlXCJcbiAgICAgICAgICAgIFtjbGFzcy50ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtLW9uXT1cImRldGFpbHMuYWxsb3dQcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRldGFpbHMuYWxsb3dQcmVzZW50YXRpb24gPSAhZGV0YWlscy5hbGxvd1ByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtdGh1bWJcIj48L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtbGFiZWxcIj57eyBkZXRhaWxzLmFsbG93UHJlc2VudGF0aW9uID8gJ09uJyA6ICdPZmYnIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+RGlzY29ubmVjdCBvdGhlcnMgYWxsb3dlZDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtcm93XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZVwiXG4gICAgICAgICAgICBbY2xhc3MudGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLS1vbl09XCJkZXRhaWxzLmRpc2Nvbm5lY3RPdGhlcnNBbGxvd2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZXRhaWxzLmRpc2Nvbm5lY3RPdGhlcnNBbGxvd2VkID0gIWRldGFpbHMuZGlzY29ubmVjdE90aGVyc0FsbG93ZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLXRodW1iXCI+PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLWxhYmVsXCI+e3sgZGV0YWlscy5kaXNjb25uZWN0T3RoZXJzQWxsb3dlZCA/ICdUcnVlJyA6ICdGYWxzZScgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPlZpZGVvIHF1YWxpdHk8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fc2VsZWN0XCIgbmFtZT1cInZpZGVvUXVhbGl0eVwiIFsobmdNb2RlbCldPVwiZGV0YWlscy52aWRlb1F1YWxpdHlcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBxdWFsaXR5IG9mIHZpZGVvUXVhbGl0aWVzXCIgW3ZhbHVlXT1cInF1YWxpdHkudmFsdWVcIj57eyBxdWFsaXR5LmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPlByZXNlbnRhdGlvbiBxdWFsaXR5PC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlbGVjdFwiIG5hbWU9XCJwcmVzZW50YXRpb25RdWFsaXR5XCIgWyhuZ01vZGVsKV09XCJkZXRhaWxzLnByZXNlbnRhdGlvblF1YWxpdHlcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBxdWFsaXR5IG9mIHByZXNlbnRhdGlvblF1YWxpdGllc1wiIFt2YWx1ZV09XCJxdWFsaXR5LnZhbHVlXCI+e3sgcXVhbGl0eS5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3NlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8aDIgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLXRpdGxlXCI+UmVjb3JkaW5nIGFuZCBzdHJlYW1pbmc8L2gyPlxuICAgICAgPHAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zZWN0aW9uLXN1YnRpdGxlXCI+Q29udHJvbHMgZm9yIGNhcHR1cmluZyBhbmQgYnJvYWRjYXN0aW5nIHRoZSBtZWV0aW5nLjwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19ncmlkIHRrLW1lZXRpbmctc3BhY2VfX2dyaWQtLXJlY29yZGluZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19sYWJlbFwiPkFsbG93IHJlY29yZGluZzwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtcm93XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZVwiXG4gICAgICAgICAgICBbY2xhc3MudGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLS1vbl09XCJkZXRhaWxzLmFsbG93UmVjb3JkaW5nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZXRhaWxzLmFsbG93UmVjb3JkaW5nID0gIWRldGFpbHMuYWxsb3dSZWNvcmRpbmdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLXRodW1iXCI+PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLWxhYmVsXCI+e3sgZGV0YWlscy5hbGxvd1JlY29yZGluZyA/ICdUcnVlJyA6ICdGYWxzZScgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGUtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fbGFiZWxcIj5BbGxvdyBzdHJlYW1pbmc8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fdG9nZ2xlLXJvd1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX190b2dnbGVcIlxuICAgICAgICAgICAgW2NsYXNzLnRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS0tb25dPVwiZGV0YWlscy5hbGxvd1N0cmVhbWluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGV0YWlscy5hbGxvd1N0cmVhbWluZyA9ICFkZXRhaWxzLmFsbG93U3RyZWFtaW5nXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS10aHVtYlwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX3RvZ2dsZS1sYWJlbFwiPnt7IGRldGFpbHMuYWxsb3dTdHJlYW1pbmcgPyAnVHJ1ZScgOiAnRmFsc2UnIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fbGFiZWxcIj5TSVAgcmVjb3JkZXIgVVJJPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9faW5wdXRcIiBuYW1lPVwic2lwUmVjb3JkZXJVcmlcIiBwbGFjZWhvbGRlcj1cInNpcDpyZWNvcmRlckB0dWtpLmlvXCIgWyhuZ01vZGVsKV09XCJkZXRhaWxzLnNpcFJlY29yZGVyVXJpXCI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2ZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2xhYmVsXCI+U0lQIHN0cmVhbWVyIFVSSTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRrLW1lZXRpbmctc3BhY2VfX2lucHV0XCIgbmFtZT1cInNpcFN0cmVhbWVyVXJpXCIgcGxhY2Vob2xkZXI9XCJzaXA6c3RyZWFtZXJAdHVraS5pb1wiIFsobmdNb2RlbCldPVwiZGV0YWlscy5zaXBTdHJlYW1lclVyaVwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cblxuICA8ZGl2IGNsYXNzPVwidGstbWVldGluZy1zcGFjZV9fZm9vdGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19mb290ZXItaGludFwiPkNoYW5nZXMgYXBwbHkgdGhlIG5leHQgdGltZSB0aGUgbWVldGluZyBhY3RpdmF0ZXMuPC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19mb290ZXItYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19jYW5jZWxcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJ0ay1tZWV0aW5nLXNwYWNlX19zdWJtaXRcIj57eyBpc0VkaXQgPyAnU2F2ZScgOiAnQ3JlYXRlJyB9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|