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.
48 lines
2.6 KiB
CSS
48 lines
2.6 KiB
CSS
/* Consumer layout for the composed examples (B, C, D, H). It belongs to the consuming project: it only
|
|
arranges public SW components and reads the public --hm-sw-header-* / --hm-sw-viewer-* tokens provided by <SWTheme>.
|
|
It never styles hm-sw-* classes and adds no new design values. */
|
|
.app-sw-bar {
|
|
display: flex;
|
|
align-items: stretch;
|
|
gap: 2px;
|
|
box-sizing: border-box;
|
|
height: var(--hm-sw-header-height);
|
|
padding-bottom: 1px; /* 48px surfaces in the 49px header, like SWHeader */
|
|
background: var(--hm-sw-header-background);
|
|
}
|
|
/* Object (editing) surface, the same tokens as the SWHeader object area. */
|
|
.app-sw-surface {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--hm-sw-header-gap);
|
|
flex: 1 1 0;
|
|
min-width: 0;
|
|
padding: 4px;
|
|
border: 1px solid var(--hm-sw-header-object-border-color);
|
|
border-radius: var(--hm-sw-header-object-radius);
|
|
background: var(--hm-sw-header-object-background);
|
|
}
|
|
/* Window-area surface for print / K / window buttons. */
|
|
.app-sw-window {
|
|
display: flex;
|
|
flex: 0 0 auto;
|
|
background: var(--hm-sw-header-document-background);
|
|
box-shadow: inset 0 0 0 1px var(--hm-sw-header-document-border-color); /* 1px edge without moving the parts */
|
|
}
|
|
/* File well placed first (no home overlap): its own left edge. */
|
|
.app-sw-file-edge {
|
|
display: flex;
|
|
border-left: 1px solid var(--hm-sw-header-document-border-color);
|
|
}
|
|
/* Viewer layer list (example H), the same look as Storybook SW/Viewer's layer popup. Panel tokens only.
|
|
Layer visibility is a 24 x 24 button around SWLayerVisibilityIcon (header bulb), never a switch or checkbox;
|
|
the all-layers control above the list is SWViewerField + SWViewerSwitch. */
|
|
.app-viewer-layers { display: flex; flex-direction: column; gap: 4px; margin: 0; padding: 0; list-style: none; }
|
|
.app-viewer-layers > li { display: flex; align-items: center; gap: 8px; padding: 4px 6px; border-radius: 3px; }
|
|
.app-viewer-layers > li:hover { background: rgba(154, 146, 132, 0.25); }
|
|
.app-viewer-layers > li[data-visible="false"] { opacity: 0.45; }
|
|
.app-viewer-layer-swatch { flex: 0 0 10px; width: 10px; height: 10px; border: 1px solid var(--hm-sw-viewer-panel-inner-border); border-radius: 9999px; }
|
|
.app-viewer-layer-name { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-family: ui-monospace, monospace; font-size: 12px; }
|
|
.app-viewer-layer-bulb { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; border: 0; border-radius: 4px; background: none; cursor: pointer; }
|
|
.app-viewer-layer-bulb:hover { background: rgba(154, 146, 132, 0.3); }
|