import { useState, type ReactNode } from "react" import type { Meta, StoryObj } from "@storybook/react-vite" import { SWHeader, SWHeaderHome, SWTheme, SWToolButton, SWToolGroup } from "@hm-design/sw" import "@hm-design/sw/styles.css" import { StoryPage, StoryPageHeader, StorySection } from "@/components/story-page" import "./sw-stories.css" import "./sw-integrated-stories.css" import placeholderLogo from "./assets/sw-header-logo-placeholder.svg" // SWToolButton / SWToolGroup (2026-10-19): the existing SW toggle, pill and file-name looks as public buttons // for viewer tool bars (Model / Layout, Fit, 2.5D, ...). Public API only, like a consuming project. const KICKER = "HM DESIGN SYSTEM / SW" // Sample host icon (the program supplies its own): 24 x 23 box like the print icon, default #B6D0C9 / hover #FFC600. const FitIcon = ({ color }: { color: string }) => ( ) const meta = { title: "SW/Tool", parameters: { layout: "fullscreen", controls: { disable: true } }, } satisfies Meta export default meta type Story = StoryObj function Bar({ children }: { children: ReactNode }) { return {children} } function ToolPage() { const [view, setView] = useState<"model" | "layout">("model") const [depth, setDepth] = useState(false) const [log, setLog] = useState([]) const record = (line: string) => setLog(lines => [...lines.slice(-7), line]) const viewGroup = ( { setView("model"); record("view(model)") }}>Model { setView("layout"); record("view(layout)") }}>Layout ) const displayGroup = ( { setDepth(!depth); record(`2.5D(${!depth})`) }}>2.5D ) const fit = ( } hoverIcon={} onClick={() => record("fit")}>화면 맞춤 ) return ( Callback: {log.length ? log.join(" → ") : "없음"} {viewGroup}{displayGroup}{fit}>} /> record("open")}>Open {viewGroup}{displayGroup}{fit} Disabled DefaultPressedDisabled } hoverIcon={}>Fit } disabled>Fit disabled ) } export const ToolButtons: Story = { name: "Tool Buttons", render: () => }
Callback: {log.length ? log.join(" → ") : "없음"}