Move events/market/blog composition from Python to .sx defcomps (Phase 9)
Some checks failed
Build and Deploy / build-and-deploy (push) Failing after 2m33s

Continues the pattern of eliminating Python sx_call tree-building in favour
of data-driven .sx defcomps. POST/PUT/DELETE routes now pass plain data
(dicts, lists, scalars) and let .sx handle iteration, conditionals, and
layout via map/let/when/if. Single response components wrap OOB swaps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 08:17:09 +00:00
parent 877e776977
commit 51ebf347ba
23 changed files with 1841 additions and 1423 deletions

View File

@@ -36,6 +36,36 @@
(div :class "hidden sm:grid grid-cols-7 text-center text-md font-semibold text-stone-700 mb-2" weekdays)
(div :class "grid grid-cols-1 sm:grid-cols-7 gap-px bg-stone-200 rounded-xl overflow-hidden" cells))))
;; Calendar grid from data — all iteration in sx
(defcomp ~events-calendar-grid-from-data (&key pill-cls month-name year
prev-year-href prev-month-href
next-month-href next-year-href
weekday-names cells)
(~events-calendar-grid
:arrows (<>
(~events-calendar-nav-arrow :pill-cls pill-cls :href prev-year-href :label "\u00ab")
(~events-calendar-nav-arrow :pill-cls pill-cls :href prev-month-href :label "\u2039")
(~events-calendar-month-label :month-name month-name :year year)
(~events-calendar-nav-arrow :pill-cls pill-cls :href next-month-href :label "\u203a")
(~events-calendar-nav-arrow :pill-cls pill-cls :href next-year-href :label "\u00bb"))
:weekdays (<> (map (lambda (wd) (~events-calendar-weekday :name wd))
(or weekday-names (list))))
:cells (<> (map (lambda (cell)
(~events-calendar-cell
:cell-cls (get cell "cell-cls")
:day-short (when (get cell "day-str")
(~events-calendar-day-short :day-str (get cell "day-str")))
:day-num (when (get cell "day-href")
(~events-calendar-day-num :pill-cls pill-cls
:href (get cell "day-href") :num (get cell "day-num")))
:badges (when (get cell "badges")
(<> (map (lambda (b)
(~events-calendar-entry-badge
:bg-cls (get b "bg-cls") :name (get b "name")
:state-label (get b "state-label")))
(get cell "badges"))))))
(or cells (list))))))
(defcomp ~events-calendar-description-display (&key description edit-url)
(div :id "calendar-description"
(if description