///|
fn instagram_square_info() -> PresetInfo {
let preset = @preset.PosterPreset::instagram_square()
{
name: preset.name,
summary: "Balanced 1:1 social card for launch graphics, quote cards, and event promos.",
width: preset.canvas.width,
height: preset.canvas.height,
safe_margin: preset.margin.left,
aspect_ratio: preset.aspect_ratio_label(),
}
}
///|
fn youtube_thumbnail_info() -> PresetInfo {
let preset = @preset.PosterPreset::youtube_thumbnail()
{
name: preset.name,
summary: "Wide 16:9 hero suitable for release thumbnails, cover banners, and livestream cards.",
width: preset.canvas.width,
height: preset.canvas.height,
safe_margin: preset.margin.left,
aspect_ratio: preset.aspect_ratio_label(),
}
}
///|
fn social_story_info() -> PresetInfo {
let preset = @preset.PosterPreset::social_story()
{
name: preset.name,
summary: "Tall 9:16 story layout for teasers, editorial slides, and mobile-first updates.",
width: preset.canvas.width,
height: preset.canvas.height,
safe_margin: preset.margin.left,
aspect_ratio: preset.aspect_ratio_label(),
}
}
///|
pub fn list_presets() -> Array[PresetInfo] {
[instagram_square_info(), youtube_thumbnail_info(), social_story_info()]
}
///|
pub fn preset_names() -> Array[String] {
["instagram-square", "youtube-thumbnail", "social-story"]
}
///|
pub fn resolve_preset(name : String) -> @preset.PosterPreset? {
match name {
"instagram-square" => Some(@preset.PosterPreset::instagram_square())
"youtube-thumbnail" => Some(@preset.PosterPreset::youtube_thumbnail())
"social-story" => Some(@preset.PosterPreset::social_story())
_ => None
}
}
///|
pub fn resolve_preset_info(name : String) -> PresetInfo? {
match name {
"instagram-square" => Some(instagram_square_info())
"youtube-thumbnail" => Some(youtube_thumbnail_info())
"social-story" => Some(social_story_info())
_ => None
}
}