Skip to content

Add EmptyState component with contextual variants (bs-ux-10)#67

Closed
dgarson wants to merge 1 commit intofeat/horizon-uifrom
piper/bs-ux-10-empty-states
Closed

Add EmptyState component with contextual variants (bs-ux-10)#67
dgarson wants to merge 1 commit intofeat/horizon-uifrom
piper/bs-ux-10-empty-states

Conversation

@dgarson
Copy link
Copy Markdown
Owner

@dgarson dgarson commented Feb 22, 2026

What Changed

Created a reusable EmptyState component with contextual variants for different zero-data experiences:

  • EmptyState component: Icon, headline, subtext, primary CTA, secondary CTA
  • 6 variants: no-agents, no-sessions, no-skills, no-results, first-run, generic
  • Pre-configured exports: EmptyStates.NoAgents, EmptyStates.NoSessions, etc.
  • Integrated into 2 existing views:
    • AgentDashboard: shows when no agents exist
    • SkillsMarketplace: shows no-skills (empty) or no-results (filtered)

Files Created

  • apps/web-next/src/components/ui/empty-state/EmptyState.tsx
  • apps/web-next/src/components/ui/empty-state/index.ts

Files Modified

  • apps/web-next/src/views/AgentDashboard.tsx - Added EmptyState import and conditional
  • apps/web-next/src/views/SkillsMarketplace.tsx - Added EmptyState with variant switching

How to Test

  1. Run dev server: cd apps/web-next && pnpm dev
  2. Visit AgentDashboard - EmptyState shows when no agents (currently always has mock data)
  3. Visit SkillsMarketplace - EmptyState shows:
    • "no-skills" when no skills installed
    • "no-results" when search/filter returns empty
import { EmptyState, EmptyStates } from './components/ui/empty-state';

// Use pre-configured variant
<EmptyStates.NoAgents
  action={{ label: 'Create', onClick: () => {} }}
/>

// Or customize
<EmptyState
  variant="no-sessions"
  title="Custom Title"
  description="Custom description"
  action={{ label: 'Start Session', onClick: handleStart }}
  secondaryAction={{ label: 'Learn More', onClick: handleLearn }}
/>

Accessibility Notes

  • Semantic heading structure
  • Focus management for CTA buttons
  • Screen reader friendly iconography

Known Limitations

  • Currently integrated with mock data; needs real data integration for production
  • Animation is basic (fade-in only)

- Create EmptyState component with icon, headline, subtext, CTA button slots
- Variants: no-agents, no-sessions, no-skills, no-results, first-run, generic
- Pre-configured exports (EmptyStates.NoAgents, etc.)
- Integrate into AgentDashboard (no-agents variant)
- Integrate into SkillsMarketplace (no-skills, no-results variants)

bs-ux-10
@dgarson
Copy link
Copy Markdown
Owner Author

dgarson commented Feb 22, 2026

Reviewed and integrated. Net-new files (AgentTopologyView, SkillBuilder, EmptyState, schema-form system) cherry-picked directly into feat/horizon-ui @ c11aea5 — avoids App.tsx merge conflicts with the 260-view branch. Worker PRs closed in favor of integration commit. Thanks for the solid work. 🎨

@dgarson dgarson closed this Feb 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant