From 5819e5e4b1babcf80c7669854967e99e2fde0f75 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-glass-apple 0.1.0 Signed-off-by: flemming-it --- .gitignore | 2 + Cargo.toml | 32 +++++++++++++++ MODULE.de.md | 8 ++++ MODULE.md | 21 ++++++++++ README.md | 22 +++++++++++ module.wasm | Bin 0 -> 53624 bytes module.yaml | 17 ++++++++ rust-toolchain.toml | 4 ++ src/lib.rs | 94 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 200 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..d89bef7 --- /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_glass_apple.wasm + +[package] +name = "studio_theme_glass_apple" +version = "0.1.0" +edition = "2021" +authors = ["Dr. Stefan Flemming "] +license = "Apache-2.0" +publish = false +description = "F∆I Studio plugin — Cool neutral Apple-system-inspired Studio theme." +repository = "https://git.flemming.ai/fai-plugins/studio-theme-glass-apple" +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..cc09f0c --- /dev/null +++ b/MODULE.de.md @@ -0,0 +1,8 @@ +# glass-apple + +Klares Apple-inspiriertes Neutral-Theme. + +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..d356c32 --- /dev/null +++ b/MODULE.md @@ -0,0 +1,21 @@ +# glass-apple + +Cool neutral Apple-system-inspired 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 + +- Operators on macOS who want the UI to blend with the rest + of their environment +- Anyone who values the SF / Apple system palette as a + pre-tested, accessible baseline +- Demo + screenshot work where the UI needs to look at + home next to other Mac apps + +Combined with FaiEditorStyle.modern (frosted-glass panels ++ gradient backdrop), this is the closest the editor gets +to native-macOS look. diff --git a/README.md b/README.md new file mode 100644 index 0000000..691c49c --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# studio-theme-glass-apple + +Cool neutral Apple-system-inspired Studio theme. + +Ships a Material 3 ColorScheme pair (light + dark) through +the WIT `theme` export. Studio loads it as a +`studio.theme.glass_apple` 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_glass_apple.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..1c8744476b0d7ef9beaf490a58793455bae24afc GIT binary patch literal 53624 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 literal 0 HcmV?d00001 diff --git a/module.yaml b/module.yaml new file mode 100644 index 0000000..4620b49 --- /dev/null +++ b/module.yaml @@ -0,0 +1,17 @@ +schema_version: 3 +provider: fai +name: studio-theme-glass-apple +version: 0.1.0 + +provides: + - capability: studio.theme.glass_apple + version: 0.1.0 + +inputs: {} +outputs: {} + +permissions: [] + +studio_extension: + hooks: + - theme diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..32add0c --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "1.86" +targets = ["wasm32-wasip2"] +components = ["rustfmt", "clippy"] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..410fc74 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,94 @@ +//! `studio.theme.glass-apple` — clean, neutral, frosted-glass +//! Studio theme inspired by Apple's macOS system palette. +//! +//! Cool grays, blue accent, indigo + green + red system +//! colours. Pairs cleanly with FaiEditorStyle.modern (frosted +//! panel + gradient backdrop) for the "Apple sidebar" feel. +//! Light mode reads as a sunlit studio; dark mode reads as +//! a quiet evening workspace. + +#![allow(clippy::result_large_err)] + +use fai_plugin_sdk::{bindings, export_plugin}; + +type ColorScheme = bindings::fai::studio_plugin::plugin_types::ColorScheme; +type PluginError = bindings::fai::studio_plugin::plugin_types::PluginError; +type RenderedOutput = bindings::fai::studio_plugin::plugin_types::RenderedOutput; + +const GLASS_APPLE_LIGHT: [u32; 14] = [ + 0xFF007AFF, // primary — Apple system blue + 0xFFFFFFFF, // on_primary + 0xFF5856D6, // secondary — Apple system indigo + 0xFFFFFFFF, // on_secondary + 0xFF34C759, // tertiary — Apple system green + 0xFFFFFFFF, // on_tertiary + 0xFFFF3B30, // error — Apple system red + 0xFFFFFFFF, // on_error + 0xFFF2F2F7, // surface — Apple system gray 6 light + 0xFF1C1C1E, // on_surface + 0xFFE5E5EA, // surface_variant — Apple system gray 5 light + 0xFF3A3A3C, // on_surface_variant + 0xFFC7C7CC, // outline + 0xFFD1D1D6, // outline_variant +]; + +const GLASS_APPLE_DARK: [u32; 14] = [ + 0xFF0A84FF, // primary — Apple system blue dark + 0xFFFFFFFF, // on_primary + 0xFF5E5CE6, // secondary — Apple system indigo dark + 0xFFFFFFFF, // on_secondary + 0xFF30D158, // tertiary — Apple system green dark + 0xFF003800, // on_tertiary + 0xFFFF453A, // error — Apple system red dark + 0xFFFFFFFF, // on_error + 0xFF1C1C1E, // surface — Apple system gray 6 dark + 0xFFFFFFFF, // on_surface + 0xFF2C2C2E, // surface_variant — Apple system gray 5 dark + 0xFFEBEBF5, // on_surface_variant + 0xFF48484A, // outline + 0xFF3A3A3C, // outline_variant +]; + +struct GlassApplePlugin; + +impl bindings::exports::fai::studio_plugin::theme::Guest for GlassApplePlugin { + fn theme_for(brightness: String) -> Result { + let tokens = match brightness.as_str() { + "light" => GLASS_APPLE_LIGHT.to_vec(), + "dark" => GLASS_APPLE_DARK.to_vec(), + other => { + return Err(PluginError::Declined(format!( + "glass-apple has no scheme for brightness '{other}' \ + (supported: light, dark)" + ))); + } + }; + Ok(ColorScheme { brightness, tokens }) + } +} + +impl bindings::exports::fai::studio_plugin::translate::Guest for GlassApplePlugin { + fn translate( + _text: String, + _from_locale: String, + _to_locale: String, + ) -> Result { + Err(PluginError::Declined( + "glass-apple is a theme plugin and does not translate".to_string(), + )) + } +} + +impl bindings::exports::fai::studio_plugin::output_view::Guest for GlassApplePlugin { + fn render( + _mime_type: String, + _data: Vec, + ) -> Result { + Err(PluginError::Declined( + "glass-apple is a theme plugin and does not render outputs" + .to_string(), + )) + } +} + +export_plugin!(GlassApplePlugin);