(defcomp
  (&key node siblings is-leaf level depth)
  :affinity :server
  (let*
    ((sibs (or siblings (list)))
      (count (len sibs))
      (row-opacity
        (if
          (and level depth (> depth 0))
          (+ (* (/ level depth) 0.75) 0.25)
          1)))
    (when
      (> count 0)
      (let*
        ((idx (find-nav-index sibs node))
          (prev-idx (mod (+ (- idx 1) count) count))
          (next-idx (mod (+ idx 1) count))
          (prev-node (nth sibs prev-idx))
          (next-node (nth sibs next-idx)))
        (div
          (~tw
            :tokens "w-full max-w-3xl mx-auto px-4 py-2 grid grid-cols-3 items-center")
          :style (str "opacity:" row-opacity ";transition:opacity 0.3s;")
          (a
            :href (get prev-node "href")
            :sx-get (get prev-node "href")
            :sx-target "#sx-content"
            :sx-select "#sx-content"
            :sx-swap "innerHTML"
            :sx-push-url "true"
            (~tw :tokens "text-right min-w-0 truncate text-stone-500 text-sm")
            (str "← " (get prev-node "label")))
          (a
            :href (get node "href")
            :sx-get (get node "href")
            :sx-target "#sx-content"
            :sx-select "#sx-content"
            :sx-swap "innerHTML"
            :sx-push-url "true"
            (~tw
              :tokens (str
                "text-center min-w-0 truncate px-1 "
                (if
                  is-leaf
                  "text-violet-700 text-2xl font-bold"
                  "text-violet-700 text-lg font-semibold")))
            (get node "label"))
          (a
            :href (get next-node "href")
            :sx-get (get next-node "href")
            :sx-target "#sx-content"
            :sx-select "#sx-content"
            :sx-swap "innerHTML"
            :sx-push-url "true"
            (~tw :tokens "text-left min-w-0 truncate text-stone-500 text-sm")
            (str (get next-node "label") " →")))))))
