@openchoreo/cell-diagram 1.2.0-rc.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/CHANGELOG.md +10 -0
- package/README.md +115 -0
- package/dist/Diagram.esm.js +55 -0
- package/dist/Diagram.esm.js.map +1 -0
- package/dist/components/Cell/CellLink/CellLinkFactory.esm.js +19 -0
- package/dist/components/Cell/CellLink/CellLinkFactory.esm.js.map +1 -0
- package/dist/components/Cell/CellLink/CellLinkModel.esm.js +59 -0
- package/dist/components/Cell/CellLink/CellLinkModel.esm.js.map +1 -0
- package/dist/components/Cell/CellLink/CellLinkWidget.esm.js +217 -0
- package/dist/components/Cell/CellLink/CellLinkWidget.esm.js.map +1 -0
- package/dist/components/Cell/CellNode/CellFactory.esm.js +19 -0
- package/dist/components/Cell/CellNode/CellFactory.esm.js.map +1 -0
- package/dist/components/Cell/CellNode/CellModel.esm.js +73 -0
- package/dist/components/Cell/CellNode/CellModel.esm.js.map +1 -0
- package/dist/components/Cell/CellNode/CellWidget.esm.js +166 -0
- package/dist/components/Cell/CellNode/CellWidget.esm.js.map +1 -0
- package/dist/components/Cell/CellNode/styles.esm.js +149 -0
- package/dist/components/Cell/CellNode/styles.esm.js.map +1 -0
- package/dist/components/Cell/CellPort/CellPortFactory.esm.js +17 -0
- package/dist/components/Cell/CellPort/CellPortFactory.esm.js.map +1 -0
- package/dist/components/Cell/CellPort/CellPortModel.esm.js +18 -0
- package/dist/components/Cell/CellPort/CellPortModel.esm.js.map +1 -0
- package/dist/components/Cell/CellPort/CellPortWidget.esm.js +24 -0
- package/dist/components/Cell/CellPort/CellPortWidget.esm.js.map +1 -0
- package/dist/components/Cell/CellPort/styles.esm.js +13 -0
- package/dist/components/Cell/CellPort/styles.esm.js.map +1 -0
- package/dist/components/Cell/EmptyNode/EmptyFactory.esm.js +20 -0
- package/dist/components/Cell/EmptyNode/EmptyFactory.esm.js.map +1 -0
- package/dist/components/Cell/EmptyNode/EmptyModel.esm.js +25 -0
- package/dist/components/Cell/EmptyNode/EmptyModel.esm.js.map +1 -0
- package/dist/components/Cell/EmptyNode/EmptyWidget.esm.js +52 -0
- package/dist/components/Cell/EmptyNode/EmptyWidget.esm.js.map +1 -0
- package/dist/components/Cell/EmptyNode/styles.esm.js +12 -0
- package/dist/components/Cell/EmptyNode/styles.esm.js.map +1 -0
- package/dist/components/Cell/cell-util.esm.js +110 -0
- package/dist/components/Cell/cell-util.esm.js.map +1 -0
- package/dist/components/Component/ComponentLink/ComponentLinkFactory.esm.js +19 -0
- package/dist/components/Component/ComponentLink/ComponentLinkFactory.esm.js.map +1 -0
- package/dist/components/Component/ComponentLink/ComponentLinkModel.esm.js +20 -0
- package/dist/components/Component/ComponentLink/ComponentLinkModel.esm.js.map +1 -0
- package/dist/components/Component/ComponentLink/ComponentLinkWidget.esm.js +205 -0
- package/dist/components/Component/ComponentLink/ComponentLinkWidget.esm.js.map +1 -0
- package/dist/components/Component/ComponentNode/ComponentFactory.esm.js +20 -0
- package/dist/components/Component/ComponentNode/ComponentFactory.esm.js.map +1 -0
- package/dist/components/Component/ComponentNode/ComponentHead/ComponentHead.esm.js +97 -0
- package/dist/components/Component/ComponentNode/ComponentHead/ComponentHead.esm.js.map +1 -0
- package/dist/components/Component/ComponentNode/ComponentModel.esm.js +26 -0
- package/dist/components/Component/ComponentNode/ComponentModel.esm.js.map +1 -0
- package/dist/components/Component/ComponentNode/ComponentWidget.esm.js +158 -0
- package/dist/components/Component/ComponentNode/ComponentWidget.esm.js.map +1 -0
- package/dist/components/Component/ComponentNode/styles.esm.js +102 -0
- package/dist/components/Component/ComponentNode/styles.esm.js.map +1 -0
- package/dist/components/Component/ComponentPort/ComponentPortFactory.esm.js +17 -0
- package/dist/components/Component/ComponentPort/ComponentPortFactory.esm.js.map +1 -0
- package/dist/components/Component/ComponentPort/ComponentPortModel.esm.js +18 -0
- package/dist/components/Component/ComponentPort/ComponentPortModel.esm.js.map +1 -0
- package/dist/components/Component/ComponentPort/ComponentPortWidget.esm.js +24 -0
- package/dist/components/Component/ComponentPort/ComponentPortWidget.esm.js.map +1 -0
- package/dist/components/Component/ComponentPort/styles.esm.js +16 -0
- package/dist/components/Component/ComponentPort/styles.esm.js.map +1 -0
- package/dist/components/Component/component-node-util.esm.js +15 -0
- package/dist/components/Component/component-node-util.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionNode/ConnectionFactory.esm.js +20 -0
- package/dist/components/Connection/ConnectionNode/ConnectionFactory.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionNode/ConnectionHead/ConnectionHead.esm.js +68 -0
- package/dist/components/Connection/ConnectionNode/ConnectionHead/ConnectionHead.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionNode/ConnectionModel.esm.js +29 -0
- package/dist/components/Connection/ConnectionNode/ConnectionModel.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionNode/ConnectionWidget.esm.js +51 -0
- package/dist/components/Connection/ConnectionNode/ConnectionWidget.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionNode/styles.esm.js +64 -0
- package/dist/components/Connection/ConnectionNode/styles.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionPort/ConnectionPortFactory.esm.js +17 -0
- package/dist/components/Connection/ConnectionPort/ConnectionPortFactory.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionPort/ConnectionPortModel.esm.js +18 -0
- package/dist/components/Connection/ConnectionPort/ConnectionPortModel.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionPort/ConnectionPortWidget.esm.js +24 -0
- package/dist/components/Connection/ConnectionPort/ConnectionPortWidget.esm.js.map +1 -0
- package/dist/components/Connection/ConnectionPort/styles.esm.js +13 -0
- package/dist/components/Connection/ConnectionPort/styles.esm.js.map +1 -0
- package/dist/components/Connection/connection-node-util.esm.js +12 -0
- package/dist/components/Connection/connection-node-util.esm.js.map +1 -0
- package/dist/components/Controls/ControlButtons/ControlButton.esm.js +54 -0
- package/dist/components/Controls/ControlButtons/ControlButton.esm.js.map +1 -0
- package/dist/components/Controls/ControlButtons/style.esm.js +19 -0
- package/dist/components/Controls/ControlButtons/style.esm.js.map +1 -0
- package/dist/components/Controls/DiagramControls.esm.js +88 -0
- package/dist/components/Controls/DiagramControls.esm.js.map +1 -0
- package/dist/components/Controls/DiagramLayers.esm.js +166 -0
- package/dist/components/Controls/DiagramLayers.esm.js.map +1 -0
- package/dist/components/Controls/DiagramLegend.esm.js +242 -0
- package/dist/components/Controls/DiagramLegend.esm.js.map +1 -0
- package/dist/components/Controls/LayerButton.esm.js +96 -0
- package/dist/components/Controls/LayerButton.esm.js.map +1 -0
- package/dist/components/DiagramContext/DiagramContext.esm.js +47 -0
- package/dist/components/DiagramContext/DiagramContext.esm.js.map +1 -0
- package/dist/components/External/ExternalLink/ExternalLinkFactory.esm.js +19 -0
- package/dist/components/External/ExternalLink/ExternalLinkFactory.esm.js.map +1 -0
- package/dist/components/External/ExternalLink/ExternalLinkModel.esm.js +112 -0
- package/dist/components/External/ExternalLink/ExternalLinkModel.esm.js.map +1 -0
- package/dist/components/External/ExternalLink/ExternalLinkWidget.esm.js +68 -0
- package/dist/components/External/ExternalLink/ExternalLinkWidget.esm.js.map +1 -0
- package/dist/components/External/ExternalNode/ExternalFactory.esm.js +20 -0
- package/dist/components/External/ExternalNode/ExternalFactory.esm.js.map +1 -0
- package/dist/components/External/ExternalNode/ExternalModel.esm.js +20 -0
- package/dist/components/External/ExternalNode/ExternalModel.esm.js.map +1 -0
- package/dist/components/External/ExternalNode/ExternalWidget.esm.js +40 -0
- package/dist/components/External/ExternalNode/ExternalWidget.esm.js.map +1 -0
- package/dist/components/External/ExternalNode/styles.esm.js +9 -0
- package/dist/components/External/ExternalNode/styles.esm.js.map +1 -0
- package/dist/components/External/external-node-util.esm.js +12 -0
- package/dist/components/External/external-node-util.esm.js.map +1 -0
- package/dist/components/Header/Header.esm.js +17 -0
- package/dist/components/Header/Header.esm.js.map +1 -0
- package/dist/components/MoreVertMenu/MoreVertMenu.esm.js +81 -0
- package/dist/components/MoreVertMenu/MoreVertMenu.esm.js.map +1 -0
- package/dist/components/ObservationLabel/ObservationLabel.esm.js +102 -0
- package/dist/components/ObservationLabel/ObservationLabel.esm.js.map +1 -0
- package/dist/components/OverlayLoader/OverlayLayerFactory.esm.js +19 -0
- package/dist/components/OverlayLoader/OverlayLayerFactory.esm.js.map +1 -0
- package/dist/components/OverlayLoader/OverlayLayerModel.esm.js +15 -0
- package/dist/components/OverlayLoader/OverlayLayerModel.esm.js.map +1 -0
- package/dist/components/OverlayLoader/OverlayLayerWidget.esm.js +28 -0
- package/dist/components/OverlayLoader/OverlayLayerWidget.esm.js.map +1 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkFactory.esm.js +69 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkFactory.esm.js.map +1 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkModel.esm.js +162 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkModel.esm.js.map +1 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkPointWidget.esm.js +45 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkPointWidget.esm.js.map +1 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkSegmentWidget.esm.js +46 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkSegmentWidget.esm.js.map +1 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkWidget.esm.js +149 -0
- package/dist/components/Project/AdvancedLink/AdvancedLinkWidget.esm.js.map +1 -0
- package/dist/components/Project/ProjectLink/ProjectLinkFactory.esm.js +20 -0
- package/dist/components/Project/ProjectLink/ProjectLinkFactory.esm.js.map +1 -0
- package/dist/components/Project/ProjectLink/ProjectLinkModel.esm.js +20 -0
- package/dist/components/Project/ProjectLink/ProjectLinkModel.esm.js.map +1 -0
- package/dist/components/Project/ProjectLink/ProjectLinkWidget.esm.js +94 -0
- package/dist/components/Project/ProjectLink/ProjectLinkWidget.esm.js.map +1 -0
- package/dist/components/Project/ProjectNode/ProjectFactory.esm.js +20 -0
- package/dist/components/Project/ProjectNode/ProjectFactory.esm.js.map +1 -0
- package/dist/components/Project/ProjectNode/ProjectHeadWidget/ProjectHeadWidget.esm.js +68 -0
- package/dist/components/Project/ProjectNode/ProjectHeadWidget/ProjectHeadWidget.esm.js.map +1 -0
- package/dist/components/Project/ProjectNode/ProjectModel.esm.js +56 -0
- package/dist/components/Project/ProjectNode/ProjectModel.esm.js.map +1 -0
- package/dist/components/Project/ProjectNode/ProjectWidget.esm.js +111 -0
- package/dist/components/Project/ProjectNode/ProjectWidget.esm.js.map +1 -0
- package/dist/components/Project/ProjectNode/styles.esm.js +66 -0
- package/dist/components/Project/ProjectNode/styles.esm.js.map +1 -0
- package/dist/components/Project/ProjectPort/ProjectPortFactory.esm.js +17 -0
- package/dist/components/Project/ProjectPort/ProjectPortFactory.esm.js.map +1 -0
- package/dist/components/Project/ProjectPort/ProjectPortModel.esm.js +18 -0
- package/dist/components/Project/ProjectPort/ProjectPortModel.esm.js.map +1 -0
- package/dist/components/Project/ProjectPort/ProjectPortWidget.esm.js +26 -0
- package/dist/components/Project/ProjectPort/ProjectPortWidget.esm.js.map +1 -0
- package/dist/components/Project/ProjectPort/styles.esm.js +38 -0
- package/dist/components/Project/ProjectPort/styles.esm.js.map +1 -0
- package/dist/components/PromptScreen/PromptScreen.esm.js +30 -0
- package/dist/components/PromptScreen/PromptScreen.esm.js.map +1 -0
- package/dist/components/SharedLink/SharedLink.esm.js +175 -0
- package/dist/components/SharedLink/SharedLink.esm.js.map +1 -0
- package/dist/components/SharedNode/SharedNode.esm.js +44 -0
- package/dist/components/SharedNode/SharedNode.esm.js.map +1 -0
- package/dist/components/TooltipLabel/TooltipLabel.esm.js +22 -0
- package/dist/components/TooltipLabel/TooltipLabel.esm.js.map +1 -0
- package/dist/diagrams/OrgDiagram.esm.js +176 -0
- package/dist/diagrams/OrgDiagram.esm.js.map +1 -0
- package/dist/diagrams/ProjectDiagram.esm.js +251 -0
- package/dist/diagrams/ProjectDiagram.esm.js.map +1 -0
- package/dist/hooks/useActiveLayers.esm.js +27 -0
- package/dist/hooks/useActiveLayers.esm.js.map +1 -0
- package/dist/index.d.ts +407 -0
- package/dist/index.esm.js +4 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/renderDiagram.esm.js +11 -0
- package/dist/renderDiagram.esm.js.map +1 -0
- package/dist/resources/Dagre/DagreEngine.esm.js +178 -0
- package/dist/resources/Dagre/DagreEngine.esm.js.map +1 -0
- package/dist/resources/assets/font/Gilmer-Bold.ttf +0 -0
- package/dist/resources/assets/font/Gilmer-Bold.woff +0 -0
- package/dist/resources/assets/font/Gilmer-Bold.woff2 +0 -0
- package/dist/resources/assets/font/Gilmer-Medium.ttf +0 -0
- package/dist/resources/assets/font/Gilmer-Medium.woff +0 -0
- package/dist/resources/assets/font/Gilmer-Medium.woff2 +0 -0
- package/dist/resources/assets/font/Gilmer-Regular.ttf +0 -0
- package/dist/resources/assets/font/Gilmer-Regular.woff +0 -0
- package/dist/resources/assets/font/Gilmer-Regular.woff2 +0 -0
- package/dist/resources/assets/font/fonts.esm.js +57 -0
- package/dist/resources/assets/font/fonts.esm.js.map +1 -0
- package/dist/resources/assets/icons/AddCheckIcon.esm.js +22 -0
- package/dist/resources/assets/icons/AddCheckIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/AddIcon.esm.js +16 -0
- package/dist/resources/assets/icons/AddIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/CodeIcon.esm.js +26 -0
- package/dist/resources/assets/icons/CodeIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ConnectionIcon.esm.js +22 -0
- package/dist/resources/assets/icons/ConnectionIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/DatabaseIcon.esm.js +23 -0
- package/dist/resources/assets/icons/DatabaseIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/DebugIcon.esm.js +25 -0
- package/dist/resources/assets/icons/DebugIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/DiagramIcon.esm.js +22 -0
- package/dist/resources/assets/icons/DiagramIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/DiffIcon.esm.js +22 -0
- package/dist/resources/assets/icons/DiffIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/EventIcon.esm.js +22 -0
- package/dist/resources/assets/icons/EventIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ExternalConsumerIcon.esm.js +36 -0
- package/dist/resources/assets/icons/ExternalConsumerIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/FitScreenIcon.esm.js +22 -0
- package/dist/resources/assets/icons/FitScreenIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/FullScreenIcon.esm.js +22 -0
- package/dist/resources/assets/icons/FullScreenIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/GatewayIcon.esm.js +22 -0
- package/dist/resources/assets/icons/GatewayIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/InfoIcon.esm.js +22 -0
- package/dist/resources/assets/icons/InfoIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/LayersIcon.esm.js +28 -0
- package/dist/resources/assets/icons/LayersIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ManualTaskIcon.esm.js +22 -0
- package/dist/resources/assets/icons/ManualTaskIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/MoreVertIcon.esm.js +18 -0
- package/dist/resources/assets/icons/MoreVertIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ObservationIcon.esm.js +22 -0
- package/dist/resources/assets/icons/ObservationIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ProxyIcon.esm.js +22 -0
- package/dist/resources/assets/icons/ProxyIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/RefreshIcon.esm.js +22 -0
- package/dist/resources/assets/icons/RefreshIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/RemoveIcon.esm.js +16 -0
- package/dist/resources/assets/icons/RemoveIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ScheduledTaskIcon.esm.js +22 -0
- package/dist/resources/assets/icons/ScheduledTaskIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/ServiceIcon.esm.js +24 -0
- package/dist/resources/assets/icons/ServiceIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/SettingsIcon.esm.js +38 -0
- package/dist/resources/assets/icons/SettingsIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/WarningIcon.esm.js +32 -0
- package/dist/resources/assets/icons/WarningIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/WebAppIcon.esm.js +45 -0
- package/dist/resources/assets/icons/WebAppIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/WebhookIcon.esm.js +22 -0
- package/dist/resources/assets/icons/WebhookIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/index.esm.js +38 -0
- package/dist/resources/assets/icons/index.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/BallerinaIcon.esm.js +24 -0
- package/dist/resources/assets/icons/lang/BallerinaIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/DockerIcon.esm.js +24 -0
- package/dist/resources/assets/icons/lang/DockerIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/GoIcon.esm.js +24 -0
- package/dist/resources/assets/icons/lang/GoIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/JavaIcon.esm.js +54 -0
- package/dist/resources/assets/icons/lang/JavaIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/MIIcon.esm.js +75 -0
- package/dist/resources/assets/icons/lang/MIIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/NodeJsIcon.esm.js +33 -0
- package/dist/resources/assets/icons/lang/NodeJsIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/PhpIcon.esm.js +74 -0
- package/dist/resources/assets/icons/lang/PhpIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/PythonIcon.esm.js +67 -0
- package/dist/resources/assets/icons/lang/PythonIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/RubyIcon.esm.js +26 -0
- package/dist/resources/assets/icons/lang/RubyIcon.esm.js.map +1 -0
- package/dist/resources/assets/icons/lang/RustIcon.esm.js +46 -0
- package/dist/resources/assets/icons/lang/RustIcon.esm.js.map +1 -0
- package/dist/resources/constants.esm.js +44 -0
- package/dist/resources/constants.esm.js.map +1 -0
- package/dist/theme/CellDiagramThemeProvider.esm.js +37 -0
- package/dist/theme/CellDiagramThemeProvider.esm.js.map +1 -0
- package/dist/theme/ThemeContext.esm.js +14 -0
- package/dist/theme/ThemeContext.esm.js.map +1 -0
- package/dist/theme/colors.esm.js +50 -0
- package/dist/theme/colors.esm.js.map +1 -0
- package/dist/types.esm.js +30 -0
- package/dist/types.esm.js.map +1 -0
- package/dist/utils/CanvasStyles.esm.js +67 -0
- package/dist/utils/CanvasStyles.esm.js.map +1 -0
- package/dist/utils/diagramUtils.esm.js +151 -0
- package/dist/utils/diagramUtils.esm.js.map +1 -0
- package/dist/utils/orgUtils.esm.js +119 -0
- package/dist/utils/orgUtils.esm.js.map +1 -0
- package/dist/utils/projectUtils.esm.js +969 -0
- package/dist/utils/projectUtils.esm.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { DefaultLinkModel, PortModelAlignment } from '@projectstorm/react-diagrams';
|
|
2
|
+
import { BezierCurve } from '@projectstorm/geometry';
|
|
3
|
+
import { forIn } from 'lodash';
|
|
4
|
+
import styled from '@emotion/styled';
|
|
5
|
+
import { keyframes, css } from '@emotion/react';
|
|
6
|
+
import { EMPTY_NODE } from '../../resources/constants.esm.js';
|
|
7
|
+
import 'react/jsx-runtime';
|
|
8
|
+
import { CellBounds } from '../Cell/CellNode/CellModel.esm.js';
|
|
9
|
+
import { getCellPortMetadata, getEmptyNodeName } from '../Cell/cell-util.esm.js';
|
|
10
|
+
|
|
11
|
+
class SharedLinkModel extends DefaultLinkModel {
|
|
12
|
+
diagramEngine;
|
|
13
|
+
observations;
|
|
14
|
+
observationOnly;
|
|
15
|
+
tooltip;
|
|
16
|
+
constructor(id, type) {
|
|
17
|
+
super({
|
|
18
|
+
id,
|
|
19
|
+
type
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
initLinks = (diagramEngine) => {
|
|
23
|
+
this.diagramEngine = diagramEngine;
|
|
24
|
+
};
|
|
25
|
+
fireEventTroughLink = (event) => {
|
|
26
|
+
const selectTargetPort = (targetNode2, alignment, bound) => {
|
|
27
|
+
if (targetNode2.getType() === EMPTY_NODE && targetNode2.bound === bound) {
|
|
28
|
+
const portMetadata = getCellPortMetadata(targetNode2.getID());
|
|
29
|
+
if (!portMetadata?.args) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const targetPort = targetNode2.getPortFromID(
|
|
33
|
+
`${alignment}-${getEmptyNodeName(bound, ...portMetadata.args)}`
|
|
34
|
+
);
|
|
35
|
+
if (!targetPort) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
forIn(targetPort.getLinks(), (link) => {
|
|
39
|
+
link.fireEvent({ component: this }, event);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
this.getSourcePort().getNode().fireEvent({ component: this }, event);
|
|
44
|
+
const targetNode = this.getTargetPort().getNode();
|
|
45
|
+
targetNode.fireEvent({ component: this }, event);
|
|
46
|
+
selectTargetPort(
|
|
47
|
+
targetNode,
|
|
48
|
+
PortModelAlignment.BOTTOM,
|
|
49
|
+
CellBounds.SouthBound
|
|
50
|
+
);
|
|
51
|
+
selectTargetPort(
|
|
52
|
+
targetNode,
|
|
53
|
+
PortModelAlignment.RIGHT,
|
|
54
|
+
CellBounds.EastBound
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
selectLinkedNodes = () => {
|
|
58
|
+
this.fireEventTroughLink("SELECT");
|
|
59
|
+
};
|
|
60
|
+
resetLinkedNodes = () => {
|
|
61
|
+
this.fireEventTroughLink("UNSELECT");
|
|
62
|
+
};
|
|
63
|
+
getCurvePath = () => {
|
|
64
|
+
const lineCurve = new BezierCurve();
|
|
65
|
+
if (this.getSourcePort() && this.getTargetPort()) {
|
|
66
|
+
const markerSpace = this.getType() === "componentLink" ? 70 : 120;
|
|
67
|
+
lineCurve.setSource(this.getSourcePort().getPosition());
|
|
68
|
+
lineCurve.setTarget(this.getTargetPort().getPosition());
|
|
69
|
+
const sourcePoint = this.getSourcePort().getPosition().clone();
|
|
70
|
+
const targetPoint = this.getTargetPort().getPosition().clone();
|
|
71
|
+
if (this.getTargetPort().getOptions().alignment === PortModelAlignment.LEFT) {
|
|
72
|
+
targetPoint.x = targetPoint.x - markerSpace;
|
|
73
|
+
} else if (this.getTargetPort().getOptions().alignment === PortModelAlignment.RIGHT) {
|
|
74
|
+
targetPoint.x = targetPoint.x + markerSpace;
|
|
75
|
+
} else if (this.getTargetPort().getOptions().alignment === PortModelAlignment.BOTTOM) {
|
|
76
|
+
targetPoint.y = targetPoint.y + markerSpace;
|
|
77
|
+
} else {
|
|
78
|
+
targetPoint.y = targetPoint.y - markerSpace;
|
|
79
|
+
}
|
|
80
|
+
if (this.getSourcePort().getOptions().alignment === PortModelAlignment.LEFT) {
|
|
81
|
+
sourcePoint.x = sourcePoint.x - markerSpace;
|
|
82
|
+
} else if (this.getSourcePort().getOptions().alignment === PortModelAlignment.RIGHT) {
|
|
83
|
+
sourcePoint.x = sourcePoint.x + markerSpace;
|
|
84
|
+
} else if (this.getSourcePort().getOptions().alignment === PortModelAlignment.BOTTOM) {
|
|
85
|
+
sourcePoint.y = sourcePoint.y + markerSpace;
|
|
86
|
+
} else {
|
|
87
|
+
sourcePoint.y = sourcePoint.y - markerSpace;
|
|
88
|
+
}
|
|
89
|
+
lineCurve.setSourceControl(sourcePoint);
|
|
90
|
+
lineCurve.setTargetControl(targetPoint);
|
|
91
|
+
lineCurve.getSourceControl().translate(...this.calculateControlOffset(this.getSourcePort()));
|
|
92
|
+
lineCurve.getTargetControl().translate(...this.calculateControlOffset(this.getTargetPort()));
|
|
93
|
+
}
|
|
94
|
+
return lineCurve.getSVGCurve();
|
|
95
|
+
};
|
|
96
|
+
getArrowHeadPoints = (scale = 1) => {
|
|
97
|
+
let points = "";
|
|
98
|
+
const sizeMultiplier = Math.max(Math.min(scale / 9, 4), 1);
|
|
99
|
+
const targetPort = this.getTargetPort().getPosition();
|
|
100
|
+
if (this.getTargetPort().getOptions().alignment === PortModelAlignment.RIGHT) {
|
|
101
|
+
points = `${targetPort.x + 2 * sizeMultiplier} ${targetPort.y}, ${targetPort.x + 12 * sizeMultiplier} ${targetPort.y + 6 * sizeMultiplier},
|
|
102
|
+
${targetPort.x + 12 * sizeMultiplier} ${targetPort.y - 6 * sizeMultiplier}`;
|
|
103
|
+
} else if (this.getTargetPort().getOptions().alignment === PortModelAlignment.LEFT) {
|
|
104
|
+
points = `${targetPort.x} ${targetPort.y}, ${targetPort.x - 14 * sizeMultiplier} ${targetPort.y + 10 * sizeMultiplier},
|
|
105
|
+
${targetPort.x - 14 * sizeMultiplier} ${targetPort.y - 10 * sizeMultiplier}`;
|
|
106
|
+
} else if (this.getTargetPort().getOptions().alignment === PortModelAlignment.BOTTOM) {
|
|
107
|
+
points = `${targetPort.x} ${targetPort.y + 2 * sizeMultiplier}, ${targetPort.x + 10 * sizeMultiplier} ${targetPort.y + 14 * sizeMultiplier},
|
|
108
|
+
${targetPort.x - 10 * sizeMultiplier} ${targetPort.y + 14 * sizeMultiplier}`;
|
|
109
|
+
} else if (this.getTargetPort().getOptions().alignment === PortModelAlignment.TOP) {
|
|
110
|
+
points = `${targetPort.x} ${targetPort.y}, ${targetPort.x + 10 * sizeMultiplier} ${targetPort.y - 15 * sizeMultiplier},
|
|
111
|
+
${targetPort.x - 10 * sizeMultiplier} ${targetPort.y - 15 * sizeMultiplier}`;
|
|
112
|
+
}
|
|
113
|
+
return points;
|
|
114
|
+
};
|
|
115
|
+
setObservations = (observations, observationOnly) => {
|
|
116
|
+
this.observations = observations;
|
|
117
|
+
if (observationOnly) {
|
|
118
|
+
this.observationOnly = observationOnly;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
setTooltip = (tooltip) => {
|
|
122
|
+
this.tooltip = tooltip;
|
|
123
|
+
};
|
|
124
|
+
getMidPoint = () => {
|
|
125
|
+
const sourcePortPosition = this.getSourcePort().getPosition();
|
|
126
|
+
const targetPortPosition = this.getTargetPort().getPosition();
|
|
127
|
+
return {
|
|
128
|
+
x: (sourcePortPosition.x + targetPortPosition.x) / 2,
|
|
129
|
+
y: (sourcePortPosition.y + targetPortPosition.y) / 2
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
scaleValueToLinkWidth = (requestCount, minRequestCount, maxRequestCount, maxPossibleRequestCount = 1e3, minStrokeWidth = 2, maxFullStrokeWidth = 30) => {
|
|
133
|
+
const boundedRequestCount = Math.max(
|
|
134
|
+
minRequestCount,
|
|
135
|
+
Math.min(requestCount, maxRequestCount)
|
|
136
|
+
);
|
|
137
|
+
const range = maxRequestCount - minRequestCount;
|
|
138
|
+
const normalizedCount = (boundedRequestCount - minRequestCount) / range;
|
|
139
|
+
const normalizedMaxCount = 1;
|
|
140
|
+
const base = 10;
|
|
141
|
+
const logCount = Math.log(normalizedCount + 1) / Math.log(base);
|
|
142
|
+
const logMaxCount = Math.log(normalizedMaxCount + 1) / Math.log(base);
|
|
143
|
+
const scalingFactor = maxRequestCount < maxPossibleRequestCount ? maxRequestCount / maxPossibleRequestCount : 1;
|
|
144
|
+
const dynamicMaxStrokeWidth = minStrokeWidth + scalingFactor * (maxFullStrokeWidth - minStrokeWidth);
|
|
145
|
+
const scale = logCount / logMaxCount * (dynamicMaxStrokeWidth - minStrokeWidth);
|
|
146
|
+
return minStrokeWidth + scale;
|
|
147
|
+
};
|
|
148
|
+
getLinkArrowId = () => {
|
|
149
|
+
const id = this.getID().replace(/[^a-zA-Z0-9]/g, "");
|
|
150
|
+
return `${id}-arrow`;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
var SharedLink;
|
|
154
|
+
((SharedLink2) => {
|
|
155
|
+
SharedLink2.Keyframes = keyframes`
|
|
156
|
+
from {
|
|
157
|
+
stroke-dashoffset: 24;
|
|
158
|
+
}
|
|
159
|
+
to {
|
|
160
|
+
stroke-dashoffset: 0;
|
|
161
|
+
}
|
|
162
|
+
`;
|
|
163
|
+
const selected = css`
|
|
164
|
+
stroke-dasharray: 10, 6;
|
|
165
|
+
animation: ${SharedLink2.Keyframes} 1s linear infinite;
|
|
166
|
+
`;
|
|
167
|
+
SharedLink2.Path = styled.path`
|
|
168
|
+
${(p) => p.selected && selected};
|
|
169
|
+
fill: none;
|
|
170
|
+
pointer-events: auto;
|
|
171
|
+
`;
|
|
172
|
+
})(SharedLink || (SharedLink = {}));
|
|
173
|
+
|
|
174
|
+
export { SharedLink, SharedLinkModel };
|
|
175
|
+
//# sourceMappingURL=SharedLink.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SharedLink.esm.js","sources":["../../../src/components/SharedLink/SharedLink.ts"],"sourcesContent":["import {\n DefaultLinkModel,\n DiagramEngine,\n NodeModel,\n PortModelAlignment,\n} from '@projectstorm/react-diagrams';\nimport { BezierCurve, Point } from '@projectstorm/geometry';\nimport { forIn } from 'lodash';\nimport styled from '@emotion/styled';\nimport { css, keyframes } from '@emotion/react';\nimport { EMPTY_NODE } from '../../resources';\nimport { EmptyModel } from '../Cell/EmptyNode/EmptyModel';\nimport { CellBounds } from '../Cell/CellNode/CellModel';\nimport { getCellPortMetadata } from '../Cell/cell-util';\nimport { getEmptyNodeName } from '../Cell/cell-util';\nimport { Observations } from '../../types';\n\nexport class SharedLinkModel extends DefaultLinkModel {\n diagramEngine!: DiagramEngine;\n observations!: Observations[];\n observationOnly!: boolean;\n tooltip!: string;\n\n constructor(id: string, type: string) {\n super({\n id: id,\n type: type,\n });\n }\n\n initLinks = (diagramEngine: DiagramEngine) => {\n this.diagramEngine = diagramEngine;\n };\n\n fireEventTroughLink = (event: string) => {\n const selectTargetPort = (\n targetNode: NodeModel,\n alignment: PortModelAlignment,\n bound: CellBounds,\n ) => {\n if (\n targetNode.getType() === EMPTY_NODE &&\n (targetNode as EmptyModel).bound === bound\n ) {\n const portMetadata = getCellPortMetadata(targetNode.getID());\n if (!portMetadata?.args) {\n return;\n }\n const targetPort = targetNode.getPortFromID(\n `${alignment}-${getEmptyNodeName(bound, ...portMetadata.args)}`,\n );\n if (!targetPort) {\n return;\n }\n forIn(targetPort.getLinks(), link => {\n link.fireEvent({ component: this }, event);\n });\n }\n };\n\n // notify source node\n this.getSourcePort().getNode().fireEvent({ component: this }, event);\n // notify target node\n const targetNode = this.getTargetPort().getNode();\n // notify immediate target node\n targetNode.fireEvent({ component: this }, event);\n // notify target connection nodes\n selectTargetPort(\n targetNode,\n PortModelAlignment.BOTTOM,\n CellBounds.SouthBound,\n );\n // notify target inter org service nodes\n selectTargetPort(\n targetNode,\n PortModelAlignment.RIGHT,\n CellBounds.EastBound,\n );\n };\n\n selectLinkedNodes = () => {\n this.fireEventTroughLink('SELECT');\n };\n\n resetLinkedNodes = () => {\n this.fireEventTroughLink('UNSELECT');\n };\n\n getCurvePath = (): string => {\n const lineCurve = new BezierCurve();\n\n if (this.getSourcePort() && this.getTargetPort()) {\n const markerSpace: number = this.getType() === 'componentLink' ? 70 : 120;\n\n lineCurve.setSource(this.getSourcePort().getPosition());\n lineCurve.setTarget(this.getTargetPort().getPosition());\n\n // With a leeway space for the marker\n const sourcePoint: Point = this.getSourcePort().getPosition().clone();\n const targetPoint: Point = this.getTargetPort().getPosition().clone();\n\n if (\n this.getTargetPort().getOptions().alignment === PortModelAlignment.LEFT\n ) {\n targetPoint.x = targetPoint.x - markerSpace;\n } else if (\n this.getTargetPort().getOptions().alignment === PortModelAlignment.RIGHT\n ) {\n targetPoint.x = targetPoint.x + markerSpace;\n } else if (\n this.getTargetPort().getOptions().alignment ===\n PortModelAlignment.BOTTOM\n ) {\n targetPoint.y = targetPoint.y + markerSpace;\n } else {\n targetPoint.y = targetPoint.y - markerSpace;\n }\n\n if (\n this.getSourcePort().getOptions().alignment === PortModelAlignment.LEFT\n ) {\n sourcePoint.x = sourcePoint.x - markerSpace;\n } else if (\n this.getSourcePort().getOptions().alignment === PortModelAlignment.RIGHT\n ) {\n sourcePoint.x = sourcePoint.x + markerSpace;\n } else if (\n this.getSourcePort().getOptions().alignment ===\n PortModelAlignment.BOTTOM\n ) {\n sourcePoint.y = sourcePoint.y + markerSpace;\n } else {\n sourcePoint.y = sourcePoint.y - markerSpace;\n }\n\n lineCurve.setSourceControl(sourcePoint);\n lineCurve.setTargetControl(targetPoint);\n lineCurve\n .getSourceControl()\n .translate(...this.calculateControlOffset(this.getSourcePort()));\n lineCurve\n .getTargetControl()\n .translate(...this.calculateControlOffset(this.getTargetPort()));\n }\n\n return lineCurve.getSVGCurve();\n };\n\n getArrowHeadPoints = (scale = 1): string => {\n let points: string = '';\n const sizeMultiplier = Math.max(Math.min(scale / 9, 4), 1);\n const targetPort: Point = this.getTargetPort().getPosition();\n\n if (\n this.getTargetPort().getOptions().alignment === PortModelAlignment.RIGHT\n ) {\n points = `${targetPort.x + 2 * sizeMultiplier} ${targetPort.y}, ${\n targetPort.x + 12 * sizeMultiplier\n } ${targetPort.y + 6 * sizeMultiplier},\n ${targetPort.x + 12 * sizeMultiplier} ${\n targetPort.y - 6 * sizeMultiplier\n }`;\n } else if (\n this.getTargetPort().getOptions().alignment === PortModelAlignment.LEFT\n ) {\n points = `${targetPort.x} ${targetPort.y}, ${\n targetPort.x - 14 * sizeMultiplier\n } ${targetPort.y + 10 * sizeMultiplier},\n ${targetPort.x - 14 * sizeMultiplier} ${\n targetPort.y - 10 * sizeMultiplier\n }`;\n } else if (\n this.getTargetPort().getOptions().alignment === PortModelAlignment.BOTTOM\n ) {\n points = `${targetPort.x} ${targetPort.y + 2 * sizeMultiplier}, ${\n targetPort.x + 10 * sizeMultiplier\n } ${targetPort.y + 14 * sizeMultiplier},\n ${targetPort.x - 10 * sizeMultiplier} ${\n targetPort.y + 14 * sizeMultiplier\n }`;\n } else if (\n this.getTargetPort().getOptions().alignment === PortModelAlignment.TOP\n ) {\n points = `${targetPort.x} ${targetPort.y}, ${\n targetPort.x + 10 * sizeMultiplier\n } ${targetPort.y - 15 * sizeMultiplier},\n ${targetPort.x - 10 * sizeMultiplier} ${\n targetPort.y - 15 * sizeMultiplier\n }`;\n }\n return points;\n };\n\n setObservations = (\n observations: Observations[],\n observationOnly?: boolean,\n ) => {\n this.observations = observations;\n if (observationOnly) {\n this.observationOnly = observationOnly;\n }\n };\n\n setTooltip = (tooltip: string) => {\n this.tooltip = tooltip;\n };\n\n getMidPoint = () => {\n const sourcePortPosition = this.getSourcePort().getPosition();\n const targetPortPosition = this.getTargetPort().getPosition();\n // Get midpoint of the link line\n return {\n x: (sourcePortPosition.x + targetPortPosition.x) / 2,\n y: (sourcePortPosition.y + targetPortPosition.y) / 2,\n };\n };\n\n scaleValueToLinkWidth = (\n requestCount: number,\n minRequestCount: number,\n maxRequestCount: number,\n maxPossibleRequestCount: number = 1000,\n minStrokeWidth: number = 2,\n maxFullStrokeWidth: number = 30,\n ): number => {\n // Ensure the request count is within the min and max bounds\n const boundedRequestCount = Math.max(\n minRequestCount,\n Math.min(requestCount, maxRequestCount),\n );\n const range = maxRequestCount - minRequestCount;\n const normalizedCount = (boundedRequestCount - minRequestCount) / range;\n const normalizedMaxCount = 1; // Normalized value of max count in the range\n const base = 10;\n // Logarithmic transformation with a base\n const logCount = Math.log(normalizedCount + 1) / Math.log(base);\n const logMaxCount = Math.log(normalizedMaxCount + 1) / Math.log(base);\n // Adjusting the scaling factor based on max request count\n const scalingFactor =\n maxRequestCount < maxPossibleRequestCount\n ? maxRequestCount / maxPossibleRequestCount\n : 1;\n // Scale to stroke width range\n const dynamicMaxStrokeWidth =\n minStrokeWidth + scalingFactor * (maxFullStrokeWidth - minStrokeWidth);\n const scale =\n (logCount / logMaxCount) * (dynamicMaxStrokeWidth - minStrokeWidth);\n return minStrokeWidth + scale;\n };\n\n getLinkArrowId = () => {\n // remove special characters from id\n const id = this.getID().replace(/[^a-zA-Z0-9]/g, '');\n return `${id}-arrow`;\n };\n}\n\nexport namespace SharedLink {\n export const Keyframes = keyframes`\n\t\tfrom {\n\t\t\tstroke-dashoffset: 24;\n\t\t}\n\t\tto {\n\t\t\tstroke-dashoffset: 0;\n\t\t}\n\t`;\n\n const selected = css`\n stroke-dasharray: 10, 6;\n animation: ${Keyframes} 1s linear infinite;\n `;\n\n export const Path = styled.path<{ selected: boolean }>`\n ${p => p.selected && selected};\n fill: none;\n pointer-events: auto;\n `;\n}\n"],"names":["targetNode","SharedLink"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { NodeModel } from '@projectstorm/react-diagrams';
|
|
2
|
+
import { LINE_MIN_WIDTH, LINE_MAX_WIDTH } from '../../resources/constants.esm.js';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
class SharedNodeModel extends NodeModel {
|
|
6
|
+
constructor(type, id) {
|
|
7
|
+
super({
|
|
8
|
+
type,
|
|
9
|
+
id
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
handleHover = (ports, task) => {
|
|
13
|
+
if (ports.length > 0) {
|
|
14
|
+
ports.forEach((port) => {
|
|
15
|
+
const portLinks = new Map(
|
|
16
|
+
Object.entries(port.links)
|
|
17
|
+
);
|
|
18
|
+
portLinks.forEach((link) => {
|
|
19
|
+
if (link.getSourcePort().getID() === port.getID()) {
|
|
20
|
+
link.fireEvent({}, task);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
isNodeSelected = (selectedLink, portIdentifier) => {
|
|
27
|
+
if (selectedLink) {
|
|
28
|
+
if (selectedLink.getSourcePort().getNode().getID() === this.getID()) {
|
|
29
|
+
const sourcePortID = selectedLink.getSourcePort().getID();
|
|
30
|
+
return sourcePortID.slice(sourcePortID.indexOf("-") + 1) === portIdentifier;
|
|
31
|
+
} else if (selectedLink.getTargetPort().getNode().getID() === this.getID()) {
|
|
32
|
+
const targetPortID = selectedLink.getTargetPort().getID();
|
|
33
|
+
return targetPortID.slice(targetPortID.indexOf("-") + 1) === portIdentifier;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
};
|
|
38
|
+
getDynamicLineWidth = (zoomLevel, minWidth = LINE_MIN_WIDTH, maxWidth = LINE_MAX_WIDTH) => {
|
|
39
|
+
return Math.min(Math.max(minWidth, 100 / zoomLevel), maxWidth);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { SharedNodeModel };
|
|
44
|
+
//# sourceMappingURL=SharedNode.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SharedNode.esm.js","sources":["../../../src/components/SharedNode/SharedNode.ts"],"sourcesContent":["import {\n LinkModel,\n NodeModel,\n NodeModelGenerics,\n PortModel,\n} from '@projectstorm/react-diagrams';\nimport { ComponentLinkModel } from '../Component/ComponentLink/ComponentLinkModel';\nimport { LINE_MAX_WIDTH, LINE_MIN_WIDTH } from '../../resources';\n\nexport class SharedNodeModel extends NodeModel<NodeModelGenerics> {\n constructor(type: string, id: string) {\n super({\n type: type,\n id: id,\n });\n }\n\n handleHover = (ports: PortModel[], task: string) => {\n if (ports.length > 0) {\n ports.forEach(port => {\n const portLinks: Map<string, LinkModel> = new Map(\n Object.entries(port.links),\n );\n portLinks.forEach(link => {\n if (link.getSourcePort().getID() === port.getID()) {\n link.fireEvent({}, task);\n }\n });\n });\n }\n };\n\n isNodeSelected = (\n selectedLink: ComponentLinkModel,\n portIdentifier: string,\n ): boolean => {\n if (selectedLink) {\n if (selectedLink.getSourcePort().getNode().getID() === this.getID()) {\n const sourcePortID: string = selectedLink.getSourcePort().getID();\n return (\n sourcePortID.slice(sourcePortID.indexOf('-') + 1) === portIdentifier\n );\n } else if (\n selectedLink.getTargetPort().getNode().getID() === this.getID()\n ) {\n const targetPortID: string = selectedLink.getTargetPort().getID();\n return (\n targetPortID.slice(targetPortID.indexOf('-') + 1) === portIdentifier\n );\n }\n }\n return false;\n };\n\n getDynamicLineWidth = (\n zoomLevel: number,\n minWidth = LINE_MIN_WIDTH,\n maxWidth = LINE_MAX_WIDTH,\n ): number => {\n return Math.min(Math.max(minWidth, 100 / zoomLevel), maxWidth);\n };\n}\n"],"names":[],"mappings":";;;;AASO,MAAM,wBAAwB,SAAA,CAA6B;AAAA,EAChE,WAAA,CAAY,MAAc,EAAA,EAAY;AACpC,IAAA,KAAA,CAAM;AAAA,MACJ,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,GAAc,CAAC,KAAA,EAAoB,IAAA,KAAiB;AAClD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,QAAA,MAAM,YAAoC,IAAI,GAAA;AAAA,UAC5C,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAK;AAAA,SAC3B;AACA,QAAA,SAAA,CAAU,QAAQ,CAAA,IAAA,KAAQ;AACxB,UAAA,IAAI,KAAK,aAAA,EAAc,CAAE,OAAM,KAAM,IAAA,CAAK,OAAM,EAAG;AACjD,YAAA,IAAA,CAAK,SAAA,CAAU,EAAC,EAAG,IAAI,CAAA;AAAA,UACzB;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAAA,EAEA,cAAA,GAAiB,CACf,YAAA,EACA,cAAA,KACY;AACZ,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,YAAA,CAAa,eAAc,CAAE,OAAA,GAAU,KAAA,EAAM,KAAM,IAAA,CAAK,KAAA,EAAM,EAAG;AACnE,QAAA,MAAM,YAAA,GAAuB,YAAA,CAAa,aAAA,EAAc,CAAE,KAAA,EAAM;AAChE,QAAA,OACE,aAAa,KAAA,CAAM,YAAA,CAAa,QAAQ,GAAG,CAAA,GAAI,CAAC,CAAA,KAAM,cAAA;AAAA,MAE1D,CAAA,MAAA,IACE,YAAA,CAAa,aAAA,EAAc,CAAE,OAAA,GAAU,KAAA,EAAM,KAAM,IAAA,CAAK,KAAA,EAAM,EAC9D;AACA,QAAA,MAAM,YAAA,GAAuB,YAAA,CAAa,aAAA,EAAc,CAAE,KAAA,EAAM;AAChE,QAAA,OACE,aAAa,KAAA,CAAM,YAAA,CAAa,QAAQ,GAAG,CAAA,GAAI,CAAC,CAAA,KAAM,cAAA;AAAA,MAE1D;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAAA,EAEA,sBAAsB,CACpB,SAAA,EACA,QAAA,GAAW,cAAA,EACX,WAAW,cAAA,KACA;AACX,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,UAAU,GAAA,GAAM,SAAS,GAAG,QAAQ,CAAA;AAAA,EAC/D,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import styled from '@emotion/styled';
|
|
3
|
+
|
|
4
|
+
const Section = styled.div`
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
gap: 4px;
|
|
8
|
+
`;
|
|
9
|
+
const Row = styled.div`
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: row;
|
|
12
|
+
justify-content: space-between;
|
|
13
|
+
align-items: center;
|
|
14
|
+
font-family: 'GilmerRegular';
|
|
15
|
+
`;
|
|
16
|
+
function TooltipLabel(props) {
|
|
17
|
+
const { tooltip } = props;
|
|
18
|
+
return /* @__PURE__ */ jsx(Section, { children: /* @__PURE__ */ jsx(Row, { children: tooltip }) });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { TooltipLabel };
|
|
22
|
+
//# sourceMappingURL=TooltipLabel.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipLabel.esm.js","sources":["../../../src/components/TooltipLabel/TooltipLabel.tsx"],"sourcesContent":["import styled from '@emotion/styled';\n\nconst Section = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nconst Row = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n font-family: 'GilmerRegular';\n`;\n\ninterface TooltipLabelProps {\n tooltip: string;\n}\n\nexport function TooltipLabel(props: TooltipLabelProps) {\n const { tooltip } = props;\n\n return (\n <Section>\n <Row>{tooltip}</Row>\n </Section>\n );\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,UAAU,MAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAMvB,MAAM,MAAM,MAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYZ,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,MAAM,EAAE,SAAQ,GAAI,KAAA;AAEpB,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAK,mBAAQ,CAAA,EAChB,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { DiagramModel } from '@projectstorm/react-diagrams';
|
|
4
|
+
import { CanvasWidget } from '@projectstorm/react-canvas-core';
|
|
5
|
+
import CircularProgress from '@mui/material/CircularProgress';
|
|
6
|
+
import { generateEngine, animateOrgDiagram } from '../utils/diagramUtils.esm.js';
|
|
7
|
+
import { getDiagramDataFromOrg } from '../utils/orgUtils.esm.js';
|
|
8
|
+
import { PROJECT_NODE, CONNECTION_NODE, Colors } from '../resources/constants.esm.js';
|
|
9
|
+
import '@mui/material/Fade';
|
|
10
|
+
import '@mui/material/Box';
|
|
11
|
+
import '@mui/material/Tooltip';
|
|
12
|
+
import '@mui/icons-material/OpenInNewRounded';
|
|
13
|
+
import '../components/Project/ProjectNode/styles.esm.js';
|
|
14
|
+
import '../components/Project/ProjectPort/styles.esm.js';
|
|
15
|
+
import '../components/Cell/CellNode/styles.esm.js';
|
|
16
|
+
import { CellDiagramContext } from '../components/DiagramContext/DiagramContext.esm.js';
|
|
17
|
+
import '../theme/ThemeContext.esm.js';
|
|
18
|
+
import '../theme/CellDiagramThemeProvider.esm.js';
|
|
19
|
+
import '../components/SharedLink/SharedLink.esm.js';
|
|
20
|
+
import '../components/Project/AdvancedLink/AdvancedLinkFactory.esm.js';
|
|
21
|
+
import { DiagramLayer } from '../types.esm.js';
|
|
22
|
+
import '../components/Component/ComponentNode/styles.esm.js';
|
|
23
|
+
import '../components/MoreVertMenu/MoreVertMenu.esm.js';
|
|
24
|
+
import '../components/ObservationLabel/ObservationLabel.esm.js';
|
|
25
|
+
import '../components/TooltipLabel/TooltipLabel.esm.js';
|
|
26
|
+
import '@mui/material/Popper';
|
|
27
|
+
import '../components/Connection/ConnectionNode/styles.esm.js';
|
|
28
|
+
import '../components/Cell/EmptyNode/styles.esm.js';
|
|
29
|
+
import '../components/External/ExternalNode/styles.esm.js';
|
|
30
|
+
import '@projectstorm/geometry';
|
|
31
|
+
import { OverlayLayerModel } from '../components/OverlayLoader/OverlayLayerModel.esm.js';
|
|
32
|
+
import '../components/OverlayLoader/OverlayLayerWidget.esm.js';
|
|
33
|
+
import '../components/PromptScreen/PromptScreen.esm.js';
|
|
34
|
+
import '../components/Header/Header.esm.js';
|
|
35
|
+
import { DiagramControls } from '../components/Controls/DiagramControls.esm.js';
|
|
36
|
+
import { DagreEngine } from '../resources/Dagre/DagreEngine.esm.js';
|
|
37
|
+
import { useStyles, Container, DiagramContainer } from '../utils/CanvasStyles.esm.js';
|
|
38
|
+
|
|
39
|
+
function OrgDiagram(props) {
|
|
40
|
+
const {
|
|
41
|
+
organization,
|
|
42
|
+
componentMenu,
|
|
43
|
+
showControls = true,
|
|
44
|
+
animation = true,
|
|
45
|
+
defaultDiagramLayer = DiagramLayer.ARCHITECTURE,
|
|
46
|
+
onComponentDoubleClick
|
|
47
|
+
} = props;
|
|
48
|
+
const [diagramEngine] = useState(generateEngine);
|
|
49
|
+
const [diagramModel, setDiagramModel] = useState(
|
|
50
|
+
void 0
|
|
51
|
+
);
|
|
52
|
+
const [selectedNodeId, setSelectedNodeId] = useState("");
|
|
53
|
+
const [focusedNodeId, setFocusedNodeId] = useState("");
|
|
54
|
+
const [zoomLevel, setZoomLevel] = useState(1);
|
|
55
|
+
const [isDiagramLoaded, setIsDiagramLoaded] = useState(false);
|
|
56
|
+
const styles = useStyles();
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (diagramEngine) {
|
|
59
|
+
drawDiagram();
|
|
60
|
+
}
|
|
61
|
+
return () => {
|
|
62
|
+
diagramEngine.getModel()?.getNodes().forEach((node) => {
|
|
63
|
+
node.clearListeners();
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
}, [props]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (diagramEngine && animation && isDiagramLoaded) {
|
|
69
|
+
animateOrgDiagram();
|
|
70
|
+
diagramEngine.repaintCanvas();
|
|
71
|
+
}
|
|
72
|
+
}, [isDiagramLoaded, diagramEngine]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
const listener = diagramEngine.getModel()?.registerListener({
|
|
75
|
+
zoomUpdated: (event) => {
|
|
76
|
+
setZoomLevel(event.zoom);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return () => {
|
|
80
|
+
diagramEngine.getModel()?.deregisterListener(listener);
|
|
81
|
+
};
|
|
82
|
+
}, [diagramEngine]);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (diagramEngine.getCanvas()) {
|
|
85
|
+
document.addEventListener("keydown", handleEscapePress);
|
|
86
|
+
}
|
|
87
|
+
return () => {
|
|
88
|
+
document.removeEventListener("keydown", handleEscapePress);
|
|
89
|
+
};
|
|
90
|
+
}, [diagramModel, diagramEngine.getCanvas()]);
|
|
91
|
+
function handleEscapePress(event) {
|
|
92
|
+
if (event.key === "Escape" && selectedNodeId) {
|
|
93
|
+
setSelectedNodeId("");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const drawDiagram = () => {
|
|
97
|
+
const diagramData = getDiagramDataFromOrg(organization);
|
|
98
|
+
const model = new DiagramModel();
|
|
99
|
+
model.addLayer(new OverlayLayerModel());
|
|
100
|
+
const models = model.addAll(
|
|
101
|
+
...diagramData.nodes.projectNodes.values(),
|
|
102
|
+
...diagramData.links.projectLinks.values()
|
|
103
|
+
);
|
|
104
|
+
diagramEngine.setModel(model);
|
|
105
|
+
setDiagramModel(model);
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
const dagreEngine = new DagreEngine({
|
|
108
|
+
graph: {
|
|
109
|
+
rankdir: "LR",
|
|
110
|
+
ranksep: 110,
|
|
111
|
+
edgesep: 44,
|
|
112
|
+
nodesep: 20,
|
|
113
|
+
// acyclicer: 'greedy',
|
|
114
|
+
ranker: "network-simplex"
|
|
115
|
+
},
|
|
116
|
+
includeLinks: true
|
|
117
|
+
});
|
|
118
|
+
dagreEngine.redistribute(model);
|
|
119
|
+
const links = model.getLinks();
|
|
120
|
+
let maxY = 0;
|
|
121
|
+
links.forEach((link) => {
|
|
122
|
+
link.getPoints().forEach((point) => {
|
|
123
|
+
if (point.getY() > maxY) {
|
|
124
|
+
maxY = point.getY();
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
const nodes = model.getNodes();
|
|
129
|
+
nodes.forEach((node) => {
|
|
130
|
+
if (node.getType() === PROJECT_NODE) {
|
|
131
|
+
const y = node.getY() + 120;
|
|
132
|
+
if (y > maxY) {
|
|
133
|
+
maxY = y;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
models.forEach((node) => {
|
|
138
|
+
if (node.getType() === CONNECTION_NODE) {
|
|
139
|
+
node.setPosition(0, maxY + 40);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
if (diagramEngine.getCanvas()?.getBoundingClientRect()) {
|
|
143
|
+
diagramEngine.zoomToFitNodes({ margin: 40, maxZoom: 1 });
|
|
144
|
+
}
|
|
145
|
+
const overlayLayer = diagramEngine.getModel().getLayers().find((layer) => layer instanceof OverlayLayerModel);
|
|
146
|
+
if (overlayLayer) {
|
|
147
|
+
diagramEngine.getModel().removeLayer(overlayLayer);
|
|
148
|
+
}
|
|
149
|
+
diagramEngine.setModel(model);
|
|
150
|
+
diagramEngine.repaintCanvas();
|
|
151
|
+
setIsDiagramLoaded(true);
|
|
152
|
+
}, 1e3);
|
|
153
|
+
};
|
|
154
|
+
const ctx = {
|
|
155
|
+
selectedNodeId,
|
|
156
|
+
focusedNodeId,
|
|
157
|
+
componentMenu,
|
|
158
|
+
zoomLevel,
|
|
159
|
+
defaultDiagramLayer,
|
|
160
|
+
setSelectedNodeId,
|
|
161
|
+
setFocusedNodeId,
|
|
162
|
+
onComponentDoubleClick
|
|
163
|
+
};
|
|
164
|
+
const handleCanvasClick = (event) => {
|
|
165
|
+
if (focusedNodeId && event.target === diagramEngine.getCanvas()) {
|
|
166
|
+
setFocusedNodeId("");
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(CellDiagramContext, { ...ctx, children: /* @__PURE__ */ jsx(DiagramContainer, { onClick: handleCanvasClick, children: diagramEngine?.getModel() && diagramModel ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
170
|
+
/* @__PURE__ */ jsx(CanvasWidget, { engine: diagramEngine, className: styles.canvas }),
|
|
171
|
+
showControls && /* @__PURE__ */ jsx(DiagramControls, { engine: diagramEngine, animation })
|
|
172
|
+
] }) : /* @__PURE__ */ jsx(CircularProgress, { sx: { color: Colors.PRIMARY } }) }) }) });
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export { DiagramLayer, OrgDiagram };
|
|
176
|
+
//# sourceMappingURL=OrgDiagram.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrgDiagram.esm.js","sources":["../../src/diagrams/OrgDiagram.tsx"],"sourcesContent":["import { MouseEvent, useEffect, useState } from 'react';\nimport { DiagramEngine, DiagramModel } from '@projectstorm/react-diagrams';\nimport { CanvasWidget } from '@projectstorm/react-canvas-core';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {\n generateEngine,\n getDiagramDataFromOrg,\n animateOrgDiagram,\n} from '../utils';\nimport {\n DiagramControls,\n OverlayLayerModel,\n CellDiagramContext,\n ConnectionModel,\n} from '../components';\nimport { CONNECTION_NODE, Colors, PROJECT_NODE } from '../resources';\nimport { Container, DiagramContainer, useStyles } from '../utils/CanvasStyles';\nimport {\n CustomTooltips,\n DiagramLayer,\n MoreVertMenuItem,\n Organization,\n} from '../types';\nimport { DagreEngine } from '../resources/Dagre/DagreEngine';\n\nexport { DiagramLayer } from '../types';\nexport type { MoreVertMenuItem, Project } from '../types';\n\nexport interface OrgDiagramProps {\n organization: Organization;\n componentMenu?: MoreVertMenuItem[];\n showControls?: boolean;\n animation?: boolean;\n defaultDiagramLayer?: DiagramLayer;\n customTooltips?: CustomTooltips;\n onComponentDoubleClick?: (componentId: string) => void;\n}\n\nexport function OrgDiagram(props: OrgDiagramProps) {\n const {\n organization,\n componentMenu,\n showControls = true,\n animation = true,\n defaultDiagramLayer = DiagramLayer.ARCHITECTURE,\n onComponentDoubleClick,\n } = props;\n\n const [diagramEngine] = useState<DiagramEngine>(generateEngine);\n const [diagramModel, setDiagramModel] = useState<DiagramModel | undefined>(\n undefined,\n );\n const [selectedNodeId, setSelectedNodeId] = useState<string>('');\n const [focusedNodeId, setFocusedNodeId] = useState<string>('');\n const [zoomLevel, setZoomLevel] = useState(1);\n const [isDiagramLoaded, setIsDiagramLoaded] = useState(false);\n\n const styles = useStyles();\n\n useEffect(() => {\n if (diagramEngine) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawDiagram();\n }\n return () => {\n diagramEngine\n .getModel()\n ?.getNodes()\n .forEach(node => {\n node.clearListeners();\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props]);\n\n useEffect(() => {\n if (diagramEngine && animation && isDiagramLoaded) {\n animateOrgDiagram();\n diagramEngine.repaintCanvas();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDiagramLoaded, diagramEngine]);\n\n useEffect(() => {\n const listener = diagramEngine.getModel()?.registerListener({\n zoomUpdated: (event: any) => {\n setZoomLevel(event.zoom);\n },\n });\n return () => {\n diagramEngine.getModel()?.deregisterListener(listener);\n };\n }, [diagramEngine]);\n\n useEffect(() => {\n if (diagramEngine.getCanvas()) {\n document.addEventListener('keydown', handleEscapePress);\n }\n return () => {\n document.removeEventListener('keydown', handleEscapePress);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [diagramModel, diagramEngine.getCanvas()]);\n\n function handleEscapePress(event: KeyboardEvent) {\n if (event.key === 'Escape' && selectedNodeId) {\n setSelectedNodeId('');\n }\n }\n\n // draw diagram\n const drawDiagram = () => {\n const diagramData = getDiagramDataFromOrg(organization);\n // create diagram model\n const model = new DiagramModel();\n // add preloader overlay layer\n model.addLayer(new OverlayLayerModel());\n // add node and links to diagram model\n const models = model.addAll(\n // nodes\n ...diagramData.nodes.projectNodes.values(),\n // links\n ...diagramData.links.projectLinks.values(),\n );\n\n // draw diagram with all nodes and links\n diagramEngine.setModel(model);\n setDiagramModel(model);\n\n setTimeout(() => {\n const dagreEngine = new DagreEngine({\n graph: {\n rankdir: 'LR',\n ranksep: 110,\n edgesep: 44,\n nodesep: 20,\n // acyclicer: 'greedy',\n ranker: 'network-simplex',\n },\n includeLinks: true,\n });\n dagreEngine.redistribute(model);\n\n // get all links and find link in the bottom of the diagram and find y coordinate\n const links = model.getLinks();\n let maxY = 0;\n links.forEach(link => {\n link.getPoints().forEach(point => {\n if (point.getY() > maxY) {\n maxY = point.getY();\n }\n });\n });\n\n // get all nodes and find node in the bottom of the diagram and find y coordinate\n const nodes = model.getNodes();\n nodes.forEach(node => {\n if (node.getType() === PROJECT_NODE) {\n const y = node.getY() + 120;\n if (y > maxY) {\n maxY = y;\n }\n }\n });\n\n // update connection nodes position to the bottom of the diagram\n models.forEach(node => {\n if (node.getType() === CONNECTION_NODE) {\n (node as ConnectionModel).setPosition(0, maxY + 40);\n }\n });\n\n if (diagramEngine.getCanvas()?.getBoundingClientRect()) {\n // zoom to fit nodes and center diagram\n diagramEngine.zoomToFitNodes({ margin: 40, maxZoom: 1 });\n }\n // remove preloader overlay layer\n const overlayLayer = diagramEngine\n .getModel()\n .getLayers()\n .find(layer => layer instanceof OverlayLayerModel);\n if (overlayLayer) {\n diagramEngine.getModel().removeLayer(overlayLayer);\n }\n // update diagram\n diagramEngine.setModel(model);\n diagramEngine.repaintCanvas();\n // After all diagram setup is complete\n setIsDiagramLoaded(true);\n }, 1000);\n };\n\n const ctx = {\n selectedNodeId,\n focusedNodeId,\n componentMenu,\n zoomLevel,\n defaultDiagramLayer,\n setSelectedNodeId,\n setFocusedNodeId,\n onComponentDoubleClick,\n };\n\n const handleCanvasClick = (\n event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>,\n ) => {\n if (focusedNodeId && event.target === diagramEngine.getCanvas()) {\n setFocusedNodeId('');\n }\n };\n\n return (\n <Container>\n <CellDiagramContext {...ctx}>\n <DiagramContainer onClick={handleCanvasClick}>\n {diagramEngine?.getModel() && diagramModel ? (\n <>\n <CanvasWidget engine={diagramEngine} className={styles.canvas} />\n {showControls && (\n <DiagramControls engine={diagramEngine} animation={animation} />\n )}\n </>\n ) : (\n <CircularProgress sx={{ color: Colors.PRIMARY }} />\n )}\n </DiagramContainer>\n </CellDiagramContext>\n </Container>\n );\n}\n"],"names":[],"mappings":"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"}
|