@tumaet/apollon 4.0.0-alpha.0

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 (122) hide show
  1. package/dist/App.d.ts +6 -0
  2. package/dist/apollon-editor.d.ts +46 -0
  3. package/dist/components/CustomBackground.d.ts +1 -0
  4. package/dist/components/CustomControls.d.ts +1 -0
  5. package/dist/components/CustomMiniMap.d.ts +1 -0
  6. package/dist/components/DividerLine.d.ts +8 -0
  7. package/dist/components/Icon/CheckIcon.d.ts +2 -0
  8. package/dist/components/Icon/Cross.d.ts +4 -0
  9. package/dist/components/Icon/ExclamationIcon.d.ts +4 -0
  10. package/dist/components/Icon/Icon.d.ts +2 -0
  11. package/dist/components/Icon/TrashIcon.d.ts +4 -0
  12. package/dist/components/Icon/index.d.ts +4 -0
  13. package/dist/components/Sidebar.d.ts +1 -0
  14. package/dist/components/StereotypeButtonGroup.d.ts +8 -0
  15. package/dist/components/index.d.ts +10 -0
  16. package/dist/components/popovers/GenericPopover.d.ts +16 -0
  17. package/dist/components/popovers/GiveFeedbackAssessmentBox.d.ts +7 -0
  18. package/dist/components/popovers/PopoverManager.d.ts +8 -0
  19. package/dist/components/popovers/SeeFeedbackAssessmentBox.d.ts +5 -0
  20. package/dist/components/popovers/classDiagram/ClassEditPopover.d.ts +2 -0
  21. package/dist/components/popovers/classDiagram/ClassGiveFeedbackPopover.d.ts +2 -0
  22. package/dist/components/popovers/classDiagram/ClassSeeFeedbackPopover.d.ts +2 -0
  23. package/dist/components/popovers/classDiagram/EditableAttributesList.d.ts +6 -0
  24. package/dist/components/popovers/classDiagram/EditableMethodsList.d.ts +6 -0
  25. package/dist/components/popovers/classDiagram/PackageEditPopover.d.ts +2 -0
  26. package/dist/components/popovers/classDiagram/PackageGiveFeedbackPopover.d.ts +2 -0
  27. package/dist/components/popovers/classDiagram/PackageSeeFeedbackPopover.d.ts +2 -0
  28. package/dist/components/popovers/classDiagram/index.d.ts +4 -0
  29. package/dist/components/popovers/edgePopovers/EdgeEditPopover.d.ts +2 -0
  30. package/dist/components/popovers/edgePopovers/EdgeGiveFeedbackPopover.d.ts +2 -0
  31. package/dist/components/popovers/edgePopovers/EdgeSeeFeedbackPopover.d.ts +2 -0
  32. package/dist/components/popovers/edgePopovers/index.d.ts +3 -0
  33. package/dist/components/popovers/index.d.ts +3 -0
  34. package/dist/components/popovers/types.d.ts +3 -0
  35. package/dist/components/svgs/AssessmentIcon.d.ts +8 -0
  36. package/dist/components/svgs/edges/index.d.ts +1 -0
  37. package/dist/components/svgs/edges/markers/SvgMarkers.d.ts +1 -0
  38. package/dist/components/svgs/edges/markers/index.d.ts +1 -0
  39. package/dist/components/svgs/index.d.ts +2 -0
  40. package/dist/components/svgs/nodes/CustomText.d.ts +15 -0
  41. package/dist/components/svgs/nodes/HeaderSection.d.ts +12 -0
  42. package/dist/components/svgs/nodes/RowBlockSection.d.ts +15 -0
  43. package/dist/components/svgs/nodes/SeparationLine.d.ts +7 -0
  44. package/dist/components/svgs/nodes/classDiagram/ClassSVG.d.ts +22 -0
  45. package/dist/components/svgs/nodes/classDiagram/ColorDescriptionSVG.d.ts +9 -0
  46. package/dist/components/svgs/nodes/classDiagram/PackageSVG.d.ts +11 -0
  47. package/dist/components/svgs/nodes/classDiagram/TitleAndDescriptionSVG.d.ts +9 -0
  48. package/dist/components/svgs/nodes/classDiagram/index.d.ts +4 -0
  49. package/dist/components/svgs/nodes/index.d.ts +1 -0
  50. package/dist/components/toolbars/edgeToolBar/CustomEdgeToolBar.d.ts +9 -0
  51. package/dist/components/toolbars/edgeToolBar/index.d.ts +1 -0
  52. package/dist/components/toolbars/index.d.ts +1 -0
  53. package/dist/constants/canvasConstants.d.ts +5 -0
  54. package/dist/constants/dropElementConfig.d.ts +12 -0
  55. package/dist/constants/edgeConstants.d.ts +7 -0
  56. package/dist/constants/index.d.ts +4 -0
  57. package/dist/constants/layoutConstants.d.ts +8 -0
  58. package/dist/edges/Connection.d.ts +31 -0
  59. package/dist/edges/EdgeProps.d.ts +15 -0
  60. package/dist/edges/GenericEdge.d.ts +2 -0
  61. package/dist/edges/index.d.ts +2 -0
  62. package/dist/edges/types.d.ts +14 -0
  63. package/dist/enums/ExportFileFormat.d.ts +6 -0
  64. package/dist/enums/Quadrant.d.ts +6 -0
  65. package/dist/enums/index.d.ts +2 -0
  66. package/dist/hooks/index.d.ts +10 -0
  67. package/dist/hooks/useCanvasClickEvents.d.ts +7 -0
  68. package/dist/hooks/useConnect.d.ts +7 -0
  69. package/dist/hooks/useDiagramModifiable.d.ts +1 -0
  70. package/dist/hooks/useDragOver.d.ts +4 -0
  71. package/dist/hooks/useEdgeToolbar.d.ts +6 -0
  72. package/dist/hooks/useEdges.d.ts +8 -0
  73. package/dist/hooks/useElementInteractions.d.ts +6 -0
  74. package/dist/hooks/useGoToNextAssessment.d.ts +1 -0
  75. package/dist/hooks/useHandleDelete.d.ts +1 -0
  76. package/dist/hooks/useHandleOnResize.d.ts +4 -0
  77. package/dist/hooks/useNodeDragStop.d.ts +4 -0
  78. package/dist/hooks/useReconnect.d.ts +4 -0
  79. package/dist/hooks/useViewPointCenter.d.ts +2 -0
  80. package/dist/index.d.ts +2 -0
  81. package/dist/index.js +32407 -0
  82. package/dist/initialElements.d.ts +3 -0
  83. package/dist/nodes/TitleAndDescriptionNode.d.ts +7 -0
  84. package/dist/nodes/classDiagram/Class.d.ts +3 -0
  85. package/dist/nodes/classDiagram/ColorDescription.d.ts +6 -0
  86. package/dist/nodes/classDiagram/Package.d.ts +3 -0
  87. package/dist/nodes/classDiagram/index.d.ts +3 -0
  88. package/dist/nodes/index.d.ts +3 -0
  89. package/dist/nodes/types.d.ts +10 -0
  90. package/dist/nodes/wrappers/DefaultNodeWrapper.d.ts +8 -0
  91. package/dist/nodes/wrappers/index.d.ts +1 -0
  92. package/dist/store/context.d.ts +10 -0
  93. package/dist/store/diagramStore.d.ts +32 -0
  94. package/dist/store/index.d.ts +4 -0
  95. package/dist/store/metadataStore.d.ts +20 -0
  96. package/dist/store/popoverStore.d.ts +7 -0
  97. package/dist/store/yjsSync.d.ts +19 -0
  98. package/dist/styles/theme.d.ts +51 -0
  99. package/dist/sync/index.d.ts +1 -0
  100. package/dist/sync/utils.d.ts +7 -0
  101. package/dist/sync/ydoc.d.ts +7 -0
  102. package/dist/types/DiagramType.d.ts +15 -0
  103. package/dist/types/index.d.ts +3 -0
  104. package/dist/types/locationPopover.d.ts +5 -0
  105. package/dist/types/nodes/DropNodeDate.d.ts +7 -0
  106. package/dist/types/nodes/NodeProps.d.ts +14 -0
  107. package/dist/types/nodes/enums/ClassType.d.ts +6 -0
  108. package/dist/types/nodes/enums/index.d.ts +1 -0
  109. package/dist/types/nodes/index.d.ts +3 -0
  110. package/dist/typings.d.ts +120 -0
  111. package/dist/utils/deepPartial.d.ts +3 -0
  112. package/dist/utils/diagramTypeUtils.d.ts +6 -0
  113. package/dist/utils/edgeUtils.d.ts +55 -0
  114. package/dist/utils/exportUtils.d.ts +3 -0
  115. package/dist/utils/index.d.ts +11 -0
  116. package/dist/utils/layoutUtils.d.ts +17 -0
  117. package/dist/utils/nodeUtils.d.ts +4 -0
  118. package/dist/utils/popoverUtils.d.ts +3 -0
  119. package/dist/utils/quadrantUtils.d.ts +3 -0
  120. package/dist/utils/storeUtils.d.ts +1 -0
  121. package/dist/utils/textUtils.d.ts +7 -0
  122. package/package.json +45 -0
@@ -0,0 +1,3 @@
1
+ import { Edge, Node } from '@xyflow/react';
2
+ export declare const initialNodes: Node[];
3
+ export declare const initialEdges: Edge[];
@@ -0,0 +1,7 @@
1
+ import { NodeProps, Node } from '@xyflow/react';
2
+ type Props = Node<{
3
+ description?: string;
4
+ title: string;
5
+ }>;
6
+ export declare function TitleAndDesctiption({ selected, width, height, id, data: { description, title }, }: NodeProps<Props>): JSX.Element | null;
7
+ export {};
@@ -0,0 +1,3 @@
1
+ import { NodeProps, Node } from '@xyflow/react';
2
+ import { ClassNodeProps } from '../../types';
3
+ export declare function Class({ id, width, height, data: { methods, attributes, stereotype, name }, }: NodeProps<Node<ClassNodeProps>>): JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { NodeProps, Node } from '@xyflow/react';
2
+ type Props = Node<{
3
+ description: string;
4
+ }>;
5
+ export declare function ColorDescription({ width, height, data: { description }, id, }: NodeProps<Props>): JSX.Element | null;
6
+ export {};
@@ -0,0 +1,3 @@
1
+ import { NodeProps, Node } from '@xyflow/react';
2
+ import { PackageNodeProps } from '../../types';
3
+ export default function Package({ id, width, height, data: { name }, parentId, type, }: NodeProps<Node<PackageNodeProps>>): JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ export * from './Class';
2
+ export * from './Package';
3
+ export * from './ColorDescription';
@@ -0,0 +1,3 @@
1
+ export * from './classDiagram';
2
+ export * from './types';
3
+ export * from './TitleAndDescriptionNode';
@@ -0,0 +1,10 @@
1
+ import { Class, ColorDescription } from './classDiagram';
2
+ import { TitleAndDesctiption } from './TitleAndDescriptionNode';
3
+ import { default as Package } from './classDiagram/Package';
4
+ export declare const diagramNodeTypes: {
5
+ package: typeof Package;
6
+ class: typeof Class;
7
+ colorDescription: typeof ColorDescription;
8
+ titleAndDesctiption: typeof TitleAndDesctiption;
9
+ };
10
+ export type DiagramNodeType = keyof typeof diagramNodeTypes;
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ children: React.ReactNode;
3
+ width?: number;
4
+ height?: number;
5
+ elementId: string;
6
+ }
7
+ export declare function DefaultNodeWrapper({ elementId, children, width, height, }: Props): JSX.Element;
8
+ export {};
@@ -0,0 +1 @@
1
+ export * from './DefaultNodeWrapper';
@@ -0,0 +1,10 @@
1
+ import { StoreApi } from 'zustand';
2
+ import { DiagramStore } from './diagramStore';
3
+ import { MetadataStore } from './metadataStore';
4
+ import { PopoverStore } from './popoverStore';
5
+ export declare const DiagramStoreContext: import('react').Context<StoreApi<DiagramStore> | null>;
6
+ export declare const MetadataStoreContext: import('react').Context<StoreApi<MetadataStore> | null>;
7
+ export declare const PopoverStoreContext: import('react').Context<StoreApi<PopoverStore> | null>;
8
+ export declare const useDiagramStore: <T>(selector: (state: DiagramStore) => T) => T;
9
+ export declare const useMetadataStore: <T>(selector: (state: MetadataStore) => T) => T;
10
+ export declare const usePopoverStore: <T>(selector: (state: PopoverStore) => T) => T;
@@ -0,0 +1,32 @@
1
+ import { StoreApi, UseBoundStore } from 'zustand';
2
+ import { Node, Edge, OnNodesChange, OnEdgesChange } from '@xyflow/react';
3
+ import { Assessment } from '../typings';
4
+ import * as Y from "yjs";
5
+ export type DiagramStoreData = {
6
+ nodes: Node[];
7
+ edges: Edge[];
8
+ };
9
+ export type DiagramStore = {
10
+ nodes: Node[];
11
+ edges: Edge[];
12
+ interactiveElementId: string | null;
13
+ diagramId: string;
14
+ assessments: Record<string, Assessment>;
15
+ setDiagramId: (diagramId: string) => void;
16
+ setNodes: (payload: Node[] | ((nodes: Node[]) => Node[])) => void;
17
+ setEdges: (payload: Edge[] | ((edges: Edge[]) => Edge[])) => void;
18
+ setNodesAndEdges: (nodes: Node[], edges: Edge[]) => void;
19
+ addEdge: (edge: Edge) => void;
20
+ addNode: (node: Node) => void;
21
+ onNodesChange: OnNodesChange;
22
+ onEdgesChange: OnEdgesChange;
23
+ reset: () => void;
24
+ setInteractiveElementId: (elementId: string | null) => void;
25
+ getAssessment: (id: string) => Assessment | undefined;
26
+ setAssessments: (assessments: Record<string, Assessment> | ((prev: Record<string, Assessment>) => Record<string, Assessment>)) => void;
27
+ updateNodesFromYjs: () => void;
28
+ updateEdgesFromYjs: () => void;
29
+ updateAssessmentFromYjs: () => void;
30
+ addOrUpdateAssessment: (assessment: Assessment) => void;
31
+ };
32
+ export declare const createDiagramStore: (ydoc: Y.Doc) => UseBoundStore<StoreApi<DiagramStore>>;
@@ -0,0 +1,4 @@
1
+ export { createDiagramStore } from './diagramStore';
2
+ export { createMetadataStore } from './metadataStore';
3
+ export { createPopoverStore } from './popoverStore';
4
+ export { DiagramStoreContext, MetadataStoreContext, useDiagramStore, useMetadataStore, } from './context';
@@ -0,0 +1,20 @@
1
+ import { StoreApi, UseBoundStore } from 'zustand';
2
+ import { UMLDiagramType } from '../types';
3
+ import { ApollonMode } from '../typings';
4
+ import * as Y from "yjs";
5
+ export type MetadataStore = {
6
+ diagramTitle: string;
7
+ diagramType: UMLDiagramType;
8
+ mode: ApollonMode;
9
+ readonly: boolean;
10
+ popupEnabled: boolean;
11
+ setPopupEnabled: (isPopupEnabled: boolean) => void;
12
+ setMode: (mode: ApollonMode) => void;
13
+ setReadonly: (readonly: boolean) => void;
14
+ updateDiagramTitle: (diagramTitle: string) => void;
15
+ updateDiagramType: (diagramType: UMLDiagramType) => void;
16
+ updateMetaData: (diagramTitle: string, diagramType: UMLDiagramType) => void;
17
+ updateMetaDataFromYjs: () => void;
18
+ reset: () => void;
19
+ };
20
+ export declare const createMetadataStore: (ydoc: Y.Doc) => UseBoundStore<StoreApi<MetadataStore>>;
@@ -0,0 +1,7 @@
1
+ import { StoreApi, UseBoundStore } from 'zustand';
2
+ export type PopoverStore = {
3
+ popoverElementId: string | null;
4
+ setPopOverElementId: (value: string | null) => void;
5
+ reset: () => void;
6
+ };
7
+ export declare const createPopoverStore: () => UseBoundStore<StoreApi<PopoverStore>>;
@@ -0,0 +1,19 @@
1
+ import { StoreApi } from 'zustand';
2
+ import { DiagramStore } from './diagramStore';
3
+ import { MetadataStore } from './metadataStore';
4
+ import * as Y from "yjs";
5
+ type SendFunction = (data: Uint8Array) => void;
6
+ export declare class YjsSyncClass {
7
+ private readonly stopYjsObserver;
8
+ private sendFunction;
9
+ private readonly ydoc;
10
+ private readonly diagramStore;
11
+ private readonly metadataStore;
12
+ constructor(ydoc: Y.Doc, diagramStore: StoreApi<DiagramStore>, metadataStore: StoreApi<MetadataStore>);
13
+ stopSync(): void;
14
+ setSendFunction: (sendFn: SendFunction) => void;
15
+ applyUpdate: (update: Uint8Array, transactionOrigin: string) => void;
16
+ handleReceivedData: (data: Uint8Array) => void;
17
+ private startYjsObserver;
18
+ }
19
+ export {};
@@ -0,0 +1,51 @@
1
+ export type Styles = typeof apollonTheme;
2
+ export type withThemeProps = {
3
+ theme: Styles;
4
+ };
5
+ export type Color = "primary" | "secondary";
6
+ export type Size = "sm" | "md" | "lg";
7
+ declare const apollonTheme: {
8
+ color: {
9
+ primary: string;
10
+ secondary: string;
11
+ warningYellow: string;
12
+ background: string;
13
+ backgroundVariant: string;
14
+ grid: string;
15
+ primaryContrast: string;
16
+ gray: string;
17
+ grayAccent: string;
18
+ };
19
+ font: {
20
+ color: string;
21
+ family: string;
22
+ size: number;
23
+ };
24
+ interactive: {
25
+ normal: string;
26
+ hovered: string;
27
+ };
28
+ };
29
+ export declare const defaults: () => {
30
+ color: {
31
+ primary: string;
32
+ secondary: string;
33
+ warningYellow: string;
34
+ background: string;
35
+ backgroundVariant: string;
36
+ grid: string;
37
+ primaryContrast: string;
38
+ gray: string;
39
+ grayAccent: string;
40
+ };
41
+ font: {
42
+ color: string;
43
+ family: string;
44
+ size: number;
45
+ };
46
+ interactive: {
47
+ normal: string;
48
+ hovered: string;
49
+ };
50
+ };
51
+ export {};
@@ -0,0 +1 @@
1
+ export * from './ydoc';
@@ -0,0 +1,7 @@
1
+ import { Node, NodeOrigin, Rect, Box } from '@xyflow/react';
2
+ export declare const sortNodes: (a: Node, b: Node) => number;
3
+ export declare const getId: (prefix?: string) => string;
4
+ export declare const getNodePositionInsideParent: (node: Partial<Node>, groupNode: Node) => import('@xyflow/system').XYPosition;
5
+ export declare const getBoundsOfBoxes: (box1: Box, box2: Box) => Box;
6
+ export declare const getRelativeNodesBounds: (nodes: Node[], nodeOrigin?: NodeOrigin) => Rect;
7
+ export declare function stringToColor(str: string): string;
@@ -0,0 +1,7 @@
1
+ import { Assessment } from '../typings';
2
+ import { Node, Edge } from '@xyflow/react';
3
+ import * as Y from "yjs";
4
+ export declare const getNodesMap: (ydoc: Y.Doc) => Y.Map<Node>;
5
+ export declare const getEdgesMap: (ydoc: Y.Doc) => Y.Map<Edge>;
6
+ export declare const getAssessments: (ydoc: Y.Doc) => Y.Map<Assessment>;
7
+ export declare const getDiagramMetadata: (ydoc: Y.Doc) => Y.Map<string>;
@@ -0,0 +1,15 @@
1
+ export type UMLDiagramType = keyof typeof UMLDiagramType;
2
+ export declare const UMLDiagramType: {
3
+ readonly ClassDiagram: "ClassDiagram";
4
+ readonly ObjectDiagram: "ObjectDiagram";
5
+ readonly ActivityDiagram: "ActivityDiagram";
6
+ readonly UseCaseDiagram: "UseCaseDiagram";
7
+ readonly CommunicationDiagram: "CommunicationDiagram";
8
+ readonly ComponentDiagram: "ComponentDiagram";
9
+ readonly DeploymentDiagram: "DeploymentDiagram";
10
+ readonly PetriNet: "PetriNet";
11
+ readonly ReachabilityGraph: "ReachabilityGraph";
12
+ readonly SyntaxTree: "SyntaxTree";
13
+ readonly Flowchart: "Flowchart";
14
+ readonly BPMN: "BPMN";
15
+ };
@@ -0,0 +1,3 @@
1
+ export * from './nodes';
2
+ export * from './locationPopover';
3
+ export * from './DiagramType';
@@ -0,0 +1,5 @@
1
+ import { PopoverOrigin } from '@mui/material';
2
+ export type LocationPopover = {
3
+ anchorOrigin: PopoverOrigin;
4
+ transformOrigin: PopoverOrigin;
5
+ };
@@ -0,0 +1,7 @@
1
+ import { DiagramNodeType } from '../../nodes';
2
+ export interface DropNodeData {
3
+ type: DiagramNodeType;
4
+ data: Record<string, unknown>;
5
+ offsetX: number;
6
+ offsetY: number;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { ClassType } from './enums';
2
+ export type ClassNodeElement = {
3
+ id: string;
4
+ name: string;
5
+ };
6
+ export type ClassNodeProps = {
7
+ methods: ClassNodeElement[];
8
+ attributes: ClassNodeElement[];
9
+ stereotype?: ClassType;
10
+ name: string;
11
+ };
12
+ export type PackageNodeProps = {
13
+ name: string;
14
+ };
@@ -0,0 +1,6 @@
1
+ export declare enum ClassType {
2
+ Abstract = "Abstract",
3
+ Interface = "Interface",
4
+ Enumeration = "Enumeration",
5
+ ObjectClass = "ObjectClass"
6
+ }
@@ -0,0 +1 @@
1
+ export * from './ClassType';
@@ -0,0 +1,3 @@
1
+ export * from './enums';
2
+ export * from './DropNodeDate';
3
+ export * from './NodeProps';
@@ -0,0 +1,120 @@
1
+ import { DiagramEdgeType } from './edges/types';
2
+ import { DiagramNodeType } from './nodes/types';
3
+ import { UMLDiagramType } from './types/DiagramType';
4
+ import { Styles } from './styles/theme';
5
+ import { DeepPartial } from './utils';
6
+ export { UMLDiagramType, type DiagramNodeType, type DiagramEdgeType };
7
+ export { type Styles };
8
+ export type Unsubscriber = () => void;
9
+ export type Subscribers = {
10
+ [key: number]: Unsubscriber;
11
+ };
12
+ export type UMLModelElementType = DiagramNodeType | DiagramEdgeType;
13
+ export declare enum Locale {
14
+ en = "en",
15
+ de = "de"
16
+ }
17
+ export declare enum ApollonMode {
18
+ Modelling = "Modelling",
19
+ Exporting = "Exporting",
20
+ Assessment = "Assessment"
21
+ }
22
+ export type ApollonNode = {
23
+ id: string;
24
+ width: number;
25
+ height: number;
26
+ type: DiagramNodeType;
27
+ position: {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ data: {
32
+ [key: string]: unknown;
33
+ };
34
+ parentId?: string;
35
+ measured: {
36
+ width: number;
37
+ height: number;
38
+ };
39
+ };
40
+ export type ApollonEdge = {
41
+ id: string;
42
+ source: string;
43
+ target: string;
44
+ type: DiagramEdgeType;
45
+ sourceHandle: string;
46
+ targetHandle: string;
47
+ data: {
48
+ [key: string]: unknown;
49
+ };
50
+ };
51
+ export type Selection = {
52
+ nodes: {
53
+ [id: string]: boolean;
54
+ };
55
+ edges: {
56
+ [id: string]: boolean;
57
+ };
58
+ };
59
+ export type UMLModel = {
60
+ version: `4.${number}.${number}`;
61
+ id: string;
62
+ title: string;
63
+ type: UMLDiagramType;
64
+ nodes: ApollonNode[];
65
+ edges: ApollonEdge[];
66
+ assessments: {
67
+ [id: string]: Assessment;
68
+ };
69
+ };
70
+ export declare enum ApollonView {
71
+ Modelling = "Modelling",
72
+ Exporting = "Exporting",
73
+ Highlight = "Highlight"
74
+ }
75
+ export type ApollonOptions = {
76
+ type?: UMLDiagramType;
77
+ mode?: ApollonMode;
78
+ readonly?: boolean;
79
+ enablePopups?: boolean;
80
+ model?: UMLModel;
81
+ theme?: DeepPartial<Styles>;
82
+ locale?: Locale;
83
+ copyPasteToClipboard?: boolean;
84
+ colorEnabled?: boolean;
85
+ scale?: number;
86
+ };
87
+ export type FeedbackCorrectionStatus = {
88
+ description?: string;
89
+ status: "CORRECT" | "INCORRECT" | "NOT_VALIDATED";
90
+ };
91
+ export type Assessment = {
92
+ modelElementId: string;
93
+ elementType: string;
94
+ score: number;
95
+ feedback?: string;
96
+ dropInfo?: unknown;
97
+ label?: string;
98
+ labelColor?: string;
99
+ correctionStatus?: FeedbackCorrectionStatus;
100
+ };
101
+ export type ExportOptions = {
102
+ margin?: number | {
103
+ top?: number;
104
+ right?: number;
105
+ bottom?: number;
106
+ left?: number;
107
+ };
108
+ keepOriginalSize?: boolean;
109
+ include?: string[];
110
+ exclude?: string[];
111
+ };
112
+ export type SVG = {
113
+ svg: string;
114
+ clip: {
115
+ x: number;
116
+ y: number;
117
+ width: number;
118
+ height: number;
119
+ };
120
+ };
@@ -0,0 +1,3 @@
1
+ export type DeepPartial<T> = {
2
+ [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
3
+ };
@@ -0,0 +1,6 @@
1
+ import { UMLDiagramType } from '../types';
2
+ import { ApollonEdge, ApollonNode } from '../typings';
3
+ import { Node, Edge } from '@xyflow/react';
4
+ export declare const parseDiagramType: (value: unknown, fallback?: UMLDiagramType) => UMLDiagramType;
5
+ export declare const mapFromReactFlowNodeToApollonNode: (node: Node) => ApollonNode;
6
+ export declare const mapFromReactFlowEdgeToApollonEdge: (edge: Edge) => ApollonEdge;
@@ -0,0 +1,55 @@
1
+ import { IPoint } from '../edges/Connection';
2
+ import { Position, Rect, XYPosition } from '@xyflow/react';
3
+ /**
4
+ * Adjusts the target coordinates based on the position and marker padding.
5
+ *
6
+ * @param targetX - X coordinate of the target
7
+ * @param targetY - Y coordinate of the target
8
+ * @param targetPosition - Position of the target (left, right, top, bottom)
9
+ * @param targetPadding - Padding to adjust the position
10
+ * @returns Adjusted targetX and targetY
11
+ */
12
+ export declare const adjustTargetCoordinates: (targetX: number, targetY: number, targetPosition: Position, markerPadding: number) => {
13
+ targetX: number;
14
+ targetY: number;
15
+ };
16
+ /**
17
+ * Adjusts the source coordinates based on the position and marker padding.
18
+ *
19
+ * @param sourceX - X coordinate of the source
20
+ * @param sourceY - Y coordinate of the source
21
+ * @param sourcePosition - Position of the source (left, right, top, bottom)
22
+ * @param sourcePadding - Padding to adjust the position
23
+ * @returns Adjusted sourceX and sourceY
24
+ */
25
+ export declare const adjustSourceCoordinates: (sourceX: number, sourceY: number, sourcePosition: Position, sourcePadding: number) => {
26
+ sourceX: number;
27
+ sourceY: number;
28
+ };
29
+ interface TextPlacement {
30
+ roleX: number;
31
+ roleY: number;
32
+ multiplicityX: number;
33
+ multiplicityY: number;
34
+ }
35
+ export declare const calculateTextPlacement: (x: number, y: number, position: Position) => TextPlacement;
36
+ export declare const calculateEdgeLabels: (x: number, y: number, Position: Position) => {
37
+ roleX: number;
38
+ roleY: number;
39
+ multiplicityX: number;
40
+ multiplicityY: number;
41
+ };
42
+ export interface EdgeMarkerStyles {
43
+ markerEnd?: string;
44
+ markerPadding?: number;
45
+ strokeDashArray?: string;
46
+ }
47
+ export declare function getEdgeMarkerStyles(edgeType: string): EdgeMarkerStyles;
48
+ export declare function findClosestHandle(point: XYPosition, rect: Rect): string;
49
+ export declare function simplifySvgPath(path: string, decimals?: number): string;
50
+ export declare function simplifyPoints(points: IPoint[]): IPoint[];
51
+ export declare function parseSvgPath(path: string): IPoint[];
52
+ export declare function calculateInnerMidpoints(points: IPoint[], decimals?: number): IPoint[];
53
+ export declare function removeDuplicatePoints(points: IPoint[]): IPoint[];
54
+ export declare function getMarkerSegmentPath(points: IPoint[], markerPadding: number, targetPosition: "top" | "bottom" | "left" | "right"): string;
55
+ export {};
@@ -0,0 +1,3 @@
1
+ import { ReactFlowInstance, Node, Edge, Rect } from '@xyflow/react';
2
+ export declare const getSVG: (container: HTMLElement, bounds: Rect) => string;
3
+ export declare function getDiagramBounds(reactFlow: ReactFlowInstance<Node, Edge>): Rect;
@@ -0,0 +1,11 @@
1
+ export declare const generateUUID: () => string;
2
+ export * from './layoutUtils';
3
+ export * from './textUtils';
4
+ export * from './popoverUtils';
5
+ export * from './quadrantUtils';
6
+ export * from './nodeUtils';
7
+ export * from './edgeUtils';
8
+ export * from './exportUtils';
9
+ export * from './diagramTypeUtils';
10
+ export * from './storeUtils';
11
+ export * from './deepPartial';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Calculates the minimum width required to fit the text with specified padding and margin.
3
+ * @param maxTextWidth - The maximum width of the text.
4
+ * @param padding - The inner padding for text.
5
+ * @returns The calculated minimum width.
6
+ */
7
+ export declare const calculateMinWidth: (maxTextWidth: number, padding: number) => number;
8
+ /**
9
+ * Calculates the minimum height based on header, attributes, methods, and margins.
10
+ * @param headerHeight - The height of the header section.
11
+ * @param attributesCount - Number of attributes.
12
+ * @param methodsCount - Number of methods.
13
+ * @param attributeHeight - Height per attribute.
14
+ * @param methodHeight - Height per method.
15
+ * @returns The calculated minimum height.
16
+ */
17
+ export declare const calculateMinHeight: (headerHeight: number, attributesCount: number, methodsCount: number, attributeHeight: number, methodHeight: number) => number;
@@ -0,0 +1,4 @@
1
+ import { XYPosition, Node } from '@xyflow/react';
2
+ export declare const getPositionOnCanvas: (node: Node, allNodes: Node[]) => XYPosition;
3
+ export declare const resizeAllParents: (node: Node, allNodes: Node[]) => Node[];
4
+ export declare function sortNodesTopologically(nodes: Node[]): Node[];
@@ -0,0 +1,3 @@
1
+ import { Quadrant } from '../enums';
2
+ import { LocationPopover } from '../types';
3
+ export declare const getPopoverOrigin: (quadrant: Quadrant) => LocationPopover;
@@ -0,0 +1,3 @@
1
+ import { Quadrant } from '../enums';
2
+ import { XYPosition } from '@xyflow/react';
3
+ export declare const getQuadrant: (target: XYPosition, reference: XYPosition) => Quadrant;
@@ -0,0 +1 @@
1
+ export declare const deepEqual: <T>(a: T, b: T) => boolean;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Measures the width of a given text string using the Canvas API.
3
+ * @param text - The text to measure.
4
+ * @param font - The font style to use for measurement.
5
+ * @returns The width of the text in pixels.
6
+ */
7
+ export declare const measureTextWidth: (text: string, font?: string) => number;
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@tumaet/apollon",
3
+ "version": "4.0.0-alpha.0",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "sideEffects": [
14
+ "**/*.css"
15
+ ],
16
+ "scripts": {
17
+ "dev": "vite",
18
+ "build": "tsc -b && vite build",
19
+ "preview": "vite preview",
20
+ "lint": "eslint .",
21
+ "lint:fix": "eslint --fix ."
22
+ },
23
+ "dependencies": {
24
+ "@mui/icons-material": "6.3.1",
25
+ "@mui/material": "6.3.1",
26
+ "@types/node": "22.13.8",
27
+ "@xyflow/react": "12.3.6",
28
+ "uuid": "11.0.3",
29
+ "y-websocket": "2.1.0",
30
+ "zustand": "5.0.3",
31
+ "react": "18.3.1",
32
+ "react-dom": "18.3.1"
33
+ },
34
+ "devDependencies": {
35
+ "@eslint/js": "9.17.0",
36
+ "@vitejs/plugin-react": "4.3.4",
37
+ "eslint": "9.17.0",
38
+ "eslint-plugin-react": "7.37.2",
39
+ "globals": "15.13.0",
40
+ "typescript": "5.7.2",
41
+ "typescript-eslint": "8.18.1",
42
+ "vite": "6.3.3",
43
+ "vite-plugin-dts": "4.3.0"
44
+ }
45
+ }