fix(sw): refine process header empty title states and UI guidance

- AI_GUIDE stage 5 "Header 전용 스타일의 적용 범위": header-only styles stay
  in the header (SW SWHeader / SWProcessHeader / SWViewerHeader, Web GNB /
  LNBMobileHeader / DashboardHeader); no header CSS or tokens on body UI,
  no global overrides, layout-only joins, package-shared tokens unchanged,
  whole-screen use only on explicit request. Synced to the 4 package
  copies; referenced from stage 6, SW and Web AI_USAGE §3
- SWProcessHeader: with documentTitle "" the file name keeps #AEDBCC on
  hover and a default cursor (root data-document-untitled). The button,
  focus and onDocumentClick are kept; a real file name keeps the yellow
  hover and pointer. Visual vs. click difference recorded as a UX item
- Step enablement documented as implemented: only an explicit disabled
  (step, group, process, header) turns steps off; project / file state
  never does; selection is activeStepId + onStepSelect (also for host
  previous / next); no activeStepId and empty groups described
- Regression check tests/process-header-states.check.mjs (15/15);
  typecheck:sw, build:sw, check:ai-docs pass; public-api keeps its 3
  existing failures, none new
This commit is contained in:
shkim4 committed 2026-11-05 16:45:54 +09:00
1 parent 6c61edadc1
commit 0086d66a94
14 files changed
+177 -9

No files matched your search

@@ -52,10 +52,14 @@ export const SWProcessHeader = forwardRef<HTMLElement, SWProcessHeaderProps>(fun
const captions = (["minimize", "maximize", "close"] as const).filter(id => !hidden.has(id))
const windowShown = toolsShown || !hidden.has("windowMove") || captions.length > 0
const documentEmpty = documentTitle === "" && !!documentEmptyLabel
// No file yet (documentTitle ""): the file name does not look clickable (no hover color, default cursor). The button
// and `onDocumentClick` stay as they were (2026-11-05: hosts may still listen to it); only the look changes.
const documentUntitled = documentTitle === ""
return (
<header ref={ref} className={`hm-sw-theme hm-sw-process-header${className ? ` ${className}` : ""}`}
data-appearance={appearance === "multi" ? "multi" : undefined} data-document-empty={documentEmpty || undefined} {...rest}>
data-appearance={appearance === "multi" ? "multi" : undefined} data-document-empty={documentEmpty || undefined}
data-document-untitled={documentUntitled || undefined} {...rest}>
<div className="hm-sw-process-header__bar">
<SWHeaderHome logo={logoNode} logoSrc={logoSrc} logoAlt={logoAlt ?? logoText} onClick={onHomeClick} aria-expanded={homeMenuOpen} />
<SWHeaderDocumentTitle title={documentEmpty ? documentEmptyLabel : documentTitle} onClick={onDocumentClick} />