func LayoutMapEntryIteratorFromJS(value js.Wrapper) *LayoutMapEntryIterator {
	input := value.JSValue()
	if typ := input.Type(); typ == js.TypeNull || typ == js.TypeUndefined {
		return nil
	}
	ret := &LayoutMapEntryIterator{}
	ret.Value_JS = input
	return ret
}
LayoutMapEntryIteratorFromJS is casting a js.Wrapper into LayoutMapEntryIterator.
package keyboard
import js "github.com/gowebapi/webapi/core/js"
import (
	"github.com/gowebapi/webapi/javascript"
)
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 LayoutMapForEachFunc func(currentValue string, currentKey string, listObj *LayoutMap)
type LayoutMapForEach js.Func
func LayoutMapForEachToJS(callback LayoutMapForEachFunc) *LayoutMapForEach {
	if callback == nil {
		return nil
	}
	ret := LayoutMapForEach(js.FuncOf(func(this js.Value, args []js.Value) interface{} {
		var (
			_p0 string      
			_p1 string      
			_p2 *LayoutMap  
		)
		_p0 = (args[0]).String()
		_p1 = (args[1]).String()
		_p2 = LayoutMapFromJS(args[2])
		callback(_p0, _p1, _p2)
		return nil
	}))
	return &ret
}
func LayoutMapForEachFromJS(_value js.Value) LayoutMapForEachFunc {
	return func(currentValue string, currentKey string, listObj *LayoutMap) {
		var (
			_args [3]interface{}
			_end  int
		)
		_p0 := currentValue
		_args[0] = _p0
		_end++
		_p1 := currentKey
		_args[1] = _p1
		_end++
		_p2 := listObj.JSValue()
		_args[2] = _p2
		_end++
		_value.Invoke(_args[0:_end]...)
		return
	}
}
type PromiseLayoutMapOnFulfilledFunc func(value *LayoutMap)
type PromiseLayoutMapOnFulfilled js.Func
func PromiseLayoutMapOnFulfilledToJS(callback PromiseLayoutMapOnFulfilledFunc) *PromiseLayoutMapOnFulfilled {
	if callback == nil {
		return nil
	}
	ret := PromiseLayoutMapOnFulfilled(js.FuncOf(func(this js.Value, args []js.Value) interface{} {
		var (
			_p0 *LayoutMap  
		)
		_p0 = LayoutMapFromJS(args[0])
		callback(_p0)
		return nil
	}))
	return &ret
}
func PromiseLayoutMapOnFulfilledFromJS(_value js.Value) PromiseLayoutMapOnFulfilledFunc {
	return func(value *LayoutMap) {
		var (
			_args [1]interface{}
			_end  int
		)
		_p0 := value.JSValue()
		_args[0] = _p0
		_end++
		_value.Invoke(_args[0:_end]...)
		return
	}
}
type PromiseLayoutMapOnRejectedFunc func(reason js.Value)
type PromiseLayoutMapOnRejected js.Func
func PromiseLayoutMapOnRejectedToJS(callback PromiseLayoutMapOnRejectedFunc) *PromiseLayoutMapOnRejected {
	if callback == nil {
		return nil
	}
	ret := PromiseLayoutMapOnRejected(js.FuncOf(func(this js.Value, args []js.Value) interface{} {
		var (
			_p0 js.Value  
		)
		_p0 = args[0]
		callback(_p0)
		return nil
	}))
	return &ret
}
func PromiseLayoutMapOnRejectedFromJS(_value js.Value) PromiseLayoutMapOnRejectedFunc {
	return func(reason js.Value) {
		var (
			_args [1]interface{}
			_end  int
		)
		_p0 := reason
		_args[0] = _p0
		_end++
		_value.Invoke(_args[0:_end]...)
		return
	}
}
type LayoutMapEntryIteratorValue struct {
	Value []js.Value
	Done  bool
}
func (_this *LayoutMapEntryIteratorValue) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := js.Global().Get("Array").New(len(_this.Value))
	for __idx0, __seq_in0 := range _this.Value {
		__seq_out0 := __seq_in0
		value0.SetIndex(__idx0, __seq_out0)
	}
	out.Set("value", value0)
	value1 := _this.Done
	out.Set("done", value1)
	return out
}
func LayoutMapEntryIteratorValueFromJS(value js.Wrapper) *LayoutMapEntryIteratorValue {
	input := value.JSValue()
	var out LayoutMapEntryIteratorValue
	var (
		value0 []js.Value  
		value1 bool        
	)
	__length0 := input.Get("value").Length()
	__array0 := make([]js.Value, __length0, __length0)
	for __idx0 := 0; __idx0 < __length0; __idx0++ {
		var __seq_out0 js.Value
		__seq_in0 := input.Get("value").Index(__idx0)
		__seq_out0 = __seq_in0
		__array0[__idx0] = __seq_out0
	}
	value0 = __array0
	out.Value = value0
	value1 = (input.Get("done")).Bool()
	out.Done = value1
	return &out
}
type LayoutMapKeyIteratorValue struct {
	Value string
	Done  bool
}
func (_this *LayoutMapKeyIteratorValue) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Value
	out.Set("value", value0)
	value1 := _this.Done
	out.Set("done", value1)
	return out
}
func LayoutMapKeyIteratorValueFromJS(value js.Wrapper) *LayoutMapKeyIteratorValue {
	input := value.JSValue()
	var out LayoutMapKeyIteratorValue
	var (
		value0 string  
		value1 bool    
	)
	value0 = (input.Get("value")).String()
	out.Value = value0
	value1 = (input.Get("done")).Bool()
	out.Done = value1
	return &out
}
type LayoutMapValueIteratorValue struct {
	Value string
	Done  bool
}
func (_this *LayoutMapValueIteratorValue) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Value
	out.Set("value", value0)
	value1 := _this.Done
	out.Set("done", value1)
	return out
}
func LayoutMapValueIteratorValueFromJS(value js.Wrapper) *LayoutMapValueIteratorValue {
	input := value.JSValue()
	var out LayoutMapValueIteratorValue
	var (
		value0 string  
		value1 bool    
	)
	value0 = (input.Get("value")).String()
	out.Value = value0
	value1 = (input.Get("done")).Bool()
	out.Done = value1
	return &out
}
type Keyboard struct {
	Value_JS js.Value
}
func (_this *Keyboard) JSValue() js.Value {
	return _this.Value_JS
}
func KeyboardFromJS(value js.Wrapper) *Keyboard {
	input := value.JSValue()
	if typ := input.Type(); typ == js.TypeNull || typ == js.TypeUndefined {
		return nil
	}
	ret := &Keyboard{}
	ret.Value_JS = input
	return ret
}
func (_this *Keyboard) Lock(keyCodes []string) (_result *javascript.PromiseVoid) {
	var (
		_args [1]interface{}
		_end  int
	)
	if keyCodes != nil {
		_p0 := js.Global().Get("Array").New(len(keyCodes))
		for __idx0, __seq_in0 := range keyCodes {
			__seq_out0 := __seq_in0
			_p0.SetIndex(__idx0, __seq_out0)
		}
		_args[0] = _p0
		_end++
	}
	_returned := _this.Value_JS.Call("lock", _args[0:_end]...)
	var (
		_converted *javascript.PromiseVoid  
	)
	_converted = javascript.PromiseVoidFromJS(_returned)
	_result = _converted
	return
}
func (_this *Keyboard) Unlock() {
	var (
		_args [0]interface{}
		_end  int
	)
	_this.Value_JS.Call("unlock", _args[0:_end]...)
	return
}
func (_this *Keyboard) GetLayoutMap() (_result *PromiseLayoutMap) {
	var (
		_args [0]interface{}
		_end  int
	)
	_returned := _this.Value_JS.Call("getLayoutMap", _args[0:_end]...)
	var (
		_converted *PromiseLayoutMap  
	)
	_converted = PromiseLayoutMapFromJS(_returned)
	_result = _converted
	return
}
type LayoutMap struct {
	Value_JS js.Value
}
func (_this *LayoutMap) JSValue() js.Value {
	return _this.Value_JS
}
func LayoutMapFromJS(value js.Wrapper) *LayoutMap {
	input := value.JSValue()
	if typ := input.Type(); typ == js.TypeNull || typ == js.TypeUndefined {
		return nil
	}
	ret := &LayoutMap{}
	ret.Value_JS = input
	return ret
}
func (_this *LayoutMap) Size() int {
	var ret int
	value := _this.Value_JS.Get("size")
	ret = (value).Int()
	return ret
}
func (_this *LayoutMap) Entries() (_result *LayoutMapEntryIterator) {
	var (
		_args [0]interface{}
		_end  int
	)
	_returned := _this.Value_JS.Call("entries", _args[0:_end]...)
	var (
		_converted *LayoutMapEntryIterator  
	)
	_converted = LayoutMapEntryIteratorFromJS(_returned)
	_result = _converted
	return
}
func (_this *LayoutMap) ForEach(callback *LayoutMapForEach, optionalThisForCallbackArgument interface{}) {
	var (
		_args [2]interface{}
		_end  int
	)
	var __callback0 js.Value
	if callback != nil {
		__callback0 = (*callback).Value
	} else {
		__callback0 = js.Null()
	}
	_p0 := __callback0
	_args[0] = _p0
	_end++
	if optionalThisForCallbackArgument != nil {
		_p1 := optionalThisForCallbackArgument
		_args[1] = _p1
		_end++
	}
	_this.Value_JS.Call("forEach", _args[0:_end]...)
	return
}
func (_this *LayoutMap) Keys() (_result *LayoutMapKeyIterator) {
	var (
		_args [0]interface{}
		_end  int
	)
	_returned := _this.Value_JS.Call("keys", _args[0:_end]...)
	var (
		_converted *LayoutMapKeyIterator  
	)
	_converted = LayoutMapKeyIteratorFromJS(_returned)
	_result = _converted
	return
}
func (_this *LayoutMap) Values() (_result *LayoutMapValueIterator) {
	var (
		_args [0]interface{}
		_end  int
	)
	_returned := _this.Value_JS.Call("values", _args[0:_end]...)
	var (
		_converted *LayoutMapValueIterator  
	)
	_converted = LayoutMapValueIteratorFromJS(_returned)
	_result = _converted
	return
}
func (_this *LayoutMap) Get(key string) (_result *string) {
	var (
		_args [1]interface{}
		_end  int
	)
	_p0 := key
	_args[0] = _p0
	_end++
	_returned := _this.Value_JS.Call("get", _args[0:_end]...)
	var (
		_converted *string  
	)
	if _returned.Type() != js.TypeNull && _returned.Type() != js.TypeUndefined {
		__tmp := (_returned).String()
		_converted = &__tmp
	}
	_result = _converted
	return
}
func (_this *LayoutMap) Has(key string) (_result bool) {
	var (
		_args [1]interface{}
		_end  int
	)
	_p0 := key
	_args[0] = _p0
	_end++
	_returned := _this.Value_JS.Call("has", _args[0:_end]...)
	var (
		_converted bool  
	)
	_converted = (_returned).Bool()
	_result = _converted
	return
}
type LayoutMapEntryIterator struct {
	Value_JS js.Value
}
func (_this *LayoutMapEntryIterator) JSValue() js.Value {
	return _this.Value_JS
}