use leptos::prelude::*;
use orbital_macros::component_doc;
use orbital_style::inject_style;
use crate::{Popover, PopoverPosition, PopoverSize, PopoverTrigger, PopoverTriggerType};
use crate::navigation::popover::popover_styles;
use super::anatomy::spotlight_anatomy;
use super::slots_to_views::anatomy_from_slots;
use super::styles::spotlight_styles;
use super::types::{
SpotlightActions, SpotlightBody, SpotlightFooter, SpotlightHeader, SpotlightMedia,
SpotlightTrigger,
};
#[component_doc(
category = "Spotlight",
preview_slug = "spotlight-popover",
preview_label = "Spotlight Popover",
preview_icon = icondata::AiReadOutlined,
)]
#[component]
pub fn SpotlightPopover(
#[prop(optional, into)] class: MaybeProp<String>,
#[prop(optional)] position: PopoverPosition,
#[prop(optional, into)] size: Signal<PopoverSize>,
spotlight_trigger: SpotlightTrigger,
#[prop(optional)] spotlight_header: Option<SpotlightHeader>,
#[prop(optional)] spotlight_body: Option<SpotlightBody>,
#[prop(optional)] spotlight_media: Option<SpotlightMedia>,
#[prop(optional)] spotlight_actions: Option<SpotlightActions>,
#[prop(optional)] spotlight_footer: Option<SpotlightFooter>,
) -> impl IntoView {
inject_style("orbital-spotlight", spotlight_styles());
inject_style("orbital-popover", popover_styles());
let surface_class = Signal::derive(move || {
let mut parts = vec!["orbital-spotlight".to_string()];
if let Some(extra) = class.get() {
if !extra.is_empty() {
parts.push(extra);
}
}
parts.join(" ")
});
let anatomy = anatomy_from_slots(
spotlight_header,
spotlight_body,
spotlight_media,
spotlight_actions,
spotlight_footer,
);
view! {
<Popover
class=surface_class
trigger_type=PopoverTriggerType::Click
position=position
size=size
>
<PopoverTrigger slot>
{(spotlight_trigger.children)()}
</PopoverTrigger>
{spotlight_anatomy(anatomy)}
</Popover>
}
}