Skip to content

[Web Import] Add Eva Icon Import#957

Open
t-regbs wants to merge 2 commits intomainfrom
feature/eva-icons
Open

[Web Import] Add Eva Icon Import#957
t-regbs wants to merge 2 commits intomainfrom
feature/eva-icons

Conversation

@t-regbs
Copy link
Copy Markdown
Collaborator

@t-regbs t-regbs commented Apr 18, 2026

Screen.Recording.2026-04-18.at.20.03.49.mov

📝 Changelog

If this PR introduces user-facing changes, please update the relevant Unreleased section in changelogs:

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 18, 2026

Walkthrough

This pull request adds Eva Icons support to the Valkyrie SDK and IDE plugin. The SDK gains a new EvaLogo colored icon vector. The IDE plugin introduces a complete web import flow for Eva Icons, including UI screens for selection and import, data layer components for fetching and parsing Eva icon assets over HTTP, a dependency injection module, domain logic for icon metadata transformation, localization strings, and test coverage. The implementation mirrors existing patterns used for other icon providers in the plugin.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly summarizes the main addition: Eva Icon Import functionality for the Web Import feature.
Description check ✅ Passed The PR description is mostly complete, with the required changelog checklist properly filled out and the IntelliJ Plugin checkbox marked as done.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/eva-icons

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

@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.

🧹 Nitpick comments (3)
sdk/compose/icons/src/commonMain/kotlin/io/github/composegears/valkyrie/sdk/compose/icons/colored/EvaLogo.kt (1)

23-38: Consider dropping the fully transparent off-viewport path.

This first path is rendered with fillAlpha = 0f and its coordinates lie outside the 22 × 17 viewport (from (-1, -4) to (23, 20)), so it has no visual effect but still contributes parsing/rendering work every time the vector is built. If it isn't serving as an intentional padding/bounds hint, consider removing it to keep the vector minimal.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@sdk/compose/icons/src/commonMain/kotlin/io/github/composegears/valkyrie/sdk/compose/icons/colored/EvaLogo.kt`
around lines 23 - 38, Remove the fully transparent, off-viewport rectangle path
in EvaLogo.kt that starts with path(fill = SolidColor(Color.White), fillAlpha =
0f, ...) and uses coordinates from (-1, -4) to (23, 20); this path provides no
visible output and only costs rendering/parsing time—delete that entire path
block (or guard it behind a clearly named flag like includePaddingBounds if you
need it for intentional padding) so the remaining vector paths define the icon
minimally.
tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportSelectorScreen.kt (1)

131-137: Nit: parameter order differs from sibling InfoCard calls.

All other InfoCard invocations above order arguments as onClick, icon, tint, title, description. Here title is placed before tint. Behaviorally identical (named args), but aligning the order improves readability and diff-friendliness.

Proposed tweak
                 InfoCard(
                     onClick = { onClick(Eva) },
                     icon = ValkyrieIcons.Colored.EvaLogo,
-                    title = stringResource("web.import.selector.eva.title"),
                     tint = Color.Unspecified,
+                    title = stringResource("web.import.selector.eva.title"),
                     description = stringResource("web.import.selector.eva.description"),
                 )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportSelectorScreen.kt`
around lines 131 - 137, Reorder the named parameters in the InfoCard call for
the Eva option so they match the sibling calls' argument order: place onClick,
icon, tint, title, description (i.e., move tint before title) in the InfoCard
invocation (method/component name: InfoCard; parameter names: onClick, icon,
tint, title, description) to improve readability and diff consistency.
tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaRepository.kt (1)

44-46: Consider pinning the eva-icons CDN version.

Using eva-icons@latest means any upstream release can silently change the font, CSS, or SVG contents (and the codepoint map cached in-memory). For reproducible imports, consider pinning to a known-good version (e.g. eva-icons@1.1.3) — same as whatever strategy the other providers (Lucide/Bootstrap) are using. Non-blocking if the rest of the web-import flow already standardizes on @latest.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaRepository.kt`
around lines 44 - 46, The constants CDN_BASE, CSS_URL and FONT_URL in
EvaRepository.kt currently use "eva-icons@latest" which risks unpredictable
upstream changes; change CDN_BASE to a pinned version like
"https://cdn.jsdelivr.net/npm/eva-icons@1.1.3" (or the specific version used by
other providers) so CSS_URL and FONT_URL resolve to a fixed, reproducible asset;
update CDN_BASE only and ensure any related caching or in-memory codepoint map
consumers (e.g., functions that read CSS_URL/FONT_URL) continue to work with the
pinned version.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@sdk/compose/icons/src/commonMain/kotlin/io/github/composegears/valkyrie/sdk/compose/icons/colored/EvaLogo.kt`:
- Around line 23-38: Remove the fully transparent, off-viewport rectangle path
in EvaLogo.kt that starts with path(fill = SolidColor(Color.White), fillAlpha =
0f, ...) and uses coordinates from (-1, -4) to (23, 20); this path provides no
visible output and only costs rendering/parsing time—delete that entire path
block (or guard it behind a clearly named flag like includePaddingBounds if you
need it for intentional padding) so the remaining vector paths define the icon
minimally.

In
`@tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaRepository.kt`:
- Around line 44-46: The constants CDN_BASE, CSS_URL and FONT_URL in
EvaRepository.kt currently use "eva-icons@latest" which risks unpredictable
upstream changes; change CDN_BASE to a pinned version like
"https://cdn.jsdelivr.net/npm/eva-icons@1.1.3" (or the specific version used by
other providers) so CSS_URL and FONT_URL resolve to a fixed, reproducible asset;
update CDN_BASE only and ensure any related caching or in-memory codepoint map
consumers (e.g., functions that read CSS_URL/FONT_URL) continue to work with the
pinned version.

In
`@tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportSelectorScreen.kt`:
- Around line 131-137: Reorder the named parameters in the InfoCard call for the
Eva option so they match the sibling calls' argument order: place onClick, icon,
tint, title, description (i.e., move tint before title) in the InfoCard
invocation (method/component name: InfoCard; parameter names: onClick, icon,
tint, title, description) to improve readability and diff consistency.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 74b22fc7-83cf-4fa8-af1a-8694c56ad487

📥 Commits

Reviewing files that changed from the base of the PR and between 817bbd3 and ca96b77.

📒 Files selected for processing (17)
  • sdk/compose/icons/api/icons.api
  • sdk/compose/icons/api/icons.klib.api
  • sdk/compose/icons/src/commonMain/kotlin/io/github/composegears/valkyrie/sdk/compose/icons/colored/EvaLogo.kt
  • tools/idea-plugin/CHANGELOG.md
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/service/PersistentSettings.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/settings/InMemorySettings.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportFlow.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportSelectorScreen.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/EvaImportScreen.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaCodepointParser.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaRepository.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/di/EvaModule.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/domain/EvaUseCase.kt
  • tools/idea-plugin/src/main/resources/messages/Valkyrie.properties
  • tools/idea-plugin/src/test/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaCodepointParserTest.kt
  • tools/idea-plugin/src/test/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaSvgPathResolverTest.kt
  • tools/idea-plugin/src/test/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/domain/EvaIconNameTest.kt

@t-regbs t-regbs requested a review from egorikftp April 18, 2026 19:52
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