From 5acf63cb4b5d0600d916e02f0405b59743b65365 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 17 Feb 2026 00:12:04 +0000 Subject: [PATCH] feat: add WASM entry point with renderToString Co-Authored-By: Claude Opus 4.6 --- cmd/wasm/main.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 cmd/wasm/main.go diff --git a/cmd/wasm/main.go b/cmd/wasm/main.go new file mode 100644 index 0000000..c695292 --- /dev/null +++ b/cmd/wasm/main.go @@ -0,0 +1,55 @@ +//go:build js && wasm + +package main + +import ( + "syscall/js" + + html "forge.lthn.ai/core/go-html" +) + +func renderToString(_ js.Value, args []js.Value) any { + if len(args) < 1 { + return "" + } + + variant := args[0].String() + ctx := html.NewContext() + + if len(args) >= 2 { + ctx.Locale = args[1].String() + } + + layout := html.NewLayout(variant) + + if len(args) >= 3 && args[2].Type() == js.TypeObject { + slots := args[2] + for _, slot := range []string{"H", "L", "C", "R", "F"} { + content := slots.Get(slot) + if content.Type() == js.TypeString && content.String() != "" { + switch slot { + case "H": + layout.H(html.Raw(content.String())) + case "L": + layout.L(html.Raw(content.String())) + case "C": + layout.C(html.Raw(content.String())) + case "R": + layout.R(html.Raw(content.String())) + case "F": + layout.F(html.Raw(content.String())) + } + } + } + } + + return layout.Render(ctx) +} + +func main() { + js.Global().Set("gohtml", js.ValueOf(map[string]any{ + "renderToString": js.FuncOf(renderToString), + })) + + select {} +}