Files
rose-ash/sx/sx/nav-data.sx
giles dfccd113fc Move sx docs page helpers from Python to pure SX composition (Phase 6)
Nav data, section nav, example content, reference table builders, and
all slug dispatch now live in .sx files. Python helpers reduced to
data-only returns (highlight, primitives-data, reference-data,
attr-detail-data). Deleted essays.py and utils.py entirely.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:49:04 +00:00

88 lines
4.2 KiB
Plaintext

;; Navigation data and section-nav component for sx docs.
;; Replaces Python nav tuples from content/pages.py and _nav_items_sx() from utils.py.
;; @css aria-selected:bg-violet-200 aria-selected:text-violet-900
(define docs-nav-items (list
(dict :label "Introduction" :href "/docs/introduction")
(dict :label "Getting Started" :href "/docs/getting-started")
(dict :label "Components" :href "/docs/components")
(dict :label "Evaluator" :href "/docs/evaluator")
(dict :label "Primitives" :href "/docs/primitives")
(dict :label "CSS" :href "/docs/css")
(dict :label "Server Rendering" :href "/docs/server-rendering")))
(define reference-nav-items (list
(dict :label "Attributes" :href "/reference/attributes")
(dict :label "Headers" :href "/reference/headers")
(dict :label "Events" :href "/reference/events")
(dict :label "JS API" :href "/reference/js-api")))
(define protocols-nav-items (list
(dict :label "Wire Format" :href "/protocols/wire-format")
(dict :label "Fragments" :href "/protocols/fragments")
(dict :label "Resolver I/O" :href "/protocols/resolver-io")
(dict :label "Internal Services" :href "/protocols/internal-services")
(dict :label "ActivityPub" :href "/protocols/activitypub")
(dict :label "Future" :href "/protocols/future")))
(define examples-nav-items (list
(dict :label "Click to Load" :href "/examples/click-to-load")
(dict :label "Form Submission" :href "/examples/form-submission")
(dict :label "Polling" :href "/examples/polling")
(dict :label "Delete Row" :href "/examples/delete-row")
(dict :label "Inline Edit" :href "/examples/inline-edit")
(dict :label "OOB Swaps" :href "/examples/oob-swaps")
(dict :label "Lazy Loading" :href "/examples/lazy-loading")
(dict :label "Infinite Scroll" :href "/examples/infinite-scroll")
(dict :label "Progress Bar" :href "/examples/progress-bar")
(dict :label "Active Search" :href "/examples/active-search")
(dict :label "Inline Validation" :href "/examples/inline-validation")
(dict :label "Value Select" :href "/examples/value-select")
(dict :label "Reset on Submit" :href "/examples/reset-on-submit")
(dict :label "Edit Row" :href "/examples/edit-row")
(dict :label "Bulk Update" :href "/examples/bulk-update")
(dict :label "Swap Positions" :href "/examples/swap-positions")
(dict :label "Select Filter" :href "/examples/select-filter")
(dict :label "Tabs" :href "/examples/tabs")
(dict :label "Animations" :href "/examples/animations")
(dict :label "Dialogs" :href "/examples/dialogs")
(dict :label "Keyboard Shortcuts" :href "/examples/keyboard-shortcuts")
(dict :label "PUT / PATCH" :href "/examples/put-patch")
(dict :label "JSON Encoding" :href "/examples/json-encoding")
(dict :label "Vals & Headers" :href "/examples/vals-and-headers")
(dict :label "Loading States" :href "/examples/loading-states")
(dict :label "Request Abort" :href "/examples/sync-replace")
(dict :label "Retry" :href "/examples/retry")))
(define essays-nav-items (list
(dict :label "sx sucks" :href "/essays/sx-sucks")
(dict :label "Why S-Expressions" :href "/essays/why-sexps")
(dict :label "The htmx/React Hybrid" :href "/essays/htmx-react-hybrid")
(dict :label "On-Demand CSS" :href "/essays/on-demand-css")
(dict :label "Client Reactivity" :href "/essays/client-reactivity")
(dict :label "SX Native" :href "/essays/sx-native")
(dict :label "The SX Manifesto" :href "/essays/sx-manifesto")
(dict :label "Tail-Call Optimization" :href "/essays/tail-call-optimization")
(dict :label "Continuations" :href "/essays/continuations")))
;; Find the current nav label for a slug by matching href suffix.
;; Returns the label string or nil if no match.
(define find-current
(fn (items slug)
(when slug
(some (fn (item)
(when (ends-with? (get item "href") slug)
(get item "label")))
items))))
;; Generic section nav — builds nav links from a list of items.
;; Replaces _nav_items_sx() and all section-specific nav builders in utils.py.
(defcomp ~section-nav (&key items current)
(<> (map (fn (item)
(~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)))