@g1cloud/entity-modeler-next 5.0.0-alpha.9 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/agent/symbolicOp.d.ts +1 -0
  2. package/dist/command/commands.d.ts +11 -3
  3. package/dist/core/attributeOrder.d.ts +17 -0
  4. package/dist/core/ddl.d.ts +10 -0
  5. package/dist/core/inheritedColumns.d.ts +57 -0
  6. package/dist/core/jsonModel.d.ts +23 -0
  7. package/dist/core/mergeDiagram.d.ts +45 -0
  8. package/dist/core/mermaid.d.ts +6 -0
  9. package/dist/core/parseMermaid.d.ts +9 -0
  10. package/dist/core/parseSqlDdl.d.ts +11 -0
  11. package/dist/core/propagation.d.ts +22 -0
  12. package/dist/core/quickFix.d.ts +12 -0
  13. package/dist/core/scaffoldJava.d.ts +62 -0
  14. package/dist/core/sharedColumn.d.ts +16 -1
  15. package/dist/core/text.d.ts +4 -1
  16. package/dist/core/types.d.ts +46 -0
  17. package/dist/core/validation.d.ts +37 -6
  18. package/dist/editor/controller.d.ts +88 -10
  19. package/dist/entity-modeler-next.css +1 -1
  20. package/dist/entity-modeler.js +13964 -10381
  21. package/dist/entity-modeler.umd.cjs +36 -15
  22. package/dist/i18n/en.d.ts +3 -0
  23. package/dist/i18n/index.d.ts +17 -0
  24. package/dist/i18n/ja.d.ts +3 -0
  25. package/dist/i18n/ko.d.ts +362 -0
  26. package/dist/index.d.ts +11 -1
  27. package/dist/view/CommandPalette.vue.d.ts +10 -0
  28. package/dist/view/DiagramCanvas.vue.d.ts +2 -0
  29. package/dist/view/EditModeToggle.vue.d.ts +3 -0
  30. package/dist/view/EditorToolbar.vue.d.ts +2 -0
  31. package/dist/view/EmContextMenu.vue.d.ts +7 -2
  32. package/dist/view/GroupCodeCombobox.vue.d.ts +2 -0
  33. package/dist/view/OperationSourceEditor.vue.d.ts +2 -0
  34. package/dist/view/{EntityTextPreview.vue.d.ts → ShortcutHelpModal.vue.d.ts} +2 -1
  35. package/dist/view/TextExportModal.vue.d.ts +15 -0
  36. package/dist/view/TextImportModal.vue.d.ts +8 -0
  37. package/dist/view/explorerFilter.d.ts +20 -0
  38. package/dist/view/exportImage.d.ts +14 -0
  39. package/dist/view/opConflictNotice.d.ts +12 -0
  40. package/dist/view/validationDisplay.d.ts +14 -2
  41. package/package.json +1 -1
  42. package/dist/view/exportSvg.d.ts +0 -7
@@ -6,8 +6,16 @@ import { OpSyncTransport } from '../command/opSync';
6
6
  import { FieldAuditRecord } from '../core/projectFieldAudit';
7
7
  import { ResolvedDiagram } from '../core/resolve';
8
8
  import { RoutingMode } from '../core/routing';
9
+ import { MergeDiagramSource } from '../core/mergeDiagram';
9
10
  import { ValidationIssue } from '../core/validation';
10
- import { AssociationEnd, Attribute, DisplayMode, EmbeddableCatalog, Entity, EntityIndex, Geo, GroupCodeCatalog, LangCode, LogicalGroup, ModelId, Operation, Point, PredefinedCustomTypeCatalog } from '../core/types';
11
+ import { UiLocale, Translator } from '../i18n';
12
+ import { AssociationEnd, Attribute, DisplayMode, EmbeddableCatalog, Entity, EntityIndex, Geo, GroupCodeCatalog, LangCode, LogicalGroup, ModelId, Multiplicity, Operation, Point, PredefinedCustomTypeCatalog, SuperClassCatalog } from '../core/types';
13
+ import * as cmd from '../command/commands';
14
+ /**
15
+ * 관계 파생 FK 직접 삭제 시도 시의 안내 — 뷰 tooltip(어포던스)과 차단 시 토스트(피드백)가 공유한다.
16
+ * FK는 관계가 소유·관리하므로 컬럼을 직접 지우는 대신 연관관계선을 삭제해야 한다(Option B).
17
+ */
18
+ export declare const FK_MANAGED_DELETE_MESSAGE = "\uC678\uB798\uD0A4\uB294 \uC5F0\uAD00\uAD00\uACC4\uC5D0\uC11C \uD30C\uC0DD\uB429\uB2C8\uB2E4. \uC0AD\uC81C\uD558\uB824\uBA74 \uC5F0\uAD00\uAD00\uACC4\uC120\uC744 \uC120\uD0DD\uD574 \uC0AD\uC81C\uD558\uC138\uC694.";
11
19
  /** 엔티티 내부 속성을 가리키는 주소 원자 — 선택·컨텍스트·재정렬·연결 등 속성 단위 기능의 공통 참조점. */
12
20
  export type AttrRef = {
13
21
  entityId: ModelId;
@@ -24,6 +32,11 @@ export type ClipboardContent = {
24
32
  kind: 'entity';
25
33
  entity: Entity;
26
34
  geo: Geo;
35
+ layoutExtras?: cmd.EntityLayoutExtras;
36
+ } | {
37
+ kind: 'entities';
38
+ source: MergeDiagramSource;
39
+ selectedIds: ModelId[];
27
40
  } | {
28
41
  kind: 'attribute';
29
42
  attributes: Attribute[];
@@ -66,6 +79,10 @@ export interface EditorController {
66
79
  * targetRef 없는 이슈(model 레벨)는 인덱스에서 제외(인라인 매칭 대상 아님).
67
80
  */
68
81
  issuesByRef: ComputedRef<Map<ModelId, ValidationIssue[]>>;
82
+ /** 이 이슈에 결정적 quick-fix가 있는지(뷰가 '수정' 버튼 노출 여부 판단). 조회 모드에선 항상 false. */
83
+ hasQuickFix(issue: ValidationIssue): boolean;
84
+ /** 이슈의 quick-fix 적용(단일 command·undo 가능). 적용됐으면 true, 불가(없음·조회·잠금)면 false. */
85
+ applyQuickFix(issue: ValidationIssue): boolean;
69
86
  /**
70
87
  * CHK-DSN-3(모델링된 관계 없는 엔티티) 활성 토글 — 사용자가 검증 패널에서 켠다(기본 off).
71
88
  * 비형식 FK 오탐 가능성이 있어 옵트인. read-only에서도 토글 가능(표시 제어라 editable 무관).
@@ -76,6 +93,14 @@ export interface EditorController {
76
93
  dirty: Ref<boolean>;
77
94
  /** 모델 변경 신호 — 명령 적용마다 단조 증가. 외부 관찰자(감사 패널 등)가 재조회 트리거로 watch(디바운스 권장). */
78
95
  revision: Ref<number>;
96
+ /**
97
+ * 사용자에게 표시할 일시적 안내(차단된 동작 등) — 뷰가 구독해 토스트로 표시하고 자체 타이머로 dismiss.
98
+ * `id`는 같은 `text` 반복 시에도 재표시를 트리거하기 위한 단조 증가 값(동일 값 재대입은 watch 미발화이므로).
99
+ */
100
+ notice: Ref<{
101
+ text: string;
102
+ id: number;
103
+ } | null>;
79
104
  /**
80
105
  * 편집 가능 여부 — false(조회 모드)면 모든 모델 변경(추가·삭제·이동·편집·재정렬·연결·붙여넣기·
81
106
  * undo/redo·저장)이 차단된다. 선택·팬/줌·hover 강조·복사·export 같은 읽기성 동작은 유지.
@@ -272,6 +297,15 @@ export interface EditorController {
272
297
  predefinedCustomTypeCatalog: Ref<PredefinedCustomTypeCatalog>;
273
298
  /** 카탈로그 교체(호스트 props 갱신·dev 토글). reactive하므로 셀렉트가 즉시 반영된다. */
274
299
  setPredefinedCustomTypeCatalog(catalog: PredefinedCustomTypeCatalog): void;
300
+ /**
301
+ * 슈퍼클래스 카탈로그(호스트 주입) — `superClass`(예: BaseEntity) 상속 컬럼(감사필드)을 인덱스 대상
302
+ * picker/라벨에 파생 투영(projectInheritedColumns)하는 소스. embeddableCatalog와 동형 — dev는 프리셋,
303
+ * 완전 통합 시 호스트가 superClassCatalog API 값을 주입한다. 비어 있으면 상속 컬럼이 투영되지 않는다
304
+ * (인덱스는 로컬 컬럼만 참조 — 기능 게이트).
305
+ */
306
+ superClassCatalog: Ref<SuperClassCatalog>;
307
+ /** 카탈로그 교체(호스트 props 갱신·dev 토글). reactive하므로 인덱스 picker가 즉시 반영된다. */
308
+ setSuperClassCatalog(catalog: SuperClassCatalog): void;
275
309
  /**
276
310
  * 입력 가능 언어셋(호스트 주입) — 다국어 텍스트(설명·논리명·그룹명) 편집 UI가 노출할 언어 탭 목록·순서.
277
311
  * 비어 있으면 안 되며(입력 불가) 미주입 시 기본 4언어(ko/en/ja/zh). reactive하므로 .value 갱신 시 즉시 반영.
@@ -283,6 +317,16 @@ export interface EditorController {
283
317
  * languages[0]로 폴백. 미주입 시 'ko'. 라벨 우선 표시 등 확장 여지의 기준점.
284
318
  */
285
319
  userLanguage: Ref<LangCode>;
320
+ /**
321
+ * 툴 크롬(버튼·라벨·툴팁·검증 메시지) 언어(호스트 주입) — 콘텐츠 축 `userLanguage`와 **별개**.
322
+ * 미주입 시 'ko'(무회귀). reactive하므로 .value 갱신 시 UI 문자열이 즉시 재렌더.
323
+ */
324
+ uiLocale: Ref<UiLocale>;
325
+ /**
326
+ * UI 문자열 해석기 — `t('mode.edit')` 형태로 뷰가 소비. uiLocale.value를 읽으므로 템플릿에서
327
+ * 호출 시 로케일 변경에 반응한다. 파라미터는 `{name}` 형태로 치환.
328
+ */
329
+ t: Translator;
286
330
  /**
287
331
  * dataType 셀렉트 후보 셋(CHK-TYPE-1과 공유하는 단일 출처) — dataType 드롭다운(dbTypeSelectItems)이
288
332
  * 이 값을 후보로 쓴다. 검증 ctx.selectableDataTypes와 같은 ref라 어포던스(드롭다운)·검증이 어긋나지
@@ -350,13 +394,15 @@ export interface EditorController {
350
394
  */
351
395
  addEmbedAssociation(ownerEntityId: ModelId, embeddableEntityId: ModelId): ModelId | undefined;
352
396
  /**
353
- * 임베드 단일(`@Embedded`)↔컬렉션(`@ElementCollection`) 모드 토글. 컬렉션 판정 권위는 임베더블
354
- * end multiplicity(결정 3)이며, intent가 multiplicity 변경 + 표시 속성 평탄화 컬럼 재구성 +
355
- * collection 메타 set/clear를 **한 composite**로 묶어 모순 상태(컬렉션인데 평탄화 컬럼 잔존)를
356
- * 구조적으로 차단한다. COLLECTION→SINGLE 복귀 owner 슬롯 `@AttributeOverride`는 버린다(결정 3,
357
- * load-only 철학). assocId가 EMBED association이 아니거나 이미 해당 mode면 no-op.
397
+ * 임베드 카디널리티 설정 임베더블 end multiplicity를 지정 값으로 바꾼다. 컬렉션(`@ElementCollection`)
398
+ * 여부는 이 multiplicity에서 파생되는 값(권위=multiplicity, 결정 3): `*_MORE`(0..N / 1..N)면 컬렉션,
399
+ * 외(1·0..1)면 단일 `@Embedded`(0..1은 nullable). single↔collection **경계를 넘을 때만** 표시 속성
400
+ * 평탄화 컬럼 재구성 + collection 메타 set/clear를 **한 composite**로 묶어 모순 상태(컬렉션인데 평탄화
401
+ * 컬럼 잔존) 구조적으로 차단한다. 단일 내부 전이(1↔0..1)는 평탄화 불변이라 순수 multiplicity patch다.
402
+ * 컬렉션→단일 복귀 시 owner 슬롯 `@AttributeOverride`는 버린다(결정 3, load-only 철학).
403
+ * assocId가 EMBED association이 아니거나 이미 해당 multiplicity면 no-op.
358
404
  */
359
- setEmbedCollectionMode(assocId: ModelId, mode: 'SINGLE' | 'COLLECTION'): void;
405
+ setEmbedCardinality(assocId: ModelId, multiplicity: Multiplicity): void;
360
406
  removeAssociation(assocId: ModelId): void;
361
407
  /**
362
408
  * 식별 관계 토글 — 자식 FK의 identifier 플래그를 동기화하고, 식별자 집합 변동이
@@ -390,11 +436,34 @@ export interface EditorController {
390
436
  autoLayout(): void;
391
437
  /**
392
438
  * 복사/붙여넣기 클립보드. 엔티티 선택 → 엔티티 통째(새 modelId·offset),
393
- * 속성 선택 → 선택 집합(붙여넣기는 현재 선택 엔티티/부모에 append, 동명 충돌 시 _copy).
439
+ * 속성 선택 → 선택 집합(붙여넣기는 현재 선택 엔티티/부모에 append, 동명 충돌 시 _copy),
440
+ * 명시 엔티티 집합(다중 선택·그룹 멤버 확장) → 서브그래프(유도 관계·그룹 포함, mergeDiagram 재사용).
394
441
  */
395
442
  clipboard: Ref<ClipboardContent | null>;
396
- copy(): void;
397
- paste(): void;
443
+ /**
444
+ * @param entityIds 서브그래프로 복사할 엔티티 id 집합(뷰가 다중 선택·그룹 멤버 확장으로 판단해 전달).
445
+ * 비어 있거나 미전달이면 현재 선택(단일 엔티티/속성 집합) 복사. 단일 엔티티 복사는 뷰가 무인자로 호출.
446
+ */
447
+ copy(entityIds?: ModelId[]): void;
448
+ /** @returns 붙여넣은 엔티티 modelId 목록(뷰가 캔버스 다중선택 반영에 사용). 속성 붙여넣기·무동작 시 빈 배열. */
449
+ paste(): ModelId[];
450
+ /**
451
+ * 타 다이어그램(비즈모듈)의 선택 서브그래프를 현재 다이어그램에 병합 임포트(G1).
452
+ * 깊은 복사(새 id) + 경계 강등 + 물리명 충돌 suffix는 순수 `mergeDiagram`이 수행하고,
453
+ * 여기서는 결과를 기존 다이어그램 우측 빈 영역에 배치해 단일 composite로 실행한다(재전파 없음 — D6).
454
+ */
455
+ importEntities(source: MergeDiagramSource, selectedIds: ModelId[], opts?: {
456
+ includeRelated?: boolean;
457
+ /** 이름/물리명 충돌 접미사(mergeDiagram 위임, 기본 `_imported`). 클립보드 붙여넣기는 `_copy`. */
458
+ collisionSuffix?: string;
459
+ /**
460
+ * 배치 전략. 기본 `'append-right'`(기존 다이어그램 우측 빈 영역 — G1 import).
461
+ * `{ offset }` 이면 서브그래프를 그 오프셋만큼 통째 시프트(클립보드 붙여넣기 — 원본 근처).
462
+ */
463
+ placement?: 'append-right' | {
464
+ offset: Point;
465
+ };
466
+ }): ModelId[];
398
467
  }
399
468
  export declare const EDITOR: InjectionKey<EditorController>;
400
469
  export declare function emptyState(modelId?: string, diagramId?: string): EditorState;
@@ -402,8 +471,11 @@ export declare function createEditorController(initial?: EditorState, options?:
402
471
  embeddableCatalog?: EmbeddableCatalog;
403
472
  groupCodeCatalog?: GroupCodeCatalog;
404
473
  predefinedCustomTypeCatalog?: PredefinedCustomTypeCatalog;
474
+ superClassCatalog?: SuperClassCatalog;
405
475
  languages?: LangCode[];
406
476
  userLanguage?: LangCode;
477
+ /** 툴 크롬 언어(콘텐츠 축 `userLanguage`와 별개). 미주입 시 'ko'(무회귀). */
478
+ uiLocale?: UiLocale;
407
479
  /** `fromPersisted` 산출 meta(트랙 B 마커 + revSeed). schemaVersion·opWriteEnabled로 opMode·read-only 판정. */
408
480
  meta?: DiagramMeta;
409
481
  /**
@@ -424,6 +496,12 @@ export declare function createEditorController(initial?: EditorState, options?:
424
496
  * 미주입이어도 어댑터가 콘솔에 남긴다(정상 rev/layout 충돌은 이 경로가 아님 — throw만).
425
497
  */
426
498
  onOpError?: (err: unknown) => void;
499
+ /**
500
+ * 사용자 안내 통지(차단된 동작 등) — 주입 시 호스트가 자신의 토스트/알림 시스템으로 표시하고,
501
+ * lib 내장 토스트는 표시하지 않는다(호스트에서 서버 에러 토스트 등과 UX 일원화). 미주입(dev
502
+ * 하니스·미배선 호스트)이면 lib이 `notice` ref로 자체 토스트를 표시한다. `onOpError`와 동형 seam.
503
+ */
504
+ onNotice?: (message: string) => void;
427
505
  /**
428
506
  * 검증 컨텍스트 — 카탈로그/정책 의존 규칙을 깨우는 호스트 주입(미주입 시 해당 규칙 skip).
429
507
  * selectableDataTypes(CHK-TYPE-1)는 코어 상수(SELECTABLE_DATA_TYPES)라 dev/호스트가 즉시 주입 가능.