tin-spa 14.3.11 → 14.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2020/lib/classes/Classes.mjs +53 -206
- package/esm2020/lib/classes/LibClasses.mjs +180 -0
- package/esm2020/lib/classes/TinCore.mjs +201 -42
- package/esm2020/lib/components/alert/alert.component.mjs +12 -6
- package/esm2020/lib/components/attach/attach.component.mjs +49 -33
- package/esm2020/lib/components/capsules/capsules.component.mjs +63 -0
- package/esm2020/lib/components/cards/cards.component.mjs +103 -0
- package/esm2020/lib/components/date/date.component.mjs +6 -6
- package/esm2020/lib/components/datetime/datetime.component.mjs +6 -3
- package/esm2020/lib/components/email/email.component.mjs +133 -0
- package/esm2020/lib/components/filter/filter.component.mjs +7 -3
- package/esm2020/lib/components/form/form.component.mjs +155 -53
- package/esm2020/lib/components/html/html.component.mjs +34 -0
- package/esm2020/lib/components/label/label.component.mjs +6 -3
- package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
- package/esm2020/lib/components/money/money.component.mjs +26 -9
- package/esm2020/lib/components/multi-select/multi-select.component.mjs +165 -0
- package/esm2020/lib/components/multi-text/multi-text.component.mjs +208 -0
- package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +32 -28
- package/esm2020/lib/components/notes/notes.component.mjs +62 -0
- package/esm2020/lib/components/number/number.component.mjs +23 -8
- package/esm2020/lib/components/option/option.component.mjs +39 -14
- package/esm2020/lib/components/page/page.component.mjs +101 -0
- package/esm2020/lib/components/search/search.component.mjs +10 -5
- package/esm2020/lib/components/select/select.component.mjs +56 -119
- package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +87 -0
- package/esm2020/lib/components/select-common/select-common.component.mjs +189 -0
- package/esm2020/lib/components/select-internal/select-internal.component.mjs +75 -0
- package/esm2020/lib/components/select-lite/select-lite.component.mjs +18 -0
- package/esm2020/lib/components/steps/steps.component.mjs +83 -61
- package/esm2020/lib/components/suffix/suffix.component.mjs +70 -0
- package/esm2020/lib/components/table/detailsDialog.component.mjs +179 -37
- package/esm2020/lib/components/table/table.component.mjs +142 -108
- package/esm2020/lib/components/table-action/table-action.component.mjs +42 -8
- package/esm2020/lib/components/table-header/table-header.component.mjs +87 -15
- package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +183 -35
- package/esm2020/lib/components/table-internal/table-internal.component.mjs +144 -109
- package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +371 -0
- package/esm2020/lib/components/table-lite/table-lite.component.mjs +441 -0
- package/esm2020/lib/components/table-row/table-row.component.mjs +41 -6
- package/esm2020/lib/components/text/text.component.mjs +97 -42
- package/esm2020/lib/components/tiles/tiles.component.mjs +44 -26
- package/esm2020/lib/components/viewer/viewer.component.mjs +7 -3
- package/esm2020/lib/components/viewer/viewerDialog.component.mjs +20 -13
- package/esm2020/lib/modules/admin/admin-routing.module.mjs +32 -22
- package/esm2020/lib/modules/index/index-routing.module.mjs +4 -4
- package/esm2020/lib/modules/spa-admin.module.mjs +7 -7
- package/esm2020/lib/modules/spa-index.module.mjs +4 -4
- package/esm2020/lib/modules/spa-user.module.mjs +3 -3
- package/esm2020/lib/modules/user/user-routing.module.mjs +3 -3
- package/esm2020/lib/pages/accounts/accountDialog.component.mjs +56 -0
- package/esm2020/lib/pages/accounts/accounts.component.mjs +70 -0
- package/esm2020/lib/pages/app-models/app-models.component.mjs +56 -0
- package/esm2020/lib/pages/approvals/approvals.component.mjs +19 -0
- package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +165 -0
- package/esm2020/lib/pages/bug/bug.component.mjs +14 -0
- package/esm2020/lib/pages/change-password/change-password.component.mjs +92 -0
- package/esm2020/lib/pages/create-account/create-account.component.mjs +110 -0
- package/esm2020/lib/pages/customers/customers.component.mjs +21 -0
- package/esm2020/lib/{components → pages}/departments/departments.component.mjs +3 -5
- package/esm2020/lib/pages/employees/employees.component.mjs +20 -0
- package/esm2020/lib/pages/grades/grades.component.mjs +14 -0
- package/esm2020/lib/pages/inventory/inventory.component.mjs +99 -0
- package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +53 -0
- package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +71 -0
- package/esm2020/lib/pages/login/login.component.mjs +166 -0
- package/esm2020/lib/pages/logs/logs.component.mjs +42 -0
- package/esm2020/lib/pages/membership/membership.component.mjs +44 -0
- package/esm2020/lib/pages/notifications/notifications.component.mjs +90 -0
- package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +113 -0
- package/esm2020/lib/pages/plans/plans.component.mjs +44 -0
- package/esm2020/lib/pages/positions/positions.component.mjs +21 -0
- package/esm2020/lib/pages/profile/profile.component.mjs +94 -0
- package/esm2020/lib/pages/recover-account/recover-account.component.mjs +46 -0
- package/esm2020/lib/{components → pages}/roles/addRoleDialog.component.mjs +3 -3
- package/esm2020/lib/pages/roles/roles.component.mjs +151 -0
- package/esm2020/lib/{components → pages}/settings/settings.component.mjs +2 -11
- package/esm2020/lib/pages/signup/signup.component.mjs +50 -0
- package/esm2020/lib/pages/suppliers/suppliers.component.mjs +22 -0
- package/esm2020/lib/pages/tasks/tasks.component.mjs +86 -0
- package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +228 -0
- package/esm2020/lib/pages/tenants/tenants.component.mjs +47 -0
- package/esm2020/lib/pages/transactions/transactDialog.component.mjs +80 -0
- package/esm2020/lib/pages/transactions/transactions.component.mjs +101 -0
- package/esm2020/lib/pages/users/users.component.mjs +141 -0
- package/esm2020/lib/pages/welcome/welcome.component.mjs +86 -0
- package/esm2020/lib/select-context.directive.mjs +23 -0
- package/esm2020/lib/services/auth.service.mjs +3 -2
- package/esm2020/lib/services/button.service.mjs +90 -30
- package/esm2020/lib/services/csv.service.mjs +49 -0
- package/esm2020/lib/services/datalib.service.mjs +504 -76
- package/esm2020/lib/services/dialog.service.mjs +24 -7
- package/esm2020/lib/services/log.service.mjs +2 -2
- package/esm2020/lib/services/notifications.service.mjs +33 -0
- package/esm2020/lib/services/table-config.service.mjs +55 -7
- package/esm2020/lib/tin-spa.module.mjs +70 -30
- package/esm2020/public-api.mjs +33 -25
- package/fesm2015/tin-spa.mjs +6258 -2345
- package/fesm2015/tin-spa.mjs.map +1 -1
- package/fesm2020/tin-spa.mjs +6308 -2336
- package/fesm2020/tin-spa.mjs.map +1 -1
- package/lib/classes/Classes.d.ts +244 -294
- package/lib/classes/LibClasses.d.ts +173 -0
- package/lib/classes/TinCore.d.ts +13 -3
- package/lib/components/attach/attach.component.d.ts +13 -6
- package/lib/components/capsules/capsules.component.d.ts +26 -0
- package/lib/components/cards/cards.component.d.ts +39 -0
- package/lib/components/datetime/datetime.component.d.ts +2 -1
- package/lib/components/email/email.component.d.ts +40 -0
- package/lib/components/filter/filter.component.d.ts +1 -0
- package/lib/components/form/form.component.d.ts +20 -9
- package/lib/components/html/html.component.d.ts +16 -0
- package/lib/components/label/label.component.d.ts +2 -1
- package/lib/components/money/money.component.d.ts +8 -1
- package/lib/components/multi-select/multi-select.component.d.ts +47 -0
- package/lib/components/multi-text/multi-text.component.d.ts +56 -0
- package/lib/components/nav-menu/nav-menu.component.d.ts +6 -2
- package/lib/components/notes/notes.component.d.ts +19 -0
- package/lib/components/number/number.component.d.ts +7 -1
- package/lib/components/option/option.component.d.ts +11 -2
- package/lib/components/page/page.component.d.ts +38 -0
- package/lib/components/search/search.component.d.ts +3 -1
- package/lib/components/select/select.component.d.ts +16 -35
- package/lib/components/select-bitwise/select-bitwise.component.d.ts +31 -0
- package/lib/components/select-common/select-common.component.d.ts +50 -0
- package/lib/components/select-internal/select-internal.component.d.ts +23 -0
- package/lib/components/select-lite/select-lite.component.d.ts +8 -0
- package/lib/components/steps/steps.component.d.ts +18 -9
- package/lib/components/suffix/suffix.component.d.ts +23 -0
- package/lib/components/table/detailsDialog.component.d.ts +24 -7
- package/lib/components/table/table.component.d.ts +18 -9
- package/lib/components/table-action/table-action.component.d.ts +4 -1
- package/lib/components/table-header/table-header.component.d.ts +19 -4
- package/lib/components/table-internal/detailsDialog-internal.component.d.ts +24 -7
- package/lib/components/table-internal/table-internal.component.d.ts +18 -9
- package/lib/components/table-lite/detailsDialog-lite.component.d.ts +81 -0
- package/lib/components/table-lite/table-lite.component.d.ts +91 -0
- package/lib/components/table-row/table-row.component.d.ts +5 -2
- package/lib/components/text/text.component.d.ts +17 -4
- package/lib/components/tiles/tiles.component.d.ts +7 -4
- package/lib/components/viewer/viewerDialog.component.d.ts +3 -1
- package/lib/modules/spa-admin.module.d.ts +6 -6
- package/lib/modules/spa-index.module.d.ts +3 -3
- package/lib/modules/spa-user.module.d.ts +2 -2
- package/lib/pages/app-models/app-models.component.d.ts +15 -0
- package/lib/pages/approvals/approvals.component.d.ts +10 -0
- package/lib/pages/approvals-config/approvals-config.component.d.ts +24 -0
- package/lib/{components → pages}/change-password/change-password.component.d.ts +1 -1
- package/lib/{components → pages}/create-account/create-account.component.d.ts +2 -1
- package/lib/{components → pages}/customers/customers.component.d.ts +2 -8
- package/lib/{components → pages}/invitations-table/invitations-table.component.d.ts +1 -1
- package/lib/{components → pages}/login/login.component.d.ts +10 -3
- package/lib/{components → pages}/logs/logs.component.d.ts +2 -6
- package/lib/{components → pages}/membership/membership.component.d.ts +2 -6
- package/lib/pages/notifications/notifications.component.d.ts +16 -0
- package/lib/pages/notifications-config/notifications-config.component.d.ts +17 -0
- package/lib/{components → pages}/plans/plans.component.d.ts +2 -6
- package/lib/{components → pages}/profile/profile.component.d.ts +2 -1
- package/lib/{components → pages}/roles/addRoleDialog.component.d.ts +1 -1
- package/lib/{components → pages}/roles/roles.component.d.ts +15 -3
- package/lib/{components → pages}/signup/signup.component.d.ts +1 -1
- package/lib/{components → pages}/suppliers/suppliers.component.d.ts +1 -4
- package/lib/{components → pages}/tasks/tasks.component.d.ts +1 -1
- package/lib/{components → pages}/tenant-settings/tenant-settings.component.d.ts +12 -7
- package/lib/{components → pages}/tenants/tenants.component.d.ts +2 -2
- package/lib/{components → pages}/users/users.component.d.ts +8 -16
- package/lib/select-context.directive.d.ts +10 -0
- package/lib/services/auth.service.d.ts +1 -1
- package/lib/services/button.service.d.ts +10 -7
- package/lib/services/csv.service.d.ts +10 -0
- package/lib/services/datalib.service.d.ts +55 -10
- package/lib/services/dialog.service.d.ts +2 -2
- package/lib/services/log.service.d.ts +1 -1
- package/lib/services/notifications.service.d.ts +12 -0
- package/lib/services/table-config.service.d.ts +9 -1
- package/lib/tin-spa.module.d.ts +51 -33
- package/package.json +1 -1
- package/public-api.d.ts +31 -23
- package/esm2020/lib/components/accounts/accountDialog.component.mjs +0 -56
- package/esm2020/lib/components/accounts/accounts.component.mjs +0 -70
- package/esm2020/lib/components/bug/bug.component.mjs +0 -14
- package/esm2020/lib/components/change-password/change-password.component.mjs +0 -92
- package/esm2020/lib/components/create-account/create-account.component.mjs +0 -109
- package/esm2020/lib/components/customers/customers.component.mjs +0 -60
- package/esm2020/lib/components/employees/employees.component.mjs +0 -21
- package/esm2020/lib/components/grades/grades.component.mjs +0 -14
- package/esm2020/lib/components/inventory/inventory.component.mjs +0 -99
- package/esm2020/lib/components/inventory/quantityDialog.component.mjs +0 -53
- package/esm2020/lib/components/invitations/invitations.component.mjs +0 -14
- package/esm2020/lib/components/invitations-table/invitations-table.component.mjs +0 -70
- package/esm2020/lib/components/login/login.component.mjs +0 -127
- package/esm2020/lib/components/logs/logs.component.mjs +0 -37
- package/esm2020/lib/components/membership/membership.component.mjs +0 -48
- package/esm2020/lib/components/notifications/notifications.component.mjs +0 -14
- package/esm2020/lib/components/plans/plans.component.mjs +0 -47
- package/esm2020/lib/components/positions/positions.component.mjs +0 -21
- package/esm2020/lib/components/profile/profile.component.mjs +0 -92
- package/esm2020/lib/components/recover-account/recover-account.component.mjs +0 -46
- package/esm2020/lib/components/roles/roles.component.mjs +0 -91
- package/esm2020/lib/components/signup/signup.component.mjs +0 -50
- package/esm2020/lib/components/suppliers/suppliers.component.mjs +0 -50
- package/esm2020/lib/components/tasks/tasks.component.mjs +0 -86
- package/esm2020/lib/components/tenant-settings/inviteDialog.component.mjs +0 -60
- package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +0 -155
- package/esm2020/lib/components/tenants/tenants.component.mjs +0 -47
- package/esm2020/lib/components/transactions/transactDialog.component.mjs +0 -80
- package/esm2020/lib/components/transactions/transactions.component.mjs +0 -101
- package/esm2020/lib/components/users/users.component.mjs +0 -118
- package/esm2020/lib/components/welcome/welcome.component.mjs +0 -86
- package/lib/components/invitations/invitations.component.d.ts +0 -8
- package/lib/components/notifications/notifications.component.d.ts +0 -8
- package/lib/components/tenant-settings/inviteDialog.component.d.ts +0 -28
- /package/lib/{components → pages}/accounts/accountDialog.component.d.ts +0 -0
- /package/lib/{components → pages}/accounts/accounts.component.d.ts +0 -0
- /package/lib/{components → pages}/bug/bug.component.d.ts +0 -0
- /package/lib/{components → pages}/departments/departments.component.d.ts +0 -0
- /package/lib/{components → pages}/employees/employees.component.d.ts +0 -0
- /package/lib/{components → pages}/grades/grades.component.d.ts +0 -0
- /package/lib/{components → pages}/inventory/inventory.component.d.ts +0 -0
- /package/lib/{components → pages}/inventory/quantityDialog.component.d.ts +0 -0
- /package/lib/{components → pages}/positions/positions.component.d.ts +0 -0
- /package/lib/{components → pages}/recover-account/recover-account.component.d.ts +0 -0
- /package/lib/{components → pages}/settings/settings.component.d.ts +0 -0
- /package/lib/{components → pages}/transactions/transactDialog.component.d.ts +0 -0
- /package/lib/{components → pages}/transactions/transactions.component.d.ts +0 -0
- /package/lib/{components → pages}/welcome/welcome.component.d.ts +0 -0
|
@@ -6,24 +6,30 @@ export class AlertComponent {
|
|
|
6
6
|
ngOnInit() {
|
|
7
7
|
}
|
|
8
8
|
getAlertMessages(type = undefined) {
|
|
9
|
-
return this.alertMessages?.messages
|
|
9
|
+
return this.alertMessages?.messages
|
|
10
|
+
.filter(x => this.testVisible(x))
|
|
11
|
+
.filter(x => x.type === type) || [];
|
|
10
12
|
}
|
|
11
13
|
hasAlertMessages(type = undefined) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
return this.alertMessages?.messages
|
|
15
|
+
.filter(x => this.testVisible(x))
|
|
16
|
+
.some(x => x.type === type) || false;
|
|
14
17
|
}
|
|
15
18
|
testVisible(msg) {
|
|
19
|
+
if (msg.showCondition) {
|
|
20
|
+
return msg.showCondition(this.data);
|
|
21
|
+
}
|
|
16
22
|
return msg.hiddenCondition ? !msg.hiddenCondition(this.data) : true;
|
|
17
23
|
}
|
|
18
24
|
}
|
|
19
25
|
AlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
-
AlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AlertComponent, selector: "spa-alert", inputs: { alertMessages: "alertMessages", data: "data" }, ngImport: i0, template: "<div *ngIf=\"hasAlertMessages()\" class=\"alert alert-secondary\" style=\"font-size: 14px;\" role=\"alert\">\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}
|
|
26
|
+
AlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AlertComponent, selector: "spa-alert", inputs: { alertMessages: "alertMessages", data: "data" }, ngImport: i0, template: "<div *ngIf=\"hasAlertMessages()\" class=\"alert alert-secondary\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages(); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('success')\" class=\"alert alert-success\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('success'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('info')\" class=\"alert alert-info\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('info'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('warn')\" class=\"alert alert-warning\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('warn'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('critical')\" class=\"alert alert-danger\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('critical'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
21
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AlertComponent, decorators: [{
|
|
22
28
|
type: Component,
|
|
23
|
-
args: [{ selector: 'spa-alert', template: "<div *ngIf=\"hasAlertMessages()\" class=\"alert alert-secondary\" style=\"font-size: 14px;\" role=\"alert\">\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}
|
|
29
|
+
args: [{ selector: 'spa-alert', template: "<div *ngIf=\"hasAlertMessages()\" class=\"alert alert-secondary\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages(); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('success')\" class=\"alert alert-success\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('success'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('info')\" class=\"alert alert-info\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('info'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('warn')\" class=\"alert alert-warning\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('warn'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('critical')\" class=\"alert alert-danger\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n <p *ngIf=\"alertMessages.subject\">{{alertMessages.subject}}</p>\r\n <ng-container *ngFor=\"let msg of getAlertMessages('critical'); let last = last\">\r\n <label *ngIf=\"testVisible(msg)\">{{msg.content}}</label>\r\n <br *ngIf=\"!last\">\r\n </ng-container>\r\n</div>\r\n" }]
|
|
24
30
|
}], ctorParameters: function () { return []; }, propDecorators: { alertMessages: [{
|
|
25
31
|
type: Input
|
|
26
32
|
}], data: [{
|
|
27
33
|
type: Input
|
|
28
34
|
}] } });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQVF6RCxNQUFNLE9BQU8sY0FBYztJQUV6QixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQztJQU9ELGdCQUFnQixDQUFDLElBQUksR0FBRyxTQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRO2FBQ2hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQUksR0FBRyxTQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRO2FBQ2hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFpQjtRQUUzQixJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUU7WUFDckIsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQztRQUVELE9BQU8sR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRXRFLENBQUM7OzJHQWhDVSxjQUFjOytGQUFkLGNBQWMsMkdDUjNCLHVpRUF3Q0E7MkZEaENhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVzswRUFZWixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBbGVydE1lc3NhZ2UsIEFsZXJ0TWVzc2FnZXMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtYWxlcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGVydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbGVydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIGFsZXJ0TWVzc2FnZXM6IEFsZXJ0TWVzc2FnZXM7XHJcbiAgQElucHV0KCkgZGF0YTtcclxuXHJcblxyXG4gIGdldEFsZXJ0TWVzc2FnZXModHlwZSA9IHVuZGVmaW5lZCk6IEFsZXJ0TWVzc2FnZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmFsZXJ0TWVzc2FnZXM/Lm1lc3NhZ2VzXHJcbiAgICAgIC5maWx0ZXIoeCA9PiB0aGlzLnRlc3RWaXNpYmxlKHgpKVxyXG4gICAgICAuZmlsdGVyKHggPT4geC50eXBlID09PSB0eXBlKSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGhhc0FsZXJ0TWVzc2FnZXModHlwZSA9IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWxlcnRNZXNzYWdlcz8ubWVzc2FnZXNcclxuICAgICAgLmZpbHRlcih4ID0+IHRoaXMudGVzdFZpc2libGUoeCkpXHJcbiAgICAgIC5zb21lKHggPT4geC50eXBlID09PSB0eXBlKSB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlKG1zZzogQWxlcnRNZXNzYWdlKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKG1zZy5zaG93Q29uZGl0aW9uKSB7XHJcbiAgICAgIHJldHVybiBtc2cuc2hvd0NvbmRpdGlvbih0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gbXNnLmhpZGRlbkNvbmRpdGlvbiA/ICFtc2cuaGlkZGVuQ29uZGl0aW9uKHRoaXMuZGF0YSkgOiB0cnVlO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJoYXNBbGVydE1lc3NhZ2VzKClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O21hcmdpbi1ib3R0b206IDVweDtcIiByb2xlPVwiYWxlcnRcIj5cclxuICA8cCAqbmdJZj1cImFsZXJ0TWVzc2FnZXMuc3ViamVjdFwiPnt7YWxlcnRNZXNzYWdlcy5zdWJqZWN0fX08L3A+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbXNnIG9mIGdldEFsZXJ0TWVzc2FnZXMoKTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJ0ZXN0VmlzaWJsZShtc2cpXCI+e3ttc2cuY29udGVudH19PC9sYWJlbD5cclxuICAgIDxiciAqbmdJZj1cIiFsYXN0XCI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImhhc0FsZXJ0TWVzc2FnZXMoJ3N1Y2Nlc3MnKVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtc3VjY2Vzc1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O21hcmdpbi1ib3R0b206IDVweDtcIiByb2xlPVwiYWxlcnRcIj5cclxuICA8cCAqbmdJZj1cImFsZXJ0TWVzc2FnZXMuc3ViamVjdFwiPnt7YWxlcnRNZXNzYWdlcy5zdWJqZWN0fX08L3A+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbXNnIG9mIGdldEFsZXJ0TWVzc2FnZXMoJ3N1Y2Nlc3MnKTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJ0ZXN0VmlzaWJsZShtc2cpXCI+e3ttc2cuY29udGVudH19PC9sYWJlbD5cclxuICAgIDxiciAqbmdJZj1cIiFsYXN0XCI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImhhc0FsZXJ0TWVzc2FnZXMoJ2luZm8nKVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O21hcmdpbi1ib3R0b206IDVweDtcIiByb2xlPVwiYWxlcnRcIj5cclxuICA8cCAqbmdJZj1cImFsZXJ0TWVzc2FnZXMuc3ViamVjdFwiPnt7YWxlcnRNZXNzYWdlcy5zdWJqZWN0fX08L3A+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbXNnIG9mIGdldEFsZXJ0TWVzc2FnZXMoJ2luZm8nKTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJ0ZXN0VmlzaWJsZShtc2cpXCI+e3ttc2cuY29udGVudH19PC9sYWJlbD5cclxuICAgIDxiciAqbmdJZj1cIiFsYXN0XCI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJoYXNBbGVydE1lc3NhZ2VzKCd3YXJuJylcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDttYXJnaW4tYm90dG9tOiA1cHg7XCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgPHAgKm5nSWY9XCJhbGVydE1lc3NhZ2VzLnN1YmplY3RcIj57e2FsZXJ0TWVzc2FnZXMuc3ViamVjdH19PC9wPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1zZyBvZiBnZXRBbGVydE1lc3NhZ2VzKCd3YXJuJyk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwidGVzdFZpc2libGUobXNnKVwiPnt7bXNnLmNvbnRlbnR9fTwvbGFiZWw+XHJcbiAgICA8YnIgKm5nSWY9XCIhbGFzdFwiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJoYXNBbGVydE1lc3NhZ2VzKCdjcml0aWNhbCcpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDttYXJnaW4tYm90dG9tOiA1cHg7XCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgPHAgKm5nSWY9XCJhbGVydE1lc3NhZ2VzLnN1YmplY3RcIj57e2FsZXJ0TWVzc2FnZXMuc3ViamVjdH19PC9wPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1zZyBvZiBnZXRBbGVydE1lc3NhZ2VzKCdjcml0aWNhbCcpOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgIDxsYWJlbCAqbmdJZj1cInRlc3RWaXNpYmxlKG1zZylcIj57e21zZy5jb250ZW50fX08L2xhYmVsPlxyXG4gICAgPGJyICpuZ0lmPVwiIWxhc3RcIj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import imageCompression from 'browser-image-compression';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "
|
|
4
|
-
import * as i2 from "@angular/
|
|
5
|
-
import * as i3 from "@angular/material/
|
|
6
|
-
import * as i4 from "@angular/material/
|
|
4
|
+
import * as i1 from "../../services/message.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/material/button";
|
|
7
|
+
import * as i4 from "@angular/material/icon";
|
|
8
|
+
import * as i5 from "@angular/material/tooltip";
|
|
7
9
|
export class AttachComponent {
|
|
8
|
-
constructor() {
|
|
10
|
+
constructor(messageService) {
|
|
11
|
+
this.messageService = messageService;
|
|
12
|
+
this.imageExtensions = ['.jpg', '.jpeg', '.png', '.gif'];
|
|
9
13
|
this.message = "Drag and drop files here";
|
|
10
14
|
this.files = [];
|
|
11
15
|
this.filesChange = new EventEmitter();
|
|
@@ -13,6 +17,7 @@ export class AttachComponent {
|
|
|
13
17
|
this.enableUpload = false;
|
|
14
18
|
}
|
|
15
19
|
ngOnInit() {
|
|
20
|
+
// this.fileOptions = {allowedExtensions: ['.jpg', '.jpeg', '.png', '.gif'], maxSizeMB: 1, compressImages: true};
|
|
16
21
|
}
|
|
17
22
|
onFileDropped($event) {
|
|
18
23
|
this.prepareFilesList($event);
|
|
@@ -24,31 +29,40 @@ export class AttachComponent {
|
|
|
24
29
|
deleteFile(index) {
|
|
25
30
|
this.files.splice(index, 1);
|
|
26
31
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
32
|
+
async prepareFilesList(files) {
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
const ext = this.getFileExtension(file.name);
|
|
35
|
+
if (this.fileOptions?.allowedExtensions && !this.fileOptions.allowedExtensions.includes(ext.toLowerCase())) {
|
|
36
|
+
this.messageService.toast(`File type ${ext} not allowed`);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
let processedFile = file;
|
|
40
|
+
if (this.fileOptions?.compressImages && this.isImage(file.name)) {
|
|
41
|
+
try {
|
|
42
|
+
const options = {
|
|
43
|
+
maxSizeMB: this.fileOptions.maxSizeMB || 1,
|
|
44
|
+
maxWidthOrHeight: 1920,
|
|
45
|
+
useWebWorker: true
|
|
46
|
+
};
|
|
47
|
+
processedFile = await imageCompression(file, options);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.messageService.toast(`Error compressing image: ${file.name}`);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
processedFile.progress = 0;
|
|
55
|
+
this.files.push(processedFile);
|
|
50
56
|
}
|
|
51
|
-
|
|
57
|
+
this.filesChange.emit(this.files);
|
|
58
|
+
}
|
|
59
|
+
// Add new helper methods
|
|
60
|
+
getFileExtension(filename) {
|
|
61
|
+
return filename.substring(filename.lastIndexOf('.')).toLowerCase();
|
|
62
|
+
}
|
|
63
|
+
isImage(filename) {
|
|
64
|
+
const ext = this.getFileExtension(filename);
|
|
65
|
+
return this.imageExtensions.includes(ext.toLowerCase());
|
|
52
66
|
}
|
|
53
67
|
formatBytes(bytes, decimals) {
|
|
54
68
|
if (bytes === 0) {
|
|
@@ -67,12 +81,14 @@ export class AttachComponent {
|
|
|
67
81
|
this.filesChange.emit(this.files);
|
|
68
82
|
}
|
|
69
83
|
}
|
|
70
|
-
AttachComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AttachComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
-
AttachComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AttachComponent, selector: "spa-attach", inputs: { message: "message", files: "files", enableUpload: "enableUpload" }, outputs: { filesChange: "filesChange", upload: "upload" }, ngImport: i0, template: "<div class=\"tin-input-row\" style=\"width: 100%;\">\r\n\r\n <div class=\"col\">\r\n <div class=\"container\" appDnd (fileDropped)=\"onFileDropped($event)\">\r\n <input type=\"file\" #fileDropRef id=\"fileDropRef\" multiple (change)=\"fileBrowseHandler($event)\" />\r\n <h4>{{message}}</h4>\r\n\r\n <label for=\"fileDropRef\">Click to Browse</label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <div class=\"files-list \">\r\n <div class=\"single-file \" style=\"width: 100%;\" *ngFor=\"let file of files; let i = index\">\r\n\r\n <div class=\"tin-input-row info\" >\r\n <h4 class=\"name\">\r\n {{ file?.name }}\r\n </h4>\r\n <p class=\"size\">\r\n {{ formatBytes(file?.size, 2) }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"delete\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"18\" viewBox=\"0 0 14 18\">\r\n <path fill=\"#B1B1B1\" fill-rule=\"nonzero\"\r\n d=\"M1 16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v10zm3.17-7.83a.996.996 0 0 1 1.41 0L7 9.59l1.42-1.42a.996.996 0 1 1 1.41 1.41L8.41 11l1.42 1.42a.996.996 0 1 1-1.41 1.41L7 12.41l-1.42 1.42a.996.996 0 1 1-1.41-1.41L5.59 11 4.17 9.58a.996.996 0 0 1 0-1.41zM10.5 1L9.79.29C9.61.11 9.35 0 9.09 0H4.91c-.26 0-.52.11-.7.29L3.5 1H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1h-2.5z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length > 0 && enableUpload\" class=\"tin-input-row d-flex justify-content-center\" style=\"width: 100%;\" >\r\n <button mat-button color=\"primary\" (click)=\"uploaded()\" matTooltip=\"Upload New Documents\" matTooltipPosition=\"above\" ><mat-icon>file_upload</mat-icon> Upload</button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: [".container{width:100%;height:100px;padding-top:5px;text-align:center;border:dashed 2px #2a7b94;position:relative;margin:0 auto}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0}.container label{color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.container h3{font-size:20px;font-weight:600;color:#38424c}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{margin-top:1.5rem}.files-list .single-file{padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #1c824d;margin-bottom:1rem;margin-right:1rem;display:flex;flex-grow:1}.files-list .single-file .delete{display:flex;margin-left:.5rem;cursor:pointer;align-self:flex-end}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0;margin-left:1rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0)}to{transform:translate(1px,-2px) rotate(-1deg)}}\n"], dependencies: [{ kind: "directive", type:
|
|
84
|
+
AttachComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AttachComponent, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
85
|
+
AttachComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AttachComponent, selector: "spa-attach", inputs: { fileOptions: "fileOptions", message: "message", files: "files", enableUpload: "enableUpload" }, outputs: { filesChange: "filesChange", upload: "upload" }, ngImport: i0, template: "<div class=\"tin-input-row\" style=\"width: 100%;\">\r\n\r\n <div class=\"col\">\r\n <div class=\"container\" appDnd (fileDropped)=\"onFileDropped($event)\">\r\n <input type=\"file\" #fileDropRef id=\"fileDropRef\" multiple (change)=\"fileBrowseHandler($event)\" />\r\n <h4>{{message}}</h4>\r\n\r\n <label for=\"fileDropRef\">Click to Browse</label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <div class=\"files-list \">\r\n <div class=\"single-file \" style=\"width: 100%;\" *ngFor=\"let file of files; let i = index\">\r\n\r\n <div class=\"tin-input-row info\" >\r\n <h4 class=\"name\">\r\n {{ file?.name }}\r\n </h4>\r\n <p class=\"size\">\r\n {{ formatBytes(file?.size, 2) }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"delete\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"18\" viewBox=\"0 0 14 18\">\r\n <path fill=\"#B1B1B1\" fill-rule=\"nonzero\"\r\n d=\"M1 16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v10zm3.17-7.83a.996.996 0 0 1 1.41 0L7 9.59l1.42-1.42a.996.996 0 1 1 1.41 1.41L8.41 11l1.42 1.42a.996.996 0 1 1-1.41 1.41L7 12.41l-1.42 1.42a.996.996 0 1 1-1.41-1.41L5.59 11 4.17 9.58a.996.996 0 0 1 0-1.41zM10.5 1L9.79.29C9.61.11 9.35 0 9.09 0H4.91c-.26 0-.52.11-.7.29L3.5 1H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1h-2.5z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length > 0 && enableUpload\" class=\"tin-input-row d-flex justify-content-center\" style=\"width: 100%;\" >\r\n <button mat-button color=\"primary\" (click)=\"uploaded()\" matTooltip=\"Upload New Documents\" matTooltipPosition=\"above\" ><mat-icon>file_upload</mat-icon> Upload</button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: [".container{width:100%;height:100px;padding-top:5px;text-align:center;border:dashed 2px #2a7b94;position:relative;margin:0 auto}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0}.container label{color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.container h3{font-size:20px;font-weight:600;color:#38424c}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{margin-top:1.5rem}.files-list .single-file{padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #1c824d;margin-bottom:1rem;margin-right:1rem;display:flex;flex-grow:1}.files-list .single-file .delete{display:flex;margin-left:.5rem;cursor:pointer;align-self:flex-end}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0;margin-left:1rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0)}to{transform:translate(1px,-2px) rotate(-1deg)}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
72
86
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AttachComponent, decorators: [{
|
|
73
87
|
type: Component,
|
|
74
88
|
args: [{ selector: 'spa-attach', template: "<div class=\"tin-input-row\" style=\"width: 100%;\">\r\n\r\n <div class=\"col\">\r\n <div class=\"container\" appDnd (fileDropped)=\"onFileDropped($event)\">\r\n <input type=\"file\" #fileDropRef id=\"fileDropRef\" multiple (change)=\"fileBrowseHandler($event)\" />\r\n <h4>{{message}}</h4>\r\n\r\n <label for=\"fileDropRef\">Click to Browse</label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <div class=\"files-list \">\r\n <div class=\"single-file \" style=\"width: 100%;\" *ngFor=\"let file of files; let i = index\">\r\n\r\n <div class=\"tin-input-row info\" >\r\n <h4 class=\"name\">\r\n {{ file?.name }}\r\n </h4>\r\n <p class=\"size\">\r\n {{ formatBytes(file?.size, 2) }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"delete\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"18\" viewBox=\"0 0 14 18\">\r\n <path fill=\"#B1B1B1\" fill-rule=\"nonzero\"\r\n d=\"M1 16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v10zm3.17-7.83a.996.996 0 0 1 1.41 0L7 9.59l1.42-1.42a.996.996 0 1 1 1.41 1.41L8.41 11l1.42 1.42a.996.996 0 1 1-1.41 1.41L7 12.41l-1.42 1.42a.996.996 0 1 1-1.41-1.41L5.59 11 4.17 9.58a.996.996 0 0 1 0-1.41zM10.5 1L9.79.29C9.61.11 9.35 0 9.09 0H4.91c-.26 0-.52.11-.7.29L3.5 1H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1h-2.5z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length > 0 && enableUpload\" class=\"tin-input-row d-flex justify-content-center\" style=\"width: 100%;\" >\r\n <button mat-button color=\"primary\" (click)=\"uploaded()\" matTooltip=\"Upload New Documents\" matTooltipPosition=\"above\" ><mat-icon>file_upload</mat-icon> Upload</button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: [".container{width:100%;height:100px;padding-top:5px;text-align:center;border:dashed 2px #2a7b94;position:relative;margin:0 auto}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0}.container label{color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.container h3{font-size:20px;font-weight:600;color:#38424c}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{margin-top:1.5rem}.files-list .single-file{padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #1c824d;margin-bottom:1rem;margin-right:1rem;display:flex;flex-grow:1}.files-list .single-file .delete{display:flex;margin-left:.5rem;cursor:pointer;align-self:flex-end}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0;margin-left:1rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0)}to{transform:translate(1px,-2px) rotate(-1deg)}}\n"] }]
|
|
75
|
-
}], ctorParameters: function () { return []; }, propDecorators: {
|
|
89
|
+
}], ctorParameters: function () { return [{ type: i1.MessageService }]; }, propDecorators: { fileOptions: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], message: [{
|
|
76
92
|
type: Input
|
|
77
93
|
}], files: [{
|
|
78
94
|
type: Input
|
|
@@ -83,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
83
99
|
}], enableUpload: [{
|
|
84
100
|
type: Input
|
|
85
101
|
}] } });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL2F0dGFjaC9hdHRhY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvYXR0YWNoL2F0dGFjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRL0UsTUFBTSxPQUFPLGVBQWU7SUFFMUI7UUFLUyxZQUFPLEdBQUcsMEJBQTBCLENBQUE7UUFDcEMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNqQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHN0IsaUJBQVksR0FBRyxLQUFLLENBQUM7SUFYZCxDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDO0lBV0QsYUFBYSxDQUFDLE1BQU07UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ3JCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBR0QsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILHdDQUF3QztJQUN4Qyx1QkFBdUI7SUFDdkIseUNBQXlDO0lBQ3pDLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YscURBQXFEO0lBQ3JELG9EQUFvRDtJQUNwRCw2Q0FBNkM7SUFDN0Msa0RBQWtEO0lBQ2xELG1CQUFtQjtJQUNuQiw2Q0FBNkM7SUFDN0MsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixRQUFRO0lBQ1IsY0FBYztJQUNkLElBQUk7SUFFSixnQkFBZ0IsQ0FBQyxLQUFpQjtRQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QjtRQUNELGdDQUFnQztJQUNsQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQ3pCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNmLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2YsTUFBTSxFQUFFLEdBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7NEdBM0VVLGVBQWU7Z0dBQWYsZUFBZSwyTENSNUIsNjNEQXVDQTsyRkQvQmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZOzBFQVdiLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBR0UsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1hdHRhY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2F0dGFjaC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHRhY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSBcIkRyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZVwiXHJcbiAgQElucHV0KCkgZmlsZXM6IGFueVtdID0gW107XHJcbiAgQE91dHB1dCgpIGZpbGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1cGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cclxuICBASW5wdXQoKSBlbmFibGVVcGxvYWQgPSBmYWxzZTtcclxuXHJcblxyXG4gIG9uRmlsZURyb3BwZWQoJGV2ZW50KSB7XHJcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGZpbGVCcm93c2VIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICBsZXQgZmlsZXMgPSBldmVudC50YXJnZXQuZmlsZXM7XHJcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoZmlsZXMpO1xyXG4gIH1cclxuXHJcblxyXG4gIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2ltdWxhdGUgdGhlIHVwbG9hZCBwcm9jZXNzXHJcbiAgICovXHJcbiAgLy8gdXBsb2FkRmlsZXNTaW11bGF0b3IoaW5kZXg6IG51bWJlcikge1xyXG4gIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICAgIGlmIChpbmRleCA9PT0gdGhpcy5maWxlcy5sZW5ndGgpIHtcclxuICAvLyAgICAgICByZXR1cm47XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAvLyAgICAgICAgIGlmICh0aGlzLmZpbGVzW2luZGV4XS5wcm9ncmVzcyA9PT0gMTAwKSB7XHJcbiAgLy8gICAgICAgICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NJbnRlcnZhbCk7XHJcbiAgLy8gICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNTaW11bGF0b3IoaW5kZXggKyAxKTtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZmlsZXNbaW5kZXhdLnByb2dyZXNzICs9IDU7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSwgMjAwKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSwgMTAwMCk7XHJcbiAgLy8gfVxyXG5cclxuICBwcmVwYXJlRmlsZXNMaXN0KGZpbGVzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsZXMpIHtcclxuICAgICAgaXRlbS5wcm9ncmVzcyA9IDA7XHJcbiAgICAgIHRoaXMuZmlsZXMucHVzaChpdGVtKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudXBsb2FkRmlsZXNTaW11bGF0b3IoMCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRCeXRlcyhieXRlcywgZGVjaW1hbHMpIHtcclxuICAgIGlmIChieXRlcyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gJzAgQnl0ZXMnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgayA9IDEwMjQ7XHJcbiAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDw9IDAgPyAwIDogZGVjaW1hbHMgfHwgMjtcclxuICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArICcgJyArIHNpemVzW2ldO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWQoKXtcclxuICAgIHRoaXMudXBsb2FkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGZpbGVzQ2hhbmdlZCgpe1xyXG4gICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuZmlsZXMpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGluLWlucHV0LXJvd1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBhcHBEbmQgKGZpbGVEcm9wcGVkKT1cIm9uRmlsZURyb3BwZWQoJGV2ZW50KVwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZURyb3BSZWYgaWQ9XCJmaWxlRHJvcFJlZlwiIG11bHRpcGxlIChjaGFuZ2UpPVwiZmlsZUJyb3dzZUhhbmRsZXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgIDxoND57e21lc3NhZ2V9fTwvaDQ+XHJcblxyXG4gICAgICA8bGFiZWwgZm9yPVwiZmlsZURyb3BSZWZcIj5DbGljayB0byBCcm93c2U8L2xhYmVsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlcy1saXN0IFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpbGUgXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgbGV0IGkgPSBpbmRleFwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGluLWlucHV0LXJvdyBpbmZvXCIgPlxyXG4gICAgICAgICAgPGg0IGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICB7eyBmaWxlPy5uYW1lIH19XHJcbiAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzaXplXCI+XHJcbiAgICAgICAgICAgIHt7IGZvcm1hdEJ5dGVzKGZpbGU/LnNpemUsIDIpIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGVcIiAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiPlxyXG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxNCAxOFwiPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiI0IxQjFCMVwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIlxyXG4gICAgICAgICAgICAgIGQ9XCJNMSAxNmMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMkgzYy0xLjEgMC0yIC45LTIgMnYxMHptMy4xNy03LjgzYS45OTYuOTk2IDAgMCAxIDEuNDEgMEw3IDkuNTlsMS40Mi0xLjQyYS45OTYuOTk2IDAgMSAxIDEuNDEgMS40MUw4LjQxIDExbDEuNDIgMS40MmEuOTk2Ljk5NiAwIDEgMS0xLjQxIDEuNDFMNyAxMi40MWwtMS40MiAxLjQyYS45OTYuOTk2IDAgMSAxLTEuNDEtMS40MUw1LjU5IDExIDQuMTcgOS41OGEuOTk2Ljk5NiAwIDAgMSAwLTEuNDF6TTEwLjUgMUw5Ljc5LjI5QzkuNjEuMTEgOS4zNSAwIDkuMDkgMEg0LjkxYy0uMjYgMC0uNTIuMTEtLjcuMjlMMy41IDFIMWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMWgxMmMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMWgtMi41elwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmlsZXMubGVuZ3RoID4gMCAmJiBlbmFibGVVcGxvYWRcIiBjbGFzcz1cInRpbi1pbnB1dC1yb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiID5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ1cGxvYWRlZCgpXCIgbWF0VG9vbHRpcD1cIlVwbG9hZCBOZXcgRG9jdW1lbnRzXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAgPjxtYXQtaWNvbj5maWxlX3VwbG9hZDwvbWF0LWljb24+IFVwbG9hZDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuIl19
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL2F0dGFjaC9hdHRhY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvYXR0YWNoL2F0dGFjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFRekQsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBb0IsY0FBK0I7UUFBL0IsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBV2xDLG9CQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RCxZQUFPLEdBQUcsMEJBQTBCLENBQUE7UUFDcEMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNqQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHN0IsaUJBQVksR0FBRyxLQUFLLENBQUM7SUFuQnlCLENBQUM7SUFFeEQsUUFBUTtRQUNOLGlIQUFpSDtJQUNuSCxDQUFDO0lBa0JELGFBQWEsQ0FBQyxNQUFNO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBSztRQUNyQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFD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QUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7NEdBakdVLGVBQWU7Z0dBQWYsZUFBZSx1TkNWNUIsNjNEQXVDQTsyRkQ3QmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZO3FHQVliLFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFHRSxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCBpbWFnZUNvbXByZXNzaW9uIGZyb20gJ2Jyb3dzZXItaW1hZ2UtY29tcHJlc3Npb24nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWF0dGFjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXR0YWNoLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEF0dGFjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVzc2FnZVNlcnZpY2UgOiBNZXNzYWdlU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5maWxlT3B0aW9ucyA9IHthbGxvd2VkRXh0ZW5zaW9uczogWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLmdpZiddLCBtYXhTaXplTUI6IDEsIGNvbXByZXNzSW1hZ2VzOiB0cnVlfTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGZpbGVPcHRpb25zOiB7XHJcbiAgICBhbGxvd2VkRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xyXG4gICAgbWF4U2l6ZU1CPzogbnVtYmVyO1xyXG4gICAgY29tcHJlc3NJbWFnZXM/OiBib29sZWFuO1xyXG4gIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpbWFnZUV4dGVuc2lvbnMgPSBbJy5qcGcnLCAnLmpwZWcnLCAnLnBuZycsICcuZ2lmJ107XHJcblxyXG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSBcIkRyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZVwiXHJcbiAgQElucHV0KCkgZmlsZXM6IGFueVtdID0gW107XHJcbiAgQE91dHB1dCgpIGZpbGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1cGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cclxuICBASW5wdXQoKSBlbmFibGVVcGxvYWQgPSBmYWxzZTtcclxuXHJcblxyXG4gIG9uRmlsZURyb3BwZWQoJGV2ZW50KSB7XHJcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGZpbGVCcm93c2VIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICBsZXQgZmlsZXMgPSBldmVudC50YXJnZXQuZmlsZXM7XHJcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoZmlsZXMpO1xyXG4gIH1cclxuXHJcblxyXG4gIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIHByZXBhcmVGaWxlc0xpc3QoZmlsZXM6IEFycmF5PGFueT4pIHtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICBjb25zdCBleHQgPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZS5uYW1lKTtcclxuICAgICAgaWYgKHRoaXMuZmlsZU9wdGlvbnM/LmFsbG93ZWRFeHRlbnNpb25zICYmICF0aGlzLmZpbGVPcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dC50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYEZpbGUgdHlwZSAke2V4dH0gbm90IGFsbG93ZWRgKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHByb2Nlc3NlZEZpbGUgPSBmaWxlO1xyXG4gICAgICBpZiAodGhpcy5maWxlT3B0aW9ucz8uY29tcHJlc3NJbWFnZXMgJiYgdGhpcy5pc0ltYWdlKGZpbGUubmFtZSkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgbWF4U2l6ZU1COiB0aGlzLmZpbGVPcHRpb25zLm1heFNpemVNQiB8fCAxLFxyXG4gICAgICAgICAgICBtYXhXaWR0aE9ySGVpZ2h0OiAxOTIwLFxyXG4gICAgICAgICAgICB1c2VXZWJXb3JrZXI6IHRydWVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBwcm9jZXNzZWRGaWxlID0gYXdhaXQgaW1hZ2VDb21wcmVzc2lvbihmaWxlLCBvcHRpb25zKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChgRXJyb3IgY29tcHJlc3NpbmcgaW1hZ2U6ICR7ZmlsZS5uYW1lfWApO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwcm9jZXNzZWRGaWxlLnByb2dyZXNzID0gMDtcclxuICAgICAgdGhpcy5maWxlcy5wdXNoKHByb2Nlc3NlZEZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuZmlsZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQWRkIG5ldyBoZWxwZXIgbWV0aG9kc1xyXG4gIHByaXZhdGUgZ2V0RmlsZUV4dGVuc2lvbihmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBmaWxlbmFtZS5zdWJzdHJpbmcoZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbWFnZShmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBleHQgPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VFeHRlbnNpb25zLmluY2x1ZGVzKGV4dC50b0xvd2VyQ2FzZSgpKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzKSB7XHJcbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcclxuICAgICAgcmV0dXJuICcwIEJ5dGVzJztcclxuICAgIH1cclxuICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgY29uc3QgZG0gPSBkZWNpbWFscyA8PSAwID8gMCA6IGRlY2ltYWxzIHx8IDI7XHJcbiAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcclxuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpXTtcclxuICB9XHJcblxyXG4gIHVwbG9hZGVkKCl7XHJcbiAgICB0aGlzLnVwbG9hZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBmaWxlc0NoYW5nZWQoKXtcclxuICAgIHRoaXMuZmlsZXNDaGFuZ2UuZW1pdCh0aGlzLmZpbGVzKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRpbi1pbnB1dC1yb3dcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgYXBwRG5kIChmaWxlRHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGVEcm9wUmVmIGlkPVwiZmlsZURyb3BSZWZcIiBtdWx0aXBsZSAoY2hhbmdlKT1cImZpbGVCcm93c2VIYW5kbGVyKCRldmVudClcIiAvPlxyXG4gICAgICA8aDQ+e3ttZXNzYWdlfX08L2g0PlxyXG5cclxuICAgICAgPGxhYmVsIGZvcj1cImZpbGVEcm9wUmVmXCI+Q2xpY2sgdG8gQnJvd3NlPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZXMtbGlzdCBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWxlIFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXM7IGxldCBpID0gaW5kZXhcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dC1yb3cgaW5mb1wiID5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAge3sgZmlsZT8ubmFtZSB9fVxyXG4gICAgICAgICAgPC9oND5cclxuICAgICAgICAgIDxwIGNsYXNzPVwic2l6ZVwiPlxyXG4gICAgICAgICAgICB7eyBmb3JtYXRCeXRlcyhmaWxlPy5zaXplLCAyKSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaSlcIj5cclxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTQgMThcIj5cclxuICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNCMUIxQjFcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCJcclxuICAgICAgICAgICAgICBkPVwiTTEgMTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJIM2MtMS4xIDAtMiAuOS0yIDJ2MTB6bTMuMTctNy44M2EuOTk2Ljk5NiAwIDAgMSAxLjQxIDBMNyA5LjU5bDEuNDItMS40MmEuOTk2Ljk5NiAwIDEgMSAxLjQxIDEuNDFMOC40MSAxMWwxLjQyIDEuNDJhLjk5Ni45OTYgMCAxIDEtMS40MSAxLjQxTDcgMTIuNDFsLTEuNDIgMS40MmEuOTk2Ljk5NiAwIDEgMS0xLjQxLTEuNDFMNS41OSAxMSA0LjE3IDkuNThhLjk5Ni45OTYgMCAwIDEgMC0xLjQxek0xMC41IDFMOS43OS4yOUM5LjYxLjExIDkuMzUgMCA5LjA5IDBINC45MWMtLjI2IDAtLjUyLjExLS43LjI5TDMuNSAxSDFjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTFoLTIuNXpcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImZpbGVzLmxlbmd0aCA+IDAgJiYgZW5hYmxlVXBsb2FkXCIgY2xhc3M9XCJ0aW4taW5wdXQtcm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiA+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidXBsb2FkZWQoKVwiIG1hdFRvb2x0aXA9XCJVcGxvYWQgTmV3IERvY3VtZW50c1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgID48bWF0LWljb24+ZmlsZV91cGxvYWQ8L21hdC1pY29uPiBVcGxvYWQ8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/button.service";
|
|
4
|
+
import * as i2 from "../../services/condition.service";
|
|
5
|
+
import * as i3 from "@angular/common";
|
|
6
|
+
import * as i4 from "@angular/material/menu";
|
|
7
|
+
import * as i5 from "@angular/material/icon";
|
|
8
|
+
import * as i6 from "@angular/material/chips";
|
|
9
|
+
export class CapsulesComponent {
|
|
10
|
+
constructor(buttonService, conditionService) {
|
|
11
|
+
this.buttonService = buttonService;
|
|
12
|
+
this.conditionService = conditionService;
|
|
13
|
+
this.displayedButtons = [];
|
|
14
|
+
this.actionClick = new EventEmitter();
|
|
15
|
+
}
|
|
16
|
+
// Extract display value based on config
|
|
17
|
+
getDisplayValue(row) {
|
|
18
|
+
if (!this.config?.capsuleConfig?.displayField) {
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
return row[this.config.capsuleConfig.displayField];
|
|
22
|
+
}
|
|
23
|
+
// Check icon visibility condition
|
|
24
|
+
testIconCondition(row, icon) {
|
|
25
|
+
return this.conditionService.testIconCondition(icon, row);
|
|
26
|
+
}
|
|
27
|
+
// Handle button click from menu
|
|
28
|
+
onActionClick(buttonName, row) {
|
|
29
|
+
this.actionClick.emit({ name: buttonName, row });
|
|
30
|
+
}
|
|
31
|
+
// Get button color using service
|
|
32
|
+
getButtonColor(button, row) {
|
|
33
|
+
return this.buttonService.getButtonColor(button, row);
|
|
34
|
+
}
|
|
35
|
+
// Get icon for button using service
|
|
36
|
+
getIcon(buttonName) {
|
|
37
|
+
return this.buttonService.getIcon(this.getButton(buttonName), this.config);
|
|
38
|
+
}
|
|
39
|
+
// Test if button should be disabled
|
|
40
|
+
testDisabled(row, buttonName) {
|
|
41
|
+
const button = this.getButton(buttonName);
|
|
42
|
+
return this.buttonService.testDisabled(button, row, this.config);
|
|
43
|
+
}
|
|
44
|
+
// Get button by name
|
|
45
|
+
getButton(name) {
|
|
46
|
+
return this.displayedButtons?.find(x => x.name === name) || null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
CapsulesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapsulesComponent, deps: [{ token: i1.ButtonService }, { token: i2.ConditionService }], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
+
CapsulesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CapsulesComponent, selector: "spa-capsules", inputs: { config: "config", dataSource: "dataSource", displayedButtons: "displayedButtons" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<mat-chip-list>\n <mat-chip *ngFor=\"let row of dataSource\" [matMenuTriggerFor]=\"itemMenu\" [matMenuTriggerData]=\"{item: row}\">\n <!-- Left icons -->\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.leftIcons\">\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \n [ngStyle]=\"{'color': icon?.color}\" \n style=\"font-size: 18px; padding-top: 3px; margin-right: 5px;\">\n {{icon.name}}\n </mat-icon>\n </ng-container>\n \n <!-- Display text -->\n <label style=\"margin-right: 5px;\">{{getDisplayValue(row)}}</label>\n \n <!-- Right icons -->\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.rightIcons\">\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \n [ngStyle]=\"{'color': icon?.color}\" \n style=\"font-size: 18px; padding-top: 3px; margin-left: 5px;\">\n {{icon.name}}\n </mat-icon>\n </ng-container>\n </mat-chip>\n</mat-chip-list>\n \n <!-- Context menu -->\n<mat-menu #itemMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item *ngFor=\"let button of buttonService.getVisibleButtons(displayedButtons, item, config)\" \n [disabled]=\"testDisabled(item, button.name)\"\n (click)=\"onActionClick(button.name, item)\">\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, item)}\">\n {{getIcon(button.name)}}\n </mat-icon>\n <span>{{button.display || (button.name | titlecase)}}</span>\n </button>\n </ng-template>\n</mat-menu>", styles: ["mat-chip{cursor:pointer;margin:4px}mat-chip:hover{opacity:.8}mat-icon{vertical-align:middle}label{vertical-align:middle;margin:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i4.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i6.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }] });
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapsulesComponent, decorators: [{
|
|
52
|
+
type: Component,
|
|
53
|
+
args: [{ selector: 'spa-capsules', template: "<mat-chip-list>\n <mat-chip *ngFor=\"let row of dataSource\" [matMenuTriggerFor]=\"itemMenu\" [matMenuTriggerData]=\"{item: row}\">\n <!-- Left icons -->\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.leftIcons\">\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \n [ngStyle]=\"{'color': icon?.color}\" \n style=\"font-size: 18px; padding-top: 3px; margin-right: 5px;\">\n {{icon.name}}\n </mat-icon>\n </ng-container>\n \n <!-- Display text -->\n <label style=\"margin-right: 5px;\">{{getDisplayValue(row)}}</label>\n \n <!-- Right icons -->\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.rightIcons\">\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \n [ngStyle]=\"{'color': icon?.color}\" \n style=\"font-size: 18px; padding-top: 3px; margin-left: 5px;\">\n {{icon.name}}\n </mat-icon>\n </ng-container>\n </mat-chip>\n</mat-chip-list>\n \n <!-- Context menu -->\n<mat-menu #itemMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item *ngFor=\"let button of buttonService.getVisibleButtons(displayedButtons, item, config)\" \n [disabled]=\"testDisabled(item, button.name)\"\n (click)=\"onActionClick(button.name, item)\">\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, item)}\">\n {{getIcon(button.name)}}\n </mat-icon>\n <span>{{button.display || (button.name | titlecase)}}</span>\n </button>\n </ng-template>\n</mat-menu>", styles: ["mat-chip{cursor:pointer;margin:4px}mat-chip:hover{opacity:.8}mat-icon{vertical-align:middle}label{vertical-align:middle;margin:0}\n"] }]
|
|
54
|
+
}], ctorParameters: function () { return [{ type: i1.ButtonService }, { type: i2.ConditionService }]; }, propDecorators: { config: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], dataSource: [{
|
|
57
|
+
type: Input
|
|
58
|
+
}], displayedButtons: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], actionClick: [{
|
|
61
|
+
type: Output
|
|
62
|
+
}] } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fwc3VsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2Fwc3VsZXMvY2Fwc3VsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2Fwc3VsZXMvY2Fwc3VsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFVdkUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUNTLGFBQTRCLEVBQzNCLGdCQUFrQztRQURuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBS25DLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUUvQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBTmxFLENBQUM7SUFRSix3Q0FBd0M7SUFDeEMsZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRTtZQUM3QyxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsSUFBUztRQUNuQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxhQUFhLENBQUMsVUFBa0IsRUFBRSxHQUFRO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsT0FBTyxDQUFDLFVBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxZQUFZLENBQUMsR0FBUSxFQUFFLFVBQWtCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQscUJBQXFCO0lBQ2IsU0FBUyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbkUsQ0FBQzs7OEdBakRVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDJMQ1Y5Qix1bURBcUNXOzJGRDNCRSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYzttSUFVZixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b24sIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcbmltcG9ydCB7IEJ1dHRvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25kaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZGl0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcGEtY2Fwc3VsZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fwc3VsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXBzdWxlcy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2Fwc3VsZXNDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmRpdGlvblNlcnZpY2U6IENvbmRpdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIEBJbnB1dCgpIGNvbmZpZzogVGFibGVDb25maWc7XG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdO1xuICBASW5wdXQoKSBkaXNwbGF5ZWRCdXR0b25zOiBCdXR0b25bXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e25hbWU6IHN0cmluZywgcm93OiBhbnl9PigpO1xuXG4gIC8vIEV4dHJhY3QgZGlzcGxheSB2YWx1ZSBiYXNlZCBvbiBjb25maWdcbiAgZ2V0RGlzcGxheVZhbHVlKHJvdzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnPy5jYXBzdWxlQ29uZmlnPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHJvd1t0aGlzLmNvbmZpZy5jYXBzdWxlQ29uZmlnLmRpc3BsYXlGaWVsZF07XG4gIH1cblxuICAvLyBDaGVjayBpY29uIHZpc2liaWxpdHkgY29uZGl0aW9uXG4gIHRlc3RJY29uQ29uZGl0aW9uKHJvdzogYW55LCBpY29uOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TZXJ2aWNlLnRlc3RJY29uQ29uZGl0aW9uKGljb24sIHJvdyk7XG4gIH1cblxuICAvLyBIYW5kbGUgYnV0dG9uIGNsaWNrIGZyb20gbWVudVxuICBvbkFjdGlvbkNsaWNrKGJ1dHRvbk5hbWU6IHN0cmluZywgcm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoeyBuYW1lOiBidXR0b25OYW1lLCByb3cgfSk7XG4gIH1cblxuICAvLyBHZXQgYnV0dG9uIGNvbG9yIHVzaW5nIHNlcnZpY2VcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcbiAgfVxuXG4gIC8vIEdldCBpY29uIGZvciBidXR0b24gdXNpbmcgc2VydmljZVxuICBnZXRJY29uKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRJY29uKHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpLCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICAvLyBUZXN0IGlmIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWRcbiAgdGVzdERpc2FibGVkKHJvdzogYW55LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3REaXNhYmxlZChidXR0b24sIHJvdywgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgLy8gR2V0IGJ1dHRvbiBieSBuYW1lXG4gIHByaXZhdGUgZ2V0QnV0dG9uKG5hbWU6IHN0cmluZyk6IEJ1dHRvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZEJ1dHRvbnM/LmZpbmQoeCA9PiB4Lm5hbWUgPT09IG5hbWUpIHx8IG51bGw7XG4gIH1cbn0iLCI8bWF0LWNoaXAtbGlzdD5cbiAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhU291cmNlXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIml0ZW1NZW51XCIgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogcm93fVwiPlxuICAgICAgPCEtLSBMZWZ0IGljb25zIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb25maWcuY2Fwc3VsZUNvbmZpZz8ubGVmdEljb25zXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnY29sb3InOiBpY29uPy5jb2xvcn1cIiBcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyBwYWRkaW5nLXRvcDogM3B4OyBtYXJnaW4tcmlnaHQ6IDVweDtcIj5cbiAgICAgICAgICB7e2ljb24ubmFtZX19XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgXG4gICAgICA8IS0tIERpc3BsYXkgdGV4dCAtLT5cbiAgICAgIDxsYWJlbCBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7Z2V0RGlzcGxheVZhbHVlKHJvdyl9fTwvbGFiZWw+XG4gIFxuICAgICAgPCEtLSBSaWdodCBpY29ucyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29uZmlnLmNhcHN1bGVDb25maWc/LnJpZ2h0SWNvbnNcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydjb2xvcic6IGljb24/LmNvbG9yfVwiIFxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IHBhZGRpbmctdG9wOiAzcHg7IG1hcmdpbi1sZWZ0OiA1cHg7XCI+XG4gICAgICAgICAge3tpY29uLm5hbWV9fVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtY2hpcD5cbjwvbWF0LWNoaXAtbGlzdD5cbiAgXG4gIDwhLS0gQ29udGV4dCBtZW51IC0tPlxuPG1hdC1tZW51ICNpdGVtTWVudT1cIm1hdE1lbnVcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25TZXJ2aWNlLmdldFZpc2libGVCdXR0b25zKGRpc3BsYXllZEJ1dHRvbnMsIGl0ZW0sIGNvbmZpZylcIiBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRlc3REaXNhYmxlZChpdGVtLCBidXR0b24ubmFtZSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25DbGljayhidXR0b24ubmFtZSwgaXRlbSlcIj5cbiAgICAgICAgPG1hdC1pY29uIFtuZ1N0eWxlXT1cInsnY29sb3InOiBnZXRCdXR0b25Db2xvcihidXR0b24sIGl0ZW0pfVwiPlxuICAgICAgICAgIHt7Z2V0SWNvbihidXR0b24ubmFtZSl9fVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57e2J1dHRvbi5kaXNwbGF5IHx8IChidXR0b24ubmFtZSB8IHRpdGxlY2FzZSl9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PiJdfQ==
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/button.service";
|
|
4
|
+
import * as i2 from "../../services/condition.service";
|
|
5
|
+
import * as i3 from "@angular/common";
|
|
6
|
+
import * as i4 from "@angular/material/button";
|
|
7
|
+
import * as i5 from "@angular/material/icon";
|
|
8
|
+
import * as i6 from "@angular/material/card";
|
|
9
|
+
import * as i7 from "@angular/material/tooltip";
|
|
10
|
+
export class CardsComponent {
|
|
11
|
+
constructor(buttonService, conditionService) {
|
|
12
|
+
this.buttonService = buttonService;
|
|
13
|
+
this.conditionService = conditionService;
|
|
14
|
+
this.displayedButtons = [];
|
|
15
|
+
this.smallScreen = false;
|
|
16
|
+
this.actionClick = new EventEmitter();
|
|
17
|
+
this.columnClick = new EventEmitter();
|
|
18
|
+
this.showBannerEvent = new EventEmitter();
|
|
19
|
+
}
|
|
20
|
+
// Get title value for a card
|
|
21
|
+
getTitleValue(row) {
|
|
22
|
+
const titleField = this.config?.cardConfig?.titleField;
|
|
23
|
+
return titleField ? row[titleField] : '';
|
|
24
|
+
}
|
|
25
|
+
// Get subtitle value for a card
|
|
26
|
+
getSubtitleValue(row) {
|
|
27
|
+
const subtitleField = this.config?.cardConfig?.subtitleField;
|
|
28
|
+
return subtitleField ? row[subtitleField] : '';
|
|
29
|
+
}
|
|
30
|
+
// Get content values for a card
|
|
31
|
+
getContentValues(row) {
|
|
32
|
+
const contentFields = this.config?.cardConfig?.contentFields || [];
|
|
33
|
+
return contentFields.map(field => {
|
|
34
|
+
const column = this.config.columns.find(col => col.name === field);
|
|
35
|
+
return {
|
|
36
|
+
label: column?.alias || field,
|
|
37
|
+
value: row[field]
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Handle button click from menu
|
|
42
|
+
onActionClick(buttonName, row) {
|
|
43
|
+
this.actionClick.emit({ name: buttonName, row });
|
|
44
|
+
}
|
|
45
|
+
// Get color for button
|
|
46
|
+
getButtonColor(button, row) {
|
|
47
|
+
return this.buttonService.getButtonColor(button, row);
|
|
48
|
+
}
|
|
49
|
+
// Get icon for button
|
|
50
|
+
getIcon(buttonName) {
|
|
51
|
+
return this.buttonService.getIcon(this.getButton(buttonName), this.config);
|
|
52
|
+
}
|
|
53
|
+
// Test if button should be disabled
|
|
54
|
+
testDisabled(row, buttonName) {
|
|
55
|
+
const button = this.getButton(buttonName);
|
|
56
|
+
return this.buttonService.testDisabled(button, row, this.config);
|
|
57
|
+
}
|
|
58
|
+
// Test if button should be visible
|
|
59
|
+
testVisible(row, buttonName) {
|
|
60
|
+
const button = this.getButton(buttonName);
|
|
61
|
+
return this.buttonService.testVisible(button, row, this.config);
|
|
62
|
+
}
|
|
63
|
+
// Get elevation class based on config
|
|
64
|
+
getElevationClass() {
|
|
65
|
+
const elevation = this.config?.cardConfig?.elevation || 'medium';
|
|
66
|
+
switch (elevation) {
|
|
67
|
+
case 'low': return 'mat-elevation-z1';
|
|
68
|
+
case 'high': return 'mat-elevation-z8';
|
|
69
|
+
default: return 'mat-elevation-z4';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Get number of columns for grid
|
|
73
|
+
getColumnCount() {
|
|
74
|
+
if (this.smallScreen)
|
|
75
|
+
return 1;
|
|
76
|
+
return this.config?.cardConfig?.columns || 3;
|
|
77
|
+
}
|
|
78
|
+
// Get button by name
|
|
79
|
+
getButton(name) {
|
|
80
|
+
return this.displayedButtons?.find(x => x.name === name) || null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
CardsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsComponent, deps: [{ token: i1.ButtonService }, { token: i2.ConditionService }], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
+
CardsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardsComponent, selector: "spa-cards", inputs: { config: "config", dataSource: "dataSource", displayedButtons: "displayedButtons", smallScreen: "smallScreen" }, outputs: { actionClick: "actionClick", columnClick: "columnClick", showBannerEvent: "showBannerEvent" }, ngImport: i0, template: "<div class=\"cards-container\" [style.grid-template-columns]=\"'repeat(' + getColumnCount() + ', 1fr)'\">\n <mat-card *ngFor=\"let row of dataSource\" [class]=\"getElevationClass()\" class=\"card-item\">\n <mat-card-header>\n <mat-card-title>{{getTitleValue(row)}}</mat-card-title>\n <mat-card-subtitle *ngIf=\"getSubtitleValue(row)\">{{getSubtitleValue(row)}}</mat-card-subtitle>\n </mat-card-header>\n \n <mat-card-content>\n <div class=\"content-item\" *ngFor=\"let content of getContentValues(row)\">\n <span class=\"label\">{{content.label}}:</span>\n <span class=\"value\">{{content.value}}</span>\n </div>\n </mat-card-content>\n \n <mat-card-actions align=\"end\">\n <ng-container *ngFor=\"let button of displayedButtons\">\n <button *ngIf=\"!config.flatButtons && testVisible(row, button.name)\" \n mat-mini-fab\n [matTooltip]=\"button.tip ?? button.name | titlecase\"\n matTooltipPosition=\"above\"\n [ngStyle]=\"{'background-color': getButtonColor(button, row)}\"\n [disabled]=\"testDisabled(row, button.name)\"\n (click)=\"onActionClick(button.name, row)\">\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\n </button>\n \n <button *ngIf=\"config.flatButtons && testVisible(row, button.name)\"\n mat-icon-button \n [matTooltip]=\"button.tip ?? button.name | titlecase\"\n matTooltipPosition=\"above\"\n [disabled]=\"testDisabled(row, button.name)\"\n (click)=\"onActionClick(button.name, row)\">\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">{{getIcon(button.name)}}</mat-icon>\n </button>\n </ng-container>\n </mat-card-actions>\n </mat-card>\n </div>", styles: [".cards-container{display:grid;gap:20px;padding:20px}.card-item{height:100%;transition:transform .2s}.card-item:hover{transform:translateY(-5px)}.content-item{margin:8px 0;display:grid;grid-template-columns:minmax(33%,1fr) minmax(67%,2fr);gap:8px;align-items:baseline}.label{font-weight:500;color:#000000b3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.value{text-align:left;word-break:break-word}mat-card-actions{padding:16px;display:flex;gap:8px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i6.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }] });
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsComponent, decorators: [{
|
|
86
|
+
type: Component,
|
|
87
|
+
args: [{ selector: 'spa-cards', template: "<div class=\"cards-container\" [style.grid-template-columns]=\"'repeat(' + getColumnCount() + ', 1fr)'\">\n <mat-card *ngFor=\"let row of dataSource\" [class]=\"getElevationClass()\" class=\"card-item\">\n <mat-card-header>\n <mat-card-title>{{getTitleValue(row)}}</mat-card-title>\n <mat-card-subtitle *ngIf=\"getSubtitleValue(row)\">{{getSubtitleValue(row)}}</mat-card-subtitle>\n </mat-card-header>\n \n <mat-card-content>\n <div class=\"content-item\" *ngFor=\"let content of getContentValues(row)\">\n <span class=\"label\">{{content.label}}:</span>\n <span class=\"value\">{{content.value}}</span>\n </div>\n </mat-card-content>\n \n <mat-card-actions align=\"end\">\n <ng-container *ngFor=\"let button of displayedButtons\">\n <button *ngIf=\"!config.flatButtons && testVisible(row, button.name)\" \n mat-mini-fab\n [matTooltip]=\"button.tip ?? button.name | titlecase\"\n matTooltipPosition=\"above\"\n [ngStyle]=\"{'background-color': getButtonColor(button, row)}\"\n [disabled]=\"testDisabled(row, button.name)\"\n (click)=\"onActionClick(button.name, row)\">\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\n </button>\n \n <button *ngIf=\"config.flatButtons && testVisible(row, button.name)\"\n mat-icon-button \n [matTooltip]=\"button.tip ?? button.name | titlecase\"\n matTooltipPosition=\"above\"\n [disabled]=\"testDisabled(row, button.name)\"\n (click)=\"onActionClick(button.name, row)\">\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">{{getIcon(button.name)}}</mat-icon>\n </button>\n </ng-container>\n </mat-card-actions>\n </mat-card>\n </div>", styles: [".cards-container{display:grid;gap:20px;padding:20px}.card-item{height:100%;transition:transform .2s}.card-item:hover{transform:translateY(-5px)}.content-item{margin:8px 0;display:grid;grid-template-columns:minmax(33%,1fr) minmax(67%,2fr);gap:8px;align-items:baseline}.label{font-weight:500;color:#000000b3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.value{text-align:left;word-break:break-word}mat-card-actions{padding:16px;display:flex;gap:8px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}\n"] }]
|
|
88
|
+
}], ctorParameters: function () { return [{ type: i1.ButtonService }, { type: i2.ConditionService }]; }, propDecorators: { config: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], dataSource: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], displayedButtons: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], smallScreen: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], actionClick: [{
|
|
97
|
+
type: Output
|
|
98
|
+
}], columnClick: [{
|
|
99
|
+
type: Output
|
|
100
|
+
}], showBannerEvent: [{
|
|
101
|
+
type: Output
|
|
102
|
+
}] } });
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvY2FyZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvY2FyZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXZFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1MsYUFBNEIsRUFDM0IsZ0JBQWtDO1FBRG5DLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFLbkMscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUMxRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFUcEQsQ0FBQztJQVdKLDZCQUE2QjtJQUM3QixhQUFhLENBQUMsR0FBUTtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDdkQsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUM7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QyxJQUFJLElBQUksQ0FBQztJQUNuRSxDQUFDOzsyR0FyRlUsY0FBYzsrRkFBZCxjQUFjLG9SQ1YzQix5NERBcUNROzJGRDNCSyxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7bUlBVVosTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZGl0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmRpdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLWNhcmRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZHMuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhcmRzQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGJ1dHRvblNlcnZpY2U6IEJ1dHRvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25kaXRpb25TZXJ2aWNlOiBDb25kaXRpb25TZXJ2aWNlXG4gICkge31cblxuICBASW5wdXQoKSBjb25maWc6IFRhYmxlQ29uZmlnO1xuICBASW5wdXQoKSBkYXRhU291cmNlOiBhbnlbXTtcbiAgQElucHV0KCkgZGlzcGxheWVkQnV0dG9uczogQnV0dG9uW10gPSBbXTtcbiAgQElucHV0KCkgc21hbGxTY3JlZW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtuYW1lOiBzdHJpbmcsIHJvdzogYW55fT4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7Y29sdW1uOiBhbnksIHJvdzogYW55fT4oKTtcbiAgQE91dHB1dCgpIHNob3dCYW5uZXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vIEdldCB0aXRsZSB2YWx1ZSBmb3IgYSBjYXJkXG4gIGdldFRpdGxlVmFsdWUocm93OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLmNvbmZpZz8uY2FyZENvbmZpZz8udGl0bGVGaWVsZDtcbiAgICByZXR1cm4gdGl0bGVGaWVsZCA/IHJvd1t0aXRsZUZpZWxkXSA6ICcnO1xuICB9XG5cbiAgLy8gR2V0IHN1YnRpdGxlIHZhbHVlIGZvciBhIGNhcmRcbiAgZ2V0U3VidGl0bGVWYWx1ZShyb3c6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3VidGl0bGVGaWVsZCA9IHRoaXMuY29uZmlnPy5jYXJkQ29uZmlnPy5zdWJ0aXRsZUZpZWxkO1xuICAgIHJldHVybiBzdWJ0aXRsZUZpZWxkID8gcm93W3N1YnRpdGxlRmllbGRdIDogJyc7XG4gIH1cblxuICAvLyBHZXQgY29udGVudCB2YWx1ZXMgZm9yIGEgY2FyZFxuICBnZXRDb250ZW50VmFsdWVzKHJvdzogYW55KToge2xhYmVsOiBzdHJpbmcsIHZhbHVlOiBhbnl9W10ge1xuICAgIGNvbnN0IGNvbnRlbnRGaWVsZHMgPSB0aGlzLmNvbmZpZz8uY2FyZENvbmZpZz8uY29udGVudEZpZWxkcyB8fCBbXTtcbiAgICByZXR1cm4gY29udGVudEZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wubmFtZSA9PT0gZmllbGQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IGNvbHVtbj8uYWxpYXMgfHwgZmllbGQsXG4gICAgICAgIHZhbHVlOiByb3dbZmllbGRdXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGJ1dHRvbiBjbGljayBmcm9tIG1lbnVcbiAgb25BY3Rpb25DbGljayhidXR0b25OYW1lOiBzdHJpbmcsIHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHsgbmFtZTogYnV0dG9uTmFtZSwgcm93IH0pO1xuICB9XG5cbiAgLy8gR2V0IGNvbG9yIGZvciBidXR0b25cbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcbiAgfVxuXG4gIC8vIEdldCBpY29uIGZvciBidXR0b25cbiAgZ2V0SWNvbihidXR0b25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0SWNvbih0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKSwgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgLy8gVGVzdCBpZiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkXG4gIHRlc3REaXNhYmxlZChyb3c6IGFueSwgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3csIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIC8vIFRlc3QgaWYgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlXG4gIHRlc3RWaXNpYmxlKHJvdzogYW55LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKGJ1dHRvbiwgcm93LCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICAvLyBHZXQgZWxldmF0aW9uIGNsYXNzIGJhc2VkIG9uIGNvbmZpZ1xuICBnZXRFbGV2YXRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVsZXZhdGlvbiA9IHRoaXMuY29uZmlnPy5jYXJkQ29uZmlnPy5lbGV2YXRpb24gfHwgJ21lZGl1bSc7XG4gICAgc3dpdGNoKGVsZXZhdGlvbikge1xuICAgICAgY2FzZSAnbG93JzogcmV0dXJuICdtYXQtZWxldmF0aW9uLXoxJztcbiAgICAgIGNhc2UgJ2hpZ2gnOiByZXR1cm4gJ21hdC1lbGV2YXRpb24tejgnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICdtYXQtZWxldmF0aW9uLXo0JztcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgbnVtYmVyIG9mIGNvbHVtbnMgZm9yIGdyaWRcbiAgZ2V0Q29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zbWFsbFNjcmVlbikgcmV0dXJuIDE7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5jYXJkQ29uZmlnPy5jb2x1bW5zIHx8IDM7XG4gIH1cblxuICAvLyBHZXQgYnV0dG9uIGJ5IG5hbWVcbiAgcHJpdmF0ZSBnZXRCdXR0b24obmFtZTogc3RyaW5nKTogQnV0dG9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQnV0dG9ucz8uZmluZCh4ID0+IHgubmFtZSA9PT0gbmFtZSkgfHwgbnVsbDtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIiBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cIidyZXBlYXQoJyArIGdldENvbHVtbkNvdW50KCkgKyAnLCAxZnIpJ1wiPlxuICAgIDxtYXQtY2FyZCAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFTb3VyY2VcIiBbY2xhc3NdPVwiZ2V0RWxldmF0aW9uQ2xhc3MoKVwiIGNsYXNzPVwiY2FyZC1pdGVtXCI+XG4gICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+e3tnZXRUaXRsZVZhbHVlKHJvdyl9fTwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgIDxtYXQtY2FyZC1zdWJ0aXRsZSAqbmdJZj1cImdldFN1YnRpdGxlVmFsdWUocm93KVwiPnt7Z2V0U3VidGl0bGVWYWx1ZShyb3cpfX08L21hdC1jYXJkLXN1YnRpdGxlPlxuICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIFxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWl0ZW1cIiAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBnZXRDb250ZW50VmFsdWVzKHJvdylcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3tjb250ZW50LmxhYmVsfX06PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57e2NvbnRlbnQudmFsdWV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIFxuICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRpc3BsYXllZEJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWNvbmZpZy5mbGF0QnV0dG9ucyAmJiB0ZXN0VmlzaWJsZShyb3csIGJ1dHRvbi5uYW1lKVwiIFxuICAgICAgICAgICAgICAgICAgbWF0LW1pbmktZmFiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGlwID8/IGJ1dHRvbi5uYW1lIHwgdGl0bGVjYXNlXCJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KX1cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRlc3REaXNhYmxlZChyb3csIGJ1dHRvbi5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25DbGljayhidXR0b24ubmFtZSwgcm93KVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnt7Z2V0SWNvbihidXR0b24ubmFtZSl9fTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gIFxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb25maWcuZmxhdEJ1dHRvbnMgJiYgdGVzdFZpc2libGUocm93LCBidXR0b24ubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRpcCA/PyBidXR0b24ubmFtZSB8IHRpdGxlY2FzZVwiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGVzdERpc2FibGVkKHJvdywgYnV0dG9uLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGJ1dHRvbi5uYW1lLCByb3cpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KX1cIj57e2dldEljb24oYnV0dG9uLm5hbWUpfX08L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj4iXX0=
|