"use client"; /** * Unified 컴포넌트 레지스트리 등록 * * 9개의 Unified 컴포넌트를 ComponentRegistry에 등록합니다. */ import { ComponentRegistry } from "@/lib/registry/ComponentRegistry"; import { ComponentDefinition, ComponentCategory } from "@/types/component"; import { WebType } from "@/types/screen"; // 실제 컴포넌트 import import { UnifiedInput } from "./UnifiedInput"; import { UnifiedSelect } from "./UnifiedSelect"; import { UnifiedDate } from "./UnifiedDate"; import { UnifiedList } from "./UnifiedList"; import { UnifiedLayout } from "./UnifiedLayout"; import { UnifiedGroup } from "./UnifiedGroup"; import { UnifiedMedia } from "./UnifiedMedia"; import { UnifiedBiz } from "./UnifiedBiz"; import { UnifiedHierarchy } from "./UnifiedHierarchy"; // 설정 패널 import import { UnifiedInputConfigPanel } from "./config-panels/UnifiedInputConfigPanel"; import { UnifiedSelectConfigPanel } from "./config-panels/UnifiedSelectConfigPanel"; import { UnifiedDateConfigPanel } from "./config-panels/UnifiedDateConfigPanel"; import { UnifiedListConfigPanel } from "./config-panels/UnifiedListConfigPanel"; import { UnifiedLayoutConfigPanel } from "./config-panels/UnifiedLayoutConfigPanel"; import { UnifiedGroupConfigPanel } from "./config-panels/UnifiedGroupConfigPanel"; import { UnifiedMediaConfigPanel } from "./config-panels/UnifiedMediaConfigPanel"; import { UnifiedBizConfigPanel } from "./config-panels/UnifiedBizConfigPanel"; import { UnifiedHierarchyConfigPanel } from "./config-panels/UnifiedHierarchyConfigPanel"; // Unified 컴포넌트 정의 const unifiedComponentDefinitions: ComponentDefinition[] = [ { id: "unified-input", name: "통합 입력", description: "텍스트, 숫자, 비밀번호, 슬라이더, 컬러 등 다양한 입력 타입을 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "text" as WebType, component: UnifiedInput as any, tags: ["input", "text", "number", "password", "slider", "color", "unified"], defaultSize: { width: 200, height: 40 }, configPanel: UnifiedInputConfigPanel as any, defaultConfig: { inputType: "text", format: "none", placeholder: "", }, }, { id: "unified-select", name: "통합 선택", description: "드롭다운, 라디오, 체크박스, 태그, 토글 등 다양한 선택 방식을 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "select" as WebType, component: UnifiedSelect as any, tags: ["select", "dropdown", "radio", "checkbox", "toggle", "unified"], defaultSize: { width: 200, height: 40 }, configPanel: UnifiedSelectConfigPanel as any, defaultConfig: { mode: "dropdown", source: "static", options: [], }, }, { id: "unified-date", name: "통합 날짜", description: "날짜, 시간, 날짜시간, 날짜 범위 등을 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "date" as WebType, component: UnifiedDate as any, tags: ["date", "time", "datetime", "datepicker", "unified"], defaultSize: { width: 200, height: 40 }, configPanel: UnifiedDateConfigPanel as any, defaultConfig: { dateType: "date", format: "YYYY-MM-DD", }, }, { id: "unified-list", name: "통합 목록", description: "테이블, 카드, 칸반, 리스트 등 다양한 데이터 표시 방식을 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "list" as WebType, component: UnifiedList as any, tags: ["list", "table", "card", "kanban", "data", "unified"], defaultSize: { width: 600, height: 400 }, configPanel: UnifiedListConfigPanel as any, defaultConfig: { viewMode: "table", source: "static", columns: [], pagination: true, sortable: true, }, }, { id: "unified-layout", name: "통합 레이아웃", description: "그리드, 분할 패널, 플렉스 등 다양한 레이아웃 구조를 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "container" as WebType, component: UnifiedLayout as any, tags: ["layout", "grid", "split", "flex", "container", "unified"], defaultSize: { width: 400, height: 300 }, configPanel: UnifiedLayoutConfigPanel as any, defaultConfig: { layoutType: "grid", columns: 2, gap: "16", use12Column: true, }, }, { id: "unified-group", name: "통합 그룹", description: "탭, 아코디언, 섹션, 모달 등 그룹 요소를 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "group" as WebType, component: UnifiedGroup as any, tags: ["group", "tabs", "accordion", "section", "modal", "unified"], defaultSize: { width: 400, height: 300 }, configPanel: UnifiedGroupConfigPanel as any, defaultConfig: { groupType: "section", title: "", collapsible: false, defaultOpen: true, }, }, { id: "unified-media", name: "통합 미디어", description: "이미지, 비디오, 오디오, 파일 업로드 등을 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "file" as WebType, component: UnifiedMedia as any, tags: ["media", "image", "video", "audio", "file", "upload", "unified"], defaultSize: { width: 300, height: 200 }, configPanel: UnifiedMediaConfigPanel as any, defaultConfig: { mediaType: "image", multiple: false, preview: true, }, }, { id: "unified-biz", name: "통합 비즈니스", description: "플로우, 랙, 채번규칙 등 비즈니스 기능을 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "custom" as WebType, component: UnifiedBiz as any, tags: ["business", "flow", "rack", "numbering", "category", "unified"], defaultSize: { width: 500, height: 400 }, configPanel: UnifiedBizConfigPanel as any, defaultConfig: { bizType: "flow", }, }, { id: "unified-hierarchy", name: "통합 계층", description: "트리, 조직도, BOM, 연쇄 선택박스 등 계층 구조를 지원하는 통합 컴포넌트", category: ComponentCategory.UNIFIED, webType: "tree" as WebType, component: UnifiedHierarchy as any, tags: ["hierarchy", "tree", "org-chart", "bom", "cascading", "unified"], defaultSize: { width: 400, height: 400 }, configPanel: UnifiedHierarchyConfigPanel as any, defaultConfig: { hierarchyType: "tree", viewMode: "tree", dataSource: "static", }, }, ]; /** * Unified 컴포넌트들을 ComponentRegistry에 등록 */ export function registerUnifiedComponents(): void { for (const definition of unifiedComponentDefinitions) { try { // 이미 등록되어 있으면 스킵 if (ComponentRegistry.getComponent(definition.id)) { continue; } ComponentRegistry.registerComponent(definition); } catch (error) { console.error(`❌ Unified 컴포넌트 등록 실패: ${definition.id}`, error); } } } export default registerUnifiedComponents;