@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,112 @@
1
+ import { ArchimateModel, ArchimateView } from './ArchimateModel.js';
2
+ import { PlaceItemsCommand } from './PlaceItemsCommand.js';
3
+ import { ViewObjectInstance } from './ViewObjectInstance.js';
4
+ import { ArchiHint } from '../canvas/ArchiHint.js';
5
+ import { CANVAS_BOX_KINDS } from '../canvas/canvasBoxKinds.js';
6
+ import { Arrangement } from '../arrangement/index.js';
7
+
8
+ /**
9
+ * CanvasView — a canvas, as Archi has them: a view of blocks, stickies and
10
+ * pictures (view-only boxes, no model elements) and plain lines between them,
11
+ * often with hints (guidance text) on the canvas and its blocks.
12
+ *
13
+ * A canvas may be a template (`template`): kept to copy from, shown in the
14
+ * model tree's Templates folder rather than with the canvases. Its JSON form
15
+ * (`toJSON`, `CanvasView.fromJSON`) is what a template library keeps.
16
+ */
17
+ export class CanvasView extends ArchimateView {
18
+ static kind = 'canvas';
19
+
20
+ static LINE_TYPE = 'canvas-model-connection';
21
+
22
+ /** Archi's canvas palette: Block, Sticky, Image. */
23
+ static BOX_KINDS = CANVAS_BOX_KINDS;
24
+
25
+ /**
26
+ * @param {ArchimateModel} model
27
+ * @param {Object} spec - As ArchimateView, plus:
28
+ * @param {boolean} [spec.template] - Kept to copy from (a model template)
29
+ */
30
+ constructor(model, { template = false, ...spec } = {}) {
31
+ super(model, { archiViewType: 'canvas-model', elementIds: [], ...spec });
32
+ /** Whether this canvas is a template, kept to make canvases from. */
33
+ this.template = !!template;
34
+ }
35
+
36
+ /** The canvas's hint title (Archi's hintTitle), or ''. */
37
+ get hintTitle() {
38
+ return this.hint?.title ?? '';
39
+ }
40
+
41
+ /** The canvas's hint text (Archi's hintContent, HTML), or ''. */
42
+ get hintContent() {
43
+ return this.hint?.content ?? '';
44
+ }
45
+
46
+ /** The canvas's own hint (ArchiHint), or null. */
47
+ get hint() {
48
+ return ArchiHint.of(this.archi);
49
+ }
50
+
51
+ /** The hint for a box (its own, as a template's blocks have), else the canvas's. */
52
+ hintFor(instanceId) {
53
+ return ArchiHint.of(this.getElementInstance(instanceId)?.archi) ?? this.hint;
54
+ }
55
+
56
+
57
+ /**
58
+ * Put a template's boxes and lines on this canvas, as its own locked
59
+ * background group (behind everything else, held still until unlocked):
60
+ * one undo step on the canvas.
61
+ * @param {CanvasView|Object} source - A template canvas, or CanvasView JSON (a library entry's view)
62
+ * @param {Object} [options]
63
+ * @param {{x: number, y: number}} [options.at] - Where its top left goes (default: where it was)
64
+ * @param {string} [options.name] - The group's name (default: the template's, "(template)")
65
+ * @returns {string|null} the group's id (null for an empty template)
66
+ */
67
+ placeTemplate(source, { at = null, name } = {}) {
68
+ const data = typeof source.toJSON === 'function' ? source.toJSON() : source;
69
+ const salt = `${this.id}-${Date.now().toString(36)}-${ArchimateView.placed++}`;
70
+ const { elementInstances, viewConnections } = CanvasView.copyItems(data, salt);
71
+ const boxes = [...elementInstances.values()];
72
+ if (!boxes.length) return null;
73
+ if (at) {
74
+ const left = Math.min(...boxes.map(b => b.x - (b.size?.width ?? b.content?.width ?? 0) / 2));
75
+ const top = Math.min(...boxes.map(b => b.y - (b.size?.height ?? b.content?.height ?? 0) / 2));
76
+ for (const b of boxes) { b.x += at.x - left; b.y += at.y - top; }
77
+ for (const line of viewConnections) line.waypoints = line.waypoints.map(wp => ({ x: wp.x + at.x - left, y: wp.y + at.y - top }));
78
+ }
79
+ const cmd = new PlaceItemsCommand(this, { elementInstances: boxes, viewConnections }, {
80
+ background: { name: name ?? `${data.name ?? 'Template'} (template)` },
81
+ });
82
+ this.history.execute(cmd);
83
+ return cmd.groupId;
84
+ }
85
+
86
+ /**
87
+ * A canvas from its JSON form (toJSON), in `model`, with new ids for the
88
+ * view, its boxes and lines (lines, groups and locks follow the boxes).
89
+ * Archi's own ids stay with the source.
90
+ * @param {ArchimateModel} model
91
+ * @param {Object} data
92
+ * @param {{id: string, name?: string, template?: boolean}} options
93
+ * @returns {CanvasView}
94
+ */
95
+ static fromJSON(model, data, { id, name = data.name, template = false }) {
96
+ const { elementInstances, viewConnections, mapId } = CanvasView.copyItems(data, id);
97
+ return new CanvasView(model, {
98
+ id, name, template,
99
+ documentation: data.documentation,
100
+ properties: data.properties ?? [],
101
+ archi: data.archi ?? null,
102
+ elementInstances,
103
+ relationshipInstances: new Map(),
104
+ viewConnections,
105
+ arrangement: Arrangement.fromJSON(data.arrangement).copy(mapId),
106
+ });
107
+ }
108
+ }
109
+
110
+ /** Placements so far: part of each placed line's new id. @private */
111
+
112
+ ArchimateModel.registerViewType('canvas-model', CanvasView);
@@ -0,0 +1,37 @@
1
+ import { PopupMenu } from '../PopupMenu.js';
2
+
3
+ /**
4
+ * ContextMenu — graph-diagram right-click menus, shown through the shared
5
+ * PopupMenu. Keeps the graph engine's item format: `{ label, action(subject,
6
+ * engine, point) }` (label may be a function of the subject), `{ label, items }`
7
+ * for a submenu (items may be a function of the subject too; an empty submenu
8
+ * is left out), or `{ separator: true }`.
9
+ */
10
+ export class ContextMenu {
11
+ constructor(container) {
12
+ this.container = container;
13
+ }
14
+
15
+ remove() {
16
+ PopupMenu.close();
17
+ }
18
+
19
+ /** Build and show a context menu at the given mouse event.
20
+ * @param {MouseEvent} event
21
+ * @param {Array} menuItems
22
+ * @param {*} subject passed to every action
23
+ * @param {Function} clientToSvgPoint `(clientX, clientY) => {x,y}`
24
+ * @param {*} engine passed as the second argument to every action
25
+ */
26
+ show(event, menuItems, subject, clientToSvgPoint, engine) {
27
+ const point = clientToSvgPoint(event.clientX, event.clientY);
28
+ const toPopup = (item) => {
29
+ if (item.separator) return { separator: true };
30
+ const label = typeof item.label === 'function' ? item.label(subject) : item.label;
31
+ const items = typeof item.items === 'function' ? item.items(subject) : item.items;
32
+ if (items) return items.length ? { label, items: items.map(toPopup) } : null;
33
+ return { label, action: () => item.action(subject, engine, point) };
34
+ };
35
+ PopupMenu.show(event.clientX, event.clientY, menuItems.map(toPopup).filter(Boolean), this.container.ownerDocument);
36
+ }
37
+ }
@@ -0,0 +1,86 @@
1
+ import { Diagram } from '../Diagram.js';
2
+ import { DataModelNotation } from '../../datamodel.js';
3
+ import { RelationshipAsEdgeStrategy, RelationshipAsNodeStrategy } from './DataModelRelationshipStrategy.js';
4
+
5
+ /**
6
+ * DataModelDiagram — builds entity-relationship nodes/edges and renders them
7
+ * through the shared GraphDiagram engine.
8
+ */
9
+ export class DataModelDiagram extends Diagram {
10
+ static diagramType = 'dataModel';
11
+
12
+ constructor(renderer, entities, relationships, options = {}, engine = null) {
13
+ super(renderer, { entities, relationships }, options);
14
+ this.engine = engine;
15
+ }
16
+
17
+ static _strategyFor(notation) {
18
+ return notation.relationshipAsNode
19
+ ? new RelationshipAsNodeStrategy()
20
+ : new RelationshipAsEdgeStrategy();
21
+ }
22
+
23
+ render() {
24
+ const { entities, relationships } = this.data;
25
+ const options = this.options;
26
+ const { level = 'logical', notation: notationName = 'crowsfoot', ...rest } = options;
27
+ const notation = DataModelNotation.notation(notationName);
28
+ const nodes = entities.map(entity => DataModelDiagram.buildNode(entity, { level, notation }));
29
+ const strategy = DataModelDiagram._strategyFor(notation);
30
+ const { nodes: relNodes, edges } = strategy.apply(relationships, {
31
+ buildEdge: DataModelDiagram.buildEdge,
32
+ notation,
33
+ });
34
+ nodes.push(...relNodes);
35
+ this.engine.graphDiagram(nodes, edges, { edgeColor: '#666666', ...rest });
36
+ }
37
+
38
+ static typeGroup(type) {
39
+ if (!type) return 'UNKNOWN';
40
+ const t = String(type).toUpperCase();
41
+ if (/^(INT|INTEGER|BIGINT|SMALLINT|TINYINT|DECIMAL|NUMERIC|FLOAT|DOUBLE|REAL|NUMBER|SERIAL)/.test(t)) return 'NUMBER';
42
+ if (/^(VARCHAR|CHAR|TEXT|STRING|CLOB|UUID)/.test(t)) return 'TEXT';
43
+ if (/^(TIMESTAMP|DATE|DATETIME|TIME)/.test(t)) return 'TIMESTAMP';
44
+ if (/^(BOOL|BOOLEAN)/.test(t)) return 'BOOLEAN';
45
+ if (/^(JSON|JSONB)/.test(t)) return 'JSON';
46
+ return 'UNKNOWN';
47
+ }
48
+
49
+ static buildNode(entity, { level, notation }) {
50
+ const levelData = entity[level] || {};
51
+ const attributes = levelData.attributes;
52
+ if (notation.entityShape === 'table' && attributes?.length) {
53
+ return {
54
+ id: entity.id,
55
+ label: levelData.tableName || entity.name,
56
+ shape: 'table',
57
+ x: entity.x,
58
+ y: entity.y,
59
+ color: entity.color,
60
+ columns: attributes.map(a => ({ name: a.name, typeGroup: DataModelDiagram.typeGroup(a.type), isPK: !!a.isPK, isFK: !!a.isFK })),
61
+ };
62
+ }
63
+ return {
64
+ id: entity.id,
65
+ label: entity.name,
66
+ shape: entity.shape || 'rect',
67
+ x: entity.x,
68
+ y: entity.y,
69
+ color: entity.color,
70
+ description: entity.description,
71
+ labelPosition: entity.labelPosition || 'inside',
72
+ };
73
+ }
74
+
75
+ static buildEdge(relationship, notation) {
76
+ return {
77
+ ...relationship,
78
+ label: relationship.name,
79
+ lineStyle: relationship.identifying === false ? 'dashed' : 'solid',
80
+ arrowheadStart: notation.cardinalityArrowhead(relationship.sourceCardinality) || 'none',
81
+ arrowhead: notation.cardinalityArrowhead(relationship.targetCardinality) || 'none',
82
+ sourceLabel: notation.cardinalityLabel(relationship.sourceCardinality),
83
+ targetLabel: notation.cardinalityLabel(relationship.targetCardinality),
84
+ };
85
+ }
86
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Strategy interface for turning data-model relationships into diagram nodes
3
+ * and edges. Crow's Foot and UML keep relationships as direct edges; Chen
4
+ * turns each relationship into a diamond node plus two connecting edges.
5
+ */
6
+ export class DataModelRelationshipStrategy {
7
+ /**
8
+ * @param {Array<object>} relationships
9
+ * @param {object} context
10
+ * @param {Function} context.buildEdge
11
+ * @returns {{nodes: Array<object>, edges: Array<object>}}
12
+ */
13
+ apply(relationships, context) {
14
+ throw new Error(`${this.constructor.name} must implement apply()`);
15
+ }
16
+ }
17
+
18
+ export class RelationshipAsEdgeStrategy extends DataModelRelationshipStrategy {
19
+ apply(relationships, { buildEdge, notation }) {
20
+ const edges = relationships.map(r => buildEdge(r, notation));
21
+ return { nodes: [], edges };
22
+ }
23
+ }
24
+
25
+ export class RelationshipAsNodeStrategy extends DataModelRelationshipStrategy {
26
+ apply(relationships, { notation }) {
27
+ const nodes = [];
28
+ const edges = [];
29
+ relationships.forEach((relationship, i) => {
30
+ const relId = relationship.id || `${relationship.source}__${relationship.target}__rel${i}`;
31
+ const lineStyle = relationship.identifying === false ? 'dashed' : 'solid';
32
+ nodes.push({ id: relId, label: relationship.name || '', shape: 'diamond', color: relationship.color || '#f6c344' });
33
+ edges.push({ source: relationship.source, target: relId, label: notation.cardinalityLabel(relationship.sourceCardinality), lineStyle });
34
+ edges.push({ source: relId, target: relationship.target, label: notation.cardinalityLabel(relationship.targetCardinality), lineStyle });
35
+ });
36
+ return { nodes, edges };
37
+ }
38
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * DerivedRelationships — compute indirect relationships through composition/assignment chains.
3
+ *
4
+ * Pure function: given a model, find transitive relationships that chain through
5
+ * composition, aggregation, assignment, or realization kinds.
6
+ */
7
+ export class DerivedRelationships {
8
+ /**
9
+ * Kinds that allow "chaining" — relationships that can form paths through intermediate elements.
10
+ */
11
+ static CHAINABLE_KINDS = new Set(['composition', 'aggregation', 'assignment', 'realization']);
12
+
13
+ /**
14
+ * Compute all derived (indirect) relationships in a model.
15
+ * Follows chains up to `maxHops` deep; includes direct relationships for comparison.
16
+ *
17
+ * @param {ArchimateModel} model - the model to analyze
18
+ * @param {object} options - { maxHops: 2, onlyNewRelationships: true }
19
+ * @returns {object} { direct: [], derived: [] } relationship arrays
20
+ */
21
+ static compute(model, options = {}) {
22
+ const { maxHops = 2, onlyNewRelationships = true } = options;
23
+
24
+ const allRels = model.relationships();
25
+ const direct = new Set();
26
+ const graph = new Map(); // element -> { outgoing: [rel], incoming: [rel] }
27
+
28
+ // Build adjacency graph and collect direct relationships
29
+ for (const rel of allRels) {
30
+ direct.add(DerivedRelationships._relKey(rel));
31
+
32
+ if (!graph.has(rel.source)) graph.set(rel.source, { outgoing: [], incoming: [] });
33
+ if (!graph.has(rel.target)) graph.set(rel.target, { outgoing: [], incoming: [] });
34
+
35
+ graph.get(rel.source).outgoing.push(rel);
36
+ graph.get(rel.target).incoming.push(rel);
37
+ }
38
+
39
+ // Find derived relationships via BFS
40
+ const derived = [];
41
+ const seen = new Set();
42
+
43
+ for (const startRel of allRels) {
44
+ if (!DerivedRelationships.CHAINABLE_KINDS.has(startRel.kind)) continue;
45
+
46
+ // BFS from target through chainable relationships
47
+ const queue = [{ element: startRel.target, path: [startRel], hops: 1 }];
48
+
49
+ while (queue.length > 0) {
50
+ const { element, path, hops } = queue.shift();
51
+
52
+ if (hops > maxHops) continue;
53
+
54
+ const node = graph.get(element);
55
+ if (!node) continue;
56
+
57
+ // Look for outgoing chainable relationships
58
+ for (const nextRel of node.outgoing) {
59
+ if (!DerivedRelationships.CHAINABLE_KINDS.has(nextRel.kind)) continue;
60
+
61
+ const endElement = nextRel.target;
62
+ const fullPath = [...path, nextRel];
63
+ const key = DerivedRelationships._relKey({
64
+ source: startRel.source,
65
+ target: endElement,
66
+ });
67
+
68
+ // Skip if we already have a direct relationship for this pair
69
+ if (onlyNewRelationships && direct.has(key)) continue;
70
+ if (seen.has(key)) continue;
71
+
72
+ seen.add(key);
73
+ derived.push({
74
+ source: startRel.source,
75
+ target: endElement,
76
+ kind: 'derived',
77
+ path: fullPath.map(r => r.id),
78
+ pathSummary: fullPath.map(r => r.kind).join('→'),
79
+ distance: hops + 1,
80
+ id: `derived_${startRel.source}_${endElement}`,
81
+ });
82
+
83
+ queue.push({
84
+ element: endElement,
85
+ path: fullPath,
86
+ hops: hops + 1,
87
+ });
88
+ }
89
+ }
90
+ }
91
+
92
+ return { direct: allRels, derived };
93
+ }
94
+
95
+ /**
96
+ * Serialize a relationship as "source→target" for deduplication.
97
+ * @private
98
+ */
99
+ static _relKey(rel) {
100
+ return `${rel.source}→${rel.target}`;
101
+ }
102
+ }
@@ -0,0 +1,39 @@
1
+ import { Diagram } from '../Diagram.js';
2
+ import { ebnfAstToDiagram } from '../../ebnfDiagram.js';
3
+ import { parseEbnf } from '../../ebnfParser.js';
4
+
5
+ /**
6
+ * EbnfDiagram — renders an EBNF grammar rule as a railroad (syntax) diagram.
7
+ */
8
+ export class EbnfDiagram extends Diagram {
9
+ static diagramType = 'ebnf';
10
+
11
+ _render() {
12
+ const rule = this.data;
13
+ const options = this.options;
14
+ const isText = typeof rule === 'string';
15
+ const { ast } = isText ? parseEbnf(rule) : { ast: rule };
16
+
17
+ this.renderer.renderDiagram(ebnfAstToDiagram(ast));
18
+
19
+ if (isText) this._drawCaption(rule, options);
20
+ }
21
+
22
+ /**
23
+ * Draws the verbatim EBNF source text in a caption band under an
24
+ * already-rendered railroad diagram.
25
+ * @private
26
+ */
27
+ _drawCaption(text, options) {
28
+ if (!this.renderer?.svg) return;
29
+ const svg = this.renderer.svg;
30
+ const viewBox = (svg.getAttribute('viewBox') || '0 0 0 0').split(/\s+/).map(Number);
31
+ const [vx, vy, vw, vh] = viewBox;
32
+ const capHeight = 32;
33
+ svg.setAttribute('viewBox', `${vx} ${vy} ${vw} ${vh + capHeight}`);
34
+ this.renderer.rect(vx, vy + vh, vw, capHeight, options.captionBackground || '#fdf6e3', null, {});
35
+ this.renderer.text(text, vx + 10, vy + vh + capHeight / 2, {
36
+ textAnchor: 'start', verticalAlign: 'middle', fontSize: '12px', fontFamily: 'monospace', fill: '#333',
37
+ });
38
+ }
39
+ }