feat(sw): integrate home menu into SWHeader (Task A + B)

Combine Task A (e8409ef, SW 0.2.0 integrated improvement) with Task B
(396539d, Figma-based SWHomeMenu / SWHomeMenuSection / SWHomeMenuItem /
SWRecentFiles). Task B's 84 new files are taken unchanged except for the
public-import Storybook update and joining the popup Escape stack.

- Export the home menu from @hm-design/sw
- SWHeader homeMenu / homeMenuOpen / defaultHomeMenuOpen /
  onHomeMenuOpenChange: hidden by default, the logo toggles it (onHomeClick
  is not called while homeMenu is set), placed from the measured header,
  closes with / closes the document and field dropdowns
- Logo aria-expanded / aria-controls; menu layer CSS (z-index 20)
- AI catalog / patterns / design rules, example G, README, usage guide
- Storybook SW/Home Menu uses @hm-design/sw; integration story

Verified: SW typecheck, tsc -b, SW build, Storybook build, AI docs 22/22,
28/28 existing SW shots pixel-identical, regression 96 PASS / 0 FAIL,
home menu checks 22/22. Not run: tarball consumer install.
This commit is contained in:
shkim4 committed 2026-10-19 15:39:47 +09:00
1 parent e8409eff44
commit 1472e51f47
110 files changed
+6463 -17

No files matched your search

@@ -0,0 +1,30 @@
<svg preserveAspectRatio="none" overflow="visible" style="display: block;" width="37" height="32" viewBox="0 0 37 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="icon_dualmonitor" filter="url(#filter0_d_0_233)">
<g id="Union">
<path d="M12 14V13H18V4H4V13H10V14H8V15H10H12H14V14H12Z" fill-rule="evenodd" clip-rule="evenodd" fill="white"/>
<mask id="stroke0_0_233" fill="white">
<path d="M12 14V13H18V4H4V13H10V14H8V15H10H12H14V14H12Z" fill-rule="evenodd" clip-rule="evenodd"/>
</mask>
<path d="M12 13V14H14V15H12H10H8V14H10V13H4V4H18V13H12Z" stroke-width="2" stroke="#4B7165" mask="url(#stroke0_0_233)"/>
</g>
<g id="Union_2">
<path d="M27 14V13H33V4H19V13H25V14H23V15H25H27H29V14H27Z" fill-rule="evenodd" clip-rule="evenodd" fill="#FFE500"/>
<mask id="stroke1_0_233" fill="white">
<path d="M27 14V13H33V4H19V13H25V14H23V15H25H27H29V14H27Z" fill-rule="evenodd" clip-rule="evenodd"/>
</mask>
<path d="M27 13V14H29V15H27H25H23V14H25V13H19V4H33V13H27Z" stroke-width="2" stroke="#264F42" mask="url(#stroke1_0_233)"/>
</g>
</g>
<defs>
<filter id="filter0_d_0_233" x="0" y="0" width="37" height="36" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_233"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_233" result="shape"/>
</filter>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB