@edm-sdui/sdui 1.0.25 → 1.0.26

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.
@@ -19,6 +19,8 @@ export class ProfileButtonComponent {
19
19
  ngAfterViewInit() {
20
20
  if (this.uiComponent.element) {
21
21
  this.applyElement(this.uiComponent.element);
22
+ // esperar o layout para medir o texto já com estilos aplicados
23
+ setTimeout(() => this.fitLabelToTwoLines(), 0);
22
24
  }
23
25
  }
24
26
  applyElement(element) {
@@ -34,15 +36,59 @@ export class ProfileButtonComponent {
34
36
  this.renderer.setStyle(this.profileButtonLabelElementRef.nativeElement, 'font-size', this.fontSizeMappingService.getMapping()[UITextStyle.CAPTION_2]);
35
37
  this.renderer.setStyle(this.profileButtonLabelElementRef.nativeElement, 'color', colorMapping[UIColor.MAIN1]);
36
38
  }
39
+ fitLabelToTwoLines(maxLines = 2, minFontSizePx = 10) {
40
+ if (typeof window === 'undefined') {
41
+ return;
42
+ }
43
+ const labelElement = this.profileButtonLabelElementRef?.nativeElement;
44
+ if (!labelElement) {
45
+ return;
46
+ }
47
+ const computedStyles = window.getComputedStyle(labelElement);
48
+ let fontSize = parseFloat(computedStyles.fontSize);
49
+ if (!Number.isFinite(fontSize)) {
50
+ return;
51
+ }
52
+ const lineHeight = computedStyles.lineHeight === 'normal'
53
+ ? fontSize * 1.2
54
+ : parseFloat(computedStyles.lineHeight);
55
+ if (!Number.isFinite(lineHeight) || lineHeight <= 0) {
56
+ return;
57
+ }
58
+ const lineHeightRatio = lineHeight / fontSize;
59
+ const updateMetrics = (forceHeight) => {
60
+ const targetHeight = lineHeightRatio * fontSize * maxLines;
61
+ this.renderer.setStyle(labelElement, 'line-height', `${lineHeightRatio * fontSize}px`);
62
+ this.renderer.setStyle(labelElement, 'max-height', `${targetHeight}px`);
63
+ if (forceHeight) {
64
+ this.renderer.setStyle(labelElement, 'height', `${targetHeight}px`);
65
+ }
66
+ else {
67
+ this.renderer.removeStyle(labelElement, 'height');
68
+ }
69
+ return targetHeight;
70
+ };
71
+ let targetHeight = updateMetrics(false);
72
+ let constrained = false;
73
+ while (labelElement.scrollHeight > targetHeight && fontSize > minFontSizePx) {
74
+ fontSize -= 1;
75
+ this.renderer.setStyle(labelElement, 'font-size', `${fontSize}px`);
76
+ targetHeight = updateMetrics(true);
77
+ constrained = true;
78
+ }
79
+ if (!constrained) {
80
+ this.renderer.removeStyle(labelElement, 'height');
81
+ }
82
+ }
37
83
  getAssetPath(asset) {
38
84
  return assetMapping[asset];
39
85
  }
40
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfileButtonComponent, deps: [{ token: 'uiComponent' }, { token: i0.Renderer2 }, { token: i1.FontSizeMappingService }], target: i0.ɵɵFactoryTarget.Component }); }
41
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ProfileButtonComponent, isStandalone: false, selector: "edm-sdui-profile-button", viewQueries: [{ propertyName: "profileButtonElementRef", first: true, predicate: ["profileButtonElement"], descendants: true }, { propertyName: "profileButtonLabelElementRef", first: true, predicate: ["profileButtonLabelElement"], descendants: true }, { propertyName: "profileButtonImageElementRef", first: true, predicate: ["profileButtonImageElement"], descendants: true }], ngImport: i0, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{white-space:normal;word-break:break-word;overflow-wrap:break-word;max-width:100%;display:block;text-align:left}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ProfileButtonComponent, isStandalone: false, selector: "edm-sdui-profile-button", viewQueries: [{ propertyName: "profileButtonElementRef", first: true, predicate: ["profileButtonElement"], descendants: true }, { propertyName: "profileButtonLabelElementRef", first: true, predicate: ["profileButtonLabelElement"], descendants: true }, { propertyName: "profileButtonImageElementRef", first: true, predicate: ["profileButtonImageElement"], descendants: true }], ngImport: i0, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{max-width:100%;white-space:normal;word-break:keep-all;overflow-wrap:normal;text-align:left;line-height:1.25;max-height:2.5em;overflow:hidden;text-overflow:ellipsis;display:block;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;-webkit-hyphens:none;hyphens:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
42
88
  }
43
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfileButtonComponent, decorators: [{
44
90
  type: Component,
45
- args: [{ selector: 'edm-sdui-profile-button', standalone: false, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{white-space:normal;word-break:break-word;overflow-wrap:break-word;max-width:100%;display:block;text-align:left}\n"] }]
91
+ args: [{ selector: 'edm-sdui-profile-button', standalone: false, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{max-width:100%;white-space:normal;word-break:keep-all;overflow-wrap:normal;text-align:left;line-height:1.25;max-height:2.5em;overflow:hidden;text-overflow:ellipsis;display:block;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;-webkit-hyphens:none;hyphens:none}\n"] }]
46
92
  }], ctorParameters: () => [{ type: undefined, decorators: [{
47
93
  type: Inject,
48
94
  args: ['uiComponent']
@@ -56,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
56
102
  type: ViewChild,
57
103
  args: ['profileButtonImageElement']
58
104
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC9wcm9maWxlLWJ1dHRvbi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3Byb2ZpbGUtYnV0dG9uL3Byb2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFROUQsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNnQyxXQUF3QixFQUM5QyxRQUFtQixFQUNuQixzQkFBOEM7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO0lBQ3JELENBQUM7SUFFSixRQUFRO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQWtCO1FBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQzFDLE9BQU8sRUFDUCxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxRSxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQzFDLFdBQVcsRUFDWCxRQUFRLENBQ1QsQ0FBQztRQUNKLENBQUM7UUFHRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFDL0MsV0FBVyxFQUNYLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFDL0MsT0FBTyxFQUNQLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUVoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWM7UUFDekIsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0F0RFUsc0JBQXNCLGtCQU12QixhQUFhO21HQU5aLHNCQUFzQiw2Y0N4Qm5DLHVZQUlBOzs0RkRvQmEsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLHlCQUF5QixjQUd2QixLQUFLOzswQkFRZCxNQUFNOzJCQUFDLGFBQWE7c0dBTFksdUJBQXVCO3NCQUF6RCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFDTyw0QkFBNEI7c0JBQW5FLFNBQVM7dUJBQUMsMkJBQTJCO2dCQUNFLDRCQUE0QjtzQkFBbkUsU0FBUzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVSUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWljb21wb25lbnQnO1xuaW1wb3J0IHsgVUlFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aWVsZW1lbnQnO1xuaW1wb3J0IHsgY29sb3JNYXBwaW5nIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL21hcHBpbmcvY29sb3ItbWFwcGluZyc7XG5pbXBvcnQgeyBGb250U2l6ZU1hcHBpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9mb250LXNpemUtbWFwcGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IGFzc2V0TWFwcGluZyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL2Fzc2V0LW1hcHBpbmcnO1xuaW1wb3J0IHsgVUlBc3NldCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9lbnVtcy91aWFzc2V0JztcbmltcG9ydCB7IFVJVGV4dFN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL2VudW1zL3VpdGV4dC1zdHlsZSc7XG5pbXBvcnQgeyBVSUNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL2VudW1zL3VpY29sb3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlZG0tc2R1aS1wcm9maWxlLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgncHJvZmlsZUJ1dHRvbkVsZW1lbnQnKSBwcm9maWxlQnV0dG9uRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50JykgcHJvZmlsZUJ1dHRvbkxhYmVsRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwcm9maWxlQnV0dG9uSW1hZ2VFbGVtZW50JykgcHJvZmlsZUJ1dHRvbkltYWdlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ3VpQ29tcG9uZW50JykgcHVibGljIHVpQ29tcG9uZW50OiBVSUNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBmb250U2l6ZU1hcHBpbmdTZXJ2aWNlOiBGb250U2l6ZU1hcHBpbmdTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51aUNvbXBvbmVudC5lbGVtZW50KSB7XG4gICAgICB0aGlzLmFwcGx5RWxlbWVudCh0aGlzLnVpQ29tcG9uZW50LmVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlFbGVtZW50KGVsZW1lbnQ6IFVJRWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LnRleHRDb2xvcikge1xuICAgICAgY29uc3QgY29sb3IgPSBjb2xvck1hcHBpbmdbZWxlbWVudC50ZXh0Q29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnY29sb3InLFxuICAgICAgICBjb2xvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50ZXh0U3R5bGUpIHtcbiAgICAgIGNvbnN0IHRleHRTdHlsZU1hcHBpbmdGb250U2l6ZSA9IHRoaXMuZm9udFNpemVNYXBwaW5nU2VydmljZS5nZXRNYXBwaW5nKCk7XG4gICAgICBjb25zdCBmb250U2l6ZSA9IHRleHRTdHlsZU1hcHBpbmdGb250U2l6ZVtlbGVtZW50LnRleHRTdHlsZV07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b25FbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdmb250LXNpemUnLFxuICAgICAgICBmb250U2l6ZVxuICAgICAgKTtcbiAgICB9XG5cblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdmb250LXNpemUnLFxuICAgICAgdGhpcy5mb250U2l6ZU1hcHBpbmdTZXJ2aWNlLmdldE1hcHBpbmcoKVtVSVRleHRTdHlsZS5DQVBUSU9OXzJdKVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdjb2xvcicsXG4gICAgICBjb2xvck1hcHBpbmdbVUlDb2xvci5NQUlOMV0pXG5cbiAgfVxuXG4gIGdldEFzc2V0UGF0aChhc3NldDogVUlBc3NldCkge1xuICAgIHJldHVybiBhc3NldE1hcHBpbmdbYXNzZXRdO1xuICB9XG59XG4iLCI8YnV0dG9uICNwcm9maWxlQnV0dG9uRWxlbWVudCBbZWRtU2R1aVZpZXddPVwidWlDb21wb25lbnQuZWxlbWVudFwiIGNsYXNzPVwicHJvZmlsZS1idXR0b25cIiAqbmdJZj1cInVpQ29tcG9uZW50XCI+XG4gIDxpbWcgI3Byb2ZpbGVCdXR0b25JbWFnZUVsZW1lbnQgKm5nSWY9XCJ1aUNvbXBvbmVudC5lbGVtZW50LmFzc2V0XCIgW3NyY109XCJnZXRBc3NldFBhdGgodWlDb21wb25lbnQuZWxlbWVudC5hc3NldClcIiBhbHQ9XCJQcm9maWxlXCIgY2xhc3M9XCJwcm9maWxlLWltYWdlXCI+XG4gIDxzcGFuICNwcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50IGNsYXNzPVwicHJvZmlsZS1sYWJlbFwiPnt7IHVpQ29tcG9uZW50LmVsZW1lbnQubGFiZWwgfX08L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC9wcm9maWxlLWJ1dHRvbi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3Byb2ZpbGUtYnV0dG9uL3Byb2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFROUQsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNnQyxXQUF3QixFQUM5QyxRQUFtQixFQUNuQixzQkFBOEM7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO0lBQ3JELENBQUM7SUFFSixRQUFRO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FB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QjtzQkFBekQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBQ08sNEJBQTRCO3NCQUFuRSxTQUFTO3VCQUFDLDJCQUEyQjtnQkFDRSw0QkFBNEI7c0JBQW5FLFNBQVM7dUJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVUlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpY29tcG9zaXRpb24vbW9kZWxzL3VpY29tcG9uZW50JztcbmltcG9ydCB7IFVJRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWllbGVtZW50JztcbmltcG9ydCB7IGNvbG9yTWFwcGluZyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL2NvbG9yLW1hcHBpbmcnO1xuaW1wb3J0IHsgRm9udFNpemVNYXBwaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZm9udC1zaXplLW1hcHBpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBhc3NldE1hcHBpbmcgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9hc3NldC1tYXBwaW5nJztcbmltcG9ydCB7IFVJQXNzZXQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpdGhlbWUvZW51bXMvdWlhc3NldCc7XG5pbXBvcnQgeyBVSVRleHRTdHlsZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9lbnVtcy91aXRleHQtc3R5bGUnO1xuaW1wb3J0IHsgVUlDb2xvciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9lbnVtcy91aWNvbG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWRtLXNkdWktcHJvZmlsZS1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZmlsZS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJvZmlsZS1idXR0b24uY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Byb2ZpbGVCdXR0b25FbGVtZW50JykgcHJvZmlsZUJ1dHRvbkVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncHJvZmlsZUJ1dHRvbkxhYmVsRWxlbWVudCcpIHByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncHJvZmlsZUJ1dHRvbkltYWdlRWxlbWVudCcpIHByb2ZpbGVCdXR0b25JbWFnZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCd1aUNvbXBvbmVudCcpIHB1YmxpYyB1aUNvbXBvbmVudDogVUlDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZm9udFNpemVNYXBwaW5nU2VydmljZTogRm9udFNpemVNYXBwaW5nU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudWlDb21wb25lbnQuZWxlbWVudCkge1xuICAgICAgdGhpcy5hcHBseUVsZW1lbnQodGhpcy51aUNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIC8vIGVzcGVyYXIgbyBsYXlvdXQgcGFyYSBtZWRpciBvIHRleHRvIGrDoSBjb20gZXN0aWxvcyBhcGxpY2Fkb3NcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5maXRMYWJlbFRvVHdvTGluZXMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUVsZW1lbnQoZWxlbWVudDogVUlFbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQudGV4dENvbG9yKSB7XG4gICAgICBjb25zdCBjb2xvciA9IGNvbG9yTWFwcGluZ1tlbGVtZW50LnRleHRDb2xvcl07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b25FbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgIGNvbG9yXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnRleHRTdHlsZSkge1xuICAgICAgY29uc3QgdGV4dFN0eWxlTWFwcGluZ0ZvbnRTaXplID0gdGhpcy5mb250U2l6ZU1hcHBpbmdTZXJ2aWNlLmdldE1hcHBpbmcoKTtcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gdGV4dFN0eWxlTWFwcGluZ0ZvbnRTaXplW2VsZW1lbnQudGV4dFN0eWxlXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbkVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICAgIGZvbnRTaXplXG4gICAgICApO1xuICAgIH1cblxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbkxhYmVsRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICB0aGlzLmZvbnRTaXplTWFwcGluZ1NlcnZpY2UuZ2V0TWFwcGluZygpW1VJVGV4dFN0eWxlLkNBUFRJT05fMl1cbiAgICApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdjb2xvcicsXG4gICAgICBjb2xvck1hcHBpbmdbVUlDb2xvci5NQUlOMV1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXRMYWJlbFRvVHdvTGluZXMobWF4TGluZXMgPSAyLCBtaW5Gb250U2l6ZVB4ID0gMTApIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFsYWJlbEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlZFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGxhYmVsRWxlbWVudCk7XG4gICAgbGV0IGZvbnRTaXplID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5mb250U2l6ZSk7XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShmb250U2l6ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gY29tcHV0ZWRTdHlsZXMubGluZUhlaWdodCA9PT0gJ25vcm1hbCdcbiAgICAgID8gZm9udFNpemUgKiAxLjJcbiAgICAgIDogcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5saW5lSGVpZ2h0KTtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGxpbmVIZWlnaHQpIHx8IGxpbmVIZWlnaHQgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVIZWlnaHRSYXRpbyA9IGxpbmVIZWlnaHQgLyBmb250U2l6ZTtcblxuICAgIGNvbnN0IHVwZGF0ZU1ldHJpY3MgPSAoZm9yY2VIZWlnaHQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldEhlaWdodCA9IGxpbmVIZWlnaHRSYXRpbyAqIGZvbnRTaXplICogbWF4TGluZXM7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGxhYmVsRWxlbWVudCwgJ2xpbmUtaGVpZ2h0JywgYCR7bGluZUhlaWdodFJhdGlvICogZm9udFNpemV9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobGFiZWxFbGVtZW50LCAnbWF4LWhlaWdodCcsIGAke3RhcmdldEhlaWdodH1weGApO1xuICAgICAgaWYgKGZvcmNlSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobGFiZWxFbGVtZW50LCAnaGVpZ2h0JywgYCR7dGFyZ2V0SGVpZ2h0fXB4YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGxhYmVsRWxlbWVudCwgJ2hlaWdodCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldEhlaWdodDtcbiAgICB9O1xuXG4gICAgbGV0IHRhcmdldEhlaWdodCA9IHVwZGF0ZU1ldHJpY3MoZmFsc2UpO1xuICAgIGxldCBjb25zdHJhaW5lZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGxhYmVsRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0YXJnZXRIZWlnaHQgJiYgZm9udFNpemUgPiBtaW5Gb250U2l6ZVB4KSB7XG4gICAgICBmb250U2l6ZSAtPSAxO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShsYWJlbEVsZW1lbnQsICdmb250LXNpemUnLCBgJHtmb250U2l6ZX1weGApO1xuICAgICAgdGFyZ2V0SGVpZ2h0ID0gdXBkYXRlTWV0cmljcyh0cnVlKTtcbiAgICAgIGNvbnN0cmFpbmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnN0cmFpbmVkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGxhYmVsRWxlbWVudCwgJ2hlaWdodCcpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFzc2V0UGF0aChhc3NldDogVUlBc3NldCkge1xuICAgIHJldHVybiBhc3NldE1hcHBpbmdbYXNzZXRdO1xuICB9XG59XG4iLCI8YnV0dG9uICNwcm9maWxlQnV0dG9uRWxlbWVudCBbZWRtU2R1aVZpZXddPVwidWlDb21wb25lbnQuZWxlbWVudFwiIGNsYXNzPVwicHJvZmlsZS1idXR0b25cIiAqbmdJZj1cInVpQ29tcG9uZW50XCI+XG4gIDxpbWcgI3Byb2ZpbGVCdXR0b25JbWFnZUVsZW1lbnQgKm5nSWY9XCJ1aUNvbXBvbmVudC5lbGVtZW50LmFzc2V0XCIgW3NyY109XCJnZXRBc3NldFBhdGgodWlDb21wb25lbnQuZWxlbWVudC5hc3NldClcIiBhbHQ9XCJQcm9maWxlXCIgY2xhc3M9XCJwcm9maWxlLWltYWdlXCI+XG4gIDxzcGFuICNwcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50IGNsYXNzPVwicHJvZmlsZS1sYWJlbFwiPnt7IHVpQ29tcG9uZW50LmVsZW1lbnQubGFiZWwgfX08L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
@@ -3147,6 +3147,8 @@ class ProfileButtonComponent {
3147
3147
  ngAfterViewInit() {
3148
3148
  if (this.uiComponent.element) {
3149
3149
  this.applyElement(this.uiComponent.element);
3150
+ // esperar o layout para medir o texto já com estilos aplicados
3151
+ setTimeout(() => this.fitLabelToTwoLines(), 0);
3150
3152
  }
3151
3153
  }
3152
3154
  applyElement(element) {
@@ -3162,15 +3164,59 @@ class ProfileButtonComponent {
3162
3164
  this.renderer.setStyle(this.profileButtonLabelElementRef.nativeElement, 'font-size', this.fontSizeMappingService.getMapping()[UITextStyle.CAPTION_2]);
3163
3165
  this.renderer.setStyle(this.profileButtonLabelElementRef.nativeElement, 'color', colorMapping[UIColor.MAIN1]);
3164
3166
  }
3167
+ fitLabelToTwoLines(maxLines = 2, minFontSizePx = 10) {
3168
+ if (typeof window === 'undefined') {
3169
+ return;
3170
+ }
3171
+ const labelElement = this.profileButtonLabelElementRef?.nativeElement;
3172
+ if (!labelElement) {
3173
+ return;
3174
+ }
3175
+ const computedStyles = window.getComputedStyle(labelElement);
3176
+ let fontSize = parseFloat(computedStyles.fontSize);
3177
+ if (!Number.isFinite(fontSize)) {
3178
+ return;
3179
+ }
3180
+ const lineHeight = computedStyles.lineHeight === 'normal'
3181
+ ? fontSize * 1.2
3182
+ : parseFloat(computedStyles.lineHeight);
3183
+ if (!Number.isFinite(lineHeight) || lineHeight <= 0) {
3184
+ return;
3185
+ }
3186
+ const lineHeightRatio = lineHeight / fontSize;
3187
+ const updateMetrics = (forceHeight) => {
3188
+ const targetHeight = lineHeightRatio * fontSize * maxLines;
3189
+ this.renderer.setStyle(labelElement, 'line-height', `${lineHeightRatio * fontSize}px`);
3190
+ this.renderer.setStyle(labelElement, 'max-height', `${targetHeight}px`);
3191
+ if (forceHeight) {
3192
+ this.renderer.setStyle(labelElement, 'height', `${targetHeight}px`);
3193
+ }
3194
+ else {
3195
+ this.renderer.removeStyle(labelElement, 'height');
3196
+ }
3197
+ return targetHeight;
3198
+ };
3199
+ let targetHeight = updateMetrics(false);
3200
+ let constrained = false;
3201
+ while (labelElement.scrollHeight > targetHeight && fontSize > minFontSizePx) {
3202
+ fontSize -= 1;
3203
+ this.renderer.setStyle(labelElement, 'font-size', `${fontSize}px`);
3204
+ targetHeight = updateMetrics(true);
3205
+ constrained = true;
3206
+ }
3207
+ if (!constrained) {
3208
+ this.renderer.removeStyle(labelElement, 'height');
3209
+ }
3210
+ }
3165
3211
  getAssetPath(asset) {
3166
3212
  return assetMapping[asset];
3167
3213
  }
3168
3214
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfileButtonComponent, deps: [{ token: 'uiComponent' }, { token: i0.Renderer2 }, { token: FontSizeMappingService }], target: i0.ɵɵFactoryTarget.Component }); }
3169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ProfileButtonComponent, isStandalone: false, selector: "edm-sdui-profile-button", viewQueries: [{ propertyName: "profileButtonElementRef", first: true, predicate: ["profileButtonElement"], descendants: true }, { propertyName: "profileButtonLabelElementRef", first: true, predicate: ["profileButtonLabelElement"], descendants: true }, { propertyName: "profileButtonImageElementRef", first: true, predicate: ["profileButtonImageElement"], descendants: true }], ngImport: i0, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{white-space:normal;word-break:break-word;overflow-wrap:break-word;max-width:100%;display:block;text-align:left}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
3215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ProfileButtonComponent, isStandalone: false, selector: "edm-sdui-profile-button", viewQueries: [{ propertyName: "profileButtonElementRef", first: true, predicate: ["profileButtonElement"], descendants: true }, { propertyName: "profileButtonLabelElementRef", first: true, predicate: ["profileButtonLabelElement"], descendants: true }, { propertyName: "profileButtonImageElementRef", first: true, predicate: ["profileButtonImageElement"], descendants: true }], ngImport: i0, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{max-width:100%;white-space:normal;word-break:keep-all;overflow-wrap:normal;text-align:left;line-height:1.25;max-height:2.5em;overflow:hidden;text-overflow:ellipsis;display:block;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;-webkit-hyphens:none;hyphens:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
3170
3216
  }
3171
3217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfileButtonComponent, decorators: [{
3172
3218
  type: Component,
3173
- args: [{ selector: 'edm-sdui-profile-button', standalone: false, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{white-space:normal;word-break:break-word;overflow-wrap:break-word;max-width:100%;display:block;text-align:left}\n"] }]
3219
+ args: [{ selector: 'edm-sdui-profile-button', standalone: false, template: "<button #profileButtonElement [edmSduiView]=\"uiComponent.element\" class=\"profile-button\" *ngIf=\"uiComponent\">\n <img #profileButtonImageElement *ngIf=\"uiComponent.element.asset\" [src]=\"getAssetPath(uiComponent.element.asset)\" alt=\"Profile\" class=\"profile-image\">\n <span #profileButtonLabelElement class=\"profile-label\">{{ uiComponent.element.label }}</span>\n</button>\n", styles: [":host{display:contents}.profile-button{display:flex;padding:16px 16px 0;border-radius:20px;background-color:var(--bt-profile);border:none;cursor:pointer;flex-direction:column;height:108px;width:108px;align-items:start;justify-content:start;gap:24px}.profile-button:hover{background-color:#0000000d;cursor:pointer}.profile-button .profile-image{width:24px;height:24px}.profile-button .profile-label{max-width:100%;white-space:normal;word-break:keep-all;overflow-wrap:normal;text-align:left;line-height:1.25;max-height:2.5em;overflow:hidden;text-overflow:ellipsis;display:block;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;-webkit-hyphens:none;hyphens:none}\n"] }]
3174
3220
  }], ctorParameters: () => [{ type: undefined, decorators: [{
3175
3221
  type: Inject,
3176
3222
  args: ['uiComponent']