func (_this *Touch) ClientX() float64 {
	var ret float64
	value := _this.Value_JS.Get("clientX")
	ret = (value).Float()
	return ret
}
ClientX returning attribute 'clientX' with
type float64 (idl: double).
package touchevents
import js "github.com/gowebapi/webapi/core/js"
import (
	"github.com/gowebapi/webapi/device/inputcapabilities"
	"github.com/gowebapi/webapi/dom/domcore"
	"github.com/gowebapi/webapi/html/htmlevent"
)
func unused(value interface{}) {
}
type Union struct {
	Value js.Value
}
func (u *Union) JSValue() js.Value {
	return u.Value
}
func UnionFromJS(value js.Value) *Union {
	return &Union{Value: value}
}
type TouchType int
const (
	DirectTouchType TouchType = iota
	StylusTouchType
)
var touchTypeToWasmTable = []string{
	"direct", "stylus",
}
var touchTypeFromWasmTable = map[string]TouchType{
	"direct": DirectTouchType, "stylus": StylusTouchType,
}
func (this *TouchType) JSValue() js.Value {
	return js.ValueOf(this.Value())
}
func (this TouchType) Value() string {
	idx := int(this)
	if idx >= 0 && idx < len(touchTypeToWasmTable) {
		return touchTypeToWasmTable[idx]
	}
	panic("unknown input value")
}
func TouchTypeFromJS(value js.Value) TouchType {
	key := value.String()
	conv, ok := touchTypeFromWasmTable[key]
	if !ok {
		panic("unable to convert '" + key + "'")
	}
	return conv
}
type TouchEventInit struct {
	Bubbles            bool
	Cancelable         bool
	Composed           bool
	View               js.Value
	Detail             int
	SourceCapabilities *inputcapabilities.InputDeviceCapabilities
	CtrlKey            bool
	ShiftKey           bool
	AltKey             bool
	MetaKey            bool
	ModifierAltGraph   bool
	ModifierCapsLock   bool
	ModifierFn         bool
	ModifierFnLock     bool
	ModifierHyper      bool
	ModifierNumLock    bool
	ModifierScrollLock bool
	ModifierSuper      bool
	ModifierSymbol     bool
	ModifierSymbolLock bool
	Touches            []*Touch
	TargetTouches      []*Touch
	ChangedTouches     []*Touch
}
func (_this *TouchEventInit) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Bubbles
	out.Set("bubbles", value0)
	value1 := _this.Cancelable
	out.Set("cancelable", value1)
	value2 := _this.Composed
	out.Set("composed", value2)
	value3 := _this.View
	out.Set("view", value3)
	value4 := _this.Detail
	out.Set("detail", value4)
	value5 := _this.SourceCapabilities.JSValue()
	out.Set("sourceCapabilities", value5)
	value6 := _this.CtrlKey
	out.Set("ctrlKey", value6)
	value7 := _this.ShiftKey
	out.Set("shiftKey", value7)
	value8 := _this.AltKey
	out.Set("altKey", value8)
	value9 := _this.MetaKey
	out.Set("metaKey", value9)
	value10 := _this.ModifierAltGraph
	out.Set("modifierAltGraph", value10)
	value11 := _this.ModifierCapsLock
	out.Set("modifierCapsLock", value11)
	value12 := _this.ModifierFn
	out.Set("modifierFn", value12)
	value13 := _this.ModifierFnLock
	out.Set("modifierFnLock", value13)
	value14 := _this.ModifierHyper
	out.Set("modifierHyper", value14)
	value15 := _this.ModifierNumLock
	out.Set("modifierNumLock", value15)
	value16 := _this.ModifierScrollLock
	out.Set("modifierScrollLock", value16)
	value17 := _this.ModifierSuper
	out.Set("modifierSuper", value17)
	value18 := _this.ModifierSymbol
	out.Set("modifierSymbol", value18)
	value19 := _this.ModifierSymbolLock
	out.Set("modifierSymbolLock", value19)
	value20 := js.Global().Get("Array").New(len(_this.Touches))
	for __idx20, __seq_in20 := range _this.Touches {
		__seq_out20 := __seq_in20.JSValue()
		value20.SetIndex(__idx20, __seq_out20)
	}
	out.Set("touches", value20)
	value21 := js.Global().Get("Array").New(len(_this.TargetTouches))
	for __idx21, __seq_in21 := range _this.TargetTouches {
		__seq_out21 := __seq_in21.JSValue()
		value21.SetIndex(__idx21, __seq_out21)
	}
	out.Set("targetTouches", value21)
	value22 := js.Global().Get("Array").New(len(_this.ChangedTouches))
	for __idx22, __seq_in22 := range _this.ChangedTouches {
		__seq_out22 := __seq_in22.JSValue()
		value22.SetIndex(__idx22, __seq_out22)
	}
	out.Set("changedTouches", value22)
	return out
}
func TouchEventInitFromJS(value js.Wrapper) *TouchEventInit {
	input := value.JSValue()
	var out TouchEventInit
	var (
		value0  bool                                        
		value1  bool                                        
		value2  bool                                        
		value3  js.Value                                    
		value4  int                                         
		value5  *inputcapabilities.InputDeviceCapabilities  
		value6  bool                                        
		value7  bool                                        
		value8  bool                                        
		value9  bool                                        
		value10 bool                                        
		value11 bool                                        
		value12 bool                                        
		value13 bool                                        
		value14 bool                                        
		value15 bool                                        
		value16 bool                                        
		value17 bool                                        
		value18 bool                                        
		value19 bool                                        
		value20 []*Touch                                    
		value21 []*Touch                                    
		value22 []*Touch                                    
	)
	value0 = (input.Get("bubbles")).Bool()
	out.Bubbles = value0
	value1 = (input.Get("cancelable")).Bool()
	out.Cancelable = value1
	value2 = (input.Get("composed")).Bool()
	out.Composed = value2
	value3 = input.Get("view")
	out.View = value3
	value4 = (input.Get("detail")).Int()
	out.Detail = value4
	if input.Get("sourceCapabilities").Type() != js.TypeNull && input.Get("sourceCapabilities").Type() != js.TypeUndefined {
		value5 = inputcapabilities.InputDeviceCapabilitiesFromJS(input.Get("sourceCapabilities"))
	}
	out.SourceCapabilities = value5
	value6 = (input.Get("ctrlKey")).Bool()
	out.CtrlKey = value6
	value7 = (input.Get("shiftKey")).Bool()
	out.ShiftKey = value7
	value8 = (input.Get("altKey")).Bool()
	out.AltKey = value8
	value9 = (input.Get("metaKey")).Bool()
	out.MetaKey = value9
	value10 = (input.Get("modifierAltGraph")).Bool()
	out.ModifierAltGraph = value10
	value11 = (input.Get("modifierCapsLock")).Bool()
	out.ModifierCapsLock = value11
	value12 = (input.Get("modifierFn")).Bool()
	out.ModifierFn = value12
	value13 = (input.Get("modifierFnLock")).Bool()
	out.ModifierFnLock = value13
	value14 = (input.Get("modifierHyper")).Bool()
	out.ModifierHyper = value14
	value15 = (input.Get("modifierNumLock")).Bool()
	out.ModifierNumLock = value15
	value16 = (input.Get("modifierScrollLock")).Bool()
	out.ModifierScrollLock = value16
	value17 = (input.Get("modifierSuper")).Bool()
	out.ModifierSuper = value17
	value18 = (input.Get("modifierSymbol")).Bool()
	out.ModifierSymbol = value18
	value19 = (input.Get("modifierSymbolLock")).Bool()
	out.ModifierSymbolLock = value19
	__length20 := input.Get("touches").Length()
	__array20 := make([]*Touch, __length20, __length20)
	for __idx20 := 0; __idx20 < __length20; __idx20++ {
		var __seq_out20 *Touch
		__seq_in20 := input.Get("touches").Index(__idx20)
		__seq_out20 = TouchFromJS(__seq_in20)
		__array20[__idx20] = __seq_out20
	}
	value20 = __array20
	out.Touches = value20
	__length21 := input.Get("targetTouches").Length()
	__array21 := make([]*Touch, __length21, __length21)
	for __idx21 := 0; __idx21 < __length21; __idx21++ {
		var __seq_out21 *Touch
		__seq_in21 := input.Get("targetTouches").Index(__idx21)
		__seq_out21 = TouchFromJS(__seq_in21)
		__array21[__idx21] = __seq_out21
	}
	value21 = __array21
	out.TargetTouches = value21
	__length22 := input.Get("changedTouches").Length()
	__array22 := make([]*Touch, __length22, __length22)
	for __idx22 := 0; __idx22 < __length22; __idx22++ {
		var __seq_out22 *Touch
		__seq_in22 := input.Get("changedTouches").Index(__idx22)
		__seq_out22 = TouchFromJS(__seq_in22)
		__array22[__idx22] = __seq_out22
	}
	value22 = __array22
	out.ChangedTouches = value22
	return &out
}
type TouchInit struct {
	Identifier    int
	Target        *domcore.EventTarget
	ClientX       float64
	ClientY       float64
	ScreenX       float64
	ScreenY       float64
	PageX         float64
	PageY         float64
	RadiusX       float32
	RadiusY       float32
	RotationAngle float32
	Force         float32
	AltitudeAngle float64
	AzimuthAngle  float64
	TouchType     TouchType
}
func (_this *TouchInit) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Identifier
	out.Set("identifier", value0)
	value1 := _this.Target.JSValue()
	out.Set("target", value1)
	value2 := _this.ClientX
	out.Set("clientX", value2)
	value3 := _this.ClientY
	out.Set("clientY", value3)
	value4 := _this.ScreenX
	out.Set("screenX", value4)
	value5 := _this.ScreenY
	out.Set("screenY", value5)
	value6 := _this.PageX
	out.Set("pageX", value6)
	value7 := _this.PageY
	out.Set("pageY", value7)
	value8 := _this.RadiusX
	out.Set("radiusX", value8)
	value9 := _this.RadiusY
	out.Set("radiusY", value9)
	value10 := _this.RotationAngle
	out.Set("rotationAngle", value10)
	value11 := _this.Force
	out.Set("force", value11)
	value12 := _this.AltitudeAngle
	out.Set("altitudeAngle", value12)
	value13 := _this.AzimuthAngle
	out.Set("azimuthAngle", value13)
	value14 := _this.TouchType.JSValue()
	out.Set("touchType", value14)
	return out
}
func TouchInitFromJS(value js.Wrapper) *TouchInit {
	input := value.JSValue()
	var out TouchInit
	var (
		value0  int                   
		value1  *domcore.EventTarget  
		value2  float64               
		value3  float64               
		value4  float64               
		value5  float64               
		value6  float64               
		value7  float64               
		value8  float32               
		value9  float32               
		value10 float32               
		value11 float32               
		value12 float64               
		value13 float64               
		value14 TouchType             
	)
	value0 = (input.Get("identifier")).Int()
	out.Identifier = value0
	value1 = domcore.EventTargetFromJS(input.Get("target"))
	out.Target = value1
	value2 = (input.Get("clientX")).Float()
	out.ClientX = value2
	value3 = (input.Get("clientY")).Float()
	out.ClientY = value3
	value4 = (input.Get("screenX")).Float()
	out.ScreenX = value4
	value5 = (input.Get("screenY")).Float()
	out.ScreenY = value5
	value6 = (input.Get("pageX")).Float()
	out.PageX = value6
	value7 = (input.Get("pageY")).Float()
	out.PageY = value7
	value8 = (float32)((input.Get("radiusX")).Float())
	out.RadiusX = value8
	value9 = (float32)((input.Get("radiusY")).Float())
	out.RadiusY = value9
	value10 = (float32)((input.Get("rotationAngle")).Float())
	out.RotationAngle = value10
	value11 = (float32)((input.Get("force")).Float())
	out.Force = value11
	value12 = (input.Get("altitudeAngle")).Float()
	out.AltitudeAngle = value12
	value13 = (input.Get("azimuthAngle")).Float()
	out.AzimuthAngle = value13
	value14 = TouchTypeFromJS(input.Get("touchType"))
	out.TouchType = value14
	return &out
}
type Touch struct {
	Value_JS js.Value
}
func (_this *Touch) JSValue() js.Value {
	return _this.Value_JS
}
func TouchFromJS(value js.Wrapper) *Touch {
	input := value.JSValue()
	if typ := input.Type(); typ == js.TypeNull || typ == js.TypeUndefined {
		return nil
	}
	ret := &Touch{}
	ret.Value_JS = input
	return ret
}
func NewTouch(touchInitDict *TouchInit) (_result *Touch) {
	_klass := js.Global().Get("Touch")
	var (
		_args [1]interface{}
		_end  int
	)
	_p0 := touchInitDict.JSValue()
	_args[0] = _p0
	_end++
	_returned := _klass.New(_args[0:_end]...)
	var (
		_converted *Touch  
	)
	_converted = TouchFromJS(_returned)
	_result = _converted
	return
}
func (_this *Touch) Identifier() int {
	var ret int
	value := _this.Value_JS.Get("identifier")
	ret = (value).Int()
	return ret
}
func (_this *Touch) Target() *domcore.EventTarget {
	var ret *domcore.EventTarget
	value := _this.Value_JS.Get("target")
	ret = domcore.EventTargetFromJS(value)
	return ret
}
func (_this *Touch) ScreenX() float64 {
	var ret float64
	value := _this.Value_JS.Get("screenX")
	ret = (value).Float()
	return ret
}
func (_this *Touch) ScreenY() float64 {
	var ret float64
	value := _this.Value_JS.Get("screenY")
	ret = (value).Float()
	return ret
}