@g1cloud/entity-modeler-next 5.0.0-alpha.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.
- package/LICENSE +6 -0
- package/README.md +42 -0
- package/dist/adapter/diagramAdapter.d.ts +44 -0
- package/dist/adapter/persisted.d.ts +245 -0
- package/dist/agent/buildAgentBatch.d.ts +16 -0
- package/dist/agent/resolver.d.ts +54 -0
- package/dist/agent/schema.d.ts +9 -0
- package/dist/agent/symbolicOp.d.ts +109 -0
- package/dist/command/commands.d.ts +108 -0
- package/dist/command/op.d.ts +80 -0
- package/dist/command/opSync.d.ts +89 -0
- package/dist/command/stack.d.ts +48 -0
- package/dist/command/types.d.ts +29 -0
- package/dist/core/autolayout.d.ts +12 -0
- package/dist/core/dbTypes.d.ts +45 -0
- package/dist/core/id.d.ts +2 -0
- package/dist/core/javaTypes.d.ts +52 -0
- package/dist/core/propagation.d.ts +49 -0
- package/dist/core/relationMarker.d.ts +44 -0
- package/dist/core/resolve.d.ts +63 -0
- package/dist/core/routing.d.ts +58 -0
- package/dist/core/sharedColumn.d.ts +19 -0
- package/dist/core/sqlReservedWords.d.ts +25 -0
- package/dist/core/svg.d.ts +98 -0
- package/dist/core/text.d.ts +8 -0
- package/dist/core/types.d.ts +400 -0
- package/dist/core/validation.d.ts +53 -0
- package/dist/editor/controller.d.ts +371 -0
- package/dist/entity-modeler-next.css +1 -0
- package/dist/entity-modeler.js +19943 -0
- package/dist/entity-modeler.umd.cjs +41 -0
- package/dist/index.d.ts +32 -0
- package/dist/view/AssociationEdge.vue.d.ts +16 -0
- package/dist/view/DiagramCanvas.vue.d.ts +9 -0
- package/dist/view/DiagramExplorer.vue.d.ts +11 -0
- package/dist/view/EditModeToggle.vue.d.ts +10 -0
- package/dist/view/EditorToolbar.vue.d.ts +10 -0
- package/dist/view/EmContextMenu.vue.d.ts +26 -0
- package/dist/view/EmIcon.vue.d.ts +12 -0
- package/dist/view/EntityAttributesWide.vue.d.ts +7 -0
- package/dist/view/EntityBasicsSection.vue.d.ts +7 -0
- package/dist/view/EntityColumnsSection.vue.d.ts +7 -0
- package/dist/view/EntityDetailModal.vue.d.ts +7 -0
- package/dist/view/EntityIndexSection.vue.d.ts +7 -0
- package/dist/view/EntityIndexesWide.vue.d.ts +7 -0
- package/dist/view/EntityModeler.vue.d.ts +6 -0
- package/dist/view/EntityNode.vue.d.ts +20 -0
- package/dist/view/EntityOperationsSection.vue.d.ts +7 -0
- package/dist/view/EntityOperationsWide.vue.d.ts +7 -0
- package/dist/view/EntityTextPreview.vue.d.ts +5 -0
- package/dist/view/GroupCodeCombobox.vue.d.ts +11 -0
- package/dist/view/GroupNode.vue.d.ts +11 -0
- package/dist/view/InlineIssueBadge.vue.d.ts +8 -0
- package/dist/view/MultiLangTextField.vue.d.ts +24 -0
- package/dist/view/NoteConnectionEdge.vue.d.ts +12 -0
- package/dist/view/NoteNode.vue.d.ts +11 -0
- package/dist/view/OperationSourceEditor.vue.d.ts +7 -0
- package/dist/view/PropertyPanel.vue.d.ts +6 -0
- package/dist/view/ValidationPanel.vue.d.ts +6 -0
- package/dist/view/diagramGeometry.d.ts +9 -0
- package/dist/view/exportSvg.d.ts +7 -0
- package/dist/view/groupCodeFilter.d.ts +8 -0
- package/dist/view/groupHover.d.ts +10 -0
- package/dist/view/openEntityDetail.d.ts +5 -0
- package/dist/view/relationHighlight.d.ts +38 -0
- package/dist/view/swatches.d.ts +37 -0
- package/dist/view/useFloatingRoute.d.ts +28 -0
- package/dist/view/validationDisplay.d.ts +10 -0
- package/dist/view/waypointController.d.ts +14 -0
- package/package.json +61 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export * from './core/types';
|
|
2
|
+
export * from './core/resolve';
|
|
3
|
+
export * from './core/routing';
|
|
4
|
+
export * from './core/autolayout';
|
|
5
|
+
export * from './core/text';
|
|
6
|
+
export * from './core/svg';
|
|
7
|
+
export * from './core/validation';
|
|
8
|
+
export * from './core/sharedColumn';
|
|
9
|
+
export { newId } from './core/id';
|
|
10
|
+
export * from './command/types';
|
|
11
|
+
export { CommandStack, type CommandDirection, type CommandListener } from './command/stack';
|
|
12
|
+
export * as commands from './command/commands';
|
|
13
|
+
export * from './command/op';
|
|
14
|
+
export { OpSyncAdapter, RevCache, type OpSyncOptions, type OpSyncTransport } from './command/opSync';
|
|
15
|
+
export * from './agent/symbolicOp';
|
|
16
|
+
export * from './agent/resolver';
|
|
17
|
+
export * from './agent/schema';
|
|
18
|
+
export * from './agent/buildAgentBatch';
|
|
19
|
+
export * from './adapter/diagramAdapter';
|
|
20
|
+
export type * from './adapter/persisted';
|
|
21
|
+
export { default as EntityNode } from './view/EntityNode.vue';
|
|
22
|
+
export { default as GroupNode } from './view/GroupNode.vue';
|
|
23
|
+
export { default as NoteNode } from './view/NoteNode.vue';
|
|
24
|
+
export { default as AssociationEdge } from './view/AssociationEdge.vue';
|
|
25
|
+
export { default as DiagramCanvas } from './view/DiagramCanvas.vue';
|
|
26
|
+
export { default as DiagramExplorer } from './view/DiagramExplorer.vue';
|
|
27
|
+
export { default as EditorToolbar } from './view/EditorToolbar.vue';
|
|
28
|
+
export { default as EditModeToggle } from './view/EditModeToggle.vue';
|
|
29
|
+
export { default as PropertyPanel } from './view/PropertyPanel.vue';
|
|
30
|
+
export { default as EntityModeler } from './view/EntityModeler.vue';
|
|
31
|
+
export { buildDiagramSvg, exportDiagramSvg } from './view/exportSvg';
|
|
32
|
+
export { createEditorController, emptyState, EDITOR, type EditorController, } from './editor/controller';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GraphNode } from '@vue-flow/core';
|
|
2
|
+
import { Association, ModelId } from '../core/types';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
id: string;
|
|
5
|
+
sourceY: number;
|
|
6
|
+
targetY: number;
|
|
7
|
+
sourceNode: GraphNode;
|
|
8
|
+
targetNode: GraphNode;
|
|
9
|
+
data: {
|
|
10
|
+
association: Association;
|
|
11
|
+
sourceColumnRef?: ModelId;
|
|
12
|
+
targetColumnRef?: ModelId;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
};
|
|
5
|
+
declare function exportSvg(): Promise<void>;
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
7
|
+
exportSvg: typeof exportSvg;
|
|
8
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
};
|
|
5
|
+
declare function toggleAll(): void;
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
7
|
+
toggleAll: typeof toggleAll;
|
|
8
|
+
allExpanded: import('vue').ComputedRef<boolean>;
|
|
9
|
+
hasExpandable: import('vue').ComputedRef<boolean>;
|
|
10
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
editable: boolean;
|
|
3
|
+
opMode: boolean;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
6
|
+
toggle: () => any;
|
|
7
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onToggle?: (() => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
6
|
+
exportSvg: () => any;
|
|
7
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onExportSvg?: (() => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SwatchToken } from './swatches';
|
|
2
|
+
/**
|
|
3
|
+
* 캔버스 우클릭 메뉴 항목 모델 — 호스트(bluesea) BSContextMenu 의존을 끊고 다이어그램 토큰(--em-*)
|
|
4
|
+
* 으로 직접 그리기 위한 자체 스키마. 색상은 중첩 서브메뉴 대신 swatch 칩 행으로 평탄화한다
|
|
5
|
+
* (아이콘 폰트 의존·chevron 깨짐 제거).
|
|
6
|
+
*/
|
|
7
|
+
export type EmMenuItem = {
|
|
8
|
+
type: 'separator';
|
|
9
|
+
} | {
|
|
10
|
+
type?: 'item';
|
|
11
|
+
caption: string;
|
|
12
|
+
icon?: string;
|
|
13
|
+
danger?: boolean;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
handler: () => void;
|
|
16
|
+
} | {
|
|
17
|
+
type: 'swatches';
|
|
18
|
+
caption: string;
|
|
19
|
+
current: SwatchToken | null;
|
|
20
|
+
onPick: (token: SwatchToken | null) => void;
|
|
21
|
+
};
|
|
22
|
+
declare const _default: import('vue').DefineComponent<{}, {
|
|
23
|
+
open: (event: MouseEvent, menuItems: EmMenuItem[]) => Promise<void>;
|
|
24
|
+
close: () => void;
|
|
25
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
26
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 라인 아이콘(Lucide 계열, MIT) — 24x24 viewBox, currentColor stroke.
|
|
3
|
+
* 외부 의존성 없이 인라인 SVG로 모던/심플한 단색 아이콘을 제공.
|
|
4
|
+
* 색/크기는 부모의 color·font-size 또는 size prop으로 제어.
|
|
5
|
+
* 굵기는 부모에서 svg의 stroke-width를 CSS로 덮어 조정할 수 있다(예: 키 마커).
|
|
6
|
+
*/
|
|
7
|
+
type __VLS_Props = {
|
|
8
|
+
name: string;
|
|
9
|
+
size?: number;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DisplayMode, Entity, Style } from '../core/types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
id: string;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
data: {
|
|
6
|
+
entity: Entity;
|
|
7
|
+
displayMode?: DisplayMode;
|
|
8
|
+
collapsed?: boolean;
|
|
9
|
+
groupRef?: string;
|
|
10
|
+
size?: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
style?: Style;
|
|
15
|
+
attributeStyles?: Record<string, Style>;
|
|
16
|
+
operationStyles?: Record<string, Style>;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
entityId: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
text: string;
|
|
3
|
+
};
|
|
4
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { GroupCodeCatalogEntry } from '../core/types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
modelValue: string | undefined;
|
|
4
|
+
items: GroupCodeCatalogEntry[];
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
7
|
+
"update:modelValue": (args_0: string | undefined) => any;
|
|
8
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
"onUpdate:modelValue"?: ((args_0: string | undefined) => any) | undefined;
|
|
10
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LogicalGroup, Style } from '../core/types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
id?: string;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
data: {
|
|
6
|
+
group: LogicalGroup;
|
|
7
|
+
style?: Style;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
import { ModelId } from '../core/types';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
controller: EditorController;
|
|
5
|
+
refId: ModelId | undefined;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { LangCode, MultiLangText } from '../core/types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
modelValue?: MultiLangText;
|
|
4
|
+
/** input name 접두 — 실제 name은 `${name}-${lang}`(언어별 구분). 폼 식별용 필수. */
|
|
5
|
+
name: string;
|
|
6
|
+
/** 입력 가능 언어셋(호스트 주입 controller.languages). 탭 목록·순서. */
|
|
7
|
+
languages?: LangCode[];
|
|
8
|
+
/** 초기 활성 탭(호스트 주입 controller.userLanguage). languages에 없으면 languages[0] 폴백. */
|
|
9
|
+
defaultLang?: LangCode;
|
|
10
|
+
/** true면 textarea(여러 줄, 설명용), false면 단일 라인 input(논리명/그룹명용 확장 여지). */
|
|
11
|
+
multiline?: boolean;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
/** textarea 높이(multiline일 때만). */
|
|
14
|
+
height?: string;
|
|
15
|
+
};
|
|
16
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
17
|
+
"update:modelValue": (value: Partial<Record<"ko" | "en" | "ja" | "zh", string>>) => any;
|
|
18
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
19
|
+
"onUpdate:modelValue"?: ((value: Partial<Record<"ko" | "en" | "ja" | "zh", string>>) => any) | undefined;
|
|
20
|
+
}>, {
|
|
21
|
+
languages: LangCode[];
|
|
22
|
+
multiline: boolean;
|
|
23
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GraphNode } from '@vue-flow/core';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
id: string;
|
|
4
|
+
sourceNode: GraphNode;
|
|
5
|
+
targetNode: GraphNode;
|
|
6
|
+
data: {
|
|
7
|
+
noteRef: string;
|
|
8
|
+
targetRef: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Note } from '../core/types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
id: string;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
data: {
|
|
6
|
+
note: Note;
|
|
7
|
+
groupRef?: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
operationName: string;
|
|
3
|
+
sourceCode: string;
|
|
4
|
+
onSave: (code: string) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: EditorController;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useVueFlow } from '@vue-flow/core';
|
|
2
|
+
import { DiagramGeometry } from '../core/svg';
|
|
3
|
+
type VueFlowStore = ReturnType<typeof useVueFlow>;
|
|
4
|
+
/**
|
|
5
|
+
* 현재 렌더된 다이어그램을 측정해 SVG 합성용 기하 스냅샷을 만든다.
|
|
6
|
+
* 호출 시점에 캔버스가 마운트·렌더되어 있어야 한다(export = UI 액션).
|
|
7
|
+
*/
|
|
8
|
+
export declare function captureDiagramGeometry(vf: VueFlowStore): DiagramGeometry;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { useVueFlow } from '@vue-flow/core';
|
|
2
|
+
type VueFlowStore = ReturnType<typeof useVueFlow>;
|
|
3
|
+
/** 현재 캔버스를 측정·합성해 SVG 문자열을 반환 (다운로드 없이 문자열만 필요할 때). */
|
|
4
|
+
export declare function buildDiagramSvg(vf: VueFlowStore): string;
|
|
5
|
+
/** 현재 캔버스를 벡터 SVG로 내보내 브라우저 다운로드를 트리거한다. */
|
|
6
|
+
export declare function exportDiagramSvg(vf: VueFlowStore, filename?: string): void;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GroupCodeCatalogEntry } from '../core/types';
|
|
2
|
+
/** 표시 라벨 — "코드 (명칭)" (명칭은 ko→en→… 폴백, 없으면 코드만). code(2단계) BSSelect codeLabelOf와 동형 규칙. */
|
|
3
|
+
export declare function groupCodeLabel(e: GroupCodeCatalogEntry): string;
|
|
4
|
+
/**
|
|
5
|
+
* key(groupCode) + 모든 다국어 라벨 부분일치(대소문자 무시) 필터. 빈/공백 쿼리는 전체 통과.
|
|
6
|
+
* 선언 순서(= 카탈로그 순서)를 유지한다.
|
|
7
|
+
*/
|
|
8
|
+
export declare function filterGroupCodes(items: GroupCodeCatalogEntry[], query: string): GroupCodeCatalogEntry[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { InjectionKey, Ref } from 'vue';
|
|
2
|
+
/** 드래그 중 편입 대상으로 강조할 그룹 id (없으면 null) — DiagramCanvas가 제공, GroupNode가 구독 */
|
|
3
|
+
export declare const GROUP_HOVER: InjectionKey<Ref<string | null>>;
|
|
4
|
+
/** 그룹 드래그 라이브 상태 — 내부 관계 waypoint를 실시간으로 같은 delta만큼 미리보기 이동 */
|
|
5
|
+
export interface GroupDrag {
|
|
6
|
+
groupId: string;
|
|
7
|
+
dx: number;
|
|
8
|
+
dy: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const GROUP_DRAG: InjectionKey<Ref<GroupDrag | null>>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { useModal } from '@g1cloud/open-bluesea-core';
|
|
2
|
+
import { EditorController } from '../editor/controller';
|
|
3
|
+
type ModalHandle = ReturnType<typeof useModal>;
|
|
4
|
+
export declare function openEntityDetail(modal: ModalHandle, controller: EditorController, entityId: string): void;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ComputedRef, InjectionKey, Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* 마우스 오버한 대상(엔티티 또는 그룹)과 그에 연관된 엔티티/관계를 강조하기 위한 주입 계약.
|
|
4
|
+
* DiagramCanvas가 hover 소스 + 파생 집합을 계산해 제공하고, EntityNode/GroupNode/AssociationEdge가 구독한다.
|
|
5
|
+
* (그룹 편입 드래그 강조 GROUP_HOVER와 별개 — 이쪽은 관계 위상(topology) 기반 정적 강조)
|
|
6
|
+
*/
|
|
7
|
+
export type HighlightSource = {
|
|
8
|
+
kind: 'entity';
|
|
9
|
+
id: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'group';
|
|
12
|
+
id: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'note';
|
|
15
|
+
id: string;
|
|
16
|
+
};
|
|
17
|
+
export interface RelationHighlight {
|
|
18
|
+
source: Ref<HighlightSource | null>;
|
|
19
|
+
/** hover가 활성인지 (dim 판단 기준) */
|
|
20
|
+
active: ComputedRef<boolean>;
|
|
21
|
+
/** 강하게 강조할 엔티티(포커스 원점) — 엔티티 hover: 그 엔티티 / 그룹 hover: 그룹 멤버들 (노트 hover면 비어 있음) */
|
|
22
|
+
primaryEntityIds: ComputedRef<Set<string>>;
|
|
23
|
+
/** primary + 관계로 직접 연결된 엔티티 (이 집합 밖이면 dim). 노트 hover면 그 노트가 연결한 엔티티들 */
|
|
24
|
+
relatedEntityIds: ComputedRef<Set<string>>;
|
|
25
|
+
/** 강조할 관계(엣지) id 집합 */
|
|
26
|
+
relatedEdgeIds: ComputedRef<Set<string>>;
|
|
27
|
+
/**
|
|
28
|
+
* 강조할 노트 id 집합 (이 집합 밖 노트는 dim).
|
|
29
|
+
* 엔티티/그룹 hover면 related 엔티티에 연결된 노트들, 노트 hover면 그 노트 자신.
|
|
30
|
+
*/
|
|
31
|
+
relatedNoteIds: ComputedRef<Set<string>>;
|
|
32
|
+
/** 그룹 hover일 때 해당 그룹 id (그룹 박스 강조/그 외 그룹 dim 판단용, 엔티티 hover면 null) */
|
|
33
|
+
hoverGroupId: ComputedRef<string | null>;
|
|
34
|
+
setEntityHover(entityId: string | null): void;
|
|
35
|
+
setGroupHover(groupId: string | null): void;
|
|
36
|
+
setNoteHover(noteId: string | null): void;
|
|
37
|
+
}
|
|
38
|
+
export declare const RELATION_HIGHLIGHT: InjectionKey<RelationHighlight>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Style } from '../core/types';
|
|
2
|
+
export type SwatchToken = 'red' | 'amber' | 'green' | 'teal' | 'blue' | 'indigo' | 'violet' | 'pink';
|
|
3
|
+
/** 토큰의 컨텍스트별 렌더값 (CSS 변수 참조 — 테마는 [data-theme]로 스왑) */
|
|
4
|
+
export interface SwatchRender {
|
|
5
|
+
/** 엔티티 헤더 바 배경 */
|
|
6
|
+
bar: string;
|
|
7
|
+
/** 헤더 바 위 텍스트 */
|
|
8
|
+
barOn: string;
|
|
9
|
+
/** 속성 글자색 */
|
|
10
|
+
text: string;
|
|
11
|
+
}
|
|
12
|
+
/** 선택 가능한 8색 (중립 hue — 의미는 사용자가 부여) */
|
|
13
|
+
export declare const SWATCH_TOKENS: SwatchToken[];
|
|
14
|
+
/**
|
|
15
|
+
* 임의 hex 색상을 가장 가까운 swatch 토큰으로 근사한다(hue 최단 원형거리).
|
|
16
|
+
* 무채색(채도 < MIN_SATURATION)·파싱 실패는 null → 호출부가 기본 색 유지.
|
|
17
|
+
* 레거시 임의 색상 표시 폴백 전용(데이터 변형 없음).
|
|
18
|
+
*/
|
|
19
|
+
export declare function approximateSwatchToken(hex: unknown): SwatchToken | null;
|
|
20
|
+
/**
|
|
21
|
+
* Style 에서 swatch 토큰을 안전하게 읽는다.
|
|
22
|
+
* 토큰이 없으면 레거시 임의 hex를 가장 가까운 토큰으로 근사(표시 폴백):
|
|
23
|
+
* 엔티티 헤더는 `background-color`, 속성 강조는 글자색 `font-color`(드물게 `color`)에 저장되므로
|
|
24
|
+
* 그 순서로 첫 유효 hex를 근사한다. 미지정·무채색이면 null.
|
|
25
|
+
*/
|
|
26
|
+
export declare function swatchTokenOf(style: Style | undefined): SwatchToken | null;
|
|
27
|
+
/** 토큰 → 렌더값(CSS 변수 참조). 미지정/미지 토큰이면 null → 호출부가 기본 색 유지. */
|
|
28
|
+
export declare function resolveSwatch(token: SwatchToken | null): SwatchRender | null;
|
|
29
|
+
/**
|
|
30
|
+
* 미니맵 노드 fill 색 — 지정 swatch가 있으면 그 색(그룹은 반투명), 없으면 null → 호출부가 기본색 유지.
|
|
31
|
+
* @param soft 그룹처럼 반투명 칠이 필요하면 true.
|
|
32
|
+
*/
|
|
33
|
+
export declare function swatchMinimapFill(token: SwatchToken | null, soft?: boolean): string | null;
|
|
34
|
+
/** 피커 라벨 */
|
|
35
|
+
export declare function swatchLabel(token: SwatchToken): string;
|
|
36
|
+
/** 피커에 칠할 대표색 (바 색 — 피커도 [data-theme]에 따라 전환) */
|
|
37
|
+
export declare function swatchSwatchColor(token: SwatchToken): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { GraphNode } from '@vue-flow/core';
|
|
3
|
+
import { Side } from '../core/routing';
|
|
4
|
+
import { Point } from '../core/types';
|
|
5
|
+
/**
|
|
6
|
+
* Floating 연결점 계산 — edge 끝점을 노드 경계의 동적 지점에 부착한다.
|
|
7
|
+
* (AssociationEdge / NoteConnectionEdge 공유. 노드를 옮기면 끝점이 경계를 따라 이동.)
|
|
8
|
+
*
|
|
9
|
+
* rowY가 주어진 끝(컬럼 앵커)은 "행 유지 + 측면 동적"으로, 없으면 완전 floating으로 계산한다.
|
|
10
|
+
* 입력은 getter 함수로 받아 Vue Flow 노드 좌표/크기 변화에 반응한다.
|
|
11
|
+
*/
|
|
12
|
+
export interface FloatingRouteInput {
|
|
13
|
+
sourceNode: () => GraphNode | undefined;
|
|
14
|
+
targetNode: () => GraphNode | undefined;
|
|
15
|
+
waypoints: () => Point[];
|
|
16
|
+
/** 컬럼 앵커가 있는 끝의 행 y (절대좌표). 없으면 완전 floating */
|
|
17
|
+
sourceRowY?: () => number | undefined;
|
|
18
|
+
targetRowY?: () => number | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface FloatingRoute {
|
|
21
|
+
source: ComputedRef<Point>;
|
|
22
|
+
target: ComputedRef<Point>;
|
|
23
|
+
sourceSide: ComputedRef<Side>;
|
|
24
|
+
targetSide: ComputedRef<Side>;
|
|
25
|
+
/** source/target가 같은 노드인 셀프 연관 — 끝점이 같은 변(우측)에 놓이고 루프 path로 그린다 */
|
|
26
|
+
isSelf: ComputedRef<boolean>;
|
|
27
|
+
}
|
|
28
|
+
export declare function useFloatingRoute(input: FloatingRouteInput): FloatingRoute;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ModelId } from '../core/types';
|
|
2
|
+
import { ValidationIssue } from '../core/validation';
|
|
3
|
+
/** ruleId('CHK-NAME-3') → 분류 라벨('이름'). 형식 불명 입력은 원문 폴백. */
|
|
4
|
+
export declare function issueCategoryLabel(ruleId: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* 이슈가 가리키는 소속 엔티티의 modelId — 패널이 엔티티명 칩을 붙일 대상. targetKind가 entity면
|
|
7
|
+
* targetRef가 곧 엔티티이고, attribute/column/index면 contextRef가 소속 엔티티다(엔진이 그 용도로
|
|
8
|
+
* 채운다). association/model은 단일 소속 엔티티가 없어 undefined(칩 없음 — 메시지가 자체 맥락 보유).
|
|
9
|
+
*/
|
|
10
|
+
export declare function issueEntityRef(issue: ValidationIssue): ModelId | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { InjectionKey } from 'vue';
|
|
2
|
+
import { Point } from '../core/types';
|
|
3
|
+
/**
|
|
4
|
+
* waypoint 편집 상태를 Vue Flow 바깥(캔버스 레벨)에서 관리하기 위한 컨트롤러.
|
|
5
|
+
* 엣지 컴포넌트는 이 컨트롤러를 통해서만 레이아웃 waypoint를 읽고 쓴다
|
|
6
|
+
* → 레이아웃 데이터가 엔진 내부 상태와 분리되어 엔진 교체에도 견딘다.
|
|
7
|
+
*/
|
|
8
|
+
export interface WaypointController {
|
|
9
|
+
points(edgeId: string): Point[];
|
|
10
|
+
movePoint(edgeId: string, index: number, p: Point): void;
|
|
11
|
+
insertPoint(edgeId: string, index: number, p: Point): void;
|
|
12
|
+
removePoint(edgeId: string, index: number): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const WAYPOINT_CONTROLLER: InjectionKey<WaypointController>;
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@g1cloud/entity-modeler-next",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "5.0.0-alpha.1",
|
|
5
|
+
"description": "Vue 3 visual entity-modeling / class-diagram editor",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">= 24.10.0"
|
|
12
|
+
},
|
|
13
|
+
"main": "./dist/entity-modeler.umd.cjs",
|
|
14
|
+
"module": "./dist/entity-modeler.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/entity-modeler.js",
|
|
20
|
+
"require": "./dist/entity-modeler.umd.cjs"
|
|
21
|
+
},
|
|
22
|
+
"./style.css": "./dist/entity-modeler-next.css"
|
|
23
|
+
},
|
|
24
|
+
"author": "l.kei@g1project.net",
|
|
25
|
+
"license": "LicenseRef-LICENSE",
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"@g1cloud/open-bluesea-core": "1.0.0-alpha.9",
|
|
28
|
+
"vue": "^3.5.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@vue-flow/background": "^1.3.2",
|
|
32
|
+
"@vue-flow/controls": "^1.1.2",
|
|
33
|
+
"@vue-flow/core": "^1.42.1",
|
|
34
|
+
"@vue-flow/minimap": "^1.5.2",
|
|
35
|
+
"pinia": "^2.2.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@g1cloud/open-bluesea-core": "1.0.0-alpha.9",
|
|
39
|
+
"@tailwindcss/vite": "^4.1.0",
|
|
40
|
+
"@types/node": "^25.9.2",
|
|
41
|
+
"@vitejs/plugin-vue": "^5.2.0",
|
|
42
|
+
"jsdom": "^25.0.0",
|
|
43
|
+
"playwright": "^1.60.0",
|
|
44
|
+
"tailwindcss": "^4.1.0",
|
|
45
|
+
"typescript": "^5.6.0",
|
|
46
|
+
"vite": "^6.0.0",
|
|
47
|
+
"vite-plugin-dts": "^5.0.3",
|
|
48
|
+
"vitest": "^2.1.0",
|
|
49
|
+
"vue": "^3.5.0",
|
|
50
|
+
"vue-tsc": "^2.1.0"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"dev": "vite",
|
|
54
|
+
"build": "vue-tsc --noEmit && vite build",
|
|
55
|
+
"preview": "vite preview",
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"test:watch": "vitest",
|
|
58
|
+
"verify:m0": "node scripts/verify-m0.mjs",
|
|
59
|
+
"typecheck": "vue-tsc --noEmit"
|
|
60
|
+
}
|
|
61
|
+
}
|