Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tools/idea-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
### Added

- [Web Import] Add `Font Awesome` icons provider
- [Web Import] Add SVG customization controls for standard icon providers, including size, rotation, flips, and persistent custom/recent colors

## 1.4.0 - 2026-03-15

Expand Down
1 change: 1 addition & 0 deletions tools/idea-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ dependencies {
implementation(projects.sdk.intellij.psi.iconpack)
implementation(projects.sdk.intellij.psi.imagevector)
implementation(projects.sdk.ir.core)
implementation(projects.sdk.parser.common)
implementation(projects.sdk.ir.compose)
implementation(projects.sdk.ir.util)
implementation(projects.sdk.ir.xml)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model.font.MaterialFontSettings.Companion.DEFAULT_GRADE
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model.font.MaterialFontSettings.Companion.DEFAULT_OPTICAL_SIZE
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model.font.MaterialFontSettings.Companion.DEFAULT_WEIGHT
import io.github.composegears.valkyrie.ui.screen.webimport.standard.common.model.SizeSettings.Companion.DEFAULT_SIZE
import io.github.composegears.valkyrie.ui.screen.webimport.standard.common.model.SvgImportSettings.Companion.DEFAULT_SIZE

@State(name = "Valkyrie.Settings", storages = [Storage("valkyrie_settings.xml")])
class PersistentSettings : SimplePersistentStateComponent<ValkyrieState>(ValkyrieState()) {
Expand Down Expand Up @@ -64,18 +64,28 @@ class PersistentSettings : SimplePersistentStateComponent<ValkyrieState>(Valkyri

// Lucide
var lucideSize: Int by property(DEFAULT_SIZE)
var lucideLastCustomColor: String? by string()
var lucideRecentColors: String? by string()

// Bootstrap
var bootstrapSize: Int by property(DEFAULT_SIZE)
var bootstrapLastCustomColor: String? by string()
var bootstrapRecentColors: String? by string()

// Remix
var remixSize: Int by property(DEFAULT_SIZE)
var remixLastCustomColor: String? by string()
var remixRecentColors: String? by string()

// BoxIcons
var boxiconsSize: Int by property(DEFAULT_SIZE)
var boxiconsLastCustomColor: String? by string()
var boxiconsRecentColors: String? by string()

// Font Awesome
var fontAwesomeSize: Int by property(DEFAULT_SIZE)
var fontAwesomeLastCustomColor: String? by string()
var fontAwesomeRecentColors: String? by string()
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model.font.MaterialFontSettings.Companion.DEFAULT_GRADE
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model.font.MaterialFontSettings.Companion.DEFAULT_OPTICAL_SIZE
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.model.font.MaterialFontSettings.Companion.DEFAULT_WEIGHT
import io.github.composegears.valkyrie.ui.screen.webimport.standard.common.model.SizeSettings.Companion.DEFAULT_SIZE
import io.github.composegears.valkyrie.ui.screen.webimport.standard.common.model.SvgImportSettings.Companion.DEFAULT_SIZE
import java.util.Collections.emptyList
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
Expand Down Expand Up @@ -66,10 +66,20 @@ class InMemorySettings(project: Project) {
materialFontGrade = DEFAULT_GRADE
materialFontOpticalSize = DEFAULT_OPTICAL_SIZE
lucideSize = DEFAULT_SIZE
lucideLastCustomColor = ""
lucideRecentColors = ""
bootstrapSize = DEFAULT_SIZE
bootstrapLastCustomColor = ""
bootstrapRecentColors = ""
remixSize = DEFAULT_SIZE
remixLastCustomColor = ""
remixRecentColors = ""
boxiconsSize = DEFAULT_SIZE
boxiconsLastCustomColor = ""
boxiconsRecentColors = ""
fontAwesomeSize = DEFAULT_SIZE
fontAwesomeLastCustomColor = ""
fontAwesomeRecentColors = ""
}

fun updateUIState(uiState: SavedState) {
Expand Down Expand Up @@ -136,3 +146,14 @@ fun PersistentSettings.ValkyrieState.updateNestedPack(packs: List<String>) {
fun PersistentSettings.ValkyrieState.updateOutputFormat(format: OutputFormat) {
outputFormat = format.key
}

fun String?.toStringList(): List<String> {
return orEmpty()
.split(",")
.map(String::trim)
.filter(String::isNotEmpty)
}

fun List<String>.toPersistedString(): String {
return joinToString(separator = ",")
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.github.composegears.valkyrie.ui.screen.webimport.common.model

/**
* Common interface for icon settings that can be applied during web import.
* Implemented by both standard providers (SizeSettings) and Material (FontSettings).
* Implemented by both standard providers (SvgImportSettings) and Material (FontSettings).
*/
interface IconSettings {
val isModified: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import io.github.composegears.valkyrie.jewel.tooling.PreviewTheme
import io.github.composegears.valkyrie.sdk.compose.foundation.layout.CenterVerticalRow
import io.github.composegears.valkyrie.sdk.compose.foundation.layout.WeightSpacer
import io.github.composegears.valkyrie.sdk.compose.foundation.rememberMutableState
import io.github.composegears.valkyrie.ui.screen.webimport.standard.common.model.SizeSettings
import io.github.composegears.valkyrie.ui.screen.webimport.standard.common.model.SvgImportSettings
import io.github.composegears.valkyrie.util.stringResource
import kotlin.math.roundToInt
import org.jetbrains.compose.ui.tooling.preview.Preview
Expand All @@ -43,8 +43,8 @@ import org.jetbrains.jewel.ui.component.styling.LocalGroupHeaderStyle
*/
@Composable
fun IconSizeCustomization(
settings: SizeSettings,
onSettingsChange: (SizeSettings) -> Unit,
settings: SvgImportSettings,
onSettingsChange: (SvgImportSettings) -> Unit,
onClose: () -> Unit,
sizeLabel: String,
modifier: Modifier = Modifier,
Expand All @@ -55,8 +55,8 @@ fun IconSizeCustomization(
CustomizationToolbar(
onClose = onClose,
onReset = {
size = SizeSettings.DEFAULT_SIZE.toFloat()
onSettingsChange(SizeSettings())
size = SvgImportSettings.DEFAULT_SIZE.toFloat()
onSettingsChange(SvgImportSettings())
},
isModified = settings.isModified,
)
Expand All @@ -77,7 +77,7 @@ fun IconSizeCustomization(
size = it
onSettingsChange(settings.copy(size = size.roundToInt()))
},
valueRange = SizeSettings.MIN_SIZE.toFloat()..SizeSettings.MAX_SIZE.toFloat(),
valueRange = SvgImportSettings.MIN_SIZE.toFloat()..SvgImportSettings.MAX_SIZE.toFloat(),
)
}
}
Expand All @@ -87,7 +87,7 @@ fun IconSizeCustomization(
@Preview
@Composable
private fun IconSizeCustomizationPreview() = PreviewTheme(alignment = Alignment.TopEnd) {
var settings by rememberMutableState { SizeSettings() }
var settings by rememberMutableState { SvgImportSettings() }

IconSizeCustomization(
modifier = Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fun SidePanel(
)
Box(
modifier = Modifier
.widthIn(max = 250.dp)
.widthIn(max = 320.dp)
.fillMaxHeight()
.clip(RoundedCornerShape(topStart = 12.dp, bottomStart = 12.dp))
.background(JewelTheme.globalColors.borders.normal),
Expand Down
Loading
Loading