Skip to content

Sync EUI icon library with Jan–May 2026 renames and additions#3378

Open
florent-leborgne wants to merge 4 commits into
mainfrom
sync/eui-icons-jan-2026
Open

Sync EUI icon library with Jan–May 2026 renames and additions#3378
florent-leborgne wants to merge 4 commits into
mainfrom
sync/eui-icons-jan-2026

Conversation

@florent-leborgne
Copy link
Copy Markdown
Member

Why

EUI renamed virtually all icons from camelCase to snake_case in January 2026 (elastic/eui#9279) and continued adding new icons through May 2026. Without this sync, docs-builder was serving outdated or missing icon glyphs and would break the build whenever a doc page used a renamed icon name.

What

  • 580 canonical icons now match EUI main exactly — every root icon and all 56 token icons are in sync
  • 97 icon aliases + 56 token aliases added to EuiSvgIcons so that any existing doc page using an old camelCase name (e.g. {icon}\checkCircle`, {icon}`errorFilled`, {icon}`wordWrap``) transparently resolves to the current EUI glyph without a build error — old SVG files deleted, aliases handle resolution
  • ~200 new root SVGs added (new icons like chart_*, drag_*, chevron_*, ellipsis, server, significant_events, etc.)
  • All 56 token SVGs renamed from camelCase (tokenAlias.svg) to snake_case (token_alias.svg) to match EUI
  • docs/syntax/icons.md regenerated from the actual files on disk (580 entries, alphabetical)

How

The alias mechanism lives in EuiSvgIcons.TryGetIcon / GetIcon / TryGetToken. On lookup, the name is checked against a static IconAliases / TokenAliases dictionary first; if matched, the canonical name is substituted before hitting the embedded-resource dictionary. This means old doc pages keep working at zero maintenance cost, and future EUI renames only require adding an alias entry rather than a bulk docs update.

Made with Cursor

EUI renamed virtually all icons from camelCase to snake_case in Jan 2026
(#9279) and has continued adding new icons since. This brings docs-builder
fully up to date.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 22, 2026

Review Change Stack

Warning

Review limit reached

@florent-leborgne, we couldn't start this review because you've used your available PR reviews for now.

Your plan includes 1 review of capacity. Refill in 56 minutes and 29 seconds.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more review capacity refills, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a337e36e-fb50-4f75-a0e6-c15a77a36166

📥 Commits

Reviewing files that changed from the base of the PR and between 7e90c4e and 0cbadf3.

📒 Files selected for processing (1)
  • docs/syntax/icons.md
📝 Walkthrough

Walkthrough

This PR introduces alias dictionaries in EuiSvgIcons to map legacy camelCase icon and token names to canonical EUI snake_case names. The public lookup methods (TryGetIcon, TryGetToken, and both GetIcon overloads) are updated to resolve aliases before retrieving SVG content. The documentation table is simultaneously updated to reflect the canonical snake_case identifiers, enabling a smooth migration from camelCase naming conventions.

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant EuiSvgIcons
  participant IconAliases
  participant SvgDictionary

  Caller->>EuiSvgIcons: TryGetIcon(name) / GetIcon(name[, cssClass])
  EuiSvgIcons->>IconAliases: Resolve(name) -> canonicalName?
  IconAliases-->>EuiSvgIcons: canonicalName (or original)
  EuiSvgIcons->>SvgDictionary: Lookup(canonicalName)
  SvgDictionary-->>EuiSvgIcons: SVG content (string)
  EuiSvgIcons->>EuiSvgIcons: If cssClass provided -> inject class into SVG
  EuiSvgIcons-->>Caller: Return SVG string
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: syncing the EUI icon library with renames and additions from Jan–May 2026.
Description check ✅ Passed The description is directly related to the changeset, explaining the motivation, scope of changes (aliases, new icons, renames), and implementation approach.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch sync/eui-icons-jan-2026

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
docs/syntax/icons.md (1)

665-665: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Usage examples should demonstrate canonical icon names.

The examples use the legacy alias checkCircle instead of the canonical check_circle. Update examples to use canonical snake_case names to guide users toward current naming conventions.

📝 Proposed fix
 |     Status     | Description |
 |:--------------:|:------------|
-| {icon}`checkCircle` | Success     |
+| {icon}`check_circle` | Success     |
 |   {icon}`warning`   | Warning     |
 |    {icon}`error`    | Error       |

And in the Markdown block:

 |     Status     | Description |
 |:--------------:|:------------|
-| {icon}`checkCircle` | Success     |
+| {icon}`check_circle` | Success     |
 |   {icon}`warning`   | Warning     |
 |    {icon}`error`    | Error       |

Also applies to: 675-675

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/syntax/icons.md` at line 665, Update the example icon names to use
canonical snake_case forms: replace the legacy alias checkCircle with
check_circle in the icons documentation (the table row containing
"{icon}`checkCircle`" and any other occurrences such as the one noted at line
675), ensuring all usage examples show the canonical names so users are guided
to the current naming convention.
src/Elastic.Documentation.Svg/EuiSvgIcons.cs (1)

257-258: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

GetToken does not resolve token aliases.

Every other lookup method (TryGetIcon, TryGetToken, GetIcon overloads) resolves aliases, but GetToken does not. This breaks the transparent alias resolution contract and creates an inconsistent API.

🔧 Proposed fix
 public static string? GetToken(string name) =>
-    Tokens.TryGetValue(name, out var svg) ? svg : null;
+{
+    if (TokenAliases.TryGetValue(name, out var canonical))
+        name = canonical;
+    return Tokens.TryGetValue(name, out var svg) ? svg : null;
+}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Elastic.Documentation.Svg/EuiSvgIcons.cs` around lines 257 - 258,
GetToken currently returns Tokens.TryGetValue(name) directly and therefore
doesn't resolve aliases; update GetToken to mirror the alias-resolution behavior
used by TryGetIcon/TryGetToken/GetIcon overloads: if Tokens.TryGetValue(name)
fails, check the token alias mapping (e.g., TokenAliases or similar alias
dictionary used elsewhere), follow the alias target(s) until you arrive at a
real token name (guarding against cycles or excessive depth), then return the
looked-up SVG from Tokens, or null if none found. Ensure you reference GetToken,
Tokens, and the existing alias dictionary/methods used by TryGetIcon/TryGetToken
so behavior is consistent across lookups.
🧹 Nitpick comments (1)
docs/syntax/icons.md (1)

268-268: 💤 Low value

Icon name uses camelCase inconsistent with surrounding snake_case names.

indexTemporary stands out as the only camelCase icon name in a table of snake_case names. If this is the actual canonical name on disk, consider renaming it to index_temporary for consistency with the EUI snake_case convention.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/syntax/icons.md` at line 268, The icon name in the docs uses camelCase
(`indexTemporary`) which is inconsistent with the surrounding snake_case
convention; rename the symbol to `index_temporary` in the docs table (replace
`{icon}`indexTemporary`` with `{icon}`index_temporary``) and, if the actual
asset on disk is named `indexTemporary`, rename the asset and any references
(imports, CSS classes, examples) to `index_temporary` consistently across the
repo (search for `indexTemporary` and update all occurrences, including
references in functions/components that use the icon).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs/syntax/icons.md`:
- Line 665: Update the example icon names to use canonical snake_case forms:
replace the legacy alias checkCircle with check_circle in the icons
documentation (the table row containing "{icon}`checkCircle`" and any other
occurrences such as the one noted at line 675), ensuring all usage examples show
the canonical names so users are guided to the current naming convention.

In `@src/Elastic.Documentation.Svg/EuiSvgIcons.cs`:
- Around line 257-258: GetToken currently returns Tokens.TryGetValue(name)
directly and therefore doesn't resolve aliases; update GetToken to mirror the
alias-resolution behavior used by TryGetIcon/TryGetToken/GetIcon overloads: if
Tokens.TryGetValue(name) fails, check the token alias mapping (e.g.,
TokenAliases or similar alias dictionary used elsewhere), follow the alias
target(s) until you arrive at a real token name (guarding against cycles or
excessive depth), then return the looked-up SVG from Tokens, or null if none
found. Ensure you reference GetToken, Tokens, and the existing alias
dictionary/methods used by TryGetIcon/TryGetToken so behavior is consistent
across lookups.

---

Nitpick comments:
In `@docs/syntax/icons.md`:
- Line 268: The icon name in the docs uses camelCase (`indexTemporary`) which is
inconsistent with the surrounding snake_case convention; rename the symbol to
`index_temporary` in the docs table (replace `{icon}`indexTemporary`` with
`{icon}`index_temporary``) and, if the actual asset on disk is named
`indexTemporary`, rename the asset and any references (imports, CSS classes,
examples) to `index_temporary` consistently across the repo (search for
`indexTemporary` and update all occurrences, including references in
functions/components that use the icon).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 9466d9af-4f4c-4900-9fc1-610b31f20ab8

📥 Commits

Reviewing files that changed from the base of the PR and between 477a319 and cd1d516.

⛔ Files ignored due to path filters (298)
  • src/Elastic.Documentation.Svg/svgs/align_bottom.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_bottom_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_bottom_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_center_horizontal.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_center_vertical.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_top.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_top_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/align_top_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/analyze_event.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/archive.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/arrow_down.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/arrow_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/arrow_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/axis_x.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/axis_y_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/axis_y_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/bell_slash.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/bolt.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/branch_user.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/briefcase.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/bulb.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/bullseye.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_anomaly.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_area.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_area_stack.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_bar_horizontal.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_bar_horizontal_stack.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_bar_vertical.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_bar_vertical_stack.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_change_point.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_gauge.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_heatmap.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_line.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_metric.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_pie.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_tag_cloud.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_threshold.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chart_waterfall.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/checkInCircleFilled.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/check_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/check_circle_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_double_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_double_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_limit_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_limit_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_single_down.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_single_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_single_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/chevron_single_up.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/clickLeft.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/clickRight.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/click_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/click_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/clock_control.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/clock_counter.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/cloud.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/cloud_drizzle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/cloud_stormy.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/cloud_sunny.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/command_line.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/compare.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/continuity_above.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/continuity_above_below.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/continuity_below.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/continuity_within.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/contrastHigh.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/contrast_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/cross_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/crosshair.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/dashed_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/display.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/distribute_horizontal.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/distribute_vertical.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/document_edit.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/documents.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/dot_in_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/doubleArrowLeft.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/drag.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/drag_horizontal.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/drag_vertical.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_distribute_horizontal.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_distribute_vertical.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_item_align_bottom.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_item_align_center.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_item_align_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_item_align_middle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_item_align_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_item_align_top.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_position_bottom_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_position_bottom_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_position_top_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/editor_position_top_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/ellipsis.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/errorFilled.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/error_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/esql_vis.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/expandMini.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/external.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/eye_slash.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/filter_exclude.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/filter_ignore.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/filter_in_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/filter_include.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/folder_close.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/folder_closed.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/folder_open.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/frame_next.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/frame_previous.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/fullScreenExit.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/full_screen_exit.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/grab_omnidirectional.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/hourglass.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/if.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/index_close.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/index_edit.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/index_open.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/index_runtime.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/index_settings.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/inputOutput.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/input_output.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/kubernetesPod.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/kubernetes_node.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/kubernetes_pod.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/lineDashed.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/lineDotted.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/lineSolid.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/line_break.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/line_break_slash.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/line_dash.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/line_dot.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/line_solid.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/link_slash.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/list_bullet.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/list_check.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/list_number.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/lock_open.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/log_out.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify_exclamation.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify_minus.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify_plus.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify_with_exclamation.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify_with_minus.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/magnify_with_plus.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/mail.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/map.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/mapping.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/maximize.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/megaphone.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/menuLeft.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/menuRight.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/menu_down.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/menu_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/menu_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/menu_up.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/minus_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/minus_in_circle_filled.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/minus_in_square.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/minus_square.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/money.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/page_select.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/pagesSelect.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/pages_select.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/paint_bucket.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/pattern.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/pin_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/pipeBreaks.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/pipeNoBreaks.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/play_filled.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/plus_circle.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/plus_in_square.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/plus_square.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/popper.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/presentation.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/processor.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_agent.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_cloud_infra.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_dashboard.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_discover.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_ml.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_streams_classic.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/product_streams_wired.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/query.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/query_field.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/query_operand.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/query_selector.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/query_value.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/queue.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/radar.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/readOnly.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/read_only.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/redo.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/refresh_time.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/return.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/rocket.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/scissors.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/section.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/security_signal.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/security_signal_detected.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/security_signal_resolved.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/send.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/server.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/session_viewer.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/significant_events.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/sortAscending.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/sortDescending.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/sort_ascending.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/sort_descending.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/sort_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/sort_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star_fill_space.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star_filled.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star_minus_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star_plus_empty.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/star_plus_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/stop_fill.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/table.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/table_density_high.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/table_density_low.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/table_info.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/table_of_contents.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/table_time.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_align_center.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_align_left.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_align_right.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_bold.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_heading.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_italic.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_strike.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/text_underline.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/thermometer.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/thumbDown.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/thumbUp.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/thumb_down.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/thumb_up.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/timeline.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/timelineWithArrow.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/timeline_with_arrow.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_alias.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_annotation.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_array.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_binary.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_boolean.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_class.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_completion_suggester.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_constant.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_date.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_dimension.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_element.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_enum.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_enum_member.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_event.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_exception.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_field.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_file.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_flattened.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_function.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_geo.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_histogram.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_interface.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_ip.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_join.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_key.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_keyword.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_method.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_metric_counter.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_metric_gauge.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_module.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_namespace.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_nested.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_null.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_number.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_object.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_operator.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_package.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_parameter.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_percolator.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_property.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_range.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_rank_feature.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_rank_features.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_repo.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_search_type.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_semantic_text.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_shape.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_string.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_struct.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_symbol.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_tag.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_text.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_token_count.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_variable.svg is excluded by !**/*.svg
  • src/Elastic.Documentation.Svg/svgs/tokens/token_vector_dense.svg is excluded by !**/*.svg
📒 Files selected for processing (2)
  • docs/syntax/icons.md
  • src/Elastic.Documentation.Svg/EuiSvgIcons.cs

pipeBreaks was renamed to line_break (not pipe_breaks) and
pipeNoBreaks to line_break_slash per EUI batch rename commit 1a42be0c.

Co-authored-by: Cursor <cursoragent@cursor.com>
florent-leborgne added a commit to elastic/docs-content that referenced this pull request May 25, 2026
Switches the NL-enabled state description from a magnify+sparkles
combo to the single magnify_sparkles glyph added in
elastic/docs-builder#3378.

Co-authored-by: Cursor <cursoragent@cursor.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/Elastic.Documentation.Svg/EuiSvgIcons.cs (1)

257-258: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Missing token alias resolution in GetToken.

GetToken doesn't resolve token aliases before lookup, breaking backward compatibility for legacy camelCase token names. All other public methods (TryGetIcon, TryGetToken, both GetIcon overloads) resolve aliases first.

🔧 Proposed fix
 public static string? GetToken(string name) =>
-    Tokens.TryGetValue(name, out var svg) ? svg : null;
+{
+    if (TokenAliases.TryGetValue(name, out var canonical))
+        name = canonical;
+    return Tokens.TryGetValue(name, out var svg) ? svg : null;
+}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Elastic.Documentation.Svg/EuiSvgIcons.cs` around lines 257 - 258,
GetToken currently looks up the raw name in Tokens
(Tokens.TryGetValue(name,...)) and therefore fails for legacy/camelCase token
aliases; change it to resolve aliases the same way as
TryGetToken/TryGetIcon/GetIcon by first normalizing the input (e.g. var
resolvedName = ResolveAlias(name) or call the shared alias-resolution helper
used by the other methods) and then call Tokens.TryGetValue(resolvedName, out
var svg) ? svg : null so alias names return the correct token.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/Elastic.Documentation.Svg/EuiSvgIcons.cs`:
- Around line 257-258: GetToken currently looks up the raw name in Tokens
(Tokens.TryGetValue(name,...)) and therefore fails for legacy/camelCase token
aliases; change it to resolve aliases the same way as
TryGetToken/TryGetIcon/GetIcon by first normalizing the input (e.g. var
resolvedName = ResolveAlias(name) or call the shared alias-resolution helper
used by the other methods) and then call Tokens.TryGetValue(resolvedName, out
var svg) ? svg : null so alias names return the correct token.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 3a673012-d2c0-4e22-83d3-674df6874190

📥 Commits

Reviewing files that changed from the base of the PR and between cd1d516 and 7e90c4e.

⛔ Files ignored due to path filters (1)
  • src/Elastic.Documentation.Svg/svgs/magnify_sparkles.svg is excluded by !**/*.svg
📒 Files selected for processing (1)
  • src/Elastic.Documentation.Svg/EuiSvgIcons.cs

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.

1 participant