0
0
mirror of https://github.com/florisboard/florisboard.git synced 2024-09-19 19:42:20 +02:00

Move lib.snygg to separate module

This commit is contained in:
Patrick Goldinger 2024-07-05 19:43:00 +02:00
parent 6244198795
commit b0649b1b7e
No known key found for this signature in database
63 changed files with 406 additions and 308 deletions

View File

@ -208,6 +208,7 @@ dependencies {
implementation(project(":lib:android")) implementation(project(":lib:android"))
implementation(project(":lib:kotlin")) implementation(project(":lib:kotlin"))
implementation(project(":lib:native")) implementation(project(":lib:native"))
implementation(project(":lib:snygg"))
testImplementation(libs.equalsverifier) testImplementation(libs.equalsverifier)
testImplementation(libs.kotest.assertions.core) testImplementation(libs.kotest.assertions.core)

View File

@ -33,6 +33,7 @@ import dev.patrickgold.florisboard.ime.keyboard.KeyboardManager
import dev.patrickgold.florisboard.ime.media.emoji.FlorisEmojiCompat import dev.patrickgold.florisboard.ime.media.emoji.FlorisEmojiCompat
import dev.patrickgold.florisboard.ime.nlp.NlpManager import dev.patrickgold.florisboard.ime.nlp.NlpManager
import dev.patrickgold.florisboard.ime.text.gestures.GlideTypingManager import dev.patrickgold.florisboard.ime.text.gestures.GlideTypingManager
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.ThemeManager import dev.patrickgold.florisboard.ime.theme.ThemeManager
import dev.patrickgold.florisboard.lib.cache.CacheManager import dev.patrickgold.florisboard.lib.cache.CacheManager
import dev.patrickgold.florisboard.lib.crashutility.CrashUtility import dev.patrickgold.florisboard.lib.crashutility.CrashUtility
@ -60,6 +61,7 @@ class FlorisApplication : Application() {
System.loadLibrary("fl_native") System.loadLibrary("fl_native")
} catch (_: Exception) { } catch (_: Exception) {
} }
FlorisImeTheme.init()
} }
} }

View File

@ -105,13 +105,13 @@ import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.devtools.flogInfo import dev.patrickgold.florisboard.lib.devtools.flogInfo
import dev.patrickgold.florisboard.lib.devtools.flogWarning import dev.patrickgold.florisboard.lib.devtools.flogWarning
import dev.patrickgold.florisboard.lib.observeAsTransformingState import dev.patrickgold.florisboard.lib.observeAsTransformingState
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.SnyggSurface
import dev.patrickgold.florisboard.lib.snygg.ui.shape import org.florisboard.lib.snygg.ui.shape
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.lib.util.ViewUtils import dev.patrickgold.florisboard.lib.util.ViewUtils
import dev.patrickgold.florisboard.lib.util.debugSummarize import dev.patrickgold.florisboard.lib.util.debugSummarize
import dev.patrickgold.florisboard.lib.util.launchActivity import dev.patrickgold.florisboard.lib.util.launchActivity

View File

@ -49,7 +49,7 @@ import dev.patrickgold.florisboard.ime.theme.extCoreTheme
import org.florisboard.lib.android.isOrientationPortrait import org.florisboard.lib.android.isOrientationPortrait
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.observeAsTransformingState import dev.patrickgold.florisboard.lib.observeAsTransformingState
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.util.VersionName import dev.patrickgold.florisboard.lib.util.VersionName
import dev.patrickgold.jetpref.datastore.JetPref import dev.patrickgold.jetpref.datastore.JetPref
import dev.patrickgold.jetpref.datastore.model.PreferenceMigrationEntry import dev.patrickgold.jetpref.datastore.model.PreferenceMigrationEntry

View File

@ -23,7 +23,7 @@ import dev.patrickgold.florisboard.ime.text.key.KeyHintMode
import dev.patrickgold.florisboard.ime.text.key.UtilityKeyAction import dev.patrickgold.florisboard.ime.text.key.UtilityKeyAction
import dev.patrickgold.florisboard.ime.theme.ThemeMode import dev.patrickgold.florisboard.ime.theme.ThemeMode
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.jetpref.datastore.ui.ListPreferenceEntry import dev.patrickgold.jetpref.datastore.ui.ListPreferenceEntry
import dev.patrickgold.jetpref.datastore.ui.listPrefEntries import dev.patrickgold.jetpref.datastore.ui.listPrefEntries
import org.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat

View File

@ -83,7 +83,7 @@ import dev.patrickgold.florisboard.lib.ext.validate
import dev.patrickgold.florisboard.lib.io.FlorisRef import dev.patrickgold.florisboard.lib.io.FlorisRef
import dev.patrickgold.florisboard.lib.io.ZipUtils import dev.patrickgold.florisboard.lib.io.ZipUtils
import dev.patrickgold.florisboard.lib.rememberValidationResult import dev.patrickgold.florisboard.lib.rememberValidationResult
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetJsonConfig import org.florisboard.lib.snygg.SnyggStylesheetJsonConfig
import dev.patrickgold.florisboard.themeManager import dev.patrickgold.florisboard.themeManager
import dev.patrickgold.jetpref.datastore.ui.Preference import dev.patrickgold.jetpref.datastore.ui.Preference
import dev.patrickgold.jetpref.datastore.ui.vectorResource import dev.patrickgold.jetpref.datastore.ui.vectorResource

View File

@ -70,27 +70,27 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
import dev.patrickgold.florisboard.lib.rememberValidationResult import dev.patrickgold.florisboard.lib.rememberValidationResult
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec import org.florisboard.lib.snygg.SnyggPropertySetSpec
import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor import org.florisboard.lib.snygg.value.MaterialYouColor
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue import org.florisboard.lib.snygg.value.SnyggDefinedVarValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpShapeValue import org.florisboard.lib.snygg.value.SnyggDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue import org.florisboard.lib.snygg.value.SnyggDpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouValue import org.florisboard.lib.snygg.value.SnyggMaterialYouValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentShapeValue import org.florisboard.lib.snygg.value.SnyggPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggShapeValue import org.florisboard.lib.snygg.value.SnyggShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue import org.florisboard.lib.snygg.value.SnyggSpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue import org.florisboard.lib.snygg.value.SnyggValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValueEncoder import org.florisboard.lib.snygg.value.SnyggValueEncoder
import dev.patrickgold.florisboard.lib.snygg.value.SnyggVarValueEncoders import org.florisboard.lib.snygg.value.SnyggVarValueEncoders
import dev.patrickgold.florisboard.lib.stripUnicodeCtrlChars import dev.patrickgold.florisboard.lib.stripUnicodeCtrlChars
import dev.patrickgold.jetpref.material.ui.ExperimentalJetPrefMaterial3Ui import dev.patrickgold.jetpref.material.ui.ExperimentalJetPrefMaterial3Ui
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog

View File

@ -94,8 +94,8 @@ import dev.patrickgold.florisboard.lib.compose.FlorisIconButton
import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggRule import org.florisboard.lib.snygg.SnyggRule
import dev.patrickgold.florisboard.lib.util.InputMethodUtils import dev.patrickgold.florisboard.lib.util.InputMethodUtils
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
import org.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat

View File

@ -23,7 +23,7 @@ import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.app.enumDisplayEntriesOf
import dev.patrickgold.florisboard.app.florisPreferenceModel import dev.patrickgold.florisboard.app.florisPreferenceModel
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.jetpref.datastore.ui.ListPreference import dev.patrickgold.jetpref.datastore.ui.ListPreference
import dev.patrickgold.jetpref.datastore.ui.PreferenceLayout import dev.patrickgold.jetpref.datastore.ui.PreferenceLayout
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog

View File

@ -39,15 +39,15 @@ import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue import org.florisboard.lib.snygg.value.SnyggDefinedVarValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue import org.florisboard.lib.snygg.value.SnyggDpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouValue import org.florisboard.lib.snygg.value.SnyggMaterialYouValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggShapeValue import org.florisboard.lib.snygg.value.SnyggShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue import org.florisboard.lib.snygg.value.SnyggSpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue import org.florisboard.lib.snygg.value.SnyggValue
import dev.patrickgold.jetpref.material.ui.checkeredBackground import dev.patrickgold.jetpref.material.ui.checkeredBackground
object SnyggValueIcon { object SnyggValueIcon {

View File

@ -89,15 +89,6 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
import dev.patrickgold.florisboard.lib.rememberValidationResult import dev.patrickgold.florisboard.lib.rememberValidationResult
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetEditor
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec
import dev.patrickgold.florisboard.lib.snygg.SnyggRule
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetEditor
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetJsonConfig
import dev.patrickgold.florisboard.lib.snygg.definedVariablesRule
import dev.patrickgold.florisboard.lib.snygg.isDefinedVariablesRule
import dev.patrickgold.florisboard.themeManager import dev.patrickgold.florisboard.themeManager
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
@ -107,6 +98,15 @@ import kotlinx.coroutines.launch
import org.florisboard.lib.android.showLongToast import org.florisboard.lib.android.showLongToast
import org.florisboard.lib.kotlin.io.readJson import org.florisboard.lib.kotlin.io.readJson
import org.florisboard.lib.kotlin.io.subFile import org.florisboard.lib.kotlin.io.subFile
import org.florisboard.lib.snygg.SnyggLevel
import org.florisboard.lib.snygg.SnyggPropertySetEditor
import org.florisboard.lib.snygg.SnyggPropertySetSpec
import org.florisboard.lib.snygg.SnyggRule
import org.florisboard.lib.snygg.SnyggStylesheet
import org.florisboard.lib.snygg.SnyggStylesheetEditor
import org.florisboard.lib.snygg.SnyggStylesheetJsonConfig
import org.florisboard.lib.snygg.definedVariablesRule
import org.florisboard.lib.snygg.isDefinedVariablesRule
internal val IntListSaver = Saver<SnapshotStateList<Int>, ArrayList<Int>>( internal val IntListSaver = Saver<SnapshotStateList<Int>, ArrayList<Int>>(
save = { ArrayList(it) }, save = { ArrayList(it) },

View File

@ -23,27 +23,27 @@ import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.lib.UnicodeCtrlChar import dev.patrickgold.florisboard.lib.UnicodeCtrlChar
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.Snygg import org.florisboard.lib.snygg.Snygg
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggRule import org.florisboard.lib.snygg.SnyggRule
import dev.patrickgold.florisboard.lib.snygg.value.RgbaColor import org.florisboard.lib.snygg.value.RgbaColor
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCircleShapeValue import org.florisboard.lib.snygg.value.SnyggCircleShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue import org.florisboard.lib.snygg.value.SnyggDefinedVarValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue import org.florisboard.lib.snygg.value.SnyggDpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggExplicitInheritValue import org.florisboard.lib.snygg.value.SnyggExplicitInheritValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentageSizeValue import org.florisboard.lib.snygg.value.SnyggPercentageSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRectangleShapeValue import org.florisboard.lib.snygg.value.SnyggRectangleShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue import org.florisboard.lib.snygg.value.SnyggSpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue import org.florisboard.lib.snygg.value.SnyggValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValueEncoder import org.florisboard.lib.snygg.value.SnyggValueEncoder
import kotlin.math.roundToInt import kotlin.math.roundToInt
@Composable @Composable

View File

@ -105,14 +105,14 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.observeAsNonNullState import dev.patrickgold.florisboard.lib.observeAsNonNullState
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet import org.florisboard.lib.snygg.SnyggPropertySet
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.SnyggSurface
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import dev.patrickgold.florisboard.lib.snygg.ui.snyggClip import org.florisboard.lib.snygg.ui.snyggClip
import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.lib.util.NetworkUtils import dev.patrickgold.florisboard.lib.util.NetworkUtils
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState

View File

@ -57,7 +57,7 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.SnyggSurface
@SuppressLint("MutableCollectionMutableState") @SuppressLint("MutableCollectionMutableState")
@Composable @Composable

View File

@ -92,11 +92,11 @@ import org.florisboard.lib.android.systemService
import dev.patrickgold.florisboard.lib.compose.florisScrollbar import dev.patrickgold.florisboard.lib.compose.florisScrollbar
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@ -39,8 +39,8 @@ import dev.patrickgold.florisboard.ime.keyboard.FlorisImeSizing
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
@Composable @Composable
fun RowScope.OneHandedPanel( fun RowScope.OneHandedPanel(

View File

@ -43,12 +43,12 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.SnyggSurface
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
@Composable @Composable
fun PopupBaseBox( fun PopupBaseBox(

View File

@ -60,9 +60,9 @@ import org.florisboard.lib.android.AndroidVersion
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.observeAsNonNullState import dev.patrickgold.florisboard.lib.observeAsNonNullState
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.nlpManager import dev.patrickgold.florisboard.nlpManager
import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.florisboard.subtypeManager
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState

View File

@ -65,10 +65,10 @@ import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.compose.horizontalTween import dev.patrickgold.florisboard.lib.compose.horizontalTween
import dev.patrickgold.florisboard.lib.compose.verticalTween import dev.patrickgold.florisboard.lib.compose.verticalTween
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import dev.patrickgold.jetpref.datastore.ui.vectorResource import dev.patrickgold.jetpref.datastore.ui.vectorResource

View File

@ -62,11 +62,11 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.lib.snygg.ui.shape import org.florisboard.lib.snygg.ui.shape
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import dev.patrickgold.florisboard.lib.snygg.ui.snyggClip import org.florisboard.lib.snygg.ui.snyggClip
import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
private val BackgroundAnimationSpec = tween<Color>(durationMillis = 150, easing = FastOutSlowInEasing) private val BackgroundAnimationSpec = tween<Color>(durationMillis = 150, easing = FastOutSlowInEasing)
private val DebugHelperColor = Color.Red.copy(alpha = 0.5f) private val DebugHelperColor = Color.Red.copy(alpha = 0.5f)

View File

@ -66,11 +66,11 @@ import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.compose.FlorisIconButton import dev.patrickgold.florisboard.lib.compose.FlorisIconButton
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet import org.florisboard.lib.snygg.SnyggPropertySet
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.snyggClip import org.florisboard.lib.snygg.ui.snyggClip
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.lib.toIntOffset import dev.patrickgold.florisboard.lib.toIntOffset
private const val ItemNotFound = -1 private const val ItemNotFound = -1

View File

@ -39,8 +39,8 @@ import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggButton import org.florisboard.lib.snygg.ui.SnyggButton
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
@Composable @Composable

View File

@ -34,7 +34,7 @@ import dev.patrickgold.florisboard.ime.smartbar.SmartbarLayout
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
internal val ToggleOverflowPanelAction = QuickAction.InsertKey(TextKeyData.TOGGLE_ACTIONS_OVERFLOW) internal val ToggleOverflowPanelAction = QuickAction.InsertKey(TextKeyData.TOGGLE_ACTIONS_OVERFLOW)

View File

@ -42,7 +42,7 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyboardLayout
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
@Composable @Composable

View File

@ -91,10 +91,10 @@ import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.devtools.LogTopic import dev.patrickgold.florisboard.lib.devtools.LogTopic
import dev.patrickgold.florisboard.lib.devtools.flogDebug import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.observeAsTransformingState import dev.patrickgold.florisboard.lib.observeAsTransformingState
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.SnyggSurface
import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.lib.toIntOffset import dev.patrickgold.florisboard.lib.toIntOffset
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel

View File

@ -29,9 +29,14 @@ import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import dev.patrickgold.florisboard.ime.input.InputShiftState
import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.lib.observeAsNonNullState import dev.patrickgold.florisboard.lib.observeAsNonNullState
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet import org.florisboard.lib.snygg.SnyggStylesheet
import dev.patrickgold.florisboard.themeManager import dev.patrickgold.florisboard.themeManager
import org.florisboard.lib.snygg.Snygg
import org.florisboard.lib.snygg.ui.ProvideSnyggUiDefaults
import org.florisboard.lib.snygg.ui.SnyggUiDefaults
private val LocalConfig = staticCompositionLocalOf<ThemeExtensionComponent> { error("not init") } private val LocalConfig = staticCompositionLocalOf<ThemeExtensionComponent> { error("not init") }
private val LocalStyle = staticCompositionLocalOf<SnyggStylesheet> { error("not init") } private val LocalStyle = staticCompositionLocalOf<SnyggStylesheet> { error("not init") }
@ -59,6 +64,44 @@ object FlorisImeTheme {
fun fallbackContentColor(): Color { fun fallbackContentColor(): Color {
return if (config.isNightTheme) Color.White else Color.Black return if (config.isNightTheme) Color.White else Color.Black
} }
fun init() {
Snygg.init(
stylesheetSpec = FlorisImeUiSpec,
rulePreferredElementSorting = listOf(
FlorisImeUi.Keyboard,
FlorisImeUi.Key,
FlorisImeUi.KeyHint,
FlorisImeUi.KeyPopup,
FlorisImeUi.Smartbar,
FlorisImeUi.SmartbarSharedActionsRow,
FlorisImeUi.SmartbarSharedActionsToggle,
FlorisImeUi.SmartbarExtendedActionsRow,
FlorisImeUi.SmartbarExtendedActionsToggle,
FlorisImeUi.SmartbarActionKey,
FlorisImeUi.SmartbarActionTile,
FlorisImeUi.SmartbarActionsOverflow,
FlorisImeUi.SmartbarActionsOverflowCustomizeButton,
FlorisImeUi.SmartbarActionsEditor,
FlorisImeUi.SmartbarActionsEditorHeader,
FlorisImeUi.SmartbarActionsEditorSubheader,
FlorisImeUi.SmartbarCandidatesRow,
FlorisImeUi.SmartbarCandidateWord,
FlorisImeUi.SmartbarCandidateClip,
FlorisImeUi.SmartbarCandidateSpacer,
),
rulePlaceholders = mapOf(
"c:delete" to KeyCode.DELETE,
"c:enter" to KeyCode.ENTER,
"c:shift" to KeyCode.SHIFT,
"c:space" to KeyCode.SPACE,
"sh:unshifted" to InputShiftState.UNSHIFTED.value,
"sh:shifted_manual" to InputShiftState.SHIFTED_MANUAL.value,
"sh:shifted_automatic" to InputShiftState.SHIFTED_AUTOMATIC.value,
"sh:caps_lock" to InputShiftState.CAPS_LOCK.value,
),
)
}
} }
@Composable @Composable
@ -80,7 +123,12 @@ fun FlorisImeTheme(content: @Composable () -> Unit) {
LocalStyle provides activeStyle, LocalStyle provides activeStyle,
LocalTextStyle provides TextStyle.Default, LocalTextStyle provides TextStyle.Default,
) { ) {
content() val fallbackContentColor = FlorisImeTheme.fallbackContentColor()
val fallbackSurfaceColor = FlorisImeTheme.fallbackSurfaceColor()
val snyggUiDefaults = remember(fallbackContentColor, fallbackSurfaceColor) {
SnyggUiDefaults(fallbackContentColor, fallbackSurfaceColor)
}
ProvideSnyggUiDefaults(snyggUiDefaults, content)
} }
} }
} }

View File

@ -20,7 +20,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import dev.patrickgold.florisboard.ime.input.InputShiftState import dev.patrickgold.florisboard.ime.input.InputShiftState
import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet import org.florisboard.lib.snygg.SnyggStylesheet
val FlorisImeThemeBaseStyle = SnyggStylesheet { val FlorisImeThemeBaseStyle = SnyggStylesheet {
defines { defines {

View File

@ -16,21 +16,21 @@
package dev.patrickgold.florisboard.ime.theme package dev.patrickgold.florisboard.ime.theme
import dev.patrickgold.florisboard.lib.snygg.Snygg import org.florisboard.lib.snygg.Snygg
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import org.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpecBuilder import org.florisboard.lib.snygg.SnyggPropertySetSpecBuilder
import dev.patrickgold.florisboard.lib.snygg.SnyggSpec import org.florisboard.lib.snygg.SnyggSpec
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCircleShapeValue import org.florisboard.lib.snygg.value.SnyggCircleShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue import org.florisboard.lib.snygg.value.SnyggDpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRectangleShapeValue import org.florisboard.lib.snygg.value.SnyggRectangleShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue import org.florisboard.lib.snygg.value.SnyggSpSizeValue
fun SnyggPropertySetSpecBuilder.background() { fun SnyggPropertySetSpecBuilder.background() {
property( property(

View File

@ -18,7 +18,7 @@ package dev.patrickgold.florisboard.ime.theme
import dev.patrickgold.florisboard.lib.ext.ExtensionComponent import dev.patrickgold.florisboard.lib.ext.ExtensionComponent
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetEditor import org.florisboard.lib.snygg.SnyggStylesheetEditor
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable

View File

@ -47,11 +47,6 @@ import dev.patrickgold.florisboard.appContext
import dev.patrickgold.florisboard.extensionManager import dev.patrickgold.florisboard.extensionManager
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.io.ZipUtils import dev.patrickgold.florisboard.lib.io.ZipUtils
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetJsonConfig
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.util.ViewUtils import dev.patrickgold.florisboard.lib.util.ViewUtils
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -59,7 +54,11 @@ import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import kotlinx.serialization.decodeFromString import org.florisboard.lib.snygg.SnyggStylesheet
import org.florisboard.lib.snygg.SnyggStylesheetJsonConfig
import org.florisboard.lib.snygg.ui.solidColor
import org.florisboard.lib.snygg.value.MaterialYouColor
import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import kotlin.properties.Delegates import kotlin.properties.Delegates
/** /**

View File

@ -30,7 +30,7 @@ import androidx.core.view.WindowInsetsControllerCompat
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import org.florisboard.lib.android.AndroidVersion import org.florisboard.lib.android.AndroidVersion
import dev.patrickgold.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
@Composable @Composable

View File

@ -20,17 +20,17 @@ import androidx.core.text.trimmedLength
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.ime.theme.ThemeExtensionComponent import dev.patrickgold.florisboard.ime.theme.ThemeExtensionComponent
import dev.patrickgold.florisboard.lib.ValidationRule import dev.patrickgold.florisboard.lib.ValidationRule
import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet import org.florisboard.lib.snygg.SnyggStylesheet
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpShapeValue import org.florisboard.lib.snygg.value.SnyggDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentShapeValue import org.florisboard.lib.snygg.value.SnyggPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.validate import dev.patrickgold.florisboard.lib.validate
import org.florisboard.lib.snygg.value.SnyggVarValue
object ExtensionValidation { object ExtensionValidation {
private val MetaIdRegex = """^[a-z][a-z0-9_]*(\.[a-z0-9][a-z0-9_]*)*${'$'}""".toRegex() private val MetaIdRegex = """^[a-z][a-z0-9_]*(\.[a-z0-9][a-z0-9_]*)*${'$'}""".toRegex()
private val ComponentIdRegex = """^[a-z][a-z0-9_]*${'$'}""".toRegex() private val ComponentIdRegex = """^[a-z][a-z0-9_]*${'$'}""".toRegex()
private val ThemeComponentStylesheetPathRegex = """^[^:*<>"']*${'$'}""".toRegex() private val ThemeComponentStylesheetPathRegex = """^[^:*<>"']*${'$'}""".toRegex()
val ThemeComponentVariableNameRegex = """^[a-zA-Z0-9-_]+${'$'}""".toRegex()
val MetaId = ValidationRule<String> { val MetaId = ValidationRule<String> {
forKlass = ExtensionMeta::class forKlass = ExtensionMeta::class
@ -148,8 +148,8 @@ object ExtensionValidation {
when { when {
str.isBlank() -> resultInvalid(error = R.string.ext__validation__enter_property) str.isBlank() -> resultInvalid(error = R.string.ext__validation__enter_property)
str == "-" || str.startsWith("--") -> resultValid() str == "-" || str.startsWith("--") -> resultValid()
!ThemeComponentVariableNameRegex.matches(str) -> { !SnyggVarValue.VariableNameRegex.matches(str) -> {
resultInvalid(error = R.string.ext__validation__error_property, "variable_name_regex" to ThemeComponentVariableNameRegex) resultInvalid(error = R.string.ext__validation__error_property, "variable_name_regex" to SnyggVarValue.VariableNameRegex)
} }
else -> resultValid(hint = R.string.ext__validation__hint_property) else -> resultValid(hint = R.string.ext__validation__hint_property)
} }
@ -163,7 +163,7 @@ object ExtensionValidation {
val str = input.trim() val str = input.trim()
when { when {
str.isBlank() -> resultInvalid(error = R.string.ext__validation__enter_color) str.isBlank() -> resultInvalid(error = R.string.ext__validation__enter_color)
dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue.deserialize(str).isFailure -> { org.florisboard.lib.snygg.value.SnyggSolidColorValue.deserialize(str).isFailure -> {
resultInvalid(error = R.string.ext__validation__error_color) resultInvalid(error = R.string.ext__validation__error_color)
} }
else -> resultValid() else -> resultValid()

View File

@ -1,4 +1,4 @@
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
import io.kotest.core.spec.style.FunSpec import io.kotest.core.spec.style.FunSpec
import io.kotest.data.forAll import io.kotest.data.forAll

View File

@ -1,4 +1,4 @@
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp

View File

@ -1,6 +1,7 @@
plugins { plugins {
alias(libs.plugins.agp.library) alias(libs.plugins.agp.library)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.serialization)
} }
val projectMinSdk: String by project val projectMinSdk: String by project

View File

@ -1,24 +0,0 @@
package org.florisboard.lib.android
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("org.florisboard.lib.android.test", appContext.packageName)
}
}

View File

@ -1,17 +0,0 @@
package org.florisboard.lib.android
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}

1
lib/snygg/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,53 @@
plugins {
alias(libs.plugins.agp.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.serialization)
}
val projectMinSdk: String by project
val projectCompileSdk: String by project
android {
namespace = "org.florisboard.lib.snygg"
compileSdk = projectCompileSdk.toInt()
defaultConfig {
minSdk = projectMinSdk.toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get()
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation(project(":lib:android"))
implementation(project(":lib:kotlin"))
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.ui)
implementation(libs.kotlinx.serialization.json)
}

View File

21
lib/snygg/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
/** /**
* Main object for defining all known Snygg property names. * Main object for defining all known Snygg property names.
@ -41,4 +41,14 @@ object Snygg {
const val ShadowElevation = "shadow-elevation" const val ShadowElevation = "shadow-elevation"
const val Shape = "shape" const val Shape = "shape"
fun init(
stylesheetSpec: SnyggSpec,
rulePreferredElementSorting: List<String>,
rulePlaceholders: Map<String, Int>,
) {
SnyggStylesheetSerializer.GlobalStylesheetSpec = stylesheetSpec
SnyggRule.PreferredElementSorting = rulePreferredElementSorting
SnyggRule.Placeholders = rulePlaceholders
}
} }

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
/** /**
* SnyggLevel indicates if a rule property is intended to be edited by all users (BASIC) or only by advanced users * SnyggLevel indicates if a rule property is intended to be edited by all users (BASIC) or only by advanced users

View File

@ -14,28 +14,28 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
import androidx.annotation.FloatRange import androidx.annotation.FloatRange
import androidx.annotation.IntRange import androidx.annotation.IntRange
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnit
import dev.patrickgold.florisboard.lib.snygg.value.RgbaColor import org.florisboard.lib.snygg.value.RgbaColor
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCircleShapeValue import org.florisboard.lib.snygg.value.SnyggCircleShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue import org.florisboard.lib.snygg.value.SnyggDefinedVarValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue import org.florisboard.lib.snygg.value.SnyggDpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggImageRefValue import org.florisboard.lib.snygg.value.SnyggImageRefValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentageSizeValue import org.florisboard.lib.snygg.value.SnyggPercentageSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRectangleShapeValue import org.florisboard.lib.snygg.value.SnyggRectangleShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue import org.florisboard.lib.snygg.value.SnyggSpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue import org.florisboard.lib.snygg.value.SnyggValue
class SnyggPropertySet(val properties: Map<String, SnyggValue>) { class SnyggPropertySet(val properties: Map<String, SnyggValue>) {
val width = properties[Snygg.Width] ?: SnyggImplicitInheritValue val width = properties[Snygg.Width] ?: SnyggImplicitInheritValue

View File

@ -14,12 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.Saver
import dev.patrickgold.florisboard.ime.input.InputShiftState
import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveKind
@ -60,39 +57,9 @@ data class SnyggRule(
private val RuleValidator = private val RuleValidator =
"""^(@?)[a-zA-Z0-9-]+(\[(code|group|shiftstate)=(\+|-)?([0-9]+)(\|(\+|-)?([0-9]+))*\])*(:(pressed|focus|disabled))*${'$'}""".toRegex() """^(@?)[a-zA-Z0-9-]+(\[(code|group|shiftstate)=(\+|-)?([0-9]+)(\|(\+|-)?([0-9]+))*\])*(:(pressed|focus|disabled))*${'$'}""".toRegex()
val Placeholders = mapOf( var Placeholders = mapOf<String, Int>()
"c:delete" to KeyCode.DELETE,
"c:enter" to KeyCode.ENTER,
"c:shift" to KeyCode.SHIFT,
"c:space" to KeyCode.SPACE,
"sh:unshifted" to InputShiftState.UNSHIFTED.value,
"sh:shifted_manual" to InputShiftState.SHIFTED_MANUAL.value,
"sh:shifted_automatic" to InputShiftState.SHIFTED_AUTOMATIC.value,
"sh:caps_lock" to InputShiftState.CAPS_LOCK.value,
)
private val PreferredElementSorting = listOf( internal var PreferredElementSorting = listOf<String>()
FlorisImeUi.Keyboard,
FlorisImeUi.Key,
FlorisImeUi.KeyHint,
FlorisImeUi.KeyPopup,
FlorisImeUi.Smartbar,
FlorisImeUi.SmartbarSharedActionsRow,
FlorisImeUi.SmartbarSharedActionsToggle,
FlorisImeUi.SmartbarExtendedActionsRow,
FlorisImeUi.SmartbarExtendedActionsToggle,
FlorisImeUi.SmartbarActionKey,
FlorisImeUi.SmartbarActionTile,
FlorisImeUi.SmartbarActionsOverflow,
FlorisImeUi.SmartbarActionsOverflowCustomizeButton,
FlorisImeUi.SmartbarActionsEditor,
FlorisImeUi.SmartbarActionsEditorHeader,
FlorisImeUi.SmartbarActionsEditorSubheader,
FlorisImeUi.SmartbarCandidatesRow,
FlorisImeUi.SmartbarCandidateWord,
FlorisImeUi.SmartbarCandidateClip,
FlorisImeUi.SmartbarCandidateSpacer,
)
val Saver = Saver<SnyggRule?, String>( val Saver = Saver<SnyggRule?, String>(
save = { it?.toString() ?: "" }, save = { it?.toString() ?: "" },

View File

@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue import org.florisboard.lib.snygg.value.SnyggDefinedVarValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggExplicitInheritValue import org.florisboard.lib.snygg.value.SnyggExplicitInheritValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValueEncoder import org.florisboard.lib.snygg.value.SnyggValueEncoder
open class SnyggSpec(init: SnyggSpecBuilder.() -> Unit) { open class SnyggSpec(init: SnyggSpecBuilder.() -> Unit) {
val elements: Map<String, SnyggPropertySetSpec> val elements: Map<String, SnyggPropertySetSpec>

View File

@ -14,15 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg package org.florisboard.lib.snygg
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import dev.patrickgold.florisboard.ime.theme.FlorisImeUiSpec
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggVarValueEncoders
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.MapSerializer import kotlinx.serialization.builtins.MapSerializer
@ -30,6 +25,10 @@ import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.florisboard.lib.snygg.value.SnyggDefinedVarValue
import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue
import org.florisboard.lib.snygg.value.SnyggValue
import org.florisboard.lib.snygg.value.SnyggVarValueEncoders
val SnyggStylesheetJsonConfig = Json val SnyggStylesheetJsonConfig = Json
@ -251,6 +250,10 @@ class SnyggStylesheetSerializer : KSerializer<SnyggStylesheet> {
override val descriptor = ruleMapSerializer.descriptor override val descriptor = ruleMapSerializer.descriptor
companion object {
var GlobalStylesheetSpec: SnyggSpec? = null
}
override fun serialize(encoder: Encoder, value: SnyggStylesheet) { override fun serialize(encoder: Encoder, value: SnyggStylesheet) {
val rawRuleMap = value.rules.mapValues { (_, propertySet) -> val rawRuleMap = value.rules.mapValues { (_, propertySet) ->
propertySet.properties.mapValues { (_, snyggValue) -> propertySet.properties.mapValues { (_, snyggValue) ->
@ -264,8 +267,8 @@ class SnyggStylesheetSerializer : KSerializer<SnyggStylesheet> {
val rawRuleMap = ruleMapSerializer.deserialize(decoder) val rawRuleMap = ruleMapSerializer.deserialize(decoder)
val ruleMap = mutableMapOf<SnyggRule, SnyggPropertySet>() val ruleMap = mutableMapOf<SnyggRule, SnyggPropertySet>()
for ((rule, rawProperties) in rawRuleMap) { for ((rule, rawProperties) in rawRuleMap) {
// FIXME: hardcoding which spec to use, the selection should happen dynamically val stylesheetSpec = GlobalStylesheetSpec ?:
val stylesheetSpec = FlorisImeUiSpec throw IllegalStateException("No global stylesheet spec defined")
if (rule.isDefinedVariablesRule()) { if (rule.isDefinedVariablesRule()) {
val parsedProperties = rawProperties.mapValues { (_, rawValue) -> val parsedProperties = rawProperties.mapValues { (_, rawValue) ->
SnyggVarValueEncoders.firstNotNullOfOrNull { it.deserialize(rawValue).getOrNull() } SnyggVarValueEncoders.firstNotNullOfOrNull { it.deserialize(rawValue).getOrNull() }

View File

@ -14,24 +14,23 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.ui package org.florisboard.lib.snygg.ui
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.Button import androidx.compose.material3.Button
import androidx.compose.material.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import org.florisboard.lib.snygg.SnyggPropertySet
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet
@Composable @Composable
fun SnyggButton( fun SnyggButton(
@ -44,6 +43,7 @@ fun SnyggButton(
contentPadding: PaddingValues = ButtonDefaults.ContentPadding, contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
) { ) {
val context = LocalContext.current val context = LocalContext.current
val uiDefaults = LocalSnyggUiDefaults.current
val border = remember (style) { val border = remember (style) {
BorderStroke(style.borderWidth.dpSize(default = 0.dp), style.borderColor.solidColor(context)) BorderStroke(style.borderWidth.dpSize(default = 0.dp), style.borderColor.solidColor(context))
} }
@ -51,7 +51,7 @@ fun SnyggButton(
Button( Button(
modifier = modifier, modifier = modifier,
enabled = enabled, enabled = enabled,
elevation = ButtonDefaults.elevation( elevation = ButtonDefaults.buttonElevation(
defaultElevation = elevation, defaultElevation = elevation,
pressedElevation = elevation, pressedElevation = elevation,
disabledElevation = elevation, disabledElevation = elevation,
@ -61,8 +61,8 @@ fun SnyggButton(
shape = style.shape.shape(), shape = style.shape.shape(),
border = border, border = border,
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
backgroundColor = style.background.solidColor(context, default = FlorisImeTheme.fallbackContentColor()), containerColor = style.background.solidColor(context, default = uiDefaults.fallbackContentColor),
contentColor = style.foreground.solidColor(context, default = FlorisImeTheme.fallbackSurfaceColor()), contentColor = style.foreground.solidColor(context, default = uiDefaults.fallbackSurfaceColor),
), ),
contentPadding = contentPadding, contentPadding = contentPadding,
onClick = onClick, onClick = onClick,

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.ui package org.florisboard.lib.snygg.ui
import android.content.Context import android.content.Context
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -30,14 +30,13 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.takeOrElse import androidx.compose.ui.unit.takeOrElse
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet import org.florisboard.lib.snygg.SnyggPropertySet
import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue import org.florisboard.lib.snygg.value.SnyggDpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue import org.florisboard.lib.snygg.value.SnyggMaterialYouValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouValue import org.florisboard.lib.snygg.value.SnyggShapeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggShapeValue import org.florisboard.lib.snygg.value.SnyggSolidColorValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import org.florisboard.lib.snygg.value.SnyggSpSizeValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue import org.florisboard.lib.snygg.value.SnyggValue
import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue
fun Modifier.snyggBackground( fun Modifier.snyggBackground(
context: Context, context: Context,

View File

@ -14,22 +14,21 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.ui package org.florisboard.lib.snygg.ui
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.LocalAbsoluteElevation import androidx.compose.material3.LocalAbsoluteTonalElevation
import androidx.compose.material.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.takeOrElse import androidx.compose.ui.unit.takeOrElse
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import org.florisboard.lib.snygg.SnyggPropertySet
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet
val NoContentPadding = PaddingValues(all = 0.dp) val NoContentPadding = PaddingValues(all = 0.dp)
@ -43,12 +42,13 @@ fun SnyggSurface(
content: @Composable BoxScope.() -> Unit, content: @Composable BoxScope.() -> Unit,
) { ) {
val context = LocalContext.current val context = LocalContext.current
val uiDefaults = LocalSnyggUiDefaults.current
val elevationDp = style.shadowElevation.dpSize().takeOrElse { 0.dp }.coerceAtLeast(0.dp) val elevationDp = style.shadowElevation.dpSize().takeOrElse { 0.dp }.coerceAtLeast(0.dp)
val contentColor = style.foreground.solidColor(context, default = FlorisImeTheme.fallbackContentColor()) val contentColor = style.foreground.solidColor(context, default = uiDefaults.fallbackContentColor)
val absoluteElevation = LocalAbsoluteElevation.current + elevationDp val absoluteElevation = LocalAbsoluteTonalElevation.current + elevationDp
CompositionLocalProvider( CompositionLocalProvider(
LocalContentColor provides contentColor, LocalContentColor provides contentColor,
LocalAbsoluteElevation provides absoluteElevation, LocalAbsoluteTonalElevation provides absoluteElevation,
) { ) {
Box( Box(
modifier = modifier modifier = modifier

View File

@ -0,0 +1,27 @@
package org.florisboard.lib.snygg.ui
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.graphics.Color
data class SnyggUiDefaults(
val fallbackContentColor: Color,
val fallbackSurfaceColor: Color,
)
internal val LocalSnyggUiDefaults = staticCompositionLocalOf {
SnyggUiDefaults(
fallbackContentColor = Color.Black,
fallbackSurfaceColor = Color.White,
)
}
@Composable fun ProvideSnyggUiDefaults(
defaults: SnyggUiDefaults,
content: @Composable () -> Unit,
) {
CompositionLocalProvider(LocalSnyggUiDefaults provides defaults) {
content()
}
}

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import kotlin.math.roundToInt import kotlin.math.roundToInt

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@JvmInline @JvmInline

View File

@ -14,17 +14,17 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import android.content.Context import android.content.Context
import androidx.compose.material3.ColorScheme import androidx.compose.material3.ColorScheme
import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.ColorName import org.florisboard.lib.snygg.value.MaterialYouColor.ColorName
import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.ColorNameId import org.florisboard.lib.snygg.value.MaterialYouColor.ColorNameId
import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.darkColorName import org.florisboard.lib.snygg.value.MaterialYouColor.darkColorName
import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.lightColorName import org.florisboard.lib.snygg.value.MaterialYouColor.lightColorName
sealed interface SnyggMaterialYouValue : SnyggValue { sealed interface SnyggMaterialYouValue : SnyggValue {
val colorName: String val colorName: String

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
private const val RelPath = "relPath" private const val RelPath = "relPath"
private const val ImageFunction = "image" private const val ImageFunction = "image"

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.CutCornerShape import androidx.compose.foundation.shape.CutCornerShape

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnit

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import org.florisboard.lib.android.AndroidVersion import org.florisboard.lib.android.AndroidVersion

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
/** /**
* SnyggValueEncoder is responsible for the representation of a [SnyggValue] specification and for providing methods * SnyggValueEncoder is responsible for the representation of a [SnyggValue] specification and for providing methods

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import org.florisboard.lib.kotlin.toStringWithoutDotZero import org.florisboard.lib.kotlin.toStringWithoutDotZero

View File

@ -14,18 +14,20 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.snygg.value package org.florisboard.lib.snygg.value
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
private const val VarKey = "varKey" private const val VarKey = "varKey"
sealed interface SnyggVarValue : SnyggValue sealed interface SnyggVarValue : SnyggValue {
companion object {
val VariableNameRegex = """^[a-zA-Z0-9-_]+${'$'}""".toRegex()
}
}
data class SnyggDefinedVarValue(val key: String) : SnyggVarValue { data class SnyggDefinedVarValue(val key: String) : SnyggVarValue {
companion object : SnyggValueEncoder { companion object : SnyggValueEncoder {
override val spec = SnyggValueSpec { override val spec = SnyggValueSpec {
function(name = "var") { string(id = VarKey, regex = ExtensionValidation.ThemeComponentVariableNameRegex) } function(name = "var") { string(id = VarKey, regex = SnyggVarValue.VariableNameRegex) }
} }
override fun defaultValue() = SnyggDefinedVarValue("") override fun defaultValue() = SnyggDefinedVarValue("")

View File

@ -38,3 +38,4 @@ include(":benchmark")
include(":lib:android") include(":lib:android")
include(":lib:kotlin") include(":lib:kotlin")
include(":lib:native") include(":lib:native")
include(":lib:snygg")