@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,110 @@
1
+ /**
2
+ * DiagramEditorCommand — Base class for all diagram editing operations.
3
+ * Implements the Command pattern with undo/redo support.
4
+ *
5
+ * Subclasses must implement:
6
+ * execute() — apply the change to the diagram state
7
+ * undo() — revert the change
8
+ */
9
+ export class DiagramEditorCommand {
10
+ constructor(label = 'Edit') {
11
+ this.label = label; // User-visible description for undo/redo menu
12
+ }
13
+
14
+ /**
15
+ * Execute the command. Must be implemented by subclasses.
16
+ * @throws Error if not overridden
17
+ */
18
+ execute() {
19
+ throw new Error('Command.execute() must be implemented by subclass');
20
+ }
21
+
22
+ /**
23
+ * Undo the command. Must be implemented by subclasses.
24
+ * @throws Error if not overridden
25
+ */
26
+ undo() {
27
+ throw new Error('Command.undo() must be implemented by subclass');
28
+ }
29
+ }
30
+
31
+ /**
32
+ * CommandHistory — Manages undo/redo stack.
33
+ * Executes commands and tracks history for undo/redo.
34
+ */
35
+ export class CommandHistory {
36
+ constructor() {
37
+ this.undoStack = [];
38
+ this.redoStack = [];
39
+ }
40
+
41
+ /**
42
+ * Execute a command and add it to undo history.
43
+ * @param {DiagramEditorCommand} command
44
+ */
45
+ execute(command) {
46
+ command.execute();
47
+ this.undoStack.push(command);
48
+ this.redoStack = []; // Clear redo stack when new command is executed
49
+ }
50
+
51
+ /**
52
+ * Undo the last command.
53
+ * @returns {boolean} true if undo was successful, false if stack empty
54
+ */
55
+ undo() {
56
+ if (this.undoStack.length === 0) return false;
57
+ const command = this.undoStack.pop();
58
+ command.undo();
59
+ this.redoStack.push(command);
60
+ return true;
61
+ }
62
+
63
+ /**
64
+ * Redo the last undone command.
65
+ * @returns {boolean} true if redo was successful, false if stack empty
66
+ */
67
+ redo() {
68
+ if (this.redoStack.length === 0) return false;
69
+ const command = this.redoStack.pop();
70
+ command.execute();
71
+ this.undoStack.push(command);
72
+ return true;
73
+ }
74
+
75
+ /**
76
+ * Check if undo is available.
77
+ */
78
+ canUndo() {
79
+ return this.undoStack.length > 0;
80
+ }
81
+
82
+ /**
83
+ * Check if redo is available.
84
+ */
85
+ canRedo() {
86
+ return this.redoStack.length > 0;
87
+ }
88
+
89
+ /**
90
+ * Get the label of the command that would be undone.
91
+ */
92
+ getUndoLabel() {
93
+ return this.undoStack.length > 0 ? this.undoStack[this.undoStack.length - 1].label : null;
94
+ }
95
+
96
+ /**
97
+ * Get the label of the command that would be redone.
98
+ */
99
+ getRedoLabel() {
100
+ return this.redoStack.length > 0 ? this.redoStack[this.redoStack.length - 1].label : null;
101
+ }
102
+
103
+ /**
104
+ * Clear all undo/redo history.
105
+ */
106
+ clear() {
107
+ this.undoStack = [];
108
+ this.redoStack = [];
109
+ }
110
+ }
@@ -0,0 +1,237 @@
1
+ import { Command } from './CommandHistory.js';
2
+ import { reorderedZ } from './zOrder.js';
3
+
4
+ /**
5
+ * Standard commands for diagram editors (move, z-index ordering).
6
+ * Used by DiagramEditor subclasses for common interactions.
7
+ */
8
+
9
+ export class MoveElementCommand extends Command {
10
+ constructor(editor, elementId, deltaX, deltaY) {
11
+ super('Move');
12
+ this.editor = editor;
13
+ this.elementId = elementId;
14
+ this.deltaX = deltaX;
15
+ this.deltaY = deltaY;
16
+ }
17
+
18
+ execute() {
19
+ const template = this.editor.getTemplate(this.elementId);
20
+ if (template) {
21
+ template.x = (template.x || 0) + this.deltaX;
22
+ template.y = (template.y || 0) + this.deltaY;
23
+ }
24
+ }
25
+
26
+ undo() {
27
+ const template = this.editor.getTemplate(this.elementId);
28
+ if (template) {
29
+ template.x = (template.x || 0) - this.deltaX;
30
+ template.y = (template.y || 0) - this.deltaY;
31
+ }
32
+ }
33
+ }
34
+
35
+ /**
36
+ * ReorderCommand — change one item's place in the stacking order, as one undo
37
+ * step. `target` is anything with `layerItems()` returning its items
38
+ * (`{id, zIndex}`): DiagramEditor (its templates) or a DiagramEditorState view
39
+ * (DiagramView's templates, ArchimateView's element instances). Every item's previous zIndex is restored on undo, since
40
+ * the reorder renumbers the whole stack (see zOrder.js).
41
+ */
42
+ export class ReorderCommand extends Command {
43
+ /** @type {'front'|'back'|'raise'|'lower'} set by each subclass */
44
+ static op = null;
45
+
46
+ constructor(target, itemId, label) {
47
+ super(label);
48
+ this.target = target;
49
+ this.itemId = itemId;
50
+ this.before = null;
51
+ }
52
+
53
+ execute() {
54
+ // A locked item stays where it is in the stack too; a pinned one stays behind.
55
+ const arrangement = this.target.arrangement;
56
+ if (arrangement?.isLocked(this.itemId)) return;
57
+ const items = this.target.layerItems();
58
+ const next = reorderedZ(items, this.itemId, this.constructor.op, { pinned: (id) => !!arrangement?.isPinnedToBack(id) });
59
+ if (!next) return;
60
+ this.before = new Map(items.map(item => [item.id, item.zIndex]));
61
+ for (const item of items) item.zIndex = next.get(item.id);
62
+ }
63
+
64
+ undo() {
65
+ if (!this.before) return;
66
+ for (const item of this.target.layerItems()) {
67
+ if (this.before.has(item.id)) item.zIndex = this.before.get(item.id);
68
+ }
69
+ }
70
+ }
71
+
72
+ export class BringToFrontCommand extends ReorderCommand {
73
+ static op = 'front';
74
+ constructor(target, itemId) { super(target, itemId, 'Bring to Front'); }
75
+ }
76
+
77
+ export class SendToBackCommand extends ReorderCommand {
78
+ static op = 'back';
79
+ constructor(target, itemId) { super(target, itemId, 'Send to Back'); }
80
+ }
81
+
82
+ export class RaiseCommand extends ReorderCommand {
83
+ static op = 'raise';
84
+ constructor(target, itemId) { super(target, itemId, 'Raise'); }
85
+ }
86
+
87
+ export class LowerCommand extends ReorderCommand {
88
+ static op = 'lower';
89
+ constructor(target, itemId) { super(target, itemId, 'Lower'); }
90
+ }
91
+
92
+ export class EditPropertyCommand extends Command {
93
+ constructor(editor, templateId, propertyName, oldValue, newValue) {
94
+ super(`Edit ${propertyName}`);
95
+ this.editor = editor;
96
+ this.templateId = templateId;
97
+ this.propertyName = propertyName;
98
+ this.oldValue = oldValue;
99
+ this.newValue = newValue;
100
+ }
101
+
102
+ execute() {
103
+ const template = this.editor.getTemplate(this.templateId);
104
+ if (template) {
105
+ template[this.propertyName] = this.newValue;
106
+ }
107
+ }
108
+
109
+ undo() {
110
+ const template = this.editor.getTemplate(this.templateId);
111
+ if (template) {
112
+ template[this.propertyName] = this.oldValue;
113
+ }
114
+ }
115
+ }
116
+
117
+ export class CreateTemplateCommand extends Command {
118
+ constructor(editor, template) {
119
+ super(`Create ${template.name}`);
120
+ this.editor = editor;
121
+ this.template = template;
122
+ }
123
+
124
+ execute() {
125
+ this.editor.addTemplate(this.template);
126
+ }
127
+
128
+ undo() {
129
+ this.editor.removeTemplate(this.template.id);
130
+ }
131
+ }
132
+
133
+ /** DeleteTemplateCommand — remove one template; undo puts the same template back. */
134
+ export class DeleteTemplateCommand extends Command {
135
+ constructor(editor, templateId) {
136
+ super('Delete');
137
+ this.editor = editor;
138
+ this.templateId = templateId;
139
+ this.template = null;
140
+ }
141
+
142
+ execute() {
143
+ this.template = this.editor.getTemplate(this.templateId) ?? null;
144
+ if (this.template) {
145
+ this.label = `Delete ${this.template.name}`;
146
+ this.editor.removeTemplate(this.templateId);
147
+ }
148
+ }
149
+
150
+ undo() {
151
+ if (this.template) this.editor.addTemplate(this.template);
152
+ }
153
+ }
154
+
155
+ export class ResizeCommand extends Command {
156
+ constructor(editor, elementId, deltaWidth, deltaHeight) {
157
+ super('Resize');
158
+ this.editor = editor;
159
+ this.elementId = elementId;
160
+ this.deltaWidth = deltaWidth;
161
+ this.deltaHeight = deltaHeight;
162
+ }
163
+
164
+ execute() {
165
+ const template = this.editor.getTemplate(this.elementId);
166
+ if (template) {
167
+ template.width = Math.max(30, (template.width || 120) + this.deltaWidth);
168
+ template.height = Math.max(30, (template.height || 60) + this.deltaHeight);
169
+ }
170
+ }
171
+
172
+ undo() {
173
+ const template = this.editor.getTemplate(this.elementId);
174
+ if (template) {
175
+ template.width = Math.max(30, (template.width || 120) - this.deltaWidth);
176
+ template.height = Math.max(30, (template.height || 60) - this.deltaHeight);
177
+ }
178
+ }
179
+ }
180
+
181
+ export class RotateCommand extends Command {
182
+ constructor(editor, elementId, deltaRotation) {
183
+ super('Rotate');
184
+ this.editor = editor;
185
+ this.elementId = elementId;
186
+ this.deltaRotation = deltaRotation;
187
+ }
188
+
189
+ execute() {
190
+ const template = this.editor.getTemplate(this.elementId);
191
+ if (template) {
192
+ template.rotation = ((template.rotation || 0) + this.deltaRotation) % 360;
193
+ }
194
+ }
195
+
196
+ undo() {
197
+ const template = this.editor.getTemplate(this.elementId);
198
+ if (template) {
199
+ template.rotation = ((template.rotation || 0) - this.deltaRotation) % 360;
200
+ }
201
+ }
202
+ }
203
+
204
+ /**
205
+ * SetPropertiesCommand — apply a patch of property values to any object (a
206
+ * template, a line, a style level) as one undo step. An `undefined` value
207
+ * removes the key; undo restores exactly what was there, absent keys included.
208
+ */
209
+ export class SetPropertiesCommand extends Command {
210
+ constructor(target, patch, label = 'Edit properties') {
211
+ super(label);
212
+ this.target = target;
213
+ this.patch = { ...patch };
214
+ // A target whose properties are computed (an ArchiMate template shows its
215
+ // layer colour until given one) reports what it holds itself, so undo
216
+ // restores "unset" rather than freezing the computed value.
217
+ const own = typeof target.ownProperty === 'function' ? (k) => target.ownProperty(k) : (k) => target[k];
218
+ this.before = Object.fromEntries(Object.keys(patch).map(k => [k, own(k)]));
219
+ }
220
+
221
+ execute() {
222
+ SetPropertiesCommand._assign(this.target, this.patch);
223
+ }
224
+
225
+ undo() {
226
+ SetPropertiesCommand._assign(this.target, this.before);
227
+ }
228
+
229
+ static _assign(target, values) {
230
+ for (const [k, v] of Object.entries(values)) {
231
+ // undefined means "unset": an own field is removed; an accessor
232
+ // (state kept elsewhere, e.g. on an ArchiMate instance) is told.
233
+ if (v === undefined && Object.prototype.hasOwnProperty.call(target, k)) delete target[k];
234
+ else target[k] = v;
235
+ }
236
+ }
237
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Edge-related commands for DiagramEditor undo/redo support.
3
+ */
4
+ import { Command } from './CommandHistory.js';
5
+
6
+ export class AddEdgeCommand extends Command {
7
+ constructor(editor, edge) {
8
+ super('Add edge');
9
+ this.editor = editor;
10
+ this.edge = edge;
11
+ }
12
+
13
+ execute() {
14
+ if (!this.editor.getEdge(this.edge.id)) {
15
+ this.editor.addEdge(this.edge);
16
+ }
17
+ }
18
+
19
+ undo() {
20
+ this.editor.removeEdge(this.edge.id);
21
+ }
22
+ }
23
+
24
+ export class DeleteEdgeCommand extends Command {
25
+ constructor(editor, edgeId) {
26
+ super('Delete edge');
27
+ this.editor = editor;
28
+ this.edgeId = edgeId;
29
+ this.edge = null;
30
+ }
31
+
32
+ execute() {
33
+ this.edge = this.editor.getEdge(this.edgeId);
34
+ this.editor.removeEdge(this.edgeId);
35
+ }
36
+
37
+ undo() {
38
+ if (this.edge) {
39
+ this.editor.addEdge(this.edge);
40
+ }
41
+ }
42
+ }
43
+
44
+ /** Move one end of an edge to a different template; waypoints and style are kept. */
45
+ export class ReconnectEdgeCommand extends Command {
46
+ /**
47
+ * @param {'source'|'target'} end
48
+ */
49
+ constructor(editor, edgeId, end, newTemplateId) {
50
+ super('Reconnect edge');
51
+ if (end !== 'source' && end !== 'target') throw new TypeError(`end must be 'source' or 'target', got ${end}`);
52
+ this.editor = editor;
53
+ this.edgeId = edgeId;
54
+ this.key = end === 'source' ? 'sourceId' : 'targetId';
55
+ this.sideKey = end === 'source' ? 'sourceSide' : 'targetSide';
56
+ this.newTemplateId = newTemplateId;
57
+ const edge = editor.getEdge(edgeId);
58
+ this.oldTemplateId = edge?.[this.key];
59
+ this.oldSide = edge?.[this.sideKey];
60
+ }
61
+
62
+ execute() {
63
+ const edge = this.editor.getEdge(this.edgeId);
64
+ if (!edge) return;
65
+ edge[this.key] = this.newTemplateId;
66
+ // A side pinned on the old shape says nothing about the new one.
67
+ edge[this.sideKey] = 'auto';
68
+ }
69
+
70
+ undo() {
71
+ const edge = this.editor.getEdge(this.edgeId);
72
+ if (!edge) return;
73
+ edge[this.key] = this.oldTemplateId;
74
+ edge[this.sideKey] = this.oldSide;
75
+ }
76
+ }
77
+
78
+ export class MoveWaypointCommand extends Command {
79
+ constructor(editor, edgeId, waypointIndex, oldX, oldY, newX, newY) {
80
+ super('Move waypoint');
81
+ this.editor = editor;
82
+ this.edgeId = edgeId;
83
+ this.waypointIndex = waypointIndex;
84
+ this.oldPos = { x: oldX, y: oldY };
85
+ this.newPos = { x: newX, y: newY };
86
+ }
87
+
88
+ execute() {
89
+ this.editor.getEdge(this.edgeId)?.moveWaypoint(this.waypointIndex, this.newPos.x, this.newPos.y);
90
+ }
91
+
92
+ undo() {
93
+ this.editor.getEdge(this.edgeId)?.moveWaypoint(this.waypointIndex, this.oldPos.x, this.oldPos.y);
94
+ }
95
+ }
96
+
97
+ export class AddWaypointCommand extends Command {
98
+ constructor(editor, edgeId, x, y, index) {
99
+ super('Add waypoint');
100
+ this.editor = editor;
101
+ this.edgeId = edgeId;
102
+ this.x = x;
103
+ this.y = y;
104
+ this.index = index;
105
+ }
106
+
107
+ execute() {
108
+ this.editor.getEdge(this.edgeId)?.addWaypoint(this.x, this.y, this.index);
109
+ }
110
+
111
+ undo() {
112
+ const edge = this.editor.getEdge(this.edgeId);
113
+ if (edge && this.index >= 0 && this.index < edge.waypoints.length) {
114
+ edge.removeWaypoint(this.index);
115
+ }
116
+ }
117
+ }
118
+
119
+ export class DeleteWaypointCommand extends Command {
120
+ constructor(editor, edgeId, waypointIndex) {
121
+ super('Delete waypoint');
122
+ this.editor = editor;
123
+ this.edgeId = edgeId;
124
+ this.waypointIndex = waypointIndex;
125
+ this.waypoint = null;
126
+ }
127
+
128
+ execute() {
129
+ const edge = this.editor.getEdge(this.edgeId);
130
+ if (edge && this.waypointIndex >= 0 && this.waypointIndex < edge.waypoints.length) {
131
+ this.waypoint = { ...edge.waypoints[this.waypointIndex] };
132
+ edge.removeWaypoint(this.waypointIndex);
133
+ }
134
+ }
135
+
136
+ undo() {
137
+ const edge = this.editor.getEdge(this.edgeId);
138
+ if (edge && this.waypoint) {
139
+ edge.addWaypoint(this.waypoint.x, this.waypoint.y, this.waypointIndex);
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * DiagramEditorState — what every diagram view shares: an undo history (its
3
+ * model's, once a ViewSetModel adopts it: one per model) and the stacking
4
+ * order of what it draws. Subclasses hold the items and say
5
+ * which of them stack: DiagramView (templates) and ArchimateView (element
6
+ * instances).
7
+ *
8
+ * This is the "edit model" layer in GEF terms: the model (elements,
9
+ * relationships) is separate; positions, z-order and edit history live here.
10
+ */
11
+ import { CommandHistory } from './CommandHistory.js';
12
+ import { Arrangement, GroupCommand, UngroupCommand, LockCommand, BackgroundCommand } from './arrangement/index.js';
13
+ import { pinnedBehind } from './zOrder.js';
14
+ import { BringToFrontCommand, SendToBackCommand, RaiseCommand, LowerCommand } from './DiagramEditorCommands.js';
15
+
16
+ export class DiagramEditorState {
17
+ /**
18
+ * @param {Object} [options]
19
+ * @param {Object} [options.historyOptions] - Passed to CommandHistory (e.g. onChange)
20
+ */
21
+ constructor({ historyOptions = {}, arrangement = null } = {}) {
22
+ if (new.target === DiagramEditorState) {
23
+ throw new TypeError('DiagramEditorState is abstract — subclass it');
24
+ }
25
+ /** Undo/redo for edits to this view (moves, ordering, adds, deletes, ...). */
26
+ this.history = new CommandHistory(historyOptions);
27
+ /** Which items move as one (groups) and which are fixed in place (locks). */
28
+ this.arrangement = arrangement instanceof Arrangement ? arrangement : Arrangement.fromJSON(arrangement);
29
+ }
30
+
31
+ // Grouping and locking: one undoable step each.
32
+
33
+ /** Group items so they move as one (an item already in a group brings its group). */
34
+ group(itemIds, options) {
35
+ const cmd = new GroupCommand(this.arrangement, itemIds, options);
36
+ this.history.execute(cmd);
37
+ return cmd.groupId;
38
+ }
39
+
40
+ /** Dissolve the group an item is in. */
41
+ ungroup(itemId) {
42
+ this.history.execute(new UngroupCommand(this.arrangement, itemId));
43
+ }
44
+
45
+ /** Fix items (or their groups) in place, or free them. */
46
+ setLocked(itemIds, locked) {
47
+ this.history.execute(new LockCommand(this.arrangement, itemIds, locked));
48
+ }
49
+
50
+ /** Items whose stacking order the ordering commands manage (`{id, zIndex}`). */
51
+ layerItems() {
52
+ throw new Error(`${this.constructor.name} must implement layerItems()`);
53
+ }
54
+
55
+ /**
56
+ * Make items this view's background: one locked BackgroundGroup, stacked
57
+ * behind everything else. For a view being built (a canvas made from a
58
+ * template): not an undo step.
59
+ * @param {Iterable<string>} itemIds
60
+ * @param {{name?: string, locked?: boolean}} [options]
61
+ * @returns {string|null} the group's id (null for no items)
62
+ */
63
+ arrangeAsBackground(itemIds, options = {}) {
64
+ const ids = [...itemIds];
65
+ if (!ids.length) return null;
66
+ const cmd = new BackgroundCommand(this.arrangement, ids, options);
67
+ cmd.apply();
68
+ const items = this.layerItems();
69
+ const z = pinnedBehind(items, (id) => this.arrangement.isPinnedToBack(id));
70
+ for (const item of items) item.zIndex = z.get(item.id);
71
+ return cmd.groupId;
72
+ }
73
+
74
+ /** Whether nothing is drawn on this view. */
75
+ isEmpty() {
76
+ return this.layerItems().length === 0;
77
+ }
78
+
79
+ // One undoable step each, via the shared ReorderCommand family (zOrder.js).
80
+
81
+ bringToFront(id) {
82
+ this.history.execute(new BringToFrontCommand(this, id));
83
+ }
84
+
85
+ sendToBack(id) {
86
+ this.history.execute(new SendToBackCommand(this, id));
87
+ }
88
+
89
+ /** Swap with the item drawn directly above. */
90
+ raise(id) {
91
+ this.history.execute(new RaiseCommand(this, id));
92
+ }
93
+
94
+ /** Swap with the item drawn directly below. */
95
+ lower(id) {
96
+ this.history.execute(new LowerCommand(this, id));
97
+ }
98
+ }
@@ -0,0 +1,86 @@
1
+ import { Diagram } from './Diagram.js';
2
+
3
+ /**
4
+ * DiagramRegistry — object-oriented catalog of supported diagram types.
5
+ *
6
+ * Wraps diagram classes (subclasses of Diagram) with register/lookup/list
7
+ * helpers, mirroring ChartRegistry but for the diagram renderer family.
8
+ */
9
+ export class DiagramRegistry {
10
+ constructor(entries = []) {
11
+ this._entries = [];
12
+ this._index = new Map();
13
+ for (const entry of entries) this.register(entry);
14
+ }
15
+
16
+ /** Number of registered diagram types. */
17
+ get size() {
18
+ return this._entries.length;
19
+ }
20
+
21
+ /**
22
+ * Register a diagram type.
23
+ * @param {{key: string, method: string, DiagramClass: typeof Diagram}} entry
24
+ */
25
+ register(entry) {
26
+ if (!entry || typeof entry.key !== 'string') {
27
+ throw new TypeError('DiagramRegistry entry must have a string key');
28
+ }
29
+ if (typeof entry.method !== 'string') {
30
+ throw new TypeError('DiagramRegistry entry must have a string method');
31
+ }
32
+ if (!entry.DiagramClass || !(entry.DiagramClass.prototype instanceof Diagram)) {
33
+ throw new TypeError(`${entry.DiagramClass?.name ?? entry.DiagramClass} must extend Diagram`);
34
+ }
35
+ if (entry.DiagramClass.diagramType !== entry.key) {
36
+ throw new TypeError(`DiagramClass.diagramType (${entry.DiagramClass.diagramType}) must match entry.key (${entry.key})`);
37
+ }
38
+
39
+ if (this._index.has(entry.key)) {
40
+ const i = this._entries.findIndex(e => e.key === entry.key);
41
+ this._entries[i] = entry;
42
+ } else {
43
+ this._entries.push(entry);
44
+ }
45
+ this._index.set(entry.key, entry);
46
+ return this;
47
+ }
48
+
49
+ /** Remove a diagram type by key. */
50
+ unregister(key) {
51
+ const i = this._entries.findIndex(e => e.key === key);
52
+ if (i >= 0) this._entries.splice(i, 1);
53
+ this._index.delete(key);
54
+ return this;
55
+ }
56
+
57
+ /** Look up one entry by key. */
58
+ get(key) {
59
+ return this._index.get(key);
60
+ }
61
+
62
+ /** All entries, in registration order. */
63
+ list() {
64
+ return this._entries.slice();
65
+ }
66
+
67
+ /** All entry keys. */
68
+ keys() {
69
+ return this._entries.map(e => e.key);
70
+ }
71
+
72
+ /** All RenderEngine method names used by the registered entries. */
73
+ methods() {
74
+ return this._entries.map(e => e.method);
75
+ }
76
+
77
+ /** All registered Diagram classes. */
78
+ classes() {
79
+ return this._entries.map(e => e.DiagramClass);
80
+ }
81
+
82
+ /** Whether a key is registered. */
83
+ has(key) {
84
+ return this._index.has(key);
85
+ }
86
+ }