(defcomp ~shared:cards/post-card (&key (title :as string) (slug :as string) (href :as string) (feature-image :as string?) (excerpt :as string?) (status :as string?) (published-at :as string?) (updated-at :as string?) (publish-requested :as boolean?) (hx-select :as string?) like widgets at-bar) (article :class "border-b pb-6 last:border-b-0 relative" (when like like) (a :href href :sx-get href :sx-target "#main-panel" :sx-select hx-select :sx-swap "outerHTML" :sx-push-url "true" :class "block rounded-xl bg-white shadow hover:shadow-md transition overflow-hidden" (header :class "mb-2 text-center" (h2 :class "text-4xl font-bold text-stone-900" title) (cond (= status "draft") (begin (div :class "flex justify-center gap-2 mt-1" (span :class "inline-block px-2 py-0.5 rounded-full text-xs font-semibold bg-amber-100 text-amber-800" "Draft") (when publish-requested (span :class "inline-block px-2 py-0.5 rounded-full text-xs font-semibold bg-blue-100 text-blue-800" "Publish requested"))) (when updated-at (p :class "text-sm text-stone-500" (str "Updated: " updated-at)))) published-at (p :class "text-sm text-stone-500" (str "Published: " published-at)))) (when feature-image (div :class "mb-4" (img :src feature-image :alt "" :class "rounded-lg w-full object-cover"))) (when excerpt (p :class "text-stone-700 text-lg leading-relaxed text-center" excerpt))) (when widgets widgets) (when at-bar at-bar))) (defcomp ~shared:cards/order-summary-card (&key (order-id :as string) (created-at :as string?) (description :as string?) (status :as string?) (currency :as string?) (total-amount :as string?)) (div :class "rounded-2xl border border-stone-200 bg-white/80 p-4 sm:p-6 space-y-2 text-xs sm:text-sm text-stone-800" (p (span :class "font-medium" "Order ID:") " " (span :class "font-mono" (str "#" order-id))) (p (span :class "font-medium" "Created:") " " (or created-at "\u2014")) (p (span :class "font-medium" "Description:") " " (or description "\u2013")) (p (span :class "font-medium" "Status:") " " (~shared:controls/status-pill :status (or status "pending") :size "[11px]")) (p (span :class "font-medium" "Currency:") " " (or currency "GBP")) (p (span :class "font-medium" "Total:") " " (if total-amount (str (or currency "GBP") " " total-amount) "\u2013"))))