Context
Epic #6504 ("Miner dashboard redesign") requires a shared async-state primitive both the miner-ui visual restyle and the chat message list can consume, so the two tracks never invent two different loading/error/empty implementations. apps/loopover-ui/src/components/site/state-views.tsx already has LoadingState/EmptyState/ErrorState/StateBoundary/Spinner, confirmed reusable as-is by the #6244 audit (apps/loopover-ui/src/chat-ui-primitives-audit.md, merged via #6474). It currently lives app-local to apps/loopover-ui, not in the shared @loopover/ui-kit package apps/loopover-miner-ui can import from.
Requirements
- Port
LoadingState, EmptyState, ErrorState, StateBoundary, and Spinner from apps/loopover-ui/src/components/site/state-views.tsx into packages/loopover-ui-kit/src/components/, preserving their existing API exactly (no behavior change for apps/loopover-ui's own usages).
- Update
apps/loopover-ui to import the ported versions from @loopover/ui-kit instead of its local copy, removing the duplicate.
- Do not modify the components' behavior as part of this port — this is a relocation, not a redesign.
Deliverables
Test Coverage Requirements
99%+ Codecov patch coverage on every changed line and branch, plus a regression test for the new/changed behavior (note: apps/** UI code may fall outside the strict Codecov patch gate — check coverage.include — but a before/after screenshot table per this repo's UI-PR convention is still required for any visual change).
Expected Outcome
Both apps/loopover-ui and apps/loopover-miner-ui can import the same async-state primitives from @loopover/ui-kit, with zero behavior change to existing usages.
Links & Resources
Epic: #6504. apps/loopover-ui/src/components/site/state-views.tsx, apps/loopover-ui/src/chat-ui-primitives-audit.md (#6244, merged via #6474).
Context
Epic #6504 ("Miner dashboard redesign") requires a shared async-state primitive both the miner-ui visual restyle and the chat message list can consume, so the two tracks never invent two different loading/error/empty implementations.
apps/loopover-ui/src/components/site/state-views.tsxalready hasLoadingState/EmptyState/ErrorState/StateBoundary/Spinner, confirmed reusable as-is by the #6244 audit (apps/loopover-ui/src/chat-ui-primitives-audit.md, merged via #6474). It currently lives app-local toapps/loopover-ui, not in the shared@loopover/ui-kitpackageapps/loopover-miner-uican import from.Requirements
LoadingState,EmptyState,ErrorState,StateBoundary, andSpinnerfromapps/loopover-ui/src/components/site/state-views.tsxintopackages/loopover-ui-kit/src/components/, preserving their existing API exactly (no behavior change forapps/loopover-ui's own usages).apps/loopover-uito import the ported versions from@loopover/ui-kitinstead of its local copy, removing the duplicate.Deliverables
LoadingState/EmptyState/ErrorState/StateBoundary/Spinneradded topackages/loopover-ui-kit/src/components/apps/loopover-ui's local copy removed, imports repointed to@loopover/ui-kitapps/loopover-uitests still pass unchangedTest Coverage Requirements
99%+ Codecov patch coverage on every changed line and branch, plus a regression test for the new/changed behavior (note: apps/** UI code may fall outside the strict Codecov patch gate — check coverage.include — but a before/after screenshot table per this repo's UI-PR convention is still required for any visual change).
Expected Outcome
Both
apps/loopover-uiandapps/loopover-miner-uican import the same async-state primitives from@loopover/ui-kit, with zero behavior change to existing usages.Links & Resources
Epic: #6504.
apps/loopover-ui/src/components/site/state-views.tsx,apps/loopover-ui/src/chat-ui-primitives-audit.md(#6244, merged via #6474).