@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.
Files changed (451) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -2
  3. package/REFERENCE.md +2198 -0
  4. package/dist/renderengine-workspace.umd.js +46905 -0
  5. package/dist/renderengine.umd.js +42223 -0
  6. package/examples/archimate.html +66 -0
  7. package/examples/diagram-editor.html +51 -0
  8. package/package.json +65 -4
  9. package/src/BaseRenderer.js +57 -0
  10. package/src/CanvasRenderer.js +194 -0
  11. package/src/Mat4.js +111 -0
  12. package/src/OrbitCamera.js +57 -0
  13. package/src/RendererFactory.js +50 -0
  14. package/src/SVGRenderer.js +439 -0
  15. package/src/archimate.js +723 -0
  16. package/src/archimateArchiFormat.js +1693 -0
  17. package/src/archimateArchiTypes.js +72 -0
  18. package/src/archimateArchive.js +140 -0
  19. package/src/archimateCSV.js +127 -0
  20. package/src/archimateDrawio.js +182 -0
  21. package/src/archimateExchangeFormat.js +546 -0
  22. package/src/archimateRelationshipTable.js +93 -0
  23. package/src/archimateSpecializations.js +161 -0
  24. package/src/chartCatalog.js +589 -0
  25. package/src/charting/ArchimateDiagramEditor.js +1624 -0
  26. package/src/charting/ArchimateSpecializationSelector.js +134 -0
  27. package/src/charting/Axis.js +68 -0
  28. package/src/charting/CameraSeeder.js +30 -0
  29. package/src/charting/CatalogDialog.js +92 -0
  30. package/src/charting/Chart.js +37 -0
  31. package/src/charting/Chart3D.js +99 -0
  32. package/src/charting/ChartBox.js +80 -0
  33. package/src/charting/ChartData.js +27 -0
  34. package/src/charting/ChartRegistry.js +76 -0
  35. package/src/charting/CheckboxTreeSelector.js +304 -0
  36. package/src/charting/ColorField.js +107 -0
  37. package/src/charting/ColorPalette.js +88 -0
  38. package/src/charting/CommandHistory.js +176 -0
  39. package/src/charting/DataFilter.js +52 -0
  40. package/src/charting/Diagram.js +36 -0
  41. package/src/charting/Diagram3D.js +29 -0
  42. package/src/charting/DiagramClipboard.js +31 -0
  43. package/src/charting/DiagramEditor.js +3330 -0
  44. package/src/charting/DiagramEditorCommand.js +110 -0
  45. package/src/charting/DiagramEditorCommands.js +237 -0
  46. package/src/charting/DiagramEditorEdgeCommands.js +142 -0
  47. package/src/charting/DiagramEditorState.js +98 -0
  48. package/src/charting/DiagramRegistry.js +86 -0
  49. package/src/charting/DiagramTypeRegistry.js +326 -0
  50. package/src/charting/DiagramViewPropertiesDialog.js +46 -0
  51. package/src/charting/Edge.js +113 -0
  52. package/src/charting/ErrorBars.js +37 -0
  53. package/src/charting/FilterSystem.js +285 -0
  54. package/src/charting/FindReplaceDialog.js +139 -0
  55. package/src/charting/FormDialog.js +385 -0
  56. package/src/charting/Gauge.js +58 -0
  57. package/src/charting/Hierarchy.js +175 -0
  58. package/src/charting/HintPanel.js +86 -0
  59. package/src/charting/ImageSelector.js +148 -0
  60. package/src/charting/InteractionManager.js +725 -0
  61. package/src/charting/Legend.js +58 -0
  62. package/src/charting/MenuBar.js +62 -0
  63. package/src/charting/ModelFileFormat.js +115 -0
  64. package/src/charting/OrbitControls.js +77 -0
  65. package/src/charting/Palette.js +119 -0
  66. package/src/charting/PopupMenu.js +117 -0
  67. package/src/charting/PropertiesPanel.js +155 -0
  68. package/src/charting/PropertyListEditor.js +96 -0
  69. package/src/charting/PropertyLog.js +92 -0
  70. package/src/charting/SettingsCascade.js +93 -0
  71. package/src/charting/SettingsDialog.js +53 -0
  72. package/src/charting/SettingsManager.js +179 -0
  73. package/src/charting/SettingsViewPropertiesDialog.js +58 -0
  74. package/src/charting/ShapePaths.js +27 -0
  75. package/src/charting/Statistics.js +134 -0
  76. package/src/charting/TemplateCatalog.js +59 -0
  77. package/src/charting/TemplateLibrary.js +103 -0
  78. package/src/charting/TextStyle.js +168 -0
  79. package/src/charting/ViewFit.js +55 -0
  80. package/src/charting/ViewMenu.js +70 -0
  81. package/src/charting/ViewPropertiesDialog.js +77 -0
  82. package/src/charting/ViewTabStrip.js +81 -0
  83. package/src/charting/archimate/ArchiFileFormat.js +32 -0
  84. package/src/charting/archimate/ArchimateCanvasEditor.js +815 -0
  85. package/src/charting/archimate/ArchimateCsvFileFormat.js +35 -0
  86. package/src/charting/archimate/ArchimateEdge.js +137 -0
  87. package/src/charting/archimate/ArchimateElementTemplate.js +195 -0
  88. package/src/charting/archimate/ArchimatePalette.js +102 -0
  89. package/src/charting/archimate/CsvImportDialog.js +105 -0
  90. package/src/charting/archimate/CustomViewpoints.js +74 -0
  91. package/src/charting/archimate/DerivedEdge.js +29 -0
  92. package/src/charting/archimate/DrawioFileFormat.js +24 -0
  93. package/src/charting/archimate/ElementFilterRule.js +21 -0
  94. package/src/charting/archimate/ExchangeFileFormat.js +28 -0
  95. package/src/charting/archimate/ViewGroupTemplate.js +137 -0
  96. package/src/charting/archimate/ViewLineEdge.js +84 -0
  97. package/src/charting/archimate/ViewpointRule.js +45 -0
  98. package/src/charting/archimate/archimateFileFormats.js +12 -0
  99. package/src/charting/archimate/archimateNames.js +5 -0
  100. package/src/charting/archimate/csvMapping.js +122 -0
  101. package/src/charting/archimate/elementMenuItems.js +32 -0
  102. package/src/charting/archimate/elementProperties.js +146 -0
  103. package/src/charting/archimate/elementTypeChoices.js +7 -0
  104. package/src/charting/archimate/elementTypeGroups.js +19 -0
  105. package/src/charting/archimate/index.js +17 -0
  106. package/src/charting/archimate/specializationCatalogDialog.js +64 -0
  107. package/src/charting/archimate/typeGlyph.js +29 -0
  108. package/src/charting/arrangement/Arrangement.js +112 -0
  109. package/src/charting/arrangement/ArrangementCommand.js +29 -0
  110. package/src/charting/arrangement/BackgroundCommand.js +41 -0
  111. package/src/charting/arrangement/BackgroundGroup.js +18 -0
  112. package/src/charting/arrangement/GroupCommand.js +46 -0
  113. package/src/charting/arrangement/ItemGroup.js +62 -0
  114. package/src/charting/arrangement/LockCommand.js +32 -0
  115. package/src/charting/arrangement/UngroupCommand.js +27 -0
  116. package/src/charting/arrangement/alignment.js +88 -0
  117. package/src/charting/arrangement/arrangeMenuItems.js +25 -0
  118. package/src/charting/arrangement/index.js +11 -0
  119. package/src/charting/arrangement/layouts.js +233 -0
  120. package/src/charting/canvas/ArchiHint.js +78 -0
  121. package/src/charting/canvas/CanvasBoxKind.js +39 -0
  122. package/src/charting/canvas/CanvasPalette.js +49 -0
  123. package/src/charting/canvas/CanvasTemplateLibrary.js +61 -0
  124. package/src/charting/canvas/CanvasTemplateMenu.js +151 -0
  125. package/src/charting/canvas/EditHintCommand.js +28 -0
  126. package/src/charting/canvas/canvasBoxKinds.js +27 -0
  127. package/src/charting/canvas/canvasBoxMenuItems.js +40 -0
  128. package/src/charting/canvas/defaultCanvasTemplates.js +186 -0
  129. package/src/charting/canvas/diagramBoxKinds.js +12 -0
  130. package/src/charting/canvas/hintMenuItems.js +49 -0
  131. package/src/charting/charts/ArcGauge.js +55 -0
  132. package/src/charting/charts/AreaChart.js +71 -0
  133. package/src/charting/charts/BarChart.js +80 -0
  134. package/src/charting/charts/BarChart3D.js +56 -0
  135. package/src/charting/charts/BarChart3DOrbit.js +53 -0
  136. package/src/charting/charts/BarChartBase.js +70 -0
  137. package/src/charting/charts/BarGauge.js +42 -0
  138. package/src/charting/charts/BoxPlotChart.js +41 -0
  139. package/src/charting/charts/BubbleChart.js +99 -0
  140. package/src/charting/charts/BubbleChart3D.js +78 -0
  141. package/src/charting/charts/BulletGauge.js +87 -0
  142. package/src/charting/charts/CalendarHeatmapChart.js +204 -0
  143. package/src/charting/charts/CandlestickChart.js +54 -0
  144. package/src/charting/charts/ChordDiagram.js +130 -0
  145. package/src/charting/charts/DensityChart.js +73 -0
  146. package/src/charting/charts/DialGauge.js +65 -0
  147. package/src/charting/charts/DonutChart.js +15 -0
  148. package/src/charting/charts/FunnelChart.js +47 -0
  149. package/src/charting/charts/GanttChart.js +201 -0
  150. package/src/charting/charts/GaugeChart.js +175 -0
  151. package/src/charting/charts/GeoMapChart.js +146 -0
  152. package/src/charting/charts/GroupedBarChart.js +88 -0
  153. package/src/charting/charts/GroupedDistributionChart.js +70 -0
  154. package/src/charting/charts/HeatmapChart.js +80 -0
  155. package/src/charting/charts/HierarchyChart.js +39 -0
  156. package/src/charting/charts/HistogramChart.js +45 -0
  157. package/src/charting/charts/KpiTile.js +72 -0
  158. package/src/charting/charts/LagPlotChart.js +41 -0
  159. package/src/charting/charts/LineChart.js +124 -0
  160. package/src/charting/charts/MultiRingGauge.js +54 -0
  161. package/src/charting/charts/OutlineChart.js +95 -0
  162. package/src/charting/charts/ParallelCoordinatesChart.js +130 -0
  163. package/src/charting/charts/PieChart.js +56 -0
  164. package/src/charting/charts/PipeChart.js +88 -0
  165. package/src/charting/charts/PopulationPyramidChart.js +106 -0
  166. package/src/charting/charts/QQPlotChart.js +64 -0
  167. package/src/charting/charts/RadarChart.js +76 -0
  168. package/src/charting/charts/RadialBarChart.js +96 -0
  169. package/src/charting/charts/RingGauge.js +23 -0
  170. package/src/charting/charts/SankeyDiagram.js +174 -0
  171. package/src/charting/charts/ScatterChart.js +104 -0
  172. package/src/charting/charts/StackedAreaChart.js +15 -0
  173. package/src/charting/charts/StackedBarChart.js +33 -0
  174. package/src/charting/charts/StackedBarChart3DOrbit.js +58 -0
  175. package/src/charting/charts/StreamGraphChart.js +131 -0
  176. package/src/charting/charts/SunburstChart.js +57 -0
  177. package/src/charting/charts/ThermometerGauge.js +43 -0
  178. package/src/charting/charts/TreemapChart.js +54 -0
  179. package/src/charting/charts/ViolinChart.js +37 -0
  180. package/src/charting/charts/WaterfallChart.js +66 -0
  181. package/src/charting/charts/WordCloudChart.js +104 -0
  182. package/src/charting/diagramModel/AddViewCommand.js +33 -0
  183. package/src/charting/diagramModel/DiagramModel.js +39 -0
  184. package/src/charting/diagramModel/DiagramModelSearch.js +22 -0
  185. package/src/charting/diagramModel/DiagramView.js +50 -0
  186. package/src/charting/diagramModel/ModelHistory.js +43 -0
  187. package/src/charting/diagramModel/ModelReport.js +153 -0
  188. package/src/charting/diagramModel/ModelSearch.js +223 -0
  189. package/src/charting/diagramModel/RemoveViewCommand.js +25 -0
  190. package/src/charting/diagramModel/RenameViewCommand.js +21 -0
  191. package/src/charting/diagramModel/ReplaceTextCommand.js +25 -0
  192. package/src/charting/diagramModel/ViewSetChecker.js +34 -0
  193. package/src/charting/diagramModel/ViewSetModel.js +243 -0
  194. package/src/charting/diagramModel/index.js +6 -0
  195. package/src/charting/diagramModel/nameTransforms.js +29 -0
  196. package/src/charting/diagrams/ArchimateCommands.js +141 -0
  197. package/src/charting/diagrams/ArchimateDiagram.js +263 -0
  198. package/src/charting/diagrams/ArchimateModel.js +1155 -0
  199. package/src/charting/diagrams/ArchimateModelChecker.js +125 -0
  200. package/src/charting/diagrams/ArchimateModelReport.js +128 -0
  201. package/src/charting/diagrams/ArchimateModelSearch.js +41 -0
  202. package/src/charting/diagrams/ArchimateValidator.js +357 -0
  203. package/src/charting/diagrams/CanvasView.js +112 -0
  204. package/src/charting/diagrams/ContextMenu.js +37 -0
  205. package/src/charting/diagrams/DataModelDiagram.js +86 -0
  206. package/src/charting/diagrams/DataModelRelationshipStrategy.js +38 -0
  207. package/src/charting/diagrams/DerivedRelationships.js +102 -0
  208. package/src/charting/diagrams/EbnfDiagram.js +39 -0
  209. package/src/charting/diagrams/EdgeGeometry.js +553 -0
  210. package/src/charting/diagrams/EditViewItemCommand.js +128 -0
  211. package/src/charting/diagrams/ElementInstance.js +157 -0
  212. package/src/charting/diagrams/GraphDiagram.js +1340 -0
  213. package/src/charting/diagrams/GraphDiagram3D.js +152 -0
  214. package/src/charting/diagrams/GraphMetrics.js +81 -0
  215. package/src/charting/diagrams/GridOverlay.js +137 -0
  216. package/src/charting/diagrams/ImportRowsCommand.js +62 -0
  217. package/src/charting/diagrams/LabelHelper.js +108 -0
  218. package/src/charting/diagrams/MergeElementsCommand.js +101 -0
  219. package/src/charting/diagrams/NestInstanceCommand.js +34 -0
  220. package/src/charting/diagrams/NodeGeometry.js +158 -0
  221. package/src/charting/diagrams/PlaceItemsCommand.js +77 -0
  222. package/src/charting/diagrams/RadialLayout.js +101 -0
  223. package/src/charting/diagrams/RelationshipInstance.js +93 -0
  224. package/src/charting/diagrams/RemoveGroupFromViewCommand.js +28 -0
  225. package/src/charting/diagrams/RemoveLineCommand.js +27 -0
  226. package/src/charting/diagrams/ShowElementCommand.js +43 -0
  227. package/src/charting/diagrams/SvgCoordinate.js +17 -0
  228. package/src/charting/diagrams/SvgZoom.js +127 -0
  229. package/src/charting/diagrams/Tooltip.js +62 -0
  230. package/src/charting/diagrams/ViewConnectionInstance.js +102 -0
  231. package/src/charting/diagrams/ViewObjectInstance.js +56 -0
  232. package/src/charting/diagrams/commands/AddEdgeCommand.js +34 -0
  233. package/src/charting/diagrams/commands/AddNodeCommand.js +28 -0
  234. package/src/charting/diagrams/commands/AddWaypointCommand.js +27 -0
  235. package/src/charting/diagrams/commands/CreateFolderCommand.js +27 -0
  236. package/src/charting/diagrams/commands/DeleteEdgeCommand.js +30 -0
  237. package/src/charting/diagrams/commands/DeleteFolderCommand.js +47 -0
  238. package/src/charting/diagrams/commands/DeleteNodeCommand.js +35 -0
  239. package/src/charting/diagrams/commands/DeleteWaypointCommand.js +24 -0
  240. package/src/charting/diagrams/commands/GraphCommand.js +65 -0
  241. package/src/charting/diagrams/commands/InvertEdgeCommand.js +24 -0
  242. package/src/charting/diagrams/commands/MoveNodeCommand.js +44 -0
  243. package/src/charting/diagrams/commands/MoveWaypointCommand.js +27 -0
  244. package/src/charting/diagrams/commands/RenameEdgeCommand.js +23 -0
  245. package/src/charting/diagrams/commands/RenameFolderCommand.js +31 -0
  246. package/src/charting/diagrams/commands/RenameNodeCommand.js +27 -0
  247. package/src/charting/diagrams/commands/ResizeNodeCommand.js +46 -0
  248. package/src/charting/diagrams/commands/UpdateEdgeSideCommand.js +40 -0
  249. package/src/charting/diagrams/commands/index.js +17 -0
  250. package/src/charting/diagrams/duplicates.js +49 -0
  251. package/src/charting/diagrams/nesting.js +30 -0
  252. package/src/charting/diagrams/roadmap.js +77 -0
  253. package/src/charting/edgeMarkers/ArrowMarker.js +15 -0
  254. package/src/charting/edgeMarkers/CircleMarker.js +13 -0
  255. package/src/charting/edgeMarkers/CrowsFootMarker.js +16 -0
  256. package/src/charting/edgeMarkers/DiamondMarker.js +15 -0
  257. package/src/charting/edgeMarkers/EdgeMarker.js +34 -0
  258. package/src/charting/edgeMarkers/HalfArrowMarker.js +8 -0
  259. package/src/charting/edgeMarkers/HollowDiamondMarker.js +18 -0
  260. package/src/charting/edgeMarkers/HollowTriangleMarker.js +18 -0
  261. package/src/charting/edgeMarkers/OpenArrowMarker.js +17 -0
  262. package/src/charting/edgeMarkers/index.js +27 -0
  263. package/src/charting/edgeStyle/EdgeStyleCascade.js +22 -0
  264. package/src/charting/edgeStyle/EdgeStyleDialog.js +51 -0
  265. package/src/charting/edgeStyle/EdgeStyleSchema.js +43 -0
  266. package/src/charting/edgeStyle/SetStyleCommand.js +12 -0
  267. package/src/charting/edgeStyle/index.js +4 -0
  268. package/src/charting/emphasis/EmphasisRule.js +42 -0
  269. package/src/charting/emphasis/HighlightRule.js +24 -0
  270. package/src/charting/gauges/ArcTrack.js +51 -0
  271. package/src/charting/gauges/GaugeAnimation.js +51 -0
  272. package/src/charting/gauges/GaugeBands.js +48 -0
  273. package/src/charting/gauges/GaugeScale.js +87 -0
  274. package/src/charting/gauges/GaugeTrack.js +44 -0
  275. package/src/charting/gauges/GaugeValue.js +61 -0
  276. package/src/charting/gauges/HorizontalTrack.js +14 -0
  277. package/src/charting/gauges/LinearTrack.js +29 -0
  278. package/src/charting/gauges/Sparkline.js +42 -0
  279. package/src/charting/gauges/VerticalTrack.js +17 -0
  280. package/src/charting/glyphs/ArrowGlyph.js +21 -0
  281. package/src/charting/glyphs/BatteryGlyph.js +18 -0
  282. package/src/charting/glyphs/ChevronGlyph.js +18 -0
  283. package/src/charting/glyphs/CircleGlyph.js +15 -0
  284. package/src/charting/glyphs/CloudGlyph.js +19 -0
  285. package/src/charting/glyphs/ComponentGlyph.js +18 -0
  286. package/src/charting/glyphs/ConstraintGlyph.js +24 -0
  287. package/src/charting/glyphs/ContractBoxGlyph.js +10 -0
  288. package/src/charting/glyphs/CubeGlyph.js +19 -0
  289. package/src/charting/glyphs/CylinderGlyph.js +19 -0
  290. package/src/charting/glyphs/DashedDoubleArrowGlyph.js +11 -0
  291. package/src/charting/glyphs/DeviceGlyph.js +17 -0
  292. package/src/charting/glyphs/DiamondGlyph.js +17 -0
  293. package/src/charting/glyphs/DocumentGlyph.js +17 -0
  294. package/src/charting/glyphs/DoubleArrowGlyph.js +23 -0
  295. package/src/charting/glyphs/DoubleCircleGlyph.js +24 -0
  296. package/src/charting/glyphs/EllipseGlyph.js +18 -0
  297. package/src/charting/glyphs/FactoryGlyph.js +20 -0
  298. package/src/charting/glyphs/FlagGlyph.js +16 -0
  299. package/src/charting/glyphs/GapCircleGlyph.js +17 -0
  300. package/src/charting/glyphs/GearGlyph.js +37 -0
  301. package/src/charting/glyphs/Glyph.js +98 -0
  302. package/src/charting/glyphs/GroupingBoxGlyph.js +13 -0
  303. package/src/charting/glyphs/HalfCircleGlyph.js +22 -0
  304. package/src/charting/glyphs/HexagonGlyph.js +28 -0
  305. package/src/charting/glyphs/IconGlyph.js +22 -0
  306. package/src/charting/glyphs/ImageGlyph.js +16 -0
  307. package/src/charting/glyphs/JunctionGlyph.js +17 -0
  308. package/src/charting/glyphs/LollipopGlyph.js +22 -0
  309. package/src/charting/glyphs/MagnifierGlyph.js +17 -0
  310. package/src/charting/glyphs/NoteGlyph.js +33 -0
  311. package/src/charting/glyphs/ObjectBoxGlyph.js +21 -0
  312. package/src/charting/glyphs/OrJunctionGlyph.js +17 -0
  313. package/src/charting/glyphs/ParallelogramGlyph.js +20 -0
  314. package/src/charting/glyphs/PersonGlyph.js +23 -0
  315. package/src/charting/glyphs/PillGlyph.js +23 -0
  316. package/src/charting/glyphs/PinGlyph.js +18 -0
  317. package/src/charting/glyphs/PrincipleGlyph.js +23 -0
  318. package/src/charting/glyphs/ProductBoxGlyph.js +16 -0
  319. package/src/charting/glyphs/RectGlyph.js +15 -0
  320. package/src/charting/glyphs/RoundedBoxGlyph.js +13 -0
  321. package/src/charting/glyphs/StackGlyph.js +14 -0
  322. package/src/charting/glyphs/StepsGlyph.js +20 -0
  323. package/src/charting/glyphs/StickFigureGlyph.js +32 -0
  324. package/src/charting/glyphs/SystemSoftwareBoxGlyph.js +16 -0
  325. package/src/charting/glyphs/TabbedBoxGlyph.js +37 -0
  326. package/src/charting/glyphs/TargetGlyph.js +23 -0
  327. package/src/charting/glyphs/WavyBoxGlyph.js +17 -0
  328. package/src/charting/glyphs/WheelGlyph.js +28 -0
  329. package/src/charting/glyphs/drawGlyph.js +28 -0
  330. package/src/charting/glyphs/glyphSvg.js +55 -0
  331. package/src/charting/glyphs/index.js +109 -0
  332. package/src/charting/modelTree/AnalysisPanel.js +159 -0
  333. package/src/charting/modelTree/DiagramTabs.js +217 -0
  334. package/src/charting/modelTree/ModelTree.js +164 -0
  335. package/src/charting/modelTree/ModelTreePanel.js +914 -0
  336. package/src/charting/modelTree/TreeBuilder.js +238 -0
  337. package/src/charting/modelTree/TreeModeRegistry.js +51 -0
  338. package/src/charting/modelTree/TreeViewMode.js +110 -0
  339. package/src/charting/modelTree/buildFilterTrees.js +138 -0
  340. package/src/charting/modelTree/modes/FlatTreeMode.js +46 -0
  341. package/src/charting/modelTree/modes/LayerGroupedTreeMode.js +62 -0
  342. package/src/charting/modelTree/modes/TypeGroupedTreeMode.js +60 -0
  343. package/src/charting/modelTree/treeLayers.js +11 -0
  344. package/src/charting/report/reportHtml.js +82 -0
  345. package/src/charting/report/reportViewer.js +118 -0
  346. package/src/charting/shapes/CircleShape.js +19 -0
  347. package/src/charting/shapes/PathShape.js +17 -0
  348. package/src/charting/shapes/RectShape.js +20 -0
  349. package/src/charting/shapes/Shape.js +20 -0
  350. package/src/charting/shapes/ShapeFactory.js +23 -0
  351. package/src/charting/storage/LocalJsonStore.js +43 -0
  352. package/src/charting/templates/ActorTemplate.js +36 -0
  353. package/src/charting/templates/BoxTemplate.js +27 -0
  354. package/src/charting/templates/CircleTemplate.js +18 -0
  355. package/src/charting/templates/ClassTemplate.js +20 -0
  356. package/src/charting/templates/CloudTemplate.js +43 -0
  357. package/src/charting/templates/ComponentTemplate.js +19 -0
  358. package/src/charting/templates/CylinderTemplate.js +30 -0
  359. package/src/charting/templates/DataStoreTemplate.js +16 -0
  360. package/src/charting/templates/DiamondTemplate.js +10 -0
  361. package/src/charting/templates/DocumentTemplate.js +32 -0
  362. package/src/charting/templates/EllipseTemplate.js +15 -0
  363. package/src/charting/templates/FinalStateTemplate.js +12 -0
  364. package/src/charting/templates/GlyphTemplate.js +47 -0
  365. package/src/charting/templates/HexagonTemplate.js +17 -0
  366. package/src/charting/templates/LifelineTemplate.js +20 -0
  367. package/src/charting/templates/ManualInputTemplate.js +12 -0
  368. package/src/charting/templates/NoteTemplate.js +23 -0
  369. package/src/charting/templates/OctagonTemplate.js +7 -0
  370. package/src/charting/templates/PackageTemplate.js +25 -0
  371. package/src/charting/templates/ParallelogramTemplate.js +11 -0
  372. package/src/charting/templates/PentagonTemplate.js +5 -0
  373. package/src/charting/templates/PolygonTemplate.js +18 -0
  374. package/src/charting/templates/PredefinedProcessTemplate.js +13 -0
  375. package/src/charting/templates/RectangleTemplate.js +28 -0
  376. package/src/charting/templates/RegularPolygonTemplate.js +21 -0
  377. package/src/charting/templates/RoundedRectangleTemplate.js +5 -0
  378. package/src/charting/templates/StadiumTemplate.js +8 -0
  379. package/src/charting/templates/StarTemplate.js +17 -0
  380. package/src/charting/templates/SwimlaneTemplate.js +18 -0
  381. package/src/charting/templates/Template.js +208 -0
  382. package/src/charting/templates/TrapezoidTemplate.js +11 -0
  383. package/src/charting/templates/TriangleTemplate.js +12 -0
  384. package/src/charting/templates/index.js +31 -0
  385. package/src/charting/templates/outline.js +59 -0
  386. package/src/charting/templates/svg.js +19 -0
  387. package/src/charting/textToShapes.js +61 -0
  388. package/src/charting/toolbar/ToolbarButton.js +38 -0
  389. package/src/charting/toolbar/ToolbarCheckbox.js +31 -0
  390. package/src/charting/toolbar/ToolbarItem.js +19 -0
  391. package/src/charting/toolbar/ToolbarMenu.js +36 -0
  392. package/src/charting/toolbar/ToolbarSelect.js +38 -0
  393. package/src/charting/toolbar/ToolbarSeparator.js +7 -0
  394. package/src/charting/toolbar/ToolbarText.js +22 -0
  395. package/src/charting/toolbar/index.js +8 -0
  396. package/src/charting/toolbar/pickFile.js +14 -0
  397. package/src/charting/viewDecorations.js +85 -0
  398. package/src/charting/zOrder.js +57 -0
  399. package/src/csvTable.js +61 -0
  400. package/src/datamodel.js +122 -0
  401. package/src/datawindow/BoundedWindow.js +36 -0
  402. package/src/datawindow/FlatDataWindow.js +34 -0
  403. package/src/datawindow/GraphDataWindow.js +40 -0
  404. package/src/datawindow/GroupedSampleDataWindow.js +16 -0
  405. package/src/datawindow/SeriesDataWindow.js +42 -0
  406. package/src/datawindow/index.js +31 -0
  407. package/src/diagramCatalog.js +30 -0
  408. package/src/ebnfDiagram.js +57 -0
  409. package/src/ebnfParser.js +129 -0
  410. package/src/exportImage.js +233 -0
  411. package/src/index.js +2636 -0
  412. package/src/itIcons.js +84 -0
  413. package/src/kernelExpr.js +243 -0
  414. package/src/propertiesDialog.js +463 -0
  415. package/src/railroadDiagram.js +571 -0
  416. package/src/treeModeCatalog.js +16 -0
  417. package/src/workspace/ContextBus.js +79 -0
  418. package/src/workspace/EditorShell.js +67 -0
  419. package/src/workspace/Part.js +163 -0
  420. package/src/workspace/PartFactory.js +49 -0
  421. package/src/workspace/PartRegistry.js +86 -0
  422. package/src/workspace/Workspace.js +321 -0
  423. package/src/workspace/archimateServices.js +33 -0
  424. package/src/workspace/dom.js +120 -0
  425. package/src/workspace/index.js +75 -0
  426. package/src/workspace/layout/GridNode.js +280 -0
  427. package/src/workspace/layout/LayoutNode.js +89 -0
  428. package/src/workspace/layout/PartNode.js +77 -0
  429. package/src/workspace/layout/SplitNode.js +114 -0
  430. package/src/workspace/layout/TabsNode.js +191 -0
  431. package/src/workspace/layout/index.js +24 -0
  432. package/src/workspace/parts/AdapterPart.js +33 -0
  433. package/src/workspace/parts/ArchimateCanvasPart.js +345 -0
  434. package/src/workspace/parts/ArchimateEditorPart.js +79 -0
  435. package/src/workspace/parts/ChartPart.js +115 -0
  436. package/src/workspace/parts/ContentPart.js +34 -0
  437. package/src/workspace/parts/DetailPart.js +46 -0
  438. package/src/workspace/parts/DiagramEditorPart.js +135 -0
  439. package/src/workspace/parts/EditorPart.js +388 -0
  440. package/src/workspace/parts/HtmlPart.js +25 -0
  441. package/src/workspace/parts/ListPart.js +57 -0
  442. package/src/workspace/parts/ModelFile.js +187 -0
  443. package/src/workspace/parts/ModelsPart.js +135 -0
  444. package/src/workspace/styles.js +258 -0
  445. package/src/workspace/themes.js +96 -0
  446. package/src/workspace/workArea.js +413 -0
  447. package/src/workspace/workAreaModel.js +197 -0
  448. package/src/workspace.js +16 -0
  449. package/src/zip/ZipArchive.js +160 -0
  450. package/src/zip/crc32.js +25 -0
  451. 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
+ }