@edm-sdui/sdui 1.0.25 → 1.0.27

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,69 @@ 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 applyMetrics = () => {
60
+ const currentLineHeight = lineHeightRatio * fontSize;
61
+ const allowedHeight = currentLineHeight * maxLines;
62
+ this.renderer.setStyle(labelElement, 'line-height', `${currentLineHeight}px`);
63
+ this.renderer.setStyle(labelElement, 'max-height', `${allowedHeight}px`);
64
+ return allowedHeight;
65
+ };
66
+ const fits = (allowedHeight) => {
67
+ const EPSILON = 0.5;
68
+ const availableWidth = labelElement.clientWidth;
69
+ if (availableWidth <= 0) {
70
+ return true;
71
+ }
72
+ return (labelElement.scrollHeight <= allowedHeight + EPSILON &&
73
+ labelElement.scrollWidth <= availableWidth + EPSILON);
74
+ };
75
+ this.renderer.removeClass(labelElement, 'truncate');
76
+ this.renderer.removeStyle(labelElement, 'height');
77
+ let allowedHeight = applyMetrics();
78
+ let contentFits = fits(allowedHeight);
79
+ while (!contentFits && fontSize > minFontSizePx) {
80
+ fontSize -= 1;
81
+ this.renderer.setStyle(labelElement, 'font-size', `${fontSize}px`);
82
+ allowedHeight = applyMetrics();
83
+ contentFits = fits(allowedHeight);
84
+ }
85
+ if (!contentFits) {
86
+ this.renderer.addClass(labelElement, 'truncate');
87
+ }
88
+ else {
89
+ this.renderer.removeClass(labelElement, 'truncate');
90
+ this.renderer.removeStyle(labelElement, 'max-height');
91
+ }
92
+ }
37
93
  getAssetPath(asset) {
38
94
  return assetMapping[asset];
39
95
  }
40
96
  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"] }] }); }
97
+ 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;overflow:hidden;display:block}.profile-button .profile-label.truncate{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
42
98
  }
43
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfileButtonComponent, decorators: [{
44
100
  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"] }]
101
+ 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;overflow:hidden;display:block}.profile-button .profile-label.truncate{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-overflow:ellipsis}\n"] }]
46
102
  }], ctorParameters: () => [{ type: undefined, decorators: [{
47
103
  type: Inject,
48
104
  args: ['uiComponent']
@@ -56,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
56
112
  type: ViewChild,
57
113
  args: ['profileButtonImageElement']
58
114
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC9wcm9maWxlLWJ1dHRvbi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3Byb2ZpbGUtYnV0dG9uL3Byb2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFROUQsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNnQyxXQUF3QixFQUM5QyxRQUFtQixFQUNuQixzQkFBOEM7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO0lBQ3JELENBQUM7SUFFSixRQUFRO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQWtCO1FBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQzFDLE9BQU8sRUFDUCxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxRSxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQzFDLFdBQVcsRUFDWCxRQUFRLENBQ1QsQ0FBQztRQUNKLENBQUM7UUFHRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFDL0MsV0FBVyxFQUNYLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFDL0MsT0FBTyxFQUNQLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUVoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWM7UUFDekIsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0F0RFUsc0JBQXNCLGtCQU12QixhQUFhO21HQU5aLHNCQUFzQiw2Y0N4Qm5DLHVZQUlBOzs0RkRvQmEsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLHlCQUF5QixjQUd2QixLQUFLOzswQkFRZCxNQUFNOzJCQUFDLGFBQWE7c0dBTFksdUJBQXVCO3NCQUF6RCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFDTyw0QkFBNEI7c0JBQW5FLFNBQVM7dUJBQUMsMkJBQTJCO2dCQUNFLDRCQUE0QjtzQkFBbkUsU0FBUzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVSUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWljb21wb25lbnQnO1xuaW1wb3J0IHsgVUlFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aWVsZW1lbnQnO1xuaW1wb3J0IHsgY29sb3JNYXBwaW5nIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL21hcHBpbmcvY29sb3ItbWFwcGluZyc7XG5pbXBvcnQgeyBGb250U2l6ZU1hcHBpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9mb250LXNpemUtbWFwcGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IGFzc2V0TWFwcGluZyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL2Fzc2V0LW1hcHBpbmcnO1xuaW1wb3J0IHsgVUlBc3NldCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9lbnVtcy91aWFzc2V0JztcbmltcG9ydCB7IFVJVGV4dFN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL2VudW1zL3VpdGV4dC1zdHlsZSc7XG5pbXBvcnQgeyBVSUNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL2VudW1zL3VpY29sb3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlZG0tc2R1aS1wcm9maWxlLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgncHJvZmlsZUJ1dHRvbkVsZW1lbnQnKSBwcm9maWxlQnV0dG9uRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50JykgcHJvZmlsZUJ1dHRvbkxhYmVsRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwcm9maWxlQnV0dG9uSW1hZ2VFbGVtZW50JykgcHJvZmlsZUJ1dHRvbkltYWdlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ3VpQ29tcG9uZW50JykgcHVibGljIHVpQ29tcG9uZW50OiBVSUNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBmb250U2l6ZU1hcHBpbmdTZXJ2aWNlOiBGb250U2l6ZU1hcHBpbmdTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51aUNvbXBvbmVudC5lbGVtZW50KSB7XG4gICAgICB0aGlzLmFwcGx5RWxlbWVudCh0aGlzLnVpQ29tcG9uZW50LmVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlFbGVtZW50KGVsZW1lbnQ6IFVJRWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LnRleHRDb2xvcikge1xuICAgICAgY29uc3QgY29sb3IgPSBjb2xvck1hcHBpbmdbZWxlbWVudC50ZXh0Q29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnY29sb3InLFxuICAgICAgICBjb2xvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50ZXh0U3R5bGUpIHtcbiAgICAgIGNvbnN0IHRleHRTdHlsZU1hcHBpbmdGb250U2l6ZSA9IHRoaXMuZm9udFNpemVNYXBwaW5nU2VydmljZS5nZXRNYXBwaW5nKCk7XG4gICAgICBjb25zdCBmb250U2l6ZSA9IHRleHRTdHlsZU1hcHBpbmdGb250U2l6ZVtlbGVtZW50LnRleHRTdHlsZV07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b25FbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdmb250LXNpemUnLFxuICAgICAgICBmb250U2l6ZVxuICAgICAgKTtcbiAgICB9XG5cblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdmb250LXNpemUnLFxuICAgICAgdGhpcy5mb250U2l6ZU1hcHBpbmdTZXJ2aWNlLmdldE1hcHBpbmcoKVtVSVRleHRTdHlsZS5DQVBUSU9OXzJdKVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdjb2xvcicsXG4gICAgICBjb2xvck1hcHBpbmdbVUlDb2xvci5NQUlOMV0pXG5cbiAgfVxuXG4gIGdldEFzc2V0UGF0aChhc3NldDogVUlBc3NldCkge1xuICAgIHJldHVybiBhc3NldE1hcHBpbmdbYXNzZXRdO1xuICB9XG59XG4iLCI8YnV0dG9uICNwcm9maWxlQnV0dG9uRWxlbWVudCBbZWRtU2R1aVZpZXddPVwidWlDb21wb25lbnQuZWxlbWVudFwiIGNsYXNzPVwicHJvZmlsZS1idXR0b25cIiAqbmdJZj1cInVpQ29tcG9uZW50XCI+XG4gIDxpbWcgI3Byb2ZpbGVCdXR0b25JbWFnZUVsZW1lbnQgKm5nSWY9XCJ1aUNvbXBvbmVudC5lbGVtZW50LmFzc2V0XCIgW3NyY109XCJnZXRBc3NldFBhdGgodWlDb21wb25lbnQuZWxlbWVudC5hc3NldClcIiBhbHQ9XCJQcm9maWxlXCIgY2xhc3M9XCJwcm9maWxlLWltYWdlXCI+XG4gIDxzcGFuICNwcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50IGNsYXNzPVwicHJvZmlsZS1sYWJlbFwiPnt7IHVpQ29tcG9uZW50LmVsZW1lbnQubGFiZWwgfX08L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC9wcm9maWxlLWJ1dHRvbi9wcm9maWxlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3Byb2ZpbGUtYnV0dG9uL3Byb2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFROUQsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNnQyxXQUF3QixFQUM5QyxRQUFtQixFQUNuQixzQkFBOEM7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO0lBQ3JELENBQUM7SUFFSixRQUFRO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FB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Q0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYztRQUN6QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQS9IVSxzQkFBc0Isa0JBTXZCLGFBQWE7bUdBTlosc0JBQXNCLDZjQ3hCbkMsdVlBSUE7OzRGRG9CYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UseUJBQXlCLGNBR3ZCLEtBQUs7OzBCQVFkLE1BQU07MkJBQUMsYUFBYTtzR0FMWSx1QkFBdUI7c0JBQXpELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNPLDRCQUE0QjtzQkFBbkUsU0FBUzt1QkFBQywyQkFBMkI7Z0JBQ0UsNEJBQTRCO3NCQUFuRSxTQUFTO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVJQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aWNvbXBvbmVudCc7XG5pbXBvcnQgeyBVSUVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpY29tcG9zaXRpb24vbW9kZWxzL3VpZWxlbWVudCc7XG5pbXBvcnQgeyBjb2xvck1hcHBpbmcgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9jb2xvci1tYXBwaW5nJztcbmltcG9ydCB7IEZvbnRTaXplTWFwcGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2ZvbnQtc2l6ZS1tYXBwaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXNzZXRNYXBwaW5nIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL21hcHBpbmcvYXNzZXQtbWFwcGluZyc7XG5pbXBvcnQgeyBVSUFzc2V0IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aXRoZW1lL2VudW1zL3VpYXNzZXQnO1xuaW1wb3J0IHsgVUlUZXh0U3R5bGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpdGhlbWUvZW51bXMvdWl0ZXh0LXN0eWxlJztcbmltcG9ydCB7IFVJQ29sb3IgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpdGhlbWUvZW51bXMvdWljb2xvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VkbS1zZHVpLXByb2ZpbGUtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdwcm9maWxlQnV0dG9uRWxlbWVudCcpIHByb2ZpbGVCdXR0b25FbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3Byb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnQnKSBwcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3Byb2ZpbGVCdXR0b25JbWFnZUVsZW1lbnQnKSBwcm9maWxlQnV0dG9uSW1hZ2VFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgndWlDb21wb25lbnQnKSBwdWJsaWMgdWlDb21wb25lbnQ6IFVJQ29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGZvbnRTaXplTWFwcGluZ1NlcnZpY2U6IEZvbnRTaXplTWFwcGluZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVpQ29tcG9uZW50LmVsZW1lbnQpIHtcbiAgICAgIHRoaXMuYXBwbHlFbGVtZW50KHRoaXMudWlDb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAvLyBlc3BlcmFyIG8gbGF5b3V0IHBhcmEgbWVkaXIgbyB0ZXh0byBqw6EgY29tIGVzdGlsb3MgYXBsaWNhZG9zXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZml0TGFiZWxUb1R3b0xpbmVzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlFbGVtZW50KGVsZW1lbnQ6IFVJRWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LnRleHRDb2xvcikge1xuICAgICAgY29uc3QgY29sb3IgPSBjb2xvck1hcHBpbmdbZWxlbWVudC50ZXh0Q29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnY29sb3InLFxuICAgICAgICBjb2xvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50ZXh0U3R5bGUpIHtcbiAgICAgIGNvbnN0IHRleHRTdHlsZU1hcHBpbmdGb250U2l6ZSA9IHRoaXMuZm9udFNpemVNYXBwaW5nU2VydmljZS5nZXRNYXBwaW5nKCk7XG4gICAgICBjb25zdCBmb250U2l6ZSA9IHRleHRTdHlsZU1hcHBpbmdGb250U2l6ZVtlbGVtZW50LnRleHRTdHlsZV07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b25FbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdmb250LXNpemUnLFxuICAgICAgICBmb250U2l6ZVxuICAgICAgKTtcbiAgICB9XG5cblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnByb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdmb250LXNpemUnLFxuICAgICAgdGhpcy5mb250U2l6ZU1hcHBpbmdTZXJ2aWNlLmdldE1hcHBpbmcoKVtVSVRleHRTdHlsZS5DQVBUSU9OXzJdXG4gICAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgdGhpcy5wcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnY29sb3InLFxuICAgICAgY29sb3JNYXBwaW5nW1VJQ29sb3IuTUFJTjFdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZml0TGFiZWxUb1R3b0xpbmVzKG1heExpbmVzID0gMiwgbWluRm9udFNpemVQeCA9IDEwKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxFbGVtZW50ID0gdGhpcy5wcm9maWxlQnV0dG9uTGFiZWxFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghbGFiZWxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShsYWJlbEVsZW1lbnQpO1xuICAgIGxldCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMuZm9udFNpemUpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZm9udFNpemUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGluZUhlaWdodCA9IGNvbXB1dGVkU3R5bGVzLmxpbmVIZWlnaHQgPT09ICdub3JtYWwnXG4gICAgICA/IGZvbnRTaXplICogMS4yXG4gICAgICA6IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMubGluZUhlaWdodCk7XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShsaW5lSGVpZ2h0KSB8fCBsaW5lSGVpZ2h0IDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0UmF0aW8gPSBsaW5lSGVpZ2h0IC8gZm9udFNpemU7XG5cbiAgICBjb25zdCBhcHBseU1ldHJpY3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZUhlaWdodCA9IGxpbmVIZWlnaHRSYXRpbyAqIGZvbnRTaXplO1xuICAgICAgY29uc3QgYWxsb3dlZEhlaWdodCA9IGN1cnJlbnRMaW5lSGVpZ2h0ICogbWF4TGluZXM7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGxhYmVsRWxlbWVudCwgJ2xpbmUtaGVpZ2h0JywgYCR7Y3VycmVudExpbmVIZWlnaHR9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobGFiZWxFbGVtZW50LCAnbWF4LWhlaWdodCcsIGAke2FsbG93ZWRIZWlnaHR9cHhgKTtcbiAgICAgIHJldHVybiBhbGxvd2VkSGVpZ2h0O1xuICAgIH07XG5cbiAgICBjb25zdCBmaXRzID0gKGFsbG93ZWRIZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgRVBTSUxPTiA9IDAuNTtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gbGFiZWxFbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWxFbGVtZW50LnNjcm9sbEhlaWdodCA8PSBhbGxvd2VkSGVpZ2h0ICsgRVBTSUxPTiAmJlxuICAgICAgICBsYWJlbEVsZW1lbnQuc2Nyb2xsV2lkdGggPD0gYXZhaWxhYmxlV2lkdGggKyBFUFNJTE9OXG4gICAgICApO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGxhYmVsRWxlbWVudCwgJ3RydW5jYXRlJyk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShsYWJlbEVsZW1lbnQsICdoZWlnaHQnKTtcblxuICAgIGxldCBhbGxvd2VkSGVpZ2h0ID0gYXBwbHlNZXRyaWNzKCk7XG4gICAgbGV0IGNvbnRlbnRGaXRzID0gZml0cyhhbGxvd2VkSGVpZ2h0KTtcblxuICAgIHdoaWxlICghY29udGVudEZpdHMgJiYgZm9udFNpemUgPiBtaW5Gb250U2l6ZVB4KSB7XG4gICAgICBmb250U2l6ZSAtPSAxO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShsYWJlbEVsZW1lbnQsICdmb250LXNpemUnLCBgJHtmb250U2l6ZX1weGApO1xuICAgICAgYWxsb3dlZEhlaWdodCA9IGFwcGx5TWV0cmljcygpO1xuICAgICAgY29udGVudEZpdHMgPSBmaXRzKGFsbG93ZWRIZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICghY29udGVudEZpdHMpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobGFiZWxFbGVtZW50LCAndHJ1bmNhdGUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhsYWJlbEVsZW1lbnQsICd0cnVuY2F0ZScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShsYWJlbEVsZW1lbnQsICdtYXgtaGVpZ2h0Jyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXNzZXRQYXRoKGFzc2V0OiBVSUFzc2V0KSB7XG4gICAgcmV0dXJuIGFzc2V0TWFwcGluZ1thc3NldF07XG4gIH1cbn1cbiIsIjxidXR0b24gI3Byb2ZpbGVCdXR0b25FbGVtZW50IFtlZG1TZHVpVmlld109XCJ1aUNvbXBvbmVudC5lbGVtZW50XCIgY2xhc3M9XCJwcm9maWxlLWJ1dHRvblwiICpuZ0lmPVwidWlDb21wb25lbnRcIj5cbiAgPGltZyAjcHJvZmlsZUJ1dHRvbkltYWdlRWxlbWVudCAqbmdJZj1cInVpQ29tcG9uZW50LmVsZW1lbnQuYXNzZXRcIiBbc3JjXT1cImdldEFzc2V0UGF0aCh1aUNvbXBvbmVudC5lbGVtZW50LmFzc2V0KVwiIGFsdD1cIlByb2ZpbGVcIiBjbGFzcz1cInByb2ZpbGUtaW1hZ2VcIj5cbiAgPHNwYW4gI3Byb2ZpbGVCdXR0b25MYWJlbEVsZW1lbnQgY2xhc3M9XCJwcm9maWxlLWxhYmVsXCI+e3sgdWlDb21wb25lbnQuZWxlbWVudC5sYWJlbCB9fTwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
@@ -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,69 @@ 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 applyMetrics = () => {
3188
+ const currentLineHeight = lineHeightRatio * fontSize;
3189
+ const allowedHeight = currentLineHeight * maxLines;
3190
+ this.renderer.setStyle(labelElement, 'line-height', `${currentLineHeight}px`);
3191
+ this.renderer.setStyle(labelElement, 'max-height', `${allowedHeight}px`);
3192
+ return allowedHeight;
3193
+ };
3194
+ const fits = (allowedHeight) => {
3195
+ const EPSILON = 0.5;
3196
+ const availableWidth = labelElement.clientWidth;
3197
+ if (availableWidth <= 0) {
3198
+ return true;
3199
+ }
3200
+ return (labelElement.scrollHeight <= allowedHeight + EPSILON &&
3201
+ labelElement.scrollWidth <= availableWidth + EPSILON);
3202
+ };
3203
+ this.renderer.removeClass(labelElement, 'truncate');
3204
+ this.renderer.removeStyle(labelElement, 'height');
3205
+ let allowedHeight = applyMetrics();
3206
+ let contentFits = fits(allowedHeight);
3207
+ while (!contentFits && fontSize > minFontSizePx) {
3208
+ fontSize -= 1;
3209
+ this.renderer.setStyle(labelElement, 'font-size', `${fontSize}px`);
3210
+ allowedHeight = applyMetrics();
3211
+ contentFits = fits(allowedHeight);
3212
+ }
3213
+ if (!contentFits) {
3214
+ this.renderer.addClass(labelElement, 'truncate');
3215
+ }
3216
+ else {
3217
+ this.renderer.removeClass(labelElement, 'truncate');
3218
+ this.renderer.removeStyle(labelElement, 'max-height');
3219
+ }
3220
+ }
3165
3221
  getAssetPath(asset) {
3166
3222
  return assetMapping[asset];
3167
3223
  }
3168
3224
  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"] }] }); }
3225
+ 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;overflow:hidden;display:block}.profile-button .profile-label.truncate{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
3170
3226
  }
3171
3227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfileButtonComponent, decorators: [{
3172
3228
  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"] }]
3229
+ 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;overflow:hidden;display:block}.profile-button .profile-label.truncate{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-overflow:ellipsis}\n"] }]
3174
3230
  }], ctorParameters: () => [{ type: undefined, decorators: [{
3175
3231
  type: Inject,
3176
3232
  args: ['uiComponent']