event.preventDefault()}
+ >
{this.hasSlottedElements && (
e.preventDefault()}>
diff --git a/packages/core/src/components/avatar/test/avatar.ct.ts b/packages/core/src/components/avatar/test/avatar.ct.ts
index 791ee2493c3..5467d9989ad 100644
--- a/packages/core/src/components/avatar/test/avatar.ct.ts
+++ b/packages/core/src/components/avatar/test/avatar.ct.ts
@@ -120,6 +120,96 @@ regressionTest.describe('embedded into header', () => {
}
);
+ regressionTest(
+ 'should apply no-truncate class when wrapUsername is true',
+ async ({ page, mount }) => {
+ await page.setViewportSize(viewPorts.lg);
+ await mount(
+ `
+
+
+
+
+ `
+ );
+
+ const avatar = page.locator('ix-avatar');
+ await avatar.click();
+
+ await expect(avatar.locator('.user-info')).toHaveClass(
+ /\buser-info--no-truncate\b/
+ );
+ }
+ );
+
+ regressionTest(
+ 'should not apply no-truncate class when wrapUsername is false',
+ async ({ page, mount }) => {
+ await page.setViewportSize(viewPorts.lg);
+ await mount(
+ `
+
+
+
+
+ `
+ );
+
+ const avatar = page.locator('ix-avatar');
+ await avatar.click();
+
+ await expect(avatar.locator('.user-info')).not.toHaveClass(
+ /\buser-info--no-truncate\b/
+ );
+ }
+ );
+
+ regressionTest(
+ 'should keep the popup width fixed and wrap long usernames when wrapUsername is true',
+ async ({ page, mount }) => {
+ await page.setViewportSize(viewPorts.lg);
+ await mount(
+ `
+
+
+
+
+ `
+ );
+
+ const avatar = page.locator('ix-avatar');
+ await avatar.click();
+
+ const userInfo = avatar.locator('.user-info');
+
+ const initialMetrics = await userInfo.evaluate((element) => {
+ const rect = element.getBoundingClientRect();
+ return {
+ width: Math.round(rect.width),
+ height: Math.round(rect.height),
+ };
+ });
+
+ const longUsername = 'verylongstringthatisnotfullydisplayed';
+ await avatar.evaluate((element, value) => {
+ element.setAttribute('username', value);
+ }, longUsername);
+
+ await expect(userInfo).toHaveText(new RegExp(longUsername));
+
+ const updatedMetrics = await userInfo.evaluate((element) => {
+ const rect = element.getBoundingClientRect();
+ return {
+ width: Math.round(rect.width),
+ height: Math.round(rect.height),
+ };
+ });
+
+ expect(updatedMetrics.width).toBe(initialMetrics.width);
+ expect(updatedMetrics.height).toBeGreaterThan(initialMetrics.height);
+ }
+ );
+
regressionTest('should show no tooltip', async ({ page, mount }) => {
await mount(`
`);
diff --git a/packages/react/src/components/components.server.ts b/packages/react/src/components/components.server.ts
index c7fb903f835..64fced4eeb4 100644
--- a/packages/react/src/components/components.server.ts
+++ b/packages/react/src/components/components.server.ts
@@ -195,7 +195,8 @@ export const IxAvatar: StencilReactComponent
) : undefined,
clientModule: clientComponents.IxAvatar as StencilReactComponent,
diff --git a/packages/vue/src/components/ix-avatar.ts b/packages/vue/src/components/ix-avatar.ts
index 8cbdd99664f..55862c8f420 100644
--- a/packages/vue/src/components/ix-avatar.ts
+++ b/packages/vue/src/components/ix-avatar.ts
@@ -12,5 +12,6 @@ export const IxAvatar: StencilVueComponent = /*@__PURE__*/ defineC
'username',
'extra',
'tooltipText',
- 'ariaLabelTooltip'
+ 'ariaLabelTooltip',
+ 'wrapUsername'
]);