#pragma once
#include "InputType.h"
namespace WebCore {
class SliderThumbElement;
class RangeInputType final : public InputType {
public:
explicit RangeInputType(HTMLInputElement&);
private:
bool isRangeControl() const final;
const AtomicString& formControlType() const final;
double valueAsDouble() const final;
ExceptionOr<void> setValueAsDecimal(const Decimal&, TextFieldEventBehavior) const final;
bool typeMismatchFor(const String&) const final;
bool supportsRequired() const final;
StepRange createStepRange(AnyStepHandling) const final;
bool isSteppable() const final;
#if !PLATFORM(IOS)
void handleMouseDownEvent(MouseEvent&) final;
#endif
void handleKeydownEvent(KeyboardEvent&) final;
RenderPtr<RenderElement> createInputRenderer(RenderStyle&&) final;
void createShadowSubtree() final;
Decimal parseToNumber(const String&, const Decimal&) const final;
String serialize(const Decimal&) const final;
void accessKeyAction(bool sendMouseEvents) final;
void minOrMaxAttributeChanged() final;
void setValue(const String&, bool valueChanged, TextFieldEventBehavior) final;
String fallbackValue() const final;
String sanitizeValue(const String& proposedValue) const final;
bool shouldRespectListAttribute() final;
HTMLElement* sliderThumbElement() const final;
HTMLElement* sliderTrackElement() const final;
SliderThumbElement& typedSliderThumbElement() const;
#if ENABLE(DATALIST_ELEMENT)
void listAttributeTargetChanged() final;
void updateTickMarkValues();
std::optional<Decimal> findClosestTickMarkValue(const Decimal&) final;
bool m_tickMarkValuesDirty { true };
Vector<Decimal> m_tickMarkValues;
#endif
#if ENABLE(TOUCH_EVENTS)
void handleTouchEvent(TouchEvent&) final;
#endif
#if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS)
void disabledAttributeChanged() final;
#endif
#if ENABLE(TOUCH_EVENTS) && !PLATFORM(IOS) && ENABLE(TOUCH_SLIDER)
bool hasTouchEventHandler() const final;
#endif
};
}