Files
rose-ash/shared/sx/templates/client-libs/nav-tree.sx
giles d40a9c6796 sx-tools: WASM kernel updates, TW/CSSX rework, content refresh, new debugging tools
Build tooling: updated OCaml bootstrapper, compile-modules, bundle.sh, sx-build-all.
WASM browser: rebuilt sx_browser.bc.js/wasm, sx-platform-2.js, .sxbc bytecode files.
CSSX/Tailwind: reworked cssx.sx templates and tw-layout, added tw-type support.
Content: refreshed essays, plans, geography, reactive islands, docs, demos, handlers.
New tools: bisect_sxbc.sh, test-spa.js, render-trace.sx, morph playwright spec.
Tests: added test-match.sx, test-examples.sx, updated test-tw.sx and web tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:31:57 +00:00

214 lines
6.5 KiB
Plaintext

(define
find-current
(fn
(items slug)
(when
slug
(some
(fn
(item)
(when
(ends-with? (get item "href") (str "." slug "))"))
(get item "label")))
items))))
(defcomp
~nav-data/section-nav
(&key items current)
(<>
(map
(fn
(item)
(~shared:layout/nav-link
:href (get item "href")
:label (get item "label")
:is-selected (when (= (get item "label") current) "true")
:select-colours "aria-selected:bg-violet-200 aria-selected:text-violet-900"))
items)))
(define
sx-nav-tree
(dict
:href "/sx/"
:label "sx"
:children (list
(dict
:href "/sx/(geography)"
:label "Geography"
:children (list
(dict
:href "/sx/(geography.(reactive))"
:label "Reactive Islands"
:children reactive-islands-nav-items)
(dict
:href "/sx/(geography.(hypermedia))"
:label "Hypermedia Lakes"
:children (list
(dict
:href "/sx/(geography.(hypermedia.(reference)))"
:label "Reference"
:children reference-nav-items)
(dict
:href "/sx/(geography.(hypermedia.(example)))"
:label "Examples"
:children examples-nav-items)))
(dict
:href "/sx/(geography.(scopes))"
:label "Scopes"
:summary "The unified primitive beneath provide, collect!, spreads, and islands. Named scope with downward value, upward accumulation, and a dedup flag.")
(dict
:href "/sx/(geography.(provide))"
:label "Provide / Emit!"
:summary "Sugar for scope-with-value. Render-time dynamic scope — the substrate beneath spreads, CSSX, and script collection.")
(dict
:href "/sx/(geography.(spreads))"
:label "Spreads"
:summary "Child-to-parent communication across render boundaries — spread, collect!, reactive-spread, built on scopes.")
(dict
:href "/sx/(geography.(marshes))"
:label "Marshes"
:children marshes-examples-nav-items
:summary "Where reactivity and hypermedia interpenetrate — server writes to signals, reactive transforms reshape server content, client state modifies how hypermedia is interpreted.")
(dict
:href "/sx/(geography.(isomorphism))"
:label "Isomorphism"
:children isomorphism-nav-items)
(dict
:href "/sx/(geography.(cek))"
:label "CEK Machine"
:children cek-nav-items)
(dict :href "/sx/(geography.(capabilities))" :label "Capabilities")
(dict
:href "/sx/(geography.(reactive-runtime))"
:label "Reactive Runtime"
:children reactive-runtime-nav-items)))
(dict
:href "/sx/(language)"
:label "Language"
:children (list
(dict
:href "/sx/(language.(doc))"
:label "Docs"
:children docs-nav-items)
(dict
:href "/sx/(language.(spec))"
:label "Specs"
:children specs-nav-items)
(dict
:href "/sx/(language.(spec.(explore.evaluator)))"
:label "Spec Explorer")
(dict
:href "/sx/(language.(bootstrapper))"
:label "Bootstrappers"
:children bootstrappers-nav-items)
(dict
:href "/sx/(language.(test))"
:label "Testing"
:children testing-nav-items)))
(dict
:href "/sx/(applications)"
:label "Applications"
:children (list
(dict :href "/sx/(applications.(sx-urls))" :label "SX URLs")
(dict
:href "/sx/(applications.(cssx))"
:label "CSSX"
:children cssx-nav-items)
(dict
:href "/sx/(applications.(protocol))"
:label "Protocols"
:children protocols-nav-items)
(dict :href "/sx/(applications.(sx-pub))" :label "sx-pub")
(dict
:href "/sx/(applications.(native-browser))"
:label "Native Browser")
(dict :href "/sx/(applications.(sxtp))" :label "SXTP Protocol")))
(dict :href "/sx/(tools)" :label "Tools" :children tools-nav-items)
(dict
:href "/sx/(etc)"
:label "Etc"
:children (list
(dict
:href "/sx/(etc.(essay))"
:label "Essays"
:children essays-nav-items)
(dict
:href "/sx/(etc.(philosophy))"
:label "Philosophy"
:children philosophy-nav-items)
(dict
:href "/sx/(etc.(plan))"
:label "Plans"
:children plans-nav-items))))))
(define
has-descendant-href?
(fn
(node path)
(let
((children (get node "children")))
(when
children
(some
(fn
(child)
(or
(= (get child "href") path)
(has-descendant-href? child path)))
children)))))
(define
find-nav-match
(fn
(items path)
(or
(some (fn (item) (when (= (get item "href") path) item)) items)
(some (fn (item) (when (has-descendant-href? item path) item)) items))))
(define
resolve-nav-path
(fn
(tree path)
(let
((trail (list)))
(define
walk
(fn
(node)
(let
((children (get node "children")))
(when
children
(let
((match (find-nav-match children path)))
(when
match
(append! trail {:siblings children :node match})
(when (not (= (get match "href") path)) (walk match))))))))
(walk tree)
(let
((depth (len trail)))
(if
(= depth 0)
{:children (get tree "children") :depth 0 :trail trail}
(let ((deepest (nth trail (- depth 1)))) {:children (get (get deepest "node") "children") :depth depth :trail trail}))))))
(define
find-nav-index
(fn
(items node)
(let
((target-href (get node "href")) (count (len items)))
(define
find-loop
(fn
(i)
(if
(>= i count)
0
(if
(= (get (nth items i) "href") target-href)
i
(find-loop (+ i 1))))))
(find-loop 0))))