Revert render-dom-lake to original, simplify stepper lake

Reverted render-dom-lake SSR reuse — it broke OOB swaps (claimed
old lake elements during morph, stale content in copyright). The
framework's morphing handles lake updates correctly already.

Stepper: lake passes nil on client (prevents raw SX flash), effect
always calls rebuild-preview (no initial-render flag needed). Server
renders the expression for SSR; client rebuilds via render-to-dom
after boot when ~tw is available.

Removed initial-render dict flag — unnecessary complexity.

Copyright route not updating is a pre-existing issue: render-dom-island
renders the header island inline during OOB content rendering (sets
island-hydrated mark), but the copyright lake content doesn't reflect
the new path. Separate investigation needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-02 15:59:39 +00:00
parent c578dedbcc
commit 1098dd3794
10 changed files with 39 additions and 45 deletions

View File

@@ -920,17 +920,12 @@
(dict "i" 0 "skip" false)
args)
(let
((existing (when (and (client?) lake-id) (let ((el (dom-query (str "[data-sx-lake=\"" lake-id "\"]:not([data-sx-lake-claimed])")))) (when el (dom-set-attr el "data-sx-lake-claimed" "1")) el))))
(if
existing
existing
(let
((el (dom-create-element lake-tag nil)))
(dom-set-attr el "data-sx-lake" (or lake-id ""))
(for-each
(fn (c) (dom-append el (render-to-dom c env ns)))
children)
el))))))
((el (dom-create-element lake-tag nil)))
(dom-set-attr el "data-sx-lake" (or lake-id ""))
(for-each
(fn (c) (dom-append el (render-to-dom c env ns)))
children)
el))))
(define
render-dom-marsh

File diff suppressed because one or more lines are too long

View File

@@ -346,7 +346,19 @@
(resp-ok status get-header text)
(when
resp-ok
(dom-set-inner-html main text)
(let
((ct (or (get-header "content-type") "")))
(if
(contains? ct "text/html")
(let
((parser (host-new "DOMParser"))
(doc (host-call parser "parseFromString" text "text/html"))
(content (host-call doc "querySelector" "#sx-content")))
(if
content
(dom-set-inner-html main (host-get content "innerHTML"))
(dom-set-inner-html main text)))
(dom-set-inner-html main text)))
(post-swap main)
(host-call (dom-window) "scrollTo" 0 scroll-y)))
(fn (err) (log-warn (str "fetch-and-restore error: " err))))))

File diff suppressed because one or more lines are too long

View File

@@ -433,15 +433,6 @@
(run-post-render-hooks)
(flush-collected-styles)
(set-timeout (fn () (process-elements nil)) 0)
(dom-listen
(dom-window)
"popstate"
(fn
(e)
(let
((state (host-get e "state"))
(scrollY (if state (or (get state "scrollY") 0) 0)))
(handle-popstate scrollY))))
(dom-set-attr
(host-get (dom-document) "documentElement")
"data-sx-ready"

File diff suppressed because one or more lines are too long

View File

@@ -1589,7 +1589,7 @@
(try-client-route pathname target-sel)
(browser-scroll-to 0 scrollY)
(let
((headers (build-request-headers target "GET" url)))
((headers (dict "SX-History-Restore" "true")))
(fetch-and-restore target url headers scrollY)))))))
(define

File diff suppressed because one or more lines are too long

View File

@@ -8,8 +8,7 @@
(if (client?) (def-store "home-stepper" (fn () {:step-idx (signal 16)})) nil))
(step-idx (if store (get store "step-idx") (signal 16)))
(dom-stack-sig (signal (list)))
(code-tokens (signal (list)))
(initial-render (dict "v" true)))
(code-tokens (signal (list))))
(letrec
((split-tag (fn (expr result) (cond (not (list? expr)) (append! result {:expr expr :type "leaf"}) (empty? expr) nil (not (= (type-of (first expr)) "symbol")) (append! result {:expr expr :type "leaf"}) (is-html-tag? (symbol-name (first expr))) (let ((ctag (symbol-name (first expr))) (cargs (rest expr)) (cch (list)) (cat (list)) (spreads (list)) (ckw false)) (for-each (fn (a) (cond (= (type-of a) "keyword") (do (set! ckw true) (append! cat a)) ckw (do (set! ckw false) (append! cat a)) (and (list? a) (not (empty? a)) (= (type-of (first a)) "symbol") (starts-with? (symbol-name (first a)) "~")) (do (set! ckw false) (append! spreads a)) :else (do (set! ckw false) (append! cch a)))) cargs) (append! result {:spreads spreads :tag ctag :type "open" :attrs cat}) (for-each (fn (c) (split-tag c result)) cch) (append! result {:open-attrs cat :open-spreads spreads :tag ctag :type "close"})) :else (append! result {:expr expr :type "expr"}))))
(build-code-tokens
@@ -334,7 +333,7 @@
(build-code-tokens (first parsed) tokens step-ref 0)
(reset! code-tokens tokens)))))
(let
((_eff (effect (fn () (schedule-idle (fn () (build-code-dom) (if (get initial-render "v") (do (dict-set! initial-render "v" false) (let ((container (get-preview)) (depth 0) (all (deref steps)) (target (deref step-idx))) (let loop ((i 0)) (when (< i target) (let ((stype (get (nth all i) "type"))) (cond (= stype "open") (set! depth (+ depth 1)) (= stype "close") (set! depth (- depth 1)))) (loop (+ i 1)))) (let ((stack (if container (list container) (list))) (node container)) (let walk ((d 0)) (when (and (< d depth) node) (let ((child (host-get node "lastElementChild"))) (when child (append! stack child) (set! node child))) (walk (+ d 1)))) (set-stack stack)))) (rebuild-preview (deref step-idx))) (update-code-highlight) (run-post-render-hooks)))))))
((_eff (effect (fn () (schedule-idle (fn () (build-code-dom) (rebuild-preview (deref step-idx)) (update-code-highlight) (run-post-render-hooks)))))))
(div
(~tw :tokens "space-y-4 text-center")
(div
@@ -389,4 +388,6 @@
"▶"))
(lake
:id "home-preview"
(steps-to-preview (deref steps) (deref step-idx))))))))
(when
(not (client?))
(steps-to-preview (deref steps) (deref step-idx)))))))))

View File

@@ -920,17 +920,12 @@
(dict "i" 0 "skip" false)
args)
(let
((existing (when (and (client?) lake-id) (let ((el (dom-query (str "[data-sx-lake=\"" lake-id "\"]:not([data-sx-lake-claimed])")))) (when el (dom-set-attr el "data-sx-lake-claimed" "1")) el))))
(if
existing
existing
(let
((el (dom-create-element lake-tag nil)))
(dom-set-attr el "data-sx-lake" (or lake-id ""))
(for-each
(fn (c) (dom-append el (render-to-dom c env ns)))
children)
el))))))
((el (dom-create-element lake-tag nil)))
(dom-set-attr el "data-sx-lake" (or lake-id ""))
(for-each
(fn (c) (dom-append el (render-to-dom c env ns)))
children)
el))))
(define
render-dom-marsh