//! `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 chain_plugin_sdk::{bindings, export_plugin}; type ColorScheme = bindings::chain::studio_plugin::plugin_types::ColorScheme; type PluginError = bindings::chain::studio_plugin::plugin_types::PluginError; type RenderedOutput = bindings::chain::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::chain::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::chain::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::chain::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);