/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::CSS { // https://drafts.css-houdini.org/css-typed-om-1/#cssunitvalue class CSSUnitValue final : public CSSNumericValue { WEB_PLATFORM_OBJECT(CSSUnitValue, CSSNumericValue); GC_DECLARE_ALLOCATOR(CSSUnitValue); public: [[nodiscard]] static GC::Ref create(JS::Realm&, double value, FlyString unit); static GC::Ptr create_from_sum_value_item(JS::Realm&, SumValueItem const&); static WebIDL::ExceptionOr> construct_impl(JS::Realm&, double value, FlyString unit); virtual ~CSSUnitValue() override = default; double value() const { return m_value; } void set_value(double value); FlyString const& unit() const { return m_unit; } String serialize_unit_value(Optional minimum, Optional maximum) const; GC::Ptr converted_to_unit(FlyString const& unit) const; virtual bool is_equal_numeric_value(GC::Ref other) const override; virtual Optional create_a_sum_value() const override; virtual WebIDL::ExceptionOr> create_an_internal_representation(PropertyNameAndID const&, PerformTypeCheck) const override; virtual WebIDL::ExceptionOr> create_calculation_node(CalculationContext const&) const override; private: explicit CSSUnitValue(JS::Realm&, double value, FlyString unit, NumericType type); virtual void initialize(JS::Realm&) override; double m_value; FlyString m_unit; }; }