93 lines
3.2 KiB
Rust
93 lines
3.2 KiB
Rust
//! `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<ColorScheme, PluginError> {
|
|
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<String, PluginError> {
|
|
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<u8>,
|
|
) -> Result<RenderedOutput, PluginError> {
|
|
Err(PluginError::Declined(
|
|
"sunflower is a theme plugin and does not render outputs".to_string(),
|
|
))
|
|
}
|
|
}
|
|
|
|
export_plugin!(SunflowerPlugin);
|