Files
HMDesign/docs/sw/viewer-qa/report.json
T
shkim4 68fbcf6e15 feat(sw): viewer follow-up — SVG icon outline, shared SW popup frame, story grid, green layer buttons
- 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
2026-10-19 16:34:50 +09:00

632 lines
14 KiB
JSON

{
"storybook": "http://127.0.0.1:6034",
"reference": "http://127.0.0.1:5182",
"comparison": {
"reference": {
"document": [
{
"x": 73,
"y": 1,
"w": 337,
"h": 50,
"text": "C0060202-001"
}
],
"object": [
{
"x": 412,
"y": 1,
"w": 1027,
"h": 50,
"text": "파일 열기샘플 Mode"
}
],
"field": [
{
"x": 622,
"y": 6,
"w": 197,
"h": 41,
"text": "Model17,377L"
},
{
"x": 823,
"y": 5,
"w": 249,
"h": 42,
"text": "전체 보기2.5D어두운"
}
],
"button": [
{
"x": 421,
"y": 9,
"w": 109,
"h": 34,
"text": "파일 열기"
},
{
"x": 534,
"y": 9,
"w": 80,
"h": 34,
"text": "샘플"
},
{
"x": 828,
"y": 9,
"w": 109,
"h": 34,
"text": "전체 보기"
},
{
"x": 1402,
"y": 6,
"w": 32,
"h": 40,
"text": ""
}
],
"toggle": [
{
"x": 1086,
"y": 6,
"w": 81,
"h": 40,
"text": "레이어"
},
{
"x": 1171,
"y": 6,
"w": 68,
"h": 40,
"text": "설정"
},
{
"x": 1243,
"y": 6,
"w": 68,
"h": 40,
"text": "속성"
}
],
"tab": [
{
"x": 627,
"y": 7,
"w": 97,
"h": 40,
"text": "Model17,377"
},
{
"x": 728,
"y": 7,
"w": 87,
"h": 40,
"text": "Layout237"
}
],
"switchField": [
{
"x": 942,
"y": 6,
"w": 52,
"h": 40,
"text": "2.5D"
},
{
"x": 998,
"y": 6,
"w": 70,
"h": 40,
"text": "어두운 배경"
}
]
},
"package": {
"document": [
{
"x": 25,
"y": 1,
"w": 360,
"h": 50,
"text": "C0060202-001"
}
],
"object": [
{
"x": 387,
"y": 1,
"w": 1053,
"h": 50,
"text": "파일 열기샘플Model"
}
],
"field": [
{
"x": 597,
"y": 5,
"w": 197,
"h": 42,
"text": "Model17,377L"
},
{
"x": 798,
"y": 5,
"w": 249,
"h": 42,
"text": "전체 보기2.5D어두운"
}
],
"button": [
{
"x": 396,
"y": 9,
"w": 109,
"h": 34,
"text": "파일 열기"
},
{
"x": 509,
"y": 9,
"w": 80,
"h": 34,
"text": "샘플"
},
{
"x": 803,
"y": 9,
"w": 109,
"h": 34,
"text": "전체 보기"
},
{
"x": 1402,
"y": 6,
"w": 32,
"h": 40,
"text": ""
}
],
"toggle": [
{
"x": 1086,
"y": 6,
"w": 81,
"h": 40,
"text": "레이어"
},
{
"x": 1171,
"y": 6,
"w": 68,
"h": 40,
"text": "설정"
},
{
"x": 1243,
"y": 6,
"w": 68,
"h": 40,
"text": "속성"
}
],
"tab": [
{
"x": 602,
"y": 6,
"w": 97,
"h": 40,
"text": "Model17,377"
},
{
"x": 702,
"y": 6,
"w": 87,
"h": 40,
"text": "Layout237"
}
],
"switchField": [
{
"x": 916,
"y": 6,
"w": 52,
"h": 40,
"text": "2.5D"
},
{
"x": 972,
"y": 6,
"w": 70,
"h": 40,
"text": "어두운 배경"
}
]
}
},
"results": [
{
"name": "geometry button sizes equal to reference",
"result": "PASS",
"detail": "reference 109x34 80x34 109x34 32x40 / package 109x34 80x34 109x34 32x40"
},
{
"name": "geometry toggle sizes equal to reference",
"result": "PASS",
"detail": "reference 81x40 68x40 68x40 / package 81x40 68x40 68x40"
},
{
"name": "geometry tab sizes equal to reference",
"result": "PASS",
"detail": "reference 97x40 87x40 / package 97x40 87x40"
},
{
"name": "geometry switchField sizes equal to reference",
"result": "PASS",
"detail": "reference 52x40 70x40 / package 52x40 70x40"
},
{
"name": "geometry field sizes equal to reference (±1px height, known)",
"result": "PASS",
"detail": "reference 197x41 249x42 / package 197x42 249x42"
},
{
"name": "geometry document well height / top (x: logo rule)",
"result": "PASS",
"detail": "reference x73 y1 h50 / package x25 y1 h50"
},
{
"name": "menu opens on click",
"result": "PASS",
"detail": ""
},
{
"name": "menu has 3 entries",
"result": "PASS",
"detail": ""
},
{
"name": "menu placed under its button",
"result": "PASS",
"detail": "menu 549,365 button 549,361"
},
{
"name": "trigger shows open state",
"result": "PASS",
"detail": ""
},
{
"name": "ArrowDown moves focus in menu",
"result": "PASS",
"detail": ""
},
{
"name": "Escape closes menu",
"result": "PASS",
"detail": ""
},
{
"name": "Escape returns focus to trigger",
"result": "PASS",
"detail": ""
},
{
"name": "Enter opens with first entry focused",
"result": "PASS",
"detail": ""
},
{
"name": "Enter selects entry (document changes)",
"result": "PASS",
"detail": ""
},
{
"name": "onCommand reports menu entry",
"result": "PASS",
"detail": "Command: samples/sample-dxf"
},
{
"name": "outside click closes menu",
"result": "PASS",
"detail": ""
},
{
"name": "tabs ArrowRight selects Layout",
"result": "PASS",
"detail": ""
},
{
"name": "header switch toggles",
"result": "PASS",
"detail": ""
},
{
"name": "hover face #266651",
"result": "PASS",
"detail": ""
},
{
"name": "toggle opens panel",
"result": "PASS",
"detail": ""
},
{
"name": "toggle pressed state + #FFC600",
"result": "PASS",
"detail": ""
},
{
"name": "panel focused on open",
"result": "PASS",
"detail": ""
},
{
"name": "Escape closes panel",
"result": "PASS",
"detail": ""
},
{
"name": "focus returns to toggle",
"result": "PASS",
"detail": ""
},
{
"name": "corner resize changes size",
"result": "PASS",
"detail": "314x420 → 257x323"
},
{
"name": "drag moves panel",
"result": "PASS",
"detail": "dx -300 dy 30"
},
{
"name": "drag stays inside bounds (10px edge)",
"result": "PASS",
"detail": "right gap 10, bottom gap 10"
},
{
"name": "collapse hides body",
"result": "PASS",
"detail": ""
},
{
"name": "title double click expands",
"result": "PASS",
"detail": ""
},
{
"name": "전체 켜기: default kept, green hover / active, back after release",
"result": "PASS",
"detail": "rgb(255, 255, 255) rgb(18, 51, 40) | rgb(38, 102, 81) rgb(255, 255, 255) | rgb(18, 51, 40) rgb(255, 255, 255) | rgb(38, 102, 81) rgb(255, 255, 255) | rgb(255, 255, 255) rgb(18, 51, 40)"
},
{
"name": "panel content callback",
"result": "PASS",
"detail": ""
},
{
"name": "close hover = SWPopup hover asset",
"result": "PASS",
"detail": ""
},
{
"name": "close button closes",
"result": "PASS",
"detail": ""
},
{
"name": "last touched panel on top",
"result": "PASS",
"detail": "layer z 47, options z 46"
},
{
"name": "전체 켜기 hover = 라이선스 확인 hover (same token)",
"result": "PASS",
"detail": "rgb(38, 102, 81) rgb(255, 255, 255) / rgb(38, 102, 81) rgb(255, 255, 255)"
},
{
"name": "modal popup opens with backdrop",
"result": "PASS",
"detail": ""
},
{
"name": "modal focus stays inside",
"result": "PASS",
"detail": ""
},
{
"name": "modal Escape closes",
"result": "PASS",
"detail": ""
},
{
"name": "ArrowRight opens submenu with focus",
"result": "PASS",
"detail": ""
},
{
"name": "submenu opens to the side",
"result": "PASS",
"detail": "parent right 596, sub left 596"
},
{
"name": "third level opens on hover",
"result": "PASS",
"detail": ""
},
{
"name": "ArrowLeft closes one level",
"result": "PASS",
"detail": ""
},
{
"name": "checkbox entry toggles via onCommand",
"result": "PASS",
"detail": "Command: file/lineweight=true"
},
{
"name": "checkbox state reflected",
"result": "PASS",
"detail": ""
},
{
"name": "disabled entry does nothing",
"result": "PASS",
"detail": ""
},
{
"name": "menuAlign end + menuWidth",
"result": "PASS",
"detail": "width 220"
},
{
"name": "context menu opens at pointer",
"result": "PASS",
"detail": "90,729"
},
{
"name": "context entry reported",
"result": "PASS",
"detail": ""
},
{
"name": "menu stays inside the viewport",
"result": "PASS",
"detail": "left 4, right 224"
},
{
"name": "no horizontal overflow at 1440 / 1100 / 860 / 520",
"result": "PASS",
"detail": "[[1440,0,0],[1100,0,0],[860,0,0],[520,0,0]]"
},
{
"name": "1440: no More",
"result": "PASS",
"detail": ""
},
{
"name": "1100: More, samples/tabs/switches moved",
"result": "PASS",
"detail": ""
},
{
"name": "860: panel toggles moved too",
"result": "PASS",
"detail": ""
},
{
"name": "520: 파일 열기 / 전체 보기 icon only",
"result": "PASS",
"detail": ""
},
{
"name": "More sections like the reference",
"result": "PASS",
"detail": "샘플 도면 | 기본 도면 · DWG | 평면 및 종단면도 · DWG | 기본 도형 · DXF | 도면 공간 | Model · 17,377개 | Layout · 237개 | 화면 보기 | 2.5D | 어두운 배경 | 패널 | 레이어 | 설정 | 속성"
},
{
"name": "More face beige 260px",
"result": "PASS",
"detail": ""
},
{
"name": "More checkbox reports command",
"result": "PASS",
"detail": "Command: layers=true"
},
{
"name": "More radio selects tab value",
"result": "PASS",
"detail": ""
},
{
"name": "mode switch shows viewer header",
"result": "PASS",
"detail": ""
},
{
"name": "brand click returns to normal SWHeader",
"result": "PASS",
"detail": ""
},
{
"name": "state kept across mode switch (layer panel still open)",
"result": "PASS",
"detail": ""
},
{
"name": "logo none: no HM / text / icon",
"result": "PASS",
"detail": "{\"text\":\"\",\"img\":false,\"width\":24,\"docX\":25,\"height\":52,\"fileOpenY\":9}"
},
{
"name": "logo none: cap shrinks to its edge (no wide gap)",
"result": "PASS",
"detail": "{\"text\":\"\",\"img\":false,\"width\":24,\"docX\":25,\"height\":52,\"fileOpenY\":9}"
},
{
"name": "logoSrc shows the image (cap = 24 + logo + 25, min 72)",
"result": "PASS",
"detail": "{\"text\":\"\",\"img\":true,\"width\":94,\"docX\":95,\"height\":52,\"fileOpenY\":9,\"logoWidth\":45}"
},
{
"name": "logo element shown",
"result": "PASS",
"detail": "{\"text\":\"LOGO\",\"img\":true,\"width\":81,\"docX\":82,\"height\":52,\"fileOpenY\":9}"
},
{
"name": "header height and menu row unchanged with / without logo",
"result": "PASS",
"detail": "52/9 52/9 52/9"
},
{
"name": "text outline 1.3px black on 14px text (label / file name / tab)",
"result": "PASS",
"detail": "rgb(0, 0, 0) 1.3px 0px 0px, rgb(0, 0, 0) 1.2px 0.5px 0px, rg"
},
{
"name": "label outline 1px black on 11px captions / counts",
"result": "PASS",
"detail": "rgb(0, 0, 0) 1px 0px 0px, rgb(0, 0, 0) 0.92px 0.38px 0px, rg"
},
{
"name": "icon outline: SVG stroke copy, no CSS filter",
"result": "PASS",
"detail": "{\"filter\":\"none\",\"copyStroke\":\"rgb(0, 0, 0)\",\"copyWidth\":5,\"glyphStroke\":\"rgb(255, 255, 255)\",\"glyphWidth\":2}"
},
{
"name": "fill / size / weight / spacing kept",
"result": "PASS",
"detail": "rgb(255, 255, 255) 14px 500 normal"
},
{
"name": "hover changes fill only (outline kept)",
"result": "PASS",
"detail": ""
},
{
"name": "disabled fades text + outline together",
"result": "PASS",
"detail": "[\"0.6\",true]"
},
{
"name": "SW/Tool removed from the sidebar",
"result": "PASS",
"detail": "SW/Header, SW/Viewer, SW/Popup"
},
{
"name": "SW/Popup, SW/Header and SW/Viewer remain",
"result": "PASS",
"detail": ""
},
{
"name": "no page errors",
"result": "PASS",
"detail": ""
}
],
"errors": []
}