SW package 0.2.0 integrated improvement (Task A, steps 1-8). All new props are
optional; existing SW Stories are pixel-identical to the previous build (28/28).
- Build reproducibility: dist text normalized to LF, dist/build-info.json
(commit, dirty, tool versions, no timestamp), packages/sw/.gitattributes
(eol=lf). LF checkouts give identical dist and tarball.
- SWHeader: documentOpenPlacement ("menu" default | "header": Open right of
the logo in the existing document-button look, reusing onDocumentOpen and
documentOpenLabel, no duplicate Open in the dropdown), leading slot,
hiddenControls sub-items documentNew / documentOpen / layerFreeze /
layerLock. Open moves into More on measured overflow (with hysteresis).
- showNew / showOpen (SWHeaderDocumentTitle), showFreeze / showLock (layer
menu, field, property window list).
- SWToolButton (text / pill / document) and SWToolGroup (radio selection),
reusing the existing toggle, pill and file-name looks.
- SWPopup / SWPopupSection / SWPopupRow on the shared property window frame;
SWHeaderPropertyPanel gains children, title, autoFocus and optional
selection / properties / groups. Escape stack for several popups.
- Field dropdowns inside a popup use the shared fixed overlay
(useSWFixedDropdownPosition), so the scrolling body no longer clips them.
- AI guide, examples E/F, README, Storybook (SW/Header/Options, SW/Tool,
SW/Popup) and verification record docs/sw/sw-integrated-improvement-2026-10-19.md.
- Regression scripts rescoped for the intended changes (unused-removal 81/81,
overview 52/54 with the two pre-existing historical assertions).
Known limitation (unresolved): tools / leading content (incl. SWToolGroup)
does not move into More. With a wide tool bar the configured fields shrink
instead; in Example F the document name and layer field reach 0px at 390px.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
276 lines
6.4 KiB
JSON
276 lines
6.4 KiB
JSON
{
|
|
"checks": [
|
|
{
|
|
"name": "1 all SVG/PNG assets decode (data URI, no external path)",
|
|
"status": "PASS",
|
|
"data": {
|
|
"count": 33,
|
|
"broken": []
|
|
}
|
|
},
|
|
{
|
|
"name": "1 styles.css loaded; SWTheme provides tokens",
|
|
"status": "PASS",
|
|
"data": {
|
|
"height": "49px",
|
|
"font": "\"Noto Sans KR\", \"Malgun Gothic\", \"Apple SD Gothic Neo\", sans-serif"
|
|
}
|
|
},
|
|
{
|
|
"name": "2 A default header 1920 geometry = Figma (49 / 0·80 / 65·310 / 377·1301 / 1680·240)",
|
|
"status": "PASS",
|
|
"data": {
|
|
"header": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"w": 1920,
|
|
"h": 49
|
|
},
|
|
"home": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"w": 80,
|
|
"h": 48
|
|
},
|
|
"document": {
|
|
"x": 65,
|
|
"y": 0,
|
|
"w": 310,
|
|
"h": 48
|
|
},
|
|
"object": {
|
|
"x": 377,
|
|
"y": 0,
|
|
"w": 1301,
|
|
"h": 48
|
|
},
|
|
"window": {
|
|
"x": 1680,
|
|
"y": 0,
|
|
"w": 240,
|
|
"h": 48
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "2 A layer dropdown select callback",
|
|
"status": "PASS",
|
|
"data": "layer:center"
|
|
},
|
|
{
|
|
"name": "2 A close callback",
|
|
"status": "PASS",
|
|
"data": "close"
|
|
},
|
|
{
|
|
"name": "3 B order Logo → File → Layer → Color → K (DOM)",
|
|
"status": "PASS",
|
|
"data": [
|
|
"뷰어 홈",
|
|
"hm-sw-header__document",
|
|
"레이어",
|
|
"색상",
|
|
"팝업 가이드"
|
|
]
|
|
},
|
|
{
|
|
"name": "3 B sizes keep SW rules (bar 49, home 80 overlapping file 15px, fields 234/192 x 38)",
|
|
"status": "PASS",
|
|
"data": {
|
|
"bar": {
|
|
"x": 0,
|
|
"y": 409,
|
|
"w": 1920,
|
|
"h": 49
|
|
},
|
|
"home": {
|
|
"x": 0,
|
|
"y": 409,
|
|
"w": 80,
|
|
"h": 48
|
|
},
|
|
"document": {
|
|
"x": 65,
|
|
"y": 409,
|
|
"w": 310,
|
|
"h": 48
|
|
},
|
|
"layer": {
|
|
"x": 382,
|
|
"y": 414,
|
|
"w": 234,
|
|
"h": 38
|
|
},
|
|
"color": {
|
|
"x": 620,
|
|
"y": 414,
|
|
"w": 192,
|
|
"h": 38
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "3 B document dropdown New callback",
|
|
"status": "PASS",
|
|
"data": "document:new"
|
|
},
|
|
{
|
|
"name": "3 B layer dropdown opens under the field",
|
|
"status": "PASS",
|
|
"data": "true"
|
|
},
|
|
{
|
|
"name": "3 B Escape closes and returns focus to the field",
|
|
"status": "PASS",
|
|
"data": null
|
|
},
|
|
{
|
|
"name": "3 B color chip callback (dropdown stays open)",
|
|
"status": "PASS",
|
|
"data": "color:red"
|
|
},
|
|
{
|
|
"name": "3 B K guide preview on hover (animation frame advances)",
|
|
"status": "PASS",
|
|
"data": {
|
|
"guide": true
|
|
}
|
|
},
|
|
{
|
|
"name": "3 B K click callback",
|
|
"status": "PASS",
|
|
"data": "popupGuide"
|
|
},
|
|
{
|
|
"name": "4 C order File → 선 → 문자 → 치수 → 인쇄",
|
|
"status": "PASS",
|
|
"data": [
|
|
"file",
|
|
"선스타일",
|
|
"문자스타일",
|
|
"치수스타일",
|
|
"인쇄"
|
|
]
|
|
},
|
|
{
|
|
"name": "4 C first file well has a left edge (consumer wrapper)",
|
|
"status": "PASS",
|
|
"data": "1px"
|
|
},
|
|
{
|
|
"name": "4 C line type callback + field value",
|
|
"status": "PASS",
|
|
"data": "lineType:center"
|
|
},
|
|
{
|
|
"name": "4 C text style callback + field value",
|
|
"status": "PASS",
|
|
"data": "textStyle:dotum"
|
|
},
|
|
{
|
|
"name": "4 C dimension style callback",
|
|
"status": "PASS",
|
|
"data": "dimensionStyle:iso"
|
|
},
|
|
{
|
|
"name": "4 C print callback",
|
|
"status": "PASS",
|
|
"data": "print"
|
|
},
|
|
{
|
|
"name": "5 D new search field matches the SW field surface (height/top/border/radius/background/shadow/label)",
|
|
"status": "PASS",
|
|
"data": {
|
|
"layer": {
|
|
"h": 38,
|
|
"top": 1232,
|
|
"border": "1px rgb(8, 37, 28)",
|
|
"radius": "3px",
|
|
"bg": "linear-gradient(0deg, rgba(0, 0, 0, 0.45",
|
|
"shadow": "rgba(9, 39, 30, 0.7) 0px 1px 4px 0px"
|
|
},
|
|
"search": {
|
|
"h": 38,
|
|
"top": 1232,
|
|
"border": "1px rgb(8, 37, 28)",
|
|
"radius": "3px",
|
|
"bg": "linear-gradient(0deg, rgba(0, 0, 0, 0.45",
|
|
"shadow": "rgba(9, 39, 30, 0.7) 0px 1px 4px 0px"
|
|
},
|
|
"label": "12px",
|
|
"fieldLabel": "12px"
|
|
}
|
|
},
|
|
{
|
|
"name": "5 D hover ring like existing fields (edge turns yellow, inside unchanged)",
|
|
"status": "PASS",
|
|
"data": {
|
|
"ring": "1",
|
|
"before": {
|
|
"inside": [
|
|
18,
|
|
50,
|
|
39
|
|
],
|
|
"edge": [
|
|
8,
|
|
37,
|
|
28
|
|
]
|
|
},
|
|
"after": {
|
|
"inside": [
|
|
18,
|
|
50,
|
|
39
|
|
],
|
|
"edge": [
|
|
172,
|
|
131,
|
|
3
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "5 D Enter commits through SWHeaderInput → search callback",
|
|
"status": "PASS",
|
|
"data": "search:WALL-01"
|
|
},
|
|
{
|
|
"name": "5 D search button callback uses committed value",
|
|
"status": "PASS",
|
|
"data": "search:WALL-01"
|
|
},
|
|
{
|
|
"name": "5 D Escape restores the committed value",
|
|
"status": "PASS",
|
|
"data": "WALL-01"
|
|
},
|
|
{
|
|
"name": "5 D existing color dropdown in the same bar",
|
|
"status": "PASS",
|
|
"data": "color:blue"
|
|
},
|
|
{
|
|
"name": "6 B Tab order = display order",
|
|
"status": "PASS",
|
|
"data": [
|
|
"문서: C0020101-006-평면및종단면도(06)",
|
|
"레이어",
|
|
"색상",
|
|
"팝업 가이드"
|
|
]
|
|
},
|
|
{
|
|
"name": "7 no page/console errors",
|
|
"status": "PASS",
|
|
"data": []
|
|
}
|
|
],
|
|
"errors": [],
|
|
"warnings": [
|
|
"Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently",
|
|
"Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently"
|
|
]
|
|
} |