feat(design-system): sanction PageFrame and WorkSurfaceFrame page templates + tab vocabulary convergence - #563
Merged
Merged
Conversation
… strip as trailing cell
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Sanctions the two page templates from the Playground design analysis:
PageFramefor management screens andWorkSurfaceFramefor benches — plus the prerequisite tab-vocabulary convergence. This is the design-system answer to "why does every screen compose its header differently": the templates are now components, and the rules are now inDESIGN.md.What is changed
Slice 1 — Tab vocabulary convergence (
c9ead974)ui/tabsunderlinevariant now encodes DESIGN.md §6.5 exactly: IBM Plex Sans 13px medium, sentence case, steel → ink when active, 2px signal bottom border on the shared 1px ink baseline.panelvariant is retired; its consumers (HomePage,MemoryPage) migrated. AgentForm, Settings, Skills, and ~12 other pages move from mono-uppercase to the spec'd sentence-case tabs.PlaygroundShell's hand-rolled tab row replaced with the shared component — one tab implementation across the app.Slice 2 — Page templates (
1fdf3ad4)WorkSurfaceFrame(frontend/src/layouts/WorkSurfaceFrame.tsx): full-bleed bench template — compact topbar with sidebar trigger + optional Big Shoulders title + actions, optional §6.5 tabs, content fills remaining height.PlaygroundShellis refactored to a thin adapter over it (byte-identical rendered output).PageFrame(frontend/src/layouts/PageFrame.tsx): management-page template — page head (Big Shoulders h1 + optional badge + steel subtitle + actions), optional filters row, contained content column.AgentsPagepilot-migrated (renders identically).Slice 3 — Filter rows as instrument strips (
4b89ef20)FilterBar(shared by ~19 list pages) is now one bordered strip — 1px ink border, hairline verticals, borderless icon-led search flush-left (flex:1, reads as primary), filter cells in mono uppercaseSTATUS: ALLlabel:value form. Replaces the old row of three identical boxes that read as scaffolding.collapsibleSearchbehavior preserved inside the strip;FilterBarSkeletonmirrors the new shape;PageFramepulls the strip tight (16px) under the subtitle instead of floating.FilterBargained an optionalonSearchSubmit(fires on Enter), andDataTableViewPage's hand-rolled search row is migrated to the strip with its reload-on-Enter behavior preserved (fe246f44).Slice 4 — PageFrame migration wave (
5d621519)PageLayoutconsumers migrated toPageFrame(data, knowledge, flows, executions, models, MCP, skills, apps, users, prompts, SSH, gateways, providers, integrations, memory, artifacts…).toolbarprop renamed toactionswhere used.PageLayoutdeleted — one page template across the app.--linewith hug-contentLABEL: VALUEcells and single-chevron triggers (07f49b5f); FilterBar fills flex parents and Data page got its missingtitle(60cf4751); actions-Combobox pattern on Prompts/Summary Prompts/SSH/Execution Profiles converted to proper strip cells.Slice 5 — Playground polish (
3c94b9e8)ConfigStripselects are now truly borderless: the trigger hugs its content, the defaultCaretSortIconis replaced with a singleChevronDown, and the outer strip border is lightened fromborder-inktoborder-lineso the strip reads as one instrument rather than boxes within a box. Applied to both the Playground single strip and the Compare compact 2×2 strips.Prompt,Response, and CompareA/Blabels are toned down from Big Shoulders display type to quiet sans/steel uppercase labels (font-sans text-[12px] font-medium uppercase tracking-[.06em] text-steel).Not in this PR (follow-ups, tracked in the workspace TODO)
WorkSurfaceFrame; HomePage hand-rolled head ontoPageFrame.Verification
npm run typecheck+npm run build— green in worktree and bench.console-prompt-workspace):/huf/playground,/huf/playground?mode=compare,/huf/agents,/huf/,/huf/executionsall serve 200 on the built assets. Manual screenshots confirm the ConfigStrip no longer shows double borders and the panel labels are quieter.workspace/Tracks/ConsolePromptWorkspace/plans/TODO-page-templates-option-a.md(the analysis this implements).