From 506bfd63ddcb6aa540f3f5d83aebcfe106fae99a Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Mon, 8 Jun 2026 06:22:25 +0200 Subject: [PATCH] docs(specs): standardize loading states on Skeleton recipes (#53) --- .../2026-06-08-loading-skeletons-design.md | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 docs/superpowers/specs/2026-06-08-loading-skeletons-design.md diff --git a/docs/superpowers/specs/2026-06-08-loading-skeletons-design.md b/docs/superpowers/specs/2026-06-08-loading-skeletons-design.md new file mode 100644 index 0000000..9c45a9c --- /dev/null +++ b/docs/superpowers/specs/2026-06-08-loading-skeletons-design.md @@ -0,0 +1,115 @@ +# Standardize Loading States on Skeleton — Design + +**Date:** 2026-06-08 +**Status:** Approved (brainstorming) — ready for implementation planning. +**Issue:** #53. + +## Context + +Loading is rendered three incompatible ways: good `Skeleton` (objects-table, object-detail, +search-panel, field-list); bare "…" text in a `
  • ` (vocabulary-list, vocabulary-terms, +authorities-page) — looks half-rendered; and empty `role="status"` divs (require-auth → blank app on +first load; object-edit-form → blank form pane). Plus the lazy-route `FormFallback` renders full-pane +"Loading…" text → flash + layout shift on first nav to `/objects/new`, `/objects/:id/edit`, `/fields`. + +`Skeleton` (`ui/skeleton.tsx`) is a simple `animate-pulse rounded-md bg-muted` div. No shared +skeleton recipes or Spinner exist. No tests assert loading markup (they `findBy` content), so retiring +the placeholders won't break tests. The three "…" sites render a `
  • ` inside a `