Skip to content

[Web Import] Add Eva Icon Import#957

Merged
egorikftp merged 3 commits intomainfrom
feature/eva-icons
Apr 29, 2026
Merged

[Web Import] Add Eva Icon Import#957
egorikftp merged 3 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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: d0deee0a-a602-49cd-bacc-b4afcdda5a77

📥 Commits

Reviewing files that changed from the base of the PR and between ca96b77 and 8f3ed58.

📒 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
✅ Files skipped from review due to trivial changes (8)
  • tools/idea-plugin/CHANGELOG.md
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportFlow.kt
  • tools/idea-plugin/src/test/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaSvgPathResolverTest.kt
  • tools/idea-plugin/src/main/resources/messages/Valkyrie.properties
  • sdk/compose/icons/api/icons.api
  • sdk/compose/icons/api/icons.klib.api
  • tools/idea-plugin/src/test/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/data/EvaCodepointParserTest.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/di/EvaModule.kt
🚧 Files skipped from review as they are similar to previous changes (6)
  • 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/standard/eva/data/EvaCodepointParser.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/WebImportSelectorScreen.kt
  • tools/idea-plugin/src/test/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/eva/domain/EvaIconNameTest.kt
  • sdk/compose/icons/src/commonMain/kotlin/io/github/composegears/valkyrie/sdk/compose/icons/colored/EvaLogo.kt

Walkthrough

Adds a new colored icon asset ValkyrieIcons.Colored.EvaLogo (ImageVector) to the SDK. Extends the IDE plugin with an Eva web-import flow: selector entry, EvaImportScreen, EvaRepository (fetches font, codepoints, SVGs), EvaCodepointParser, EvaUseCase (provider implementation), EvaModule (DI), persisted evaSize setting and reset behavior, localization strings, changelog entry, and unit tests for parsing and URL resolution.

🚥 Pre-merge checks | ✅ 4 | ❌ 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 (4 passed)
Check name Status Explanation
Title check ✅ Passed Title clearly summarizes the main change: adding Eva Icon import functionality to the Web Import feature.
Description check ✅ Passed Description includes a video demonstration and the changelog checklist with IntelliJ Plugin option correctly marked as completed, aligning with the actual changes made.
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
📝 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
Review rate limit: 6/8 reviews remaining, refill in 10 minutes and 25 seconds.

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
Copy link
Copy Markdown
Member

@egorikftp egorikftp left a comment

Choose a reason for hiding this comment

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

Great, thanks ❤️

@egorikftp egorikftp merged commit 55c37e4 into main Apr 29, 2026
3 checks passed
@egorikftp egorikftp deleted the feature/eva-icons branch April 29, 2026 13:08
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