Skip to content

[Web Import] Add Remix Icon#901

Merged
t-regbs merged 2 commits intomainfrom
feature/remix-icon-import
Feb 26, 2026
Merged

[Web Import] Add Remix Icon#901
t-regbs merged 2 commits intomainfrom
feature/remix-icon-import

Conversation

@t-regbs
Copy link
Collaborator

@t-regbs t-regbs commented Feb 25, 2026

Adds support for importing Remix Icons

Screen.Recording.2026-02-25.at.23.47.22.mov

📝 Changelog

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

@coderabbitai
Copy link

coderabbitai bot commented Feb 25, 2026

Walkthrough

This change adds Remix icon support to the SDK's compose icons library and the IDE plugin's web import feature. The SDK adds a new RemixLogo icon to the colored icons package with associated ImageVector implementation featuring gradient-based paths. The IDE plugin extends the web import flow by introducing RemixImportScreen, RemixRepository for fetching icon metadata and assets from CDN, RemixUseCase for handling business logic, RemixModule for dependency injection, and navigation routing. Persistent size settings for Remix are added alongside related UI components and localization entries enabling users to import Remix icons through the web import interface.

🚥 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 title '[Web Import] Add Remix Icon' clearly and concisely summarizes the main change: adding support for importing Remix Icons in the web import feature.
Description check ✅ Passed The description adequately describes the feature (adds support for importing Remix Icons with a demo video), and the author has checked the IntelliJ Plugin changelog checkbox indicating that the CHANGELOG.md was updated.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/remix-icon-import

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/data/RemixRepository.kt (1)

84-97: Redundant nested withContext(Dispatchers.IO) inside metadataMutex block

loadSvgMetadata already switches to Dispatchers.IO, but loadFlatIndexUrl()loadPackageVersion() each call withContext(Dispatchers.IO) again. The inner context switches are no-ops when already on IO, so there's no correctness issue — just minor noise.

♻️ Optional cleanup
 private suspend fun loadPackageVersion(): String = withContext(Dispatchers.IO) {

The inner withContext(Dispatchers.IO) calls in loadFlatIndexUrl and loadPackageVersion can be removed if callers already guarantee the IO dispatcher. Alternatively, keep them for resilience if these functions are ever called from a non-IO context.

🤖 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/remix/data/RemixRepository.kt`
around lines 84 - 97, The code in loadSvgMetadata wraps the metadataMutex block
with withContext(Dispatchers.IO) while its callees loadFlatIndexUrl and
loadPackageVersion also perform their own withContext(Dispatchers.IO), causing
redundant inner context switches; either remove the inner
withContext(Dispatchers.IO) calls from loadFlatIndexUrl and loadPackageVersion
(so they assume callers like loadSvgMetadata already run on IO) or remove the
outer withContext in loadSvgMetadata and keep the inner guards for resilience —
update the implementations of loadFlatIndexUrl and loadPackageVersion (or
loadSvgMetadata) consistently and ensure metadataMutex.withLock remains inside
the chosen IO context to avoid blocking the main thread.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/data/RemixRepository.kt`:
- Around line 23-27: RemixRepository currently mixes `@latest` CDN URLs
(CDN_BASE/PACKAGE_JSON_URL -> FONT_URL, GLYPH_URL) with a version-pinned
FLAT_INDEX_URL_TEMPLATE causing cache mismatches; change the flow to resolve the
package version once (use or add loadPackageVersion()/the existing
PACKAGE_JSON_URL fetch), build a VERSIONED_CDN_TEMPLATE (e.g. formatable string
like "https://cdn.jsdelivr.net/npm/remixicon@%s"), and derive FONT_URL,
GLYPH_URL and the flat index URL from that resolved version so that
loadCodepoints(), loadFontBytes() and any SVG metadata lookup all use the same
versioned URLs.

---

Nitpick comments:
In
`@tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/data/RemixRepository.kt`:
- Around line 84-97: The code in loadSvgMetadata wraps the metadataMutex block
with withContext(Dispatchers.IO) while its callees loadFlatIndexUrl and
loadPackageVersion also perform their own withContext(Dispatchers.IO), causing
redundant inner context switches; either remove the inner
withContext(Dispatchers.IO) calls from loadFlatIndexUrl and loadPackageVersion
(so they assume callers like loadSvgMetadata already run on IO) or remove the
outer withContext in loadSvgMetadata and keep the inner guards for resilience —
update the implementations of loadFlatIndexUrl and loadPackageVersion (or
loadSvgMetadata) consistently and ensure metadataMutex.withLock remains inside
the chosen IO context to avoid blocking the main thread.

ℹ️ Review info

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 24aff8d and e58648d.

📒 Files selected for processing (13)
  • 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/RemixLogo.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/remix/RemixImportScreen.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/data/RemixRepository.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/di/RemixModule.kt
  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/domain/RemixUseCase.kt
  • tools/idea-plugin/src/main/resources/messages/Valkyrie.properties

Copy link
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.

Perfect!

@t-regbs t-regbs merged commit 33bba42 into main Feb 26, 2026
3 of 5 checks passed
@t-regbs t-regbs deleted the feature/remix-icon-import branch February 26, 2026 13:09
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