verben-authentication-ui 1.1.0 → 1.1.1
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 +23 -1
- package/esm2022/src/lib/base/core/base-data-page.facade.mjs +215 -0
- package/esm2022/src/lib/base/core/base-data-page.service.mjs +103 -0
- package/esm2022/src/lib/base/core/base-data-page.state.mjs +203 -0
- package/esm2022/src/lib/base/handlers/filter-handler.service.mjs +53 -0
- package/esm2022/src/lib/base/handlers/search-handler.service.mjs +31 -0
- package/esm2022/src/lib/base/handlers/sort-handler.service.mjs +49 -0
- package/esm2022/src/lib/base/models/api-payload.mjs +4 -0
- package/esm2022/src/lib/base/models/page-config.interface.mjs +2 -0
- package/esm2022/src/lib/base/public-api.mjs +14 -6
- package/esm2022/src/lib/base/utils/column-helpers.mjs +45 -0
- package/esm2022/src/lib/components/button/button.component.mjs +3 -3
- package/esm2022/src/lib/components/forgot-password/forgot-password.component.mjs +2 -2
- package/esm2022/src/lib/components/mail/mail.component.mjs +3 -3
- package/esm2022/src/lib/components/mail-validation/mail-validation.component.mjs +5 -5
- package/esm2022/src/lib/components/o-auth/o-auth.component.mjs +3 -3
- package/esm2022/src/lib/components/otp-input/otp-input.component.mjs +2 -2
- package/esm2022/src/lib/components/reset-password/reset-password.component.mjs +2 -2
- package/esm2022/src/lib/components/role-control/base-table-style.mjs +6 -6
- package/esm2022/src/lib/components/role-control/role-control.component.mjs +3 -3
- package/esm2022/src/lib/components/sign-in/sign-in.component.mjs +4 -4
- package/esm2022/src/lib/components/sign-up/sign-up.component.mjs +6 -6
- package/esm2022/src/lib/components/sso/base-table-style.mjs +6 -6
- package/esm2022/src/lib/components/sso/sso-form/sso-form.component.mjs +3 -3
- package/esm2022/src/lib/components/sso/sso.component.mjs +3 -3
- package/esm2022/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.mjs +4 -4
- package/esm2022/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.mjs +5 -5
- package/esm2022/src/lib/components/user-management/public-api.mjs +2 -1
- package/esm2022/src/lib/components/user-management/user-management-card/user-management-card.component.mjs +23 -0
- package/esm2022/src/lib/components/user-management/user-management-form/user-management-form.component.mjs +53 -91
- package/esm2022/src/lib/components/user-management/user-management-table/user-management-table.component.mjs +68 -0
- package/esm2022/src/lib/components/user-management/user-management.component.mjs +98 -509
- package/esm2022/src/lib/components/user-management/user-management.module.mjs +11 -80
- package/esm2022/src/lib/components/user-management/user-status-badge/user-status-badge.component.mjs +8 -6
- package/esm2022/src/lib/components/user-management/user.config.mjs +94 -0
- package/esm2022/src/lib/components/user-management/user.facade.mjs +118 -0
- package/esm2022/src/lib/components/user-management/user.service.mjs +60 -0
- package/esm2022/src/lib/components/user-management/user.state.mjs +33 -0
- package/esm2022/src/lib/components/user-request/user-request.component.mjs +8 -8
- package/esm2022/src/lib/components/user-request-approval/public-api.mjs +2 -2
- package/esm2022/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +8 -6
- package/esm2022/src/lib/components/user-request-approval/user-access-request.config.mjs +79 -0
- package/esm2022/src/lib/components/user-request-approval/user-access-request.facade.mjs +123 -0
- package/esm2022/src/lib/components/user-request-approval/user-access-request.service.mjs +74 -0
- package/esm2022/src/lib/components/user-request-approval/user-access-request.state.mjs +26 -0
- package/esm2022/src/lib/components/user-request-approval/user-request-approval-card/user-request-approval-card.component.mjs +23 -0
- package/esm2022/src/lib/components/user-request-approval/user-request-approval-form/user-request-approval-form.component.mjs +124 -0
- package/esm2022/src/lib/components/user-request-approval/user-request-approval-table/user-request-approval-table.component.mjs +44 -0
- package/esm2022/src/lib/components/user-request-approval/user-request-approval.component.mjs +101 -273
- package/esm2022/src/lib/components/user-request-approval/user-request-approval.module.mjs +10 -74
- package/fesm2022/verben-authentication-ui-src-lib-base.mjs +596 -214
- package/fesm2022/verben-authentication-ui-src-lib-base.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-button.mjs +2 -2
- package/fesm2022/verben-authentication-ui-src-lib-components-button.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-forgot-password.mjs +2 -2
- package/fesm2022/verben-authentication-ui-src-lib-components-forgot-password.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-mail-validation.mjs +4 -4
- package/fesm2022/verben-authentication-ui-src-lib-components-mail-validation.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-mail.mjs +2 -2
- package/fesm2022/verben-authentication-ui-src-lib-components-mail.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-o-auth.mjs +2 -2
- package/fesm2022/verben-authentication-ui-src-lib-components-o-auth.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-otp-input.mjs +2 -2
- package/fesm2022/verben-authentication-ui-src-lib-components-otp-input.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-reset-password.mjs +2 -2
- package/fesm2022/verben-authentication-ui-src-lib-components-reset-password.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-role-control.mjs +7 -7
- package/fesm2022/verben-authentication-ui-src-lib-components-role-control.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-sign-in.mjs +3 -3
- package/fesm2022/verben-authentication-ui-src-lib-components-sign-in.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-sign-up.mjs +5 -5
- package/fesm2022/verben-authentication-ui-src-lib-components-sign-up.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-sso.mjs +9 -9
- package/fesm2022/verben-authentication-ui-src-lib-components-sso.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-otp.mjs +3 -3
- package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-otp.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-setup.mjs +4 -4
- package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-setup.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-user-management.mjs +468 -831
- package/fesm2022/verben-authentication-ui-src-lib-components-user-management.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-user-request-approval.mjs +509 -952
- package/fesm2022/verben-authentication-ui-src-lib-components-user-request-approval.mjs.map +1 -1
- package/fesm2022/verben-authentication-ui-src-lib-components-user-request.mjs +7 -7
- package/fesm2022/verben-authentication-ui-src-lib-components-user-request.mjs.map +1 -1
- package/package.json +42 -48
- package/src/lib/base/README.md +99 -0
- package/src/lib/base/core/base-data-page.facade.d.ts +65 -0
- package/src/lib/base/core/base-data-page.service.d.ts +43 -0
- package/src/lib/base/core/base-data-page.state.d.ts +68 -0
- package/src/lib/base/handlers/filter-handler.service.d.ts +13 -0
- package/src/lib/base/handlers/search-handler.service.d.ts +20 -0
- package/src/lib/base/handlers/sort-handler.service.d.ts +13 -0
- package/src/lib/base/models/api-payload.d.ts +2 -0
- package/src/lib/base/models/page-config.interface.d.ts +21 -0
- package/src/lib/base/public-api.d.ts +9 -5
- package/src/lib/base/utils/column-helpers.d.ts +16 -0
- package/src/lib/components/user-management/public-api.d.ts +1 -0
- package/src/lib/components/user-management/user-management-card/user-management-card.component.d.ts +11 -0
- package/src/lib/components/user-management/user-management-form/user-management-form.component.d.ts +12 -14
- package/src/lib/components/user-management/user-management-table/user-management-table.component.d.ts +30 -0
- package/src/lib/components/user-management/user-management.component.d.ts +28 -124
- package/src/lib/components/user-management/user-management.module.d.ts +8 -8
- package/src/lib/components/user-management/user-status-badge/user-status-badge.component.d.ts +1 -1
- package/src/lib/components/user-management/user.config.d.ts +13 -0
- package/src/lib/components/user-management/user.facade.d.ts +42 -0
- package/src/lib/components/user-management/user.service.d.ts +26 -0
- package/src/lib/components/user-management/user.state.d.ts +19 -0
- package/src/lib/components/user-request-approval/public-api.d.ts +1 -1
- package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.d.ts +1 -1
- package/src/lib/components/user-request-approval/user-access-request.config.d.ts +13 -0
- package/src/lib/components/user-request-approval/user-access-request.facade.d.ts +36 -0
- package/src/lib/components/user-request-approval/user-access-request.service.d.ts +30 -0
- package/src/lib/components/user-request-approval/user-access-request.state.d.ts +16 -0
- package/src/lib/components/user-request-approval/user-request-approval-card/user-request-approval-card.component.d.ts +11 -0
- package/src/lib/components/user-request-approval/user-request-approval-form/user-request-approval-form.component.d.ts +47 -0
- package/src/lib/components/user-request-approval/user-request-approval-table/user-request-approval-table.component.d.ts +20 -0
- package/src/lib/components/user-request-approval/user-request-approval.component.d.ts +29 -68
- package/src/lib/components/user-request-approval/user-request-approval.module.d.ts +7 -6
- package/esm2022/src/lib/base/base-data.component.mjs +0 -80
- package/esm2022/src/lib/base/base-data.facade.mjs +0 -130
- package/esm2022/src/lib/base/base-data.service.mjs +0 -21
- package/esm2022/src/lib/base/base-data.state.mjs +0 -74
- package/esm2022/src/lib/base/models.mjs +0 -2
- package/esm2022/src/lib/components/user-management/base-table-style.mjs +0 -53
- package/esm2022/src/lib/components/user-management/services/user-management.service.mjs +0 -110
- package/esm2022/src/lib/components/user-management/user-management.columns.mjs +0 -53
- package/esm2022/src/lib/components/user-request-approval/access-request.columns.mjs +0 -29
- package/esm2022/src/lib/components/user-request-approval/base-table-style.mjs +0 -53
- package/esm2022/src/lib/components/user-request-approval/facades/user-access-request.facade.mjs +0 -260
- package/esm2022/src/lib/components/user-request-approval/helper.mjs +0 -56
- package/esm2022/src/lib/components/user-request-approval/services/user-access-request.service.mjs +0 -92
- package/esm2022/src/lib/components/user-request-approval/states/user-access-request.state.mjs +0 -92
- package/esm2022/src/lib/components/user-request-approval/user-request-form/user-request-form.component.mjs +0 -105
- package/esm2022/src/lib/components/user-request-process/index.mjs +0 -2
- package/esm2022/src/lib/components/user-request-process/public-api.mjs +0 -3
- package/esm2022/src/lib/components/user-request-process/user-request-process.component.mjs +0 -11
- package/esm2022/src/lib/components/user-request-process/user-request-process.module.mjs +0 -18
- package/esm2022/src/lib/components/user-request-process/verben-authentication-ui-src-lib-components-user-request-process.mjs +0 -5
- package/fesm2022/verben-authentication-ui-src-lib-components-user-request-process.mjs +0 -34
- package/fesm2022/verben-authentication-ui-src-lib-components-user-request-process.mjs.map +0 -1
- package/src/lib/base/base-data.component.d.ts +0 -32
- package/src/lib/base/base-data.facade.d.ts +0 -27
- package/src/lib/base/base-data.service.d.ts +0 -14
- package/src/lib/base/base-data.state.d.ts +0 -28
- package/src/lib/base/models.d.ts +0 -11
- package/src/lib/components/user-management/base-table-style.d.ts +0 -1
- package/src/lib/components/user-management/services/user-management.service.d.ts +0 -44
- package/src/lib/components/user-management/user-management.columns.d.ts +0 -3
- package/src/lib/components/user-request-approval/access-request.columns.d.ts +0 -3
- package/src/lib/components/user-request-approval/base-table-style.d.ts +0 -1
- package/src/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +0 -39
- package/src/lib/components/user-request-approval/helper.d.ts +0 -7
- package/src/lib/components/user-request-approval/services/user-access-request.service.d.ts +0 -64
- package/src/lib/components/user-request-approval/states/user-access-request.state.d.ts +0 -35
- package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.d.ts +0 -34
- package/src/lib/components/user-request-process/index.d.ts +0 -1
- package/src/lib/components/user-request-process/public-api.d.ts +0 -2
- package/src/lib/components/user-request-process/user-request-process.component.d.ts +0 -5
- package/src/lib/components/user-request-process/user-request-process.module.d.ts +0 -7
|
@@ -1,111 +1,73 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, effect, input, Output } from '@angular/core';
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { ObjectState, Status } from 'verben-authentication-ui/src/lib/models';
|
|
5
|
+
import { DropDownModule, VerbenaButtonModule, VerbenaInputModule } from 'verben-ng-ui';
|
|
6
|
+
import { USER_CONFIG } from '../user.config';
|
|
3
7
|
import * as i0 from "@angular/core";
|
|
4
8
|
import * as i1 from "@angular/forms";
|
|
5
|
-
import * as i2 from "
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
import * as i2 from "verben-ng-ui";
|
|
10
|
+
/**
|
|
11
|
+
* Form for editing a user's role, tags, and status.
|
|
12
|
+
* Identity fields are read-only.
|
|
13
|
+
*/
|
|
8
14
|
export class UserManagementFormComponent {
|
|
9
15
|
fb;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (value?.data) {
|
|
16
|
-
// Convert comma-separated warehouse codes back to array for dropdown
|
|
17
|
-
// const warehouseCodes = value.data.Warehouses
|
|
18
|
-
// ? value.data.Warehouses.split(',').filter((code: string) => code.trim())
|
|
19
|
-
// : [];
|
|
20
|
-
this.form.patchValue({
|
|
21
|
-
MailAddress: value.data.MailAddress || '',
|
|
22
|
-
FirstName: value.data.FirstName || '',
|
|
23
|
-
LastName: value.data.LastName || '',
|
|
24
|
-
PhoneNumber: value.data.PhoneNumber || '',
|
|
25
|
-
// Address: value.data.Address || '',
|
|
26
|
-
RoleID: value.data.RoleID || '',
|
|
27
|
-
Tags: value.data.Tags || [],
|
|
28
|
-
Status: value.data.Status || Status.Active,
|
|
29
|
-
// Warehouses: warehouseCodes,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
this.form.reset();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
roles = [];
|
|
37
|
-
tags = [];
|
|
38
|
-
switchView = new EventEmitter();
|
|
39
|
-
onFormSave = new EventEmitter();
|
|
16
|
+
user = input();
|
|
17
|
+
roles = input([]);
|
|
18
|
+
tags = input([]);
|
|
19
|
+
save = new EventEmitter();
|
|
20
|
+
switchToTable = new EventEmitter();
|
|
40
21
|
form;
|
|
41
22
|
statusOptions = Object.values(Status);
|
|
42
|
-
|
|
43
|
-
constructor(fb, userManagementService, envService) {
|
|
23
|
+
constructor(fb) {
|
|
44
24
|
this.fb = fb;
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
25
|
+
this.form = this.fb.group(USER_CONFIG.formGroupConfig.controls);
|
|
26
|
+
effect(() => {
|
|
27
|
+
const user = this.user();
|
|
28
|
+
if (user && this.form) {
|
|
29
|
+
this.form.patchValue({
|
|
30
|
+
MailAddress: user.MailAddress || '',
|
|
31
|
+
FirstName: user.FirstName || '',
|
|
32
|
+
LastName: user.LastName || '',
|
|
33
|
+
PhoneNumber: user.PhoneNumber || '',
|
|
34
|
+
RoleID: user.RoleID || '',
|
|
35
|
+
Tags: user.Tags || [],
|
|
36
|
+
Status: user.Status || Status.Active,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
57
39
|
});
|
|
58
40
|
}
|
|
59
|
-
ngOnInit() {
|
|
60
|
-
// this.loadWarehouses();
|
|
61
|
-
}
|
|
62
|
-
// async loadWarehouses(): Promise<void> {
|
|
63
|
-
// try {
|
|
64
|
-
// this.warehouses = await this.userManagementService.loadEntities<Warehouse>(
|
|
65
|
-
// 'Warehouse',
|
|
66
|
-
// ['Name', 'Code'],
|
|
67
|
-
// this.envService.environment.RevenueAPI
|
|
68
|
-
// );
|
|
69
|
-
// } catch (error) {
|
|
70
|
-
// console.error('Error loading warehouses:', error);
|
|
71
|
-
// this.warehouses = [];
|
|
72
|
-
// }
|
|
73
|
-
// }
|
|
74
|
-
// onWarehouseChange(event: DropdownChangeEvent): void {
|
|
75
|
-
// // Convert array of warehouse codes to comma-separated string
|
|
76
|
-
// const selectedCodes = event.value as string[];
|
|
77
|
-
// const commaSeparated = selectedCodes ? selectedCodes.join(',') : '';
|
|
78
|
-
// // Update the form with the comma-separated value for saving
|
|
79
|
-
// this.form.patchValue({
|
|
80
|
-
// Warehouses: commaSeparated
|
|
81
|
-
// }, { emitEvent: false });
|
|
82
|
-
// }
|
|
83
41
|
onSave() {
|
|
84
42
|
if (this.form.valid) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
43
|
+
const merged = {
|
|
44
|
+
...this.user(),
|
|
45
|
+
...this.form.getRawValue(),
|
|
46
|
+
DataState: this.user()?.DataState === ObjectState.New
|
|
47
|
+
? ObjectState.New
|
|
48
|
+
: ObjectState.Changed,
|
|
49
|
+
};
|
|
50
|
+
this.save.emit(merged);
|
|
88
51
|
}
|
|
89
52
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
console.log('Delete requested');
|
|
53
|
+
onSwitchToTable() {
|
|
54
|
+
this.switchToTable.emit();
|
|
93
55
|
}
|
|
94
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementFormComponent, deps: [{ token: i1.FormBuilder }
|
|
95
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
56
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementFormComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
57
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: UserManagementFormComponent, isStandalone: true, selector: "lib-user-management-form", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, roles: { classPropertyName: "roles", publicName: "roles", isSignal: true, isRequired: false, transformFunction: null }, tags: { classPropertyName: "tags", publicName: "tags", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", switchToTable: "switchToTable" }, ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSave()\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\">\n <verbena-input label=\"First Name:\" name=\"FirstName\" type=\"text\" formControlName=\"FirstName\" [readOnly]=\"true\" />\n <verbena-input label=\"Last Name:\" name=\"LastName\" type=\"text\" formControlName=\"LastName\" [readOnly]=\"true\" />\n <verbena-input label=\"Phone Number:\" name=\"PhoneNumber\" type=\"tel\" formControlName=\"PhoneNumber\" [readOnly]=\"true\" />\n <verbena-input name=\"MailAddress\" label=\"E-Mail Address:\" [type]=\"'email'\" formControlName=\"MailAddress\"\n [readOnly]=\"true\" />\n\n <div class=\"space-y-1\">\n <label for=\"role\">Role</label>\n <verben-drop-down styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"\" [options]=\"roles()\" id=\"role\" optionLabel=\"Name\" optionValue=\"Code\" formControlName=\"RoleID\"\n class=\"form-control\"></verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"tags\">Tags</label>\n <verben-drop-down styleClass=\"w-full\" width=\"100%\" [multiselect]=\"true\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"\" [options]=\"tags()\" id=\"tags\" optionLabel=\"Name\" optionValue=\"Code\" formControlName=\"Tags\"\n class=\"form-control\"></verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"status\">Status</label>\n <verben-drop-down styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\" [filter]=\"false\" [showClear]=\"false\"\n placeholder=\"\" [options]=\"statusOptions\" id=\"status\" formControlName=\"Status\"\n class=\"form-control\"></verben-drop-down>\n </div>\n\n <!-- Form Actions -->\n <div class=\"flex justify-end gap-4 my-2 items-center\">\n <verbena-button styleType=\"ylw-outline\" text=\"Switch To Table\" (click)=\"onSwitchToTable()\" type=\"button\">\n </verbena-button>\n <verbena-button text=\"Save\" type=\"submit\" bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\"\n pd=\"10px 20px\" width=\"114px\" height=\"39px\"></verbena-button>\n </div>\n</form>\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: VerbenaInputModule }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "ngmodule", type: VerbenaButtonModule }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["type", "text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "ngmodule", type: DropDownModule }, { kind: "component", type: i2.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }] });
|
|
96
58
|
}
|
|
97
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementFormComponent, decorators: [{
|
|
98
60
|
type: Component,
|
|
99
|
-
args: [{ selector: 'lib-user-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
61
|
+
args: [{ selector: 'lib-user-management-form', standalone: true, imports: [
|
|
62
|
+
CommonModule,
|
|
63
|
+
ReactiveFormsModule,
|
|
64
|
+
VerbenaInputModule,
|
|
65
|
+
VerbenaButtonModule,
|
|
66
|
+
DropDownModule,
|
|
67
|
+
], template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSave()\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\">\n <verbena-input label=\"First Name:\" name=\"FirstName\" type=\"text\" formControlName=\"FirstName\" [readOnly]=\"true\" />\n <verbena-input label=\"Last Name:\" name=\"LastName\" type=\"text\" formControlName=\"LastName\" [readOnly]=\"true\" />\n <verbena-input label=\"Phone Number:\" name=\"PhoneNumber\" type=\"tel\" formControlName=\"PhoneNumber\" [readOnly]=\"true\" />\n <verbena-input name=\"MailAddress\" label=\"E-Mail Address:\" [type]=\"'email'\" formControlName=\"MailAddress\"\n [readOnly]=\"true\" />\n\n <div class=\"space-y-1\">\n <label for=\"role\">Role</label>\n <verben-drop-down styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"\" [options]=\"roles()\" id=\"role\" optionLabel=\"Name\" optionValue=\"Code\" formControlName=\"RoleID\"\n class=\"form-control\"></verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"tags\">Tags</label>\n <verben-drop-down styleClass=\"w-full\" width=\"100%\" [multiselect]=\"true\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"\" [options]=\"tags()\" id=\"tags\" optionLabel=\"Name\" optionValue=\"Code\" formControlName=\"Tags\"\n class=\"form-control\"></verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"status\">Status</label>\n <verben-drop-down styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\" [filter]=\"false\" [showClear]=\"false\"\n placeholder=\"\" [options]=\"statusOptions\" id=\"status\" formControlName=\"Status\"\n class=\"form-control\"></verben-drop-down>\n </div>\n\n <!-- Form Actions -->\n <div class=\"flex justify-end gap-4 my-2 items-center\">\n <verbena-button styleType=\"ylw-outline\" text=\"Switch To Table\" (click)=\"onSwitchToTable()\" type=\"button\">\n </verbena-button>\n <verbena-button text=\"Save\" type=\"submit\" bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\"\n pd=\"10px 20px\" width=\"114px\" height=\"39px\"></verbena-button>\n </div>\n</form>\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
68
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { save: [{
|
|
107
69
|
type: Output
|
|
108
|
-
}],
|
|
70
|
+
}], switchToTable: [{
|
|
109
71
|
type: Output
|
|
110
72
|
}] } });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvY29tcG9uZW50cy91c2VyLW1hbmFnZW1lbnQvdXNlci1tYW5hZ2VtZW50LWZvcm0vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvY29tcG9uZW50cy91c2VyLW1hbmFnZW1lbnQvdXNlci1tYW5hZ2VtZW50LWZvcm0vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQVEsTUFBTSxFQUFhLE1BQU0seUNBQXlDLENBQUM7Ozs7OztBQXNCbEYsTUFBTSxPQUFPLDJCQUEyQjtJQXFDNUI7SUFDQTtJQUNBO0lBdENWLCtCQUErQjtJQUMvQixrQ0FBa0M7SUFFbEMsSUFBYSxXQUFXLENBQUMsS0FBc0I7UUFDN0MsSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEIscUVBQXFFO1lBQ3JFLCtDQUErQztZQUMvQyw2RUFBNkU7WUFDN0UsVUFBVTtZQUVWLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNuQixXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDekMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQ3JDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO2dCQUNuQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDekMscUNBQXFDO2dCQUNyQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDL0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzNCLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTTtnQkFDMUMsOEJBQThCO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUNRLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsSUFBSSxHQUFVLEVBQUUsQ0FBQztJQUVoQixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUMzQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFFekQsSUFBSSxDQUFZO0lBQ2hCLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLGdDQUFnQztJQUVoQyxZQUNVLEVBQWUsRUFDZixxQkFBNEMsRUFDNUMsVUFBOEI7UUFGOUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFFdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ25DLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckMscUNBQXFDO1lBQ3JDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDVixvQkFBb0I7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTix5QkFBeUI7SUFDM0IsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxVQUFVO0lBQ1Ysa0ZBQWtGO0lBQ2xGLHFCQUFxQjtJQUNyQiwwQkFBMEI7SUFDMUIsK0NBQStDO0lBQy9DLFNBQVM7SUFDVCxzQkFBc0I7SUFDdEIseURBQXlEO0lBQ3pELDRCQUE0QjtJQUM1QixNQUFNO0lBQ04sSUFBSTtJQUVKLHdEQUF3RDtJQUN4RCxrRUFBa0U7SUFDbEUsbURBQW1EO0lBQ25ELHlFQUF5RTtJQUV6RSxpRUFBaUU7SUFDakUsMkJBQTJCO0lBQzNCLGlDQUFpQztJQUNqQyw4QkFBOEI7SUFDOUIsSUFBSTtJQUVKLE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsa0NBQWtDO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixvQkFBb0I7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7d0dBN0ZVLDJCQUEyQjs0RkFBM0IsMkJBQTJCLG9NQ3hCeEMscXhFQStDQTs7NEZEdkJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx1QkFBdUI7cUpBUXBCLFdBQVc7c0JBQXZCLEtBQUs7Z0JBc0JHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb2xlLCBTdGF0dXMsIFRhZywgVXNlciB9IGZyb20gJ3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDYXJkRGF0YSwgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91c2VyLW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbmludGVyZmFjZSBVc2VyRm9ybURhdGEge1xuICBNYWlsQWRkcmVzczogc3RyaW5nO1xuICBGaXJzdE5hbWU6IHN0cmluZztcbiAgTGFzdE5hbWU6IHN0cmluZztcbiAgUGhvbmVOdW1iZXI6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdhcmVob3VzZSB7XG4gIE5hbWU6IHN0cmluZztcbiAgQ29kZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdXNlci1yZXF1ZXN0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VtZW50Rm9ybUNvbXBvbmVudCB7XG4gIC8vIEBJbnB1dCgpIHJvbGVzOiBSb2xlW10gPSBbXTtcbiAgLy8gQElucHV0KCkgc3RhdHVzOiBTdGF0dXNbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldCBjdXJyZW50RGF0YSh2YWx1ZTogQ2FyZERhdGEgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlPy5kYXRhKSB7XG4gICAgICAvLyBDb252ZXJ0IGNvbW1hLXNlcGFyYXRlZCB3YXJlaG91c2UgY29kZXMgYmFjayB0byBhcnJheSBmb3IgZHJvcGRvd25cbiAgICAgIC8vIGNvbnN0IHdhcmVob3VzZUNvZGVzID0gdmFsdWUuZGF0YS5XYXJlaG91c2VzXG4gICAgICAvLyAgID8gdmFsdWUuZGF0YS5XYXJlaG91c2VzLnNwbGl0KCcsJykuZmlsdGVyKChjb2RlOiBzdHJpbmcpID0+IGNvZGUudHJpbSgpKVxuICAgICAgLy8gICA6IFtdO1xuXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIE1haWxBZGRyZXNzOiB2YWx1ZS5kYXRhLk1haWxBZGRyZXNzIHx8ICcnLFxuICAgICAgICBGaXJzdE5hbWU6IHZhbHVlLmRhdGEuRmlyc3ROYW1lIHx8ICcnLFxuICAgICAgICBMYXN0TmFtZTogdmFsdWUuZGF0YS5MYXN0TmFtZSB8fCAnJyxcbiAgICAgICAgUGhvbmVOdW1iZXI6IHZhbHVlLmRhdGEuUGhvbmVOdW1iZXIgfHwgJycsXG4gICAgICAgIC8vIEFkZHJlc3M6IHZhbHVlLmRhdGEuQWRkcmVzcyB8fCAnJyxcbiAgICAgICAgUm9sZUlEOiB2YWx1ZS5kYXRhLlJvbGVJRCB8fCAnJyxcbiAgICAgICAgVGFnczogdmFsdWUuZGF0YS5UYWdzIHx8IFtdLFxuICAgICAgICBTdGF0dXM6IHZhbHVlLmRhdGEuU3RhdHVzIHx8IFN0YXR1cy5BY3RpdmUsXG4gICAgICAgIC8vIFdhcmVob3VzZXM6IHdhcmVob3VzZUNvZGVzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSByb2xlczogUm9sZVtdID0gW107XG4gIEBJbnB1dCgpIHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgQE91dHB1dCgpIHN3aXRjaFZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPHVuZGVmaW5lZD4oKTtcbiAgQE91dHB1dCgpIG9uRm9ybVNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpYWw8VXNlcj4+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBzdGF0dXNPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhTdGF0dXMpO1xuICAvLyB3YXJlaG91c2VzOiBXYXJlaG91c2VbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdXNlck1hbmFnZW1lbnRTZXJ2aWNlOiBVc2VyTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBNYWlsQWRkcmVzczogWycnLCB7IHJlYWRvbmx5OiB0cnVlIH1dLFxuICAgICAgRmlyc3ROYW1lOiBbJycsIHsgcmVhZG9ubHk6IHRydWUgfV0sXG4gICAgICBMYXN0TmFtZTogWycnLCB7IHJlYWRvbmx5OiB0cnVlIH1dLFxuICAgICAgUGhvbmVOdW1iZXI6IFsnJywgeyByZWFkb25seTogdHJ1ZSB9XSxcbiAgICAgIC8vIEFkZHJlc3M6IFsnJywgeyByZWFkb25seTogdHJ1ZSB9XSxcbiAgICAgIFN0YXR1czogWycnLCB7IHJlYWRvbmx5OiB0cnVlIH1dLFxuICAgICAgUm9sZUlEOiBbJyddLFxuICAgICAgVGFnczogW1tdXSxcbiAgICAgIC8vIFdhcmVob3VzZXM6IFtbXV0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvYWRXYXJlaG91c2VzKCk7XG4gIH1cblxuICAvLyBhc3luYyBsb2FkV2FyZWhvdXNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICB0cnkge1xuICAvLyAgICAgdGhpcy53YXJlaG91c2VzID0gYXdhaXQgdGhpcy51c2VyTWFuYWdlbWVudFNlcnZpY2UubG9hZEVudGl0aWVzPFdhcmVob3VzZT4oXG4gIC8vICAgICAgICdXYXJlaG91c2UnLFxuICAvLyAgICAgICBbJ05hbWUnLCAnQ29kZSddLFxuICAvLyAgICAgICB0aGlzLmVudlNlcnZpY2UuZW52aXJvbm1lbnQuUmV2ZW51ZUFQSVxuICAvLyAgICAgKTtcbiAgLy8gICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyB3YXJlaG91c2VzOicsIGVycm9yKTtcbiAgLy8gICAgIHRoaXMud2FyZWhvdXNlcyA9IFtdO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIC8vIG9uV2FyZWhvdXNlQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gIC8vICAgLy8gQ29udmVydCBhcnJheSBvZiB3YXJlaG91c2UgY29kZXMgdG8gY29tbWEtc2VwYXJhdGVkIHN0cmluZ1xuICAvLyAgIGNvbnN0IHNlbGVjdGVkQ29kZXMgPSBldmVudC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgLy8gICBjb25zdCBjb21tYVNlcGFyYXRlZCA9IHNlbGVjdGVkQ29kZXMgPyBzZWxlY3RlZENvZGVzLmpvaW4oJywnKSA6ICcnO1xuXG4gIC8vICAgLy8gVXBkYXRlIHRoZSBmb3JtIHdpdGggdGhlIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZSBmb3Igc2F2aW5nXG4gIC8vICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAvLyAgICAgV2FyZWhvdXNlczogY29tbWFTZXBhcmF0ZWRcbiAgLy8gICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIC8vIH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50IHdpdGggZm9ybSB2YWx1ZVxuICAgICAgY29uc29sZS5sb2coJ0Zvcm0gc2F2ZWQ6JywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgICAgIHRoaXMub25Gb3JtU2F2ZS5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25EZWxldGUoKTogdm9pZCB7XG4gICAgLy8gRW1pdCBkZWxldGUgZXZlbnRcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlIHJlcXVlc3RlZCcpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImZsZXggZmxleC1jb2wgcHgtMyBwYi0zIHJvdW5kZWQteGwgaC1mdWxsIHctZnVsbCByZWxhdGl2ZSBzcGFjZS15LTRcIj5cbiAgPHZlcmJlbmEtaW5wdXQgbGFiZWw9XCJGaXJzdCBOYW1lOlwiIG5hbWU9XCJGaXJzdE5hbWVcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIkZpcnN0TmFtZVwiIC8+XG4gIDx2ZXJiZW5hLWlucHV0IGxhYmVsPVwiTGFzdCBOYW1lOlwiIG5hbWU9XCJMYXN0TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiTGFzdE5hbWVcIiAvPlxuICA8dmVyYmVuYS1pbnB1dCBsYWJlbD1cIlBob25lIE51bWJlcjpcIiBuYW1lPVwiUGhvbmVOdW1iZXJcIiB0eXBlPVwidGVsXCIgZm9ybUNvbnRyb2xOYW1lPVwiUGhvbmVOdW1iZXJcIiAvPlxuICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTWFpbEFkZHJlc3NcIiBsYWJlbD1cIkUtTWFpbCBBZGRyZXNzOlwiIFt0eXBlXT1cIidlbWFpbCdcIiBmb3JtQ29udHJvbE5hbWU9XCJNYWlsQWRkcmVzc1wiIC8+XG4gIDwhLS0gPHZlcmJlbmEtaW5wdXRcbiAgICBsYWJlbD1cIkFkZHJlc3NcIlxuICAgIG5hbWU9XCJBZGRyZXNzXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgZm9ybUNvbnRyb2xOYW1lPVwiQWRkcmVzc1wiXG4gIC8+IC0tPlxuXG4gIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICA8bGFiZWwgZm9yPVwicm9sZVwiPlJvbGU8L2xhYmVsPlxuXG4gICAgPHZlcmJlbi1kcm9wLWRvd24gbGFiZWw9XCJSb2xlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIHdpZHRoPVwiMTAwJVwiIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIlwiIFsob3B0aW9ucyldPVwicm9sZXNcIiBpZD1cInJvbGVcIiBvcHRpb25MYWJlbD1cIk5hbWVcIiBvcHRpb25WYWx1ZT1cIkNvZGVcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiUm9sZUlEXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICA8bGFiZWwgZm9yPVwidGFnc1wiPlRhZ3M8L2xhYmVsPlxuXG4gICAgPHZlcmJlbi1kcm9wLWRvd24gbGFiZWw9XCJUYWdzXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIHdpZHRoPVwiMTAwJVwiIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiXCIgWyhvcHRpb25zKV09XCJ0YWdzXCIgaWQ9XCJ0YWdzXCIgb3B0aW9uTGFiZWw9XCJOYW1lXCIgb3B0aW9uVmFsdWU9XCJDb2RlXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cIlRhZ3NcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgPGxhYmVsIGZvcj1cIndhcmVob3VzZXNcIj5XYXJlaG91c2VzPC9sYWJlbD5cblxuICAgIDx2ZXJiZW4tZHJvcC1kb3duIGxhYmVsPVwiV2FyZWhvdXNlc1wiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiB3aWR0aD1cIjEwMCVcIiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIlwiIFsob3B0aW9ucyldPVwid2FyZWhvdXNlc1wiIGlkPVwid2FyZWhvdXNlc1wiIG9wdGlvbkxhYmVsPVwiTmFtZVwiIG9wdGlvblZhbHVlPVwiQ29kZVwiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJXYXJlaG91c2VzXCIgKG9uQ2hhbmdlKT1cIm9uV2FyZWhvdXNlQ2hhbmdlKCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+IC0tPlxuXG4gIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICA8bGFiZWwgZm9yPVwic3RhdHVzXCI+U3RhdHVzPC9sYWJlbD5cblxuICAgIDx2ZXJiZW4tZHJvcC1kb3duIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiB3aWR0aD1cIjEwMCVcIiBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIiBbZmlsdGVyXT1cImZhbHNlXCIgW3Nob3dDbGVhcl09XCJmYWxzZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlwiIFsob3B0aW9ucyldPVwic3RhdHVzT3B0aW9uc1wiIGlkPVwic3RhdHVzXCIgZm9ybUNvbnRyb2xOYW1lPVwiU3RhdHVzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvY29tcG9uZW50cy91c2VyLW1hbmFnZW1lbnQvdXNlci1tYW5hZ2VtZW50LWZvcm0vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvY29tcG9uZW50cy91c2VyLW1hbmFnZW1lbnQvdXNlci1tYW5hZ2VtZW50LWZvcm0vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFRLE1BQU0sRUFBYSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRTdDOzs7R0FHRztBQWNILE1BQU0sT0FBTywyQkFBMkI7SUFXbEI7SUFWcEIsSUFBSSxHQUFHLEtBQUssRUFBUSxDQUFDO0lBQ3JCLEtBQUssR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUIsSUFBSSxHQUFHLEtBQUssQ0FBUSxFQUFFLENBQUMsQ0FBQztJQUVkLElBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ2hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRW5ELElBQUksQ0FBWTtJQUNoQixhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV0QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtvQkFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTtvQkFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtvQkFDbkMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtvQkFDekIsSUFBSSxFQUFHLElBQXVDLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3pELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNO2lCQUNyQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixNQUFNLE1BQU0sR0FBUztnQkFDbkIsR0FBSSxJQUFJLENBQUMsSUFBSSxFQUFXO2dCQUN4QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUMxQixTQUFTLEVBQ1AsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsS0FBSyxXQUFXLENBQUMsR0FBRztvQkFDeEMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHO29CQUNqQixDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0E5Q1UsMkJBQTJCOzRGQUEzQiwyQkFBMkIsNmZDeEJ4QywwcEVBcUNBLHNHRHRCSSxZQUFZLDhCQUNaLG1CQUFtQiw0ckJBQ25CLGtCQUFrQixvcUJBQ2xCLG1CQUFtQixrZUFDbkIsY0FBYzs7NEZBS0wsMkJBQTJCO2tCQWJ2QyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixjQUFjO3FCQUNmO2dGQVNTLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBlZmZlY3QsIGlucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSwgUm9sZSwgU3RhdHVzLCBUYWcsIFVzZXIgfSBmcm9tICd2ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRHJvcERvd25Nb2R1bGUsIFZlcmJlbmFCdXR0b25Nb2R1bGUsIFZlcmJlbmFJbnB1dE1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBVU0VSX0NPTkZJRyB9IGZyb20gJy4uL3VzZXIuY29uZmlnJztcblxuLyoqXG4gKiBGb3JtIGZvciBlZGl0aW5nIGEgdXNlcidzIHJvbGUsIHRhZ3MsIGFuZCBzdGF0dXMuXG4gKiBJZGVudGl0eSBmaWVsZHMgYXJlIHJlYWQtb25seS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXVzZXItbWFuYWdlbWVudC1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFZlcmJlbmFJbnB1dE1vZHVsZSxcbiAgICBWZXJiZW5hQnV0dG9uTW9kdWxlLFxuICAgIERyb3BEb3duTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLW1hbmFnZW1lbnQtZm9ybS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VtZW50Rm9ybUNvbXBvbmVudCB7XG4gIHVzZXIgPSBpbnB1dDxVc2VyPigpO1xuICByb2xlcyA9IGlucHV0PFJvbGVbXT4oW10pO1xuICB0YWdzID0gaW5wdXQ8VGFnW10+KFtdKTtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXNlcj4oKTtcbiAgQE91dHB1dCgpIHN3aXRjaFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBzdGF0dXNPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhTdGF0dXMpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChVU0VSX0NPTkZJRy5mb3JtR3JvdXBDb25maWchLmNvbnRyb2xzKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKCk7XG4gICAgICBpZiAodXNlciAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIE1haWxBZGRyZXNzOiB1c2VyLk1haWxBZGRyZXNzIHx8ICcnLFxuICAgICAgICAgIEZpcnN0TmFtZTogdXNlci5GaXJzdE5hbWUgfHwgJycsXG4gICAgICAgICAgTGFzdE5hbWU6IHVzZXIuTGFzdE5hbWUgfHwgJycsXG4gICAgICAgICAgUGhvbmVOdW1iZXI6IHVzZXIuUGhvbmVOdW1iZXIgfHwgJycsXG4gICAgICAgICAgUm9sZUlEOiB1c2VyLlJvbGVJRCB8fCAnJyxcbiAgICAgICAgICBUYWdzOiAodXNlciBhcyB1bmtub3duIGFzIHsgVGFncz86IHN0cmluZ1tdIH0pLlRhZ3MgfHwgW10sXG4gICAgICAgICAgU3RhdHVzOiB1c2VyLlN0YXR1cyB8fCBTdGF0dXMuQWN0aXZlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBtZXJnZWQ6IFVzZXIgPSB7XG4gICAgICAgIC4uLih0aGlzLnVzZXIoKSBhcyBVc2VyKSxcbiAgICAgICAgLi4udGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksXG4gICAgICAgIERhdGFTdGF0ZTpcbiAgICAgICAgICB0aGlzLnVzZXIoKT8uRGF0YVN0YXRlID09PSBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgICAgID8gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgICAgICA6IE9iamVjdFN0YXRlLkNoYW5nZWQsXG4gICAgICB9O1xuICAgICAgdGhpcy5zYXZlLmVtaXQobWVyZ2VkKTtcbiAgICB9XG4gIH1cblxuICBvblN3aXRjaFRvVGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5zd2l0Y2hUb1RhYmxlLmVtaXQoKTtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCJcbiAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB4LTMgcGItMyByb3VuZGVkLXhsIGgtZnVsbCB3LWZ1bGwgcmVsYXRpdmUgc3BhY2UteS00XCI+XG4gIDx2ZXJiZW5hLWlucHV0IGxhYmVsPVwiRmlyc3QgTmFtZTpcIiBuYW1lPVwiRmlyc3ROYW1lXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJGaXJzdE5hbWVcIiBbcmVhZE9ubHldPVwidHJ1ZVwiIC8+XG4gIDx2ZXJiZW5hLWlucHV0IGxhYmVsPVwiTGFzdCBOYW1lOlwiIG5hbWU9XCJMYXN0TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiTGFzdE5hbWVcIiBbcmVhZE9ubHldPVwidHJ1ZVwiIC8+XG4gIDx2ZXJiZW5hLWlucHV0IGxhYmVsPVwiUGhvbmUgTnVtYmVyOlwiIG5hbWU9XCJQaG9uZU51bWJlclwiIHR5cGU9XCJ0ZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJQaG9uZU51bWJlclwiIFtyZWFkT25seV09XCJ0cnVlXCIgLz5cbiAgPHZlcmJlbmEtaW5wdXQgbmFtZT1cIk1haWxBZGRyZXNzXCIgbGFiZWw9XCJFLU1haWwgQWRkcmVzczpcIiBbdHlwZV09XCInZW1haWwnXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWFpbEFkZHJlc3NcIlxuICAgIFtyZWFkT25seV09XCJ0cnVlXCIgLz5cblxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgPGxhYmVsIGZvcj1cInJvbGVcIj5Sb2xlPC9sYWJlbD5cbiAgICA8dmVyYmVuLWRyb3AtZG93biBzdHlsZUNsYXNzPVwidy1mdWxsXCIgd2lkdGg9XCIxMDAlXCIgW211bHRpc2VsZWN0XT1cImZhbHNlXCIgW2ZpbHRlcl09XCJ0cnVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCIgW29wdGlvbnNdPVwicm9sZXMoKVwiIGlkPVwicm9sZVwiIG9wdGlvbkxhYmVsPVwiTmFtZVwiIG9wdGlvblZhbHVlPVwiQ29kZVwiIGZvcm1Db250cm9sTmFtZT1cIlJvbGVJRFwiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgIDxsYWJlbCBmb3I9XCJ0YWdzXCI+VGFnczwvbGFiZWw+XG4gICAgPHZlcmJlbi1kcm9wLWRvd24gc3R5bGVDbGFzcz1cInctZnVsbFwiIHdpZHRoPVwiMTAwJVwiIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgW2ZpbHRlcl09XCJ0cnVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCIgW29wdGlvbnNdPVwidGFncygpXCIgaWQ9XCJ0YWdzXCIgb3B0aW9uTGFiZWw9XCJOYW1lXCIgb3B0aW9uVmFsdWU9XCJDb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwiVGFnc1wiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgIDxsYWJlbCBmb3I9XCJzdGF0dXNcIj5TdGF0dXM8L2xhYmVsPlxuICAgIDx2ZXJiZW4tZHJvcC1kb3duIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiB3aWR0aD1cIjEwMCVcIiBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIiBbZmlsdGVyXT1cImZhbHNlXCIgW3Nob3dDbGVhcl09XCJmYWxzZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlwiIFtvcHRpb25zXT1cInN0YXR1c09wdGlvbnNcIiBpZD1cInN0YXR1c1wiIGZvcm1Db250cm9sTmFtZT1cIlN0YXR1c1wiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBGb3JtIEFjdGlvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC00IG15LTIgaXRlbXMtY2VudGVyXCI+XG4gICAgPHZlcmJlbmEtYnV0dG9uIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCIgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiIChjbGljayk9XCJvblN3aXRjaFRvVGFibGUoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDx2ZXJiZW5hLWJ1dHRvbiB0ZXh0PVwiU2F2ZVwiIHR5cGU9XCJzdWJtaXRcIiBiZ0NvbG9yPVwiI0ZGRTY4MVwiIHRleHRDb2xvcj1cIiM0MDQwNDBcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgIHBkPVwiMTBweCAyMHB4XCIgd2lkdGg9XCIxMTRweFwiIGhlaWdodD1cIjM5cHhcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, viewChild } from '@angular/core';
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { Status } from 'verben-authentication-ui/src/lib/models';
|
|
5
|
+
import { DataTableComponent, DataTableModule, DropDownModule, SvgModule, VerbenaInputModule, } from 'verben-ng-ui';
|
|
6
|
+
import { UserStatusBadgeComponent } from '../user-status-badge/user-status-badge.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../user.facade";
|
|
9
|
+
import * as i2 from "@angular/common";
|
|
10
|
+
import * as i3 from "@angular/forms";
|
|
11
|
+
import * as i4 from "verben-ng-ui";
|
|
12
|
+
/**
|
|
13
|
+
* Table view for users with inline row editing.
|
|
14
|
+
*/
|
|
15
|
+
export class UserManagementTableComponent {
|
|
16
|
+
facade;
|
|
17
|
+
tableView = viewChild(DataTableComponent);
|
|
18
|
+
users = [];
|
|
19
|
+
columns = [];
|
|
20
|
+
isLoading = false;
|
|
21
|
+
formGroupConfig;
|
|
22
|
+
view = new EventEmitter();
|
|
23
|
+
delete = new EventEmitter();
|
|
24
|
+
saveRow = new EventEmitter();
|
|
25
|
+
statuses = Object.values(Status);
|
|
26
|
+
constructor(facade) {
|
|
27
|
+
this.facade = facade;
|
|
28
|
+
}
|
|
29
|
+
onView(user) {
|
|
30
|
+
this.view.emit(user);
|
|
31
|
+
}
|
|
32
|
+
onDelete(user) {
|
|
33
|
+
this.delete.emit(user);
|
|
34
|
+
}
|
|
35
|
+
onRowSaved(event) {
|
|
36
|
+
const original = this.users[event.index] ?? {};
|
|
37
|
+
this.saveRow.emit({ ...original, ...event.data });
|
|
38
|
+
}
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementTableComponent, deps: [{ token: i1.UserFacade }], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: UserManagementTableComponent, isStandalone: true, selector: "lib-user-management-table", inputs: { users: "users", columns: "columns", isLoading: "isLoading", formGroupConfig: "formGroupConfig" }, outputs: { view: "view", delete: "delete", saveRow: "saveRow" }, viewQueries: [{ propertyName: "tableView", first: true, predicate: DataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"table-container\" [class.loading]=\"isLoading\">\n <lib-data-table [data]=\"users\" [columns]=\"columns\" [formGroupConfig]=\"formGroupConfig\" dataKey=\"Code\"\n (rowSave)=\"onRowSaved($event)\">\n <!-- Select -->\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n </ng-container>\n\n <!-- Created -->\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>{{ value | date }}</ng-template>\n </ng-container>\n\n <!-- Mail -->\n <ng-container libColumn=\"mail\">\n <ng-template #cell let-value>{{ value }}</ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verbena-input name=\"MailAddress\" [formControl]=\"control\" placeHolder=\"Enter E-Mail\" />\n </ng-template>\n </ng-container>\n\n <!-- Phone -->\n <ng-container libColumn=\"phone\">\n <ng-template #cell let-value>{{ value }}</ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verbena-input name=\"PhoneNumber\" [formControl]=\"control\" placeHolder=\"Enter Phone Number\" />\n </ng-template>\n </ng-container>\n\n <!-- Role -->\n <ng-container libColumn=\"role\">\n <ng-template #cell let-value>{{ facade.getRoleName(value) || 'N/A' }}</ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verben-drop-down [width]=\"'100%'\" [formControl]=\"control\" placeHolder=\"Select Role\"\n [options]=\"(facade.roles$ | async) ?? []\" optionLabel=\"Name\" optionValue=\"Code\" [filter]=\"true\"\n [showClear]=\"true\"></verben-drop-down>\n </ng-template>\n </ng-container>\n\n <!-- Status -->\n <ng-container libColumn=\"status\">\n <ng-template #cell let-value>\n <lib-user-status-badge [status]=\"value\"></lib-user-status-badge>\n </ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verben-drop-down [width]=\"'100%'\" [formControl]=\"control\" placeHolder=\"Select Status\" [options]=\"statuses\"\n [filter]=\"false\" [showClear]=\"false\"></verben-drop-down>\n </ng-template>\n </ng-container>\n\n <!-- Actions -->\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\" let-toggleRowEdit=\"toggleRowEdit\">\n <div class=\"flex gap-6\">\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <verben-svg (click)=\"onView(row)\" icon=\"eye\" [width]=\"15\" [height]=\"15\" class=\"cursor-pointer\"></verben-svg>\n <verben-svg (click)=\"onDelete(row)\" icon=\"delete\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n </div>\n </ng-template>\n <ng-template #cellEdit let-toggleRowEdit=\"toggleRowEdit\">\n <div class=\"flex gap-6\">\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"tick\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"delete\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n\n <div *ngIf=\"users.length === 0 && !isLoading\" class=\"empty-state\">\n <p>No users found</p>\n </div>\n</div>\n", styles: [".table-container{width:100%}.table-container.loading{opacity:.6;pointer-events:none}.empty-state{padding:2rem;text-align:center;color:var(--vbn-color-text-muted)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: DataTableModule }, { kind: "component", type: i4.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i4.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "ngmodule", type: SvgModule }, { kind: "component", type: i4.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "ngmodule", type: DropDownModule }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "ngmodule", type: VerbenaInputModule }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: UserStatusBadgeComponent, selector: "lib-user-status-badge", inputs: ["status"] }] });
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementTableComponent, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{ selector: 'lib-user-management-table', standalone: true, imports: [
|
|
45
|
+
CommonModule,
|
|
46
|
+
ReactiveFormsModule,
|
|
47
|
+
DataTableModule,
|
|
48
|
+
SvgModule,
|
|
49
|
+
DropDownModule,
|
|
50
|
+
VerbenaInputModule,
|
|
51
|
+
UserStatusBadgeComponent,
|
|
52
|
+
], template: "<div class=\"table-container\" [class.loading]=\"isLoading\">\n <lib-data-table [data]=\"users\" [columns]=\"columns\" [formGroupConfig]=\"formGroupConfig\" dataKey=\"Code\"\n (rowSave)=\"onRowSaved($event)\">\n <!-- Select -->\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n </ng-container>\n\n <!-- Created -->\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>{{ value | date }}</ng-template>\n </ng-container>\n\n <!-- Mail -->\n <ng-container libColumn=\"mail\">\n <ng-template #cell let-value>{{ value }}</ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verbena-input name=\"MailAddress\" [formControl]=\"control\" placeHolder=\"Enter E-Mail\" />\n </ng-template>\n </ng-container>\n\n <!-- Phone -->\n <ng-container libColumn=\"phone\">\n <ng-template #cell let-value>{{ value }}</ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verbena-input name=\"PhoneNumber\" [formControl]=\"control\" placeHolder=\"Enter Phone Number\" />\n </ng-template>\n </ng-container>\n\n <!-- Role -->\n <ng-container libColumn=\"role\">\n <ng-template #cell let-value>{{ facade.getRoleName(value) || 'N/A' }}</ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verben-drop-down [width]=\"'100%'\" [formControl]=\"control\" placeHolder=\"Select Role\"\n [options]=\"(facade.roles$ | async) ?? []\" optionLabel=\"Name\" optionValue=\"Code\" [filter]=\"true\"\n [showClear]=\"true\"></verben-drop-down>\n </ng-template>\n </ng-container>\n\n <!-- Status -->\n <ng-container libColumn=\"status\">\n <ng-template #cell let-value>\n <lib-user-status-badge [status]=\"value\"></lib-user-status-badge>\n </ng-template>\n <ng-template #cellEdit let-control=\"control\">\n <verben-drop-down [width]=\"'100%'\" [formControl]=\"control\" placeHolder=\"Select Status\" [options]=\"statuses\"\n [filter]=\"false\" [showClear]=\"false\"></verben-drop-down>\n </ng-template>\n </ng-container>\n\n <!-- Actions -->\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\" let-toggleRowEdit=\"toggleRowEdit\">\n <div class=\"flex gap-6\">\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <verben-svg (click)=\"onView(row)\" icon=\"eye\" [width]=\"15\" [height]=\"15\" class=\"cursor-pointer\"></verben-svg>\n <verben-svg (click)=\"onDelete(row)\" icon=\"delete\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n </div>\n </ng-template>\n <ng-template #cellEdit let-toggleRowEdit=\"toggleRowEdit\">\n <div class=\"flex gap-6\">\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"tick\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"delete\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n\n <div *ngIf=\"users.length === 0 && !isLoading\" class=\"empty-state\">\n <p>No users found</p>\n </div>\n</div>\n", styles: [".table-container{width:100%}.table-container.loading{opacity:.6;pointer-events:none}.empty-state{padding:2rem;text-align:center;color:var(--vbn-color-text-muted)}\n"] }]
|
|
53
|
+
}], ctorParameters: () => [{ type: i1.UserFacade }], propDecorators: { users: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], columns: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], isLoading: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], formGroupConfig: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], view: [{
|
|
62
|
+
type: Output
|
|
63
|
+
}], delete: [{
|
|
64
|
+
type: Output
|
|
65
|
+
}], saveRow: [{
|
|
66
|
+
type: Output
|
|
67
|
+
}] } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VtZW50LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvdXNlci1tYW5hZ2VtZW50L3VzZXItbWFuYWdlbWVudC10YWJsZS91c2VyLW1hbmFnZW1lbnQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvY29tcG9uZW50cy91c2VyLW1hbmFnZW1lbnQvdXNlci1tYW5hZ2VtZW50LXRhYmxlL3VzZXItbWFuYWdlbWVudC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBUSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFFTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGNBQWMsRUFFZCxTQUFTLEVBQ1Qsa0JBQWtCLEdBQ25CLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7QUFFNUY7O0dBRUc7QUFnQkgsTUFBTSxPQUFPLDRCQUE0QjtJQWNwQjtJQWJuQixTQUFTLEdBQUcsU0FBUyxDQUEyQixrQkFBa0IsQ0FBQyxDQUFDO0lBRTNELEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsT0FBTyxHQUE2QixFQUFFLENBQUM7SUFDdkMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixlQUFlLENBQXdCO0lBRXRDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ2hDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTdDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLFlBQW1CLE1BQWtCO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7SUFBRyxDQUFDO0lBRXpDLE1BQU0sQ0FBQyxJQUFVO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFVO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBbUU7UUFDNUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUssRUFBVyxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO3dHQTNCVSw0QkFBNEI7NEZBQTVCLDRCQUE0Qiw2U0FDUyxrQkFBa0IsZ0VDbkNwRSxzZ0hBOEVBLDZORHZESSxZQUFZLDBPQUNaLG1CQUFtQix5VEFDbkIsZUFBZSwrWkFDZixTQUFTLDJLQUNULGNBQWMsZ21CQUNkLGtCQUFrQixxcUJBQ2xCLHdCQUF3Qjs7NEZBS2YsNEJBQTRCO2tCQWZ4QyxTQUFTOytCQUNFLDJCQUEyQixjQUN6QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsd0JBQXdCO3FCQUN6QjsrRUFPUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN0YXR1cywgVXNlciB9IGZyb20gJ3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQge1xuICBDb2x1bW5EZWZpbml0aW9uLFxuICBEYXRhVGFibGVDb21wb25lbnQsXG4gIERhdGFUYWJsZU1vZHVsZSxcbiAgRHJvcERvd25Nb2R1bGUsXG4gIEZvcm1Hcm91cENvbmZpZyxcbiAgU3ZnTW9kdWxlLFxuICBWZXJiZW5hSW5wdXRNb2R1bGUsXG59IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBVc2VyRmFjYWRlIH0gZnJvbSAnLi4vdXNlci5mYWNhZGUnO1xuaW1wb3J0IHsgVXNlclN0YXR1c0JhZGdlQ29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1zdGF0dXMtYmFkZ2UvdXNlci1zdGF0dXMtYmFkZ2UuY29tcG9uZW50JztcblxuLyoqXG4gKiBUYWJsZSB2aWV3IGZvciB1c2VycyB3aXRoIGlubGluZSByb3cgZWRpdGluZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXVzZXItbWFuYWdlbWVudC10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEYXRhVGFibGVNb2R1bGUsXG4gICAgU3ZnTW9kdWxlLFxuICAgIERyb3BEb3duTW9kdWxlLFxuICAgIFZlcmJlbmFJbnB1dE1vZHVsZSxcbiAgICBVc2VyU3RhdHVzQmFkZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLW1hbmFnZW1lbnQtdGFibGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlbWVudFRhYmxlQ29tcG9uZW50IHtcbiAgdGFibGVWaWV3ID0gdmlld0NoaWxkPERhdGFUYWJsZUNvbXBvbmVudDxVc2VyPj4oRGF0YVRhYmxlQ29tcG9uZW50KTtcblxuICBASW5wdXQoKSB1c2VyczogVXNlcltdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IENvbHVtbkRlZmluaXRpb248VXNlcj5bXSA9IFtdO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUdyb3VwQ29uZmlnPzogRm9ybUdyb3VwQ29uZmlnPGFueT47XG5cbiAgQE91dHB1dCgpIHZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXI+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXI+KCk7XG4gIEBPdXRwdXQoKSBzYXZlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxVc2VyPigpO1xuXG4gIHN0YXR1c2VzID0gT2JqZWN0LnZhbHVlcyhTdGF0dXMpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmYWNhZGU6IFVzZXJGYWNhZGUpIHt9XG5cbiAgb25WaWV3KHVzZXI6IFVzZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcuZW1pdCh1c2VyKTtcbiAgfVxuXG4gIG9uRGVsZXRlKHVzZXI6IFVzZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZS5lbWl0KHVzZXIpO1xuICB9XG5cbiAgb25Sb3dTYXZlZChldmVudDogeyBpbmRleDogbnVtYmVyOyBrZXk6IG51bWJlciB8IHN0cmluZzsgZGF0YTogUGFydGlhbDxVc2VyPiB9KTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLnVzZXJzW2V2ZW50LmluZGV4XSA/PyAoe30gYXMgVXNlcik7XG4gICAgdGhpcy5zYXZlUm93LmVtaXQoeyAuLi5vcmlnaW5hbCwgLi4uZXZlbnQuZGF0YSB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIFtjbGFzcy5sb2FkaW5nXT1cImlzTG9hZGluZ1wiPlxuICA8bGliLWRhdGEtdGFibGUgW2RhdGFdPVwidXNlcnNcIiBbY29sdW1uc109XCJjb2x1bW5zXCIgW2Zvcm1Hcm91cENvbmZpZ109XCJmb3JtR3JvdXBDb25maWdcIiBkYXRhS2V5PVwiQ29kZVwiXG4gICAgKHJvd1NhdmUpPVwib25Sb3dTYXZlZCgkZXZlbnQpXCI+XG4gICAgPCEtLSBTZWxlY3QgLS0+XG4gICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIiBsZXQtdG9nZ2xlUm93U2VsZWN0aW9uPVwidG9nZ2xlUm93U2VsZWN0aW9uXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oKVwiIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBDcmVhdGVkIC0tPlxuICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPnt7IHZhbHVlIHwgZGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIE1haWwgLS0+XG4gICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJtYWlsXCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPnt7IHZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LWNvbnRyb2w9XCJjb250cm9sXCI+XG4gICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJNYWlsQWRkcmVzc1wiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcGxhY2VIb2xkZXI9XCJFbnRlciBFLU1haWxcIiAvPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gUGhvbmUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJwaG9uZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT57eyB2YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1jb250cm9sPVwiY29udHJvbFwiPlxuICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiUGhvbmVOdW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIHBsYWNlSG9sZGVyPVwiRW50ZXIgUGhvbmUgTnVtYmVyXCIgLz5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFJvbGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJyb2xlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPnt7IGZhY2FkZS5nZXRSb2xlTmFtZSh2YWx1ZSkgfHwgJ04vQScgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtY29udHJvbD1cImNvbnRyb2xcIj5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gW3dpZHRoXT1cIicxMDAlJ1wiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcGxhY2VIb2xkZXI9XCJTZWxlY3QgUm9sZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiKGZhY2FkZS5yb2xlcyQgfCBhc3luYykgPz8gW11cIiBvcHRpb25MYWJlbD1cIk5hbWVcIiBvcHRpb25WYWx1ZT1cIkNvZGVcIiBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFN0YXR1cyAtLT5cbiAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInN0YXR1c1wiPlxuICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgPGxpYi11c2VyLXN0YXR1cy1iYWRnZSBbc3RhdHVzXT1cInZhbHVlXCI+PC9saWItdXNlci1zdGF0dXMtYmFkZ2U+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtY29udHJvbD1cImNvbnRyb2xcIj5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gW3dpZHRoXT1cIicxMDAlJ1wiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcGxhY2VIb2xkZXI9XCJTZWxlY3QgU3RhdHVzXCIgW29wdGlvbnNdPVwic3RhdHVzZXNcIlxuICAgICAgICAgIFtmaWx0ZXJdPVwiZmFsc2VcIiBbc2hvd0NsZWFyXT1cImZhbHNlXCI+PC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gQWN0aW9ucyAtLT5cbiAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC02XCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKVwiIGljb249XCJlZGl0XCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJvblZpZXcocm93KVwiIGljb249XCJleWVcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwib25EZWxldGUocm93KVwiIGljb249XCJkZWxldGVcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC02XCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKVwiIGljb249XCJ0aWNrXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIiBpY29uPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbGliLWRhdGEtdGFibGU+XG5cbiAgPGRpdiAqbmdJZj1cInVzZXJzLmxlbmd0aCA9PT0gMCAmJiAhaXNMb2FkaW5nXCIgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPlxuICAgIDxwPk5vIHVzZXJzIGZvdW5kPC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|