All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m20s
Replace all 676 inline sexp() string calls across 7 services with render(component_name, **kwargs) calls backed by 46 external .sexpr component definition files (587 defcomps total). - Add render() function to shared/sexp/jinja_bridge.py - Add load_service_components() helper and update load_sexp_dir() for *.sexpr - Update parser keyword regex to support HTMX hx-on::event syntax - Convert remaining inline HTML in route files to render() calls - Add shared/sexp/templates/misc.sexp for cross-service utility components Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
49 lines
1.9 KiB
Plaintext
49 lines
1.9 KiB
Plaintext
;; Account dashboard components
|
|
|
|
(defcomp ~account-error-banner (&key error)
|
|
(when error
|
|
(div :class "rounded-lg border border-red-200 bg-red-50 text-red-800 px-4 py-3 text-sm"
|
|
(raw! error))))
|
|
|
|
(defcomp ~account-user-email (&key email)
|
|
(when email
|
|
(p :class "text-sm text-stone-500 mt-1" (raw! email))))
|
|
|
|
(defcomp ~account-user-name (&key name)
|
|
(when name
|
|
(p :class "text-sm text-stone-600" (raw! name))))
|
|
|
|
(defcomp ~account-logout-form (&key csrf-token)
|
|
(form :action "/auth/logout/" :method "post"
|
|
(input :type "hidden" :name "csrf_token" :value csrf-token)
|
|
(button :type "submit"
|
|
:class "inline-flex items-center gap-2 rounded-full border border-stone-300 px-4 py-2 text-sm font-medium text-stone-700 hover:bg-stone-50 transition"
|
|
(i :class "fa-solid fa-right-from-bracket text-xs") " Sign out")))
|
|
|
|
(defcomp ~account-label-item (&key name)
|
|
(span :class "inline-flex items-center rounded-full border border-stone-200 px-3 py-1 text-xs font-medium bg-white/60"
|
|
(raw! name)))
|
|
|
|
(defcomp ~account-labels-section (&key items-html)
|
|
(when items-html
|
|
(div
|
|
(h2 :class "text-base font-semibold tracking-tight mb-3" "Labels")
|
|
(div :class "flex flex-wrap gap-2" (raw! items-html)))))
|
|
|
|
(defcomp ~account-main-panel (&key error-html email-html name-html logout-html labels-html)
|
|
(div :class "w-full max-w-3xl mx-auto px-4 py-6"
|
|
(div :class "bg-white/70 backdrop-blur rounded-2xl shadow border border-stone-200 p-6 sm:p-8 space-y-8"
|
|
(raw! error-html)
|
|
(div :class "flex items-center justify-between"
|
|
(div
|
|
(h1 :class "text-xl font-semibold tracking-tight" "Account")
|
|
(raw! email-html)
|
|
(raw! name-html))
|
|
(raw! logout-html))
|
|
(raw! labels-html))))
|
|
|
|
;; Header child wrapper
|
|
(defcomp ~account-header-child (&key inner-html)
|
|
(div :id "root-header-child" :class "flex flex-col w-full items-center"
|
|
(raw! inner-html)))
|