//! `studio.theme.sunflower` — warm, optimistic Studio theme. //! //! Yellow / amber / cream tones designed to feel like working //! at a sunlit kitchen table. Pairs a saturated amber primary //! with deep walnut text in light mode; a golden-amber primary //! over a near-black surface in dark mode. #![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; /// 14 ARGB tokens, Material 3 order. See the SDK docs for /// the canonical slot ordering. const SUNFLOWER_LIGHT: [u32; 14] = [ 0xFFFFB300, // primary — amber 600 0xFF1B1300, // on_primary — espresso 0xFFFF6F00, // secondary — orange 900 0xFF1B1300, // on_secondary 0xFF8BC34A, // tertiary — leaf green 0xFF1B2900, // on_tertiary 0xFFC62828, // error 0xFFFFFFFF, // on_error 0xFFFFFAF0, // surface — floral white 0xFF2C1F00, // on_surface — dark walnut 0xFFFFF3D6, // surface_variant — light cream 0xFF6B4F00, // on_surface_variant 0xFFC9A86B, // outline 0xFFE6D6A8, // outline_variant ]; const SUNFLOWER_DARK: [u32; 14] = [ 0xFFFFCA28, // primary — amber 400 0xFF2C1F00, // on_primary 0xFFFFA726, // secondary — orange 400 0xFF2C1F00, // on_secondary 0xFFAED581, // tertiary — light green 300 0xFF1B2900, // on_tertiary 0xFFEF5350, // error 0xFF2C0000, // on_error 0xFF1F1700, // surface — deep amber-brown 0xFFFFE7A8, // on_surface 0xFF332507, // surface_variant 0xFFC9A86B, // on_surface_variant 0xFF806E40, // outline 0xFF4A3D14, // outline_variant ]; struct SunflowerPlugin; impl bindings::exports::fai::studio_plugin::theme::Guest for SunflowerPlugin { fn theme_for(brightness: String) -> 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);