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:
Ryan Hamamura
2026-02-20 05:11:22 -10:00
parent 47dcab8fea
commit 7eb86999b2
12 changed files with 724 additions and 146 deletions

View File

@@ -90,7 +90,7 @@ func TestCustomDatastarPath(t *testing.T) {
}
func TestSignal(t *testing.T) {
var sig *signal
var sig *Signal
v := New()
v.Page("/", func(c *Context) {
sig = c.Signal("test")
@@ -106,7 +106,7 @@ func TestSignal(t *testing.T) {
func TestAction(t *testing.T) {
var trigger *actionTrigger
var sig *signal
var sig *Signal
v := New()
v.Page("/", func(c *Context) {
trigger = c.Action(func() {})
@@ -167,7 +167,7 @@ func TestEventTypes(t *testing.T) {
t.Run("WithSignal", func(t *testing.T) {
var trigger *actionTrigger
var sig *signal
var sig *Signal
v := New()
v.Page("/", func(c *Context) {
trigger = c.Action(func() {})
@@ -207,7 +207,7 @@ func TestOnKeyDownWithWindow(t *testing.T) {
func TestOnKeyDownMap(t *testing.T) {
t.Run("multiple bindings with different actions", func(t *testing.T) {
var move, shoot *actionTrigger
var dir *signal
var dir *Signal
v := New()
v.Page("/", func(c *Context) {
dir = c.Signal("none")
@@ -251,7 +251,7 @@ func TestOnKeyDownMap(t *testing.T) {
t.Run("WithSignal per binding", func(t *testing.T) {
var move *actionTrigger
var dir *signal
var dir *Signal
v := New()
v.Page("/", func(c *Context) {
dir = c.Signal("none")