chore: 제어모드 IDE 작업 + v2/legacy 레지스트리 컴포넌트 폐기

- 제어모드 IDE: ControlCardPanel, control/ide/* (Canvas/LeftRail/RightRail/PanZoomStage/V3RuleNode 등), schemas, lib/api/control
- 레지스트리 정리: aggregation-widget, status-count, section-card/paper, table-list(legacy/v2), tabs-widget 폐기 → table/_shared/ 로 통합
- InvLegacyButtonConfigPanel cp 마이그레이션
- canonical data view cleanup 후속 노트
This commit is contained in:
DDD1542
2026-05-19 21:31:03 +09:00
parent 467a41a3a8
commit 2f398ae0b3
138 changed files with 13662 additions and 13999 deletions
@@ -71,6 +71,7 @@ import {
import { ImprovedButtonControlConfigPanel } from "@/components/screen/config-panels/ImprovedButtonControlConfigPanel";
import { FlowVisibilityConfigPanel } from "@/components/screen/config-panels/FlowVisibilityConfigPanel";
import type { ComponentData } from "@/types/screen";
import { isTableLikeComponentType } from "@/lib/utils/componentTypeUtils";
// ───────────────────────────────────────────────────────
// 상수: 액션 / 표시 / 변형
@@ -112,6 +113,16 @@ const MODAL_SIZE_OPTIONS = [
{ value: "full", label: "전체" },
] as const;
// canonical table / legacy table-list / hidden v2-table-list / data-table / datatable
// 은 table-like helper 로 통일. 추가로 repeater-field-group / form-group 도 데이터 전송
// 호환 대상으로 함께 인식.
const DATA_TRANSFER_EXTRA_PATTERNS = ["repeater-field-group", "form-group"] as const;
const isDataTransferComponentType = (typeValue: unknown): boolean => {
if (isTableLikeComponentType(typeValue)) return true;
if (typeof typeValue !== "string") return false;
return DATA_TRANSFER_EXTRA_PATTERNS.some((t) => typeValue.includes(t));
};
const TRANSFER_MODE_OPTIONS = [
{ value: "append", label: "추가" },
{ value: "replace", label: "교체" },
@@ -810,9 +821,7 @@ function ActionDetailBody(p: ActionDetailBodyProps) {
{p.allComponents
.filter((c: any) => {
const t = c.componentType || c.type || "";
return ["table-list", "repeater-field-group", "form-group", "data-table"].some(
(x) => t.includes(x),
);
return isDataTransferComponentType(t);
})
.map((c: any) => (
<option key={c.id} value={c.id}>
@@ -841,9 +850,7 @@ function ActionDetailBody(p: ActionDetailBodyProps) {
{p.allComponents
.filter((c: any) => {
const t = c.componentType || c.type || "";
const ok = ["table-list", "repeater-field-group", "form-group", "data-table"].some(
(x) => t.includes(x),
);
const ok = isDataTransferComponentType(t);
return ok && c.id !== dt.sourceComponentId;
})
.map((c: any) => (