From df89d9ae795384c6469b308ddf3829b07bace138 Mon Sep 17 00:00:00 2001 From: flemming-it Date: Tue, 2 Jun 2026 01:35:53 +0200 Subject: [PATCH] chore: initial studio-theme-sunflower 0.1.0 Signed-off-by: flemming-it --- .gitignore | 2 + Cargo.toml | 32 +++++++++++++++ MODULE.de.md | 8 ++++ MODULE.md | 18 +++++++++ README.md | 22 +++++++++++ module.wasm | Bin 0 -> 53616 bytes module.yaml | 17 ++++++++ rust-toolchain.toml | 4 ++ src/lib.rs | 93 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 196 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 MODULE.de.md create mode 100644 MODULE.md create mode 100644 README.md create mode 100644 module.wasm create mode 100644 module.yaml create mode 100644 rust-toolchain.toml create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2c96eb1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +target/ +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..44a5429 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,32 @@ +# Standalone Cargo.toml — targets wasm32-wasip2. +# +# Build: +# cargo build --release --target wasm32-wasip2 +# +# Output: target/wasm32-wasip2/release/studio_theme_sunflower.wasm + +[package] +name = "studio_theme_sunflower" +version = "0.1.0" +edition = "2021" +authors = ["Dr. Stefan Flemming "] +license = "Apache-2.0" +publish = false +description = "F∆I Studio plugin — Warm, optimistic yellow / amber Studio theme." +repository = "https://git.flemming.ai/fai-plugins/studio-theme-sunflower" +rust-version = "1.85" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +fai-plugin-sdk = { path = "../../fai_plugin_sdk_rust" } + +[package.metadata.component] +package = "fai:studio-plugin" + +[profile.release] +opt-level = "s" +lto = true +codegen-units = 1 +strip = true diff --git a/MODULE.de.md b/MODULE.de.md new file mode 100644 index 0000000..b07d848 --- /dev/null +++ b/MODULE.de.md @@ -0,0 +1,8 @@ +# sunflower + +Warmer, optimistischer Gelb-/Amber-Look für Studio. + +Eines der mit F∆I Studio gelieferten Theme-Plugins. Nach +Installation erscheint es unter **Einstellungen → Themes** +neben den eingebauten Hell- und Dunkel-Themes. Auswahl +schaltet die gesamte Studio-Oberfläche um — ohne Neustart. diff --git a/MODULE.md b/MODULE.md new file mode 100644 index 0000000..d3901bd --- /dev/null +++ b/MODULE.md @@ -0,0 +1,18 @@ +# sunflower + +Warm, optimistic yellow / amber Studio theme. + +This is one of F∆I Studio's bundled theme plugins. When +installed, it appears in **Settings → Themes** alongside the +built-in light and dark themes. Select it and the entire +Studio UI re-themes immediately — no restart required. + +## When to pick this theme + +- Long working sessions on bright displays +- Print-friendly previews +- When the platform's default cool palette feels clinical + +The amber primary stays readable under direct sunlight; the +cream surface is easier on the eyes than pure white for +extended use. diff --git a/README.md b/README.md new file mode 100644 index 0000000..26388bc --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# studio-theme-sunflower + +Warm, optimistic yellow / amber Studio theme. + +Ships a Material 3 ColorScheme pair (light + dark) through +the WIT `theme` export. Studio loads it as a +`studio.theme.sunflower` capability and switches the app's +ColorScheme when the operator picks it from the themes +picker. + +## Build + +```bash +cargo build --release --target wasm32-wasip2 +``` + +Output: `target/wasm32-wasip2/release/studio_theme_sunflower.wasm`. + +## Palette + +See `src/lib.rs` for the 14 ARGB tokens per brightness, in +Material 3 order (primary → on_primary → … → outline_variant). diff --git a/module.wasm b/module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8c5cecb27edd6b7da2e437897990f95308cfb347 GIT binary patch literal 53616 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 Result { + let tokens = match brightness.as_str() { + "light" => SUNFLOWER_LIGHT.to_vec(), + "dark" => SUNFLOWER_DARK.to_vec(), + other => { + return Err(PluginError::Declined(format!( + "sunflower has no scheme for brightness '{other}' \ + (supported: light, dark)" + ))); + } + }; + Ok(ColorScheme { brightness, tokens }) + } +} + +impl bindings::exports::fai::studio_plugin::translate::Guest for SunflowerPlugin { + fn translate( + _text: String, + _from_locale: String, + _to_locale: String, + ) -> Result { + Err(PluginError::Declined( + "sunflower is a theme plugin and does not translate".to_string(), + )) + } +} + +impl bindings::exports::fai::studio_plugin::output_view::Guest for SunflowerPlugin { + fn render( + _mime_type: String, + _data: Vec, + ) -> Result { + Err(PluginError::Declined( + "sunflower is a theme plugin and does not render outputs".to_string(), + )) + } +} + +export_plugin!(SunflowerPlugin);