/* * Copyright (c) 2026, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::CSS { // https://drafts.csswg.org/css-conditional-5/#dictdef-csscontainercondition struct CSSContainerCondition { String name; String query; }; // https://drafts.csswg.org/css-conditional-5/#the-csscontainerrule-interface class CSSContainerRule final : public CSSConditionRule { WEB_PLATFORM_OBJECT(CSSContainerRule, CSSConditionRule); GC_DECLARE_ALLOCATOR(CSSContainerRule); public: struct Condition { Optional container_name; RefPtr container_query; }; [[nodiscard]] static GC::Ref create(JS::Realm&, Vector&&, CSSRuleList&); virtual ~CSSContainerRule() override; virtual String condition_text() const override; virtual bool condition_matches() const override; String container_name() const; String container_query() const; // FIXME: Should be FrozenArray Vector conditions() const; virtual void for_each_effective_rule(TraversalOrder, Function const& callback) const override; private: CSSContainerRule(JS::Realm&, Vector&&, CSSRuleList&); virtual void initialize(JS::Realm&) override; virtual String serialized() const override; Vector m_conditions; }; template<> inline bool CSSRule::fast_is() const { return type() == CSSRule::Type::Container; } }