style(sw): drop the 취소 / 적용 footer from the viewer options popup
Deploy Storybook / deploy (push) Successful in 1m11s

Options already apply on every toggle, input and slider change, so the footer
only recorded an event and closed the popup. The options panel no longer
passes footer (no empty footer area or divider); reset stays in the title bar.
The 축척 지정 input popup keeps its footer. VIEWER.md §4.1, the composition
pattern and Example H follow.
This commit is contained in:
shkim4 committed 2026-10-22 17:03:48 +09:00
1 parent 84d70f5cdf
commit 6f031cab18
5 files changed
+8 -9

No files matched your search

+3 -3
View File
@@ -157,13 +157,13 @@ function SliderRow({ label, unit, value, min, max, step, disabled, onChange }: {
)
}
export function OptionsPanel({ demo, footer, ...placement }: { demo: ViewerDemo; footer?: boolean } & PanelPlacement) {
export function OptionsPanel({ demo, ...placement }: { demo: ViewerDemo } & PanelPlacement) {
const { options, setOptions } = demo
const set = (patch: Partial<ViewerOptions>) => setOptions({ ...options, ...patch })
return (
<SWViewerPanel title="옵션" open={demo.panels.options} onClose={() => demo.toggle("options", false)} width={340} height={520} {...placement}
headerActions={<SWViewerButton variant="ghost" aria-label="기본값으로" title="기본값으로" onClick={() => { setOptions(DEFAULT_OPTIONS); demo.record("options:reset") }}><RotateCcw size={16} /></SWViewerButton>}
footer={footer ? <><SWViewerButton onClick={() => demo.toggle("options", false)}>취소</SWViewerButton><SWViewerButton variant="primary" onClick={() => { demo.record("options:apply"); demo.toggle("options", false) }}>적용</SWViewerButton></> : undefined}>
headerActions={<SWViewerButton variant="ghost" aria-label="기본값으로" title="기본값으로" onClick={() => { setOptions(DEFAULT_OPTIONS); demo.record("options:reset") }}><RotateCcw size={16} /></SWViewerButton>}>
{/* 2026-10-22: no 취소 / 적용 footer — every toggle, input and slider applies at once. */}
<SWViewerSection title="선가중치">
{/* 2026-10-22 options image: LWDISPLAY toggle; scale input + px/mm unit on the label row, slider below. */}
<SWViewerField label="표시 (LWDISPLAY)">{id => <SWViewerSwitch id={id} checked={options.lineweightOn} onCheckedChange={lineweightOn => set({ lineweightOn })} />}</SWViewerField>
+2 -2
View File
@@ -261,7 +261,7 @@ export const SettingsPanel: Story = {
<StoryPageHeader kicker={KICKER} title="SW Viewer — 설정창 (SWViewerPanel)" />
<Log lines={demo.log} />
<ViewerFrame header={<SWViewerHeader documentTitle={demo.documentName} {...demo.fileProps} groups={demo.groups} trailing={demo.trailing} onCommand={demo.onCommand} />}>
<OptionsPanel demo={demo} strategy="absolute" footer />
<OptionsPanel demo={demo} strategy="absolute" />
</ViewerFrame>
</StoryPage>
)
@@ -291,7 +291,7 @@ export const ContentVariants: Story = {
<SWViewerField label="단위">{id => <SWSelect id={id} defaultValue="mm" options={[{ value: "mm" }, { value: "m" }]} onValueChange={value => demo.record(`unit=${value}`)} data-sw-select="unit" />}</SWViewerField>
</SWViewerSection>
</SWViewerPanel>
<OptionsPanel demo={demo} strategy="absolute" defaultPosition={{ left: 712, top: 16 }} footer />
<OptionsPanel demo={demo} strategy="absolute" defaultPosition={{ left: 712, top: 16 }} />
{!inputOpen && <button type="button" className="sw-viewer-story-reopen" onClick={() => setInputOpen(true)}>축척 지정 다시 열기</button>}
</ViewerFrame>
</StoryPage>