@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,24 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Constraint: a parallelogram with an internal divider. */
|
|
4
|
+
export class ConstraintGlyph extends Glyph {
|
|
5
|
+
static key = 'constraint';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const skew = w * 0.15;
|
|
12
|
+
const d = `M ${-w / 2 + skew},${-h / 2} L ${w / 2},${-h / 2} L ${w / 2 - skew},${h / 2} L ${-w / 2},${h / 2} Z`;
|
|
13
|
+
const lx0 = -w / 2 + skew * 1.6;
|
|
14
|
+
return G.group([
|
|
15
|
+
G.path(d, ctx.color, st()),
|
|
16
|
+
G.path(`M ${lx0},${-h / 2} L ${lx0 - skew * 0.5},${h / 2}`, 'none', st(0.75)),
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
outline(ctx) {
|
|
20
|
+
const { w, h } = ctx;
|
|
21
|
+
const skew = w * 0.15;
|
|
22
|
+
return [[-w / 2 + skew, -h / 2], [w / 2, -h / 2], [w / 2 - skew, h / 2], [-w / 2, h / 2]];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Node: a 3-face isometric box (front, top, side). */
|
|
4
|
+
export class CubeGlyph extends Glyph {
|
|
5
|
+
static key = 'cube';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const depth = Math.min(w, h) * 0.32;
|
|
12
|
+
const fx0 = -w / 2, fx1 = w / 2 - depth, fy0 = -h / 2 + depth, fy1 = h / 2;
|
|
13
|
+
return G.group([
|
|
14
|
+
G.rect(fx0, fy0, fx1 - fx0, fy1 - fy0, ctx.color, st()),
|
|
15
|
+
G.path(`M ${fx0},${fy0} L ${fx0 + depth},${fy0 - depth} L ${fx1 + depth},${fy0 - depth} L ${fx1},${fy0} Z`, ctx.color, st()),
|
|
16
|
+
G.path(`M ${fx1},${fy0} L ${fx1 + depth},${fy0 - depth} L ${fx1 + depth},${fy1 - depth} L ${fx1},${fy1} Z`, ctx.color, st()),
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Role/Stakeholder: a horizontal drum. */
|
|
4
|
+
export class CylinderGlyph extends Glyph {
|
|
5
|
+
static key = 'cylinder';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const capRx = Math.min(w * 0.17, h * 0.5);
|
|
12
|
+
const cx = w / 2 - capRx;
|
|
13
|
+
return G.group([
|
|
14
|
+
G.path(`M ${-w / 2},${-h / 2} L ${cx},${-h / 2} A ${capRx} ${h / 2} 0 0 1 ${cx},${h / 2} L ${-w / 2},${h / 2} Z`, ctx.color, st()),
|
|
15
|
+
// The cap's far side, so it reads as a tube rather than a pill.
|
|
16
|
+
G.path(`M ${cx},${-h / 2} A ${capRx} ${h / 2} 0 0 0 ${cx},${h / 2}`, 'none', st()),
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
import { DoubleArrowGlyph } from './DoubleArrowGlyph.js';
|
|
3
|
+
|
|
4
|
+
/** Path: a dashed two-headed arrow. */
|
|
5
|
+
export class DashedDoubleArrowGlyph extends DoubleArrowGlyph {
|
|
6
|
+
static key = 'double-arrow-dashed';
|
|
7
|
+
|
|
8
|
+
shaft(w, headW, stroke) {
|
|
9
|
+
return Glyph.path(`M ${-w / 2 + headW * 0.6},0 L ${w / 2 - headW * 0.6},0`, 'none', stroke, { 'stroke-dasharray': '3 3' });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Device: a monitor on a small stand. */
|
|
4
|
+
export class DeviceGlyph extends Glyph {
|
|
5
|
+
static key = 'device';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const screenH = h * 0.60, standH = h * 0.26, standTop = -h / 2 + screenH;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.rect(-w / 2, -h / 2, w, screenH, ctx.color, st(), { rx: h * 0.10 }),
|
|
14
|
+
G.path(`M ${-w * 0.12},${standTop} L ${w * 0.12},${standTop} L ${w * 0.34},${standTop + standH} L ${-w * 0.34},${standTop + standH} Z`, ctx.color, st()),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** A diamond fitted to the smaller side. */
|
|
4
|
+
export class DiamondGlyph extends Glyph {
|
|
5
|
+
static key = 'diamond';
|
|
6
|
+
|
|
7
|
+
parts(ctx) {
|
|
8
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
9
|
+
const r = ctx.circleR;
|
|
10
|
+
const diamondPoints = `0,${-r} ${r},0 0,${r} ${-r},0`;
|
|
11
|
+
return G.path(`M${diamondPoints}Z`, ctx.color, st());
|
|
12
|
+
}
|
|
13
|
+
outline(ctx) {
|
|
14
|
+
const r = ctx.circleR;
|
|
15
|
+
return [[0, -r], [r, 0], [0, r], [-r, 0]];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Artifact: a page with a folded top-right corner. */
|
|
4
|
+
export class DocumentGlyph extends Glyph {
|
|
5
|
+
static key = 'document';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const fold = Math.min(w, h) * 0.20;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.path(`M ${-w / 2},${-h / 2} L ${w / 2 - fold},${-h / 2} L ${w / 2},${-h / 2 + fold} L ${w / 2},${h / 2} L ${-w / 2},${h / 2} Z`, ctx.color, st()),
|
|
14
|
+
G.path(`M ${w / 2 - fold},${-h / 2} L ${w / 2 - fold},${-h / 2 + fold} L ${w / 2},${-h / 2 + fold}`, 'none', st(0.75)),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Communication/Distribution network: a two-headed arrow. */
|
|
4
|
+
export class DoubleArrowGlyph extends Glyph {
|
|
5
|
+
static key = 'double-arrow';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const headW = w * 0.17, headH = h * 0.42;
|
|
12
|
+
return G.group([this.shaft(w, headW, st(1.25)), G.path(DoubleArrowGlyph.heads(w, headW, headH), 'none', st(1.25))]);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
shaft(w, headW, stroke) {
|
|
16
|
+
return Glyph.path(`M ${-w / 2},0 L ${w / 2},0`, 'none', stroke);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static heads(w, headW, headH) {
|
|
20
|
+
return `M ${-w / 2 + headW},${-headH / 2} L ${-w / 2},0 L ${-w / 2 + headW},${headH / 2}`
|
|
21
|
+
+ ` M ${w / 2 - headW},${-headH / 2} L ${w / 2},0 L ${w / 2 - headW},${headH / 2}`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Collaboration: two overlapping circles. */
|
|
4
|
+
export class DoubleCircleGlyph extends Glyph {
|
|
5
|
+
static key = 'double-circle';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const cr = Math.min(w, h) * 0.44, off = cr * 0.55;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.circle(-off, 0, cr, ctx.color, st()),
|
|
14
|
+
G.circle(off, 0, cr, ctx.color, st()),
|
|
15
|
+
// Re-stroke the back circle so the intersection lens reads.
|
|
16
|
+
G.circle(-off, 0, cr, 'none', st()),
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
/** Around both circles. */
|
|
20
|
+
outline(ctx) {
|
|
21
|
+
const cr = Math.min(ctx.w, ctx.h) * 0.44, off = cr * 0.55;
|
|
22
|
+
return [[-off - cr, -cr], [off + cr, -cr], [off + cr, cr], [-off - cr, cr]];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { sampleArc } from '../templates/outline.js';
|
|
2
|
+
import { Glyph } from './Glyph.js';
|
|
3
|
+
|
|
4
|
+
/** Value: an oval. */
|
|
5
|
+
export class EllipseGlyph extends Glyph {
|
|
6
|
+
static key = 'ellipse';
|
|
7
|
+
static ownsInterior = true;
|
|
8
|
+
|
|
9
|
+
parts(ctx) {
|
|
10
|
+
const { w, h } = ctx;
|
|
11
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
12
|
+
const d = `M ${-w / 2},0 A ${w / 2} ${h / 2} 0 1 0 ${w / 2},0 A ${w / 2} ${h / 2} 0 1 0 ${-w / 2},0 Z`;
|
|
13
|
+
return G.path(d, ctx.color, st());
|
|
14
|
+
}
|
|
15
|
+
outline(ctx) {
|
|
16
|
+
return sampleArc(0, 0, ctx.w / 2, ctx.h / 2, 0, Math.PI * 2, 48).slice(0, -1);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Facility: a building with a zigzag roofline. */
|
|
4
|
+
export class FactoryGlyph extends Glyph {
|
|
5
|
+
static key = 'factory';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const eaves = -h * 0.02, peaks = 3, tw = w / peaks;
|
|
12
|
+
let d = `M ${-w / 2},${h / 2} L ${-w / 2},${eaves}`;
|
|
13
|
+
for (let i = 0; i < peaks; i++) {
|
|
14
|
+
const xEnd = -w / 2 + tw * (i + 1);
|
|
15
|
+
d += ` L ${xEnd},${-h / 2} L ${xEnd},${eaves}`;
|
|
16
|
+
}
|
|
17
|
+
d += ` L ${w / 2},${h / 2} Z`;
|
|
18
|
+
return G.path(d, ctx.color, st());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Event: a notched-left, rounded-right pennant. */
|
|
4
|
+
export class FlagGlyph extends Glyph {
|
|
5
|
+
static key = 'flag';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const capX = Math.max(-w / 2, w / 2 - h / 2); // cap is a true semicircle
|
|
12
|
+
const notchX = -w / 2 + w * 0.18;
|
|
13
|
+
const d = `M ${-w / 2},${-h / 2} L ${capX},${-h / 2} A ${h / 2} ${h / 2} 0 0 1 ${capX},${h / 2} L ${-w / 2},${h / 2} L ${notchX},0 Z`;
|
|
14
|
+
return G.path(d, ctx.color, st());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Gap: a circle crossed by two horizontal lines. */
|
|
4
|
+
export class GapCircleGlyph extends Glyph {
|
|
5
|
+
static key = 'gap-circle';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const gr = Math.min(w, h) * 0.3;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.path(`M ${-w / 2},${-h * 0.12} L ${w / 2},${-h * 0.12} M ${-w / 2},${h * 0.12} L ${w / 2},${h * 0.12}`, 'none', st()),
|
|
14
|
+
G.circle(0, 0, gr, ctx.color, st()),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Equipment: two overlapping cogs. */
|
|
4
|
+
export class GearGlyph extends Glyph {
|
|
5
|
+
static key = 'gear';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const makeTeeth = (cx, cy, gr, toothCount) => {
|
|
12
|
+
const toothLen = gr * 0.38, toothW = gr * 0.44;
|
|
13
|
+
let teeth = '';
|
|
14
|
+
for (let i = 0; i < toothCount; i++) {
|
|
15
|
+
const angle = (i / toothCount) * Math.PI * 2;
|
|
16
|
+
const dx = Math.cos(angle), dy = Math.sin(angle), px = -dy, py = dx;
|
|
17
|
+
const tcx = cx + dx * (gr + toothLen / 2), tcy = cy + dy * (gr + toothLen / 2);
|
|
18
|
+
const x1 = tcx - dx * toothLen / 2 - px * toothW / 2, y1 = tcy - dy * toothLen / 2 - py * toothW / 2;
|
|
19
|
+
const x2 = tcx - dx * toothLen / 2 + px * toothW / 2, y2 = tcy - dy * toothLen / 2 + py * toothW / 2;
|
|
20
|
+
const x3 = tcx + dx * toothLen / 2 + px * toothW / 2, y3 = tcy + dy * toothLen / 2 + py * toothW / 2;
|
|
21
|
+
const x4 = tcx + dx * toothLen / 2 - px * toothW / 2, y4 = tcy + dy * toothLen / 2 - py * toothW / 2;
|
|
22
|
+
teeth += `M${x1},${y1} L${x2},${y2} L${x3},${y3} L${x4},${y4} Z `;
|
|
23
|
+
}
|
|
24
|
+
return teeth;
|
|
25
|
+
};
|
|
26
|
+
const bigR = Math.min(w, h) * 0.28, smallR = bigR * 0.60;
|
|
27
|
+
const bigCx = -w * 0.17, bigCy = h * 0.16, smallCx = w * 0.23, smallCy = -h * 0.21;
|
|
28
|
+
return G.group([
|
|
29
|
+
G.path(makeTeeth(bigCx, bigCy, bigR, 8), ctx.color, st(0.5)),
|
|
30
|
+
G.circle(bigCx, bigCy, bigR, ctx.color, st()),
|
|
31
|
+
G.path(makeTeeth(smallCx, smallCy, smallR, 6), ctx.color, st(0.5)),
|
|
32
|
+
G.circle(smallCx, smallCy, smallR, ctx.color, st()),
|
|
33
|
+
G.circle(bigCx, bigCy, bigR * 0.35, '#fff', null),
|
|
34
|
+
G.circle(smallCx, smallCy, smallR * 0.35, '#fff', null),
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glyph — one notation shape (ArchiMate's pill, cube, chevron, ... and the
|
|
3
|
+
* plain graph shapes), described once as renderer-neutral parts so the graph
|
|
4
|
+
* engine and the editor's templates draw exactly the same thing.
|
|
5
|
+
*
|
|
6
|
+
* `parts(ctx)` returns a descriptor tree centred on (0, 0):
|
|
7
|
+
* { type: 'rect', x, y, w, h, fill, stroke, extra?, attrs? }
|
|
8
|
+
* { type: 'circle', cx, cy, r, fill, stroke, attrs? }
|
|
9
|
+
* { type: 'path', d, fill, stroke, attrs? }
|
|
10
|
+
* { type: 'image', href, x, y, w, h, options? }
|
|
11
|
+
* { type: 'text', text, x, y, options? }
|
|
12
|
+
* { type: 'group', children: [...], attrs? }
|
|
13
|
+
* `stroke` is `{color, width}` or null; `extra`/`options` are the renderer's own
|
|
14
|
+
* extra arguments (e.g. `{rx}`); `attrs` are SVG attributes set afterwards
|
|
15
|
+
* (e.g. `stroke-dasharray`). drawGlyph() replays a tree through a renderer.
|
|
16
|
+
*
|
|
17
|
+
* Context: `w`, `h` (box size), `R` (half the larger side), `circleR` (half the
|
|
18
|
+
* smaller side), `color` (fill), `strokeColor`, `strokeWidth`, `cornerStyle`,
|
|
19
|
+
* `icon`, `iconUrl`.
|
|
20
|
+
*/
|
|
21
|
+
export class Glyph {
|
|
22
|
+
/** Shape name a node or element type asks for ('pill', 'cube', ...). */
|
|
23
|
+
static key = null;
|
|
24
|
+
/** True when the shape is busy enough that no centred icon or initials go on top of it. */
|
|
25
|
+
static ownsInterior = false;
|
|
26
|
+
|
|
27
|
+
/** @returns {Object} descriptor tree, centred on (0, 0) */
|
|
28
|
+
parts(ctx) {
|
|
29
|
+
throw new Error(`${this.constructor.name} must implement parts()`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The visible outline as a closed polygon centred on (0, 0), for attaching
|
|
34
|
+
* lines exactly (curves sampled). The box by default; a shape whose edge
|
|
35
|
+
* is clearly not its box overrides it.
|
|
36
|
+
* @returns {Array<[number, number]>}
|
|
37
|
+
*/
|
|
38
|
+
outline(ctx) {
|
|
39
|
+
const { w, h } = ctx;
|
|
40
|
+
return [[-w / 2, -h / 2], [w / 2, -h / 2], [w / 2, h / 2], [-w / 2, h / 2]];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The outline stroke, its width scaled by `scale` (omitted = as given). */
|
|
44
|
+
stroke(ctx, scale) {
|
|
45
|
+
return { color: ctx.strokeColor, width: scale === undefined ? ctx.strokeWidth : ctx.strokeWidth * scale };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Drawing context for a node: `size` ({w, h}) when it has its own box,
|
|
50
|
+
* otherwise a square of side 2R.
|
|
51
|
+
*/
|
|
52
|
+
static context({ R, size, color, cornerStyle, strokeColor = '#fff', strokeWidth = 2, iconUrl = null, icon = null, ownFill = null }) {
|
|
53
|
+
return {
|
|
54
|
+
R,
|
|
55
|
+
w: size?.w ?? R * 2,
|
|
56
|
+
h: size?.h ?? R * 2,
|
|
57
|
+
circleR: size ? Math.min(size.w, size.h) / 2 : R,
|
|
58
|
+
// ownFill: a fill set on the item itself (null: it takes its kind's), for a glyph with a look of its own (a note).
|
|
59
|
+
color, cornerStyle, strokeColor, strokeWidth, iconUrl, icon, ownFill,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
static rect(x, y, w, h, fill, stroke, extra, attrs) {
|
|
64
|
+
return { type: 'rect', x, y, w, h, fill, stroke, extra, attrs };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static circle(cx, cy, r, fill, stroke, attrs) {
|
|
68
|
+
return { type: 'circle', cx, cy, r, fill, stroke, attrs };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static path(d, fill, stroke, attrs) {
|
|
72
|
+
return { type: 'path', d, fill, stroke, attrs };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
static image(href, x, y, w, h, options) {
|
|
76
|
+
return { type: 'image', href, x, y, w, h, options };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static text(text, x, y, options) {
|
|
80
|
+
return { type: 'text', text, x, y, options };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static group(children, attrs) {
|
|
84
|
+
return { type: 'group', children, attrs };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Box corner radius: 'sharp' 0, 'rounded' (ArchiMate behavior) quite round, otherwise a small 3. */
|
|
88
|
+
static cornerRadius(cornerStyle, w, h) {
|
|
89
|
+
return cornerStyle === 'sharp' ? 0 : cornerStyle === 'rounded' ? Math.min(w, h) * 0.28 : 3;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** SVG path for a w x h box centred on the origin with all four corners cut at 45° (ArchiMate Motivation). */
|
|
93
|
+
static chamferedRectPath(w, h, chamfer) {
|
|
94
|
+
const hw = w / 2, hh = h / 2;
|
|
95
|
+
const c = Math.min(chamfer ?? Math.min(w, h) * 0.18, hw, hh);
|
|
96
|
+
return `M${-hw + c},${-hh} L${hw - c},${-hh} L${hw},${-hh + c} L${hw},${hh - c} L${hw - c},${hh} L${-hw + c},${hh} L${-hw},${hh - c} L${-hw},${-hh + c} Z`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Grouping: a box with a dashed outline. */
|
|
4
|
+
export class GroupingBoxGlyph extends Glyph {
|
|
5
|
+
static key = 'grouping-box';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
return G.rect(-w / 2, -h / 2, w, h, ctx.color, st(), undefined, { 'stroke-dasharray': '6 4' });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Interaction: two facing half-discs. */
|
|
4
|
+
export class HalfCircleGlyph extends Glyph {
|
|
5
|
+
static key = 'half-circle';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const hr = Math.min(w, h) / 2 * 0.92, gap = hr * 0.20;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.path(`M ${-gap},${-hr} A ${hr} ${hr} 0 0 0 ${-gap},${hr} Z`, ctx.color, st()),
|
|
14
|
+
G.path(`M ${gap},${-hr} A ${hr} ${hr} 0 0 1 ${gap},${hr} Z`, ctx.color, st()),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
/** Around both half-discs. */
|
|
18
|
+
outline(ctx) {
|
|
19
|
+
const hr = Math.min(ctx.w, ctx.h) / 2 * 0.92, gap = hr * 0.20;
|
|
20
|
+
return [[-gap - hr, -hr], [gap + hr, -hr], [gap + hr, hr], [-gap - hr, hr]];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Material: a hexagon, flat top and bottom, with the spec's two slashes and underscore. */
|
|
4
|
+
export class HexagonGlyph extends Glyph {
|
|
5
|
+
static key = 'hexagon';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const pts = [0, 1, 2, 3, 4, 5].map(i => {
|
|
12
|
+
const a = (Math.PI / 3) * i;
|
|
13
|
+
return [Math.cos(a) * w / 2, Math.sin(a) * h / 2];
|
|
14
|
+
});
|
|
15
|
+
return G.group([
|
|
16
|
+
G.path(`M${pts.map(p => p.join(',')).join(' L')}Z`, ctx.color, st()),
|
|
17
|
+
G.path(
|
|
18
|
+
`M ${-w * 0.16},${-h * 0.18} L ${-w * 0.06},${h * 0.10}`
|
|
19
|
+
+ ` M ${w * 0.04},${-h * 0.18} L ${w * 0.14},${h * 0.10}`
|
|
20
|
+
+ ` M ${-w * 0.18},${h * 0.26} L ${w * 0.06},${h * 0.26}`,
|
|
21
|
+
'none', st(0.75)),
|
|
22
|
+
]);
|
|
23
|
+
}
|
|
24
|
+
outline(ctx) {
|
|
25
|
+
const { w, h } = ctx;
|
|
26
|
+
return [0, 1, 2, 3, 4, 5].map(i => [Math.cos((Math.PI / 3) * i) * w / 2, Math.sin((Math.PI / 3) * i) * h / 2]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** A box with the node's own icon (`iconUrl` or `icon` text) large in the middle. */
|
|
4
|
+
export class IconGlyph extends Glyph {
|
|
5
|
+
static key = 'icon';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const rx = Glyph.cornerRadius(ctx.cornerStyle, w, h);
|
|
12
|
+
const parts = [G.rect(-w / 2, -h / 2, w, h, ctx.color, st(), { rx })];
|
|
13
|
+
if (ctx.iconUrl) {
|
|
14
|
+
const imgSize = Math.min(w, h) * 0.7;
|
|
15
|
+
parts.push(G.image(ctx.iconUrl, -imgSize / 2, -imgSize / 2, imgSize, imgSize, { 'pointer-events': 'none' }));
|
|
16
|
+
} else if (ctx.icon) {
|
|
17
|
+
const iconSize = Math.min(w, h) * 0.6;
|
|
18
|
+
parts.push(G.text(ctx.icon, 0, 0, { fill: '#fff', textAnchor: 'middle', verticalAlign: 'middle', fontSize: `${iconSize}px`, 'pointer-events': 'none' }));
|
|
19
|
+
}
|
|
20
|
+
return G.group(parts);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** A picture filling the box (`iconUrl`), with a light border showing its bounds. */
|
|
4
|
+
export class ImageGlyph extends Glyph {
|
|
5
|
+
static key = 'image';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
return G.group([
|
|
12
|
+
G.rect(-w / 2, -h / 2, w, h, 'none', { color: '#ccc', width: 1 }),
|
|
13
|
+
G.image(ctx.iconUrl || '', -w / 2, -h / 2, w, h, { preserveAspectRatio: 'none', 'pointer-events': 'none' }),
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { sampleArc } from '../templates/outline.js';
|
|
2
|
+
import { Glyph } from './Glyph.js';
|
|
3
|
+
|
|
4
|
+
/** (And) Junction: a small solid dot. */
|
|
5
|
+
export class JunctionGlyph extends Glyph {
|
|
6
|
+
static key = 'junction';
|
|
7
|
+
static ownsInterior = true;
|
|
8
|
+
|
|
9
|
+
parts(ctx) {
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
return G.circle(0, 0, ctx.circleR * 0.4, ctx.strokeColor, st(0.75));
|
|
12
|
+
}
|
|
13
|
+
outline(ctx) {
|
|
14
|
+
const r = ctx.circleR * 0.4;
|
|
15
|
+
return sampleArc(0, 0, r, r, 0, Math.PI * 2, 24).slice(0, -1);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Interface: a stub line into a small circle. */
|
|
4
|
+
export class LollipopGlyph extends Glyph {
|
|
5
|
+
static key = 'lollipop';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const cr = Math.min(w, h) * 0.28;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.path(`M ${-w / 2},0 L ${w / 2 - cr * 2},0`, 'none', st(1.25)),
|
|
14
|
+
G.circle(w / 2 - cr, 0, cr, ctx.color, st()),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
/** The stub and circle: full width, the circle's height. */
|
|
18
|
+
outline(ctx) {
|
|
19
|
+
const cr = Math.min(ctx.w, ctx.h) * 0.28;
|
|
20
|
+
return [[-ctx.w / 2, -cr], [ctx.w / 2, -cr], [ctx.w / 2, cr], [-ctx.w / 2, cr]];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Assessment: a magnifying glass. */
|
|
4
|
+
export class MagnifierGlyph extends Glyph {
|
|
5
|
+
static key = 'magnifier';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const gr = Math.min(w, h) * 0.30, cx = w * 0.10, cy = -h * 0.12;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.circle(cx, cy, gr, ctx.color, st()),
|
|
14
|
+
G.path(`M ${cx - gr * 0.72},${cy + gr * 0.72} L ${-w * 0.40},${h * 0.44}`, 'none', st(1.25)),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A sticky note: a body with a folded bottom-right corner (a view annotation,
|
|
5
|
+
* not an element), yellow unless the note has a fill of its own (ctx.ownFill);
|
|
6
|
+
* the fold a shade darker.
|
|
7
|
+
*/
|
|
8
|
+
export class NoteGlyph extends Glyph {
|
|
9
|
+
static DEFAULT_FILL = '#fff9c4';
|
|
10
|
+
static DEFAULT_FOLD = '#e8df9e';
|
|
11
|
+
|
|
12
|
+
static key = 'note';
|
|
13
|
+
static ownsInterior = true;
|
|
14
|
+
|
|
15
|
+
parts(ctx) {
|
|
16
|
+
const { w, h } = ctx;
|
|
17
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
18
|
+
const fold = Math.min(w, h) * 0.22;
|
|
19
|
+
const noteFill = ctx.ownFill || NoteGlyph.DEFAULT_FILL;
|
|
20
|
+
const noteStroke = { color: '#b8ad76', width: 1.2 };
|
|
21
|
+
const outline = `M ${-w / 2},${-h / 2} L ${w / 2},${-h / 2} L ${w / 2},${h / 2 - fold} L ${w / 2 - fold},${h / 2} L ${-w / 2},${h / 2} Z`;
|
|
22
|
+
const flap = `M ${w / 2 - fold},${h / 2} L ${w / 2},${h / 2 - fold} L ${w / 2},${h / 2} Z`;
|
|
23
|
+
return G.group([G.path(outline, noteFill, noteStroke), G.path(flap, ctx.ownFill ? NoteGlyph.shade(noteFill) : NoteGlyph.DEFAULT_FOLD, noteStroke)]);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** A colour a shade darker (the fold); one it cannot read (none, a name) as it is. */
|
|
27
|
+
static shade(colour, factor = 0.88) {
|
|
28
|
+
const m = String(colour).match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
|
|
29
|
+
if (!m) return colour;
|
|
30
|
+
const hex = m[1].length === 3 ? [...m[1]].map(c => c + c).join('') : m[1];
|
|
31
|
+
return '#' + [0, 2, 4].map(i => Math.round(parseInt(hex.slice(i, i + 2), 16) * factor).toString(16).padStart(2, '0')).join('');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Business/Data Object: a box with one bar under its top. */
|
|
4
|
+
export class ObjectBoxGlyph extends Glyph {
|
|
5
|
+
static key = 'object-box';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const { w, h } = ctx;
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
return G.group([
|
|
12
|
+
G.rect(-w / 2, -h / 2, w, h, ctx.color, st()),
|
|
13
|
+
G.path(this.bars(h).map(y => `M ${-w / 2},${y} L ${w / 2},${y}`).join(' '), 'none', st()),
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Heights of the bars across the box. */
|
|
18
|
+
bars(h) {
|
|
19
|
+
return [-h * 0.22];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { sampleArc } from '../templates/outline.js';
|
|
2
|
+
import { Glyph } from './Glyph.js';
|
|
3
|
+
|
|
4
|
+
/** (Or) Junction: the same dot, hollow. */
|
|
5
|
+
export class OrJunctionGlyph extends Glyph {
|
|
6
|
+
static key = 'junction-or';
|
|
7
|
+
static ownsInterior = true;
|
|
8
|
+
|
|
9
|
+
parts(ctx) {
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
return G.circle(0, 0, ctx.circleR * 0.4, '#ffffff', st());
|
|
12
|
+
}
|
|
13
|
+
outline(ctx) {
|
|
14
|
+
const r = ctx.circleR * 0.4;
|
|
15
|
+
return sampleArc(0, 0, r, r, 0, Math.PI * 2, 24).slice(0, -1);
|
|
16
|
+
}
|
|
17
|
+
}
|