2025-09-11 18:38:28 +09:00
|
|
|
"use client";
|
|
|
|
|
|
|
|
|
|
import { ComponentRegistry } from "../ComponentRegistry";
|
|
|
|
|
import { initializeHotReload } from "../utils/hotReload";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 컴포넌트 시스템 초기화
|
|
|
|
|
* 모든 컴포넌트를 자동으로 로드하고 등록합니다
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// 컴포넌트 자동 디스커버리 및 로드
|
|
|
|
|
// 현재는 수동 import 방식 사용 (향후 자동 디스커버리로 확장 예정)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 새 구조 컴포넌트들 (자동 등록)
|
|
|
|
|
* CLI로 생성된 컴포넌트들은 여기에 import만 추가하면 자동으로 등록됩니다
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// 예시 컴포넌트들 (CLI로 생성 후 주석 해제)
|
|
|
|
|
import "./button-primary/ButtonPrimaryRenderer";
|
|
|
|
|
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";
|
2025-09-12 14:24:25 +09:00
|
|
|
// import "./label-basic/LabelBasicRenderer"; // 제거됨 - text-display로 교체
|
|
|
|
|
import "./text-display/TextDisplayRenderer";
|
2025-09-11 18:38:28 +09:00
|
|
|
import "./file-upload/FileUploadRenderer";
|
2025-11-06 12:11:49 +09:00
|
|
|
import "./image-widget/ImageWidgetRenderer";
|
2025-09-11 18:38:28 +09:00
|
|
|
import "./slider-basic/SliderBasicRenderer";
|
|
|
|
|
import "./toggle-switch/ToggleSwitchRenderer";
|
|
|
|
|
import "./image-display/ImageDisplayRenderer";
|
|
|
|
|
import "./divider-line/DividerLineRenderer";
|
2025-09-12 16:47:02 +09:00
|
|
|
import "./accordion-basic/AccordionBasicRenderer";
|
2025-09-18 20:13:33 +09:00
|
|
|
import "./table-list/TableListRenderer";
|
2025-09-15 17:10:46 +09:00
|
|
|
import "./card-display/CardDisplayRenderer";
|
2025-10-15 17:25:38 +09:00
|
|
|
import "./split-panel-layout/SplitPanelLayoutRenderer";
|
2025-12-03 17:45:22 +09:00
|
|
|
import "./split-panel-layout2/SplitPanelLayout2Renderer"; // 분할 패널 레이아웃 v2
|
2025-10-15 10:29:15 +09:00
|
|
|
import "./map/MapRenderer";
|
2025-10-16 15:05:24 +09:00
|
|
|
import "./repeater-field-group/RepeaterFieldGroupRenderer";
|
2025-10-20 10:55:33 +09:00
|
|
|
import "./flow-widget/FlowWidgetRenderer";
|
2025-11-04 13:58:21 +09:00
|
|
|
import "./numbering-rule/NumberingRuleRenderer";
|
2025-11-05 15:23:57 +09:00
|
|
|
import "./category-manager/CategoryManagerRenderer";
|
2025-11-12 10:48:24 +09:00
|
|
|
import "./table-search-widget"; // 🆕 테이블 검색 필터 위젯
|
2025-11-14 16:30:38 +09:00
|
|
|
import "./customer-item-mapping/CustomerItemMappingRenderer"; // 🆕 거래처별 품목정보
|
2025-09-11 18:38:28 +09:00
|
|
|
|
2025-11-14 14:43:53 +09:00
|
|
|
// 🆕 수주 등록 관련 컴포넌트들
|
2025-11-17 16:48:42 +09:00
|
|
|
import "./autocomplete-search-input/AutocompleteSearchInputRenderer";
|
|
|
|
|
import "./entity-search-input/EntitySearchInputRenderer";
|
|
|
|
|
import "./modal-repeater-table/ModalRepeaterTableRenderer";
|
2025-11-28 11:48:46 +09:00
|
|
|
import "./simple-repeater-table/SimpleRepeaterTableRenderer"; // 🆕 단순 반복 테이블
|
|
|
|
|
import "./repeat-screen-modal/RepeatScreenModalRenderer"; // 🆕 반복 화면 모달 (카드 형태)
|
2025-11-14 14:43:53 +09:00
|
|
|
import "./order-registration-modal/OrderRegistrationModalRenderer";
|
|
|
|
|
|
2025-11-14 17:40:07 +09:00
|
|
|
// 🆕 조건부 컨테이너 컴포넌트
|
|
|
|
|
import "./conditional-container/ConditionalContainerRenderer";
|
2025-11-17 12:23:45 +09:00
|
|
|
import "./selected-items-detail-input/SelectedItemsDetailInputRenderer";
|
2025-11-14 17:40:07 +09:00
|
|
|
|
2025-11-18 11:28:22 +09:00
|
|
|
// 🆕 섹션 그룹화 레이아웃 컴포넌트
|
|
|
|
|
import "./section-paper/SectionPaperRenderer"; // Section Paper (색종이 - 배경색 기반 그룹화) - Renderer 방식
|
|
|
|
|
import "./section-card/SectionCardRenderer"; // Section Card (제목+테두리 기반 그룹화) - Renderer 방식
|
|
|
|
|
|
2025-11-24 17:24:47 +09:00
|
|
|
// 🆕 탭 컴포넌트
|
|
|
|
|
import "./tabs/tabs-component"; // 탭 기반 화면 전환 컴포넌트
|
|
|
|
|
|
2025-11-28 18:35:07 +09:00
|
|
|
// 🆕 반복 화면 모달 컴포넌트
|
|
|
|
|
import "./repeat-screen-modal/RepeatScreenModalRenderer";
|
|
|
|
|
|
|
|
|
|
// 🆕 출발지/도착지 선택 컴포넌트
|
|
|
|
|
import "./location-swap-selector/LocationSwapSelectorRenderer";
|
|
|
|
|
|
2025-11-27 12:08:32 +09:00
|
|
|
// 🆕 화면 임베딩 및 분할 패널 컴포넌트
|
|
|
|
|
import "./screen-split-panel/ScreenSplitPanelRenderer"; // 화면 분할 패널 (좌우 화면 임베딩 + 데이터 전달)
|
|
|
|
|
|
2025-12-04 17:40:41 +09:00
|
|
|
// 🆕 범용 폼 모달 컴포넌트
|
|
|
|
|
import "./universal-form-modal/UniversalFormModalRenderer"; // 섹션 기반 폼, 채번규칙, 다중 행 저장 지원
|
|
|
|
|
|
2025-09-11 18:38:28 +09:00
|
|
|
/**
|
|
|
|
|
* 컴포넌트 초기화 함수
|
|
|
|
|
*/
|
|
|
|
|
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;
|
|
|
|
|
}
|