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

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.
package/dist/i18n/ko.d.ts CHANGED
@@ -132,8 +132,10 @@ export declare const ko: {
132
132
  readonly 'em.assoc.selfNoIdentifying': "셀프 연관은 식별 관계로 둘 수 없습니다 (비식별 FK 강제).";
133
133
  readonly 'em.assoc.embedNoIdentifying': "임베드(@Embedded/@ElementCollection)는 식별 관계로 둘 수 없습니다 (임베더블은 독립 식별자가 없음).";
134
134
  readonly 'em.assoc.multiplicity': "다중성";
135
+ readonly 'em.assoc.navFieldName': "연관 필드명(nav)";
135
136
  readonly 'em.assoc.cascadeAllNote': "ALL이 개별 cascade를 모두 포함합니다 (CHK-JPA-5).";
136
137
  readonly 'em.assoc.orphanRemovalNote': "반대편이 컬렉션(@ManyToOne/@ManyToMany)이라 orphanRemoval이 무효입니다 (CHK-JPA-14).";
138
+ readonly 'em.assoc.navRequiredNote': "이 방향에 nav 속성이 없어(navigable 꺼짐) cascade·fetch가 적용되지 않습니다.";
137
139
  readonly 'em.assoc.orderByPlaceholder': "예: name ASC";
138
140
  readonly 'em.assoc.jpaDetails': "JPA 상세";
139
141
  readonly 'em.embed.legend': "임베드";
@@ -167,6 +169,7 @@ export declare const ko: {
167
169
  readonly 'em.attr.addEmbeddable': "임베더블 추가";
168
170
  readonly 'em.attr.nameless': "(이름 없음)";
169
171
  readonly 'em.attr.selectHint': "위 목록에서 속성을 선택하면 편집 폼이 표시됩니다.";
172
+ readonly 'em.attr.inverseNavHint': "역방향 연관관계 필드 — 물리 컬럼이 없습니다(대상 엔티티 참조).";
170
173
  readonly 'em.attr.namePlaceholder': "이름";
171
174
  readonly 'em.attr.typePlaceholder': "타입";
172
175
  readonly 'em.attr.customTypePlaceholder': "커스텀 타입명";
@@ -316,6 +319,13 @@ export declare const ko: {
316
319
  readonly 'em.history.doRestore': "복원";
317
320
  readonly 'em.history.cancel': "취소";
318
321
  readonly 'em.history.restoreToHere': "이 시점으로 복원";
322
+ readonly 'em.history.diff.compare': "현재와 비교";
323
+ readonly 'em.history.diff.banner': "#{seq} ↔ 현재";
324
+ readonly 'em.history.diff.exit': "비교 해제";
325
+ readonly 'em.history.diff.count': "누적 변경 {n}건";
326
+ readonly 'em.history.diff.empty': "이 구간의 누적 변경이 없습니다.";
327
+ readonly 'em.history.diff.restorePreview': "되돌아갈 변경 {n}건";
328
+ readonly 'em.history.diff.restorePreviewNone': "되돌아갈 변경이 없습니다.";
319
329
  readonly 'em.check.catName': "이름";
320
330
  readonly 'em.check.catJpa': "JPA";
321
331
  readonly 'em.check.catType': "타입";
@@ -346,6 +356,7 @@ export declare const ko: {
346
356
  readonly 'em.check.jpa15': "식별자(@Id) 속성은 자연키(@NaturalId)일 수 없습니다 — 자연키는 PK와 별개의 비즈니스 키입니다: \"{name}\"";
347
357
  readonly 'em.check.jpa16': "자연키(@NaturalId) 속성은 transient(@Transient)일 수 없습니다: \"{name}\"";
348
358
  readonly 'em.check.jpa17': "자연키(@NaturalId) 속성은 not null이 권장됩니다(비즈니스 키는 non-null이 원칙): \"{name}\"";
359
+ readonly 'em.check.jpa18': "cascade가 관계 양쪽(부모·자식)에 모두 설정되어 양방향 전파됩니다 — 의도치 않은 연쇄 저장/삭제·전파 사이클 위험. 보통 cascade는 한쪽에만 둡니다";
349
360
  readonly 'em.check.type1': "타겟 DB가 지원하지 않는 컬럼 타입입니다: \"{dataType}\"";
350
361
  readonly 'em.check.type2': "{dataType} 타입에 length가 지정되지 않았습니다";
351
362
  readonly 'em.check.type3': "공유 대상 컬럼의 타입({targetType})이 {metaName} 정의({metaType})와 다릅니다";
package/dist/index.d.ts CHANGED
@@ -15,11 +15,14 @@ export * from './core/sharedColumn';
15
15
  export { JAVA_TYPES, SELECTABLE_JAVA_TYPES, javaTypeLabel, CUSTOM_TYPE_VALUE, GROUP_CODE_ENUM_VALUE, DEFAULT_JAVA_TYPE, type JavaTypeDef, } from './core/javaTypes';
16
16
  export { scaffoldEntityJava, type ScaffoldOptions, type ScaffoldedEntity, } from './core/scaffoldJava';
17
17
  export { migrateLegacyMoney } from './core/migrateLegacyMoney';
18
+ export { multiplicityLabel } from './core/associationNav';
19
+ export { stereotypeLabel } from './core/stereotype';
18
20
  export { mergeDiagram, type MergeDiagramSource, type MergeDiagramOptions, type MergeDiagramResult, } from './core/mergeDiagram';
19
21
  export { synthesizeRestoreOps, deepEqual as restoreDeepEqual, type DiagramSnapshotState } from './core/synthesizeRestoreOps';
20
22
  export { projectFieldAudit, type FieldAuditRecord, type FieldAuditTarget, type FieldAuditEntry } from './core/projectFieldAudit';
21
23
  export { projectEntityAudit, type EntityAuditEntry, type EntityAuditSubject, type EntityAuditSubjectKind } from './core/projectEntityAudit';
22
24
  export { projectActionLog, type ActionGroup, type SubjectAction, type ActionSubject, type ActionSubjectKind, type ActionFieldChange } from './core/projectActionLog';
25
+ export { projectSeqDiff, buildDiffMarks, type SeqDiff, type SeqDiffEntry, type DiffMark } from './core/projectSeqDiff';
23
26
  export { projectInheritedColumns, makeInheritedColumnRef, isInheritedColumnRef, parseInheritedColumnRef, INHERITED_REF_PREFIX, type InheritedColumn, } from './core/inheritedColumns';
24
27
  export { newId } from './core/id';
25
28
  export * from './command/types';
@@ -1,6 +1,9 @@
1
+ import { DiffMark } from '../core/projectSeqDiff';
1
2
  import { EditorController } from '../editor/controller';
3
+ import { ModelId } from '../core/types';
2
4
  type __VLS_Props = {
3
5
  controller: EditorController;
6
+ diffMarks?: Map<ModelId, DiffMark> | null;
4
7
  };
5
8
  declare function exportSvg(): Promise<void>;
6
9
  declare function exportPng(): Promise<void>;
@@ -1,3 +1,4 @@
1
+ import { DiffMark } from '../core/projectSeqDiff';
1
2
  import { EditorController } from '../editor/controller';
2
3
  type __VLS_Props = {
3
4
  controller: EditorController;
@@ -5,7 +6,9 @@ type __VLS_Props = {
5
6
  };
6
7
  declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
7
8
  close: () => any;
9
+ diffChange: (marks: Map<string, DiffMark> | null) => any;
8
10
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
9
11
  onClose?: (() => any) | undefined;
12
+ onDiffChange?: ((marks: Map<string, DiffMark> | null) => any) | undefined;
10
13
  }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
14
  export default _default;
@@ -0,0 +1,14 @@
1
+ import { InjectionKey, Ref } from 'vue';
2
+ import { ModelId } from '../core/types';
3
+ import { DiffMark } from '../core/projectSeqDiff';
4
+ /**
5
+ * 이력 diff 비교 모드의 캔버스 오버레이 주입 계약(RELATION_HIGHLIGHT 동형 — 일시적 시각 강조,
6
+ * 모델 무관). 셸(EntityModeler/DevApp)이 HistoryPanel의 비교 diff 마크를 소유하고 DiagramCanvas가
7
+ * prop으로 받아 provide, EntityNode가 구독한다(D4-(a) 뷰 소유 — core/controller 무변경).
8
+ *
9
+ * null = 비교 모드 아님(오버레이 없음). removed 대상은 캔버스에 노드가 없어 맵에 없다(D3 패널 전용).
10
+ */
11
+ export interface DiffOverlay {
12
+ marks: Ref<Map<ModelId, DiffMark> | null | undefined>;
13
+ }
14
+ export declare const DIFF_OVERLAY: InjectionKey<DiffOverlay>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@g1cloud/entity-modeler-next",
3
3
  "private": false,
4
- "version": "5.0.0-beta.1",
4
+ "version": "5.0.0-beta.11",
5
5
  "description": "Vue 3 visual entity-modeling / class-diagram editor",
6
6
  "type": "module",
7
7
  "files": [