@senior-gestao-relacionamento/angular-components 1.10.0 → 2.0.0-master-3920269d
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 +162 -0
- package/esm2022/lib/components/schedule/components/schedule-form.component.mjs +780 -0
- package/esm2022/lib/components/schedule/index.mjs +6 -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/public-api.mjs +12 -0
- package/esm2022/senior-gestao-relacionamento-angular-components.mjs +5 -0
- package/fesm2022/senior-gestao-relacionamento-angular-components.mjs +1285 -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 +38 -0
- package/lib/components/schedule/components/schedule-form.component.d.ts +98 -0
- package/lib/components/schedule/index.d.ts +4 -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/package.json +39 -41
- package/public-api.d.ts +8 -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,162 @@
|
|
|
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
|
+
// Components AI
|
|
10
|
+
import { TranslatePipe } from '@seniorsistemas/components-ai';
|
|
11
|
+
import { SchedulePriority } from '../models/schedule.enums';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@seniorsistemas/components-ai";
|
|
14
|
+
import * as i2 from "@angular/common";
|
|
15
|
+
import * as i3 from "primeng/dialog";
|
|
16
|
+
import * as i4 from "primeng/api";
|
|
17
|
+
import * as i5 from "primeng/button";
|
|
18
|
+
import * as i6 from "primeng/tag";
|
|
19
|
+
import * as i7 from "primeng/divider";
|
|
20
|
+
export class ScheduleDetailComponent {
|
|
21
|
+
translationService;
|
|
22
|
+
visible = false;
|
|
23
|
+
schedule = null;
|
|
24
|
+
visibleChange = new EventEmitter();
|
|
25
|
+
onEdit = new EventEmitter();
|
|
26
|
+
onClose = new EventEmitter();
|
|
27
|
+
NOT_INFORMED = 'Não informado';
|
|
28
|
+
constructor(translationService) {
|
|
29
|
+
this.translationService = translationService;
|
|
30
|
+
}
|
|
31
|
+
get dialogHeader() {
|
|
32
|
+
return this.schedule?.name ?? 'Detalhes da Agenda';
|
|
33
|
+
}
|
|
34
|
+
closeDialog() {
|
|
35
|
+
this.visible = false;
|
|
36
|
+
this.visibleChange.emit(false);
|
|
37
|
+
this.onClose.emit();
|
|
38
|
+
}
|
|
39
|
+
editSchedule() {
|
|
40
|
+
if (this.schedule) {
|
|
41
|
+
this.onEdit.emit(this.schedule);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
formatDate(date) {
|
|
45
|
+
if (!date) {
|
|
46
|
+
return this.NOT_INFORMED;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const dateObj = new Date(date);
|
|
50
|
+
if (isNaN(dateObj.getTime())) {
|
|
51
|
+
return 'Data inválida';
|
|
52
|
+
}
|
|
53
|
+
return dateObj.toLocaleString('pt-BR', {
|
|
54
|
+
day: '2-digit',
|
|
55
|
+
month: '2-digit',
|
|
56
|
+
year: 'numeric',
|
|
57
|
+
hour: '2-digit',
|
|
58
|
+
minute: '2-digit'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return 'Data inválida';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
getPriorityLabel(priority) {
|
|
66
|
+
if (!priority) {
|
|
67
|
+
return this.NOT_INFORMED;
|
|
68
|
+
}
|
|
69
|
+
const labels = {
|
|
70
|
+
[SchedulePriority.Low]: 'Baixa',
|
|
71
|
+
[SchedulePriority.Medium]: 'Média',
|
|
72
|
+
[SchedulePriority.High]: 'Alta',
|
|
73
|
+
[SchedulePriority.Critical]: 'Crítica'
|
|
74
|
+
};
|
|
75
|
+
return labels[priority] ?? priority;
|
|
76
|
+
}
|
|
77
|
+
getPrioritySeverity(priority) {
|
|
78
|
+
if (!priority) {
|
|
79
|
+
return 'info';
|
|
80
|
+
}
|
|
81
|
+
const severities = {
|
|
82
|
+
[SchedulePriority.Low]: 'info',
|
|
83
|
+
[SchedulePriority.Medium]: 'success',
|
|
84
|
+
[SchedulePriority.High]: 'warn',
|
|
85
|
+
[SchedulePriority.Critical]: 'danger'
|
|
86
|
+
};
|
|
87
|
+
return severities[priority] ?? 'info';
|
|
88
|
+
}
|
|
89
|
+
getRecurrenceLabel(recurrence) {
|
|
90
|
+
if (!recurrence) {
|
|
91
|
+
return 'Não se repete';
|
|
92
|
+
}
|
|
93
|
+
const labels = {
|
|
94
|
+
'NONE': 'Não se repete',
|
|
95
|
+
'DAILY': 'Diariamente',
|
|
96
|
+
'WEEKLY': 'Semanalmente',
|
|
97
|
+
'MONTHLY': 'Mensalmente',
|
|
98
|
+
'YEARLY': 'Anualmente',
|
|
99
|
+
'CUSTOM': 'Personalizado'
|
|
100
|
+
};
|
|
101
|
+
return labels[recurrence] ?? recurrence;
|
|
102
|
+
}
|
|
103
|
+
getOrganizerName() {
|
|
104
|
+
const organizer = this.schedule?.participants?.find((p) => p.organizer);
|
|
105
|
+
return organizer?.collaborator?.name ?? this.NOT_INFORMED;
|
|
106
|
+
}
|
|
107
|
+
getParticipantsCount() {
|
|
108
|
+
return this.schedule?.participants?.filter((p) => !p.organizer).length ?? 0;
|
|
109
|
+
}
|
|
110
|
+
getParticipantsList() {
|
|
111
|
+
const participants = this.schedule?.participants?.filter((p) => !p.organizer) ?? [];
|
|
112
|
+
if (participants.length === 0) {
|
|
113
|
+
return 'Nenhum participante';
|
|
114
|
+
}
|
|
115
|
+
return participants.map((p) => p.collaborator?.name ?? 'Sem nome').join(', ');
|
|
116
|
+
}
|
|
117
|
+
getConfirmationLabel(confirmation) {
|
|
118
|
+
if (!confirmation) {
|
|
119
|
+
return '';
|
|
120
|
+
}
|
|
121
|
+
if (confirmation === 'CONFIRMED') {
|
|
122
|
+
return this.translationService.translate('crmx.schedule.confirmed');
|
|
123
|
+
}
|
|
124
|
+
else if (confirmation === 'DECLINED') {
|
|
125
|
+
return this.translationService.translate('crmx.schedule.declined');
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return this.translationService.translate('crmx.schedule.pending');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
getConfirmationSeverity(confirmation) {
|
|
132
|
+
if (confirmation === 'CONFIRMED') {
|
|
133
|
+
return 'success';
|
|
134
|
+
}
|
|
135
|
+
else if (confirmation === 'DECLINED') {
|
|
136
|
+
return 'danger';
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return 'warn';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleDetailComponent, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
143
|
+
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" }, outputs: { visibleChange: "visibleChange", onEdit: "onEdit", onClose: "onClose" }, 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\">{{ 'crmx.schedule.basic_info' | translate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-calendar\"></i>\n {{ 'crmx.schedule.type' | translate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.type?.name ?? ('crmx.schedule.not_informed' | translate) }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-clock\"></i>\n {{ 'crmx.schedule.when_occurs' | translate }}:\n </span>\n <span class=\"detail-value\">{{ formatDate(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 {{ 'crmx.schedule.duration' | translate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.duration }} {{ 'crmx.schedule.minutes' | translate }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-refresh\"></i>\n {{ 'crmx.schedule.recurrence' | translate }}:\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\">{{ 'crmx.schedule.description' | translate }}</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\">{{ 'crmx.schedule.participants' | translate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-user\"></i>\n {{ 'crmx.schedule.organizer' | translate }}:\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 {{ 'crmx.schedule.participants' | translate }} ({{ 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 ?? ('crmx.schedule.no_name' | translate) }}</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 {{ 'crmx.schedule.no_participants_besides_organizer' | translate }}\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\">{{ 'crmx.schedule.location' | translate }}</h4>\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-map-marker\"></i>\n {{ 'crmx.schedule.address' | translate }}:\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\">{{ 'crmx.schedule.observations' | translate }}</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 <button \n pButton \n type=\"button\" \n [label]=\"'crmx.schedule.close' | translate\" \n icon=\"pi pi-times\"\n class=\"p-button-text\"\n (click)=\"closeDialog()\">\n </button>\n <button \n pButton \n type=\"button\" \n [label]=\"'crmx.schedule.edit' | translate\" \n icon=\"pi pi-pencil\"\n (click)=\"editSchedule()\">\n </button>\n </div>\n </ng-template>\n\n</p-dialog>\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)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3.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: i4.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: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
144
|
+
}
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleDetailComponent, decorators: [{
|
|
146
|
+
type: Component,
|
|
147
|
+
args: [{ selector: 's-schedule-detail', standalone: true, imports: [
|
|
148
|
+
CommonModule, DialogModule, ButtonModule, TagModule,
|
|
149
|
+
DividerModule, TooltipModule, TranslatePipe
|
|
150
|
+
], 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\">{{ 'crmx.schedule.basic_info' | translate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-calendar\"></i>\n {{ 'crmx.schedule.type' | translate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.type?.name ?? ('crmx.schedule.not_informed' | translate) }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-clock\"></i>\n {{ 'crmx.schedule.when_occurs' | translate }}:\n </span>\n <span class=\"detail-value\">{{ formatDate(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 {{ 'crmx.schedule.duration' | translate }}:\n </span>\n <span class=\"detail-value\">{{ schedule.duration }} {{ 'crmx.schedule.minutes' | translate }}</span>\n </div>\n\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-refresh\"></i>\n {{ 'crmx.schedule.recurrence' | translate }}:\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\">{{ 'crmx.schedule.description' | translate }}</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\">{{ 'crmx.schedule.participants' | translate }}</h4>\n \n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-user\"></i>\n {{ 'crmx.schedule.organizer' | translate }}:\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 {{ 'crmx.schedule.participants' | translate }} ({{ 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 ?? ('crmx.schedule.no_name' | translate) }}</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 {{ 'crmx.schedule.no_participants_besides_organizer' | translate }}\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\">{{ 'crmx.schedule.location' | translate }}</h4>\n <div class=\"detail-row\">\n <span class=\"detail-label\">\n <i class=\"pi pi-map-marker\"></i>\n {{ 'crmx.schedule.address' | translate }}:\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\">{{ 'crmx.schedule.observations' | translate }}</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 <button \n pButton \n type=\"button\" \n [label]=\"'crmx.schedule.close' | translate\" \n icon=\"pi pi-times\"\n class=\"p-button-text\"\n (click)=\"closeDialog()\">\n </button>\n <button \n pButton \n type=\"button\" \n [label]=\"'crmx.schedule.edit' | translate\" \n icon=\"pi pi-pencil\"\n (click)=\"editSchedule()\">\n </button>\n </div>\n </ng-template>\n\n</p-dialog>\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)}\n"] }]
|
|
151
|
+
}], ctorParameters: () => [{ type: i1.TranslationService }], propDecorators: { visible: [{
|
|
152
|
+
type: Input
|
|
153
|
+
}], schedule: [{
|
|
154
|
+
type: Input
|
|
155
|
+
}], visibleChange: [{
|
|
156
|
+
type: Output
|
|
157
|
+
}], onEdit: [{
|
|
158
|
+
type: Output
|
|
159
|
+
}], onClose: [{
|
|
160
|
+
type: Output
|
|
161
|
+
}] } });
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGUvY29tcG9uZW50cy9zY2hlZHVsZS1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9jb21wb25lbnRzL3NjaGVkdWxlLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFBc0IsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7OztBQXNCNUQsTUFBTSxPQUFPLHVCQUF1QjtJQVVMO0lBVHBCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsUUFBUSxHQUFvQyxJQUFJLENBQUM7SUFFaEQsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7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QUFhO3NCQUF0QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vIFByaW1lTkdcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IFRhZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7IERpdmlkZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpdmlkZXInO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbi8vIENvbXBvbmVudHMgQUlcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSwgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9jb21wb25lbnRzLWFpJztcblxuLy8gTG9jYWxcbmltcG9ydCB7IFNjaGVkdWxlLCBTY2hlZHVsZVBhcnRpY2lwYW50IH0gZnJvbSAnLi4vbW9kZWxzL3NjaGVkdWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVByaW9yaXR5IH0gZnJvbSAnLi4vbW9kZWxzL3NjaGVkdWxlLmVudW1zJztcblxudHlwZSBQcmlvcml0eVNldmVyaXR5ID0gJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Rhbmdlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVXaXRoUGFydGljaXBhbnRzIGV4dGVuZHMgU2NoZWR1bGUge1xuICBwYXJ0aWNpcGFudHM/OiBTY2hlZHVsZVBhcnRpY2lwYW50W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgbG9jYXRpb24/OiBzdHJpbmc7XG4gIG9ic2VydmF0aW9ucz86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1zY2hlZHVsZS1kZXRhaWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgVGFnTW9kdWxlLFxuICAgIERpdmlkZXJNb2R1bGUsIFRvb2x0aXBNb2R1bGUsIFRyYW5zbGF0ZVBpcGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjaGVkdWxlLWRldGFpbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlRGV0YWlsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzY2hlZHVsZTogU2NoZWR1bGVXaXRoUGFydGljaXBhbnRzIHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFNjaGVkdWxlV2l0aFBhcnRpY2lwYW50cz4oKTtcbiAgQE91dHB1dCgpIG9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBOT1RfSU5GT1JNRUQgPSAnTsOjbyBpbmZvcm1hZG8nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UpIHt9XG5cbiAgZ2V0IGRpYWxvZ0hlYWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlPy5uYW1lID8/ICdEZXRhbGhlcyBkYSBBZ2VuZGEnO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cblxuICBlZGl0U2NoZWR1bGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2NoZWR1bGUpIHtcbiAgICAgIHRoaXMub25FZGl0LmVtaXQodGhpcy5zY2hlZHVsZSk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLk5PVF9JTkZPUk1FRDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgIGlmIChpc05hTihkYXRlT2JqLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuICdEYXRhIGludsOhbGlkYSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZU9iai50b0xvY2FsZVN0cmluZygncHQtQlInLCB7XG4gICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCdcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICdEYXRhIGludsOhbGlkYSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJpb3JpdHlMYWJlbChwcmlvcml0eTogc3RyaW5nIHwgU2NoZWR1bGVQcmlvcml0eSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFwcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuTk9UX0lORk9STUVEO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5Mb3ddOiAnQmFpeGEnLFxuICAgICAgW1NjaGVkdWxlUHJpb3JpdHkuTWVkaXVtXTogJ03DqWRpYScsXG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5IaWdoXTogJ0FsdGEnLFxuICAgICAgW1NjaGVkdWxlUHJpb3JpdHkuQ3JpdGljYWxdOiAnQ3LDrXRpY2EnXG4gICAgfTtcbiAgICByZXR1cm4gbGFiZWxzW3ByaW9yaXR5XSA/PyBwcmlvcml0eTtcbiAgfVxuXG4gIGdldFByaW9yaXR5U2V2ZXJpdHkocHJpb3JpdHk6IHN0cmluZyB8IFNjaGVkdWxlUHJpb3JpdHkgfCB1bmRlZmluZWQpOiBQcmlvcml0eVNldmVyaXR5IHtcbiAgICBpZiAoIXByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gJ2luZm8nO1xuICAgIH1cbiAgICBjb25zdCBzZXZlcml0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmlvcml0eVNldmVyaXR5PiA9IHtcbiAgICAgIFtTY2hlZHVsZVByaW9yaXR5Lkxvd106ICdpbmZvJyxcbiAgICAgIFtTY2hlZHVsZVByaW9yaXR5Lk1lZGl1bV06ICdzdWNjZXNzJyxcbiAgICAgIFtTY2hlZHVsZVByaW9yaXR5LkhpZ2hdOiAnd2FybicsXG4gICAgICBbU2NoZWR1bGVQcmlvcml0eS5Dcml0aWNhbF06ICdkYW5nZXInXG4gICAgfTtcbiAgICByZXR1cm4gc2V2ZXJpdGllc1twcmlvcml0eV0gPz8gJ2luZm8nO1xuICB9XG5cbiAgZ2V0UmVjdXJyZW5jZUxhYmVsKHJlY3VycmVuY2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFyZWN1cnJlbmNlKSB7XG4gICAgICByZXR1cm4gJ07Do28gc2UgcmVwZXRlJztcbiAgICB9XG4gICAgY29uc3QgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ05PTkUnOiAnTsOjbyBzZSByZXBldGUnLFxuICAgICAgJ0RBSUxZJzogJ0RpYXJpYW1lbnRlJyxcbiAgICAgICdXRUVLTFknOiAnU2VtYW5hbG1lbnRlJyxcbiAgICAgICdNT05USExZJzogJ01lbnNhbG1lbnRlJyxcbiAgICAgICdZRUFSTFknOiAnQW51YWxtZW50ZScsXG4gICAgICAnQ1VTVE9NJzogJ1BlcnNvbmFsaXphZG8nXG4gICAgfTtcbiAgICByZXR1cm4gbGFiZWxzW3JlY3VycmVuY2VdID8/IHJlY3VycmVuY2U7XG4gIH1cblxuICBnZXRPcmdhbml6ZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3JnYW5pemVyID0gdGhpcy5zY2hlZHVsZT8ucGFydGljaXBhbnRzPy5maW5kKChwOiBTY2hlZHVsZVBhcnRpY2lwYW50KSA9PiBwLm9yZ2FuaXplcik7XG4gICAgcmV0dXJuIG9yZ2FuaXplcj8uY29sbGFib3JhdG9yPy5uYW1lID8/IHRoaXMuTk9UX0lORk9STUVEO1xuICB9XG5cbiAgZ2V0UGFydGljaXBhbnRzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZT8ucGFydGljaXBhbnRzPy5maWx0ZXIoKHA6IFNjaGVkdWxlUGFydGljaXBhbnQpID0+ICFwLm9yZ2FuaXplcikubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXRQYXJ0aWNpcGFudHNMaXN0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydGljaXBhbnRzID0gdGhpcy5zY2hlZHVsZT8ucGFydGljaXBhbnRzPy5maWx0ZXIoKHA6IFNjaGVkdWxlUGFydGljaXBhbnQpID0+ICFwLm9yZ2FuaXplcikgPz8gW107XG4gICAgaWYgKHBhcnRpY2lwYW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnTmVuaHVtIHBhcnRpY2lwYW50ZSc7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0aWNpcGFudHMubWFwKChwOiBTY2hlZHVsZVBhcnRpY2lwYW50KSA9PiBwLmNvbGxhYm9yYXRvcj8ubmFtZSA/PyAnU2VtIG5vbWUnKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0Q29uZmlybWF0aW9uTGFiZWwoY29uZmlybWF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghY29uZmlybWF0aW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChjb25maXJtYXRpb24gPT09ICdDT05GSVJNRUQnKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdjcm14LnNjaGVkdWxlLmNvbmZpcm1lZCcpO1xuICAgIH0gZWxzZSBpZiAoY29uZmlybWF0aW9uID09PSAnREVDTElORUQnKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdjcm14LnNjaGVkdWxlLmRlY2xpbmVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2NybXguc2NoZWR1bGUucGVuZGluZycpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbmZpcm1hdGlvblNldmVyaXR5KGNvbmZpcm1hdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2Fybicge1xuICAgIGlmIChjb25maXJtYXRpb24gPT09ICdDT05GSVJNRUQnKSB7XG4gICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgIH0gZWxzZSBpZiAoY29uZmlybWF0aW9uID09PSAnREVDTElORUQnKSB7XG4gICAgICByZXR1cm4gJ2Rhbmdlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnd2Fybic7XG4gICAgfVxuICB9XG59XG4iLCI8cC1kaWFsb2dcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgW21vZGFsXT1cInRydWVcIlxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gIFtzdHlsZUNsYXNzXT1cIidzY2hlZHVsZS1kZXRhaWwtZGlhbG9nJ1wiXG4gIFtoZWFkZXJdPVwiZGlhbG9nSGVhZGVyXCJcbiAgKG9uSGlkZSk9XCJjbG9zZURpYWxvZygpXCI+XG4gIFxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIj5cbiAgICAgIDxoMz57eyBkaWFsb2dIZWFkZXIgfX08L2gzPlxuICAgICAgPHAtdGFnIFxuICAgICAgICAqbmdJZj1cInNjaGVkdWxlPy5wcmlvcml0eVwiXG4gICAgICAgIFtzZXZlcml0eV09XCJnZXRQcmlvcml0eVNldmVyaXR5KHNjaGVkdWxlPy5wcmlvcml0eSlcIlxuICAgICAgICBbdmFsdWVdPVwiZ2V0UHJpb3JpdHlMYWJlbChzY2hlZHVsZT8ucHJpb3JpdHkpXCI+XG4gICAgICA8L3AtdGFnPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJzY2hlZHVsZS1kZXRhaWwtY29udGVudFwiICpuZ0lmPVwic2NoZWR1bGVcIj5cbiAgICBcbiAgICA8IS0tIEluZm9ybWHDp8O1ZXMgQsOhc2ljYXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCI+XG4gICAgICA8aDQgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+e3sgJ2NybXguc2NoZWR1bGUuYmFzaWNfaW5mbycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsZW5kYXJcIj48L2k+XG4gICAgICAgICAge3sgJ2NybXguc2NoZWR1bGUudHlwZScgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWwtdmFsdWVcIj57eyBzY2hlZHVsZS50eXBlPy5uYW1lID8/ICgnY3JteC5zY2hlZHVsZS5ub3RfaW5mb3JtZWQnIHwgdHJhbnNsYXRlKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2xvY2tcIj48L2k+XG4gICAgICAgICAge3sgJ2NybXguc2NoZWR1bGUud2hlbl9vY2N1cnMnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGV0YWlsLXZhbHVlXCI+e3sgZm9ybWF0RGF0ZShzY2hlZHVsZS53aGVuT2NjdXJzKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiICpuZ0lmPVwic2NoZWR1bGUuZHVyYXRpb25cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWwtbGFiZWxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWhvdXJnbGFzc1wiPjwvaT5cbiAgICAgICAgICB7eyAnY3JteC5zY2hlZHVsZS5kdXJhdGlvbicgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWwtdmFsdWVcIj57eyBzY2hlZHVsZS5kdXJhdGlvbiB9fSB7eyAnY3JteC5zY2hlZHVsZS5taW51dGVzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktcmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICB7eyAnY3JteC5zY2hlZHVsZS5yZWN1cnJlbmNlJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC12YWx1ZVwiPnt7IGdldFJlY3VycmVuY2VMYWJlbChzY2hlZHVsZS5yZWN1cnJlbmNlKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cblxuICAgIDwhLS0gRGVzY3Jpw6fDo28gLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCIgKm5nSWY9XCJzY2hlZHVsZS5kZXNjcmlwdGlvblwiPlxuICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7ICdjcm14LnNjaGVkdWxlLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHRcIj57eyBzY2hlZHVsZS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxwLWRpdmlkZXIgKm5nSWY9XCJzY2hlZHVsZS5kZXNjcmlwdGlvblwiPjwvcC1kaXZpZGVyPlxuXG4gICAgPCEtLSBQYXJ0aWNpcGFudGVzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtc2VjdGlvblwiPlxuICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7ICdjcm14LnNjaGVkdWxlLnBhcnRpY2lwYW50cycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlclwiPjwvaT5cbiAgICAgICAgICB7eyAnY3JteC5zY2hlZHVsZS5vcmdhbml6ZXInIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGV0YWlsLXZhbHVlXCI+e3sgZ2V0T3JnYW5pemVyTmFtZSgpIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtcm93XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGV0YWlsLWxhYmVsXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS11c2Vyc1wiPjwvaT5cbiAgICAgICAgICB7eyAnY3JteC5zY2hlZHVsZS5wYXJ0aWNpcGFudHMnIHwgdHJhbnNsYXRlIH19ICh7eyBnZXRQYXJ0aWNpcGFudHNDb3VudCgpIH19KTpcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudHMtbGlzdFwiICpuZ0lmPVwiZ2V0UGFydGljaXBhbnRzQ291bnQoKSA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFydGljaXBhbnQgb2Ygc2NoZWR1bGUucGFydGljaXBhbnRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwYXJ0aWNpcGFudC5vcmdhbml6ZXJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlclwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHBhcnRpY2lwYW50LmNvbGxhYm9yYXRvcj8ubmFtZSA/PyAoJ2NybXguc2NoZWR1bGUubm9fbmFtZScgfCB0cmFuc2xhdGUpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHAtdGFnIFxuICAgICAgICAgICAgICAqbmdJZj1cInBhcnRpY2lwYW50LmNvbmZpcm1hdGlvblwiXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJnZXRDb25maXJtYXRpb25TZXZlcml0eShwYXJ0aWNpcGFudC5jb25maXJtYXRpb24pXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENvbmZpcm1hdGlvbkxhYmVsKHBhcnRpY2lwYW50LmNvbmZpcm1hdGlvbilcIlxuICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFydGljaXBhbnQtc3RhdHVzXCI+XG4gICAgICAgICAgICA8L3AtdGFnPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgY2xhc3M9XCJuby1wYXJ0aWNpcGFudHNcIiAqbmdJZj1cImdldFBhcnRpY2lwYW50c0NvdW50KCkgPT09IDBcIj5cbiAgICAgICAge3sgJ2NybXguc2NoZWR1bGUubm9fcGFydGljaXBhbnRzX2Jlc2lkZXNfb3JnYW5pemVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cblxuICAgIDwhLS0gTG9jYWwgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCIgKm5nSWY9XCJzY2hlZHVsZS5sb2NhdGlvblwiPlxuICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7ICdjcm14LnNjaGVkdWxlLmxvY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktbWFwLW1hcmtlclwiPjwvaT5cbiAgICAgICAgICB7eyAnY3JteC5zY2hlZHVsZS5hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbC12YWx1ZVwiPnt7IHNjaGVkdWxlLmxvY2F0aW9uIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE9ic2VydmHDp8O1ZXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbC1zZWN0aW9uXCIgKm5nSWY9XCJzY2hlZHVsZS5vYnNlcnZhdGlvbnNcIj5cbiAgICAgIDxoNCBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj57eyAnY3JteC5zY2hlZHVsZS5vYnNlcnZhdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgICAgIDxwIGNsYXNzPVwib2JzZXJ2YXRpb25zLXRleHRcIj57eyBzY2hlZHVsZS5vYnNlcnZhdGlvbnMgfX08L3A+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uIFxuICAgICAgICBwQnV0dG9uIFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgIFtsYWJlbF09XCInY3JteC5zY2hlZHVsZS5jbG9zZScgfCB0cmFuc2xhdGVcIiBcbiAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBcbiAgICAgICAgcEJ1dHRvbiBcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICBbbGFiZWxdPVwiJ2NybXguc2NoZWR1bGUuZWRpdCcgfCB0cmFuc2xhdGVcIiBcbiAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiXG4gICAgICAgIChjbGljayk9XCJlZGl0U2NoZWR1bGUoKVwiPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbjwvcC1kaWFsb2c+XG4iXX0=
|