#import <CSS/CSSStyleValue.idl>
#import <CSS/CSSUnitValue.idl>

// https://drafts.css-houdini.org/css-typed-om-1/#enumdef-cssnumericbasetype
enum CSSNumericBaseType {
    "length",
    "angle",
    "time",
    "frequency",
    "resolution",
    "flex",
    "percent",
};

// https://drafts.css-houdini.org/css-typed-om-1/#dictdef-cssnumerictype
dictionary CSSNumericType {
    long length;
    long angle;
    long time;
    long frequency;
    long resolution;
    long flex;
    long percent;
    CSSNumericBaseType percentHint;
};

// https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSNumericValue : CSSStyleValue {
    [FIXME] CSSNumericValue add(CSSNumberish... values);
    [FIXME] CSSNumericValue sub(CSSNumberish... values);
    [FIXME] CSSNumericValue mul(CSSNumberish... values);
    [FIXME] CSSNumericValue div(CSSNumberish... values);
    [FIXME] CSSNumericValue min(CSSNumberish... values);
    [FIXME] CSSNumericValue max(CSSNumberish... values);

    [ImplementedAs=equals_for_bindings] boolean equals(CSSNumberish... value);

    CSSUnitValue to(USVString unit);
    // FIXME: CSSMathSum toSum(USVString... units);
    [ImplementedAs=type_for_bindings] CSSNumericType type();

    [Exposed=Window] static CSSNumericValue parse(USVString cssText);
};

// https://drafts.css-houdini.org/css-typed-om-1/#typedefdef-cssnumberish
typedef (double or CSSNumericValue) CSSNumberish;
