(defcomp
  (&key name email role)
  (form
    :sx-put "/sx/(geography.(hypermedia.(example.(api.putpatch))))"
    :sx-target "#pp-target"
    :sx-swap "innerHTML"
    (~tw :tokens "space-y-3")
    (div
      (label (~tw :tokens "block text-sm font-medium text-stone-700 mb-1") "Name")
      (input
        :type "text"
        :name "name"
        :value name
        (~tw :tokens "w-full px-3 py-2 border border-stone-300 rounded text-sm")))
    (div
      (label (~tw :tokens "block text-sm font-medium text-stone-700 mb-1") "Email")
      (input
        :type "text"
        :name "email"
        :value email
        (~tw :tokens "w-full px-3 py-2 border border-stone-300 rounded text-sm")))
    (div
      (label (~tw :tokens "block text-sm font-medium text-stone-700 mb-1") "Role")
      (input
        :type "text"
        :name "role"
        :value role
        (~tw :tokens "w-full px-3 py-2 border border-stone-300 rounded text-sm")))
    (div
      (~tw :tokens "flex gap-2")
      (button
        :type "submit"
        (~tw :tokens "px-4 py-2 bg-violet-600 text-white rounded text-sm hover:bg-violet-700")
        "Save All (PUT)")
      (button
        :type "button"
        :sx-get "/sx/(geography.(hypermedia.(example.(api.putpatch-cancel))))"
        :sx-target "#pp-target"
        :sx-swap "innerHTML"
        (~tw :tokens "px-4 py-2 bg-stone-200 text-stone-700 rounded text-sm hover:bg-stone-300")
        "Cancel"))))
