Files
rose-ash/shared/sx/templates/shell.sx
giles a64b693a09 Remove old CSSX system — ~tw is the sole CSS engine
Phase 1 Step 1 of the architecture roadmap. The old cssx.sx
(cssx-resolve, cssx-process-token, cssx-template, old tw function)
is superseded by the ~tw component system in tw.sx.

- Delete shared/sx/templates/cssx.sx
- Remove cssx.sx from all load lists (sx_server.ml, run_tests.ml,
  mcp_tree.ml, compile-modules.js, bundle.sh, sx-build-all.sh)
- Replace (tw "tokens") inline style calls with (~tw :tokens "tokens")
  in layouts.sx and not-found.sx
- Remove _css-hash / init-css-tracking / SX-Css header plumbing
  (dead code — ~tw/flush + flush-collected-styles handle CSS now)
- Remove sx-css-classes param and meta tag from shell template
- Update stale data-cssx references to data-sx-css in tests

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

86 lines
3.8 KiB
Plaintext

(defcomp
~shared:shell/sx-page-shell
(&key
(title :as string)
(meta-html :as string?)
(csrf :as string)
(sx-css :as string?)
(component-hash :as string?)
(component-defs :as string?)
(pages-sx :as string?)
(page-sx :as string?)
(body-html :as string?)
(asset-url :as string)
(wasm-hash :as string?)
(platform-hash :as string?)
(sxbc-hash :as string?)
(inline-css :as string?)
(inline-head-js :as string?)
(init-sx :as string?))
(<>
(raw! "<!doctype html>")
(html
:lang "en"
(head
(meta :charset "utf-8")
(meta :name "viewport" :content "width=device-width, initial-scale=1")
(meta :name "robots" :content "index,follow")
(meta :name "theme-color" :content "#ffffff")
(title title)
(when meta-html (raw! meta-html))
(meta :name "csrf-token" :content csrf)
(style :id "sx-css" (raw! (or sx-css "")))
(let
((cssx-rules (collected "cssx")))
(clear-collected! "cssx")
(when
(not (empty? cssx-rules))
(style :data-sx-css true (raw! (join "" cssx-rules)))))
(if
(not (nil? inline-head-js))
(when
(not (empty? inline-head-js))
(script (raw! inline-head-js)))
(<>
(script
(raw!
"if(matchMedia('(hover:hover) and (pointer:fine)').matches){document.documentElement.classList.add('hover-capable')}"))
(script
(raw!
"document.addEventListener('click',function(e){var t=e.target.closest('[data-close-details]');if(!t)return;var d=t.closest('details');if(d)d.removeAttribute('open')})"))))
(if
(not (nil? inline-css))
(style (raw! inline-css))
(style
(raw!
"details[data-toggle-group=\"mobile-panels\"]>summary{list-style:none}\ndetails[data-toggle-group=\"mobile-panels\"]>summary::-webkit-details-marker{display:none}\n@media(min-width:768px){.nav-group:focus-within .submenu,.nav-group:hover .submenu{display:block}}\nimg{max-width:100%;height:auto}\n.clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n.clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}\n.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}\ndetails.group{overflow:hidden}details.group>summary{list-style:none}details.group>summary::-webkit-details-marker{display:none}\n.sx-indicator{display:none}.sx-request .sx-indicator{display:inline-flex}\n.sx-error .sx-indicator{display:none}.sx-loading .sx-indicator{display:inline-flex}\n.js-wrap.open .js-pop{display:block}.js-wrap.open .js-backdrop{display:block}"))))
(body
:class "bg-stone-50 text-stone-900"
(div :id "sx-root" (raw! (or body-html "")))
(div :id "portal-root")
(style
(raw!
"[data-sx-island] button,[data-sx-island] a,[data-sx-island] [role=button]{cursor:pointer}"))
(script
:type "text/sx"
:data-components true
:data-hash component-hash
(raw! (or component-defs "")))
(when
init-sx
(script :type "text/sx" :data-init true (raw! init-sx)))
(script :type "text/sx-pages" (raw! (or pages-sx "")))
(script
:type "text/sx"
:data-mount "#sx-root"
(raw! (or page-sx "")))
(<>
(script
:src (str
asset-url
"/wasm/sx_browser.bc.wasm.js?v="
(or wasm-hash "0")))
(script
:src (str asset-url "/wasm/sx-platform-2.js?v=" (or platform-hash "0"))
:data-sxbc-hash (or sxbc-hash "0")))))))