"use client"; import { ComponentRegistry } from "../ComponentRegistry"; import { initializeHotReload } from "../utils/hotReload"; /** * 컴포넌트 시스템 초기화 * 모든 컴포넌트를 자동으로 로드하고 등록합니다 */ // 컴포넌트 자동 디스커버리 및 로드 // 현재는 수동 import 방식 사용 (향후 자동 디스커버리로 확장 예정) /** * 새 구조 컴포넌트들 (자동 등록) * CLI로 생성된 컴포넌트들은 여기에 import만 추가하면 자동으로 등록됩니다 */ // 기본 입력 컴포넌트들 (v2 버전 없음 - 유지) import "./text-input/TextInputRenderer"; import "./textarea-basic/TextareaBasicRenderer"; import "./number-input/NumberInputRenderer"; import "./select-basic/SelectBasicRenderer"; import "./checkbox-basic/CheckboxBasicRenderer"; import "./radio-basic/RadioBasicRenderer"; import "./date-input/DateInputRenderer"; import "./file-upload/FileUploadRenderer"; import "./image-widget/ImageWidgetRenderer"; import "./slider-basic/SliderBasicRenderer"; import "./toggle-switch/ToggleSwitchRenderer"; import "./image-display/ImageDisplayRenderer"; import "./accordion-basic/AccordionBasicRenderer"; // 컴포넌트 패널에서만 숨김 import "./split-panel-layout2/SplitPanelLayout2Renderer"; // 분할 패널 레이아웃 v2 import "./map/MapRenderer"; import "./repeater-field-group/RepeaterFieldGroupRenderer"; import "./flow-widget/FlowWidgetRenderer"; import "./category-manager/CategoryManagerRenderer"; import "./customer-item-mapping/CustomerItemMappingRenderer"; // 거래처별 품목정보 // 수주 등록 관련 컴포넌트들 (v2 버전 없음 - 유지) import "./autocomplete-search-input/AutocompleteSearchInputRenderer"; import "./entity-search-input/EntitySearchInputRenderer"; import "./modal-repeater-table/ModalRepeaterTableRenderer"; import "./simple-repeater-table/SimpleRepeaterTableRenderer"; // 단순 반복 테이블 // 조건부 컨테이너 컴포넌트 import "./conditional-container/ConditionalContainerRenderer"; // 컴포넌트 패널에서만 숨김 import "./selected-items-detail-input/SelectedItemsDetailInputRenderer"; // 화면 임베딩 및 분할 패널 컴포넌트 import "./screen-split-panel/ScreenSplitPanelRenderer"; // 화면 분할 패널 (좌우 화면 임베딩 + 데이터 전달) // 범용 폼 모달 컴포넌트 import "./universal-form-modal/UniversalFormModalRenderer"; // 컴포넌트 패널에서만 숨김 // 세금계산서 관리 컴포넌트 import "./tax-invoice-list/TaxInvoiceListRenderer"; // 세금계산서 목록, 작성, 발행, 취소 // 메일 수신자 선택 컴포넌트 import "./mail-recipient-selector/MailRecipientSelectorRenderer"; // 내부 인원 선택 + 외부 이메일 입력 // 연관 데이터 버튼 컴포넌트 import "./related-data-buttons/RelatedDataButtonsRenderer"; // 좌측 선택 데이터 기반 연관 테이블 버튼 표시 // ============================================================ // 기존 컴포넌트들 (기존 화면 호환성 유지) // V2 버전도 별도로 존재하지만, 기존 화면은 이 컴포넌트들을 사용 // ============================================================ import "./button-primary/ButtonPrimaryRenderer"; import "./text-display/TextDisplayRenderer"; import "./divider-line/DividerLineRenderer"; import "./table-list/TableListRenderer"; import "./card-display/CardDisplayRenderer"; import "./split-panel-layout/SplitPanelLayoutRenderer"; import "./numbering-rule/NumberingRuleRenderer"; import "./table-search-widget"; import "./repeat-screen-modal/RepeatScreenModalRenderer"; import "./section-paper/SectionPaperRenderer"; import "./section-card/SectionCardRenderer"; import "./tabs/tabs-component"; import "./location-swap-selector/LocationSwapSelectorRenderer"; import "./rack-structure/RackStructureRenderer"; import "./unified-repeater/UnifiedRepeaterRenderer"; import "./pivot-grid/PivotGridRenderer"; import "./aggregation-widget/AggregationWidgetRenderer"; import "./repeat-container/RepeatContainerRenderer"; // ============================================================ // V2 컴포넌트들 (화면관리 전용 - 충돌 방지용 별도 버전) // ============================================================ import "./v2-unified-repeater/UnifiedRepeaterRenderer"; import "./v2-button-primary/ButtonPrimaryRenderer"; import "./v2-split-panel-layout/SplitPanelLayoutRenderer"; import "./v2-aggregation-widget/AggregationWidgetRenderer"; import "./v2-card-display/CardDisplayRenderer"; import "./v2-numbering-rule/NumberingRuleRenderer"; import "./v2-table-list/TableListRenderer"; import "./v2-text-display/TextDisplayRenderer"; import "./v2-pivot-grid/PivotGridRenderer"; import "./v2-repeat-screen-modal/RepeatScreenModalRenderer"; import "./v2-divider-line/DividerLineRenderer"; import "./v2-repeat-container/RepeatContainerRenderer"; import "./v2-section-card/SectionCardRenderer"; import "./v2-section-paper/SectionPaperRenderer"; import "./v2-rack-structure/RackStructureRenderer"; import "./v2-location-swap-selector/LocationSwapSelectorRenderer"; import "./v2-table-search-widget"; import "./v2-tabs-widget/tabs-component"; /** * 컴포넌트 초기화 함수 */ export async function initializeComponents() { try { // 1. 자동 등록된 컴포넌트 확인 const registeredComponents = ComponentRegistry.getAllComponents(); // 2. 카테고리별 통계 const stats = ComponentRegistry.getStats(); // 3. 개발 모드에서 디버그 정보 출력 if (process.env.NODE_ENV === "development") { ComponentRegistry.debug(); // 4. Hot Reload 시스템 초기화 initializeHotReload(); } return { success: true, totalComponents: registeredComponents.length, stats, }; } catch (error) { console.error("❌ 컴포넌트 시스템 초기화 실패:", error); throw error; } } /** * 컴포넌트 시스템 상태 확인 */ export function getComponentSystemStatus() { return { isInitialized: ComponentRegistry.getComponentCount() > 0, componentCount: ComponentRegistry.getComponentCount(), categories: ComponentRegistry.getStats().byCategory, lastInitialized: new Date(), }; } // 즉시 초기화 실행 (브라우저 환경에서만) if (typeof window !== "undefined") { // DOM이 로드된 후 초기화 if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", () => { initializeComponents(); }); } else { // 이미 로드된 경우 즉시 실행 setTimeout(initializeComponents, 0); } } // 개발 모드에서 Hot Reload 지원 if (process.env.NODE_ENV === "development" && typeof window !== "undefined") { // 전역 함수로 등록하여 개발자가 브라우저에서 직접 호출 가능 (window as any).__INIT_COMPONENTS__ = initializeComponents; (window as any).__COMPONENT_STATUS__ = getComponentSystemStatus; }