use super::*;
use crate::prelude::*;
use beet_core::prelude::*;
pub type WebDirectives =
(HtmlHoistDirective, ClientLoadDirective, ClientOnlyDirective);
#[derive(
Debug, Default, Copy, Clone, PartialEq, Eq, Hash, Component, Reflect,
)]
#[reflect(Default, Component)]
#[component(immutable)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
pub enum HtmlHoistDirective {
#[default]
Head,
Body,
None,
}
impl TemplateDirective for HtmlHoistDirective {
fn try_from_attribute(key: &str, value: Option<&TextNode>) -> Option<Self> {
match (key, value) {
("hoist:head", _) => Some(Self::Head),
("hoist:body", _) => Some(Self::Body),
("hoist:none", _) => Some(Self::None),
_ => None,
}
}
}
#[derive(Debug, Default, Copy, Clone, Component, Reflect)]
#[reflect(Default, Component)]
#[component(immutable)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
#[require(RequiresDomIdx)]
pub struct ClientLoadDirective;
impl TemplateDirective for ClientLoadDirective {
fn try_from_attribute(key: &str, value: Option<&TextNode>) -> Option<Self> {
match (key, value) {
("client:load", _) => Some(Self),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Component, Reflect)]
#[reflect(Default, Component)]
#[component(immutable)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
#[require(RequiresDomIdx)]
pub struct ClientOnlyDirective {
pub root_id: String,
}
impl Default for ClientOnlyDirective {
fn default() -> Self {
Self {
root_id: "root".to_string(),
}
}
}
impl TemplateDirective for ClientOnlyDirective {
fn try_from_attribute(key: &str, value: Option<&TextNode>) -> Option<Self> {
match (key, value) {
("client:only", None) => Some(Self::default()),
("client:only", Some(text)) => Some(Self {
root_id: text.0.clone(),
}),
_ => None,
}
}
}