- SWProcessHeader logoText: at least 58px and as wide as the text,
instead of a fixed 58px place that cut longer words (home >= 106px)
- Align JSDoc (SWHeader, SWViewerHeader, SWProcessHeader) and docs with
the content-width logo slot: DESIGN_RULES §1 common rule and §14,
COMPONENT_CATALOG, VIEWER.md, SW Header / Step Header specs
- No prop or public API change
Deploy Storybook / deploy (push) Successful in 1m16s
- File name: clamp(80px, min(45cqw - 256px, 100cqw - 780px), 360px),
56px below 560px; 1280px and wider unchanged
- Model / Layout tabs narrow (name, then count ellipsized) down to the new
--hm-sw-viewer-tabs-min-width (48px) before anything moves into More;
the measurement counts them at that minimum once every icon step applies
- Switch items get an optional shortLabel shown below 560px (어두운 배경 ->
배경); counts hidden there
- More appears only below about 520px; viewer test and AI guides updated
Deploy Storybook / deploy (push) Successful in 1m10s
- SW Header: the five field previews hide and return together in one
measured step; from 760 to 1920px the groups from 레이어 to 치수스타일
share the room left before 속성보기, above 1920px they keep the 1920
widths (controls bars and < 760px unchanged)
- SW Viewer Header Model / Layout: long names ellipsize in equal buttons
(minmax(0, 1fr), name counted at --hm-sw-viewer-tab-name-basis) so they
never change the box or the measured steps; green outer outline and its
tokens removed; 378px / 42px, text-shadow and state unchanged
- SWViewerStatus: the label keeps the width of its widest real state text
(idle keeps its icon slot), so a state change never moves the header;
with too little room it ellipsizes after the file name gives way
- Popups: body inset shadow removed, title SVG drop shadow removed, viewer
panel title icons use --hm-sw-viewer-panel-icon-color (#c7bda9)
- Storybook: SW/Viewer › Model / Layout story removed
- AI guide (docs/ai + package copies): design-only changes for every
component, content limits for Submodule consumers (Header excluded),
Submodule usage rules; VIEWER / DESIGN_RULES synced
- viewer.browser.mjs: explicit 1920 / 1440 labels and approved 1280
icon-only expectations
Deploy Storybook / deploy (push) Successful in 1m11s
Viewer popup value inputs (number, text) take the property window field: transparent
1px border, radius 2, 7px inset, 14px 500 #E60403; hover / editing border, #0F0D0A
editing face with the outlined value. A field unit (px/mm) sits inside the box and
turns white on the editing face. Layer search, sizes and layout unchanged.
Viewer header labels hide per iconOnlyBelow value instead of one by one: 레이어 /
설정 / 속성 together, 전체 보기 on its own; More collapse unchanged.
Verified in Storybook: Settings Popup editing / unit / gauge sync; Responsive More
at 1920 / 1440 / 1280 / ~1100 / 950, shrink-and-grow restore, no overflow.
Not re-run: viewer browser tests.
Deploy Storybook / deploy (push) Successful in 1m11s
Labels with an icon now go icon-only one item at a time while the header lacks room (Open,
then the panel toggles, 전체 보기 last) instead of all together, and come back as the room
returns; collapse into More is unchanged.
Verified: Responsive More rows (1440 / 1280 keep 전체 보기 text, 950 / 860 icons, 760 / 520
More), shrink-and-grow restore, no overflow. Not re-run: viewer browser tests.
Deploy Storybook / deploy (push) Successful in 1m11s
- SW Viewer layer popup: search + 전체 레이어 fixed, only the list scrolls; the all-layers
control is the SWLayerVisibilityIcon bulb (role="switch"), one light #d2c8b4 line under it.
- Example H and the layer popup AI docs follow the bulb layout (VIEWER, DESIGN_RULES,
COMPONENT_CATALOG, COMPOSITION_PATTERNS, AI_GUIDE sync).
- Popup toggle switch (Figma toggle_btn_new 633:75188 / 633:75902): one sw.css face for the
HM UI Switch in SWPopup and SWViewerSwitch in SWViewerPanel; SW Header switches unchanged.
- SW Footer stories: no inner scrollers, fluid screens; workspace fits the viewport.
- SW Footer category tabs keep their positions when selected (divider slots kept, pocket
edges drawn over the neighbours' padding).
- Storybook .sb-page-inner: 1440px max from 1920px (was 80vw).
- SW Header equal-split change was cancelled; header CSS unchanged.
Verified: check:ai-docs PASS, viewer test 49 PASS (1 FAIL hover face + timeout pre-existing),
footer-design-review 21 PASS, browser checks of switch/footer/inner.
Not verified: footer-popup-viewer-refinement (needs full Storybook build), text-weight/hover
tests, Switch 37x16 AI docs (deferred).
User-approved 2026-10-22 change to the SW Viewer layer popup.
- New public export SWLayerVisibilityIcon({ on }) + SWLayerVisibilityIconProps:
the SW Header layer bulb art reused as is (header design and behavior unchanged).
- Layer rows: eye (Eye / EyeOff) icon replaced by the bulb, 24 x 24 button kept.
- All layers: the 전체 켜기 / 전체 끄기 buttons replaced by one SWViewerField +
SWViewerSwitch on top. ON only when every layer is shown; a partial state reads
OFF and a click shows all. Derived from the hidden-layer state, so it stays synced.
- AI docs (VIEWER.md 4.1, catalog, design rules, composition, AI_GUIDE sync) and
example H follow the new rule, replacing the 2026-10-21 eye-icon rule.
- viewer.browser.mjs: layer popup checks moved to the bulb / switch behavior.
User-requested SW Viewer changes (2026-10-21); no new Props, public .d.ts unchanged.
- Layer popup visibility: AI docs (VIEWER §4.1, catalog, design rules, patterns,
AI_GUIDE) require the Eye / EyeOff icon button, never a switch; example H now
renders a real layer list with eye buttons; Storybook eye button gets the pointer.
- Viewer header hover: text and icon #FFC600, the #266651 hover face removed; size and
position unchanged. Status stays display only.
- Trailing strip: status, the trailing icon button (info / license) and SWHeader
minimize / close are full-height (48px) segments on the window-area face, no gap, top
and bottom on the object surface border; no line around the license button.
- File name: the measured steps use the file-name basis (header width), not the text
width, so a short and a long name give the same Open / file-name widths.
- File open icon: the black icon outline of every viewer icon (SWViewerIcon), no frame.
Documentation and comment-only changes (no component logic, Props or design change):
- VIEWER.md / AI_GUIDE / AI_USAGE / catalog / patterns: the two SWViewerHeader versions
(default, and minimize/close with SWHeaderWindowControls at the end of `trailing`);
the earlier "never mix SWHeader parts" rule now names this approved exception.
- collapseBelow / iconOnlyBelow (types.ts JSDoc, VIEWER.md, AI_GUIDE): measured steps,
the numbers only set the order, not pixel breakpoints. Viewer file open is the
onDocumentOpen button (logoMenu is compatibility only).
- COMPONENT_CATALOG / DESIGN_RULES: recent files show at most 3 rows; preview caption is
previewTitle or path + file name; body is the red no-preview sign on the brown panel;
preview / renderPreview are accepted but not rendered (JSDoc updated to match).
- packages/sw/README.md and sw-header-usage.md: current Story list and counts (40, 14
shown + 26 verification); 760px+ no-More condition; read-only Property Bar values as
<output>.
- SWHeader.tsx comment: titles are kept (not hidden) from 760px up.
- AI_GUIDE synced into the package ai/ copies (npm run sync:ai-docs).
SW Viewer Header (approved optional props, public export names unchanged at 170):
- SWViewerHeader: logoMenu, documents, activeDocumentId, onDocumentSelect,
onDocumentOpen, documentOpenLabel; measured responsive toggles (full ->
icons -> More) with the SWHeader More / file-list styling.
- SW AI guides, ExampleH, viewer/text-weight/theme-inheritance tests and the
logo-document-menu tests with their QA record.
SW Storybook cleanup (Story IDs and test fixtures kept):
- Sidebar: Overview -> "SW Header" (first), 전체 Footer -> "SW Footer",
Footer/Viewer responsive pages -> "Responsive More", Viewer content-variants
-> "Settings Popup" (merges the settings popup page).
- Hidden by the verification tag (direct URL kept): Header Dropdown,
Document Open, Interactive States, Document Dropdown, Hidden Sub Controls,
Home Menu standalone; Footer tool groups / custom content / parts;
SW/Theme; Viewer menu groups / item states / variable size / settings
panel / Header + Dropdown.
- Removed demo UI: Overview size and callback output (demo data and
selection only with &verification), Home Menu Figma node table and width
demo, Header Responsive More reduced to 1440 / 768 / 390, Popup reopen
button, property-panel comparison captions, Viewer context-menu demo
(&verification only).
- Tests: storybook-inventory records the hidden and renamed Stories;
overview / range-cross-browser / viewer open the demo controls with
&verification; integrated-popup reloads the Story instead of the reopen
button; dropdown-consolidation asserts Dropdown is hidden from the sidebar
and still opens by its direct URL.
- components/shared/roving-focus.ts (moveRovingFocus): the same Arrow / Home / End algorithm of SWFooter, SWToolGroup,
the SWViewerHeader tabs and SWHomeMenu; each caller passes its own keys, wrap and select behavior.
- components/shared/use-outside-pointer.ts (useOutsidePointerDown): the same pointerdown effect of the SWHeader
dropdowns, layer menu, document title and More. Escape, focus return and positioning stay in each component.
Both modules are internal: the package entry and the public declarations are unchanged.
Components (new public exports, existing APIs unchanged)
- SWPopupPropertyRow: the property window row (layer / color / line style
pickers, Figma 26:12250 / 26:12170) for SWPopup content. The SWHeader field
dropdowns stay header-only; Popup B and 도면 설정 now use the popup pickers.
- SWSelect: native panel select (28px, 1px #948871, radius 4, #F1ECE1, 12px),
used by Popup 도면 설정 단위 and Viewer 축척 지정 단위 (replaces the HM UI
Select there and the story-only .sw-viewer-story-select CSS).
- SWSlider: appearance "panel" (default, the gauge the popup used) or
"property" (the property window gauge), same value / events. Shares the
property gauge CSS; SWViewerSlider renders SWSlider panel with viewer tokens.
Footer
- --hm-sw-footer-gra-border-orange (Figma gra-border-orange; the aux selected
border token now references it): Model selected / hover, Layout hover and
Layout + hover surfaces; 보조기능 / 명령어 전체보기 hover lights both lines
and an orange ring; category + hover in #FF5C00 (menu-add-hover.svg).
- Model / Layout text stays the Default text (#161410, 12px, 400, no outline)
on hover and on the orange surface: only the surface changes.
- bg_vacant covers the slot row only: the open pocket of a category tab no
longer splits where it crosses the last command (e.g. 수정 with one command).
Viewer
- Panel title art keeps 308px (max-width: none against host img resets), so
panels under 312px (250 x auto, 300px) paint the title from the left edge.
Storybook
- SW/Footer: 기본 Footer (sw-footer--default) and States (sw-footer--states)
removed; full-footer keeps the live composition only, responsive keeps the
widths (reference / Figma image sections removed, image files kept); the aux
Figma comparison moved to the verification Story figma-variants.
- SW/Popup: unit SWSelect, SWSlider A / B section, popup pickers, Popup B state.
- A: SWViewerIcon draws the SWHeader black outline as SVG stroke on a copy behind the icon (no CSS filter)
- B: SWViewerPanel renders the common SWPopup frame (same DOM / CSS) and adds drag, corner resize,
collapse, bounds and modal; SWPopup gains optional titleActions / footer; title art spans any width
- C: shared Story canvas grid (--sw-story-canvas) behind the SW Header work area and dropdown room
- D: SWViewerButton tone="green" for 전체 켜기 / 전체 끄기: default kept, hover = primary (확인) hover
token, pressed = primary face
- AI guide, verification scripts (76 checks, element regression) and evidence updated
- SWViewerHeader: data-driven viewer menu (button / toggle / menu / tabs / switch / custom), More by
collapseBelow, trailing slot, onCommand; SWHeader logo props with no default logo
- SWViewerMenu: dropdown, check / radio, multi-level submenu, context menu at a point
- SWViewerPanel: viewer popup frame with free children / footer, drag, corner resize, collapse, modal
- Panel controls: SWViewerSection / Field / Hint / Switch / Slider / Input / Button / Badge / Status
- SWHeader black text outline tokens on viewer text, matching icon outline (drop-shadow)
- Storybook SW/Viewer stories; remove SW/Tool story (SW/Popup kept)
- AI guide ai/VIEWER.md, example H, verification scripts and evidence