feat: refactor maplibre for reactive signals and Via-native API
- Export Signal type (signal → Signal) so subpackages can reference it - Expose viewport signals as public fields (CenterLng, CenterLat, Zoom, Bearing, Pitch) for .Text() display and .Bind() usage - Add signal-backed marker positions (LngSignal/LatSignal) with data-effect reactivity for server push and dragend writeback - Add event system (MapEvent, OnClick, OnLayerClick, OnMouseMove, OnContextMenu) using hidden inputs + action triggers - Add Source interface replacing type-switch, with RawSource escape hatch - Add CameraOptions for FlyTo/EaseTo/JumpTo/FitBounds/Stop - Add Control interface with NavigationControl, ScaleControl, GeolocateControl, FullscreenControl - Expand Options with interaction toggles, MaxBounds, and Extra map - Add effectspike example to validate data-effect with server-pushed signals - Update maplibre example to showcase all new features
This commit is contained in:
52
internal/examples/effectspike/main.go
Normal file
52
internal/examples/effectspike/main.go
Normal file
@@ -0,0 +1,52 @@
|
||||
// Spike to validate that Datastar's data-effect re-evaluates when signals are
|
||||
// updated via PatchSignals from the server, and that Via's hex signal IDs work
|
||||
// in $signalID expression syntax.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/ryanhamamura/via"
|
||||
"github.com/ryanhamamura/via/h"
|
||||
)
|
||||
|
||||
func main() {
|
||||
v := via.New()
|
||||
v.Config(via.Options{
|
||||
DocumentTitle: "data-effect Spike",
|
||||
ServerAddress: ":7332",
|
||||
DevMode: true,
|
||||
})
|
||||
|
||||
v.Page("/", func(c *via.Context) {
|
||||
x := c.Signal(0)
|
||||
y := c.Signal(0)
|
||||
|
||||
c.OnInterval(time.Second, func() {
|
||||
x.SetValue(rand.Intn(500))
|
||||
y.SetValue(rand.Intn(500))
|
||||
c.SyncSignals()
|
||||
})
|
||||
|
||||
c.View(func() h.H {
|
||||
return h.Div(
|
||||
h.Attr("style", "padding:1rem;font-family:sans-serif"),
|
||||
h.H1(h.Text("data-effect Spike")),
|
||||
h.P(h.Text("x: "), x.Text(), h.Text(" y: "), y.Text()),
|
||||
h.Div(
|
||||
h.ID("box"),
|
||||
h.Attr("style", "width:20px;height:20px;background:red;position:absolute"),
|
||||
h.DataEffect(fmt.Sprintf(
|
||||
"document.getElementById('box').style.left=$%s+'px';"+
|
||||
"document.getElementById('box').style.top=$%s+'px'",
|
||||
x.ID(), y.ID(),
|
||||
)),
|
||||
),
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
v.Start()
|
||||
}
|
||||
Reference in New Issue
Block a user