@senior-gestao-empresarial/angular-components 7.19.0 → 7.20.0

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.
Files changed (58) hide show
  1. package/bundles/senior-gestao-empresarial-angular-components.umd.js +843 -220
  2. package/bundles/senior-gestao-empresarial-angular-components.umd.js.map +1 -1
  3. package/bundles/senior-gestao-empresarial-angular-components.umd.min.js +2 -2
  4. package/bundles/senior-gestao-empresarial-angular-components.umd.min.js.map +1 -1
  5. package/components/object-card/elements/field/object-card-field.component.d.ts +18 -0
  6. package/components/object-card/elements/main/object-card-main.component.d.ts +37 -0
  7. package/components/object-card/index.d.ts +4 -0
  8. package/components/object-card/object-card.component.d.ts +29 -0
  9. package/components/object-card/object-card.module.d.ts +2 -0
  10. package/components/shared/border-button/border-button.component.d.ts +7 -0
  11. package/components/shared/border-button/border-button.module.d.ts +2 -0
  12. package/components/shared/models/border-button-options.d.ts +9 -0
  13. package/components/shared/models/enum-severity.d.ts +7 -0
  14. package/components/thumbnail/index.d.ts +3 -0
  15. package/components/thumbnail/thumbnail-size.d.ts +5 -0
  16. package/components/thumbnail/thumbnail.component.d.ts +28 -0
  17. package/components/thumbnail/thumbnail.module.d.ts +2 -0
  18. package/components/thumbnail/thumbnail.service.d.ts +21 -0
  19. package/esm2015/components/object-card/elements/field/object-card-field.component.js +58 -0
  20. package/esm2015/components/object-card/elements/main/object-card-main.component.js +142 -0
  21. package/esm2015/components/object-card/index.js +5 -0
  22. package/esm2015/components/object-card/object-card.component.js +142 -0
  23. package/esm2015/components/object-card/object-card.module.js +22 -0
  24. package/esm2015/components/shared/border-button/border-button.component.js +24 -0
  25. package/esm2015/components/shared/border-button/border-button.module.js +16 -0
  26. package/esm2015/components/shared/models/border-button-options.js +1 -0
  27. package/esm2015/components/shared/models/enum-severity.js +9 -0
  28. package/esm2015/components/thumbnail/index.js +4 -0
  29. package/esm2015/components/thumbnail/thumbnail-size.js +7 -0
  30. package/esm2015/components/thumbnail/thumbnail.component.js +96 -0
  31. package/esm2015/components/thumbnail/thumbnail.module.js +17 -0
  32. package/esm2015/components/thumbnail/thumbnail.service.js +90 -0
  33. package/esm2015/public-api.js +3 -1
  34. package/esm2015/senior-gestao-empresarial-angular-components.js +8 -5
  35. package/esm5/components/object-card/elements/field/object-card-field.component.js +60 -0
  36. package/esm5/components/object-card/elements/main/object-card-main.component.js +167 -0
  37. package/esm5/components/object-card/index.js +5 -0
  38. package/esm5/components/object-card/object-card.component.js +144 -0
  39. package/esm5/components/object-card/object-card.module.js +25 -0
  40. package/esm5/components/shared/border-button/border-button.component.js +25 -0
  41. package/esm5/components/shared/border-button/border-button.module.js +19 -0
  42. package/esm5/components/shared/models/border-button-options.js +1 -0
  43. package/esm5/components/shared/models/enum-severity.js +9 -0
  44. package/esm5/components/thumbnail/index.js +4 -0
  45. package/esm5/components/thumbnail/thumbnail-size.js +7 -0
  46. package/esm5/components/thumbnail/thumbnail.component.js +99 -0
  47. package/esm5/components/thumbnail/thumbnail.module.js +20 -0
  48. package/esm5/components/thumbnail/thumbnail.service.js +95 -0
  49. package/esm5/public-api.js +3 -1
  50. package/esm5/senior-gestao-empresarial-angular-components.js +8 -5
  51. package/fesm2015/senior-gestao-empresarial-angular-components.js +737 -167
  52. package/fesm2015/senior-gestao-empresarial-angular-components.js.map +1 -1
  53. package/fesm5/senior-gestao-empresarial-angular-components.js +835 -218
  54. package/fesm5/senior-gestao-empresarial-angular-components.js.map +1 -1
  55. package/package.json +1 -1
  56. package/public-api.d.ts +2 -0
  57. package/senior-gestao-empresarial-angular-components.d.ts +7 -4
  58. package/senior-gestao-empresarial-angular-components.metadata.json +1 -1
@@ -0,0 +1,18 @@
1
+ import { EventEmitter, TemplateRef } from "@angular/core";
2
+ import { MenuItem } from "primeng/api";
3
+ import { ThumbnailComponent } from "../../../thumbnail/thumbnail.component";
4
+ export declare class ObjectCardFieldComponent {
5
+ private static nextId;
6
+ id: string;
7
+ imageSource?: string;
8
+ imageAlt?: string;
9
+ iconClass?: string;
10
+ label?: string;
11
+ description?: string;
12
+ buttonLabel?: string;
13
+ buttonModel?: MenuItem[];
14
+ buttonClick: EventEmitter<any>;
15
+ thumbnailComponent: ThumbnailComponent;
16
+ content: TemplateRef<any>;
17
+ private static getNextId;
18
+ }
@@ -0,0 +1,37 @@
1
+ import { AfterContentInit, EventEmitter } from "@angular/core";
2
+ import { MenuItem } from "primeng/api";
3
+ import { Observable } from "rxjs";
4
+ import { ThumbnailSize } from "../../../thumbnail/thumbnail-size";
5
+ import { ThumbnailComponent } from "../../../thumbnail/thumbnail.component";
6
+ export declare class ObjectCardMainComponent implements AfterContentInit {
7
+ private static nextId;
8
+ id: string;
9
+ imageSource?: string;
10
+ imageFallback?: string;
11
+ imageAlt?: string;
12
+ iconClass: string;
13
+ hasThumbnail: boolean;
14
+ hasDescription: boolean;
15
+ isBrand: boolean;
16
+ expandableImage: boolean;
17
+ imageLoader?: () => Observable<string> | Promise<string>;
18
+ label?: string;
19
+ description?: string;
20
+ buttonLabel?: string;
21
+ buttonModel?: MenuItem[];
22
+ buttonClick: EventEmitter<any>;
23
+ thumbnailComponent: ThumbnailComponent;
24
+ showImageModal: boolean;
25
+ fullImageSource?: string;
26
+ loadingFullImage: boolean;
27
+ private _thumbnailSize;
28
+ set thumbnailSize(value: ThumbnailSize);
29
+ get thumbnailSize(): ThumbnailSize;
30
+ onResize(): void;
31
+ ngAfterContentInit(): void;
32
+ update(): void;
33
+ private static getNextId;
34
+ getImageAltText(): string;
35
+ openImageModal(): Promise<void>;
36
+ private resolveFullImageSource;
37
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./object-card.module";
2
+ export * from "./object-card.component";
3
+ export * from "./elements/field/object-card-field.component";
4
+ export * from "./elements/main/object-card-main.component";
@@ -0,0 +1,29 @@
1
+ import { AfterContentChecked, EventEmitter, QueryList } from "@angular/core";
2
+ import { BorderButtonOptions } from "../shared/models/border-button-options";
3
+ import { EnumSeverity } from "../shared/models/enum-severity";
4
+ import { ObjectCardFieldComponent } from "./elements/field/object-card-field.component";
5
+ import { ObjectCardMainComponent } from "./elements/main/object-card-main.component";
6
+ export declare class ObjectCardComponent implements AfterContentChecked {
7
+ private static nextId;
8
+ id: string;
9
+ expanded: boolean;
10
+ expandTooltip: string;
11
+ collapseTooltip: string;
12
+ fieldsMinWidth: number;
13
+ expandedChange: EventEmitter<boolean>;
14
+ main: ObjectCardMainComponent;
15
+ fields?: QueryList<ObjectCardFieldComponent>;
16
+ maxVisibleFields: number;
17
+ severity: EnumSeverity;
18
+ borderButtonOptions: BorderButtonOptions;
19
+ readonly EnumSeverity: typeof EnumSeverity;
20
+ private readonly container;
21
+ private readonly cardMainContainer;
22
+ private readonly iconContainer;
23
+ ngAfterContentChecked(): void;
24
+ private update;
25
+ toggle(): void;
26
+ expand(): void;
27
+ collapse(): void;
28
+ private static getNextId;
29
+ }
@@ -0,0 +1,2 @@
1
+ export declare class ErpObjectCardModule {
2
+ }
@@ -0,0 +1,7 @@
1
+ import { BorderButtonOptions } from "../models/border-button-options";
2
+ import { EnumSeverity } from "../models/enum-severity";
3
+ export declare class BorderButtonComponent {
4
+ severity: EnumSeverity;
5
+ options: BorderButtonOptions;
6
+ readonly EnumSeverity: typeof EnumSeverity;
7
+ }
@@ -0,0 +1,2 @@
1
+ export declare class BorderButtonModule {
2
+ }
@@ -0,0 +1,9 @@
1
+ import { EnumSeverity } from "./enum-severity";
2
+ export declare type BorderButtonOptions = {
3
+ label: (severity: EnumSeverity) => string;
4
+ onClick?: (severity: EnumSeverity) => void;
5
+ visible?: (severity: EnumSeverity) => boolean;
6
+ disabled?: (severity: EnumSeverity) => boolean;
7
+ tooltip?: (severity: EnumSeverity) => string;
8
+ icon?: (severity: EnumSeverity) => string;
9
+ };
@@ -0,0 +1,7 @@
1
+ export declare enum EnumSeverity {
2
+ Default = "Default",
3
+ Info = "Info",
4
+ Warn = "Warn",
5
+ Error = "Error",
6
+ Success = "Success"
7
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./thumbnail.module";
2
+ export * from "./thumbnail.component";
3
+ export * from "./thumbnail-size";
@@ -0,0 +1,5 @@
1
+ export declare enum ThumbnailSize {
2
+ Small = "small",
3
+ Medium = "medium",
4
+ Large = "large"
5
+ }
@@ -0,0 +1,28 @@
1
+ import { AfterViewInit, ElementRef, OnDestroy } from "@angular/core";
2
+ import { ThumbnailSize } from "./thumbnail-size";
3
+ import { ThumbnailService } from "./thumbnail.service";
4
+ export declare class ThumbnailComponent implements AfterViewInit, OnDestroy {
5
+ private readonly thumbnailService;
6
+ private static nextId;
7
+ fallback: boolean;
8
+ orientation: number;
9
+ imgEl: ElementRef;
10
+ id: string;
11
+ size: ThumbnailSize;
12
+ imageSource: string;
13
+ imageFallback?: string;
14
+ imageAlt: string;
15
+ iconClass: string;
16
+ hasAction: boolean;
17
+ actionIconClass: string;
18
+ isTile: boolean;
19
+ isBrand: boolean;
20
+ private readonly ngUnsubscribe;
21
+ constructor(thumbnailService: ThumbnailService);
22
+ ngOnDestroy(): void;
23
+ ngAfterViewInit(): void;
24
+ private static getNextId;
25
+ getImageAltText(): string;
26
+ onImageError(): void;
27
+ onFallbackError(): void;
28
+ }
@@ -0,0 +1,2 @@
1
+ export declare class ThumbnailModule {
2
+ }
@@ -0,0 +1,21 @@
1
+ export declare class ThumbnailService {
2
+ private static readonly HTTP_STATUS_OK;
3
+ private static readonly JPEG_MARKER;
4
+ private static readonly EXIF_MARKER;
5
+ private static readonly EXIF_SIGNATURE;
6
+ private static readonly LITTLE_ENDIAN_MARKER;
7
+ private static readonly ORIENTATION_TAG;
8
+ private static readonly MARKER_MASK;
9
+ private static readonly NOT_DEFINED;
10
+ private static readonly NOT_JPEG;
11
+ private static readonly INITIAL_OFFSET;
12
+ private static readonly EXIF_OFFSET;
13
+ private static readonly TAG_SIZE;
14
+ private static readonly TAG_VALUE_OFFSET;
15
+ getBinaryFile(img: HTMLImageElement): Promise<unknown>;
16
+ /**
17
+ * Retorna a tag da orientação EXIF {-1} Não definido, {-2} Não é formato JPEG, {1, 2, 3, 4, 5, 6, 7, 8} valores da orientação.
18
+ */
19
+ private getOrientation;
20
+ private extractOrientationFromExif;
21
+ }
@@ -0,0 +1,58 @@
1
+ var ObjectCardFieldComponent_1;
2
+ import { __decorate } from "tslib";
3
+ import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewChild } from "@angular/core";
4
+ import { ThumbnailComponent } from "../../../thumbnail/thumbnail.component";
5
+ let ObjectCardFieldComponent = ObjectCardFieldComponent_1 = class ObjectCardFieldComponent {
6
+ constructor() {
7
+ this.id = `erp-object-card-field-${ObjectCardFieldComponent_1.getNextId()}`;
8
+ this.buttonClick = new EventEmitter();
9
+ }
10
+ static getNextId() {
11
+ const id = ObjectCardFieldComponent_1.nextId;
12
+ ObjectCardFieldComponent_1.nextId++;
13
+ return id;
14
+ }
15
+ };
16
+ ObjectCardFieldComponent.nextId = 0;
17
+ __decorate([
18
+ Input()
19
+ ], ObjectCardFieldComponent.prototype, "id", void 0);
20
+ __decorate([
21
+ Input()
22
+ ], ObjectCardFieldComponent.prototype, "imageSource", void 0);
23
+ __decorate([
24
+ Input()
25
+ ], ObjectCardFieldComponent.prototype, "imageAlt", void 0);
26
+ __decorate([
27
+ Input()
28
+ ], ObjectCardFieldComponent.prototype, "iconClass", void 0);
29
+ __decorate([
30
+ Input()
31
+ ], ObjectCardFieldComponent.prototype, "label", void 0);
32
+ __decorate([
33
+ Input()
34
+ ], ObjectCardFieldComponent.prototype, "description", void 0);
35
+ __decorate([
36
+ Input()
37
+ ], ObjectCardFieldComponent.prototype, "buttonLabel", void 0);
38
+ __decorate([
39
+ Input()
40
+ ], ObjectCardFieldComponent.prototype, "buttonModel", void 0);
41
+ __decorate([
42
+ Output()
43
+ ], ObjectCardFieldComponent.prototype, "buttonClick", void 0);
44
+ __decorate([
45
+ ContentChild(ThumbnailComponent, { static: true })
46
+ ], ObjectCardFieldComponent.prototype, "thumbnailComponent", void 0);
47
+ __decorate([
48
+ ViewChild(TemplateRef, { static: true })
49
+ ], ObjectCardFieldComponent.prototype, "content", void 0);
50
+ ObjectCardFieldComponent = ObjectCardFieldComponent_1 = __decorate([
51
+ Component({
52
+ selector: "erp-object-card-field",
53
+ template: "<ng-template>\n <div class=\"container\">\n <ng-content select=\"s-thumbnail\"></ng-content>\n <s-thumbnail\n [id]=\"id + '-thumbnail'\"\n *ngIf=\"!thumbnailComponent && (imageSource || iconClass)\"\n [imageSource]=\"imageSource\"\n [imageAlt]=\"imageAlt || label\"\n [iconClass]=\"iconClass\"\n size=\"small\"\n ></s-thumbnail>\n\n <div class=\"info-container\">\n <div #labelTemplate><ng-content select=\"[labelTemplate]\"></ng-content></div>\n <ng-container *ngTemplateOutlet=\"textSpan; context: {\n elementId: id + '-label',\n text: label,\n cssClass: 'label',\n templateWrapper: labelTemplate\n }\"></ng-container>\n\n <div #descriptionTemplate><ng-content select=\"[descriptionTemplate]\"></ng-content></div>\n <ng-container *ngTemplateOutlet=\"textSpan; context: {\n cssClass: 'description',\n elementId: id + '-description',\n templateWrapper: descriptionTemplate,\n text: description\n }\"></ng-container>\n\n <s-button\n *ngIf=\"buttonLabel\"\n [id]=\"id + '-button'\"\n styleClass=\"object-card-button\"\n [label]=\"buttonLabel\"\n priority=\"link\"\n size=\"small\"\n [model]=\"buttonModel\"\n (onClick)=\"buttonClick.emit($event)\"\n ></s-button>\n\n <ng-template\n #textSpan\n let-text=\"text\"\n let-elementId=\"elementId\"\n let-templateWrapper=\"templateWrapper\"\n let-cssClass=\"cssClass\"\n >\n <span\n *ngIf=\"!templateWrapper.children.length\"\n [id]=\"elementId\"\n [pTooltip]=\"text\"\n tooltipPosition=\"top\"\n [class]=\"cssClass\"\n showDelay=\"500\"\n >{{ text }}</span>\n </ng-template>\n </div>\n </div>\n</ng-template>\n",
54
+ styles: [".container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%}.info-container{margin-left:10px}.info-container,.info-container span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.info-container .label{color:#999;display:block}.info-container .description{display:block}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.info-container{-ms-flex:1;flex:1}}@media (max-width:767px){.info-container,.info-container span{white-space:normal}}.info-container:only-child{margin-left:0}"]
55
+ })
56
+ ], ObjectCardFieldComponent);
57
+ export { ObjectCardFieldComponent };
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNhcmQtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9vYmplY3QtY2FyZC9lbGVtZW50cy9maWVsZC9vYmplY3QtY2FyZC1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBTzVFLElBQWEsd0JBQXdCLGdDQUFyQyxNQUFhLHdCQUF3QjtJQUFyQztRQUlXLE9BQUUsR0FBRyx5QkFBeUIsMEJBQXdCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQXdCckUsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBYzVDLENBQUM7SUFMVyxNQUFNLENBQUMsU0FBUztRQUNwQixNQUFNLEVBQUUsR0FBRywwQkFBd0IsQ0FBQyxNQUFNLENBQUM7UUFDM0MsMEJBQXdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0osQ0FBQTtBQXpDa0IsK0JBQU0sR0FBRyxDQUFDLENBQUM7QUFHMUI7SUFEQyxLQUFLLEVBQUU7b0RBQ29FO0FBRzVFO0lBREMsS0FBSyxFQUFFOzZEQUNvQjtBQUc1QjtJQURDLEtBQUssRUFBRTswREFDaUI7QUFHekI7SUFEQyxLQUFLLEVBQUU7MkRBQ2tCO0FBRzFCO0lBREMsS0FBSyxFQUFFO3VEQUNjO0FBR3RCO0lBREMsS0FBSyxFQUFFOzZEQUNvQjtBQUc1QjtJQURDLEtBQUssRUFBRTs2REFDb0I7QUFHNUI7SUFEQyxLQUFLLEVBQUU7NkRBQ3dCO0FBR2hDO0lBREMsTUFBTSxFQUFFOzZEQUMrQjtBQUd4QztJQURDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztvRUFDTDtBQUc5QztJQURDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7eURBQ1I7QUFsQ3hCLHdCQUF3QjtJQUxwQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLG10RUFBaUQ7O0tBRXBELENBQUM7R0FDVyx3QkFBd0IsQ0EwQ3BDO1NBMUNZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcblxuaW1wb3J0IHsgVGh1bWJuYWlsQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL3RodW1ibmFpbC90aHVtYm5haWwuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcImVycC1vYmplY3QtY2FyZC1maWVsZFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vb2JqZWN0LWNhcmQtZmllbGQuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vb2JqZWN0LWNhcmQtZmllbGQuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIE9iamVjdENhcmRGaWVsZENvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGVycC1vYmplY3QtY2FyZC1maWVsZC0ke09iamVjdENhcmRGaWVsZENvbXBvbmVudC5nZXROZXh0SWQoKX1gO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW1hZ2VTb3VyY2U/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZUFsdD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGljb25DbGFzcz86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBidXR0b25MYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJ1dHRvbk1vZGVsPzogTWVudUl0ZW1bXTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBDb250ZW50Q2hpbGQoVGh1bWJuYWlsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0aHVtYm5haWxDb21wb25lbnQ6IFRodW1ibmFpbENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldE5leHRJZCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBpZCA9IE9iamVjdENhcmRGaWVsZENvbXBvbmVudC5uZXh0SWQ7XG4gICAgICAgIE9iamVjdENhcmRGaWVsZENvbXBvbmVudC5uZXh0SWQrKztcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbn1cblxuXG4iXX0=
@@ -0,0 +1,142 @@
1
+ var ObjectCardMainComponent_1;
2
+ import { __awaiter, __decorate } from "tslib";
3
+ import { Component, ContentChild, EventEmitter, HostListener, Input, Output } from "@angular/core";
4
+ import { ThumbnailSize } from "../../../thumbnail/thumbnail-size";
5
+ import { ThumbnailComponent } from "../../../thumbnail/thumbnail.component";
6
+ import { Breakpoints } from "../../../utils";
7
+ let ObjectCardMainComponent = ObjectCardMainComponent_1 = class ObjectCardMainComponent {
8
+ constructor() {
9
+ this.id = `erp-object-card-main-${ObjectCardMainComponent_1.getNextId()}`;
10
+ this.iconClass = "fa fa-picture-o";
11
+ this.hasThumbnail = true;
12
+ this.hasDescription = true;
13
+ this.isBrand = false;
14
+ this.expandableImage = false;
15
+ this.buttonClick = new EventEmitter();
16
+ this.showImageModal = false;
17
+ this.loadingFullImage = false;
18
+ this._thumbnailSize = ThumbnailSize.Medium;
19
+ }
20
+ set thumbnailSize(value) {
21
+ this._thumbnailSize = value;
22
+ if (this.thumbnailComponent) {
23
+ this.thumbnailComponent.size = value;
24
+ }
25
+ }
26
+ get thumbnailSize() {
27
+ return this._thumbnailSize;
28
+ }
29
+ onResize() {
30
+ this.update();
31
+ }
32
+ ngAfterContentInit() {
33
+ this.update();
34
+ }
35
+ update() {
36
+ const windowWidth = window.innerWidth;
37
+ if (windowWidth <= Breakpoints.SM_MAX) {
38
+ this.thumbnailSize = ThumbnailSize.Small;
39
+ }
40
+ else {
41
+ this.thumbnailSize = ThumbnailSize.Medium;
42
+ }
43
+ }
44
+ static getNextId() {
45
+ const id = ObjectCardMainComponent_1.nextId;
46
+ ObjectCardMainComponent_1.nextId++;
47
+ return id;
48
+ }
49
+ getImageAltText() {
50
+ const altText = this.imageAlt || this.label || '';
51
+ return altText.replace(/\bimage\b/gi, '').replace(/\bimagem\b/gi, '').trim();
52
+ }
53
+ openImageModal() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ if (!this.expandableImage || !this.imageSource) {
56
+ return;
57
+ }
58
+ this.showImageModal = true;
59
+ this.fullImageSource = yield this.resolveFullImageSource();
60
+ });
61
+ }
62
+ resolveFullImageSource() {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ if (!this.imageLoader || this.fullImageSource) {
65
+ return this.fullImageSource || this.imageSource;
66
+ }
67
+ this.loadingFullImage = true;
68
+ try {
69
+ const result = this.imageLoader();
70
+ return yield (result instanceof Promise ? result : result.toPromise());
71
+ }
72
+ catch (error) {
73
+ console.error('Erro ao carregar imagem completa:', error);
74
+ return this.imageSource;
75
+ }
76
+ finally {
77
+ this.loadingFullImage = false;
78
+ }
79
+ });
80
+ }
81
+ };
82
+ ObjectCardMainComponent.nextId = 0;
83
+ __decorate([
84
+ Input()
85
+ ], ObjectCardMainComponent.prototype, "id", void 0);
86
+ __decorate([
87
+ Input()
88
+ ], ObjectCardMainComponent.prototype, "imageSource", void 0);
89
+ __decorate([
90
+ Input()
91
+ ], ObjectCardMainComponent.prototype, "imageFallback", void 0);
92
+ __decorate([
93
+ Input()
94
+ ], ObjectCardMainComponent.prototype, "imageAlt", void 0);
95
+ __decorate([
96
+ Input()
97
+ ], ObjectCardMainComponent.prototype, "iconClass", void 0);
98
+ __decorate([
99
+ Input()
100
+ ], ObjectCardMainComponent.prototype, "hasThumbnail", void 0);
101
+ __decorate([
102
+ Input()
103
+ ], ObjectCardMainComponent.prototype, "hasDescription", void 0);
104
+ __decorate([
105
+ Input()
106
+ ], ObjectCardMainComponent.prototype, "isBrand", void 0);
107
+ __decorate([
108
+ Input()
109
+ ], ObjectCardMainComponent.prototype, "expandableImage", void 0);
110
+ __decorate([
111
+ Input()
112
+ ], ObjectCardMainComponent.prototype, "imageLoader", void 0);
113
+ __decorate([
114
+ Input()
115
+ ], ObjectCardMainComponent.prototype, "label", void 0);
116
+ __decorate([
117
+ Input()
118
+ ], ObjectCardMainComponent.prototype, "description", void 0);
119
+ __decorate([
120
+ Input()
121
+ ], ObjectCardMainComponent.prototype, "buttonLabel", void 0);
122
+ __decorate([
123
+ Input()
124
+ ], ObjectCardMainComponent.prototype, "buttonModel", void 0);
125
+ __decorate([
126
+ Output()
127
+ ], ObjectCardMainComponent.prototype, "buttonClick", void 0);
128
+ __decorate([
129
+ ContentChild(ThumbnailComponent, { static: true })
130
+ ], ObjectCardMainComponent.prototype, "thumbnailComponent", void 0);
131
+ __decorate([
132
+ HostListener("window:resize")
133
+ ], ObjectCardMainComponent.prototype, "onResize", null);
134
+ ObjectCardMainComponent = ObjectCardMainComponent_1 = __decorate([
135
+ Component({
136
+ selector: "erp-object-card-main",
137
+ template: "<ng-container *ngIf=\"hasThumbnail\">\n <ng-content select=\"s-thumbnail\"></ng-content>\n <s-thumbnail\n [id]=\"id + '-thumbnail'\"\n [imageSource]=\"imageSource\"\n [imageFallback]=\"imageFallback\"\n [imageAlt]=\"imageAlt\"\n [iconClass]=\"iconClass\"\n [size]=\"thumbnailSize\"\n *ngIf=\"!thumbnailComponent\"\n [isBrand]=\"isBrand\"\n [ngClass]=\"{'expandable-thumbnail': expandableImage && imageSource}\"\n (click)=\"openImageModal()\"\n (keydown.enter)=\"openImageModal()\"\n (keydown.space)=\"openImageModal()\"\n tabindex=\"0\"\n role=\"button\"\n ></s-thumbnail>\n</ng-container>\n\n<p-dialog\n [header]=\"imageAlt || 'Visualizar'\"\n [(visible)]=\"showImageModal\"\n [modal]=\"true\"\n [dismissableMask]=\"true\"\n [styleClass]=\"'image-modal'\"\n [contentStyle]=\"{'overflow': 'auto', 'text-align': 'center'}\"\n>\n <s-loading-state [loading]=\"loadingFullImage\">\n <img\n *ngIf=\"fullImageSource\"\n [src]=\"fullImageSource\"\n alt=\"\"\n [attr.alt]=\"getImageAltText()\"\n width=\"100%\"\n height=\"auto\"\n class=\"expanded-image\"\n />\n </s-loading-state>\n</p-dialog>\n\n<ng-container *ngIf=\"hasDescription\">\n <div class=\"info-container\">\n <div #labelTemplate><ng-content select=\"[labelTemplate]\"></ng-content></div>\n <ng-container *ngTemplateOutlet=\"textSpan; context: {\n elementId: id + '-label',\n text: label,\n cssClass: 'label',\n templateWrapper: labelTemplate\n }\"></ng-container>\n\n <div #descriptionTemplate><ng-content select=\"[descriptionTemplate]\"></ng-content></div>\n <ng-container *ngTemplateOutlet=\"textSpan; context: {\n elementId: id + '-description',\n text: description,\n cssClass: 'description',\n templateWrapper: descriptionTemplate\n }\"></ng-container>\n\n <s-button\n [id]=\"id + '-button'\"\n *ngIf=\"buttonLabel\"\n styleClass=\"object-card-button\"\n priority=\"link\"\n [label]=\"buttonLabel\"\n [model]=\"buttonModel\"\n size=\"small\"\n (onClick)=\"buttonClick.emit($event)\"\n ></s-button>\n\n <ng-template\n #textSpan\n let-elementId=\"elementId\"\n let-text=\"text\"\n let-cssClass=\"cssClass\"\n let-templateWrapper=\"templateWrapper\"\n >\n <span\n [id]=\"elementId\"\n *ngIf=\"!templateWrapper.children.length\"\n [class]=\"cssClass\"\n [pTooltip]=\"text\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >{{ text }}</span>\n </ng-template>\n </div>\n</ng-container>\n",
138
+ styles: [":host{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;min-height:70px}.info-container{margin-left:10px;-ms-flex:1;flex:1}.info-container,.info-container span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.info-container .label{display:block;font-weight:700}.info-container .description{color:#999;display:block}@media (max-width:767px){.info-container,.info-container span{white-space:normal}}::ng-deep .expandable-thumbnail{cursor:pointer;transition:opacity .2s}::ng-deep .expandable-thumbnail:hover{opacity:.8}::ng-deep .image-modal .p-dialog{max-width:90vw;max-height:90vh}::ng-deep .image-modal .expanded-image{max-width:80vw;max-height:80vh;width:auto;height:auto;object-fit:contain}"]
139
+ })
140
+ ], ObjectCardMainComponent);
141
+ export { ObjectCardMainComponent };
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNhcmQtbWFpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL29iamVjdC1jYXJkL2VsZW1lbnRzL21haW4vb2JqZWN0LWNhcmQtbWFpbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXJILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPN0MsSUFBYSx1QkFBdUIsK0JBQXBDLE1BQWEsdUJBQXVCO0lBQXBDO1FBSVcsT0FBRSxHQUFHLHdCQUF3Qix5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBWW5FLGNBQVMsR0FBRyxpQkFBaUIsQ0FBQztRQUc5QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUdwQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUd0QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBR2hCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBa0J4QixnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBS3BELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4QixtQkFBYyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFvRWxELENBQUM7SUFsRUcsSUFBVyxhQUFhLENBQUMsS0FBb0I7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxJQUFJ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R2hFO0lBREMsS0FBSyxFQUFFO3NEQUNjO0FBR3RCO0lBREMsS0FBSyxFQUFFOzREQUNvQjtBQUc1QjtJQURDLEtBQUssRUFBRTs0REFDb0I7QUFHNUI7SUFEQyxLQUFLLEVBQUU7NERBQ3dCO0FBR2hDO0lBREMsTUFBTSxFQUFFOzREQUNrRDtBQUczRDtJQURDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzttRUFDTDtBQW9COUM7SUFEQyxZQUFZLENBQUMsZUFBZSxDQUFDO3VEQUc3QjtBQXZFUSx1QkFBdUI7SUFMbkMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQywyN0ZBQWdEOztLQUVuRCxDQUFDO0dBQ1csdUJBQXVCLENBMkhuQztTQTNIWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBUaHVtYm5haWxTaXplIH0gZnJvbSBcIi4uLy4uLy4uL3RodW1ibmFpbC90aHVtYm5haWwtc2l6ZVwiO1xuaW1wb3J0IHsgVGh1bWJuYWlsQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL3RodW1ibmFpbC90aHVtYm5haWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBCcmVha3BvaW50cyB9IGZyb20gXCIuLi8uLi8uLi91dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJlcnAtb2JqZWN0LWNhcmQtbWFpblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vb2JqZWN0LWNhcmQtbWFpbi5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9vYmplY3QtY2FyZC1tYWluLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RDYXJkTWFpbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBlcnAtb2JqZWN0LWNhcmQtbWFpbi0ke09iamVjdENhcmRNYWluQ29tcG9uZW50LmdldE5leHRJZCgpfWA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZVNvdXJjZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGltYWdlRmFsbGJhY2s/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZUFsdD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGljb25DbGFzcyA9IFwiZmEgZmEtcGljdHVyZS1vXCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoYXNUaHVtYm5haWwgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGFzRGVzY3JpcHRpb24gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNCcmFuZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwYW5kYWJsZUltYWdlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZUxvYWRlcj86ICgpID0+IE9ic2VydmFibGU8c3RyaW5nPiB8IFByb21pc2U8c3RyaW5nPjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBidXR0b25MYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJ1dHRvbk1vZGVsPzogTWVudUl0ZW1bXTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBidXR0b25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAQ29udGVudENoaWxkKFRodW1ibmFpbENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgdGh1bWJuYWlsQ29tcG9uZW50OiBUaHVtYm5haWxDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgc2hvd0ltYWdlTW9kYWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgZnVsbEltYWdlU291cmNlPzogc3RyaW5nO1xuICAgIHB1YmxpYyBsb2FkaW5nRnVsbEltYWdlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90aHVtYm5haWxTaXplID0gVGh1bWJuYWlsU2l6ZS5NZWRpdW07XG5cbiAgICBwdWJsaWMgc2V0IHRodW1ibmFpbFNpemUodmFsdWU6IFRodW1ibmFpbFNpemUpIHtcbiAgICAgICAgdGhpcy5fdGh1bWJuYWlsU2l6ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWxDb21wb25lbnQpe1xuICAgICAgICAgICAgdGhpcy50aHVtYm5haWxDb21wb25lbnQuc2l6ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aHVtYm5haWxTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh1bWJuYWlsU2l6ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICAgIHB1YmxpYyBvblJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgICAgaWYgKHdpbmRvd1dpZHRoIDw9IEJyZWFrcG9pbnRzLlNNX01BWCkge1xuICAgICAgICAgICAgdGhpcy50aHVtYm5haWxTaXplID0gVGh1bWJuYWlsU2l6ZS5TbWFsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsU2l6ZSA9IFRodW1ibmFpbFNpemUuTWVkaXVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TmV4dElkKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGlkID0gT2JqZWN0Q2FyZE1haW5Db21wb25lbnQubmV4dElkO1xuICAgICAgICBPYmplY3RDYXJkTWFpbkNvbXBvbmVudC5uZXh0SWQrKztcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbWFnZUFsdFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYWx0VGV4dCA9IHRoaXMuaW1hZ2VBbHQgfHwgdGhpcy5sYWJlbCB8fCAnJztcbiAgICAgICAgcmV0dXJuIGFsdFRleHQucmVwbGFjZSgvXFxiaW1hZ2VcXGIvZ2ksICcnKS5yZXBsYWNlKC9cXGJpbWFnZW1cXGIvZ2ksICcnKS50cmltKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9wZW5JbWFnZU1vZGFsKCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kYWJsZUltYWdlIHx8ICF0aGlzLmltYWdlU291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dJbWFnZU1vZGFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mdWxsSW1hZ2VTb3VyY2UgPSBhd2FpdCB0aGlzLnJlc29sdmVGdWxsSW1hZ2VTb3VyY2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVGdWxsSW1hZ2VTb3VyY2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTG9hZGVyIHx8IHRoaXMuZnVsbEltYWdlU291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mdWxsSW1hZ2VTb3VyY2UgfHwgdGhpcy5pbWFnZVNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZ0Z1bGxJbWFnZSA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmltYWdlTG9hZGVyKCk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyByZXN1bHQgOiByZXN1bHQudG9Qcm9taXNlKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJybyBhbyBjYXJyZWdhciBpbWFnZW0gY29tcGxldGE6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VTb3VyY2U7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdGdWxsSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from "./object-card.module";
2
+ export * from "./object-card.component";
3
+ export * from "./elements/field/object-card-field.component";
4
+ export * from "./elements/main/object-card-main.component";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL29iamVjdC1jYXJkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsNENBQTRDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9vYmplY3QtY2FyZC5tb2R1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29iamVjdC1jYXJkLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZWxlbWVudHMvZmllbGQvb2JqZWN0LWNhcmQtZmllbGQuY29tcG9uZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbGVtZW50cy9tYWluL29iamVjdC1jYXJkLW1haW4uY29tcG9uZW50XCI7XG4iXX0=
@@ -0,0 +1,142 @@
1
+ var ObjectCardComponent_1;
2
+ import { __decorate } from "tslib";
3
+ import { animate, state, style, transition, trigger } from "@angular/animations";
4
+ import { Component, ContentChild, ContentChildren, EventEmitter, Input, Output, ViewChild } from "@angular/core";
5
+ import { EnumSeverity } from "../shared/models/enum-severity";
6
+ import { Breakpoints } from "../utils/breakpoints";
7
+ import { ObjectCardFieldComponent } from "./elements/field/object-card-field.component";
8
+ import { ObjectCardMainComponent } from "./elements/main/object-card-main.component";
9
+ let ObjectCardComponent = ObjectCardComponent_1 = class ObjectCardComponent {
10
+ constructor() {
11
+ this.id = `erp-object-card-${ObjectCardComponent_1.getNextId()}`;
12
+ this.expanded = false;
13
+ this.expandTooltip = "Abrir painel";
14
+ this.collapseTooltip = "Fechar painel";
15
+ this.fieldsMinWidth = 200;
16
+ this.expandedChange = new EventEmitter();
17
+ this.maxVisibleFields = 0;
18
+ this.severity = EnumSeverity.Default;
19
+ this.EnumSeverity = EnumSeverity;
20
+ }
21
+ ngAfterContentChecked() {
22
+ this.update();
23
+ }
24
+ update() {
25
+ const windowWidth = window.innerWidth;
26
+ const containerWidth = this.container.nativeElement.getBoundingClientRect().width;
27
+ const mainFieldWidth = this.cardMainContainer.nativeElement.getBoundingClientRect().width;
28
+ let remainingSpace = containerWidth - mainFieldWidth;
29
+ const fieldsMinWidth = this.fieldsMinWidth;
30
+ const expandIconWidth = this.iconContainer.nativeElement.getBoundingClientRect().width;
31
+ let maxFieldQtd;
32
+ if (windowWidth <= Breakpoints.SM_MAX) {
33
+ maxFieldQtd = 0;
34
+ }
35
+ else {
36
+ maxFieldQtd = Math.floor((remainingSpace) / fieldsMinWidth);
37
+ }
38
+ const hasExpandIcon = maxFieldQtd && maxFieldQtd < this.fields.length;
39
+ if (hasExpandIcon) {
40
+ this.iconContainer.nativeElement.style.display = 'flex';
41
+ remainingSpace = remainingSpace - expandIconWidth;
42
+ maxFieldQtd = Math.floor((remainingSpace) / fieldsMinWidth);
43
+ }
44
+ else {
45
+ this.iconContainer.nativeElement.style.display = 'none';
46
+ }
47
+ this.maxVisibleFields = maxFieldQtd;
48
+ if (maxFieldQtd >= this.fields.length && this.expanded) {
49
+ this.collapse();
50
+ }
51
+ }
52
+ toggle() {
53
+ this.expanded ? this.collapse() : this.expand();
54
+ }
55
+ expand() {
56
+ this.expanded = true;
57
+ this.expandedChange.emit(this.expanded);
58
+ }
59
+ collapse() {
60
+ this.expanded = false;
61
+ this.expandedChange.emit(this.expanded);
62
+ }
63
+ static getNextId() {
64
+ const id = ObjectCardComponent_1.nextId;
65
+ ObjectCardComponent_1.nextId++;
66
+ return id;
67
+ }
68
+ };
69
+ ObjectCardComponent.nextId = 0;
70
+ __decorate([
71
+ Input()
72
+ ], ObjectCardComponent.prototype, "id", void 0);
73
+ __decorate([
74
+ Input()
75
+ ], ObjectCardComponent.prototype, "expanded", void 0);
76
+ __decorate([
77
+ Input()
78
+ ], ObjectCardComponent.prototype, "expandTooltip", void 0);
79
+ __decorate([
80
+ Input()
81
+ ], ObjectCardComponent.prototype, "collapseTooltip", void 0);
82
+ __decorate([
83
+ Input()
84
+ ], ObjectCardComponent.prototype, "fieldsMinWidth", void 0);
85
+ __decorate([
86
+ Output()
87
+ ], ObjectCardComponent.prototype, "expandedChange", void 0);
88
+ __decorate([
89
+ ContentChild(ObjectCardMainComponent, { static: true })
90
+ ], ObjectCardComponent.prototype, "main", void 0);
91
+ __decorate([
92
+ ContentChildren(ObjectCardFieldComponent, { descendants: true })
93
+ ], ObjectCardComponent.prototype, "fields", void 0);
94
+ __decorate([
95
+ Input()
96
+ ], ObjectCardComponent.prototype, "severity", void 0);
97
+ __decorate([
98
+ Input()
99
+ ], ObjectCardComponent.prototype, "borderButtonOptions", void 0);
100
+ __decorate([
101
+ ViewChild('contentContainer', { static: true })
102
+ ], ObjectCardComponent.prototype, "container", void 0);
103
+ __decorate([
104
+ ViewChild('cardMainContainer', { static: true })
105
+ ], ObjectCardComponent.prototype, "cardMainContainer", void 0);
106
+ __decorate([
107
+ ViewChild('iconContainer', { static: true })
108
+ ], ObjectCardComponent.prototype, "iconContainer", void 0);
109
+ ObjectCardComponent = ObjectCardComponent_1 = __decorate([
110
+ Component({
111
+ selector: "erp-object-card",
112
+ template: "<div [id]=\"id\" class=\"container\">\n <s-border-button\n *ngIf=\"\n borderButtonOptions?.visible\n ? borderButtonOptions?.visible(severity)\n : false\n \"\n [severity]=\"severity\"\n [options]=\"borderButtonOptions\"\n class=\"object-card__border-button\"\n [@BorderButtonAnimation]\n ></s-border-button>\n\n <div\n [id]=\"id + '-main-container'\"\n class=\"main-container\"\n #contentContainer\n [ngClass]=\"{\n 'with-hidden-fields': fields.length > maxVisibleFields,\n 'with-visible-fields': fields.length && maxVisibleFields,\n 'main-container--severity-default': severity === EnumSeverity.Default,\n 'main-container--severity-info': severity === EnumSeverity.Info,\n 'main-container--severity-warn': severity === EnumSeverity.Warn,\n 'main-container--severity-error': severity === EnumSeverity.Error,\n 'main-container--severity-success': severity == EnumSeverity.Success\n }\"\n >\n <div class=\"object-content\">\n <div class=\"erp-object-card-main\" #cardMainContainer [style.min-width.px]=\"fieldsMinWidth\">\n <ng-content select=\"erp-object-card-main\"></ng-content>\n </div>\n\n <div class=\"divider\" *ngIf=\"maxVisibleFields && fields.length\"></div>\n\n <div *ngFor=\"let field of (fields.toArray() | slice: 0:maxVisibleFields)\"\n class=\"erp-object-card-field\"\n [style.min-width.px]=\"fieldsMinWidth\">\n\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n </div>\n\n <button\n #iconContainer\n [id]=\"id + '-expand-icon-container'\"\n class=\"expand-icon-container\"\n (click)=\"toggle()\"\n [pTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n [attr.aria-label]=\"expanded ? collapseTooltip : expandTooltip\"\n title=\"Expandir/Recolher\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n type=\"button\"\n >\n <span\n [id]=\"id + '-expand-icon'\"\n class=\"expand-icon fa\"\n [ngClass]=\"{ 'fa-minus': expanded, 'fa-plus': !expanded }\"\n ></span>\n </button>\n </div>\n\n <div\n [id]=\"id + '-expandable-container'\"\n [@expandableContent]=\"expanded\"\n class=\"expandable-container\"\n [ngClass]=\"{\n 'expandable-container--severity-default':\n severity === EnumSeverity.Default,\n 'expandable-container--severity-info': severity === EnumSeverity.Info,\n 'expandable-container--severity-warn': severity === EnumSeverity.Warn,\n 'expandable-container--severity-error': severity === EnumSeverity.Error,\n 'expandable-container--severity-success':\n severity == EnumSeverity.Success\n }\"\n >\n <div class=\"childlist\">\n <ng-container\n *ngFor=\"\n let field of fields.toArray()\n | slice : maxVisibleFields : fields.length\n \"\n >\n <div class=\"erp-object-card-field\" [style.min-width.px]=\"fieldsMinWidth\">\n <ng-container\n *ngTemplateOutlet=\"field.content\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n",
113
+ animations: [
114
+ trigger("expandableContent", [
115
+ state("*", style({
116
+ height: "0",
117
+ })),
118
+ state("false", style({
119
+ height: "0",
120
+ })),
121
+ state("true", style({
122
+ height: "*",
123
+ })),
124
+ transition("* => true", animate("200ms ease-out")),
125
+ transition("false <=> true", animate("200ms ease-out")),
126
+ ]),
127
+ trigger("BorderButtonAnimation", [
128
+ transition(":enter", [
129
+ style({ transform: "scaleY(0)", opacity: 0 }),
130
+ animate("300ms ease", style({ transform: "scaleY(1)", opacity: 1 })),
131
+ ]),
132
+ transition(":leave", [
133
+ style({ transform: "scaleY(1)", opacity: 1 }),
134
+ animate("300ms ease", style({ transform: "scaleY(0)", opacity: 0 })),
135
+ ]),
136
+ ]),
137
+ ],
138
+ styles: [":host{display:block}:host::ng-deep .sds-badge{height:auto;white-space:normal}.container{margin-bottom:20px;position:relative}.main-container{display:-ms-flexbox;display:flex}.expandable-container,.main-container{background-color:#fff;border:1px solid #ccc;position:relative;overflow:hidden;width:100%}.expandable-container--severity-default{border-color:#ccc;border-top:initial}.expandable-container--severity-info{transition:border-color .5s;border-color:#428bca;border-top:initial}.expandable-container--severity-warn{transition:border-color .5s;border-color:#f8931f;border-top:initial}.expandable-container--severity-error{transition:border-color .5s;border-color:#c13018;border-top:initial}.expandable-container--severity-success{transition:border-color .5s;border-color:#0c9348;border-top:initial}.main-container--severity-default{border-color:#ccc}.main-container--severity-info{transition:border-color .5s;border-color:#428bca}.main-container--severity-warn{transition:border-color .5s;border-color:#f8931f}.main-container--severity-error{transition:border-color .5s;border-color:#c13018}.main-container--severity-success{transition:border-color .5s;border-color:#0c9348}.object-card__border-button{position:absolute;top:-13px;right:15px;z-index:1}.expandable-container{border-top:none;box-shadow:inset 0 6px 4px -4px #ddd;margin-top:-1px}.expand-icon-container{display:none;text-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;padding:12px;background:0 0;border:none;color:inherit}.expand-icon{-ms-flex:1;flex:1}.object-content{display:-ms-flexbox;display:flex;width:100%}.erp-object-card-main{overflow:hidden;padding:15px}.main-container.with-visible-fields .erp-object-card-main{max-width:30%}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.main-container.with-visible-fields .erp-object-card-main{width:20%}}.erp-object-card-field{overflow:hidden;height:100%}.main-container .erp-object-card-field{padding:15px}.main-container .divider{width:1px;-ms-flex-negative:0;flex-shrink:0;background-color:#ccc;margin:15px -1px 15px 0}.main-container.with-hidden-fields .object-content{width:calc(100% - 35px)}.main-container.with-hidden-fields .expand-icon-container{display:-ms-flexbox;display:flex}::ng-deep .object-card-button{padding-left:0!important;padding-right:10px!important;border:none!important;height:auto!important;min-width:auto!important;text-align:left!important}@media (max-width:767px){.erp-object-card-main{max-width:calc(100% - 50px)}}.childlist{width:100%;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:1em;gap:1em}"]
139
+ })
140
+ ], ObjectCardComponent);
141
+ export { ObjectCardComponent };
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9vYmplY3QtY2FyZC9vYmplY3QtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQXlDckYsSUFBYSxtQkFBbUIsMkJBQWhDLE1BQWEsbUJBQW1CO0lBQWhDO1FBSVcsT0FBRSxHQUFHLG1CQUFtQixxQkFBbUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBRzFELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsa0JBQWEsR0FBRyxjQUFjLENBQUM7UUFHL0Isb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFHbEMsbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFHckIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBUTdDLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUc1QixhQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUt2QixpQkFBWSxHQUFHLFlBQVksQ0FBQztJQW9FekMs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QUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM3QyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3ZFLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzdDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDdkUsQ0FBQzthQUNMLENBQUM7U0FDTDs7S0FDSixDQUFDO0dBQ1csbUJBQW1CLENBdUcvQjtTQXZHWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IEJvcmRlckJ1dHRvbk9wdGlvbnMgfSBmcm9tIFwiLi4vc2hhcmVkL21vZGVscy9ib3JkZXItYnV0dG9uLW9wdGlvbnNcIjtcbmltcG9ydCB7IEVudW1TZXZlcml0eSB9IGZyb20gXCIuLi9zaGFyZWQvbW9kZWxzL2VudW0tc2V2ZXJpdHlcIjtcbmltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSBcIi4uL3V0aWxzL2JyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBPYmplY3RDYXJkRmllbGRDb21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9maWVsZC9vYmplY3QtY2FyZC1maWVsZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IE9iamVjdENhcmRNYWluQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvbWFpbi9vYmplY3QtY2FyZC1tYWluLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJlcnAtb2JqZWN0LWNhcmRcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL29iamVjdC1jYXJkLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL29iamVjdC1jYXJkLmNvbXBvbmVudC5zY3NzXCJdLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcihcImV4cGFuZGFibGVDb250ZW50XCIsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgIFwiKlwiLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjBcIixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgIFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIwXCIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICBcInRydWVcIixcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIqXCIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwiKiA9PiB0cnVlXCIsIGFuaW1hdGUoXCIyMDBtcyBlYXNlLW91dFwiKSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwiZmFsc2UgPD0+IHRydWVcIiwgYW5pbWF0ZShcIjIwMG1zIGVhc2Utb3V0XCIpKSxcbiAgICAgICAgXSksXG4gICAgICAgIHRyaWdnZXIoXCJCb3JkZXJCdXR0b25BbmltYXRpb25cIiwgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06IFwic2NhbGVZKDApXCIsIG9wYWNpdHk6IDAgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGVhc2VcIiwgc3R5bGUoeyB0cmFuc2Zvcm06IFwic2NhbGVZKDEpXCIsIG9wYWNpdHk6IDEgfSkpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwiOmxlYXZlXCIsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogXCJzY2FsZVkoMSlcIiwgb3BhY2l0eTogMSB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgZWFzZVwiLCBzdHlsZSh7IHRyYW5zZm9ybTogXCJzY2FsZVkoMClcIiwgb3BhY2l0eTogMCB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0Q2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQge1xuICAgIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBlcnAtb2JqZWN0LWNhcmQtJHtPYmplY3RDYXJkQ29tcG9uZW50LmdldE5leHRJZCgpfWA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBhbmRlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwYW5kVG9vbHRpcCA9IFwiQWJyaXIgcGFpbmVsXCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2xsYXBzZVRvb2x0aXAgPSBcIkZlY2hhciBwYWluZWxcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpZWxkc01pbldpZHRoID0gMjAwO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChPYmplY3RDYXJkTWFpbkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgbWFpbjogT2JqZWN0Q2FyZE1haW5Db21wb25lbnQ7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKE9iamVjdENhcmRGaWVsZENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBmaWVsZHM/OiBRdWVyeUxpc3Q8T2JqZWN0Q2FyZEZpZWxkQ29tcG9uZW50PjtcblxuICAgIHB1YmxpYyBtYXhWaXNpYmxlRmllbGRzID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V2ZXJpdHkgPSBFbnVtU2V2ZXJpdHkuRGVmYXVsdDtcblxuICAgIEBJbnB1dCgpXG4gICAgYm9yZGVyQnV0dG9uT3B0aW9uczogQm9yZGVyQnV0dG9uT3B0aW9ucztcblxuICAgIHJlYWRvbmx5IEVudW1TZXZlcml0eSA9IEVudW1TZXZlcml0eTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnRDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NhcmRNYWluQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcmRNYWluQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuXG4gICAgQFZpZXdDaGlsZCgnaWNvbkNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBjb25zdCBtYWluRmllbGRXaWR0aCA9IHRoaXMuY2FyZE1haW5Db250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgbGV0IHJlbWFpbmluZ1NwYWNlID0gIGNvbnRhaW5lcldpZHRoIC0gbWFpbkZpZWxkV2lkdGg7XG4gICAgICAgIGNvbnN0IGZpZWxkc01pbldpZHRoID0gdGhpcy5maWVsZHNNaW5XaWR0aDtcbiAgICAgICAgY29uc3QgZXhwYW5kSWNvbldpZHRoID0gdGhpcy5pY29uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgICAgbGV0IG1heEZpZWxkUXRkOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHdpbmRvd1dpZHRoIDw9IEJyZWFrcG9pbnRzLlNNX01BWCkge1xuICAgICAgICAgICAgbWF4RmllbGRRdGQgPSAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXhGaWVsZFF0ZCA9IE1hdGguZmxvb3IoKHJlbWFpbmluZ1NwYWNlKSAvIGZpZWxkc01pbldpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc0V4cGFuZEljb24gPSBtYXhGaWVsZFF0ZCAmJiBtYXhGaWVsZFF0ZCA8IHRoaXMuZmllbGRzLmxlbmd0aFxuXG4gICAgICAgIGlmIChoYXNFeHBhbmRJY29uKSB7XG4gICAgICAgICAgICB0aGlzLmljb25Db250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgcmVtYWluaW5nU3BhY2UgPSByZW1haW5pbmdTcGFjZSAtIGV4cGFuZEljb25XaWR0aDtcbiAgICAgICAgICAgIG1heEZpZWxkUXRkID0gTWF0aC5mbG9vcigocmVtYWluaW5nU3BhY2UpIC8gZmllbGRzTWluV2lkdGgpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmljb25Db250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYXhWaXNpYmxlRmllbGRzID0gbWF4RmllbGRRdGQ7XG5cbiAgICAgICAgaWYgKG1heEZpZWxkUXRkID49IHRoaXMuZmllbGRzLmxlbmd0aCAmJiB0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkID8gdGhpcy5jb2xsYXBzZSgpIDogdGhpcy5leHBhbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kKCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TmV4dElkKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGlkID0gT2JqZWN0Q2FyZENvbXBvbmVudC5uZXh0SWQ7XG4gICAgICAgIE9iamVjdENhcmRDb21wb25lbnQubmV4dElkKys7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbn1cbiJdfQ==