fervid_core 0.2.0

The core structures and utilities of fervid
Documentation
use crate::{ElementNode, Node, StrOrExpr};

/// Checks whether a Node is from the component's default slot or not
pub fn is_from_default_slot(node: &Node) -> bool {
    let Node::Element(ElementNode { starting_tag, .. }) = node else {
        // TODO: <template v-if="true" v-slot:foo>
        // https://play.vuejs.org/#eNp9UT1PwzAQ/SvWzW0YukWABKgDDICA0UuUXlIXx7Z85xCpyn/HdvqpVp3sex+n93RbeHKu6ANCCfeMndMV46M0QsSJeF7bzuUxAxMt+rlqHiSwDyghTqQtl421O6EQ8b/z3J3tPF+CmtJz4V6rq+Y0HhOdkDADptqaRrXFhqyJVbbJICFplUb/4VhZQxJKkZnEVVrbv7eMpSKzPV6vsf69gm9oSJiET4+Evo/VDxxXvkWe6OX3Ow7xfyA7uwo6qm+QX0hWh5Rxkj0Hs4qxT3Q57WvnrGdl2h9aDoyG9qXyJaJyzHoJ8Z4vN6of4y6KRfZJM8L4D55mqXA=
        // Node::ConditionalSeq(_) => true,

        return true;
    };

    if !starting_tag.tag_name.eq("template") {
        return true;
    }

    // Slot is not default if its `v-slot` has an argument which is not "" or "default"
    // `v-slot` is default
    // `v-slot:default` is default
    // `v-slot:custom` is not default
    let Some(ref directives) = starting_tag.directives else {
        return true;
    };
    let Some(ref v_slot) = directives.v_slot else {
        return true;
    };

    match v_slot.slot_name.as_ref() {
        None => true,
        Some(StrOrExpr::Str(s)) if s == "default" => true,
        Some(_) => false,
    }
}