@peter.prib/renderengine 0.0.0-stage → 0.1.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 (436) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -2
  3. package/REFERENCE.md +2159 -0
  4. package/dist/renderengine-workspace.umd.js +45944 -0
  5. package/dist/renderengine.umd.js +41262 -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 +544 -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 +52 -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/AreaChart.js +71 -0
  132. package/src/charting/charts/BarChart.js +80 -0
  133. package/src/charting/charts/BarChart3D.js +56 -0
  134. package/src/charting/charts/BarChart3DOrbit.js +53 -0
  135. package/src/charting/charts/BarChartBase.js +70 -0
  136. package/src/charting/charts/BarGauge.js +21 -0
  137. package/src/charting/charts/BoxPlotChart.js +41 -0
  138. package/src/charting/charts/BubbleChart.js +99 -0
  139. package/src/charting/charts/BubbleChart3D.js +78 -0
  140. package/src/charting/charts/BulletGauge.js +91 -0
  141. package/src/charting/charts/CalendarHeatmapChart.js +204 -0
  142. package/src/charting/charts/CandlestickChart.js +54 -0
  143. package/src/charting/charts/ChordDiagram.js +130 -0
  144. package/src/charting/charts/DensityChart.js +73 -0
  145. package/src/charting/charts/DialGauge.js +37 -0
  146. package/src/charting/charts/DonutChart.js +15 -0
  147. package/src/charting/charts/FunnelChart.js +47 -0
  148. package/src/charting/charts/GanttChart.js +201 -0
  149. package/src/charting/charts/GaugeChart.js +47 -0
  150. package/src/charting/charts/GeoMapChart.js +146 -0
  151. package/src/charting/charts/GroupedBarChart.js +88 -0
  152. package/src/charting/charts/GroupedDistributionChart.js +70 -0
  153. package/src/charting/charts/HeatmapChart.js +80 -0
  154. package/src/charting/charts/HierarchyChart.js +39 -0
  155. package/src/charting/charts/HistogramChart.js +45 -0
  156. package/src/charting/charts/LagPlotChart.js +41 -0
  157. package/src/charting/charts/LineChart.js +124 -0
  158. package/src/charting/charts/OutlineChart.js +95 -0
  159. package/src/charting/charts/ParallelCoordinatesChart.js +130 -0
  160. package/src/charting/charts/PieChart.js +56 -0
  161. package/src/charting/charts/PipeChart.js +88 -0
  162. package/src/charting/charts/PopulationPyramidChart.js +106 -0
  163. package/src/charting/charts/QQPlotChart.js +64 -0
  164. package/src/charting/charts/RadarChart.js +76 -0
  165. package/src/charting/charts/RadialBarChart.js +96 -0
  166. package/src/charting/charts/SankeyDiagram.js +174 -0
  167. package/src/charting/charts/ScatterChart.js +104 -0
  168. package/src/charting/charts/StackedAreaChart.js +15 -0
  169. package/src/charting/charts/StackedBarChart.js +33 -0
  170. package/src/charting/charts/StackedBarChart3DOrbit.js +58 -0
  171. package/src/charting/charts/StreamGraphChart.js +131 -0
  172. package/src/charting/charts/SunburstChart.js +57 -0
  173. package/src/charting/charts/TreemapChart.js +54 -0
  174. package/src/charting/charts/ViolinChart.js +37 -0
  175. package/src/charting/charts/WaterfallChart.js +66 -0
  176. package/src/charting/charts/WordCloudChart.js +104 -0
  177. package/src/charting/diagramModel/AddViewCommand.js +33 -0
  178. package/src/charting/diagramModel/DiagramModel.js +39 -0
  179. package/src/charting/diagramModel/DiagramModelSearch.js +22 -0
  180. package/src/charting/diagramModel/DiagramView.js +50 -0
  181. package/src/charting/diagramModel/ModelHistory.js +43 -0
  182. package/src/charting/diagramModel/ModelReport.js +153 -0
  183. package/src/charting/diagramModel/ModelSearch.js +223 -0
  184. package/src/charting/diagramModel/RemoveViewCommand.js +25 -0
  185. package/src/charting/diagramModel/RenameViewCommand.js +21 -0
  186. package/src/charting/diagramModel/ReplaceTextCommand.js +25 -0
  187. package/src/charting/diagramModel/ViewSetChecker.js +34 -0
  188. package/src/charting/diagramModel/ViewSetModel.js +243 -0
  189. package/src/charting/diagramModel/index.js +6 -0
  190. package/src/charting/diagramModel/nameTransforms.js +29 -0
  191. package/src/charting/diagrams/ArchimateCommands.js +141 -0
  192. package/src/charting/diagrams/ArchimateDiagram.js +263 -0
  193. package/src/charting/diagrams/ArchimateModel.js +1155 -0
  194. package/src/charting/diagrams/ArchimateModelChecker.js +125 -0
  195. package/src/charting/diagrams/ArchimateModelReport.js +128 -0
  196. package/src/charting/diagrams/ArchimateModelSearch.js +41 -0
  197. package/src/charting/diagrams/ArchimateValidator.js +357 -0
  198. package/src/charting/diagrams/CanvasView.js +112 -0
  199. package/src/charting/diagrams/ContextMenu.js +37 -0
  200. package/src/charting/diagrams/DataModelDiagram.js +86 -0
  201. package/src/charting/diagrams/DataModelRelationshipStrategy.js +38 -0
  202. package/src/charting/diagrams/DerivedRelationships.js +102 -0
  203. package/src/charting/diagrams/EbnfDiagram.js +39 -0
  204. package/src/charting/diagrams/EdgeGeometry.js +553 -0
  205. package/src/charting/diagrams/EditViewItemCommand.js +128 -0
  206. package/src/charting/diagrams/ElementInstance.js +157 -0
  207. package/src/charting/diagrams/GraphDiagram.js +1340 -0
  208. package/src/charting/diagrams/GraphDiagram3D.js +152 -0
  209. package/src/charting/diagrams/GraphMetrics.js +81 -0
  210. package/src/charting/diagrams/GridOverlay.js +137 -0
  211. package/src/charting/diagrams/ImportRowsCommand.js +62 -0
  212. package/src/charting/diagrams/LabelHelper.js +108 -0
  213. package/src/charting/diagrams/MergeElementsCommand.js +101 -0
  214. package/src/charting/diagrams/NestInstanceCommand.js +34 -0
  215. package/src/charting/diagrams/NodeGeometry.js +158 -0
  216. package/src/charting/diagrams/PlaceItemsCommand.js +77 -0
  217. package/src/charting/diagrams/RadialLayout.js +101 -0
  218. package/src/charting/diagrams/RelationshipInstance.js +93 -0
  219. package/src/charting/diagrams/RemoveGroupFromViewCommand.js +28 -0
  220. package/src/charting/diagrams/RemoveLineCommand.js +27 -0
  221. package/src/charting/diagrams/ShowElementCommand.js +43 -0
  222. package/src/charting/diagrams/SvgCoordinate.js +17 -0
  223. package/src/charting/diagrams/SvgZoom.js +127 -0
  224. package/src/charting/diagrams/Tooltip.js +62 -0
  225. package/src/charting/diagrams/ViewConnectionInstance.js +102 -0
  226. package/src/charting/diagrams/ViewObjectInstance.js +56 -0
  227. package/src/charting/diagrams/commands/AddEdgeCommand.js +34 -0
  228. package/src/charting/diagrams/commands/AddNodeCommand.js +28 -0
  229. package/src/charting/diagrams/commands/AddWaypointCommand.js +27 -0
  230. package/src/charting/diagrams/commands/CreateFolderCommand.js +27 -0
  231. package/src/charting/diagrams/commands/DeleteEdgeCommand.js +30 -0
  232. package/src/charting/diagrams/commands/DeleteFolderCommand.js +47 -0
  233. package/src/charting/diagrams/commands/DeleteNodeCommand.js +35 -0
  234. package/src/charting/diagrams/commands/DeleteWaypointCommand.js +24 -0
  235. package/src/charting/diagrams/commands/GraphCommand.js +65 -0
  236. package/src/charting/diagrams/commands/InvertEdgeCommand.js +24 -0
  237. package/src/charting/diagrams/commands/MoveNodeCommand.js +44 -0
  238. package/src/charting/diagrams/commands/MoveWaypointCommand.js +27 -0
  239. package/src/charting/diagrams/commands/RenameEdgeCommand.js +23 -0
  240. package/src/charting/diagrams/commands/RenameFolderCommand.js +31 -0
  241. package/src/charting/diagrams/commands/RenameNodeCommand.js +27 -0
  242. package/src/charting/diagrams/commands/ResizeNodeCommand.js +46 -0
  243. package/src/charting/diagrams/commands/UpdateEdgeSideCommand.js +40 -0
  244. package/src/charting/diagrams/commands/index.js +17 -0
  245. package/src/charting/diagrams/duplicates.js +49 -0
  246. package/src/charting/diagrams/nesting.js +30 -0
  247. package/src/charting/diagrams/roadmap.js +77 -0
  248. package/src/charting/edgeMarkers/ArrowMarker.js +15 -0
  249. package/src/charting/edgeMarkers/CircleMarker.js +13 -0
  250. package/src/charting/edgeMarkers/CrowsFootMarker.js +16 -0
  251. package/src/charting/edgeMarkers/DiamondMarker.js +15 -0
  252. package/src/charting/edgeMarkers/EdgeMarker.js +34 -0
  253. package/src/charting/edgeMarkers/HalfArrowMarker.js +8 -0
  254. package/src/charting/edgeMarkers/HollowDiamondMarker.js +18 -0
  255. package/src/charting/edgeMarkers/HollowTriangleMarker.js +18 -0
  256. package/src/charting/edgeMarkers/OpenArrowMarker.js +17 -0
  257. package/src/charting/edgeMarkers/index.js +27 -0
  258. package/src/charting/edgeStyle/EdgeStyleCascade.js +22 -0
  259. package/src/charting/edgeStyle/EdgeStyleDialog.js +51 -0
  260. package/src/charting/edgeStyle/EdgeStyleSchema.js +43 -0
  261. package/src/charting/edgeStyle/SetStyleCommand.js +12 -0
  262. package/src/charting/edgeStyle/index.js +4 -0
  263. package/src/charting/emphasis/EmphasisRule.js +42 -0
  264. package/src/charting/emphasis/HighlightRule.js +24 -0
  265. package/src/charting/glyphs/ArrowGlyph.js +21 -0
  266. package/src/charting/glyphs/BatteryGlyph.js +18 -0
  267. package/src/charting/glyphs/ChevronGlyph.js +18 -0
  268. package/src/charting/glyphs/CircleGlyph.js +15 -0
  269. package/src/charting/glyphs/CloudGlyph.js +19 -0
  270. package/src/charting/glyphs/ComponentGlyph.js +18 -0
  271. package/src/charting/glyphs/ConstraintGlyph.js +24 -0
  272. package/src/charting/glyphs/ContractBoxGlyph.js +10 -0
  273. package/src/charting/glyphs/CubeGlyph.js +19 -0
  274. package/src/charting/glyphs/CylinderGlyph.js +19 -0
  275. package/src/charting/glyphs/DashedDoubleArrowGlyph.js +11 -0
  276. package/src/charting/glyphs/DeviceGlyph.js +17 -0
  277. package/src/charting/glyphs/DiamondGlyph.js +17 -0
  278. package/src/charting/glyphs/DocumentGlyph.js +17 -0
  279. package/src/charting/glyphs/DoubleArrowGlyph.js +23 -0
  280. package/src/charting/glyphs/DoubleCircleGlyph.js +24 -0
  281. package/src/charting/glyphs/EllipseGlyph.js +18 -0
  282. package/src/charting/glyphs/FactoryGlyph.js +20 -0
  283. package/src/charting/glyphs/FlagGlyph.js +16 -0
  284. package/src/charting/glyphs/GapCircleGlyph.js +17 -0
  285. package/src/charting/glyphs/GearGlyph.js +37 -0
  286. package/src/charting/glyphs/Glyph.js +98 -0
  287. package/src/charting/glyphs/GroupingBoxGlyph.js +13 -0
  288. package/src/charting/glyphs/HalfCircleGlyph.js +22 -0
  289. package/src/charting/glyphs/HexagonGlyph.js +28 -0
  290. package/src/charting/glyphs/IconGlyph.js +22 -0
  291. package/src/charting/glyphs/ImageGlyph.js +16 -0
  292. package/src/charting/glyphs/JunctionGlyph.js +17 -0
  293. package/src/charting/glyphs/LollipopGlyph.js +22 -0
  294. package/src/charting/glyphs/MagnifierGlyph.js +17 -0
  295. package/src/charting/glyphs/NoteGlyph.js +33 -0
  296. package/src/charting/glyphs/ObjectBoxGlyph.js +21 -0
  297. package/src/charting/glyphs/OrJunctionGlyph.js +17 -0
  298. package/src/charting/glyphs/ParallelogramGlyph.js +20 -0
  299. package/src/charting/glyphs/PersonGlyph.js +23 -0
  300. package/src/charting/glyphs/PillGlyph.js +23 -0
  301. package/src/charting/glyphs/PinGlyph.js +18 -0
  302. package/src/charting/glyphs/PrincipleGlyph.js +23 -0
  303. package/src/charting/glyphs/ProductBoxGlyph.js +16 -0
  304. package/src/charting/glyphs/RectGlyph.js +15 -0
  305. package/src/charting/glyphs/RoundedBoxGlyph.js +13 -0
  306. package/src/charting/glyphs/StackGlyph.js +14 -0
  307. package/src/charting/glyphs/StepsGlyph.js +20 -0
  308. package/src/charting/glyphs/StickFigureGlyph.js +32 -0
  309. package/src/charting/glyphs/SystemSoftwareBoxGlyph.js +16 -0
  310. package/src/charting/glyphs/TabbedBoxGlyph.js +37 -0
  311. package/src/charting/glyphs/TargetGlyph.js +23 -0
  312. package/src/charting/glyphs/WavyBoxGlyph.js +17 -0
  313. package/src/charting/glyphs/WheelGlyph.js +28 -0
  314. package/src/charting/glyphs/drawGlyph.js +28 -0
  315. package/src/charting/glyphs/glyphSvg.js +55 -0
  316. package/src/charting/glyphs/index.js +109 -0
  317. package/src/charting/modelTree/AnalysisPanel.js +159 -0
  318. package/src/charting/modelTree/DiagramTabs.js +217 -0
  319. package/src/charting/modelTree/ModelTree.js +164 -0
  320. package/src/charting/modelTree/ModelTreePanel.js +914 -0
  321. package/src/charting/modelTree/TreeBuilder.js +238 -0
  322. package/src/charting/modelTree/TreeModeRegistry.js +51 -0
  323. package/src/charting/modelTree/TreeViewMode.js +110 -0
  324. package/src/charting/modelTree/buildFilterTrees.js +138 -0
  325. package/src/charting/modelTree/modes/FlatTreeMode.js +46 -0
  326. package/src/charting/modelTree/modes/LayerGroupedTreeMode.js +62 -0
  327. package/src/charting/modelTree/modes/TypeGroupedTreeMode.js +60 -0
  328. package/src/charting/modelTree/treeLayers.js +11 -0
  329. package/src/charting/report/reportHtml.js +82 -0
  330. package/src/charting/report/reportViewer.js +118 -0
  331. package/src/charting/shapes/CircleShape.js +19 -0
  332. package/src/charting/shapes/PathShape.js +17 -0
  333. package/src/charting/shapes/RectShape.js +20 -0
  334. package/src/charting/shapes/Shape.js +20 -0
  335. package/src/charting/shapes/ShapeFactory.js +23 -0
  336. package/src/charting/storage/LocalJsonStore.js +43 -0
  337. package/src/charting/templates/ActorTemplate.js +36 -0
  338. package/src/charting/templates/BoxTemplate.js +27 -0
  339. package/src/charting/templates/CircleTemplate.js +18 -0
  340. package/src/charting/templates/ClassTemplate.js +20 -0
  341. package/src/charting/templates/CloudTemplate.js +43 -0
  342. package/src/charting/templates/ComponentTemplate.js +19 -0
  343. package/src/charting/templates/CylinderTemplate.js +30 -0
  344. package/src/charting/templates/DataStoreTemplate.js +16 -0
  345. package/src/charting/templates/DiamondTemplate.js +10 -0
  346. package/src/charting/templates/DocumentTemplate.js +32 -0
  347. package/src/charting/templates/EllipseTemplate.js +15 -0
  348. package/src/charting/templates/FinalStateTemplate.js +12 -0
  349. package/src/charting/templates/GlyphTemplate.js +47 -0
  350. package/src/charting/templates/HexagonTemplate.js +17 -0
  351. package/src/charting/templates/LifelineTemplate.js +20 -0
  352. package/src/charting/templates/ManualInputTemplate.js +12 -0
  353. package/src/charting/templates/NoteTemplate.js +23 -0
  354. package/src/charting/templates/OctagonTemplate.js +7 -0
  355. package/src/charting/templates/PackageTemplate.js +25 -0
  356. package/src/charting/templates/ParallelogramTemplate.js +11 -0
  357. package/src/charting/templates/PentagonTemplate.js +5 -0
  358. package/src/charting/templates/PolygonTemplate.js +18 -0
  359. package/src/charting/templates/PredefinedProcessTemplate.js +13 -0
  360. package/src/charting/templates/RectangleTemplate.js +28 -0
  361. package/src/charting/templates/RegularPolygonTemplate.js +21 -0
  362. package/src/charting/templates/RoundedRectangleTemplate.js +5 -0
  363. package/src/charting/templates/StadiumTemplate.js +8 -0
  364. package/src/charting/templates/StarTemplate.js +17 -0
  365. package/src/charting/templates/SwimlaneTemplate.js +18 -0
  366. package/src/charting/templates/Template.js +208 -0
  367. package/src/charting/templates/TrapezoidTemplate.js +11 -0
  368. package/src/charting/templates/TriangleTemplate.js +12 -0
  369. package/src/charting/templates/index.js +31 -0
  370. package/src/charting/templates/outline.js +59 -0
  371. package/src/charting/templates/svg.js +19 -0
  372. package/src/charting/textToShapes.js +61 -0
  373. package/src/charting/toolbar/ToolbarButton.js +38 -0
  374. package/src/charting/toolbar/ToolbarCheckbox.js +31 -0
  375. package/src/charting/toolbar/ToolbarItem.js +19 -0
  376. package/src/charting/toolbar/ToolbarMenu.js +36 -0
  377. package/src/charting/toolbar/ToolbarSelect.js +38 -0
  378. package/src/charting/toolbar/ToolbarSeparator.js +7 -0
  379. package/src/charting/toolbar/ToolbarText.js +22 -0
  380. package/src/charting/toolbar/index.js +8 -0
  381. package/src/charting/toolbar/pickFile.js +14 -0
  382. package/src/charting/viewDecorations.js +85 -0
  383. package/src/charting/zOrder.js +57 -0
  384. package/src/csvTable.js +61 -0
  385. package/src/datamodel.js +122 -0
  386. package/src/datawindow/BoundedWindow.js +36 -0
  387. package/src/datawindow/FlatDataWindow.js +34 -0
  388. package/src/datawindow/GraphDataWindow.js +40 -0
  389. package/src/datawindow/GroupedSampleDataWindow.js +16 -0
  390. package/src/datawindow/SeriesDataWindow.js +42 -0
  391. package/src/datawindow/index.js +31 -0
  392. package/src/diagramCatalog.js +30 -0
  393. package/src/ebnfDiagram.js +57 -0
  394. package/src/ebnfParser.js +129 -0
  395. package/src/exportImage.js +233 -0
  396. package/src/index.js +2564 -0
  397. package/src/itIcons.js +84 -0
  398. package/src/kernelExpr.js +243 -0
  399. package/src/propertiesDialog.js +463 -0
  400. package/src/railroadDiagram.js +571 -0
  401. package/src/treeModeCatalog.js +16 -0
  402. package/src/workspace/ContextBus.js +79 -0
  403. package/src/workspace/EditorShell.js +67 -0
  404. package/src/workspace/Part.js +163 -0
  405. package/src/workspace/PartFactory.js +49 -0
  406. package/src/workspace/PartRegistry.js +86 -0
  407. package/src/workspace/Workspace.js +321 -0
  408. package/src/workspace/archimateServices.js +33 -0
  409. package/src/workspace/dom.js +120 -0
  410. package/src/workspace/index.js +75 -0
  411. package/src/workspace/layout/GridNode.js +280 -0
  412. package/src/workspace/layout/LayoutNode.js +89 -0
  413. package/src/workspace/layout/PartNode.js +77 -0
  414. package/src/workspace/layout/SplitNode.js +114 -0
  415. package/src/workspace/layout/TabsNode.js +191 -0
  416. package/src/workspace/layout/index.js +24 -0
  417. package/src/workspace/parts/AdapterPart.js +33 -0
  418. package/src/workspace/parts/ArchimateCanvasPart.js +345 -0
  419. package/src/workspace/parts/ArchimateEditorPart.js +79 -0
  420. package/src/workspace/parts/ChartPart.js +115 -0
  421. package/src/workspace/parts/ContentPart.js +34 -0
  422. package/src/workspace/parts/DetailPart.js +46 -0
  423. package/src/workspace/parts/DiagramEditorPart.js +135 -0
  424. package/src/workspace/parts/EditorPart.js +388 -0
  425. package/src/workspace/parts/HtmlPart.js +25 -0
  426. package/src/workspace/parts/ListPart.js +57 -0
  427. package/src/workspace/parts/ModelFile.js +187 -0
  428. package/src/workspace/parts/ModelsPart.js +135 -0
  429. package/src/workspace/styles.js +258 -0
  430. package/src/workspace/themes.js +96 -0
  431. package/src/workspace/workArea.js +413 -0
  432. package/src/workspace/workAreaModel.js +197 -0
  433. package/src/workspace.js +16 -0
  434. package/src/zip/ZipArchive.js +160 -0
  435. package/src/zip/crc32.js +25 -0
  436. package/src/zip/inflate.js +159 -0
@@ -0,0 +1,4 @@
1
+ export { EDGE_STYLE_PROPERTIES, LINE_ONLY_PROPERTIES, LINE_STYLE_DASH } from './EdgeStyleSchema.js';
2
+ export { EdgeStyleCascade } from './EdgeStyleCascade.js';
3
+ export { SetStyleCommand } from './SetStyleCommand.js';
4
+ export { EdgeStyleDialog } from './EdgeStyleDialog.js';
@@ -0,0 +1,42 @@
1
+ /**
2
+ * How strongly a shape or line is drawn, weakest last: drawn see-through
3
+ * (dimmed: not matching a highlight; faded: outside the viewpoint), or not
4
+ * drawn at all (hidden). Each level's opacity; hidden has none.
5
+ */
6
+ export const EMPHASIS_OPACITY = Object.freeze({ dimmed: 0.3, faded: 0.2 });
7
+
8
+ /** The levels from weakest effect to strongest; the strongest any rule gives wins. */
9
+ export const EMPHASIS_LEVELS = Object.freeze([null, 'dimmed', 'faded', 'hidden']);
10
+
11
+ /** The stronger of two levels. */
12
+ export const strongerEmphasis = (a, b) => (EMPHASIS_LEVELS.indexOf(b) > EMPHASIS_LEVELS.indexOf(a) ? b : a);
13
+
14
+ /**
15
+ * EmphasisRule — one reason the editor draws some shapes or lines more faintly
16
+ * or not at all (a highlight, a viewpoint, ...). The editor asks each of its
17
+ * rules (`DiagramEditor#emphasisRules()`) and draws an item at the strongest
18
+ * level any gives; a line whose shape is hidden is hidden too. A rule only
19
+ * changes how an item is drawn: the item stays in the view, and its rule can
20
+ * be cleared.
21
+ */
22
+ export class EmphasisRule {
23
+ /**
24
+ * How a shape is drawn under this rule.
25
+ * @param {Template} template
26
+ * @param {DiagramEditor} editor
27
+ * @returns {null|'dimmed'|'faded'|'hidden'} null: as usual
28
+ */
29
+ template(template, editor) {
30
+ return null;
31
+ }
32
+
33
+ /**
34
+ * How a line is drawn under this rule (its hidden ends are the editor's business).
35
+ * @param {Edge} edge
36
+ * @param {DiagramEditor} editor
37
+ * @returns {null|'dimmed'|'faded'|'hidden'}
38
+ */
39
+ edge(edge, editor) {
40
+ return null;
41
+ }
42
+ }
@@ -0,0 +1,24 @@
1
+ import { EmphasisRule } from './EmphasisRule.js';
2
+
3
+ /**
4
+ * HighlightRule — shapes whose name contains some text (any case) are drawn
5
+ * as usual and every other shape dimmed, so the matches stand out. Lines are
6
+ * left as they are. `matches(template)` is what a subclass changes to match
7
+ * on something else.
8
+ */
9
+ export class HighlightRule extends EmphasisRule {
10
+ /** @param {string} text */
11
+ constructor(text) {
12
+ super();
13
+ this.text = String(text ?? '').trim();
14
+ }
15
+
16
+ /** Whether a shape matches: its name contains the text, ignoring case. */
17
+ matches(template) {
18
+ return String(template.name ?? '').toLowerCase().includes(this.text.toLowerCase());
19
+ }
20
+
21
+ template(template) {
22
+ return !this.text || this.matches(template) ? null : 'dimmed';
23
+ }
24
+ }
@@ -0,0 +1,21 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Process: a flat-backed arrow pointing right. */
4
+ export class ArrowGlyph extends Glyph {
5
+ static key = 'arrow';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const sh = h * 0.27, hx = w * 0.08; // shaft half-height, where the head starts
12
+ const d = `M ${-w / 2},${-sh} L ${hx},${-sh} L ${hx},${-h / 2} L ${w / 2},0`
13
+ + ` L ${hx},${h / 2} L ${hx},${sh} L ${-w / 2},${sh} Z`;
14
+ return G.path(d, ctx.color, st());
15
+ }
16
+ outline(ctx) {
17
+ const { w, h } = ctx;
18
+ const sh = h * 0.27, hx = w * 0.08;
19
+ return [[-w / 2, -sh], [hx, -sh], [hx, -h / 2], [w / 2, 0], [hx, h / 2], [hx, sh], [-w / 2, sh]];
20
+ }
21
+ }
@@ -0,0 +1,18 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Resource: a rounded box with a terminal nub and charge bars. */
4
+ export class BatteryGlyph extends Glyph {
5
+ static key = 'battery';
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 nub = h * 0.25, barX = -w * 0.28;
12
+ return G.group([
13
+ G.rect(-w / 2, -h / 2, w * 0.88, h, ctx.color, st(), { rx: h * 0.15 }),
14
+ G.rect(w * 0.38, -nub / 2, w * 0.12, nub, ctx.color, st()),
15
+ G.path(`M${barX},${-h * 0.3} L${barX},${h * 0.3} M${barX + w * 0.14},${-h * 0.3} L${barX + w * 0.14},${h * 0.3} M${barX + w * 0.28},${-h * 0.3} L${barX + w * 0.28},${h * 0.3}`, 'none', st()),
16
+ ]);
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Function: a chevron pointing up, notched at the bottom. */
4
+ export class ChevronGlyph extends Glyph {
5
+ static key = 'chevron';
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 d = `M ${-w / 2},${h / 2} L ${-w / 2},${-h * 0.22} L 0,${-h / 2} L ${w / 2},${-h * 0.22} L ${w / 2},${h / 2} L 0,${h * 0.22} Z`;
12
+ return G.path(d, ctx.color, st());
13
+ }
14
+ outline(ctx) {
15
+ const { w, h } = ctx;
16
+ return [[-w / 2, h / 2], [-w / 2, -h * 0.22], [0, -h / 2], [w / 2, -h * 0.22], [w / 2, h / 2], [0, h * 0.22]];
17
+ }
18
+ }
@@ -0,0 +1,15 @@
1
+ import { sampleArc } from '../templates/outline.js';
2
+ import { Glyph } from './Glyph.js';
3
+
4
+ /** A circle fitted to the smaller side: the plain graph node, and the fallback for unknown keys. */
5
+ export class CircleGlyph extends Glyph {
6
+ static key = 'circle';
7
+
8
+ parts(ctx) {
9
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
10
+ return G.circle(0, 0, ctx.circleR, ctx.color, st());
11
+ }
12
+ outline(ctx) {
13
+ return sampleArc(0, 0, ctx.circleR, ctx.circleR, 0, Math.PI * 2, 48).slice(0, -1);
14
+ }
15
+ }
@@ -0,0 +1,19 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Meaning: a rounded base and three bumps, fill only so the overlaps read as one silhouette. */
4
+ export class CloudGlyph extends Glyph {
5
+ static key = 'cloud';
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 baseH = h * 0.5, baseY = h / 2 - baseH;
12
+ return G.group([
13
+ G.rect(-w * 0.42, baseY, w * 0.84, baseH, ctx.color, null, { rx: baseH / 2 }),
14
+ G.circle(-w * 0.24, baseY + baseH * 0.1, h * 0.3, ctx.color, null),
15
+ G.circle(0, baseY - h * 0.08, h * 0.36, ctx.color, null),
16
+ G.circle(w * 0.24, baseY + baseH * 0.1, h * 0.28, ctx.color, null),
17
+ ]);
18
+ }
19
+ }
@@ -0,0 +1,18 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Component: a box with two connector tabs on its left edge. */
4
+ export class ComponentGlyph extends Glyph {
5
+ static key = 'component';
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 tabW = w * 0.12, tabH = h * 0.16;
12
+ return G.group([
13
+ G.rect(-w / 2 + tabW * 0.6, -h / 2, w - tabW * 0.6, h, ctx.color, st()),
14
+ G.rect(-w / 2, -h * 0.28, tabW, tabH, ctx.color, st()),
15
+ G.rect(-w / 2, h * 0.08, tabW, tabH, ctx.color, st()),
16
+ ]);
17
+ }
18
+ }
@@ -0,0 +1,24 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Constraint: a parallelogram with an internal divider. */
4
+ export class ConstraintGlyph extends Glyph {
5
+ static key = 'constraint';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const skew = w * 0.15;
12
+ const d = `M ${-w / 2 + skew},${-h / 2} L ${w / 2},${-h / 2} L ${w / 2 - skew},${h / 2} L ${-w / 2},${h / 2} Z`;
13
+ const lx0 = -w / 2 + skew * 1.6;
14
+ return G.group([
15
+ G.path(d, ctx.color, st()),
16
+ G.path(`M ${lx0},${-h / 2} L ${lx0 - skew * 0.5},${h / 2}`, 'none', st(0.75)),
17
+ ]);
18
+ }
19
+ outline(ctx) {
20
+ const { w, h } = ctx;
21
+ const skew = w * 0.15;
22
+ return [[-w / 2 + skew, -h / 2], [w / 2, -h / 2], [w / 2 - skew, h / 2], [-w / 2, h / 2]];
23
+ }
24
+ }
@@ -0,0 +1,10 @@
1
+ import { ObjectBoxGlyph } from './ObjectBoxGlyph.js';
2
+
3
+ /** Contract: an object box with two bars. */
4
+ export class ContractBoxGlyph extends ObjectBoxGlyph {
5
+ static key = 'contract-box';
6
+
7
+ bars(h) {
8
+ return [-h * 0.22, -h * 0.02];
9
+ }
10
+ }
@@ -0,0 +1,19 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Node: a 3-face isometric box (front, top, side). */
4
+ export class CubeGlyph extends Glyph {
5
+ static key = 'cube';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const depth = Math.min(w, h) * 0.32;
12
+ const fx0 = -w / 2, fx1 = w / 2 - depth, fy0 = -h / 2 + depth, fy1 = h / 2;
13
+ return G.group([
14
+ G.rect(fx0, fy0, fx1 - fx0, fy1 - fy0, ctx.color, st()),
15
+ G.path(`M ${fx0},${fy0} L ${fx0 + depth},${fy0 - depth} L ${fx1 + depth},${fy0 - depth} L ${fx1},${fy0} Z`, ctx.color, st()),
16
+ G.path(`M ${fx1},${fy0} L ${fx1 + depth},${fy0 - depth} L ${fx1 + depth},${fy1 - depth} L ${fx1},${fy1} Z`, ctx.color, st()),
17
+ ]);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Role/Stakeholder: a horizontal drum. */
4
+ export class CylinderGlyph extends Glyph {
5
+ static key = 'cylinder';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const capRx = Math.min(w * 0.17, h * 0.5);
12
+ const cx = w / 2 - capRx;
13
+ return G.group([
14
+ G.path(`M ${-w / 2},${-h / 2} L ${cx},${-h / 2} A ${capRx} ${h / 2} 0 0 1 ${cx},${h / 2} L ${-w / 2},${h / 2} Z`, ctx.color, st()),
15
+ // The cap's far side, so it reads as a tube rather than a pill.
16
+ G.path(`M ${cx},${-h / 2} A ${capRx} ${h / 2} 0 0 0 ${cx},${h / 2}`, 'none', st()),
17
+ ]);
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ import { Glyph } from './Glyph.js';
2
+ import { DoubleArrowGlyph } from './DoubleArrowGlyph.js';
3
+
4
+ /** Path: a dashed two-headed arrow. */
5
+ export class DashedDoubleArrowGlyph extends DoubleArrowGlyph {
6
+ static key = 'double-arrow-dashed';
7
+
8
+ shaft(w, headW, stroke) {
9
+ return Glyph.path(`M ${-w / 2 + headW * 0.6},0 L ${w / 2 - headW * 0.6},0`, 'none', stroke, { 'stroke-dasharray': '3 3' });
10
+ }
11
+ }
@@ -0,0 +1,17 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Device: a monitor on a small stand. */
4
+ export class DeviceGlyph extends Glyph {
5
+ static key = 'device';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const screenH = h * 0.60, standH = h * 0.26, standTop = -h / 2 + screenH;
12
+ return G.group([
13
+ G.rect(-w / 2, -h / 2, w, screenH, ctx.color, st(), { rx: h * 0.10 }),
14
+ G.path(`M ${-w * 0.12},${standTop} L ${w * 0.12},${standTop} L ${w * 0.34},${standTop + standH} L ${-w * 0.34},${standTop + standH} Z`, ctx.color, st()),
15
+ ]);
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** A diamond fitted to the smaller side. */
4
+ export class DiamondGlyph extends Glyph {
5
+ static key = 'diamond';
6
+
7
+ parts(ctx) {
8
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
9
+ const r = ctx.circleR;
10
+ const diamondPoints = `0,${-r} ${r},0 0,${r} ${-r},0`;
11
+ return G.path(`M${diamondPoints}Z`, ctx.color, st());
12
+ }
13
+ outline(ctx) {
14
+ const r = ctx.circleR;
15
+ return [[0, -r], [r, 0], [0, r], [-r, 0]];
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Artifact: a page with a folded top-right corner. */
4
+ export class DocumentGlyph extends Glyph {
5
+ static key = 'document';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const fold = Math.min(w, h) * 0.20;
12
+ return G.group([
13
+ G.path(`M ${-w / 2},${-h / 2} L ${w / 2 - fold},${-h / 2} L ${w / 2},${-h / 2 + fold} L ${w / 2},${h / 2} L ${-w / 2},${h / 2} Z`, ctx.color, st()),
14
+ G.path(`M ${w / 2 - fold},${-h / 2} L ${w / 2 - fold},${-h / 2 + fold} L ${w / 2},${-h / 2 + fold}`, 'none', st(0.75)),
15
+ ]);
16
+ }
17
+ }
@@ -0,0 +1,23 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Communication/Distribution network: a two-headed arrow. */
4
+ export class DoubleArrowGlyph extends Glyph {
5
+ static key = 'double-arrow';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const headW = w * 0.17, headH = h * 0.42;
12
+ return G.group([this.shaft(w, headW, st(1.25)), G.path(DoubleArrowGlyph.heads(w, headW, headH), 'none', st(1.25))]);
13
+ }
14
+
15
+ shaft(w, headW, stroke) {
16
+ return Glyph.path(`M ${-w / 2},0 L ${w / 2},0`, 'none', stroke);
17
+ }
18
+
19
+ static heads(w, headW, headH) {
20
+ return `M ${-w / 2 + headW},${-headH / 2} L ${-w / 2},0 L ${-w / 2 + headW},${headH / 2}`
21
+ + ` M ${w / 2 - headW},${-headH / 2} L ${w / 2},0 L ${w / 2 - headW},${headH / 2}`;
22
+ }
23
+ }
@@ -0,0 +1,24 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Collaboration: two overlapping circles. */
4
+ export class DoubleCircleGlyph extends Glyph {
5
+ static key = 'double-circle';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const cr = Math.min(w, h) * 0.44, off = cr * 0.55;
12
+ return G.group([
13
+ G.circle(-off, 0, cr, ctx.color, st()),
14
+ G.circle(off, 0, cr, ctx.color, st()),
15
+ // Re-stroke the back circle so the intersection lens reads.
16
+ G.circle(-off, 0, cr, 'none', st()),
17
+ ]);
18
+ }
19
+ /** Around both circles. */
20
+ outline(ctx) {
21
+ const cr = Math.min(ctx.w, ctx.h) * 0.44, off = cr * 0.55;
22
+ return [[-off - cr, -cr], [off + cr, -cr], [off + cr, cr], [-off - cr, cr]];
23
+ }
24
+ }
@@ -0,0 +1,18 @@
1
+ import { sampleArc } from '../templates/outline.js';
2
+ import { Glyph } from './Glyph.js';
3
+
4
+ /** Value: an oval. */
5
+ export class EllipseGlyph extends Glyph {
6
+ static key = 'ellipse';
7
+ static ownsInterior = true;
8
+
9
+ parts(ctx) {
10
+ const { w, h } = ctx;
11
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
12
+ const d = `M ${-w / 2},0 A ${w / 2} ${h / 2} 0 1 0 ${w / 2},0 A ${w / 2} ${h / 2} 0 1 0 ${-w / 2},0 Z`;
13
+ return G.path(d, ctx.color, st());
14
+ }
15
+ outline(ctx) {
16
+ return sampleArc(0, 0, ctx.w / 2, ctx.h / 2, 0, Math.PI * 2, 48).slice(0, -1);
17
+ }
18
+ }
@@ -0,0 +1,20 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Facility: a building with a zigzag roofline. */
4
+ export class FactoryGlyph extends Glyph {
5
+ static key = 'factory';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const eaves = -h * 0.02, peaks = 3, tw = w / peaks;
12
+ let d = `M ${-w / 2},${h / 2} L ${-w / 2},${eaves}`;
13
+ for (let i = 0; i < peaks; i++) {
14
+ const xEnd = -w / 2 + tw * (i + 1);
15
+ d += ` L ${xEnd},${-h / 2} L ${xEnd},${eaves}`;
16
+ }
17
+ d += ` L ${w / 2},${h / 2} Z`;
18
+ return G.path(d, ctx.color, st());
19
+ }
20
+ }
@@ -0,0 +1,16 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Event: a notched-left, rounded-right pennant. */
4
+ export class FlagGlyph extends Glyph {
5
+ static key = 'flag';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const capX = Math.max(-w / 2, w / 2 - h / 2); // cap is a true semicircle
12
+ const notchX = -w / 2 + w * 0.18;
13
+ const d = `M ${-w / 2},${-h / 2} L ${capX},${-h / 2} A ${h / 2} ${h / 2} 0 0 1 ${capX},${h / 2} L ${-w / 2},${h / 2} L ${notchX},0 Z`;
14
+ return G.path(d, ctx.color, st());
15
+ }
16
+ }
@@ -0,0 +1,17 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Gap: a circle crossed by two horizontal lines. */
4
+ export class GapCircleGlyph extends Glyph {
5
+ static key = 'gap-circle';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const gr = Math.min(w, h) * 0.3;
12
+ return G.group([
13
+ G.path(`M ${-w / 2},${-h * 0.12} L ${w / 2},${-h * 0.12} M ${-w / 2},${h * 0.12} L ${w / 2},${h * 0.12}`, 'none', st()),
14
+ G.circle(0, 0, gr, ctx.color, st()),
15
+ ]);
16
+ }
17
+ }
@@ -0,0 +1,37 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Equipment: two overlapping cogs. */
4
+ export class GearGlyph extends Glyph {
5
+ static key = 'gear';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const makeTeeth = (cx, cy, gr, toothCount) => {
12
+ const toothLen = gr * 0.38, toothW = gr * 0.44;
13
+ let teeth = '';
14
+ for (let i = 0; i < toothCount; i++) {
15
+ const angle = (i / toothCount) * Math.PI * 2;
16
+ const dx = Math.cos(angle), dy = Math.sin(angle), px = -dy, py = dx;
17
+ const tcx = cx + dx * (gr + toothLen / 2), tcy = cy + dy * (gr + toothLen / 2);
18
+ const x1 = tcx - dx * toothLen / 2 - px * toothW / 2, y1 = tcy - dy * toothLen / 2 - py * toothW / 2;
19
+ const x2 = tcx - dx * toothLen / 2 + px * toothW / 2, y2 = tcy - dy * toothLen / 2 + py * toothW / 2;
20
+ const x3 = tcx + dx * toothLen / 2 + px * toothW / 2, y3 = tcy + dy * toothLen / 2 + py * toothW / 2;
21
+ const x4 = tcx + dx * toothLen / 2 - px * toothW / 2, y4 = tcy + dy * toothLen / 2 - py * toothW / 2;
22
+ teeth += `M${x1},${y1} L${x2},${y2} L${x3},${y3} L${x4},${y4} Z `;
23
+ }
24
+ return teeth;
25
+ };
26
+ const bigR = Math.min(w, h) * 0.28, smallR = bigR * 0.60;
27
+ const bigCx = -w * 0.17, bigCy = h * 0.16, smallCx = w * 0.23, smallCy = -h * 0.21;
28
+ return G.group([
29
+ G.path(makeTeeth(bigCx, bigCy, bigR, 8), ctx.color, st(0.5)),
30
+ G.circle(bigCx, bigCy, bigR, ctx.color, st()),
31
+ G.path(makeTeeth(smallCx, smallCy, smallR, 6), ctx.color, st(0.5)),
32
+ G.circle(smallCx, smallCy, smallR, ctx.color, st()),
33
+ G.circle(bigCx, bigCy, bigR * 0.35, '#fff', null),
34
+ G.circle(smallCx, smallCy, smallR * 0.35, '#fff', null),
35
+ ]);
36
+ }
37
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Glyph — one notation shape (ArchiMate's pill, cube, chevron, ... and the
3
+ * plain graph shapes), described once as renderer-neutral parts so the graph
4
+ * engine and the editor's templates draw exactly the same thing.
5
+ *
6
+ * `parts(ctx)` returns a descriptor tree centred on (0, 0):
7
+ * { type: 'rect', x, y, w, h, fill, stroke, extra?, attrs? }
8
+ * { type: 'circle', cx, cy, r, fill, stroke, attrs? }
9
+ * { type: 'path', d, fill, stroke, attrs? }
10
+ * { type: 'image', href, x, y, w, h, options? }
11
+ * { type: 'text', text, x, y, options? }
12
+ * { type: 'group', children: [...], attrs? }
13
+ * `stroke` is `{color, width}` or null; `extra`/`options` are the renderer's own
14
+ * extra arguments (e.g. `{rx}`); `attrs` are SVG attributes set afterwards
15
+ * (e.g. `stroke-dasharray`). drawGlyph() replays a tree through a renderer.
16
+ *
17
+ * Context: `w`, `h` (box size), `R` (half the larger side), `circleR` (half the
18
+ * smaller side), `color` (fill), `strokeColor`, `strokeWidth`, `cornerStyle`,
19
+ * `icon`, `iconUrl`.
20
+ */
21
+ export class Glyph {
22
+ /** Shape name a node or element type asks for ('pill', 'cube', ...). */
23
+ static key = null;
24
+ /** True when the shape is busy enough that no centred icon or initials go on top of it. */
25
+ static ownsInterior = false;
26
+
27
+ /** @returns {Object} descriptor tree, centred on (0, 0) */
28
+ parts(ctx) {
29
+ throw new Error(`${this.constructor.name} must implement parts()`);
30
+ }
31
+
32
+ /**
33
+ * The visible outline as a closed polygon centred on (0, 0), for attaching
34
+ * lines exactly (curves sampled). The box by default; a shape whose edge
35
+ * is clearly not its box overrides it.
36
+ * @returns {Array<[number, number]>}
37
+ */
38
+ outline(ctx) {
39
+ const { w, h } = ctx;
40
+ return [[-w / 2, -h / 2], [w / 2, -h / 2], [w / 2, h / 2], [-w / 2, h / 2]];
41
+ }
42
+
43
+ /** The outline stroke, its width scaled by `scale` (omitted = as given). */
44
+ stroke(ctx, scale) {
45
+ return { color: ctx.strokeColor, width: scale === undefined ? ctx.strokeWidth : ctx.strokeWidth * scale };
46
+ }
47
+
48
+ /**
49
+ * Drawing context for a node: `size` ({w, h}) when it has its own box,
50
+ * otherwise a square of side 2R.
51
+ */
52
+ static context({ R, size, color, cornerStyle, strokeColor = '#fff', strokeWidth = 2, iconUrl = null, icon = null, ownFill = null }) {
53
+ return {
54
+ R,
55
+ w: size?.w ?? R * 2,
56
+ h: size?.h ?? R * 2,
57
+ circleR: size ? Math.min(size.w, size.h) / 2 : R,
58
+ // ownFill: a fill set on the item itself (null: it takes its kind's), for a glyph with a look of its own (a note).
59
+ color, cornerStyle, strokeColor, strokeWidth, iconUrl, icon, ownFill,
60
+ };
61
+ }
62
+
63
+ static rect(x, y, w, h, fill, stroke, extra, attrs) {
64
+ return { type: 'rect', x, y, w, h, fill, stroke, extra, attrs };
65
+ }
66
+
67
+ static circle(cx, cy, r, fill, stroke, attrs) {
68
+ return { type: 'circle', cx, cy, r, fill, stroke, attrs };
69
+ }
70
+
71
+ static path(d, fill, stroke, attrs) {
72
+ return { type: 'path', d, fill, stroke, attrs };
73
+ }
74
+
75
+ static image(href, x, y, w, h, options) {
76
+ return { type: 'image', href, x, y, w, h, options };
77
+ }
78
+
79
+ static text(text, x, y, options) {
80
+ return { type: 'text', text, x, y, options };
81
+ }
82
+
83
+ static group(children, attrs) {
84
+ return { type: 'group', children, attrs };
85
+ }
86
+
87
+ /** Box corner radius: 'sharp' 0, 'rounded' (ArchiMate behavior) quite round, otherwise a small 3. */
88
+ static cornerRadius(cornerStyle, w, h) {
89
+ return cornerStyle === 'sharp' ? 0 : cornerStyle === 'rounded' ? Math.min(w, h) * 0.28 : 3;
90
+ }
91
+
92
+ /** SVG path for a w x h box centred on the origin with all four corners cut at 45° (ArchiMate Motivation). */
93
+ static chamferedRectPath(w, h, chamfer) {
94
+ const hw = w / 2, hh = h / 2;
95
+ const c = Math.min(chamfer ?? Math.min(w, h) * 0.18, hw, hh);
96
+ return `M${-hw + c},${-hh} L${hw - c},${-hh} L${hw},${-hh + c} L${hw},${hh - c} L${hw - c},${hh} L${-hw + c},${hh} L${-hw},${hh - c} L${-hw},${-hh + c} Z`;
97
+ }
98
+ }
@@ -0,0 +1,13 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Grouping: a box with a dashed outline. */
4
+ export class GroupingBoxGlyph extends Glyph {
5
+ static key = 'grouping-box';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ return G.rect(-w / 2, -h / 2, w, h, ctx.color, st(), undefined, { 'stroke-dasharray': '6 4' });
12
+ }
13
+ }
@@ -0,0 +1,22 @@
1
+ import { Glyph } from './Glyph.js';
2
+
3
+ /** Interaction: two facing half-discs. */
4
+ export class HalfCircleGlyph extends Glyph {
5
+ static key = 'half-circle';
6
+ static ownsInterior = true;
7
+
8
+ parts(ctx) {
9
+ const { w, h } = ctx;
10
+ const G = Glyph, st = (k) => this.stroke(ctx, k);
11
+ const hr = Math.min(w, h) / 2 * 0.92, gap = hr * 0.20;
12
+ return G.group([
13
+ G.path(`M ${-gap},${-hr} A ${hr} ${hr} 0 0 0 ${-gap},${hr} Z`, ctx.color, st()),
14
+ G.path(`M ${gap},${-hr} A ${hr} ${hr} 0 0 1 ${gap},${hr} Z`, ctx.color, st()),
15
+ ]);
16
+ }
17
+ /** Around both half-discs. */
18
+ outline(ctx) {
19
+ const hr = Math.min(ctx.w, ctx.h) / 2 * 0.92, gap = hr * 0.20;
20
+ return [[-gap - hr, -hr], [gap + hr, -hr], [gap + hr, hr], [-gap - hr, hr]];
21
+ }
22
+ }