@senior-gestao-relacionamento/angular-components 1.10.0 → 2.0.0-master-961a1e59
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 +15 -0
- package/esm2022/lib/angular-components.module.mjs +22 -0
- package/esm2022/lib/components/schedule/components/index.mjs +3 -0
- package/esm2022/lib/components/schedule/components/schedule-detail.component.mjs +244 -0
- package/esm2022/lib/components/schedule/components/schedule-form.component.mjs +780 -0
- package/esm2022/lib/components/schedule/index.mjs +9 -0
- package/esm2022/lib/components/schedule/models/index.mjs +2 -0
- package/esm2022/lib/components/schedule/models/schedule.enums.mjs +59 -0
- package/esm2022/lib/components/schedule/models/schedule.interface.mjs +2 -0
- package/esm2022/lib/components/schedule/services/index.mjs +3 -0
- package/esm2022/lib/components/schedule/services/schedule-type.service.mjs +20 -0
- package/esm2022/lib/components/schedule/services/schedule.service.mjs +69 -0
- package/esm2022/lib/services/current-collaborator/current-collaborator.service.mjs +70 -0
- package/esm2022/lib/services/current-collaborator/models/collaborator.model.mjs +2 -0
- package/esm2022/lib/services/storage/storage.service.mjs +130 -0
- package/esm2022/lib/services/translation/translate.pipe.mjs +23 -0
- package/esm2022/lib/services/translation/translation.service.mjs +49 -0
- package/esm2022/locale/locale.config.mjs +65 -0
- package/esm2022/public-api.mjs +13 -0
- package/esm2022/senior-gestao-relacionamento-angular-components.mjs +5 -0
- package/fesm2022/senior-gestao-relacionamento-angular-components.mjs +1434 -0
- package/fesm2022/senior-gestao-relacionamento-angular-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/angular-components.module.d.ts +10 -0
- package/lib/components/schedule/components/index.d.ts +2 -0
- package/lib/components/schedule/components/schedule-detail.component.d.ts +52 -0
- package/lib/components/schedule/components/schedule-form.component.d.ts +98 -0
- package/lib/components/schedule/index.d.ts +7 -0
- package/lib/components/schedule/models/index.d.ts +2 -0
- package/lib/components/schedule/models/schedule.enums.d.ts +51 -0
- package/lib/components/schedule/models/schedule.interface.d.ts +66 -0
- package/lib/components/schedule/services/index.d.ts +2 -0
- package/lib/components/schedule/services/schedule-type.service.d.ts +11 -0
- package/lib/components/schedule/services/schedule.service.d.ts +87 -0
- package/lib/services/current-collaborator/current-collaborator.service.d.ts +32 -0
- package/lib/services/current-collaborator/models/collaborator.model.d.ts +53 -0
- package/lib/services/storage/storage.service.d.ts +44 -0
- package/lib/services/translation/translate.pipe.d.ts +10 -0
- package/lib/services/translation/translation.service.d.ts +15 -0
- package/locale/locale.config.d.ts +16 -0
- package/package.json +39 -41
- package/public-api.d.ts +10 -4
- package/bundles/senior-gestao-relacionamento-angular-components.umd.js +0 -1586
- package/bundles/senior-gestao-relacionamento-angular-components.umd.js.map +0 -1
- package/bundles/senior-gestao-relacionamento-angular-components.umd.min.js +0 -16
- package/bundles/senior-gestao-relacionamento-angular-components.umd.min.js.map +0 -1
- package/components/index.d.ts +0 -2
- package/components/refresh-websocket-alert/index.d.ts +0 -2
- package/components/refresh-websocket-alert/refresh-websocket-alert.component.d.ts +0 -14
- package/components/refresh-websocket-alert/refresh-websocket-alert.module.d.ts +0 -2
- package/components/reports/enums/format-enum.d.ts +0 -9
- package/components/reports/enums/index.d.ts +0 -2
- package/components/reports/enums/view-mode-enum.d.ts +0 -4
- package/components/reports/index.d.ts +0 -5
- package/components/reports/models/callback-event.d.ts +0 -4
- package/components/reports/models/generate-report-input-dto.d.ts +0 -11
- package/components/reports/models/generate-report-output-dto.d.ts +0 -3
- package/components/reports/models/index.d.ts +0 -7
- package/components/reports/models/parameter.d.ts +0 -4
- package/components/reports/models/report-dto.d.ts +0 -6
- package/components/reports/models/reports-options.d.ts +0 -14
- package/components/reports/models/response-list-report-dto.d.ts +0 -8
- package/components/reports/reports.component.d.ts +0 -41
- package/components/reports/reports.module.d.ts +0 -2
- package/components/reports/reports.service.d.ts +0 -16
- package/esm2015/components/index.js +0 -3
- package/esm2015/components/refresh-websocket-alert/index.js +0 -3
- package/esm2015/components/refresh-websocket-alert/refresh-websocket-alert.component.js +0 -57
- package/esm2015/components/refresh-websocket-alert/refresh-websocket-alert.module.js +0 -26
- package/esm2015/components/reports/enums/format-enum.js +0 -11
- package/esm2015/components/reports/enums/index.js +0 -3
- package/esm2015/components/reports/enums/view-mode-enum.js +0 -6
- package/esm2015/components/reports/index.js +0 -5
- package/esm2015/components/reports/models/callback-event.js +0 -1
- package/esm2015/components/reports/models/generate-report-input-dto.js +0 -1
- package/esm2015/components/reports/models/generate-report-output-dto.js +0 -1
- package/esm2015/components/reports/models/index.js +0 -1
- package/esm2015/components/reports/models/parameter.js +0 -1
- package/esm2015/components/reports/models/report-dto.js +0 -1
- package/esm2015/components/reports/models/reports-options.js +0 -1
- package/esm2015/components/reports/models/response-list-report-dto.js +0 -1
- package/esm2015/components/reports/reports.component.js +0 -202
- package/esm2015/components/reports/reports.module.js +0 -43
- package/esm2015/components/reports/reports.service.js +0 -73
- package/esm2015/locale/fallback.js +0 -16
- package/esm2015/public-api.js +0 -5
- package/esm2015/senior-gestao-relacionamento-angular-components.js +0 -9
- package/esm2015/services/current-collaborator/current-collaborator.module.js +0 -20
- package/esm2015/services/current-collaborator/current-collaborator.service.js +0 -60
- package/esm2015/services/current-collaborator/enums/index.js +0 -2
- package/esm2015/services/current-collaborator/enums/status-enum.js +0 -6
- package/esm2015/services/current-collaborator/index.js +0 -5
- package/esm2015/services/current-collaborator/models/branch-dto.js +0 -1
- package/esm2015/services/current-collaborator/models/branch.js +0 -23
- package/esm2015/services/current-collaborator/models/collaborator-branch-link-dto.js +0 -1
- package/esm2015/services/current-collaborator/models/collaborator-branch-link.js +0 -23
- package/esm2015/services/current-collaborator/models/collaborator-dto.js +0 -1
- package/esm2015/services/current-collaborator/models/collaborator.js +0 -42
- package/esm2015/services/current-collaborator/models/company-dto.js +0 -1
- package/esm2015/services/current-collaborator/models/company.js +0 -16
- package/esm2015/services/current-collaborator/models/index.js +0 -6
- package/esm2015/services/current-collaborator/models/job-title-dto.js +0 -1
- package/esm2015/services/current-collaborator/models/job-title.js +0 -16
- package/esm2015/services/current-tenant/current-tenant.module.js +0 -20
- package/esm2015/services/current-tenant/current-tenant.service.js +0 -67
- package/esm2015/services/current-tenant/index.js +0 -4
- package/esm2015/services/current-tenant/models/index.js +0 -2
- package/esm2015/services/current-tenant/models/modulo-dto.js +0 -1
- package/esm2015/services/current-tenant/models/modulo.js +0 -15
- package/esm2015/services/index.js +0 -9
- package/esm2015/services/resolvers/access-validation.resolve.js +0 -33
- package/esm2015/services/resolvers/index.js +0 -2
- package/esm2015/services/schedule-form-rules/enums/index.js +0 -6
- package/esm2015/services/schedule-form-rules/enums/month-enum.js +0 -16
- package/esm2015/services/schedule-form-rules/enums/ordinal-week-day-enum.js +0 -9
- package/esm2015/services/schedule-form-rules/enums/recurrence-enum.js +0 -8
- package/esm2015/services/schedule-form-rules/enums/repeat-when-enum.js +0 -6
- package/esm2015/services/schedule-form-rules/enums/week-day-enum.js +0 -11
- package/esm2015/services/schedule-form-rules/index.js +0 -4
- package/esm2015/services/schedule-form-rules/schedule-form-rules.module.js +0 -15
- package/esm2015/services/schedule-form-rules/schedule-form-rules.service.js +0 -105
- package/esm2015/services/standard-filters/index.js +0 -3
- package/esm2015/services/standard-filters/standard-filters.module.js +0 -14
- package/esm2015/services/standard-filters/standard-filters.service.js +0 -28
- package/esm2015/services/storage/com-senior-token-dto.js +0 -1
- package/esm2015/services/storage/index.js +0 -2
- package/esm2015/services/storage/storage.module.js +0 -17
- package/esm2015/services/storage/storage.service.js +0 -59
- package/esm2015/services/validators/date-validators.service.js +0 -9
- package/esm2015/services/validators/form-group-validators.service.js +0 -36
- package/esm2015/services/validators/index.js +0 -3
- package/esm2015/services/websocket/index.js +0 -4
- package/esm2015/services/websocket/models/event-dto.js +0 -1
- package/esm2015/services/websocket/models/event.js +0 -13
- package/esm2015/services/websocket/models/index.js +0 -3
- package/esm2015/services/websocket/models/topic-dto.js +0 -1
- package/esm2015/services/websocket/models/topic.js +0 -25
- package/esm2015/services/websocket/websocket.module.js +0 -18
- package/esm2015/services/websocket/websocket.service.js +0 -124
- package/esm2015/utils/index.js +0 -4
- package/esm2015/utils/string-converter.service.js +0 -7
- package/esm2015/utils/utils.js +0 -80
- package/esm2015/utils/value-changes.service.js +0 -7
- package/esm5/components/index.js +0 -3
- package/esm5/components/refresh-websocket-alert/index.js +0 -3
- package/esm5/components/refresh-websocket-alert/refresh-websocket-alert.component.js +0 -59
- package/esm5/components/refresh-websocket-alert/refresh-websocket-alert.module.js +0 -29
- package/esm5/components/reports/enums/format-enum.js +0 -11
- package/esm5/components/reports/enums/index.js +0 -3
- package/esm5/components/reports/enums/view-mode-enum.js +0 -6
- package/esm5/components/reports/index.js +0 -5
- package/esm5/components/reports/models/callback-event.js +0 -1
- package/esm5/components/reports/models/generate-report-input-dto.js +0 -1
- package/esm5/components/reports/models/generate-report-output-dto.js +0 -1
- package/esm5/components/reports/models/index.js +0 -1
- package/esm5/components/reports/models/parameter.js +0 -1
- package/esm5/components/reports/models/report-dto.js +0 -1
- package/esm5/components/reports/models/reports-options.js +0 -1
- package/esm5/components/reports/models/response-list-report-dto.js +0 -1
- package/esm5/components/reports/reports.component.js +0 -208
- package/esm5/components/reports/reports.module.js +0 -46
- package/esm5/components/reports/reports.service.js +0 -75
- package/esm5/locale/fallback.js +0 -16
- package/esm5/public-api.js +0 -5
- package/esm5/senior-gestao-relacionamento-angular-components.js +0 -9
- package/esm5/services/current-collaborator/current-collaborator.module.js +0 -23
- package/esm5/services/current-collaborator/current-collaborator.service.js +0 -62
- package/esm5/services/current-collaborator/enums/index.js +0 -2
- package/esm5/services/current-collaborator/enums/status-enum.js +0 -6
- package/esm5/services/current-collaborator/index.js +0 -5
- package/esm5/services/current-collaborator/models/branch-dto.js +0 -1
- package/esm5/services/current-collaborator/models/branch.js +0 -28
- package/esm5/services/current-collaborator/models/collaborator-branch-link-dto.js +0 -1
- package/esm5/services/current-collaborator/models/collaborator-branch-link.js +0 -28
- package/esm5/services/current-collaborator/models/collaborator-dto.js +0 -1
- package/esm5/services/current-collaborator/models/collaborator.js +0 -45
- package/esm5/services/current-collaborator/models/company-dto.js +0 -1
- package/esm5/services/current-collaborator/models/company.js +0 -21
- package/esm5/services/current-collaborator/models/index.js +0 -6
- package/esm5/services/current-collaborator/models/job-title-dto.js +0 -1
- package/esm5/services/current-collaborator/models/job-title.js +0 -21
- package/esm5/services/current-tenant/current-tenant.module.js +0 -23
- package/esm5/services/current-tenant/current-tenant.service.js +0 -70
- package/esm5/services/current-tenant/index.js +0 -4
- package/esm5/services/current-tenant/models/index.js +0 -2
- package/esm5/services/current-tenant/models/modulo-dto.js +0 -1
- package/esm5/services/current-tenant/models/modulo.js +0 -20
- package/esm5/services/index.js +0 -9
- package/esm5/services/resolvers/access-validation.resolve.js +0 -35
- package/esm5/services/resolvers/index.js +0 -2
- package/esm5/services/schedule-form-rules/enums/index.js +0 -6
- package/esm5/services/schedule-form-rules/enums/month-enum.js +0 -16
- package/esm5/services/schedule-form-rules/enums/ordinal-week-day-enum.js +0 -9
- package/esm5/services/schedule-form-rules/enums/recurrence-enum.js +0 -8
- package/esm5/services/schedule-form-rules/enums/repeat-when-enum.js +0 -6
- package/esm5/services/schedule-form-rules/enums/week-day-enum.js +0 -11
- package/esm5/services/schedule-form-rules/index.js +0 -4
- package/esm5/services/schedule-form-rules/schedule-form-rules.module.js +0 -18
- package/esm5/services/schedule-form-rules/schedule-form-rules.service.js +0 -109
- package/esm5/services/standard-filters/index.js +0 -3
- package/esm5/services/standard-filters/standard-filters.module.js +0 -17
- package/esm5/services/standard-filters/standard-filters.service.js +0 -30
- package/esm5/services/storage/com-senior-token-dto.js +0 -1
- package/esm5/services/storage/index.js +0 -2
- package/esm5/services/storage/storage.module.js +0 -20
- package/esm5/services/storage/storage.service.js +0 -60
- package/esm5/services/validators/date-validators.service.js +0 -13
- package/esm5/services/validators/form-group-validators.service.js +0 -40
- package/esm5/services/validators/index.js +0 -3
- package/esm5/services/websocket/index.js +0 -4
- package/esm5/services/websocket/models/event-dto.js +0 -1
- package/esm5/services/websocket/models/event.js +0 -20
- package/esm5/services/websocket/models/index.js +0 -3
- package/esm5/services/websocket/models/topic-dto.js +0 -1
- package/esm5/services/websocket/models/topic.js +0 -29
- package/esm5/services/websocket/websocket.module.js +0 -21
- package/esm5/services/websocket/websocket.service.js +0 -131
- package/esm5/utils/index.js +0 -4
- package/esm5/utils/string-converter.service.js +0 -11
- package/esm5/utils/utils.js +0 -82
- package/esm5/utils/value-changes.service.js +0 -11
- package/fesm2015/senior-gestao-relacionamento-angular-components.js +0 -1271
- package/fesm2015/senior-gestao-relacionamento-angular-components.js.map +0 -1
- package/fesm5/senior-gestao-relacionamento-angular-components.js +0 -1363
- package/fesm5/senior-gestao-relacionamento-angular-components.js.map +0 -1
- package/locale/fallback.d.ts +0 -1
- package/scss/styles.scss +0 -190
- package/senior-gestao-relacionamento-angular-components.d.ts +0 -8
- package/senior-gestao-relacionamento-angular-components.metadata.json +0 -1
- package/services/current-collaborator/current-collaborator.module.d.ts +0 -2
- package/services/current-collaborator/current-collaborator.service.d.ts +0 -14
- package/services/current-collaborator/enums/index.d.ts +0 -1
- package/services/current-collaborator/enums/status-enum.d.ts +0 -4
- package/services/current-collaborator/index.d.ts +0 -4
- package/services/current-collaborator/models/branch-dto.d.ts +0 -7
- package/services/current-collaborator/models/branch.d.ts +0 -13
- package/services/current-collaborator/models/collaborator-branch-link-dto.d.ts +0 -4
- package/services/current-collaborator/models/collaborator-branch-link.d.ts +0 -9
- package/services/current-collaborator/models/collaborator-dto.d.ts +0 -14
- package/services/current-collaborator/models/collaborator.d.ts +0 -18
- package/services/current-collaborator/models/company-dto.d.ts +0 -6
- package/services/current-collaborator/models/company.d.ts +0 -11
- package/services/current-collaborator/models/index.d.ts +0 -10
- package/services/current-collaborator/models/job-title-dto.d.ts +0 -4
- package/services/current-collaborator/models/job-title.d.ts +0 -8
- package/services/current-tenant/current-tenant.module.d.ts +0 -2
- package/services/current-tenant/current-tenant.service.d.ts +0 -19
- package/services/current-tenant/index.d.ts +0 -3
- package/services/current-tenant/models/index.d.ts +0 -2
- package/services/current-tenant/models/modulo-dto.d.ts +0 -5
- package/services/current-tenant/models/modulo.d.ts +0 -8
- package/services/index.d.ts +0 -8
- package/services/resolvers/access-validation.resolve.d.ts +0 -9
- package/services/resolvers/index.d.ts +0 -1
- package/services/schedule-form-rules/enums/index.d.ts +0 -5
- package/services/schedule-form-rules/enums/month-enum.d.ts +0 -14
- package/services/schedule-form-rules/enums/ordinal-week-day-enum.d.ts +0 -7
- package/services/schedule-form-rules/enums/recurrence-enum.d.ts +0 -6
- package/services/schedule-form-rules/enums/repeat-when-enum.d.ts +0 -4
- package/services/schedule-form-rules/enums/week-day-enum.d.ts +0 -9
- package/services/schedule-form-rules/index.d.ts +0 -3
- package/services/schedule-form-rules/schedule-form-rules.module.d.ts +0 -2
- package/services/schedule-form-rules/schedule-form-rules.service.d.ts +0 -12
- package/services/standard-filters/index.d.ts +0 -2
- package/services/standard-filters/standard-filters.module.d.ts +0 -2
- package/services/standard-filters/standard-filters.service.d.ts +0 -7
- package/services/storage/com-senior-token-dto.d.ts +0 -14
- package/services/storage/index.d.ts +0 -1
- package/services/storage/storage.module.d.ts +0 -2
- package/services/storage/storage.service.d.ts +0 -17
- package/services/validators/date-validators.service.d.ts +0 -3
- package/services/validators/form-group-validators.service.d.ts +0 -5
- package/services/validators/index.d.ts +0 -2
- package/services/websocket/index.d.ts +0 -3
- package/services/websocket/models/event-dto.d.ts +0 -5
- package/services/websocket/models/event.d.ts +0 -8
- package/services/websocket/models/index.d.ts +0 -4
- package/services/websocket/models/topic-dto.d.ts +0 -6
- package/services/websocket/models/topic.d.ts +0 -10
- package/services/websocket/websocket.module.d.ts +0 -2
- package/services/websocket/websocket.service.d.ts +0 -22
- package/utils/index.d.ts +0 -3
- package/utils/string-converter.service.d.ts +0 -3
- package/utils/utils.d.ts +0 -12
- package/utils/value-changes.service.d.ts +0 -4
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @senior-gestao-relacionamento/angular-components
|
|
2
|
+
|
|
3
|
+
Biblioteca de componentes reutilizáveis para aplicações Angular do CRM Senior Sistemas.
|
|
4
|
+
|
|
5
|
+
## Instalação
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @senior-gestao-relacionamento/angular-components
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Uso
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { AngularComponentsModule } from '@senior-gestao-relacionamento/angular-components';
|
|
15
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Módulo principal da biblioteca @senior-gestao-relacionamento/angular-components
|
|
6
|
+
*/
|
|
7
|
+
export class AngularComponentsModule {
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AngularComponentsModule, imports: [CommonModule] });
|
|
10
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularComponentsModule, imports: [CommonModule] });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularComponentsModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
declarations: [],
|
|
16
|
+
imports: [
|
|
17
|
+
CommonModule
|
|
18
|
+
],
|
|
19
|
+
exports: []
|
|
20
|
+
}]
|
|
21
|
+
}] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2FuZ3VsYXItY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRS9DOztHQUVHO0FBUUgsTUFBTSxPQUFPLHVCQUF1Qjt3R0FBdkIsdUJBQXVCO3lHQUF2Qix1QkFBdUIsWUFKaEMsWUFBWTt5R0FJSCx1QkFBdUIsWUFKaEMsWUFBWTs7NEZBSUgsdUJBQXVCO2tCQVBuQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUUsRUFBRTtpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vKipcbiAqIE3Ds2R1bG8gcHJpbmNpcGFsIGRhIGJpYmxpb3RlY2EgQHNlbmlvci1nZXN0YW8tcmVsYWNpb25hbWVudG8vYW5ndWxhci1jb21wb25lbnRzXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW11cbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUgeyB9XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { ScheduleFormComponent } from './schedule-form.component';
|
|
2
|
+
export { ScheduleDetailComponent } from './schedule-detail.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBTY2hlZHVsZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL3NjaGVkdWxlLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCB7IFNjaGVkdWxlRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlZHVsZS1kZXRhaWwuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
// PrimeNG
|
|
4
|
+
import { DialogModule } from 'primeng/dialog';
|
|
5
|
+
import { ButtonModule } from 'primeng/button';
|
|
6
|
+
import { TagModule } from 'primeng/tag';
|
|
7
|
+
import { DividerModule } from 'primeng/divider';
|
|
8
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
9
|
+
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
10
|
+
import { ConfirmationService } from 'primeng/api';
|
|
11
|
+
import { ScheduleTranslatePipe } from '../../../services/translation/translate.pipe';
|
|
12
|
+
import { SchedulePriority } from '../models/schedule.enums';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../../../services/translation/translation.service";
|
|
15
|
+
import * as i2 from "primeng/api";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "primeng/dialog";
|
|
18
|
+
import * as i5 from "primeng/button";
|
|
19
|
+
import * as i6 from "primeng/tag";
|
|
20
|
+
import * as i7 from "primeng/divider";
|
|
21
|
+
import * as i8 from "primeng/confirmdialog";
|
|
22
|
+
export class ScheduleDetailComponent {
|
|
23
|
+
translationService;
|
|
24
|
+
confirmationService;
|
|
25
|
+
visible = false;
|
|
26
|
+
schedule = null;
|
|
27
|
+
showAcceptButton = false;
|
|
28
|
+
showRejectButton = false;
|
|
29
|
+
showCancelButton = false;
|
|
30
|
+
showEditButton = true;
|
|
31
|
+
showDeleteButton = false;
|
|
32
|
+
visibleChange = new EventEmitter();
|
|
33
|
+
onAction = new EventEmitter();
|
|
34
|
+
onClose = new EventEmitter();
|
|
35
|
+
constructor(translationService, confirmationService) {
|
|
36
|
+
this.translationService = translationService;
|
|
37
|
+
this.confirmationService = confirmationService;
|
|
38
|
+
}
|
|
39
|
+
get dialogHeader() {
|
|
40
|
+
return this.schedule?.name ?? this.translationService.translate('sr.schedule.schedule_details');
|
|
41
|
+
}
|
|
42
|
+
closeDialog() {
|
|
43
|
+
this.visible = false;
|
|
44
|
+
this.visibleChange.emit(false);
|
|
45
|
+
this.onClose.emit();
|
|
46
|
+
}
|
|
47
|
+
editSchedule() {
|
|
48
|
+
if (this.schedule) {
|
|
49
|
+
this.onAction.emit({ type: 'edit', schedule: this.schedule });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
acceptSchedule() {
|
|
53
|
+
if (!this.schedule)
|
|
54
|
+
return;
|
|
55
|
+
this.confirmationService.confirm({
|
|
56
|
+
message: this.translationService.translate('sr.schedule.confirm_accept'),
|
|
57
|
+
header: this.translationService.translate('sr.schedule.confirmation'),
|
|
58
|
+
icon: 'pi pi-question-circle',
|
|
59
|
+
acceptLabel: this.translationService.translate('sr.schedule.yes'),
|
|
60
|
+
rejectLabel: this.translationService.translate('sr.schedule.no'),
|
|
61
|
+
accept: () => {
|
|
62
|
+
if (this.schedule) {
|
|
63
|
+
this.onAction.emit({ type: 'accept', schedule: this.schedule });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
rejectSchedule() {
|
|
69
|
+
if (!this.schedule)
|
|
70
|
+
return;
|
|
71
|
+
this.confirmationService.confirm({
|
|
72
|
+
message: this.translationService.translate('sr.schedule.confirm_reject'),
|
|
73
|
+
header: this.translationService.translate('sr.schedule.confirmation'),
|
|
74
|
+
icon: 'pi pi-exclamation-triangle',
|
|
75
|
+
acceptLabel: this.translationService.translate('sr.schedule.yes'),
|
|
76
|
+
rejectLabel: this.translationService.translate('sr.schedule.no'),
|
|
77
|
+
accept: () => {
|
|
78
|
+
if (this.schedule) {
|
|
79
|
+
this.onAction.emit({ type: 'reject', schedule: this.schedule });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
cancelSchedule() {
|
|
85
|
+
if (!this.schedule)
|
|
86
|
+
return;
|
|
87
|
+
this.confirmationService.confirm({
|
|
88
|
+
message: this.translationService.translate('sr.schedule.confirm_cancel'),
|
|
89
|
+
header: this.translationService.translate('sr.schedule.confirmation'),
|
|
90
|
+
icon: 'pi pi-exclamation-triangle',
|
|
91
|
+
acceptLabel: this.translationService.translate('sr.schedule.yes'),
|
|
92
|
+
rejectLabel: this.translationService.translate('sr.schedule.no'),
|
|
93
|
+
accept: () => {
|
|
94
|
+
if (this.schedule) {
|
|
95
|
+
this.onAction.emit({ type: 'cancel', schedule: this.schedule });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
deleteSchedule() {
|
|
101
|
+
if (!this.schedule)
|
|
102
|
+
return;
|
|
103
|
+
this.confirmationService.confirm({
|
|
104
|
+
message: this.translationService.translate('sr.schedule.confirm_delete'),
|
|
105
|
+
header: this.translationService.translate('sr.schedule.confirmation'),
|
|
106
|
+
icon: 'pi pi-exclamation-triangle',
|
|
107
|
+
acceptLabel: this.translationService.translate('sr.schedule.yes'),
|
|
108
|
+
rejectLabel: this.translationService.translate('sr.schedule.no'),
|
|
109
|
+
accept: () => {
|
|
110
|
+
if (this.schedule) {
|
|
111
|
+
this.onAction.emit({ type: 'delete', schedule: this.schedule });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
formatDate(date) {
|
|
117
|
+
if (!date) {
|
|
118
|
+
return this.translationService.translate('sr.schedule.not_informed');
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const dateObj = new Date(date);
|
|
122
|
+
if (isNaN(dateObj.getTime())) {
|
|
123
|
+
return this.translationService.translate('sr.schedule.invalid_date');
|
|
124
|
+
}
|
|
125
|
+
return dateObj.toLocaleString('pt-BR', {
|
|
126
|
+
day: '2-digit',
|
|
127
|
+
month: '2-digit',
|
|
128
|
+
year: 'numeric',
|
|
129
|
+
hour: '2-digit',
|
|
130
|
+
minute: '2-digit'
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return this.translationService.translate('sr.schedule.invalid_date');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
getPriorityLabel(priority) {
|
|
138
|
+
if (!priority) {
|
|
139
|
+
return this.translationService.translate('sr.schedule.not_informed');
|
|
140
|
+
}
|
|
141
|
+
const labels = {
|
|
142
|
+
[SchedulePriority.Low]: this.translationService.translate('sr.schedule.priority_low'),
|
|
143
|
+
[SchedulePriority.Medium]: this.translationService.translate('sr.schedule.priority_medium'),
|
|
144
|
+
[SchedulePriority.High]: this.translationService.translate('sr.schedule.priority_high'),
|
|
145
|
+
[SchedulePriority.Critical]: this.translationService.translate('sr.schedule.priority_critical')
|
|
146
|
+
};
|
|
147
|
+
return labels[priority] ?? priority;
|
|
148
|
+
}
|
|
149
|
+
getPrioritySeverity(priority) {
|
|
150
|
+
if (!priority) {
|
|
151
|
+
return 'info';
|
|
152
|
+
}
|
|
153
|
+
const severities = {
|
|
154
|
+
[SchedulePriority.Low]: 'info',
|
|
155
|
+
[SchedulePriority.Medium]: 'success',
|
|
156
|
+
[SchedulePriority.High]: 'warn',
|
|
157
|
+
[SchedulePriority.Critical]: 'danger'
|
|
158
|
+
};
|
|
159
|
+
return severities[priority] ?? 'info';
|
|
160
|
+
}
|
|
161
|
+
getRecurrenceLabel(recurrence) {
|
|
162
|
+
if (!recurrence) {
|
|
163
|
+
return this.translationService.translate('sr.schedule.recurrence_none');
|
|
164
|
+
}
|
|
165
|
+
const labels = {
|
|
166
|
+
'NONE': this.translationService.translate('sr.schedule.recurrence_none'),
|
|
167
|
+
'DAILY': this.translationService.translate('sr.schedule.recurrence_daily'),
|
|
168
|
+
'WEEKLY': this.translationService.translate('sr.schedule.recurrence_weekly'),
|
|
169
|
+
'MONTHLY': this.translationService.translate('sr.schedule.recurrence_monthly'),
|
|
170
|
+
'YEARLY': this.translationService.translate('sr.schedule.recurrence_yearly'),
|
|
171
|
+
'CUSTOM': this.translationService.translate('sr.schedule.recurrence_custom')
|
|
172
|
+
};
|
|
173
|
+
return labels[recurrence] ?? recurrence;
|
|
174
|
+
}
|
|
175
|
+
getOrganizerName() {
|
|
176
|
+
const organizer = this.schedule?.participants?.find((p) => p.organizer);
|
|
177
|
+
return organizer?.collaborator?.name ?? this.translationService.translate('sr.schedule.not_informed');
|
|
178
|
+
}
|
|
179
|
+
getParticipantsCount() {
|
|
180
|
+
return this.schedule?.participants?.filter((p) => !p.organizer).length ?? 0;
|
|
181
|
+
}
|
|
182
|
+
getParticipantsList() {
|
|
183
|
+
const participants = this.schedule?.participants?.filter((p) => !p.organizer) ?? [];
|
|
184
|
+
if (participants.length === 0) {
|
|
185
|
+
return this.translationService.translate('sr.schedule.no_participants');
|
|
186
|
+
}
|
|
187
|
+
return participants.map((p) => p.collaborator?.name ?? this.translationService.translate('sr.schedule.no_name')).join(', ');
|
|
188
|
+
}
|
|
189
|
+
getConfirmationLabel(confirmation) {
|
|
190
|
+
if (!confirmation) {
|
|
191
|
+
return '';
|
|
192
|
+
}
|
|
193
|
+
if (confirmation === 'CONFIRMED') {
|
|
194
|
+
return this.translationService.translate('sr.schedule.status_accepted');
|
|
195
|
+
}
|
|
196
|
+
else if (confirmation === 'DECLINED') {
|
|
197
|
+
return this.translationService.translate('sr.schedule.status_rejected');
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
return this.translationService.translate('sr.schedule.status_pending');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
getConfirmationSeverity(confirmation) {
|
|
204
|
+
if (confirmation === 'CONFIRMED') {
|
|
205
|
+
return 'success';
|
|
206
|
+
}
|
|
207
|
+
else if (confirmation === 'DECLINED') {
|
|
208
|
+
return 'danger';
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
return 'warn';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleDetailComponent, deps: [{ token: i1.ScheduleTranslationService }, { token: i2.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
215
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScheduleDetailComponent, isStandalone: true, selector: "s-schedule-detail", inputs: { visible: "visible", schedule: "schedule", showAcceptButton: "showAcceptButton", showRejectButton: "showRejectButton", showCancelButton: "showCancelButton", showEditButton: "showEditButton", showDeleteButton: "showDeleteButton" }, outputs: { visibleChange: "visibleChange", onAction: "onAction", onClose: "onClose" }, providers: [ConfirmationService], ngImport: i0, template: "<p-dialog\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [styleClass]=\"'schedule-detail-dialog'\"\n [header]=\"dialogHeader\"\n (onHide)=\"closeDialog()\">\n \n <ng-template pTemplate=\"header\">\n <div class=\"dialog-header\">\n <h3>{{ dialogHeader }}</h3>\n <p-tag \n *ngIf=\"schedule?.priority\"\n [severity]=\"getPrioritySeverity(schedule?.priority)\"\n [value]=\"getPriorityLabel(schedule?.priority)\">\n </p-tag>\n </div>\n </ng-template>\n\n <div class=\"schedule-detail-content\" *ngIf=\"schedule\">\n \n <!-- Informa\u00E7\u00F5es B\u00E1sicas -->\n <div class=\"detail-section\">\n <h4 class=\"section-title\">{{ 'sr.schedule.basic_info' | scheduleTranslate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-calendar\"></i>\n {{ 'sr.schedule.type' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.type?.name ?? ('sr.schedule.not_informed' | scheduleTranslate) }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-clock\"></i>\n {{ 'sr.schedule.when_occurs' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.whenOccurs }}</span>\n </div>\n\n <div class=\"detail-row\" *ngIf=\"schedule.duration\">\n <span class=\"detail-label\">\n <i class=\"pi pi-hourglass\"></i>\n {{ 'sr.schedule.duration' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.duration }} {{ 'sr.schedule.minutes' | scheduleTranslate }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-refresh\"></i>\n {{ 'sr.schedule.recurrence' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ getRecurrenceLabel(schedule.recurrence) }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Descri\u00E7\u00E3o -->\n <div class=\"detail-section\" *ngIf=\"schedule.description\">\n <h4 class=\"section-title\">{{ 'sr.schedule.description' | scheduleTranslate }}</h4>\n <p class=\"description-text\">{{ schedule.description }}</p>\n </div>\n\n <p-divider *ngIf=\"schedule.description\"></p-divider>\n\n <!-- Participantes -->\n <div class=\"detail-section\">\n <h4 class=\"section-title\">{{ 'sr.schedule.participants' | scheduleTranslate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-user\"></i>\n {{ 'sr.schedule.organizer' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ getOrganizerName() }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-users\"></i>\n {{ 'sr.schedule.participants' | scheduleTranslate }} ({{ getParticipantsCount() }}):\n </span>\n </div>\n \n <div class=\"participants-list\" *ngIf=\"getParticipantsCount() > 0\">\n <div class=\"participant-item\" *ngFor=\"let participant of schedule.participants\">\n <ng-container *ngIf=\"!participant.organizer\">\n <i class=\"pi pi-user\"></i>\n <span>{{ participant.collaborator?.name ?? ('sr.schedule.no_name' | scheduleTranslate) }}</span>\n <p-tag \n *ngIf=\"participant.confirmation\"\n [severity]=\"getConfirmationSeverity(participant.confirmation)\"\n [value]=\"getConfirmationLabel(participant.confirmation)\"\n styleClass=\"participant-status\">\n </p-tag>\n </ng-container>\n </div>\n </div>\n <p class=\"no-participants\" *ngIf=\"getParticipantsCount() === 0\">\n {{ 'sr.schedule.no_participants_besides_organizer' | scheduleTranslate }}\n </p>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Local -->\n <div class=\"detail-section\" *ngIf=\"schedule.location\">\n <h4 class=\"section-title\">{{ 'sr.schedule.location' | scheduleTranslate }}</h4>\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-map-marker\"></i>\n {{ 'sr.schedule.address' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.location }}</span>\n </div>\n </div>\n\n <!-- Observa\u00E7\u00F5es -->\n <div class=\"detail-section\" *ngIf=\"schedule.observations\">\n <h4 class=\"section-title\">{{ 'sr.schedule.notes' | scheduleTranslate }}</h4>\n <p class=\"observations-text\">{{ schedule.observations }}</p>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n <button \n *ngIf=\"showDeleteButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.delete' | scheduleTranslate\" \n icon=\"pi pi-trash\"\n class=\"p-button-danger p-button-text\"\n (click)=\"deleteSchedule()\">\n </button>\n </div>\n <div class=\"footer-right\">\n <button \n *ngIf=\"showRejectButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.reject' | scheduleTranslate\" \n icon=\"pi pi-times\"\n class=\"p-button-warning\"\n (click)=\"rejectSchedule()\">\n </button>\n <button \n *ngIf=\"showCancelButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.cancel' | scheduleTranslate\" \n icon=\"pi pi-ban\"\n class=\"p-button-secondary\"\n (click)=\"cancelSchedule()\">\n </button>\n <button \n *ngIf=\"showAcceptButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.accept' | scheduleTranslate\" \n icon=\"pi pi-check\"\n class=\"p-button-success\"\n (click)=\"acceptSchedule()\">\n </button>\n <button \n *ngIf=\"showEditButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.edit_schedule' | scheduleTranslate\" \n icon=\"pi pi-pencil\"\n (click)=\"editSchedule()\">\n </button>\n <button \n pButton \n type=\"button\" \n [label]=\"'sr.schedule.close' | scheduleTranslate\" \n icon=\"pi pi-times\"\n class=\"p-button-text\"\n (click)=\"closeDialog()\">\n </button>\n </div>\n </div>\n </ng-template>\n\n</p-dialog>\n\n<p-confirmDialog></p-confirmDialog>\n", styles: [".dialog-header{display:flex;align-items:center;justify-content:space-between;width:100%;gap:1rem}.dialog-header h3{margin:0;font-size:1.25rem;font-weight:600;flex:1}.schedule-detail-content{padding:.5rem 0}.detail-section{margin-bottom:1rem}.detail-section .section-title{font-size:1rem;font-weight:600;margin:0 0 1rem;color:var(--text-color)}.detail-section .detail-row{display:flex;align-items:flex-start;margin-bottom:.75rem;gap:.5rem}.detail-section .detail-row .detail-label{display:flex;align-items:center;gap:.5rem;font-weight:500;color:var(--text-color-secondary);min-width:140px;flex-shrink:0}.detail-section .detail-row .detail-label i{font-size:.875rem}.detail-section .detail-row .detail-value{color:var(--text-color);flex:1}.detail-section .description-text,.detail-section .observations-text{color:var(--text-color);line-height:1.6;margin:0;white-space:pre-wrap}.detail-section .participants-list{margin-top:.5rem;display:flex;flex-direction:column;gap:.5rem}.detail-section .participants-list .participant-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:var(--surface-50);border-radius:4px}.detail-section .participants-list .participant-item i{color:var(--text-color-secondary);font-size:.875rem}.detail-section .participants-list .participant-item span{flex:1;color:var(--text-color)}.detail-section .participants-list .participant-item .participant-status{font-size:.75rem}.detail-section .no-participants{color:var(--text-color-secondary);font-style:italic;margin:.5rem 0 0}.dialog-footer{display:flex;justify-content:flex-end;gap:.5rem}::ng-deep .schedule-detail-dialog{width:600px}::ng-deep .p-dialog .p-dialog-header{padding:1.25rem}::ng-deep .p-dialog .p-dialog-content{padding:0 1.25rem 1.25rem}::ng-deep .p-dialog .p-dialog-footer{padding:1rem 1.25rem;border-top:1px solid var(--surface-border)}.dialog-footer{display:flex;justify-content:space-between;align-items:center;width:100%;gap:.5rem}.dialog-footer .footer-left{display:flex;gap:.5rem}.dialog-footer .footer-right{display:flex;gap:.5rem;margin-left:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i4.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i6.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i7.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "pipe", type: ScheduleTranslatePipe, name: "scheduleTranslate" }] });
|
|
216
|
+
}
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleDetailComponent, decorators: [{
|
|
218
|
+
type: Component,
|
|
219
|
+
args: [{ selector: 's-schedule-detail', standalone: true, imports: [
|
|
220
|
+
CommonModule, DialogModule, ButtonModule, TagModule,
|
|
221
|
+
DividerModule, TooltipModule, ConfirmDialogModule, ScheduleTranslatePipe
|
|
222
|
+
], providers: [ConfirmationService], template: "<p-dialog\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [styleClass]=\"'schedule-detail-dialog'\"\n [header]=\"dialogHeader\"\n (onHide)=\"closeDialog()\">\n \n <ng-template pTemplate=\"header\">\n <div class=\"dialog-header\">\n <h3>{{ dialogHeader }}</h3>\n <p-tag \n *ngIf=\"schedule?.priority\"\n [severity]=\"getPrioritySeverity(schedule?.priority)\"\n [value]=\"getPriorityLabel(schedule?.priority)\">\n </p-tag>\n </div>\n </ng-template>\n\n <div class=\"schedule-detail-content\" *ngIf=\"schedule\">\n \n <!-- Informa\u00E7\u00F5es B\u00E1sicas -->\n <div class=\"detail-section\">\n <h4 class=\"section-title\">{{ 'sr.schedule.basic_info' | scheduleTranslate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-calendar\"></i>\n {{ 'sr.schedule.type' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.type?.name ?? ('sr.schedule.not_informed' | scheduleTranslate) }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-clock\"></i>\n {{ 'sr.schedule.when_occurs' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.whenOccurs }}</span>\n </div>\n\n <div class=\"detail-row\" *ngIf=\"schedule.duration\">\n <span class=\"detail-label\">\n <i class=\"pi pi-hourglass\"></i>\n {{ 'sr.schedule.duration' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.duration }} {{ 'sr.schedule.minutes' | scheduleTranslate }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-refresh\"></i>\n {{ 'sr.schedule.recurrence' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ getRecurrenceLabel(schedule.recurrence) }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Descri\u00E7\u00E3o -->\n <div class=\"detail-section\" *ngIf=\"schedule.description\">\n <h4 class=\"section-title\">{{ 'sr.schedule.description' | scheduleTranslate }}</h4>\n <p class=\"description-text\">{{ schedule.description }}</p>\n </div>\n\n <p-divider *ngIf=\"schedule.description\"></p-divider>\n\n <!-- Participantes -->\n <div class=\"detail-section\">\n <h4 class=\"section-title\">{{ 'sr.schedule.participants' | scheduleTranslate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-user\"></i>\n {{ 'sr.schedule.organizer' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ getOrganizerName() }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-users\"></i>\n {{ 'sr.schedule.participants' | scheduleTranslate }} ({{ getParticipantsCount() }}):\n </span>\n </div>\n \n <div class=\"participants-list\" *ngIf=\"getParticipantsCount() > 0\">\n <div class=\"participant-item\" *ngFor=\"let participant of schedule.participants\">\n <ng-container *ngIf=\"!participant.organizer\">\n <i class=\"pi pi-user\"></i>\n <span>{{ participant.collaborator?.name ?? ('sr.schedule.no_name' | scheduleTranslate) }}</span>\n <p-tag \n *ngIf=\"participant.confirmation\"\n [severity]=\"getConfirmationSeverity(participant.confirmation)\"\n [value]=\"getConfirmationLabel(participant.confirmation)\"\n styleClass=\"participant-status\">\n </p-tag>\n </ng-container>\n </div>\n </div>\n <p class=\"no-participants\" *ngIf=\"getParticipantsCount() === 0\">\n {{ 'sr.schedule.no_participants_besides_organizer' | scheduleTranslate }}\n </p>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Local -->\n <div class=\"detail-section\" *ngIf=\"schedule.location\">\n <h4 class=\"section-title\">{{ 'sr.schedule.location' | scheduleTranslate }}</h4>\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-map-marker\"></i>\n {{ 'sr.schedule.address' | scheduleTranslate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.location }}</span>\n </div>\n </div>\n\n <!-- Observa\u00E7\u00F5es -->\n <div class=\"detail-section\" *ngIf=\"schedule.observations\">\n <h4 class=\"section-title\">{{ 'sr.schedule.notes' | scheduleTranslate }}</h4>\n <p class=\"observations-text\">{{ schedule.observations }}</p>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n <button \n *ngIf=\"showDeleteButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.delete' | scheduleTranslate\" \n icon=\"pi pi-trash\"\n class=\"p-button-danger p-button-text\"\n (click)=\"deleteSchedule()\">\n </button>\n </div>\n <div class=\"footer-right\">\n <button \n *ngIf=\"showRejectButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.reject' | scheduleTranslate\" \n icon=\"pi pi-times\"\n class=\"p-button-warning\"\n (click)=\"rejectSchedule()\">\n </button>\n <button \n *ngIf=\"showCancelButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.cancel' | scheduleTranslate\" \n icon=\"pi pi-ban\"\n class=\"p-button-secondary\"\n (click)=\"cancelSchedule()\">\n </button>\n <button \n *ngIf=\"showAcceptButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.accept' | scheduleTranslate\" \n icon=\"pi pi-check\"\n class=\"p-button-success\"\n (click)=\"acceptSchedule()\">\n </button>\n <button \n *ngIf=\"showEditButton\"\n pButton \n type=\"button\" \n [label]=\"'sr.schedule.edit_schedule' | scheduleTranslate\" \n icon=\"pi pi-pencil\"\n (click)=\"editSchedule()\">\n </button>\n <button \n pButton \n type=\"button\" \n [label]=\"'sr.schedule.close' | scheduleTranslate\" \n icon=\"pi pi-times\"\n class=\"p-button-text\"\n (click)=\"closeDialog()\">\n </button>\n </div>\n </div>\n </ng-template>\n\n</p-dialog>\n\n<p-confirmDialog></p-confirmDialog>\n", styles: [".dialog-header{display:flex;align-items:center;justify-content:space-between;width:100%;gap:1rem}.dialog-header h3{margin:0;font-size:1.25rem;font-weight:600;flex:1}.schedule-detail-content{padding:.5rem 0}.detail-section{margin-bottom:1rem}.detail-section .section-title{font-size:1rem;font-weight:600;margin:0 0 1rem;color:var(--text-color)}.detail-section .detail-row{display:flex;align-items:flex-start;margin-bottom:.75rem;gap:.5rem}.detail-section .detail-row .detail-label{display:flex;align-items:center;gap:.5rem;font-weight:500;color:var(--text-color-secondary);min-width:140px;flex-shrink:0}.detail-section .detail-row .detail-label i{font-size:.875rem}.detail-section .detail-row .detail-value{color:var(--text-color);flex:1}.detail-section .description-text,.detail-section .observations-text{color:var(--text-color);line-height:1.6;margin:0;white-space:pre-wrap}.detail-section .participants-list{margin-top:.5rem;display:flex;flex-direction:column;gap:.5rem}.detail-section .participants-list .participant-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:var(--surface-50);border-radius:4px}.detail-section .participants-list .participant-item i{color:var(--text-color-secondary);font-size:.875rem}.detail-section .participants-list .participant-item span{flex:1;color:var(--text-color)}.detail-section .participants-list .participant-item .participant-status{font-size:.75rem}.detail-section .no-participants{color:var(--text-color-secondary);font-style:italic;margin:.5rem 0 0}.dialog-footer{display:flex;justify-content:flex-end;gap:.5rem}::ng-deep .schedule-detail-dialog{width:600px}::ng-deep .p-dialog .p-dialog-header{padding:1.25rem}::ng-deep .p-dialog .p-dialog-content{padding:0 1.25rem 1.25rem}::ng-deep .p-dialog .p-dialog-footer{padding:1rem 1.25rem;border-top:1px solid var(--surface-border)}.dialog-footer{display:flex;justify-content:space-between;align-items:center;width:100%;gap:.5rem}.dialog-footer .footer-left{display:flex;gap:.5rem}.dialog-footer .footer-right{display:flex;gap:.5rem;margin-left:auto}\n"] }]
|
|
223
|
+
}], ctorParameters: () => [{ type: i1.ScheduleTranslationService }, { type: i2.ConfirmationService }], propDecorators: { visible: [{
|
|
224
|
+
type: Input
|
|
225
|
+
}], schedule: [{
|
|
226
|
+
type: Input
|
|
227
|
+
}], showAcceptButton: [{
|
|
228
|
+
type: Input
|
|
229
|
+
}], showRejectButton: [{
|
|
230
|
+
type: Input
|
|
231
|
+
}], showCancelButton: [{
|
|
232
|
+
type: Input
|
|
233
|
+
}], showEditButton: [{
|
|
234
|
+
type: Input
|
|
235
|
+
}], showDeleteButton: [{
|
|
236
|
+
type: Input
|
|
237
|
+
}], visibleChange: [{
|
|
238
|
+
type: Output
|
|
239
|
+
}], onAction: [{
|
|
240
|
+
type: Output
|
|
241
|
+
}], onClose: [{
|
|
242
|
+
type: Output
|
|
243
|
+
}] } });
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGUvY29tcG9uZW50cy9zY2hlZHVsZS1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9jb21wb25lbnRzL3NjaGVkdWxlLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSWxELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBNEI1RCxNQUFNLE9BQU8sdUJBQXVCO0lBY2Y7SUFDQTtJQWRWLE9B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O0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLFlBQWdDO1FBQ3RELElBQUksWUFBWSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO3dHQTFNVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qix1WUFKdkIsQ0FBQyxtQkFBbUIsQ0FBQywwQkN4Q2xDLG9yTkFpTUEseWtFRDVKSSxZQUFZLCtQQUFFLFlBQVksMGdDQUFFLFlBQVksb1FBQUUsU0FBUywrSkFDbkQsYUFBYSwwSkFBRSxhQUFhLDhCQUFFLG1CQUFtQixtb0JBQUUscUJBQXFCOzs0RkFNL0QsdUJBQXVCO2tCQVhuQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUzt3QkFDbkQsYUFBYSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUI7cUJBQ3pFLGFBQ1UsQ0FBQyxtQkFBbUIsQ0FBQztpSUFLdkIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gUHJpbWVOR1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWcnO1xuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuLy8gTG9jYWxcbmltcG9ydCB7IFNjaGVkdWxlVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBTY2hlZHVsZSwgU2NoZWR1bGVQYXJ0aWNpcGFudCB9IGZyb20gJy4uL21vZGVscy9zY2hlZHVsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2NoZWR1bGVQcmlvcml0eSB9IGZyb20gJy4uL21vZGVscy9zY2hlZHVsZS5lbnVtcyc7XG5cbnR5cGUgUHJpb3JpdHlTZXZlcml0eSA9ICdzdWNjZXNzJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdkYW5nZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlV2l0aFBhcnRpY2lwYW50cyBleHRlbmRzIFNjaGVkdWxlIHtcbiAgcGFydGljaXBhbnRzPzogU2NoZWR1bGVQYXJ0aWNpcGFudFtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIGxvY2F0aW9uPzogc3RyaW5nO1xuICBvYnNlcnZhdGlvbnM/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVEZXRhaWxBY3Rpb24ge1xuICB0eXBlOiAnYWNjZXB0JyB8ICdyZWplY3QnIHwgJ2NhbmNlbCcgfCAnZWRpdCcgfCAnZGVsZXRlJztcbiAgc2NoZWR1bGU6IFNjaGVkdWxlV2l0aFBhcnRpY2lwYW50cztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1zY2hlZHVsZS1kZXRhaWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgVGFnTW9kdWxlLFxuICAgIERpdmlkZXJNb2R1bGUsIFRvb2x0aXBNb2R1bGUsIENvbmZpcm1EaWFsb2dNb2R1bGUsIFNjaGVkdWxlVHJhbnNsYXRlUGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtDb25maXJtYXRpb25TZXJ2aWNlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjaGVkdWxlLWRldGFpbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlRGV0YWlsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzY2hlZHVsZTogU2NoZWR1bGVXaXRoUGFydGljaXBhbnRzIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dBY2NlcHRCdXR0b24gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1JlamVjdEJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dFZGl0QnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFNjaGVkdWxlRGV0YWlsQWN0aW9uPigpO1xuICBAT3V0cHV0KCkgb25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uU2VydmljZTogU2NoZWR1bGVUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBnZXQgZGlhbG9nSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGU/Lm5hbWUgPz8gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5zY2hlZHVsZV9kZXRhaWxzJyk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIGVkaXRTY2hlZHVsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY2hlZHVsZSkge1xuICAgICAgdGhpcy5vbkFjdGlvbi5lbWl0KHsgdHlwZTogJ2VkaXQnLCBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSB9KTtcbiAgICB9XG4gIH1cblxuICBhY2NlcHRTY2hlZHVsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGUpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLmNvbmZpcm1fYWNjZXB0JyksXG4gICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUuY29uZmlybWF0aW9uJyksXG4gICAgICBpY29uOiAncGkgcGktcXVlc3Rpb24tY2lyY2xlJyxcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLnllcycpLFxuICAgICAgcmVqZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUubm8nKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zY2hlZHVsZSkge1xuICAgICAgICAgIHRoaXMub25BY3Rpb24uZW1pdCh7IHR5cGU6ICdhY2NlcHQnLCBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVqZWN0U2NoZWR1bGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5jb25maXJtX3JlamVjdCcpLFxuICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLmNvbmZpcm1hdGlvbicpLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLnllcycpLFxuICAgICAgcmVqZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUubm8nKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zY2hlZHVsZSkge1xuICAgICAgICAgIHRoaXMub25BY3Rpb24uZW1pdCh7IHR5cGU6ICdyZWplY3QnLCBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsU2NoZWR1bGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5jb25maXJtX2NhbmNlbCcpLFxuICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLmNvbmZpcm1hdGlvbicpLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLnllcycpLFxuICAgICAgcmVqZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUubm8nKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zY2hlZHVsZSkge1xuICAgICAgICAgIHRoaXMub25BY3Rpb24uZW1pdCh7IHR5cGU6ICdjYW5jZWwnLCBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlU2NoZWR1bGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5jb25maXJtX2RlbGV0ZScpLFxuICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLmNvbmZpcm1hdGlvbicpLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLnllcycpLFxuICAgICAgcmVqZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUubm8nKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zY2hlZHVsZSkge1xuICAgICAgICAgIHRoaXMub25BY3Rpb24uZW1pdCh7IHR5cGU6ICdkZWxldGUnLCBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLm5vdF9pbmZvcm1lZCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgaWYgKGlzTmFOKGRhdGVPYmouZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5pbnZhbGlkX2RhdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRlT2JqLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicsIHtcbiAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICBtaW51dGU6ICcyLWRpZ2l0J1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5pbnZhbGlkX2RhdGUnKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmlvcml0eUxhYmVsKHByaW9yaXR5OiBzdHJpbmcgfCBTY2hlZHVsZVByaW9yaXR5IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIXByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5ub3RfaW5mb3JtZWQnKTtcbiAgICB9XG4gICAgY29uc3QgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgW1NjaGVkdWxlUHJpb3JpdHkuTG93XTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5wcmlvcml0eV9sb3cnKSxcbiAgICAgIFtTY2hlZHVsZVByaW9yaXR5Lk1lZGl1bV06IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUucHJpb3JpdHlfbWVkaXVtJyksXG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5IaWdoXTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5wcmlvcml0eV9oaWdoJyksXG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5Dcml0aWNhbF06IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUucHJpb3JpdHlfY3JpdGljYWwnKVxuICAgIH07XG4gICAgcmV0dXJuIGxhYmVsc1twcmlvcml0eV0gPz8gcHJpb3JpdHk7XG4gIH1cblxuICBnZXRQcmlvcml0eVNldmVyaXR5KHByaW9yaXR5OiBzdHJpbmcgfCBTY2hlZHVsZVByaW9yaXR5IHwgdW5kZWZpbmVkKTogUHJpb3JpdHlTZXZlcml0eSB7XG4gICAgaWYgKCFwcmlvcml0eSkge1xuICAgICAgcmV0dXJuICdpbmZvJztcbiAgICB9XG4gICAgY29uc3Qgc2V2ZXJpdGllczogUmVjb3JkPHN0cmluZywgUHJpb3JpdHlTZXZlcml0eT4gPSB7XG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5Mb3ddOiAnaW5mbycsXG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5NZWRpdW1dOiAnc3VjY2VzcycsXG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5IaWdoXTogJ3dhcm4nLFxuICAgICAgW1NjaGVkdWxlUHJpb3JpdHkuQ3JpdGljYWxdOiAnZGFuZ2VyJ1xuICAgIH07XG4gICAgcmV0dXJuIHNldmVyaXRpZXNbcHJpb3JpdHldID8/ICdpbmZvJztcbiAgfVxuXG4gIGdldFJlY3VycmVuY2VMYWJlbChyZWN1cnJlbmNlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghcmVjdXJyZW5jZSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUucmVjdXJyZW5jZV9ub25lJyk7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdOT05FJzogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5yZWN1cnJlbmNlX25vbmUnKSxcbiAgICAgICdEQUlMWSc6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUucmVjdXJyZW5jZV9kYWlseScpLFxuICAgICAgJ1dFRUtMWSc6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUucmVjdXJyZW5jZV93ZWVrbHknKSxcbiAgICAgICdNT05USExZJzogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5yZWN1cnJlbmNlX21vbnRobHknKSxcbiAgICAgICdZRUFSTFknOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLnJlY3VycmVuY2VfeWVhcmx5JyksXG4gICAgICAnQ1VTVE9NJzogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5yZWN1cnJlbmNlX2N1c3RvbScpXG4gICAgfTtcbiAgICByZXR1cm4gbGFiZWxzW3JlY3VycmVuY2VdID8/IHJlY3VycmVuY2U7XG4gIH1cblxuICBnZXRPcmdhbml6ZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3JnYW5pemVyID0gdGhpcy5zY2hlZHVsZT8ucGFydGljaXBhbnRzPy5maW5kKChwOiBTY2hlZHVsZVBhcnRpY2lwYW50KSA9PiBwLm9yZ2FuaXplcik7XG4gICAgcmV0dXJuIG9yZ2FuaXplcj8uY29sbGFib3JhdG9yPy5uYW1lID8/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUubm90X2luZm9ybWVkJyk7XG4gIH1cblxuICBnZXRQYXJ0aWNpcGFudHNDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlPy5wYXJ0aWNpcGFudHM/LmZpbHRlcigocDogU2NoZWR1bGVQYXJ0aWNpcGFudCkgPT4gIXAub3JnYW5pemVyKS5sZW5ndGggPz8gMDtcbiAgfVxuXG4gIGdldFBhcnRpY2lwYW50c0xpc3QoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0aWNpcGFudHMgPSB0aGlzLnNjaGVkdWxlPy5wYXJ0aWNpcGFudHM/LmZpbHRlcigocDogU2NoZWR1bGVQYXJ0aWNpcGFudCkgPT4gIXAub3JnYW5pemVyKSA/PyBbXTtcbiAgICBpZiAocGFydGljaXBhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUubm9fcGFydGljaXBhbnRzJyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0aWNpcGFudHMubWFwKChwOiBTY2hlZHVsZVBhcnRpY2lwYW50KSA9PiBwLmNvbGxhYm9yYXRvcj8ubmFtZSA/PyB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLm5vX25hbWUnKSkuam9pbignLCAnKTtcbiAgfVxuXG4gIGdldENvbmZpcm1hdGlvbkxhYmVsKGNvbmZpcm1hdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbmZpcm1hdGlvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAoY29uZmlybWF0aW9uID09PSAnQ09ORklSTUVEJykge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnc3Iuc2NoZWR1bGUuc3RhdHVzX2FjY2VwdGVkJyk7XG4gICAgfSBlbHNlIGlmIChjb25maXJtYXRpb24gPT09ICdERUNMSU5FRCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ3NyLnNjaGVkdWxlLnN0YXR1c19yZWplY3RlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdzci5zY2hlZHVsZS5zdGF0dXNfcGVuZGluZycpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbmZpcm1hdGlvblNldmVyaXR5KGNvbmZpcm1hdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2Fybicge1xuICAgIGlmIChjb25maXJtYXRpb24gPT09ICdDT05GSVJNRUQnKSB7XG4gICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgIH0gZWxzZSBpZiAoY29uZmlybWF0aW9uID09PSAnREVDTElORUQnKSB7XG4gICAgICByZXR1cm4gJ2Rhbmdlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnd2Fybic7XG4gICAgfVxuICB9XG59XG4iLCI8cC1kaWFsb2dcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgW21vZGFsXT1cInRydWVcIlxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gIFtzdHlsZUNsYXNzXT1cIidzY2hlZHVsZS1kZXRhaWwtZGlhbG9nJ1wiXG4gIFtoZWFkZXJdPVwiZGlhbG9nSGVhZGVyXCJcbiAgKG9uSGlkZSk9XCJjbG9zZURpYWxvZygpXCI+XG4gIFxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIj5cbiAgICAgIDxoMz57eyBkaWFsb2dIZWFkZXIgfX08L2gzPlxuICAgICAgPHAtdGFnIFxuICAgICAgICAqbmdJZj1cInNjaGVkdWxlPy5wcmlvcml0eVwiXG4gICAgICAgIFtzZXZlcml0eV09XCJnZXRQcmlvcml0eVNldmVyaXR5KHNjaGVkdWxlPy5wcmlvcml0eSlcIlxuICAgICAgICBbdmFsdWVdPVwiZ2V0UHJpb3JpdHlMYWJlbChzY2hlZHVsZT8ucHJpb3JpdHkpXCI+XG4gICAgICA8L3AtdGFnPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJzY2hlZHVsZS1kZXRhaWwtY29udGVudFwiICpuZ0lmPVwic2NoZWR1bGVcIj5cbiAgICBcbiAgICA8IS0tIEluZm9ybWHDp8O1ZXMgQsOhc2ljYXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCI+XG4gICAgICA8aDQgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+e3sgJ3NyLnNjaGVkdWxlLmJhc2ljX2luZm8nIHwgc2NoZWR1bGVUcmFuc2xhdGUgfX08L2g0PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsZW5kYXJcIj48L2k+XG4gICAgICAgICAge3sgJ3NyLnNjaGVkdWxlLnR5cGUnIHwgc2NoZWR1bGVUcmFuc2xhdGUgfX06XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWwtdmFsdWVcIj57eyBzY2hlZHVsZS50eXBlPy5uYW1lID8/ICgnc3Iuc2NoZWR1bGUubm90X2luZm9ybWVkJyB8IHNjaGVkdWxlVHJhbnNsYXRlKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2xvY2tcIj48L2k+XG4gICAgICAgICAge3sgJ3NyLnNjaGVkdWxlLndoZW5fb2NjdXJzJyB8IHNjaGVkdWxlVHJhbnNsYXRlIH19OlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGV0YWlsLXZhbHVlXCI+e3sgc2NoZWR1bGUud2hlbk9jY3VycyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiICpuZ0lmPVwic2NoZWR1bGUuZHVyYXRpb25cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWwtbGFiZWxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWhvdXJnbGFzc1wiPjwvaT5cbiAgICAgICAgICB7eyAnc3Iuc2NoZWR1bGUuZHVyYXRpb24nIHwgc2NoZWR1bGVUcmFuc2xhdGUgfX06XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWwtdmFsdWVcIj57eyBzY2hlZHVsZS5kdXJhdGlvbiB9fSB7eyAnc3Iuc2NoZWR1bGUubWludXRlcycgfCBzY2hlZHVsZVRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktcmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICB7eyAnc3Iuc2NoZWR1bGUucmVjdXJyZW5jZScgfCBzY2hlZHVsZVRyYW5zbGF0ZSB9fTpcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC12YWx1ZVwiPnt7IGdldFJlY3VycmVuY2VMYWJlbChzY2hlZHVsZS5yZWN1cnJlbmNlKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cblxuICAgIDwhLS0gRGVzY3Jpw6fDo28gLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCIgKm5nSWY9XCJzY2hlZHVsZS5kZXNjcmlwdGlvblwiPlxuICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7ICdzci5zY2hlZHVsZS5kZXNjcmlwdGlvbicgfCBzY2hlZHVsZVRyYW5zbGF0ZSB9fTwvaDQ+XG4gICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHRcIj57eyBzY2hlZHVsZS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxwLWRpdmlkZXIgKm5nSWY9XCJzY2hlZHVsZS5kZXNjcmlwdGlvblwiPjwvcC1kaXZpZGVyPlxuXG4gICAgPCEtLSBQYXJ0aWNpcGFudGVzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtc2VjdGlvblwiPlxuICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7ICdzci5zY2hlZHVsZS5wYXJ0aWNpcGFudHMnIHwgc2NoZWR1bGVUcmFuc2xhdGUgfX08L2g0PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlclwiPjwvaT5cbiAgICAgICAgICB7eyAnc3Iuc2NoZWR1bGUub3JnYW5pemVyJyB8IHNjaGVkdWxlVHJhbnNsYXRlIH19OlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGV0YWlsLXZhbHVlXCI+e3sgZ2V0T3JnYW5pemVyTmFtZSgpIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtcm93XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGV0YWlsLWxhYmVsXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS11c2Vyc1wiPjwvaT5cbiAgICAgICAgICB7eyAnc3Iuc2NoZWR1bGUucGFydGljaXBhbnRzJyB8IHNjaGVkdWxlVHJhbnNsYXRlIH19ICh7eyBnZXRQYXJ0aWNpcGFudHNDb3VudCgpIH19KTpcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudHMtbGlzdFwiICpuZ0lmPVwiZ2V0UGFydGljaXBhbnRzQ291bnQoKSA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFydGljaXBhbnQgb2Ygc2NoZWR1bGUucGFydGljaXBhbnRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwYXJ0aWNpcGFudC5vcmdhbml6ZXJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlclwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHBhcnRpY2lwYW50LmNvbGxhYm9yYXRvcj8ubmFtZSA/PyAoJ3NyLnNjaGVkdWxlLm5vX25hbWUnIHwgc2NoZWR1bGVUcmFuc2xhdGUpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHAtdGFnIFxuICAgICAgICAgICAgICAqbmdJZj1cInBhcnRpY2lwYW50LmNvbmZpcm1hdGlvblwiXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJnZXRDb25maXJtYXRpb25TZXZlcml0eShwYXJ0aWNpcGFudC5jb25maXJtYXRpb24pXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENvbmZpcm1hdGlvbkxhYmVsKHBhcnRpY2lwYW50LmNvbmZpcm1hdGlvbilcIlxuICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFydGljaXBhbnQtc3RhdHVzXCI+XG4gICAgICAgICAgICA8L3AtdGFnPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgY2xhc3M9XCJuby1wYXJ0aWNpcGFudHNcIiAqbmdJZj1cImdldFBhcnRpY2lwYW50c0NvdW50KCkgPT09IDBcIj5cbiAgICAgICAge3sgJ3NyLnNjaGVkdWxlLm5vX3BhcnRpY2lwYW50c19iZXNpZGVzX29yZ2FuaXplcicgfCBzY2hlZHVsZVRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cblxuICAgIDwhLS0gTG9jYWwgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCIgKm5nSWY9XCJzY2hlZHVsZS5sb2NhdGlvblwiPlxuICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7ICdzci5zY2hlZHVsZS5sb2NhdGlvbicgfCBzY2hlZHVsZVRyYW5zbGF0ZSB9fTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktbWFwLW1hcmtlclwiPjwvaT5cbiAgICAgICAgICB7eyAnc3Iuc2NoZWR1bGUuYWRkcmVzcycgfCBzY2hlZHVsZVRyYW5zbGF0ZSB9fTpcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC12YWx1ZVwiPnt7IHNjaGVkdWxlLmxvY2F0aW9uIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE9ic2VydmHDp8O1ZXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCIgKm5nSWY9XCJzY2hlZHVsZS5vYnNlcnZhdGlvbnNcIj5cbiAgICAgIDxoNCBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj57eyAnc3Iuc2NoZWR1bGUubm90ZXMnIHwgc2NoZWR1bGVUcmFuc2xhdGUgfX08L2g0PlxuICAgICAgPHAgY2xhc3M9XCJvYnNlcnZhdGlvbnMtdGV4dFwiPnt7IHNjaGVkdWxlLm9ic2VydmF0aW9ucyB9fTwvcD5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1mb290ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItbGVmdFwiPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICpuZ0lmPVwic2hvd0RlbGV0ZUJ1dHRvblwiXG4gICAgICAgICAgcEJ1dHRvbiBcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgW2xhYmVsXT1cIidzci5zY2hlZHVsZS5kZWxldGUnIHwgc2NoZWR1bGVUcmFuc2xhdGVcIiBcbiAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVTY2hlZHVsZSgpXCI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLXJpZ2h0XCI+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgKm5nSWY9XCJzaG93UmVqZWN0QnV0dG9uXCJcbiAgICAgICAgICBwQnV0dG9uIFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICBbbGFiZWxdPVwiJ3NyLnNjaGVkdWxlLnJlamVjdCcgfCBzY2hlZHVsZVRyYW5zbGF0ZVwiIFxuICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi13YXJuaW5nXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVqZWN0U2NoZWR1bGUoKVwiPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAqbmdJZj1cInNob3dDYW5jZWxCdXR0b25cIlxuICAgICAgICAgIHBCdXR0b24gXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgIFtsYWJlbF09XCInc3Iuc2NoZWR1bGUuY2FuY2VsJyB8IHNjaGVkdWxlVHJhbnNsYXRlXCIgXG4gICAgICAgICAgaWNvbj1cInBpIHBpLWJhblwiXG4gICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTY2hlZHVsZSgpXCI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICpuZ0lmPVwic2hvd0FjY2VwdEJ1dHRvblwiXG4gICAgICAgICAgcEJ1dHRvbiBcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgW2xhYmVsXT1cIidzci5zY2hlZHVsZS5hY2NlcHQnIHwgc2NoZWR1bGVUcmFuc2xhdGVcIiBcbiAgICAgICAgICBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiXG4gICAgICAgICAgKGNsaWNrKT1cImFjY2VwdFNjaGVkdWxlKClcIj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgKm5nSWY9XCJzaG93RWRpdEJ1dHRvblwiXG4gICAgICAgICAgcEJ1dHRvbiBcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgW2xhYmVsXT1cIidzci5zY2hlZHVsZS5lZGl0X3NjaGVkdWxlJyB8IHNjaGVkdWxlVHJhbnNsYXRlXCIgXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRTY2hlZHVsZSgpXCI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgIHBCdXR0b24gXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgIFtsYWJlbF09XCInc3Iuc2NoZWR1bGUuY2xvc2UnIHwgc2NoZWR1bGVUcmFuc2xhdGVcIiBcbiAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuPC9wLWRpYWxvZz5cblxuPHAtY29uZmlybURpYWxvZz48L3AtY29uZmlybURpYWxvZz5cbiJdfQ==
|