All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 5m35s
- Server sends sexp source text, client (sexp.js) renders everything - SexpExpr marker class for nested sexp composition in serialize() - sexp_page() HTML shell with data-mount="body" for full page loads - sexp_response() returns text/sexp for OOB/partial responses - ~app-body layout component replaces ~app-layout (no raw!) - ~rich-text is the only component using raw! (for CMS HTML content) - Fragment endpoints return text/sexp, auto-wrapped in SexpExpr - All _*_html() helpers converted to _*_sexp() returning sexp source - Head auto-hoist: sexp.js moves meta/title/link/script[ld+json] from rendered body to document.head automatically - Unknown components render warning box instead of crashing page - Component kwargs preserve AST for lazy rendering (fixes <> in kwargs) - Fix unterminated paren in events/sexp/tickets.sexpr Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 lines
1.6 KiB
Plaintext
27 lines
1.6 KiB
Plaintext
;; Cart summary / checkout components
|
|
|
|
(defcomp ~cart-checkout-form (&key action csrf label)
|
|
(form :method "post" :action action :class "w-full"
|
|
(input :type "hidden" :name "csrf_token" :value csrf)
|
|
(button :type "submit" :class "w-full inline-flex items-center justify-center px-4 py-2 text-xs sm:text-sm rounded-full border border-emerald-600 bg-emerald-600 text-white hover:bg-emerald-700 transition"
|
|
(i :class "fa-solid fa-credit-card mr-2" :aria-hidden "true") label)))
|
|
|
|
(defcomp ~cart-checkout-signin (&key href)
|
|
(div :class "w-full flex"
|
|
(a :href href :class "w-full cursor-pointer flex flex-row items-center justify-center p-3 gap-2 rounded bg-stone-200 text-black hover:bg-stone-300 transition"
|
|
(i :class "fa-solid fa-key") (span "sign in or register to checkout"))))
|
|
|
|
(defcomp ~cart-summary-panel (&key item-count subtotal checkout)
|
|
(aside :id "cart-summary" :class "lg:pl-2"
|
|
(div :class "rounded-2xl bg-white shadow-sm border border-stone-200 p-4 sm:p-5"
|
|
(h2 :class "text-sm sm:text-base font-semibold text-stone-900 mb-3 sm:mb-4" "Order summary")
|
|
(dl :class "space-y-2 text-xs sm:text-sm"
|
|
(div :class "flex items-center justify-between"
|
|
(dt :class "text-stone-600" "Items") (dd :class "text-stone-900" item-count))
|
|
(div :class "flex items-center justify-between"
|
|
(dt :class "text-stone-600" "Subtotal") (dd :class "text-stone-900" subtotal)))
|
|
(div :class "flex flex-col items-center w-full"
|
|
(h1 :class "text-5xl mt-2" "This is a test - it will not take actual money")
|
|
(div "use dummy card number: 5555 5555 5555 4444"))
|
|
(div :class "mt-4 sm:mt-5" checkout))))
|