@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,43 @@
1
+ import { CommandHistory } from '../CommandHistory.js';
2
+
3
+ /**
4
+ * ModelHistory — one undo history for a whole model (Archi's command stack
5
+ * per model): every view's edits, and the model's own (views added,
6
+ * renamed, deleted; elements edited from the tree), in the order they were
7
+ * made. Each edit remembers the view in front when it was made (`viewId`),
8
+ * and undoing or redoing it shows that view again, so the change is seen.
9
+ * A command that names no view of its own (a view added or removed) sets
10
+ * `viewId = null`.
11
+ */
12
+ export class ModelHistory extends CommandHistory {
13
+ /**
14
+ * @param {ViewSetModel} model
15
+ * @param {Object} [options] - CommandHistory options
16
+ */
17
+ constructor(model, options = {}) {
18
+ super(options);
19
+ this.model = model;
20
+ }
21
+
22
+ execute(cmd) {
23
+ if (cmd && typeof cmd === 'object' && !('viewId' in cmd)) cmd.viewId = this.model.currentViewId;
24
+ const done = super.execute(cmd);
25
+ if (done !== cmd && done && !('viewId' in done)) done.viewId = cmd.viewId; // merged into the last one
26
+ return done;
27
+ }
28
+
29
+ undo() {
30
+ return this._show(super.undo());
31
+ }
32
+
33
+ redo() {
34
+ return this._show(super.redo());
35
+ }
36
+
37
+ /** Show the view an undone or redone edit was made on (after the change, so it is drawn changed). @private */
38
+ _show(cmd) {
39
+ const id = cmd?.viewId;
40
+ if (id && id !== this.model.currentViewId && this.model.getView(id)) this.model.switchTo(id);
41
+ return cmd;
42
+ }
43
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * ModelReport — what a browsable report of a model holds, as plain JSON
3
+ * (reportHtml writes it out as a page): a page per item (the model, each
4
+ * view, and whatever a notation's model adds: elements, relationships, ...)
5
+ * and the tree the pages are found by.
6
+ *
7
+ * Here, what every view set has: the model's page, and a page per view with
8
+ * its documentation, properties and picture. A notation's model returns a
9
+ * subclass from `model.report()` that adds its own items (`conceptItems()`),
10
+ * tree sections (`conceptSections()`) and what a view's page lists
11
+ * (`viewLists(view)`).
12
+ *
13
+ * An item: `{ key, name, kind, type, color?, documentation?, properties:
14
+ * [{name, value}], facts: [{label, text} | {label, key}], lists: [{title,
15
+ * rows: [{key, note?}]}], picture? }`; a fact or row with a `key` links to
16
+ * that item's page. A picture (from the editor, see DiagramEditor#viewPicture)
17
+ * is `{ svg, viewBox: {x, y, width, height}, areas: [{ref, x, y, width,
18
+ * height}] }`; an area's `ref` (`{kind, id}`) is the item it opens.
19
+ */
20
+ export class ModelReport {
21
+ /**
22
+ * @param {ViewSetModel} model
23
+ * @param {Object} [options]
24
+ * @param {Object<string, Object>} [options.pictures] - Each view's picture, by view id
25
+ * @param {string} [options.title] - Default: the model's name
26
+ */
27
+ constructor(model, { pictures = {}, title = null } = {}) {
28
+ this.model = model;
29
+ this.pictures = pictures;
30
+ this._title = title;
31
+ }
32
+
33
+ /** The report's title: the model's name, or what was asked for. */
34
+ get title() {
35
+ return this._title || this.model.name || this.model.title || 'Model';
36
+ }
37
+
38
+ /** An item's key: unique across kinds, since a view and an element may share an id. */
39
+ key(kind, id) {
40
+ return `${kind}:${id}`;
41
+ }
42
+
43
+ /** The report: `{ title, home, sections, items }` (see the class). */
44
+ data() {
45
+ const items = [this.modelItem(), ...this.viewItems(), ...this.conceptItems()];
46
+ return {
47
+ title: this.title,
48
+ home: items[0].key,
49
+ sections: [...this.conceptSections(), this.viewSection()]
50
+ .map(s => ({ ...s, groups: s.groups.filter(g => g.keys.length) }))
51
+ .filter(s => s.groups.length),
52
+ items: Object.fromEntries(items.map(item => [item.key, item])),
53
+ };
54
+ }
55
+
56
+ /** The model's own page: its documentation, properties and how much it holds. */
57
+ modelItem() {
58
+ const model = this.model;
59
+ return this.item('model', model.id ?? 'model', {
60
+ name: this.title, type: 'Model',
61
+ documentation: model.documentation,
62
+ properties: model.properties,
63
+ facts: this.modelFacts(),
64
+ });
65
+ }
66
+
67
+ /** The model page's counts: its views (a subclass adds its own). */
68
+ modelFacts() {
69
+ return [{ label: 'Views', text: String(this.model.views().length) }];
70
+ }
71
+
72
+ /** A page per view. */
73
+ viewItems() {
74
+ return this.model.views().map(view => this.item('view', view.id, {
75
+ name: view.title || view.name || view.id,
76
+ type: this.viewType(view),
77
+ documentation: view.documentation,
78
+ properties: view.properties,
79
+ facts: this.viewFacts(view),
80
+ lists: this.viewLists(view),
81
+ picture: this.picture(view),
82
+ }));
83
+ }
84
+
85
+ /** What kind of view a view is, as its page says. */
86
+ viewType(view) {
87
+ return 'View';
88
+ }
89
+
90
+ /** A view's picture, with its areas' refs turned into item keys (an area with nothing to open is dropped). */
91
+ picture(view) {
92
+ const picture = this.pictures[view.id];
93
+ if (!picture) return undefined;
94
+ const areas = (picture.areas ?? [])
95
+ .map(({ ref, ...box }) => ({ ...box, key: ref && this.key(ref.kind, ref.id) }))
96
+ .filter(area => area.key);
97
+ return { svg: picture.svg, viewBox: picture.viewBox, areas };
98
+ }
99
+
100
+ /** A view's facts (its viewpoint, ...): none here. */
101
+ viewFacts(view) {
102
+ return [];
103
+ }
104
+
105
+ /** What a view's page lists (its elements, ...): none here. */
106
+ viewLists(view) {
107
+ return [];
108
+ }
109
+
110
+ /** The tree's Views section. */
111
+ viewSection() {
112
+ return { title: 'Views', groups: [{ title: null, keys: this.model.views().map(v => this.key('view', v.id)) }] };
113
+ }
114
+
115
+ /** A notation's own items (elements, relationships): none here. */
116
+ conceptItems() {
117
+ return [];
118
+ }
119
+
120
+ /** A notation's own tree sections, before Views: none here. */
121
+ conceptSections() {
122
+ return [];
123
+ }
124
+
125
+ /**
126
+ * An item from its kind, id and fields: empty lists dropped, properties as
127
+ * `[{name, value}]` whichever way the model keeps them.
128
+ * @protected
129
+ */
130
+ item(kind, id, { name, type, color, documentation, properties, facts = [], lists = [], picture } = {}) {
131
+ const props = ModelReport.properties(properties);
132
+ return {
133
+ key: this.key(kind, id),
134
+ name: name || id, kind, type,
135
+ ...(color && { color }),
136
+ ...(documentation && { documentation: String(documentation) }),
137
+ ...(props.length && { properties: props }),
138
+ ...(facts.length && { facts }),
139
+ ...(lists.some(l => l.rows.length) && { lists: lists.filter(l => l.rows.length) }),
140
+ ...(picture && { picture }),
141
+ };
142
+ }
143
+
144
+ /** Properties as `[{name, value}]`, from `[{name|key, value}]`, `[[name, value]]` or `{name: value}`. */
145
+ static properties(properties) {
146
+ if (!properties) return [];
147
+ const list = Array.isArray(properties) ? properties : Object.entries(properties);
148
+ return list.map(p => (Array.isArray(p)
149
+ ? { name: String(p[0]), value: String(p[1] ?? '') }
150
+ : { name: String(p.name ?? p.key ?? ''), value: String(p.value ?? '') }))
151
+ .filter(p => p.name);
152
+ }
153
+ }
@@ -0,0 +1,223 @@
1
+ import { ReplaceTextCommand } from './ReplaceTextCommand.js';
2
+ import { Command } from '../CommandHistory.js';
3
+ import { transformName, NAME_TRANSFORMS } from './nameTransforms.js';
4
+
5
+ /** What can be looked in, in the order a dialog offers them: [field, label]. */
6
+ export const SEARCH_FIELDS = Object.freeze([['name', 'Names'], ['documentation', 'Documentation'], ['property', 'Property values']]);
7
+
8
+ /**
9
+ * ModelSearch — find and replace over a model's texts (Archi's Find/Replace):
10
+ * every name, documentation and property value, each a target
11
+ * `{ kind, id, viewId?, owner, field, fieldLabel, required?, read(), write(text) }`
12
+ * (`owner` names what it belongs to; `required` text can't be emptied).
13
+ *
14
+ * Here, what every view set has: the model's own name, documentation and
15
+ * properties, and each view's title, documentation and properties. A
16
+ * notation's model returns a subclass from `model.search()` that adds what its
17
+ * views hold (`viewItemTargets(view)`: shapes, notes) and its own concepts
18
+ * (`conceptTargets()`: elements, relationships). DOM-free.
19
+ *
20
+ * Options, for find and replace alike: `{ matchCase, wholeWord, regex, fields }`,
21
+ * `fields` among SEARCH_FIELDS' keys (default all).
22
+ */
23
+ export class ModelSearch {
24
+ /** @param {ViewSetModel} model */
25
+ constructor(model) {
26
+ this.model = model;
27
+ }
28
+
29
+ /** Every text in the model, in order: the model's, then each view's and what it holds, then the concepts'. */
30
+ targets() {
31
+ return [
32
+ ...this.modelTargets(),
33
+ ...this.model.views().flatMap(view => [...this.viewTargets(view), ...this.viewItemTargets(view)]),
34
+ ...this.conceptTargets(),
35
+ ];
36
+ }
37
+
38
+ /** The model's own name (when it has one), documentation and properties. */
39
+ modelTargets() {
40
+ const model = this.model;
41
+ const owner = { kind: 'model', id: model.id ?? 'model', owner: model.name || 'Model' };
42
+ return [
43
+ ...(typeof model.name === 'string' ? [this.text(owner, 'name', model, 'name')] : []),
44
+ this.text(owner, 'documentation', model, 'documentation'),
45
+ ...this.propertyTargets(owner, model.properties),
46
+ ];
47
+ }
48
+
49
+ /** A view's title (retitled through the model, so tabs follow; never emptied), documentation and properties. */
50
+ viewTargets(view) {
51
+ const owner = { kind: 'view', id: view.id, viewId: view.id, owner: view.title || view.name || view.id };
52
+ return [
53
+ {
54
+ ...owner, field: 'name', fieldLabel: 'Name', required: true,
55
+ read: () => view.title ?? '',
56
+ write: (text) => { this.model._retitle(view.id, text); },
57
+ },
58
+ this.text(owner, 'documentation', view, 'documentation'),
59
+ ...this.propertyTargets(owner, view.properties),
60
+ ];
61
+ }
62
+
63
+ /** What a view holds that has its own text: none here. */
64
+ viewItemTargets(view) {
65
+ return [];
66
+ }
67
+
68
+ /** A notation's own concepts' texts: none here. */
69
+ conceptTargets() {
70
+ return [];
71
+ }
72
+
73
+ /**
74
+ * The texts that match, each `{ ...target, target, text, count }` (`text`
75
+ * as it is now, `count` how many times it matches).
76
+ * @throws {SyntaxError} for an invalid regular expression
77
+ */
78
+ find(text, options = {}) {
79
+ const pattern = ModelSearch.pattern(text, options);
80
+ if (!pattern) return [];
81
+ const fields = new Set(options.fields ?? SEARCH_FIELDS.map(([f]) => f));
82
+ return this.targets()
83
+ .filter(t => fields.has(t.field))
84
+ .map(target => {
85
+ const current = String(target.read() ?? '');
86
+ const count = current.match(pattern)?.length ?? 0;
87
+ const { read, write, ...about } = target;
88
+ return { ...about, target, text: current, count };
89
+ })
90
+ .filter(m => m.count);
91
+ }
92
+
93
+ /**
94
+ * Replace every match (or those of `matches`, from find) as one
95
+ * ReplaceTextCommand, not yet executed; null when nothing would change.
96
+ * With `regex`, `$1` and the like in `replacement` refer to its groups.
97
+ */
98
+ replaceCommand(text, replacement, options = {}, matches = this.find(text, options)) {
99
+ const pattern = ModelSearch.pattern(text, options);
100
+ if (!pattern) return null;
101
+ const changes = matches
102
+ .map(({ target }) => {
103
+ const before = String(target.read() ?? '');
104
+ const after = options.regex ? before.replace(pattern, replacement) : before.replace(pattern, () => replacement);
105
+ return { target, before, after };
106
+ })
107
+ .filter(c => c.after !== c.before && !(c.target.required && !c.after.trim()));
108
+ return changes.length ? new ReplaceTextCommand(changes, `Replace "${text}" (${changes.length})`) : null;
109
+ }
110
+
111
+ /**
112
+ * Rewrite names (nameTransforms.js: Title Case, split camelCase, ...): every
113
+ * name, or those containing `text` (with find's options), as one
114
+ * ReplaceTextCommand, not yet executed; null when nothing changes. A view
115
+ * is never left without a name.
116
+ * @param {string} transform - One of NAME_TRANSFORMS' keys
117
+ */
118
+ transformCommand(transform, text = '', options = {}) {
119
+ const targets = text
120
+ ? this.find(text, { ...options, fields: ['name'] }).map(m => m.target)
121
+ : this.targets().filter(t => t.field === 'name');
122
+ const changes = targets
123
+ .map(target => { const before = String(target.read() ?? ''); return { target, before, after: transformName(transform, before) }; })
124
+ .filter(c => c.after !== c.before && !(c.target.required && !c.after.trim()));
125
+ const label = NAME_TRANSFORMS.find(([k]) => k === transform)?.[1].split(' (')[0] ?? transform;
126
+ return changes.length ? new ReplaceTextCommand(changes, `${label} (${changes.length})`) : null;
127
+ }
128
+
129
+ /**
130
+ * What holds properties (`[{name|key, value}]` lists): the model and its
131
+ * views here; a notation's search adds its concepts.
132
+ * @returns {Array<{owner: string, properties: Array}>}
133
+ */
134
+ propertyHolders() {
135
+ return [{ owner: 'model', object: this.model }, ...this.model.views().map(v => ({ owner: `view ${v.id}`, object: v }))];
136
+ }
137
+
138
+ /** Every property name in use, sorted. */
139
+ propertyNames() {
140
+ const names = new Set();
141
+ for (const { object } of this.propertyHolders()) for (const p of Array.isArray(object.properties) ? object.properties : []) if (p.name ?? p.key) names.add(p.name ?? p.key);
142
+ return [...names].sort((a, b) => a.localeCompare(b));
143
+ }
144
+
145
+ /**
146
+ * Rename a property everywhere it is (Rename property…): one command, not
147
+ * yet executed; null when nothing has it. Where something has both names,
148
+ * the old one's value goes to the new one only where the new one is empty.
149
+ */
150
+ renamePropertyCommand(from, to) {
151
+ const holders = this.propertyHolders().filter(({ object }) => Array.isArray(object.properties) && object.properties.some(p => (p.name ?? p.key) === from));
152
+ if (!from || !to || from === to || !holders.length) return null;
153
+ return new PropertyRenameCommand(holders.map(h => h.object), from, to);
154
+ }
155
+
156
+ /**
157
+ * An object's own text field as a target; an emptied text is unset.
158
+ * @protected
159
+ */
160
+ text(owner, field, object, key = field) {
161
+ return {
162
+ ...owner, field, fieldLabel: field === 'name' ? 'Name' : 'Documentation',
163
+ read: () => object[key] ?? '',
164
+ write: (text) => { object[key] = text === '' && field !== 'name' ? undefined : text; },
165
+ };
166
+ }
167
+
168
+ /**
169
+ * Each property whose value is text, as a target (`[{name|key, value, type?}]`;
170
+ * a number or true/false is left out).
171
+ * @protected
172
+ */
173
+ propertyTargets(owner, properties) {
174
+ if (!Array.isArray(properties)) return [];
175
+ return properties
176
+ .filter(p => p.value == null || typeof p.value === 'string')
177
+ .map(p => ({
178
+ ...owner, field: 'property', fieldLabel: `Property "${p.name ?? p.key}"`,
179
+ read: () => p.value ?? '',
180
+ write: (text) => { p.value = text; },
181
+ }));
182
+ }
183
+
184
+ /**
185
+ * The pattern for `text` (global): literal unless `regex`, whole words with
186
+ * `wholeWord`, any case unless `matchCase`. Null for empty text.
187
+ * @throws {SyntaxError} for an invalid regular expression
188
+ */
189
+ static pattern(text, { matchCase = false, wholeWord = false, regex = false } = {}) {
190
+ if (!text) return null;
191
+ const source = regex ? text : text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
192
+ return new RegExp(wholeWord ? `\\b(?:${source})\\b` : source, matchCase ? 'g' : 'gi');
193
+ }
194
+ }
195
+
196
+ /** Rename a property on some objects (their property lists), one undo step: as ModelSearch#renamePropertyCommand says. */
197
+ class PropertyRenameCommand extends Command {
198
+ constructor(objects, from, to) {
199
+ super(`Rename property "${from}" to "${to}"`);
200
+ Object.assign(this, { objects, from, to, _before: null });
201
+ }
202
+
203
+ execute() {
204
+ const nameOf = (p) => p.name ?? p.key;
205
+ this._before = this.objects.map(o => [o, o.properties]);
206
+ for (const object of this.objects) {
207
+ const list = object.properties.map(p => ({ ...p }));
208
+ const old = list.find(p => nameOf(p) === this.from);
209
+ const existing = list.find(p => nameOf(p) === this.to);
210
+ if (existing) {
211
+ if ((existing.value ?? '') === '') existing.value = old.value;
212
+ object.properties = list.filter(p => p !== old);
213
+ } else {
214
+ if ('name' in old) old.name = this.to; else old.key = this.to;
215
+ object.properties = list;
216
+ }
217
+ }
218
+ }
219
+
220
+ undo() {
221
+ for (const [object, properties] of this._before) object.properties = properties;
222
+ }
223
+ }
@@ -0,0 +1,25 @@
1
+ import { Command } from '../CommandHistory.js';
2
+
3
+ /**
4
+ * RemoveViewCommand — a view deleted from a model; its neighbour comes to
5
+ * the front when it was. Undo puts the same view back where it was, shown
6
+ * again if it was in front.
7
+ */
8
+ export class RemoveViewCommand extends Command {
9
+ viewId = null;
10
+
11
+ constructor(model, view, label = `Delete "${view.title || view.name || view.id}"`) {
12
+ super(label);
13
+ this.model = model;
14
+ this.view = view;
15
+ this._was = null;
16
+ }
17
+
18
+ execute() {
19
+ this._was = this.model._removeView(this.view.id);
20
+ }
21
+
22
+ undo() {
23
+ this.model._insertView(this.view, this._was);
24
+ }
25
+ }
@@ -0,0 +1,21 @@
1
+ import { Command } from '../CommandHistory.js';
2
+
3
+ /** RenameViewCommand — a view's title changed; undo gives it back its old one. */
4
+ export class RenameViewCommand extends Command {
5
+ constructor(model, view, title, label = `Rename "${view.title}"`) {
6
+ super(label);
7
+ this.model = model;
8
+ this.view = view;
9
+ this.title = title;
10
+ this.before = view.title;
11
+ this.viewId = view.id;
12
+ }
13
+
14
+ execute() {
15
+ this.model._retitle(this.view.id, this.title);
16
+ }
17
+
18
+ undo() {
19
+ this.model._retitle(this.view.id, this.before);
20
+ }
21
+ }
@@ -0,0 +1,25 @@
1
+ import { Command } from '../CommandHistory.js';
2
+
3
+ /**
4
+ * ReplaceTextCommand — texts replaced across a model (ModelSearch#replaceCommand)
5
+ * as one undo step: each change is `{ target, before, after }`, a target being
6
+ * one of ModelSearch's texts (its `write(text)` puts it in place).
7
+ */
8
+ export class ReplaceTextCommand extends Command {
9
+ /**
10
+ * @param {Array<{target: Object, before: string, after: string}>} changes
11
+ * @param {string} [label]
12
+ */
13
+ constructor(changes, label = 'Replace') {
14
+ super(label);
15
+ this.changes = changes.slice();
16
+ }
17
+
18
+ execute() {
19
+ for (const { target, after } of this.changes) target.write(after);
20
+ }
21
+
22
+ undo() {
23
+ for (let i = this.changes.length - 1; i >= 0; i--) this.changes[i].target.write(this.changes[i].before);
24
+ }
25
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * ViewSetChecker — checks over any ViewSetModel (a template editor's
3
+ * DiagramModel, an ArchimateModel): what is wrong or worth a look across its
4
+ * views. A notation adds its own checks in a subclass (ArchimateModelChecker).
5
+ * DOM-free and advisory.
6
+ *
7
+ * Each finding: `{ code, severity: 'warning'|'info', message, kind, ids }`;
8
+ * `kind` says what the ids name ('view' here; a subclass adds its own).
9
+ * Each check is a method listed by `checks()`, so a subclass can add, drop or
10
+ * reorder them.
11
+ */
12
+ export class ViewSetChecker {
13
+ /** @param {ViewSetModel} model */
14
+ constructor(model) {
15
+ this.model = model;
16
+ }
17
+
18
+ /** The checks to run, in the order their findings are listed. */
19
+ checks() {
20
+ return [this.emptyViews];
21
+ }
22
+
23
+ /** Every finding. @returns {Array<Object>} */
24
+ run() {
25
+ return this.checks().flatMap(check => check.call(this));
26
+ }
27
+
28
+ /** Views with nothing on them (a template is left out: an empty one is still a start). */
29
+ emptyViews() {
30
+ return this.model.views()
31
+ .filter(v => !v.template && v.isEmpty())
32
+ .map(v => ({ code: 'empty-view', severity: 'info', kind: 'view', ids: [v.id], message: `View "${v.title || v.name || v.id}" is empty` }));
33
+ }
34
+ }