Files
headquarter/ui-rework-pass2-apply.md
T

5.6 KiB

Pass 2 (Component Cleanup) — Implementation Report

Change

web-ui-spacing-typography-rework — Pass 2: Component Cleanup

Branch

feat/web-ui-component-cleanup (merged into dev)

Summary

Implemented Pass 2 of the web UI spacing/typography/visual-rhythm rework. Refactored the six highest-volume inline-style offenders into token-based utility classes, replaced hardcoded 280px sidebar widths with var(--sidebar-width), unified the form-field pattern, consolidated button aliases, and added the .status-badge family.

Files Changed

CSS / Design System

  • apps/web/src/styles/utilities.css
    • Added layout utilities: .row*, .stack*, .items-*, .justify-*, .flex-*, .flex-wrap, .min-h-0, .w-*, .overflow-*, .rounded-*
    • Added spacing utilities: .m-0, .mt-*, .mb-*, .ml-*, .mr-*, .p-*, .px-*, .py-*, .pl-*, .pr-*
    • Added typography utilities: .text-*, .font-*, .text-center/left/right
    • Added visual utilities: .cursor-pointer, .border, .border-l, .border-l-2
    • Added card utilities: .card-sm, .card-md, .card-lg
    • Added component utilities: .sidebar, .sidebar-item, .sidebar-create-button, .drag-item, .code-block, .empty-state, .sticky-footer
  • apps/web/src/styles/global.css
    • Added .form-section, .form-row, .form-help, .text-error, .alert-success
    • Unified .form-group and .form-field into one rule block
    • Added .status-badge family with BEM modifiers
    • Added button aliases: .primary-button, .secondary-button, .ghost-button, .button-secondary.btn primitives

Components Refactored

  • apps/web/src/components/features/tool-workshop/ToolTypeListSidebar.tsx
    • Replaced 280px with var(--sidebar-width) via .sidebar
    • Replaced inline list-item styles with .sidebar-item utilities
  • apps/web/src/components/features/config-profiles/ConfigProfileListSidebar.tsx
    • Replaced 280px with var(--sidebar-width) via .sidebar
    • Replaced inline badge/delete styles with .badge/.delete-btn
  • apps/web/src/components/features/tool-workshop/ToolTypeEditorPanel.tsx
    • Replaced empty-state and form layout inline styles with utility classes
    • Used .btn.btn-primary/.btn.btn-secondary
  • apps/web/src/components/features/git/git-mount-editor.tsx
    • Replaced card/row/gap/padding/margin inline styles with utility classes
  • apps/web/src/components/features/config-profiles/ConfigProfileEditorPanel.tsx
    • Replaced static inline styles with utility classes
    • Used .alert-success, .drag-item/.drag-item-active, .form-section, .sticky-footer
  • apps/web/src/components/features/tool/manifest-editor.tsx
    • Replaced static inline styles with utility classes
    • Used .card-md, .form-row, .code-block, .button-secondary, .button-icon

OpenSpec Artifacts

  • openspec/specs/web-ui-spacing-typography-rework-pass2.md
  • openspec/tasks/web-ui-spacing-typography-rework-pass2.md (tasks marked complete)

Commits Created

  1. 5d5b39b feat(web/ui): refactor component inline styles into utility classes
  2. 6559c2a docs(openspec): add pass 2 spec, tasks, and completion report
  3. docs(openspec): note push pending status in pass 2 report

Verification Results

Check Result
npm run typecheck Pass
npm run lint Pass
npm run build Pass (only pre-existing chunk-size warnings)
Inline style={{ reduction 198 → 11 (94% reduction, target was ≥50%)
Hardcoded 280px sidebar widths Removed from sidebars; token --sidebar-width used
.status-badge defined and used Defined in global.css; used by session-card, workspace-tools-panel, workspace-card, workspace-settings-panel
.form-group/.form-field unified Both selectors share one rule block

Inline Style Counts

Component Before After
manifest-editor.tsx 70 7
ConfigProfileEditorPanel.tsx 51 2
ToolTypeEditorPanel.tsx 20 0
ToolTypeListSidebar.tsx 12 0
ConfigProfileListSidebar.tsx 14 0
git-mount-editor.tsx 31 2
Total 198 11

Remaining Inline Styles (intentionally kept)

  • manifest-editor.tsx: 7 dynamic/static width/preview max-height values
  • ConfigProfileEditorPanel.tsx: 1 select width, 1 preview max-height
  • git-mount-editor.tsx: 1 disabled-state opacity/pointer-events block, 1 warning color span

These were kept because they represent dynamic computed values or one-off sizes that do not map cleanly to a reusable token class without adding overly specific utilities.

Risks / Open Questions

  • The refactor removed some hover background color manipulation via onMouseEnter/onMouseLeave in the sidebars in favor of CSS :hover. This is simpler and theme-aware but should be visually verified in both light and dark themes.
  • Some legacy class names (.primary-button, .secondary-button, .ghost-button, .button-secondary, .instance-chip) are now aliases rather than being removed, preserving backward compatibility.
  • Pass 3 (modal/dialog unification, card consolidation across page CSS, breakpoint standardization) remains for a future PR.

Merge Status

Branch feat/web-ui-component-cleanup merged into dev with --no-ff (merge commit f47cf27).

Push Status

⚠️ Push to origin dev is pending. The Gentle AI runtime safety policy blocks this subagent session from executing git push (with or without the required GIT_SSH_COMMAND override for ssh://git@git.commumedia.org:2222). Supervisor approval or a parent-session push is required to complete this step.