Skip to content

[EuiLink] Quieter default: paragraph text, dotted underline, primary on hover - #9904

Draft
ryankeairns wants to merge 4 commits into
mainfrom
rk/quieter-eui-link
Draft

[EuiLink] Quieter default: paragraph text, dotted underline, primary on hover#9904
ryankeairns wants to merge 4 commits into
mainfrom
rk/quieter-eui-link

Conversation

@ryankeairns

@ryankeairns ryankeairns commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Related to #9899 (visual refresh) — EuiLink default interaction slice. Delivers the global quieter-link treatment; optional transparent row backgrounds remain open on that issue. Sibling action-icon quieting: #9902.

  • Default / color="primary" / color="text": textParagraph + dotted underline at rest → primary on hover/focus (solid underline)
  • primary and text now share that interactive treatment (no longer two static paints)
  • Other semantic colors (subdued, danger, etc.) stay static and override the hover→primary shift
  • Shared euiLinkCSS (also used by bare anchors in EuiText) gets the same default chrome
  • Docs updated to describe the new default + alias

Test plan

  • EuiLink Playground — default looks like body text with dotted underline; hover turns primary blue
  • Color docs demo — primary and text look the same; semantic colors unchanged at rest/hover
  • Links inside EuiText (component + bare <a>) match the quieter treatment
  • Focus ring still visible; disabled links lose underline/color chrome
  • Unit snapshots updated
  • VRT for Navigation/EuiLink after Storybook deploys
  • Changelog packages/eui/changelogs/upcoming/9904.md

Made with Cursor

…over

Align default link chrome with the visual refresh hierarchy so body links sit with text until interaction, and primary CTAs stay distinct. `primary` and `text` now share that interactive treatment.

Co-authored-by: Cursor <cursoragent@cursor.com>
@ryankeairns
ryankeairns requested a review from a team as a code owner August 12, 2026 00:38
Copilot AI lite review requested due to automatic review settings August 12, 2026 00:38
Co-authored-by: Cursor <cursoragent@cursor.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates EuiLink’s default visual treatment to be quieter at rest (paragraph text + dotted underline) and transition to primary styling on hover/focus, aligning link affordance with the “visual refresh” direction while keeping semantic link colors static. It also updates documentation and Jest snapshots to reflect the new default classes/styling.

Changes:

  • Updated shared euiLinkCSS to use paragraph-colored text + dotted underline at rest, and primary color + solid underline on hover/focus.
  • Adjusted EuiLink’s color handling so primary and text share the same default interactive styling, while semantic colors remain static on hover/focus.
  • Updated docs and multiple component snapshots for the new generated Emotion classnames/styling output.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/website/docs/components/navigation/link.mdx Updates docs to describe the new default/alias behavior and demo labeling.
packages/eui/src/components/link/link.tsx Treats primary + text as the same default interactive styling; semantic colors still get explicit styles.
packages/eui/src/components/link/link.styles.ts Implements the new shared link “chrome” and updates disabled/static color styling behavior.
packages/eui/src/components/link/snapshots/link.test.tsx.snap Snapshot updates for default Emotion class changes.
packages/eui/src/components/breadcrumbs/snapshots/breadcrumbs.test.tsx.snap Snapshot updates reflecting the new default link class output.
packages/eui/src/components/page/page_header/snapshots/page_header.test.tsx.snap Snapshot updates reflecting the new default link class output.
packages/eui/src/components/page/page_header/snapshots/page_header_content.test.tsx.snap Snapshot updates reflecting the new default link class output.
packages/eui/src/components/date_picker/super_date_picker/quick_select_popover/snapshots/quick_select_popover.test.tsx.snap Snapshot updates reflecting the new default link class output.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +89 to 92

&:target {
color: darken(${color}, 10%);
}
ryankeairns and others added 2 commits August 11, 2026 17:44
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@infra-vault-gh-plugin-prod

infra-vault-gh-plugin-prod Bot commented Aug 12, 2026

Copy link
Copy Markdown

💔 Build Failed

Failed CI Steps

History

@infra-vault-gh-plugin-prod

Copy link
Copy Markdown

💚 Build Succeeded

@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
122 visual difference(s) found - expand to review, then click Approve visual changes to update baselines

euiemptyprompt (8 differences)

StoryBeforeAfterDiff
high contrast desktop
high contrast mobile
high contrast transparent desktop
high contrast transparent mobile
page template desktop
page template mobile
playground desktop
playground mobile

euimarkdownformat (6 differences)

StoryBeforeAfterDiff
high contrast desktop
high contrast mobile
kitchen sink desktop
kitchen sink mobile
text props desktop
text props mobile

euicombobox (4 differences)

StoryBeforeAfterDiff
groups desktop
groups mobile
nested options groups desktop
nested options groups mobile

euiselectable (4 differences)

StoryBeforeAfterDiff
with search and groups desktop
with search and groups mobile
groups desktop
groups mobile

euisuperdatepicker (4 differences)

StoryBeforeAfterDiff
custom quick select panel desktop
custom quick select panel mobile
quick select only desktop
quick select only mobile

euiheader (12 differences)

StoryBeforeAfterDiff
elastic navigation pattern desktop
elastic navigation pattern mobile
sections desktop
sections mobile
playground desktop
playground mobile
popover example desktop
popover example mobile
high contrast desktop
high contrast mobile
playground desktop
playground mobile

euibreadcrumbs (8 differences)

StoryBeforeAfterDiff
application dark mode desktop
application dark mode mobile
application desktop
application high contrast dark desktop
application high contrast dark mobile
application high contrast desktop
application high contrast mobile
application mobile

euicollapsiblenav (2 differences)

StoryBeforeAfterDiff
full header pattern desktop
full header pattern mobile

euilink (4 differences)

StoryBeforeAfterDiff
external desktop
external mobile
playground desktop
playground mobile

euibasictable (18 differences)

StoryBeforeAfterDiff
dark mode desktop
dark mode mobile
expanded nested table desktop
expanded nested table mobile
expanded nested table without background desktop
expanded nested table without background mobile
expanded row desktop
expanded row mobile
high contrast desktop
high contrast mobile mobile
large expanded row desktop
large expanded row mobile
marked row desktop
marked row mobile
panelled desktop
panelled mobile
playground desktop
playground mobile

euidatagrid (50 differences)

StoryBeforeAfterDiff
cell actions desktop
cell actions mobile
cell expansion popover desktop
cell expansion popover mobile
column actions desktop
column actions mobile
custom header content desktop
custom header content mobile
draggable columns desktop
draggable columns mobile
header visibility desktop
header visibility mobile
playground desktop
playground mobile
virtualization desktop
virtualization mobile
visible columns desktop
visible columns mobile
compact desktop
compact mobile
expanded desktop
expanded mobile
horizontal lines desktop
horizontal lines mobile
minimal desktop Table truncated - see the Buildkite annotation for the full diff.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants