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
@@ -153,12 +153,19 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
const embeddedScreenIds = new Set<number>();
// 컴포넌트에서 임베드된 화면 ID 수집
// ★ 2026-05-19 tabs 탐색 helper — legacy tabs-widget/v2-tabs-widget + canonical container(containerType=tabs)
const isTabsLikeForEmbedded = (ct: string | undefined, cfg: any): boolean =>
ct === "tabs-widget" ||
ct === "v2-tabs-widget" ||
(ct === "container" && ((cfg?.containerType ?? "section") === "tabs"));
const findEmbeddedScreens = (comps: any[]) => {
for (const comp of comps) {
const config = comp.componentConfig || {};
// TabsWidget의 탭들
if (comp.componentType === "tabs-widget" && config.tabs) {
const config = comp.componentConfig || comp.component_config || {};
const componentType = comp.componentType || comp.component_type;
// TabsWidget / canonical container tabs 의 탭들
if (isTabsLikeForEmbedded(componentType, config) && config.tabs) {
for (const tab of config.tabs) {
if (tab.screen_id) {
embeddedScreenIds.add(tab.screen_id);
@@ -166,7 +173,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
}
}
}
// ScreenSplitPanel
if (comp.componentType === "screen-split-panel") {
if (config.leftScreenId) embeddedScreenIds.add(config.leftScreenId);