Skip to content

feat(layout): standardized two-line PageBar (title + subtitle)#1149

Open
psdjungpulzze wants to merge 1 commit into
feat/page-meta-registryfrom
feat/pagebar-two-line-header
Open

feat(layout): standardized two-line PageBar (title + subtitle)#1149
psdjungpulzze wants to merge 1 commit into
feat/page-meta-registryfrom
feat/pagebar-two-line-header

Conversation

@psdjungpulzze

Copy link
Copy Markdown
Contributor

Summary

Redesigns the global PageBar (src/components/layout/page-bar.tsx, rendered in resizable-layout.tsx) from a single-line title strip into the standardized two-line header: bold title (#1C1C1E) + one-sentence secondary subtitle (#8E8E93), sourced from resolvePageMeta with context overrides still honored.

Built on top of the page-meta registry (#1147) — base branch is feat/page-meta-registry so this PR shows only the header delta. It will auto-retarget to main once #1147 merges.

Changes

  • page-bar.tsx — two-line layout; title from resolvePageMeta(pathname).title, subtitle from .subtitle. Subtitle line is omitted when empty; a null/empty title still suppresses the whole bar. Bar grows to fit two lines (flex-col, py-2) while keeping the existing border/surface tokens.
  • page-bar-context.tsx — adds a subtitle slot + usePageSubtitle() hook, mirroring the existing undefined = resolve / null = suppress / string = explicit title semantics. usePageTitle(null) keeps its null = suppress-whole-bar behavior.
  • page-meta.ts — seeds registry entries for change-requests, flags, epics; adds an epics SEGMENT_LABELS fallback (the explicit usePageTitle("Epics") is removed).
  • Page migrationschange-requests, flags, epics drop the in-body ui/PageHeader so the global bar is the single source of title/subtitle. Each keeps its primary action on a toolbar alongside the filter tabs. Flags surfaces its live count via usePageSubtitle.

Verification

  • npm run typecheck
  • npm run build ✅ compiles + passes the TypeScript stage (page-data collection fails only on missing DATABASE_URL, an environment limitation, not a code issue)
  • vitest run src/components/layout/page-meta.test.ts ✅ 19/19
  • eslint on changed files ✅ (only pre-existing underscore-param warnings)

Agent config

No PM Agent update needed — this is a presentational layout change (header rendering); it adds no tools, entities, statuses, or workflows the agent surfaces.

🤖 Generated with Claude Code

Redesign the global PageBar from a single-line title strip into the
standardized two-line header: bold title (#1C1C1E) + one-sentence
secondary subtitle (#8E8E93), sourced from resolvePageMeta with context
override still honored.

- Extend page-bar-context with a subtitle override (usePageSubtitle),
  mirroring the undefined=resolve / null=suppress / string=explicit
  semantics already used for the title. A null title still suppresses
  the whole bar; a null/empty subtitle just drops the second line.
- Grow the bar to fit two lines; the subtitle line is omitted when empty.
- Seed page-meta registry entries for change-requests, flags, epics
  (and add an "epics" SEGMENT_LABELS fallback now that the explicit
  usePageTitle("Epics") is gone).
- Migrate those 3 pages off the in-body ui/PageHeader: remove their
  duplicate title/subtitle so the global bar is the single source, and
  keep the primary action on the filter-tabs toolbar. Flags keeps its
  live count via usePageSubtitle.

Builds on the page-meta registry (#1147).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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