@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,20 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Requirement: a skewed box. */
|
|
4
|
+
export class ParallelogramGlyph extends Glyph {
|
|
5
|
+
static key = 'parallelogram';
|
|
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
|
+
return G.path(d, ctx.color, st());
|
|
14
|
+
}
|
|
15
|
+
outline(ctx) {
|
|
16
|
+
const { w, h } = ctx;
|
|
17
|
+
const skew = w * 0.15;
|
|
18
|
+
return [[-w / 2 + skew, -h / 2], [w / 2, -h / 2], [w / 2 - skew, h / 2], [-w / 2, h / 2]];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** A disc with a white head-and-shoulders silhouette. */
|
|
4
|
+
export class PersonGlyph extends Glyph {
|
|
5
|
+
static key = 'person';
|
|
6
|
+
static ownsInterior = true;
|
|
7
|
+
|
|
8
|
+
parts(ctx) {
|
|
9
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
10
|
+
const r = ctx.circleR;
|
|
11
|
+
const headR = r * 0.30;
|
|
12
|
+
const headY = -(r * 0.28);
|
|
13
|
+
const neckY = headY + headR + r * 0.05;
|
|
14
|
+
const bodyW = r * 0.55;
|
|
15
|
+
const bodyH = r * 0.88;
|
|
16
|
+
const bodyPath = `M ${-bodyW},${bodyH} Q ${-bodyW},${neckY} 0,${neckY} Q ${bodyW},${neckY} ${bodyW},${bodyH} Z`;
|
|
17
|
+
return G.group([
|
|
18
|
+
G.circle(0, 0, r, ctx.color, st()),
|
|
19
|
+
G.circle(0, headY, headR, '#fff', null, { opacity: 0.92 }),
|
|
20
|
+
G.path(bodyPath, '#fff', null, { opacity: 0.92 }),
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { sampleArc } from '../templates/outline.js';
|
|
2
|
+
import { Glyph } from './Glyph.js';
|
|
3
|
+
|
|
4
|
+
/** Service: a fully rounded "stadium" box. */
|
|
5
|
+
export class PillGlyph extends Glyph {
|
|
6
|
+
static key = 'pill';
|
|
7
|
+
static ownsInterior = true;
|
|
8
|
+
|
|
9
|
+
parts(ctx) {
|
|
10
|
+
const { w, h } = ctx;
|
|
11
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
12
|
+
return G.rect(-w / 2, -h / 2, w, h, ctx.color, st(), { rx: h / 2 });
|
|
13
|
+
}
|
|
14
|
+
/** Two semicircular caps joined by straight sides. */
|
|
15
|
+
outline(ctx) {
|
|
16
|
+
const { w, h } = ctx;
|
|
17
|
+
const r = Math.min(h / 2, w / 2), cx = w / 2 - r;
|
|
18
|
+
return [
|
|
19
|
+
...sampleArc(cx, 0, r, r, -Math.PI / 2, Math.PI / 2, 16),
|
|
20
|
+
...sampleArc(-cx, 0, r, r, Math.PI / 2, Math.PI * 1.5, 16),
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Location: a map pin. */
|
|
4
|
+
export class PinGlyph extends Glyph {
|
|
5
|
+
static key = 'pin';
|
|
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) * 0.36, cy = -h / 2 + hr;
|
|
12
|
+
return G.path(
|
|
13
|
+
`M 0,${h / 2} C ${-hr * 0.78},${cy + hr * 1.05} ${-hr},${cy + hr * 0.55} ${-hr},${cy}`
|
|
14
|
+
+ ` A ${hr} ${hr} 0 1 1 ${hr},${cy}`
|
|
15
|
+
+ ` C ${hr},${cy + hr * 0.55} ${hr * 0.78},${cy + hr * 1.05} 0,${h / 2} Z`,
|
|
16
|
+
ctx.color, st());
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Principle: a rounded square with an exclamation mark. */
|
|
4
|
+
export class PrincipleGlyph extends Glyph {
|
|
5
|
+
static key = 'principle';
|
|
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 s = Math.min(w, h) * 0.7;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.rect(-s / 2, -s / 2, s, s, ctx.color, st(), { rx: s * 0.15 }),
|
|
14
|
+
G.path(`M0,${-s * 0.30} L0,${s * 0.06}`, 'none', { color: ctx.strokeColor, width: s * 0.17 }),
|
|
15
|
+
G.circle(0, s * 0.27, s * 0.095, ctx.strokeColor, null),
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
/** The square it draws, smaller than its box. */
|
|
19
|
+
outline(ctx) {
|
|
20
|
+
const s = Math.min(ctx.w, ctx.h) * 0.7;
|
|
21
|
+
return [[-s / 2, -s / 2], [s / 2, -s / 2], [s / 2, s / 2], [-s / 2, s / 2]];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Product: a box with a short bar, top-left only. */
|
|
4
|
+
export class ProductBoxGlyph extends Glyph {
|
|
5
|
+
static key = 'product-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(`M ${-w / 2},${-h * 0.22} L ${-w * 0.1},${-h * 0.22} L ${-w * 0.1},${-h / 2}`, 'none', st()),
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** A box; `cornerStyle` picks sharp, rounded or chamfered (ArchiMate Motivation) corners. */
|
|
4
|
+
export class RectGlyph extends Glyph {
|
|
5
|
+
static key = 'rect';
|
|
6
|
+
|
|
7
|
+
parts(ctx) {
|
|
8
|
+
const { w, h } = ctx;
|
|
9
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
10
|
+
if (ctx.cornerStyle === 'chamfered') return G.path(Glyph.chamferedRectPath(w, h), ctx.color, st());
|
|
11
|
+
// undefined (plain graphDiagram) -> a small rx 3; 'sharp' is a real 0; 'rounded' (ArchiMate
|
|
12
|
+
// behavior) is quite round, capped so a small box doesn't turn circular.
|
|
13
|
+
return G.rect(-w / 2, -h / 2, w, h, ctx.color, st(), { rx: Glyph.cornerRadius(ctx.cornerStyle, w, h) });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Work Package: a plain rounded box. */
|
|
4
|
+
export class RoundedBoxGlyph extends Glyph {
|
|
5
|
+
static key = 'rounded-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(), { rx: Math.min(w, h) * 0.22 });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Plateau: three stacked bars. */
|
|
4
|
+
export class StackGlyph extends Glyph {
|
|
5
|
+
static key = 'stack';
|
|
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 barH = h * 0.15, gap = h * 0.25, bw = w * 0.86;
|
|
12
|
+
return G.group([-gap, 0, gap].map(dy => G.rect(-bw / 2, dy - barH / 2, bw, barH, ctx.strokeColor, null)));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Capability: an ascending staircase of squares. */
|
|
4
|
+
export class StepsGlyph extends Glyph {
|
|
5
|
+
static key = 'steps';
|
|
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 cols = 3, cellW = w / cols, cellH = h / cols;
|
|
12
|
+
const parts = [];
|
|
13
|
+
for (let col = 0; col < cols; col++) {
|
|
14
|
+
for (let row = cols - 1 - col; row < cols; row++) {
|
|
15
|
+
parts.push(G.rect(-w / 2 + col * cellW, -h / 2 + row * cellH, cellW, cellH, ctx.color, st(0.75)));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return G.group(parts);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Business Actor: the spec's stick figure. */
|
|
4
|
+
export class StickFigureGlyph extends Glyph {
|
|
5
|
+
static key = 'stick-figure';
|
|
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 s = Math.min(w, h);
|
|
12
|
+
const headR = s * 0.17;
|
|
13
|
+
const headCy = -s / 2 + headR;
|
|
14
|
+
const neckY = headCy + headR;
|
|
15
|
+
const hipY = neckY + s * 0.26;
|
|
16
|
+
const footY = s / 2;
|
|
17
|
+
const armY = neckY + s * 0.07;
|
|
18
|
+
return G.group([
|
|
19
|
+
G.circle(0, headCy, headR, ctx.color, st()),
|
|
20
|
+
G.path(
|
|
21
|
+
`M0,${neckY} L0,${hipY}`
|
|
22
|
+
+ ` M${-s * 0.30},${armY} L${s * 0.30},${armY}`
|
|
23
|
+
+ ` M0,${hipY} L${-s * 0.26},${footY} M0,${hipY} L${s * 0.26},${footY}`,
|
|
24
|
+
'none', st(1.4)),
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
/** The figure's own extent: arm span by head-to-feet. */
|
|
28
|
+
outline(ctx) {
|
|
29
|
+
const s = Math.min(ctx.w, ctx.h);
|
|
30
|
+
return [[-s * 0.30, -s / 2], [s * 0.30, -s / 2], [s * 0.30, s / 2], [-s * 0.30, s / 2]];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** System Software: a box with a circle on it. */
|
|
4
|
+
export class SystemSoftwareBoxGlyph extends Glyph {
|
|
5
|
+
static key = 'system-software-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.circle(w * 0.22, -h * 0.08, Math.min(w, h) * 0.26, ctx.color, st()),
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** How tall the tab is, and its share of the width (capped), as Archi draws a group. */
|
|
4
|
+
export const TAB_HEIGHT = 18;
|
|
5
|
+
const TAB_SHARE = 0.5, TAB_MAX = 160;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Archi's group: a box with a name tab on its top-left corner. The tab is
|
|
9
|
+
* part of the outline, so lines end at it; `ctx.size` is the whole shape,
|
|
10
|
+
* tab included.
|
|
11
|
+
*/
|
|
12
|
+
export class TabbedBoxGlyph extends Glyph {
|
|
13
|
+
static key = 'tabbed-box';
|
|
14
|
+
static ownsInterior = true;
|
|
15
|
+
|
|
16
|
+
/** The tab's width for a shape `w` wide. */
|
|
17
|
+
static tabWidth(w) {
|
|
18
|
+
return Math.min(w * TAB_SHARE, TAB_MAX);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
parts(ctx) {
|
|
22
|
+
const { w, h } = ctx;
|
|
23
|
+
const tab = TabbedBoxGlyph.tabWidth(w);
|
|
24
|
+
const st = this.stroke(ctx);
|
|
25
|
+
return Glyph.group([
|
|
26
|
+
Glyph.rect(-w / 2, -h / 2, tab, TAB_HEIGHT, ctx.color, st),
|
|
27
|
+
Glyph.rect(-w / 2, -h / 2 + TAB_HEIGHT, w, h - TAB_HEIGHT, ctx.color, st),
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
outline(ctx) {
|
|
32
|
+
const { w, h } = ctx;
|
|
33
|
+
const tab = TabbedBoxGlyph.tabWidth(w);
|
|
34
|
+
const top = -h / 2, body = top + TAB_HEIGHT;
|
|
35
|
+
return [[-w / 2, top], [-w / 2 + tab, top], [-w / 2 + tab, body], [w / 2, body], [w / 2, h / 2], [-w / 2, h / 2]];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { sampleArc } from '../templates/outline.js';
|
|
2
|
+
import { Glyph } from './Glyph.js';
|
|
3
|
+
|
|
4
|
+
/** Goal/Outcome/Course of Action: a bullseye. */
|
|
5
|
+
export class TargetGlyph extends Glyph {
|
|
6
|
+
static key = 'target';
|
|
7
|
+
static ownsInterior = true;
|
|
8
|
+
|
|
9
|
+
parts(ctx) {
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const rr = ctx.circleR * 0.92;
|
|
12
|
+
return G.group([
|
|
13
|
+
G.circle(0, 0, rr, ctx.color, st()),
|
|
14
|
+
G.circle(0, 0, rr * 0.62, 'none', st()),
|
|
15
|
+
G.circle(0, 0, rr * 0.26, ctx.strokeColor, null),
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
/** The bullseye's outer ring. */
|
|
19
|
+
outline(ctx) {
|
|
20
|
+
const r = ctx.circleR * 0.92;
|
|
21
|
+
return sampleArc(0, 0, r, r, 0, Math.PI * 2, 48).slice(0, -1);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Glyph } from './Glyph.js';
|
|
2
|
+
|
|
3
|
+
/** Representation/Deliverable: a box with a wavy bottom edge. */
|
|
4
|
+
export class WavyBoxGlyph extends Glyph {
|
|
5
|
+
static key = 'wavy-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
|
+
const y0 = h * 0.30, amp = h * 0.22;
|
|
12
|
+
return G.path(
|
|
13
|
+
`M ${-w / 2},${-h / 2} L ${w / 2},${-h / 2} L ${w / 2},${y0}`
|
|
14
|
+
+ ` Q ${w * 0.25},${y0 + amp} 0,${y0} Q ${-w * 0.25},${y0 - amp} ${-w / 2},${y0} Z`,
|
|
15
|
+
ctx.color, st());
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { sampleArc } from '../templates/outline.js';
|
|
2
|
+
import { Glyph } from './Glyph.js';
|
|
3
|
+
|
|
4
|
+
/** Driver: a steering wheel (rim, spokes, hub). */
|
|
5
|
+
export class WheelGlyph extends Glyph {
|
|
6
|
+
static key = 'wheel';
|
|
7
|
+
static ownsInterior = true;
|
|
8
|
+
|
|
9
|
+
parts(ctx) {
|
|
10
|
+
const G = Glyph, st = (k) => this.stroke(ctx, k);
|
|
11
|
+
const gr = ctx.circleR * 0.9, spokes = 8;
|
|
12
|
+
let spokePaths = '';
|
|
13
|
+
for (let i = 0; i < spokes; i++) {
|
|
14
|
+
const a = (i / spokes) * Math.PI * 2;
|
|
15
|
+
spokePaths += `M0,0 L${Math.cos(a) * gr * 0.85},${Math.sin(a) * gr * 0.85} `;
|
|
16
|
+
}
|
|
17
|
+
return G.group([
|
|
18
|
+
G.circle(0, 0, gr * 0.9, 'none', { color: ctx.strokeColor, width: gr * 0.2 }),
|
|
19
|
+
G.path(spokePaths, 'none', st(1.25)),
|
|
20
|
+
G.circle(0, 0, gr * 0.26, ctx.strokeColor, null),
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
/** The rim's outer edge. */
|
|
24
|
+
outline(ctx) {
|
|
25
|
+
const r = ctx.circleR * 0.9;
|
|
26
|
+
return sampleArc(0, 0, r, r, 0, Math.PI * 2, 48).slice(0, -1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replay a glyph's descriptor tree (see Glyph) through a renderer's
|
|
3
|
+
* primitives. A group is created before its children, as hand-written
|
|
4
|
+
* drawing code does, so the renderer's element map keeps the same order.
|
|
5
|
+
* @returns {Element} the drawn element (a group for a group descriptor)
|
|
6
|
+
*/
|
|
7
|
+
export function drawGlyph(renderer, part) {
|
|
8
|
+
const el = part.type === 'group' ? drawGroup(renderer, part) : drawOne(renderer, part);
|
|
9
|
+
for (const [name, value] of Object.entries(part.attrs ?? {})) el.setAttribute(name, value);
|
|
10
|
+
return el;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function drawGroup(renderer, part) {
|
|
14
|
+
const group = renderer.group();
|
|
15
|
+
for (const child of part.children) group.appendChild(drawGlyph(renderer, child));
|
|
16
|
+
return group;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function drawOne(renderer, part) {
|
|
20
|
+
switch (part.type) {
|
|
21
|
+
case 'rect': return renderer.rect(part.x, part.y, part.w, part.h, part.fill, part.stroke, part.extra);
|
|
22
|
+
case 'circle': return renderer.circle(part.cx, part.cy, part.r, part.fill, part.stroke);
|
|
23
|
+
case 'path': return renderer.path(part.d, part.fill, part.stroke);
|
|
24
|
+
case 'image': return renderer.image(part.href, part.x, part.y, part.w, part.h, part.options);
|
|
25
|
+
case 'text': return renderer.text(part.text, part.x, part.y, part.options);
|
|
26
|
+
default: throw new TypeError(`Unknown glyph part "${part.type}"`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { svgEl } from '../templates/svg.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The SVG tag, attributes and text for one glyph part, by the same rules the
|
|
5
|
+
* SVG renderer applies to its primitives (an unset fill is `none`; a stroke
|
|
6
|
+
* gives `stroke` and `stroke-width`), so a glyph drawn by the editor's
|
|
7
|
+
* templates looks like the one the graph engine draws. Pure: no DOM.
|
|
8
|
+
* @returns {{tag: string, attrs: Object, text?: string, children?: Array}}
|
|
9
|
+
*/
|
|
10
|
+
export function glyphElement(part) {
|
|
11
|
+
const stroke = (s) => (s ? { stroke: s.color || 'none', 'stroke-width': s.width || 1 } : {});
|
|
12
|
+
const withAttrs = (attrs) => ({ ...attrs, ...(part.attrs ?? {}) });
|
|
13
|
+
switch (part.type) {
|
|
14
|
+
case 'group':
|
|
15
|
+
return { tag: 'g', attrs: withAttrs({}), children: part.children.map(glyphElement) };
|
|
16
|
+
case 'rect':
|
|
17
|
+
return { tag: 'rect', attrs: withAttrs({ x: part.x, y: part.y, width: part.w, height: part.h, fill: part.fill || 'none', ...(part.extra ?? {}), ...stroke(part.stroke) }) };
|
|
18
|
+
case 'circle':
|
|
19
|
+
return { tag: 'circle', attrs: withAttrs({ cx: part.cx, cy: part.cy, r: part.r, fill: part.fill || 'none', ...stroke(part.stroke) }) };
|
|
20
|
+
case 'path':
|
|
21
|
+
return { tag: 'path', attrs: withAttrs({ d: part.d, fill: part.fill || 'none', ...stroke(part.stroke) }) };
|
|
22
|
+
case 'image': {
|
|
23
|
+
const o = part.options ?? {};
|
|
24
|
+
return {
|
|
25
|
+
tag: 'image',
|
|
26
|
+
attrs: { href: part.href, x: part.x, y: part.y, width: part.w, height: part.h, preserveAspectRatio: o.preserveAspectRatio || 'xMidYMid meet', 'pointer-events': o['pointer-events'] },
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
case 'text': {
|
|
30
|
+
const o = part.options ?? {};
|
|
31
|
+
return {
|
|
32
|
+
tag: 'text',
|
|
33
|
+
text: part.text,
|
|
34
|
+
attrs: {
|
|
35
|
+
x: part.x, y: part.y, fill: o.fill || 'black', 'font-family': o.fontFamily || 'sans-serif',
|
|
36
|
+
'font-size': o.fontSize || '12px', 'text-anchor': o.textAnchor || 'start',
|
|
37
|
+
'dominant-baseline': o.verticalAlign === 'middle' ? 'middle' : null, 'pointer-events': o['pointer-events'],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
default:
|
|
42
|
+
throw new TypeError(`Unknown glyph part "${part.type}"`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Build a glyph's parts as SVG elements (a group stays a <g>). */
|
|
47
|
+
export function glyphToSvg(part, doc = document) {
|
|
48
|
+
const build = ({ tag, attrs, text, children }) => {
|
|
49
|
+
const el = svgEl(tag, attrs, doc);
|
|
50
|
+
if (text !== undefined) el.textContent = text;
|
|
51
|
+
for (const child of children ?? []) el.appendChild(build(child));
|
|
52
|
+
return el;
|
|
53
|
+
};
|
|
54
|
+
return build(glyphElement(part));
|
|
55
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { RectGlyph } from './RectGlyph.js';
|
|
2
|
+
import { NoteGlyph } from './NoteGlyph.js';
|
|
3
|
+
import { ImageGlyph } from './ImageGlyph.js';
|
|
4
|
+
import { IconGlyph } from './IconGlyph.js';
|
|
5
|
+
import { DiamondGlyph } from './DiamondGlyph.js';
|
|
6
|
+
import { PersonGlyph } from './PersonGlyph.js';
|
|
7
|
+
import { PillGlyph } from './PillGlyph.js';
|
|
8
|
+
import { ArrowGlyph } from './ArrowGlyph.js';
|
|
9
|
+
import { ChevronGlyph } from './ChevronGlyph.js';
|
|
10
|
+
import { FlagGlyph } from './FlagGlyph.js';
|
|
11
|
+
import { HalfCircleGlyph } from './HalfCircleGlyph.js';
|
|
12
|
+
import { DoubleCircleGlyph } from './DoubleCircleGlyph.js';
|
|
13
|
+
import { LollipopGlyph } from './LollipopGlyph.js';
|
|
14
|
+
import { CylinderGlyph } from './CylinderGlyph.js';
|
|
15
|
+
import { CubeGlyph } from './CubeGlyph.js';
|
|
16
|
+
import { TargetGlyph } from './TargetGlyph.js';
|
|
17
|
+
import { StickFigureGlyph } from './StickFigureGlyph.js';
|
|
18
|
+
import { JunctionGlyph } from './JunctionGlyph.js';
|
|
19
|
+
import { OrJunctionGlyph } from './OrJunctionGlyph.js';
|
|
20
|
+
import { HexagonGlyph } from './HexagonGlyph.js';
|
|
21
|
+
import { ObjectBoxGlyph } from './ObjectBoxGlyph.js';
|
|
22
|
+
import { ContractBoxGlyph } from './ContractBoxGlyph.js';
|
|
23
|
+
import { ProductBoxGlyph } from './ProductBoxGlyph.js';
|
|
24
|
+
import { WavyBoxGlyph } from './WavyBoxGlyph.js';
|
|
25
|
+
import { SystemSoftwareBoxGlyph } from './SystemSoftwareBoxGlyph.js';
|
|
26
|
+
import { GroupingBoxGlyph } from './GroupingBoxGlyph.js';
|
|
27
|
+
import { TabbedBoxGlyph } from './TabbedBoxGlyph.js';
|
|
28
|
+
import { RoundedBoxGlyph } from './RoundedBoxGlyph.js';
|
|
29
|
+
import { ComponentGlyph } from './ComponentGlyph.js';
|
|
30
|
+
import { FactoryGlyph } from './FactoryGlyph.js';
|
|
31
|
+
import { DeviceGlyph } from './DeviceGlyph.js';
|
|
32
|
+
import { StepsGlyph } from './StepsGlyph.js';
|
|
33
|
+
import { WheelGlyph } from './WheelGlyph.js';
|
|
34
|
+
import { MagnifierGlyph } from './MagnifierGlyph.js';
|
|
35
|
+
import { StackGlyph } from './StackGlyph.js';
|
|
36
|
+
import { GapCircleGlyph } from './GapCircleGlyph.js';
|
|
37
|
+
import { PrincipleGlyph } from './PrincipleGlyph.js';
|
|
38
|
+
import { ConstraintGlyph } from './ConstraintGlyph.js';
|
|
39
|
+
import { DoubleArrowGlyph } from './DoubleArrowGlyph.js';
|
|
40
|
+
import { DashedDoubleArrowGlyph } from './DashedDoubleArrowGlyph.js';
|
|
41
|
+
import { PinGlyph } from './PinGlyph.js';
|
|
42
|
+
import { CloudGlyph } from './CloudGlyph.js';
|
|
43
|
+
import { DocumentGlyph } from './DocumentGlyph.js';
|
|
44
|
+
import { ParallelogramGlyph } from './ParallelogramGlyph.js';
|
|
45
|
+
import { EllipseGlyph } from './EllipseGlyph.js';
|
|
46
|
+
import { GearGlyph } from './GearGlyph.js';
|
|
47
|
+
import { BatteryGlyph } from './BatteryGlyph.js';
|
|
48
|
+
import { CircleGlyph } from './CircleGlyph.js';
|
|
49
|
+
|
|
50
|
+
export { Glyph } from './Glyph.js';
|
|
51
|
+
export { drawGlyph } from './drawGlyph.js';
|
|
52
|
+
export { RectGlyph, NoteGlyph, ImageGlyph, IconGlyph, DiamondGlyph, PersonGlyph, PillGlyph, ArrowGlyph, ChevronGlyph, FlagGlyph, HalfCircleGlyph, DoubleCircleGlyph, LollipopGlyph, CylinderGlyph, CubeGlyph, TargetGlyph, StickFigureGlyph, JunctionGlyph, OrJunctionGlyph, HexagonGlyph, ObjectBoxGlyph, ContractBoxGlyph, ProductBoxGlyph, WavyBoxGlyph, SystemSoftwareBoxGlyph, GroupingBoxGlyph, TabbedBoxGlyph, RoundedBoxGlyph, ComponentGlyph, FactoryGlyph, DeviceGlyph, StepsGlyph, WheelGlyph, MagnifierGlyph, StackGlyph, GapCircleGlyph, PrincipleGlyph, ConstraintGlyph, DoubleArrowGlyph, DashedDoubleArrowGlyph, PinGlyph, CloudGlyph, DocumentGlyph, ParallelogramGlyph, EllipseGlyph, GearGlyph, BatteryGlyph, CircleGlyph };
|
|
53
|
+
|
|
54
|
+
/** One instance per notation shape, by key ('pill', 'cube', ...). */
|
|
55
|
+
export const GLYPHS = new Map([
|
|
56
|
+
[RectGlyph.key, new RectGlyph()],
|
|
57
|
+
[NoteGlyph.key, new NoteGlyph()],
|
|
58
|
+
[ImageGlyph.key, new ImageGlyph()],
|
|
59
|
+
[IconGlyph.key, new IconGlyph()],
|
|
60
|
+
[DiamondGlyph.key, new DiamondGlyph()],
|
|
61
|
+
[PersonGlyph.key, new PersonGlyph()],
|
|
62
|
+
[PillGlyph.key, new PillGlyph()],
|
|
63
|
+
[ArrowGlyph.key, new ArrowGlyph()],
|
|
64
|
+
[ChevronGlyph.key, new ChevronGlyph()],
|
|
65
|
+
[FlagGlyph.key, new FlagGlyph()],
|
|
66
|
+
[HalfCircleGlyph.key, new HalfCircleGlyph()],
|
|
67
|
+
[DoubleCircleGlyph.key, new DoubleCircleGlyph()],
|
|
68
|
+
[LollipopGlyph.key, new LollipopGlyph()],
|
|
69
|
+
[CylinderGlyph.key, new CylinderGlyph()],
|
|
70
|
+
[CubeGlyph.key, new CubeGlyph()],
|
|
71
|
+
[TargetGlyph.key, new TargetGlyph()],
|
|
72
|
+
[StickFigureGlyph.key, new StickFigureGlyph()],
|
|
73
|
+
[JunctionGlyph.key, new JunctionGlyph()],
|
|
74
|
+
[OrJunctionGlyph.key, new OrJunctionGlyph()],
|
|
75
|
+
[HexagonGlyph.key, new HexagonGlyph()],
|
|
76
|
+
[ObjectBoxGlyph.key, new ObjectBoxGlyph()],
|
|
77
|
+
[ContractBoxGlyph.key, new ContractBoxGlyph()],
|
|
78
|
+
[ProductBoxGlyph.key, new ProductBoxGlyph()],
|
|
79
|
+
[WavyBoxGlyph.key, new WavyBoxGlyph()],
|
|
80
|
+
[SystemSoftwareBoxGlyph.key, new SystemSoftwareBoxGlyph()],
|
|
81
|
+
[GroupingBoxGlyph.key, new GroupingBoxGlyph()],
|
|
82
|
+
[TabbedBoxGlyph.key, new TabbedBoxGlyph()],
|
|
83
|
+
[RoundedBoxGlyph.key, new RoundedBoxGlyph()],
|
|
84
|
+
[ComponentGlyph.key, new ComponentGlyph()],
|
|
85
|
+
[FactoryGlyph.key, new FactoryGlyph()],
|
|
86
|
+
[DeviceGlyph.key, new DeviceGlyph()],
|
|
87
|
+
[StepsGlyph.key, new StepsGlyph()],
|
|
88
|
+
[WheelGlyph.key, new WheelGlyph()],
|
|
89
|
+
[MagnifierGlyph.key, new MagnifierGlyph()],
|
|
90
|
+
[StackGlyph.key, new StackGlyph()],
|
|
91
|
+
[GapCircleGlyph.key, new GapCircleGlyph()],
|
|
92
|
+
[PrincipleGlyph.key, new PrincipleGlyph()],
|
|
93
|
+
[ConstraintGlyph.key, new ConstraintGlyph()],
|
|
94
|
+
[DoubleArrowGlyph.key, new DoubleArrowGlyph()],
|
|
95
|
+
[DashedDoubleArrowGlyph.key, new DashedDoubleArrowGlyph()],
|
|
96
|
+
[PinGlyph.key, new PinGlyph()],
|
|
97
|
+
[CloudGlyph.key, new CloudGlyph()],
|
|
98
|
+
[DocumentGlyph.key, new DocumentGlyph()],
|
|
99
|
+
[ParallelogramGlyph.key, new ParallelogramGlyph()],
|
|
100
|
+
[EllipseGlyph.key, new EllipseGlyph()],
|
|
101
|
+
[GearGlyph.key, new GearGlyph()],
|
|
102
|
+
[BatteryGlyph.key, new BatteryGlyph()],
|
|
103
|
+
[CircleGlyph.key, new CircleGlyph()],
|
|
104
|
+
]);
|
|
105
|
+
|
|
106
|
+
/** The glyph for a shape key; unknown keys draw as a circle (the plain graph node). */
|
|
107
|
+
export function glyphFor(key) {
|
|
108
|
+
return GLYPHS.get(key) ?? GLYPHS.get('circle');
|
|
109
|
+
}
|