/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::DOM { class PseudoElement : public JS::Cell { GC_CELL(PseudoElement, JS::Cell); GC_DECLARE_ALLOCATOR(PseudoElement); GC::Ptr layout_node() const { return m_layout_node; } void set_layout_node(GC::Ptr value) { m_layout_node = value; } GC::Ptr cascaded_properties() const { return m_cascaded_properties; } void set_cascaded_properties(GC::Ptr value) { m_cascaded_properties = value; } GC::Ptr computed_properties() const { return m_computed_properties; } void set_computed_properties(GC::Ptr value) { m_computed_properties = value; } HashMap const& custom_properties() const { return m_custom_properties; } void set_custom_properties(HashMap value) { m_custom_properties = move(value); } bool has_non_empty_counters_set() const { return m_counters_set; } Optional counters_set() const; CSS::CountersSet& ensure_counters_set(); void set_counters_set(OwnPtr&&); CSSPixelPoint scroll_offset() const { return m_scroll_offset; } void set_scroll_offset(CSSPixelPoint value) { m_scroll_offset = value; } virtual void visit_edges(JS::Cell::Visitor&) override; private: GC::Ptr m_layout_node; GC::Ptr m_cascaded_properties; GC::Ptr m_computed_properties; HashMap m_custom_properties; OwnPtr m_counters_set; CSSPixelPoint m_scroll_offset {}; }; // https://drafts.csswg.org/css-view-transitions/#pseudo-element-tree class PseudoElementTreeNode final : public PseudoElement , TreeNode { GC_CELL(PseudoElementTreeNode, PseudoElement); GC_DECLARE_ALLOCATOR(PseudoElementTreeNode); }; }