@valtimo/components 4.15.2-next-main.8
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/bundles/valtimo-components.umd.js +5089 -0
- package/bundles/valtimo-components.umd.js.map +1 -0
- package/bundles/valtimo-components.umd.min.js +17 -0
- package/bundles/valtimo-components.umd.min.js.map +1 -0
- package/esm2015/lib/alert/alert.component.js +142 -0
- package/esm2015/lib/alert/alert.module.js +28 -0
- package/esm2015/lib/alert/alert.service.js +81 -0
- package/esm2015/lib/bpmn-js-diagram/bpmn-js-diagram.component.js +160 -0
- package/esm2015/lib/bpmn-js-diagram/bpmn-js-diagram.module.js +30 -0
- package/esm2015/lib/breadcrumb-navigation/breadcrumb-navigation.component.js +93 -0
- package/esm2015/lib/breadcrumb-navigation/breadcrumb-navigation.module.js +34 -0
- package/esm2015/lib/camunda/form/camunda-form.components.js +37 -0
- package/esm2015/lib/camunda/form/camunda-form.module.js +38 -0
- package/esm2015/lib/camunda/form/custom/camunda-custom-form.component.js +42 -0
- package/esm2015/lib/camunda/form/custom/camunda-custom-form.module.js +34 -0
- package/esm2015/lib/camunda/form/generated/camunda-generated-form.component.js +69 -0
- package/esm2015/lib/camunda/form/generated/camunda-generated-form.module.js +63 -0
- package/esm2015/lib/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.js +28 -0
- package/esm2015/lib/camunda/form/generated/formfield/camunda-formfield-generator.directive.js +64 -0
- package/esm2015/lib/camunda/form/generated/formfield/camunda-formfield.service.js +67 -0
- package/esm2015/lib/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.js +38 -0
- package/esm2015/lib/camunda/form/generated/formfield/date/camunda-date-formfield.component.js +66 -0
- package/esm2015/lib/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.js +31 -0
- package/esm2015/lib/camunda/form/generated/formfield/formfield.model.js +16 -0
- package/esm2015/lib/camunda/form/generated/formfield/long/camunda-long-formfield.component.js +28 -0
- package/esm2015/lib/camunda/form/generated/formfield/string/camunda-string-formfield.component.js +28 -0
- package/esm2015/lib/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.js +28 -0
- package/esm2015/lib/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.js +36 -0
- package/esm2015/lib/camunda/form/generated/formfield/validation/date.validators.js +60 -0
- package/esm2015/lib/card/card.component.js +37 -0
- package/esm2015/lib/card/card.module.js +30 -0
- package/esm2015/lib/components.module.js +22 -0
- package/esm2015/lib/data-list/data-list.component.js +34 -0
- package/esm2015/lib/data-list/data-list.module.js +30 -0
- package/esm2015/lib/dropzone/dropzone.component.js +143 -0
- package/esm2015/lib/dropzone/dropzone.module.js +32 -0
- package/esm2015/lib/field-auto-focus/field-auto-focus.directive.js +35 -0
- package/esm2015/lib/field-auto-focus/field-auto-focus.module.js +32 -0
- package/esm2015/lib/file-size/file-size.module.js +30 -0
- package/esm2015/lib/file-size/file-size.pipe.js +45 -0
- package/esm2015/lib/filter-sidebar/filter-sidebar.component.js +46 -0
- package/esm2015/lib/filter-sidebar/filter-sidebar.module.js +30 -0
- package/esm2015/lib/form-io/form-io-builder.component.js +39 -0
- package/esm2015/lib/form-io/form-io-uploader/form-io-uploader-edit-form.js +90 -0
- package/esm2015/lib/form-io/form-io-uploader/form-io-uploader.component.js +72 -0
- package/esm2015/lib/form-io/form-io-uploader/form-io-uploader.formio.js +26 -0
- package/esm2015/lib/form-io/form-io.component.js +160 -0
- package/esm2015/lib/form-io/form-io.module.js +56 -0
- package/esm2015/lib/form-io/formio-config.js +22 -0
- package/esm2015/lib/form-io/services/form-io-dom.service.js +23 -0
- package/esm2015/lib/form-io/services/form-io-state.service.js +24 -0
- package/esm2015/lib/left-sidebar/left-sidebar.component.js +114 -0
- package/esm2015/lib/left-sidebar/left-sidebar.module.js +34 -0
- package/esm2015/lib/list/ListFilterPipe.directive.js +35 -0
- package/esm2015/lib/list/list.component.js +177 -0
- package/esm2015/lib/list/list.module.js +33 -0
- package/esm2015/lib/menu/menu-item-text.component.js +36 -0
- package/esm2015/lib/menu/menu-routing.module.js +29 -0
- package/esm2015/lib/menu/menu.component.js +65 -0
- package/esm2015/lib/menu/menu.init.js +34 -0
- package/esm2015/lib/menu/menu.module.js +39 -0
- package/esm2015/lib/menu/menu.service.js +127 -0
- package/esm2015/lib/menu/submenu-item-text.component.js +33 -0
- package/esm2015/lib/modal/modal.component.js +48 -0
- package/esm2015/lib/modal/modal.module.js +28 -0
- package/esm2015/lib/page-header/page-header.component.js +29 -0
- package/esm2015/lib/page-header/page-header.module.js +34 -0
- package/esm2015/lib/page-title/page-title.component.js +76 -0
- package/esm2015/lib/page-title/page-title.module.js +32 -0
- package/esm2015/lib/progress-bar/progress-bar.component.js +26 -0
- package/esm2015/lib/progress-bar/progress-bar.module.js +30 -0
- package/esm2015/lib/right-sidebar/right-sidebar.component.js +131 -0
- package/esm2015/lib/right-sidebar/right-sidebar.module.js +49 -0
- package/esm2015/lib/searchable-dropdown/searchable-dropdown.component.js +185 -0
- package/esm2015/lib/searchable-dropdown/searchable-dropdown.module.js +29 -0
- package/esm2015/lib/searchable-dropdown-select/searchable-dropdown-select.component.js +52 -0
- package/esm2015/lib/searchable-dropdown-select/searchable-dropdown-select.module.js +30 -0
- package/esm2015/lib/spinner/spinner.component.js +43 -0
- package/esm2015/lib/spinner/spinner.module.js +36 -0
- package/esm2015/lib/timeline/timeline.component.js +29 -0
- package/esm2015/lib/timeline/timeline.module.js +32 -0
- package/esm2015/lib/topbar/topbar.component.js +29 -0
- package/esm2015/lib/topbar/topbar.module.js +32 -0
- package/esm2015/lib/uploader/uploader-drag-drop.directive.js +49 -0
- package/esm2015/lib/uploader/uploader.component.js +70 -0
- package/esm2015/lib/uploader/uploader.module.js +33 -0
- package/esm2015/lib/version/version.service.js +38 -0
- package/esm2015/lib/view-content/type-converters/booleanTypeConverter.js +29 -0
- package/esm2015/lib/view-content/type-converters/dateTypeConverter.js +30 -0
- package/esm2015/lib/view-content/type-converters/enumTypeConverter.js +24 -0
- package/esm2015/lib/view-content/type-converters/relatedFilesTypeConverter.js +24 -0
- package/esm2015/lib/view-content/type-converters/stringReplaceUnderscoreTypeConverter.js +27 -0
- package/esm2015/lib/view-content/type-converters/stringTypeConverter.js +24 -0
- package/esm2015/lib/view-content/type-converters/type-converters.model.js +37 -0
- package/esm2015/lib/view-content/view-content.service.js +51 -0
- package/esm2015/lib/webcam/webcam.component.js +103 -0
- package/esm2015/lib/webcam/webcam.module.js +32 -0
- package/esm2015/lib/widget/widget.component.js +80 -0
- package/esm2015/lib/widget/widget.module.js +30 -0
- package/esm2015/public_api.js +84 -0
- package/esm2015/valtimo-components.js +27 -0
- package/fesm2015/valtimo-components.js +4536 -0
- package/fesm2015/valtimo-components.js.map +1 -0
- package/lib/alert/alert.component.d.ts +21 -0
- package/lib/alert/alert.module.d.ts +2 -0
- package/lib/alert/alert.service.d.ts +21 -0
- package/lib/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +27 -0
- package/lib/bpmn-js-diagram/bpmn-js-diagram.module.d.ts +2 -0
- package/lib/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +14 -0
- package/lib/breadcrumb-navigation/breadcrumb-navigation.module.d.ts +2 -0
- package/lib/camunda/form/camunda-form.components.d.ts +9 -0
- package/lib/camunda/form/camunda-form.module.d.ts +2 -0
- package/lib/camunda/form/custom/camunda-custom-form.component.d.ts +8 -0
- package/lib/camunda/form/custom/camunda-custom-form.module.d.ts +2 -0
- package/lib/camunda/form/generated/camunda-generated-form.component.d.ts +19 -0
- package/lib/camunda/form/generated/camunda-generated-form.module.d.ts +2 -0
- package/lib/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts +7 -0
- package/lib/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts +13 -0
- package/lib/camunda/form/generated/formfield/camunda-formfield.service.d.ts +7 -0
- package/lib/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +12 -0
- package/lib/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts +14 -0
- package/lib/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts +10 -0
- package/lib/camunda/form/generated/formfield/formfield.model.d.ts +20 -0
- package/lib/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts +7 -0
- package/lib/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts +7 -0
- package/lib/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts +7 -0
- package/lib/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts +10 -0
- package/lib/camunda/form/generated/formfield/validation/date.validators.d.ts +3 -0
- package/lib/card/card.component.d.ts +16 -0
- package/lib/card/card.module.d.ts +2 -0
- package/lib/components.module.d.ts +2 -0
- package/lib/data-list/data-list.component.d.ts +7 -0
- package/lib/data-list/data-list.module.d.ts +2 -0
- package/lib/dropzone/dropzone.component.d.ts +38 -0
- package/lib/dropzone/dropzone.module.d.ts +2 -0
- package/lib/field-auto-focus/field-auto-focus.directive.d.ts +6 -0
- package/lib/field-auto-focus/field-auto-focus.module.d.ts +2 -0
- package/lib/file-size/file-size.module.d.ts +2 -0
- package/lib/file-size/file-size.pipe.d.ts +5 -0
- package/lib/filter-sidebar/filter-sidebar.component.d.ts +8 -0
- package/lib/filter-sidebar/filter-sidebar.module.d.ts +2 -0
- package/lib/form-io/form-io-builder.component.d.ts +8 -0
- package/lib/form-io/form-io-uploader/form-io-uploader-edit-form.d.ts +61 -0
- package/lib/form-io/form-io-uploader/form-io-uploader.component.d.ts +29 -0
- package/lib/form-io/form-io-uploader/form-io-uploader.formio.d.ts +3 -0
- package/lib/form-io/form-io.component.d.ts +45 -0
- package/lib/form-io/form-io.module.d.ts +2 -0
- package/lib/form-io/formio-config.d.ts +6 -0
- package/lib/form-io/services/form-io-dom.service.d.ts +6 -0
- package/lib/form-io/services/form-io-state.service.d.ts +10 -0
- package/lib/left-sidebar/left-sidebar.component.d.ts +34 -0
- package/lib/left-sidebar/left-sidebar.module.d.ts +2 -0
- package/lib/list/ListFilterPipe.directive.d.ts +4 -0
- package/lib/list/list.component.d.ts +43 -0
- package/lib/list/list.module.d.ts +2 -0
- package/lib/menu/menu-item-text.component.d.ts +4 -0
- package/lib/menu/menu-routing.module.d.ts +2 -0
- package/lib/menu/menu.component.d.ts +18 -0
- package/lib/menu/menu.init.d.ts +3 -0
- package/lib/menu/menu.module.d.ts +2 -0
- package/lib/menu/menu.service.d.ts +23 -0
- package/lib/menu/submenu-item-text.component.d.ts +4 -0
- package/lib/modal/modal.component.d.ts +12 -0
- package/lib/modal/modal.module.d.ts +2 -0
- package/lib/page-header/page-header.component.d.ts +5 -0
- package/lib/page-header/page-header.module.d.ts +2 -0
- package/lib/page-title/page-title.component.d.ts +19 -0
- package/lib/page-title/page-title.module.d.ts +2 -0
- package/lib/progress-bar/progress-bar.component.d.ts +2 -0
- package/lib/progress-bar/progress-bar.module.d.ts +2 -0
- package/lib/right-sidebar/right-sidebar.component.d.ts +34 -0
- package/lib/right-sidebar/right-sidebar.module.d.ts +2 -0
- package/lib/searchable-dropdown/searchable-dropdown.component.d.ts +39 -0
- package/lib/searchable-dropdown/searchable-dropdown.module.d.ts +2 -0
- package/lib/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +19 -0
- package/lib/searchable-dropdown-select/searchable-dropdown-select.module.d.ts +2 -0
- package/lib/spinner/spinner.component.d.ts +9 -0
- package/lib/spinner/spinner.module.d.ts +2 -0
- package/lib/timeline/timeline.component.d.ts +4 -0
- package/lib/timeline/timeline.module.d.ts +2 -0
- package/lib/topbar/topbar.component.d.ts +3 -0
- package/lib/topbar/topbar.module.d.ts +2 -0
- package/lib/uploader/uploader-drag-drop.directive.d.ts +7 -0
- package/lib/uploader/uploader.component.d.ts +15 -0
- package/lib/uploader/uploader.module.d.ts +2 -0
- package/lib/version/version.service.d.ts +8 -0
- package/lib/view-content/type-converters/booleanTypeConverter.d.ts +5 -0
- package/lib/view-content/type-converters/dateTypeConverter.d.ts +5 -0
- package/lib/view-content/type-converters/enumTypeConverter.d.ts +5 -0
- package/lib/view-content/type-converters/relatedFilesTypeConverter.d.ts +5 -0
- package/lib/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts +6 -0
- package/lib/view-content/type-converters/stringTypeConverter.d.ts +5 -0
- package/lib/view-content/type-converters/type-converters.model.d.ts +5 -0
- package/lib/view-content/view-content.service.d.ts +8 -0
- package/lib/webcam/webcam.component.d.ts +20 -0
- package/lib/webcam/webcam.module.d.ts +2 -0
- package/lib/widget/widget.component.d.ts +28 -0
- package/lib/widget/widget.module.d.ts +2 -0
- package/package.json +34 -0
- package/public_api.d.ts +65 -0
- package/valtimo-components.d.ts +26 -0
- package/valtimo-components.metadata.json +1 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { HttpClient } from '@angular/common/http';
|
|
17
|
+
import { Component } from '@angular/core';
|
|
18
|
+
import { FormBuilder, FormControl } from '@angular/forms';
|
|
19
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
20
|
+
import { ContextService } from '@valtimo/context';
|
|
21
|
+
import { UserProviderService } from '@valtimo/security';
|
|
22
|
+
import { NGXLogger } from 'ngx-logger';
|
|
23
|
+
import { combineLatest } from 'rxjs';
|
|
24
|
+
import { VersionService } from '../version/version.service';
|
|
25
|
+
export class RightSidebarComponent {
|
|
26
|
+
constructor(userProviderService, formBuilder, versionService, translate, contextService, http, logger) {
|
|
27
|
+
this.userProviderService = userProviderService;
|
|
28
|
+
this.formBuilder = formBuilder;
|
|
29
|
+
this.versionService = versionService;
|
|
30
|
+
this.translate = translate;
|
|
31
|
+
this.contextService = contextService;
|
|
32
|
+
this.http = http;
|
|
33
|
+
this.logger = logger;
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.frequencies = [
|
|
37
|
+
'emailNotificationOnMonday',
|
|
38
|
+
'emailNotificationOnTuesday',
|
|
39
|
+
'emailNotificationOnWednesday',
|
|
40
|
+
'emailNotificationOnThursday',
|
|
41
|
+
'emailNotificationOnFriday',
|
|
42
|
+
'emailNotificationOnSaturday',
|
|
43
|
+
'emailNotificationOnSunday'
|
|
44
|
+
];
|
|
45
|
+
this.settingsForm = this.formBuilder.group({
|
|
46
|
+
taskNotifications: new FormControl(false),
|
|
47
|
+
emailNotifications: new FormControl(false),
|
|
48
|
+
emailNotificationOnMonday: new FormControl(false),
|
|
49
|
+
emailNotificationOnTuesday: new FormControl(false),
|
|
50
|
+
emailNotificationOnWednesday: new FormControl(false),
|
|
51
|
+
emailNotificationOnThursday: new FormControl(false),
|
|
52
|
+
emailNotificationOnFriday: new FormControl(false),
|
|
53
|
+
emailNotificationOnSaturday: new FormControl(false),
|
|
54
|
+
emailNotificationOnSunday: new FormControl(false)
|
|
55
|
+
});
|
|
56
|
+
this.getUserSettings();
|
|
57
|
+
}
|
|
58
|
+
loadContextSwitch() {
|
|
59
|
+
combineLatest([this.contextService.getUserContexts(), this.contextService.getUserContextActive()])
|
|
60
|
+
.subscribe(([userContexts, userContextActive]) => {
|
|
61
|
+
this.userContextActive = userContextActive;
|
|
62
|
+
this.userContexts = userContexts;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
setUserContext(contextId) {
|
|
66
|
+
this.contextService.setUserContext(contextId).subscribe();
|
|
67
|
+
location.href = '/';
|
|
68
|
+
}
|
|
69
|
+
loadUserSettingsTab() {
|
|
70
|
+
this.userProviderService.getEmailNotificationSettings().subscribe(results => {
|
|
71
|
+
if (results !== null) {
|
|
72
|
+
this.settingsForm.controls.taskNotifications.setValue(results.taskNotifications);
|
|
73
|
+
this.settingsForm.controls.emailNotifications.setValue(results.emailNotifications);
|
|
74
|
+
this.settingsForm.controls.emailNotificationOnMonday.setValue(results.emailNotificationOnMonday);
|
|
75
|
+
this.settingsForm.controls.emailNotificationOnTuesday.setValue(results.emailNotificationOnTuesday);
|
|
76
|
+
this.settingsForm.controls.emailNotificationOnWednesday.setValue(results.emailNotificationOnWednesday);
|
|
77
|
+
this.settingsForm.controls.emailNotificationOnThursday.setValue(results.emailNotificationOnThursday);
|
|
78
|
+
this.settingsForm.controls.emailNotificationOnFriday.setValue(results.emailNotificationOnFriday);
|
|
79
|
+
this.settingsForm.controls.emailNotificationOnSaturday.setValue(results.emailNotificationOnSaturday);
|
|
80
|
+
this.settingsForm.controls.emailNotificationOnSunday.setValue(results.emailNotificationOnSunday);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// default is true in the database, even if api returns no content
|
|
84
|
+
this.settingsForm.controls.taskNotifications.setValue(true);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.getVersion();
|
|
88
|
+
}
|
|
89
|
+
getUserSettings() {
|
|
90
|
+
this.userProviderService.getUserSubject().subscribe(userIdentity => {
|
|
91
|
+
this.logger.debug('user', userIdentity);
|
|
92
|
+
this.userIdentity = userIdentity;
|
|
93
|
+
this.loadContextSwitch();
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
getVersion() {
|
|
97
|
+
this.versionService.getVersion().subscribe((build) => {
|
|
98
|
+
this.build = build;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
onSettingsSubmit() {
|
|
102
|
+
if (!this.settingsForm.pristine) {
|
|
103
|
+
this.userProviderService.updateEmailNotificationSettings(this.settingsForm.value).subscribe();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
updateUserLanguage(langKey) {
|
|
107
|
+
this.translate.use(langKey).subscribe(() => {
|
|
108
|
+
localStorage.setItem('langKey', langKey);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
logout() {
|
|
112
|
+
this.userProviderService.logout();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
RightSidebarComponent.decorators = [
|
|
116
|
+
{ type: Component, args: [{
|
|
117
|
+
selector: 'valtimo-right-sidebar',
|
|
118
|
+
template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<nav class=\"be-right-sidebar\">\n <div class=\"sb-content\">\n <div class=\"tab-navigation\">\n <ul class=\"nav nav-tabs nav-justified\" role=\"tablist\">\n <li class=\"nav-item\" role=\"presentation\">\n <a class=\"nav-link active\" href=\"#account\" aria-controls=\"account\" role=\"tab\" data-toggle=\"tab\"\n translate=\"account.title\"></a>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <a class=\"nav-link\" (click)=\"loadUserSettingsTab()\" href=\"#settings\" aria-controls=\"settings\" role=\"tab\"\n data-toggle=\"tab\" translate=\"settings.title\"></a>\n </li>\n </ul>\n </div>\n <div class=\"tab-panel\">\n <div class=\"tab-content\">\n <!-- account -->\n <div class=\"tab-pane tab-account active\" id=\"account\" role=\"tabpanel\">\n <div class=\"p-3 be-scroller-settings\" *ngIf=\"userIdentity\">\n <div class=\"content\">\n <div class=\"category-title border-0 m-0\">\n <div class=\"p-0 text-muted\">\n <dl class=\"row mb-0\">\n <dt class=\"col-sm-3\">Email</dt>\n <dd class=\"col-sm-9 mb-0 text-bold\">{{ userIdentity.email }}</dd>\n <ng-container *ngIf=\"userIdentity.username\">\n <dt class=\"col-sm-3\">Username</dt>\n <dd class=\"col-sm-9 mb-0 text-bold\">{{ userIdentity.username }}</dd>\n </ng-container>\n <dt class=\"col-sm-3\">Name</dt>\n <dd class=\"col-sm-9 mb-0 text-bold\">{{ userIdentity.firstName + ' ' + userIdentity.lastName }}</dd>\n </dl>\n </div>\n </div>\n <!-- context switch -->\n <ul class=\"settings-list\" *ngIf=\"userContexts?.length > 1\">\n <li ngbTooltip=\"{{ 'settings.context.title' | translate }}\">\n <select class=\"form-control\" #contextSelect (change)=\"setUserContext(+contextSelect.value)\">\n <option *ngFor=\"let context of userContexts\" [value]=\"context.id\"\n [selected]=\"context.id === userContextActive.id\">\n {{ context.name }}\n </option>\n </select>\n </li>\n </ul>\n <ul class=\"list-group list-group-flush m-0\">\n <li class=\"bg-transparent list-group-item px-0\">\n <a href=\"https://docs.valtimo.nl\" target=\"_blank\" class=\"d-block\" translate=\"account.links.help\"></a>\n </li>\n <li class=\"bg-transparent list-group-item px-0\">\n <a href=\"https://www.valtimo.nl/feedback/\" target=\"_blank\" class=\"d-block\"\n translate=\"account.links.feedback\"></a>\n </li>\n <li class=\"bg-transparent list-group-item px-0\">\n <a href=\"https://forum.valtimo.nl\" target=\"_blank\" class=\"d-block\"\n translate=\"account.links.forum\"></a>\n </li>\n <li class=\"bg-transparent list-group-item px-0\">\n <a href=\"javascript:void(0)\" class=\"d-block\" (click)=\"logout()\"\n translate=\"account.links.signOut\"></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n\n <!-- settings -->\n <div class=\"tab-pane tab-settings\" id=\"settings\" role=\"tabpanel\">\n <div class=\"p-3 be-scroller-settings\">\n <div class=\"content\">\n <span class=\"category-title\" translate=\"settings.language.title\"></span>\n <ul class=\"settings-list\">\n <li>\n <select class=\"form-control\" #langSelect (change)=\"updateUserLanguage(langSelect.value)\">\n <option *ngFor=\"let lang of translate.getLangs()\" [value]=\"lang\"\n [selected]=\"lang === translate.currentLang\">\n {{ 'settings.language.options.' + lang | translate }}\n </option>\n </select>\n </li>\n </ul>\n\n <form [formGroup]=\"settingsForm\">\n <span class=\"category-title\" translate=\"settings.notification.title\"></span>\n <ul class=\"settings-list m-0\">\n <li>\n <div class=\"switch-button switch-button-sm switch-button-success\">\n <input type=\"checkbox\" formControlName=\"taskNotifications\" id=\"taskNotifications\"\n (ngModelChange)=\"onSettingsSubmit()\"><span>\n <label for=\"taskNotifications\"></label></span>\n </div>\n <span class=\"name\" translate=\"settings.notification.taskNotifications\"></span>\n <div class=\"text-muted info-text\" translate=\"settings.notification.taskNotificationsIntro\"></div>\n </li>\n\n <li>\n <div class=\"switch-button switch-button-sm switch-button-success\">\n <input type=\"checkbox\" formControlName=\"emailNotifications\" id=\"emailNotifications\"\n (ngModelChange)=\"onSettingsSubmit()\"><span>\n <label for=\"emailNotifications\"></label></span>\n </div>\n <span class=\"name\" translate=\"settings.notification.emailNotifications\"></span>\n <div class=\"text-muted info-text\" translate=\"settings.notification.emailNotificationsIntro\"></div>\n </li>\n </ul>\n\n <div *ngIf=\"settingsForm.value.emailNotifications\">\n <ul class=\"settings-list\">\n <li *ngFor=\"let frequency of frequencies\">\n <div class=\"switch-button switch-button-sm switch-button-success\">\n <input type=\"checkbox\" formControlName=\"{{ frequency }}\" id=\"{{ frequency }}\"\n (ngModelChange)=\"onSettingsSubmit()\"><span>\n <label for=\"{{ frequency }}\"></label></span>\n </div>\n <span class=\"name\">{{ 'settings.notification.' + frequency | translate }}</span>\n </li>\n </ul>\n </div>\n </form>\n\n <div class=\"version-holder\">\n <span class=\"category-title\" translate=\"settings.version.title\"></span>\n <ul class=\"settings-list\">\n <li *ngIf=\"build\">\n <div class=\"name\">{{ build.title }}</div>\n <div class=\"text-muted\">{{ build.version }}</div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</nav>\n",
|
|
119
|
+
styles: [".be-scroller-settings{padding-bottom:150px!important}.version-holder{background-color:#f8f9fa;bottom:0;position:fixed;width:259px}.info-text{line-height:1em!important;margin-bottom:15px;padding-right:70px}"]
|
|
120
|
+
},] }
|
|
121
|
+
];
|
|
122
|
+
RightSidebarComponent.ctorParameters = () => [
|
|
123
|
+
{ type: UserProviderService },
|
|
124
|
+
{ type: FormBuilder },
|
|
125
|
+
{ type: VersionService },
|
|
126
|
+
{ type: TranslateService },
|
|
127
|
+
{ type: ContextService },
|
|
128
|
+
{ type: HttpClient },
|
|
129
|
+
{ type: NGXLogger }
|
|
130
|
+
];
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaHQtc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9yaWdodC1zaWRlYmFyL3JpZ2h0LXNpZGViYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU81RCxNQUFNLE9BQU8scUJBQXFCO0lBU2hDLFlBQ1UsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLGNBQThCLEVBQy9CLFNBQTJCLEVBQzFCLGNBQThCLEVBQzlCLElBQWdCLEVBQ2hCLE1BQWlCO1FBTmpCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hC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ZTtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7O1lBOUdGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxpcVBBQTZDOzthQUU5Qzs7O1lBVFEsbUJBQW1CO1lBSm5CLFdBQVc7WUFPWCxjQUFjO1lBTmQsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFKZCxVQUFVO1lBT1YsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJ0B2YWx0aW1vL2NvbnRleHQnO1xuaW1wb3J0IHsgVXNlcklkZW50aXR5LCBWYWx0aW1vVmVyc2lvbiB9IGZyb20gJ0B2YWx0aW1vL2NvbnRyYWN0JztcbmltcG9ydCB7IFVzZXJQcm92aWRlclNlcnZpY2UgfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQgeyBOR1hMb2dnZXIgfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdmVyc2lvbi92ZXJzaW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXJpZ2h0LXNpZGViYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcmlnaHQtc2lkZWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JpZ2h0LXNpZGViYXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJpZ2h0U2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHVzZXJJZGVudGl0eTogVXNlcklkZW50aXR5O1xuICBwdWJsaWMgZnJlcXVlbmNpZXM6IEFycmF5PGFueT47XG4gIHB1YmxpYyBzZXR0aW5nc0Zvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIGJ1aWxkOiBWYWx0aW1vVmVyc2lvbjtcbiAgcHVibGljIHVzZXJDb250ZXh0czogQXJyYXk8YW55PjtcbiAgcHVibGljIHVzZXJDb250ZXh0QWN0aXZlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdmVyc2lvblNlcnZpY2U6IFZlcnNpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXJcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZyZXF1ZW5jaWVzID0gW1xuICAgICAgJ2VtYWlsTm90aWZpY2F0aW9uT25Nb25kYXknLFxuICAgICAgJ2VtYWlsTm90aWZpY2F0aW9uT25UdWVzZGF5JyxcbiAgICAgICdlbWFpbE5vdGlmaWNhdGlvbk9uV2VkbmVzZGF5JyxcbiAgICAgICdlbWFpbE5vdGlmaWNhdGlvbk9uVGh1cnNkYXknLFxuICAgICAgJ2VtYWlsTm90aWZpY2F0aW9uT25GcmlkYXknLFxuICAgICAgJ2VtYWlsTm90aWZpY2F0aW9uT25TYXR1cmRheScsXG4gICAgICAnZW1haWxOb3RpZmljYXRpb25PblN1bmRheSdcbiAgICBdO1xuICAgIHRoaXMuc2V0dGluZ3NGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0YXNrTm90aWZpY2F0aW9uczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICAgIGVtYWlsTm90aWZpY2F0aW9uczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICAgIGVtYWlsTm90aWZpY2F0aW9uT25Nb25kYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgICBlbWFpbE5vdGlmaWNhdGlvbk9uVHVlc2RheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICAgIGVtYWlsTm90aWZpY2F0aW9uT25XZWRuZXNkYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgICBlbWFpbE5vdGlmaWNhdGlvbk9uVGh1cnNkYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgICBlbWFpbE5vdGlmaWNhdGlvbk9uRnJpZGF5OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25PblNhdHVyZGF5OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25PblN1bmRheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKVxuICAgIH0pO1xuICAgIHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZXh0U3dpdGNoKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29udGV4dFNlcnZpY2UuZ2V0VXNlckNvbnRleHRzKCksIHRoaXMuY29udGV4dFNlcnZpY2UuZ2V0VXNlckNvbnRleHRBY3RpdmUoKV0pXG4gICAgICAuc3Vic2NyaWJlKChbdXNlckNvbnRleHRzLCB1c2VyQ29udGV4dEFjdGl2ZV0pID0+IHtcbiAgICAgICAgdGhpcy51c2VyQ29udGV4dEFjdGl2ZSA9IHVzZXJDb250ZXh0QWN0aXZlO1xuICAgICAgICB0aGlzLnVzZXJDb250ZXh0cyA9IHVzZXJDb250ZXh0cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFVzZXJDb250ZXh0KGNvbnRleHRJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5zZXRVc2VyQ29udGV4dChjb250ZXh0SWQpLnN1YnNjcmliZSgpO1xuICAgIGxvY2F0aW9uLmhyZWYgPSAnLyc7XG4gIH1cblxuICBwdWJsaWMgbG9hZFVzZXJTZXR0aW5nc1RhYigpIHtcbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0RW1haWxOb3RpZmljYXRpb25TZXR0aW5ncygpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIGlmIChyZXN1bHRzICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NGb3JtLmNvbnRyb2xzLnRhc2tOb3RpZmljYXRpb25zLnNldFZhbHVlKHJlc3VsdHMudGFza05vdGlmaWNhdGlvbnMpO1xuICAgICAgICB0aGlzLnNldHRpbmdzRm9ybS5jb250cm9scy5lbWFpbE5vdGlmaWNhdGlvbnMuc2V0VmFsdWUocmVzdWx0cy5lbWFpbE5vdGlmaWNhdGlvbnMpO1xuICAgICAgICB0aGlzLnNldHRpbmdzRm9ybS5jb250cm9scy5lbWFpbE5vdGlmaWNhdGlvbk9uTW9uZGF5LnNldFZhbHVlKHJlc3VsdHMuZW1haWxOb3RpZmljYXRpb25Pbk1vbmRheSk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NGb3JtLmNvbnRyb2xzLmVtYWlsTm90aWZpY2F0aW9uT25UdWVzZGF5LnNldFZhbHVlKHJlc3VsdHMuZW1haWxOb3RpZmljYXRpb25PblR1ZXNkYXkpO1xuICAgICAgICB0aGlzLnNldHRpbmdzRm9ybS5jb250cm9scy5lbWFpbE5vdGlmaWNhdGlvbk9uV2VkbmVzZGF5LnNldFZhbHVlKHJlc3VsdHMuZW1haWxOb3RpZmljYXRpb25PbldlZG5lc2RheSk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NGb3JtLmNvbnRyb2xzLmVtYWlsTm90aWZpY2F0aW9uT25UaHVyc2RheS5zZXRWYWx1ZShyZXN1bHRzLmVtYWlsTm90aWZpY2F0aW9uT25UaHVyc2RheSk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NGb3JtLmNvbnRyb2xzLmVtYWlsTm90aWZpY2F0aW9uT25GcmlkYXkuc2V0VmFsdWUocmVzdWx0cy5lbWFpbE5vdGlmaWNhdGlvbk9uRnJpZGF5KTtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm0uY29udHJvbHMuZW1haWxOb3RpZmljYXRpb25PblNhdHVyZGF5LnNldFZhbHVlKHJlc3VsdHMuZW1haWxOb3RpZmljYXRpb25PblNhdHVyZGF5KTtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm0uY29udHJvbHMuZW1haWxOb3RpZmljYXRpb25PblN1bmRheS5zZXRWYWx1ZShyZXN1bHRzLmVtYWlsTm90aWZpY2F0aW9uT25TdW5kYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBpcyB0cnVlIGluIHRoZSBkYXRhYmFzZSwgZXZlbiBpZiBhcGkgcmV0dXJucyBubyBjb250ZW50XG4gICAgICAgIHRoaXMuc2V0dGluZ3NGb3JtLmNvbnRyb2xzLnRhc2tOb3RpZmljYXRpb25zLnNldFZhbHVlKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZ2V0VmVyc2lvbigpO1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJTZXR0aW5ncygpIHtcbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0VXNlclN1YmplY3QoKS5zdWJzY3JpYmUodXNlcklkZW50aXR5ID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd1c2VyJywgdXNlcklkZW50aXR5KTtcbiAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gdXNlcklkZW50aXR5O1xuICAgICAgdGhpcy5sb2FkQ29udGV4dFN3aXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFZlcnNpb24oKSB7XG4gICAgdGhpcy52ZXJzaW9uU2VydmljZS5nZXRWZXJzaW9uKCkuc3Vic2NyaWJlKChidWlsZDogVmFsdGltb1ZlcnNpb24pID0+IHtcbiAgICAgIHRoaXMuYnVpbGQgPSBidWlsZDtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2V0dGluZ3NTdWJtaXQoKSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzRm9ybS5wcmlzdGluZSkge1xuICAgICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLnVwZGF0ZUVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3ModGhpcy5zZXR0aW5nc0Zvcm0udmFsdWUpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVVzZXJMYW5ndWFnZShsYW5nS2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZ0tleSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5nS2V5JywgbGFuZ0tleSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmxvZ291dCgpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { NgModule } from '@angular/core';
|
|
17
|
+
import { CommonModule } from '@angular/common';
|
|
18
|
+
import { RightSidebarComponent } from './right-sidebar.component';
|
|
19
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
20
|
+
import { RouterModule } from '@angular/router';
|
|
21
|
+
import { HttpClient } from '@angular/common/http';
|
|
22
|
+
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
23
|
+
import { HttpLoaderFactory } from '@valtimo/contract';
|
|
24
|
+
import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
|
|
25
|
+
const ɵ0 = HttpLoaderFactory;
|
|
26
|
+
export class RightSidebarModule {
|
|
27
|
+
}
|
|
28
|
+
RightSidebarModule.decorators = [
|
|
29
|
+
{ type: NgModule, args: [{
|
|
30
|
+
declarations: [RightSidebarComponent],
|
|
31
|
+
imports: [
|
|
32
|
+
CommonModule,
|
|
33
|
+
FormsModule,
|
|
34
|
+
ReactiveFormsModule,
|
|
35
|
+
RouterModule,
|
|
36
|
+
TranslateModule.forRoot({
|
|
37
|
+
loader: {
|
|
38
|
+
provide: TranslateLoader,
|
|
39
|
+
useFactory: ɵ0,
|
|
40
|
+
deps: [HttpClient]
|
|
41
|
+
}
|
|
42
|
+
}),
|
|
43
|
+
NgbTooltipModule
|
|
44
|
+
],
|
|
45
|
+
exports: [RightSidebarComponent]
|
|
46
|
+
},] }
|
|
47
|
+
];
|
|
48
|
+
export { ɵ0 };
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaHQtc2lkZWJhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9yaWdodC1zaWRlYmFyL3JpZ2h0LXNpZGViYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztXQVl4QyxpQkFBaUI7QUFRckMsTUFBTSxPQUFPLGtCQUFrQjs7O1lBbEI5QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLFdBQVc7b0JBQ1gsbUJBQW1CO29CQUNuQixZQUFZO29CQUNaLGVBQWUsQ0FBQyxPQUFPLENBQUM7d0JBQ3RCLE1BQU0sRUFBRTs0QkFDTixPQUFPLEVBQUUsZUFBZTs0QkFDeEIsVUFBVSxJQUFtQjs0QkFDN0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO3lCQUNuQjtxQkFDRixDQUFDO29CQUNGLGdCQUFnQjtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7YUFDakMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtSaWdodFNpZGViYXJDb21wb25lbnR9IGZyb20gJy4vcmlnaHQtc2lkZWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7VHJhbnNsYXRlTG9hZGVyLCBUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtIdHRwTG9hZGVyRmFjdG9yeX0gZnJvbSAnQHZhbHRpbW8vY29udHJhY3QnO1xuaW1wb3J0IHtOZ2JUb29sdGlwTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1JpZ2h0U2lkZWJhckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvclJvb3Qoe1xuICAgICAgbG9hZGVyOiB7XG4gICAgICAgIHByb3ZpZGU6IFRyYW5zbGF0ZUxvYWRlcixcbiAgICAgICAgdXNlRmFjdG9yeTogSHR0cExvYWRlckZhY3RvcnksXG4gICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50XVxuICAgICAgfVxuICAgIH0pLFxuICAgIE5nYlRvb2x0aXBNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1JpZ2h0U2lkZWJhckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgUmlnaHRTaWRlYmFyTW9kdWxlIHtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Component, EventEmitter, HostListener, Input, Output, QueryList, ViewChildren } from '@angular/core';
|
|
17
|
+
import { FormControl } from '@angular/forms';
|
|
18
|
+
import { BehaviorSubject, combineLatest, fromEvent } from 'rxjs';
|
|
19
|
+
import { debounceTime, take } from 'rxjs/operators';
|
|
20
|
+
export class SearchableDropdownComponent {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.width = 250;
|
|
23
|
+
this.itemSelected = new EventEmitter();
|
|
24
|
+
this.searchId = 'search';
|
|
25
|
+
this.searchTerm = new FormControl('');
|
|
26
|
+
this.focusedItemId$ = new BehaviorSubject(this.searchId);
|
|
27
|
+
this.open$ = new BehaviorSubject(false);
|
|
28
|
+
this.filteredItems$ = new BehaviorSubject(undefined);
|
|
29
|
+
this.wasInside = false;
|
|
30
|
+
this.mouseOnList$ = new BehaviorSubject(false);
|
|
31
|
+
}
|
|
32
|
+
clickInside() {
|
|
33
|
+
this.wasInside = true;
|
|
34
|
+
}
|
|
35
|
+
clickout() {
|
|
36
|
+
if (!this.wasInside) {
|
|
37
|
+
this.closeDropdown();
|
|
38
|
+
}
|
|
39
|
+
this.wasInside = false;
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
this.openKeysSubscription();
|
|
43
|
+
this.openSearchSubscription();
|
|
44
|
+
}
|
|
45
|
+
ngOnChanges(changes) {
|
|
46
|
+
const itemChanges = changes.items;
|
|
47
|
+
const currenItems = itemChanges.currentValue;
|
|
48
|
+
if (itemChanges && !itemChanges.previousValue && currenItems) {
|
|
49
|
+
this.filteredItems$.next(currenItems);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ngOnDestroy() {
|
|
53
|
+
this.keySubscription.unsubscribe();
|
|
54
|
+
this.searchSubscription.unsubscribe();
|
|
55
|
+
}
|
|
56
|
+
openDropdown() {
|
|
57
|
+
this.open$.next(true);
|
|
58
|
+
}
|
|
59
|
+
hoverOverButton(id) {
|
|
60
|
+
this.focusedItemId$.next(id);
|
|
61
|
+
}
|
|
62
|
+
mouseEnterList() {
|
|
63
|
+
this.mouseOnList$.next(true);
|
|
64
|
+
}
|
|
65
|
+
mouseLeaveList() {
|
|
66
|
+
this.mouseOnList$.next(false);
|
|
67
|
+
}
|
|
68
|
+
resetFocus() {
|
|
69
|
+
this.focusedItemId$.next(this.searchId);
|
|
70
|
+
}
|
|
71
|
+
submit(id) {
|
|
72
|
+
this.itemSelected.emit(id);
|
|
73
|
+
}
|
|
74
|
+
closeDropdown() {
|
|
75
|
+
this.searchTerm.setValue('');
|
|
76
|
+
this.resetFocus();
|
|
77
|
+
this.open$.next(false);
|
|
78
|
+
}
|
|
79
|
+
openKeysSubscription() {
|
|
80
|
+
this.keySubscription = fromEvent(document, 'keyup')
|
|
81
|
+
.pipe(debounceTime(50))
|
|
82
|
+
.subscribe((event) => {
|
|
83
|
+
combineLatest([this.mouseOnList$, this.filteredItems$, this.focusedItemId$])
|
|
84
|
+
.pipe(take(1))
|
|
85
|
+
.subscribe(([mouseOnList, items, focusedId]) => {
|
|
86
|
+
const length = items.length;
|
|
87
|
+
const focusedIndex = items.findIndex((item) => item.id === focusedId);
|
|
88
|
+
const code = event.code;
|
|
89
|
+
const shiftKey = event.shiftKey;
|
|
90
|
+
const down = 'ArrowDown';
|
|
91
|
+
const tab = 'Tab';
|
|
92
|
+
const up = 'ArrowUp';
|
|
93
|
+
const enter = 'Enter';
|
|
94
|
+
const escape = 'Escape';
|
|
95
|
+
// close dropdown on pressing escape
|
|
96
|
+
if (code === escape) {
|
|
97
|
+
this.closeDropdown();
|
|
98
|
+
}
|
|
99
|
+
// submit item when focus is on an item in the list and enter is pressed
|
|
100
|
+
if (code === enter && focusedId !== this.searchId) {
|
|
101
|
+
this.submit(focusedId);
|
|
102
|
+
}
|
|
103
|
+
// only handle tab or arrow keypresses when items are shown and the mouse is not on the list
|
|
104
|
+
if (length > 0 && !mouseOnList) {
|
|
105
|
+
// handle moving down in the list with arrow down or tab
|
|
106
|
+
if (code === down || (code === tab && !shiftKey)) {
|
|
107
|
+
// move focus to first item in the list when focus is on search box
|
|
108
|
+
if (focusedId === this.searchId) {
|
|
109
|
+
this.focusedItemId$.next(items[0].id);
|
|
110
|
+
this.scrollButtonIntoView(focusedId);
|
|
111
|
+
// move focus to next item in the list if focus is not on last item
|
|
112
|
+
}
|
|
113
|
+
else if (focusedIndex + 1 < length) {
|
|
114
|
+
this.focusedItemId$.next(items[focusedIndex + 1].id);
|
|
115
|
+
this.scrollButtonIntoView(focusedId);
|
|
116
|
+
}
|
|
117
|
+
// handle moving up in the list with up arrow up or shift+tab
|
|
118
|
+
}
|
|
119
|
+
else if ((code === up || (code === tab && shiftKey)) && focusedId !== this.searchId) {
|
|
120
|
+
// move to previous item if focus is not on the first item in the list
|
|
121
|
+
if (focusedIndex > 0) {
|
|
122
|
+
this.focusedItemId$.next(items[focusedIndex - 1].id);
|
|
123
|
+
this.scrollButtonIntoView(focusedId);
|
|
124
|
+
// move focus to search box if focus is on first item in the list
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.resetFocus();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
openSearchSubscription() {
|
|
135
|
+
this.searchSubscription = this.searchTerm.valueChanges.subscribe((searchTerm) => {
|
|
136
|
+
this.focusedItemId$.pipe(take(1)).subscribe((focusedItemId) => {
|
|
137
|
+
if (!searchTerm) {
|
|
138
|
+
this.filteredItems$.next(this.items);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const filteredItems = this.items.filter((item) => item.text.toUpperCase().includes(searchTerm.toUpperCase()));
|
|
142
|
+
this.filteredItems$.next(filteredItems);
|
|
143
|
+
// move focus to search box if filtered list length is 0 or previously focused item is not in filtered list anymore
|
|
144
|
+
if (filteredItems.length === 0 || !filteredItems.some((item) => item.id === focusedItemId)) {
|
|
145
|
+
this.resetFocus();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// move scrolling button into view to end of queue, so that DOM can be updated first
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
this.scrollButtonIntoView(focusedItemId);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
scrollButtonIntoView(id) {
|
|
156
|
+
this.filteredItems$.pipe(take(1)).subscribe((items) => {
|
|
157
|
+
const focusItemIndex = items.findIndex((item) => item.id === id);
|
|
158
|
+
const focusedButton = this.buttons.toArray()[focusItemIndex];
|
|
159
|
+
if (focusedButton) {
|
|
160
|
+
focusedButton.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
SearchableDropdownComponent.decorators = [
|
|
166
|
+
{ type: Component, args: [{
|
|
167
|
+
selector: 'valtimo-searchable-dropdown',
|
|
168
|
+
template: "<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button class=\"btn btn-primary btn-sm dropdown-size\" (click)=\"openDropdown()\" [style.width.px]=\"width\">\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5 class=\"underline-button\" (click)=\"openDropdown()\" [style.width.px]=\"width\">\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"dropdown-container\" [style.width.px]=\"width\">\n <div class=\"dropdown-size search\" [style.width.px]=\"width\">\n <input #search [ngClass]=\"{ disabled: disabled }\" [placeholder]=\"searchText\" [formControl]=\"searchTerm\" />\n {{ search.focus() }}\n </div>\n <div class=\"dropdown-list\" (mouseenter)=\"mouseEnterList()\" (mouseleave)=\"mouseLeaveList()\">\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container *ngIf=\"filteredItems.length > 0 && focusedItemId$ | async as focusedItemId; else noResults\">\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{ focus: focusedItemId === item.id, disabled: disabled }\"\n class=\"dropdown-button dropdown-size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"dropdown-button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div class=\"dropdown-button dropdown-size disabled\" [style.width.px]=\"width\">\n <span class=\"dropdown-button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div *ngIf=\"style === 'button' || !style\" class=\"dropdown-size\" [style.width.px]=\"width\"></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"underline-button\"><b>-</b></h5>\n</ng-template>\n",
|
|
169
|
+
styles: [".dropdown-size{height:34px;width:250px}.underline-button{cursor:pointer;text-decoration:underline;width:250px}.dropdown-container{background-color:#fff;border:1px solid #e3e3e3;border-radius:3px;box-shadow:0 0 6px 0 rgba(0,0,0,.12);display:flex;flex-direction:column;max-height:300px;overflow:hidden;padding:7px 0;position:fixed;width:250px;z-index:999}.dropdown-list{list-style:none;margin:0;overflow:auto;overflow-x:hidden;padding:0;z-index:9999}.search{align-items:center;border-bottom:1px solid #dee2e6;display:flex;flex-shrink:0;height:44px;padding:8px 24px}.search input{padding:0;width:100%}.dropdown-button,.search input,.search input:focus{border:none;outline:none}.dropdown-button{align-items:center;background-color:#fff;color:#504e4e;cursor:pointer;display:flex;font-size:1rem;font-weight:400;padding:8px 24px}.dropdown-button.focus{background-color:#f5f5f5}.dropdown-button-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.disabled{color:#959595;cursor:default;pointer-events:none}"]
|
|
170
|
+
},] }
|
|
171
|
+
];
|
|
172
|
+
SearchableDropdownComponent.propDecorators = {
|
|
173
|
+
style: [{ type: Input }],
|
|
174
|
+
items: [{ type: Input }],
|
|
175
|
+
buttonText: [{ type: Input }],
|
|
176
|
+
searchText: [{ type: Input }],
|
|
177
|
+
noResultsText: [{ type: Input }],
|
|
178
|
+
disabled: [{ type: Input }],
|
|
179
|
+
width: [{ type: Input }],
|
|
180
|
+
itemSelected: [{ type: Output }],
|
|
181
|
+
buttons: [{ type: ViewChildren, args: ['button',] }],
|
|
182
|
+
clickInside: [{ type: HostListener, args: ['click',] }],
|
|
183
|
+
clickout: [{ type: HostListener, args: ['document:click',] }]
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9zZWFyY2hhYmxlLWRyb3Bkb3duL3NlYXJjaGFibGUtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3BELE1BQU0sT0FBTywyQkFBMkI7SUFMeEM7UUFZVyxVQUFLLEdBQUcsR0FBRyxDQUFDO1FBRVgsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTNCLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFFNUIsZUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUU1QyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBTVQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQXlKdEUsQ0FBQztJQXRKQyxX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QkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzsyQkFFTCxNQUFNO3NCQUVOLFlBQVksU0FBQyxRQUFROzBCQW9CckIsWUFBWSxTQUFDLE9BQU87dUJBS3BCLFlBQVksU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHJvcGRvd25CdXR0b25TdHlsZSwgRHJvcGRvd25JdGVtIH0gZnJvbSAnQHZhbHRpbW8vY29udHJhY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXNlYXJjaGFibGUtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaGFibGUtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hhYmxlRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc3R5bGU6IERyb3Bkb3duQnV0dG9uU3R5bGU7XG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxEcm9wZG93bkl0ZW0+O1xuICBASW5wdXQoKSBidXR0b25UZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgbm9SZXN1bHRzVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgd2lkdGggPSAyNTA7XG5cbiAgQE91dHB1dCgpIGl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkcmVuKCdidXR0b24nKSBidXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hJZCA9ICdzZWFyY2gnO1xuXG4gIHJlYWRvbmx5IHNlYXJjaFRlcm0gPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIHJlYWRvbmx5IGZvY3VzZWRJdGVtSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHRoaXMuc2VhcmNoSWQpO1xuXG4gIHJlYWRvbmx5IG9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PERyb3Bkb3duSXRlbT4+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSB3YXNJbnNpZGUgPSBmYWxzZTtcblxuICBwcml2YXRlIGtleVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb3VzZU9uTGlzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIGNsaWNrSW5zaWRlKCkge1xuICAgIHRoaXMud2FzSW5zaWRlID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgY2xpY2tvdXQoKSB7XG4gICAgaWYgKCF0aGlzLndhc0luc2lkZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuICAgIHRoaXMud2FzSW5zaWRlID0gZmFsc2U7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5LZXlzU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuU2VhcmNoU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNoYW5nZXMgPSBjaGFuZ2VzLml0ZW1zO1xuICAgIGNvbnN0IGN1cnJlbkl0ZW1zID0gaXRlbUNoYW5nZXMuY3VycmVudFZhbHVlO1xuICAgIGlmIChpdGVtQ2hhbmdlcyAmJiAhaXRlbUNoYW5nZXMucHJldmlvdXNWYWx1ZSAmJiBjdXJyZW5JdGVtcykge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJC5uZXh0KGN1cnJlbkl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmtleVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgaG92ZXJPdmVyQnV0dG9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaWQpO1xuICB9XG5cbiAgbW91c2VFbnRlckxpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZU9uTGlzdCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG1vdXNlTGVhdmVMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMubW91c2VPbkxpc3QkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcmVzZXRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQodGhpcy5zZWFyY2hJZCk7XG4gIH1cblxuICBzdWJtaXQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5yZXNldEZvY3VzKCk7XG4gICAgdGhpcy5vcGVuJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbktleXNTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5rZXlTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXl1cCcpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5tb3VzZU9uTGlzdCQsIHRoaXMuZmlsdGVyZWRJdGVtcyQsIHRoaXMuZm9jdXNlZEl0ZW1JZCRdKVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoW21vdXNlT25MaXN0LCBpdGVtcywgZm9jdXNlZElkXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBmb2N1c2VkSWQpO1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGV2ZW50LmNvZGU7XG4gICAgICAgICAgICBjb25zdCBzaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICAgICAgY29uc3QgZG93biA9ICdBcnJvd0Rvd24nO1xuICAgICAgICAgICAgY29uc3QgdGFiID0gJ1RhYic7XG4gICAgICAgICAgICBjb25zdCB1cCA9ICdBcnJvd1VwJztcbiAgICAgICAgICAgIGNvbnN0IGVudGVyID0gJ0VudGVyJztcbiAgICAgICAgICAgIGNvbnN0IGVzY2FwZSA9ICdFc2NhcGUnO1xuXG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBvbiBwcmVzc2luZyBlc2NhcGVcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBlc2NhcGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHN1Ym1pdCBpdGVtIHdoZW4gZm9jdXMgaXMgb24gYW4gaXRlbSBpbiB0aGUgbGlzdCBhbmQgZW50ZXIgaXMgcHJlc3NlZFxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IGVudGVyICYmIGZvY3VzZWRJZCAhPT0gdGhpcy5zZWFyY2hJZCkge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pdChmb2N1c2VkSWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBvbmx5IGhhbmRsZSB0YWIgb3IgYXJyb3cga2V5cHJlc3NlcyB3aGVuIGl0ZW1zIGFyZSBzaG93biBhbmQgdGhlIG1vdXNlIGlzIG5vdCBvbiB0aGUgbGlzdFxuICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDAgJiYgIW1vdXNlT25MaXN0KSB7XG4gICAgICAgICAgICAgIC8vIGhhbmRsZSBtb3ZpbmcgZG93biBpbiB0aGUgbGlzdCB3aXRoIGFycm93IGRvd24gb3IgdGFiXG4gICAgICAgICAgICAgIGlmIChjb2RlID09PSBkb3duIHx8IChjb2RlID09PSB0YWIgJiYgIXNoaWZ0S2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCB3aGVuIGZvY3VzIGlzIG9uIHNlYXJjaCBib3hcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZElkID09PSB0aGlzLnNlYXJjaElkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaXRlbXNbMF0uaWQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSWQpO1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QgaWYgZm9jdXMgaXMgbm90IG9uIGxhc3QgaXRlbVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ICsgMSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSXRlbUlkJC5uZXh0KGl0ZW1zW2ZvY3VzZWRJbmRleCArIDFdLmlkKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnV0dG9uSW50b1ZpZXcoZm9jdXNlZElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1vdmluZyB1cCBpbiB0aGUgbGlzdCB3aXRoIHVwIGFycm93IHVwIG9yIHNoaWZ0K3RhYlxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjb2RlID09PSB1cCB8fCAoY29kZSA9PT0gdGFiICYmIHNoaWZ0S2V5KSkgJiYgZm9jdXNlZElkICE9PSB0aGlzLnNlYXJjaElkKSB7XG4gICAgICAgICAgICAgICAgLy8gbW92ZSB0byBwcmV2aW91cyBpdGVtIGlmIGZvY3VzIGlzIG5vdCBvbiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaXRlbXNbZm9jdXNlZEluZGV4IC0gMV0uaWQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSWQpO1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBzZWFyY2ggYm94IGlmIGZvY3VzIGlzIG9uIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNlYXJjaFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoVGVybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChmb2N1c2VkSXRlbUlkKSA9PiB7XG4gICAgICAgIGlmICghc2VhcmNoVGVybSkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dCh0aGlzLml0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGV4dC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9VcHBlckNhc2UoKSkpO1xuXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJC5uZXh0KGZpbHRlcmVkSXRlbXMpO1xuXG4gICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBzZWFyY2ggYm94IGlmIGZpbHRlcmVkIGxpc3QgbGVuZ3RoIGlzIDAgb3IgcHJldmlvdXNseSBmb2N1c2VkIGl0ZW0gaXMgbm90IGluIGZpbHRlcmVkIGxpc3QgYW55bW9yZVxuICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCB8fCAhZmlsdGVyZWRJdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlkID09PSBmb2N1c2VkSXRlbUlkKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW92ZSBzY3JvbGxpbmcgYnV0dG9uIGludG8gdmlldyB0byBlbmQgb2YgcXVldWUsIHNvIHRoYXQgRE9NIGNhbiBiZSB1cGRhdGVkIGZpcnN0XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsQnV0dG9uSW50b1ZpZXcoZm9jdXNlZEl0ZW1JZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbEJ1dHRvbkludG9WaWV3KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgY29uc3QgZm9jdXNJdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKTtcbiAgICAgIGNvbnN0IGZvY3VzZWRCdXR0b24gPSB0aGlzLmJ1dHRvbnMudG9BcnJheSgpW2ZvY3VzSXRlbUluZGV4XTtcblxuICAgICAgaWYgKGZvY3VzZWRCdXR0b24pIHtcbiAgICAgICAgZm9jdXNlZEJ1dHRvbi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { CommonModule } from '@angular/common';
|
|
17
|
+
import { NgModule } from '@angular/core';
|
|
18
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
19
|
+
import { SearchableDropdownComponent } from './searchable-dropdown.component';
|
|
20
|
+
export class SearchableDropdownModule {
|
|
21
|
+
}
|
|
22
|
+
SearchableDropdownModule.decorators = [
|
|
23
|
+
{ type: NgModule, args: [{
|
|
24
|
+
declarations: [SearchableDropdownComponent],
|
|
25
|
+
imports: [CommonModule, ReactiveFormsModule],
|
|
26
|
+
exports: [SearchableDropdownComponent]
|
|
27
|
+
},] }
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9zZWFyY2hhYmxlLWRyb3Bkb3duL3NlYXJjaGFibGUtZHJvcGRvd24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFPOUUsTUFBTSxPQUFPLHdCQUF3Qjs7O1lBTHBDLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztnQkFDM0MsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDO2dCQUM1QyxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzthQUN2QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNlYXJjaGFibGVEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtTZWFyY2hhYmxlRHJvcGRvd25Db21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgZXhwb3J0czogW1NlYXJjaGFibGVEcm9wZG93bkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZURyb3Bkb3duTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
17
|
+
export class SearchableDropdownSelectComponent {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.width = 250;
|
|
20
|
+
this.itemSelected = new EventEmitter();
|
|
21
|
+
this.clearSelection = new EventEmitter();
|
|
22
|
+
}
|
|
23
|
+
onSelect(id) {
|
|
24
|
+
this.itemSelected.emit(id);
|
|
25
|
+
}
|
|
26
|
+
onClearSelection() {
|
|
27
|
+
this.clearSelection.emit();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
SearchableDropdownSelectComponent.decorators = [
|
|
31
|
+
{ type: Component, args: [{
|
|
32
|
+
selector: 'valtimo-searchable-dropdown-select',
|
|
33
|
+
template: "<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div class=\"d-flex flex-row align-items-center\" [style.height.px]=\"style === 'button' ? 34 : null\">\n <h5 class=\"selected-text\">{{ selectedText }} <b>{{ selectedTextValue }}</b></h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon fa fa-times text-danger\"></i>\n </button>\n </div>\n</ng-template>\n\n",
|
|
34
|
+
styles: [".selected-text{margin:0}.clear-icon{font-size:13px}"]
|
|
35
|
+
},] }
|
|
36
|
+
];
|
|
37
|
+
SearchableDropdownSelectComponent.propDecorators = {
|
|
38
|
+
style: [{ type: Input }],
|
|
39
|
+
items: [{ type: Input }],
|
|
40
|
+
buttonText: [{ type: Input }],
|
|
41
|
+
searchText: [{ type: Input }],
|
|
42
|
+
noResultsText: [{ type: Input }],
|
|
43
|
+
disabled: [{ type: Input }],
|
|
44
|
+
selectedText: [{ type: Input }],
|
|
45
|
+
selectedTextValue: [{ type: Input }],
|
|
46
|
+
clearSelectionButtonTitle: [{ type: Input }],
|
|
47
|
+
hasSelection: [{ type: Input }],
|
|
48
|
+
width: [{ type: Input }],
|
|
49
|
+
itemSelected: [{ type: Output }],
|
|
50
|
+
clearSelection: [{ type: Output }]
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3Qvc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQVF2QixNQUFNLE9BQU8saUNBQWlDO0lBTDlDO1FBZ0JXLFVBQUssR0FBRyxHQUFHLENBQUM7UUFFWCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBU2hELENBQUM7SUFQQyxRQUFRLENBQUMsRUFBVTtRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs7WUEzQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQ0FBb0M7Z0JBQzlDLG0zQkFBMEQ7O2FBRTNEOzs7b0JBRUUsS0FBSztvQkFDTCxLQUFLO3lCQUNMLEtBQUs7eUJBQ0wsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLEtBQUs7MkJBQ0wsS0FBSztnQ0FDTCxLQUFLO3dDQUNMLEtBQUs7MkJBQ0wsS0FBSztvQkFDTCxLQUFLOzJCQUVMLE1BQU07NkJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHJvcGRvd25CdXR0b25TdHlsZSwgRHJvcGRvd25JdGVtfSBmcm9tICdAdmFsdGltby9jb250cmFjdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVEcm9wZG93blNlbGVjdENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHN0eWxlOiBEcm9wZG93bkJ1dHRvblN0eWxlO1xuICBASW5wdXQoKSBpdGVtczogQXJyYXk8RHJvcGRvd25JdGVtPjtcbiAgQElucHV0KCkgYnV0dG9uVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5vUmVzdWx0c1RleHQ6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdGVkVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZFRleHRWYWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKSBjbGVhclNlbGVjdGlvbkJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhhc1NlbGVjdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgd2lkdGggPSAyNTA7XG5cbiAgQE91dHB1dCgpIGl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsZWFyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIG9uU2VsZWN0KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KGlkKTtcbiAgfVxuXG4gIG9uQ2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbi5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { CommonModule } from '@angular/common';
|
|
17
|
+
import { NgModule } from '@angular/core';
|
|
18
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
19
|
+
import { SearchableDropdownSelectComponent } from './searchable-dropdown-select.component';
|
|
20
|
+
import { SearchableDropdownModule } from '../searchable-dropdown/searchable-dropdown.module';
|
|
21
|
+
export class SearchableDropdownSelectModule {
|
|
22
|
+
}
|
|
23
|
+
SearchableDropdownSelectModule.decorators = [
|
|
24
|
+
{ type: NgModule, args: [{
|
|
25
|
+
declarations: [SearchableDropdownSelectComponent],
|
|
26
|
+
imports: [CommonModule, ReactiveFormsModule, SearchableDropdownModule],
|
|
27
|
+
exports: [SearchableDropdownSelectComponent]
|
|
28
|
+
},] }
|
|
29
|
+
];
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3Qvc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0YsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFPM0YsTUFBTSxPQUFPLDhCQUE4Qjs7O1lBTDFDLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDakQsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixDQUFDO2dCQUN0RSxPQUFPLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQzthQUM3QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNlYXJjaGFibGVEcm9wZG93blNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7U2VhcmNoYWJsZURyb3Bkb3duTW9kdWxlfSBmcm9tICcuLi9zZWFyY2hhYmxlLWRyb3Bkb3duL3NlYXJjaGFibGUtZHJvcGRvd24ubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2VhcmNoYWJsZURyb3Bkb3duU2VsZWN0Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgU2VhcmNoYWJsZURyb3Bkb3duTW9kdWxlXSxcbiAgZXhwb3J0czogW1NlYXJjaGFibGVEcm9wZG93blNlbGVjdENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZURyb3Bkb3duU2VsZWN0TW9kdWxlIHt9XG4iXX0=
|