Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
f7caa2b
[ellipsis] fixed trim=middle behavior
ilyabrower Jul 2, 2025
336813b
[ellipsis] fixed trim=middle with different font-size
ilyabrower Jul 2, 2025
12468ee
[ellipsis, typography] init ellipsis as text property
ilyabrower Jul 2, 2025
35f42c5
[chore] added new hint component
ilyabrower Jul 3, 2025
9dcc69c
[ellipsis, typography] init ellipsis as text property
ilyabrower Jul 4, 2025
a73ed87
Merge remote-tracking branch 'origin/release/v16' into UIK-3879/fixed…
slizhevskyv-semrush Jul 7, 2025
63b47af
[stories] added more props in ellipsis stories
Valeria-Zimnitskaya Jul 7, 2025
3000289
[stories] added test story with specific text size
Valeria-Zimnitskaya Jul 7, 2025
a05494e
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-38…
ilyabrower Jul 24, 2025
6b34a84
[chore] Merge branch 'UIK-3879/fixed-middel-trim-in-ellipsis' into UI…
ilyabrower Jul 24, 2025
307b314
[ellipsis] UIK-3917 added conditional args to stories
ilyabrower Jul 25, 2025
3c299d5
[ellipsis] UIK-3917 added comment in docs
ilyabrower Jul 25, 2025
70dd5d6
[UIK-3879][ellipsis] fixed trim=middle behavior (#2304)
ilyabrower Jul 25, 2025
8ca531b
[ellipsis] the same behavior as on prod - with trim middle - always o…
ilyabrower Jul 25, 2025
3b787e3
[chore] Merge branch 'UIK-2194/ellipsis-middle-diff-font-size' of git…
ilyabrower Jul 25, 2025
f102c6d
[ellipsis] even displayedSymbols
ilyabrower Jul 25, 2025
9fdd71b
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Jul 25, 2025
d1ef679
[chore] Merge branch 'UIK-2194/ellipsis-middle-diff-font-size' into U…
ilyabrower Jul 25, 2025
891350b
[base-components] added new Hint component and useEllipsis hook
ilyabrower Jul 28, 2025
abaa758
[chore] typo fixes after review
ilyabrower Jul 29, 2025
38b8a4d
[website] added docs about new useEllipsis and Hint
ilyabrower Jul 29, 2025
1ffb06e
[chore] updated stories with new useEllipsis
ilyabrower Jul 30, 2025
6450ee6
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Jul 30, 2025
bfda6b4
[chore] added hintProps for components with new ellipsis
ilyabrower Jul 30, 2025
3854d9f
[chore] fixed deps
ilyabrower Jul 30, 2025
33fb56a
[chore] fixed build
ilyabrower Jul 30, 2025
d774b3f
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Jul 31, 2025
c5368a7
[chore] updated snapshots
ilyabrower Jul 31, 2025
a4f9165
[breadcrumbs] fixed tests
ilyabrower Aug 1, 2025
1ac27a6
[fullscreen-modal] fixed tests
ilyabrower Aug 1, 2025
69aa581
[data-table] fixed tests with ellipsis
ilyabrower Aug 1, 2025
deced57
[card] fixed tests
ilyabrower Aug 1, 2025
3662c1a
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Aug 1, 2025
ec2feb4
[base-components] ellipsis animations
ilyabrower Aug 1, 2025
9d13920
[chore] Merge branch 'release/v16' into UIK-2976/ellipsis-improvements
ilyabrower Aug 4, 2025
4b1f00e
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Aug 5, 2025
4a5a357
[breadcrumbs] update some snapshots
Valeria-Zimnitskaya Aug 6, 2025
5110dc4
[breadcrumbs] update some snapshots
Valeria-Zimnitskaya Aug 6, 2025
964c26a
[ellipsis] fixed trim=middle with different font-size
ilyabrower Aug 8, 2025
46d7231
[ellipsis] hint styles and timeout
sheila-semrush Aug 11, 2025
2a73a9c
Update semcore/base-components/src/components/hint/Hint.tsx
ilyabrower Aug 12, 2025
8c26a1f
[ellipsis] updated changelog
sheila-semrush Aug 14, 2025
5bcfc8f
[docs] ellipsis draft docs update
sheila-semrush Aug 14, 2025
f142fb1
[breadcrumbs] update test and snapshots for new ellipsis
Valeria-Zimnitskaya Aug 18, 2025
247c3cc
[ellipsis] added base components story foldes and update base trigger…
Valeria-Zimnitskaya Aug 18, 2025
48e653d
[docs] separated old and new Multiple Use examples for ellipsis
sheila-semrush Aug 18, 2025
225c371
[fullscreen-modal] update tests and snapshots
Valeria-Zimnitskaya Aug 19, 2025
e85eba6
[input-tags] update snapshots
Valeria-Zimnitskaya Aug 19, 2025
306875c
[base-components] added ellipsis test stories
Valeria-Zimnitskaya Aug 20, 2025
2571b40
[data-table] upd story
Valeria-Zimnitskaya Aug 20, 2025
54de8ca
[base-components] hint test story
Valeria-Zimnitskaya Aug 20, 2025
94a76bf
[docs] restored old examples to ellipsis-code and interlinked all pages
sheila-semrush Aug 20, 2025
47a62a9
[docs] added hint examples and docs
sheila-semrush Aug 22, 2025
cca58d2
[docs] removed Hint playground
sheila-semrush Aug 22, 2025
351cb35
[stories] UIK-4097
ilyabrower Aug 25, 2025
e0f4acc
[stories] UIK-4101
ilyabrower Aug 25, 2025
8fb3582
[base-components] not set display by default
ilyabrower Aug 25, 2025
49646e7
[base-components] fixed ellipsis for multi=line
ilyabrower Aug 25, 2025
b56532f
[base-components] fixed hint arrow
ilyabrower Aug 25, 2025
3929e80
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Aug 26, 2025
4b902e0
[base-components] update ellipsis test story
Valeria-Zimnitskaya Aug 26, 2025
ba958a3
[stories] UIK-4015
ilyabrower Aug 26, 2025
dca4dda
[chore] Merge branch 'UIK-2976/ellipsis-improvements' of github.com:s…
ilyabrower Aug 26, 2025
8fda3c1
[stories] UIK-4096 serp-filter ellipsis issue
ilyabrower Aug 26, 2025
8b631c1
[docs] fixed double Hint in examples
sheila-semrush Aug 26, 2025
8fa062c
[base-trigger] update snapshots
Valeria-Zimnitskaya Aug 27, 2025
95bed85
Merge branch 'release/v16' into UIK-2976/ellipsis-improvements
Valeria-Zimnitskaya Aug 27, 2025
4732f40
[base-components] update snapshots with new allipsis
Valeria-Zimnitskaya Aug 27, 2025
5b6e5fb
[stories] fixed UIK-4130
ilyabrower Aug 27, 2025
b142a7a
[base-components] added some tests for hint
Valeria-Zimnitskaya Aug 27, 2025
87c2a31
[base-components] fixed ellipsis after GH comments
ilyabrower Aug 27, 2025
95081b8
[chore] Merge branch 'UIK-2976/ellipsis-improvements' of github.com:s…
ilyabrower Aug 27, 2025
f4a5713
[stories] base ellipsis and hint - fixed types
ilyabrower Aug 28, 2025
f5f1855
[base-components] update story
Valeria-Zimnitskaya Aug 28, 2025
4d6b30e
[stories] fixed ellipsis example
ilyabrower Aug 28, 2025
de46914
[chore] Merge branch 'release/v16' into UIK-2976/ellipsis-improvements
ilyabrower Aug 29, 2025
a1ba4fd
[stories] changed hint placement in multiple use example
sheila-semrush Aug 29, 2025
10d4787
[chore] Merge branch 'release/v16' into UIK-2976/ellipsis-improvements
ilyabrower Sep 1, 2025
b86b35a
[typography] fixed types for hintProps
ilyabrower Sep 1, 2025
6bd7955
[stories] added constols for test ellipsis stories
Valeria-Zimnitskaya Sep 1, 2025
9fc8378
[base-components] ellipsis and hint tests
Valeria-Zimnitskaya Sep 1, 2025
eb1844d
[base-components] update tests for ellipsis and hint
Valeria-Zimnitskaya Sep 1, 2025
0357981
[chore] Merge remote-tracking branch 'origin/release/v16' into UIK-29…
ilyabrower Sep 30, 2025
b3d5163
[chore] Merge branch 'release/v16' into UIK-2976/ellipsis-improvements
ilyabrower Oct 10, 2025
989a594
[base-components] update ellipsis tests and snapshots
Valeria-Zimnitskaya Oct 10, 2025
a982134
[ellipsis] update tests
Valeria-Zimnitskaya Oct 10, 2025
49012d7
[base-components] update tests
Valeria-Zimnitskaya Oct 10, 2025
41b1912
[base-components] update test
Valeria-Zimnitskaya Oct 10, 2025
e6041c9
[side-panel] upd snapshots
Valeria-Zimnitskaya Oct 10, 2025
8e330a9
[tag] upd snapshots
Valeria-Zimnitskaya Oct 10, 2025
4bdd2a0
[select] fixed deps
ilyabrower Oct 13, 2025
0da769c
[website] added info about select.option.text
ilyabrower Oct 13, 2025
898895b
[ellipsis] update test
Valeria-Zimnitskaya Oct 13, 2025
0bbc02f
[chore] Merge branch 'release/v17' into UIK-2976/ellipsis-improvements
ilyabrower Dec 24, 2025
f95faa3
[base-components] some ellipsis improvements
ilyabrower Jan 9, 2026
9d93d11
[chore] added mock for IntersectionOnserver
ilyabrower Jan 12, 2026
0953890
[chore] fixed some tests
ilyabrower Jan 12, 2026
4efff40
[chore] fixed dependencies
ilyabrower Jan 12, 2026
e5aeff2
[base-components, button] using new hint in button
ilyabrower Jan 13, 2026
08b47b3
[chore] removed using old Hint from Tooltips in examples
ilyabrower Jan 13, 2026
3b687d1
Merge branch 'release/v17' into UIK-2976/ellipsis-improvements
Valeria-Zimnitskaya Jan 14, 2026
f93f896
[chore] Merge branch 'UIK-2976/ellipsis-improvements' of github.com:s…
ilyabrower Jan 14, 2026
f76085b
[input] fixed examples with addons and new hint
ilyabrower Jan 14, 2026
85e276b
[link] pass size property in link to text
ilyabrower Jan 14, 2026
bd4c06b
[ellipsis] changed deprecated message
ilyabrower Jan 14, 2026
4cb58b5
[link] pass all text properties to the Link.Text
ilyabrower Jan 15, 2026
6f09cde
[base-components] some ellipsis fixes after review
ilyabrower Jan 15, 2026
b2d868e
[select] update some snapshots and test
Valeria-Zimnitskaya Jan 15, 2026
9bef613
[ellipsis] merge
Valeria-Zimnitskaya Jan 15, 2026
0b45a55
[chore] Merge branch 'release/v17' into UIK-2976/ellipsis-improvements
ilyabrower Jan 15, 2026
20b8c77
[chore] Merge branch 'UIK-2976/ellipsis-improvements' of github.com:s…
ilyabrower Jan 15, 2026
4a212b0
[base-components] fixed types
ilyabrower Jan 15, 2026
977eb12
[chore] new ellipsis - fixed a11y issues in examples
ilyabrower Jan 15, 2026
4b5a732
[chore] fixed input tags examples
ilyabrower Jan 15, 2026
a3f00e4
[chore] fixed input tags examples
ilyabrower Jan 15, 2026
da89896
[base-components] fixed container with paddings width calculation
ilyabrower Jan 15, 2026
c10ad15
[ellipsis] fixed isTextOverflowing check
ilyabrower Jan 15, 2026
37f4fd7
[base-components] calculate ellipsis in tables with tabular-nums
ilyabrower Jan 15, 2026
97aa23f
[input-tags] update snapshots
Valeria-Zimnitskaya Jan 15, 2026
514e513
[breadcrumbs] update tests
Valeria-Zimnitskaya Jan 16, 2026
15d170d
[base-components] fixed container width calculation
ilyabrower Jan 16, 2026
1c67204
[chore] Merge branch 'UIK-2976/ellipsis-improvements' of github.com:s…
ilyabrower Jan 16, 2026
561c0d3
[input-tags] fixed example
ilyabrower Jan 16, 2026
65a2333
[link] fixed display names
ilyabrower Jan 16, 2026
0fe16fb
[base-components] handle focus in hint only for keyboard interactions
ilyabrower Jan 16, 2026
b6ad0df
[chore] fixed ellispsis story
ilyabrower Jan 16, 2026
e9f1f80
[link] fixed height
ilyabrower Jan 16, 2026
3312f4f
[button] fixed logic with aria-lable for buttons without the text
ilyabrower Jan 16, 2026
2d71a98
[UIK-3548] new hint style (#2663)
sheila-semrush Jan 16, 2026
5e01218
[chore] fixed example link with ellipsis in table
ilyabrower Jan 16, 2026
8c17bea
[base-components] fixed ellipsis cleanup
ilyabrower Jan 16, 2026
ecf9d90
[link] centered items in link
ilyabrower Jan 16, 2026
447a3a2
[chore] update tests snapshots etc
Valeria-Zimnitskaya Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3,412 changes: 1,686 additions & 1,726 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions semcore/add-filter/__tests__/add-filter.browser-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ export const locators = {

selectTriggerFilled: (page: Page, placeholder: string, index?: number): Locator => {
const base = page.locator(
`div[data-ui-name="FilterTrigger.Text"][placeholder="${placeholder}"]`,
`[data-ui-name="FilterTrigger.Text"][placeholder="${placeholder}"]`,
);
return typeof index === 'number' ? base.nth(index) : base;
},

addFilterSelectInputSearch: (page: Page): Locator => page.locator('[data-ui-name="AddFilterSelect.InputSearch"]'),

dropdownTrigger: (page: Page, placeholder: string): Locator =>
page.locator(`div[data-ui-name="AddFilterDropdown.Trigger"][placeholder="${placeholder}"]`),
page.locator(`[data-ui-name="AddFilterDropdown.Trigger"][placeholder="${placeholder}"]`),

dialog: (page: Page): Locator => page.getByRole('dialog'),

Expand Down
4 changes: 4 additions & 0 deletions semcore/base-components/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangel

- Removed using `getNodeByRef` in `Portal`, `OutsideClick`, `ScrollArea` components. Use `React.RefObject` instead.

### Added

- `Hint` component.

## [16.4.2] - 2025-12-01

### Fixed
Expand Down
275 changes: 275 additions & 0 deletions semcore/base-components/__tests__/ellipsis.browser-test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,275 @@
import type { Page } from '@semcore/testing-utils/playwright';
import { test, expect } from '@semcore/testing-utils/playwright';
import { loadPage } from '@semcore/testing-utils/shared/helpers';
import { TAG } from '@semcore/testing-utils/shared/tags';

export const locators = {
link: (page: Page) => page.getByRole('link'),
text: (page: Page) => page.locator('[data-ui-name="Text"]'),
hint: (page: Page) => page.locator('[data-ui-name="Hint"]'),
};

/* =====================================================
@visual
Visual states, hover and focus styles, paddings, margins, and snapshots.
===================================================== */
test.describe(`${TAG.VISUAL}`, () => {
test.describe('Link with ellipsis', () => {
const ellipsisVariants = [
{ ellipsis: true, description: 'true' },
{ ellipsis: { cropPosition: 'middle' }, description: 'cropPosition: middle' },
{ ellipsis: { cropPosition: 'end' }, description: 'cropPosition: end' },
{ ellipsis: { cropPosition: 'end', maxLine: 2 }, description: 'cropPosition: end, maxLine: 2' },
];

ellipsisVariants.forEach((variant) => {
test(`Verify ellipsis on link with keyboard focus and mouse hover when ${variant.description}`, {
tag: [TAG.PRIORITY_HIGH, TAG.KEYBOARD, TAG.MOUSE, '@ellipsis', '@link'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/link_with_ellipsis.tsx', 'en', variant);

await test.step('Focus link with keyboard', async () => {
await page.keyboard.press('Tab');
await expect(locators.link(page)).toBeFocused();
});

await test.step('Hover link and verify hint appears', async () => {
await locators.link(page).hover();
const hasMaxLine = typeof variant.ellipsis === 'object' && 'maxLine' in variant.ellipsis;
if (!hasMaxLine) {
await locators.hint(page).waitFor({ state: 'visible' });
}
await expect(page).toHaveScreenshot();
});
});

test(`Verify ellipsis on link with mouse hover when ${variant.description}`, {
tag: [TAG.PRIORITY_HIGH, TAG.MOUSE, '@ellipsis', '@link'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/link_with_ellipsis.tsx', 'en', variant);

await test.step('Hover link and verify hint appears', async () => {
await locators.link(page).hover();
const hasMaxLine = typeof variant.ellipsis === 'object' && 'maxLine' in variant.ellipsis;
if (!hasMaxLine) {
await locators.hint(page).waitFor({ state: 'visible' });
}
await expect(page).toHaveScreenshot();
});
});
});
});

test.describe('Link without ellipsis', () => {
const noEllipsisVariants = [
{ ellipsis: false, description: 'false' },
{ ellipsis: { cropPosition: 'end', maxLine: 6 }, description: 'maxLine: 6 (text not truncated)' },
];

noEllipsisVariants.forEach((variant) => {
test(`Verify no hint appears when ${variant.description}`, {
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, TAG.KEYBOARD, '@ellipsis', '@link'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/link_with_ellipsis.tsx', 'en', variant);

await test.step('Focus and hover link - no hint should appear', async () => {
await page.keyboard.press('Tab');
await locators.link(page).hover();
await expect(locators.hint(page)).toHaveCount(0);
await expect(page).toHaveScreenshot();
});
});
});
});

test.describe('Text with ellipsis', () => {
const textVariants = [
{ ellipsis: true, size: 100 },
{ ellipsis: { cropPosition: 'end' }, size: 200 },
{ ellipsis: true, size: 200 },
{ ellipsis: { cropPosition: 'end' }, size: 400 },
{ ellipsis: true, size: 500 },
{ ellipsis: { cropPosition: 'end' }, size: 600 },
{ ellipsis: true, size: 700 },
{ ellipsis: { cropPosition: 'end' }, size: 800 },
{ ellipsis: { cropPosition: 'middle' }, size: 100 },
{ ellipsis: { cropPosition: 'middle' }, size: 200 },
{ ellipsis: { cropPosition: 'middle' }, size: 300 },
{ ellipsis: { cropPosition: 'middle' }, size: 400 },
{ ellipsis: { cropPosition: 'middle' }, size: 500 },
{ ellipsis: { cropPosition: 'middle' }, size: 600 },
{ ellipsis: { cropPosition: 'middle' }, size: 700 },
{ ellipsis: { cropPosition: 'middle' }, size: 800 },
];

textVariants.forEach((variant) => {
const ellipsisDesc = variant.ellipsis === true ? 'true' : JSON.stringify(variant.ellipsis);
test(`Verify ellipsis on text with ellipsis: ${ellipsisDesc}, size: ${variant.size}`, {
tag: [TAG.PRIORITY_HIGH, TAG.MOUSE, '@ellipsis', '@text'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/trim_with_special_text_size.tsx', 'en', variant);

await test.step('Hover text and verify hint appears', async () => {
await locators.text(page).hover();
await locators.hint(page).waitFor({ state: 'visible' });
await expect(page).toHaveScreenshot();
});
});
});
});

test.describe('Text without ellipsis', () => {
const noEllipsisVariants = [
{ ellipsis: false, description: 'false' },
{ ellipsis: { cropPosition: 'end', maxLine: 6 }, description: 'maxLine: 6 (text not truncated)' },
];

noEllipsisVariants.forEach((variant) => {
test(`Verify no hint appears when ellipsis: ${variant.description}`, {
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, '@ellipsis', '@text'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/trim_with_special_text_size.tsx', 'en', variant);

await test.step('Hover text - no hint should appear', async () => {
await locators.text(page).hover();
await expect(locators.hint(page)).toHaveCount(0);
await expect(page).toHaveScreenshot();
});
});
});
});

test('Verify ellipsis with required last symbols', {
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/docs/examples/with_required_last_symbols.tsx', 'en');

await test.step('Hover first text with lastRequiredSymbols: 5', async () => {
await locators.text(page).first().hover();
await locators.hint(page).waitFor({ state: 'visible' });
await expect(page).toHaveScreenshot();
});
});

test('Verify basic ellipsis usage', {
tag: [TAG.PRIORITY_HIGH, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/docs/examples/basic_usage.tsx', 'en');

await test.step('Hover text and verify hint appears', async () => {
await locators.text(page).hover();
await locators.hint(page).waitFor({ state: 'visible' });
await expect(page).toHaveScreenshot();
});
});
});

/* =====================================================
@functional
Keyboard and mouse interactions - no snapshots here.
We verify states, visibility, and attributes.
===================================================== */
test.describe(`${TAG.FUNCTIONAL}`, () => {
test('Verify hint shows full text on hover and hides on mouse leave', {
tag: [TAG.PRIORITY_HIGH, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/docs/examples/basic_usage.tsx', 'en');

await test.step('Initial state - no hint visible', async () => {
await expect(locators.hint(page)).toHaveCount(0);
});

await test.step('Hover text - hint should appear', async () => {
await locators.text(page).hover();
await expect(locators.hint(page)).toHaveCount(1);
});

await test.step('Move mouse away - hint should hide', async () => {
await page.mouse.move(0, 0);
await expect(locators.hint(page)).toHaveCount(0);
});
});

test.skip('Verify hint shows on link focus and hides on blur', { // hint not shown
tag: [TAG.PRIORITY_HIGH, TAG.KEYBOARD, '@ellipsis', '@link'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/link_with_ellipsis.tsx', 'en', { ellipsis: true });

await test.step('Focus link with keyboard - hint should appear', async () => {
await page.keyboard.press('Tab');
await expect(locators.link(page)).toBeFocused();
await expect(locators.hint(page)).toHaveCount(1);
});

await test.step('Tab away - hint should hide', async () => {
await page.keyboard.press('Tab');
await expect(locators.hint(page)).toHaveCount(0);
});
});

test.skip('Verify ellipsis with maxLine multiline truncation', { // hint not shown, looks like bug
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/link_with_ellipsis.tsx', 'en', {
ellipsis: { cropPosition: 'end', maxLine: 2 },
});

await test.step('Hover and verify hint appears for multiline', async () => {
await locators.link(page).hover();
await expect(locators.hint(page)).toHaveCount(1);
});
});

test('Verify no hint when text is not truncated', {
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/tests/examples/link_with_ellipsis.tsx', 'en', { ellipsis: false });

await test.step('Hover - no hint should appear', async () => {
await locators.link(page).hover();
await expect(locators.hint(page)).toHaveCount(0);
});
});

test('Verify required last symbols preservation', {
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/docs/examples/with_required_last_symbols.tsx', 'en');

await test.step('Verify first text preserves last 5 symbols', async () => {
const textContent = await locators.text(page).first().textContent();
// Should end with "terns." (5 symbols from original text)
expect(textContent).toMatch(/terns\.$/);
});

await test.step('Hover and verify hint shows full text', async () => {
await locators.text(page).first().hover();
await expect(locators.hint(page)).toHaveCount(1);
const hintText = await locators.hint(page).textContent();
expect(hintText).toContain('Intergalactic is a constantly developing');
});
});

test('Verify hint positioning near truncated text', {
tag: [TAG.PRIORITY_MEDIUM, TAG.MOUSE, '@ellipsis'],
}, async ({ page }) => {
await loadPage(page, 'stories/components/base-components/ellipsis/docs/examples/basic_usage.tsx', 'en');

await test.step('Show hint and verify it is positioned above text', async () => {
const textElement = locators.text(page);
await textElement.hover();
await expect(locators.hint(page)).toHaveCount(1);

const textBox = await textElement.boundingBox();
const hintBox = await locators.hint(page).boundingBox();

expect(textBox).not.toBeNull();
expect(hintBox).not.toBeNull();

// Hint should be positioned above or near the text
if (textBox && hintBox) {
expect(Math.abs(hintBox.y - textBox.y)).toBeLessThan(200);
}
});
});
});
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading