#pragma once

#include <AK/Optional.h>
#include <AK/String.h>
#include <LibGC/Ptr.h>
#include <LibJS/Forward.h>
#include <LibJS/Runtime/Value.h>
#include <LibWeb/Bindings/KeyframeEffect.h>
#include <LibWeb/Forward.h>

namespace Web::Bindings {

struct KeyframeAnimationOptions : public KeyframeEffectOptions {
    String id { String {} };
    Optional<GC::Ptr<Animations::AnimationTimeline>> timeline {};
};

JS::ThrowCompletionOr<KeyframeAnimationOptions> convert_to_idl_value_for_keyframe_animation_options(JS::VM&, JS::Value);

struct GetAnimationsOptions {
    Optional<String> pseudo_element { OptionalNone {} };
    bool subtree { false };
};

JS::ThrowCompletionOr<GetAnimationsOptions> convert_to_idl_value_for_get_animations_options(JS::VM&, JS::Value);

} // namespace Web::Bindings
