/* * Copyright (c) 2025, Tim Ledbetter * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::CSS { // https://drafts.csswg.org/css-anchor-position-1/#funcdef-anchor class AnchorStyleValue final : public AbstractNonMathCalcFunctionStyleValue { public: static ValueComparingNonnullRefPtr create(Optional const& anchor_name, ValueComparingNonnullRefPtr const& anchor_side, ValueComparingRefPtr const& fallback_value); virtual ~AnchorStyleValue() override = default; virtual void serialize(StringBuilder&, SerializationMode) const override; virtual RefPtr resolve_to_calculation_node(CalculationContext const&, CalculationResolutionContext const&) const override; virtual bool equals(StyleValue const& other) const override; virtual bool is_computationally_independent() const override { return true; } Optional anchor_name() const { return m_properties.anchor_name; } ValueComparingNonnullRefPtr anchor_side() const { return m_properties.anchor_side; } ValueComparingRefPtr fallback_value() const { return m_properties.fallback_value; } private: AnchorStyleValue(Optional const& anchor_name, ValueComparingNonnullRefPtr const& anchor_side, ValueComparingRefPtr const& fallback_value); struct Properties { Optional anchor_name; ValueComparingNonnullRefPtr anchor_side; ValueComparingRefPtr fallback_value; bool operator==(Properties const&) const = default; } m_properties; }; }