Documentation ¶
Index ¶
- Constants
- func Class(name string) classAttrWrapper
- func ClassIf(cond bool, name string) classAttrWrapper
- func ClassIfElse(cond bool, name string, elseName string) classAttrWrapper
- func ForEach[T any](items []T, fn func(T) any) []any
- func ForEachIdx[T any](items []T, fn func(T, int) any) []any
- func Fragment(parts ...any) any
- func If(cond bool, part any) any
- func IfElse(cond bool, part any, elsePart any) any
- func P(propName string, propVal any) any
- func PStyle(styleAttr string, propVal any) any
- func Props(props any) map[string]any
- func QueueRefOp(ctx context.Context, ref *VDomRef, op VDomRefOperation)
- func UseAtom[T any](ctx context.Context, atomName string) (T, func(T))
- func UseEffect(ctx context.Context, fn func() func(), deps []any)
- func UseId(ctx context.Context) string
- func UseRenderTs(ctx context.Context) int64
- func UseState[T any](ctx context.Context, initialVal T) (T, func(T))
- func UseStateWithFn[T any](ctx context.Context, initialVal T) (T, func(T), func(func(T) T))
- type Atom
- type ChildKey
- type Component
- type ComponentImpl
- type DomRect
- type EffectWorkElem
- type Hook
- type RootElem
- func (r *RootElem) AddEffectWork(id string, effectIndex int)
- func (r *RootElem) AddRenderWork(id string)
- func (r *RootElem) Event(id string, propName string, event VDomEvent)
- func (r *RootElem) GetAtom(name string) *Atom
- func (r *RootElem) GetAtomVal(name string) any
- func (r *RootElem) GetRefOperations() []VDomRefOperation
- func (r *RootElem) GetStateSync(full bool) []VDomStateSync
- func (r *RootElem) MakeVDom() *VDomElem
- func (r *RootElem) QueueRefOp(op VDomRefOperation)
- func (r *RootElem) RegisterComponent(name string, cfunc any) error
- func (r *RootElem) Render(elem *VDomElem)
- func (r *RootElem) RunWork()
- func (r *RootElem) SetAtomVal(name string, val any, markDirty bool)
- func (r *RootElem) SetOuterCtx(ctx context.Context)
- func (r *RootElem) UpdateRef(updateRef VDomRefUpdate)
- type VDomAsyncInitiationRequest
- type VDomBackendOpts
- type VDomBackendUpdate
- type VDomBinding
- type VDomContextVal
- type VDomCreateContext
- type VDomElem
- type VDomEvent
- type VDomFrontendUpdate
- type VDomFunc
- type VDomKeyboardEvent
- type VDomMessage
- type VDomRef
- type VDomRefOperation
- type VDomRefPosition
- type VDomRefUpdate
- type VDomRenderContext
- type VDomRenderUpdate
- type VDomSimpleRef
- type VDomStateSync
- type VDomTarget
- type VDomTargetToolbar
- type VDomTransferElem
- type WaveKeyboardEvent
- type WavePointerData
Constants ¶
View Source
const ( BackendUpdate_InitialChunkSize = 50 // Size for initial chunks that contain both TransferElems and StateSync BackendUpdate_ChunkSize = 100 // Size for subsequent chunks )
View Source
const ( WorkType_Render = "render" WorkType_Effect = "effect" )
View Source
const BindTag = "#bind"
View Source
const ChildrenPropKey = "children"
View Source
const FragmentTag = "#fragment"
View Source
const Html_BindParamTagName = "bindparam"
View Source
const Html_BindPrefix = "#bind:"
View Source
const Html_BindTagName = "bind"
View Source
const Html_GlobalEventPrefix = "#globalevent"
View Source
const Html_ParamPrefix = "#param:"
View Source
const KeyPropKey = "key"
View Source
const ObjectType_Binding = "binding"
View Source
const ObjectType_Func = "func"
View Source
const ObjectType_Ref = "ref"
View Source
const TextTag = "#text"
View Source
const WaveNullTag = "wave:null"
View Source
const WaveTextTag = "wave:text"
Variables ¶
This section is empty.
Functions ¶
func ClassIfElse ¶ added in v0.9.2
func QueueRefOp ¶ added in v0.9.2
func QueueRefOp(ctx context.Context, ref *VDomRef, op VDomRefOperation)
func UseRenderTs ¶ added in v0.9.2
func UseStateWithFn ¶ added in v0.9.2
Types ¶
type ComponentImpl ¶ added in v0.9.2
type ComponentImpl struct { WaveId string Tag string Key string Elem *VDomElem Mounted bool // hooks Hooks []*Hook // #text component Text string // base component -- vdom, wave elem, or #fragment Children []*ComponentImpl // component -> component Comp *ComponentImpl }
type EffectWorkElem ¶
type Hook ¶
type Hook struct { Init bool // is initialized Idx int // index in the hook array Fn func() func() // for useEffect UnmountFn func() // for useEffect Val any // for useState, useMemo, useRef Deps []any }
generic hook structure
type RootElem ¶
type RootElem struct { OuterCtx context.Context Root *ComponentImpl RenderTs int64 CFuncs map[string]any CompMap map[string]*ComponentImpl // component waveid -> component EffectWorkQueue []*EffectWorkElem NeedsRenderMap map[string]bool Atoms map[string]*Atom RefOperations []VDomRefOperation }
func (*RootElem) AddEffectWork ¶
func (*RootElem) AddRenderWork ¶
func (*RootElem) GetAtomVal ¶ added in v0.9.0
func (*RootElem) GetRefOperations ¶ added in v0.9.2
func (r *RootElem) GetRefOperations() []VDomRefOperation
func (*RootElem) GetStateSync ¶ added in v0.9.0
func (r *RootElem) GetStateSync(full bool) []VDomStateSync
func (*RootElem) QueueRefOp ¶ added in v0.9.2
func (r *RootElem) QueueRefOp(op VDomRefOperation)
func (*RootElem) RegisterComponent ¶
func (*RootElem) RunWork ¶ added in v0.9.0
func (r *RootElem) RunWork()
this will be called by the frontend to say the DOM has been mounted it will eventually send any updated "refs" to the backend as well
func (*RootElem) SetAtomVal ¶ added in v0.9.0
func (*RootElem) SetOuterCtx ¶
func (*RootElem) UpdateRef ¶ added in v0.9.2
func (r *RootElem) UpdateRef(updateRef VDomRefUpdate)
type VDomAsyncInitiationRequest ¶ added in v0.9.0
type VDomAsyncInitiationRequest struct { Type string `json:"type" tstype:"\"asyncinitiationrequest\""` Ts int64 `json:"ts"` BlockId string `json:"blockid,omitempty"` }
func MakeAsyncInitiationRequest ¶ added in v0.9.0
func MakeAsyncInitiationRequest(blockId string) VDomAsyncInitiationRequest
type VDomBackendOpts ¶ added in v0.9.0
type VDomBackendUpdate ¶ added in v0.9.0
type VDomBackendUpdate struct { Type string `json:"type" tstype:"\"backendupdate\""` Ts int64 `json:"ts"` BlockId string `json:"blockid"` Opts *VDomBackendOpts `json:"opts,omitempty"` HasWork bool `json:"haswork,omitempty"` RenderUpdates []VDomRenderUpdate `json:"renderupdates,omitempty"` TransferElems []VDomTransferElem `json:"transferelems,omitempty"` StateSync []VDomStateSync `json:"statesync,omitempty"` RefOperations []VDomRefOperation `json:"refoperations,omitempty"` Messages []VDomMessage `json:"messages,omitempty"` }
func SplitBackendUpdate ¶ added in v0.9.2
func SplitBackendUpdate(update *VDomBackendUpdate) []*VDomBackendUpdate
SplitBackendUpdate splits a large VDomBackendUpdate into multiple smaller updates The first update contains all the core fields, while subsequent updates only contain array elements that need to be appended
func (*VDomBackendUpdate) CreateTransferElems ¶ added in v0.9.2
func (beUpdate *VDomBackendUpdate) CreateTransferElems()
type VDomBinding ¶ added in v0.9.0
type VDomBinding struct { Type string `json:"type" tstype:"\"binding\""` Bind string `json:"bind"` }
used in props
type VDomContextVal ¶
type VDomContextVal struct { Root *RootElem Comp *ComponentImpl HookIdx int }
type VDomCreateContext ¶ added in v0.9.0
type VDomCreateContext struct { Type string `json:"type" tstype:"\"createcontext\""` Ts int64 `json:"ts"` Meta waveobj.MetaMapType `json:"meta,omitempty"` Target *VDomTarget `json:"target,omitempty"` Persist bool `json:"persist,omitempty"` }
type VDomElem ¶ added in v0.9.0
type VDomElem struct { WaveId string `json:"waveid,omitempty"` // required, except for #text nodes Tag string `json:"tag"` Props map[string]any `json:"props,omitempty"` Children []VDomElem `json:"children,omitempty"` Text string `json:"text,omitempty"` }
vdom element
type VDomEvent ¶ added in v0.9.0
type VDomEvent struct { WaveId string `json:"waveid"` EventType string `json:"eventtype"` // usually the prop name (e.g. onClick, onKeyDown) GlobalEventType string `json:"globaleventtype,omitempty"` TargetValue string `json:"targetvalue,omitempty"` TargetChecked bool `json:"targetchecked,omitempty"` TargetName string `json:"targetname,omitempty"` TargetId string `json:"targetid,omitempty"` KeyData *WaveKeyboardEvent `json:"keydata,omitempty"` MouseData *WavePointerData `json:"mousedata,omitempty"` }
type VDomFrontendUpdate ¶ added in v0.9.0
type VDomFrontendUpdate struct { Type string `json:"type" tstype:"\"frontendupdate\""` Ts int64 `json:"ts"` BlockId string `json:"blockid"` CorrelationId string `json:"correlationid,omitempty"` Dispose bool `json:"dispose,omitempty"` // the vdom context was closed Resync bool `json:"resync,omitempty"` // resync (send all backend data). useful when the FE reloads RenderContext VDomRenderContext `json:"rendercontext,omitempty"` Events []VDomEvent `json:"events,omitempty"` StateSync []VDomStateSync `json:"statesync,omitempty"` RefUpdates []VDomRefUpdate `json:"refupdates,omitempty"` Messages []VDomMessage `json:"messages,omitempty"` }
type VDomFunc ¶ added in v0.9.0
type VDomFunc struct { Fn any `json:"-"` // server side function (called with reflection) Type string `json:"type" tstype:"\"func\""` StopPropagation bool `json:"stoppropagation,omitempty"` PreventDefault bool `json:"preventdefault,omitempty"` GlobalEvent string `json:"globalevent,omitempty"` Keys []string `json:"#keys,omitempty"` // special for keyDown events a list of keys to "capture" }
used in props
type VDomKeyboardEvent ¶ added in v0.9.0
type VDomKeyboardEvent struct { Type string `json:"type"` Key string `json:"key"` Code string `json:"code"` Shift bool `json:"shift,omitempty"` Control bool `json:"ctrl,omitempty"` Alt bool `json:"alt,omitempty"` Meta bool `json:"meta,omitempty"` Cmd bool `json:"cmd,omitempty"` Option bool `json:"option,omitempty"` Repeat bool `json:"repeat,omitempty"` Location int `json:"location,omitempty"` }
matches WaveKeyboardEvent
type VDomMessage ¶ added in v0.9.0
type VDomRef ¶ added in v0.9.0
type VDomRef struct { Type string `json:"type" tstype:"\"ref\""` RefId string `json:"refid"` TrackPosition bool `json:"trackposition,omitempty"` Position *VDomRefPosition `json:"position,omitempty"` HasCurrent bool `json:"hascurrent,omitempty"` }
used in props
func UseVDomRef ¶ added in v0.9.0
type VDomRefOperation ¶ added in v0.9.0
type VDomRefPosition ¶ added in v0.9.0
type VDomRefUpdate ¶ added in v0.9.0
type VDomRefUpdate struct { RefId string `json:"refid"` HasCurrent bool `json:"hascurrent"` Position *VDomRefPosition `json:"position,omitempty"` }
type VDomRenderContext ¶ added in v0.9.0
type VDomRenderUpdate ¶ added in v0.9.0
type VDomRenderUpdate struct { UpdateType string `json:"updatetype" tstype:"\"root\"|\"append\"|\"replace\"|\"remove\"|\"insert\""` WaveId string `json:"waveid,omitempty"` VDomWaveId string `json:"vdomwaveid,omitempty"` VDom *VDomElem `json:"vdom,omitempty"` // these get removed for transfer (encoded to transferelems) Index *int `json:"index,omitempty"` }
type VDomSimpleRef ¶ added in v0.9.2
type VDomSimpleRef[T any] struct { Current T `json:"current"` }
type VDomStateSync ¶ added in v0.9.0
type VDomTarget ¶ added in v0.9.0
type VDomTarget struct { NewBlock bool `json:"newblock,omitempty"` Magnified bool `json:"magnified,omitempty"` Toolbar *VDomTargetToolbar `json:"toolbar,omitempty"` }
target -- to support new targets in the future, like toolbars, partial blocks, splits, etc. default is vdom context inside of a terminal block
type VDomTargetToolbar ¶ added in v0.9.2
type VDomTransferElem ¶ added in v0.9.2
type VDomTransferElem struct { WaveId string `json:"waveid,omitempty"` // required, except for #text nodes Tag string `json:"tag"` Props map[string]any `json:"props,omitempty"` Children []string `json:"children,omitempty"` Text string `json:"text,omitempty"` }
the over the wire format for a vdom element
func ConvertElemsToTransferElems ¶ added in v0.9.2
func ConvertElemsToTransferElems(elems []VDomElem) []VDomTransferElem
func DedupTransferElems ¶ added in v0.9.2
func DedupTransferElems(elems []VDomTransferElem) []VDomTransferElem
type WaveKeyboardEvent ¶ added in v0.9.2
type WaveKeyboardEvent struct { Type string `json:"type" tstype:"\"keydown\"|\"keyup\"|\"keypress\"|\"unknown\""` Key string `json:"key"` // KeyboardEvent.key Code string `json:"code"` // KeyboardEvent.code Repeat bool `json:"repeat,omitempty"` Location int `json:"location,omitempty"` // KeyboardEvent.location // modifiers Shift bool `json:"shift,omitempty"` Control bool `json:"control,omitempty"` Alt bool `json:"alt,omitempty"` Meta bool `json:"meta,omitempty"` Cmd bool `json:"cmd,omitempty"` // special (on mac it is meta, on windows/linux it is alt) Option bool `json:"option,omitempty"` // special (on mac it is alt, on windows/linux it is meta) }
type WavePointerData ¶ added in v0.9.2
type WavePointerData struct { Button int `json:"button"` Buttons int `json:"buttons"` ClientX int `json:"clientx,omitempty"` ClientY int `json:"clienty,omitempty"` PageX int `json:"pagex,omitempty"` PageY int `json:"pagey,omitempty"` ScreenX int `json:"screenx,omitempty"` ScreenY int `json:"screeny,omitempty"` MovementX int `json:"movementx,omitempty"` MovementY int `json:"movementy,omitempty"` // Modifiers Shift bool `json:"shift,omitempty"` Control bool `json:"control,omitempty"` Alt bool `json:"alt,omitempty"` Meta bool `json:"meta,omitempty"` Cmd bool `json:"cmd,omitempty"` // special (on mac it is meta, on windows/linux it is alt) Option bool `json:"option,omitempty"` // special (on mac it is alt, on windows/linux it is meta) }
Click to show internal directories.
Click to hide internal directories.