"use client"; import { createComponentDefinition } from "../../utils/createComponentDefinition"; import { ComponentCategory } from "@/types/component"; import { ButtonWrapper } from "./ButtonComponent"; import { InvButtonConfigPanel } from "./InvButtonConfigPanel"; import type { ButtonConfig } from "./types"; /** * Button — 통합 단일 버튼 컴포넌트 정의 (2026-04-11, Phase A-3) * * 흡수 대상: * - v2-button-primary (base) * - button-primary (legacy) * - related-data-buttons (legacy; 버튼 그룹은 여러 `button` 배치로 대체) * * 변형: * - variant: primary | secondary | default | destructive | outline | ghost * - size: sm | md | lg * - actionType: save/edit/delete/add/cancel/close/navigate/popup/search/reset/submit/approval/custom (13종) * - confirm, icon, backgroundColor/textColor override * * 관련 문서: * notes/gbpark/2026-04-11-component-unification-plan.md §3.5 */ const DEFAULT_CONFIG: Partial = { text: "버튼", variant: "primary", size: "md", actionType: "save", borderRadius: "6px", }; export const ButtonDefinition = createComponentDefinition({ id: "button", name: "버튼", name_eng: "Button", description: "저장, 삭제, 팝업 등 동작 실행", category: ComponentCategory.ACTION, web_type: "button", component: ButtonWrapper, default_config: DEFAULT_CONFIG as Record, default_size: { width: 120, height: 36 }, config_panel: InvButtonConfigPanel, icon: "MousePointer", tags: ["버튼", "button", "action", "click"], version: "2.0.0", author: "INVYONE", documentation: "notes/gbpark/2026-04-11-component-unification-plan.md#35-button", // ─── INVYONE DataPort 선언 ─── dataPorts: { inputs: [ { name: "disabled", type: "value" }, { name: "formData", type: "row" }, ], outputs: [{ name: "clicked", type: "value" }], }, }); export type { ButtonConfig } from "./types"; export { ButtonComponent, ButtonWrapper } from "./ButtonComponent"; export { InvButtonConfigPanel } from "./InvButtonConfigPanel";