@grafloria/element 0.3.19 → 0.3.20

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 (638) hide show
  1. package/{src/index.ts → esm/src/index.js} +60 -569
  2. package/esm/src/lib/dashboard-kit/dashboard.js +590 -0
  3. package/esm/src/lib/dashboard-kit/grid-binder.js +1633 -0
  4. package/esm/src/lib/dashboard-kit/grid-mapping.js +164 -0
  5. package/esm/src/lib/dashboard-kit/index.js +8 -0
  6. package/{src/lib/dashboard-kit/styles.ts → esm/src/lib/dashboard-kit/styles.js} +8 -9
  7. package/esm/src/lib/dashboard-kit/widgets.js +379 -0
  8. package/esm/src/lib/diagram-kit/card.js +199 -0
  9. package/esm/src/lib/diagram-kit/editing.js +448 -0
  10. package/esm/src/lib/diagram-kit/er.js +160 -0
  11. package/esm/src/lib/diagram-kit/handles.js +312 -0
  12. package/esm/src/lib/diagram-kit/index.js +15 -0
  13. package/esm/src/lib/diagram-kit/join-guidance.js +322 -0
  14. package/esm/src/lib/diagram-kit/rows.js +144 -0
  15. package/{src/lib/diagram-kit/styles.ts → esm/src/lib/diagram-kit/styles.js} +10 -10
  16. package/esm/src/lib/diagram-kit/uml.js +135 -0
  17. package/esm/src/lib/diagram-kit/update.js +244 -0
  18. package/esm/src/lib/grafloria-flow-element.js +266 -0
  19. package/esm/src/lib/grafloria.js +69 -0
  20. package/esm/src/lib/load.js +252 -0
  21. package/esm/src/lib/node-type-registry.js +42 -0
  22. package/esm/src/lib/stencil-kit/builders.js +18 -0
  23. package/esm/src/lib/stencil-kit/card-builders.js +105 -0
  24. package/esm/src/lib/stencil-kit/index.js +9 -0
  25. package/esm/src/lib/stencil-kit/palette.js +427 -0
  26. package/esm/src/lib/stencil-kit/shape-data.js +537 -0
  27. package/{src/lib/stencil-kit/styles.ts → esm/src/lib/stencil-kit/styles.js} +9 -9
  28. package/package.json +12 -3
  29. package/jest.config.ts +0 -16
  30. package/project.json +0 -44
  31. package/src/front-door-probe.spec.ts +0 -173
  32. package/src/index.js.map +0 -1
  33. package/src/lib/dashboard-kit/dashboard.js.map +0 -1
  34. package/src/lib/dashboard-kit/dashboard.spec.ts +0 -821
  35. package/src/lib/dashboard-kit/dashboard.ts +0 -906
  36. package/src/lib/dashboard-kit/grid-binder.js.map +0 -1
  37. package/src/lib/dashboard-kit/grid-binder.ts +0 -1976
  38. package/src/lib/dashboard-kit/grid-mapping.js.map +0 -1
  39. package/src/lib/dashboard-kit/grid-mapping.spec.ts +0 -308
  40. package/src/lib/dashboard-kit/grid-mapping.ts +0 -283
  41. package/src/lib/dashboard-kit/index.js.map +0 -1
  42. package/src/lib/dashboard-kit/index.ts +0 -56
  43. package/src/lib/dashboard-kit/styles.js.map +0 -1
  44. package/src/lib/dashboard-kit/widgets.js.map +0 -1
  45. package/src/lib/dashboard-kit/widgets.spec.ts +0 -239
  46. package/src/lib/dashboard-kit/widgets.ts +0 -484
  47. package/src/lib/diagram-kit/card.js.map +0 -1
  48. package/src/lib/diagram-kit/card.ts +0 -219
  49. package/src/lib/diagram-kit/diagram-kit.spec.ts +0 -465
  50. package/src/lib/diagram-kit/editing.js.map +0 -1
  51. package/src/lib/diagram-kit/editing.spec.ts +0 -172
  52. package/src/lib/diagram-kit/editing.ts +0 -493
  53. package/src/lib/diagram-kit/er.js.map +0 -1
  54. package/src/lib/diagram-kit/er.ts +0 -246
  55. package/src/lib/diagram-kit/handles.js.map +0 -1
  56. package/src/lib/diagram-kit/handles.spec.ts +0 -224
  57. package/src/lib/diagram-kit/handles.ts +0 -375
  58. package/src/lib/diagram-kit/index.js.map +0 -1
  59. package/src/lib/diagram-kit/index.ts +0 -66
  60. package/src/lib/diagram-kit/join-guidance.js.map +0 -1
  61. package/src/lib/diagram-kit/join-guidance.spec.ts +0 -241
  62. package/src/lib/diagram-kit/join-guidance.ts +0 -390
  63. package/src/lib/diagram-kit/rows.js.map +0 -1
  64. package/src/lib/diagram-kit/rows.ts +0 -174
  65. package/src/lib/diagram-kit/styles.js.map +0 -1
  66. package/src/lib/diagram-kit/uml.js.map +0 -1
  67. package/src/lib/diagram-kit/uml.ts +0 -213
  68. package/src/lib/diagram-kit/update.js.map +0 -1
  69. package/src/lib/diagram-kit/update.spec.ts +0 -208
  70. package/src/lib/diagram-kit/update.ts +0 -324
  71. package/src/lib/grafloria-flow-element.js.map +0 -1
  72. package/src/lib/grafloria-flow-element.spec.ts +0 -290
  73. package/src/lib/grafloria-flow-element.ts +0 -298
  74. package/src/lib/grafloria.js.map +0 -1
  75. package/src/lib/grafloria.ts +0 -151
  76. package/src/lib/load.js.map +0 -1
  77. package/src/lib/load.spec.ts +0 -565
  78. package/src/lib/load.ts +0 -359
  79. package/src/lib/node-type-registry.js.map +0 -1
  80. package/src/lib/node-type-registry.ts +0 -76
  81. package/src/lib/stencil-kit/builders.js.map +0 -1
  82. package/src/lib/stencil-kit/builders.ts +0 -58
  83. package/src/lib/stencil-kit/card-builders.js.map +0 -1
  84. package/src/lib/stencil-kit/card-builders.ts +0 -113
  85. package/src/lib/stencil-kit/index.js.map +0 -1
  86. package/src/lib/stencil-kit/index.ts +0 -17
  87. package/src/lib/stencil-kit/palette.js.map +0 -1
  88. package/src/lib/stencil-kit/palette.ts +0 -482
  89. package/src/lib/stencil-kit/shape-data.js.map +0 -1
  90. package/src/lib/stencil-kit/shape-data.spec.ts +0 -470
  91. package/src/lib/stencil-kit/shape-data.ts +0 -680
  92. package/src/lib/stencil-kit/styles.js.map +0 -1
  93. package/src/libs/element/src/index.js.map +0 -1
  94. package/src/libs/element/src/lib/dashboard-kit/dashboard.js.map +0 -1
  95. package/src/libs/element/src/lib/dashboard-kit/grid-binder.js.map +0 -1
  96. package/src/libs/element/src/lib/dashboard-kit/grid-mapping.js.map +0 -1
  97. package/src/libs/element/src/lib/dashboard-kit/index.js.map +0 -1
  98. package/src/libs/element/src/lib/dashboard-kit/styles.js.map +0 -1
  99. package/src/libs/element/src/lib/dashboard-kit/widgets.js.map +0 -1
  100. package/src/libs/element/src/lib/diagram-kit/card.js.map +0 -1
  101. package/src/libs/element/src/lib/diagram-kit/editing.js.map +0 -1
  102. package/src/libs/element/src/lib/diagram-kit/er.js.map +0 -1
  103. package/src/libs/element/src/lib/diagram-kit/handles.js.map +0 -1
  104. package/src/libs/element/src/lib/diagram-kit/index.js.map +0 -1
  105. package/src/libs/element/src/lib/diagram-kit/join-guidance.js.map +0 -1
  106. package/src/libs/element/src/lib/diagram-kit/rows.js.map +0 -1
  107. package/src/libs/element/src/lib/diagram-kit/styles.js.map +0 -1
  108. package/src/libs/element/src/lib/diagram-kit/uml.js.map +0 -1
  109. package/src/libs/element/src/lib/diagram-kit/update.js.map +0 -1
  110. package/src/libs/element/src/lib/grafloria-flow-element.js.map +0 -1
  111. package/src/libs/element/src/lib/grafloria.js.map +0 -1
  112. package/src/libs/element/src/lib/load.js.map +0 -1
  113. package/src/libs/element/src/lib/node-type-registry.js.map +0 -1
  114. package/src/libs/element/src/lib/stencil-kit/builders.js.map +0 -1
  115. package/src/libs/element/src/lib/stencil-kit/card-builders.js.map +0 -1
  116. package/src/libs/element/src/lib/stencil-kit/index.js.map +0 -1
  117. package/src/libs/element/src/lib/stencil-kit/palette.js.map +0 -1
  118. package/src/libs/element/src/lib/stencil-kit/shape-data.js.map +0 -1
  119. package/src/libs/element/src/lib/stencil-kit/styles.js.map +0 -1
  120. package/src/libs/engine/src/adapters/component-adapter.interface.js.map +0 -1
  121. package/src/libs/engine/src/adapters/index.js.map +0 -1
  122. package/src/libs/engine/src/clipboard/ClipboardManager.js.map +0 -1
  123. package/src/libs/engine/src/clipboard/index.js.map +0 -1
  124. package/src/libs/engine/src/collab/apply-op.js.map +0 -1
  125. package/src/libs/engine/src/collab/capture.js.map +0 -1
  126. package/src/libs/engine/src/collab/index.js.map +0 -1
  127. package/src/libs/engine/src/collab/integrity.js.map +0 -1
  128. package/src/libs/engine/src/collab/lww.js.map +0 -1
  129. package/src/libs/engine/src/collab/op-log.js.map +0 -1
  130. package/src/libs/engine/src/collab/op.js.map +0 -1
  131. package/src/libs/engine/src/collab/replica.js.map +0 -1
  132. package/src/libs/engine/src/collab/undo.js.map +0 -1
  133. package/src/libs/engine/src/commands/Command.js.map +0 -1
  134. package/src/libs/engine/src/commands/CommandManager.js.map +0 -1
  135. package/src/libs/engine/src/commands/basic/AddGroupCommand.js.map +0 -1
  136. package/src/libs/engine/src/commands/basic/AddLinkCommand.js.map +0 -1
  137. package/src/libs/engine/src/commands/basic/AddNodeCommand.js.map +0 -1
  138. package/src/libs/engine/src/commands/basic/AddToGroupCommand.js.map +0 -1
  139. package/src/libs/engine/src/commands/basic/AlignCommands.js.map +0 -1
  140. package/src/libs/engine/src/commands/basic/CollapseGroupCommand.js.map +0 -1
  141. package/src/libs/engine/src/commands/basic/CopyCommand.js.map +0 -1
  142. package/src/libs/engine/src/commands/basic/CutCommand.js.map +0 -1
  143. package/src/libs/engine/src/commands/basic/DeleteSelectionCommand.js.map +0 -1
  144. package/src/libs/engine/src/commands/basic/DuplicateCommand.js.map +0 -1
  145. package/src/libs/engine/src/commands/basic/ExpandGroupCommand.js.map +0 -1
  146. package/src/libs/engine/src/commands/basic/MoveGroupCommand.js.map +0 -1
  147. package/src/libs/engine/src/commands/basic/MoveNodeCommand.js.map +0 -1
  148. package/src/libs/engine/src/commands/basic/NodeZOrderCommands.js.map +0 -1
  149. package/src/libs/engine/src/commands/basic/PasteCommand.js.map +0 -1
  150. package/src/libs/engine/src/commands/basic/PortCommands.js.map +0 -1
  151. package/src/libs/engine/src/commands/basic/ReconnectLinkCommand.js.map +0 -1
  152. package/src/libs/engine/src/commands/basic/RemoveFromGroupCommand.js.map +0 -1
  153. package/src/libs/engine/src/commands/basic/RemoveGroupCommand.js.map +0 -1
  154. package/src/libs/engine/src/commands/basic/RemoveLinkCommand.js.map +0 -1
  155. package/src/libs/engine/src/commands/basic/RemoveNodeCommand.js.map +0 -1
  156. package/src/libs/engine/src/commands/basic/ResizeNodeCommand.js.map +0 -1
  157. package/src/libs/engine/src/commands/basic/RotateNodeCommand.js.map +0 -1
  158. package/src/libs/engine/src/commands/basic/SetFlexItemCommand.js.map +0 -1
  159. package/src/libs/engine/src/commands/basic/SetGridItemCommand.js.map +0 -1
  160. package/src/libs/engine/src/commands/basic/SetLayoutCommand.js.map +0 -1
  161. package/src/libs/engine/src/commands/basic/SetLinkDisplayLabelCommand.js.map +0 -1
  162. package/src/libs/engine/src/commands/basic/SetLinkLabelCommand.js.map +0 -1
  163. package/src/libs/engine/src/commands/basic/SetLinkLabelsCommand.js.map +0 -1
  164. package/src/libs/engine/src/commands/basic/SetLinkPathTypeCommand.js.map +0 -1
  165. package/src/libs/engine/src/commands/basic/SetLinkPointsCommand.js.map +0 -1
  166. package/src/libs/engine/src/commands/basic/SetNodeDataCommand.js.map +0 -1
  167. package/src/libs/engine/src/commands/basic/SetNodeLabelCommand.js.map +0 -1
  168. package/src/libs/engine/src/commands/basic/SetNodeShapeConfigCommand.js.map +0 -1
  169. package/src/libs/engine/src/commands/basic/SetNodeStyleCommand.js.map +0 -1
  170. package/src/libs/engine/src/commands/basic/SetParentCommand.js.map +0 -1
  171. package/src/libs/engine/src/commands/basic/SetStrokePointsCommand.js.map +0 -1
  172. package/src/libs/engine/src/commands/basic/StrokeLifecycleCommands.js.map +0 -1
  173. package/src/libs/engine/src/commands/basic/UpdateLinkStyleCommand.js.map +0 -1
  174. package/src/libs/engine/src/commands/basic/index.js.map +0 -1
  175. package/src/libs/engine/src/commands/basic/remapNodePortIds.js.map +0 -1
  176. package/src/libs/engine/src/commands/basic/resolveLinkNodeIds.js.map +0 -1
  177. package/src/libs/engine/src/commands/composite/BatchCommand.js.map +0 -1
  178. package/src/libs/engine/src/commands/composite/MacroCommand.js.map +0 -1
  179. package/src/libs/engine/src/commands/composite/index.js.map +0 -1
  180. package/src/libs/engine/src/commands/index.js.map +0 -1
  181. package/src/libs/engine/src/comments/comment-store.js.map +0 -1
  182. package/src/libs/engine/src/comments/index.js.map +0 -1
  183. package/src/libs/engine/src/comments/mentions.js.map +0 -1
  184. package/src/libs/engine/src/comments/read-state.js.map +0 -1
  185. package/src/libs/engine/src/comments/types.js.map +0 -1
  186. package/src/libs/engine/src/config/InteractionConfig.js.map +0 -1
  187. package/src/libs/engine/src/config/index.js.map +0 -1
  188. package/src/libs/engine/src/dsl/DSL.js.map +0 -1
  189. package/src/libs/engine/src/dsl/advanced/StyleParser.js.map +0 -1
  190. package/src/libs/engine/src/dsl/advanced/TemplateParser.js.map +0 -1
  191. package/src/libs/engine/src/dsl/advanced/index.js.map +0 -1
  192. package/src/libs/engine/src/dsl/detector/LayoutDetector.js.map +0 -1
  193. package/src/libs/engine/src/dsl/extended/BPMNGenerator.js.map +0 -1
  194. package/src/libs/engine/src/dsl/extended/BPMNParser.js.map +0 -1
  195. package/src/libs/engine/src/dsl/extended/ERDGenerator.js.map +0 -1
  196. package/src/libs/engine/src/dsl/extended/ERDParser.js.map +0 -1
  197. package/src/libs/engine/src/dsl/extended/ERDTransformer.js.map +0 -1
  198. package/src/libs/engine/src/dsl/extended/UMLGenerator.js.map +0 -1
  199. package/src/libs/engine/src/dsl/extended/UMLParser.js.map +0 -1
  200. package/src/libs/engine/src/dsl/extended/index.js.map +0 -1
  201. package/src/libs/engine/src/dsl/generator/DSLFormatter.js.map +0 -1
  202. package/src/libs/engine/src/dsl/generator/DSLGenerator.js.map +0 -1
  203. package/src/libs/engine/src/dsl/generator/DiagramAnalyzer.js.map +0 -1
  204. package/src/libs/engine/src/dsl/index.js.map +0 -1
  205. package/src/libs/engine/src/dsl/lexer/Lexer.js.map +0 -1
  206. package/src/libs/engine/src/dsl/mermaid/MermaidClass.js.map +0 -1
  207. package/src/libs/engine/src/dsl/mermaid/MermaidER.js.map +0 -1
  208. package/src/libs/engine/src/dsl/mermaid/MermaidState.js.map +0 -1
  209. package/src/libs/engine/src/dsl/mermaid/index.js.map +0 -1
  210. package/src/libs/engine/src/dsl/mermaid/layout.js.map +0 -1
  211. package/src/libs/engine/src/dsl/mermaid/lines.js.map +0 -1
  212. package/src/libs/engine/src/dsl/parser/Parser.js.map +0 -1
  213. package/src/libs/engine/src/dsl/sync/BidirectionalSync.js.map +0 -1
  214. package/src/libs/engine/src/dsl/sync/IntegratedSyncManager.js.map +0 -1
  215. package/src/libs/engine/src/dsl/sync/LayoutApplicator.js.map +0 -1
  216. package/src/libs/engine/src/dsl/sync/SyncStateManager.js.map +0 -1
  217. package/src/libs/engine/src/dsl/sync/index.js.map +0 -1
  218. package/src/libs/engine/src/dsl/transformer/ASTTransformer.js.map +0 -1
  219. package/src/libs/engine/src/dsl/types/ASTNode.js.map +0 -1
  220. package/src/libs/engine/src/dsl/types/Token.js.map +0 -1
  221. package/src/libs/engine/src/engine/DiagramEngine.js.map +0 -1
  222. package/src/libs/engine/src/engine/DiagramMode.js.map +0 -1
  223. package/src/libs/engine/src/engine/DiagramModeTypes.js.map +0 -1
  224. package/src/libs/engine/src/engine/ModeManager.js.map +0 -1
  225. package/src/libs/engine/src/engine/index.js.map +0 -1
  226. package/src/libs/engine/src/events/EventBus.js.map +0 -1
  227. package/src/libs/engine/src/events/index.js.map +0 -1
  228. package/src/libs/engine/src/index.js.map +0 -1
  229. package/src/libs/engine/src/interaction/GroupCollapseService.js.map +0 -1
  230. package/src/libs/engine/src/interaction/GroupMembershipService.js.map +0 -1
  231. package/src/libs/engine/src/interaction/SemanticMembershipService.js.map +0 -1
  232. package/src/libs/engine/src/interaction/SwimlaneService.js.map +0 -1
  233. package/src/libs/engine/src/interaction/index.js.map +0 -1
  234. package/src/libs/engine/src/interop/drawio/importDrawio.js.map +0 -1
  235. package/src/libs/engine/src/interop/drawio/index.js.map +0 -1
  236. package/src/libs/engine/src/interop/drawio/xml.js.map +0 -1
  237. package/src/libs/engine/src/layout/CompoundLayoutService.js.map +0 -1
  238. package/src/libs/engine/src/layout/ILayoutAlgorithm.js.map +0 -1
  239. package/src/libs/engine/src/layout/LayoutManager.js.map +0 -1
  240. package/src/libs/engine/src/layout/SmartSpacingCalculator.js.map +0 -1
  241. package/src/libs/engine/src/layout/ViewportTransform.js.map +0 -1
  242. package/src/libs/engine/src/layout/algorithms/ForceDirectedLayoutAlgorithm.js.map +0 -1
  243. package/src/libs/engine/src/layout/algorithms/GridLayoutAlgorithm.js.map +0 -1
  244. package/src/libs/engine/src/layout/algorithms/HierarchicalLayoutAlgorithm.js.map +0 -1
  245. package/src/libs/engine/src/layout/algorithms/HybridLayoutAlgorithm.js.map +0 -1
  246. package/src/libs/engine/src/layout/community-layout-adapter.js.map +0 -1
  247. package/src/libs/engine/src/layout/component-packing.js.map +0 -1
  248. package/src/libs/engine/src/layout/dagre-layout-adapter.js.map +0 -1
  249. package/src/libs/engine/src/layout/edge-bundling.interface.js.map +0 -1
  250. package/src/libs/engine/src/layout/elk-layout-adapter.js.map +0 -1
  251. package/src/libs/engine/src/layout/elk-loader.js.map +0 -1
  252. package/src/libs/engine/src/layout/force-layout-adapter.js.map +0 -1
  253. package/src/libs/engine/src/layout/grid-pack/grid-pack-engine.js.map +0 -1
  254. package/src/libs/engine/src/layout/incremental/mental-map.js.map +0 -1
  255. package/src/libs/engine/src/layout/incremental-layout.interface.js.map +0 -1
  256. package/src/libs/engine/src/layout/index.js.map +0 -1
  257. package/src/libs/engine/src/layout/layout-adapter.interface.js.map +0 -1
  258. package/src/libs/engine/src/layout/layout-auto-select.js.map +0 -1
  259. package/src/libs/engine/src/layout/layout-constraints.interface.js.map +0 -1
  260. package/src/libs/engine/src/layout/layout-graph.js.map +0 -1
  261. package/src/libs/engine/src/layout/layout-history.js.map +0 -1
  262. package/src/libs/engine/src/layout/layout-host.js.map +0 -1
  263. package/src/libs/engine/src/layout/layout-presets.js.map +0 -1
  264. package/src/libs/engine/src/layout/layout-quality-extended.js.map +0 -1
  265. package/src/libs/engine/src/layout/layout-quality-metrics.js.map +0 -1
  266. package/src/libs/engine/src/layout/layout-registry.js.map +0 -1
  267. package/src/libs/engine/src/layout/layout.service.js.map +0 -1
  268. package/src/libs/engine/src/layout/overlap-removal.js.map +0 -1
  269. package/src/libs/engine/src/layout/port-aware-layout.interface.js.map +0 -1
  270. package/src/libs/engine/src/layout/port-label-bridge.js.map +0 -1
  271. package/src/libs/engine/src/layout/portfolio-layouts.js.map +0 -1
  272. package/src/libs/engine/src/layout/rng.js.map +0 -1
  273. package/src/libs/engine/src/layout/spectral-layout-adapter.js.map +0 -1
  274. package/src/libs/engine/src/layout/steppable-layout.js.map +0 -1
  275. package/src/libs/engine/src/layout/subgraph-layout.interface.js.map +0 -1
  276. package/src/libs/engine/src/layout/sugiyama/layered-layout.js.map +0 -1
  277. package/src/libs/engine/src/layout/sugiyama/sugiyama.js.map +0 -1
  278. package/src/libs/engine/src/layout/tree-layout.js.map +0 -1
  279. package/src/libs/engine/src/layout/types.js.map +0 -1
  280. package/src/libs/engine/src/lib/performance/mobile-performance.service.js.map +0 -1
  281. package/src/libs/engine/src/models/DiagramEntity.js.map +0 -1
  282. package/src/libs/engine/src/models/DiagramModel.js.map +0 -1
  283. package/src/libs/engine/src/models/GroupModel.js.map +0 -1
  284. package/src/libs/engine/src/models/LinkModel.js.map +0 -1
  285. package/src/libs/engine/src/models/NodeModel.js.map +0 -1
  286. package/src/libs/engine/src/models/PortModel.js.map +0 -1
  287. package/src/libs/engine/src/models/StrokeModel.js.map +0 -1
  288. package/src/libs/engine/src/models/index.js.map +0 -1
  289. package/src/libs/engine/src/models/readonly-lock.js.map +0 -1
  290. package/src/libs/engine/src/performance/LRUCache.js.map +0 -1
  291. package/src/libs/engine/src/performance/PerformanceMonitor.js.map +0 -1
  292. package/src/libs/engine/src/performance/SpatialIndex.js.map +0 -1
  293. package/src/libs/engine/src/performance/index.js.map +0 -1
  294. package/src/libs/engine/src/plugins/PluginManager.js.map +0 -1
  295. package/src/libs/engine/src/plugins/index.js.map +0 -1
  296. package/src/libs/engine/src/ports/connection-rules.js.map +0 -1
  297. package/src/libs/engine/src/ports/dynamic-ports.js.map +0 -1
  298. package/src/libs/engine/src/ports/index.js.map +0 -1
  299. package/src/libs/engine/src/ports/port-groups.js.map +0 -1
  300. package/src/libs/engine/src/ports/port-type-registry.js.map +0 -1
  301. package/src/libs/engine/src/ports/port-types.js.map +0 -1
  302. package/src/libs/engine/src/rendering/HtmlTemplateRenderer.js.map +0 -1
  303. package/src/libs/engine/src/rendering/LemonadeJSRenderer.js.map +0 -1
  304. package/src/libs/engine/src/rendering/index.js.map +0 -1
  305. package/src/libs/engine/src/routing/LiveReroutingEngine.js.map +0 -1
  306. package/src/libs/engine/src/routing/ObstacleIndex.js.map +0 -1
  307. package/src/libs/engine/src/routing/ObstacleMap.js.map +0 -1
  308. package/src/libs/engine/src/routing/ObstacleMapBuilder.js.map +0 -1
  309. package/src/libs/engine/src/routing/PathSimplifier.js.map +0 -1
  310. package/src/libs/engine/src/routing/RoutingEngine.js.map +0 -1
  311. package/src/libs/engine/src/routing/algorithms/AStarRouter.js.map +0 -1
  312. package/src/libs/engine/src/routing/algorithms/DijkstraRouter.js.map +0 -1
  313. package/src/libs/engine/src/routing/algorithms/ElkRouter.js.map +0 -1
  314. package/src/libs/engine/src/routing/algorithms/ManhattanRouter.js.map +0 -1
  315. package/src/libs/engine/src/routing/algorithms/OrthogonalRouter.js.map +0 -1
  316. package/src/libs/engine/src/routing/algorithms/StraightRouter.js.map +0 -1
  317. package/src/libs/engine/src/routing/algorithms/VisibilityGraphRouter.js.map +0 -1
  318. package/src/libs/engine/src/routing/global/GlobalRouteSolver.js.map +0 -1
  319. package/src/libs/engine/src/routing/global/solver-host.js.map +0 -1
  320. package/src/libs/engine/src/routing/index.js.map +0 -1
  321. package/src/libs/engine/src/routing/types.js.map +0 -1
  322. package/src/libs/engine/src/selection/SelectionManager.js.map +0 -1
  323. package/src/libs/engine/src/selection/index.js.map +0 -1
  324. package/src/libs/engine/src/serialization/DiagramMigrations.js.map +0 -1
  325. package/src/libs/engine/src/serialization/DiagramValidator.js.map +0 -1
  326. package/src/libs/engine/src/serialization/DocumentEnvelope.js.map +0 -1
  327. package/src/libs/engine/src/serialization/Incremental.js.map +0 -1
  328. package/src/libs/engine/src/serialization/Serializer.js.map +0 -1
  329. package/src/libs/engine/src/serialization/Subgraph.js.map +0 -1
  330. package/src/libs/engine/src/serialization/TextFormat.js.map +0 -1
  331. package/src/libs/engine/src/state/ConnectionStateManager.js.map +0 -1
  332. package/src/libs/engine/src/state/DiagramStore.js.map +0 -1
  333. package/src/libs/engine/src/state/index.js.map +0 -1
  334. package/src/libs/engine/src/sync/awareness.js.map +0 -1
  335. package/src/libs/engine/src/sync/batcher.js.map +0 -1
  336. package/src/libs/engine/src/sync/causal-buffer.js.map +0 -1
  337. package/src/libs/engine/src/sync/index.js.map +0 -1
  338. package/src/libs/engine/src/sync/protocol.js.map +0 -1
  339. package/src/libs/engine/src/sync/sync-adapter.js.map +0 -1
  340. package/src/libs/engine/src/sync/transport.js.map +0 -1
  341. package/src/libs/engine/src/sync/transports/broadcast-channel.js.map +0 -1
  342. package/src/libs/engine/src/sync/transports/memory.js.map +0 -1
  343. package/src/libs/engine/src/sync/transports/unreliable.js.map +0 -1
  344. package/src/libs/engine/src/sync/transports/websocket.js.map +0 -1
  345. package/src/libs/engine/src/sync/version-vector.js.map +0 -1
  346. package/src/libs/engine/src/template-library/common-templates.js.map +0 -1
  347. package/src/libs/engine/src/template-library/data-viz-templates.js.map +0 -1
  348. package/src/libs/engine/src/template-library/erd-templates.js.map +0 -1
  349. package/src/libs/engine/src/template-library/index.js.map +0 -1
  350. package/src/libs/engine/src/template-library/integration.js.map +0 -1
  351. package/src/libs/engine/src/template-library/workflow-templates.js.map +0 -1
  352. package/src/libs/engine/src/templates/NodeFactory.js.map +0 -1
  353. package/src/libs/engine/src/templates/NodeTemplate.js.map +0 -1
  354. package/src/libs/engine/src/templates/TemplateLoader.js.map +0 -1
  355. package/src/libs/engine/src/templates/TemplateRegistry.js.map +0 -1
  356. package/src/libs/engine/src/templates/generated/bpmn/bpmn-business-rule-task.template.js.map +0 -1
  357. package/src/libs/engine/src/templates/generated/bpmn/bpmn-end-event.template.js.map +0 -1
  358. package/src/libs/engine/src/templates/generated/bpmn/bpmn-error-event.template.js.map +0 -1
  359. package/src/libs/engine/src/templates/generated/bpmn/bpmn-exclusive-gateway.template.js.map +0 -1
  360. package/src/libs/engine/src/templates/generated/bpmn/bpmn-inclusive-gateway.template.js.map +0 -1
  361. package/src/libs/engine/src/templates/generated/bpmn/bpmn-intermediate-event.template.js.map +0 -1
  362. package/src/libs/engine/src/templates/generated/bpmn/bpmn-manual-task.template.js.map +0 -1
  363. package/src/libs/engine/src/templates/generated/bpmn/bpmn-message-event.template.js.map +0 -1
  364. package/src/libs/engine/src/templates/generated/bpmn/bpmn-parallel-gateway.template.js.map +0 -1
  365. package/src/libs/engine/src/templates/generated/bpmn/bpmn-script-task.template.js.map +0 -1
  366. package/src/libs/engine/src/templates/generated/bpmn/bpmn-service-task.template.js.map +0 -1
  367. package/src/libs/engine/src/templates/generated/bpmn/bpmn-start-event.template.js.map +0 -1
  368. package/src/libs/engine/src/templates/generated/bpmn/bpmn-task.template.js.map +0 -1
  369. package/src/libs/engine/src/templates/generated/bpmn/bpmn-timer-event.template.js.map +0 -1
  370. package/src/libs/engine/src/templates/generated/bpmn/bpmn-user-task.template.js.map +0 -1
  371. package/src/libs/engine/src/templates/generated/bpmn/index.js.map +0 -1
  372. package/src/libs/engine/src/templates/generated/erd/erd-associative-entity.template.js.map +0 -1
  373. package/src/libs/engine/src/templates/generated/erd/erd-attribute.template.js.map +0 -1
  374. package/src/libs/engine/src/templates/generated/erd/erd-bridge-entity.template.js.map +0 -1
  375. package/src/libs/engine/src/templates/generated/erd/erd-composite-attribute.template.js.map +0 -1
  376. package/src/libs/engine/src/templates/generated/erd/erd-derived-attribute.template.js.map +0 -1
  377. package/src/libs/engine/src/templates/generated/erd/erd-discriminator.template.js.map +0 -1
  378. package/src/libs/engine/src/templates/generated/erd/erd-entity.template.js.map +0 -1
  379. package/src/libs/engine/src/templates/generated/erd/erd-isa.template.js.map +0 -1
  380. package/src/libs/engine/src/templates/generated/erd/erd-key-attribute.template.js.map +0 -1
  381. package/src/libs/engine/src/templates/generated/erd/erd-multivalued-attribute.template.js.map +0 -1
  382. package/src/libs/engine/src/templates/generated/erd/erd-optional-attribute.template.js.map +0 -1
  383. package/src/libs/engine/src/templates/generated/erd/erd-partial-key.template.js.map +0 -1
  384. package/src/libs/engine/src/templates/generated/erd/erd-relationship.template.js.map +0 -1
  385. package/src/libs/engine/src/templates/generated/erd/erd-subtype.template.js.map +0 -1
  386. package/src/libs/engine/src/templates/generated/erd/erd-supertype.template.js.map +0 -1
  387. package/src/libs/engine/src/templates/generated/erd/erd-table.template.js.map +0 -1
  388. package/src/libs/engine/src/templates/generated/erd/erd-view.template.js.map +0 -1
  389. package/src/libs/engine/src/templates/generated/erd/erd-weak-entity.template.js.map +0 -1
  390. package/src/libs/engine/src/templates/generated/erd/erd-weak-relationship.template.js.map +0 -1
  391. package/src/libs/engine/src/templates/generated/erd/index.js.map +0 -1
  392. package/src/libs/engine/src/templates/generated/flowchart/flowchart-connector.template.js.map +0 -1
  393. package/src/libs/engine/src/templates/generated/flowchart/flowchart-data.template.js.map +0 -1
  394. package/src/libs/engine/src/templates/generated/flowchart/flowchart-decision.template.js.map +0 -1
  395. package/src/libs/engine/src/templates/generated/flowchart/flowchart-delay.template.js.map +0 -1
  396. package/src/libs/engine/src/templates/generated/flowchart/flowchart-display.template.js.map +0 -1
  397. package/src/libs/engine/src/templates/generated/flowchart/flowchart-document.template.js.map +0 -1
  398. package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-input.template.js.map +0 -1
  399. package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-operation.template.js.map +0 -1
  400. package/src/libs/engine/src/templates/generated/flowchart/flowchart-merge.template.js.map +0 -1
  401. package/src/libs/engine/src/templates/generated/flowchart/flowchart-or.template.js.map +0 -1
  402. package/src/libs/engine/src/templates/generated/flowchart/flowchart-predefined-process.template.js.map +0 -1
  403. package/src/libs/engine/src/templates/generated/flowchart/flowchart-preparation.template.js.map +0 -1
  404. package/src/libs/engine/src/templates/generated/flowchart/flowchart-process.template.js.map +0 -1
  405. package/src/libs/engine/src/templates/generated/flowchart/flowchart-stored-data.template.js.map +0 -1
  406. package/src/libs/engine/src/templates/generated/flowchart/flowchart-summing-junction.template.js.map +0 -1
  407. package/src/libs/engine/src/templates/generated/flowchart/flowchart-terminal.template.js.map +0 -1
  408. package/src/libs/engine/src/templates/generated/flowchart/index.js.map +0 -1
  409. package/src/libs/engine/src/templates/generated/index.js.map +0 -1
  410. package/src/libs/engine/src/templates/generated/register.js.map +0 -1
  411. package/src/libs/engine/src/templates/generated/uml/index.js.map +0 -1
  412. package/src/libs/engine/src/templates/generated/uml/uml-abstract-class.template.js.map +0 -1
  413. package/src/libs/engine/src/templates/generated/uml/uml-activation.template.js.map +0 -1
  414. package/src/libs/engine/src/templates/generated/uml/uml-activity-partition.template.js.map +0 -1
  415. package/src/libs/engine/src/templates/generated/uml/uml-activity.template.js.map +0 -1
  416. package/src/libs/engine/src/templates/generated/uml/uml-actor.template.js.map +0 -1
  417. package/src/libs/engine/src/templates/generated/uml/uml-class.template.js.map +0 -1
  418. package/src/libs/engine/src/templates/generated/uml/uml-collaboration.template.js.map +0 -1
  419. package/src/libs/engine/src/templates/generated/uml/uml-component.template.js.map +0 -1
  420. package/src/libs/engine/src/templates/generated/uml/uml-datatype.template.js.map +0 -1
  421. package/src/libs/engine/src/templates/generated/uml/uml-decision.template.js.map +0 -1
  422. package/src/libs/engine/src/templates/generated/uml/uml-enum.template.js.map +0 -1
  423. package/src/libs/engine/src/templates/generated/uml/uml-final-node.template.js.map +0 -1
  424. package/src/libs/engine/src/templates/generated/uml/uml-final-state.template.js.map +0 -1
  425. package/src/libs/engine/src/templates/generated/uml/uml-fork.template.js.map +0 -1
  426. package/src/libs/engine/src/templates/generated/uml/uml-initial-node.template.js.map +0 -1
  427. package/src/libs/engine/src/templates/generated/uml/uml-initial-state.template.js.map +0 -1
  428. package/src/libs/engine/src/templates/generated/uml/uml-interface.template.js.map +0 -1
  429. package/src/libs/engine/src/templates/generated/uml/uml-join.template.js.map +0 -1
  430. package/src/libs/engine/src/templates/generated/uml/uml-lifeline.template.js.map +0 -1
  431. package/src/libs/engine/src/templates/generated/uml/uml-merge.template.js.map +0 -1
  432. package/src/libs/engine/src/templates/generated/uml/uml-node.template.js.map +0 -1
  433. package/src/libs/engine/src/templates/generated/uml/uml-note.template.js.map +0 -1
  434. package/src/libs/engine/src/templates/generated/uml/uml-object.template.js.map +0 -1
  435. package/src/libs/engine/src/templates/generated/uml/uml-package.template.js.map +0 -1
  436. package/src/libs/engine/src/templates/generated/uml/uml-part.template.js.map +0 -1
  437. package/src/libs/engine/src/templates/generated/uml/uml-port.template.js.map +0 -1
  438. package/src/libs/engine/src/templates/generated/uml/uml-primitive-type.template.js.map +0 -1
  439. package/src/libs/engine/src/templates/generated/uml/uml-signal.template.js.map +0 -1
  440. package/src/libs/engine/src/templates/generated/uml/uml-state.template.js.map +0 -1
  441. package/src/libs/engine/src/templates/generated/uml/uml-use-case.template.js.map +0 -1
  442. package/src/libs/engine/src/templates/index.js.map +0 -1
  443. package/src/libs/engine/src/templates/stencils.js.map +0 -1
  444. package/src/libs/engine/src/types/domain/bpmn.js.map +0 -1
  445. package/src/libs/engine/src/types/domain/erd.js.map +0 -1
  446. package/src/libs/engine/src/types/domain/flowchart.js.map +0 -1
  447. package/src/libs/engine/src/types/domain/index.js.map +0 -1
  448. package/src/libs/engine/src/types/domain/uml.js.map +0 -1
  449. package/src/libs/engine/src/types/event.types.js.map +0 -1
  450. package/src/libs/engine/src/types/geometry.types.js.map +0 -1
  451. package/src/libs/engine/src/types/index.js.map +0 -1
  452. package/src/libs/engine/src/types/layout.types.js.map +0 -1
  453. package/src/libs/engine/src/types/model.types.js.map +0 -1
  454. package/src/libs/engine/src/types/performance.types.js.map +0 -1
  455. package/src/libs/engine/src/types/plugin.types.js.map +0 -1
  456. package/src/libs/engine/src/utils/deep-clone.js.map +0 -1
  457. package/src/libs/engine/src/utils/geometry.js.map +0 -1
  458. package/src/libs/engine/src/utils/id.js.map +0 -1
  459. package/src/libs/engine/src/utils/index.js.map +0 -1
  460. package/src/libs/engine/src/utils/transform.js.map +0 -1
  461. package/src/libs/engine/src/validation/ConnectionGroupValidator.js.map +0 -1
  462. package/src/libs/engine/src/validation/TypeRegistry.js.map +0 -1
  463. package/src/libs/engine/src/validation/ValidationEngine.js.map +0 -1
  464. package/src/libs/engine/src/validation/index.js.map +0 -1
  465. package/src/libs/renderer/src/a11y/diagram-outline.js.map +0 -1
  466. package/src/libs/renderer/src/a11y/focus-containment.js.map +0 -1
  467. package/src/libs/renderer/src/a11y/graph-topology.js.map +0 -1
  468. package/src/libs/renderer/src/a11y/index.js.map +0 -1
  469. package/src/libs/renderer/src/a11y/live-region.js.map +0 -1
  470. package/src/libs/renderer/src/a11y/outline-view.js.map +0 -1
  471. package/src/libs/renderer/src/a11y/reduced-motion.js.map +0 -1
  472. package/src/libs/renderer/src/a11y/semantics.js.map +0 -1
  473. package/src/libs/renderer/src/canvas/canvas-context.js.map +0 -1
  474. package/src/libs/renderer/src/canvas/canvas-renderer.js.map +0 -1
  475. package/src/libs/renderer/src/canvas/dirty-region.js.map +0 -1
  476. package/src/libs/renderer/src/canvas/index.js.map +0 -1
  477. package/src/libs/renderer/src/canvas/path-geometry.js.map +0 -1
  478. package/src/libs/renderer/src/canvas/render-backend.js.map +0 -1
  479. package/src/libs/renderer/src/canvas/style-resolution.js.map +0 -1
  480. package/src/libs/renderer/src/canvas/tier-policy.js.map +0 -1
  481. package/src/libs/renderer/src/canvas/vnode-painter.js.map +0 -1
  482. package/src/libs/renderer/src/comments/comment-overlay.js.map +0 -1
  483. package/src/libs/renderer/src/comments/comment-panel.js.map +0 -1
  484. package/src/libs/renderer/src/comments/comment-pins.js.map +0 -1
  485. package/src/libs/renderer/src/comments/index.js.map +0 -1
  486. package/src/libs/renderer/src/export/assets.js.map +0 -1
  487. package/src/libs/renderer/src/export/batch.js.map +0 -1
  488. package/src/libs/renderer/src/export/bounds.js.map +0 -1
  489. package/src/libs/renderer/src/export/capture-host.js.map +0 -1
  490. package/src/libs/renderer/src/export/custom-nodes.js.map +0 -1
  491. package/src/libs/renderer/src/export/index.js.map +0 -1
  492. package/src/libs/renderer/src/export/node-raster.js.map +0 -1
  493. package/src/libs/renderer/src/export/pagination.js.map +0 -1
  494. package/src/libs/renderer/src/export/pdf/flate.js.map +0 -1
  495. package/src/libs/renderer/src/export/pdf/index.js.map +0 -1
  496. package/src/libs/renderer/src/export/pdf/pdf-export.js.map +0 -1
  497. package/src/libs/renderer/src/export/pdf/pdf-path.js.map +0 -1
  498. package/src/libs/renderer/src/export/pdf/pdf-primitives.js.map +0 -1
  499. package/src/libs/renderer/src/export/pdf/png.js.map +0 -1
  500. package/src/libs/renderer/src/export/raster.js.map +0 -1
  501. package/src/libs/renderer/src/export/round-trip.js.map +0 -1
  502. package/src/libs/renderer/src/export/scope.js.map +0 -1
  503. package/src/libs/renderer/src/export/style-flattener.js.map +0 -1
  504. package/src/libs/renderer/src/export/svg-export.js.map +0 -1
  505. package/src/libs/renderer/src/export/vnode-serializer.js.map +0 -1
  506. package/src/libs/renderer/src/ext/capabilities.js.map +0 -1
  507. package/src/libs/renderer/src/ext/capability-factory.js.map +0 -1
  508. package/src/libs/renderer/src/ext/components/attach.js.map +0 -1
  509. package/src/libs/renderer/src/ext/components/background.js.map +0 -1
  510. package/src/libs/renderer/src/ext/components/controls.js.map +0 -1
  511. package/src/libs/renderer/src/ext/components/minimap.js.map +0 -1
  512. package/src/libs/renderer/src/ext/diagram-registry.js.map +0 -1
  513. package/src/libs/renderer/src/ext/disposable.js.map +0 -1
  514. package/src/libs/renderer/src/ext/extension-host.js.map +0 -1
  515. package/src/libs/renderer/src/ext/index.js.map +0 -1
  516. package/src/libs/renderer/src/ext/link-pipeline.js.map +0 -1
  517. package/src/libs/renderer/src/ext/manifest.js.map +0 -1
  518. package/src/libs/renderer/src/ext/node-component.js.map +0 -1
  519. package/src/libs/renderer/src/ext/plugins-loader.js.map +0 -1
  520. package/src/libs/renderer/src/ext/portal.js.map +0 -1
  521. package/src/libs/renderer/src/ext/public-api.js.map +0 -1
  522. package/src/libs/renderer/src/ext/registry-scope.js.map +0 -1
  523. package/src/libs/renderer/src/ext/tools.js.map +0 -1
  524. package/src/libs/renderer/src/index.js.map +0 -1
  525. package/src/libs/renderer/src/instance/create-diagram.js.map +0 -1
  526. package/src/libs/renderer/src/instance/diagram-instance.js.map +0 -1
  527. package/src/libs/renderer/src/instance/dom-event-binder.js.map +0 -1
  528. package/src/libs/renderer/src/instance/index.js.map +0 -1
  529. package/src/libs/renderer/src/instance/layers.js.map +0 -1
  530. package/src/libs/renderer/src/instance/model-input.js.map +0 -1
  531. package/src/libs/renderer/src/instance/render-scheduler.js.map +0 -1
  532. package/src/libs/renderer/src/instance/wheel-scroll-yield.js.map +0 -1
  533. package/src/libs/renderer/src/interaction/ControlPointEditor.js.map +0 -1
  534. package/src/libs/renderer/src/interaction/WaypointEditor.js.map +0 -1
  535. package/src/libs/renderer/src/interaction/highlighters.js.map +0 -1
  536. package/src/libs/renderer/src/interaction/in-place-editor.js.map +0 -1
  537. package/src/libs/renderer/src/interaction/index.js.map +0 -1
  538. package/src/libs/renderer/src/interaction/ink-overlay.js.map +0 -1
  539. package/src/libs/renderer/src/interaction/interaction-controller.js.map +0 -1
  540. package/src/libs/renderer/src/interaction/keyboard-navigation.js.map +0 -1
  541. package/src/libs/renderer/src/interaction/selection-tools.js.map +0 -1
  542. package/src/libs/renderer/src/interaction/snapping.js.map +0 -1
  543. package/src/libs/renderer/src/interaction/touch-gestures.js.map +0 -1
  544. package/src/libs/renderer/src/interaction/whiteboard-tools.js.map +0 -1
  545. package/src/libs/renderer/src/lazy/host-culling.js.map +0 -1
  546. package/src/libs/renderer/src/lazy/index.js.map +0 -1
  547. package/src/libs/renderer/src/lazy/progressive-mounter.js.map +0 -1
  548. package/src/libs/renderer/src/lazy/types.js.map +0 -1
  549. package/src/libs/renderer/src/lazy/view-lifecycle.js.map +0 -1
  550. package/src/libs/renderer/src/perf/index.js.map +0 -1
  551. package/src/libs/renderer/src/perf/perf-hud.js.map +0 -1
  552. package/src/libs/renderer/src/perf/quality-governor.js.map +0 -1
  553. package/src/libs/renderer/src/platform/index.js.map +0 -1
  554. package/src/libs/renderer/src/platform/platform.js.map +0 -1
  555. package/src/libs/renderer/src/presence/bind-presence.js.map +0 -1
  556. package/src/libs/renderer/src/presence/index.js.map +0 -1
  557. package/src/libs/renderer/src/presence/presence-overlay.js.map +0 -1
  558. package/src/libs/renderer/src/presentation/index.js.map +0 -1
  559. package/src/libs/renderer/src/presentation/presentation.js.map +0 -1
  560. package/src/libs/renderer/src/presentation/viewport-channel.js.map +0 -1
  561. package/src/libs/renderer/src/services/animation-lifecycle.js.map +0 -1
  562. package/src/libs/renderer/src/services/animation-performance.service.js.map +0 -1
  563. package/src/libs/renderer/src/services/animation-sequencer.js.map +0 -1
  564. package/src/libs/renderer/src/services/animation.service.js.map +0 -1
  565. package/src/libs/renderer/src/services/custom-animation-registry.js.map +0 -1
  566. package/src/libs/renderer/src/ssr/index.js.map +0 -1
  567. package/src/libs/renderer/src/ssr/render-to-static.js.map +0 -1
  568. package/src/libs/renderer/src/svg/ArrowRenderer.js.map +0 -1
  569. package/src/libs/renderer/src/svg/JumpPointDetector.js.map +0 -1
  570. package/src/libs/renderer/src/svg/JumpPointRenderer.js.map +0 -1
  571. package/src/libs/renderer/src/svg/LabelRenderer.js.map +0 -1
  572. package/src/libs/renderer/src/svg/auto-size.js.map +0 -1
  573. package/src/libs/renderer/src/svg/channel-nudging.js.map +0 -1
  574. package/src/libs/renderer/src/svg/edge-optimizer.js.map +0 -1
  575. package/src/libs/renderer/src/svg/edge-templates.js.map +0 -1
  576. package/src/libs/renderer/src/svg/html-node.js.map +0 -1
  577. package/src/libs/renderer/src/svg/index.js.map +0 -1
  578. package/src/libs/renderer/src/svg/link-fanout.js.map +0 -1
  579. package/src/libs/renderer/src/svg/link-hit-test.js.map +0 -1
  580. package/src/libs/renderer/src/svg/motion-tracker.js.map +0 -1
  581. package/src/libs/renderer/src/svg/node-sizing.js.map +0 -1
  582. package/src/libs/renderer/src/svg/node-toolbar.js.map +0 -1
  583. package/src/libs/renderer/src/svg/notation-shapes.js.map +0 -1
  584. package/src/libs/renderer/src/svg/paint-servers.js.map +0 -1
  585. package/src/libs/renderer/src/svg/panel.js.map +0 -1
  586. package/src/libs/renderer/src/svg/path-outline.js.map +0 -1
  587. package/src/libs/renderer/src/svg/port-glyph.js.map +0 -1
  588. package/src/libs/renderer/src/svg/port-label.js.map +0 -1
  589. package/src/libs/renderer/src/svg/port-layout.js.map +0 -1
  590. package/src/libs/renderer/src/svg/port-positioning.js.map +0 -1
  591. package/src/libs/renderer/src/svg/port-spots.js.map +0 -1
  592. package/src/libs/renderer/src/svg/route-memo.js.map +0 -1
  593. package/src/libs/renderer/src/svg/route-solver-bridge.js.map +0 -1
  594. package/src/libs/renderer/src/svg/shape-registry.js.map +0 -1
  595. package/src/libs/renderer/src/svg/stroke-layer.js.map +0 -1
  596. package/src/libs/renderer/src/svg/svg-renderer.js.map +0 -1
  597. package/src/libs/renderer/src/svg/text-block.js.map +0 -1
  598. package/src/libs/renderer/src/themes/color-mode.js.map +0 -1
  599. package/src/libs/renderer/src/themes/contrast.js.map +0 -1
  600. package/src/libs/renderer/src/themes/default-dark-theme.js.map +0 -1
  601. package/src/libs/renderer/src/themes/default-light-theme.js.map +0 -1
  602. package/src/libs/renderer/src/themes/default-theme-set.js.map +0 -1
  603. package/src/libs/renderer/src/themes/high-contrast-theme.js.map +0 -1
  604. package/src/libs/renderer/src/themes/index.js.map +0 -1
  605. package/src/libs/renderer/src/themes/style-cascade.js.map +0 -1
  606. package/src/libs/renderer/src/themes/style-registry.js.map +0 -1
  607. package/src/libs/renderer/src/themes/theme-a11y.js.map +0 -1
  608. package/src/libs/renderer/src/themes/theme-css.js.map +0 -1
  609. package/src/libs/renderer/src/themes/theme-ref.js.map +0 -1
  610. package/src/libs/renderer/src/themes/theme-vars.js.map +0 -1
  611. package/src/libs/renderer/src/themes/token-bridge.js.map +0 -1
  612. package/src/libs/renderer/src/types/geometry.types.js.map +0 -1
  613. package/src/libs/renderer/src/types/index.js.map +0 -1
  614. package/src/libs/renderer/src/types/property-schema/conditions.js.map +0 -1
  615. package/src/libs/renderer/src/types/property-schema/editor-types.js.map +0 -1
  616. package/src/libs/renderer/src/types/property-schema/groups.js.map +0 -1
  617. package/src/libs/renderer/src/types/property-schema/index.js.map +0 -1
  618. package/src/libs/renderer/src/types/property-schema/property-definition.js.map +0 -1
  619. package/src/libs/renderer/src/types/property-schema/schema.js.map +0 -1
  620. package/src/libs/renderer/src/types/property-schema/validation.js.map +0 -1
  621. package/src/libs/renderer/src/types/renderer.interface.js.map +0 -1
  622. package/src/libs/renderer/src/types/theme.types.js.map +0 -1
  623. package/src/libs/renderer/src/types/vnode.types.js.map +0 -1
  624. package/src/libs/renderer/src/utils/animation-presets.js.map +0 -1
  625. package/src/libs/renderer/src/utils/animation-priority.js.map +0 -1
  626. package/src/libs/renderer/src/utils/animation-utils.js.map +0 -1
  627. package/src/libs/renderer/src/utils/lru-cache.js.map +0 -1
  628. package/src/libs/renderer/src/viewport/index.js.map +0 -1
  629. package/src/libs/renderer/src/viewport/viewport-controller.js.map +0 -1
  630. package/src/libs/renderer/src/vnode/container-id-generator.js.map +0 -1
  631. package/src/libs/renderer/src/vnode/foreign-object.js.map +0 -1
  632. package/src/libs/renderer/src/vnode/index.js.map +0 -1
  633. package/src/libs/renderer/src/vnode/patch.js.map +0 -1
  634. package/src/reachability.spec.ts +0 -173
  635. package/tsconfig.esm.json +0 -9
  636. package/tsconfig.json +0 -24
  637. package/tsconfig.lib.json +0 -10
  638. package/tsconfig.spec.json +0 -14
@@ -1,821 +0,0 @@
1
- /**
2
- * `dashboard()` — the authoring API's contract.
3
- *
4
- * The promise being tested is the one the user asked for: "does our API
5
- * contain an easy way to create dashboards for developers", by exact analogy
6
- * with `erDiagram()`. So these tests assert the DECLARATIVE surface — what you
7
- * get from pure data, with no hand-assembly — and the typed handles over it.
8
- *
9
- * They drive the real engine (DiagramModel + the kit's binder) through a
10
- * minimal API stub, the same shape `render()` passes to `finalize()`.
11
- */
12
- import { Command, DiagramModel, GroupModel, NodeModel, CommandManager, EventBus } from '@grafloria/engine';
13
- import { render } from '../grafloria';
14
- import { dashboard, type DashboardSpec } from './dashboard';
15
-
16
- /** The slice of a DiagramInstance `finalize()` uses, over a real model. */
17
- function makeApi(model: DiagramModel) {
18
- const bus = new EventBus();
19
- const manager = new CommandManager({ diagram: model, eventBus: bus });
20
- const container = document.createElement('div');
21
- document.body.appendChild(container);
22
- const layer = document.createElement('div');
23
- layer.className = 'grafloria-html-layer';
24
- container.appendChild(layer);
25
- return {
26
- getModel: () => model,
27
- getEngine: () => ({ commandManager: manager }),
28
- container,
29
- render: () => undefined,
30
- renderNow: () => undefined,
31
- viewport: { fitToBounds: () => undefined, clientToWorld: () => ({ x: 0, y: 0 }) },
32
- };
33
- }
34
-
35
- /** Mount a spec the way `render()` does: build nodes, then run finalize. */
36
- function mount(spec: DashboardSpec) {
37
- const model = new DiagramModel('dash');
38
- for (const n of spec.nodes) {
39
- const raw = n as {
40
- id: string;
41
- position: { x: number; y: number };
42
- size: { width: number; height: number };
43
- metadata: Record<string, unknown>;
44
- };
45
- const node = new NodeModel({
46
- id: raw.id,
47
- type: 'widget',
48
- position: { ...raw.position },
49
- size: { ...raw.size, depth: 0 },
50
- });
51
- for (const [k, v] of Object.entries(raw.metadata)) node.setMetadata(k, v);
52
- model.addNode(node);
53
- }
54
- const api = makeApi(model);
55
- spec.finalize(api);
56
- return { model, api, handle: spec.handle };
57
- }
58
-
59
- const SIMPLE = () =>
60
- dashboard({
61
- columns: 12,
62
- views: [
63
- {
64
- id: 'overview',
65
- name: 'Overview',
66
- widgets: [
67
- { id: 'a', kind: 'kpi', span: 3, rows: 1 },
68
- { id: 'b', kind: 'kpi', span: 3, rows: 1 },
69
- { id: 'c', kind: 'line', span: 6, rows: 2 },
70
- ],
71
- },
72
- { id: 'sales', name: 'Sales', widgets: [{ id: 'd', kind: 'bar', span: 12, rows: 2 }] },
73
- ],
74
- });
75
-
76
- describe('dashboard() — the declarative surface', () => {
77
- it('turns pure data into custom-HTML widget nodes, no hand-assembly', () => {
78
- const spec = SIMPLE();
79
- expect(spec.nodes).toHaveLength(4);
80
- const a = spec.nodes[0] as Record<string, any>;
81
- expect(a['id']).toBe('a');
82
- expect(a['custom']).toBe(true); // the un-sanitised HTML host path
83
- expect(a['metadata'].useHTMLLayer).toBe(true);
84
- expect(a['metadata'].widgetKind).toBe('kpi');
85
- // Cells are carried as GridItemConfig, so save/load round-trips for free.
86
- expect(a['metadata'].gridItem).toEqual({ columnStart: 1, columnEnd: 4, rowStart: 1, rowEnd: 2 });
87
- });
88
-
89
- it('FLOWS widgets that declare no cell — the common case needs no coordinates', () => {
90
- const spec = dashboard({
91
- columns: 12,
92
- widgets: [
93
- { id: 'w1', span: 4 },
94
- { id: 'w2', span: 4 },
95
- { id: 'w3', span: 4 },
96
- { id: 'w4', span: 6 }, // wraps to the next row
97
- ],
98
- });
99
- const cell = (i: number) => (spec.nodes[i] as Record<string, any>)['metadata'].gridItem;
100
- expect(cell(0)).toMatchObject({ columnStart: 1, rowStart: 1 });
101
- expect(cell(1)).toMatchObject({ columnStart: 5, rowStart: 1 });
102
- expect(cell(2)).toMatchObject({ columnStart: 9, rowStart: 1 });
103
- expect(cell(3)).toMatchObject({ columnStart: 1, rowStart: 2 }); // wrapped
104
- });
105
-
106
- it('honours explicit cells verbatim and mixes them with flowed ones', () => {
107
- const spec = dashboard({
108
- columns: 12,
109
- widgets: [
110
- { id: 'hero', span: 6, rows: 2, x: 6, y: 0 }, // pinned to the right
111
- { id: 'flow', span: 3 },
112
- ],
113
- });
114
- expect((spec.nodes[0] as Record<string, any>)['metadata'].gridItem).toMatchObject({
115
- columnStart: 7,
116
- rowStart: 1,
117
- columnEnd: 13,
118
- });
119
- expect((spec.nodes[1] as Record<string, any>)['metadata'].gridItem).toMatchObject({ columnStart: 1 });
120
- });
121
-
122
- it('finalize() builds one chromeless board per view and adopts its widgets', () => {
123
- const { model, handle } = mount(SIMPLE());
124
- const overview = model.getGroup('overview');
125
- const sales = model.getGroup('sales');
126
- expect(overview).toBeDefined();
127
- expect(sales).toBeDefined();
128
- // A layout container must not paint group chrome (frame + title band).
129
- expect(overview!.getMetadata('frameChrome')).toBe('none');
130
- expect([...(overview!.members ?? [])].sort()).toEqual(['a', 'b', 'c']);
131
- expect([...(sales!.members ?? [])]).toEqual(['d']);
132
- expect(handle.views).toEqual(['overview', 'sales']);
133
- });
134
-
135
- it('DECLARED CELLS REACH THE BOARD — not just the flow order', () => {
136
- // The regression this locks: the spec's `metadata.gridItem` is inert, so
137
- // finalize() must write the model's real GridItemConfig. Before it did,
138
- // the board auto-positioned every widget in declaration order and an
139
- // out-of-flow cell was silently ignored — invisible whenever the flow
140
- // happened to agree, and fatal to the toJSON() round-trip when it did not.
141
- const { handle } = mount(
142
- dashboard({
143
- columns: 12,
144
- widgets: [
145
- { id: 'far', span: 3, rows: 1, x: 9, y: 2 }, // nowhere near the flow's first hole
146
- { id: 'near', span: 3, rows: 1, x: 0, y: 0 },
147
- ],
148
- })
149
- );
150
- // Declared FIRST, yet it holds the last three columns — auto-positioning
151
- // would have opened the board with it at x: 0.
152
- expect(handle.widget('far')!.cell).toMatchObject({ x: 9, w: 3 });
153
- expect(handle.widget('near')!.cell).toEqual({ x: 0, y: 0, w: 3, h: 1 });
154
- // …and the row obeys gravity, which is the engine's job, not the spec's:
155
- // with float off nothing hovers over an empty row.
156
- expect(handle.widget('far')!.cell!.y).toBe(0);
157
- const floated = mount(
158
- dashboard({ float: true, widgets: [{ id: 'far', span: 3, rows: 1, x: 9, y: 2 }] })
159
- );
160
- expect(floated.handle.widget('far')!.cell).toEqual({ x: 9, y: 2, w: 3, h: 1 });
161
- });
162
-
163
- it('parks every non-active view off-camera (the tab pattern)', () => {
164
- const { model, handle } = mount(SIMPLE());
165
- expect(handle.activeView).toBe('overview');
166
- expect(model.getGroup('overview')!.position.x).toBe(0);
167
- expect(model.getGroup('sales')!.position.x).toBeLessThan(-1000);
168
- handle.showView('sales');
169
- expect(handle.activeView).toBe('sales');
170
- expect(model.getGroup('sales')!.position.x).toBe(0);
171
- expect(model.getGroup('overview')!.position.x).toBeLessThan(-1000);
172
- });
173
-
174
- it('pinned:true reaches the model as the authoritative lock', () => {
175
- const { model } = mount(
176
- dashboard({ widgets: [{ id: 'p', span: 3, pinned: true }, { id: 'q', span: 3 }] })
177
- );
178
- expect(model.getNode('p')!.state?.locked).toBe(true);
179
- expect(model.getNode('q')!.state?.locked).not.toBe(true);
180
- });
181
-
182
- it('renderWidget receives the DECLARED widget and a raw host', () => {
183
- const seen: Array<{ id: string; kind?: string; tag: string }> = [];
184
- const spec = dashboard({
185
- widgets: [{ id: 'w', kind: 'donut', title: 'Mix', data: { source: 'region' } }],
186
- renderWidget: (w, host) => seen.push({ id: w.id, kind: w.kind, tag: host.tagName }),
187
- });
188
- const host = document.createElement('div');
189
- spec.renderCustomNode({ id: 'w' }, host);
190
- expect(seen).toEqual([{ id: 'w', kind: 'donut', tag: 'DIV' }]);
191
- });
192
-
193
- it('without renderWidget a titled placeholder renders — layouts are testable before charts exist', () => {
194
- const spec = dashboard({ widgets: [{ id: 'w', title: 'Revenue' }] });
195
- const host = document.createElement('div');
196
- spec.renderCustomNode({ id: 'w' }, host);
197
- expect(host.textContent).toContain('Revenue');
198
- });
199
- });
200
-
201
- describe('render(SPEC, host) — the documented one-liner', () => {
202
- // A spec that carries BOTH `finalize` and `renderCustomNode` must have both
203
- // honoured. render() auto-ran finalize but dropped renderCustomNode, so the
204
- // kit's headline usage — `render(dashboard({…}), host)` — mounted a board
205
- // whose widgets never painted. The API's own doc comment was false.
206
- it('paints widgets through render() itself — the whole one-liner', () => {
207
- // Drives the REAL render() path, not the spec object: the first version of
208
- // this tooth called spec.renderCustomNode directly and stayed green with
209
- // the bug in place (render() silently dropped it). Weak teeth are how a
210
- // documented API stays false.
211
- const painted: string[] = [];
212
- const el = document.createElement('div');
213
- el.style.width = '900px';
214
- el.style.height = '600px';
215
- document.body.appendChild(el);
216
- render(
217
- dashboard({
218
- widgets: [{ id: 'w1', kind: 'kpi' }, { id: 'w2', kind: 'line' }],
219
- renderWidget: (w, host) => {
220
- painted.push(w.id);
221
- host.textContent = w.id;
222
- },
223
- }) as never,
224
- el
225
- );
226
- expect(painted.sort()).toEqual(['w1', 'w2']);
227
- });
228
-
229
- it('honours a spec-provided renderCustomNode', () => {
230
- const painted: string[] = [];
231
- const spec = dashboard({
232
- widgets: [{ id: 'w', kind: 'kpi' }],
233
- renderWidget: (w, host) => {
234
- painted.push(w.id);
235
- host.textContent = w.id;
236
- },
237
- });
238
- // The exact contract render() relies on: the spec exposes the painter.
239
- expect(typeof spec.renderCustomNode).toBe('function');
240
- const host = document.createElement('div');
241
- spec.renderCustomNode({ id: 'w' }, host);
242
- expect(painted).toEqual(['w']);
243
- });
244
- });
245
-
246
- describe('the typed handles (the erTable/umlClass equivalent)', () => {
247
- it('widget() exposes the live cell as data', () => {
248
- const { handle } = mount(SIMPLE());
249
- expect(handle.widget('a')!.cell).toEqual({ x: 0, y: 0, w: 3, h: 1 });
250
- expect(handle.widget('c')!.cell).toEqual({ x: 6, y: 0, w: 6, h: 2 });
251
- expect(handle.widget('nope')).toBeUndefined();
252
- });
253
-
254
- it('widgetsOf() lists the active view, or a named one', () => {
255
- const { handle } = mount(SIMPLE());
256
- expect(handle.widgetsOf().map((w) => w.id)).toEqual(['a', 'b', 'c']);
257
- expect(handle.widgetsOf('sales').map((w) => w.id)).toEqual(['d']);
258
- });
259
-
260
- it('resize() changes the cell', async () => {
261
- const { handle } = mount(SIMPLE());
262
- await handle.widget('a')!.resize(6, 2);
263
- expect(handle.widget('a')!.cell).toMatchObject({ w: 6, h: 2 });
264
- });
265
-
266
- it('moveTo() relocates and the board stays overlap-free', async () => {
267
- const { handle } = mount(SIMPLE());
268
- await handle.widget('c')!.moveTo(0, 2);
269
- const cells = handle.widgetsOf().map((w) => w.cell!);
270
- for (let i = 0; i < cells.length; i++) {
271
- for (let j = i + 1; j < cells.length; j++) {
272
- const p = cells[i];
273
- const q = cells[j];
274
- const overlap =
275
- p.x < q.x + q.w && q.x < p.x + p.w && p.y < q.y + q.h && q.y < p.y + p.h;
276
- expect(overlap).toBe(false);
277
- }
278
- }
279
- });
280
-
281
- it('pin() toggles the lock both ways', () => {
282
- const { handle } = mount(SIMPLE());
283
- const w = handle.widget('a')!;
284
- expect(w.pinned).toBe(false);
285
- w.pin();
286
- expect(w.pinned).toBe(true);
287
- w.pin(false);
288
- expect(w.pinned).toBe(false);
289
- });
290
-
291
- it('setSizing / setFloat drive every view at once', () => {
292
- const { handle } = mount(SIMPLE());
293
- expect(handle.getSizing()).toBe('fit');
294
- handle.setSizing('grow');
295
- expect(handle.getSizing()).toBe('grow');
296
- expect(handle.getFloat()).toBe(false);
297
- handle.setFloat(true);
298
- expect(handle.getFloat()).toBe(true);
299
- });
300
-
301
- it('remove() drops the widget and it stops being listed', () => {
302
- const { handle } = mount(SIMPLE());
303
- handle.widget('b')!.remove();
304
- expect(handle.widget('b')).toBeUndefined();
305
- expect(handle.widgetsOf().map((w) => w.id)).toEqual(['a', 'c']);
306
- });
307
-
308
- it('toJSON() round-trips: the output is valid dashboard() input', async () => {
309
- const { handle } = mount(SIMPLE());
310
- await handle.widget('a')!.resize(6, 1);
311
- const saved = handle.toJSON();
312
- expect(saved.views.map((v) => v.id)).toEqual(['overview', 'sales']);
313
- expect(saved.views[0].widgets.find((w) => w.id === 'a')).toMatchObject({ span: 6, rows: 1 });
314
- // Feed it straight back — the whole point of a data-first API.
315
- const reloaded = dashboard({ ...saved, columns: 12 });
316
- const cellOfA = (reloaded.nodes.find((n) => (n as Record<string, any>)['id'] === 'a') as Record<
317
- string,
318
- any
319
- >)['metadata'].gridItem;
320
- expect(cellOfA).toMatchObject({ columnStart: 1, columnEnd: 7 });
321
- // …and MOUNTING that reload really reproduces the saved cells, which is
322
- // the claim a save/load button depends on (the spec's node metadata alone
323
- // never reaches the board — finalize() writes the model's GridItemConfig).
324
- const { handle: h2 } = mount(reloaded);
325
- expect(h2.widget('a')!.cell).toEqual({ x: 0, y: 0, w: 6, h: 1 });
326
- expect(h2.widget('c')!.cell).toEqual(handle.widget('c')!.cell);
327
- });
328
-
329
- it('onLayoutChange is wired to committed gestures', () => {
330
- const calls: string[] = [];
331
- const spec = dashboard({
332
- widgets: [{ id: 'w', span: 3 }],
333
- onLayoutChange: (viewId) => calls.push(viewId),
334
- });
335
- mount(spec);
336
- // No gesture yet — the hook must not fire on boot.
337
- expect(calls).toEqual([]);
338
- });
339
- });
340
-
341
- describe('the closed API gaps (the port\'s bypass list)', () => {
342
- it('#1 addWidget CREATES the node, wires its metadata, and is UNDOABLE', async () => {
343
- const { model, api, handle } = mount(SIMPLE());
344
- const cm = api.getEngine().commandManager;
345
- expect(model.getNode('fresh')).toBeUndefined();
346
- const w = handle.addWidget({ id: 'fresh', kind: 'bar', span: 4, rows: 2 });
347
- expect(w).toBeDefined();
348
- const node = model.getNode('fresh')!;
349
- expect(node).toBeDefined();
350
- expect(node.getMetadata('useHTMLLayer')).toBe(true);
351
- expect(node.getMetadata('widgetKind')).toBe('bar');
352
- expect(node.getMetadata('columnSpan')).toBe(4);
353
- expect([...(model.getGroup('overview')!.members ?? [])]).toContain('fresh');
354
- // The manager settles its history asynchronously (it awaits internally),
355
- // so the undo entry lands on the next tick — the node itself is already
356
- // in the model synchronously, which is what the paint path needs.
357
- await new Promise((r) => setTimeout(r, 0));
358
- expect(cm.canUndo()).toBe(true);
359
- });
360
-
361
- it('#5 widget nodes are NOT connectable and carry no ports — BOTH paths', () => {
362
- // The first version of this tooth only exercised addWidget(). Widgets
363
- // DECLARED in dashboard({views}) travel a different road: they become node
364
- // SPECS, and the render-input path ignores a spec-level `behavior` (the
365
- // same trap erDiagram documents for `resizable`), so finalize() has to set
366
- // it on the live model. Covering one path let the other ship connectable.
367
- const { model, handle } = mount(SIMPLE());
368
- for (const id of ['a', 'b', 'c']) {
369
- const declared = model.getNode(id)!;
370
- expect(declared.behavior?.connectable).toBe(false);
371
- expect([...declared.getPorts().values()]).toHaveLength(0);
372
- }
373
- handle.addWidget({ id: 'w5', kind: 'kpi' });
374
- const added = model.getNode('w5')!;
375
- expect(added.behavior?.connectable).toBe(false);
376
- expect([...added.getPorts().values()]).toHaveLength(0);
377
- });
378
-
379
- it('#3 resize/moveTo report whether the board ACCEPTED the change', async () => {
380
- const { handle } = mount(SIMPLE());
381
- await expect(handle.widget('a')!.resize(6, 2)).resolves.toBe(true);
382
- // Same cells again -> nothing to do -> false, not a silent void.
383
- const cell = handle.widget('a')!.cell!;
384
- await expect(handle.widget('a')!.resize(cell.w, cell.h)).resolves.toBe(false);
385
- });
386
-
387
- it('#7/#12 the handle exposes the declared spec, the rect and board metrics', () => {
388
- const { handle } = mount(SIMPLE());
389
- expect(handle.widget('a')!.spec.kind).toBe('kpi');
390
- const rect = handle.widget('a')!.rect!;
391
- expect(rect.width).toBeGreaterThan(0);
392
- const m = handle.metrics()!;
393
- expect(m.columns).toBe(12);
394
- expect(m.rows).toBeGreaterThan(0);
395
- });
396
-
397
- it('#11 z-order lives on the handle and is undoable', async () => {
398
- const { model, api, handle } = mount(SIMPLE());
399
- handle.widget('a')!.bringToFront();
400
- await new Promise((r) => setTimeout(r, 0));
401
- expect(api.getEngine().commandManager.canUndo()).toBe(true);
402
- expect(typeof model.getNode('a')!.getEffectiveZIndex()).toBe('number');
403
- handle.widget('a')!.sendToBack();
404
- });
405
-
406
- it('#2 remove() USES the gesture\'s already-computed displaced commands', async () => {
407
- // A weaker version of this tooth passed `[]` and only checked the widget
408
- // vanished — which stayed green when remove() ignored the argument and
409
- // re-planned its own. The caller's commands must actually RUN, so hand it
410
- // an observable one and watch for it.
411
- let ran = false;
412
- class Sentinel extends Command {
413
- constructor() {
414
- super('Sentinel');
415
- }
416
- override execute(): void {
417
- ran = true;
418
- }
419
- override undo(): void {
420
- ran = false;
421
- }
422
- override serialize() {
423
- return { id: this.id, name: this.name, timestamp: this.timestamp, data: {} };
424
- }
425
- }
426
- const { handle } = mount(SIMPLE());
427
- handle.widget('b')!.remove([new Sentinel()]);
428
- await new Promise((r) => setTimeout(r, 0));
429
- expect(ran).toBe(true);
430
- expect(handle.widget('b')).toBeUndefined();
431
- });
432
-
433
- it('#6 dispose() takes its boards with it — a rebuild cannot stack them', () => {
434
- const { model, handle } = mount(SIMPLE());
435
- expect(model.getGroup('overview')).toBeDefined();
436
- handle.dispose();
437
- expect(model.getGroup('overview')).toBeUndefined();
438
- expect(model.getGroup('sales')).toBeUndefined();
439
- });
440
-
441
- it('#4/#9 refresh() and fit() exist and are safe to call', () => {
442
- const { handle } = mount(SIMPLE());
443
- expect(() => handle.refresh()).not.toThrow();
444
- expect(() => handle.fit()).not.toThrow();
445
- expect(() => handle.fit('sales')).not.toThrow();
446
- });
447
-
448
- it('update() swaps the data and repaints through renderWidget', () => {
449
- const painted: unknown[] = [];
450
- const spec = dashboard({
451
- widgets: [{ id: 'u', kind: 'kpi', data: { value: 'one' } }],
452
- renderWidget: (w, host) => {
453
- painted.push(w.data);
454
- host.textContent = String((w.data as { value?: string })?.value ?? '');
455
- },
456
- });
457
- const host = document.createElement('div');
458
- spec.renderCustomNode({ id: 'u' }, host); // mount captures the host
459
- mount(spec);
460
- spec.handle.widget('u')!.update({ data: { value: 'two' } });
461
- expect(host.textContent).toBe('two');
462
- expect(spec.handle.widget('u')!.spec.data).toEqual({ value: 'two' });
463
- });
464
- });
465
-
466
- // ===========================================================================
467
- // PHASE 4 — responsive column count and RTL, through the DATA-FIRST API.
468
- //
469
- // The engine spec proves the column-change semantics and the cache; these
470
- // prove the authoring surface actually reaches them, which is the gap that
471
- // made this phase's work "not only the binder".
472
- // ===========================================================================
473
-
474
- const BOARD = () =>
475
- dashboard({
476
- columns: 12,
477
- width: 1200,
478
- height: 400,
479
- views: [
480
- {
481
- id: 'main',
482
- widgets: [
483
- { id: 'w1', span: 3, rows: 1, x: 0, y: 0 },
484
- { id: 'w2', span: 3, rows: 1, x: 3, y: 0 },
485
- { id: 'w3', span: 6, rows: 1, x: 6, y: 0 },
486
- ],
487
- },
488
- ],
489
- });
490
-
491
- describe('dashboard() — responsive column count', () => {
492
- it('setColumns re-lays the board out and metrics report the LIVE count', () => {
493
- const { handle } = mount(BOARD());
494
- expect(handle.getColumns()).toBe(12);
495
- expect(handle.metrics()!.columns).toBe(12);
496
- handle.setColumns(6);
497
- expect(handle.getColumns()).toBe(6);
498
- expect(handle.metrics()!.columns).toBe(6);
499
- expect(handle.metrics()!.maxColumns).toBe(12); // the authored width is remembered
500
- for (const w of handle.widgetsOf()) expect(w.cell!.x + w.cell!.w).toBeLessThanOrEqual(6);
501
- });
502
-
503
- it('shrinking then growing back restores every cell EXACTLY (the cache)', () => {
504
- const { handle } = mount(BOARD());
505
- const before = handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }));
506
- handle.setColumns(1);
507
- expect(handle.widgetsOf().every((w) => w.cell!.w === 1)).toBe(true);
508
- handle.setColumns(12);
509
- expect(handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }))).toEqual(before);
510
- });
511
-
512
- it('the column change writes cells through, so a refresh() cannot undo it', () => {
513
- const { handle } = mount(BOARD());
514
- handle.setColumns(4);
515
- const narrow = handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }));
516
- handle.refresh(); // rebuilds every engine from the model
517
- expect(handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }))).toEqual(narrow);
518
- // …and the cache still survived the rebuild, so growing back still restores.
519
- handle.setColumns(12);
520
- expect(handle.widgetsOf().find((w) => w.id === 'w3')!.cell!.w).toBe(6);
521
- });
522
-
523
- it('a responsive board derives its count from the board width', () => {
524
- const spec = dashboard({
525
- columns: 12,
526
- width: 600,
527
- height: 300,
528
- responsive: { columnWidth: 100 },
529
- widgets: [
530
- { id: 'a', span: 3, rows: 1, x: 0, y: 0 },
531
- { id: 'b', span: 3, rows: 1, x: 3, y: 0 },
532
- ],
533
- });
534
- const { handle } = mount(spec);
535
- // 600 / 100 = 6 columns, not the declared 12.
536
- expect(handle.getColumns()).toBe(6);
537
- expect(handle.metrics()!.responsive).toBe(true);
538
- });
539
-
540
- it('breakpoints pick the first step at least as wide as the board', () => {
541
- const make = (width: number) =>
542
- mount(
543
- dashboard({
544
- columns: 12,
545
- width,
546
- height: 300,
547
- responsive: { breakpoints: [{ w: 500, c: 1 }, { w: 900, c: 6 }] },
548
- widgets: [{ id: 'a', span: 6, rows: 1, x: 0, y: 0 }],
549
- })
550
- ).handle;
551
- expect(make(400).getColumns()).toBe(1); // <= 500
552
- expect(make(800).getColumns()).toBe(6); // <= 900
553
- expect(make(1200).getColumns()).toBe(12); // wider than every step -> the max
554
- });
555
-
556
- it('an explicit setColumns PINS the count against the width evaluator', () => {
557
- const { handle } = mount(
558
- dashboard({
559
- columns: 12,
560
- width: 600,
561
- height: 300,
562
- responsive: { columnWidth: 100 },
563
- widgets: [{ id: 'a', span: 3, rows: 1, x: 0, y: 0 }],
564
- })
565
- );
566
- expect(handle.getColumns()).toBe(6);
567
- handle.setColumns(12);
568
- expect(handle.getColumns()).toBe(12);
569
- expect(handle.metrics()!.responsive).toBe(false);
570
- handle.refresh(); // would re-evaluate width and snap back to 6 if not pinned
571
- expect(handle.getColumns()).toBe(12);
572
- });
573
-
574
- it('SAVING WHILE NARROW saves the wide layout — toJSON keeps the desktop', () => {
575
- const { handle } = mount(BOARD());
576
- const wide = handle.toJSON();
577
- handle.setColumns(1);
578
- const narrow = handle.toJSON();
579
- expect(narrow.views[0].columns).toBe(12); // the view records the widest count
580
- expect(narrow.views[0].widgets.map((w) => [w.x, w.y, w.span])).toEqual(
581
- wide.views[0].widgets.map((w) => [w.x, w.y, w.span])
582
- );
583
- // …while the board on screen really IS one column wide.
584
- expect(handle.getColumns()).toBe(1);
585
- expect(handle.widgetsOf().every((w) => w.cell!.w === 1)).toBe(true);
586
- });
587
-
588
- it('that saved JSON feeds straight back into dashboard() as the wide board', () => {
589
- const { handle } = mount(BOARD());
590
- handle.setColumns(1);
591
- const saved = handle.toJSON();
592
- const rebuilt = mount(dashboard({ ...saved, width: 1200, height: 400 }));
593
- expect(rebuilt.handle.getColumns()).toBe(12);
594
- expect(rebuilt.handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }))).toEqual(
595
- handle.toJSON().views[0].widgets.map((w) => ({ id: w.id, x: w.x!, y: w.y!, w: w.span!, h: w.rows! }))
596
- );
597
- });
598
- });
599
-
600
- describe('dashboard() — RTL', () => {
601
- /** The same three-widget board, declared once, mounted in each direction. */
602
- const both = () => {
603
- const ltr = mount(BOARD());
604
- const rtlSpec = dashboard({
605
- columns: 12,
606
- width: 1200,
607
- height: 400,
608
- rtl: true,
609
- views: [
610
- {
611
- id: 'main',
612
- widgets: [
613
- { id: 'w1', span: 3, rows: 1, x: 0, y: 0 },
614
- { id: 'w2', span: 3, rows: 1, x: 3, y: 0 },
615
- { id: 'w3', span: 6, rows: 1, x: 6, y: 0 },
616
- ],
617
- },
618
- ],
619
- });
620
- return { ltr, rtl: mount(rtlSpec) };
621
- };
622
-
623
- it('is direction-agnostic in the MODEL: identical cells, mirrored pixels', () => {
624
- const { ltr, rtl } = both();
625
- for (const id of ['w1', 'w2', 'w3']) {
626
- expect(rtl.handle.widget(id)!.cell).toEqual(ltr.handle.widget(id)!.cell);
627
- }
628
- // Column 0 is at the LEFT in LTR and at the RIGHT in RTL.
629
- const l1 = ltr.handle.widget('w1')!.rect!;
630
- const r1 = rtl.handle.widget('w1')!.rect!;
631
- expect(r1.width).toBeCloseTo(l1.width, 5);
632
- expect(r1.y).toBeCloseTo(l1.y, 5);
633
- expect(r1.x).toBeGreaterThan(l1.x);
634
- // The mirror identity, on the frame the board actually has.
635
- const f = rtl.handle.metrics()!.frame;
636
- expect(f.x + f.width - (r1.x + r1.width)).toBeCloseTo(l1.x - f.x, 4);
637
- });
638
-
639
- it('the LAST column renders at the LEFT edge in RTL', () => {
640
- const { ltr, rtl } = both();
641
- const l3 = ltr.handle.widget('w3')!.rect!; // x=6, the right half in LTR
642
- const r3 = rtl.handle.widget('w3')!.rect!;
643
- expect(r3.x).toBeLessThan(l3.x);
644
- const f = rtl.handle.metrics()!.frame;
645
- expect(r3.x - f.x).toBeCloseTo(ltr.handle.metrics()!.frame.width - (l3.x + l3.width), 4);
646
- });
647
-
648
- it('a layout SAVED in one direction re-renders mirrored in the other, same cells', () => {
649
- const { ltr } = both();
650
- const saved = ltr.handle.toJSON();
651
- const mirrored = mount(dashboard({ ...saved, width: 1200, height: 400, rtl: true }));
652
- for (const id of ['w1', 'w2', 'w3']) {
653
- expect(mirrored.handle.widget(id)!.cell).toEqual(ltr.handle.widget(id)!.cell);
654
- }
655
- expect(mirrored.handle.widget('w1')!.rect!.x).toBeGreaterThan(
656
- ltr.handle.widget('w1')!.rect!.x
657
- );
658
- });
659
-
660
- it('toggles live without touching a single cell', () => {
661
- const { ltr } = both();
662
- const cells = ltr.handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }));
663
- const xBefore = ltr.handle.widget('w1')!.rect!.x;
664
- ltr.handle.setRtl(true);
665
- expect(ltr.handle.getRtl()).toBe(true);
666
- expect(ltr.handle.widgetsOf().map((w) => ({ id: w.id, ...w.cell! }))).toEqual(cells);
667
- expect(ltr.handle.widget('w1')!.rect!.x).toBeGreaterThan(xBefore);
668
- ltr.handle.setRtl(false);
669
- expect(ltr.handle.widget('w1')!.rect!.x).toBeCloseTo(xBefore, 4);
670
- });
671
-
672
- it('RTL and responsive compose: mirrored AND width-derived at once', () => {
673
- const { handle } = mount(
674
- dashboard({
675
- columns: 12,
676
- width: 600,
677
- height: 300,
678
- rtl: true,
679
- responsive: { columnWidth: 100 },
680
- widgets: [
681
- { id: 'a', span: 3, rows: 1, x: 0, y: 0 },
682
- { id: 'b', span: 3, rows: 1, x: 3, y: 0 },
683
- ],
684
- })
685
- );
686
- expect(handle.getColumns()).toBe(6);
687
- expect(handle.getRtl()).toBe(true);
688
- const f = handle.metrics()!.frame;
689
- const a = handle.widget('a')!.rect!;
690
- // x=0 still hugs the RIGHT edge, whatever the column count became.
691
- expect(f.x + f.width - (a.x + a.width)).toBeCloseTo(handle.metrics()!.padding, 4);
692
- });
693
- });
694
-
695
- describe('dashboard() — exporting a TABBED board', () => {
696
- // THE BUG THIS PINS. Tabs are a kit feature: `showView()` parks the inactive
697
- // views at OFFSCREEN_X (-20000) so only one is on camera. That is invisible
698
- // on screen and catastrophic on export — `api.export()` frames the whole
699
- // MODEL, so a two-view board writes a ~21000px document that is 95% empty,
700
- // and the developer gets no signal that anything is wrong.
701
- //
702
- // The export layer already scopes correctly via `includeIds`; what was
703
- // missing is any way for the caller to KNOW which ids the visible board is.
704
- // Reaching for handle.toJSON() and mapping widget ids looks right and is
705
- // wrong — it misses the group, so the frame goes and the widgets export
706
- // unparented.
707
- it('exportIds() names exactly the visible view — group included', () => {
708
- const { handle } = mount(SIMPLE());
709
- const ids = handle!.exportIds();
710
-
711
- // The group is the frame the widgets live in. Omitting it is the mistake a
712
- // caller rolling their own set would make, so it is asserted first.
713
- expect(ids.has('overview')).toBe(true);
714
- for (const w of ['a', 'b', 'c']) expect(ids.has(w)).toBe(true);
715
-
716
- // And NOTHING from the parked view — this is the half that shrinks the
717
- // document. A set that simply returned every id would pass the asserts
718
- // above and fail here.
719
- expect(ids.has('sales')).toBe(false);
720
- expect(ids.has('d')).toBe(false);
721
- expect(ids.size).toBe(4);
722
- });
723
-
724
- it('follows the active view, so exporting after a tab switch is correct', () => {
725
- const { handle } = mount(SIMPLE());
726
- handle!.showView('sales');
727
- const ids = handle!.exportIds();
728
- expect([...ids].sort()).toEqual(['d', 'sales']);
729
- });
730
-
731
- it('takes an explicit view id — exporting a tab you are not looking at', () => {
732
- const { handle } = mount(SIMPLE());
733
- expect([...handle!.exportIds('sales')].sort()).toEqual(['d', 'sales']);
734
- expect(handle!.activeView).toBe('overview'); // asking must not switch tabs
735
- });
736
-
737
- it('returns an empty set for a view that does not exist', () => {
738
- const { handle } = mount(SIMPLE());
739
- expect(handle!.exportIds('nope').size).toBe(0);
740
- });
741
- });
742
-
743
- describe('handle.toJSON() — the round-trip promise, kept', () => {
744
- // THE BUG. Three places in this repo claim "toJSON() output IS dashboard()
745
- // input". It was true only of `views`. `DashboardOptions` also carries
746
- // columns/gap/sizing/rowHeight/width/height/float/rtl/responsive, and every
747
- // one of them was dropped — so a board authored in `grow` at a 10-column,
748
- // 6px-gap geometry came back as a 12-column, default-gap `fit` board. It
749
- // surfaced the moment anyone PERSISTED a board rather than just reading the
750
- // layout, which is exactly what a save feature does.
751
- //
752
- // `toJSON()` is also what `JSON.stringify(handle)` calls. A save API whose
753
- // stringify silently drops half the configuration is a permanent footgun, so
754
- // this is fixed at the source rather than by adding a second method beside it.
755
- const board = () =>
756
- dashboard({
757
- columns: 10,
758
- gap: 6,
759
- sizing: 'grow',
760
- rowHeight: 90,
761
- float: true,
762
- width: 1111,
763
- height: 555,
764
- responsive: { columnWidth: 100 },
765
- views: [{ id: 'v', name: 'V', widgets: [{ id: 'a', kind: 'kpi', span: 2, rows: 1 }] }],
766
- });
767
-
768
- it('carries the board options, not just the views', () => {
769
- const { handle } = mount(board());
770
- const saved = handle!.toJSON();
771
-
772
- expect(saved.gap).toBe(6);
773
- expect(saved.sizing).toBe('grow');
774
- expect(saved.rowHeight).toBe(90);
775
- expect(saved.float).toBe(true);
776
- // Asserted per-key rather than with one toEqual: a single object compare
777
- // would let a future field go missing without a word.
778
- expect(saved.views.map((v) => v.id)).toEqual(['v']);
779
- });
780
-
781
- it('carries the options it does NOT name explicitly', () => {
782
- // WEAK TOOTH, caught by mutation. The test above passes with the `...options`
783
- // spread DELETED, because gap/sizing/rowHeight/float are all re-stated by
784
- // name afterwards. Only width, height and responsive arrive purely through
785
- // the spread — so they are what actually proves it is there, and they are
786
- // what proves the Omit<> type's promise that a NEW DashboardOptions field
787
- // joins the snapshot for free instead of being silently dropped.
788
- const { handle } = mount(board());
789
- const saved = handle!.toJSON();
790
-
791
- expect(saved.width).toBe(1111);
792
- expect(saved.height).toBe(555);
793
- expect(saved.responsive).toEqual({ columnWidth: 100 });
794
- });
795
-
796
- it('reports the LIVE geometry, not the authored literal', () => {
797
- // The whole point is restoring what the user is looking at. Reading the
798
- // options back off the spec would pass the test above and still lose every
799
- // change the user made after mount.
800
- const { handle } = mount(board());
801
- handle!.setSizing('fit');
802
- handle!.setFloat(false);
803
-
804
- const saved = handle!.toJSON();
805
- expect(saved.sizing).toBe('fit');
806
- expect(saved.float).toBe(false);
807
- });
808
-
809
- it('feeds straight back into dashboard() — the documented claim', () => {
810
- const { handle } = mount(board());
811
- handle!.setSizing('fit');
812
-
813
- const rebuilt = mount(dashboard(handle!.toJSON()));
814
- const again = rebuilt.handle!.toJSON();
815
-
816
- expect(again.sizing).toBe('fit');
817
- expect(again.gap).toBe(6);
818
- expect(again.rowHeight).toBe(90);
819
- expect(again.views[0].widgets.map((w) => w.id)).toEqual(['a']);
820
- });
821
- });