;; Routing analyzer — live demonstration of client-side routing classification. ;; Shows which pages route client-side (pure, instant) vs server-side (IO/data). ;; @css bg-green-100 text-green-800 bg-violet-600 bg-stone-200 text-violet-600 text-stone-600 text-green-600 rounded-full h-2.5 grid-cols-2 bg-blue-100 text-blue-800 bg-amber-100 text-amber-800 grid-cols-4 marker:text-stone-400 bg-blue-50 bg-amber-50 text-blue-700 text-amber-700 border-blue-200 border-amber-200 bg-blue-500 bg-amber-500 grid-cols-3 border-green-200 bg-green-50 text-green-700 (defcomp ~routing-analyzer-content (&key pages total-pages client-count server-count registry-sample) (~doc-page :title "Routing Analyzer" (p :class "text-stone-600 mb-6" "Live classification of all " (strong (str total-pages)) " pages by routing mode. " "Pages without " (code ":data") " dependencies are " (span :class "text-green-700 font-medium" "client-routable") " — after initial load they render instantly from the page registry without a server roundtrip. " "Pages with data dependencies fall back to " (span :class "text-amber-700 font-medium" "server fetch") " transparently. Powered by " (a :href "/sx/(language.(spec.router))" :class "text-violet-700 underline" "router.sx") " route matching and " (a :href "/sx/(language.(spec.deps))" :class "text-violet-700 underline" "deps.sx") " IO detection.") (div :class "mb-8 grid grid-cols-4 gap-4" (~analyzer-stat :label "Total Pages" :value (str total-pages) :cls "text-violet-600") (~analyzer-stat :label "Client-Routable" :value (str client-count) :cls "text-green-600") (~analyzer-stat :label "Server-Only" :value (str server-count) :cls "text-amber-600") (~analyzer-stat :label "Client Ratio" :value (str (round (* (/ client-count total-pages) 100)) "%") :cls "text-blue-600")) ;; Route classification bar (div :class "mb-8" (div :class "flex items-center gap-2 mb-2" (span :class "text-sm font-medium text-stone-600" "Client") (div :class "flex-1") (span :class "text-sm font-medium text-stone-600" "Server")) (div :class "w-full bg-amber-200 rounded-full h-4 overflow-hidden" (div :class "bg-green-500 h-4 rounded-l-full transition-all" :style (str "width: " (round (* (/ client-count total-pages) 100)) "%")))) (~doc-section :title "Route Table" :id "routes" (div :class "space-y-2" (map (fn (page) (~routing-row :name (get page "name") :path (get page "path") :mode (get page "mode") :has-data (get page "has-data") :content-expr (get page "content-expr") :reason (get page "reason"))) pages))) (~doc-section :title "Page Registry Format" :id "registry" (p :class "text-stone-600 mb-4" "The server serializes page metadata as SX dict literals inside " (code "