(defcomp ~post-card (&key title slug href feature-image excerpt
                          status published-at updated-at publish-requested
                          hx-select 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 ~order-summary-card (&key order-id created-at description status currency total-amount)
  (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:") " " (~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"))))
