@peter.prib/renderengine 0.0.0-stage → 0.2.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.
- package/LICENSE +21 -0
- package/README.md +203 -2
- package/REFERENCE.md +2198 -0
- package/dist/renderengine-workspace.umd.js +46905 -0
- package/dist/renderengine.umd.js +42223 -0
- package/examples/archimate.html +66 -0
- package/examples/diagram-editor.html +51 -0
- package/package.json +65 -4
- package/src/BaseRenderer.js +57 -0
- package/src/CanvasRenderer.js +194 -0
- package/src/Mat4.js +111 -0
- package/src/OrbitCamera.js +57 -0
- package/src/RendererFactory.js +50 -0
- package/src/SVGRenderer.js +439 -0
- package/src/archimate.js +723 -0
- package/src/archimateArchiFormat.js +1693 -0
- package/src/archimateArchiTypes.js +72 -0
- package/src/archimateArchive.js +140 -0
- package/src/archimateCSV.js +127 -0
- package/src/archimateDrawio.js +182 -0
- package/src/archimateExchangeFormat.js +546 -0
- package/src/archimateRelationshipTable.js +93 -0
- package/src/archimateSpecializations.js +161 -0
- package/src/chartCatalog.js +589 -0
- package/src/charting/ArchimateDiagramEditor.js +1624 -0
- package/src/charting/ArchimateSpecializationSelector.js +134 -0
- package/src/charting/Axis.js +68 -0
- package/src/charting/CameraSeeder.js +30 -0
- package/src/charting/CatalogDialog.js +92 -0
- package/src/charting/Chart.js +37 -0
- package/src/charting/Chart3D.js +99 -0
- package/src/charting/ChartBox.js +80 -0
- package/src/charting/ChartData.js +27 -0
- package/src/charting/ChartRegistry.js +76 -0
- package/src/charting/CheckboxTreeSelector.js +304 -0
- package/src/charting/ColorField.js +107 -0
- package/src/charting/ColorPalette.js +88 -0
- package/src/charting/CommandHistory.js +176 -0
- package/src/charting/DataFilter.js +52 -0
- package/src/charting/Diagram.js +36 -0
- package/src/charting/Diagram3D.js +29 -0
- package/src/charting/DiagramClipboard.js +31 -0
- package/src/charting/DiagramEditor.js +3330 -0
- package/src/charting/DiagramEditorCommand.js +110 -0
- package/src/charting/DiagramEditorCommands.js +237 -0
- package/src/charting/DiagramEditorEdgeCommands.js +142 -0
- package/src/charting/DiagramEditorState.js +98 -0
- package/src/charting/DiagramRegistry.js +86 -0
- package/src/charting/DiagramTypeRegistry.js +326 -0
- package/src/charting/DiagramViewPropertiesDialog.js +46 -0
- package/src/charting/Edge.js +113 -0
- package/src/charting/ErrorBars.js +37 -0
- package/src/charting/FilterSystem.js +285 -0
- package/src/charting/FindReplaceDialog.js +139 -0
- package/src/charting/FormDialog.js +385 -0
- package/src/charting/Gauge.js +58 -0
- package/src/charting/Hierarchy.js +175 -0
- package/src/charting/HintPanel.js +86 -0
- package/src/charting/ImageSelector.js +148 -0
- package/src/charting/InteractionManager.js +725 -0
- package/src/charting/Legend.js +58 -0
- package/src/charting/MenuBar.js +62 -0
- package/src/charting/ModelFileFormat.js +115 -0
- package/src/charting/OrbitControls.js +77 -0
- package/src/charting/Palette.js +119 -0
- package/src/charting/PopupMenu.js +117 -0
- package/src/charting/PropertiesPanel.js +155 -0
- package/src/charting/PropertyListEditor.js +96 -0
- package/src/charting/PropertyLog.js +92 -0
- package/src/charting/SettingsCascade.js +93 -0
- package/src/charting/SettingsDialog.js +53 -0
- package/src/charting/SettingsManager.js +179 -0
- package/src/charting/SettingsViewPropertiesDialog.js +58 -0
- package/src/charting/ShapePaths.js +27 -0
- package/src/charting/Statistics.js +134 -0
- package/src/charting/TemplateCatalog.js +59 -0
- package/src/charting/TemplateLibrary.js +103 -0
- package/src/charting/TextStyle.js +168 -0
- package/src/charting/ViewFit.js +55 -0
- package/src/charting/ViewMenu.js +70 -0
- package/src/charting/ViewPropertiesDialog.js +77 -0
- package/src/charting/ViewTabStrip.js +81 -0
- package/src/charting/archimate/ArchiFileFormat.js +32 -0
- package/src/charting/archimate/ArchimateCanvasEditor.js +815 -0
- package/src/charting/archimate/ArchimateCsvFileFormat.js +35 -0
- package/src/charting/archimate/ArchimateEdge.js +137 -0
- package/src/charting/archimate/ArchimateElementTemplate.js +195 -0
- package/src/charting/archimate/ArchimatePalette.js +102 -0
- package/src/charting/archimate/CsvImportDialog.js +105 -0
- package/src/charting/archimate/CustomViewpoints.js +74 -0
- package/src/charting/archimate/DerivedEdge.js +29 -0
- package/src/charting/archimate/DrawioFileFormat.js +24 -0
- package/src/charting/archimate/ElementFilterRule.js +21 -0
- package/src/charting/archimate/ExchangeFileFormat.js +28 -0
- package/src/charting/archimate/ViewGroupTemplate.js +137 -0
- package/src/charting/archimate/ViewLineEdge.js +84 -0
- package/src/charting/archimate/ViewpointRule.js +45 -0
- package/src/charting/archimate/archimateFileFormats.js +12 -0
- package/src/charting/archimate/archimateNames.js +5 -0
- package/src/charting/archimate/csvMapping.js +122 -0
- package/src/charting/archimate/elementMenuItems.js +32 -0
- package/src/charting/archimate/elementProperties.js +146 -0
- package/src/charting/archimate/elementTypeChoices.js +7 -0
- package/src/charting/archimate/elementTypeGroups.js +19 -0
- package/src/charting/archimate/index.js +17 -0
- package/src/charting/archimate/specializationCatalogDialog.js +64 -0
- package/src/charting/archimate/typeGlyph.js +29 -0
- package/src/charting/arrangement/Arrangement.js +112 -0
- package/src/charting/arrangement/ArrangementCommand.js +29 -0
- package/src/charting/arrangement/BackgroundCommand.js +41 -0
- package/src/charting/arrangement/BackgroundGroup.js +18 -0
- package/src/charting/arrangement/GroupCommand.js +46 -0
- package/src/charting/arrangement/ItemGroup.js +62 -0
- package/src/charting/arrangement/LockCommand.js +32 -0
- package/src/charting/arrangement/UngroupCommand.js +27 -0
- package/src/charting/arrangement/alignment.js +88 -0
- package/src/charting/arrangement/arrangeMenuItems.js +25 -0
- package/src/charting/arrangement/index.js +11 -0
- package/src/charting/arrangement/layouts.js +233 -0
- package/src/charting/canvas/ArchiHint.js +78 -0
- package/src/charting/canvas/CanvasBoxKind.js +39 -0
- package/src/charting/canvas/CanvasPalette.js +49 -0
- package/src/charting/canvas/CanvasTemplateLibrary.js +61 -0
- package/src/charting/canvas/CanvasTemplateMenu.js +151 -0
- package/src/charting/canvas/EditHintCommand.js +28 -0
- package/src/charting/canvas/canvasBoxKinds.js +27 -0
- package/src/charting/canvas/canvasBoxMenuItems.js +40 -0
- package/src/charting/canvas/defaultCanvasTemplates.js +186 -0
- package/src/charting/canvas/diagramBoxKinds.js +12 -0
- package/src/charting/canvas/hintMenuItems.js +49 -0
- package/src/charting/charts/ArcGauge.js +55 -0
- package/src/charting/charts/AreaChart.js +71 -0
- package/src/charting/charts/BarChart.js +80 -0
- package/src/charting/charts/BarChart3D.js +56 -0
- package/src/charting/charts/BarChart3DOrbit.js +53 -0
- package/src/charting/charts/BarChartBase.js +70 -0
- package/src/charting/charts/BarGauge.js +42 -0
- package/src/charting/charts/BoxPlotChart.js +41 -0
- package/src/charting/charts/BubbleChart.js +99 -0
- package/src/charting/charts/BubbleChart3D.js +78 -0
- package/src/charting/charts/BulletGauge.js +87 -0
- package/src/charting/charts/CalendarHeatmapChart.js +204 -0
- package/src/charting/charts/CandlestickChart.js +54 -0
- package/src/charting/charts/ChordDiagram.js +130 -0
- package/src/charting/charts/DensityChart.js +73 -0
- package/src/charting/charts/DialGauge.js +65 -0
- package/src/charting/charts/DonutChart.js +15 -0
- package/src/charting/charts/FunnelChart.js +47 -0
- package/src/charting/charts/GanttChart.js +201 -0
- package/src/charting/charts/GaugeChart.js +175 -0
- package/src/charting/charts/GeoMapChart.js +146 -0
- package/src/charting/charts/GroupedBarChart.js +88 -0
- package/src/charting/charts/GroupedDistributionChart.js +70 -0
- package/src/charting/charts/HeatmapChart.js +80 -0
- package/src/charting/charts/HierarchyChart.js +39 -0
- package/src/charting/charts/HistogramChart.js +45 -0
- package/src/charting/charts/KpiTile.js +72 -0
- package/src/charting/charts/LagPlotChart.js +41 -0
- package/src/charting/charts/LineChart.js +124 -0
- package/src/charting/charts/MultiRingGauge.js +54 -0
- package/src/charting/charts/OutlineChart.js +95 -0
- package/src/charting/charts/ParallelCoordinatesChart.js +130 -0
- package/src/charting/charts/PieChart.js +56 -0
- package/src/charting/charts/PipeChart.js +88 -0
- package/src/charting/charts/PopulationPyramidChart.js +106 -0
- package/src/charting/charts/QQPlotChart.js +64 -0
- package/src/charting/charts/RadarChart.js +76 -0
- package/src/charting/charts/RadialBarChart.js +96 -0
- package/src/charting/charts/RingGauge.js +23 -0
- package/src/charting/charts/SankeyDiagram.js +174 -0
- package/src/charting/charts/ScatterChart.js +104 -0
- package/src/charting/charts/StackedAreaChart.js +15 -0
- package/src/charting/charts/StackedBarChart.js +33 -0
- package/src/charting/charts/StackedBarChart3DOrbit.js +58 -0
- package/src/charting/charts/StreamGraphChart.js +131 -0
- package/src/charting/charts/SunburstChart.js +57 -0
- package/src/charting/charts/ThermometerGauge.js +43 -0
- package/src/charting/charts/TreemapChart.js +54 -0
- package/src/charting/charts/ViolinChart.js +37 -0
- package/src/charting/charts/WaterfallChart.js +66 -0
- package/src/charting/charts/WordCloudChart.js +104 -0
- package/src/charting/diagramModel/AddViewCommand.js +33 -0
- package/src/charting/diagramModel/DiagramModel.js +39 -0
- package/src/charting/diagramModel/DiagramModelSearch.js +22 -0
- package/src/charting/diagramModel/DiagramView.js +50 -0
- package/src/charting/diagramModel/ModelHistory.js +43 -0
- package/src/charting/diagramModel/ModelReport.js +153 -0
- package/src/charting/diagramModel/ModelSearch.js +223 -0
- package/src/charting/diagramModel/RemoveViewCommand.js +25 -0
- package/src/charting/diagramModel/RenameViewCommand.js +21 -0
- package/src/charting/diagramModel/ReplaceTextCommand.js +25 -0
- package/src/charting/diagramModel/ViewSetChecker.js +34 -0
- package/src/charting/diagramModel/ViewSetModel.js +243 -0
- package/src/charting/diagramModel/index.js +6 -0
- package/src/charting/diagramModel/nameTransforms.js +29 -0
- package/src/charting/diagrams/ArchimateCommands.js +141 -0
- package/src/charting/diagrams/ArchimateDiagram.js +263 -0
- package/src/charting/diagrams/ArchimateModel.js +1155 -0
- package/src/charting/diagrams/ArchimateModelChecker.js +125 -0
- package/src/charting/diagrams/ArchimateModelReport.js +128 -0
- package/src/charting/diagrams/ArchimateModelSearch.js +41 -0
- package/src/charting/diagrams/ArchimateValidator.js +357 -0
- package/src/charting/diagrams/CanvasView.js +112 -0
- package/src/charting/diagrams/ContextMenu.js +37 -0
- package/src/charting/diagrams/DataModelDiagram.js +86 -0
- package/src/charting/diagrams/DataModelRelationshipStrategy.js +38 -0
- package/src/charting/diagrams/DerivedRelationships.js +102 -0
- package/src/charting/diagrams/EbnfDiagram.js +39 -0
- package/src/charting/diagrams/EdgeGeometry.js +553 -0
- package/src/charting/diagrams/EditViewItemCommand.js +128 -0
- package/src/charting/diagrams/ElementInstance.js +157 -0
- package/src/charting/diagrams/GraphDiagram.js +1340 -0
- package/src/charting/diagrams/GraphDiagram3D.js +152 -0
- package/src/charting/diagrams/GraphMetrics.js +81 -0
- package/src/charting/diagrams/GridOverlay.js +137 -0
- package/src/charting/diagrams/ImportRowsCommand.js +62 -0
- package/src/charting/diagrams/LabelHelper.js +108 -0
- package/src/charting/diagrams/MergeElementsCommand.js +101 -0
- package/src/charting/diagrams/NestInstanceCommand.js +34 -0
- package/src/charting/diagrams/NodeGeometry.js +158 -0
- package/src/charting/diagrams/PlaceItemsCommand.js +77 -0
- package/src/charting/diagrams/RadialLayout.js +101 -0
- package/src/charting/diagrams/RelationshipInstance.js +93 -0
- package/src/charting/diagrams/RemoveGroupFromViewCommand.js +28 -0
- package/src/charting/diagrams/RemoveLineCommand.js +27 -0
- package/src/charting/diagrams/ShowElementCommand.js +43 -0
- package/src/charting/diagrams/SvgCoordinate.js +17 -0
- package/src/charting/diagrams/SvgZoom.js +127 -0
- package/src/charting/diagrams/Tooltip.js +62 -0
- package/src/charting/diagrams/ViewConnectionInstance.js +102 -0
- package/src/charting/diagrams/ViewObjectInstance.js +56 -0
- package/src/charting/diagrams/commands/AddEdgeCommand.js +34 -0
- package/src/charting/diagrams/commands/AddNodeCommand.js +28 -0
- package/src/charting/diagrams/commands/AddWaypointCommand.js +27 -0
- package/src/charting/diagrams/commands/CreateFolderCommand.js +27 -0
- package/src/charting/diagrams/commands/DeleteEdgeCommand.js +30 -0
- package/src/charting/diagrams/commands/DeleteFolderCommand.js +47 -0
- package/src/charting/diagrams/commands/DeleteNodeCommand.js +35 -0
- package/src/charting/diagrams/commands/DeleteWaypointCommand.js +24 -0
- package/src/charting/diagrams/commands/GraphCommand.js +65 -0
- package/src/charting/diagrams/commands/InvertEdgeCommand.js +24 -0
- package/src/charting/diagrams/commands/MoveNodeCommand.js +44 -0
- package/src/charting/diagrams/commands/MoveWaypointCommand.js +27 -0
- package/src/charting/diagrams/commands/RenameEdgeCommand.js +23 -0
- package/src/charting/diagrams/commands/RenameFolderCommand.js +31 -0
- package/src/charting/diagrams/commands/RenameNodeCommand.js +27 -0
- package/src/charting/diagrams/commands/ResizeNodeCommand.js +46 -0
- package/src/charting/diagrams/commands/UpdateEdgeSideCommand.js +40 -0
- package/src/charting/diagrams/commands/index.js +17 -0
- package/src/charting/diagrams/duplicates.js +49 -0
- package/src/charting/diagrams/nesting.js +30 -0
- package/src/charting/diagrams/roadmap.js +77 -0
- package/src/charting/edgeMarkers/ArrowMarker.js +15 -0
- package/src/charting/edgeMarkers/CircleMarker.js +13 -0
- package/src/charting/edgeMarkers/CrowsFootMarker.js +16 -0
- package/src/charting/edgeMarkers/DiamondMarker.js +15 -0
- package/src/charting/edgeMarkers/EdgeMarker.js +34 -0
- package/src/charting/edgeMarkers/HalfArrowMarker.js +8 -0
- package/src/charting/edgeMarkers/HollowDiamondMarker.js +18 -0
- package/src/charting/edgeMarkers/HollowTriangleMarker.js +18 -0
- package/src/charting/edgeMarkers/OpenArrowMarker.js +17 -0
- package/src/charting/edgeMarkers/index.js +27 -0
- package/src/charting/edgeStyle/EdgeStyleCascade.js +22 -0
- package/src/charting/edgeStyle/EdgeStyleDialog.js +51 -0
- package/src/charting/edgeStyle/EdgeStyleSchema.js +43 -0
- package/src/charting/edgeStyle/SetStyleCommand.js +12 -0
- package/src/charting/edgeStyle/index.js +4 -0
- package/src/charting/emphasis/EmphasisRule.js +42 -0
- package/src/charting/emphasis/HighlightRule.js +24 -0
- package/src/charting/gauges/ArcTrack.js +51 -0
- package/src/charting/gauges/GaugeAnimation.js +51 -0
- package/src/charting/gauges/GaugeBands.js +48 -0
- package/src/charting/gauges/GaugeScale.js +87 -0
- package/src/charting/gauges/GaugeTrack.js +44 -0
- package/src/charting/gauges/GaugeValue.js +61 -0
- package/src/charting/gauges/HorizontalTrack.js +14 -0
- package/src/charting/gauges/LinearTrack.js +29 -0
- package/src/charting/gauges/Sparkline.js +42 -0
- package/src/charting/gauges/VerticalTrack.js +17 -0
- package/src/charting/glyphs/ArrowGlyph.js +21 -0
- package/src/charting/glyphs/BatteryGlyph.js +18 -0
- package/src/charting/glyphs/ChevronGlyph.js +18 -0
- package/src/charting/glyphs/CircleGlyph.js +15 -0
- package/src/charting/glyphs/CloudGlyph.js +19 -0
- package/src/charting/glyphs/ComponentGlyph.js +18 -0
- package/src/charting/glyphs/ConstraintGlyph.js +24 -0
- package/src/charting/glyphs/ContractBoxGlyph.js +10 -0
- package/src/charting/glyphs/CubeGlyph.js +19 -0
- package/src/charting/glyphs/CylinderGlyph.js +19 -0
- package/src/charting/glyphs/DashedDoubleArrowGlyph.js +11 -0
- package/src/charting/glyphs/DeviceGlyph.js +17 -0
- package/src/charting/glyphs/DiamondGlyph.js +17 -0
- package/src/charting/glyphs/DocumentGlyph.js +17 -0
- package/src/charting/glyphs/DoubleArrowGlyph.js +23 -0
- package/src/charting/glyphs/DoubleCircleGlyph.js +24 -0
- package/src/charting/glyphs/EllipseGlyph.js +18 -0
- package/src/charting/glyphs/FactoryGlyph.js +20 -0
- package/src/charting/glyphs/FlagGlyph.js +16 -0
- package/src/charting/glyphs/GapCircleGlyph.js +17 -0
- package/src/charting/glyphs/GearGlyph.js +37 -0
- package/src/charting/glyphs/Glyph.js +98 -0
- package/src/charting/glyphs/GroupingBoxGlyph.js +13 -0
- package/src/charting/glyphs/HalfCircleGlyph.js +22 -0
- package/src/charting/glyphs/HexagonGlyph.js +28 -0
- package/src/charting/glyphs/IconGlyph.js +22 -0
- package/src/charting/glyphs/ImageGlyph.js +16 -0
- package/src/charting/glyphs/JunctionGlyph.js +17 -0
- package/src/charting/glyphs/LollipopGlyph.js +22 -0
- package/src/charting/glyphs/MagnifierGlyph.js +17 -0
- package/src/charting/glyphs/NoteGlyph.js +33 -0
- package/src/charting/glyphs/ObjectBoxGlyph.js +21 -0
- package/src/charting/glyphs/OrJunctionGlyph.js +17 -0
- package/src/charting/glyphs/ParallelogramGlyph.js +20 -0
- package/src/charting/glyphs/PersonGlyph.js +23 -0
- package/src/charting/glyphs/PillGlyph.js +23 -0
- package/src/charting/glyphs/PinGlyph.js +18 -0
- package/src/charting/glyphs/PrincipleGlyph.js +23 -0
- package/src/charting/glyphs/ProductBoxGlyph.js +16 -0
- package/src/charting/glyphs/RectGlyph.js +15 -0
- package/src/charting/glyphs/RoundedBoxGlyph.js +13 -0
- package/src/charting/glyphs/StackGlyph.js +14 -0
- package/src/charting/glyphs/StepsGlyph.js +20 -0
- package/src/charting/glyphs/StickFigureGlyph.js +32 -0
- package/src/charting/glyphs/SystemSoftwareBoxGlyph.js +16 -0
- package/src/charting/glyphs/TabbedBoxGlyph.js +37 -0
- package/src/charting/glyphs/TargetGlyph.js +23 -0
- package/src/charting/glyphs/WavyBoxGlyph.js +17 -0
- package/src/charting/glyphs/WheelGlyph.js +28 -0
- package/src/charting/glyphs/drawGlyph.js +28 -0
- package/src/charting/glyphs/glyphSvg.js +55 -0
- package/src/charting/glyphs/index.js +109 -0
- package/src/charting/modelTree/AnalysisPanel.js +159 -0
- package/src/charting/modelTree/DiagramTabs.js +217 -0
- package/src/charting/modelTree/ModelTree.js +164 -0
- package/src/charting/modelTree/ModelTreePanel.js +914 -0
- package/src/charting/modelTree/TreeBuilder.js +238 -0
- package/src/charting/modelTree/TreeModeRegistry.js +51 -0
- package/src/charting/modelTree/TreeViewMode.js +110 -0
- package/src/charting/modelTree/buildFilterTrees.js +138 -0
- package/src/charting/modelTree/modes/FlatTreeMode.js +46 -0
- package/src/charting/modelTree/modes/LayerGroupedTreeMode.js +62 -0
- package/src/charting/modelTree/modes/TypeGroupedTreeMode.js +60 -0
- package/src/charting/modelTree/treeLayers.js +11 -0
- package/src/charting/report/reportHtml.js +82 -0
- package/src/charting/report/reportViewer.js +118 -0
- package/src/charting/shapes/CircleShape.js +19 -0
- package/src/charting/shapes/PathShape.js +17 -0
- package/src/charting/shapes/RectShape.js +20 -0
- package/src/charting/shapes/Shape.js +20 -0
- package/src/charting/shapes/ShapeFactory.js +23 -0
- package/src/charting/storage/LocalJsonStore.js +43 -0
- package/src/charting/templates/ActorTemplate.js +36 -0
- package/src/charting/templates/BoxTemplate.js +27 -0
- package/src/charting/templates/CircleTemplate.js +18 -0
- package/src/charting/templates/ClassTemplate.js +20 -0
- package/src/charting/templates/CloudTemplate.js +43 -0
- package/src/charting/templates/ComponentTemplate.js +19 -0
- package/src/charting/templates/CylinderTemplate.js +30 -0
- package/src/charting/templates/DataStoreTemplate.js +16 -0
- package/src/charting/templates/DiamondTemplate.js +10 -0
- package/src/charting/templates/DocumentTemplate.js +32 -0
- package/src/charting/templates/EllipseTemplate.js +15 -0
- package/src/charting/templates/FinalStateTemplate.js +12 -0
- package/src/charting/templates/GlyphTemplate.js +47 -0
- package/src/charting/templates/HexagonTemplate.js +17 -0
- package/src/charting/templates/LifelineTemplate.js +20 -0
- package/src/charting/templates/ManualInputTemplate.js +12 -0
- package/src/charting/templates/NoteTemplate.js +23 -0
- package/src/charting/templates/OctagonTemplate.js +7 -0
- package/src/charting/templates/PackageTemplate.js +25 -0
- package/src/charting/templates/ParallelogramTemplate.js +11 -0
- package/src/charting/templates/PentagonTemplate.js +5 -0
- package/src/charting/templates/PolygonTemplate.js +18 -0
- package/src/charting/templates/PredefinedProcessTemplate.js +13 -0
- package/src/charting/templates/RectangleTemplate.js +28 -0
- package/src/charting/templates/RegularPolygonTemplate.js +21 -0
- package/src/charting/templates/RoundedRectangleTemplate.js +5 -0
- package/src/charting/templates/StadiumTemplate.js +8 -0
- package/src/charting/templates/StarTemplate.js +17 -0
- package/src/charting/templates/SwimlaneTemplate.js +18 -0
- package/src/charting/templates/Template.js +208 -0
- package/src/charting/templates/TrapezoidTemplate.js +11 -0
- package/src/charting/templates/TriangleTemplate.js +12 -0
- package/src/charting/templates/index.js +31 -0
- package/src/charting/templates/outline.js +59 -0
- package/src/charting/templates/svg.js +19 -0
- package/src/charting/textToShapes.js +61 -0
- package/src/charting/toolbar/ToolbarButton.js +38 -0
- package/src/charting/toolbar/ToolbarCheckbox.js +31 -0
- package/src/charting/toolbar/ToolbarItem.js +19 -0
- package/src/charting/toolbar/ToolbarMenu.js +36 -0
- package/src/charting/toolbar/ToolbarSelect.js +38 -0
- package/src/charting/toolbar/ToolbarSeparator.js +7 -0
- package/src/charting/toolbar/ToolbarText.js +22 -0
- package/src/charting/toolbar/index.js +8 -0
- package/src/charting/toolbar/pickFile.js +14 -0
- package/src/charting/viewDecorations.js +85 -0
- package/src/charting/zOrder.js +57 -0
- package/src/csvTable.js +61 -0
- package/src/datamodel.js +122 -0
- package/src/datawindow/BoundedWindow.js +36 -0
- package/src/datawindow/FlatDataWindow.js +34 -0
- package/src/datawindow/GraphDataWindow.js +40 -0
- package/src/datawindow/GroupedSampleDataWindow.js +16 -0
- package/src/datawindow/SeriesDataWindow.js +42 -0
- package/src/datawindow/index.js +31 -0
- package/src/diagramCatalog.js +30 -0
- package/src/ebnfDiagram.js +57 -0
- package/src/ebnfParser.js +129 -0
- package/src/exportImage.js +233 -0
- package/src/index.js +2636 -0
- package/src/itIcons.js +84 -0
- package/src/kernelExpr.js +243 -0
- package/src/propertiesDialog.js +463 -0
- package/src/railroadDiagram.js +571 -0
- package/src/treeModeCatalog.js +16 -0
- package/src/workspace/ContextBus.js +79 -0
- package/src/workspace/EditorShell.js +67 -0
- package/src/workspace/Part.js +163 -0
- package/src/workspace/PartFactory.js +49 -0
- package/src/workspace/PartRegistry.js +86 -0
- package/src/workspace/Workspace.js +321 -0
- package/src/workspace/archimateServices.js +33 -0
- package/src/workspace/dom.js +120 -0
- package/src/workspace/index.js +75 -0
- package/src/workspace/layout/GridNode.js +280 -0
- package/src/workspace/layout/LayoutNode.js +89 -0
- package/src/workspace/layout/PartNode.js +77 -0
- package/src/workspace/layout/SplitNode.js +114 -0
- package/src/workspace/layout/TabsNode.js +191 -0
- package/src/workspace/layout/index.js +24 -0
- package/src/workspace/parts/AdapterPart.js +33 -0
- package/src/workspace/parts/ArchimateCanvasPart.js +345 -0
- package/src/workspace/parts/ArchimateEditorPart.js +79 -0
- package/src/workspace/parts/ChartPart.js +115 -0
- package/src/workspace/parts/ContentPart.js +34 -0
- package/src/workspace/parts/DetailPart.js +46 -0
- package/src/workspace/parts/DiagramEditorPart.js +135 -0
- package/src/workspace/parts/EditorPart.js +388 -0
- package/src/workspace/parts/HtmlPart.js +25 -0
- package/src/workspace/parts/ListPart.js +57 -0
- package/src/workspace/parts/ModelFile.js +187 -0
- package/src/workspace/parts/ModelsPart.js +135 -0
- package/src/workspace/styles.js +258 -0
- package/src/workspace/themes.js +96 -0
- package/src/workspace/workArea.js +413 -0
- package/src/workspace/workAreaModel.js +197 -0
- package/src/workspace.js +16 -0
- package/src/zip/ZipArchive.js +160 -0
- package/src/zip/crc32.js +25 -0
- package/src/zip/inflate.js +159 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Command } from '../CommandHistory.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AddToViewCommand — put one element instance on a view, as one undo step.
|
|
5
|
+
* Given a new model `element` too, the element is created with it (and goes
|
|
6
|
+
* with it on undo). The view's element filter is widened to the element if
|
|
7
|
+
* it was not already in it.
|
|
8
|
+
*/
|
|
9
|
+
export class AddToViewCommand extends Command {
|
|
10
|
+
/**
|
|
11
|
+
* @param {ArchimateView} view
|
|
12
|
+
* @param {ElementInstance} instance
|
|
13
|
+
* @param {Object} [options]
|
|
14
|
+
* @param {Object} [options.element] - A new model element the instance shows
|
|
15
|
+
*/
|
|
16
|
+
constructor(view, instance, { element = null, label = 'Add to View' } = {}) {
|
|
17
|
+
super(label);
|
|
18
|
+
this.view = view;
|
|
19
|
+
this.instance = instance;
|
|
20
|
+
this.element = element;
|
|
21
|
+
this._createdElement = false;
|
|
22
|
+
this._widenedFilter = false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
execute() {
|
|
26
|
+
const { view, instance, element } = this;
|
|
27
|
+
this._createdElement = !!element && !view.model.getElement(element.id);
|
|
28
|
+
if (this._createdElement) view.model.addElement(element);
|
|
29
|
+
this._widenedFilter = !!view.elementIds && !instance.shownIn(view);
|
|
30
|
+
// Mutate rather than replace: other holders keep a reference to this array.
|
|
31
|
+
if (this._widenedFilter) view.elementIds.push(instance.elementId);
|
|
32
|
+
view.addElementInstance(instance);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
undo() {
|
|
36
|
+
const { view, instance } = this;
|
|
37
|
+
view.removeElementInstance(instance.id);
|
|
38
|
+
if (this._widenedFilter) {
|
|
39
|
+
const at = view.elementIds.indexOf(instance.elementId);
|
|
40
|
+
if (at >= 0) view.elementIds.splice(at, 1);
|
|
41
|
+
}
|
|
42
|
+
if (this._createdElement) view.model.removeElement(this.element.id);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* AddRelationshipToViewCommand — show one relationship instance on a view,
|
|
48
|
+
* as one undo step. Given a new model `relationship` too, it is created with
|
|
49
|
+
* it (and goes with it on undo).
|
|
50
|
+
*/
|
|
51
|
+
export class AddRelationshipToViewCommand extends Command {
|
|
52
|
+
/**
|
|
53
|
+
* @param {ArchimateView} view
|
|
54
|
+
* @param {RelationshipInstance} instance
|
|
55
|
+
* @param {Object} [options]
|
|
56
|
+
* @param {Object} [options.relationship] - A new model relationship the instance shows
|
|
57
|
+
*/
|
|
58
|
+
constructor(view, instance, { relationship = null, label = 'Add Relationship to View' } = {}) {
|
|
59
|
+
super(label);
|
|
60
|
+
this.view = view;
|
|
61
|
+
this.instance = instance;
|
|
62
|
+
this.relationship = relationship;
|
|
63
|
+
this._createdRelationship = false;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
execute() {
|
|
67
|
+
const { view, relationship } = this;
|
|
68
|
+
this._createdRelationship = !!relationship && !view.model.getRelationship(relationship.id);
|
|
69
|
+
if (this._createdRelationship) view.model.addRelationship(relationship);
|
|
70
|
+
view.addRelationshipInstance(this.instance);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
undo() {
|
|
74
|
+
this.view.removeRelationshipInstance(this.instance.id);
|
|
75
|
+
if (this._createdRelationship) this.view.model.removeRelationship(this.relationship.id);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* AddRelationshipCommand — a new relationship in the model, drawn on no view
|
|
81
|
+
* (one a nesting expresses, as Archi adds them). Undo removes it.
|
|
82
|
+
*/
|
|
83
|
+
export class AddRelationshipCommand extends Command {
|
|
84
|
+
constructor(model, relationship, label = `Add ${relationship.kind ?? 'relationship'}`) {
|
|
85
|
+
super(label);
|
|
86
|
+
this.model = model;
|
|
87
|
+
this.relationship = relationship;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
execute() {
|
|
91
|
+
this.model.addRelationship(this.relationship);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
undo() {
|
|
95
|
+
this.model.removeRelationship(this.relationship.id);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* RemoveRelationshipFromViewCommand — take one relationship instance off a
|
|
101
|
+
* view (the model relationship stays). Undo puts the same instance back.
|
|
102
|
+
*/
|
|
103
|
+
export class RemoveRelationshipFromViewCommand extends Command {
|
|
104
|
+
constructor(view, instanceId) {
|
|
105
|
+
super('Remove Relationship from View');
|
|
106
|
+
this.view = view;
|
|
107
|
+
this.instanceId = instanceId;
|
|
108
|
+
this.removed = null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
execute() {
|
|
112
|
+
this.removed = this.view.getRelationshipInstance(this.instanceId) ?? null;
|
|
113
|
+
if (this.removed) this.view.removeRelationshipInstance(this.instanceId);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
undo() {
|
|
117
|
+
if (this.removed) this.view.addRelationshipInstance(this.removed);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* DeleteElementCommand — take one element instance off a view (the model
|
|
123
|
+
* element stays). Undo puts the same instance back, id and all.
|
|
124
|
+
*/
|
|
125
|
+
export class DeleteElementCommand extends Command {
|
|
126
|
+
constructor(view, instanceId) {
|
|
127
|
+
super('Delete Element');
|
|
128
|
+
this.view = view;
|
|
129
|
+
this.instanceId = instanceId;
|
|
130
|
+
this.removed = null;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
execute() {
|
|
134
|
+
this.removed = this.view.getElementInstance(this.instanceId) ?? null;
|
|
135
|
+
if (this.removed) this.view.removeElementInstance(this.instanceId);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
undo() {
|
|
139
|
+
if (this.removed) this.view.addElementInstance(this.removed);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { Diagram } from '../Diagram.js';
|
|
2
|
+
import { ArchimateNotation, ArchimateViewpoints } from '../../archimate.js';
|
|
3
|
+
import { ITIconNotation } from '../../itIcons.js';
|
|
4
|
+
import { ArchimateValidator } from './ArchimateValidator.js';
|
|
5
|
+
import { ArchimateSpecializationRegistry } from '../../archimateSpecializations.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* ArchimateDiagram — builds ArchiMate-notation nodes/edges and renders them
|
|
9
|
+
* through the shared GraphDiagram engine.
|
|
10
|
+
*/
|
|
11
|
+
export class ArchimateDiagram extends Diagram {
|
|
12
|
+
static diagramType = 'archimate';
|
|
13
|
+
|
|
14
|
+
constructor(renderer, elements, relationships, options = {}, engine = null) {
|
|
15
|
+
super(renderer, { elements, relationships }, options);
|
|
16
|
+
this.engine = engine;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
render() {
|
|
20
|
+
const { elements, relationships } = this.data;
|
|
21
|
+
const options = this.options;
|
|
22
|
+
const {
|
|
23
|
+
layerColors, relationshipStyles, defaultIcons, iconChoiceIndex = 0, elementWidth = 120, elementHeight = 55,
|
|
24
|
+
archimateVersion = '4', useDistinctShapes = false, iconSet = 'glyph',
|
|
25
|
+
validate = true, invalidRelationships = 'highlight', onValidationWarning, annotations = [], viewpoint = null,
|
|
26
|
+
viewpointMode = 'fade', customViewpoints = [], ...rest
|
|
27
|
+
} = options;
|
|
28
|
+
const nodeOpts = {
|
|
29
|
+
layerColors, defaultIcons, iconChoiceIndex, elementWidth, elementHeight,
|
|
30
|
+
archimateVersion, useDistinctShapes, iconSet,
|
|
31
|
+
};
|
|
32
|
+
const nodes = elements.map(element => ArchimateDiagram.buildNode(element, nodeOpts));
|
|
33
|
+
|
|
34
|
+
// Viewpoint filtering: hide or fade element types that do not belong to
|
|
35
|
+
// the active viewpoint. Annotations are never affected.
|
|
36
|
+
const effectiveViewpoint = viewpoint && viewpoint !== 'All' ? viewpoint : null;
|
|
37
|
+
const allowedTypes = effectiveViewpoint
|
|
38
|
+
? new Set(ArchimateViewpoints.allowedElementTypes(viewpoint, archimateVersion, customViewpoints))
|
|
39
|
+
: null;
|
|
40
|
+
let visibleNodes = nodes;
|
|
41
|
+
let visibleEdges = relationships;
|
|
42
|
+
if (effectiveViewpoint) {
|
|
43
|
+
const isAllowed = (type) => allowedTypes.has(type);
|
|
44
|
+
const allowedNodeIds = new Set();
|
|
45
|
+
for (const node of nodes) {
|
|
46
|
+
if (isAllowed(node.type)) allowedNodeIds.add(node.id);
|
|
47
|
+
}
|
|
48
|
+
visibleNodes = [];
|
|
49
|
+
for (const node of nodes) {
|
|
50
|
+
const allowed = allowedNodeIds.has(node.id);
|
|
51
|
+
if (allowed) {
|
|
52
|
+
visibleNodes.push(node);
|
|
53
|
+
} else if (viewpointMode === 'fade') {
|
|
54
|
+
node.opacity = 0.2;
|
|
55
|
+
visibleNodes.push(node);
|
|
56
|
+
}
|
|
57
|
+
// viewpointMode === 'hide' drops the node entirely.
|
|
58
|
+
}
|
|
59
|
+
visibleEdges = [];
|
|
60
|
+
for (const rel of relationships) {
|
|
61
|
+
const sourceAllowed = allowedNodeIds.has(rel.source);
|
|
62
|
+
const targetAllowed = allowedNodeIds.has(rel.target);
|
|
63
|
+
if (sourceAllowed && targetAllowed) {
|
|
64
|
+
visibleEdges.push(rel);
|
|
65
|
+
} else if (viewpointMode === 'fade' && (sourceAllowed || targetAllowed)) {
|
|
66
|
+
rel.opacity = 0.2;
|
|
67
|
+
visibleEdges.push(rel);
|
|
68
|
+
}
|
|
69
|
+
// In hide mode, drop edges touching a hidden node.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Annotations are diagram-only sticky-note comments, not part of the
|
|
74
|
+
// ArchiMate model. They are appended as plain graphDiagram nodes so they
|
|
75
|
+
// get drag/resize/delete/properties for free; mutating them in place
|
|
76
|
+
// keeps the caller's annotations array in sync across rerenders.
|
|
77
|
+
for (const annotation of annotations) {
|
|
78
|
+
if (!annotation.id) annotation.id = `note_${Math.random().toString(36).slice(2, 9)}`;
|
|
79
|
+
annotation.shape = 'note';
|
|
80
|
+
annotation.labelPosition = annotation.labelPosition || 'inside';
|
|
81
|
+
annotation.resizable = annotation.resizable !== false;
|
|
82
|
+
visibleNodes.push(annotation);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Validate the model before building edges so warnings can be attached
|
|
86
|
+
// to the edges that GraphDiagram will actually draw.
|
|
87
|
+
// 'off' checks nothing; 'tooltip' warns on hover only; 'highlight' also draws the line red and dashed.
|
|
88
|
+
const warnings = validate && invalidRelationships !== 'off'
|
|
89
|
+
// A plain line on a view (viewConnection) is no ArchiMate relationship: nothing to check.
|
|
90
|
+
? ArchimateValidator.validateModel(elements, relationships.filter(r => !r.viewConnection), archimateVersion, viewpoint, customViewpoints)
|
|
91
|
+
: [];
|
|
92
|
+
const warningByEdge = new Map();
|
|
93
|
+
for (const w of warnings) {
|
|
94
|
+
if (w.type === 'relationship' && w.relationship) {
|
|
95
|
+
warningByEdge.set(w.relationship, w);
|
|
96
|
+
}
|
|
97
|
+
if (typeof onValidationWarning === 'function') {
|
|
98
|
+
onValidationWarning(w);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Build edges in place on the caller's relationships array so drag-to-
|
|
103
|
+
// create and property-edits persist back into the source array across
|
|
104
|
+
// rerenders (e.g. after switching ArchiMate version or applying a style).
|
|
105
|
+
for (let i = 0; i < visibleEdges.length; i++) {
|
|
106
|
+
ArchimateDiagram.buildEdge(visibleEdges[i], { relationshipStyles, warningByEdge, highlight: invalidRelationships === 'highlight' });
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// ArchiMate tools draw relationships over elements (a line into a nested element stays visible).
|
|
110
|
+
this.engine.graphDiagram(visibleNodes, visibleEdges, { edgeColor: '#666666', edgesOnTop: true, ...rest });
|
|
111
|
+
|
|
112
|
+
// Expose warnings on the engine so callers can read them back after render.
|
|
113
|
+
if (this.engine) {
|
|
114
|
+
this.engine._archimateWarnings = warnings;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Diagram-wide ArchiMate settings survive a rerender so live icon-choice
|
|
118
|
+
// changes can be applied later (see RenderEngine._archimateSetIconChoiceIndex).
|
|
119
|
+
this.engine._archimateOptions = {
|
|
120
|
+
layerColors, defaultIcons, iconChoiceIndex, relationshipStyles, elementWidth, elementHeight,
|
|
121
|
+
archimateVersion, useDistinctShapes, iconSet, viewpoint,
|
|
122
|
+
viewpointMode, customViewpoints,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
static elementLayer(element, version) {
|
|
127
|
+
// An explicit `element.layer` always wins, then a known official or IT
|
|
128
|
+
// extension type, then the prefix heuristic for custom names.
|
|
129
|
+
if (element?.layer) return element.layer;
|
|
130
|
+
const itType = typeof element?.type === 'string' ? ITIconNotation.elementType(element.type) : undefined;
|
|
131
|
+
if (itType?.layer?.name) return itType.layer.name;
|
|
132
|
+
return ArchimateNotation.elementLayer(element, version);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
static layerColor(layer, layerColors, ownColor) {
|
|
136
|
+
return layerColors?.[layer] || ownColor || ArchimateNotation.layer(layer)?.color || ArchimateNotation.layer('other').color;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
static defaultIcon(element, layer, defaultIcons, iconChoiceIndex = 0, version) {
|
|
140
|
+
if (defaultIcons?.[layer]) return defaultIcons[layer];
|
|
141
|
+
const type = typeof element?.type === 'string'
|
|
142
|
+
? ArchimateDiagram.resolveElementType(element.type, version)
|
|
143
|
+
: undefined;
|
|
144
|
+
if (type) {
|
|
145
|
+
// IT extension types carry a single icon, not a choice list.
|
|
146
|
+
if (!type.iconChoices) return type.icon;
|
|
147
|
+
const choices = type.iconChoices;
|
|
148
|
+
return choices[iconChoiceIndex] ?? choices[0];
|
|
149
|
+
}
|
|
150
|
+
return ArchimateNotation.layer(layer)?.defaultIcon || ArchimateNotation.layer('other').defaultIcon;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
static relationshipStyle(kind, relationshipStyles) {
|
|
154
|
+
return relationshipStyles?.[kind] || ArchimateNotation.relationshipType(kind);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** Live diagram-wide setting: which choice in each element type's own
|
|
158
|
+
* `iconChoices` is used as the DEFAULT icon for a node that doesn't carry
|
|
159
|
+
* its own explicit `icon`/`iconUrl`. Changing it re-derives the icon for
|
|
160
|
+
* every node that hasn't been individually customised, leaving any node
|
|
161
|
+
* whose icon was deliberately picked untouched. No-op if this isn't (or
|
|
162
|
+
* is no longer) an ArchiMate diagram. */
|
|
163
|
+
static setIconChoiceIndex(engine, newIndex) {
|
|
164
|
+
const opts = engine?._archimateOptions;
|
|
165
|
+
if (!opts || !engine._chartState?.nodes) return;
|
|
166
|
+
const oldIndex = opts.iconChoiceIndex ?? 0;
|
|
167
|
+
for (const node of engine._chartState.nodes) {
|
|
168
|
+
if (node.iconUrl) continue;
|
|
169
|
+
const layer = ArchimateDiagram.elementLayer(node, opts.archimateVersion);
|
|
170
|
+
const wasAuto = node.icon === ArchimateDiagram.defaultIcon(node, layer, opts.defaultIcons, oldIndex, opts.archimateVersion);
|
|
171
|
+
if (wasAuto) node.icon = ArchimateDiagram.defaultIcon(node, layer, opts.defaultIcons, newIndex, opts.archimateVersion);
|
|
172
|
+
}
|
|
173
|
+
opts.iconChoiceIndex = newIndex;
|
|
174
|
+
engine._graphDiagram?._rerenderGraph();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
static cornerStyle(element, layer, version) {
|
|
178
|
+
if (element?.cornerStyle) return element.cornerStyle;
|
|
179
|
+
if (layer === 'motivation') return 'chamfered';
|
|
180
|
+
const type = typeof element?.type === 'string'
|
|
181
|
+
? ArchimateDiagram.resolveElementType(element.type, version)
|
|
182
|
+
: undefined;
|
|
183
|
+
const aspect = element?.aspect || type?.aspect;
|
|
184
|
+
return aspect === 'behavior' ? 'rounded' : 'sharp';
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Resolve an element `type` to either an official ArchiMate type or an
|
|
188
|
+
* IT/infrastructure extension type. Returns the matching descriptor object
|
|
189
|
+
* (which has the same `layer`/`aspect`/`icon`/`notationShape`/`description`
|
|
190
|
+
* shape in both cases) or undefined. */
|
|
191
|
+
static resolveElementType(typeName, archimateVersion = '4') {
|
|
192
|
+
if (typeof typeName !== 'string') return undefined;
|
|
193
|
+
return ArchimateNotation.elementType(typeName, archimateVersion)
|
|
194
|
+
|| ITIconNotation.elementType(typeName);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
static buildNode(element, {
|
|
198
|
+
layerColors, defaultIcons, iconChoiceIndex = 0, elementWidth = 120, elementHeight = 55,
|
|
199
|
+
archimateVersion = '4', useDistinctShapes = false, iconSet = 'glyph',
|
|
200
|
+
} = {}) {
|
|
201
|
+
const resolved = archimateVersion === '4' ? ArchimateNotation.migrateElementToV4(element) : element;
|
|
202
|
+
ArchimateSpecializationRegistry.applyToNode(resolved);
|
|
203
|
+
const layer = ArchimateDiagram.elementLayer(resolved, archimateVersion);
|
|
204
|
+
const type = ArchimateDiagram.resolveElementType(resolved.type, archimateVersion);
|
|
205
|
+
const useDistinctShape = resolved.useDistinctShape ?? useDistinctShapes;
|
|
206
|
+
const notationShape = useDistinctShape ? type?.notationShape : undefined;
|
|
207
|
+
const glyphBadges = (resolved.iconSet ?? iconSet) !== 'emoji';
|
|
208
|
+
|
|
209
|
+
// CRITICAL: Use diagramInstanceId (not elementId) as the node's unique ID
|
|
210
|
+
// This allows multiple instances of the same element to render as separate visual nodes
|
|
211
|
+
const nodeId = resolved.diagramInstanceId || resolved.id;
|
|
212
|
+
// A view-only box (note, image, canvas or sketch box) has no ArchiMate type: no type
|
|
213
|
+
// icon, and a plain white fill unless it sets one (a note keeps its own default).
|
|
214
|
+
const viewBox = resolved.viewObject && resolved.shape !== 'note';
|
|
215
|
+
|
|
216
|
+
return {
|
|
217
|
+
...resolved,
|
|
218
|
+
id: nodeId, // Override to use diagramInstanceId for uniqueness
|
|
219
|
+
layer,
|
|
220
|
+
shape: resolved.shape || notationShape || 'rect',
|
|
221
|
+
color: resolved.color || (viewBox ? '#ffffff' : ArchimateDiagram.layerColor(layer, layerColors, type?.ownColor)),
|
|
222
|
+
width: resolved.width ?? elementWidth,
|
|
223
|
+
height: resolved.height ?? elementHeight,
|
|
224
|
+
strokeColor: resolved.strokeColor || '#000000',
|
|
225
|
+
strokeWidth: resolved.strokeWidth ?? 1.2,
|
|
226
|
+
// The ArchiMate notation draws a Grouping with a dashed outline.
|
|
227
|
+
...(type?.name === 'grouping' && { strokeDasharray: resolved.strokeDasharray ?? '6 3' }),
|
|
228
|
+
labelPosition: resolved.labelPosition || (notationShape ? 'below' : 'inside'),
|
|
229
|
+
iconPosition: resolved.iconPosition || 'corner',
|
|
230
|
+
cornerStyle: ArchimateDiagram.cornerStyle(resolved, layer, archimateVersion),
|
|
231
|
+
iconShape: resolved.viewObject ? undefined : resolved.iconShape || ((resolved.icon || resolved.iconUrl) && glyphBadges ? undefined : (notationShape || !glyphBadges ? undefined : type?.notationShape)),
|
|
232
|
+
icon: resolved.viewObject ? resolved.icon : resolved.icon || (resolved.iconUrl || notationShape || (glyphBadges && type?.notationShape)
|
|
233
|
+
? undefined
|
|
234
|
+
: ArchimateDiagram.defaultIcon(resolved, layer, defaultIcons, iconChoiceIndex, archimateVersion)),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
static buildEdge(relationship, { relationshipStyles, warningByEdge, highlight = true } = {}) {
|
|
239
|
+
const style = ArchimateDiagram.relationshipStyle(relationship.kind, relationshipStyles);
|
|
240
|
+
// Mutate the caller's original relationship object rather than returning
|
|
241
|
+
// a shallow copy, so edits made via the context-menu Properties dialog
|
|
242
|
+
// persist back into the source array (engine._chartState.relationships).
|
|
243
|
+
relationship.lineStyle = relationship.lineStyle || style.lineStyle;
|
|
244
|
+
relationship.arrowhead = relationship.arrowhead || style.arrowhead || 'none';
|
|
245
|
+
relationship.arrowheadStart = relationship.arrowheadStart || style.arrowheadStart;
|
|
246
|
+
|
|
247
|
+
const warning = warningByEdge?.get(relationship);
|
|
248
|
+
if (warning) {
|
|
249
|
+
relationship._archimateWarning = warning.message;
|
|
250
|
+
if (highlight) {
|
|
251
|
+
relationship.color = relationship.color || '#e74c3c';
|
|
252
|
+
relationship.dasharray = relationship.dasharray || '4 3';
|
|
253
|
+
}
|
|
254
|
+
const existingTooltip = relationship.tooltip || '';
|
|
255
|
+
const warningTooltip = `⚠️ ${warning.message}`;
|
|
256
|
+
relationship.tooltip = existingTooltip
|
|
257
|
+
? `${existingTooltip}\n${warningTooltip}`
|
|
258
|
+
: warningTooltip;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return relationship;
|
|
262
|
+
}
|
|
263
|
+
}
|