import { useEffect, useState } from "react" import type { Meta, StoryObj } from "@storybook/react-vite" import { layoutProperties, radiusReferences, spacingReferences } from "./reference-data" import { ReferencePage, ReferenceSection, useResolvedProperties } from "./reference" function LayoutReferencePage() { const values = useResolvedProperties(layoutProperties) const [desktop, setDesktop] = useState(() => matchMedia("(min-width: 1024px)").matches) useEffect(() => { const media = matchMedia("(min-width: 1024px)"); const update = () => setDesktop(media.matches); media.addEventListener("change", update); return () => media.removeEventListener("change", update) }, []) return

≥ 1024px · Desktop

Desktop Navigation · LNB 표시 · GNB desktop menu

≤ 1023px · Mobile

Mobile Navigation · LNB 숨김 · GNB mobile menu

현재 preview: {desktop ? "Desktop" : "Mobile"} · GNB 높이 {values["--hm-gnb-height"]} · LNB track {values["--hm-lnb-width"]}

CSS는 min-width: 1024px / max-width: 1023px, GNB JS는 min-width: 1024px를 사용합니다. 표시는 기존 정수 QA 경계를 따릅니다.

1280 × 900

HM Desktop · QA reference

390 × 844

HM Mobile · QA reference

Boundary QA presets: 1024 × 900 / 1023 × 900

{spacingReferences.map(([property, name, source]) =>

{name}

{property}

{values[property]}

)}
{radiusReferences.map(property =>
{property}

{values[property]}

)}
Dashboard content

가용 폭을 사용하며 긴 텍스트는 내부에서 줄바꿈합니다.

다음 섹션 · gap: {values["--hm-dashboard-gap"]}

Grid / Container: NOT_FORMALLY_DEFINED · 공용 column 수 / max-width token은 FOLLOW_UP. src/hm-theme.css의 .hm-container는 앱 데모의 로컬 사용 규칙입니다.

} const meta = { title: "Foundation/Layout", parameters: { layout: "fullscreen" } } satisfies Meta export default meta export const All: StoryObj = { name: "Layout", render: () => }