from dataclasses import dataclass from typing import TYPE_CHECKING from puppygirl.elements import TemplateAttr from puppygirl.elements.shadow_root import ShadowRootMode from puppygirl.renderer import Renderable if TYPE_CHECKING: from puppygirl import Puppygirl from puppygirl.elements import Node from puppygirl.puppytype import RenderableElement, Templates @dataclass class PuppygirlDomme(Renderable): puppygirl: "Puppygirl" @property def name(self): return "puppygirl-domme" def render(self, node: "Node", templates: "Templates") -> "RenderableElement": if not node.has_attr(TemplateAttr): return node template = templates[node[TemplateAttr]] shadow_root = node.attach_shadow(ShadowRootMode.Open) shadow_root.append_child(template.clone()) return node