#pragma once
#include "InputType.h"
namespace WebCore {
class SliderThumbElement;
class RangeInputType final : public InputType {
public:
explicit RangeInputType(HTMLInputElement&);
private:
bool isRangeControl() const final;
const AtomString& 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;
void handleMouseDownEvent(MouseEvent&) final;
ShouldCallBaseEventHandler 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;
bool accessKeyAction(bool sendMouseEvents) final;
void attributeChanged(const QualifiedName&) 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 dataListMayHaveChanged() final;
void updateTickMarkValues();
Optional<Decimal> findClosestTickMarkValue(const Decimal&) final;
bool m_tickMarkValuesDirty { true };
Vector<Decimal> m_tickMarkValues;
#endif
#if ENABLE(TOUCH_EVENTS)
void handleTouchEvent(TouchEvent&) final;
#endif
void disabledStateChanged() final;
#if ENABLE(TOUCH_EVENTS) && !PLATFORM(IOS_FAMILY) && ENABLE(TOUCH_SLIDER)
bool hasTouchEventHandler() const final;
#endif
};
}