orcasvn-react-diagrams 0.2.0 → 0.2.2

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 (133) hide show
  1. package/README.md +22 -1
  2. package/ai/api-contract.json +57 -5
  3. package/ai/invariants.json +5 -3
  4. package/ai/manifest.json +1 -1
  5. package/dist/cjs/examples.js +11775 -0
  6. package/dist/cjs/index.js +3889 -1112
  7. package/dist/cjs/types/api/createDiagramEditor.d.ts +7 -2
  8. package/dist/cjs/types/api/types.d.ts +178 -0
  9. package/dist/cjs/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
  10. package/dist/cjs/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
  11. package/dist/cjs/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
  12. package/dist/cjs/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
  13. package/dist/cjs/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
  14. package/dist/cjs/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
  15. package/dist/cjs/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
  16. package/dist/cjs/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
  17. package/dist/cjs/types/displaybox/demos/textDemo.d.ts +4 -0
  18. package/dist/cjs/types/displaybox/useDemoEditor.d.ts +5 -2
  19. package/dist/cjs/types/engine/AutoLayoutService.d.ts +24 -0
  20. package/dist/cjs/types/engine/DiagramEngine.d.ts +32 -14
  21. package/dist/cjs/types/engine/EngineCommands.d.ts +4 -1
  22. package/dist/cjs/types/engine/LinkRoutingService.d.ts +35 -0
  23. package/dist/cjs/types/engine/MutationPipeline.d.ts +23 -0
  24. package/dist/cjs/types/engine/TextLayoutService.d.ts +40 -0
  25. package/dist/cjs/types/examples/index.d.ts +2 -0
  26. package/dist/cjs/types/measure/textStyleDefaults.d.ts +9 -0
  27. package/dist/cjs/types/models/DiagramModel.d.ts +1 -0
  28. package/dist/cjs/types/models/ElementModel.d.ts +1 -0
  29. package/dist/cjs/types/models/PortModel.d.ts +3 -0
  30. package/dist/cjs/types/models/TextModel.d.ts +8 -0
  31. package/dist/cjs/types/renderer/RenderTypes.d.ts +34 -1
  32. package/dist/cjs/types/renderer/konva/KonvaHitTester.d.ts +1 -1
  33. package/dist/cjs/types/renderer/konva/KonvaInteraction.d.ts +53 -3
  34. package/dist/cjs/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
  35. package/dist/cjs/types/renderer/konva/KonvaRenderer.d.ts +49 -2
  36. package/dist/cjs/types/shapes/BuiltInShapes.d.ts +107 -0
  37. package/dist/cjs/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
  38. package/dist/cjs/types/shapes/index.d.ts +1 -0
  39. package/dist/cjs/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
  40. package/dist/cjs/types/utils/borderGeometry.d.ts +6 -0
  41. package/dist/cjs/types/utils/geometry.d.ts +22 -0
  42. package/dist/esm/examples.js +11767 -0
  43. package/dist/esm/examples.js.map +1 -0
  44. package/dist/esm/index.js +3890 -1113
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/types/api/createDiagramEditor.d.ts +7 -2
  47. package/dist/esm/types/api/types.d.ts +178 -0
  48. package/dist/esm/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
  49. package/dist/esm/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
  50. package/dist/esm/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
  51. package/dist/esm/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
  52. package/dist/esm/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
  53. package/dist/esm/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
  54. package/dist/esm/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
  55. package/dist/esm/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
  56. package/dist/esm/types/displaybox/demos/textDemo.d.ts +4 -0
  57. package/dist/esm/types/displaybox/useDemoEditor.d.ts +5 -2
  58. package/dist/esm/types/engine/AutoLayoutService.d.ts +24 -0
  59. package/dist/esm/types/engine/DiagramEngine.d.ts +32 -14
  60. package/dist/esm/types/engine/EngineCommands.d.ts +4 -1
  61. package/dist/esm/types/engine/LinkRoutingService.d.ts +35 -0
  62. package/dist/esm/types/engine/MutationPipeline.d.ts +23 -0
  63. package/dist/esm/types/engine/TextLayoutService.d.ts +40 -0
  64. package/dist/esm/types/examples/index.d.ts +2 -0
  65. package/dist/esm/types/measure/textStyleDefaults.d.ts +9 -0
  66. package/dist/esm/types/models/DiagramModel.d.ts +1 -0
  67. package/dist/esm/types/models/ElementModel.d.ts +1 -0
  68. package/dist/esm/types/models/PortModel.d.ts +3 -0
  69. package/dist/esm/types/models/TextModel.d.ts +8 -0
  70. package/dist/esm/types/renderer/RenderTypes.d.ts +34 -1
  71. package/dist/esm/types/renderer/konva/KonvaHitTester.d.ts +1 -1
  72. package/dist/esm/types/renderer/konva/KonvaInteraction.d.ts +53 -3
  73. package/dist/esm/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
  74. package/dist/esm/types/renderer/konva/KonvaRenderer.d.ts +49 -2
  75. package/dist/esm/types/shapes/BuiltInShapes.d.ts +107 -0
  76. package/dist/esm/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
  77. package/dist/esm/types/shapes/index.d.ts +1 -0
  78. package/dist/esm/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
  79. package/dist/esm/types/utils/borderGeometry.d.ts +6 -0
  80. package/dist/esm/types/utils/geometry.d.ts +22 -0
  81. package/dist/examples.d.ts +532 -0
  82. package/dist/index.d.ts +233 -2
  83. package/docs/API_CONTRACT.md +59 -3
  84. package/docs/ARCHITECTURE.md +1 -0
  85. package/docs/CAPABILITIES.md +3 -1
  86. package/docs/COMMANDS_EVENTS.md +5 -0
  87. package/docs/DOCUMENTATION_WORKFLOW.md +6 -8
  88. package/docs/INTEGRATION_PLAYBOOK.md +2 -0
  89. package/docs/PORTING_CHECKLIST.md +1 -0
  90. package/docs/STATE_INVARIANTS.md +4 -0
  91. package/package.json +20 -10
  92. package/src/displaybox/demos/AutoLayoutDemoTab.tsx +501 -0
  93. package/src/displaybox/demos/DeletionEventsDemoTab.tsx +147 -0
  94. package/src/displaybox/demos/EngineEventsDemoTab.tsx +151 -0
  95. package/src/displaybox/demos/EventHandlersDemoTab.tsx +110 -0
  96. package/src/displaybox/demos/ExternalDragDropDemoTab.tsx +261 -0
  97. package/src/displaybox/demos/LinkCancelDemoTab.tsx +238 -0
  98. package/src/displaybox/demos/ObstacleRoutingDemoTab.tsx +30 -0
  99. package/src/displaybox/demos/ShapeHoverControlsDemoTab.tsx +558 -0
  100. package/src/displaybox/demos/SimpleDemo.tsx +73 -0
  101. package/src/displaybox/demos/SvgPathDemoTab.tsx +327 -0
  102. package/src/displaybox/demos/TextLayoutDemoTab.tsx +386 -0
  103. package/src/displaybox/demos/autoLayoutDemo.ts +111 -0
  104. package/src/displaybox/demos/basicDemo.ts +131 -0
  105. package/src/displaybox/demos/childConstraintsDemo.ts +65 -0
  106. package/src/displaybox/demos/customDemo.ts +59 -0
  107. package/src/displaybox/demos/deletionEventsDemo.ts +91 -0
  108. package/src/displaybox/demos/engineEventsDemo.ts +64 -0
  109. package/src/displaybox/demos/eventHandlersDemo.ts +41 -0
  110. package/src/displaybox/demos/externalDragDropDemo.ts +28 -0
  111. package/src/displaybox/demos/gridOverlayDemo.ts +50 -0
  112. package/src/displaybox/demos/index.tsx +217 -0
  113. package/src/displaybox/demos/linkBendHandlesDemo.ts +143 -0
  114. package/src/displaybox/demos/linkCancelDemo.ts +56 -0
  115. package/src/displaybox/demos/linkPortCreationDemo.ts +46 -0
  116. package/src/displaybox/demos/multiLevelTreeDemo.ts +120 -0
  117. package/src/displaybox/demos/multipleElementsDemo.ts +62 -0
  118. package/src/displaybox/demos/nestedDemo.ts +78 -0
  119. package/src/displaybox/demos/obstacleRoutingDemo.ts +176 -0
  120. package/src/displaybox/demos/portBorderDemo.ts +98 -0
  121. package/src/displaybox/demos/portConstraintsDemo.ts +175 -0
  122. package/src/displaybox/demos/rotatedCreationDemo.ts +185 -0
  123. package/src/displaybox/demos/roundedRectRadiusDemo.ts +93 -0
  124. package/src/displaybox/demos/routingDemo.ts +57 -0
  125. package/src/displaybox/demos/selectionDemo.ts +49 -0
  126. package/src/displaybox/demos/shapeBorderMovementDemo.ts +126 -0
  127. package/src/displaybox/demos/shapeGalleryDemo.ts +73 -0
  128. package/src/displaybox/demos/shapeHoverControlsDemo.ts +172 -0
  129. package/src/displaybox/demos/shared.ts +161 -0
  130. package/src/displaybox/demos/svgPathDemo.ts +71 -0
  131. package/src/displaybox/demos/textDemo.ts +62 -0
  132. package/src/displaybox/types.ts +66 -0
  133. package/src/examples/index.ts +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sources":["../../src/utils/ids.ts","../../node_modules/tslib/tslib.es6.js","../../src/displaybox/demos/shared.ts","../../src/displaybox/demos/basicDemo.ts","../../src/displaybox/demos/linkPortCreationDemo.ts","../../src/displaybox/demos/nestedDemo.ts","../../src/displaybox/demos/customDemo.ts","../../src/displaybox/demos/textDemo.ts","../../src/displaybox/demos/selectionDemo.ts","../../src/displaybox/demos/eventHandlersDemo.ts","../../src/displaybox/demos/engineEventsDemo.ts","../../src/displaybox/demos/linkCancelDemo.ts","../../src/displaybox/demos/autoLayoutDemo.ts","../../src/displaybox/demos/externalDragDropDemo.ts","../../src/displaybox/demos/shapeGalleryDemo.ts","../../src/displaybox/demos/svgPathDemo.ts","../../src/displaybox/demos/roundedRectRadiusDemo.ts","../../src/displaybox/demos/rotatedCreationDemo.ts","../../src/displaybox/demos/multiLevelTreeDemo.ts","../../src/displaybox/demos/multipleElementsDemo.ts","../../src/displaybox/demos/portConstraintsDemo.ts","../../src/displaybox/demos/portBorderDemo.ts","../../src/displaybox/demos/childConstraintsDemo.ts","../../src/displaybox/demos/gridOverlayDemo.ts","../../src/displaybox/demos/routingDemo.ts","../../src/displaybox/demos/obstacleRoutingDemo.ts","../../src/displaybox/demos/linkBendHandlesDemo.ts","../../src/displaybox/demos/deletionEventsDemo.ts","../../src/displaybox/demos/shapeBorderMovementDemo.ts","../../src/displaybox/demos/shapeHoverControlsDemo.ts","../../src/displaybox/DisplayBoxControls.tsx","../../src/displaybox/DisplayBoxStage.tsx","../../src/displaybox/useDemoControls.ts","../../src/api/types.ts","../../src/models/ElementModel.ts","../../src/models/LinkModel.ts","../../src/models/OwnershipIndex.ts","../../src/models/PortModel.ts","../../src/models/TextModel.ts","../../src/utils/geometry.ts","../../src/models/DiagramModel.ts","../../src/engine/CommandQueue.ts","../../src/engine/EventBus.ts","../../src/engine/SelectionState.ts","../../src/engine/ViewportState.ts","../../src/utils/patches.ts","../../src/engine/EngineCommands.ts","../../src/renderer/RenderScheduler.ts","../../src/strategies/ObstacleRouter.ts","../../src/strategies/DefaultSnapper.ts","../../src/renderer/RenderTypes.ts","../../src/measure/textStyleDefaults.ts","../../src/measure/CanvasTextMeasurer.ts","../../src/utils/borderGeometry.ts","../../src/engine/TextLayoutService.ts","../../src/engine/AutoLayoutService.ts","../../src/engine/LinkRoutingService.ts","../../src/engine/MutationPipeline.ts","../../src/engine/DiagramEngine.ts","../../src/renderer/konva/KonvaLayers.ts","../../src/renderer/konva/KonvaNodeFactory.ts","../../src/renderer/konva/KonvaRenderer.ts","../../src/renderer/konva/KonvaHitTester.ts","../../src/renderer/konva/KonvaInteraction.ts","../../src/shapes/BuiltInShapes.ts","../../src/api/createDiagramEditor.ts","../../src/displaybox/DisplayBoxMetricsContext.tsx","../../src/displaybox/useDemoEditor.ts","../../src/displaybox/useOffsetSequence.ts","../../src/displaybox/demos/EventHandlersDemoTab.tsx","../../src/displaybox/demos/EngineEventsDemoTab.tsx","../../src/displaybox/demos/LinkCancelDemoTab.tsx","../../src/displaybox/demos/AutoLayoutDemoTab.tsx","../../src/displaybox/demos/ExternalDragDropDemoTab.tsx","../../src/displaybox/demos/SvgPathDemoTab.tsx","../../src/displaybox/demos/TextLayoutDemoTab.tsx","../../src/displaybox/demos/SimpleDemo.tsx","../../src/displaybox/demos/ObstacleRoutingDemoTab.tsx","../../src/displaybox/demos/DeletionEventsDemoTab.tsx","../../src/displaybox/demos/ShapeHoverControlsDemoTab.tsx","../../src/displaybox/demos/index.tsx"],"sourcesContent":["const fallbackId = (): string =>\r\n `id-${Math.random().toString(36).slice(2, 10)}-${Date.now().toString(36)}`;\r\n\r\nexport const createId = (): string => {\r\n const cryptoApi = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\r\n if (cryptoApi?.randomUUID) {\r\n return cryptoApi.randomUUID();\r\n }\r\n return fallbackId();\r\n};\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import type { CSSProperties } from 'react';\r\nimport type { SimpleShape } from '../../api';\r\nimport type { ToolboxItem } from '../types';\r\nimport type { RouterStrategy } from '../../strategies/RouterStrategy';\r\n\r\nexport const baseElementShapes: SimpleShape[] = [\r\n {\r\n id: 'default',\r\n kind: 'rect',\r\n style: {\r\n cornerRadius: 8,\r\n fill: '#e6f2ff',\r\n stroke: '#1f4d99',\r\n strokeWidth: 2,\r\n },\r\n },\r\n {\r\n id: 'panel',\r\n kind: 'rect',\r\n style: {\r\n cornerRadius: 14,\r\n fill: '#fff4dd',\r\n stroke: '#a26722',\r\n strokeWidth: 2,\r\n },\r\n },\r\n];\r\n\r\nexport const basePortShapes: SimpleShape[] = [\r\n {\r\n id: 'port-circle',\r\n kind: 'circle',\r\n style: {\r\n radius: 6,\r\n fill: '#ffffff',\r\n stroke: '#1f4d99',\r\n strokeWidth: 2,\r\n name: 'port',\r\n },\r\n },\r\n {\r\n id: 'port-dark',\r\n kind: 'circle',\r\n style: {\r\n radius: 5,\r\n fill: '#1f4d99',\r\n stroke: '#1f4d99',\r\n strokeWidth: 1,\r\n name: 'port',\r\n },\r\n },\r\n];\r\n\r\nexport const customGalleryShapes: SimpleShape[] = [\r\n {\r\n id: 'rect-basic',\r\n kind: 'rect',\r\n style: {\r\n cornerRadius: 8,\r\n fill: '#e6f2ff',\r\n stroke: '#1f4d99',\r\n strokeWidth: 2,\r\n },\r\n },\r\n {\n id: 'circle-basic',\n kind: 'circle',\n style: {\n fill: '#eaf7e6',\n stroke: '#2f7a3d',\n strokeWidth: 2,\n },\n },\n {\n id: 'ellipse-basic',\n kind: 'ellipse',\n style: {\n fill: '#e8f8ff',\n stroke: '#1e6b8f',\n strokeWidth: 2,\n },\n },\n {\n id: 'diamond-basic',\n kind: 'diamond',\n style: {\n fill: '#fff0f3',\n stroke: '#c0392b',\r\n strokeWidth: 2,\r\n },\r\n },\r\n {\r\n id: 'triangle-basic',\r\n kind: 'triangle',\r\n style: {\r\n fill: '#f3f1ff',\n stroke: '#5b3cc4',\n strokeWidth: 2,\n },\n },\n {\n id: 'pentagon-basic',\n kind: 'pentagon',\n style: {\n fill: '#fef5e7',\n stroke: '#b86d1f',\n strokeWidth: 2,\n },\n },\n {\n id: 'hexagon-basic',\n kind: 'hexagon',\n style: {\n fill: '#eefbe9',\n stroke: '#3f7b2c',\n strokeWidth: 2,\n },\n },\n];\n\r\nexport const externalToolboxItems: ToolboxItem[] = [\r\n {\r\n id: 'toolbox-default',\r\n label: 'Standard Node',\r\n shapeId: 'default',\r\n size: { width: 180, height: 120 },\r\n },\r\n {\r\n id: 'toolbox-panel',\r\n label: 'Panel Node',\r\n shapeId: 'panel',\r\n size: { width: 220, height: 140 },\r\n },\r\n];\r\n\r\nexport const defaultGhostSize = { width: 180, height: 120 };\r\n\r\nexport const defaultSvgPath = 'M10 10 H110 V90 H10 Z';\r\nexport const defaultSvgPathSize = { width: 180, height: 120 };\r\n\r\nexport const orthogonalRouter: RouterStrategy = {\r\n route: (source, target) => {\r\n if (Math.abs(source.x - target.x) < 1 || Math.abs(source.y - target.y) < 1) {\r\n return [{ ...source }, { ...target }];\r\n }\r\n const midX = Math.round((source.x + target.x) / 2);\r\n return [\r\n { ...source },\r\n { x: midX, y: source.y },\r\n { x: midX, y: target.y },\r\n { ...target },\r\n ];\r\n },\r\n};\r\n\r\nexport const gridStageStyle: CSSProperties = {\r\n backgroundColor: '#f8f8f8',\r\n backgroundImage:\r\n 'linear-gradient(0deg, rgba(0,0,0,0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(0,0,0,0.08) 1px, transparent 1px)',\r\n backgroundSize: '20px 20px',\r\n};\r\n","import type { DiagramState } from '../../api';\r\nimport { createId } from '../../utils/ids';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createBasicState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'element-a',\r\n position: { x: 120, y: 120 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'element-b',\r\n position: { x: 430, y: 260 },\r\n size: { width: 240, height: 150 },\r\n shapeId: 'default',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'port-a',\r\n elementId: 'element-a',\r\n position: { x: 40, y: 40 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n {\r\n id: 'port-b',\r\n elementId: 'element-b',\r\n position: { x: 60, y: 60 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [\r\n {\r\n id: 'link-ab',\r\n sourcePortId: 'port-a',\r\n targetPortId: 'port-b',\r\n points: [],\r\n },\r\n ],\r\n texts: [\r\n {\r\n id: 'text-a',\r\n content: 'Element A',\r\n position: { x: 10, y: -10 },\r\n ownerId: 'element-a',\r\n style: { fontSize: 14, fontFamily: 'sans-serif' },\r\n },\r\n {\r\n id: 'text-b',\r\n content: 'Element B',\r\n position: { x: 10, y: -10 },\r\n ownerId: 'element-b',\r\n style: { fontSize: 14, fontFamily: 'sans-serif' },\r\n },\r\n ],\r\n});\r\n\r\nexport const basicDemoConfig: DemoConfig = ({\r\n id: 'basic',\r\n title: 'Basic Diagram',\r\n description: 'Elements, ports, link, and labels.',\r\n createState: createBasicState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [\r\n {\r\n id: 'add-element',\r\n label: 'Add element',\r\n run: (editor, _state, demo, helpers) => {\r\n const offset = helpers.nextOffset();\r\n const id = `element-${createId()}`;\r\n editor.addElement({\r\n id,\r\n position: { x: 140 + offset, y: 140 + offset },\r\n size: { width: 200, height: 120 },\r\n shapeId: demo.defaultElementShapeId ?? 'default',\r\n });\r\n },\r\n },\r\n {\r\n id: 'add-port',\r\n label: 'Add port',\r\n run: (editor, state, demo, helpers) => {\r\n const element = state.elements[0];\r\n if (!element) return;\r\n const offset = helpers.nextOffset();\r\n editor.addPortToElement(element.id, {\r\n id: `port-${createId()}`,\r\n elementId: element.id,\r\n position: { x: 20 + offset, y: 20 + offset },\r\n shapeId: demo.defaultPortShapeId ?? 'port-circle',\r\n });\r\n },\r\n },\r\n {\r\n id: 'add-link',\r\n label: 'Add link',\r\n run: (editor, state) => {\r\n if (state.ports.length < 2) return;\r\n const [first, second] = state.ports;\r\n editor.addLink({\r\n id: `link-${createId()}`,\r\n sourcePortId: first.id,\r\n targetPortId: second.id,\r\n points: [],\r\n });\r\n },\r\n },\r\n {\r\n id: 'add-text',\r\n label: 'Add text',\r\n run: (editor, state) => {\r\n const element = state.elements[0];\r\n if (!element) return;\r\n editor.addText({\r\n id: `text-${createId()}`,\r\n content: 'New label',\r\n position: { x: 12, y: -12 },\r\n ownerId: element.id,\r\n });\r\n },\r\n },\r\n ],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createLinkPortCreationState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'link-source',\r\n position: { x: 140, y: 160 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'link-target',\r\n position: { x: 440, y: 200 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'panel',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'link-source-port',\r\n elementId: 'link-source',\r\n position: { x: 30, y: 30 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [],\r\n texts: [\r\n { id: 'link-source-label', content: 'Drag from the port', position: { x: 12, y: -12 }, ownerId: 'link-source' },\r\n { id: 'link-target-label', content: 'Drop on me to create a port', position: { x: 12, y: -12 }, ownerId: 'link-target' },\r\n ],\r\n});\r\n\r\nexport const linkPortCreationDemoConfig: DemoConfig = ({\r\n id: 'link-port-creation',\r\n title: 'Link Creates Port',\r\n description: 'Drag from a port to an element to auto-create a target port.',\r\n createState: createLinkPortCreationState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport { createId } from '../../utils/ids';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createNestedState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'parent-1',\r\n position: { x: 140, y: 140 },\r\n size: { width: 320, height: 240 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'child-1',\r\n position: { x: 40, y: 60 },\r\n size: { width: 160, height: 100 },\r\n shapeId: 'default',\r\n parentId: 'parent-1',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'child-port',\r\n elementId: 'child-1',\r\n position: { x: 20, y: 20 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [],\r\n texts: [\r\n {\r\n id: 'child-label',\r\n content: 'Child',\r\n position: { x: 6, y: -16 },\r\n ownerId: 'child-1',\r\n },\r\n ],\r\n});\r\n\r\nexport const nestedDemoConfig: DemoConfig = ({\r\n id: 'nested',\r\n title: 'Nested Elements',\r\n description: 'Parent/child elements with world positioning.',\r\n createState: createNestedState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [\r\n {\r\n id: 'move-parent',\r\n label: 'Move parent',\r\n run: (editor, state) => {\r\n const parent = state.elements.find((element) => element.id === 'parent-1');\r\n if (!parent) return;\r\n editor.moveElementTo(parent.id, parent.position.x + 40, parent.position.y + 20);\r\n },\r\n },\r\n {\r\n id: 'add-child',\r\n label: 'Add child',\r\n run: (editor, state, demo, helpers) => {\r\n const parent = state.elements.find((element) => element.id === 'parent-1');\r\n if (!parent) return;\r\n const offset = helpers.nextOffset();\r\n editor.addElement({\r\n id: `child-${createId()}`,\r\n position: { x: 30 + offset, y: 50 + offset },\r\n size: { width: 140, height: 90 },\r\n shapeId: demo.defaultElementShapeId ?? 'default',\r\n parentId: parent.id,\r\n });\r\n },\r\n },\r\n ],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport { createId } from '../../utils/ids';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createCustomShapeState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'custom-1',\r\n position: { x: 120, y: 160 },\r\n size: { width: 260, height: 150 },\r\n shapeId: 'panel',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'custom-port',\r\n elementId: 'custom-1',\r\n position: { x: 30, y: 30 },\r\n shapeId: 'port-dark',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [],\r\n texts: [\r\n {\r\n id: 'custom-text',\r\n content: 'Custom Shapes',\r\n position: { x: 20, y: -16 },\r\n ownerId: 'custom-1',\r\n },\r\n ],\r\n});\r\n\r\nexport const customDemoConfig: DemoConfig = ({\r\n id: 'custom',\r\n title: 'Custom Shapes',\r\n description: 'Built-in shapes with custom styling.',\r\n createState: createCustomShapeState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'panel',\r\n defaultPortShapeId: 'port-dark',\r\n actions: [\r\n {\r\n id: 'add-element',\r\n label: 'Add element',\r\n run: (editor, _state, demo, helpers) => {\r\n const offset = helpers.nextOffset();\r\n editor.addElement({\r\n id: `panel-${createId()}`,\r\n position: { x: 160 + offset, y: 140 + offset },\r\n size: { width: 220, height: 140 },\r\n shapeId: demo.defaultElementShapeId ?? 'panel',\r\n });\r\n },\r\n },\r\n ],\r\n});\r\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nexport const textDemoOwnerId = 'text-layout-owner';\nexport const textDemoOwnedTextId = 'text-owned-overflow';\nexport const textDemoFloatingTextId = 'text-floating-overflow';\nexport const textDemoLongSample =\n 'Long diagram label: middle ellipsis should keep the beginning and end visible while preserving the full canonical content in model state.';\n\nconst createTextOwnershipState = (): DiagramState => ({\n elements: [\n {\n id: textDemoOwnerId,\n position: { x: 160, y: 170 },\n size: { width: 260, height: 140 },\n shapeId: 'default',\n },\n ],\n ports: [],\n links: [],\n texts: [\n {\n id: textDemoOwnedTextId,\n content: textDemoLongSample,\n position: { x: 12, y: 12 },\n ownerId: textDemoOwnerId,\n layout: {\n boundsMode: 'owner-width',\n wrap: 'none',\n overflow: 'ellipsis-middle',\n padding: 12,\n },\n },\n {\n id: textDemoFloatingTextId,\n content: textDemoLongSample,\n position: { x: 470, y: 120 },\n layout: {\n boundsMode: 'fixed',\n fixedSize: { width: 240, height: 90 },\n wrap: 'word',\n overflow: 'ellipsis-end',\n padding: 8,\n maxLines: 3,\n },\n },\n ],\n});\n\r\nexport const textDemoConfig: DemoConfig = ({\n id: 'text',\n title: 'Text Layout + Overflow',\n description:\n 'Owner-constrained and fixed-bounds text with wrap and ellipsis behavior. Full content is preserved in model state; truncation is visual-only.',\n createState: createTextOwnershipState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createSelectionState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'select-1',\r\n position: { x: 140, y: 140 },\r\n size: { width: 180, height: 120 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'select-2',\r\n position: { x: 380, y: 220 },\r\n size: { width: 180, height: 120 },\r\n shapeId: 'default',\r\n },\r\n ],\r\n ports: [],\r\n links: [],\r\n texts: [\r\n {\r\n id: 'select-tip',\r\n content: 'Click to select, drag to move, Delete/Backspace to remove.',\r\n position: { x: 80, y: 80 },\r\n },\r\n ],\r\n});\r\n\r\nexport const selectionDemoConfig: DemoConfig = ({\r\n id: 'selection',\r\n title: 'Selection + Interaction',\r\n description: 'Click to select, drag to move, marquee-select on empty space, delete to remove.',\r\n createState: createSelectionState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [\r\n {\r\n id: 'select-all',\r\n label: 'Select all elements',\r\n run: (editor, state) => {\r\n editor.setSelection(state.elements.map((element) => element.id));\r\n },\r\n },\r\n ],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createEventHandlersState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'event-element',\r\n position: { x: 160, y: 160 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'event-element-2',\r\n position: { x: 460, y: 280 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'panel',\r\n },\r\n ],\r\n ports: [],\r\n links: [],\r\n texts: [\r\n {\r\n id: 'event-tip',\r\n content: 'Pick an engine event and interact to see the handler run.',\r\n position: { x: 120, y: 120 },\r\n },\r\n ],\r\n});\r\n\r\nexport const eventHandlersDemoConfig: DemoConfig = ({\r\n id: 'event-handlers',\r\n title: 'Event Handlers',\r\n description: 'Choose an engine event and watch the handler effect.',\r\n createState: createEventHandlersState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createEngineEventsState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'engine-events-source',\r\n position: { x: 140, y: 160 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'engine-events-target',\r\n position: { x: 500, y: 260 },\r\n size: { width: 240, height: 160 },\r\n shapeId: 'panel',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'engine-events-source-port',\r\n elementId: 'engine-events-source',\r\n position: { x: 40, y: 60 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n {\r\n id: 'engine-events-target-port',\r\n elementId: 'engine-events-target',\r\n position: { x: 60, y: 50 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [\r\n {\r\n id: 'engine-events-link',\r\n sourcePortId: 'engine-events-source-port',\r\n targetPortId: 'engine-events-target-port',\r\n points: [],\r\n routing: 'auto',\r\n },\r\n ],\r\n texts: [\r\n {\r\n id: 'engine-events-tip',\r\n content: 'Select an engine event and interact to see the payload.',\r\n position: { x: 140, y: 120 },\r\n },\r\n ],\r\n});\r\n\r\nexport const engineEventsDemoConfig: DemoConfig = ({\r\n id: 'engine-events',\r\n title: 'Engine Events',\r\n description: 'Inspect the latest payload for each engine event.',\r\n createState: createEngineEventsState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createLinkCancelState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'cancel-source',\r\n position: { x: 140, y: 180 },\r\n size: { width: 200, height: 120 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'cancel-target',\r\n position: { x: 480, y: 200 },\r\n size: { width: 200, height: 120 },\r\n shapeId: 'panel',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'cancel-source-port',\r\n elementId: 'cancel-source',\r\n position: { x: 30, y: 60 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n {\r\n id: 'cancel-target-port',\r\n elementId: 'cancel-target',\r\n position: { x: 170, y: 50 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [],\r\n texts: [\r\n {\r\n id: 'cancel-tip',\r\n content: 'Start a link from the left port. Drop on empty space to cancel, or on the right port to create.',\r\n position: { x: 120, y: 140 },\r\n },\r\n ],\r\n});\r\n\r\nexport const linkCancelDemoConfig: DemoConfig = ({\n id: 'link-cancel',\n title: 'Link Hover Complete',\n description: 'Watch immediate link completion on destination-port hover and host cancellation behavior.',\n createState: createLinkCancelState,\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createAutoLayoutState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'layout-row',\r\n position: { x: 60, y: 80 },\r\n size: { width: 180, height: 96 },\r\n shapeId: 'panel',\r\n layout: { mode: 'horizontal', padding: { x: 14, y: 12 }, gap: 14, align: 'center' },\r\n },\r\n { id: 'row-a', position: { x: 0, y: 0 }, size: { width: 62, height: 44 }, shapeId: 'default', parentId: 'layout-row' },\r\n { id: 'row-b', position: { x: 0, y: 0 }, size: { width: 96, height: 32 }, shapeId: 'default', parentId: 'layout-row' },\r\n { id: 'row-c', position: { x: 0, y: 0 }, size: { width: 54, height: 56 }, shapeId: 'default', parentId: 'layout-row' },\r\n {\r\n id: 'row-nested-owner',\r\n position: { x: 0, y: 0 },\r\n size: { width: 82, height: 82 },\r\n shapeId: 'default',\r\n parentId: 'layout-row',\r\n layout: { mode: 'vertical', padding: { x: 8, y: 6 }, gap: 6, align: 'start' },\r\n },\r\n { id: 'row-nested-child-a', position: { x: 0, y: 0 }, size: { width: 60, height: 20 }, shapeId: 'default', parentId: 'row-nested-owner' },\r\n { id: 'row-nested-child-b', position: { x: 0, y: 0 }, size: { width: 76, height: 22 }, shapeId: 'default', parentId: 'row-nested-owner' },\r\n\r\n {\r\n id: 'layout-column',\r\n position: { x: 400, y: 70 },\r\n size: { width: 120, height: 140 },\r\n shapeId: 'panel',\r\n layout: { mode: 'vertical', padding: { x: 12, y: 10 }, gap: 16, align: 'end' },\r\n },\r\n { id: 'col-a', position: { x: 0, y: 0 }, size: { width: 44, height: 28 }, shapeId: 'default', parentId: 'layout-column' },\r\n { id: 'col-b', position: { x: 0, y: 0 }, size: { width: 70, height: 36 }, shapeId: 'default', parentId: 'layout-column' },\r\n { id: 'col-c', position: { x: 0, y: 0 }, size: { width: 92, height: 44 }, shapeId: 'default', parentId: 'layout-column' },\r\n\r\n {\r\n id: 'layout-nested',\r\n position: { x: 120, y: 260 },\r\n size: { width: 190, height: 130 },\r\n shapeId: 'panel',\r\n layout: { mode: 'horizontal', padding: { x: 12, y: 12 }, gap: 12, align: 'start' },\r\n },\r\n {\r\n id: 'nested-stack',\r\n position: { x: 0, y: 0 },\r\n size: { width: 90, height: 92 },\r\n shapeId: 'default',\r\n parentId: 'layout-nested',\r\n layout: { mode: 'vertical', padding: { x: 8, y: 8 }, gap: 8, align: 'center' },\r\n },\r\n { id: 'stack-a', position: { x: 0, y: 0 }, size: { width: 60, height: 24 }, shapeId: 'default', parentId: 'nested-stack' },\r\n { id: 'stack-b', position: { x: 0, y: 0 }, size: { width: 90, height: 30 }, shapeId: 'default', parentId: 'nested-stack' },\r\n {\r\n id: 'stack-overflow',\r\n position: { x: 0, y: 0 },\r\n size: { width: 110, height: 26 },\r\n shapeId: 'default',\r\n parentId: 'nested-stack',\r\n },\r\n { id: 'nested-peer', position: { x: 0, y: 0 }, size: { width: 50, height: 90 }, shapeId: 'default', parentId: 'layout-nested' },\r\n\r\n {\r\n id: 'layout-manual',\r\n position: { x: 420, y: 260 },\r\n size: { width: 190, height: 120 },\r\n shapeId: 'panel',\r\n },\r\n { id: 'manual-a', position: { x: 12, y: 18 }, size: { width: 60, height: 30 }, shapeId: 'default', parentId: 'layout-manual' },\r\n { id: 'manual-b', position: { x: 90, y: 60 }, size: { width: 68, height: 32 }, shapeId: 'default', parentId: 'layout-manual' },\r\n ],\r\n ports: [],\r\n links: [],\r\n texts: [\r\n { id: 'label-layout-row', content: 'Row parent', position: { x: 8, y: -18 }, ownerId: 'layout-row' },\r\n { id: 'label-row-a', content: 'row-a', position: { x: 6, y: -14 }, ownerId: 'row-a' },\r\n { id: 'label-row-b', content: 'row-b', position: { x: 6, y: -14 }, ownerId: 'row-b' },\r\n { id: 'label-row-c', content: 'row-c', position: { x: 6, y: -14 }, ownerId: 'row-c' },\r\n { id: 'label-row-nested-owner', content: 'owns children', position: { x: 6, y: -16 }, ownerId: 'row-nested-owner' },\r\n\r\n { id: 'label-layout-column', content: 'Column parent', position: { x: 8, y: -18 }, ownerId: 'layout-column' },\r\n { id: 'label-col-a', content: 'col-a', position: { x: 6, y: -14 }, ownerId: 'col-a' },\r\n { id: 'label-col-b', content: 'col-b', position: { x: 6, y: -14 }, ownerId: 'col-b' },\r\n { id: 'label-col-c', content: 'col-c', position: { x: 6, y: -14 }, ownerId: 'col-c' },\r\n\r\n { id: 'label-layout-nested', content: 'Row + nested column', position: { x: 6, y: -18 }, ownerId: 'layout-nested' },\r\n { id: 'label-nested-stack', content: 'nested stack', position: { x: 6, y: -16 }, ownerId: 'nested-stack' },\r\n { id: 'label-stack-a', content: 'stack-a', position: { x: 6, y: -14 }, ownerId: 'stack-a' },\r\n { id: 'label-stack-b', content: 'stack-b', position: { x: 6, y: -14 }, ownerId: 'stack-b' },\r\n { id: 'label-stack-overflow', content: 'stack-overflow', position: { x: 6, y: -14 }, ownerId: 'stack-overflow' },\r\n { id: 'label-nested-peer', content: 'nested-peer', position: { x: 6, y: -14 }, ownerId: 'nested-peer' },\r\n\r\n { id: 'label-layout-manual', content: 'Manual (no layout)', position: { x: 6, y: -18 }, ownerId: 'layout-manual' },\r\n { id: 'label-manual-a', content: 'manual-a', position: { x: 6, y: -14 }, ownerId: 'manual-a' },\r\n { id: 'label-manual-b', content: 'manual-b', position: { x: 6, y: -14 }, ownerId: 'manual-b' },\r\n ],\r\n});\r\n\r\nexport const autoLayoutDemoConfig: DemoConfig = ({\n id: 'auto-layout',\n title: 'Element Auto-Layout',\n description: 'Arrange children with padding/alignment plus fit options (main-axis distribute, cross-axis stretch).',\n createState: createAutoLayoutState,\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createExternalDragDropState = (): DiagramState => ({\r\n elements: [],\r\n ports: [],\r\n links: [],\r\n texts: [\r\n {\r\n id: 'drop-tip',\r\n content: 'Drag items from the toolbox into the canvas.',\r\n position: { x: 120, y: 120 },\r\n },\r\n ],\r\n});\r\n\r\nexport const externalDragDropDemoConfig: DemoConfig = ({\r\n id: 'external-drag-drop',\r\n title: 'External Drag + Drop',\r\n description: 'Drag items from the external toolbox into the canvas. Drops use client-to-world conversion.',\r\n createState: createExternalDragDropState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { basePortShapes, customGalleryShapes } from './shared';\r\n\r\nconst createShapeGalleryState = (): DiagramState => ({\n elements: [\n {\n id: 'shape-rect',\n position: { x: 80, y: 80 },\n size: { width: 170, height: 110 },\n shapeId: 'rect-basic',\n },\n {\n id: 'shape-circle',\n position: { x: 310, y: 65 },\n size: { width: 140, height: 140 },\n shapeId: 'circle-basic',\n },\n {\n id: 'shape-ellipse',\n position: { x: 500, y: 95 },\n size: { width: 210, height: 120 },\n shapeId: 'ellipse-basic',\n },\n {\n id: 'shape-diamond',\n position: { x: 760, y: 80 },\n size: { width: 150, height: 120 },\n shapeId: 'diamond-basic',\n },\n {\n id: 'shape-triangle',\n position: { x: 90, y: 290 },\n size: { width: 180, height: 130 },\n shapeId: 'triangle-basic',\n },\n {\n id: 'shape-pentagon',\n position: { x: 360, y: 280 },\n size: { width: 170, height: 150 },\n shapeId: 'pentagon-basic',\n },\n {\n id: 'shape-hexagon',\n position: { x: 620, y: 290 },\n size: { width: 200, height: 130 },\n shapeId: 'hexagon-basic',\n },\n ],\n ports: [],\n links: [],\n texts: [\n { id: 'shape-rect-label', content: 'Rectangle', position: { x: 12, y: -12 }, ownerId: 'shape-rect' },\n { id: 'shape-circle-label', content: 'Circle', position: { x: 12, y: -12 }, ownerId: 'shape-circle' },\n { id: 'shape-ellipse-label', content: 'Ellipse / Oval', position: { x: 12, y: -12 }, ownerId: 'shape-ellipse' },\n { id: 'shape-diamond-label', content: 'Diamond', position: { x: 12, y: -12 }, ownerId: 'shape-diamond' },\n { id: 'shape-triangle-label', content: 'Triangle', position: { x: 12, y: -12 }, ownerId: 'shape-triangle' },\n { id: 'shape-pentagon-label', content: 'Pentagon', position: { x: 12, y: -12 }, ownerId: 'shape-pentagon' },\n { id: 'shape-hexagon-label', content: 'Hexagon', position: { x: 12, y: -12 }, ownerId: 'shape-hexagon' },\n ],\n});\n\r\nexport const shapeGalleryDemoConfig: DemoConfig = ({\r\n id: 'shape-gallery',\n title: 'Custom Shapes Gallery',\n description: 'Compare circle vs ellipse plus baseline and polygonal shapes (rect, diamond, triangle, pentagon, hexagon).',\n createState: createShapeGalleryState,\r\n elementShapes: customGalleryShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'rect-basic',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createSvgPathDemoState = (): DiagramState => ({\n elements: [\n {\n id: 'svg-host',\n position: { x: 260, y: 190 },\n size: { width: 320, height: 220 },\n shapeId: 'default',\n },\n {\n id: 'svg-peer',\n position: { x: 680, y: 230 },\n size: { width: 220, height: 140 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'svg-host-port',\n elementId: 'svg-host',\n position: { x: 0, y: 110 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'svg-peer-port',\n elementId: 'svg-peer',\n position: { x: 0, y: 70 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n links: [],\n texts: [\n {\n id: 'svg-path-tip',\n content: 'Use presets (crow-foot, optional, mandatory) to insert relationship glyph ports quickly.',\n position: { x: 120, y: 100 },\n },\n {\n id: 'svg-host-label',\n content: 'SVG Port Host',\n position: { x: 12, y: -14 },\n ownerId: 'svg-host',\n },\n {\n id: 'svg-peer-label',\n content: 'Link Target Host',\n position: { x: 12, y: -14 },\n ownerId: 'svg-peer',\n },\n ],\n});\n\nexport const svgPathDemoConfig: DemoConfig = ({\n id: 'svg-path',\n title: 'SVG Glyph Ports',\n description:\n 'Paste custom paths or use uncommon ERD-style presets (including crow-foot) with manual or border-normal orientation.',\n createState: createSvgPathDemoState,\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState, SimpleShape } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { basePortShapes } from './shared';\n\nconst roundedRectShapes: SimpleShape[] = [\n {\n id: 'rounded-rect-r0',\n kind: 'rect',\n style: { cornerRadius: 0, fill: '#eef5ff', stroke: '#2c5aa0', strokeWidth: 2 },\n },\n {\n id: 'rounded-rect-r10',\n kind: 'rect',\n style: { cornerRadius: 10, fill: '#edf9f1', stroke: '#2b7a45', strokeWidth: 2 },\n },\n {\n id: 'rounded-rect-r24',\n kind: 'rect',\n style: { cornerRadius: 24, fill: '#fff5e8', stroke: '#9c5b17', strokeWidth: 2 },\n },\n {\n id: 'rounded-rect-r42',\n kind: 'rect',\n style: { cornerRadius: 42, fill: '#fff0f2', stroke: '#a03e50', strokeWidth: 2 },\n },\n];\n\nconst baseSizes: Record<string, { width: number; height: number }> = {\n 'rounded-rect-0': { width: 180, height: 100 },\n 'rounded-rect-10': { width: 180, height: 100 },\n 'rounded-rect-24': { width: 180, height: 100 },\n 'rounded-rect-42': { width: 180, height: 100 },\n};\n\nconst wideSizes: Record<string, { width: number; height: number }> = {\n 'rounded-rect-0': { width: 240, height: 120 },\n 'rounded-rect-10': { width: 240, height: 120 },\n 'rounded-rect-24': { width: 240, height: 120 },\n 'rounded-rect-42': { width: 240, height: 120 },\n};\n\nconst createRoundedRectRadiusState = (): DiagramState => ({\n elements: [\n { id: 'rounded-rect-0', position: { x: 80, y: 140 }, size: { width: 180, height: 100 }, shapeId: 'rounded-rect-r0' },\n { id: 'rounded-rect-10', position: { x: 320, y: 140 }, size: { width: 180, height: 100 }, shapeId: 'rounded-rect-r10' },\n { id: 'rounded-rect-24', position: { x: 560, y: 140 }, size: { width: 180, height: 100 }, shapeId: 'rounded-rect-r24' },\n { id: 'rounded-rect-42', position: { x: 800, y: 140 }, size: { width: 180, height: 100 }, shapeId: 'rounded-rect-r42' },\n ],\n ports: [\n { id: 'rounded-port-0', elementId: 'rounded-rect-0', position: { x: 180, y: 50 }, moveMode: 'border', anchorCenter: true },\n { id: 'rounded-port-10', elementId: 'rounded-rect-10', position: { x: 180, y: 50 }, moveMode: 'border', anchorCenter: true },\n { id: 'rounded-port-24', elementId: 'rounded-rect-24', position: { x: 180, y: 50 }, moveMode: 'border', anchorCenter: true },\n { id: 'rounded-port-42', elementId: 'rounded-rect-42', position: { x: 180, y: 50 }, moveMode: 'border', anchorCenter: true },\n ],\n links: [\n { id: 'rounded-link-1', sourcePortId: 'rounded-port-0', targetPortId: 'rounded-port-10', points: [] },\n { id: 'rounded-link-2', sourcePortId: 'rounded-port-10', targetPortId: 'rounded-port-24', points: [] },\n { id: 'rounded-link-3', sourcePortId: 'rounded-port-24', targetPortId: 'rounded-port-42', points: [] },\n ],\n texts: [\n { id: 'rounded-label-0', content: 'radius 0', position: { x: 10, y: -14 }, ownerId: 'rounded-rect-0' },\n { id: 'rounded-label-10', content: 'radius 10', position: { x: 10, y: -14 }, ownerId: 'rounded-rect-10' },\n { id: 'rounded-label-24', content: 'radius 24', position: { x: 10, y: -14 }, ownerId: 'rounded-rect-24' },\n { id: 'rounded-label-42', content: 'radius 42', position: { x: 10, y: -14 }, ownerId: 'rounded-rect-42' },\n ],\n});\n\nexport const roundedRectRadiusDemoConfig: DemoConfig = {\n id: 'rounded-rect-radius',\n title: 'Rounded Rect Radius',\n description: 'Compare rectangle corner radii and verify border ports stay attached while resizing variants.',\n createState: createRoundedRectRadiusState,\n elementShapes: roundedRectShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'rounded-rect-r10',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'expand-rounded-rects',\n label: 'Expand all',\n run: (editor) => {\n Object.entries(wideSizes).forEach(([elementId, size]) => editor.resizeElement(elementId, size.width, size.height));\n },\n },\n {\n id: 'reset-rounded-rects',\n label: 'Reset sizes',\n run: (editor) => {\n Object.entries(baseSizes).forEach(([elementId, size]) => editor.resizeElement(elementId, size.width, size.height));\n },\n },\n ],\n};\n","import type { DiagramState, SimpleShape } from '../../api';\nimport { createId } from '../../utils/ids';\nimport type { DemoConfig } from '../types';\nimport { basePortShapes } from './shared';\n\nconst baseRectRotation = 18;\nconst baseEllipseRotation = 14;\nconst baseDiamondRotation = -20;\n\nconst rotatedCreationShapes: SimpleShape[] = [\n {\n id: 'rot-rect-base',\n kind: 'rect',\n style: {\n cornerRadius: 12,\n fill: '#e9f5ff',\n stroke: '#1e5f97',\n strokeWidth: 2,\n rotation: baseRectRotation,\n },\n },\n {\n id: 'rot-ellipse-base',\n kind: 'ellipse',\n style: {\n fill: '#eefbe9',\n stroke: '#2f7a3d',\n strokeWidth: 2,\n rotation: baseEllipseRotation,\n },\n },\n {\n id: 'rot-diamond-base',\n kind: 'diamond',\n style: {\n fill: '#fff3e3',\n stroke: '#a35e14',\n strokeWidth: 2,\n rotation: baseDiamondRotation,\n },\n },\n];\n\nconst createRotatedCreationState = (): DiagramState => ({\n elements: [\n {\n id: 'rot-seed-rect',\n position: { x: 180, y: 120 },\n size: { width: 180, height: 110 },\n shapeId: 'rot-rect-base',\n style: { rotation: 20 },\n },\n {\n id: 'rot-seed-ellipse',\n position: { x: 360, y: 120 },\n size: { width: 190, height: 110 },\n shapeId: 'rot-ellipse-base',\n style: { rotation: -16 },\n },\n {\n id: 'rot-seed-diamond',\n position: { x: 620, y: 120 },\n size: { width: 170, height: 120 },\n shapeId: 'rot-diamond-base',\n style: { rotation: -12 },\n },\n ],\n ports: [],\n links: [],\n texts: [\n {\n id: 'rot-seed-rect-label',\n content: 'Seed rect: base 18 + instance 20',\n ownerId: 'rot-seed-rect',\n position: { x: 10, y: -14 },\n },\n {\n id: 'rot-seed-ellipse-label',\n content: 'Seed ellipse: base 14 + instance -16',\n ownerId: 'rot-seed-ellipse',\n position: { x: 10, y: -14 },\n },\n {\n id: 'rot-seed-diamond-label',\n content: 'Seed diamond: base -20 + instance -12',\n ownerId: 'rot-seed-diamond',\n position: { x: 10, y: -14 },\n },\n {\n id: 'rot-demo-tip',\n content: 'Verify alignment: select each rotated seed shape, drag-resize it, then reselect to confirm handle persistence.',\n position: { x: 120, y: 70 },\n },\n ],\n});\n\nexport const rotatedCreationDemoConfig: DemoConfig = {\n id: 'rotated-shape-creation',\n title: 'Rotated Shape Creation',\n description: 'Validate class-based rotated rectangle/ellipse/polygon shapes and selection-resize alignment persistence.',\n createState: createRotatedCreationState,\n elementShapes: rotatedCreationShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'rot-rect-base',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'add-rotated-rect',\n label: 'Create rotated rect',\n run: (editor, _state, _demo, helpers) => {\n const offset = helpers.nextOffset();\n const id = `rot-rect-${createId()}`;\n editor.addElement({\n id,\n position: { x: 160 + offset, y: 280 + offset },\n size: { width: 180, height: 110 },\n shapeId: 'rot-rect-base',\n style: { rotation: 24 },\n });\n editor.addText({\n id: `rot-label-${createId()}`,\n content: 'base 18 + instance 24',\n ownerId: id,\n position: { x: 10, y: -14 },\n });\n editor.setSelection([id]);\n },\n },\n {\n id: 'add-rotated-diamond',\n label: 'Create rotated diamond',\n run: (editor, _state, _demo, helpers) => {\n const offset = helpers.nextOffset();\n const id = `rot-diamond-${createId()}`;\n editor.addElement({\n id,\n position: { x: 460 + offset, y: 300 + offset },\n size: { width: 170, height: 120 },\n shapeId: 'rot-diamond-base',\n style: { rotation: -18 },\n });\n editor.addText({\n id: `rot-label-${createId()}`,\n content: 'base -20 + instance -18',\n ownerId: id,\n position: { x: 10, y: -14 },\n });\n editor.setSelection([id]);\n },\n },\n {\n id: 'focus-rotated-rect',\n label: 'Focus rotated rect',\n run: (editor) => {\n editor.setSelection(['rot-seed-rect']);\n },\n },\n {\n id: 'focus-rotated-ellipse',\n label: 'Focus rotated ellipse',\n run: (editor) => {\n editor.setSelection(['rot-seed-ellipse']);\n },\n },\n {\n id: 'focus-rotated-diamond',\n label: 'Focus rotated diamond',\n run: (editor) => {\n editor.setSelection(['rot-seed-diamond']);\n },\n },\n {\n id: 'verify-rotated-resize-persistence',\n label: 'Verify rotated resize persistence',\n run: (editor) => {\n editor.setSelection(['rot-seed-rect']);\n editor.resizeElement('rot-seed-rect', 210, 130);\n editor.setSelection(['rot-seed-ellipse']);\n editor.resizeElement('rot-seed-ellipse', 220, 130);\n editor.setSelection(['rot-seed-diamond']);\n editor.resizeElement('rot-seed-diamond', 190, 140);\n },\n },\n ],\n};\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createMultiLevelTreeState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'tree-root',\r\n position: { x: 120, y: 120 },\r\n size: { width: 300, height: 220 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'tree-child-1',\r\n position: { x: 40, y: 40 },\r\n size: { width: 200, height: 140 },\r\n shapeId: 'default',\r\n parentId: 'tree-root',\r\n },\r\n {\r\n id: 'tree-child-2',\r\n position: { x: 30, y: 30 },\r\n size: { width: 150, height: 100 },\r\n shapeId: 'default',\r\n parentId: 'tree-child-1',\r\n },\r\n {\r\n id: 'tree-child-3',\r\n position: { x: 20, y: 20 },\r\n size: { width: 110, height: 70 },\r\n shapeId: 'default',\r\n parentId: 'tree-child-2',\r\n },\r\n {\r\n id: 'tree-root-2',\r\n position: { x: 520, y: 140 },\r\n size: { width: 260, height: 200 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'tree2-child-1',\r\n position: { x: 30, y: 40 },\r\n size: { width: 170, height: 120 },\r\n shapeId: 'default',\r\n parentId: 'tree-root-2',\r\n },\r\n {\r\n id: 'tree2-child-2',\r\n position: { x: 20, y: 20 },\r\n size: { width: 120, height: 80 },\r\n shapeId: 'default',\r\n parentId: 'tree2-child-1',\r\n },\r\n ],\r\n ports: [\r\n {\r\n id: 'tree-root-port',\r\n elementId: 'tree-root',\r\n position: { x: 150, y: 0 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n {\r\n id: 'tree-child-3-port',\r\n elementId: 'tree-child-3',\r\n position: { x: 55, y: 35 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n {\r\n id: 'tree-root-2-port',\r\n elementId: 'tree-root-2',\r\n position: { x: 130, y: 200 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n {\r\n id: 'tree2-child-2-port',\r\n elementId: 'tree2-child-2',\r\n position: { x: 60, y: 40 },\r\n shapeId: 'port-circle',\r\n anchorCenter: true,\r\n },\r\n ],\r\n links: [\r\n {\r\n id: 'tree-link-1',\r\n sourcePortId: 'tree-root-port',\r\n targetPortId: 'tree-root-2-port',\r\n points: [],\r\n },\r\n {\r\n id: 'tree-link-2',\r\n sourcePortId: 'tree-child-3-port',\r\n targetPortId: 'tree2-child-2-port',\r\n points: [],\r\n },\r\n ],\r\n texts: [\r\n { id: 'tree-root-label', content: 'Root A', position: { x: 12, y: -16 }, ownerId: 'tree-root' },\r\n { id: 'tree-child-1-label', content: 'Level 1', position: { x: 12, y: -16 }, ownerId: 'tree-child-1' },\r\n { id: 'tree-child-2-label', content: 'Level 2', position: { x: 12, y: -16 }, ownerId: 'tree-child-2' },\r\n { id: 'tree-child-3-label', content: 'Level 3', position: { x: 12, y: -16 }, ownerId: 'tree-child-3' },\r\n { id: 'tree-root-2-label', content: 'Root B', position: { x: 12, y: -16 }, ownerId: 'tree-root-2' },\r\n { id: 'tree2-child-1-label', content: 'Level 1', position: { x: 12, y: -16 }, ownerId: 'tree2-child-1' },\r\n { id: 'tree2-child-2-label', content: 'Level 2', position: { x: 12, y: -16 }, ownerId: 'tree2-child-2' },\r\n ],\r\n});\r\n\r\nexport const multiLevelTreeDemoConfig: DemoConfig = ({\r\n id: 'multi-level-tree',\r\n title: 'Multi-level Tree',\r\n description: 'Three-level and two-level nested trees with default links.',\r\n createState: createMultiLevelTreeState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createMultipleElementsState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'multi-1',\r\n position: { x: 120, y: 120 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'multi-2',\r\n position: { x: 420, y: 160 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'multi-3',\r\n position: { x: 260, y: 360 },\r\n size: { width: 240, height: 160 },\r\n shapeId: 'default',\r\n },\r\n ],\r\n ports: [\r\n { id: 'm1p1', elementId: 'multi-1', position: { x: 30, y: 30 }, shapeId: 'port-circle', anchorCenter: true },\r\n { id: 'm2p1', elementId: 'multi-2', position: { x: 40, y: 30 }, shapeId: 'port-circle', anchorCenter: true },\r\n { id: 'm3p1', elementId: 'multi-3', position: { x: 40, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\r\n ],\r\n links: [\r\n {\r\n id: 'link-12',\r\n sourcePortId: 'm1p1',\r\n targetPortId: 'm2p1',\r\n points: [],\r\n },\r\n {\r\n id: 'link-23',\r\n sourcePortId: 'm2p1',\r\n targetPortId: 'm3p1',\r\n points: [],\r\n },\r\n ],\r\n texts: [\r\n { id: 'm1-label', content: 'Multi 1', position: { x: 12, y: -12 }, ownerId: 'multi-1' },\r\n { id: 'm2-label', content: 'Multi 2', position: { x: 12, y: -12 }, ownerId: 'multi-2' },\r\n { id: 'm3-label', content: 'Multi 3', position: { x: 12, y: -12 }, ownerId: 'multi-3' },\r\n ],\r\n});\r\n\r\nexport const multipleElementsDemoConfig: DemoConfig = ({\r\n id: 'multiple',\r\n title: 'Multiple Elements + Links',\r\n description: 'Three elements with ports, links, and labels.',\r\n createState: createMultipleElementsState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createPortConstraintState = (): DiagramState => ({\n elements: [\n {\n id: 'anchor-rect-host',\n position: { x: 80, y: 120 },\n size: { width: 220, height: 150 },\n shapeId: 'anchor-rect',\n portMovement: { moveMode: 'anchors', anchorConstraint: { preset: 'vertices' } },\n },\n {\n id: 'anchor-triangle-host',\n position: { x: 380, y: 100 },\n size: { width: 220, height: 170 },\n shapeId: 'anchor-triangle',\n portMovement: { moveMode: 'anchors', anchorConstraint: { preset: 'vertices' } },\n },\n {\n id: 'anchor-ellipse-host',\n position: { x: 700, y: 120 },\n size: { width: 220, height: 150 },\n shapeId: 'anchor-ellipse',\n portMovement: { moveMode: 'anchors', anchorConstraint: { preset: 'cardinal' } },\n },\n {\n id: 'anchor-peer-rect',\n position: { x: 120, y: 390 },\n size: { width: 180, height: 100 },\n shapeId: 'panel',\n },\n {\n id: 'anchor-peer-triangle',\n position: { x: 420, y: 390 },\n size: { width: 180, height: 100 },\n shapeId: 'panel',\n },\n {\n id: 'anchor-peer-ellipse',\n position: { x: 740, y: 390 },\n size: { width: 180, height: 100 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'anchor-rect-port',\n elementId: 'anchor-rect-host',\n position: { x: 220, y: 0 },\n shapeId: 'port-circle',\n anchorCenter: true,\n currentAnchorId: 'top-right',\n },\n {\n id: 'anchor-triangle-port',\n elementId: 'anchor-triangle-host',\n position: { x: 205.2628, y: 127.5 },\n shapeId: 'port-circle',\n anchorCenter: true,\n currentAnchorId: 'v1',\n },\n {\n id: 'anchor-ellipse-port',\n elementId: 'anchor-ellipse-host',\n position: { x: 220, y: 75 },\n shapeId: 'port-circle',\n anchorCenter: true,\n currentAnchorId: 'right',\n },\n {\n id: 'anchor-peer-rect-port',\n elementId: 'anchor-peer-rect',\n position: { x: 0, y: 50 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'anchor-peer-triangle-port',\n elementId: 'anchor-peer-triangle',\n position: { x: 0, y: 50 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'anchor-peer-ellipse-port',\n elementId: 'anchor-peer-ellipse',\n position: { x: 0, y: 50 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n links: [\n { id: 'anchor-link-rect', sourcePortId: 'anchor-rect-port', targetPortId: 'anchor-peer-rect-port', points: [] },\n { id: 'anchor-link-triangle', sourcePortId: 'anchor-triangle-port', targetPortId: 'anchor-peer-triangle-port', points: [] },\n { id: 'anchor-link-ellipse', sourcePortId: 'anchor-ellipse-port', targetPortId: 'anchor-peer-ellipse-port', points: [] },\n ],\n texts: [\n {\n id: 'anchor-instructions',\n content: 'Specific points only: drag highlighted ports. Rect + triangle snap to vertices; ellipse snaps to top/right/bottom/left.',\n position: { x: 80, y: 44 },\n },\n { id: 'anchor-rect-label', content: 'Rectangle: corners only', position: { x: 8, y: -20 }, ownerId: 'anchor-rect-host' },\n { id: 'anchor-triangle-label', content: 'Triangle: peaks only', position: { x: 8, y: -20 }, ownerId: 'anchor-triangle-host' },\n { id: 'anchor-ellipse-label', content: 'Ellipse: cardinal anchors', position: { x: 8, y: -20 }, ownerId: 'anchor-ellipse-host' },\n { id: 'anchor-port-rect-label', content: 'Snap me', position: { x: 8, y: -18 }, ownerId: 'anchor-rect-port' },\n { id: 'anchor-port-triangle-label', content: 'Snap me', position: { x: 8, y: -18 }, ownerId: 'anchor-triangle-port' },\n { id: 'anchor-port-ellipse-label', content: 'Snap me', position: { x: 8, y: -18 }, ownerId: 'anchor-ellipse-port' },\n ],\n});\n\nexport const portConstraintsDemoConfig: DemoConfig = ({\n id: 'port-constraints',\n title: 'Port Discrete Anchors',\n description: 'Element-level anchor policy: rectangle/polygon vertices and ellipse cardinal points only.',\n createState: createPortConstraintState,\n elementShapes: [\n ...baseElementShapes,\n {\n id: 'anchor-rect',\n kind: 'rect',\n style: {\n cornerRadius: 10,\n fill: '#e6f2ff',\n stroke: '#1f4d99',\n strokeWidth: 2,\n },\n },\n {\n id: 'anchor-triangle',\n kind: 'triangle',\n style: {\n fill: '#f4f1ff',\n stroke: '#5b3cc4',\n strokeWidth: 2,\n },\n },\n {\n id: 'anchor-ellipse',\n kind: 'ellipse',\n style: {\n fill: '#e8f8ff',\n stroke: '#1e6b8f',\n strokeWidth: 2,\n },\n },\n ],\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'resize-anchor-hosts',\n label: 'Resize hosts (anchor persistence)',\n run: (editor, state) => {\n const rectHost = state.elements.find((element) => element.id === 'anchor-rect-host');\n const expanded = (rectHost?.size.width ?? 0) > 220;\n if (expanded) {\n editor.resizeElement('anchor-rect-host', 220, 150);\n editor.resizeElement('anchor-triangle-host', 220, 170);\n editor.resizeElement('anchor-ellipse-host', 220, 150);\n return;\n }\n editor.resizeElement('anchor-rect-host', 280, 190);\n editor.resizeElement('anchor-triangle-host', 280, 210);\n editor.resizeElement('anchor-ellipse-host', 280, 190);\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createPortBorderState = (): DiagramState => ({\n elements: [\n {\n id: 'border-host-orient-on',\n position: { x: 120, y: 150 },\n size: { width: 260, height: 180 },\n shapeId: 'default',\n },\n {\n id: 'border-host-orient-off',\n position: { x: 460, y: 150 },\n size: { width: 260, height: 180 },\n shapeId: 'default',\n },\n ],\n ports: [\n {\n id: 'border-port-orient-on',\n elementId: 'border-host-orient-on',\n position: { x: 130, y: 0 },\n shapeId: 'port-triangle',\n moveMode: 'border',\n anchorCenter: true,\n orientToHostBorder: true,\n },\n {\n id: 'border-port-orient-off',\n elementId: 'border-host-orient-off',\n position: { x: 130, y: 0 },\n shapeId: 'port-triangle',\n moveMode: 'border',\n anchorCenter: true,\n orientToHostBorder: false,\n },\n ],\n links: [\n {\n id: 'border-link',\n sourcePortId: 'border-port-orient-on',\n targetPortId: 'border-port-orient-off',\n points: [],\n },\n ],\n texts: [\n {\n id: 'border-host-orient-on-label',\n content: 'Orientation ON',\n position: { x: 12, y: -14 },\n ownerId: 'border-host-orient-on',\n },\n {\n id: 'border-host-orient-off-label',\n content: 'Orientation OFF',\n position: { x: 12, y: -14 },\n ownerId: 'border-host-orient-off',\n },\n {\n id: 'border-port-orient-on-label',\n content: 'Drag around border',\n position: { x: 8, y: -18 },\n ownerId: 'border-port-orient-on',\n },\n {\n id: 'border-port-orient-off-label',\n content: 'Drag around border',\n position: { x: 8, y: -18 },\n ownerId: 'border-port-orient-off',\n },\n ],\n});\n\nexport const portBorderDemoConfig: DemoConfig = ({\n id: 'port-border',\n title: 'Port Border Orientation',\n description: 'Directional ports rotate toward host interior by default (left: on, right: opt-out).',\n createState: createPortBorderState,\n elementShapes: baseElementShapes,\n portShapes: [\n ...basePortShapes,\n {\n id: 'port-triangle',\n kind: 'triangle',\n style: {\n fill: '#ffffff',\n stroke: '#1f4d99',\n strokeWidth: 2,\n name: 'port',\n },\n },\n ],\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-triangle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createChildConstraintState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'parent-box',\r\n position: { x: 120, y: 120 },\r\n size: { width: 320, height: 220 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'child-inside',\r\n position: { x: 30, y: 40 },\r\n size: { width: 120, height: 80 },\r\n shapeId: 'default',\r\n parentId: 'parent-box',\r\n moveMode: 'inside',\r\n },\r\n {\r\n id: 'child-border',\r\n position: { x: 160, y: 0 },\r\n size: { width: 120, height: 80 },\r\n shapeId: 'panel',\r\n parentId: 'parent-box',\r\n moveMode: 'border',\r\n anchorCenter: true,\r\n },\r\n ],\r\n ports: [],\r\n links: [],\r\n texts: [\r\n { id: 'parent-label', content: 'Parent', position: { x: 12, y: -16 }, ownerId: 'parent-box' },\r\n { id: 'child-inside-label', content: 'Inside', position: { x: 8, y: -14 }, ownerId: 'child-inside' },\r\n { id: 'child-border-label', content: 'Border (center)', position: { x: 8, y: -14 }, ownerId: 'child-border' },\r\n ],\r\n});\r\n\r\nexport const childConstraintsDemoConfig: DemoConfig = ({\r\n id: 'child-constraints',\r\n title: 'Child Movement Constraints',\r\n description: 'Child elements constrained inside or along the parent border (anchor-center on border child).',\r\n createState: createChildConstraintState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [\r\n {\r\n id: 'nudge-border-child',\r\n label: 'Nudge border child',\r\n run: (editor) => {\r\n editor.moveElementTo('child-border', 260, 220);\r\n },\r\n },\r\n {\r\n id: 'nudge-inside-child',\r\n label: 'Nudge inside child',\r\n run: (editor) => {\r\n editor.moveElementTo('child-inside', 60, 140);\r\n },\r\n },\r\n ],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes, gridStageStyle } from './shared';\r\n\r\nconst createGridOverlayState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'grid-a',\r\n position: { x: 140, y: 120 },\r\n size: { width: 200, height: 120 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'grid-b',\r\n position: { x: 420, y: 220 },\r\n size: { width: 220, height: 140 },\r\n shapeId: 'panel',\r\n },\r\n ],\r\n ports: [\r\n { id: 'grid-a-port', elementId: 'grid-a', position: { x: 40, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\r\n { id: 'grid-b-port', elementId: 'grid-b', position: { x: 50, y: 50 }, shapeId: 'port-circle', anchorCenter: true },\r\n ],\r\n links: [\r\n {\r\n id: 'grid-link',\r\n sourcePortId: 'grid-a-port',\r\n targetPortId: 'grid-b-port',\r\n points: [],\r\n },\r\n ],\r\n texts: [\r\n { id: 'grid-a-label', content: 'Grid A', position: { x: 12, y: -12 }, ownerId: 'grid-a' },\r\n { id: 'grid-b-label', content: 'Grid B', position: { x: 12, y: -12 }, ownerId: 'grid-b' },\r\n ],\r\n});\r\n\r\nexport const gridOverlayDemoConfig: DemoConfig = ({\r\n id: 'grid-overlay',\r\n title: 'Grid Overlay',\r\n description: 'Grid background with snapping enabled by default.',\r\n createState: createGridOverlayState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n snapDefault: true,\r\n stageStyle: gridStageStyle,\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes, orthogonalRouter } from './shared';\r\n\r\nconst createRoutingDemoState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'route-source',\r\n position: { x: 120, y: 160 },\r\n size: { width: 200, height: 120 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'route-target',\r\n position: { x: 560, y: 220 },\r\n size: { width: 200, height: 120 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'route-obstacle',\r\n position: { x: 360, y: 320 },\r\n size: { width: 180, height: 100 },\r\n shapeId: 'default',\r\n },\r\n ],\r\n ports: [\r\n { id: 'route-source-port', elementId: 'route-source', position: { x: 40, y: 50 }, shapeId: 'port-circle', anchorCenter: true },\r\n { id: 'route-target-port', elementId: 'route-target', position: { x: 50, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\r\n ],\r\n links: [\r\n {\r\n id: 'route-link',\r\n sourcePortId: 'route-source-port',\r\n targetPortId: 'route-target-port',\r\n points: [],\r\n routing: 'auto',\r\n },\r\n ],\r\n texts: [\r\n { id: 'route-source-label', content: 'Source', position: { x: 12, y: -12 }, ownerId: 'route-source' },\r\n { id: 'route-target-label', content: 'Target', position: { x: 12, y: -12 }, ownerId: 'route-target' },\r\n { id: 'route-obstacle-label', content: 'Obstacle', position: { x: 12, y: -12 }, ownerId: 'route-obstacle' },\r\n ],\r\n});\r\n\r\nexport const routingDemoConfig: DemoConfig = ({\r\n id: 'routing-demo',\r\n title: 'Routing Demo',\r\n description: 'Auto routing uses an orthogonal router. Toggle routing to compare.',\r\n createState: createRoutingDemoState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n router: orthogonalRouter,\r\n actions: [],\r\n});\r\n","import type { DiagramState, LinkData } from '../../api';\r\nimport type { DemoAction, DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst obstacleRoutingLinks: LinkData[] = [\r\n {\r\n id: 'block-link',\r\n sourcePortId: 'block-source-port',\r\n targetPortId: 'block-target-port',\r\n points: [],\r\n routing: 'auto',\r\n },\r\n {\r\n id: 'shared-sibling-link',\r\n sourcePortId: 'shared-child-a-port',\r\n targetPortId: 'shared-child-b-port',\r\n points: [],\r\n routing: 'auto',\r\n },\r\n {\r\n id: 'parent-child-link',\r\n sourcePortId: 'parent-host-port',\r\n targetPortId: 'edge-child-port',\r\n points: [],\r\n routing: 'auto',\r\n },\r\n {\r\n id: 'grandchild-link',\r\n sourcePortId: 'grandchild-a-port',\r\n targetPortId: 'grandchild-b-port',\r\n points: [],\r\n routing: 'auto',\r\n },\r\n];\r\n\r\nconst createObstacleRoutingState = (): DiagramState => ({\r\n elements: [\r\n {\r\n id: 'block-source',\r\n position: { x: 60, y: 40 },\r\n size: { width: 140, height: 90 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'block-target',\r\n position: { x: 380, y: 40 },\r\n size: { width: 140, height: 90 },\r\n shapeId: 'panel',\r\n },\r\n {\r\n id: 'block-obstacle',\r\n position: { x: 250, y: 30 },\r\n size: { width: 80, height: 110 },\r\n shapeId: 'default',\r\n },\r\n {\r\n id: 'shared-parent',\r\n position: { x: 40, y: 180 },\r\n size: { width: 420, height: 220 },\r\n shapeId: 'panel',\r\n style: { fill: '#fafafa' },\r\n },\r\n {\r\n id: 'shared-child-a',\r\n position: { x: 40, y: 40 },\r\n size: { width: 140, height: 90 },\r\n shapeId: 'default',\r\n parentId: 'shared-parent',\r\n },\r\n {\r\n id: 'shared-child-b',\r\n position: { x: 220, y: 40 },\r\n size: { width: 140, height: 90 },\r\n shapeId: 'default',\r\n parentId: 'shared-parent',\r\n },\r\n {\r\n id: 'parent-host',\r\n position: { x: 500, y: 180 },\r\n size: { width: 320, height: 220 },\r\n shapeId: 'panel',\r\n style: { fill: '#fafafa' },\r\n },\r\n {\r\n id: 'edge-child',\r\n position: { x: 40, y: 60 },\r\n size: { width: 160, height: 90 },\r\n shapeId: 'default',\r\n parentId: 'parent-host',\r\n },\r\n {\r\n id: 'grandparent',\r\n position: { x: 40, y: 380 },\r\n size: { width: 780, height: 160 },\r\n shapeId: 'panel',\r\n style: { fill: '#fafafa' },\r\n },\r\n {\r\n id: 'mid-parent-a',\r\n position: { x: 40, y: 30 },\r\n size: { width: 300, height: 100 },\r\n shapeId: 'panel',\r\n parentId: 'grandparent',\r\n },\r\n {\r\n id: 'mid-parent-b',\r\n position: { x: 420, y: 30 },\r\n size: { width: 300, height: 100 },\r\n shapeId: 'panel',\r\n parentId: 'grandparent',\r\n },\r\n {\r\n id: 'grandchild-a',\r\n position: { x: 40, y: 20 },\r\n size: { width: 120, height: 60 },\r\n shapeId: 'default',\r\n parentId: 'mid-parent-a',\r\n },\r\n {\r\n id: 'grandchild-b',\r\n position: { x: 40, y: 20 },\r\n size: { width: 120, height: 60 },\r\n shapeId: 'default',\r\n parentId: 'mid-parent-b',\r\n },\r\n ],\r\n ports: [\r\n { id: 'block-source-port', elementId: 'block-source', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\r\n { id: 'block-target-port', elementId: 'block-target', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\r\n { id: 'shared-child-a-port', elementId: 'shared-child-a', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\r\n { id: 'shared-child-b-port', elementId: 'shared-child-b', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\r\n { id: 'parent-host-port', elementId: 'parent-host', position: { x: 250, y: 110 }, shapeId: 'port-circle' },\r\n { id: 'edge-child-port', elementId: 'edge-child', position: { x: 0, y: 45 }, shapeId: 'port-circle' },\r\n { id: 'grandchild-a-port', elementId: 'grandchild-a', position: { x: 60, y: 30 }, shapeId: 'port-circle' },\r\n { id: 'grandchild-b-port', elementId: 'grandchild-b', position: { x: 60, y: 30 }, shapeId: 'port-circle' },\r\n ],\r\n links: obstacleRoutingLinks,\r\n texts: [\r\n { id: 'block-label', content: 'Blocking obstacle', position: { x: 60, y: 16 } },\r\n { id: 'shared-label', content: 'Shared parent (siblings)', position: { x: 40, y: 158 } },\r\n { id: 'parent-label', content: 'Parent-child (stay inside)', position: { x: 500, y: 158 } },\r\n { id: 'grand-label', content: 'Grandchildren (shared ancestors)', position: { x: 40, y: 358 } },\r\n ],\r\n});\r\n\r\nconst addLinksAction: DemoAction = {\r\n id: 'add-links',\r\n label: 'Add Links (Auto)',\r\n run: (editor, state) => {\r\n const existing = new Set(state.links.map((link) => link.id));\r\n obstacleRoutingLinks.forEach((link) => {\r\n if (existing.has(link.id)) return;\r\n editor.addLink({ ...link });\r\n });\r\n },\r\n};\r\n\r\nconst rerouteAllAction: DemoAction = {\r\n id: 'reroute-links',\r\n label: 'Reroute All Links',\r\n run: (editor) => {\r\n editor.rerouteAllLinks();\r\n },\r\n};\r\n\r\nexport const obstacleRoutingDemoConfig: DemoConfig = ({\r\n id: 'obstacle-routing',\r\n title: 'Obstacle Routing',\r\n description: 'Auto routing avoids obstacles and respects ancestor/edge rules.',\r\n createState: createObstacleRoutingState,\r\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [addLinksAction, rerouteAllAction],\r\n});\r\n","import type { DiagramState } from '../../api';\r\nimport type { DemoConfig } from '../types';\r\nimport { baseElementShapes, basePortShapes } from './shared';\r\n\r\nconst createLinkBendHandlesState = (): DiagramState => ({\n elements: [\n {\n id: 'bend-source',\n position: { x: 120, y: 120 },\n size: { width: 180, height: 100 },\n shapeId: 'default',\n },\n {\n id: 'bend-target',\n position: { x: 420, y: 140 },\n size: { width: 220, height: 120 },\n shapeId: 'panel',\n },\n {\n id: 'corner-upper',\n position: { x: 120, y: 330 },\n size: { width: 200, height: 110 },\n shapeId: 'default',\n },\n {\n id: 'corner-lower',\n position: { x: 360, y: 510 },\n size: { width: 220, height: 120 },\n shapeId: 'panel',\n },\n {\n id: 'stacked-top',\n position: { x: 700, y: 300 },\n size: { width: 180, height: 100 },\n shapeId: 'default',\n },\n {\n id: 'stacked-bottom',\n position: { x: 700, y: 470 },\n size: { width: 180, height: 100 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'bend-source-port',\n elementId: 'bend-source',\n position: { x: 30, y: 50 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'bend-target-port',\n elementId: 'bend-target',\n position: { x: 40, y: 40 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'corner-source-port',\n elementId: 'corner-upper',\n position: { x: 200, y: 110 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'corner-target-port',\n elementId: 'corner-lower',\n position: { x: 0, y: 60 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'stacked-source-port',\n elementId: 'stacked-top',\n position: { x: 0, y: 100 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'stacked-target-port',\n elementId: 'stacked-bottom',\n position: { x: 180, y: 0 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n links: [\n {\n id: 'bend-link',\n sourcePortId: 'bend-source-port',\n targetPortId: 'bend-target-port',\n routing: 'manual',\n points: [\n { x: 150, y: 170 },\n { x: 300, y: 170 },\n { x: 300, y: 280 },\n { x: 460, y: 180 },\n ],\n },\n {\n id: 'corner-auto-link',\n sourcePortId: 'corner-source-port',\n targetPortId: 'corner-target-port',\n routing: 'auto',\n points: [],\n },\n {\n id: 'stacked-auto-link',\n sourcePortId: 'stacked-source-port',\n targetPortId: 'stacked-target-port',\n routing: 'auto',\n points: [],\n },\n ],\n texts: [\n { id: 'bend-source-label', content: 'Manual start', position: { x: 12, y: -12 }, ownerId: 'bend-source' },\n { id: 'bend-target-label', content: 'Manual end', position: { x: 12, y: -12 }, ownerId: 'bend-target' },\n { id: 'corner-upper-label', content: 'Corner source', position: { x: 12, y: -12 }, ownerId: 'corner-upper' },\n { id: 'corner-lower-label', content: 'Left-edge target', position: { x: 12, y: -12 }, ownerId: 'corner-lower' },\n { id: 'stacked-top-label', content: 'Stacked top', position: { x: 12, y: -12 }, ownerId: 'stacked-top' },\n { id: 'stacked-bottom-label', content: 'Stacked bottom', position: { x: 12, y: -12 }, ownerId: 'stacked-bottom' },\n { id: 'bend-tip', content: 'Select the manual link to drag bend handles. Auto links show corner edge-cases.', position: { x: 120, y: 70 } },\n ],\n});\n\r\nexport const linkBendHandlesDemoConfig: DemoConfig = ({\r\n id: 'link-bends',\n title: 'Link Bend Handles',\n description: 'Manual bend editing plus corner and stacked auto-routing edge cases.',\n createState: createLinkBendHandlesState,\n elementShapes: baseElementShapes,\r\n portShapes: basePortShapes,\r\n defaultElementShapeId: 'default',\r\n defaultPortShapeId: 'port-circle',\r\n actions: [],\r\n});\r\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createDeletionEventsState = (): DiagramState => ({\n elements: [\n {\n id: 'delete-source',\n position: { x: 120, y: 170 },\n size: { width: 220, height: 150 },\n shapeId: 'default',\n },\n {\n id: 'delete-target',\n position: { x: 520, y: 210 },\n size: { width: 220, height: 140 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'delete-source-link-port',\n elementId: 'delete-source',\n position: { x: 220, y: 75 },\n shapeId: 'port-circle',\n anchorCenter: true,\n moveMode: 'border',\n },\n {\n id: 'delete-source-free-port',\n elementId: 'delete-source',\n position: { x: 0, y: 75 },\n shapeId: 'port-dark',\n anchorCenter: true,\n moveMode: 'border',\n },\n {\n id: 'delete-target-link-port',\n elementId: 'delete-target',\n position: { x: 0, y: 70 },\n shapeId: 'port-circle',\n anchorCenter: true,\n moveMode: 'border',\n },\n ],\n links: [\n {\n id: 'delete-link',\n sourcePortId: 'delete-source-link-port',\n targetPortId: 'delete-target-link-port',\n points: [],\n },\n ],\n texts: [\n {\n id: 'delete-element-text',\n content: 'Element-owned text',\n position: { x: 12, y: -14 },\n ownerId: 'delete-source',\n },\n {\n id: 'delete-port-text',\n content: 'Port-owned text',\n position: { x: 8, y: -16 },\n ownerId: 'delete-source-free-port',\n },\n {\n id: 'delete-link-text',\n content: 'Link-owned text',\n position: { x: 10, y: -16 },\n ownerId: 'delete-link',\n },\n {\n id: 'delete-free-text',\n content: 'Standalone text (direct text delete)',\n position: { x: 120, y: 120 },\n },\n ],\n});\n\nexport const deletionEventsDemoConfig: DemoConfig = {\n id: 'deletion-events',\n title: 'Deletion Events',\n description: 'Inspect elementDeleted, portDeleted, linkDeleted, and textDeleted payloads for direct and cascade removals.',\n createState: createDeletionEventsState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n};\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { basePortShapes, customGalleryShapes } from './shared';\n\nconst resizeBaseSizes: Record<string, { width: number; height: number }> = {\n 'shape-border-rect': { width: 170, height: 120 },\n 'shape-border-circle': { width: 170, height: 170 },\n 'shape-border-ellipse': { width: 240, height: 130 },\n 'shape-border-hexagon': { width: 200, height: 130 },\n};\n\nconst resizeExpandedSizes: Record<string, { width: number; height: number }> = {\n 'shape-border-rect': { width: 250, height: 150 },\n 'shape-border-circle': { width: 210, height: 210 },\n 'shape-border-ellipse': { width: 300, height: 170 },\n 'shape-border-hexagon': { width: 260, height: 170 },\n};\n\nconst createShapeBorderMovementState = (): DiagramState => ({\n elements: [\n {\n id: 'shape-border-rect',\n position: { x: 60, y: 110 },\n size: { width: 170, height: 120 },\n shapeId: 'rect-basic',\n },\n {\n id: 'shape-border-circle',\n position: { x: 280, y: 100 },\n size: { width: 170, height: 170 },\n shapeId: 'circle-basic',\n },\n {\n id: 'shape-border-ellipse',\n position: { x: 500, y: 120 },\n size: { width: 240, height: 130 },\n shapeId: 'ellipse-basic',\n },\n {\n id: 'shape-border-hexagon',\n position: { x: 790, y: 120 },\n size: { width: 200, height: 130 },\n shapeId: 'hexagon-basic',\n },\n ],\n ports: [\n {\n id: 'shape-border-port-rect',\n elementId: 'shape-border-rect',\n position: { x: 85, y: 0 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'shape-border-port-circle',\n elementId: 'shape-border-circle',\n position: { x: 85, y: 0 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'shape-border-port-ellipse',\n elementId: 'shape-border-ellipse',\n position: { x: 120, y: 0 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'shape-border-port-hexagon',\n elementId: 'shape-border-hexagon',\n position: { x: 100, y: 0 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n links: [\n { id: 'shape-border-link-1', sourcePortId: 'shape-border-port-rect', targetPortId: 'shape-border-port-circle', points: [] },\n { id: 'shape-border-link-2', sourcePortId: 'shape-border-port-circle', targetPortId: 'shape-border-port-ellipse', points: [] },\n { id: 'shape-border-link-3', sourcePortId: 'shape-border-port-ellipse', targetPortId: 'shape-border-port-hexagon', points: [] },\n ],\n texts: [\n { id: 'shape-border-rect-label', content: 'Rect (baseline)', position: { x: 8, y: -14 }, ownerId: 'shape-border-rect' },\n { id: 'shape-border-circle-label', content: 'Circle', position: { x: 8, y: -14 }, ownerId: 'shape-border-circle' },\n { id: 'shape-border-ellipse-label', content: 'Ellipse / Oval', position: { x: 8, y: -14 }, ownerId: 'shape-border-ellipse' },\n { id: 'shape-border-hexagon-label', content: 'Hexagon', position: { x: 8, y: -14 }, ownerId: 'shape-border-hexagon' },\n { id: 'shape-border-port-rect-label', content: 'Drag', position: { x: 8, y: -16 }, ownerId: 'shape-border-port-rect' },\n { id: 'shape-border-port-circle-label', content: 'Drag', position: { x: 8, y: -16 }, ownerId: 'shape-border-port-circle' },\n { id: 'shape-border-port-ellipse-label', content: 'Drag', position: { x: 8, y: -16 }, ownerId: 'shape-border-port-ellipse' },\n { id: 'shape-border-port-hexagon-label', content: 'Drag', position: { x: 8, y: -16 }, ownerId: 'shape-border-port-hexagon' },\n ],\n});\n\nexport const shapeBorderMovementDemoConfig: DemoConfig = {\n id: 'shape-border-movement',\n title: 'Shape Border Port Movement',\n description: 'Resize hosts (manual handles or quick actions) to verify border ports stay attached and connected links track them.',\n createState: createShapeBorderMovementState,\n elementShapes: customGalleryShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'rect-basic',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'expand-hosts',\n label: 'Expand hosts',\n run: (editor) => {\n Object.entries(resizeExpandedSizes).forEach(([elementId, size]) => {\n editor.resizeElement(elementId, size.width, size.height);\n });\n },\n },\n {\n id: 'reset-host-sizes',\n label: 'Reset host sizes',\n run: (editor) => {\n Object.entries(resizeBaseSizes).forEach(([elementId, size]) => {\n editor.resizeElement(elementId, size.width, size.height);\n });\n },\n },\n ],\n};\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nexport const shapeHoverDemoIds = {\n drawer: 'hover-drawer',\n diamond: 'hover-diamond',\n target: 'hover-target-rect',\n ellipse: 'hover-ellipse-host',\n circle: 'hover-circle-host',\n noopRect: 'hover-noop-rect',\n} as const;\n\nconst elementShapes = [\n ...baseElementShapes,\n {\n id: 'hover-diamond-shape',\n kind: 'diamond' as const,\n style: {\n fill: '#f8ecff',\n stroke: '#6b3fa0',\n strokeWidth: 2,\n },\n },\n {\n id: 'hover-ellipse-shape',\n kind: 'ellipse' as const,\n style: {\n fill: '#edf8ff',\n stroke: '#2b6f99',\n strokeWidth: 2,\n },\n },\n {\n id: 'hover-circle-shape',\n kind: 'circle' as const,\n style: {\n fill: '#ecfdf5',\n stroke: '#0f766e',\n strokeWidth: 2,\n },\n },\n];\n\nconst createShapeHoverControlsState = (): DiagramState => ({\n elements: [\n {\n id: shapeHoverDemoIds.drawer,\n position: { x: 80, y: 100 },\n size: { width: 380, height: 230 },\n shapeId: 'panel',\n },\n {\n id: 'hover-drawer-child-a',\n parentId: shapeHoverDemoIds.drawer,\n position: { x: 32, y: 64 },\n size: { width: 130, height: 70 },\n shapeId: 'default',\n },\n {\n id: 'hover-drawer-child-b',\n parentId: shapeHoverDemoIds.drawer,\n position: { x: 212, y: 64 },\n size: { width: 130, height: 70 },\n shapeId: 'default',\n },\n {\n id: shapeHoverDemoIds.diamond,\n position: { x: 560, y: 120 },\n size: { width: 170, height: 130 },\n shapeId: 'hover-diamond-shape',\n },\n {\n id: shapeHoverDemoIds.target,\n position: { x: 820, y: 140 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n {\n id: shapeHoverDemoIds.ellipse,\n position: { x: 540, y: 350 },\n size: { width: 240, height: 120 },\n shapeId: 'hover-ellipse-shape',\n },\n {\n id: shapeHoverDemoIds.circle,\n position: { x: 830, y: 340 },\n size: { width: 140, height: 140 },\n shapeId: 'hover-circle-shape',\n },\n {\n id: shapeHoverDemoIds.noopRect,\n position: { x: 1010, y: 360 },\n size: { width: 180, height: 110 },\n shapeId: 'default',\n },\n ],\n ports: [],\n links: [],\n texts: [\n {\n id: 'hover-drawer-label',\n content: 'Drawer (hover bottom edge control to add child)',\n ownerId: shapeHoverDemoIds.drawer,\n position: { x: 14, y: 14 },\n style: { fontSize: 13, fontFamily: 'sans-serif' },\n },\n {\n id: 'hover-diamond-label',\n content: 'Diamond vertex control creates link',\n ownerId: shapeHoverDemoIds.diamond,\n position: { x: 8, y: -16 },\n style: { fontSize: 13, fontFamily: 'sans-serif' },\n },\n {\n id: 'hover-target-label',\n content: 'Rectangle target',\n ownerId: shapeHoverDemoIds.target,\n position: { x: 12, y: -14 },\n style: { fontSize: 13, fontFamily: 'sans-serif' },\n },\n {\n id: 'hover-ellipse-label',\n content: 'Ellipse enum targets: top/right/bottom/left',\n ownerId: shapeHoverDemoIds.ellipse,\n position: { x: 12, y: -14 },\n style: { fontSize: 13, fontFamily: 'sans-serif' },\n },\n {\n id: 'hover-circle-label',\n content: 'Circle enum targets',\n ownerId: shapeHoverDemoIds.circle,\n position: { x: 10, y: -14 },\n style: { fontSize: 13, fontFamily: 'sans-serif' },\n },\n {\n id: 'hover-noop-rect-label',\n content: 'Rectangle no-op for ellipse-midpoint',\n ownerId: shapeHoverDemoIds.noopRect,\n position: { x: 10, y: -14 },\n style: { fontSize: 13, fontFamily: 'sans-serif' },\n },\n ],\n});\n\nexport const shapeHoverControlsDemoConfig: DemoConfig = {\n id: 'shape-hover-controls',\n title: 'Shape Hover Controls',\n description:\n 'Host-configured edge/midpoint/vertex plus ellipse-midpoint controls with trigger modes, selectors, click actions, and drag event logging.',\n createState: createShapeHoverControlsState,\n elementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'focus-drawer',\n label: 'Focus drawer',\n run: (editor) => {\n editor.setSelection([shapeHoverDemoIds.drawer]);\n },\n },\n {\n id: 'focus-diamond',\n label: 'Focus diamond',\n run: (editor) => {\n editor.setSelection([shapeHoverDemoIds.diamond]);\n },\n },\n ],\n};\n","import React from 'react';\r\nimport type { DemoAction } from './types';\r\n\r\ntype ControlsProps = {\r\n actions: DemoAction[];\r\n snapEnabled: boolean;\r\n selectedLinkRouting: string;\r\n canToggleLinkRouting: boolean;\r\n onReload: () => void;\r\n onZoomIn: () => void;\r\n onZoomOut: () => void;\r\n onResetViewport: () => void;\r\n onToggleSnap: () => void;\r\n onManualRender: () => void;\r\n onToggleLinkRouting: () => void;\r\n onAction: (action: DemoAction) => void;\r\n};\r\n\r\nconst DisplayBoxControls = ({\r\n actions,\r\n snapEnabled,\r\n selectedLinkRouting,\r\n canToggleLinkRouting,\r\n onReload,\r\n onZoomIn,\r\n onZoomOut,\r\n onResetViewport,\r\n onToggleSnap,\r\n onManualRender,\r\n onToggleLinkRouting,\r\n onAction,\r\n}: ControlsProps) => (\r\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8, marginBottom: 12 }}>\r\n <button onClick={onReload} style={{ padding: '8px 12px' }}>\r\n Reload Demo State\r\n </button>\r\n <button onClick={onZoomIn} style={{ padding: '8px 12px' }}>\r\n Zoom In\r\n </button>\r\n <button onClick={onZoomOut} style={{ padding: '8px 12px' }}>\r\n Zoom Out\r\n </button>\r\n <button onClick={onResetViewport} style={{ padding: '8px 12px' }}>\r\n Reset Viewport\r\n </button>\r\n <button onClick={onToggleSnap} style={{ padding: '8px 12px' }}>\r\n Snap: {snapEnabled ? 'On' : 'Off'}\r\n </button>\r\n <button onClick={onManualRender} style={{ padding: '8px 12px' }}>\r\n Manual Render\r\n </button>\r\n <button onClick={onToggleLinkRouting} style={{ padding: '8px 12px' }} disabled={!canToggleLinkRouting}>\r\n Toggle Link Routing ({selectedLinkRouting})\r\n </button>\r\n {actions.map((action) => (\r\n <button key={action.id} onClick={() => onAction(action)} style={{ padding: '8px 12px' }}>\r\n {action.label}\r\n </button>\r\n ))}\r\n </div>\r\n);\r\n\r\nexport default DisplayBoxControls;\r\n","import React from 'react';\r\n\r\ntype StagePanelProps = {\r\n containerRef: React.RefObject<HTMLDivElement>;\r\n onDragOver?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n onDragLeave?: () => void;\r\n onDrop?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n stageStyle?: React.CSSProperties;\r\n};\r\n\r\nconst DisplayBoxStage = ({ containerRef, onDragOver, onDragLeave, onDrop, stageStyle }: StagePanelProps) => (\r\n <div\r\n ref={containerRef}\r\n data-testid=\"displaybox-stage\"\r\n onDragOver={onDragOver}\r\n onDragLeave={onDragLeave}\r\n onDrop={onDrop}\r\n style={{\r\n width: '100%',\r\n height: 560,\r\n border: '1px solid #2d2d2d',\r\n borderRadius: 8,\r\n background: '#f8f8f8',\r\n ...(stageStyle ?? {}),\r\n }}\r\n />\r\n);\r\n\r\nexport default DisplayBoxStage;\r\n","import { useCallback, useMemo } from 'react';\r\nimport type { DiagramEditorHandle, DiagramState } from '../api';\r\nimport type { DemoAction, DemoActionHelpers, DemoConfig } from './types';\r\n\r\ntype UseDemoControlsArgs = {\r\n demo: DemoConfig;\r\n editorRef: React.MutableRefObject<DiagramEditorHandle | null>;\r\n diagramState: DiagramState | null;\r\n selection: string[];\r\n snapEnabled: boolean;\r\n setSnapEnabled: (value: boolean | ((prev: boolean) => boolean)) => void;\r\n actionHelpers: DemoActionHelpers;\r\n};\r\n\r\nconst useDemoControls = ({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n}: UseDemoControlsArgs) => {\r\n const selectedLink = useMemo(() => {\r\n if (!diagramState) return null;\r\n return diagramState.links.find((link) => selection.includes(link.id)) ?? null;\r\n }, [diagramState, selection]);\r\n\r\n const selectedLinkRouting = selectedLink?.routing ?? 'auto';\r\n const canToggleLinkRouting = Boolean(selectedLink);\r\n\r\n const handleAction = useCallback(\r\n (action: DemoAction) => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n const state = editor.getState();\r\n action.run(editor, state, demo, actionHelpers);\r\n },\r\n [actionHelpers, demo, editorRef],\r\n );\r\n\r\n const handleReload = useCallback(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n editor.load(demo.createState());\r\n }, [demo, editorRef]);\r\n\r\n const handleZoom = useCallback(\r\n (factor: number) => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n const current = editor.getViewport();\r\n const zoom = Math.max(0.2, Math.min(3, current.zoom * factor));\r\n editor.setViewport(current.pan, zoom);\r\n },\r\n [editorRef],\r\n );\r\n\r\n const handleResetViewport = useCallback(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n editor.setViewport({ x: 0, y: 0 }, 1);\r\n }, [editorRef]);\r\n\r\n const handleToggleSnap = useCallback(() => {\r\n setSnapEnabled((prev) => !prev);\r\n }, [setSnapEnabled]);\r\n\r\n const handleManualRender = useCallback(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n editor.render();\r\n }, [editorRef]);\r\n\r\n const handleToggleLinkRouting = useCallback(() => {\r\n const editor = editorRef.current;\r\n if (!editor || !selectedLink) return;\r\n const next = selectedLinkRouting === 'auto' ? 'manual' : 'auto';\r\n editor.setLinkRoutingMode(selectedLink.id, next);\r\n }, [editorRef, selectedLink, selectedLinkRouting]);\r\n\r\n return {\r\n selectedLinkRouting,\r\n canToggleLinkRouting,\r\n handleAction,\r\n handleReload,\r\n handleZoomIn: () => handleZoom(1.1),\r\n handleZoomOut: () => handleZoom(0.9),\r\n handleResetViewport,\r\n handleToggleSnap,\r\n handleManualRender,\r\n handleToggleLinkRouting,\r\n snapEnabled,\r\n };\r\n};\r\n\r\nexport default useDemoControls;\r\n","export type Point = { x: number; y: number };\r\nexport type Size = { width: number; height: number };\r\nexport type Rect = { x: number; y: number; width: number; height: number };\r\nexport type ClientRectLike = { left: number; top: number };\r\nexport type DiagramContainer = { getBoundingClientRect: () => ClientRectLike };\nexport type MoveConstraint = 'free' | 'inside' | 'border';\nexport type BorderSide = 'left' | 'right' | 'top' | 'bottom';\nexport type HostAnchorPreset = 'vertices' | 'cardinal';\nexport type PortAnchor = {\n id: string;\n position: Point;\n side?: BorderSide;\n normal?: Point;\n meta?: Record<string, unknown>;\n};\nexport type PortAnchorConstraint = {\n preset: HostAnchorPreset;\n fallback?: 'nearest';\n};\nexport type ResolvePortAnchorsOptions = {\n preset: HostAnchorPreset;\n};\nexport type ShapeVertexTarget = {\n id: string;\n position: Point;\n};\nexport type ShapeEdgeTarget = {\n id: string;\n start: Point;\n end: Point;\n midpoint: Point;\n};\nexport enum EllipseMidPoint {\n top = 'top',\n right = 'right',\n bottom = 'bottom',\n left = 'left',\n}\nexport type ShapeEllipseMidPointTarget = {\n id: EllipseMidPoint;\n ellipseMidPoint: EllipseMidPoint;\n position: Point;\n};\nexport type ShapeHoverGeometry = {\n vertices: ShapeVertexTarget[];\n edges: ShapeEdgeTarget[];\n};\nexport type HoverControlIcon = {\n svgPath: string;\n size?: Size;\n style?: Record<string, unknown>;\n};\nexport type ShapeControlTargetKind = 'vertex' | 'edge' | 'midpoint' | 'ellipse-midpoint';\nexport type ShapeControlVisibilityTrigger = 'element-hover' | 'target-hover';\nexport type ShapeControlDefinition = {\n id: string;\n targetKind: ShapeControlTargetKind;\n icon: HoverControlIcon;\n targetIndices?: number[];\n ellipseMidPoints?: EllipseMidPoint | EllipseMidPoint[];\n allowAllTargets?: boolean;\n visibilityTriggers?: ShapeControlVisibilityTrigger[];\n lineStyle?: Record<string, unknown>;\n tolerance?: number;\n};\n/**\n * @deprecated Use ShapeControlDefinition with targetKind='edge'.\n */\nexport type EdgeHoverControl = {\n kind: 'edge';\n icon: HoverControlIcon;\n lineStyle?: Record<string, unknown>;\n tolerance?: number;\n};\n/**\n * @deprecated Use ShapeControlDefinition with targetKind='vertex'.\n */\nexport type VertexHoverControl = {\n kind: 'vertex';\n icon: HoverControlIcon;\n tolerance?: number;\n};\nexport type ElementShapeHoverControls = {\n controls?: ShapeControlDefinition[];\n /**\n * @deprecated Legacy singleton edge control. Use controls[] instead.\n */\n edge?: EdgeHoverControl;\n /**\n * @deprecated Legacy singleton vertex control. Use controls[] instead.\n */\n vertex?: VertexHoverControl;\n /**\n * @deprecated Legacy resolution preference for singleton edge/vertex controls.\n */\n priority?: 'vertex-first';\n};\nexport type ElementShapeControlEventType = 'click' | 'drag-start' | 'drag-move' | 'drag-end';\nexport type ElementShapeControlDragEvent = {\n sessionId: string;\n startPointer: EnginePointerInfo;\n delta: Point;\n};\nexport type ElementShapeHoverControlInteractionEvent = {\n eventType: ElementShapeControlEventType;\n controlId: string;\n elementId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n pointer: EnginePointerInfo;\n edge?: ShapeEdgeTarget;\n vertex?: ShapeVertexTarget;\n ellipseMidPoint?: EllipseMidPoint;\n drag?: ElementShapeControlDragEvent;\n};\n/**\n * @deprecated Use ElementShapeHoverControlInteractionEvent with eventType='click'.\n */\nexport type ElementShapeHoverControlActivationEvent = {\n controlKind: 'edge' | 'vertex';\n elementId: string;\n targetId: string;\n pointer: EnginePointerInfo;\n edge?: ShapeEdgeTarget;\n vertex?: ShapeVertexTarget;\n};\nexport type ElementPortMovementPolicy = {\n moveMode: MoveConstraint | 'anchors';\n anchorConstraint?: PortAnchorConstraint;\n};\nexport type LinkRoutingMode = 'auto' | 'manual';\nexport type AnchorReference = 'top-left' | 'center';\nexport type RerouteLinksOptions = { includeManual?: boolean };\nexport type ElementLayoutMode = 'manual' | 'horizontal' | 'vertical';\nexport type ElementLayoutAlign = 'start' | 'center' | 'end';\nexport type ElementLayoutChildFitMainAxis = 'none' | 'distribute';\nexport type ElementLayoutChildFitCrossAxis = 'none' | 'stretch';\nexport type TextLayoutBoundsMode = 'owner-width' | 'owner-box' | 'fixed';\nexport type TextLayoutWrapMode = 'none' | 'word' | 'char';\nexport type TextLayoutOverflowMode = 'clip' | 'ellipsis-end' | 'ellipsis-middle' | 'ellipsis-start';\nexport type ElementLayout = {\n mode: ElementLayoutMode;\n padding?: number | { x: number; y: number };\n gap?: number;\n align?: ElementLayoutAlign;\n childFitMainAxis?: ElementLayoutChildFitMainAxis;\n childFitCrossAxis?: ElementLayoutChildFitCrossAxis;\n childFitMinSize?: Partial<Size>;\n childFitMaxSize?: Partial<Size>;\n};\n\nexport type TextLayout = {\n boundsMode?: TextLayoutBoundsMode;\n wrap?: TextLayoutWrapMode;\n overflow?: TextLayoutOverflowMode;\n padding?: number;\n maxLines?: number;\n fixedSize?: Size;\n};\n\r\nexport type ElementDropEvent = {\r\n elementId: string;\r\n startWorld: Point;\r\n endWorld: Point;\r\n delta: Point;\r\n startParentId?: string | null;\r\n selectionIds: string[];\r\n anchor: AnchorReference;\r\n};\r\n\r\nexport type OverlayShapeConfig = {\r\n shapeId: string;\r\n position: Point;\r\n size: Size;\r\n style?: Record<string, unknown>;\r\n anchorCenter?: boolean;\r\n};\r\n\r\nexport type OverlayShapeHandle = {\r\n update: (config: OverlayShapeConfig) => void;\r\n destroy: () => void;\r\n};\r\n\r\nexport type ElementData = {\r\n id: string;\r\n position: Point;\r\n size: Size;\r\n shapeId: string;\r\n style?: Record<string, unknown>;\r\n portIds?: string[];\r\n textIds?: string[];\r\n parentId?: string | null;\r\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementLayout;\n portMovement?: ElementPortMovementPolicy;\n};\n\r\nexport type PortData = {\n id: string;\n elementId: string;\n position: Point;\n shapeId?: string;\n size?: Size;\n style?: Record<string, unknown>;\n textIds?: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n orientToHostBorder?: boolean;\n currentAnchorId?: string;\n};\n\r\nexport type ShapeDrawContext = {\r\n ctx: CanvasRenderingContext2D;\r\n model: ElementData | PortData;\r\n};\r\n\r\nexport type LinkData = {\r\n id: string;\r\n sourcePortId: string;\r\n targetPortId: string;\r\n points: Point[];\r\n routing?: LinkRoutingMode;\r\n style?: Record<string, unknown>;\r\n textIds?: string[];\r\n};\r\n\r\nexport type TextData = {\n id: string;\n content: string;\n position: Point;\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n layout?: TextLayout;\n displayContent?: string;\n displayOffset?: Point;\n displayClipSize?: Size;\n};\n\r\nexport type DiagramState = {\r\n elements: ElementData[];\r\n ports: PortData[];\r\n links: LinkData[];\r\n texts: TextData[];\r\n};\r\n\r\nexport type DiagramPatch = {\r\n type: string;\r\n entity: 'element' | 'port' | 'link' | 'text' | 'selection' | 'viewport' | 'config';\r\n id?: string;\r\n payload?: Record<string, unknown>;\r\n};\r\n\r\nexport type EngineChangeEvent = {\r\n patches: DiagramPatch[];\r\n state: DiagramState;\r\n};\r\n\r\nexport type EngineSelectionEvent = {\r\n selectedIds: string[];\r\n};\r\n\r\nexport type EngineConfigEvent = {\r\n type: 'routing' | 'snapping' | 'rendering';\r\n};\r\n\r\nexport type EnginePointerInfo = {\r\n client: Point;\r\n world: Point;\r\n button?: number;\r\n buttons?: number;\r\n altKey?: boolean;\r\n ctrlKey?: boolean;\r\n metaKey?: boolean;\r\n shiftKey?: boolean;\r\n pointerType?: string;\r\n};\r\n\r\nexport type PaperClickEvent = {\r\n pointer: EnginePointerInfo;\r\n};\r\n\r\nexport type PortMouseEvent = {\r\n portId: string;\r\n elementId: string;\r\n pointer: EnginePointerInfo;\r\n};\r\n\r\nexport type PortMovedEvent = {\r\n portId: string;\r\n elementId: string;\r\n oldWorld: Point;\r\n newWorld: Point;\r\n delta: Point;\r\n};\r\n\r\nexport type PortSelectedEvent = {\r\n portId: string;\r\n elementId: string;\r\n};\r\n\r\nexport type ElementPointerEvent = {\r\n elementId: string;\r\n pointer: EnginePointerInfo;\r\n isMulti: boolean;\r\n};\r\n\r\nexport type ElementMovedEvent = {\r\n elementId: string;\r\n oldWorld: Point;\r\n newWorld: Point;\r\n delta: Point;\r\n};\r\n\r\nexport type ElementResizedEvent = {\r\n elementId: string;\r\n oldSize: Size;\r\n newSize: Size;\r\n};\r\n\r\nexport type ElementDeletedEvent = {\n elementId: string;\n};\n\nexport type PortDeletedEvent = {\n portId: string;\n elementId: string;\n};\n\nexport type LinkDeletedEvent = {\n linkId: string;\n sourcePortId: string;\n targetPortId: string;\n};\n\nexport type TextDeletedEvent = {\n textId: string;\n ownerId?: string | null;\n};\n\nexport type TextUpdatedEvent = {\n textId: string;\n ownerId?: string | null;\n content: string;\n displayContent: string;\n reason: 'content' | 'layout';\n};\n\nexport type ElementLinkStartedEvent = {\n sourcePortId: string;\n sourceElementId: string;\n startWorld: Point;\n};\n\r\nexport type ElementLinkConnectingEvent = {\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n targetPortId: string;\r\n targetElementId: string;\r\n cancel: () => void;\r\n cancelled: boolean;\r\n};\r\n\r\nexport type ElementLinkEndedEvent = {\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n linkId?: string;\r\n targetPortId?: string;\r\n targetElementId?: string;\r\n cancelled: boolean;\r\n};\r\n\r\n\r\nexport type ElementSelectedEvent = {\r\n elementId: string;\r\n};\r\n\r\nexport type TextSelectedEvent = {\r\n textId: string;\r\n};\r\n\r\nexport type EngineEventMap = {\r\n change: EngineChangeEvent;\r\n selection: EngineSelectionEvent;\r\n config: EngineConfigEvent;\r\n /**\r\n * Deprecated (legacy kebab-case). Prefer `elementDrop`.\r\n */\r\n 'element-drop': ElementDropEvent;\r\n elementDrop: ElementDropEvent;\r\n\r\n // Legacy event surface (camelCase)\r\n paperClick: PaperClickEvent;\r\n\r\n portMouseDown: PortMouseEvent;\r\n portMouseUp: PortMouseEvent;\r\n portMoved: PortMovedEvent;\r\n portSelected: PortSelectedEvent;\r\n\r\n elementClick: ElementPointerEvent;\r\n elementDragged: ElementDropEvent;\r\n elementMoved: ElementMovedEvent;\n elementResized: ElementResizedEvent;\n elementDeleted: ElementDeletedEvent;\n portDeleted: PortDeletedEvent;\n linkDeleted: LinkDeletedEvent;\n textDeleted: TextDeletedEvent;\n textUpdated: TextUpdatedEvent;\n elementSelected: ElementSelectedEvent;\n\r\n elementLinkStarted: ElementLinkStartedEvent;\r\n elementLinkConnecting: ElementLinkConnectingEvent;\r\n elementLinkEnded: ElementLinkEndedEvent;\r\n\r\n textSelected: TextSelectedEvent;\r\n};\r\n\r\nexport type DiagramEngineHandle = {\r\n load: (state: DiagramState) => void;\r\n getState: () => DiagramState;\r\n getViewport: () => { pan: Point; zoom: number };\r\n /**\r\n * Convert client/screen coordinates into diagram world coordinates.\r\n * Formula: world = (client - containerRect - pan) / zoom.\r\n */\r\n clientToWorld: (clientPoint: Point, container: DiagramContainer) => Point;\r\n createOverlayShape: (config: OverlayShapeConfig) => OverlayShapeHandle;\r\n on: <T extends keyof EngineEventMap>(\r\n event: T,\r\n handler: (payload: EngineEventMap[T]) => void\r\n ) => () => void;\r\n addElement: (element: ElementData) => void;\r\n moveElementTo: (id: string, x: number, y: number) => void;\r\n resizeElement: (id: string, width: number, height: number) => void;\r\n setElementLayout: (id: string, layout: ElementLayout | undefined) => void;\r\n removeElement: (id: string) => void;\r\n addPortToElement: (elementId: string, port: PortData) => void;\r\n movePortTo: (id: string, x: number, y: number) => void;\r\n removePort: (id: string) => void;\r\n addLink: (link: LinkData) => void;\r\n updateLinkPoints: (id: string, points: Point[]) => void;\r\n setLinkRoutingMode: (id: string, mode: LinkRoutingMode) => void;\r\n rerouteAllLinks: () => void;\r\n rerouteLinks: (linkIds: string[], options?: RerouteLinksOptions) => void;\r\n removeLink: (id: string) => void;\r\n addText: (text: TextData) => void;\r\n updateText: (id: string, content: string) => void;\r\n moveTextTo: (id: string, x: number, y: number) => void;\r\n removeText: (id: string) => void;\r\n setSelection: (ids: string[]) => void;\r\n setViewport: (pan: Point, zoom: number) => void;\r\n setRouting: (router: unknown) => void;\r\n setSnapping: (snapper: unknown) => void;\r\n registerShape: (shape: {\n id: string;\n baseRotation?: number;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: Size;\n projectToBorder?: (point: Point, rect: Rect) => Point;\n resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;\n resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];\n resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;\n resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;\n }) => void;\n render: () => void;\n};\n","import { ElementData, MoveConstraint, Point, Size } from '../api/types';\r\n\r\nexport default class ElementModel {\r\n id: string;\r\n position: Point;\r\n size: Size;\r\n shapeId: string;\r\n style?: Record<string, unknown>;\r\n portIds: string[];\r\n textIds: string[];\r\n parentId: string | null;\r\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementData['layout'];\n portMovement?: ElementData['portMovement'];\n\r\n constructor(data: ElementData) {\r\n this.id = data.id;\r\n this.position = { ...data.position };\r\n this.size = { ...data.size };\r\n this.shapeId = data.shapeId;\r\n this.style = data.style;\r\n this.portIds = data.portIds ? [...data.portIds] : [];\r\n this.textIds = data.textIds ? [...data.textIds] : [];\r\n this.parentId = data.parentId ?? null;\r\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter;\n this.layout = data.layout;\n this.portMovement = data.portMovement;\n }\r\n\r\n setPosition(position: Point): void {\r\n this.position = { ...position };\r\n }\r\n\r\n setSize(size: Size): void {\r\n this.size = { ...size };\r\n }\r\n\r\n addPort(portId: string): void {\r\n if (!this.portIds.includes(portId)) {\r\n this.portIds.push(portId);\r\n }\r\n }\r\n\r\n removePort(portId: string): void {\r\n this.portIds = this.portIds.filter((id) => id !== portId);\r\n }\r\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): ElementData {\r\n return {\r\n id: this.id,\r\n position: { ...this.position },\r\n size: { ...this.size },\r\n shapeId: this.shapeId,\r\n style: this.style,\r\n portIds: [...this.portIds],\r\n textIds: [...this.textIds],\r\n parentId: this.parentId,\r\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n layout: this.layout,\n portMovement: this.portMovement,\n };\n }\n}\n","import { LinkData, LinkRoutingMode, Point } from '../api/types';\r\n\r\nexport default class LinkModel {\r\n id: string;\r\n sourcePortId: string;\r\n targetPortId: string;\r\n points: Point[];\r\n routing: LinkRoutingMode;\r\n style?: Record<string, unknown>;\r\n textIds: string[];\r\n\r\n constructor(data: LinkData) {\r\n this.id = data.id;\r\n this.sourcePortId = data.sourcePortId;\r\n this.targetPortId = data.targetPortId;\r\n this.points = data.points.map((point) => ({ ...point }));\r\n this.routing = data.routing ?? 'auto';\r\n this.style = data.style;\r\n this.textIds = data.textIds ? [...data.textIds] : [];\r\n }\r\n\r\n setPoints(points: Point[]): void {\r\n this.points = points.map((point) => ({ ...point }));\r\n }\r\n\r\n setRouting(mode: LinkRoutingMode): void {\r\n this.routing = mode;\r\n }\r\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): LinkData {\r\n return {\r\n id: this.id,\r\n sourcePortId: this.sourcePortId,\r\n targetPortId: this.targetPortId,\r\n points: this.points.map((point) => ({ ...point })),\r\n routing: this.routing,\r\n style: this.style,\r\n textIds: [...this.textIds],\r\n };\r\n }\r\n}\r\n","export default class OwnershipIndex {\r\n private ownerToTexts = new Map<string, Set<string>>();\r\n\r\n add(ownerId: string, textId: string): void {\r\n const set = this.ownerToTexts.get(ownerId) ?? new Set<string>();\r\n set.add(textId);\r\n this.ownerToTexts.set(ownerId, set);\r\n }\r\n\r\n remove(ownerId: string, textId: string): void {\r\n const set = this.ownerToTexts.get(ownerId);\r\n if (!set) return;\r\n set.delete(textId);\r\n if (set.size === 0) {\r\n this.ownerToTexts.delete(ownerId);\r\n }\r\n }\r\n\r\n getTexts(ownerId: string): string[] {\r\n const set = this.ownerToTexts.get(ownerId);\r\n if (!set) return [];\r\n return Array.from(set.values());\r\n }\r\n\r\n clearOwner(ownerId: string): void {\r\n this.ownerToTexts.delete(ownerId);\r\n }\r\n}\r\n","import { MoveConstraint, Point, PortData, Size } from '../api/types';\r\n\r\nexport default class PortModel {\r\n id: string;\r\n elementId: string;\r\n position: Point;\r\n shapeId?: string;\r\n size?: Size;\r\n style?: Record<string, unknown>;\r\n textIds: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n orientToHostBorder: boolean;\n currentAnchorId?: string;\n\r\n constructor(data: PortData) {\r\n this.id = data.id;\r\n this.elementId = data.elementId;\r\n this.position = { ...data.position };\r\n this.shapeId = data.shapeId;\r\n this.size = data.size ? { ...data.size } : undefined;\r\n this.style = data.style;\r\n this.textIds = data.textIds ? [...data.textIds] : [];\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter ?? true;\n this.orientToHostBorder = data.orientToHostBorder ?? true;\n this.currentAnchorId = data.currentAnchorId;\n }\n\r\n setPosition(position: Point): void {\n this.position = { ...position };\n }\n\n setCurrentAnchorId(currentAnchorId?: string): void {\n this.currentAnchorId = currentAnchorId;\n }\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): PortData {\r\n return {\r\n id: this.id,\r\n elementId: this.elementId,\r\n position: { ...this.position },\r\n shapeId: this.shapeId,\r\n size: this.size ? { ...this.size } : undefined,\r\n style: this.style,\r\n textIds: [...this.textIds],\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n orientToHostBorder: this.orientToHostBorder,\n currentAnchorId: this.currentAnchorId,\n };\n }\n}\n","import { Point, TextData, Size } from '../api/types';\n\r\nexport default class TextModel {\r\n id: string;\r\n content: string;\r\n position: Point;\r\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n layout?: TextData['layout'];\n displayContent?: string;\n displayOffset?: Point;\n displayClipSize?: Size;\n\r\n constructor(data: TextData) {\r\n this.id = data.id;\r\n this.content = data.content;\r\n this.position = { ...data.position };\r\n this.size = data.size ? { ...data.size } : undefined;\n this.style = data.style;\n this.ownerId = data.ownerId ?? null;\n this.layout = data.layout ? { ...data.layout } : undefined;\n this.displayContent = data.displayContent ?? data.content;\n this.displayOffset = data.displayOffset ? { ...data.displayOffset } : undefined;\n this.displayClipSize = data.displayClipSize ? { ...data.displayClipSize } : undefined;\n }\n\r\n setContent(content: string): void {\n this.content = content;\n this.displayContent = content;\n }\n\r\n setSize(size: Size): void {\n this.size = { ...size };\n }\n\n setDisplayContent(content: string): void {\n this.displayContent = content;\n }\n\n setDisplayOffset(offset: Point | undefined): void {\n this.displayOffset = offset ? { ...offset } : undefined;\n }\n\n setDisplayClipSize(size: Size | undefined): void {\n this.displayClipSize = size ? { ...size } : undefined;\n }\n\n setLayout(layout: TextData['layout']): void {\n this.layout = layout ? { ...layout } : undefined;\n }\n\r\n setPosition(position: Point): void {\r\n this.position = { ...position };\r\n }\r\n\r\n toData(): TextData {\r\n return {\r\n id: this.id,\r\n content: this.content,\r\n position: { ...this.position },\r\n size: this.size ? { ...this.size } : undefined,\n style: this.style,\n ownerId: this.ownerId,\n layout: this.layout ? { ...this.layout } : undefined,\n displayContent: this.displayContent ?? this.content,\n displayOffset: this.displayOffset ? { ...this.displayOffset } : undefined,\n displayClipSize: this.displayClipSize ? { ...this.displayClipSize } : undefined,\n };\n }\n}\n","import { Point, Rect } from '../api/types';\r\n\r\nexport const addPoints = (a: Point, b: Point): Point => ({ x: a.x + b.x, y: a.y + b.y });\r\nexport const subtractPoints = (a: Point, b: Point): Point => ({ x: a.x - b.x, y: a.y - b.y });\r\nexport const scalePoint = (point: Point, factor: number): Point => ({\r\n x: point.x * factor,\r\n y: point.y * factor,\r\n});\r\n\r\nexport const distance = (a: Point, b: Point): number => {\r\n const dx = a.x - b.x;\r\n const dy = a.y - b.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const clamp = (value: number, min: number, max: number): number => {\r\n if (value < min) return min;\r\n if (value > max) return max;\r\n return value;\r\n};\r\n\r\nexport const rectContainsPoint = (rect: Rect, point: Point): boolean => {\r\n return (\r\n point.x >= rect.x &&\r\n point.x <= rect.x + rect.width &&\r\n point.y >= rect.y &&\r\n point.y <= rect.y + rect.height\r\n );\r\n};\r\n\r\nexport const rectsIntersect = (a: Rect, b: Rect): boolean => {\n return !(\n a.x + a.width < b.x ||\n b.x + b.width < a.x ||\n a.y + a.height < b.y ||\n b.y + b.height < a.y\n );\n};\n\nexport const degreesToRadians = (degrees: number): number => (degrees * Math.PI) / 180;\n\nexport const rotatePoint = (point: Point, center: Point, degrees: number): Point => {\n if (Math.abs(degrees) < 1e-9) return { ...point };\n const radians = degreesToRadians(degrees);\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n return {\n x: center.x + dx * cos - dy * sin,\n y: center.y + dx * sin + dy * cos,\n };\n};\n\nexport const resolveRectRotationPivot = (\n topLeft: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n): Point => {\n if (anchorCenter) {\n return { x: topLeft.x + size.width / 2, y: topLeft.y + size.height / 2 };\n }\n return { x: topLeft.x, y: topLeft.y };\n};\n\nexport const getRotatedRectCorners = (\n topLeft: Point,\n size: { width: number; height: number },\n rotation: number,\n anchorCenter = false,\n): { nw: Point; ne: Point; sw: Point; se: Point } => {\n const nw = { ...topLeft };\n const ne = { x: topLeft.x + size.width, y: topLeft.y };\n const sw = { x: topLeft.x, y: topLeft.y + size.height };\n const se = { x: topLeft.x + size.width, y: topLeft.y + size.height };\n if (Math.abs(rotation) < 1e-9) return { nw, ne, sw, se };\n const pivot = resolveRectRotationPivot(topLeft, size, anchorCenter);\n return {\n nw: rotatePoint(nw, pivot, rotation),\n ne: rotatePoint(ne, pivot, rotation),\n sw: rotatePoint(sw, pivot, rotation),\n se: rotatePoint(se, pivot, rotation),\n };\n};\n\nexport const pointInPolygon = (point: Point, polygon: Point[]): boolean => {\n if (polygon.length < 3) return false;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i, i += 1) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n const intersects =\n yi > point.y !== yj > point.y &&\n point.x < ((xj - xi) * (point.y - yi)) / ((yj - yi) || 1e-12) + xi;\n if (intersects) inside = !inside;\n }\n return inside;\n};\n\nconst orientation = (a: Point, b: Point, c: Point): number =>\n (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);\n\nconst onSegment = (a: Point, b: Point, c: Point): boolean =>\n Math.min(a.x, c.x) <= b.x &&\n b.x <= Math.max(a.x, c.x) &&\n Math.min(a.y, c.y) <= b.y &&\n b.y <= Math.max(a.y, c.y);\n\nexport const segmentsIntersect = (a1: Point, a2: Point, b1: Point, b2: Point): boolean => {\n const o1 = orientation(a1, a2, b1);\n const o2 = orientation(a1, a2, b2);\n const o3 = orientation(b1, b2, a1);\n const o4 = orientation(b1, b2, a2);\n\n if (o1 * o2 < 0 && o3 * o4 < 0) return true;\n if (Math.abs(o1) < 1e-9 && onSegment(a1, b1, a2)) return true;\n if (Math.abs(o2) < 1e-9 && onSegment(a1, b2, a2)) return true;\n if (Math.abs(o3) < 1e-9 && onSegment(b1, a1, b2)) return true;\n if (Math.abs(o4) < 1e-9 && onSegment(b1, a2, b2)) return true;\n return false;\n};\n\nexport const pointInRotatedRect = (\n point: Point,\n topLeft: Point,\n size: { width: number; height: number },\n rotation: number,\n anchorCenter = false,\n): boolean => {\n if (Math.abs(rotation) < 1e-9) {\n return rectContainsPoint({ x: topLeft.x, y: topLeft.y, width: size.width, height: size.height }, point);\n }\n const pivot = resolveRectRotationPivot(topLeft, size, anchorCenter);\n const unrotatedPoint = rotatePoint(point, pivot, -rotation);\n return rectContainsPoint({ x: topLeft.x, y: topLeft.y, width: size.width, height: size.height }, unrotatedPoint);\n};\n\nexport const polygonIntersectsRect = (polygon: Point[], rect: Rect): boolean => {\n if (polygon.length < 2) return false;\n if (polygon.some((point) => rectContainsPoint(rect, point))) return true;\n\n const rectCorners = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n\n if (rectCorners.some((corner) => pointInPolygon(corner, polygon))) return true;\n\n const polygonEdges = polygon.map((point, index) => [point, polygon[(index + 1) % polygon.length]] as const);\n const rectEdges = [\n [rectCorners[0], rectCorners[1]],\n [rectCorners[1], rectCorners[2]],\n [rectCorners[2], rectCorners[3]],\n [rectCorners[3], rectCorners[0]],\n ] as const;\n\n for (let i = 0; i < polygonEdges.length; i += 1) {\n const [a1, a2] = polygonEdges[i];\n for (let j = 0; j < rectEdges.length; j += 1) {\n const [b1, b2] = rectEdges[j];\n if (segmentsIntersect(a1, a2, b1, b2)) return true;\n }\n }\n\n return false;\n};\n\nexport const snapToGrid = (point: Point, gridSize: number): Point => {\n if (gridSize <= 0) return { ...point };\n return {\n x: Math.round(point.x / gridSize) * gridSize,\r\n y: Math.round(point.y / gridSize) * gridSize,\r\n };\r\n};\r\n","import { DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\r\nimport ElementModel from './ElementModel';\r\nimport LinkModel from './LinkModel';\r\nimport OwnershipIndex from './OwnershipIndex';\r\nimport PortModel from './PortModel';\r\nimport TextModel from './TextModel';\r\nimport { distance } from '../utils/geometry';\r\n\r\nexport default class DiagramModel {\r\n elements = new Map<string, ElementModel>();\r\n ports = new Map<string, PortModel>();\r\n links = new Map<string, LinkModel>();\r\n texts = new Map<string, TextModel>();\r\n ownership = new OwnershipIndex();\r\n\r\n load(state: DiagramState): void {\r\n this.elements.clear();\r\n this.ports.clear();\r\n this.links.clear();\r\n this.texts.clear();\r\n this.ownership = new OwnershipIndex();\r\n\r\n state.elements.forEach((data) => this.elements.set(data.id, new ElementModel(data)));\r\n state.ports.forEach((data) => this.ports.set(data.id, new PortModel(data)));\r\n state.links.forEach((data) => this.links.set(data.id, new LinkModel(data)));\r\n state.texts.forEach((data) => {\r\n const text = new TextModel(data);\r\n this.texts.set(data.id, text);\r\n });\r\n\r\n this.ports.forEach((port) => {\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.addPort(port.id);\r\n }\r\n });\r\n\r\n this.texts.forEach((text) => {\r\n if (!text.ownerId) return;\r\n this.ownership.add(text.ownerId, text.id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.addText(text.id);\r\n return;\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.addText(text.id);\r\n return;\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.addText(text.id);\r\n }\r\n });\r\n }\r\n\r\n toState(): DiagramState {\r\n return {\r\n elements: Array.from(this.elements.values()).map((element) => element.toData()),\r\n ports: Array.from(this.ports.values()).map((port) => port.toData()),\r\n links: Array.from(this.links.values()).map((link) => link.toData()),\r\n texts: Array.from(this.texts.values()).map((text) => text.toData()),\r\n };\r\n }\r\n\r\n getElement(id: string): ElementModel | undefined {\r\n return this.elements.get(id);\r\n }\r\n\r\n setElementLayout(id: string, layout: ElementData['layout']): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.layout = layout;\r\n }\r\n\r\n getChildren(parentId: string): ElementModel[] {\r\n return Array.from(this.elements.values()).filter((child) => child.parentId === parentId);\r\n }\r\n\r\n getElementWorldPosition(id: string): Point | null {\r\n const element = this.elements.get(id);\r\n if (!element) return null;\r\n return this.resolveElementWorldPosition(element);\r\n }\r\n\r\n getPort(id: string): PortModel | undefined {\r\n return this.ports.get(id);\r\n }\r\n\r\n getPortWorldPosition(id: string): Point | null {\r\n const port = this.ports.get(id);\r\n if (!port) return null;\r\n const elementPosition = this.getElementWorldPosition(port.elementId);\r\n if (!elementPosition) return { ...port.position };\r\n return {\r\n x: elementPosition.x + port.position.x,\r\n y: elementPosition.y + port.position.y,\r\n };\r\n }\r\n\r\n getLink(id: string): LinkModel | undefined {\r\n return this.links.get(id);\r\n }\r\n\r\n getLinkMidpoint(id: string): Point | null {\r\n const link = this.links.get(id);\r\n if (!link) return null;\r\n return this.resolveLinkMidpoint(link);\r\n }\r\n\r\n getText(id: string): TextModel | undefined {\r\n return this.texts.get(id);\r\n }\r\n\r\n getTextWorldPosition(id: string): Point | null {\r\n const text = this.texts.get(id);\r\n if (!text) return null;\r\n if (!text.ownerId) return { ...text.position };\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n const elementPosition = this.resolveElementWorldPosition(element);\r\n return {\r\n x: elementPosition.x + text.position.x,\r\n y: elementPosition.y + text.position.y,\r\n };\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n const portPosition = this.getPortWorldPosition(port.id);\r\n if (!portPosition) return { ...text.position };\r\n return {\r\n x: portPosition.x + text.position.x,\r\n y: portPosition.y + text.position.y,\r\n };\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n const midpoint = this.resolveLinkMidpoint(link);\r\n return {\r\n x: midpoint.x + text.position.x,\r\n y: midpoint.y + text.position.y,\r\n };\r\n }\r\n\r\n return { ...text.position };\r\n }\r\n\r\n addElement(data: ElementData): ElementModel {\r\n const element = new ElementModel(data);\r\n this.elements.set(element.id, element);\r\n return element;\r\n }\r\n\r\n moveElement(id: string, position: Point): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.setPosition(position);\r\n }\r\n\r\n resizeElement(id: string, size: { width: number; height: number }): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.setSize(size);\r\n }\r\n\r\n removeElement(id: string): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n\r\n const portIds = [...element.portIds];\r\n const textIds = [...element.textIds];\r\n\r\n portIds.forEach((portId) => this.removePort(portId));\r\n textIds.forEach((textId) => this.removeText(textId));\r\n\r\n this.elements.delete(id);\r\n }\r\n\r\n addPort(data: PortData): PortModel {\r\n const port = new PortModel(data);\r\n this.ports.set(port.id, port);\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.addPort(port.id);\r\n }\r\n return port;\r\n }\r\n\r\n movePort(id: string, position: Point): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setPosition(position);\n }\n\n setPortCurrentAnchorId(id: string, currentAnchorId?: string): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setCurrentAnchorId(currentAnchorId);\n }\n\r\n removePort(id: string): void {\r\n const port = this.ports.get(id);\r\n if (!port) return;\r\n\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.removePort(id);\r\n }\r\n\r\n const portTextIds = [...port.textIds];\r\n portTextIds.forEach((textId) => this.removeText(textId));\r\n\r\n const linksToRemove = Array.from(this.links.values())\r\n .filter((link) => link.sourcePortId === id || link.targetPortId === id)\r\n .map((link) => link.id);\r\n\r\n linksToRemove.forEach((linkId) => this.removeLink(linkId));\r\n\r\n this.ports.delete(id);\r\n }\r\n\r\n addLink(data: LinkData): LinkModel {\r\n const link = new LinkModel(data);\r\n this.links.set(link.id, link);\r\n return link;\r\n }\r\n\r\n updateLinkPoints(id: string, points: Point[]): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n link.setPoints(points);\r\n }\r\n\r\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n link.setRouting(mode);\r\n }\r\n\r\n removeLink(id: string): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n\r\n const textIds = [...link.textIds];\r\n textIds.forEach((textId) => this.removeText(textId));\r\n\r\n this.links.delete(id);\r\n }\r\n\r\n addText(data: TextData): TextModel {\r\n const text = new TextModel(data);\r\n this.texts.set(text.id, text);\r\n\r\n if (text.ownerId) {\r\n this.ownership.add(text.ownerId, text.id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.addText(text.id);\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.addText(text.id);\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.addText(text.id);\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n\r\n updateText(id: string, content: string): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n text.setContent(content);\r\n }\r\n\r\n moveText(id: string, position: Point): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n text.setPosition(position);\r\n }\r\n\r\n removeText(id: string): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n\r\n if (text.ownerId) {\r\n this.ownership.remove(text.ownerId, id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.removeText(id);\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.removeText(id);\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.removeText(id);\r\n }\r\n }\r\n\r\n this.texts.delete(id);\r\n }\r\n\r\n private resolveElementWorldPosition(element: ElementModel): Point {\r\n let x = element.position.x;\r\n let y = element.position.y;\r\n if (element.anchorCenter) {\r\n x -= element.size.width / 2;\r\n y -= element.size.height / 2;\r\n }\r\n let current: ElementModel | undefined = element;\r\n while (current?.parentId) {\r\n const parent = this.elements.get(current.parentId);\r\n if (!parent) break;\r\n let parentX = parent.position.x;\r\n let parentY = parent.position.y;\r\n if (parent.anchorCenter) {\r\n parentX -= parent.size.width / 2;\r\n parentY -= parent.size.height / 2;\r\n }\r\n x += parentX;\r\n y += parentY;\r\n current = parent;\r\n }\r\n return { x, y };\r\n }\r\n\r\n private resolveLinkMidpoint(link: LinkModel): Point {\r\n const points = link.points;\r\n if (points.length === 0) return { x: 0, y: 0 };\r\n if (points.length === 1) return { ...points[0] };\r\n\r\n let total = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n total += distance(points[i - 1], points[i]);\r\n }\r\n\r\n const halfway = total / 2;\r\n let traveled = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n const segment = distance(points[i - 1], points[i]);\r\n if (traveled + segment >= halfway) {\r\n const ratio = segment === 0 ? 0 : (halfway - traveled) / segment;\r\n return {\r\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\r\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\r\n };\r\n }\r\n traveled += segment;\r\n }\r\n\r\n return { ...points[points.length - 1] };\r\n }\r\n}\r\n","import { DiagramPatch } from '../api/types';\r\nimport DiagramModel from '../models/DiagramModel';\r\nimport { EngineCommand } from './EngineCommands';\r\n\r\nexport default class CommandQueue {\r\n private queue: EngineCommand[] = [];\r\n\r\n enqueue(command: EngineCommand): void {\r\n this.queue.push(command);\r\n }\r\n\r\n flush(model: DiagramModel): DiagramPatch[] {\r\n const patches: DiagramPatch[] = [];\r\n while (this.queue.length > 0) {\r\n const command = this.queue.shift();\r\n if (!command) continue;\r\n const next = command.apply(model);\r\n patches.push(...next);\r\n }\r\n return patches;\r\n }\r\n\r\n run(command: EngineCommand, model: DiagramModel): DiagramPatch[] {\r\n this.enqueue(command);\r\n return this.flush(model);\r\n }\r\n}\r\n","export type Unsubscribe = () => void;\r\n\r\nexport default class EventBus<TEvents extends Record<string, unknown>> {\r\n private handlers = new Map<keyof TEvents, Set<(payload: TEvents[keyof TEvents]) => void>>();\r\n\r\n subscribe<TEvent extends keyof TEvents>(\r\n event: TEvent,\r\n handler: (payload: TEvents[TEvent]) => void\r\n ): Unsubscribe {\r\n const set = this.handlers.get(event) ?? new Set();\r\n set.add(handler as (payload: TEvents[keyof TEvents]) => void);\r\n this.handlers.set(event, set);\r\n\r\n return () => {\r\n const existing = this.handlers.get(event);\r\n if (!existing) return;\r\n existing.delete(handler as (payload: TEvents[keyof TEvents]) => void);\r\n if (existing.size === 0) {\r\n this.handlers.delete(event);\r\n }\r\n };\r\n }\r\n\r\n emit<TEvent extends keyof TEvents>(event: TEvent, payload: TEvents[TEvent]): void {\r\n const set = this.handlers.get(event);\r\n if (!set) return;\r\n Array.from(set.values()).forEach((handler) => {\r\n handler(payload as TEvents[keyof TEvents]);\r\n });\r\n }\r\n}\r\n","export default class SelectionState {\r\n private selectedIds = new Set<string>();\r\n\r\n set(ids: string[]): void {\r\n this.selectedIds = new Set(ids);\r\n }\r\n\r\n toggle(id: string): void {\r\n if (this.selectedIds.has(id)) {\r\n this.selectedIds.delete(id);\r\n } else {\r\n this.selectedIds.add(id);\r\n }\r\n }\r\n\r\n get(): string[] {\r\n return Array.from(this.selectedIds.values());\r\n }\r\n\r\n clear(): void {\r\n this.selectedIds.clear();\r\n }\r\n}\r\n","import { Point } from '../api/types';\r\n\r\nexport default class ViewportState {\r\n pan: Point = { x: 0, y: 0 };\r\n zoom = 1;\r\n\r\n setPan(point: Point): void {\r\n this.pan = { ...point };\r\n }\r\n\r\n setZoom(value: number): void {\r\n this.zoom = value;\r\n }\r\n}\r\n","import { DiagramPatch } from '../api/types';\r\n\r\nexport const patchAdd = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\r\n type: 'add',\r\n entity,\r\n id,\r\n payload,\r\n});\r\n\r\nexport const patchUpdate = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\r\n type: 'update',\r\n entity,\r\n id,\r\n payload,\r\n});\r\n\r\nexport const patchRemove = (entity: DiagramPatch['entity'], id: string): DiagramPatch => ({\r\n type: 'remove',\r\n entity,\r\n id,\r\n});\r\n","import { DiagramPatch, DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\r\nimport DiagramModel from '../models/DiagramModel';\r\nimport { patchAdd, patchRemove, patchUpdate } from '../utils/patches';\r\n\r\nexport type EngineCommand = {\r\n type: string;\r\n apply: (model: DiagramModel) => DiagramPatch[];\r\n};\r\n\r\nexport const createLoadCommand = (state: DiagramState): EngineCommand => ({\r\n type: 'load',\r\n apply: (model) => {\r\n model.load(state);\r\n return [{ type: 'load', entity: 'config', payload: {} }];\r\n },\r\n});\r\n\r\nexport const createAddElementCommand = (element: ElementData): EngineCommand => ({\r\n type: 'addElement',\r\n apply: (model) => {\r\n model.addElement(element);\r\n return [patchAdd('element', element.id, element)];\r\n },\r\n});\r\n\r\nexport const createMoveElementCommand = (id: string, position: Point): EngineCommand => ({\r\n type: 'moveElement',\r\n apply: (model) => {\r\n model.moveElement(id, position);\r\n return [patchUpdate('element', id, { position })];\r\n },\r\n});\r\n\r\nexport const createResizeElementCommand = (\n id: string,\n size: { width: number; height: number }\n): EngineCommand => ({\n type: 'resizeElement',\n apply: (model) => {\n const current = model.getElement(id);\n const previousSize = current ? { ...current.size } : undefined;\n model.resizeElement(id, size);\n return [patchUpdate('element', id, { size, previousSize })];\n },\n});\n\r\nexport const createRemoveElementCommand = (id: string): EngineCommand => ({\r\n type: 'removeElement',\r\n apply: (model) => {\r\n model.removeElement(id);\r\n return [patchRemove('element', id)];\r\n },\r\n});\r\n\r\nexport const createSetElementLayoutCommand = (\r\n id: string,\r\n layout: ElementData['layout'],\r\n): EngineCommand => ({\r\n type: 'setElementLayout',\r\n apply: (model) => {\r\n model.setElementLayout(id, layout);\r\n return [patchUpdate('element', id, { layout })];\r\n },\r\n});\r\n\r\nexport const createAddPortCommand = (port: PortData): EngineCommand => ({\r\n type: 'addPort',\r\n apply: (model) => {\r\n model.addPort(port);\r\n return [patchAdd('port', port.id, port)];\r\n },\r\n});\r\n\r\nexport const createMovePortCommand = (\n id: string,\n update: { position: Point; currentAnchorId?: string | null },\n): EngineCommand => ({\n type: 'movePort',\n apply: (model) => {\n const hasCurrentAnchorId = Object.prototype.hasOwnProperty.call(update, 'currentAnchorId');\n model.movePort(id, update.position);\n if (hasCurrentAnchorId) {\n model.setPortCurrentAnchorId(id, update.currentAnchorId ?? undefined);\n }\n const payload: Record<string, unknown> = { position: update.position };\n if (hasCurrentAnchorId) {\n payload.currentAnchorId = update.currentAnchorId ?? null;\n }\n return [patchUpdate('port', id, payload)];\n },\n});\n\r\nexport const createRemovePortCommand = (id: string): EngineCommand => ({\r\n type: 'removePort',\r\n apply: (model) => {\r\n model.removePort(id);\r\n return [patchRemove('port', id)];\r\n },\r\n});\r\n\r\nexport const createAddLinkCommand = (link: LinkData): EngineCommand => ({\r\n type: 'addLink',\r\n apply: (model) => {\r\n model.addLink(link);\r\n return [patchAdd('link', link.id, link)];\r\n },\r\n});\r\n\r\nexport const createUpdateLinkCommand = (\r\n id: string,\r\n update: { points?: Point[]; routing?: LinkRoutingMode }\r\n): EngineCommand => ({\r\n type: 'updateLink',\r\n apply: (model) => {\r\n if (update.points !== undefined) {\r\n model.updateLinkPoints(id, update.points);\r\n }\r\n if (update.routing !== undefined) {\r\n model.setLinkRoutingMode(id, update.routing);\r\n }\r\n const payload: Record<string, unknown> = {};\r\n if (update.points !== undefined) payload.points = update.points;\r\n if (update.routing !== undefined) payload.routing = update.routing;\r\n return [patchUpdate('link', id, payload)];\r\n },\r\n});\r\n\r\nexport const createRemoveLinkCommand = (id: string): EngineCommand => ({\r\n type: 'removeLink',\r\n apply: (model) => {\r\n model.removeLink(id);\r\n return [patchRemove('link', id)];\r\n },\r\n});\r\n\r\nexport const createAddTextCommand = (text: TextData): EngineCommand => ({\r\n type: 'addText',\r\n apply: (model) => {\r\n model.addText(text);\r\n return [patchAdd('text', text.id, text)];\r\n },\r\n});\r\n\r\nexport const createUpdateTextCommand = (id: string, content: string): EngineCommand => ({\r\n type: 'updateText',\r\n apply: (model) => {\r\n model.updateText(id, content);\r\n return [patchUpdate('text', id, { content })];\r\n },\r\n});\r\n\r\nexport const createMoveTextCommand = (id: string, position: Point): EngineCommand => ({\r\n type: 'moveText',\r\n apply: (model) => {\r\n model.moveText(id, position);\r\n return [patchUpdate('text', id, { position })];\r\n },\r\n});\r\n\r\nexport const createRemoveTextCommand = (id: string): EngineCommand => ({\r\n type: 'removeText',\r\n apply: (model) => {\r\n model.removeText(id);\r\n return [patchRemove('text', id)];\r\n },\r\n});\r\n","export default class RenderScheduler {\r\n private pending = false;\r\n private lastCallback: (() => void) | null = null;\r\n\r\n requestRender(callback: () => void): void {\r\n this.lastCallback = callback;\r\n if (this.pending) return;\r\n this.pending = true;\r\n\r\n const schedule = typeof requestAnimationFrame !== 'undefined'\r\n ? requestAnimationFrame\r\n : (cb: FrameRequestCallback) => setTimeout(() => cb(Date.now()), 16);\r\n\r\n schedule(() => {\r\n this.pending = false;\r\n const next = this.lastCallback;\r\n this.lastCallback = null;\r\n if (next) {\r\n next();\r\n }\r\n });\r\n }\r\n}\r\n","import { Point, Rect } from '../api/types';\r\nimport type { RouteContext, RouteObstacle, RouterStrategy } from './RouterStrategy';\r\n\r\ntype ObstacleRouterOptions = {\r\n padding?: number;\r\n tolerance?: number;\r\n stubLength?: number;\r\n};\r\n\r\nconst DEFAULT_PADDING = 12;\r\nconst DEFAULT_TOLERANCE = 0.5;\r\nconst DEFAULT_STUB_LENGTH = 12;\r\n\r\nconst shrinkRect = (rect: Rect, amount: number): Rect | null => {\r\n const width = rect.width - amount * 2;\r\n const height = rect.height - amount * 2;\r\n if (width <= 0 || height <= 0) return null;\r\n return {\r\n x: rect.x + amount,\r\n y: rect.y + amount,\r\n width,\r\n height,\r\n };\r\n};\r\n\r\nconst segmentIntersectsRect = (start: Point, end: Point, rect: Rect): boolean => {\r\n const dx = end.x - start.x;\r\n const dy = end.y - start.y;\r\n const p = [-dx, dx, -dy, dy];\r\n const q = [\r\n start.x - rect.x,\r\n rect.x + rect.width - start.x,\r\n start.y - rect.y,\r\n rect.y + rect.height - start.y,\r\n ];\r\n\r\n let t0 = 0;\r\n let t1 = 1;\r\n\r\n for (let i = 0; i < 4; i += 1) {\r\n const pi = p[i];\r\n const qi = q[i];\r\n if (pi === 0) {\r\n if (qi < 0) return false;\r\n } else {\r\n const r = qi / pi;\r\n if (pi < 0) {\r\n if (r > t1) return false;\r\n if (r > t0) t0 = r;\r\n } else {\r\n if (r < t0) return false;\r\n if (r < t1) t1 = r;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst segmentIntersectsRectInterior = (start: Point, end: Point, rect: Rect, tolerance: number): boolean => {\r\n const inner = shrinkRect(rect, tolerance);\r\n if (!inner) return false;\r\n return segmentIntersectsRect(start, end, inner);\r\n};\r\n\r\nconst pointWithinRect = (point: Point, rect: Rect, tolerance: number): boolean => {\r\n return (\r\n point.x >= rect.x - tolerance &&\r\n point.x <= rect.x + rect.width + tolerance &&\r\n point.y >= rect.y - tolerance &&\r\n point.y <= rect.y + rect.height + tolerance\r\n );\r\n};\r\n\r\nconst compactPath = (points: Point[]): Point[] => {\r\n const deduped: Point[] = [];\r\n points.forEach((point) => {\r\n const last = deduped[deduped.length - 1];\r\n if (!last || last.x !== point.x || last.y !== point.y) {\r\n deduped.push(point);\r\n }\r\n });\r\n\r\n if (deduped.length < 3) return deduped;\r\n\r\n const compacted: Point[] = [deduped[0]];\r\n for (let i = 1; i < deduped.length; i += 1) {\r\n const prev = compacted[compacted.length - 1];\r\n const next = deduped[i];\r\n const beforePrev = compacted[compacted.length - 2];\r\n if (\r\n beforePrev &&\r\n ((beforePrev.x === prev.x && prev.x === next.x) || (beforePrev.y === prev.y && prev.y === next.y))\r\n ) {\r\n compacted[compacted.length - 1] = next;\r\n } else {\r\n compacted.push(next);\r\n }\r\n }\r\n return compacted;\r\n};\r\n\r\nconst pathLength = (points: Point[]): number => {\r\n let total = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n const dx = points[i].x - points[i - 1].x;\r\n const dy = points[i].y - points[i - 1].y;\r\n total += Math.sqrt(dx * dx + dy * dy);\r\n }\r\n return total;\r\n};\r\n\r\nexport default class ObstacleRouter implements RouterStrategy {\r\n private padding: number;\r\n private tolerance: number;\r\n private stubLength: number;\r\n\r\n constructor(options?: ObstacleRouterOptions) {\r\n this.padding = options?.padding ?? DEFAULT_PADDING;\r\n this.tolerance = options?.tolerance ?? DEFAULT_TOLERANCE;\r\n this.stubLength = options?.stubLength ?? DEFAULT_STUB_LENGTH;\r\n }\r\n\r\n route(source: Point, target: Point, context?: RouteContext): Point[] {\r\n const obstacles = context?.obstacles ?? [];\r\n const bounds = context?.bounds;\r\n\r\n const sourceStub = this.computeStubEndpoint(source, context?.sourceEndpoint, bounds, obstacles);\r\n const targetStub = this.computeStubEndpoint(target, context?.targetEndpoint, bounds, obstacles);\r\n\r\n const innerSource = sourceStub ?? source;\r\n const innerTarget = targetStub ?? target;\r\n\r\n const core = this.routeBetween(innerSource, innerTarget, obstacles, bounds);\r\n const normalizedCore = this.ensureEndpoints(core, innerSource, innerTarget);\r\n\r\n const middle = normalizedCore.slice(1, -1).map((p) => ({ ...p }));\r\n const result: Point[] = [{ ...source }];\r\n const hasSourceStub = Boolean(sourceStub);\r\n const hasTargetStub = Boolean(targetStub);\r\n if (hasSourceStub && sourceStub) {\r\n result.push({ ...sourceStub });\r\n }\r\n result.push(...middle);\r\n if (hasTargetStub && targetStub) {\r\n result.push({ ...targetStub });\r\n }\r\n result.push({ ...target });\r\n\r\n return this.compactPreservingStubs(result, hasSourceStub, hasTargetStub);\r\n }\r\n\r\n private buildCandidates(source: Point, target: Point, obstacles: RouteObstacle[]): Point[][] {\r\n const midXValues = new Set<number>();\r\n const midYValues = new Set<number>();\r\n\r\n midXValues.add(Math.round((source.x + target.x) / 2));\r\n midXValues.add(source.x);\r\n midXValues.add(target.x);\r\n\r\n midYValues.add(Math.round((source.y + target.y) / 2));\r\n midYValues.add(source.y);\r\n midYValues.add(target.y);\r\n\r\n obstacles.forEach((obstacle) => {\r\n midXValues.add(obstacle.rect.x - this.padding);\r\n midXValues.add(obstacle.rect.x + obstacle.rect.width + this.padding);\r\n midYValues.add(obstacle.rect.y - this.padding);\r\n midYValues.add(obstacle.rect.y + obstacle.rect.height + this.padding);\r\n });\r\n\r\n const candidates: Point[][] = [];\r\n\r\n midXValues.forEach((midX) => {\r\n const path = compactPath([\r\n { ...source },\r\n { x: midX, y: source.y },\r\n { x: midX, y: target.y },\r\n { ...target },\r\n ]);\r\n candidates.push(path);\r\n });\r\n\r\n midYValues.forEach((midY) => {\r\n const path = compactPath([\r\n { ...source },\r\n { x: source.x, y: midY },\r\n { x: target.x, y: midY },\r\n { ...target },\r\n ]);\r\n candidates.push(path);\r\n });\r\n\r\n return candidates;\r\n }\r\n\r\n private routeBetween(source: Point, target: Point, obstacles: RouteObstacle[], bounds?: Rect): Point[] {\r\n const direct = compactPath([{ ...source }, { ...target }]);\r\n\r\n if (obstacles.length === 0 && (!bounds || this.pointsWithinBounds(direct, bounds))) {\r\n return direct;\r\n }\r\n\r\n if (this.isPathClear(direct, obstacles, bounds)) {\r\n return direct;\r\n }\r\n\r\n const candidates = this.buildCandidates(source, target, obstacles);\r\n let best: Point[] | null = null;\r\n let bestLength = Number.POSITIVE_INFINITY;\r\n\r\n candidates.forEach((candidate) => {\r\n if (!this.isPathClear(candidate, obstacles, bounds)) return;\r\n const length = pathLength(candidate);\r\n if (length < bestLength) {\r\n best = candidate;\r\n bestLength = length;\r\n }\r\n });\r\n\r\n return best ?? direct;\r\n }\r\n\r\n private pointsWithinBounds(points: Point[], bounds: Rect): boolean {\r\n return points.every((point) => pointWithinRect(point, bounds, this.tolerance));\r\n }\r\n\r\n private isPathClear(points: Point[], obstacles: RouteObstacle[], bounds?: Rect): boolean {\r\n if (points.length < 2) return true;\r\n if (bounds && !this.pointsWithinBounds(points, bounds)) return false;\r\n\r\n for (let i = 1; i < points.length; i += 1) {\r\n const start = points[i - 1];\r\n const end = points[i];\r\n if (start.x === end.x && start.y === end.y) continue;\r\n for (let j = 0; j < obstacles.length; j += 1) {\r\n if (segmentIntersectsRectInterior(start, end, obstacles[j].rect, this.tolerance)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private computeStubEndpoint(\r\n point: Point,\r\n endpoint: RouteContext['sourceEndpoint'],\r\n bounds: Rect | undefined,\r\n obstacles: RouteObstacle[],\r\n ): Point | null {\r\n if (!endpoint?.onEdgeSide || !endpoint.rect) return null;\r\n const normal = this.getNormal(endpoint.onEdgeSide);\r\n\r\n let maxLength = this.stubLength;\r\n if (bounds) {\r\n maxLength = Math.min(maxLength, this.distanceToBounds(point, normal, bounds));\r\n }\r\n\r\n const obstacleLimit = this.distanceToObstacles(point, normal, obstacles, endpoint.elementId);\r\n if (obstacleLimit !== null) {\r\n maxLength = Math.min(maxLength, obstacleLimit);\r\n }\r\n\r\n if (maxLength <= 0) return null;\r\n\r\n return {\r\n x: point.x + normal.x * maxLength,\r\n y: point.y + normal.y * maxLength,\r\n };\r\n }\r\n\r\n private getNormal(side: 'left' | 'right' | 'top' | 'bottom'): Point {\r\n switch (side) {\r\n case 'left':\r\n return { x: -1, y: 0 };\r\n case 'right':\r\n return { x: 1, y: 0 };\r\n case 'top':\r\n return { x: 0, y: -1 };\r\n case 'bottom':\r\n default:\r\n return { x: 0, y: 1 };\r\n }\r\n }\r\n\r\n private distanceToBounds(point: Point, normal: Point, bounds: Rect): number {\r\n if (normal.x < 0) {\r\n return Math.max(0, point.x - bounds.x);\r\n }\r\n if (normal.x > 0) {\r\n return Math.max(0, bounds.x + bounds.width - point.x);\r\n }\r\n if (normal.y < 0) {\r\n return Math.max(0, point.y - bounds.y);\r\n }\r\n return Math.max(0, bounds.y + bounds.height - point.y);\r\n }\r\n\r\n private distanceToObstacles(\r\n point: Point,\r\n normal: Point,\r\n obstacles: RouteObstacle[],\r\n ignoreId?: string,\r\n ): number | null {\r\n let limit = Number.POSITIVE_INFINITY;\r\n const overlapsHorizontally = (rect: Rect) =>\r\n point.y >= rect.y - this.tolerance && point.y <= rect.y + rect.height + this.tolerance;\r\n const overlapsVertically = (rect: Rect) =>\r\n point.x >= rect.x - this.tolerance && point.x <= rect.x + rect.width + this.tolerance;\r\n\r\n obstacles.forEach((obstacle) => {\r\n if (ignoreId && obstacle.id === ignoreId) return;\r\n const rect = obstacle.rect;\r\n if (normal.x < 0 && overlapsHorizontally(rect) && rect.x + rect.width <= point.x) {\r\n const available = point.x - (rect.x + rect.width + this.tolerance);\r\n if (available < limit) limit = available;\r\n } else if (normal.x > 0 && overlapsHorizontally(rect) && rect.x >= point.x) {\r\n const available = rect.x - this.tolerance - point.x;\r\n if (available < limit) limit = available;\r\n } else if (normal.y < 0 && overlapsVertically(rect) && rect.y + rect.height <= point.y) {\r\n const available = point.y - (rect.y + rect.height + this.tolerance);\r\n if (available < limit) limit = available;\r\n } else if (normal.y > 0 && overlapsVertically(rect) && rect.y >= point.y) {\r\n const available = rect.y - this.tolerance - point.y;\r\n if (available < limit) limit = available;\r\n }\r\n });\r\n\r\n if (!Number.isFinite(limit)) return null;\r\n return Math.max(0, limit);\r\n }\r\n\r\n private ensureEndpoints(points: Point[], source: Point, target: Point): Point[] {\r\n if (points.length === 0) return [{ ...source }, { ...target }];\r\n const result = [...points];\r\n if (result.length === 1) {\r\n result.unshift({ ...source });\r\n result.push({ ...target });\r\n return result;\r\n }\r\n if (result[0].x !== source.x || result[0].y !== source.y) {\r\n result.unshift({ ...source });\r\n }\r\n const last = result[result.length - 1];\r\n if (last.x !== target.x || last.y !== target.y) {\r\n result.push({ ...target });\r\n }\r\n return result;\r\n }\r\n\r\n private compactPreservingStubs(points: Point[], hasSourceStub: boolean, hasTargetStub: boolean): Point[] {\r\n if (points.length <= 2) return points.map((p) => ({ ...p }));\r\n const deduped: Point[] = [];\r\n points.forEach((point) => {\r\n const last = deduped[deduped.length - 1];\r\n if (!last || last.x !== point.x || last.y !== point.y) {\r\n deduped.push(point);\r\n }\r\n });\r\n if (deduped.length < 3) return deduped.map((p) => ({ ...p }));\r\n\r\n const result: Point[] = [deduped[0]];\r\n for (let i = 1; i < deduped.length - 1; i += 1) {\r\n const prev = result[result.length - 1];\r\n const current = deduped[i];\r\n const next = deduped[i + 1];\r\n const isFirstTurn = hasSourceStub && result.length === 1;\r\n const isLastTurn = hasTargetStub && i === deduped.length - 2;\r\n const collinear =\r\n (prev.x === current.x && current.x === next.x) || (prev.y === current.y && current.y === next.y);\r\n if (collinear && !isFirstTurn && !isLastTurn) {\r\n continue;\r\n }\r\n result.push(current);\r\n }\r\n result.push(deduped[deduped.length - 1]);\r\n return result.map((p) => ({ ...p }));\r\n }\r\n}\r\n","import { Point } from '../api/types';\r\nimport { snapToGrid } from '../utils/geometry';\r\nimport { SnapStrategy } from './SnapStrategy';\r\n\r\nexport default class DefaultSnapper implements SnapStrategy {\r\n private gridSize: number;\r\n\r\n constructor(gridSize = 0) {\r\n this.gridSize = gridSize;\r\n }\r\n\r\n setGridSize(size: number): void {\r\n this.gridSize = size;\r\n }\r\n\r\n snap(point: Point): Point {\r\n return snapToGrid(point, this.gridSize);\r\n }\r\n}\r\n","import {\n ElementData,\n Point,\n PortAnchor,\n PortData,\n Rect,\n ResolvePortAnchorsOptions,\n ShapeEllipseMidPointTarget,\n ShapeDrawContext,\n ShapeHoverGeometry,\n} from '../api/types';\nimport { BorderSide } from '../utils/borderGeometry';\n\nexport type ShapeNodeSizeUpdateContext = {\n size: { width: number; height: number };\n anchorCenter: boolean;\n updateOffsetX: boolean;\n updateOffsetY: boolean;\n getNodeAttr: <T = unknown>(key: string) => T | undefined;\n};\n\nexport type ShapeNodeSizeUpdater = (context: ShapeNodeSizeUpdateContext) => Record<string, unknown>;\n\nexport type ShapeResizeHandle = 'nw' | 'ne' | 'sw' | 'se';\n\nexport type ShapeResizeNormalizeContext = {\n element: ElementData;\n handle: ShapeResizeHandle;\n minSize: number;\n proposal: { width: number; height: number };\n};\n\nexport type ShapeDefinition = {\n id: string;\n baseRotation?: number;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: { width: number; height: number };\n sizeUpdater?: ShapeNodeSizeUpdater;\n normalizeResize?: (context: ShapeResizeNormalizeContext) => { width: number; height: number };\n projectToBorder?: (point: Point, rect: Rect) => Point;\n resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;\n resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];\n resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;\n resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;\n};\n\nexport class ShapeRegistry {\n private shapes = new Map<string, ShapeDefinition>();\n\n register(shape: ShapeDefinition): void {\n this.shapes.set(shape.id, shape);\n }\n\r\n get(id: string): ShapeDefinition | undefined {\r\n return this.shapes.get(id);\r\n }\r\n\r\n has(id: string): boolean {\r\n return this.shapes.has(id);\r\n }\r\n}\r\n","export const DEFAULT_TEXT_FONT_SIZE = 12;\nexport const DEFAULT_TEXT_FONT_FAMILY = 'Arial';\nexport const DEFAULT_TEXT_LINE_HEIGHT = 1.2;\n\nexport type ResolvedTextStyle = {\n fontSize: number;\n fontFamily: string;\n lineHeight: number;\n};\n\nexport const resolveTextStyleDefaults = (\n style?: Record<string, unknown>,\n): ResolvedTextStyle => {\n const fontSize = (style?.fontSize as number | undefined) ?? DEFAULT_TEXT_FONT_SIZE;\n const fontFamily = (style?.fontFamily as string | undefined) ?? DEFAULT_TEXT_FONT_FAMILY;\n const lineHeight = (style?.lineHeight as number | undefined) ?? DEFAULT_TEXT_LINE_HEIGHT;\n return { fontSize, fontFamily, lineHeight };\n};\n","import { Size, TextData } from '../api/types';\nimport { TextMeasurer } from './TextMeasurer';\nimport { resolveTextStyleDefaults } from './textStyleDefaults';\n\r\nexport default class CanvasTextMeasurer implements TextMeasurer {\r\n private context: CanvasRenderingContext2D | null = null;\r\n\r\n private getContext(): CanvasRenderingContext2D | null {\r\n if (this.context) return this.context;\r\n if (typeof document === 'undefined') return null;\r\n const canvas = document.createElement('canvas');\r\n try {\r\n this.context = canvas.getContext('2d');\r\n } catch {\r\n this.context = null;\r\n }\r\n return this.context;\r\n }\n\n measure(text: TextData): Size {\n const { fontSize, fontFamily, lineHeight } = resolveTextStyleDefaults(text.style);\n const ctx = this.getContext();\n if (!ctx) {\n return {\n width: Math.max(text.content.length, 1) * fontSize * 0.6,\n height: fontSize * lineHeight,\n };\n }\n ctx.font = `${fontSize}px ${fontFamily}`;\n const metrics = ctx.measureText(text.content || '');\n const width = metrics.width;\n const height = fontSize * lineHeight;\n return { width, height };\n }\n}\n","import { Point, Rect } from '../api/types';\n\nexport type BorderSide = 'left' | 'right' | 'top' | 'bottom';\nexport type BoundaryKind = 'rect' | 'ellipse' | 'diamond';\n\nconst resolveNearestRectSide = (point: Point, rect: Rect): BorderSide => {\n const clampedX = Math.min(rect.x + rect.width, Math.max(rect.x, point.x));\n const clampedY = Math.min(rect.y + rect.height, Math.max(rect.y, point.y));\n const left = Math.abs(clampedX - rect.x);\n const right = Math.abs(clampedX - (rect.x + rect.width));\n const top = Math.abs(clampedY - rect.y);\n const bottom = Math.abs(clampedY - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return 'left';\n if (min === right) return 'right';\n if (min === top) return 'top';\n return 'bottom';\n};\n\nconst projectPointToRectBorder = (point: Point, rect: Rect): Point => {\n const clampedX = Math.min(rect.x + rect.width, Math.max(rect.x, point.x));\n const clampedY = Math.min(rect.y + rect.height, Math.max(rect.y, point.y));\n const side = resolveNearestRectSide(point, rect);\n if (side === 'left') return { x: rect.x, y: clampedY };\n if (side === 'right') return { x: rect.x + rect.width, y: clampedY };\n if (side === 'top') return { x: clampedX, y: rect.y };\n return { x: clampedX, y: rect.y + rect.height };\n};\n\nconst resolveDirectionalSide = (point: Point, rect: Rect): BorderSide => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return resolveNearestRectSide(point, rect);\n }\n\n const nx = (point.x - cx) / rx;\n const ny = (point.y - cy) / ry;\n if (Math.abs(nx) < 1e-6 && Math.abs(ny) < 1e-6) {\n return 'top';\n }\n if (Math.abs(nx) >= Math.abs(ny)) {\n return nx < 0 ? 'left' : 'right';\n }\n return ny < 0 ? 'top' : 'bottom';\n};\n\nconst projectPointToEllipseBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return projectPointToRectBorder(point, rect);\n }\n\n const dx = point.x - cx;\n const dy = point.y - cy;\n if (Math.abs(dx) < 1e-6 && Math.abs(dy) < 1e-6) {\n return { x: cx, y: cy - ry };\n }\n\n const scale = 1 / Math.sqrt((dx * dx) / (rx * rx) + (dy * dy) / (ry * ry));\n return { x: cx + dx * scale, y: cy + dy * scale };\n};\n\nconst projectPointToDiamondBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return projectPointToRectBorder(point, rect);\n }\n\n const dx = point.x - cx;\n const dy = point.y - cy;\n const scale = Math.abs(dx) / rx + Math.abs(dy) / ry;\n if (scale < 1e-6) {\n return { x: cx, y: rect.y };\n }\n return {\n x: cx + dx / scale,\n y: cy + dy / scale,\n };\n};\n\nexport const projectPointToBoundary = (point: Point, rect: Rect, boundary: BoundaryKind): Point => {\n if (boundary === 'ellipse') {\n return projectPointToEllipseBorder(point, rect);\n }\n if (boundary === 'diamond') {\n return projectPointToDiamondBorder(point, rect);\n }\n return projectPointToRectBorder(point, rect);\n};\n\nexport const resolveBoundarySide = (point: Point, rect: Rect, boundary: BoundaryKind): BorderSide => {\n if (boundary === 'ellipse' || boundary === 'diamond') {\n return resolveDirectionalSide(point, rect);\n }\n return resolveNearestRectSide(point, rect);\n};\n\nexport const borderSideToInwardRotation = (side: BorderSide): number => {\n if (side === 'top') return 180;\n if (side === 'right') return -90;\n if (side === 'left') return 90;\n return 0;\n};\n","import {\n DiagramPatch,\n EngineEventMap,\n Point,\n TextData,\n TextLayoutOverflowMode,\n TextLayoutWrapMode,\n} from '../api/types';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport DiagramModel from '../models/DiagramModel';\nimport { patchUpdate } from '../utils/patches';\n\nconst POSITION_EPSILON = 1e-6;\nconst MIN_TRUNCATION_WIDTH_SAFETY_EPSILON = 0.5;\nconst FONT_SIZE_TRUNCATION_SAFETY_RATIO = 1.4;\nconst FONT_SIZE_TRUNCATION_SAFETY_BASE = 2;\n\nexport type ResolvedTextPresentation = {\n size: { width: number; height: number };\n displayContent: string;\n displayOffset?: Point;\n displayClipSize?: { width: number; height: number };\n};\n\nexport type TextLayoutServiceConfig = {\n model: DiagramModel;\n textMeasurer: TextMeasurer;\n};\n\nexport default class TextLayoutService {\n private model: DiagramModel;\n private textMeasurer: TextMeasurer;\n\n constructor(config: TextLayoutServiceConfig) {\n this.model = config.model;\n this.textMeasurer = config.textMeasurer;\n }\n\n resolveTextPresentation(text: TextData): ResolvedTextPresentation {\n const layout = text.layout;\n if (!layout) {\n const measured = this.textMeasurer.measure(text);\n return { size: measured, displayContent: text.content, displayOffset: undefined, displayClipSize: undefined };\n }\n\n const wrap = layout.wrap ?? 'none';\n const overflow = layout.overflow ?? 'clip';\n const padding = Math.max(0, layout.padding ?? 0);\n const bounds = this.resolveTextLayoutBounds(text, padding);\n const maxWidth = bounds.width;\n const maxHeight = bounds.height;\n const textRenderPadding = this.resolveTextRenderPadding(text.style);\n const horizontalRenderInset = textRenderPadding * 2;\n const verticalRenderInset = textRenderPadding * 2;\n const zeroPaddingInset = padding <= POSITION_EPSILON && this.shouldTrackOwnerBoundLayout(text) ? 0.5 : 0;\n const drawableWidth =\n maxWidth !== undefined ? Math.max(0, maxWidth - zeroPaddingInset * 2 - horizontalRenderInset) : undefined;\n const drawableHeight =\n maxHeight !== undefined ? Math.max(0, maxHeight - zeroPaddingInset * 2 - verticalRenderInset) : undefined;\n const lineHeight = this.textMeasurer.measure({ ...text, content: 'M' }).height;\n const content = text.content ?? '';\n\n const lines =\n wrap === 'none'\n ? [this.truncateToWidth(content, drawableWidth, overflow, text)]\n : this.wrapText(content, drawableWidth, wrap, text);\n\n let resolvedLines = lines.length > 0 ? lines : [''];\n const maxLinesFromHeight =\n drawableHeight !== undefined && lineHeight > 0\n ? Math.max(1, Math.floor(drawableHeight / lineHeight))\n : undefined;\n const configuredMaxLines =\n typeof layout.maxLines === 'number' && Number.isFinite(layout.maxLines)\n ? Math.max(1, Math.floor(layout.maxLines))\n : undefined;\n const effectiveMaxLines =\n configuredMaxLines !== undefined && maxLinesFromHeight !== undefined\n ? Math.min(configuredMaxLines, maxLinesFromHeight)\n : configuredMaxLines ?? maxLinesFromHeight;\n\n if (effectiveMaxLines !== undefined && resolvedLines.length > effectiveMaxLines) {\n resolvedLines = resolvedLines.slice(0, effectiveMaxLines);\n if (overflow !== 'clip' && resolvedLines.length > 0) {\n const lastIndex = resolvedLines.length - 1;\n resolvedLines[lastIndex] = this.truncateToWidth(\n resolvedLines[lastIndex],\n drawableWidth,\n 'ellipsis-end',\n text,\n );\n }\n }\n\n const lineWidths = resolvedLines.map((line) => this.measureTextWidth(text, line));\n const contentWidth = lineWidths.length > 0 ? Math.max(...lineWidths) : 0;\n const contentHeight = Math.max(lineHeight, lineHeight * resolvedLines.length);\n const contentBoxWidth = contentWidth + horizontalRenderInset;\n const contentBoxHeight = contentHeight + verticalRenderInset;\n const frameWidth = Math.max(0, maxWidth !== undefined ? maxWidth : contentBoxWidth);\n const frameHeight = Math.max(0, maxHeight !== undefined ? Math.min(contentBoxHeight, maxHeight) : contentBoxHeight);\n const clipWidth = Math.max(0, frameWidth - zeroPaddingInset * 2);\n const clipHeight = Math.max(0, frameHeight - zeroPaddingInset * 2);\n const width = frameWidth + padding * 2;\n const height = frameHeight + padding * 2;\n\n return {\n size: { width: Math.max(0, width), height: Math.max(0, height) },\n displayContent: resolvedLines.join('\\n'),\n displayOffset: { x: padding + zeroPaddingInset, y: padding + zeroPaddingInset },\n displayClipSize: { width: clipWidth, height: clipHeight },\n };\n }\n\n appendTextLayoutPatches(\n patches: DiagramPatch[],\n options?: {\n emitTextUpdated?: boolean;\n onTextUpdated?: (payload: EngineEventMap['textUpdated']) => void;\n },\n ): DiagramPatch[] {\n const resizedOwnerIds = this.collectResizedElementIds(patches);\n if (resizedOwnerIds.size === 0) return patches;\n\n const textPatches: DiagramPatch[] = [];\n this.model.texts.forEach((text) => {\n if (!text.ownerId || !resizedOwnerIds.has(text.ownerId)) return;\n const current = text.toData();\n if (!this.shouldTrackOwnerBoundLayout(current)) return;\n const resolved = this.resolveTextPresentation(current);\n const currentDisplay = current.displayContent ?? current.content;\n const sizeChanged =\n !current.size ||\n current.size.width !== resolved.size.width ||\n current.size.height !== resolved.size.height;\n const displayChanged = currentDisplay !== resolved.displayContent;\n const offsetChanged =\n (current.displayOffset?.x ?? 0) !== (resolved.displayOffset?.x ?? 0) ||\n (current.displayOffset?.y ?? 0) !== (resolved.displayOffset?.y ?? 0);\n const clipChanged =\n (current.displayClipSize?.width ?? 0) !== (resolved.displayClipSize?.width ?? 0) ||\n (current.displayClipSize?.height ?? 0) !== (resolved.displayClipSize?.height ?? 0);\n if (!sizeChanged && !displayChanged && !offsetChanged && !clipChanged) return;\n\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n textPatches.push(\n patchUpdate('text', text.id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n\n if (options?.emitTextUpdated ?? true) {\n options?.onTextUpdated?.({\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'layout',\n });\n }\n });\n\n return textPatches.length > 0 ? [...patches, ...textPatches] : patches;\n }\n\n private collectResizedElementIds(patches: DiagramPatch[]): Set<string> {\n const ids = new Set<string>();\n patches.forEach((patch) => {\n if (patch.entity !== 'element' || patch.type !== 'update' || !patch.id) return;\n if (patch.payload?.size) ids.add(patch.id);\n });\n return ids;\n }\n\n private shouldTrackOwnerBoundLayout(text: TextData): boolean {\n if (!text.layout) return false;\n const boundsMode = text.layout.boundsMode ?? (text.ownerId ? 'owner-width' : undefined);\n return boundsMode === 'owner-width' || boundsMode === 'owner-box';\n }\n\n private resolveTextLayoutBounds(text: TextData, padding: number): { width?: number; height?: number } {\n const layout = text.layout;\n if (!layout) return {};\n\n const boundsMode = layout.boundsMode ?? (text.ownerId ? 'owner-width' : undefined);\n if (boundsMode === 'fixed') {\n const width = layout.fixedSize?.width;\n const height = layout.fixedSize?.height;\n return {\n width: typeof width === 'number' ? Math.max(0, width - padding * 2) : undefined,\n height: typeof height === 'number' ? Math.max(0, height - padding * 2) : undefined,\n };\n }\n\n if ((boundsMode === 'owner-width' || boundsMode === 'owner-box') && text.ownerId) {\n const owner = this.model.getElement(text.ownerId);\n if (!owner) return {};\n const width = Math.max(0, owner.size.width - padding * 2);\n if (boundsMode === 'owner-width') return { width };\n return {\n width,\n height: Math.max(0, owner.size.height - padding * 2),\n };\n }\n\n return {};\n }\n\n private wrapText(content: string, maxWidth: number | undefined, mode: TextLayoutWrapMode, text: TextData): string[] {\n if (maxWidth === undefined || !Number.isFinite(maxWidth)) {\n return content.replace(/\\r\\n/g, '\\n').split('\\n');\n }\n\n const width = Math.max(0, maxWidth);\n const lines = content.replace(/\\r\\n/g, '\\n').split('\\n');\n const wrapped: string[] = [];\n lines.forEach((line) => {\n if (line.length === 0) {\n wrapped.push('');\n return;\n }\n const chunks = mode === 'word' ? this.wrapByWord(line, width, text) : this.wrapByChar(line, width, text);\n wrapped.push(...chunks);\n });\n return wrapped;\n }\n\n private wrapByWord(line: string, maxWidth: number, text: TextData): string[] {\n const words = line.trim().split(/\\s+/).filter((item) => item.length > 0);\n if (words.length === 0) return [''];\n\n const lines: string[] = [];\n let current = '';\n words.forEach((word) => {\n const candidate = current.length > 0 ? `${current} ${word}` : word;\n if (this.measureTextWidth(text, candidate) <= maxWidth) {\n current = candidate;\n return;\n }\n if (current.length > 0) {\n lines.push(current);\n }\n if (this.measureTextWidth(text, word) <= maxWidth) {\n current = word;\n return;\n }\n const charLines = this.wrapByChar(word, maxWidth, text);\n if (charLines.length === 0) {\n current = '';\n return;\n }\n lines.push(...charLines.slice(0, -1));\n current = charLines[charLines.length - 1];\n });\n\n if (current.length > 0) lines.push(current);\n return lines.length > 0 ? lines : [''];\n }\n\n private wrapByChar(line: string, maxWidth: number, text: TextData): string[] {\n if (maxWidth <= 0) return [''];\n const lines: string[] = [];\n let current = '';\n Array.from(line).forEach((char) => {\n const candidate = current + char;\n if (current.length === 0 || this.measureTextWidth(text, candidate) <= maxWidth) {\n current = candidate;\n return;\n }\n lines.push(current);\n current = char;\n });\n if (current.length > 0) lines.push(current);\n return lines.length > 0 ? lines : [''];\n }\n\n private truncateToWidth(\n content: string,\n maxWidth: number | undefined,\n overflow: TextLayoutOverflowMode,\n text: TextData,\n ): string {\n if (maxWidth === undefined || !Number.isFinite(maxWidth)) return content;\n if (maxWidth <= 0) return '';\n const truncationSafety = this.resolveTruncationWidthSafety(text);\n const safeWidth = Math.max(0, maxWidth - truncationSafety);\n if (this.measureTextWidth(text, content) <= safeWidth) return content;\n if (overflow === 'clip') return this.clipToWidth(content, safeWidth, text);\n\n const ellipsis = '...';\n if (this.measureTextWidth(text, ellipsis) > safeWidth) {\n return this.clipToWidth(content, safeWidth, text);\n }\n\n if (overflow === 'ellipsis-start') {\n for (let i = 0; i < content.length; i += 1) {\n const candidate = `${ellipsis}${content.slice(i)}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n return ellipsis;\n }\n\n if (overflow === 'ellipsis-middle') {\n for (let left = content.length; left >= 0; left -= 1) {\n for (let rightStart = left; rightStart <= content.length; rightStart += 1) {\n const candidate = `${content.slice(0, left)}${ellipsis}${content.slice(rightStart)}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n }\n return ellipsis;\n }\n\n for (let i = content.length; i >= 0; i -= 1) {\n const candidate = `${content.slice(0, i)}${ellipsis}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n return ellipsis;\n }\n\n private clipToWidth(content: string, maxWidth: number, text: TextData): string {\n let clipped = '';\n Array.from(content).forEach((char) => {\n const candidate = clipped + char;\n if (this.measureTextWidth(text, candidate) <= maxWidth) {\n clipped = candidate;\n }\n });\n return clipped;\n }\n\n private measureTextWidth(text: TextData, content: string): number {\n return this.textMeasurer.measure({ ...text, content }).width;\n }\n\n private resolveTruncationWidthSafety(text: TextData): number {\n const rawFontSize = text.style?.fontSize;\n let fontSize = 12;\n if (typeof rawFontSize === 'number' && Number.isFinite(rawFontSize)) {\n fontSize = rawFontSize;\n } else if (typeof rawFontSize === 'string') {\n const parsed = Number.parseFloat(rawFontSize);\n if (Number.isFinite(parsed)) {\n fontSize = parsed;\n }\n }\n const derivedSafety = FONT_SIZE_TRUNCATION_SAFETY_BASE + Math.max(0, fontSize) * FONT_SIZE_TRUNCATION_SAFETY_RATIO;\n return Math.max(MIN_TRUNCATION_WIDTH_SAFETY_EPSILON, derivedSafety);\n }\n\n private resolveTextRenderPadding(style?: Record<string, unknown>): number {\n const rawPadding = style?.padding;\n if (typeof rawPadding === 'number' && Number.isFinite(rawPadding)) {\n return Math.max(0, rawPadding);\n }\n if (typeof rawPadding === 'string') {\n const parsed = Number.parseFloat(rawPadding);\n if (Number.isFinite(parsed)) return Math.max(0, parsed);\n }\n return 0;\n }\n}\n","import { DiagramPatch, ElementData, Point } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport {\n createMoveElementCommand,\n createResizeElementCommand,\n} from './EngineCommands';\nimport CommandQueue from './CommandQueue';\n\nexport type AutoLayoutResult = { patches: DiagramPatch[]; movedPortIds: string[] };\n\nexport type AutoLayoutServiceConfig = {\n model: DiagramModel;\n commandQueue: CommandQueue;\n collectElementPortIds: (elementId: string) => string[];\n};\n\nexport default class AutoLayoutService {\n private model: DiagramModel;\n private commandQueue: CommandQueue;\n private collectElementPortIds: (elementId: string) => string[];\n\n constructor(config: AutoLayoutServiceConfig) {\n this.model = config.model;\n this.commandQueue = config.commandQueue;\n this.collectElementPortIds = config.collectElementPortIds;\n }\n\n applyLayoutForParent(parentId: string): AutoLayoutResult {\n const parent = this.model.getElement(parentId);\n if (!parent) return { patches: [], movedPortIds: [] };\n const layout = parent.layout;\n if (!layout || layout.mode === 'manual') return { patches: [], movedPortIds: [] };\n\n const children = this.model.getChildren(parentId);\n if (children.length === 0) return { patches: [], movedPortIds: [] };\n\n const axis = layout.mode;\n const padding = this.resolveLayoutPadding(layout);\n const gap = layout.gap ?? 12;\n const align = layout.align ?? 'center';\n const childFitMainAxis = layout.childFitMainAxis ?? 'none';\n const childFitCrossAxis = layout.childFitCrossAxis ?? 'none';\n const childFitMinSize = layout.childFitMinSize;\n const childFitMaxSize = layout.childFitMaxSize;\n\n const sorted = [...children].sort((a, b) => {\n const aPos = axis === 'horizontal' ? a.position.x : a.position.y;\n const bPos = axis === 'horizontal' ? b.position.x : b.position.y;\n if (aPos === bPos) return a.id.localeCompare(b.id);\n return aPos - bPos;\n });\n\n const gapCount = Math.max(0, sorted.length - 1);\n const calculateFittedSizes = (parentWidth: number, parentHeight: number) => {\n const availableWidth = Math.max(0, parentWidth - padding.x * 2);\n const availableHeight = Math.max(0, parentHeight - padding.y * 2);\n const availableMain =\n axis === 'horizontal'\n ? Math.max(0, availableWidth - gap * gapCount)\n : Math.max(0, availableHeight - gap * gapCount);\n\n const distributedMainSizes =\n childFitMainAxis === 'distribute'\n ? this.distributeLayoutSizes(\n availableMain,\n sorted.length,\n sorted.map(() =>\n axis === 'horizontal' ? childFitMinSize?.width ?? 0 : childFitMinSize?.height ?? 0,\n ),\n sorted.map(() =>\n axis === 'horizontal'\n ? childFitMaxSize?.width ?? Number.POSITIVE_INFINITY\n : childFitMaxSize?.height ?? Number.POSITIVE_INFINITY,\n ),\n )\n : null;\n\n return sorted.map((child, index) => {\n let width = child.size.width;\n let height = child.size.height;\n\n if (distributedMainSizes) {\n if (axis === 'horizontal') {\n width = distributedMainSizes[index];\n } else {\n height = distributedMainSizes[index];\n }\n }\n\n if (childFitCrossAxis === 'stretch') {\n if (axis === 'horizontal') {\n height = availableHeight;\n } else {\n width = availableWidth;\n }\n }\n\n return {\n width: this.clampLayoutSize(width, childFitMinSize?.width, childFitMaxSize?.width),\n height: this.clampLayoutSize(height, childFitMinSize?.height, childFitMaxSize?.height),\n };\n });\n };\n\n const resolveParentSize = (fittedSizes: Array<{ width: number; height: number }>) => {\n const maxWidth = Math.max(...fittedSizes.map((size) => size.width));\n const maxHeight = Math.max(...fittedSizes.map((size) => size.height));\n const totalWidth = fittedSizes.reduce((sum, size) => sum + size.width, 0);\n const totalHeight = fittedSizes.reduce((sum, size) => sum + size.height, 0);\n\n if (axis === 'horizontal') {\n return {\n width: Math.max(parent.size.width, padding.x * 2 + totalWidth + gap * gapCount),\n height: Math.max(parent.size.height, padding.y * 2 + maxHeight),\n };\n }\n return {\n width: Math.max(parent.size.width, padding.x * 2 + maxWidth),\n height: Math.max(parent.size.height, padding.y * 2 + totalHeight + gap * gapCount),\n };\n };\n\n let fittedSizes = calculateFittedSizes(parent.size.width, parent.size.height);\n let { width: newParentWidth, height: newParentHeight } = resolveParentSize(fittedSizes);\n fittedSizes = calculateFittedSizes(newParentWidth, newParentHeight);\n ({ width: newParentWidth, height: newParentHeight } = resolveParentSize(fittedSizes));\n\n const availableWidth = Math.max(0, newParentWidth - padding.x * 2);\n const availableHeight = Math.max(0, newParentHeight - padding.y * 2);\n\n let cursorX = padding.x;\n let cursorY = padding.y;\n const desiredPositions = new Map<string, Point>();\n const desiredSizes = new Map<string, { width: number; height: number }>();\n\n sorted.forEach((child, index) => {\n const fittedSize = fittedSizes[index];\n desiredSizes.set(child.id, fittedSize);\n if (axis === 'horizontal') {\n const y =\n align === 'start'\n ? padding.y\n : align === 'end'\n ? newParentHeight - padding.y - fittedSize.height\n : padding.y + Math.max(0, (availableHeight - fittedSize.height) / 2);\n desiredPositions.set(child.id, { x: cursorX, y });\n cursorX += fittedSize.width + (index < sorted.length - 1 ? gap : 0);\n } else {\n const x =\n align === 'start'\n ? padding.x\n : align === 'end'\n ? newParentWidth - padding.x - fittedSize.width\n : padding.x + Math.max(0, (availableWidth - fittedSize.width) / 2);\n desiredPositions.set(child.id, { x, y: cursorY });\n cursorY += fittedSize.height + (index < sorted.length - 1 ? gap : 0);\n }\n });\n\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n\n desiredPositions.forEach((position, childId) => {\n const child = this.model.getElement(childId);\n if (!child) return;\n if (child.position.x !== position.x || child.position.y !== position.y) {\n const movePatches = this.commandQueue.run(createMoveElementCommand(childId, position), this.model);\n patches.push(...movePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n }\n const fittedSize = desiredSizes.get(childId);\n if (fittedSize && (child.size.width !== fittedSize.width || child.size.height !== fittedSize.height)) {\n const resizePatches = this.commandQueue.run(createResizeElementCommand(childId, fittedSize), this.model);\n patches.push(...resizePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n const nested = this.applyLayoutForParent(childId);\n patches.push(...nested.patches);\n movedPortIds.push(...nested.movedPortIds);\n }\n });\n\n if (newParentWidth !== parent.size.width || newParentHeight !== parent.size.height) {\n const resizePatches = this.commandQueue.run(\n createResizeElementCommand(parentId, { width: newParentWidth, height: newParentHeight }),\n this.model,\n );\n patches.push(...resizePatches);\n movedPortIds.push(...parent.portIds);\n }\n\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n applyLayoutCascade(startParentId: string | null): AutoLayoutResult {\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const visited = new Set<string>();\n let current = startParentId;\n while (current) {\n if (visited.has(current)) break;\n visited.add(current);\n const result = this.applyLayoutForParent(current);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n const parent = this.model.getElement(current);\n current = parent?.parentId ?? null;\n }\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n applyAllLayouts(): AutoLayoutResult {\n const layoutParents = Array.from(this.model.elements.values()).filter(\n (element) => element.layout && element.layout.mode !== 'manual',\n );\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const depth = (elementId: string): number => {\n let level = 0;\n let current = this.model.getElement(elementId);\n while (current?.parentId) {\n level += 1;\n current = this.model.getElement(current.parentId);\n }\n return level;\n };\n layoutParents\n .sort((a, b) => depth(b.id) - depth(a.id))\n .forEach((element) => {\n const result = this.applyLayoutForParent(element.id);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n });\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n private resolveLayoutPadding(layout: ElementData['layout']): { x: number; y: number } {\n const padding = layout?.padding ?? 12;\n if (typeof padding === 'number') return { x: padding, y: padding };\n return {\n x: padding.x ?? 12,\n y: padding.y ?? 12,\n };\n }\n\n private clampLayoutSize(value: number, min?: number, max?: number): number {\n const minValue = min ?? 0;\n const maxValue = max ?? Number.POSITIVE_INFINITY;\n return Math.max(minValue, Math.min(maxValue, value));\n }\n\n private distributeLayoutSizes(\n total: number,\n count: number,\n minValues: number[],\n maxValues: number[],\n ): number[] {\n if (count <= 0) return [];\n const safeTotal = Math.max(0, total);\n const mins = Array.from({ length: count }, (_, index) => Math.max(0, minValues[index] ?? 0));\n const maxs = Array.from({ length: count }, (_, index) => {\n const max = maxValues[index];\n if (!Number.isFinite(max)) return Number.POSITIVE_INFINITY;\n return Math.max(mins[index], max);\n });\n const values = [...mins];\n let remaining = safeTotal - values.reduce((sum, value) => sum + value, 0);\n if (remaining <= 0) {\n return values.map((value) => Math.round(value));\n }\n\n let active = values\n .map((_, index) => index)\n .filter((index) => maxs[index] - values[index] > 1e-6);\n\n while (remaining > 1e-6 && active.length > 0) {\n const share = remaining / active.length;\n let progressed = false;\n const nextActive: number[] = [];\n\n active.forEach((index) => {\n const capacity = maxs[index] - values[index];\n if (capacity <= 1e-6) return;\n const add = Math.min(capacity, share);\n if (add > 0) {\n values[index] += add;\n remaining -= add;\n progressed = true;\n }\n if (maxs[index] - values[index] > 1e-6) {\n nextActive.push(index);\n }\n });\n\n if (!progressed) break;\n active = nextActive;\n }\n\n const floored = values.map((value) => Math.floor(value));\n let remainder = Math.round(\n values.reduce((sum, value) => sum + value, 0) - floored.reduce((sum, value) => sum + value, 0),\n );\n const fractions = values\n .map((value, index) => ({ index, fraction: value - floored[index] }))\n .sort((a, b) => b.fraction - a.fraction || a.index - b.index);\n let cursor = 0;\n while (remainder > 0 && fractions.length > 0) {\n const index = fractions[cursor % fractions.length].index;\n floored[index] += 1;\n remainder -= 1;\n cursor += 1;\n }\n return floored.map((value) => Math.max(0, value));\n }\n}\n","import { DiagramPatch, LinkData, Point, Rect } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport { ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouteContext, RouterStrategy } from '../strategies/RouterStrategy';\nimport CommandQueue from './CommandQueue';\nimport { createUpdateLinkCommand } from './EngineCommands';\n\nconst EDGE_TOLERANCE = 0.5;\n\nexport type LinkRoutingServiceConfig = {\n model: DiagramModel;\n commandQueue: CommandQueue;\n router: RouterStrategy;\n shapeRegistry: ShapeRegistry;\n};\n\nexport default class LinkRoutingService {\n private model: DiagramModel;\n private commandQueue: CommandQueue;\n private router: RouterStrategy;\n private shapeRegistry: ShapeRegistry;\n\n constructor(config: LinkRoutingServiceConfig) {\n this.model = config.model;\n this.commandQueue = config.commandQueue;\n this.router = config.router;\n this.shapeRegistry = config.shapeRegistry;\n }\n\n setRouter(router: RouterStrategy): void {\n this.router = router;\n }\n\n updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n if (portIds.length === 0) return [];\n const portIdSet = new Set(portIds);\n const patches: DiagramPatch[] = [];\n const updatedLinks = new Set<string>();\n\n this.model.links.forEach((link) => {\n if (!portIdSet.has(link.sourcePortId) && !portIdSet.has(link.targetPortId)) {\n return;\n }\n if (updatedLinks.has(link.id)) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points = this.resolveLinkPointsForUpdate(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n updatedLinks.add(link.id);\n });\n\n return patches;\n }\n\n routeLinksWithEmptyPoints(): DiagramPatch[] {\n const patches: DiagramPatch[] = [];\n this.model.links.forEach((link) => {\n if (link.points.length > 0) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points =\n (link.routing ?? 'auto') === 'manual'\n ? [{ ...source }, { ...target }]\n : this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n return patches;\n }\n\n computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n const routed = this.router.route(source, target, this.buildRouteContext(link));\n if (!routed || routed.length < 2) {\n return [{ ...source }, { ...target }];\n }\n const normalized = routed.map((point) => ({ ...point }));\n normalized[0] = { ...source };\n normalized[normalized.length - 1] = { ...target };\n return normalized;\n }\n\n private resolveLinkPointsForUpdate(link: LinkData, source: Point, target: Point): Point[] {\n const routing = link.routing ?? 'auto';\n if (routing === 'manual') {\n return this.updateManualRoute(link.points, source, target);\n }\n return this.computeAutoRoute(link, source, target);\n }\n\n private updateManualRoute(points: Point[], source: Point, target: Point): Point[] {\n if (points.length < 2) {\n return [{ ...source }, { ...target }];\n }\n return points.map((point, index) => {\n if (index === 0) return { ...source };\n if (index === points.length - 1) return { ...target };\n return { ...point };\n });\n }\n\n private buildRouteContext(link: LinkData): RouteContext {\n const sourcePort = this.model.getPort(link.sourcePortId);\n const targetPort = this.model.getPort(link.targetPortId);\n const sourceElementId = sourcePort?.elementId;\n const targetElementId = targetPort?.elementId;\n\n const sourcePosition = this.model.getPortWorldPosition(link.sourcePortId);\n const targetPosition = this.model.getPortWorldPosition(link.targetPortId);\n const sourceRect = sourceElementId ? this.getElementRect(sourceElementId) : null;\n const targetRect = targetElementId ? this.getElementRect(targetElementId) : null;\n const sourceEndpointGeometry =\n sourcePosition && sourceRect\n ? this.resolveEndpointGeometry(sourcePosition, sourceRect, sourceElementId, targetPosition ?? undefined)\n : undefined;\n const targetEndpointGeometry =\n targetPosition && targetRect\n ? this.resolveEndpointGeometry(targetPosition, targetRect, targetElementId, sourcePosition ?? undefined)\n : undefined;\n const sourceOnEdge = sourceEndpointGeometry?.onEdge ?? false;\n const targetOnEdge = targetEndpointGeometry?.onEdge ?? false;\n\n const ancestorExclusions = this.getAncestorExclusions(sourceElementId, targetElementId);\n const { bounds, boundsElementId } = this.resolveRouteBounds(sourceElementId, targetElementId);\n\n const forcedObstacles = new Set<string>();\n if (sourceElementId && sourceOnEdge) forcedObstacles.add(sourceElementId);\n if (targetElementId && targetOnEdge) forcedObstacles.add(targetElementId);\n if (boundsElementId) {\n forcedObstacles.delete(boundsElementId);\n }\n\n const excluded = new Set<string>();\n ancestorExclusions.forEach((id) => excluded.add(id));\n if (sourceElementId && !sourceOnEdge) excluded.add(sourceElementId);\n if (targetElementId && !targetOnEdge) excluded.add(targetElementId);\n if (boundsElementId) excluded.add(boundsElementId);\n\n const obstacles = Array.from(this.model.elements.values())\n .filter((element) => {\n if (forcedObstacles.has(element.id)) return true;\n if (excluded.has(element.id)) return false;\n return true;\n })\n .map((element) => {\n const position = this.model.getElementWorldPosition(element.id) ?? element.position;\n return {\n id: element.id,\n rect: {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n },\n };\n });\n\n return {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n obstacles,\n bounds,\n sourceEndpoint:\n sourcePosition && sourceRect\n ? {\n elementId: sourceElementId ?? undefined,\n rect: sourceRect,\n onEdgeSide: sourceEndpointGeometry?.onEdgeSide,\n }\n : undefined,\n targetEndpoint:\n targetPosition && targetRect\n ? {\n elementId: targetElementId ?? undefined,\n rect: targetRect,\n onEdgeSide: targetEndpointGeometry?.onEdgeSide,\n }\n : undefined,\n };\n }\n\n private resolveEndpointGeometry(\n point: Point,\n rect: Rect,\n elementId?: string,\n oppositePoint?: Point,\n ): { onEdge: boolean; onEdgeSide?: 'left' | 'right' | 'top' | 'bottom' } {\n const shape = this.resolveElementShape(elementId);\n const onEdge = shape?.projectToBorder\n ? this.isPointOnProjectedBorder(point, rect, shape.projectToBorder, EDGE_TOLERANCE)\n : this.isPointOnRectEdge(point, rect, EDGE_TOLERANCE);\n let onEdgeSide = onEdge ? shape?.resolveBorderSide?.(point, rect) ?? this.resolveEdgeSide(point, rect) : undefined;\n if (onEdgeSide && oppositePoint) {\n onEdgeSide = this.resolveCornerTieBreakSide(point, rect, oppositePoint, onEdgeSide);\n }\n return { onEdge, onEdgeSide };\n }\n\n private resolveCornerTieBreakSide(\n point: Point,\n rect: Rect,\n oppositePoint: Point,\n currentSide: 'left' | 'right' | 'top' | 'bottom',\n ): 'left' | 'right' | 'top' | 'bottom' {\n const onLeft = Math.abs(point.x - rect.x) <= EDGE_TOLERANCE;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= EDGE_TOLERANCE;\n const onTop = Math.abs(point.y - rect.y) <= EDGE_TOLERANCE;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= EDGE_TOLERANCE;\n const horizontalSide = onLeft ? 'left' : onRight ? 'right' : null;\n const verticalSide = onTop ? 'top' : onBottom ? 'bottom' : null;\n if (!horizontalSide || !verticalSide) {\n return currentSide;\n }\n const direction = {\n x: oppositePoint.x - point.x,\n y: oppositePoint.y - point.y,\n };\n const horizontalScore = horizontalSide === 'left' ? -direction.x : direction.x;\n const verticalScore = verticalSide === 'top' ? -direction.y : direction.y;\n if (Math.abs(horizontalScore - verticalScore) <= 1e-6) {\n return currentSide;\n }\n return verticalScore > horizontalScore ? verticalSide : horizontalSide;\n }\n\n private resolveElementShape(elementId?: string) {\n if (!elementId) return undefined;\n const element = this.model.getElement(elementId);\n if (!element) return undefined;\n return this.shapeRegistry.get(element.shapeId);\n }\n\n private isPointOnProjectedBorder(\n point: Point,\n rect: Rect,\n projectToBorder: (point: Point, rect: Rect) => Point,\n tolerance: number,\n ): boolean {\n const projected = projectToBorder(point, rect);\n return Math.abs(projected.x - point.x) <= tolerance && Math.abs(projected.y - point.y) <= tolerance;\n }\n\n private getElementRect(elementId: string): Rect | null {\n const element = this.model.getElement(elementId);\n if (!element) return null;\n const position = this.model.getElementWorldPosition(elementId) ?? element.position;\n return {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n };\n }\n\n private getAncestorChain(elementId: string): string[] {\n const chain: string[] = [];\n let currentId: string | null = elementId;\n while (currentId) {\n const element = this.model.getElement(currentId);\n if (!element) break;\n chain.push(element.id);\n currentId = element.parentId ?? null;\n }\n return chain;\n }\n\n private getAncestorExclusions(sourceElementId?: string, targetElementId?: string): Set<string> {\n const exclusions = new Set<string>();\n if (sourceElementId) {\n this.getAncestorChain(sourceElementId).forEach((id) => exclusions.add(id));\n }\n if (targetElementId) {\n this.getAncestorChain(targetElementId).forEach((id) => exclusions.add(id));\n }\n return exclusions;\n }\n\n private resolveRouteBounds(\n sourceElementId?: string,\n targetElementId?: string,\n ): { bounds?: Rect; boundsElementId?: string } {\n if (!sourceElementId || !targetElementId) return {};\n if (sourceElementId === targetElementId) return {};\n\n const sourceChain = this.getAncestorChain(sourceElementId);\n if (sourceChain.includes(targetElementId)) {\n const rect = this.getElementRect(targetElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: targetElementId };\n }\n }\n\n const targetChain = this.getAncestorChain(targetElementId);\n if (targetChain.includes(sourceElementId)) {\n const rect = this.getElementRect(sourceElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: sourceElementId };\n }\n }\n\n return {};\n }\n\n private isPointOnRectEdge(point: Point, rect: Rect, tolerance: number): boolean {\n const withinX = point.x >= rect.x - tolerance && point.x <= rect.x + rect.width + tolerance;\n const withinY = point.y >= rect.y - tolerance && point.y <= rect.y + rect.height + tolerance;\n if (!withinX || !withinY) return false;\n const onLeft = Math.abs(point.x - rect.x) <= tolerance;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= tolerance;\n const onTop = Math.abs(point.y - rect.y) <= tolerance;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= tolerance;\n return onLeft || onRight || onTop || onBottom;\n }\n\n private resolveEdgeSide(point: Point, rect: Rect): 'left' | 'right' | 'top' | 'bottom' | undefined {\n const distances: Array<{ side: 'left' | 'right' | 'top' | 'bottom'; value: number }> = [\n { side: 'left', value: Math.abs(point.x - rect.x) },\n { side: 'right', value: Math.abs(point.x - (rect.x + rect.width)) },\n { side: 'top', value: Math.abs(point.y - rect.y) },\n { side: 'bottom', value: Math.abs(point.y - (rect.y + rect.height)) },\n ];\n const nearest = distances.reduce((best, current) => (current.value < best.value ? current : best), distances[0]);\n return nearest.value <= EDGE_TOLERANCE ? nearest.side : undefined;\n }\n}\n","import { DiagramPatch } from '../api/types';\nimport { AutoLayoutResult } from './AutoLayoutService';\n\nexport type MutationPipelineConfig = {\n routeLinksWithEmptyPoints: () => DiagramPatch[];\n reprojectBorderPortsForResizedElements: (\n patches: DiagramPatch[],\n ) => { patches: DiagramPatch[]; movedPortIds: string[] };\n updateLinksForPorts: (portIds: string[]) => DiagramPatch[];\n};\n\nexport type MutationPipelineRunOptions = {\n basePatches: DiagramPatch[];\n layoutSteps?: Array<() => AutoLayoutResult>;\n movedPortIds?: string[];\n includeEmptyLinkRouting?: boolean;\n};\n\nexport default class MutationPipeline {\n private routeLinksWithEmptyPoints: () => DiagramPatch[];\n private reprojectBorderPortsForResizedElements: (\n patches: DiagramPatch[],\n ) => { patches: DiagramPatch[]; movedPortIds: string[] };\n private updateLinksForPorts: (portIds: string[]) => DiagramPatch[];\n\n constructor(config: MutationPipelineConfig) {\n this.routeLinksWithEmptyPoints = config.routeLinksWithEmptyPoints;\n this.reprojectBorderPortsForResizedElements = config.reprojectBorderPortsForResizedElements;\n this.updateLinksForPorts = config.updateLinksForPorts;\n }\n\n run(options: MutationPipelineRunOptions): DiagramPatch[] {\n const allPatches: DiagramPatch[] = [...options.basePatches];\n const movedPortIds = new Set(options.movedPortIds ?? []);\n\n (options.layoutSteps ?? []).forEach((step) => {\n const result = step();\n allPatches.push(...result.patches);\n result.movedPortIds.forEach((id) => movedPortIds.add(id));\n });\n\n if (options.includeEmptyLinkRouting) {\n allPatches.push(...this.routeLinksWithEmptyPoints());\n }\n\n const normalizedBorderPorts = this.reprojectBorderPortsForResizedElements(allPatches);\n allPatches.push(...normalizedBorderPorts.patches);\n normalizedBorderPorts.movedPortIds.forEach((id) => movedPortIds.add(id));\n\n const reroutePortIds = Array.from(movedPortIds);\n if (reroutePortIds.length > 0) {\n allPatches.push(...this.updateLinksForPorts(reroutePortIds));\n }\n\n return allPatches;\n }\n}\n","import {\n DiagramEngineHandle,\n DiagramPatch,\n DiagramState,\n ElementData,\n EngineEventMap,\n ElementDropEvent,\n EnginePointerInfo,\n LinkData,\n ElementLinkConnectingEvent,\n LinkRoutingMode,\n MoveConstraint,\n OverlayShapeConfig,\n OverlayShapeHandle,\n Point,\n PortData,\n PortAnchor,\n Rect,\n RerouteLinksOptions,\n TextData,\n ElementPortMovementPolicy,\n HostAnchorPreset,\n PortMouseEvent,\n} from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport CommandQueue from './CommandQueue';\nimport EventBus from './EventBus';\nimport SelectionState from './SelectionState';\nimport ViewportState from './ViewportState';\nimport {\n createAddElementCommand,\n createAddLinkCommand,\n createAddPortCommand,\n createAddTextCommand,\n createLoadCommand,\n createMoveElementCommand,\n createMovePortCommand,\n createRemoveElementCommand,\n createRemoveLinkCommand,\n createRemovePortCommand,\n createRemoveTextCommand,\n createResizeElementCommand,\n createMoveTextCommand,\n createUpdateLinkCommand,\n createUpdateTextCommand,\n createSetElementLayoutCommand,\n} from './EngineCommands';\nimport { Renderer } from '../renderer/Renderer';\nimport RenderScheduler from '../renderer/RenderScheduler';\nimport ObstacleRouter from '../strategies/ObstacleRouter';\nimport DefaultSnapper from '../strategies/DefaultSnapper';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { ShapeDefinition, ShapeRegistry, ShapeResizeHandle } from '../renderer/RenderTypes';\nimport CanvasTextMeasurer from '../measure/CanvasTextMeasurer';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport { clamp } from '../utils/geometry';\nimport { patchRemove, patchUpdate } from '../utils/patches';\nimport { projectPointToBoundary } from '../utils/borderGeometry';\nimport TextLayoutService from './TextLayoutService';\nimport AutoLayoutService from './AutoLayoutService';\nimport LinkRoutingService from './LinkRoutingService';\nimport MutationPipeline from './MutationPipeline';\n\nconst clampToRect = (point: Point, rect: Rect): Point => ({\n x: clamp(point.x, rect.x, rect.x + rect.width),\n y: clamp(point.y, rect.y, rect.y + rect.height),\n});\n\nconst snapToRectBorder = (point: Point, rect: Rect): Point => {\n const clamped = clampToRect(point, rect);\n const left = Math.abs(clamped.x - rect.x);\n const right = Math.abs(clamped.x - (rect.x + rect.width));\n const top = Math.abs(clamped.y - rect.y);\n const bottom = Math.abs(clamped.y - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return { x: rect.x, y: clamped.y };\n if (min === right) return { x: rect.x + rect.width, y: clamped.y };\n if (min === top) return { x: clamped.x, y: rect.y };\n return { x: clamped.x, y: rect.y + rect.height };\n};\n\nconst POSITION_EPSILON = 1e-6;\nconst ANCHOR_PRESET_FALLBACK_ORDER: HostAnchorPreset[] = ['vertices', 'cardinal'];\n\nexport type DiagramEngineConfig = {\n renderer: Renderer;\n scheduler?: RenderScheduler;\n router?: RouterStrategy;\n snapper?: SnapStrategy;\n shapeRegistry?: ShapeRegistry;\n textMeasurer?: TextMeasurer;\n};\n\nexport default class DiagramEngine {\n private model = new DiagramModel();\n private events = new EventBus<EngineEventMap>();\n private commandQueue = new CommandQueue();\n private selection = new SelectionState();\n private viewport = new ViewportState();\n private renderer: Renderer;\n private scheduler: RenderScheduler;\n private snapper: SnapStrategy;\n private shapeRegistry: ShapeRegistry;\n private textLayoutService: TextLayoutService;\n private autoLayoutService: AutoLayoutService;\n private linkRoutingService: LinkRoutingService;\n private mutationPipeline: MutationPipeline;\n\n constructor(config: DiagramEngineConfig) {\n this.renderer = config.renderer;\n this.scheduler = config.scheduler ?? new RenderScheduler();\n const router = config.router ?? new ObstacleRouter();\n this.snapper = config.snapper ?? new DefaultSnapper();\n this.shapeRegistry = config.shapeRegistry ?? new ShapeRegistry();\n const textMeasurer = config.textMeasurer ?? new CanvasTextMeasurer();\n this.textLayoutService = new TextLayoutService({ model: this.model, textMeasurer });\n this.autoLayoutService = new AutoLayoutService({\n model: this.model,\n commandQueue: this.commandQueue,\n collectElementPortIds: (elementId) => this.collectElementPortIds(elementId),\n });\n this.linkRoutingService = new LinkRoutingService({\n model: this.model,\n commandQueue: this.commandQueue,\n router,\n shapeRegistry: this.shapeRegistry,\n });\n this.mutationPipeline = new MutationPipeline({\n routeLinksWithEmptyPoints: () => this.routeLinksWithEmptyPoints(),\n reprojectBorderPortsForResizedElements: (patches) => this.reprojectBorderPortsForResizedElements(patches),\n updateLinksForPorts: (portIds) => this.updateLinksForPorts(portIds),\n });\n }\n\n static create(config: DiagramEngineConfig): DiagramEngine {\n return new DiagramEngine(config);\n }\n\n load(state: DiagramState): void {\n const patches = this.commandQueue.run(createLoadCommand(state), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyAllLayouts()],\n includeEmptyLinkRouting: true,\n });\n this.emitChange(allPatches);\n }\n\n getState(): DiagramState {\n return this.model.toState();\n }\n\n getViewport(): { pan: Point; zoom: number } {\n return { pan: { ...this.viewport.pan }, zoom: this.viewport.zoom };\n }\n\n clientToWorld(clientPoint: Point, container: { getBoundingClientRect: () => { left: number; top: number } }): Point {\n const rect = container.getBoundingClientRect();\n const { pan, zoom } = this.getViewport();\n const safeZoom = zoom === 0 ? 1 : zoom;\n return {\n x: (clientPoint.x - rect.left - pan.x) / safeZoom,\n y: (clientPoint.y - rect.top - pan.y) / safeZoom,\n };\n }\n\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\n return this.renderer.createOverlayShape(config);\n }\n\n on<TEvent extends keyof EngineEventMap>(event: TEvent, handler: (payload: EngineEventMap[TEvent]) => void): () => void {\n return this.events.subscribe(event, handler);\n }\n\n addElement(element: ElementData): void {\n const patches = this.commandQueue.run(createAddElementCommand(element), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutCascade(element.parentId ?? null)],\n });\n this.emitChange(allPatches);\n }\n\n moveElementTo(id: string, x: number, y: number): void {\n const oldWorld = this.model.getElementWorldPosition(id);\n const snapped = this.snapper.snap({ x, y });\n const element = this.model.getElement(id);\n let position = snapped;\n if (element?.parentId) {\n const parentPosition = this.model.getElementWorldPosition(element.parentId);\n if (parentPosition) {\n position = {\n x: snapped.x - parentPosition.x,\n y: snapped.y - parentPosition.y,\n };\n const parent = this.model.getElement(element.parentId);\n if (parent && element.moveMode && element.moveMode !== 'free') {\n const widthLimit = Math.max(0, parent.size.width - element.size.width);\n const heightLimit = Math.max(0, parent.size.height - element.size.height);\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: widthLimit,\n height: heightLimit,\n };\n if (element.anchorCenter) {\n bounds = element.moveMode === 'inside'\n ? {\n x: element.size.width / 2,\n y: element.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: parent.size.width,\n height: parent.size.height,\n };\n }\n position = element.moveMode === 'inside' ? clampToRect(position, bounds) : snapToRectBorder(position, bounds);\n }\n }\n }\n const patches = this.commandQueue.run(createMoveElementCommand(id, position), this.model);\n const movedPortIds: string[] = [];\n if (element) {\n movedPortIds.push(...this.collectElementPortIds(element.id));\n }\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutCascade(element?.parentId ?? null)],\n movedPortIds,\n });\n this.emitChange(allPatches);\n\n const newWorld = this.model.getElementWorldPosition(id);\n if (oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('elementMoved', {\n elementId: id,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n resizeElement(id: string, width: number, height: number): void {\n const element = this.model.getElement(id);\n const oldSize = element?.size;\n const patches = this.commandQueue.run(createResizeElementCommand(id, { width, height }), this.model);\n const movedPortIds = element ? this.collectElementPortIds(element.id) : [];\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutForParent(id), () => this.applyLayoutCascade(element?.parentId ?? null)],\n movedPortIds,\n });\n this.emitChange(allPatches);\n const newSize = this.model.getElement(id)?.size;\n if (oldSize && newSize && (oldSize.width !== newSize.width || oldSize.height !== newSize.height)) {\n this.events.emit('elementResized', { elementId: id, oldSize: { ...oldSize }, newSize: { ...newSize } });\n }\n }\n\n setElementLayout(id: string, layout: ElementData['layout']): void {\n const patches = this.commandQueue.run(createSetElementLayoutCommand(id, layout), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [\n () => this.applyLayoutForParent(id),\n () => this.applyLayoutCascade(this.model.getElement(id)?.parentId ?? null),\n ],\n });\n this.emitChange(allPatches);\n }\n\n removeElement(id: string): void {\n const existing = this.model.getElement(id);\n const parentId = existing?.parentId ?? null;\n const before = this.model.toState();\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n const allPatches = this.mutationPipeline.run({\n basePatches: removal.patches,\n layoutSteps: [() => this.applyLayoutCascade(parentId)],\n });\n this.emitChange(allPatches);\n if (existing) {\n this.events.emit('elementDeleted', { elementId: id });\n }\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addPortToElement(elementId: string, port: PortData): void {\n const element = this.model.getElement(elementId);\n const nextPort: PortData = { ...port, elementId };\n if (element) {\n const constrained = this.resolveConstrainedPortRelativePosition(nextPort, element, nextPort.position);\n nextPort.position = constrained.position;\n nextPort.currentAnchorId = constrained.currentAnchorId ?? undefined;\n }\n const patches = this.commandQueue.run(createAddPortCommand(nextPort), this.model);\n this.emitChange(patches);\n }\n\n movePortTo(id: string, x: number, y: number): void {\n const snapped = this.snapper.snap({ x, y });\n const port = this.model.getPort(id);\n const oldWorld = this.model.getPortWorldPosition(id);\n let position = snapped;\n let currentAnchorId: string | null | undefined;\n if (port) {\n const elementPosition = this.model.getElementWorldPosition(port.elementId);\n if (elementPosition) {\n const requestedRelative = {\n x: snapped.x - elementPosition.x,\n y: snapped.y - elementPosition.y,\n };\n const element = this.model.getElement(port.elementId);\n if (element) {\n const constrained = this.resolveConstrainedPortRelativePosition(port, element, requestedRelative);\n position = constrained.position;\n currentAnchorId = constrained.currentAnchorId;\n } else {\n position = requestedRelative;\n }\n }\n }\n const moveUpdate: { position: Point; currentAnchorId?: string | null } = { position };\n if (currentAnchorId !== undefined) {\n moveUpdate.currentAnchorId = currentAnchorId;\n }\n const patches = this.commandQueue.run(createMovePortCommand(id, moveUpdate), this.model);\n if (port) {\n patches.push(...this.updateLinksForPorts([port.id]));\n }\n this.emitChange(patches);\n\n const newWorld = this.model.getPortWorldPosition(id);\n if (port && oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('portMoved', {\n portId: id,\n elementId: port.elementId,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n removePort(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addLink(link: LinkData): void {\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n const routing = link.routing ?? 'auto';\n let points = link.points;\n if (source && target) {\n if (routing === 'auto') {\n points = this.computeAutoRoute(link, source, target);\n } else if (points.length < 2) {\n points = [{ ...source }, { ...target }];\n }\n }\n const patches = this.commandQueue.run(\n createAddLinkCommand({ ...link, points, routing }),\n this.model\n );\n this.emitChange(patches);\n }\n\n updateLinkPoints(id: string, points: Point[]): void {\n const patches = this.commandQueue.run(\n createUpdateLinkCommand(id, { points, routing: 'manual' }),\n this.model\n );\n this.emitChange(patches);\n }\n\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\n const link = this.model.getLink(id);\n if (!link) return;\n const update: { points?: Point[]; routing: LinkRoutingMode } = { routing: mode };\n if (mode === 'auto') {\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (source && target) {\n update.points = this.computeAutoRoute(link, source, target);\n }\n }\n const patches = this.commandQueue.run(createUpdateLinkCommand(id, update), this.model);\n this.emitChange(patches);\n }\n\n rerouteAllLinks(): void {\n const linkIds: string[] = [];\n this.model.links.forEach((link) => {\n if ((link.routing ?? 'auto') === 'auto') {\n linkIds.push(link.id);\n }\n });\n this.rerouteLinks(linkIds);\n }\n\n rerouteLinks(linkIds: string[], options?: RerouteLinksOptions): void {\n const includeManual = Boolean(options?.includeManual);\n const patches: DiagramPatch[] = [];\n const visited = new Set<string>();\n\n linkIds.forEach((id) => {\n if (visited.has(id)) return;\n visited.add(id);\n const link = this.model.getLink(id);\n if (!link) return;\n const routing = link.routing ?? 'auto';\n if (routing === 'manual' && !includeManual) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points = this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n\n if (patches.length > 0) {\n this.emitChange(patches);\n }\n }\n\n removeLink(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addText(text: TextData): void {\n const resolved = this.resolveTextPresentation(text);\n const patches = this.commandQueue.run(\n createAddTextCommand({\n ...text,\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n this.model,\n );\n this.emitChange(patches);\n }\n\n updateText(id: string, content: string): void {\n const patches = this.commandQueue.run(createUpdateTextCommand(id, content), this.model);\n const text = this.model.getText(id);\n if (text) {\n const resolved = this.resolveTextPresentation(text.toData());\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n patches.push(\n patchUpdate('text', id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n this.events.emit('textUpdated', {\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'content',\n });\n }\n this.emitChange(patches);\n }\n\n moveTextTo(id: string, x: number, y: number): void {\n const text = this.model.getText(id);\n if (!text) return;\n let position: Point = { x, y };\n if (text.ownerId) {\n const element = this.model.getElement(text.ownerId);\n if (element) {\n const elementPosition = this.model.getElementWorldPosition(text.ownerId);\n if (elementPosition) {\n position = { x: x - elementPosition.x, y: y - elementPosition.y };\n }\n } else {\n const port = this.model.getPort(text.ownerId);\n if (port) {\n const portPosition = this.model.getPortWorldPosition(text.ownerId);\n if (portPosition) {\n position = { x: x - portPosition.x, y: y - portPosition.y };\n }\n } else {\n const link = this.model.getLink(text.ownerId);\n if (link) {\n const midpoint = this.model.getLinkMidpoint(text.ownerId);\n if (midpoint) {\n position = { x: x - midpoint.x, y: y - midpoint.y };\n }\n }\n }\n }\n }\n const patches = this.commandQueue.run(createMoveTextCommand(id, position), this.model);\n this.emitChange(patches);\n }\n\n removeText(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n setSelection(ids: string[]): void {\n this.selection.set(ids);\n this.emitSelection();\n }\n\n toggleSelection(id: string): void {\n this.selection.toggle(id);\n this.emitSelection();\n }\n\n getSelection(): string[] {\n return this.selection.get();\n }\n\n getElementWorldPosition(id: string): Point | null {\n return this.model.getElementWorldPosition(id);\n }\n\n getElementRotation(id: string): number {\n const element = this.model.getElement(id);\n if (!element) return 0;\n const shape = this.shapeRegistry.get(element.shapeId);\n const baseRotation = shape?.baseRotation ?? 0;\n const instanceRotation = (element.style?.rotation as number | undefined) ?? 0;\n return baseRotation + instanceRotation;\n }\n\n normalizeElementResize(\n id: string,\n proposal: { x: number; y: number; width: number; height: number },\n handle: ShapeResizeHandle,\n minSize = 20,\n ): { x: number; y: number; width: number; height: number } {\n const clamped = {\n x: proposal.x,\n y: proposal.y,\n width: Math.max(minSize, proposal.width),\n height: Math.max(minSize, proposal.height),\n };\n const element = this.model.getElement(id);\n if (!element) return clamped;\n\n const shape = this.shapeRegistry.get(element.shapeId);\n if (!shape?.normalizeResize) return clamped;\n\n const normalized = shape.normalizeResize({\n element: element.toData(),\n handle,\n minSize,\n proposal: { width: clamped.width, height: clamped.height },\n });\n const width = Math.max(minSize, normalized.width);\n const height = Math.max(minSize, normalized.height);\n\n let x = clamped.x;\n let y = clamped.y;\n if (handle === 'sw' || handle === 'nw') {\n x += clamped.width - width;\n }\n if (handle === 'ne' || handle === 'nw') {\n y += clamped.height - height;\n }\n\n return { x, y, width, height };\n }\n\n getPortWorldPosition(id: string): Point | null {\n return this.model.getPortWorldPosition(id);\n }\n\n getTextWorldPosition(id: string): Point | null {\n return this.model.getTextWorldPosition(id);\n }\n\n getPortElementId(portId: string): string | null {\n return this.model.getPort(portId)?.elementId ?? null;\n }\n\n deleteSelection(): void {\n const selected = this.selection.get();\n if (selected.length === 0) return;\n const before = this.model.toState();\n\n const elementIds: string[] = [];\n const portIds: string[] = [];\n const linkIds: string[] = [];\n const textIds: string[] = [];\n selected.forEach((id) => {\n if (this.model.getElement(id)) elementIds.push(id);\n else if (this.model.getPort(id)) portIds.push(id);\n else if (this.model.getLink(id)) linkIds.push(id);\n else if (this.model.getText(id)) textIds.push(id);\n });\n\n selected.forEach((id) => {\n if (this.model.getElement(id)) {\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n return;\n }\n if (this.model.getPort(id)) {\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n return;\n }\n if (this.model.getLink(id)) {\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n return;\n }\n if (this.model.getText(id)) {\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n }\n });\n\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n elementIds.forEach((elementId) => this.events.emit('elementDeleted', { elementId }));\n this.selection.clear();\n this.emitSelection();\n }\n\n setViewport(pan: Point, zoom: number): void {\n const hasPanChange = this.viewport.pan.x !== pan.x || this.viewport.pan.y !== pan.y;\n const hasZoomChange = this.viewport.zoom !== zoom;\n if (!hasPanChange && !hasZoomChange) return;\n\n this.viewport.setPan(pan);\n this.viewport.setZoom(zoom);\n this.emitChange(\n [\n {\n type: 'viewport',\n entity: 'viewport',\n payload: { pan: { ...pan }, zoom },\n },\n ],\n { render: false },\n );\n }\n\n setRouting(router: RouterStrategy): void {\n this.linkRoutingService.setRouter(router);\n this.events.emit('config', { type: 'routing' });\n }\n\n setSnapping(snapper: SnapStrategy): void {\n this.snapper = snapper;\n this.events.emit('config', { type: 'snapping' });\n }\n\n registerShape(shape: ShapeDefinition): void {\n this.shapeRegistry.register(shape);\n this.events.emit('config', { type: 'rendering' });\n }\n\n render(): void {\n this.renderer.render(this.model);\n }\n\n emitElementDrop(event: ElementDropEvent): void {\n this.events.emit('element-drop', event);\n this.events.emit('elementDrop', event);\n this.events.emit('elementDragged', event);\n }\n\n emitPaperClick(pointer: EnginePointerInfo): void {\n this.events.emit('paperClick', { pointer });\n }\n\n emitPortMouseDown(event: PortMouseEvent): void {\n this.events.emit('portMouseDown', event);\n }\n\n emitPortMouseUp(event: PortMouseEvent): void {\n this.events.emit('portMouseUp', event);\n }\n\n emitElementClick(elementId: string, pointer: EnginePointerInfo, isMulti: boolean): void {\n this.events.emit('elementClick', { elementId, pointer, isMulti });\n }\n\n emitElementLinkStarted(event: { sourcePortId: string; sourceElementId: string; startWorld: Point }): void {\n this.events.emit('elementLinkStarted', event);\n }\n\n emitElementLinkConnecting(event: ElementLinkConnectingEvent): boolean {\n let cancelled = false;\n const payload: ElementLinkConnectingEvent = {\n ...event,\n cancelled: false,\n cancel: () => {\n cancelled = true;\n payload.cancelled = true;\n },\n };\n this.events.emit('elementLinkConnecting', payload);\n return cancelled || payload.cancelled;\n }\n\n emitElementLinkEnded(event: {\n sourcePortId: string;\n sourceElementId: string;\n linkId?: string;\n targetPortId?: string;\n targetElementId?: string;\n cancelled: boolean;\n }): void {\n this.events.emit('elementLinkEnded', event);\n }\n\n private emitChange(patches: DiagramPatch[], options?: { render?: boolean; emitTextUpdated?: boolean }): void {\n const allPatches = this.appendTextLayoutPatches(patches, options?.emitTextUpdated ?? true);\n const state = this.model.toState();\n this.events.emit('change', { patches: allPatches, state });\n if (options?.render === false) return;\n this.scheduler.requestRender(() => this.renderer.render(this.model));\n }\n\n private appendTextLayoutPatches(patches: DiagramPatch[], emitTextUpdated: boolean): DiagramPatch[] {\n return this.textLayoutService.appendTextLayoutPatches(patches, {\n emitTextUpdated,\n onTextUpdated: (payload) => this.events.emit('textUpdated', payload),\n });\n }\n\n private reprojectBorderPortsForResizedElements(\n patches: DiagramPatch[],\n ): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const resizedElements = this.collectResizedElementSizes(patches);\n if (resizedElements.size === 0) return { patches: [], movedPortIds: [] };\n\n const reprojectionPatches: DiagramPatch[] = [];\n const movedPortIds = new Set<string>();\n\n resizedElements.forEach((sizeInfo, elementId) => {\n const host = this.model.getElement(elementId);\n if (!host) return;\n host.portIds.forEach((portId) => {\n const port = this.model.getPort(portId);\n if (!port) return;\n const effectiveMoveMode = this.resolveEffectivePortMoveMode(port, host);\n if (!effectiveMoveMode || effectiveMoveMode === 'free' || effectiveMoveMode === 'inside') return;\n if (effectiveMoveMode === 'anchors') {\n const anchored = this.resolveAnchoredPortResizeProjection(port, host, sizeInfo, host.size);\n const unchanged =\n Math.abs(anchored.position.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(anchored.position.y - port.position.y) <= POSITION_EPSILON &&\n anchored.currentAnchorId === (port.currentAnchorId ?? null);\n if (unchanged) return;\n const patchesForPort = this.commandQueue.run(\n createMovePortCommand(port.id, {\n position: anchored.position,\n currentAnchorId: anchored.currentAnchorId,\n }),\n this.model,\n );\n reprojectionPatches.push(...patchesForPort);\n movedPortIds.add(port.id);\n return;\n }\n const projected = this.resolveBorderPortResizeProjection(port.position, host.shapeId, sizeInfo, host.size);\n const unchanged =\n Math.abs(projected.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(projected.y - port.position.y) <= POSITION_EPSILON;\n if (unchanged) return;\n const patchesForPort = this.commandQueue.run(\n createMovePortCommand(port.id, { position: projected, currentAnchorId: null }),\n this.model,\n );\n reprojectionPatches.push(...patchesForPort);\n movedPortIds.add(port.id);\n });\n });\n\n return { patches: reprojectionPatches, movedPortIds: Array.from(movedPortIds) };\n }\n\n private collectResizedElementSizes(\n patches: DiagramPatch[],\n ): Map<string, { previousSize?: { width: number; height: number }; size: { width: number; height: number } }> {\n const resized = new Map<string, { previousSize?: { width: number; height: number }; size: { width: number; height: number } }>();\n patches.forEach((patch) => {\n if (patch.entity !== 'element' || patch.type !== 'update' || !patch.id || !patch.payload?.size) return;\n const payload = patch.payload as {\n size?: { width?: number; height?: number };\n previousSize?: { width?: number; height?: number };\n };\n if (typeof payload.size?.width !== 'number' || typeof payload.size?.height !== 'number') return;\n const existing = resized.get(patch.id);\n const previousSize =\n existing?.previousSize ??\n (typeof payload.previousSize?.width === 'number' && typeof payload.previousSize?.height === 'number'\n ? { width: payload.previousSize.width, height: payload.previousSize.height }\n : undefined);\n resized.set(patch.id, {\n previousSize,\n size: { width: payload.size.width, height: payload.size.height },\n });\n });\n return resized;\n }\n\n private resolveBorderPortResizeProjection(\n position: Point,\n shapeId: string,\n resize: { previousSize?: { width: number; height: number }; size: { width: number; height: number } },\n currentSize: { width: number; height: number },\n ): Point {\n const nextSize = {\n width: Math.max(0, currentSize.width),\n height: Math.max(0, currentSize.height),\n };\n const previousSize = resize.previousSize\n ? {\n width: Math.max(0, resize.previousSize.width),\n height: Math.max(0, resize.previousSize.height),\n }\n : undefined;\n if (!previousSize || (previousSize.width <= POSITION_EPSILON && previousSize.height <= POSITION_EPSILON)) {\n return this.projectPointToHostBorder(position, shapeId, nextSize);\n }\n\n const previousCenter = { x: previousSize.width / 2, y: previousSize.height / 2 };\n const nextCenter = { x: nextSize.width / 2, y: nextSize.height / 2 };\n const previousProjected = this.projectPointToHostBorder(position, shapeId, previousSize);\n const previousHalfWidth = previousSize.width / 2;\n const previousHalfHeight = previousSize.height / 2;\n const nextHalfWidth = nextSize.width / 2;\n const nextHalfHeight = nextSize.height / 2;\n const normalizedX =\n previousHalfWidth > POSITION_EPSILON ? (previousProjected.x - previousCenter.x) / previousHalfWidth : 0;\n const normalizedY =\n previousHalfHeight > POSITION_EPSILON ? (previousProjected.y - previousCenter.y) / previousHalfHeight : 0;\n const projectedTarget = {\n x: nextCenter.x + normalizedX * nextHalfWidth,\n y: nextCenter.y + normalizedY * nextHalfHeight,\n };\n return this.projectPointToHostBorder(projectedTarget, shapeId, nextSize);\n }\n\n private resolveConstrainedPortRelativePosition(\n port: Pick<PortData, 'position' | 'size' | 'style' | 'moveMode' | 'anchorCenter' | 'currentAnchorId'>,\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n requestedPosition: Point,\n ): { position: Point; currentAnchorId: string | null } {\n let position = { ...requestedPosition };\n const effectiveMoveMode = this.resolveEffectivePortMoveMode(port, element);\n\n if (effectiveMoveMode && effectiveMoveMode !== 'free' && effectiveMoveMode !== 'anchors') {\n const widthLimit = Math.max(0, element.size.width - (port.size?.width ?? 0));\n const heightLimit = Math.max(0, element.size.height - (port.size?.height ?? 0));\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n if (port.anchorCenter && port.size) {\n bounds = effectiveMoveMode === 'inside'\n ? {\n x: port.size.width / 2,\n y: port.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n }\n position = effectiveMoveMode === 'inside'\n ? clampToRect(position, bounds)\n : this.constrainPortToHostBorder(position, element);\n }\n\n const style = port.style as\n | { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' }\n | undefined;\n if (style?.moveAxis === 'horizontal') {\n position.y = port.position.y;\n } else if (style?.moveAxis === 'vertical') {\n position.x = port.position.x;\n }\n if (style?.moveBounds) {\n const bounds = style.moveBounds;\n position.x = clamp(position.x, bounds.x, bounds.x + bounds.width);\n position.y = clamp(position.y, bounds.y, bounds.y + bounds.height);\n }\n\n if (effectiveMoveMode === 'anchors') {\n const anchor = this.resolveNearestPortAnchor(element, position);\n if (anchor) {\n return {\n position: { ...anchor.position },\n currentAnchorId: anchor.id,\n };\n }\n return { position, currentAnchorId: port.currentAnchorId ?? null };\n }\n\n return { position, currentAnchorId: null };\n }\n\n private resolveEffectivePortMoveMode(\n port: Pick<PortData, 'moveMode'>,\n element: Pick<ElementData, 'portMovement'>,\n ): MoveConstraint | 'anchors' | undefined {\n return element.portMovement?.moveMode ?? port.moveMode;\n }\n\n private resolvePortAnchorsForElement(\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n ): PortAnchor[] {\n const shape = this.shapeRegistry.get(element.shapeId);\n if (!shape?.resolvePortAnchors) return [];\n const rect: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n const explicitPreset = element.portMovement?.anchorConstraint?.preset;\n const presetOrder: HostAnchorPreset[] = [];\n if (explicitPreset) {\n presetOrder.push(explicitPreset);\n }\n ANCHOR_PRESET_FALLBACK_ORDER.forEach((preset) => {\n if (!presetOrder.includes(preset)) {\n presetOrder.push(preset);\n }\n });\n for (const preset of presetOrder) {\n const anchors = shape.resolvePortAnchors(rect, { preset });\n if (anchors.length > 0) return anchors;\n }\n return [];\n }\n\n private resolveNearestPortAnchor(\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n target: Point,\n preferredAnchorId?: string,\n ): PortAnchor | null {\n const anchors = this.resolvePortAnchorsForElement(element);\n if (anchors.length === 0) return null;\n if (preferredAnchorId) {\n const preferred = anchors.find((anchor) => anchor.id === preferredAnchorId);\n if (preferred) return preferred;\n }\n return this.findNearestPortAnchor(target, anchors);\n }\n\n private findNearestPortAnchor(target: Point, anchors: PortAnchor[]): PortAnchor {\n return anchors.reduce((best, current) => {\n const bestDistance = (best.position.x - target.x) ** 2 + (best.position.y - target.y) ** 2;\n const currentDistance = (current.position.x - target.x) ** 2 + (current.position.y - target.y) ** 2;\n return currentDistance < bestDistance ? current : best;\n }, anchors[0]);\n }\n\n private resolveAnchoredPortResizeProjection(\n port: Pick<PortData, 'position' | 'currentAnchorId'>,\n host: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n resize: { previousSize?: { width: number; height: number }; size: { width: number; height: number } },\n currentSize: { width: number; height: number },\n ): { position: Point; currentAnchorId: string | null } {\n const nextSize = {\n width: Math.max(0, currentSize.width),\n height: Math.max(0, currentSize.height),\n };\n const nextHost: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'> = {\n shapeId: host.shapeId,\n size: nextSize,\n portMovement: host.portMovement,\n };\n const preferred = this.resolveNearestPortAnchor(nextHost, port.position, port.currentAnchorId);\n if (preferred && preferred.id === port.currentAnchorId) {\n return { position: { ...preferred.position }, currentAnchorId: preferred.id };\n }\n\n const previousSize = resize.previousSize\n ? {\n width: Math.max(0, resize.previousSize.width),\n height: Math.max(0, resize.previousSize.height),\n }\n : undefined;\n let projectedTarget = { ...port.position };\n if (previousSize && (previousSize.width > POSITION_EPSILON || previousSize.height > POSITION_EPSILON)) {\n const previousCenter = { x: previousSize.width / 2, y: previousSize.height / 2 };\n const nextCenter = { x: nextSize.width / 2, y: nextSize.height / 2 };\n const previousHalfWidth = previousSize.width / 2;\n const previousHalfHeight = previousSize.height / 2;\n const nextHalfWidth = nextSize.width / 2;\n const nextHalfHeight = nextSize.height / 2;\n const normalizedX =\n previousHalfWidth > POSITION_EPSILON ? (port.position.x - previousCenter.x) / previousHalfWidth : 0;\n const normalizedY =\n previousHalfHeight > POSITION_EPSILON ? (port.position.y - previousCenter.y) / previousHalfHeight : 0;\n projectedTarget = {\n x: nextCenter.x + normalizedX * nextHalfWidth,\n y: nextCenter.y + normalizedY * nextHalfHeight,\n };\n }\n\n const fallback = this.resolveNearestPortAnchor(nextHost, projectedTarget);\n if (!fallback) {\n return { position: { ...port.position }, currentAnchorId: port.currentAnchorId ?? null };\n }\n return {\n position: { ...fallback.position },\n currentAnchorId: fallback.id,\n };\n }\n\n private resolveTextPresentation(text: TextData): {\n size: { width: number; height: number };\n displayContent: string;\n displayOffset?: Point;\n displayClipSize?: { width: number; height: number };\n } {\n return this.textLayoutService.resolveTextPresentation(text);\n }\n\n private emitSelection(): void {\n const selectedIds = this.selection.get();\n this.events.emit('selection', { selectedIds });\n selectedIds.forEach((id) => {\n const element = this.model.getElement(id);\n if (element) {\n this.events.emit('elementSelected', { elementId: id });\n return;\n }\n const port = this.model.getPort(id);\n if (port) {\n this.events.emit('portSelected', { portId: id, elementId: port.elementId });\n return;\n }\n const text = this.model.getText(id);\n if (text) {\n this.events.emit('textSelected', { textId: id });\n }\n });\n this.renderer.renderSelection(selectedIds);\n }\n\n private applyLayoutForParent(parentId: string): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyLayoutForParent(parentId);\n }\n\n private applyLayoutCascade(startParentId: string | null): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyLayoutCascade(startParentId);\n }\n\n private applyAllLayouts(): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyAllLayouts();\n }\n\n private updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n return this.linkRoutingService.updateLinksForPorts(portIds);\n }\n\n private collectElementPortIds(elementId: string): string[] {\n const childrenByParent = new Map<string, string[]>();\n this.model.elements.forEach((element) => {\n if (!element.parentId) return;\n const list = childrenByParent.get(element.parentId) ?? [];\n list.push(element.id);\n childrenByParent.set(element.parentId, list);\n });\n\n const portIds: string[] = [];\n const stack = [elementId];\n while (stack.length > 0) {\n const currentId = stack.pop();\n if (!currentId) continue;\n const element = this.model.getElement(currentId);\n if (element) {\n portIds.push(...element.portIds);\n }\n const children = childrenByParent.get(currentId);\n if (children) {\n children.forEach((childId) => stack.push(childId));\n }\n }\n return portIds;\n }\n\n private computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n return this.linkRoutingService.computeAutoRoute(link, source, target);\n }\n\n private constrainPortToHostBorder(\n position: Point,\n element: { shapeId: string; size: { width: number; height: number } },\n ): Point {\n return this.projectPointToHostBorder(position, element.shapeId, element.size);\n }\n\n private projectPointToHostBorder(\n position: Point,\n shapeId: string,\n size: { width: number; height: number },\n ): Point {\n const rect: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, size.width),\n height: Math.max(0, size.height),\n };\n const shape = this.shapeRegistry.get(shapeId);\n if (shape?.projectToBorder) {\n return shape.projectToBorder(position, rect);\n }\n return projectPointToBoundary(position, rect, 'rect');\n }\n\n private routeLinksWithEmptyPoints(): DiagramPatch[] {\n return this.linkRoutingService.routeLinksWithEmptyPoints();\n }\n\n private computeRemovalDiff(before: DiagramState): {\n patches: DiagramPatch[];\n removed: { ports: PortData[]; links: LinkData[]; texts: TextData[] };\n } {\n const after = this.model.toState();\n const removedPatches: DiagramPatch[] = [];\n const beforeElements = new Set(before.elements.map((element) => element.id));\n const beforePorts = new Set(before.ports.map((port) => port.id));\n const beforeLinks = new Set(before.links.map((link) => link.id));\n const beforeTexts = new Set(before.texts.map((text) => text.id));\n\n const afterElements = new Set(after.elements.map((element) => element.id));\n const afterPorts = new Set(after.ports.map((port) => port.id));\n const afterLinks = new Set(after.links.map((link) => link.id));\n const afterTexts = new Set(after.texts.map((text) => text.id));\n\n beforeElements.forEach((id) => {\n if (!afterElements.has(id)) removedPatches.push(patchRemove('element', id));\n });\n const removedPorts: PortData[] = [];\n beforePorts.forEach((id) => {\n if (!afterPorts.has(id)) {\n removedPatches.push(patchRemove('port', id));\n const removedPort = before.ports.find((port) => port.id === id);\n if (removedPort) removedPorts.push(removedPort);\n }\n });\n const removedLinks: LinkData[] = [];\n beforeLinks.forEach((id) => {\n if (!afterLinks.has(id)) {\n removedPatches.push(patchRemove('link', id));\n const removedLink = before.links.find((link) => link.id === id);\n if (removedLink) removedLinks.push(removedLink);\n }\n });\n const removedTexts: TextData[] = [];\n beforeTexts.forEach((id) => {\n if (!afterTexts.has(id)) {\n removedPatches.push(patchRemove('text', id));\n const removedText = before.texts.find((text) => text.id === id);\n if (removedText) removedTexts.push(removedText);\n }\n });\n\n return {\n patches: removedPatches,\n removed: { ports: removedPorts, links: removedLinks, texts: removedTexts },\n };\n }\n\n private emitEntityDeletionEvents(removed: { ports: PortData[]; links: LinkData[]; texts: TextData[] }): void {\n removed.ports.forEach((port) => {\n this.events.emit('portDeleted', { portId: port.id, elementId: port.elementId });\n });\n removed.links.forEach((link) => {\n this.events.emit('linkDeleted', {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n });\n });\n removed.texts.forEach((text) => {\n this.events.emit('textDeleted', { textId: text.id, ownerId: text.ownerId });\n });\n }\n}\n\nexport const createDiagramEngine = (config: DiagramEngineConfig): DiagramEngineHandle => {\n const engine = new DiagramEngine(config);\n return {\n load: (state) => engine.load(state),\n getState: () => engine.getState(),\n getViewport: () => engine.getViewport(),\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\n createOverlayShape: (config) => engine.createOverlayShape(config),\n on: (event, handler) => engine.on(event, handler),\n addElement: (element) => engine.addElement(element),\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\n removeElement: (id) => engine.removeElement(id),\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\n removePort: (id) => engine.removePort(id),\n addLink: (link) => engine.addLink(link),\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\n rerouteAllLinks: () => engine.rerouteAllLinks(),\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\n removeLink: (id) => engine.removeLink(id),\n addText: (text) => engine.addText(text),\n updateText: (id, content) => engine.updateText(id, content),\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\n removeText: (id) => engine.removeText(id),\n setSelection: (ids) => engine.setSelection(ids),\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n };\n};\n","export type KonvaLayerLike = {\r\n name?: string;\r\n draw: () => void;\r\n destroy?: () => void;\r\n add?: (node: unknown) => void;\r\n};\r\n\r\nexport default class KonvaLayers {\r\n private layers = new Map<string, KonvaLayerLike>();\r\n private dirty = new Set<string>();\r\n\r\n addLayer(name: string, layer: KonvaLayerLike): void {\r\n this.layers.set(name, layer);\r\n }\r\n\r\n getLayer(name: string): KonvaLayerLike | undefined {\r\n return this.layers.get(name);\r\n }\r\n\r\n markDirty(name: string): void {\r\n if (this.layers.has(name)) {\r\n this.dirty.add(name);\r\n }\r\n }\r\n\r\n markAllDirty(): void {\r\n Array.from(this.layers.keys()).forEach((name) => this.dirty.add(name));\r\n }\r\n\r\n drawDirty(): void {\r\n const names = Array.from(this.dirty.values());\r\n names.forEach((name) => {\r\n const layer = this.layers.get(name);\r\n if (layer) {\r\n layer.draw();\r\n }\r\n });\r\n this.dirty.clear();\r\n }\r\n\r\n destroy(): void {\r\n Array.from(this.layers.values()).forEach((layer) => layer.destroy?.());\r\n this.layers.clear();\r\n this.dirty.clear();\r\n }\r\n}\r\n","import { ElementData, LinkData, Point, PortData, TextData } from '../../api/types';\nimport { ShapeDefinition, ShapeNodeSizeUpdater, ShapeRegistry } from '../RenderTypes';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\n\r\nexport type KonvaNodeLike = {\r\n id?: () => string;\r\n setAttrs?: (attrs: Record<string, unknown>) => void;\r\n destroy?: () => void;\r\n position?: (pos: { x: number; y: number }) => void;\r\n x?: (value?: number) => number;\r\n y?: (value?: number) => number;\r\n getAttr?: (key: string) => unknown;\r\n getClientRect?: (config?: Record<string, unknown>) => { width: number; height: number };\r\n attrs?: Record<string, unknown>;\r\n moveToTop?: () => void;\r\n zIndex?: (value?: number) => number;\r\n};\r\n\r\nexport type KonvaLike = {\r\n Group: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Rect: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Circle: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Line: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Path: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Text: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Shape: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n};\r\n\r\nlet cachedKonva: KonvaLike | null = null;\r\n\r\nconst getKonva = (): KonvaLike => {\r\n if (cachedKonva) return cachedKonva;\r\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as KonvaLike | { default?: KonvaLike };\r\n const resolved = (module as { default?: KonvaLike }).default ?? module;\r\n cachedKonva = resolved as KonvaLike;\r\n return cachedKonva;\r\n};\r\n\r\nexport default class KonvaNodeFactory {\r\n private registry: ShapeRegistry;\r\n private konva: KonvaLike;\r\n\r\n constructor(registry: ShapeRegistry, konva: KonvaLike = getKonva()) {\r\n this.registry = registry;\r\n this.konva = konva;\r\n }\r\n\r\n createElementNode(model: ElementData): KonvaNodeLike {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n const node = shape.createNode(model) as KonvaNodeLike;\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.svgPath) {\n const node = this.createSvgPathNode(model, shape, { name: 'element', size: model.size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.draw) {\n const node = this.createDrawNode(model, shape, { name: 'element', size: model.size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n const node = new this.konva.Group({\r\n x: model.position.x,\r\n y: model.position.y,\r\n id: model.id,\r\n name: 'element',\r\n });\r\n return node;\r\n }\r\n\r\n createPortNode(model: PortData): KonvaNodeLike {\n if (model.shapeId) {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n const node = shape.createNode(model) as KonvaNodeLike;\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.svgPath) {\n const size = model.size ?? { width: 8, height: 8 };\n const node = this.createSvgPathNode(model, shape, { name: 'port', size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.draw) {\n const size = model.size ?? { width: 8, height: 8 };\n const node = this.createDrawNode(model, shape, { name: 'port', size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n }\n const node = new this.konva.Circle({\r\n x: model.position.x,\r\n y: model.position.y,\r\n id: model.id,\r\n radius: 4,\r\n name: 'port',\r\n });\r\n return node;\r\n }\r\n\r\n createLinkNode(model: LinkData): KonvaNodeLike {\r\n const flatPoints: number[] = [];\r\n model.points.forEach((point) => {\r\n flatPoints.push(point.x, point.y);\r\n });\r\n const style = model.style as Record<string, unknown> | undefined;\r\n const strokeWidth = (style?.strokeWidth as number | undefined) ?? 2;\r\n const hitStrokeWidth = (style?.hitStrokeWidth as number | undefined) ?? 15;\r\n const stroke = (style?.stroke as string | undefined) ?? 'black';\r\n const node = new this.konva.Line({\r\n points: flatPoints,\r\n id: model.id,\r\n stroke,\r\n strokeWidth,\r\n hitStrokeWidth,\r\n name: 'link',\r\n ...(style ?? {}),\r\n });\r\n if (node.setAttrs) {\r\n node.setAttrs({ __baseStroke: stroke, __baseStrokeWidth: strokeWidth });\r\n }\r\n return node;\r\n }\r\n\r\n createTextNode(model: TextData): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const defaults = resolveTextStyleDefaults(style);\n const baseFill = (style?.fill as string | undefined) ?? 'black';\n const displayOffset = model.displayOffset ?? { x: 0, y: 0 };\n const clip = model.displayClipSize;\n const node = new this.konva.Text({\n x: model.position.x + displayOffset.x,\n y: model.position.y + displayOffset.y,\n text: model.displayContent ?? model.content,\n id: model.id,\n name: 'text',\n fontSize: defaults.fontSize,\n fontFamily: defaults.fontFamily,\n lineHeight: defaults.lineHeight,\n ...(style ?? {}),\n width: clip?.width,\n height: clip?.height,\n wrap: clip ? 'none' : undefined,\n ellipsis: false,\n // Keep metadata for tests/debugging; Konva clip attrs do not apply on Text nodes.\n clipX: clip ? 0 : undefined,\n clipY: clip ? 0 : undefined,\n clipWidth: clip?.width,\n clipHeight: clip?.height,\n });\n if (node.setAttrs) {\r\n node.setAttrs({ __baseFill: baseFill });\r\n }\r\n return node;\r\n }\r\n\r\n createHandleNode(config: { id: string; x: number; y: number; size: number; name: string }): KonvaNodeLike {\r\n return new this.konva.Rect({\r\n id: config.id,\r\n x: config.x,\r\n y: config.y,\r\n width: config.size,\r\n height: config.size,\r\n fill: '#ffffff',\r\n stroke: '#ff7a00',\r\n strokeWidth: 2,\r\n name: config.name,\r\n });\r\n }\r\n\r\n createHandleCircleNode(config: { id: string; x: number; y: number; radius: number; name: string }): KonvaNodeLike {\r\n return new this.konva.Circle({\r\n id: config.id,\r\n x: config.x,\r\n y: config.y,\r\n radius: config.radius,\r\n fill: '#ffffff',\r\n stroke: '#ff7a00',\r\n strokeWidth: 2,\r\n name: config.name,\r\n });\r\n }\r\n\r\n createTempLinkNode(config: { id: string; points: number[] }): KonvaNodeLike {\r\n return new this.konva.Line({\r\n id: config.id,\r\n points: config.points,\r\n stroke: '#999999',\r\n dash: [6, 4],\r\n strokeWidth: 2,\r\n name: 'temp-link',\r\n listening: false,\r\n });\r\n }\r\n\r\n createMarqueeNode(config: { id: string; x: number; y: number; width: number; height: number }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\r\n y: config.y,\r\n width: config.width,\r\n height: config.height,\r\n fill: 'rgba(66, 133, 244, 0.12)',\r\n stroke: '#4285f4',\r\n strokeWidth: 1,\r\n dash: [4, 4],\r\n name: 'marquee',\r\n listening: false,\n });\n }\n\n createHoverControlEdgeLineNode(config: {\n id: string;\n start: Point;\n end: Point;\n style?: Record<string, unknown>;\n }): KonvaNodeLike {\n return new this.konva.Line({\n id: config.id,\n points: [config.start.x, config.start.y, config.end.x, config.end.y],\n stroke: '#ff7a00',\n strokeWidth: 3,\n name: 'shape-hover-edge',\n listening: false,\n ...(config.style ?? {}),\n });\n }\n\n createHoverControlIconNode(config: {\n id: string;\n position: Point;\n svgPath: string;\n size?: { width: number; height: number };\n style?: Record<string, unknown>;\n }): KonvaNodeLike {\n const targetSize = config.size ?? { width: 16, height: 16 };\n const node = new this.konva.Path({\n id: config.id,\n x: config.position.x,\n y: config.position.y,\n data: config.svgPath,\n name: 'shape-hover-control',\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n ...(config.style ?? {}),\n });\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\n const baseWidth = rect?.width || targetSize.width || 1;\n const baseHeight = rect?.height || targetSize.height || 1;\n const scaleX = targetSize.width > 0 ? targetSize.width / baseWidth : 1;\n const scaleY = targetSize.height > 0 ? targetSize.height / baseHeight : 1;\n if (node.setAttrs) {\n node.setAttrs({\n offsetX: baseWidth / 2,\n offsetY: baseHeight / 2,\n scaleX,\n scaleY,\n __hoverIconBaseWidth: baseWidth,\n __hoverIconBaseHeight: baseHeight,\n });\n }\n return node;\n }\n\r\n private createDrawNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const attrs: Record<string, unknown> = {\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n name: config.name,\n ...(style ?? {}),\n __shapeDraw: true,\n __model: model,\n sceneFunc: (ctx: CanvasRenderingContext2D, node: KonvaNodeLike) => {\n const resolvedModel =\n (node.getAttr ? node.getAttr('__model') : node.attrs?.__model) ?? model;\n shape.draw?.({ ctx, model: resolvedModel as ElementData | PortData });\r\n },\r\n };\r\n if (config.size?.width !== undefined) {\r\n attrs.width = config.size.width;\r\n }\r\n if (config.size?.height !== undefined) {\r\n attrs.height = config.size.height;\r\n }\r\n return new this.konva.Shape(attrs);\r\n }\r\n\r\n private createSvgPathNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const sizeUpdater: ShapeNodeSizeUpdater = ({\n size: nextSize,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n }) => {\n const attrs: Record<string, unknown> = {};\n const baseWidth = getNodeAttr<number>('__pathBaseWidth') ?? nextSize.width;\n const baseHeight = getNodeAttr<number>('__pathBaseHeight') ?? nextSize.height;\n if (baseWidth) {\n attrs.scaleX = nextSize.width / baseWidth;\n }\n if (baseHeight) {\n attrs.scaleY = nextSize.height / baseHeight;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? baseWidth / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? baseHeight / 2 : 0;\n }\n return attrs;\n };\n\n const size = config.size ?? { width: 0, height: 0 };\n const node = new this.konva.Path({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n data: shape.svgPath,\n name: config.name,\n ...(style ?? {}),\n shapeKind: 'svg-path',\n __autoOffsetX: true,\n __autoOffsetY: true,\n });\n\r\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\r\n const baseWidth = shape.svgSize?.width ?? rect?.width ?? size.width;\r\n const baseHeight = shape.svgSize?.height ?? rect?.height ?? size.height;\r\n const scaleX = baseWidth === 0 ? 1 : size.width / baseWidth;\r\n const scaleY = baseHeight === 0 ? 1 : size.height / baseHeight;\r\n\r\n if (node.setAttrs) {\n node.setAttrs({\n scaleX,\n scaleY,\n __pathBaseWidth: baseWidth,\n __pathBaseHeight: baseHeight,\n __sizeUpdater: sizeUpdater,\n });\n }\n return node;\n }\n\n private applyShapeBehaviorAttrs(node: KonvaNodeLike, shape: ShapeDefinition): void {\n if (!node.setAttrs || !shape.sizeUpdater) return;\n node.setAttrs({\n __sizeUpdater: shape.sizeUpdater,\n });\n }\n}\n","import { ElementData, EllipseMidPoint, LinkData, OverlayShapeConfig, OverlayShapeHandle, Point, PortData } from '../../api/types';\nimport DiagramModel from '../../models/DiagramModel';\nimport ElementModel from '../../models/ElementModel';\nimport { ShapeNodeSizeUpdater, ShapeRegistry } from '../RenderTypes';\nimport { Renderer } from '../Renderer';\nimport KonvaLayers, { KonvaLayerLike } from './KonvaLayers';\nimport KonvaNodeFactory, { KonvaLike, KonvaNodeLike } from './KonvaNodeFactory';\nimport { borderSideToInwardRotation, resolveBoundarySide } from '../../utils/borderGeometry';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\nimport { getRotatedRectCorners } from '../../utils/geometry';\n\r\nexport type KonvaStageLike = {\r\n add: (layer: KonvaLayerLike) => void;\r\n width?: (value?: number) => number;\r\n height?: (value?: number) => number;\r\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n};\r\n\r\nexport type KonvaRendererConfig = {\n stage?: KonvaStageLike;\r\n container?: HTMLDivElement | string;\r\n width?: number;\r\n height?: number;\r\n nodeFactory?: KonvaNodeFactory;\r\n konva?: KonvaLike & { Stage: new (config: Record<string, unknown>) => KonvaStageLike; Layer: new () => KonvaLayerLike };\r\n shapeRegistry?: ShapeRegistry;\n};\n\nexport type ShapeHoverControlRenderConfig = {\n controlId: string;\n targetKind: 'edge' | 'vertex' | 'midpoint' | 'ellipse-midpoint';\n targetIndex: number;\n targetRef?: string;\n elementId: string;\n targetId: string;\n icon: {\n svgPath: string;\n size?: { width: number; height: number };\n style?: Record<string, unknown>;\n };\n edge?: {\n start: Point;\n end: Point;\n midpoint: Point;\n lineStyle?: Record<string, unknown>;\n };\n vertex?: {\n position: Point;\n };\n ellipseMidPoint?: {\n id: EllipseMidPoint;\n position: Point;\n };\n};\n\r\nlet cachedKonva: KonvaRendererConfig['konva'] | null = null;\r\n\r\nconst getKonva = (): NonNullable<KonvaRendererConfig['konva']> => {\r\n if (cachedKonva) return cachedKonva as NonNullable<KonvaRendererConfig['konva']>;\r\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as KonvaRendererConfig['konva'] | { default?: KonvaRendererConfig['konva'] };\r\n const resolved = (module as { default?: KonvaRendererConfig['konva'] }).default ?? module;\r\n cachedKonva = resolved as KonvaRendererConfig['konva'];\r\n return resolved as NonNullable<KonvaRendererConfig['konva']>;\r\n};\r\n\r\nexport default class KonvaRenderer implements Renderer {\r\n private stage: KonvaStageLike;\n private layers = new KonvaLayers();\n private nodeFactory: KonvaNodeFactory;\n private shapeRegistry: ShapeRegistry;\n private elementNodes = new Map<string, KonvaNodeLike>();\r\n private portNodes = new Map<string, KonvaNodeLike>();\r\n private linkNodes = new Map<string, KonvaNodeLike>();\r\n private textNodes = new Map<string, KonvaNodeLike>();\r\n private selectedIds = new Set<string>();\r\n private overlayLayer: KonvaLayerLike;\r\n private tempLinkNode: KonvaNodeLike | null = null;\r\n private tempPortNode: KonvaNodeLike | null = null;\r\n private tempPortShapeId: string | undefined;\r\n private marqueeNode: KonvaNodeLike | null = null;\r\n private resizeHandleNodes = new Map<string, KonvaNodeLike>();\r\n private linkHandleNodes = new Map<string, KonvaNodeLike>();\n private shapeHoverControlNodes: { edgeLine?: KonvaNodeLike; icon?: KonvaNodeLike } | null = null;\n private overlayShapes = new Map<string, { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig }>();\n private overlayId = 0;\n\r\n constructor(config: KonvaRendererConfig = {}) {\n const konva = config.konva ?? getKonva();\n const registry = config.shapeRegistry ?? new ShapeRegistry();\n this.shapeRegistry = registry;\n this.nodeFactory = config.nodeFactory ?? new KonvaNodeFactory(registry, konva);\n\r\n if (config.stage) {\r\n this.stage = config.stage;\r\n } else {\r\n this.stage = new (konva as NonNullable<typeof konva>).Stage({\r\n container: config.container ?? undefined,\r\n width: config.width ?? 800,\r\n height: config.height ?? 600,\r\n });\r\n }\r\n\r\n const elementLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const linkLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const portLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const textLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const overlayLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n\r\n this.layers.addLayer('elements', elementLayer);\r\n this.layers.addLayer('links', linkLayer);\r\n this.layers.addLayer('ports', portLayer);\r\n this.layers.addLayer('texts', textLayer);\r\n this.layers.addLayer('overlays', overlayLayer);\r\n this.stage.add(elementLayer);\r\n this.stage.add(linkLayer);\r\n this.stage.add(portLayer);\r\n this.stage.add(textLayer);\r\n this.stage.add(overlayLayer);\r\n\r\n this.overlayLayer = overlayLayer;\r\n }\r\n\r\n render(model: DiagramModel): void {\r\n this.syncElements(model);\r\n this.syncPorts(model);\r\n this.syncLinks(model);\r\n this.syncTexts(model);\r\n this.layers.drawDirty();\r\n }\r\n\r\n renderSelection(ids: string[]): void {\r\n this.selectedIds = new Set(ids);\r\n this.elementNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\r\n strokeWidth: isSelected ? 3 : 2,\r\n });\r\n });\r\n this.portNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\r\n strokeWidth: isSelected ? 3 : 2,\r\n });\r\n });\r\n this.linkNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n const baseStroke =\r\n this.getNodeAttr<string>(node, '__baseStroke') ??\r\n this.getNodeAttr<string>(node, 'stroke') ??\r\n 'black';\r\n const baseStrokeWidth =\r\n this.getNodeAttr<number>(node, '__baseStrokeWidth') ??\r\n this.getNodeAttr<number>(node, 'strokeWidth') ??\r\n 2;\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : baseStroke,\r\n strokeWidth: isSelected ? baseStrokeWidth + 1 : baseStrokeWidth,\r\n });\r\n });\r\n this.textNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n const baseFill =\r\n this.getNodeAttr<string>(node, '__baseFill') ??\r\n this.getNodeAttr<string>(node, 'fill') ??\r\n 'black';\r\n node.setAttrs({\r\n fill: isSelected ? '#ff7a00' : baseFill,\r\n __baseFill: baseFill,\r\n });\r\n });\r\n this.layers.markDirty('elements');\r\n this.layers.markDirty('ports');\r\n this.layers.markDirty('links');\r\n this.layers.markDirty('texts');\r\n }\r\n\r\n renderResizeHandles(\n elementId: string,\n position: Point,\n size: { width: number; height: number },\n options?: { rotation?: number; anchorCenter?: boolean },\n ): void {\n this.clearResizeHandles();\n const handleSize = 8;\n const half = handleSize / 2;\n const rotated = getRotatedRectCorners(\n position,\n size,\n options?.rotation ?? 0,\n options?.anchorCenter ?? false,\n );\n const corners: Array<[string, number, number]> = [\n ['nw', rotated.nw.x, rotated.nw.y],\n ['ne', rotated.ne.x, rotated.ne.y],\n ['sw', rotated.sw.x, rotated.sw.y],\n ['se', rotated.se.x, rotated.se.y],\n ];\n\r\n corners.forEach(([handle, x, y]) => {\r\n const node = this.nodeFactory.createHandleNode({\r\n id: `resize:${elementId}:${handle}`,\r\n x: x - half,\r\n y: y - half,\r\n size: handleSize,\r\n name: 'resize-handle',\r\n });\r\n this.resizeHandleNodes.set(`${elementId}:${handle}`, node);\r\n this.overlayLayer.add?.(node);\r\n });\r\n this.drawOverlays();\r\n }\r\n\r\n clearResizeHandles(): void {\r\n this.resizeHandleNodes.forEach((node) => node.destroy?.());\r\n this.resizeHandleNodes.clear();\r\n this.drawOverlays();\r\n }\r\n\r\n renderLinkHandles(linkId: string, points: Point[]): void {\r\n this.clearLinkHandles();\r\n const radius = 5;\r\n points.forEach((point, index) => {\r\n const node = this.nodeFactory.createHandleCircleNode({\r\n id: `link-handle:${linkId}:${index}`,\r\n x: point.x,\r\n y: point.y,\r\n radius,\r\n name: 'link-handle',\r\n });\r\n this.linkHandleNodes.set(`${linkId}:${index}`, node);\r\n this.overlayLayer.add?.(node);\r\n });\r\n this.drawOverlays();\r\n }\r\n\r\n clearLinkHandles(): void {\r\n this.linkHandleNodes.forEach((node) => node.destroy?.());\r\n this.linkHandleNodes.clear();\r\n this.drawOverlays();\r\n }\r\n\r\n renderTempLink(points: Point[]): void {\r\n const flatPoints: number[] = [];\r\n points.forEach((point) => flatPoints.push(point.x, point.y));\r\n if (!this.tempLinkNode) {\r\n this.tempLinkNode = this.nodeFactory.createTempLinkNode({\r\n id: 'temp-link',\r\n points: flatPoints,\r\n });\r\n this.overlayLayer.add?.(this.tempLinkNode);\r\n } else if (this.tempLinkNode.setAttrs) {\r\n this.tempLinkNode.setAttrs({ points: flatPoints });\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n renderPortPlaceholder(\n port: PortData,\n hostElement?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ): void {\n const shapeId = port.shapeId;\n if (!this.tempPortNode || this.tempPortShapeId !== shapeId) {\n this.tempPortNode?.destroy?.();\n const node = this.nodeFactory.createPortNode(port);\n if (node.setAttrs) {\n node.setAttrs({ listening: false, opacity: 0.6, name: 'port-placeholder' });\r\n }\r\n this.tempPortNode = node;\r\n this.tempPortShapeId = shapeId;\r\n this.overlayLayer.add?.(node);\r\n } else {\n this.updatePosition(this.tempPortNode, port.position);\n if (this.tempPortNode.setAttrs) {\n this.tempPortNode.setAttrs({ opacity: 0.6 });\n }\n }\n if (this.tempPortNode) {\n this.applyPortOrientation(this.tempPortNode, port, port.position, undefined, hostElement);\n }\n this.drawOverlays();\n }\n\r\n clearPortPlaceholder(): void {\r\n this.tempPortNode?.destroy?.();\r\n this.tempPortNode = null;\r\n this.tempPortShapeId = undefined;\r\n this.drawOverlays();\r\n }\r\n\r\n clearTempLink(): void {\r\n this.tempLinkNode?.destroy?.();\r\n this.tempLinkNode = null;\r\n this.drawOverlays();\r\n }\r\n\r\n renderMarquee(rect: { x: number; y: number; width: number; height: number }): void {\r\n if (!this.marqueeNode) {\r\n this.marqueeNode = this.nodeFactory.createMarqueeNode({\r\n id: 'marquee',\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n });\r\n this.overlayLayer.add?.(this.marqueeNode);\r\n } else if (this.marqueeNode.setAttrs) {\r\n this.marqueeNode.setAttrs(rect);\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n clearMarquee(): void {\n this.marqueeNode?.destroy?.();\n this.marqueeNode = null;\n this.drawOverlays();\n }\n\n renderShapeHoverControl(config: ShapeHoverControlRenderConfig): void {\n this.clearShapeHoverControl(false);\n let edgeLine: KonvaNodeLike | undefined;\n if (config.targetKind === 'edge' && config.edge) {\n edgeLine = this.nodeFactory.createHoverControlEdgeLineNode({\n id: `shape-hover-edge:${config.elementId}:${config.targetId}`,\n start: config.edge.start,\n end: config.edge.end,\n style: config.edge.lineStyle,\n });\n this.overlayLayer.add?.(edgeLine);\n }\n const iconPosition =\n config.targetKind === 'edge' || config.targetKind === 'midpoint'\n ? config.edge?.midpoint\n : config.targetKind === 'ellipse-midpoint'\n ? config.ellipseMidPoint?.position\n : config.vertex?.position;\n if (!iconPosition) {\n this.shapeHoverControlNodes = edgeLine ? { edgeLine } : null;\n this.drawOverlays();\n return;\n }\n const targetRef = config.targetRef ?? String(config.targetIndex);\n const icon = this.nodeFactory.createHoverControlIconNode({\n id: `shape-hover-control:${config.elementId}:${config.controlId}:${config.targetKind}:${targetRef}`,\n position: iconPosition,\n svgPath: config.icon.svgPath,\n size: config.icon.size,\n style: config.icon.style,\n });\n this.overlayLayer.add?.(icon);\n this.shapeHoverControlNodes = { edgeLine, icon };\n this.drawOverlays();\n }\n\n clearShapeHoverControl(draw = true): void {\n if (!this.shapeHoverControlNodes) return;\n this.shapeHoverControlNodes.edgeLine?.destroy?.();\n this.shapeHoverControlNodes.icon?.destroy?.();\n this.shapeHoverControlNodes = null;\n if (draw) {\n this.drawOverlays();\n }\n }\n\r\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\r\n const id = `overlay-${this.overlayId++}`;\r\n const record = this.createOverlayRecord(id, config);\r\n this.overlayShapes.set(id, record);\r\n this.drawOverlays();\r\n\r\n return {\r\n update: (next) => {\r\n this.updateOverlayRecord(id, next);\r\n },\r\n destroy: () => {\r\n this.destroyOverlayRecord(id);\r\n },\r\n };\r\n }\r\n\r\n destroy(): void {\r\n this.layers.destroy();\r\n this.elementNodes.clear();\r\n this.portNodes.clear();\r\n this.linkNodes.clear();\r\n this.textNodes.clear();\r\n this.resizeHandleNodes.clear();\r\n this.linkHandleNodes.clear();\r\n this.tempLinkNode = null;\r\n this.tempPortNode?.destroy?.();\n this.tempPortNode = null;\n this.tempPortShapeId = undefined;\n this.marqueeNode = null;\n this.clearShapeHoverControl(false);\n this.overlayShapes.forEach((record) => record.node.destroy?.());\n this.overlayShapes.clear();\n }\n\r\n private drawOverlays(): void {\r\n this.layers.markDirty('overlays');\r\n this.layers.drawDirty();\r\n }\r\n\r\n private createOverlayRecord(\r\n id: string,\r\n config: OverlayShapeConfig,\r\n ): { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig } {\r\n const model: ElementData = {\r\n id,\r\n position: { ...config.position },\r\n size: { ...config.size },\r\n shapeId: config.shapeId,\r\n style: config.style,\r\n anchorCenter: config.anchorCenter,\r\n };\r\n const node = this.nodeFactory.createElementNode(model);\r\n this.overlayLayer.add?.(node);\r\n this.applyOverlayConfig(node, model, config);\r\n return { node, shapeId: config.shapeId, config: { ...config } };\r\n }\r\n\r\n private updateOverlayRecord(id: string, config: OverlayShapeConfig): void {\r\n const record = this.overlayShapes.get(id);\r\n if (!record) return;\r\n const shouldRecreate = record.shapeId !== config.shapeId;\r\n if (shouldRecreate) {\r\n record.node.destroy?.();\r\n const nextRecord = this.createOverlayRecord(id, config);\r\n this.overlayShapes.set(id, nextRecord);\r\n this.drawOverlays();\r\n return;\r\n }\r\n\r\n const model: ElementData = {\r\n id,\r\n position: { ...config.position },\r\n size: { ...config.size },\r\n shapeId: config.shapeId,\r\n style: config.style,\r\n anchorCenter: config.anchorCenter,\r\n };\r\n this.applyOverlayConfig(record.node, model, config);\r\n record.config = { ...config };\r\n this.drawOverlays();\r\n }\r\n\r\n private destroyOverlayRecord(id: string): void {\r\n const record = this.overlayShapes.get(id);\r\n if (!record) return;\r\n record.node.destroy?.();\r\n this.overlayShapes.delete(id);\r\n this.drawOverlays();\r\n }\r\n\r\n private applyOverlayConfig(node: KonvaNodeLike, model: ElementData, config: OverlayShapeConfig): void {\r\n const anchorCenter = config.anchorCenter ?? false;\r\n const anchoredPosition = anchorCenter\r\n ? {\r\n x: model.position.x + model.size.width / 2,\r\n y: model.position.y + model.size.height / 2,\r\n }\r\n : model.position;\r\n this.updatePosition(node, anchoredPosition);\r\n this.updateSize(node, model.size, { anchorCenter });\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: model });\r\n }\r\n if (node.setAttrs) {\r\n node.setAttrs({\r\n ...(config.style ?? {}),\r\n listening: false,\r\n name: 'overlay-shape',\r\n });\r\n }\r\n }\r\n\r\n private syncElements(model: DiagramModel): void {\r\n const elements = Array.from(model.elements.values()).map((element, index) => ({\r\n element,\r\n depth: this.getElementDepth(model, element),\r\n order: index,\r\n }));\r\n elements\r\n .sort((a, b) => a.depth - b.depth || a.order - b.order)\r\n .forEach(({ element, depth }) => {\r\n const data = element.toData();\r\n let node = this.elementNodes.get(element.id);\r\n if (!node) {\r\n node = this.nodeFactory.createElementNode(data);\r\n this.elementNodes.set(element.id, node);\r\n this.layers.getLayer('elements')?.add?.(node);\r\n }\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: data });\r\n }\r\n const position = model.getElementWorldPosition(element.id) ?? element.position;\r\n const anchoredPosition = element.anchorCenter\r\n ? {\r\n x: position.x + element.size.width / 2,\r\n y: position.y + element.size.height / 2,\r\n }\r\n : position;\r\n this.updatePosition(node, anchoredPosition);\r\n this.updateSize(node, element.size, { anchorCenter: element.anchorCenter ?? false });\r\n if (node.setAttrs) {\r\n node.setAttrs({ __depth: depth });\r\n }\r\n });\r\n\r\n elements.forEach(({ element }) => {\r\n const node = this.elementNodes.get(element.id);\r\n node?.moveToTop?.();\r\n });\r\n\r\n Array.from(this.elementNodes.keys()).forEach((id) => {\r\n if (!model.elements.has(id)) {\r\n const node = this.elementNodes.get(id);\r\n node?.destroy?.();\r\n this.elementNodes.delete(id);\r\n this.layers.markDirty('elements');\r\n }\r\n });\r\n this.layers.markDirty('elements');\r\n }\r\n\r\n private getElementDepth(model: DiagramModel, element: ElementModel): number {\r\n let depth = 0;\r\n let current: ElementModel | undefined = element;\r\n while (current?.parentId) {\r\n const parent = model.getElement(current.parentId);\r\n if (!parent) break;\r\n depth += 1;\r\n current = parent;\r\n }\r\n return depth;\r\n }\r\n\r\n private syncPorts(model: DiagramModel): void {\n const ports = Array.from(model.ports.values());\n ports.forEach((port) => {\n const data = port.toData();\n let node = this.portNodes.get(port.id);\n if (!node) {\r\n node = this.nodeFactory.createPortNode(data);\r\n this.portNodes.set(port.id, node);\r\n this.layers.getLayer('ports')?.add?.(node);\r\n }\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: data });\r\n }\n const position = model.getPortWorldPosition(port.id) ?? port.position;\n this.updatePosition(node, position);\n this.applyPortOrientation(node, data, position, model);\n });\n\r\n Array.from(this.portNodes.keys()).forEach((id) => {\r\n if (!model.ports.has(id)) {\r\n const node = this.portNodes.get(id);\r\n node?.destroy?.();\r\n this.portNodes.delete(id);\r\n this.layers.markDirty('ports');\r\n }\r\n });\r\n this.layers.markDirty('ports');\r\n }\r\n\r\n private syncLinks(model: DiagramModel): void {\r\n const links = Array.from(model.links.values());\r\n links.forEach((link) => {\r\n let node = this.linkNodes.get(link.id);\r\n if (!node) {\r\n node = this.nodeFactory.createLinkNode(link.toData());\r\n this.linkNodes.set(link.id, node);\r\n this.layers.getLayer('links')?.add?.(node);\r\n }\r\n this.updateLine(node, link.toData());\r\n });\r\n\r\n Array.from(this.linkNodes.keys()).forEach((id) => {\r\n if (!model.links.has(id)) {\r\n const node = this.linkNodes.get(id);\r\n node?.destroy?.();\r\n this.linkNodes.delete(id);\r\n this.layers.markDirty('links');\r\n }\r\n });\r\n this.layers.markDirty('links');\r\n }\r\n\r\n private syncTexts(model: DiagramModel): void {\r\n const texts = Array.from(model.texts.values());\r\n texts.forEach((text) => {\r\n let node = this.textNodes.get(text.id);\r\n if (!node) {\n node = this.nodeFactory.createTextNode(text.toData());\n this.textNodes.set(text.id, node);\n this.layers.getLayer('texts')?.add?.(node);\n }\n const position = model.getTextWorldPosition(text.id) ?? text.position;\n const displayOffset = text.displayOffset ?? { x: 0, y: 0 };\n this.updatePosition(node, {\n x: position.x + displayOffset.x,\n y: position.y + displayOffset.y,\n });\n if (node.setAttrs) {\n const style = text.style as Record<string, unknown> | undefined;\n const defaults = resolveTextStyleDefaults(style);\n const baseFill =\n (style?.fill as string | undefined) ??\n this.getNodeAttr<string>(node, '__baseFill') ??\n this.getNodeAttr<string>(node, 'fill') ??\n 'black';\n const fill = this.selectedIds.has(text.id) ? '#ff7a00' : baseFill;\n const clip = text.displayClipSize;\n node.setAttrs({\n text: text.displayContent ?? text.content,\n fontSize: defaults.fontSize,\n fontFamily: defaults.fontFamily,\n lineHeight: defaults.lineHeight,\n ...(style ?? {}),\n width: clip?.width,\n height: clip?.height,\n wrap: clip ? 'none' : undefined,\n ellipsis: false,\n fill,\n __baseFill: baseFill,\n // Keep metadata for tests/debugging; Konva clip attrs do not apply on Text nodes.\n clipX: clip ? 0 : undefined,\n clipY: clip ? 0 : undefined,\n clipWidth: clip?.width,\n clipHeight: clip?.height,\n });\n }\n });\n\r\n Array.from(this.textNodes.keys()).forEach((id) => {\r\n if (!model.texts.has(id)) {\r\n const node = this.textNodes.get(id);\r\n node?.destroy?.();\r\n this.textNodes.delete(id);\r\n this.layers.markDirty('texts');\r\n }\r\n });\r\n this.layers.markDirty('texts');\r\n }\r\n\r\n private updatePosition(node: KonvaNodeLike, position: Point): void {\n if (node.position) {\r\n node.position({ x: position.x, y: position.y });\r\n return;\r\n }\r\n if (node.setAttrs) {\r\n node.setAttrs({ x: position.x, y: position.y });\r\n }\r\n }\n\n private applyPortOrientation(\n node: KonvaNodeLike,\n port: PortData,\n worldPosition: Point,\n model?: DiagramModel,\n hostElementOverride?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ): void {\n if (!node.setAttrs) return;\n const baseRotation =\n this.getNodeAttr<number>(node, '__baseRotation') ??\n this.getNodeAttr<number>(node, 'rotation') ??\n 0;\n if (this.getNodeAttr<number>(node, '__baseRotation') === undefined) {\n node.setAttrs({ __baseRotation: baseRotation });\n }\n\n const orientedRotation = this.resolvePortBorderRotation(port, worldPosition, model, hostElementOverride);\n node.setAttrs({ rotation: baseRotation + (orientedRotation ?? 0) });\n }\n\n private resolvePortBorderRotation(\n port: PortData,\n worldPosition: Point,\n model?: DiagramModel,\n hostElementOverride?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ): number | null {\n if (port.moveMode !== 'border' || port.orientToHostBorder === false) {\n return null;\n }\n const host = hostElementOverride ?? this.resolveHostElement(port.elementId, model);\n if (!host) return null;\n\n const hostRect = {\n x: host.position.x,\n y: host.position.y,\n width: host.size.width,\n height: host.size.height,\n };\n const shape = this.shapeRegistry.get(host.shapeId);\n const side = shape?.resolveBorderSide\n ? shape.resolveBorderSide(worldPosition, hostRect)\n : resolveBoundarySide(worldPosition, hostRect, 'rect');\n return borderSideToInwardRotation(side);\n }\n\n private resolveHostElement(\n elementId: string,\n model?: DiagramModel,\n ): { id: string; position: Point; size: { width: number; height: number }; shapeId: string } | null {\n if (!model) return null;\n const element = model.getElement(elementId);\n if (!element) return null;\n return {\n id: element.id,\n position: model.getElementWorldPosition(elementId) ?? element.position,\n size: element.size,\n shapeId: element.shapeId,\n };\n }\n\r\n private getNodeAttr<T>(node: KonvaNodeLike, key: string): T | undefined {\r\n if (node.getAttr) return node.getAttr(key) as T;\r\n if (node.attrs && Object.prototype.hasOwnProperty.call(node.attrs, key)) {\r\n return node.attrs[key] as T;\r\n }\r\n return undefined;\r\n }\r\n\r\n private updateSize(\n node: KonvaNodeLike,\n size: { width: number; height: number },\n options?: { anchorCenter?: boolean },\n ): void {\n if (!node.setAttrs) return;\n const attrs: Record<string, unknown> = { width: size.width, height: size.height };\n const anchorCenter = options?.anchorCenter ?? false;\n const autoOffsetX = this.getNodeAttr<boolean>(node, '__autoOffsetX');\n const autoOffsetY = this.getNodeAttr<boolean>(node, '__autoOffsetY');\n const updateOffsetX = autoOffsetX !== false;\n const updateOffsetY = autoOffsetY !== false;\n\n const sizeUpdater = this.getNodeAttr<ShapeNodeSizeUpdater>(node, '__sizeUpdater');\n if (sizeUpdater) {\n Object.assign(\n attrs,\n sizeUpdater({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr: <T = unknown>(key: string) => this.getNodeAttr<T>(node, key),\n }),\n );\n }\n\n node.setAttrs(attrs);\n }\n\r\n private updateLine(node: KonvaNodeLike, link: LinkData): void {\r\n if (!node.setAttrs) return;\r\n const flatPoints: number[] = [];\r\n link.points.forEach((point) => {\r\n flatPoints.push(point.x, point.y);\r\n });\r\n node.setAttrs({ points: flatPoints });\r\n }\r\n}\r\n","import { Point } from '../../api/types';\r\n\r\nexport type HitResult = {\n id: string;\n type: 'element' | 'port' | 'link' | 'text' | 'resize-handle' | 'link-handle' | 'shape-hover-control' | 'none';\n depth?: number;\n};\n\r\nexport type HitTestResolver = (point: Point) => HitResult | null;\r\n\r\nexport default class KonvaHitTester {\r\n private resolver?: HitTestResolver;\r\n\r\n constructor(resolver?: HitTestResolver) {\r\n this.resolver = resolver;\r\n }\r\n\r\n hitTest(point: Point): HitResult | null {\r\n if (!this.resolver) return null;\r\n return this.resolver(point);\r\n }\r\n}\r\n","import {\n EllipseMidPoint,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n ElementShapeControlDragEvent,\n EnginePointerInfo,\n LinkData,\n Point,\n PortData,\n ShapeControlDefinition,\n ShapeControlTargetKind,\n ShapeControlVisibilityTrigger,\n ShapeEdgeTarget,\n ShapeEllipseMidPointTarget,\n ShapeHoverGeometry,\n ShapeVertexTarget,\n} from '../../api/types';\nimport DiagramEngine from '../../engine/DiagramEngine';\nimport KonvaHitTester, { HitResult } from './KonvaHitTester';\nimport { KonvaStageLike, ShapeHoverControlRenderConfig } from './KonvaRenderer';\nimport { createId } from '../../utils/ids';\nimport { ShapeRegistry } from '../RenderTypes';\nimport {\n getRotatedRectCorners,\n pointInRotatedRect,\n polygonIntersectsRect,\n rectContainsPoint,\n rectsIntersect,\n resolveRectRotationPivot,\n rotatePoint,\n} from '../../utils/geometry';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\n\r\nexport type InteractionConfig = {\n stage?: KonvaStageLike;\n hitTester?: KonvaHitTester;\n panKey?: PanKey;\n shapeRegistry?: ShapeRegistry;\n shapeHoverControls?: ElementShapeHoverControls;\n onShapeHoverControlInteracted?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n renderer?: {\n renderResizeHandles: (\n elementId: string,\n position: Point,\n size: { width: number; height: number },\n options?: { rotation?: number; anchorCenter?: boolean },\n ) => void;\n clearResizeHandles: () => void;\r\n renderLinkHandles: (linkId: string, points: Point[]) => void;\n clearLinkHandles: () => void;\n renderTempLink: (points: Point[]) => void;\n clearTempLink: () => void;\n renderPortPlaceholder?: (\n port: PortData,\n hostElement?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ) => void;\n clearPortPlaceholder?: () => void;\n renderMarquee: (rect: { x: number; y: number; width: number; height: number }) => void;\n clearMarquee: () => void;\n renderShapeHoverControl?: (config: ShapeHoverControlRenderConfig) => void;\n clearShapeHoverControl?: () => void;\n };\n};\n\r\nexport type PanKey = 'Control' | 'Shift' | 'Alt' | 'Meta';\n\ntype NormalizedShapeControlDefinition = ShapeControlDefinition & {\n visibilityTriggers: ShapeControlVisibilityTrigger[];\n targetIndices?: number[];\n ellipseMidPoints?: EllipseMidPoint[];\n tolerance: number;\n};\ntype NormalizedShapeHoverControls = {\n controls: NormalizedShapeControlDefinition[];\n};\n\ntype ResolvedShapeHoverControl = {\n control: NormalizedShapeControlDefinition;\n controlId: string;\n elementId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget;\n};\n\ntype ShapeControlDragState = {\n mode: 'shape-control-drag';\n control: ResolvedShapeHoverControl;\n sessionId: string;\n start: Point;\n startPointer: EnginePointerInfo;\n hasMoved: boolean;\n};\n\ntype DragState =\n | {\n mode: 'move';\r\n type: 'element';\r\n id: string;\r\n offset: Point;\r\n start: Point;\r\n anchor: 'top-left' | 'center';\r\n startParentId: string | null;\r\n selectionIds: string[];\r\n isMulti: boolean;\r\n hasMoved: boolean;\r\n }\r\n | { mode: 'move'; type: 'port' | 'text'; id: string; offset: Point }\r\n | {\r\n mode: 'link-drag';\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n start: Point;\r\n current: Point;\r\n isMulti: boolean;\r\n hasMoved: boolean;\r\n }\r\n | { mode: 'link-handle'; linkId: string; pointIndex: number }\r\n | { mode: 'link-segment'; linkId: string; start: Point; hasMoved: boolean; pointIndex?: number }\r\n | {\r\n mode: 'resize';\r\n elementId: string;\r\n handle: 'nw' | 'ne' | 'sw' | 'se';\r\n origin: {\n position: Point;\n worldPosition: Point;\n size: { width: number; height: number };\n parentId: string | null;\n anchorCenter: boolean;\n rotation: number;\n };\n }\n | { mode: 'marquee'; start: Point; isMulti: boolean; hasMoved: boolean }\n | { mode: 'pan'; start: Point; origin: Point }\n | ShapeControlDragState;\n\nconst ellipseMidPointOrder: EllipseMidPoint[] = [\n EllipseMidPoint.top,\n EllipseMidPoint.right,\n EllipseMidPoint.bottom,\n EllipseMidPoint.left,\n];\n\nconst isEllipseMidPoint = (value: unknown): value is EllipseMidPoint =>\n value === EllipseMidPoint.top ||\n value === EllipseMidPoint.right ||\n value === EllipseMidPoint.bottom ||\n value === EllipseMidPoint.left;\n\nconst ellipseMidPointToIndex = (value: EllipseMidPoint): number =>\n ellipseMidPointOrder.indexOf(value);\n\r\nexport default class KonvaInteraction {\r\n private engine: DiagramEngine;\r\n private stage?: KonvaStageLike;\n private hitTester: KonvaHitTester;\n private renderer?: InteractionConfig['renderer'];\n private shapeRegistry?: ShapeRegistry;\n private shapeHoverControls?: NormalizedShapeHoverControls;\n private onShapeHoverControlInteracted?: (event: ElementShapeHoverControlInteractionEvent) => void;\n private onShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n private linkDragContext: { sourcePortId: string; sourceElementId: string } | null = null;\n private bound = false;\n private handlers: Array<[string, (...args: unknown[]) => void]> = [];\r\n private windowHandlers: Array<[keyof WindowEventMap, (event: Event) => void]> = [];\r\n private previousWindowKeyDown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => unknown) | null = null;\r\n private dragState: DragState | null = null;\r\n private selectionUnsub: (() => void) | null = null;\r\n private changeUnsub: (() => void) | null = null;\n private activeShapeHoverControl: ResolvedShapeHoverControl | null = null;\n private lastPointerPosition: Point | null = null;\n private zoom = 1;\n private pan: Point = { x: 0, y: 0 };\r\n private textEditor: HTMLTextAreaElement | null = null;\r\n private readonly dragThreshold = 4;\r\n private readonly panSpeed = 0.5;\r\n private panKey: PanKey;\r\n\r\n constructor(engine: DiagramEngine, config: InteractionConfig = {}) {\n this.engine = engine;\r\n this.stage = config.stage;\n this.hitTester = config.hitTester ?? new KonvaHitTester();\n this.renderer = config.renderer;\n this.panKey = config.panKey ?? 'Control';\n this.shapeRegistry = config.shapeRegistry;\n this.shapeHoverControls = this.normalizeShapeHoverControls(config.shapeHoverControls);\n this.onShapeHoverControlInteracted = config.onShapeHoverControlInteracted;\n this.onShapeHoverControlActivated = config.onShapeHoverControlActivated;\n }\n\n setShapeHoverControls(controls?: ElementShapeHoverControls): void {\n this.shapeHoverControls = this.normalizeShapeHoverControls(controls);\n if (!this.shapeHoverControls) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (this.lastPointerPosition && !this.dragState) {\n this.updateShapeHoverControl(this.lastPointerPosition);\n }\n }\n\r\n private buildPointerInfo(world: Point, nativeEvent?: MouseEvent | PointerEvent | null): EnginePointerInfo {\r\n const evt = nativeEvent ?? undefined;\r\n const client = evt ? { x: evt.clientX, y: evt.clientY } : { x: world.x, y: world.y };\r\n const pointerType =\r\n evt && 'pointerType' in evt ? (evt as PointerEvent).pointerType : undefined;\r\n return {\r\n client,\r\n world: { ...world },\r\n button: evt?.button,\r\n buttons: (evt as MouseEvent | PointerEvent | undefined)?.buttons,\r\n altKey: evt?.altKey,\r\n ctrlKey: evt?.ctrlKey,\r\n metaKey: evt?.metaKey,\r\n shiftKey: evt?.shiftKey,\r\n pointerType,\r\n };\r\n }\r\n\r\n bind(stage?: KonvaStageLike): void {\r\n this.stage = stage ?? this.stage;\r\n if (!this.stage || !this.stage.on || this.bound) return;\r\n\r\n const pointerDown = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const point = this.getPointerPosition();\n if (!point) return;\n this.lastPointerPosition = { ...point };\n if (this.textEditor) return;\n const hit = this.resolveHit(point);\n const nativeEvent = event?.evt;\n const isMulti = Boolean(nativeEvent && (nativeEvent.ctrlKey || nativeEvent.metaKey || nativeEvent.shiftKey));\n const isPanGesture = Boolean(nativeEvent && this.isPanKeyPressed(nativeEvent) && nativeEvent.button === 0);\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n\n if (hit?.type === 'shape-hover-control') {\n const resolvedControl = this.resolveShapeHoverControlFromHit(hit.id, point);\n if (!resolvedControl) return;\n this.dragState = {\n mode: 'shape-control-drag',\n control: resolvedControl,\n sessionId: createId(),\n start: { ...point },\n startPointer: pointerInfo,\n hasMoved: false,\n };\n this.setCursor('grabbing');\n return;\n }\n\n this.clearActiveShapeHoverControl();\n\n if (isPanGesture) {\n this.dragState = { mode: 'pan', start: point, origin: { ...this.pan } };\n this.setCursor('grabbing');\n return;\n }\r\n\r\n if (hit?.type === 'resize-handle') {\r\n const parsed = this.parseResizeHandle(hit.id);\r\n if (parsed) {\r\n const element = this.getElementById(parsed.elementId);\r\n if (element) {\n if (!this.engine.getSelection().includes(parsed.elementId)) {\n this.engine.setSelection([parsed.elementId]);\n }\n const worldPosition = this.engine.getElementWorldPosition(parsed.elementId) ?? element.position;\n this.dragState = {\n mode: 'resize',\n elementId: parsed.elementId,\n handle: parsed.handle,\n origin: {\n position: { ...element.position },\n worldPosition,\n size: { ...element.size },\n parentId: element.parentId ?? null,\n anchorCenter: element.anchorCenter ?? false,\n rotation: this.engine.getElementRotation(parsed.elementId),\n },\n };\n this.setCursor(this.getResizeCursor(parsed.handle));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (hit?.type === 'link-handle') {\r\n const parsed = this.parseLinkHandle(hit.id);\r\n if (parsed) {\r\n this.dragState = { mode: 'link-handle', linkId: parsed.linkId, pointIndex: parsed.pointIndex };\r\n this.setCursor('move');\r\n }\r\n return;\r\n }\r\n\r\n if (!hit || hit.type === 'none') {\r\n this.dragState = { mode: 'marquee', start: point, isMulti, hasMoved: false };\r\n this.renderer?.renderMarquee({ x: point.x, y: point.y, width: 0, height: 0 });\r\n return;\r\n }\r\n\r\n if (hit.type === 'port') {\r\n const elementId = this.engine.getPortElementId(hit.id);\r\n if (!elementId) return;\r\n this.engine.emitPortMouseDown({ portId: hit.id, elementId, pointer: pointerInfo });\r\n const isSelected = this.engine.getSelection().includes(hit.id);\r\n if (isSelected) {\r\n const base = this.engine.getPortWorldPosition(hit.id);\r\n if (base) {\r\n this.dragState = {\r\n mode: 'move',\r\n type: 'port',\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n } else {\r\n this.dragState = {\r\n mode: 'link-drag',\r\n sourcePortId: hit.id,\r\n sourceElementId: elementId,\r\n start: point,\r\n current: point,\r\n isMulti,\r\n hasMoved: false,\r\n };\r\n this.linkDragContext = { sourcePortId: hit.id, sourceElementId: elementId };\r\n this.engine.emitElementLinkStarted({ sourcePortId: hit.id, sourceElementId: elementId, startWorld: { ...point } });\r\n this.setCursor('crosshair');\r\n }\r\n return;\r\n }\r\n\r\n this.handleSelection(hit, isMulti);\r\n if (hit.type === 'link' && !isMulti) {\r\n this.dragState = { mode: 'link-segment', linkId: hit.id, start: point, hasMoved: false };\r\n this.setCursor('move');\r\n return;\r\n }\r\n if (hit.type === 'text') {\r\n const base = this.engine.getTextWorldPosition(hit.id);\r\n if (base) {\r\n this.dragState = {\r\n mode: 'move',\r\n type: 'text',\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n return;\r\n }\r\n if (hit.type === 'element') {\r\n const baseTopLeft = this.engine.getElementWorldPosition(hit.id);\r\n if (baseTopLeft) {\r\n const element = this.getElementById(hit.id);\r\n if (!element) return;\r\n const anchor = element.anchorCenter ? 'center' : 'top-left';\r\n const base = element.anchorCenter\r\n ? {\r\n x: baseTopLeft.x + element.size.width / 2,\r\n y: baseTopLeft.y + element.size.height / 2,\r\n }\r\n : baseTopLeft;\r\n this.dragState = {\r\n mode: 'move',\r\n type: hit.type,\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n start: { ...base },\r\n anchor,\r\n startParentId: element.parentId ?? null,\r\n selectionIds: this.engine.getSelection(),\r\n isMulti,\r\n hasMoved: false,\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n }\r\n };\r\n\r\n const pointerMove = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const point = this.getPointerPosition();\n if (!point) return;\n this.lastPointerPosition = { ...point };\n if (!this.dragState) {\n this.updateShapeHoverControl(point);\n this.updateHoverCursor(point);\n return;\n }\n this.clearActiveShapeHoverControl();\n if (this.dragState.mode === 'shape-control-drag') {\n const delta = { x: point.x - this.dragState.start.x, y: point.y - this.dragState.start.y };\n const moved = Math.hypot(delta.x, delta.y) >= this.dragThreshold;\n if (!this.dragState.hasMoved && moved) {\n this.dragState.hasMoved = true;\n this.emitShapeHoverControlInteraction('drag-start', this.dragState.control, point, nativeEvent, {\n sessionId: this.dragState.sessionId,\n startPointer: this.dragState.startPointer,\n delta,\n });\n }\n if (this.dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-move', this.dragState.control, point, nativeEvent, {\n sessionId: this.dragState.sessionId,\n startPointer: this.dragState.startPointer,\n delta,\n });\n }\n } else if (this.dragState.mode === 'move') {\n const target = {\n x: point.x - this.dragState.offset.x,\n y: point.y - this.dragState.offset.y,\n };\n if (this.dragState.type === 'element') {\r\n const dx = target.x - this.dragState.start.x;\r\n const dy = target.y - this.dragState.start.y;\r\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\r\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\r\n this.engine.moveElementTo(this.dragState.id, target.x, target.y);\n if (this.renderer && this.engine.getSelection().includes(this.dragState.id)) {\n const element = this.getElementById(this.dragState.id);\n if (element) {\n const position = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\n this.renderElementResizeHandles(this.dragState.id, position, element);\n }\n }\n } else if (this.dragState.type === 'port') {\r\n const constrained = this.applyPortConstraints(this.dragState.id, target);\r\n this.engine.movePortTo(this.dragState.id, constrained.x, constrained.y);\r\n } else {\r\n this.engine.moveTextTo(this.dragState.id, target.x, target.y);\r\n }\r\n } else if (this.dragState.mode === 'link-drag') {\n const linkDrag = this.dragState;\n const dx = point.x - this.dragState.start.x;\n const dy = point.y - this.dragState.start.y;\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\n this.dragState.current = point;\n if (this.dragState.hasMoved) {\n const source = this.engine.getPortWorldPosition(this.dragState.sourcePortId);\n if (source) {\n this.renderer?.renderTempLink([source, point]);\n }\n const hit = this.resolveHit(point);\n if (hit?.type === 'port' && hit.id !== linkDrag.sourcePortId) {\n const completion = this.tryCreateLinkToPort(linkDrag.sourcePortId, linkDrag.sourceElementId, hit.id);\n if (completion.createdLinkId) {\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n this.engine.emitPortMouseUp({\n portId: linkDrag.sourcePortId,\n elementId: linkDrag.sourceElementId,\n pointer: pointerInfo,\n });\n this.engine.emitElementLinkEnded({\n sourcePortId: linkDrag.sourcePortId,\n sourceElementId: linkDrag.sourceElementId,\n linkId: completion.createdLinkId,\n targetPortId: completion.targetPortId,\n targetElementId: completion.targetElementId ?? undefined,\n cancelled: false,\n });\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.dragState = null;\n this.linkDragContext = null;\n this.setCursor('default');\n return;\n }\n } else if (hit?.type === 'element') {\n const placeholder = this.createPlaceholderPort(hit.id, point, this.dragState.sourcePortId);\n if (placeholder) {\n const hostElement = this.getElementById(hit.id);\n if (hostElement) {\n const hostWorld = this.engine.getElementWorldPosition(hit.id) ?? hostElement.position;\n this.renderer?.renderPortPlaceholder?.(\n placeholder,\n { id: hostElement.id, position: hostWorld, size: hostElement.size, shapeId: hostElement.shapeId },\n );\n } else {\n this.renderer?.renderPortPlaceholder?.(placeholder);\n }\n }\n } else {\n this.renderer?.clearPortPlaceholder?.();\n }\n } else {\r\n this.renderer?.clearPortPlaceholder?.();\r\n }\r\n } else if (this.dragState.mode === 'link-handle') {\r\n const linkState = this.dragState;\r\n const link = this.getLinkById(linkState.linkId);\r\n if (!link) return;\r\n const points = link.points.map((p, index) => (index === linkState.pointIndex ? point : p));\r\n this.engine.updateLinkPoints(link.id, points);\r\n this.renderer?.renderLinkHandles(link.id, points);\r\n } else if (this.dragState.mode === 'link-segment') {\r\n const linkState = this.dragState;\r\n const link = this.getLinkById(linkState.linkId);\r\n if (!link) return;\r\n const dx = point.x - linkState.start.x;\r\n const dy = point.y - linkState.start.y;\r\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\r\n linkState.hasMoved = linkState.hasMoved || moved;\r\n if (!linkState.hasMoved) return;\r\n\r\n let points = link.points.map((p) => ({ ...p }));\r\n if (linkState.pointIndex === undefined) {\r\n const nearest = this.findNearestSegmentPoint(points, point);\r\n if (!nearest) return;\r\n points = [\r\n ...points.slice(0, nearest.index + 1),\r\n { ...nearest.point },\r\n ...points.slice(nearest.index + 1),\r\n ];\r\n linkState.pointIndex = nearest.index + 1;\r\n }\r\n points = points.map((p, index) => (index === linkState.pointIndex ? point : p));\r\n this.engine.updateLinkPoints(link.id, points);\r\n this.renderer?.renderLinkHandles(link.id, points);\r\n } else if (this.dragState.mode === 'resize') {\r\n this.handleResizeDrag(this.dragState, point);\r\n } else if (this.dragState.mode === 'marquee') {\r\n const rect = this.normalizeRect(this.dragState.start, point);\r\n const moved = rect.width >= this.dragThreshold || rect.height >= this.dragThreshold;\r\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\r\n this.renderer?.renderMarquee(rect);\r\n } else if (this.dragState.mode === 'pan') {\r\n const dx = point.x - this.dragState.start.x;\r\n const dy = point.y - this.dragState.start.y;\r\n this.pan = {\r\n x: this.dragState.origin.x - dx * this.panSpeed,\r\n y: this.dragState.origin.y - dy * this.panSpeed,\r\n };\r\n this.applyStageTransform();\r\n this.engine.setViewport(this.pan, this.zoom);\r\n }\r\n };\r\n\r\n const pointerUp = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const pointerPoint = this.getPointerPosition();\n\n if (this.dragState?.mode === 'shape-control-drag') {\n const dragState = this.dragState;\n const point = pointerPoint ?? dragState.start;\n const delta = { x: point.x - dragState.start.x, y: point.y - dragState.start.y };\n const dragContext: ElementShapeControlDragEvent = {\n sessionId: dragState.sessionId,\n startPointer: dragState.startPointer,\n delta,\n };\n if (dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-end', dragState.control, point, nativeEvent, dragContext);\n } else {\n this.emitShapeHoverControlInteraction('click', dragState.control, point, nativeEvent);\n this.emitLegacyShapeHoverControlActivation(dragState.control, point, nativeEvent);\n }\n this.dragState = null;\n if (pointerPoint) {\n this.lastPointerPosition = { ...pointerPoint };\n this.updateShapeHoverControl(pointerPoint);\n this.updateHoverCursor(pointerPoint);\n } else {\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n return;\n }\n\n if (this.dragState?.mode === 'link-drag') {\n const point = pointerPoint;\n const pointerInfo = this.buildPointerInfo(point ?? this.dragState.start, nativeEvent);\n const sourcePortPayload = {\r\n portId: this.dragState.sourcePortId,\r\n elementId: this.dragState.sourceElementId,\r\n pointer: pointerInfo,\r\n };\r\n this.engine.emitPortMouseUp(sourcePortPayload);\r\n\r\n let createdLinkId: string | null = null;\r\n let targetPortId: string | null = null;\r\n let targetElementId: string | null = null;\r\n\r\n if (!this.dragState.hasMoved) {\n this.handleSelection({ id: this.dragState.sourcePortId, type: 'port' }, this.dragState.isMulti);\n } else {\n const hit = point ? this.resolveHit(point) : null;\n if (hit && hit.type === 'port' && hit.id !== this.dragState.sourcePortId) {\n const completion = this.tryCreateLinkToPort(this.dragState.sourcePortId, this.dragState.sourceElementId, hit.id);\n createdLinkId = completion.createdLinkId;\n targetPortId = completion.targetPortId;\n targetElementId = completion.targetElementId;\n } else if (hit && hit.type === 'element' && point) {\n targetElementId = hit.id;\n const createdPortId = this.createPortForLink(hit.id, point, this.dragState.sourcePortId);\n if (createdPortId) {\r\n targetPortId = createdPortId;\r\n createdLinkId = createId();\r\n this.engine.addLink({\r\n id: createdLinkId,\r\n sourcePortId: this.dragState.sourcePortId,\r\n targetPortId: createdPortId,\r\n points: [],\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.engine.emitElementLinkEnded({\r\n sourcePortId: this.dragState.sourcePortId,\r\n sourceElementId: this.dragState.sourceElementId,\r\n linkId: createdLinkId ?? undefined,\r\n targetPortId: targetPortId ?? undefined,\r\n targetElementId: targetElementId ?? undefined,\r\n cancelled: createdLinkId === null,\r\n });\r\n\r\n this.renderer?.clearTempLink();\r\n this.renderer?.clearPortPlaceholder?.();\r\n }\r\n\r\n if (this.dragState?.mode === 'marquee') {\r\n const point = pointerPoint ?? this.dragState.start;\r\n const rect = this.normalizeRect(this.dragState.start, point);\r\n this.applyMarqueeSelection(rect, this.dragState.isMulti);\r\n this.renderer?.clearMarquee();\r\n if (!this.dragState.hasMoved) {\r\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\r\n this.engine.emitPaperClick(pointerInfo);\r\n }\r\n }\r\n\r\n if (this.dragState?.mode === 'move' && this.dragState.type === 'element') {\r\n const element = this.getElementById(this.dragState.id);\r\n if (element) {\r\n const endTopLeft = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\r\n const endWorld =\r\n this.dragState.anchor === 'center'\r\n ? {\r\n x: endTopLeft.x + element.size.width / 2,\r\n y: endTopLeft.y + element.size.height / 2,\r\n }\r\n : endTopLeft;\r\n const delta = {\r\n x: endWorld.x - this.dragState.start.x,\r\n y: endWorld.y - this.dragState.start.y,\r\n };\r\n const moved = this.dragState.hasMoved || Math.hypot(delta.x, delta.y) > 0;\r\n if (moved) {\r\n this.engine.emitElementDrop({\r\n elementId: this.dragState.id,\r\n startWorld: { ...this.dragState.start },\r\n endWorld,\r\n delta,\r\n startParentId: this.dragState.startParentId,\r\n selectionIds: [...this.dragState.selectionIds],\r\n anchor: this.dragState.anchor,\r\n });\r\n } else {\r\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.dragState.start, nativeEvent);\r\n this.engine.emitElementClick(this.dragState.id, pointerInfo, this.dragState.isMulti);\r\n }\r\n }\r\n }\r\n\r\n if (this.dragState?.mode === 'move' && this.dragState.type === 'port') {\r\n const elementId = this.engine.getPortElementId(this.dragState.id);\r\n if (elementId) {\r\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.engine.getPortWorldPosition(this.dragState.id) ?? { x: 0, y: 0 }, nativeEvent);\r\n this.engine.emitPortMouseUp({ portId: this.dragState.id, elementId, pointer: pointerInfo });\r\n }\r\n }\r\n\r\n this.dragState = null;\n this.linkDragContext = null;\n if (pointerPoint) {\n this.lastPointerPosition = { ...pointerPoint };\n this.updateShapeHoverControl(pointerPoint);\n this.updateHoverCursor(pointerPoint);\n } else {\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n };\n\r\n const downEvents = 'mousedown touchstart pointerdown';\r\n const moveEvents = 'mousemove touchmove pointermove';\r\n const upEvents = 'mouseup touchend pointerup';\r\n\r\n this.stage.on(downEvents, pointerDown);\r\n this.handlers.push([downEvents, pointerDown]);\r\n this.stage.on(moveEvents, pointerMove);\r\n this.handlers.push([moveEvents, pointerMove]);\r\n this.stage.on(upEvents, pointerUp);\r\n this.handlers.push([upEvents, pointerUp]);\r\n\r\n const doubleClick = () => {\r\n const point = this.getPointerPosition();\r\n if (!point) return;\r\n const hit = this.resolveHit(point);\r\n if (!hit || hit.type !== 'text') return;\r\n this.startTextEdit(hit.id);\r\n };\r\n\r\n this.stage.on('dblclick dbltap', doubleClick);\r\n this.handlers.push(['dblclick dbltap', doubleClick]);\r\n\r\n const keyDown = (event: Event) => {\r\n const keyEvent = event as KeyboardEvent;\r\n if (this.isEditableTarget(keyEvent.target)) return;\r\n if (keyEvent.key === 'Escape') {\r\n this.cancelLinkDrag();\r\n return;\r\n }\r\n if (keyEvent.key === 'Delete' || keyEvent.key === 'Backspace') {\r\n this.engine.deleteSelection();\r\n }\r\n };\r\n\r\n const wheel = (...args: unknown[]) => {\r\n const event = args[0] as { evt?: WheelEvent } | undefined;\r\n const nativeEvent = event?.evt;\r\n if (!nativeEvent) return;\r\n nativeEvent.preventDefault?.();\r\n const delta = nativeEvent.deltaY;\r\n const direction = delta > 0 ? -1 : 1;\r\n const factor = 1 + direction * 0.05;\r\n this.zoom = Math.max(0.2, Math.min(3, this.zoom * factor));\r\n this.applyStageTransform();\r\n this.engine.setViewport(this.pan, this.zoom);\r\n };\r\n\r\n window.addEventListener('keydown', keyDown);\r\n this.windowHandlers.push(['keydown', keyDown]);\r\n this.previousWindowKeyDown = window.onkeydown;\r\n window.onkeydown = (event: KeyboardEvent) => {\r\n keyDown(event);\r\n this.previousWindowKeyDown?.call(window, event);\r\n };\r\n this.stage.on('wheel', wheel);\r\n this.handlers.push(['wheel', wheel]);\r\n this.selectionUnsub = this.engine.on('selection', () => this.updateSelectionOverlays());\n this.changeUnsub = this.engine.on('change', (event) => {\n this.updateSelectionOverlays();\n this.applyViewportPatch(event.patches);\n if (!this.dragState && this.lastPointerPosition) {\n this.updateShapeHoverControl(this.lastPointerPosition);\n }\n });\n this.bound = true;\n }\n\r\n dispose(): void {\r\n if (this.stage && this.stage.off) {\r\n this.handlers.forEach(([event, handler]) => this.stage?.off?.(event, handler));\r\n }\r\n this.handlers = [];\r\n this.windowHandlers.forEach(([event, handler]) => window.removeEventListener(event, handler));\r\n this.windowHandlers = [];\r\n if (this.previousWindowKeyDown !== null) {\r\n window.onkeydown = this.previousWindowKeyDown;\r\n this.previousWindowKeyDown = null;\r\n }\r\n this.selectionUnsub?.();\r\n this.selectionUnsub = null;\r\n this.changeUnsub?.();\n this.changeUnsub = null;\n this.clearActiveShapeHoverControl();\n this.disposeTextEditor();\n this.bound = false;\n }\n\r\n private handleSelection(hit: HitResult | null, isMulti: boolean): void {\r\n if (!hit || hit.type === 'none') {\r\n this.engine.setSelection([]);\r\n return;\r\n }\r\n if (hit.type === 'resize-handle' || hit.type === 'link-handle' || hit.type === 'shape-hover-control') {\n return;\n }\n if (isMulti) {\r\n this.engine.toggleSelection(hit.id);\r\n return;\r\n }\r\n this.engine.setSelection([hit.id]);\r\n }\r\n\r\n private getPointerPosition(): Point | null {\n const stageAny = this.stage as unknown as {\n getPointerPosition?: () => { x: number; y: number } | null;\n getAbsoluteTransform?: () =>\n | {\n copy?: () => { invert?: () => void; point?: (pos: Point) => Point };\n invert?: () => void;\n point?: (pos: Point) => Point;\n }\n | undefined;\n };\n const pos = stageAny?.getPointerPosition?.();\n if (!pos) return null;\n const transformSource = stageAny.getAbsoluteTransform?.();\n const transform = transformSource?.copy?.() ?? transformSource;\n if (transform && typeof transform.invert === 'function' && typeof transform.point === 'function') {\n transform.invert();\n const point = transform.point(pos);\n return { x: point.x, y: point.y };\n }\n return { x: pos.x, y: pos.y };\n }\r\n\r\n private getStageContainer(): HTMLDivElement | null {\r\n const stageAny = this.stage as unknown as {\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n };\r\n const container =\r\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\r\n return container ?? null;\r\n }\r\n\r\n private normalizeHit(hit: HitResult | null): HitResult | null {\r\n if (!hit || hit.type === 'none') return null;\r\n if (\r\n hit.type === 'port' ||\r\n hit.type === 'link' ||\r\n hit.type === 'text' ||\n hit.type === 'resize-handle' ||\n hit.type === 'link-handle' ||\n hit.type === 'shape-hover-control'\n ) {\n return hit;\n }\n return { ...hit, type: 'element' };\r\n }\r\n\r\n private resolveHit(point: Point): HitResult | null {\n const primary = this.withElementDepth(this.normalizeHit(this.hitTester.hitTest(point)));\n const hits: HitResult[] = primary ? [primary] : [];\n const seen = new Set(hits.map((hit) => `${hit.type}:${hit.id}`));\n\n const addHit = (hit: HitResult | null) => {\n const enriched = this.withElementDepth(hit);\n if (!enriched) return;\n const key = `${enriched.type}:${enriched.id}`;\n if (seen.has(key)) return;\n seen.add(key);\n hits.push(enriched);\n };\n\n addHit(this.findLinkHit(point));\n addHit(this.findElementHit(point));\n\n if (hits.length === 0) return null;\n\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'shape-hover-control', 'port', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\n const candidates = hits.filter((hit) => hit.type === priority[i]);\n if (candidates.length === 0) continue;\n if (priority[i] === 'element') {\n return candidates.reduce((deepest, current) => {\n const deepestDepth = deepest.depth ?? -1;\n const currentDepth = current.depth ?? -1;\n if (currentDepth > deepestDepth) return current;\n if (currentDepth < deepestDepth) return deepest;\n return deepest; // preserve primary hit when depths are equal\n }, candidates[0]);\n }\n return candidates[0];\n }\n\n return hits[0];\n }\n\n private withElementDepth(hit: HitResult | null): HitResult | null {\n if (!hit || hit.type !== 'element' || hit.depth !== undefined) return hit;\n const byId = new Map(\n this.engine\n .getState()\n .elements.map((element) => [element.id, { parentId: element.parentId }] as const),\n );\n if (!byId.has(hit.id)) return hit;\n return {\n ...hit,\n depth: this.computeElementDepth(hit.id, byId),\n };\n }\n\r\n private findElementHit(point: Point): HitResult | null {\r\n const state = this.engine.getState();\r\n if (!state.elements.length) return null;\r\n const byId = new Map(state.elements.map((element) => [element.id, element]));\r\n let best: HitResult | null = null;\r\n\r\n state.elements.forEach((element) => {\n const world = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rotation = this.engine.getElementRotation(element.id);\n if (!pointInRotatedRect(point, world, element.size, rotation, element.anchorCenter ?? false)) return;\n const depth = this.computeElementDepth(element.id, byId);\n if (!best || depth > (best.depth ?? -1)) {\n best = { id: element.id, type: 'element', depth };\n }\n });\n\r\n return best;\r\n }\r\n\r\n private computeElementDepth(id: string, byId: Map<string, { parentId?: string | null }>): number {\r\n let depth = 0;\r\n let current = byId.get(id);\r\n while (current?.parentId) {\r\n depth += 1;\r\n current = byId.get(current.parentId);\r\n }\r\n return depth;\r\n }\r\n\r\n private findLinkHit(point: Point): HitResult | null {\r\n const links = this.engine.getState().links;\r\n if (!links.length) return null;\r\n\r\n let bestId: string | null = null;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n links.forEach((link) => {\r\n if (link.points.length < 2) return;\r\n const tolerance = ((link.style as { hitStrokeWidth?: number } | undefined)?.hitStrokeWidth ?? 15) / 2;\r\n for (let i = 1; i < link.points.length; i += 1) {\r\n const projected = this.projectPointOnSegment(point, link.points[i - 1], link.points[i]);\r\n if (projected.distance > tolerance) continue;\r\n if (projected.distance < bestDistance) {\r\n bestDistance = projected.distance;\r\n bestId = link.id;\r\n }\r\n }\r\n });\r\n\r\n return bestId ? { id: bestId, type: 'link' as const } : null;\r\n }\r\n\r\n private setCursor(cursor: string): void {\r\n const stageAny = this.stage as unknown as {\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n };\r\n const container =\r\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\r\n if (container && container.style) {\r\n container.style.cursor = cursor;\r\n }\r\n }\r\n\r\n private updateHoverCursor(point: Point): void {\n const hit = this.resolveHit(point);\r\n if (!hit || hit.type === 'none') {\r\n this.setCursor('default');\r\n return;\r\n }\r\n if (hit.type === 'resize-handle') {\r\n const parsed = this.parseResizeHandle(hit.id);\r\n this.setCursor(parsed ? this.getResizeCursor(parsed.handle) : 'nwse-resize');\r\n return;\r\n }\r\n if (hit.type === 'link-handle') {\n this.setCursor('move');\n return;\n }\n if (hit.type === 'shape-hover-control') {\n this.setCursor('pointer');\n return;\n }\n if (hit.type === 'port') {\n const isSelected = this.engine.getSelection().includes(hit.id);\n this.setCursor(isSelected ? 'grab' : 'crosshair');\n return;\r\n }\r\n if (hit.type === 'link') {\r\n this.setCursor('pointer');\r\n return;\r\n }\n this.setCursor('grab');\n }\n\n private normalizeShapeHoverControls(\n controls?: ElementShapeHoverControls,\n ): NormalizedShapeHoverControls | undefined {\n if (!controls) return undefined;\n const normalizedControls: NormalizedShapeControlDefinition[] = [];\n const usedControlIds = new Set<string>();\n\n (controls.controls ?? []).forEach((control) => {\n const normalized = this.normalizeShapeHoverControlDefinition(control);\n if (!normalized || usedControlIds.has(normalized.id)) return;\n usedControlIds.add(normalized.id);\n normalizedControls.push(normalized);\n });\n\n const legacyEdge = controls.edge?.icon.svgPath?.trim()\n ? this.normalizeShapeHoverControlDefinition({\n id: 'legacy-edge-control',\n targetKind: 'edge',\n icon: {\n svgPath: controls.edge.icon.svgPath,\n size: controls.edge.icon.size,\n style: controls.edge.icon.style,\n },\n allowAllTargets: true,\n visibilityTriggers: ['target-hover'],\n tolerance: controls.edge.tolerance,\n lineStyle: controls.edge.lineStyle,\n })\n : null;\n const legacyVertex = controls.vertex?.icon.svgPath?.trim()\n ? this.normalizeShapeHoverControlDefinition({\n id: 'legacy-vertex-control',\n targetKind: 'vertex',\n icon: {\n svgPath: controls.vertex.icon.svgPath,\n size: controls.vertex.icon.size,\n style: controls.vertex.icon.style,\n },\n allowAllTargets: true,\n visibilityTriggers: ['target-hover'],\n tolerance: controls.vertex.tolerance,\n })\n : null;\n const legacyOrder =\n controls.priority === 'vertex-first'\n ? [legacyVertex, legacyEdge]\n : [legacyEdge, legacyVertex];\n legacyOrder.forEach((legacyControl) => {\n if (!legacyControl || usedControlIds.has(legacyControl.id)) return;\n usedControlIds.add(legacyControl.id);\n normalizedControls.push(legacyControl);\n });\n\n if (normalizedControls.length === 0) return undefined;\n return { controls: normalizedControls };\n }\n\n private normalizeShapeHoverControlDefinition(\n control: ShapeControlDefinition | undefined,\n ): NormalizedShapeControlDefinition | null {\n if (!control) return null;\n const id = control.id?.trim();\n const svgPath = control.icon?.svgPath?.trim();\n if (!id || !svgPath) return null;\n if (\n control.targetKind !== 'edge' &&\n control.targetKind !== 'vertex' &&\n control.targetKind !== 'midpoint' &&\n control.targetKind !== 'ellipse-midpoint'\n ) {\n return null;\n }\n const visibilityTriggers = this.normalizeVisibilityTriggers(control.visibilityTriggers);\n const targetIndices =\n control.targetKind === 'ellipse-midpoint'\n ? undefined\n : this.normalizeTargetIndices(control.targetIndices);\n const ellipseMidPoints =\n control.targetKind === 'ellipse-midpoint'\n ? this.normalizeEllipseMidPoints(control.ellipseMidPoints)\n : undefined;\n return {\n ...control,\n id,\n icon: {\n ...control.icon,\n svgPath,\n },\n visibilityTriggers,\n targetIndices,\n ellipseMidPoints,\n tolerance:\n typeof control.tolerance === 'number'\n ? control.tolerance\n : this.getDefaultShapeHoverControlTolerance(control.targetKind),\n };\n }\n\n private normalizeVisibilityTriggers(\n triggers: ShapeControlVisibilityTrigger[] | undefined,\n ): ShapeControlVisibilityTrigger[] {\n const source = triggers?.length ? triggers : ['target-hover'];\n const normalized: ShapeControlVisibilityTrigger[] = [];\n source.forEach((trigger) => {\n if (trigger !== 'target-hover' && trigger !== 'element-hover') return;\n if (normalized.includes(trigger)) return;\n normalized.push(trigger);\n });\n if (normalized.length === 0) {\n normalized.push('target-hover');\n }\n return normalized;\n }\n\n private normalizeTargetIndices(indices: number[] | undefined): number[] | undefined {\n if (!indices?.length) return undefined;\n const normalized: number[] = [];\n indices.forEach((index) => {\n if (!Number.isInteger(index) || index < 0) return;\n if (normalized.includes(index)) return;\n normalized.push(index);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private normalizeEllipseMidPoints(\n value: EllipseMidPoint | EllipseMidPoint[] | undefined,\n ): EllipseMidPoint[] | undefined {\n if (value === undefined) return undefined;\n const source = Array.isArray(value) ? value : [value];\n const normalized: EllipseMidPoint[] = [];\n source.forEach((entry) => {\n if (!isEllipseMidPoint(entry)) return;\n if (normalized.includes(entry)) return;\n normalized.push(entry);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private getDefaultShapeHoverControlTolerance(targetKind: ShapeControlTargetKind): number {\n if (targetKind === 'vertex') return 12;\n return 10;\n }\n\n private resolveShapeHoverControlFromHit(hitId: string, point: Point): ResolvedShapeHoverControl | null {\n const parsed = this.parseShapeHoverControlHitId(hitId);\n if (!parsed) return this.activeShapeHoverControl;\n if (\n this.activeShapeHoverControl &&\n this.activeShapeHoverControl.elementId === parsed.elementId &&\n this.activeShapeHoverControl.controlId === parsed.controlId &&\n this.activeShapeHoverControl.targetKind === parsed.targetKind &&\n this.activeShapeHoverControl.targetIndex === parsed.targetIndex\n ) {\n return this.activeShapeHoverControl;\n }\n const resolved = this.resolveShapeHoverControl(parsed.elementId, point);\n if (!resolved) return null;\n if (\n resolved.controlId !== parsed.controlId ||\n resolved.targetKind !== parsed.targetKind ||\n resolved.targetIndex !== parsed.targetIndex ||\n (parsed.ellipseMidPoint !== undefined &&\n (!('ellipseMidPoint' in resolved.target) || resolved.target.ellipseMidPoint !== parsed.ellipseMidPoint))\n ) {\n return null;\n }\n return resolved;\n }\n\n private parseShapeHoverControlHitId(hitId: string): {\n elementId: string;\n controlId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n ellipseMidPoint?: EllipseMidPoint;\n } | null {\n const parts = hitId.split(':');\n if (parts.length < 5 || parts[0] !== 'shape-hover-control') return null;\n const targetRef = parts[parts.length - 1];\n const targetKind = parts[parts.length - 2];\n if (\n targetKind !== 'edge' &&\n targetKind !== 'vertex' &&\n targetKind !== 'midpoint' &&\n targetKind !== 'ellipse-midpoint'\n ) {\n return null;\n }\n const elementId = parts[1];\n const controlId = parts.slice(2, parts.length - 2).join(':');\n if (!elementId || !controlId) return null;\n if (targetKind === 'ellipse-midpoint') {\n if (!isEllipseMidPoint(targetRef)) return null;\n const targetIndex = ellipseMidPointToIndex(targetRef);\n if (targetIndex < 0) return null;\n return {\n elementId,\n controlId,\n targetKind,\n targetIndex,\n ellipseMidPoint: targetRef,\n };\n }\n const targetIndex = Number(targetRef);\n if (!Number.isInteger(targetIndex) || targetIndex < 0) return null;\n return {\n elementId,\n controlId,\n targetKind,\n targetIndex,\n };\n }\n\n private emitShapeHoverControlInteraction(\n eventType: 'click' | 'drag-start' | 'drag-move' | 'drag-end',\n control: ResolvedShapeHoverControl,\n point: Point,\n nativeEvent?: MouseEvent | PointerEvent,\n drag?: ElementShapeControlDragEvent,\n ): void {\n if (!this.onShapeHoverControlInteracted) return;\n const pointer = this.buildPointerInfo(point, nativeEvent);\n this.onShapeHoverControlInteracted({\n eventType,\n controlId: control.controlId,\n elementId: control.elementId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n pointer,\n edge:\n 'midpoint' in control.target\n ? {\n id: control.target.id,\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n }\n : undefined,\n ellipseMidPoint:\n 'ellipseMidPoint' in control.target\n ? control.target.ellipseMidPoint\n : undefined,\n vertex:\n 'position' in control.target && !('ellipseMidPoint' in control.target)\n ? {\n id: control.target.id,\n position: { ...control.target.position },\n }\n : undefined,\n drag: drag\n ? {\n sessionId: drag.sessionId,\n startPointer: {\n ...drag.startPointer,\n client: { ...drag.startPointer.client },\n world: { ...drag.startPointer.world },\n },\n delta: { ...drag.delta },\n }\n : undefined,\n });\n }\n\n private emitLegacyShapeHoverControlActivation(\n control: ResolvedShapeHoverControl,\n point: Point,\n nativeEvent?: MouseEvent | PointerEvent,\n ): void {\n if (!this.onShapeHoverControlActivated) return;\n if ('ellipseMidPoint' in control.target) return;\n const pointer = this.buildPointerInfo(point, nativeEvent);\n if ('position' in control.target) {\n this.onShapeHoverControlActivated({\n controlKind: 'vertex',\n elementId: control.elementId,\n targetId: control.target.id,\n pointer,\n vertex: {\n id: control.target.id,\n position: { ...control.target.position },\n },\n });\n return;\n }\n this.onShapeHoverControlActivated({\n controlKind: 'edge',\n elementId: control.elementId,\n targetId: control.target.id,\n pointer,\n edge: {\n id: control.target.id,\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n },\n });\n }\n\n private updateShapeHoverControl(point: Point): void {\n if (this.dragState) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (!this.shapeHoverControls) {\n this.clearActiveShapeHoverControl();\n return;\n }\n const hit = this.resolveHit(point);\n if (hit?.type === 'shape-hover-control' && this.activeShapeHoverControl) {\n return;\n }\n if (!hit || hit.type !== 'element') {\n this.clearActiveShapeHoverControl();\n return;\n }\n const resolved = this.resolveShapeHoverControl(hit.id, point);\n if (!resolved) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (\n this.activeShapeHoverControl &&\n this.activeShapeHoverControl.controlId === resolved.controlId &&\n this.activeShapeHoverControl.elementId === resolved.elementId &&\n this.activeShapeHoverControl.targetKind === resolved.targetKind &&\n this.activeShapeHoverControl.targetIndex === resolved.targetIndex &&\n this.isSameShapeHoverTarget(this.activeShapeHoverControl.target, resolved.target)\n ) {\n return;\n }\n this.activeShapeHoverControl = resolved;\n this.renderer?.renderShapeHoverControl?.(this.toShapeHoverRenderConfig(resolved));\n }\n\n private resolveShapeHoverControl(elementId: string, point: Point): ResolvedShapeHoverControl | null {\n const controls = this.shapeHoverControls?.controls;\n if (!controls?.length) return null;\n const element = this.getElementById(elementId);\n if (!element) return null;\n const shape = this.shapeRegistry?.get(element.shapeId);\n if (!shape) return null;\n const world = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const rect = {\n x: world.x,\n y: world.y,\n width: element.size.width,\n height: element.size.height,\n };\n const geometry = shape.resolveHoverGeometry?.(rect);\n const transformed = geometry\n ? this.resolveRotatedHoverGeometry(\n geometry,\n elementId,\n world,\n element.size,\n element.anchorCenter ?? false,\n )\n : undefined;\n const ellipseMidPoints = this.resolveRotatedEllipseMidPoints(\n shape.resolveEllipseMidPoints?.(rect),\n elementId,\n world,\n element.size,\n element.anchorCenter ?? false,\n );\n for (let index = 0; index < controls.length; index += 1) {\n const control = controls[index];\n const targetHoverCandidate = control.visibilityTriggers.includes('target-hover')\n ? this.resolveTargetHoverCandidate(point, transformed, ellipseMidPoints, control)\n : null;\n const elementHoverCandidate = control.visibilityTriggers.includes('element-hover')\n ? this.resolveElementHoverCandidate(point, transformed, ellipseMidPoints, control)\n : null;\n const candidate = targetHoverCandidate ?? elementHoverCandidate;\n if (!candidate) continue;\n return {\n control,\n controlId: control.id,\n elementId,\n targetKind: control.targetKind,\n targetIndex: candidate.targetIndex,\n target: candidate.target,\n };\n }\n return null;\n }\n\n private resolveTargetHoverCandidate(\n point: Point,\n geometry: ShapeHoverGeometry | undefined,\n ellipseMidPoints: ShapeEllipseMidPointTarget[],\n control: NormalizedShapeControlDefinition,\n ): { targetIndex: number; target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget } | null {\n if (control.targetKind === 'ellipse-midpoint') {\n const targets = this.resolveEligibleEllipseMidPoints(control, ellipseMidPoints);\n if (!targets.length || control.tolerance <= 0) return null;\n let best: { target: ShapeEllipseMidPointTarget; distance: number } | null = null;\n for (const target of targets) {\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { target, distance };\n }\n if (!best) return null;\n return { targetIndex: ellipseMidPointToIndex(best.target.ellipseMidPoint), target: best.target };\n }\n if (!geometry) return null;\n const indices = this.resolveEligibleTargetIndices(control, geometry);\n if (!indices.length || control.tolerance <= 0) return null;\n if (control.targetKind === 'vertex') {\n let best: { targetIndex: number; target: ShapeVertexTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.vertices[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n if (control.targetKind === 'edge') {\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const projected = this.projectPointOnSegment(point, target.start, target.end);\n if (projected.distance > control.tolerance) continue;\n if (best && projected.distance >= best.distance) continue;\n best = { targetIndex, target, distance: projected.distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.midpoint.x, point.y - target.midpoint.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n\n private resolveElementHoverCandidate(\n point: Point,\n geometry: ShapeHoverGeometry | undefined,\n ellipseMidPoints: ShapeEllipseMidPointTarget[],\n control: NormalizedShapeControlDefinition,\n ): { targetIndex: number; target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget } | null {\n if (control.targetKind === 'ellipse-midpoint') {\n const targets = this.resolveEligibleEllipseMidPoints(control, ellipseMidPoints);\n if (!targets.length) return null;\n let best: { target: ShapeEllipseMidPointTarget; distance: number } | null = null;\n for (const target of targets) {\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (best && distance >= best.distance) continue;\n best = { target, distance };\n }\n if (!best) return null;\n return { targetIndex: ellipseMidPointToIndex(best.target.ellipseMidPoint), target: best.target };\n }\n if (!geometry) return null;\n const indices = this.resolveEligibleTargetIndices(control, geometry);\n if (!indices.length) return null;\n if (control.targetKind === 'vertex') {\n let best: { targetIndex: number; target: ShapeVertexTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.vertices[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n if (control.targetKind === 'edge') {\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const projected = this.projectPointOnSegment(point, target.start, target.end);\n if (best && projected.distance >= best.distance) continue;\n best = { targetIndex, target, distance: projected.distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.midpoint.x, point.y - target.midpoint.y);\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n\n private resolveEligibleTargetIndices(\n control: NormalizedShapeControlDefinition,\n geometry: ShapeHoverGeometry,\n ): number[] {\n const source = control.targetKind === 'vertex' ? geometry.vertices : geometry.edges;\n if (!source.length) return [];\n if (control.allowAllTargets === true) {\n return Array.from({ length: source.length }, (_, index) => index);\n }\n if (!control.targetIndices?.length) return [];\n return control.targetIndices.filter((targetIndex) => targetIndex >= 0 && targetIndex < source.length);\n }\n\n private resolveEligibleEllipseMidPoints(\n control: NormalizedShapeControlDefinition,\n targets: ShapeEllipseMidPointTarget[],\n ): ShapeEllipseMidPointTarget[] {\n if (!targets.length) return [];\n if (control.allowAllTargets === true) {\n return [...targets];\n }\n if (!control.ellipseMidPoints?.length) return [];\n return control.ellipseMidPoints\n .map((midPoint) => targets.find((target) => target.ellipseMidPoint === midPoint))\n .filter((target): target is ShapeEllipseMidPointTarget => Boolean(target));\n }\n\n private resolveRotatedHoverGeometry(\n geometry: ShapeHoverGeometry,\n elementId: string,\n worldPosition: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n ): ShapeHoverGeometry {\n const rotation = this.engine.getElementRotation(elementId);\n if (Math.abs(rotation) <= 1e-6) {\n return geometry;\n }\n const pivot = resolveRectRotationPivot(worldPosition, size, anchorCenter);\n const rotate = (input: Point) => rotatePoint(input, pivot, rotation);\n const vertices = geometry.vertices.map((vertex) => ({\n id: vertex.id,\n position: rotate(vertex.position),\n }));\n const edges = geometry.edges.map((edge) => {\n const start = rotate(edge.start);\n const end = rotate(edge.end);\n return {\n id: edge.id,\n start,\n end,\n midpoint: {\n x: (start.x + end.x) / 2,\n y: (start.y + end.y) / 2,\n },\n };\n });\n return { vertices, edges };\n }\n\n private resolveRotatedEllipseMidPoints(\n targets: ShapeEllipseMidPointTarget[] | undefined,\n elementId: string,\n worldPosition: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n ): ShapeEllipseMidPointTarget[] {\n if (!targets?.length) return [];\n const rotation = this.engine.getElementRotation(elementId);\n if (Math.abs(rotation) <= 1e-6) {\n return targets.map((target) => ({\n id: target.id,\n ellipseMidPoint: target.ellipseMidPoint,\n position: { ...target.position },\n }));\n }\n const pivot = resolveRectRotationPivot(worldPosition, size, anchorCenter);\n return targets.map((target) => ({\n id: target.id,\n ellipseMidPoint: target.ellipseMidPoint,\n position: rotatePoint(target.position, pivot, rotation),\n }));\n }\n\n private isSameShapeHoverTarget(\n previous: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget,\n next: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget,\n ): boolean {\n if ('midpoint' in previous && 'midpoint' in next) {\n return (\n this.isSamePoint(previous.start, next.start) &&\n this.isSamePoint(previous.end, next.end) &&\n this.isSamePoint(previous.midpoint, next.midpoint)\n );\n }\n if ('ellipseMidPoint' in previous && 'ellipseMidPoint' in next) {\n return (\n previous.ellipseMidPoint === next.ellipseMidPoint &&\n this.isSamePoint(previous.position, next.position)\n );\n }\n if ('position' in previous && 'position' in next) {\n return this.isSamePoint(previous.position, next.position);\n }\n return false;\n }\n\n private isSamePoint(a: Point, b: Point): boolean {\n return Math.abs(a.x - b.x) <= 1e-6 && Math.abs(a.y - b.y) <= 1e-6;\n }\n\n private toShapeHoverRenderConfig(control: ResolvedShapeHoverControl): ShapeHoverControlRenderConfig {\n if ('ellipseMidPoint' in control.target) {\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n targetRef: control.target.ellipseMidPoint,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n ellipseMidPoint: {\n id: control.target.id,\n position: { ...control.target.position },\n },\n };\n }\n if ('midpoint' in control.target) {\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n edge: {\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n lineStyle: control.targetKind === 'edge' ? control.control.lineStyle : undefined,\n },\n };\n }\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n vertex: {\n position: { ...control.target.position },\n },\n };\n }\n\n private clearActiveShapeHoverControl(): void {\n this.activeShapeHoverControl = null;\n this.renderer?.clearShapeHoverControl?.();\n }\n\n private startTextEdit(textId: string): void {\n if (typeof document === 'undefined') return;\r\n const text = this.getTextById(textId);\r\n if (!text) return;\r\n const container = this.getStageContainer();\r\n if (!container) return;\r\n this.disposeTextEditor();\r\n\r\n const editor = document.createElement('textarea');\n const defaults = resolveTextStyleDefaults(text.style);\n const fontSize = defaults.fontSize;\n const fontFamily = defaults.fontFamily;\n const baseWidth = text.size?.width ?? Math.max(text.content.length, 1) * fontSize * 0.6;\r\n const baseHeight = text.size?.height ?? fontSize * 1.2;\r\n const position = this.resolveTextScreenPosition(textId, text.position);\r\n\r\n if (container.style.position === '' || container.style.position === 'static') {\r\n container.style.position = 'relative';\r\n }\r\n\r\n editor.value = text.content;\r\n editor.style.position = 'absolute';\r\n editor.style.left = `${position.x}px`;\r\n editor.style.top = `${position.y}px`;\r\n editor.style.width = `${Math.max(baseWidth, 40)}px`;\r\n editor.style.height = `${Math.max(baseHeight, 20)}px`;\r\n editor.style.fontSize = `${fontSize}px`;\r\n editor.style.fontFamily = fontFamily;\r\n editor.style.padding = '2px 4px';\r\n editor.style.margin = '0';\r\n editor.style.border = '1px solid #1f4d99';\r\n editor.style.borderRadius = '4px';\r\n editor.style.background = '#ffffff';\r\n editor.style.resize = 'none';\r\n editor.style.outline = 'none';\r\n editor.style.zIndex = '10';\r\n\r\n let finalized = false;\r\n const finalize = (apply: boolean) => {\r\n if (finalized) return;\r\n finalized = true;\r\n const value = editor.value;\r\n editor.remove();\r\n this.textEditor = null;\r\n if (apply && value !== text.content) {\r\n this.engine.updateText(textId, value);\r\n }\r\n };\r\n\r\n editor.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n event.preventDefault();\r\n finalize(true);\r\n } else if (event.key === 'Escape') {\r\n event.preventDefault();\r\n finalize(false);\r\n }\r\n });\r\n editor.addEventListener('blur', () => finalize(true));\r\n\r\n container.appendChild(editor);\r\n editor.focus();\r\n editor.select();\r\n this.textEditor = editor;\r\n }\r\n\r\n private disposeTextEditor(): void {\r\n if (!this.textEditor) return;\r\n this.textEditor.remove();\r\n this.textEditor = null;\r\n }\r\n\r\n private updateSelectionOverlays(): void {\n if (!this.renderer) return;\r\n const selection = this.engine.getSelection();\r\n if (selection.length !== 1) {\r\n this.renderer.clearResizeHandles();\r\n this.renderer.clearLinkHandles();\r\n return;\r\n }\r\n const id = selection[0];\r\n const element = this.getElementById(id);\n if (element) {\n const position = this.engine.getElementWorldPosition(id) ?? element.position;\n this.renderElementResizeHandles(id, position, element);\n this.renderer.clearLinkHandles();\n return;\n }\n const link = this.getLinkById(id);\r\n if (link) {\r\n this.renderer.renderLinkHandles(id, link.points);\r\n this.renderer.clearResizeHandles();\r\n return;\r\n }\r\n this.renderer.clearResizeHandles();\n this.renderer.clearLinkHandles();\n }\n\n private renderElementResizeHandles(\n elementId: string,\n position: Point,\n element: { size: { width: number; height: number }; anchorCenter?: boolean },\n ): void {\n if (!this.renderer) return;\n const rotation = this.engine.getElementRotation(elementId);\n const anchorCenter = element.anchorCenter ?? false;\n if (Math.abs(rotation) > 1e-6 || anchorCenter) {\n this.renderer.renderResizeHandles(elementId, position, element.size, { rotation, anchorCenter });\n return;\n }\n this.renderer.renderResizeHandles(elementId, position, element.size);\n }\n\r\n private handleResizeDrag(state: Extract<DragState, { mode: 'resize' }>, point: Point): void {\n const minSize = 20;\n const origin = state.origin;\n const originX = origin.worldPosition.x;\n const originY = origin.worldPosition.y;\n const originWidth = origin.size.width;\n const originHeight = origin.size.height;\n const originRight = originX + originWidth;\n const originBottom = originY + originHeight;\n\n let localPoint = point;\n if (Math.abs(origin.rotation) > 1e-6) {\n const pivot = resolveRectRotationPivot(origin.worldPosition, origin.size, origin.anchorCenter);\n localPoint = rotatePoint(point, pivot, -origin.rotation);\n }\n\n let x = originX;\n let y = originY;\n let width = originWidth;\n let height = originHeight;\n\n switch (state.handle) {\n case 'se':\n width = Math.max(minSize, localPoint.x - originX);\n height = Math.max(minSize, localPoint.y - originY);\n break;\n case 'sw':\n width = Math.max(minSize, originRight - localPoint.x);\n x = originRight - width;\n height = Math.max(minSize, localPoint.y - originY);\n break;\n case 'ne':\n height = Math.max(minSize, originBottom - localPoint.y);\n y = originBottom - height;\n width = Math.max(minSize, localPoint.x - originX);\n break;\n case 'nw':\n width = Math.max(minSize, originRight - localPoint.x);\n height = Math.max(minSize, originBottom - localPoint.y);\n x = originRight - width;\n y = originBottom - height;\n break;\n default:\n break;\n }\n\n const normalized = this.engine.normalizeElementResize(state.elementId, { x, y, width, height }, state.handle, minSize);\n const moveTarget = origin.anchorCenter\n ? {\n x: normalized.x + normalized.width / 2,\n y: normalized.y + normalized.height / 2,\n }\n : { x: normalized.x, y: normalized.y };\n this.engine.moveElementTo(state.elementId, moveTarget.x, moveTarget.y);\n this.engine.resizeElement(state.elementId, normalized.width, normalized.height);\n this.updateSelectionOverlays();\n }\n\r\n private parseResizeHandle(id: string): { elementId: string; handle: 'nw' | 'ne' | 'sw' | 'se' } | null {\r\n const parts = id.split(':');\r\n if (parts.length !== 3 || parts[0] !== 'resize') return null;\r\n const handle = parts[2] as 'nw' | 'ne' | 'sw' | 'se';\r\n if (!['nw', 'ne', 'sw', 'se'].includes(handle)) return null;\r\n return { elementId: parts[1], handle };\r\n }\r\n\r\n private parseLinkHandle(id: string): { linkId: string; pointIndex: number } | null {\r\n const parts = id.split(':');\r\n if (parts.length !== 3 || parts[0] !== 'link-handle') return null;\r\n const index = Number(parts[2]);\r\n if (Number.isNaN(index)) return null;\r\n return { linkId: parts[1], pointIndex: index };\r\n }\r\n\r\n private getResizeCursor(handle: 'nw' | 'ne' | 'sw' | 'se'): string {\r\n if (handle === 'nw' || handle === 'se') return 'nwse-resize';\r\n return 'nesw-resize';\r\n }\r\n\r\n private normalizeRect(a: Point, b: Point): { x: number; y: number; width: number; height: number } {\r\n const x = Math.min(a.x, b.x);\r\n const y = Math.min(a.y, b.y);\r\n const width = Math.abs(a.x - b.x);\r\n const height = Math.abs(a.y - b.y);\r\n return { x, y, width, height };\r\n }\r\n\r\n private findNearestSegmentPoint(points: Point[], target: Point): { index: number; point: Point } | null {\r\n if (points.length < 2) return null;\r\n let bestIndex = 0;\r\n let bestPoint = points[0];\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n for (let i = 0; i < points.length - 1; i += 1) {\r\n const projected = this.projectPointOnSegment(target, points[i], points[i + 1]);\r\n if (projected.distance < bestDistance) {\r\n bestDistance = projected.distance;\r\n bestIndex = i;\r\n bestPoint = projected.point;\r\n }\r\n }\r\n\r\n return { index: bestIndex, point: bestPoint };\r\n }\r\n\r\n private projectPointOnSegment(point: Point, a: Point, b: Point): { point: Point; distance: number } {\r\n const dx = b.x - a.x;\r\n const dy = b.y - a.y;\r\n const len2 = dx * dx + dy * dy;\r\n if (len2 === 0) {\r\n const distance = Math.hypot(point.x - a.x, point.y - a.y);\r\n return { point: { ...a }, distance };\r\n }\r\n const t = ((point.x - a.x) * dx + (point.y - a.y) * dy) / len2;\r\n const clamped = Math.max(0, Math.min(1, t));\r\n const projected = { x: a.x + clamped * dx, y: a.y + clamped * dy };\r\n const distance = Math.hypot(point.x - projected.x, point.y - projected.y);\r\n return { point: projected, distance };\r\n }\r\n\r\n private applyMarqueeSelection(\r\n rect: { x: number; y: number; width: number; height: number },\r\n isMulti: boolean,\r\n ): void {\r\n const state = this.engine.getState();\r\n const selected = new Set<string>(isMulti ? this.engine.getSelection() : []);\r\n const containsPoint = (point: Point) =>\r\n point.x >= rect.x &&\r\n point.x <= rect.x + rect.width &&\r\n point.y >= rect.y &&\r\n point.y <= rect.y + rect.height;\r\n state.elements.forEach((element) => {\n const position = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rotation = this.engine.getElementRotation(element.id);\n const anchorCenter = element.anchorCenter ?? false;\n if (Math.abs(rotation) < 1e-6 && !anchorCenter) {\n const elementRect = { x: position.x, y: position.y, width: element.size.width, height: element.size.height };\n if (rectsIntersect(rect, elementRect)) {\n selected.add(element.id);\n }\n return;\n }\n const corners = getRotatedRectCorners(position, element.size, rotation, anchorCenter);\n if (polygonIntersectsRect([corners.nw, corners.ne, corners.se, corners.sw], rect)) {\n selected.add(element.id);\n }\n });\n state.ports.forEach((port) => {\r\n const position = this.engine.getPortWorldPosition(port.id) ?? port.position;\r\n if (containsPoint(position)) {\r\n selected.add(port.id);\r\n }\r\n });\r\n state.texts.forEach((text) => {\r\n const position = this.engine.getTextWorldPosition(text.id) ?? text.position;\r\n const width = text.size?.width ?? 0;\r\n const height = text.size?.height ?? 0;\r\n const textRect = { x: position.x, y: position.y, width, height };\r\n if (rectsIntersect(rect, textRect) || containsPoint(position)) {\r\n selected.add(text.id);\r\n }\r\n });\r\n state.links.forEach((link) => {\r\n if (link.points.length === 0) return;\r\n const xs = link.points.map((point) => point.x);\r\n const ys = link.points.map((point) => point.y);\r\n const linkRect = {\r\n x: Math.min(...xs),\r\n y: Math.min(...ys),\r\n width: Math.max(...xs) - Math.min(...xs),\r\n height: Math.max(...ys) - Math.min(...ys),\r\n };\r\n if (rectsIntersect(rect, linkRect)) {\r\n selected.add(link.id);\r\n }\r\n });\r\n this.engine.setSelection(Array.from(selected));\r\n }\r\n\r\n private applyPortConstraints(portId: string, worldTarget: Point): Point {\n const port = this.getPortById(portId);\r\n if (!port) return worldTarget;\r\n const elementPos = this.engine.getElementWorldPosition(port.elementId);\r\n if (!elementPos) return worldTarget;\r\n const relative = { x: worldTarget.x - elementPos.x, y: worldTarget.y - elementPos.y };\r\n const style = port.style as { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' } | undefined;\r\n\r\n let constrained = { ...relative };\r\n if (style?.moveAxis === 'horizontal') {\r\n constrained.y = port.position.y;\r\n } else if (style?.moveAxis === 'vertical') {\r\n constrained.x = port.position.x;\r\n }\r\n if (style?.moveBounds) {\r\n const bounds = style.moveBounds;\r\n constrained.x = Math.min(bounds.x + bounds.width, Math.max(bounds.x, constrained.x));\r\n constrained.y = Math.min(bounds.y + bounds.height, Math.max(bounds.y, constrained.y));\r\n }\r\n return { x: elementPos.x + constrained.x, y: elementPos.y + constrained.y };\n }\n\n private tryCreateLinkToPort(\n sourcePortId: string,\n sourceElementId: string,\n targetPortId: string,\n ): { createdLinkId: string | null; targetPortId: string; targetElementId: string | null } {\n const targetElementId = this.engine.getPortElementId(targetPortId);\n const cancelledByHost =\n targetElementId !== null &&\n this.engine.emitElementLinkConnecting({\n sourcePortId,\n sourceElementId,\n targetPortId,\n targetElementId,\n cancel: () => {},\n cancelled: false,\n });\n if (cancelledByHost || !targetElementId) {\n return { createdLinkId: null, targetPortId, targetElementId };\n }\n const createdLinkId = createId();\n this.engine.addLink({\n id: createdLinkId,\n sourcePortId,\n targetPortId,\n points: [],\n });\n return { createdLinkId, targetPortId, targetElementId };\n }\n\n private createPortForLink(elementId: string, worldPoint: Point, sourcePortId: string): string | null {\n const element = this.getElementById(elementId);\n if (!element) return null;\n const elementPosition = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const relative = {\r\n x: worldPoint.x - elementPosition.x,\r\n y: worldPoint.y - elementPosition.y,\r\n };\n const sourcePort = this.getPortById(sourcePortId);\n const destinationMoveMode =\n element.portMovement?.moveMode && element.portMovement.moveMode !== 'anchors'\n ? element.portMovement.moveMode\n : undefined;\n const portId = createId();\n this.engine.addPortToElement(elementId, {\n id: portId,\n elementId,\n position: relative,\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: destinationMoveMode ?? sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n orientToHostBorder: sourcePort?.orientToHostBorder ?? true,\n });\n this.engine.movePortTo(portId, worldPoint.x, worldPoint.y);\n return portId;\n }\n\n private createPlaceholderPort(elementId: string, worldPoint: Point, sourcePortId: string) {\n const element = this.getElementById(elementId);\n const sourcePort = this.getPortById(sourcePortId);\n const destinationMoveMode =\n element?.portMovement?.moveMode && element.portMovement.moveMode !== 'anchors'\n ? element.portMovement.moveMode\n : undefined;\n return {\n id: `port-placeholder:${sourcePortId}`,\n elementId,\n position: { x: worldPoint.x, y: worldPoint.y },\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: destinationMoveMode ?? sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n orientToHostBorder: sourcePort?.orientToHostBorder ?? true,\n };\n }\n\r\n private getElementById(id: string) {\r\n return this.engine.getState().elements.find((element) => element.id === id);\r\n }\r\n\r\n private getPortById(id: string) {\r\n return this.engine.getState().ports.find((port) => port.id === id);\r\n }\r\n\r\n private getTextById(id: string) {\r\n return this.engine.getState().texts.find((text) => text.id === id);\r\n }\r\n\r\n private getLinkById(id: string): LinkData | undefined {\r\n return this.engine.getState().links.find((link) => link.id === id);\r\n }\r\n\r\n private resolveTextScreenPosition(textId: string, fallbackPosition: Point): Point {\r\n const world = this.engine.getTextWorldPosition(textId) ?? fallbackPosition;\r\n return {\r\n x: world.x * this.zoom + this.pan.x,\r\n y: world.y * this.zoom + this.pan.y,\r\n };\r\n }\r\n\r\n private applyViewportPatch(patches: { entity: string; payload?: Record<string, unknown> }[]): void {\r\n const viewportPatch = patches.find((patch) => patch.entity === 'viewport');\r\n if (!viewportPatch?.payload) return;\r\n const pan = viewportPatch.payload.pan as Point | undefined;\r\n const zoom = viewportPatch.payload.zoom as number | undefined;\r\n if (!pan || typeof zoom !== 'number') return;\r\n if (pan.x === this.pan.x && pan.y === this.pan.y && zoom === this.zoom) return;\r\n this.pan = { ...pan };\r\n this.zoom = zoom;\r\n this.applyStageTransform();\r\n }\r\n\r\n private applyStageTransform(): void {\r\n const stageAny = this.stage as unknown as {\r\n scale?: (value: { x: number; y: number }) => void;\r\n position?: (value: Point) => void;\r\n };\r\n stageAny?.scale?.({ x: this.zoom, y: this.zoom });\r\n stageAny?.position?.(this.pan);\r\n }\r\n\r\n private cancelLinkDrag(): void {\n if (this.dragState?.mode === 'shape-control-drag') {\n const point = this.lastPointerPosition ?? this.dragState.start;\n if (this.dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-end', this.dragState.control, point, undefined, {\n sessionId: this.dragState.sessionId,\n startPointer: this.dragState.startPointer,\n delta: {\n x: point.x - this.dragState.start.x,\n y: point.y - this.dragState.start.y,\n },\n });\n }\n this.dragState = null;\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n return;\n }\n if (!this.dragState || this.dragState.mode !== 'link-drag') {\n if (this.linkDragContext) {\n this.engine.emitElementLinkEnded({\n ...this.linkDragContext,\r\n cancelled: true,\r\n });\r\n this.linkDragContext = null;\r\n }\r\n return;\r\n }\r\n const point = this.dragState.current ?? this.dragState.start;\r\n const pointerInfo = this.buildPointerInfo(point, null);\r\n this.engine.emitPortMouseUp({\r\n portId: this.dragState.sourcePortId,\r\n elementId: this.dragState.sourceElementId,\r\n pointer: pointerInfo,\r\n });\r\n this.engine.emitElementLinkEnded({\r\n sourcePortId: this.dragState.sourcePortId,\r\n sourceElementId: this.dragState.sourceElementId,\r\n cancelled: true,\r\n });\r\n this.linkDragContext = null;\r\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.dragState = null;\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n\r\n private isEditableTarget(target: EventTarget | null): boolean {\r\n if (!target || !(target instanceof HTMLElement)) return false;\r\n if (target.isContentEditable) return true;\r\n const tag = target.tagName.toLowerCase();\r\n return tag === 'input' || tag === 'textarea' || tag === 'select';\r\n }\r\n\r\n private isPanKeyPressed(event: MouseEvent | PointerEvent): boolean {\r\n switch (this.panKey) {\r\n case 'Shift':\r\n return event.shiftKey;\r\n case 'Alt':\r\n return event.altKey;\r\n case 'Meta':\r\n return event.metaKey;\r\n case 'Control':\r\n default:\r\n return event.ctrlKey;\r\n }\r\n }\r\n}\r\n","import {\n EllipseMidPoint,\n Point,\n PortAnchor,\n Rect,\n ResolvePortAnchorsOptions,\n ShapeEdgeTarget,\n ShapeEllipseMidPointTarget,\n ShapeHoverGeometry,\n ShapeVertexTarget,\n} from '../api/types';\nimport { ShapeNodeSizeUpdater, ShapeResizeNormalizeContext } from '../renderer/RenderTypes';\nimport { BorderSide, projectPointToBoundary, resolveBoundarySide } from '../utils/borderGeometry';\n\nexport type BuiltInShapeKind =\n | 'rect'\n | 'circle'\n | 'ellipse'\n | 'diamond'\n | 'triangle'\n | 'pentagon'\n | 'hexagon';\n\nexport type ShapeNodeModel = {\n id: string;\n position: { x: number; y: number };\n size?: { width?: number; height?: number };\n style?: Record<string, unknown>;\n anchorCenter?: boolean;\n};\n\nexport type KonvaShapeLibraryLike = {\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Ellipse: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\nexport type ShapeCreateContext = {\n Konva: KonvaShapeLibraryLike;\n model: ShapeNodeModel;\n isPort: boolean;\n anchorCenter: boolean;\n};\n\ntype ShapeLibraryConfig = {\n id: string;\n kind: BuiltInShapeKind;\n style?: Record<string, unknown>;\n};\n\nconst resolveModelSize = (\n model: ShapeNodeModel,\n defaults: { width: number; height: number },\n): { width: number; height: number } => ({\n width: model.size?.width ?? defaults.width,\n height: model.size?.height ?? defaults.height,\n});\n\nconst resolveShapeName = (style: Record<string, unknown> | undefined, isPort: boolean): string =>\n (style?.name as string | undefined) ?? (isPort ? 'port' : 'element');\n\nconst splitStyleRotation = (\n style: Record<string, unknown> | undefined,\n): { style: Record<string, unknown> | undefined; rotation: number } => {\n if (!style) return { style: undefined, rotation: 0 };\n const { rotation, ...rest } = style;\n return {\n style: rest,\n rotation: typeof rotation === 'number' ? rotation : 0,\n };\n};\n\nconst createRectSizeUpdater = (): ShapeNodeSizeUpdater => ({ size, anchorCenter, updateOffsetX, updateOffsetY }) => {\n const attrs: Record<string, unknown> = {};\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n return attrs;\n};\n\nconst createCircleSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const autoRadius = getNodeAttr<boolean>('__autoRadius');\n const computedRadius = Math.min(size.width, size.height) / 2;\n const resolvedRadius =\n autoRadius === false ? (getNodeAttr<number>('radius') ?? computedRadius) : computedRadius;\n if (autoRadius !== false) {\n attrs.radius = computedRadius;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadius;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadius;\n }\n return attrs;\n};\n\nconst createEllipseSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const radiusX = Math.max(0, size.width / 2);\n const radiusY = Math.max(0, size.height / 2);\n const autoRadiusX = getNodeAttr<boolean>('__autoRadiusX');\n const autoRadiusY = getNodeAttr<boolean>('__autoRadiusY');\n const resolvedRadiusX = autoRadiusX === false ? (getNodeAttr<number>('radiusX') ?? radiusX) : radiusX;\n const resolvedRadiusY = autoRadiusY === false ? (getNodeAttr<number>('radiusY') ?? radiusY) : radiusY;\n if (autoRadiusX !== false) {\n attrs.radiusX = radiusX;\n }\n if (autoRadiusY !== false) {\n attrs.radiusY = radiusY;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadiusX;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadiusY;\n }\n return attrs;\n};\n\nconst createPolygonSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const autoPoints = getNodeAttr<boolean>('__autoPoints');\n const edgeCount = Math.max(3, getNodeAttr<number>('__edgeCount') ?? 3);\n if (autoPoints !== false) {\n attrs.points = resolveRegularPolygonPoints(size, edgeCount);\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n return attrs;\n};\n\nconst resolveRegularPolygonPoints = (\n size: { width: number; height: number },\n sides: number,\n baseRotation = 0,\n): number[] => {\n const cx = size.width / 2;\n const cy = size.height / 2;\n const rx = size.width / 2;\n const ry = size.height / 2;\n const baseRadians = (baseRotation * Math.PI) / 180;\n const points: number[] = [];\n for (let i = 0; i < sides; i += 1) {\n const angle = -Math.PI / 2 + baseRadians + (i * Math.PI * 2) / sides;\n points.push(cx + rx * Math.cos(angle), cy + ry * Math.sin(angle));\n }\n return points;\n};\n\nconst projectPointToSegment = (\n point: { x: number; y: number },\n start: { x: number; y: number },\n end: { x: number; y: number },\n): { x: number; y: number } => {\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared <= 1e-6) return { x: start.x, y: start.y };\n const t = ((point.x - start.x) * dx + (point.y - start.y) * dy) / lengthSquared;\n const clamped = Math.max(0, Math.min(1, t));\n return { x: start.x + dx * clamped, y: start.y + dy * clamped };\n};\n\nconst resolveDirectionalRectSide = (point: Point, rect: Rect): BorderSide => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) return 'top';\n const nx = (point.x - cx) / rx;\n const ny = (point.y - cy) / ry;\n if (Math.abs(nx) < 1e-6 && Math.abs(ny) < 1e-6) return 'top';\n if (Math.abs(nx) >= Math.abs(ny)) return nx < 0 ? 'left' : 'right';\n return ny < 0 ? 'top' : 'bottom';\n};\n\nconst projectPointToCircleBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const radius = Math.min(rect.width, rect.height) / 2;\n if (radius <= 0) return { x: cx, y: cy };\n const dx = point.x - cx;\n const dy = point.y - cy;\n if (Math.abs(dx) < 1e-6 && Math.abs(dy) < 1e-6) {\n return { x: cx, y: cy - radius };\n }\n const scale = radius / Math.sqrt(dx * dx + dy * dy);\n return { x: cx + dx * scale, y: cy + dy * scale };\n};\n\nconst projectPointToPolygonBorder = (\n point: Point,\n rect: Rect,\n resolvePoints: (size: { width: number; height: number }) => number[],\n): Point => {\n const localPoints = resolvePoints({ width: Math.max(0, rect.width), height: Math.max(0, rect.height) });\n if (localPoints.length < 6) {\n return { x: rect.x, y: rect.y };\n }\n\n const vertices: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < localPoints.length; i += 2) {\n vertices.push({ x: rect.x + localPoints[i], y: rect.y + localPoints[i + 1] });\n }\n\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const dx = point.x - cx;\n const dy = point.y - cy;\n\n let bestRayT = Number.POSITIVE_INFINITY;\n let bestRayPoint: Point | null = null;\n for (let i = 0; i < vertices.length; i += 1) {\n const start = vertices[i];\n const end = vertices[(i + 1) % vertices.length];\n const edgeDx = end.x - start.x;\n const edgeDy = end.y - start.y;\n const denom = dx * edgeDy - dy * edgeDx;\n if (Math.abs(denom) < 1e-6) continue;\n const fromCenterX = start.x - cx;\n const fromCenterY = start.y - cy;\n const rayT = (fromCenterX * edgeDy - fromCenterY * edgeDx) / denom;\n const edgeT = (fromCenterX * dy - fromCenterY * dx) / denom;\n if (rayT >= 0 && edgeT >= 0 && edgeT <= 1 && rayT < bestRayT) {\n bestRayT = rayT;\n bestRayPoint = { x: cx + dx * rayT, y: cy + dy * rayT };\n }\n }\n if (bestRayPoint) return bestRayPoint;\n\n let nearest = vertices[0];\n let nearestDistanceSquared = Number.POSITIVE_INFINITY;\n for (let i = 0; i < vertices.length; i += 1) {\n const start = vertices[i];\n const end = vertices[(i + 1) % vertices.length];\n const projected = projectPointToSegment(point, start, end);\n const diffX = projected.x - point.x;\n const diffY = projected.y - point.y;\n const distanceSquared = diffX * diffX + diffY * diffY;\n if (distanceSquared < nearestDistanceSquared) {\n nearestDistanceSquared = distanceSquared;\n nearest = projected;\n }\n }\n return nearest;\n};\n\nconst normalizeVector = (vector: Point): Point => {\n const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);\n if (length <= 1e-6) return { x: 0, y: -1 };\n return { x: vector.x / length, y: vector.y / length };\n};\n\nconst resolveCardinalAnchors = (rect: Rect): PortAnchor[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n { id: 'top', position: { x: cx, y: rect.y }, side: 'top', normal: { x: 0, y: -1 } },\n { id: 'right', position: { x: rect.x + rect.width, y: cy }, side: 'right', normal: { x: 1, y: 0 } },\n { id: 'bottom', position: { x: cx, y: rect.y + rect.height }, side: 'bottom', normal: { x: 0, y: 1 } },\n { id: 'left', position: { x: rect.x, y: cy }, side: 'left', normal: { x: -1, y: 0 } },\n ];\n};\n\nconst createEllipseMidPointTarget = (\n ellipseMidPoint: EllipseMidPoint,\n position: Point,\n): ShapeEllipseMidPointTarget => ({\n id: ellipseMidPoint,\n ellipseMidPoint,\n position,\n});\n\nconst resolveEllipseMidPoints = (rect: Rect): ShapeEllipseMidPointTarget[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n createEllipseMidPointTarget(EllipseMidPoint.top, { x: cx, y: rect.y }),\n createEllipseMidPointTarget(EllipseMidPoint.right, { x: rect.x + rect.width, y: cy }),\n createEllipseMidPointTarget(EllipseMidPoint.bottom, { x: cx, y: rect.y + rect.height }),\n createEllipseMidPointTarget(EllipseMidPoint.left, { x: rect.x, y: cy }),\n ];\n};\n\nconst resolveCircleMidPoints = (rect: Rect): ShapeEllipseMidPointTarget[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const radius = Math.max(0, Math.min(rect.width, rect.height) / 2);\n return [\n createEllipseMidPointTarget(EllipseMidPoint.top, { x: cx, y: cy - radius }),\n createEllipseMidPointTarget(EllipseMidPoint.right, { x: cx + radius, y: cy }),\n createEllipseMidPointTarget(EllipseMidPoint.bottom, { x: cx, y: cy + radius }),\n createEllipseMidPointTarget(EllipseMidPoint.left, { x: cx - radius, y: cy }),\n ];\n};\n\nconst resolveRegularPolygonVertices = (\n rect: Rect,\n edgeCount: number,\n): Point[] => {\n const points = resolveRegularPolygonPoints(\n { width: Math.max(0, rect.width), height: Math.max(0, rect.height) },\n edgeCount,\n );\n const vertices: Point[] = [];\n for (let i = 0; i < points.length; i += 2) {\n vertices.push({ x: rect.x + points[i], y: rect.y + points[i + 1] });\n }\n return vertices;\n};\n\nconst createHoverGeometryFromVertices = (vertices: Point[]): ShapeHoverGeometry => {\n const shapeVertices: ShapeVertexTarget[] = vertices.map((position, index) => ({\n id: `v${index}`,\n position,\n }));\n const edges: ShapeEdgeTarget[] = shapeVertices.map((vertex, index) => {\n const next = shapeVertices[(index + 1) % shapeVertices.length];\n const midpoint = {\n x: (vertex.position.x + next.position.x) / 2,\n y: (vertex.position.y + next.position.y) / 2,\n };\n return {\n id: `e${index}`,\n start: vertex.position,\n end: next.position,\n midpoint,\n };\n });\n return { vertices: shapeVertices, edges };\n};\n\nexport abstract class BuiltInShape {\n readonly id: string;\n readonly style?: Record<string, unknown>;\n readonly renderStyle?: Record<string, unknown>;\n readonly baseRotation: number;\n abstract readonly sizeUpdater: ShapeNodeSizeUpdater;\n normalizeResize?: (context: ShapeResizeNormalizeContext) => { width: number; height: number };\n\n constructor(id: string, style?: Record<string, unknown>, presetBaseRotation = 0) {\n this.id = id;\n this.style = style;\n const split = splitStyleRotation(style);\n this.renderStyle = split.style;\n this.baseRotation = presetBaseRotation + split.rotation;\n }\n\n abstract createNode(context: ShapeCreateContext): unknown;\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToBoundary(point, rect, 'rect');\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n return resolveBoundarySide(point, rect, 'rect');\n }\n\n resolvePortAnchors(_rect: Rect, _options: ResolvePortAnchorsOptions): PortAnchor[] {\n return [];\n }\n\n resolveHoverGeometry(_rect: Rect): ShapeHoverGeometry | undefined {\n return undefined;\n }\n\n resolveEllipseMidPoints(_rect: Rect): ShapeEllipseMidPointTarget[] | undefined {\n return undefined;\n }\n\n protected resolveShapeName(isPort: boolean): string {\n return resolveShapeName(this.style, isPort);\n }\n}\n\nexport class RectangleShape extends BuiltInShape {\n readonly sizeUpdater = createRectSizeUpdater();\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, { width: 160, height: 100 });\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? size.width / 2 : 0);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? size.height / 2 : 0);\n return new Konva.Rect({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n width: size.width,\n height: size.height,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'vertices') return [];\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n { id: 'top-left', position: { x: rect.x, y: rect.y } },\n { id: 'top-right', position: { x: rect.x + rect.width, y: rect.y } },\n { id: 'bottom-right', position: { x: rect.x + rect.width, y: rect.y + rect.height } },\n { id: 'bottom-left', position: { x: rect.x, y: rect.y + rect.height } },\n ].map((anchor) => ({\n ...anchor,\n side: resolveDirectionalRectSide(anchor.position, rect),\n normal: normalizeVector({ x: anchor.position.x - cx, y: anchor.position.y - cy }),\n }));\n }\n\n resolveHoverGeometry(rect: Rect): ShapeHoverGeometry {\n const vertices = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n return createHoverGeometryFromVertices(vertices);\n }\n}\n\nexport class EllipseShape extends BuiltInShape {\n readonly sizeUpdater = createEllipseSizeUpdater();\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, { width: 160, height: 100 });\n const radiusX = size.width / 2;\n const radiusY = size.height / 2;\n const hasRadiusX = typeof this.style?.radiusX === 'number';\n const hasRadiusY = typeof this.style?.radiusY === 'number';\n const resolvedRadiusX = (this.style?.radiusX as number | undefined) ?? radiusX;\n const resolvedRadiusY = (this.style?.radiusY as number | undefined) ?? radiusY;\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -resolvedRadiusX);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -resolvedRadiusY);\n return new Konva.Ellipse({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n radiusX: resolvedRadiusX,\n radiusY: resolvedRadiusY,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoRadiusX: !hasRadiusX,\n __autoRadiusY: !hasRadiusY,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToBoundary(point, rect, 'ellipse');\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n return resolveBoundarySide(point, rect, 'ellipse');\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'cardinal') return [];\n return resolveCardinalAnchors(rect);\n }\n\n resolveEllipseMidPoints(rect: Rect): ShapeEllipseMidPointTarget[] {\n return resolveEllipseMidPoints(rect);\n }\n}\n\nexport class CircleShape extends BuiltInShape {\n readonly sizeUpdater = createCircleSizeUpdater();\n normalizeResize = ({ proposal, minSize }: ShapeResizeNormalizeContext): { width: number; height: number } => {\n const side = Math.max(minSize, proposal.width, proposal.height);\n return { width: side, height: side };\n };\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = model.size;\n const hasSize = Boolean(size?.width && size?.height);\n const hasRadius = typeof this.style?.radius === 'number';\n const radius =\n (this.style?.radius as number | undefined) ??\n (hasSize ? Math.min(size?.width ?? 8, size?.height ?? 8) / 2 : 4);\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -radius);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -radius);\n return new Konva.Circle({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n radius,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoRadius: !hasRadius,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToCircleBorder(point, rect);\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n const projected = projectPointToCircleBorder(point, rect);\n return resolveDirectionalRectSide(projected, rect);\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'cardinal') return [];\n return resolveCardinalAnchors(rect);\n }\n\n resolveEllipseMidPoints(rect: Rect): ShapeEllipseMidPointTarget[] {\n return resolveCircleMidPoints(rect);\n }\n}\n\nexport class PolygonShape extends BuiltInShape {\n readonly sizeUpdater = createPolygonSizeUpdater();\n readonly edgeCount: number;\n private readonly defaults: { width: number; height: number };\n\n constructor(\n id: string,\n style: Record<string, unknown> | undefined,\n edgeCount: number,\n defaults: { width: number; height: number },\n presetBaseRotation = 0,\n ) {\n super(id, style, presetBaseRotation);\n this.edgeCount = Math.max(3, edgeCount);\n this.defaults = defaults;\n }\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, this.defaults);\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? size.width / 2 : 0);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? size.height / 2 : 0);\n return new Konva.Line({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n points: resolveRegularPolygonPoints(size, this.edgeCount),\n closed: true,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoPoints: true,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n __edgeCount: this.edgeCount,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToPolygonBorder(point, rect, (size) =>\n resolveRegularPolygonPoints(size, this.edgeCount),\n );\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n const projected = this.projectToBorder(point, rect);\n return resolveDirectionalRectSide(projected, rect);\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'vertices') return [];\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return resolveRegularPolygonVertices(rect, this.edgeCount).map((position, index) => ({\n id: `v${index}`,\n position,\n side: resolveDirectionalRectSide(position, rect),\n normal: normalizeVector({ x: position.x - cx, y: position.y - cy }),\n }));\n }\n\n resolveHoverGeometry(rect: Rect): ShapeHoverGeometry {\n return createHoverGeometryFromVertices(resolveRegularPolygonVertices(rect, this.edgeCount));\n }\n}\n\nexport class DiamondShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 4, { width: 120, height: 80 });\n }\n}\n\nexport class TriangleShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 3, { width: 120, height: 80 });\n }\n}\n\nexport class PentagonShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 5, { width: 150, height: 130 });\n }\n}\n\nexport class HexagonShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 6, { width: 170, height: 120 });\n }\n}\n\nexport const createBuiltInShape = (config: ShapeLibraryConfig): BuiltInShape => {\n if (config.kind === 'circle') return new CircleShape(config.id, config.style);\n if (config.kind === 'ellipse') return new EllipseShape(config.id, config.style);\n if (config.kind === 'diamond') return new DiamondShape(config.id, config.style);\n if (config.kind === 'triangle') return new TriangleShape(config.id, config.style);\n if (config.kind === 'pentagon') return new PentagonShape(config.id, config.style);\n if (config.kind === 'hexagon') return new HexagonShape(config.id, config.style);\n return new RectangleShape(config.id, config.style);\n};\n","import {\n DiagramEngineHandle,\n DiagramState,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n EngineChangeEvent,\n EngineSelectionEvent,\n LinkRoutingMode,\n} from './types';\nimport DiagramEngine from '../engine/DiagramEngine';\r\nimport KonvaRenderer from '../renderer/konva/KonvaRenderer';\r\nimport KonvaInteraction from '../renderer/konva/KonvaInteraction';\nimport KonvaHitTester from '../renderer/konva/KonvaHitTester';\nimport type { HitResult } from '../renderer/konva/KonvaHitTester';\nimport { ShapeDefinition, ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { createBuiltInShape, type BuiltInShapeKind, type ShapeNodeModel } from '../shapes';\n\r\ntype KonvaEditorLike = {\n Stage: new (config: { container: HTMLDivElement | string; width: number; height: number }) => {\n width: (value?: number) => number;\r\n height: (value?: number) => number;\r\n add: (layer: unknown) => void;\r\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n getPointerPosition?: () => { x: number; y: number } | null;\r\n getIntersection: (pos: { x: number; y: number }) => unknown;\r\n getAllIntersections?: (pos: { x: number; y: number }) => unknown[];\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n getAbsoluteTransform?: () => { copy?: () => { invert?: () => void; point: (pos: { x: number; y: number }) => { x: number; y: number } }; point?: (pos: { x: number; y: number }) => { x: number; y: number } };\r\n destroy: () => void;\r\n };\r\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Ellipse: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\r\nconst getKonva = (): KonvaEditorLike => {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as { default?: KonvaEditorLike } | KonvaEditorLike;\r\n return (module as { default?: KonvaEditorLike }).default ?? (module as KonvaEditorLike);\r\n};\r\n\r\nexport type SimpleShape = {\n id: string;\n kind: BuiltInShapeKind;\n style?: Record<string, unknown>;\n};\n\r\nexport type DiagramEditorConfig = {\n container: HTMLDivElement | string;\n width?: number;\n height?: number;\n initialState?: DiagramState;\r\n elementShapes?: SimpleShape[];\r\n portShapes?: SimpleShape[];\r\n panKey?: 'Control' | 'Shift' | 'Alt' | 'Meta';\n elementShapeHoverControls?: ElementShapeHoverControls;\n onElementShapeHoverControlInteraction?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onElementShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n onChange?: (event: EngineChangeEvent) => void;\n onSelection?: (event: EngineSelectionEvent) => void;\n};\n\nexport type DiagramEditorHandle = DiagramEngineHandle & {\n resize: (width: number, height: number) => void;\n setElementShapeHoverControls: (controls?: ElementShapeHoverControls) => void;\n destroy: () => void;\n};\n\r\ntype KonvaHitNode = {\n id?: () => string;\n name?: () => string;\n getAttr?: (key: string) => unknown;\n};\n\ntype KonvaNodeAttrLike = {\n setAttrs?: (attrs: Record<string, unknown>) => void;\n getAttr?: (key: string) => unknown;\n attrs?: Record<string, unknown>;\n};\n\nconst getNodeAttr = <T = unknown>(node: KonvaNodeAttrLike, key: string): T | undefined => {\n if (node.getAttr) {\n return node.getAttr(key) as T | undefined;\n }\n return node.attrs ? (node.attrs[key] as T | undefined) : undefined;\n};\n\nconst applyInstanceStyle = (node: unknown, style: Record<string, unknown> | undefined): void => {\n if (!style) return;\n const target = node as KonvaNodeAttrLike;\n if (!target.setAttrs) return;\n const attrs = { ...style };\n if (typeof style.rotation === 'number') {\n const baseRotation = getNodeAttr<number>(target, 'rotation') ?? 0;\n attrs.rotation = baseRotation + style.rotation;\n }\n target.setAttrs(attrs);\n};\n\nconst registerSimpleShapes = (\n registry: ShapeRegistry,\n shapes: SimpleShape[] | undefined,\n isPort: boolean,\n): void => {\n if (!shapes) return;\n shapes.forEach((shape) => {\n const behavior = createBuiltInShape({\n id: shape.id,\n kind: shape.kind,\n style: shape.style,\n });\n const definition: ShapeDefinition = {\n id: shape.id,\n baseRotation: behavior.baseRotation,\n sizeUpdater: behavior.sizeUpdater,\n normalizeResize: behavior.normalizeResize\n ? (context) => (behavior.normalizeResize as NonNullable<typeof behavior.normalizeResize>)(context)\n : undefined,\n projectToBorder: (point, rect) => behavior.projectToBorder(point, rect),\n resolveBorderSide: (point, rect) => behavior.resolveBorderSide(point, rect),\n resolvePortAnchors: (rect, options) => behavior.resolvePortAnchors(rect, options),\n resolveHoverGeometry: (rect) => behavior.resolveHoverGeometry(rect),\n resolveEllipseMidPoints: (rect) => behavior.resolveEllipseMidPoints(rect),\n createNode: (model) => {\n const Konva = getKonva();\n const anchorCenter = isPort\n ? (model as { anchorCenter?: boolean }).anchorCenter ?? true\n : false;\n const node = behavior.createNode({\n Konva,\n model: model as ShapeNodeModel,\n isPort,\n anchorCenter,\n });\n applyInstanceStyle(node, (model as { style?: Record<string, unknown> }).style);\n return node;\n },\n };\n registry.register(definition);\n });\n};\n\r\nexport const createDiagramEditor = (config: DiagramEditorConfig): DiagramEditorHandle => {\r\n const Konva = getKonva();\r\n const stage = new Konva.Stage({\r\n container: config.container,\r\n width: config.width ?? 900,\r\n height: config.height ?? 560,\r\n });\r\n const stageContainer =\r\n typeof stage.container === 'function' ? stage.container() : (stage.container as HTMLDivElement | undefined);\r\n if (stageContainer && stageContainer.tabIndex < 0) {\r\n stageContainer.tabIndex = 0;\r\n }\r\n\r\n const shapeRegistry = new ShapeRegistry();\r\n registerSimpleShapes(shapeRegistry, config.elementShapes, false);\r\n registerSimpleShapes(shapeRegistry, config.portShapes, true);\r\n\r\n const renderer = new KonvaRenderer({ stage, konva: Konva as unknown as any, shapeRegistry });\r\n const engine = new DiagramEngine({ renderer, shapeRegistry });\r\n\r\n if (config.onChange) {\r\n engine.on('change', config.onChange);\r\n }\r\n if (config.onSelection) {\r\n engine.on('selection', config.onSelection);\r\n }\r\n\r\n const resolveHit = (node: KonvaHitNode | null): HitResult | null => {\r\n if (!node) return null;\r\n const id = node.id ? node.id() : (node.getAttr?.('id') as string) ?? '';\r\n const rawName = node.name ? node.name() : (node.getAttr?.('name') as string) ?? 'element';\r\n const depth = typeof node.getAttr === 'function' ? (node.getAttr('__depth') as number | undefined) : undefined;\r\n if (rawName === 'resize-handle') return { id, type: 'resize-handle', depth };\n if (rawName === 'link-handle') return { id, type: 'link-handle', depth };\n if (rawName === 'shape-hover-control') return { id, type: 'shape-hover-control', depth };\n if (rawName === 'port') return { id, type: 'port', depth };\n if (rawName === 'link') return { id, type: 'link', depth };\r\n if (rawName === 'text') return { id, type: 'text', depth };\r\n if (rawName === 'none') return { id, type: 'none', depth };\r\n return { id, type: 'element', depth };\r\n };\r\n\r\n const prioritizeHits = (nodes: Array<KonvaHitNode | null>): HitResult => {\r\n const hits = nodes\r\n .map((node) => resolveHit(node))\r\n .filter((hit): hit is HitResult => Boolean(hit));\r\n if (hits.length === 0) return { id: '', type: 'none' };\r\n\r\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'shape-hover-control', 'port', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\r\n const candidates = hits.filter((hit) => hit.type === priority[i]);\r\n if (candidates.length === 0) continue;\r\n if (priority[i] === 'element') {\r\n return candidates.reduce((deepest, current) => {\r\n const deepestDepth = deepest.depth ?? -1;\r\n const currentDepth = current.depth ?? -1;\r\n return currentDepth > deepestDepth ? current : deepest;\r\n }, candidates[0]);\r\n }\r\n return candidates[0];\r\n }\r\n return hits[0];\r\n };\r\n\r\n const hitTester = new KonvaHitTester((point) => {\n const toStagePoint = (world: { x: number; y: number }) => {\n const transform = stage.getAbsoluteTransform?.();\n if (!transform) return world;\n const directPoint = (transform as { point?: (pos: { x: number; y: number }) => { x: number; y: number } }).point;\n if (directPoint) {\n return directPoint.call(transform, world);\n }\n const copied = (transform as { copy?: () => unknown }).copy?.();\n const copiedPoint = (copied as { point?: (pos: { x: number; y: number }) => { x: number; y: number } } | undefined)\n ?.point;\n if (!copiedPoint) return world;\n return copiedPoint.call(copied, world);\n };\n const stagePoint = toStagePoint(point);\r\n const all = typeof stage.getAllIntersections === 'function' ? stage.getAllIntersections(stagePoint) : null;\r\n if (all && all.length > 0) {\r\n return prioritizeHits(all as KonvaHitNode[]);\r\n }\r\n const single = stage.getIntersection(stagePoint) as KonvaHitNode | null;\r\n return prioritizeHits(single ? [single] : []);\r\n });\r\n\r\n const interaction = new KonvaInteraction(engine, {\n stage,\n hitTester,\n renderer,\n panKey: config.panKey,\n shapeRegistry,\n shapeHoverControls: config.elementShapeHoverControls,\n onShapeHoverControlInteracted: config.onElementShapeHoverControlInteraction,\n onShapeHoverControlActivated: config.onElementShapeHoverControlActivated,\n });\n interaction.bind();\n\r\n if (config.initialState) {\r\n engine.load(config.initialState);\r\n }\r\n\r\n return {\r\n load: (state) => engine.load(state),\r\n getState: () => engine.getState(),\r\n getViewport: () => engine.getViewport(),\r\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\r\n createOverlayShape: (config) => engine.createOverlayShape(config),\r\n on: (event, handler) => engine.on(event, handler),\r\n addElement: (element) => engine.addElement(element),\r\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\r\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\r\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\r\n removeElement: (id) => engine.removeElement(id),\r\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\r\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\r\n removePort: (id) => engine.removePort(id),\r\n addLink: (link) => engine.addLink(link),\r\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\r\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\r\n rerouteAllLinks: () => engine.rerouteAllLinks(),\r\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\r\n removeLink: (id) => engine.removeLink(id),\r\n addText: (text) => engine.addText(text),\r\n updateText: (id, content) => engine.updateText(id, content),\r\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\r\n removeText: (id) => engine.removeText(id),\r\n setSelection: (ids) => engine.setSelection(ids),\r\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\r\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\r\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\r\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n resize: (width, height) => {\n stage.width(width);\n stage.height(height);\n engine.render();\n },\n setElementShapeHoverControls: (controls) => {\n interaction.setShapeHoverControls(controls);\n },\n destroy: () => {\n interaction.dispose();\n renderer.destroy?.();\n stage.destroy();\r\n },\r\n };\r\n};\r\n","import React, { createContext, useContext, useMemo } from 'react';\r\nimport type { DisplayBoxMetrics } from './types';\r\n\r\ntype DisplayBoxMetricsContextValue = {\r\n updateMetrics: (metrics: DisplayBoxMetrics) => void;\r\n};\r\n\r\nconst DisplayBoxMetricsContext = createContext<DisplayBoxMetricsContextValue | null>(null);\r\n\r\ntype DisplayBoxMetricsProviderProps = {\r\n onMetricsChange: (metrics: DisplayBoxMetrics) => void;\r\n children: React.ReactNode;\r\n};\r\n\r\nexport const DisplayBoxMetricsProvider = ({\r\n onMetricsChange,\r\n children,\r\n}: DisplayBoxMetricsProviderProps) => {\r\n const value = useMemo(() => ({ updateMetrics: onMetricsChange }), [onMetricsChange]);\r\n return <DisplayBoxMetricsContext.Provider value={value}>{children}</DisplayBoxMetricsContext.Provider>;\r\n};\r\n\r\nexport const useDisplayBoxMetricsUpdater = () => {\r\n const context = useContext(DisplayBoxMetricsContext);\r\n return context?.updateMetrics ?? null;\r\n};\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createDiagramEditor } from '../api';\nimport type {\n DiagramEditorHandle,\n DiagramState,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n SimpleShape,\n} from '../api';\nimport DefaultSnapper from '../strategies/DefaultSnapper';\r\nimport type { RouterStrategy } from '../strategies/RouterStrategy';\r\nimport { useDisplayBoxMetricsUpdater } from './DisplayBoxMetricsContext';\r\nimport type { DiagramCounts, ViewportSnapshot } from './types';\r\n\r\ntype DemoEditorConfig = {\r\n createState: () => DiagramState;\r\n elementShapes?: SimpleShape[];\r\n portShapes?: SimpleShape[];\n router?: RouterStrategy;\n snapDefault?: boolean;\n elementShapeHoverControls?: ElementShapeHoverControls;\n onElementShapeHoverControlInteraction?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onElementShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n};\n\nconst useDemoEditor = ({\n createState,\n elementShapes,\n portShapes,\n router,\n snapDefault,\n elementShapeHoverControls,\n onElementShapeHoverControlInteraction,\n onElementShapeHoverControlActivated,\n}: DemoEditorConfig) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n const editorRef = useRef<DiagramEditorHandle | null>(null);\r\n const [diagramState, setDiagramState] = useState<DiagramState | null>(null);\r\n const [selection, setSelection] = useState<string[]>([]);\r\n const [viewport, setViewport] = useState<ViewportSnapshot>({ pan: { x: 0, y: 0 }, zoom: 1 });\r\n const [snapEnabledState, setSnapEnabledState] = useState(Boolean(snapDefault));\r\n const updateMetrics = useDisplayBoxMetricsUpdater();\r\n\r\n const counts: DiagramCounts = useMemo(\r\n () => ({\r\n elements: diagramState?.elements.length ?? 0,\r\n ports: diagramState?.ports.length ?? 0,\r\n links: diagramState?.links.length ?? 0,\r\n texts: diagramState?.texts.length ?? 0,\r\n }),\r\n [diagramState],\r\n );\r\n\r\n useEffect(() => {\r\n if (!updateMetrics) return;\r\n updateMetrics({ selection, counts, viewport, snapEnabled: snapEnabledState });\r\n }, [updateMetrics, selection, counts, viewport, snapEnabledState]);\r\n\r\n const setSnapEnabled = useCallback((value: boolean | ((prev: boolean) => boolean)) => {\r\n setSnapEnabledState((prev) => {\r\n const next = typeof value === 'function' ? value(prev) : value;\r\n if (editorRef.current) {\r\n editorRef.current.setSnapping(new DefaultSnapper(next ? 20 : 0));\r\n }\r\n return next;\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return undefined;\r\n\r\n const container = containerRef.current;\r\n const editor = createDiagramEditor({\r\n container,\r\n width: container.clientWidth || 900,\r\n height: container.clientHeight || 560,\r\n initialState: createState(),\n elementShapes,\n portShapes,\n elementShapeHoverControls,\n onElementShapeHoverControlInteraction,\n onElementShapeHoverControlActivated,\n onChange: (event) => {\n setDiagramState(event.state);\r\n const viewportPatch = event.patches.find((patch) => patch.entity === 'viewport');\r\n if (viewportPatch?.payload) {\r\n const pan = viewportPatch.payload.pan as { x: number; y: number } | undefined;\r\n const zoom = viewportPatch.payload.zoom as number | undefined;\r\n if (pan && typeof zoom === 'number') {\r\n setViewport({ pan, zoom });\r\n }\r\n }\r\n },\r\n onSelection: (event) => {\r\n setSelection(event.selectedIds);\r\n },\r\n });\r\n\r\n editorRef.current = editor;\r\n setSelection([]);\r\n setDiagramState(editor.getState());\r\n setViewport(editor.getViewport());\r\n const snapValue = Boolean(snapDefault);\r\n setSnapEnabledState(snapValue);\r\n editor.setSnapping(new DefaultSnapper(snapValue ? 20 : 0));\r\n if (router) {\r\n editor.setRouting(router);\r\n }\r\n\r\n const handleResize = () => {\r\n if (!containerRef.current) return;\r\n editor.resize(containerRef.current.clientWidth || 900, containerRef.current.clientHeight || 560);\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n editor.destroy();\r\n editorRef.current = null;\r\n };\r\n }, [\n createState,\n elementShapes,\n portShapes,\n router,\n snapDefault,\n elementShapeHoverControls,\n onElementShapeHoverControlInteraction,\n onElementShapeHoverControlActivated,\n ]);\n\r\n return {\r\n containerRef,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n viewport,\r\n snapEnabled: snapEnabledState,\r\n setSnapEnabled,\r\n };\r\n};\r\n\r\nexport default useDemoEditor;\r\n","import { useCallback, useRef } from 'react';\r\n\r\nconst useOffsetSequence = () => {\r\n const offsetRef = useRef(0);\r\n return useCallback(() => {\r\n const value = offsetRef.current;\r\n offsetRef.current += 1;\r\n return (value % 6) * 20;\r\n }, []);\r\n};\r\n\r\nexport default useOffsetSequence;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { DemoActionHelpers } from '../types';\r\nimport { eventHandlersDemoConfig } from './eventHandlersDemo';\r\n\r\nconst EventHandlersDemo = () => {\r\n const demo = eventHandlersDemoConfig;\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n const [eventDemoEvent, setEventDemoEvent] = useState<'none' | 'elementDrop' | 'element-drop' | 'selection'>('none');\r\n const [eventDemoLog, setEventDemoLog] = useState('');\r\n\r\n useEffect(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return undefined;\r\n setEventDemoLog('');\r\n\r\n if (eventDemoEvent === 'elementDrop' || eventDemoEvent === 'element-drop') {\r\n return editor.on(eventDemoEvent, (event) => {\r\n const state = editor.getState();\r\n const element = state.elements.find((item) => item.id === event.elementId);\r\n if (!element) return;\r\n const start =\r\n event.anchor === 'center'\r\n ? {\r\n x: event.startWorld.x - element.size.width / 2,\r\n y: event.startWorld.y - element.size.height / 2,\r\n }\r\n : event.startWorld;\r\n editor.moveElementTo(event.elementId, start.x, start.y);\r\n setEventDemoLog(`${eventDemoEvent}: reverted ${event.elementId}`);\r\n });\r\n }\r\n\r\n if (eventDemoEvent === 'selection') {\r\n return editor.on('selection', (event) => {\r\n const label = event.selectedIds.length > 0 ? event.selectedIds.join(', ') : 'none';\r\n setEventDemoLog(`selection: ${label}`);\r\n });\r\n }\r\n\r\n return undefined;\r\n }, [eventDemoEvent, editorRef]);\r\n\r\n return (\r\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\r\n <p style={{ marginTop: 0 }}>{demo.description}</p>\r\n </div>\r\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n <div style={{ display: 'flex', gap: 12, alignItems: 'center', marginBottom: 12 }}>\r\n <label htmlFor=\"event-handler-select\" style={{ fontWeight: 600 }}>\r\n Event\r\n </label>\r\n <select\r\n id=\"event-handler-select\"\r\n value={eventDemoEvent}\r\n onChange={(event) => setEventDemoEvent(event.target.value as 'none' | 'elementDrop' | 'element-drop' | 'selection')}\r\n style={{ padding: '6px 8px' }}\r\n >\r\n <option value=\"none\">None</option>\r\n <option value=\"elementDrop\">elementDrop (revert position)</option>\r\n <option value=\"element-drop\">element-drop (deprecated alias)</option>\r\n <option value=\"selection\">selection (log selection)</option>\r\n </select>\r\n <div style={{ fontSize: 12, color: '#555' }}>\r\n {eventDemoLog || 'Trigger the selected event to see feedback.'}\r\n </div>\r\n </div>\r\n <DisplayBoxStage containerRef={containerRef} />\r\n </section>\r\n );\r\n};\r\n\r\nexport default EventHandlersDemo;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport type { EngineEventMap } from '../../api';\r\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { DemoActionHelpers } from '../types';\r\nimport { engineEventsDemoConfig } from './engineEventsDemo';\r\n\r\nconst engineEventOptions = [\r\n 'change',\r\n 'selection',\r\n 'config',\r\n 'elementDrop',\r\n 'element-drop',\r\n 'paperClick',\r\n 'portMouseDown',\r\n 'portMouseUp',\r\n 'portMoved',\r\n 'portSelected',\r\n 'elementClick',\r\n 'elementDragged',\r\n 'elementMoved',\r\n 'elementResized',\n 'elementDeleted',\n 'portDeleted',\n 'linkDeleted',\n 'textDeleted',\n 'elementSelected',\n 'elementLinkStarted',\n 'elementLinkConnecting',\n 'elementLinkEnded',\n 'textSelected',\n] as const;\ntype EngineEventKey = typeof engineEventOptions[number];\r\n\r\nconst formatEventPayload = (payload: EngineEventMap[EngineEventKey] | null) =>\r\n payload ? JSON.stringify(payload, null, 2) : '';\r\n\r\nconst EngineEventsDemo = () => {\r\n const demo = engineEventsDemoConfig;\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n const [selectedEvent, setSelectedEvent] = useState<EngineEventKey>(engineEventOptions[0]);\r\n const [eventPayload, setEventPayload] = useState<EngineEventMap[EngineEventKey] | null>(null);\r\n\r\n useEffect(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return undefined;\r\n setEventPayload(null);\r\n return editor.on(selectedEvent, (payload) => {\r\n setEventPayload(payload);\r\n });\r\n }, [selectedEvent, editorRef]);\r\n\r\n const payloadText = formatEventPayload(eventPayload);\r\n const handleRerouteAll = () => {\r\n editorRef.current?.rerouteAllLinks();\r\n };\r\n\r\n return (\r\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\r\n <p style={{ marginTop: 0 }}>{demo.description}</p>\r\n </div>\r\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>\r\n <label htmlFor=\"engine-event-select\" style={{ fontWeight: 600 }}>\r\n Engine Event\r\n </label>\r\n <select\r\n id=\"engine-event-select\"\r\n value={selectedEvent}\r\n onChange={(event) => setSelectedEvent(event.target.value as EngineEventKey)}\r\n style={{ padding: '6px 8px', minWidth: 200 }}\r\n >\r\n {engineEventOptions.map((eventName) => (\r\n <option key={eventName} value={eventName}>\r\n {eventName}\r\n </option>\r\n ))}\r\n </select>\r\n <button type=\"button\" onClick={handleRerouteAll} style={{ padding: '6px 10px' }}>\r\n Reroute All Links\r\n </button>\r\n <div style={{ fontSize: 12, color: '#555' }}>\r\n {payloadText ? 'Latest payload captured below.' : 'Interact with the canvas to trigger the event.'}\r\n </div>\r\n </div>\r\n <div>\r\n <label htmlFor=\"engine-event-payload\" style={{ display: 'block', fontWeight: 600, marginBottom: 4 }}>\r\n Event Payload\r\n </label>\r\n <textarea\r\n id=\"engine-event-payload\"\r\n readOnly\r\n value={payloadText}\r\n placeholder=\"No event payload captured yet.\"\r\n style={{\r\n width: '100%',\r\n minHeight: 160,\r\n padding: '8px 10px',\r\n borderRadius: 8,\r\n border: '1px solid #2d2d2d',\r\n background: '#fff',\r\n fontFamily: 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\r\n fontSize: 12,\r\n resize: 'vertical',\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <DisplayBoxStage containerRef={containerRef} />\r\n </section>\r\n );\r\n};\r\n\r\nexport default EngineEventsDemo;\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport type { ElementLinkConnectingEvent, ElementLinkEndedEvent } from '../../api';\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { DemoActionHelpers } from '../types';\r\nimport { linkCancelDemoConfig } from './linkCancelDemo';\r\n\r\ntype LinkEndedWithMeta = ElementLinkEndedEvent & { cancelledByHost?: boolean };\ntype LinkConnectingSnapshot = Omit<ElementLinkConnectingEvent, 'cancel'>;\n\r\nconst badgeStyle: React.CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: 8,\r\n padding: '6px 10px',\r\n borderRadius: 10,\r\n fontWeight: 600,\r\n background: '#f3f4f6',\r\n border: '1px solid #d0d5dd',\r\n};\r\n\r\nconst LinkCancelDemo = () => {\r\n const demo = linkCancelDemoConfig;\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n const [lastEvent, setLastEvent] = useState<LinkEndedWithMeta | null>(null);\r\n const [history, setHistory] = useState<LinkEndedWithMeta[]>([]);\n const [hostCancels, setHostCancels] = useState<boolean>(true);\n const [lastConnecting, setLastConnecting] = useState<LinkConnectingSnapshot | null>(null);\n const cancelledByHostRef = useRef(false);\n\r\n useEffect(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return undefined;\r\n setLastEvent(null);\r\n setHistory([]);\r\n return editor.on('elementLinkEnded', (payload) => {\r\n const withMeta: LinkEndedWithMeta = {\r\n ...payload,\r\n cancelledByHost: payload.cancelled && cancelledByHostRef.current,\r\n };\r\n cancelledByHostRef.current = false;\r\n setLastEvent(withMeta);\r\n setHistory((prev) => [withMeta, ...prev].slice(0, 6));\r\n });\r\n }, [editorRef]);\r\n\r\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n setLastConnecting(null);\n return editor.on('elementLinkConnecting', (payload) => {\n cancelledByHostRef.current = false;\n if (hostCancels) {\n payload.cancel();\n cancelledByHostRef.current = true;\n }\n setLastConnecting({\n sourcePortId: payload.sourcePortId,\n sourceElementId: payload.sourceElementId,\n targetPortId: payload.targetPortId,\n targetElementId: payload.targetElementId,\n cancelled: payload.cancelled,\n });\n });\n }, [editorRef, hostCancels]);\n\r\n const statusLabel = lastEvent\r\n ? lastEvent.cancelled\r\n ? lastEvent.cancelledByHost\r\n ? 'Cancelled by host'\r\n : 'Cancelled'\r\n : 'Link created'\r\n : 'Awaiting drag';\r\n const statusColor = lastEvent ? (lastEvent.cancelled ? '#b42318' : '#027a48') : '#444';\r\n const statusTone = lastEvent ? (lastEvent.cancelled ? '#fee4e2' : '#eaf6ec') : '#f3f4f6';\r\n\r\n return (\r\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>\n Start a link drag from the left port and enter the right port area to complete immediately (before mouse\n up). Drop on empty canvas to cancel. Use the toggle to simulate host-driven cancellation; payloads from\n <code> elementLinkConnecting</code> and <code>elementLinkEnded</code> appear below.\n </p>\n </div>\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\r\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center' }}>\r\n <span style={{ ...badgeStyle, background: statusTone, color: statusColor, borderColor: statusColor }}>\r\n <span\r\n style={{\r\n width: 10,\r\n height: 10,\r\n borderRadius: '50%',\r\n background: statusColor,\r\n display: 'inline-block',\r\n }}\r\n />\r\n {statusLabel}\r\n </span>\r\n <label style={{ display: 'inline-flex', alignItems: 'center', gap: 8, fontSize: 13 }}>\r\n <input\r\n type=\"checkbox\"\r\n checked={hostCancels}\r\n onChange={(event) => setHostCancels(event.target.checked)}\r\n />\r\n Cancel link drops from host\r\n </label>\r\n {lastEvent && (\r\n <div style={{ fontSize: 12, color: '#333' }}>\r\n {lastEvent.cancelled\r\n ? lastEvent.cancelledByHost\r\n ? 'Host cancelled this drop.'\r\n : 'Drop missed a valid port.'\r\n : `Link ${lastEvent.linkId ?? '(generated)'} connected ${lastEvent.sourcePortId} → ${lastEvent.targetPortId}`}\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12 }}>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>Latest connecting payload</label>\n <textarea\n readOnly\n value={lastConnecting ? JSON.stringify(lastConnecting, null, 2) : ''}\n placeholder=\"Hover a destination port to see elementLinkConnecting.\"\n style={{\n width: '100%',\n minHeight: 170,\n padding: '8px 10px',\n borderRadius: 8,\n border: '1px solid #d0d5dd',\n background: '#fff',\n fontFamily:\n 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\n fontSize: 12,\n resize: 'vertical',\n }}\n />\n </div>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>Latest ended payload</label>\n <textarea\n readOnly\n value={lastEvent ? JSON.stringify(lastEvent, null, 2) : ''}\n placeholder=\"Drag a link to see the payload.\"\r\n style={{\r\n width: '100%',\r\n minHeight: 170,\r\n padding: '8px 10px',\r\n borderRadius: 8,\r\n border: '1px solid #d0d5dd',\r\n background: '#fff',\r\n fontFamily:\r\n 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\r\n fontSize: 12,\r\n resize: 'vertical',\r\n }}\r\n />\r\n </div>\r\n <div>\r\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>Recent drags</label>\r\n <div\r\n style={{\r\n display: 'grid',\r\n gap: 8,\r\n padding: 8,\r\n borderRadius: 8,\r\n border: '1px solid #e0e0e0',\r\n background: '#fafafa',\r\n }}\r\n >\r\n {history.length === 0 && <div style={{ color: '#666', fontSize: 12 }}>No drags yet.</div>}\r\n {history.map((event, index) => (\r\n <div\r\n key={`${event.sourcePortId}-${event.targetPortId ?? 'none'}-${index}`}\r\n style={{\r\n padding: 8,\r\n borderRadius: 6,\r\n background: event.cancelled ? '#fff4f3' : '#f1f8f4',\r\n border: `1px solid ${event.cancelled ? '#f2b8b5' : '#b9dfc7'}`,\r\n fontSize: 12,\r\n }}\r\n >\r\n <div style={{ fontWeight: 600, marginBottom: 4 }}>\r\n {event.cancelled ? (event.cancelledByHost ? 'Cancelled by host' : 'Cancelled') : 'Created'} —{' '}\r\n {new Date().toLocaleTimeString()}\r\n </div>\r\n <div>sourcePortId: {event.sourcePortId}</div>\r\n <div>targetPortId: {event.targetPortId ?? '—'}</div>\r\n <div>linkId: {event.linkId ?? '—'}</div>\r\n {event.targetElementId && <div>targetElementId: {event.targetElementId}</div>}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <DisplayBoxStage containerRef={containerRef} />\r\n </section>\r\n );\r\n};\r\n\r\nexport default LinkCancelDemo;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport type { ElementLayout, ElementLayoutMode } from '../../api';\r\nimport { createId } from '../../utils/ids';\r\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { DemoActionHelpers } from '../types';\r\nimport { autoLayoutDemoConfig } from './autoLayoutDemo';\r\nimport { gridStageStyle } from './shared';\r\n\r\nconst parentOptions = [\r\n { id: 'layout-row', label: 'Horizontal layout' },\r\n { id: 'layout-column', label: 'Vertical layout' },\r\n { id: 'layout-nested', label: 'Nested layout' },\r\n { id: 'layout-manual', label: 'Manual (compare)' },\r\n];\r\n\r\nconst AutoLayoutDemo = () => {\r\n const demo = autoLayoutDemoConfig;\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n const [targetId, setTargetId] = useState<string>(parentOptions[0].id);\r\n const [mode, setMode] = useState<ElementLayoutMode>('horizontal');\r\n const [align, setAlign] = useState<ElementLayout['align']>('center');\n const [padding, setPadding] = useState<number>(12);\n const [gap, setGap] = useState<number>(12);\n const [childFitMainAxis, setChildFitMainAxis] = useState<ElementLayout['childFitMainAxis']>('none');\n const [childFitCrossAxis, setChildFitCrossAxis] = useState<ElementLayout['childFitCrossAxis']>('none');\n const [childFitMinWidth, setChildFitMinWidth] = useState<number | ''>('');\n const [childFitMinHeight, setChildFitMinHeight] = useState<number | ''>('');\n const [childFitMaxWidth, setChildFitMaxWidth] = useState<number | ''>('');\n const [childFitMaxHeight, setChildFitMaxHeight] = useState<number | ''>('');\n const [lastTrigger, setLastTrigger] = useState<string>('None yet');\n\r\n useEffect(() => {\r\n const editor = editorRef.current;\r\n if (!editor) return undefined;\r\n const disposers = [\r\n editor.on('elementMoved', () => setLastTrigger('child moved')),\r\n editor.on('elementResized', () => setLastTrigger('child resized')),\r\n editor.on('elementDeleted', () => setLastTrigger('child removed')),\r\n editor.on('change', () => setLastTrigger((prev) => prev)),\r\n ];\r\n return () => disposers.forEach((off) => off && off());\r\n }, [editorRef]);\r\n\r\n useEffect(() => {\r\n if (!diagramState) return;\r\n if (selection.length === 1) {\r\n const selectedId = selection[0];\r\n const exists = diagramState.elements.some((el) => el.id === selectedId);\r\n if (exists && selectedId !== targetId) {\r\n setTargetId(selectedId);\r\n }\r\n }\r\n }, [selection, diagramState, targetId]);\r\n\r\n useEffect(() => {\r\n if (!diagramState) return;\r\n const exists = diagramState.elements.some((el) => el.id === targetId);\r\n if (!exists) {\r\n setTargetId(parentOptions[0].id);\r\n }\r\n }, [diagramState, targetId]);\r\n\r\n const targetElement = useMemo(\r\n () => diagramState?.elements.find((el) => el.id === targetId),\r\n [diagramState, targetId],\r\n );\r\n\r\n const targetOptions = useMemo(() => {\r\n const seen = new Set<string>();\r\n const options: Array<{ id: string; label: string }> = [];\r\n parentOptions.forEach((option) => {\r\n if (!seen.has(option.id)) {\r\n options.push(option);\r\n seen.add(option.id);\r\n }\r\n });\r\n if (diagramState) {\r\n diagramState.elements\r\n .filter((el) => (el.layout && el.layout.mode !== 'manual') || el.parentId)\r\n .forEach((el) => {\r\n if (!seen.has(el.id)) {\r\n const modeLabel = el.layout?.mode ?? 'manual';\r\n options.push({ id: el.id, label: `${el.id} (${modeLabel})` });\r\n seen.add(el.id);\r\n }\r\n });\r\n }\r\n if (targetElement && !seen.has(targetElement.id)) {\r\n options.push({ id: targetElement.id, label: `${targetElement.id} (selected)` });\r\n }\r\n return options;\r\n }, [diagramState, targetElement]);\r\n\r\n useEffect(() => {\r\n const parent = diagramState?.elements.find((el) => el.id === targetId);\r\n if (!parent) return;\r\n const layout = parent.layout;\r\n setMode(layout?.mode ?? 'manual');\r\n setAlign(layout?.align ?? 'center');\r\n const paddingValue =\n typeof layout?.padding === 'number'\n ? layout.padding\n : layout?.padding\n ? Math.max(layout.padding.x ?? 0, layout.padding.y ?? 0)\n : 12;\n setPadding(paddingValue ?? 12);\n setGap(layout?.gap ?? 12);\n setChildFitMainAxis(layout?.childFitMainAxis ?? 'none');\n setChildFitCrossAxis(layout?.childFitCrossAxis ?? 'none');\n setChildFitMinWidth(layout?.childFitMinSize?.width ?? '');\n setChildFitMinHeight(layout?.childFitMinSize?.height ?? '');\n setChildFitMaxWidth(layout?.childFitMaxSize?.width ?? '');\n setChildFitMaxHeight(layout?.childFitMaxSize?.height ?? '');\n }, [diagramState, targetId]);\n\r\n const childOrder = useMemo(() => {\r\n if (!diagramState) return [];\r\n const children = diagramState.elements.filter((el) => el.parentId === targetId);\r\n const parent = diagramState.elements.find((el) => el.id === targetId);\r\n const axis = parent?.layout?.mode === 'vertical' ? 'y' : 'x';\r\n return [...children].sort((a, b) => {\r\n const aPos = axis === 'y' ? a.position.y : a.position.x;\r\n const bPos = axis === 'y' ? b.position.y : b.position.x;\r\n if (aPos === bPos) return a.id.localeCompare(b.id);\r\n return aPos - bPos;\r\n });\r\n }, [diagramState, targetId]);\r\n\r\n const parentSummaries = useMemo(() => {\r\n return parentOptions.map((option) => {\r\n const parent = diagramState?.elements.find((el) => el.id === option.id);\r\n const childCount = diagramState?.elements.filter((el) => el.parentId === option.id).length ?? 0;\r\n return {\r\n ...option,\r\n layoutMode: parent?.layout?.mode ?? 'manual',\r\n size: parent?.size ?? { width: 0, height: 0 },\r\n childCount,\r\n };\r\n });\r\n }, [diagramState]);\r\n\r\n const handleApplyLayout = () => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\n if (!targetElement) return;\n const childFitMinSize =\n childFitMinWidth === '' && childFitMinHeight === ''\n ? undefined\n : {\n ...(childFitMinWidth === '' ? {} : { width: childFitMinWidth }),\n ...(childFitMinHeight === '' ? {} : { height: childFitMinHeight }),\n };\n const childFitMaxSize =\n childFitMaxWidth === '' && childFitMaxHeight === ''\n ? undefined\n : {\n ...(childFitMaxWidth === '' ? {} : { width: childFitMaxWidth }),\n ...(childFitMaxHeight === '' ? {} : { height: childFitMaxHeight }),\n };\n const layout =\n mode === 'manual'\n ? { mode: 'manual' as const }\n : {\n mode,\n padding,\n gap,\n align: align ?? 'center',\n childFitMainAxis,\n childFitCrossAxis,\n childFitMinSize,\n childFitMaxSize,\n };\n editor.setElementLayout(targetElement.id, layout);\n setLastTrigger(`layout applied (${mode})`);\n };\n\r\n const handleAddChild = () => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n if (!targetElement) return;\r\n const offset = nextOffset();\r\n const sizeBump = (offset % 3) * 8;\r\n editor.addElement({\r\n id: `auto-child-${createId()}`,\r\n position: { x: 16 + offset, y: 16 + offset },\r\n size: { width: 50 + sizeBump, height: 30 + (offset % 2) * 6 },\r\n shapeId: demo.defaultElementShapeId ?? 'default',\r\n parentId: targetElement.id,\r\n });\r\n setLastTrigger('child added');\r\n };\r\n\r\n const handleRemoveChild = () => {\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n const children = childOrder;\r\n const target = children[children.length - 1];\r\n if (target) {\r\n editor.removeElement(target.id);\r\n setLastTrigger('child removed');\r\n }\r\n };\r\n\r\n const alignmentLabel =\r\n mode === 'horizontal' ? 'Vertical align (top/center/bottom)' : 'Horizontal align (left/center/right)';\r\n\r\n return (\r\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\r\n <p style={{ marginTop: 0 }}>\n Try horizontal, vertical, nested, and manual layout containers. Select a layout parent directly on the canvas\n or pick it from the list; the controls below always act on the current selection. Drag, resize, add, or remove\n children to see automatic reflow. Use fit controls to distribute/stretch child sizes with optional min/max\n guards. Nested column shows fit propagation boundaries to its parent row.\n </p>\n </div>\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n\r\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\r\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center' }}>\r\n <label htmlFor=\"parent-select\" style={{ fontWeight: 600 }}>\r\n Target element (follows selection)\r\n </label>\r\n <select\r\n id=\"parent-select\"\r\n value={targetId}\r\n onChange={(event) => {\r\n const nextId = event.target.value;\r\n setTargetId(nextId);\r\n if (editorRef.current) {\r\n editorRef.current.setSelection([nextId]);\r\n }\r\n }}\r\n style={{ padding: '6px 10px', minWidth: 180 }}\r\n >\r\n {targetOptions.map((option) => (\r\n <option key={option.id} value={option.id}>\r\n {option.label}\r\n </option>\r\n ))}\r\n </select>\r\n\r\n <label htmlFor=\"mode-select\" style={{ fontWeight: 600 }}>\r\n Layout\r\n </label>\r\n <select\r\n id=\"mode-select\"\r\n value={mode}\r\n onChange={(event) => setMode(event.target.value as ElementLayoutMode)}\r\n style={{ padding: '6px 10px', minWidth: 140 }}\r\n >\r\n <option value=\"manual\">Manual</option>\r\n <option value=\"horizontal\">Horizontal</option>\r\n <option value=\"vertical\">Vertical</option>\r\n </select>\r\n\r\n <label htmlFor=\"align-select\" style={{ fontWeight: 600 }}>\r\n {alignmentLabel}\r\n </label>\r\n <select\r\n id=\"align-select\"\r\n value={align ?? 'center'}\r\n onChange={(event) => setAlign(event.target.value as ElementLayout['align'])}\r\n style={{ padding: '6px 10px', minWidth: 140 }}\r\n >\r\n <option value=\"start\">{mode === 'horizontal' ? 'Top' : 'Left'}</option>\r\n <option value=\"center\">Center</option>\r\n <option value=\"end\">{mode === 'horizontal' ? 'Bottom' : 'Right'}</option>\r\n </select>\r\n\r\n <label htmlFor=\"padding-input\" style={{ fontWeight: 600 }}>\r\n Padding\r\n </label>\r\n <input\r\n id=\"padding-input\"\r\n type=\"number\"\r\n value={padding}\r\n onChange={(event) => setPadding(Number(event.target.value) || 0)}\r\n style={{ width: 72, padding: '6px 8px' }}\r\n min={0}\r\n />\r\n\r\n <label htmlFor=\"gap-input\" style={{ fontWeight: 600 }}>\n Gap\n </label>\n <input\n id=\"gap-input\"\n type=\"number\"\r\n value={gap}\r\n onChange={(event) => setGap(Number(event.target.value) || 0)}\r\n style={{ width: 72, padding: '6px 8px' }}\n min={0}\n />\n\n <label htmlFor=\"fit-main-select\" style={{ fontWeight: 600 }}>\n Main-axis fit\n </label>\n <select\n id=\"fit-main-select\"\n value={childFitMainAxis ?? 'none'}\n onChange={(event) => setChildFitMainAxis(event.target.value as ElementLayout['childFitMainAxis'])}\n style={{ padding: '6px 10px', minWidth: 130 }}\n >\n <option value=\"none\">Off</option>\n <option value=\"distribute\">Distribute</option>\n </select>\n\n <label htmlFor=\"fit-cross-select\" style={{ fontWeight: 600 }}>\n Cross-axis fit\n </label>\n <select\n id=\"fit-cross-select\"\n value={childFitCrossAxis ?? 'none'}\n onChange={(event) => setChildFitCrossAxis(event.target.value as ElementLayout['childFitCrossAxis'])}\n style={{ padding: '6px 10px', minWidth: 130 }}\n >\n <option value=\"none\">Off</option>\n <option value=\"stretch\">Stretch</option>\n </select>\n\n <label htmlFor=\"fit-min-width-input\" style={{ fontWeight: 600 }}>\n Min W/H\n </label>\n <div style={{ display: 'inline-flex', gap: 6 }}>\n <input\n id=\"fit-min-width-input\"\n type=\"number\"\n value={childFitMinWidth}\n onChange={(event) => setChildFitMinWidth(event.target.value === '' ? '' : Math.max(0, Number(event.target.value) || 0))}\n style={{ width: 64, padding: '6px 8px' }}\n min={0}\n placeholder=\"w\"\n />\n <input\n type=\"number\"\n value={childFitMinHeight}\n onChange={(event) => setChildFitMinHeight(event.target.value === '' ? '' : Math.max(0, Number(event.target.value) || 0))}\n style={{ width: 64, padding: '6px 8px' }}\n min={0}\n placeholder=\"h\"\n />\n </div>\n\n <label htmlFor=\"fit-max-width-input\" style={{ fontWeight: 600 }}>\n Max W/H\n </label>\n <div style={{ display: 'inline-flex', gap: 6 }}>\n <input\n id=\"fit-max-width-input\"\n type=\"number\"\n value={childFitMaxWidth}\n onChange={(event) => setChildFitMaxWidth(event.target.value === '' ? '' : Math.max(0, Number(event.target.value) || 0))}\n style={{ width: 64, padding: '6px 8px' }}\n min={0}\n placeholder=\"w\"\n />\n <input\n type=\"number\"\n value={childFitMaxHeight}\n onChange={(event) => setChildFitMaxHeight(event.target.value === '' ? '' : Math.max(0, Number(event.target.value) || 0))}\n style={{ width: 64, padding: '6px 8px' }}\n min={0}\n placeholder=\"h\"\n />\n </div>\n\n <button type=\"button\" onClick={handleApplyLayout} style={{ padding: '6px 12px', fontWeight: 600 }}>\n Apply layout\n </button>\n <button type=\"button\" onClick={handleAddChild} style={{ padding: '6px 10px' }} disabled={!targetElement}>\r\n Add child\r\n </button>\r\n <button type=\"button\" onClick={handleRemoveChild} style={{ padding: '6px 10px' }} disabled={!targetElement}>\r\n Remove last child\r\n </button>\r\n <span\r\n style={{\r\n padding: '6px 10px',\r\n borderRadius: 8,\r\n background: '#f7f7f8',\r\n border: '1px solid #e0e0e0',\r\n display: 'inline-flex',\r\n gap: 6,\r\n alignItems: 'center',\r\n }}\r\n >\r\n <span style={{ fontWeight: 600 }}>Target:</span> {targetElement ? targetElement.id : '—'}\r\n <span style={{ width: 6, height: 6, borderRadius: '50%', background: '#1f4d99', display: 'inline-block' }} />\r\n Last trigger: <strong>{lastTrigger}</strong>\r\n </span>\r\n </div>\r\n\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12 }}>\r\n <div>\r\n <div style={{ fontWeight: 600, marginBottom: 6 }}>Child order (based on layout axis)</div>\r\n <ol style={{ marginTop: 0, paddingLeft: 18 }}>\r\n {childOrder.map((child) => (\r\n <li key={child.id} style={{ marginBottom: 4, fontSize: 13 }}>\r\n {child.id} — position ({Math.round(child.position.x)}, {Math.round(child.position.y)}) size (\r\n {child.size.width}×{child.size.height})\r\n </li>\r\n ))}\r\n {childOrder.length === 0 && <li style={{ color: '#555' }}>No children.</li>}\r\n </ol>\r\n <p style={{ fontSize: 12, color: '#555', marginTop: 4 }}>\r\n Drag a child before/after its sibling or resize it. The order above reflects the reflow sequence.\r\n </p>\r\n </div>\r\n <div>\r\n <div style={{ fontWeight: 600, marginBottom: 6 }}>Scenario tips</div>\r\n <ul style={{ marginTop: 0, paddingLeft: 18, fontSize: 13 }}>\r\n <li>Horizontal: try center vs bottom alignment and larger padding.</li>\n <li>Vertical: see parent grow taller as children stack.</li>\n <li>Fit main-axis distribute fills inner layout space across siblings.</li>\n <li>Fit cross-axis stretch extends children across inner cross axis.</li>\n <li>Min/max fit guards cap distributed or stretched child sizes.</li>\n <li>Nested: the left column owns its own children and expands the row.</li>\n <li>Deep bounds: stack-overflow widens the nested column and the outer row.</li>\r\n <li>Re-order: drag along the layout axis then apply layout to keep the new order.</li>\r\n <li>Select any container on the canvas to target it instantly—controls follow your selection.</li>\r\n <li>Manual: switch to manual to compare with auto layout.</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <div style={{ fontWeight: 600, marginBottom: 6 }}>Parent bounds snapshot</div>\r\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 8 }}>\r\n {parentSummaries.map((parent) => (\r\n <div\r\n key={parent.id}\r\n style={{\r\n padding: 10,\r\n borderRadius: 8,\r\n border: '1px solid #e0e0e0',\r\n background: '#fafafa',\r\n boxShadow: '0 1px 0 rgba(0,0,0,0.04)',\r\n }}\r\n >\r\n <div style={{ fontWeight: 700 }}>{parent.label}</div>\r\n <div style={{ fontSize: 12, color: '#444', marginTop: 2 }}>\r\n Layout: <code>{parent.layoutMode}</code> · {parent.childCount} children\r\n </div>\r\n <div\r\n style={{\r\n marginTop: 4,\r\n fontFamily:\r\n 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\r\n fontSize: 12,\r\n }}\r\n >\r\n {Math.round(parent.size.width)} × {Math.round(parent.size.height)} px\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <DisplayBoxStage containerRef={containerRef} stageStyle={gridStageStyle} />\r\n </section>\r\n );\r\n};\r\n\r\nexport default AutoLayoutDemo;\r\n","import React, { useMemo, useRef, useState } from 'react';\r\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { OverlayShapeHandle } from '../../api';\r\nimport type { DemoActionHelpers, ToolboxItem } from '../types';\r\nimport { createId } from '../../utils/ids';\r\nimport { baseElementShapes, defaultGhostSize, externalToolboxItems } from './shared';\r\nimport { externalDragDropDemoConfig } from './externalDragDropDemo';\r\n\r\nconst ExternalDragDropDemo = () => {\r\n const demo = externalDragDropDemoConfig;\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n const ghostOverlayRef = useRef<OverlayShapeHandle | null>(null);\r\n const dragPayloadRef = useRef<{ shapeId: string; size: { width: number; height: number } } | null>(null);\r\n const dragImageRef = useRef<HTMLCanvasElement | null>(null);\r\n const [ghostShapeId, setGhostShapeId] = useState(externalToolboxItems[0]?.shapeId ?? 'default');\r\n const [ghostWidth, setGhostWidth] = useState(String(defaultGhostSize.width));\r\n const [ghostHeight, setGhostHeight] = useState(String(defaultGhostSize.height));\r\n\r\n React.useEffect(() => {\r\n return () => {\r\n ghostOverlayRef.current?.destroy();\r\n ghostOverlayRef.current = null;\r\n dragPayloadRef.current = null;\r\n dragImageRef.current = null;\r\n };\r\n }, []);\r\n\r\n const resolveGhostSize = (fallback = defaultGhostSize) => {\r\n const width = Number(ghostWidth);\r\n const height = Number(ghostHeight);\r\n return {\r\n width: Number.isFinite(width) && width > 0 ? width : fallback.width,\r\n height: Number.isFinite(height) && height > 0 ? height : fallback.height,\r\n };\r\n };\r\n\r\n const resolveDragPayload = (dataTransfer: DataTransfer) => {\r\n const raw = dataTransfer.getData('application/x-react-diagrams-element') || dataTransfer.getData('text/plain');\r\n if (!raw) return null;\r\n let shapeId = demo.defaultElementShapeId ?? 'default';\r\n let size = { width: 180, height: 120 };\r\n try {\r\n const parsed = JSON.parse(raw) as { shapeId?: string; size?: { width?: number; height?: number } };\r\n if (parsed.shapeId) shapeId = parsed.shapeId;\r\n if (parsed.size?.width && parsed.size?.height) {\r\n size = { width: parsed.size.width, height: parsed.size.height };\r\n }\r\n } catch {\r\n shapeId = raw;\r\n }\r\n return { shapeId, size };\r\n };\r\n\r\n const handleToolboxDragStart = (event: React.DragEvent<HTMLButtonElement>, item: ToolboxItem) => {\r\n const payload = JSON.stringify({ shapeId: item.shapeId, size: item.size });\r\n event.dataTransfer.setData('application/x-react-diagrams-element', payload);\r\n event.dataTransfer.setData('text/plain', item.shapeId);\r\n event.dataTransfer.effectAllowed = 'copy';\r\n if (!dragImageRef.current && typeof document !== 'undefined') {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = 1;\r\n canvas.height = 1;\r\n dragImageRef.current = canvas;\r\n }\r\n if (dragImageRef.current && event.dataTransfer.setDragImage) {\r\n event.dataTransfer.setDragImage(dragImageRef.current, 0, 0);\r\n }\r\n dragPayloadRef.current = { shapeId: item.shapeId, size: { ...item.size } };\r\n };\r\n\r\n const handleToolboxDragEnd = () => {\r\n ghostOverlayRef.current?.destroy();\r\n ghostOverlayRef.current = null;\r\n dragPayloadRef.current = null;\r\n };\r\n\r\n const handleStageDragOver = (event: React.DragEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n event.dataTransfer.dropEffect = 'copy';\r\n const editor = editorRef.current;\r\n const container = containerRef.current;\r\n if (!editor || !container) return;\r\n const payload = dragPayloadRef.current ?? resolveDragPayload(event.dataTransfer);\r\n if (!payload) return;\r\n const world = editor.clientToWorld({ x: event.clientX, y: event.clientY }, container);\r\n const ghostSize = resolveGhostSize(payload.size);\r\n const ghostShape = ghostShapeId || payload.shapeId;\r\n const nextConfig = {\r\n shapeId: ghostShape,\r\n position: { x: world.x - ghostSize.width / 2, y: world.y - ghostSize.height / 2 },\r\n size: ghostSize,\r\n style: { opacity: 0.35 },\r\n };\r\n if (!ghostOverlayRef.current) {\r\n ghostOverlayRef.current = editor.createOverlayShape(nextConfig);\r\n } else {\r\n ghostOverlayRef.current.update(nextConfig);\r\n }\r\n };\r\n\r\n const handleStageDragLeave = () => {\r\n ghostOverlayRef.current?.destroy();\r\n ghostOverlayRef.current = null;\r\n };\r\n\r\n const handleStageDrop = (event: React.DragEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n const editor = editorRef.current;\r\n const container = containerRef.current;\r\n if (!editor || !container) return;\r\n\r\n const payload = dragPayloadRef.current ?? resolveDragPayload(event.dataTransfer);\r\n if (!payload) return;\r\n\r\n const world = editor.clientToWorld({ x: event.clientX, y: event.clientY }, container);\r\n const id = `drop-${createId()}`;\r\n editor.addElement({\r\n id,\r\n position: { x: world.x - payload.size.width / 2, y: world.y - payload.size.height / 2 },\r\n size: payload.size,\r\n shapeId: payload.shapeId,\r\n });\r\n editor.setSelection([id]);\r\n ghostOverlayRef.current?.destroy();\r\n ghostOverlayRef.current = null;\r\n dragPayloadRef.current = null;\r\n };\r\n\r\n return (\r\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\r\n <p style={{ marginTop: 0 }}>{demo.description}</p>\r\n </div>\r\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n <div style={{ display: 'flex', gap: 16, marginBottom: 12, alignItems: 'stretch' }}>\r\n <div\r\n style={{\r\n minWidth: 220,\r\n border: '1px dashed #b0b0b0',\r\n borderRadius: 8,\r\n padding: 12,\r\n background: '#fafafa',\r\n }}\r\n >\r\n <div style={{ fontWeight: 600, marginBottom: 8 }}>External Toolbox</div>\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\r\n {externalToolboxItems.map((item) => (\r\n <button\r\n key={item.id}\r\n draggable\r\n onDragStart={(event) => handleToolboxDragStart(event, item)}\r\n onDragEnd={handleToolboxDragEnd}\r\n style={{ padding: '8px 10px', textAlign: 'left', cursor: 'grab' }}\r\n >\r\n {item.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n minWidth: 240,\r\n border: '1px solid #d6d6d6',\r\n borderRadius: 8,\r\n padding: 12,\r\n background: '#ffffff',\r\n }}\r\n >\r\n <div style={{ fontWeight: 600, marginBottom: 8 }}>Ghost Settings</div>\r\n <label htmlFor=\"ghost-shape-select\" style={{ display: 'block', fontSize: 12, marginBottom: 4 }}>\r\n Shape\r\n </label>\r\n <select\r\n id=\"ghost-shape-select\"\r\n value={ghostShapeId}\r\n onChange={(event) => setGhostShapeId(event.target.value)}\r\n style={{ width: '100%', marginBottom: 8, padding: '4px 6px' }}\r\n >\r\n {baseElementShapes.map((shape) => (\r\n <option key={shape.id} value={shape.id}>\r\n {shape.id}\r\n </option>\r\n ))}\r\n </select>\r\n <label htmlFor=\"ghost-width-input\" style={{ display: 'block', fontSize: 12, marginBottom: 4 }}>\r\n Width\r\n </label>\r\n <input\r\n id=\"ghost-width-input\"\r\n type=\"number\"\r\n min={20}\r\n value={ghostWidth}\r\n onChange={(event) => setGhostWidth(event.target.value)}\r\n style={{ width: '100%', marginBottom: 8, padding: '4px 6px' }}\r\n />\r\n <label htmlFor=\"ghost-height-input\" style={{ display: 'block', fontSize: 12, marginBottom: 4 }}>\r\n Height\r\n </label>\r\n <input\r\n id=\"ghost-height-input\"\r\n type=\"number\"\r\n min={20}\r\n value={ghostHeight}\r\n onChange={(event) => setGhostHeight(event.target.value)}\r\n style={{ width: '100%', marginBottom: 8, padding: '4px 6px' }}\r\n />\r\n <div style={{ fontSize: 12, color: '#666' }}>Drag a toolbox item to preview the ghost.</div>\r\n </div>\r\n <div style={{ fontSize: 13, lineHeight: 1.5, maxWidth: 420 }}>\r\n <strong>Host flow:</strong> keep drag data in your app, then on drop call <code>editor.clientToWorld</code>\r\n with <code>event.clientX</code>/<code>event.clientY</code> and the stage container. The example centers the\r\n dropped element at the cursor.\r\n </div>\r\n </div>\r\n <DisplayBoxStage\r\n containerRef={containerRef}\r\n onDragOver={handleStageDragOver}\r\n onDragLeave={handleStageDragLeave}\r\n onDrop={handleStageDrop}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nexport default ExternalDragDropDemo;\r\n","import React, { useMemo, useState } from 'react';\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { DemoActionHelpers } from '../types';\r\nimport { createId } from '../../utils/ids';\nimport { defaultSvgPath, defaultSvgPathSize } from './shared';\nimport { svgPathDemoConfig } from './svgPathDemo';\n\ntype GlyphPreset = {\n id: string;\n label: string;\n path: string;\n semantics: string;\n borderRotationOffset?: number;\n};\n\nconst glyphPresets: GlyphPreset[] = [\n {\n id: 'crow-foot',\n label: 'Crow Foot (1..n)',\n path: 'M0 10 L14 10 M14 10 L24 2 M14 10 L24 10 M14 10 L24 18',\n semantics: 'One-to-many side marker (crow-foot/trident style).',\n borderRotationOffset: -90,\n },\n {\n id: 'optional-circle',\n label: 'Optional (0..1)',\n path: 'M0 10 L14 10 M22 10 m-6 0 a6 6 0 1 0 12 0 a6 6 0 1 0 -12 0',\n semantics: 'Optional endpoint marker (0..1).',\n borderRotationOffset: -90,\n },\n {\n id: 'mandatory-bars',\n label: 'Mandatory (1..1)',\n path: 'M0 10 L12 10 M16 3 L16 17 M22 3 L22 17',\n semantics: 'Mandatory single endpoint marker (1..1).',\n borderRotationOffset: -90,\n },\n];\n\nconst SvgPathDemo = () => {\n const demo = svgPathDemoConfig;\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n const [svgPathInput, setSvgPathInput] = useState(defaultSvgPath);\n const [addMode, setAddMode] = useState<'element' | 'port'>('element');\n const [portMode, setPortMode] = useState<'manual' | 'border'>('manual');\n const [targetElementId, setTargetElementId] = useState<string>('svg-host');\n const [glyphSize, setGlyphSize] = useState<number>(18);\n const [rotationAngle, setRotationAngle] = useState<number>(0);\n const [anchorOffsetX, setAnchorOffsetX] = useState<number>(0);\n const [anchorOffsetY, setAnchorOffsetY] = useState<number>(0);\n const [presetId, setPresetId] = useState<string>(glyphPresets[0].id);\n\n const hostElements = diagramState?.elements ?? [];\n const selectedHost = hostElements.find((element) => element.id === targetElementId) ?? hostElements[0] ?? null;\n\n const addSvgShape = (options?: {\n path?: string;\n mode?: 'element' | 'port';\n forcedPortMode?: 'manual' | 'border';\n rotationOffset?: number;\n }) => {\n const editor = editorRef.current;\n const container = containerRef.current;\n const mode = options?.mode ?? addMode;\n const resolvedPortMode = options?.forcedPortMode ?? portMode;\n const path = (options?.path ?? svgPathInput).trim();\n if (!editor || !container || !path) return;\n const shapeId = `svg-shape-${createId()}`;\n editor.registerShape({ id: shapeId, svgPath: path });\n if (mode === 'element') {\n const size = defaultSvgPathSize;\n const rect = container.getBoundingClientRect();\n const world = editor.clientToWorld(\n { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 },\n container,\n );\n const offset = nextOffset();\n const id = `svg-element-${createId()}`;\n editor.addElement({\n id,\n position: { x: world.x - size.width / 2 + offset, y: world.y - size.height / 2 + offset },\n size,\n shapeId,\n });\n editor.setSelection([id]);\n return;\n }\n\n if (!selectedHost) return;\n const offset = Math.abs(nextOffset());\n const usableHeight = Math.max(1, selectedHost.size.height - 20);\n const y = 10 + (offset % usableHeight) + anchorOffsetY;\n const portId = `svg-port-${createId()}`;\n editor.addPortToElement(selectedHost.id, {\n id: portId,\n elementId: selectedHost.id,\n position:\n resolvedPortMode === 'border'\n ? { x: selectedHost.size.width + anchorOffsetX, y }\n : {\n x: selectedHost.size.width / 2 + anchorOffsetX,\n y: selectedHost.size.height / 2 + anchorOffsetY,\n },\n shapeId,\n size: { width: glyphSize, height: glyphSize },\n moveMode: resolvedPortMode === 'border' ? 'border' : 'inside',\n anchorCenter: true,\n orientToHostBorder: resolvedPortMode === 'border',\n style: { rotation: rotationAngle + (options?.rotationOffset ?? 0) },\n });\n editor.setSelection([portId]);\n };\n\n const handleAddSvgShape = () => addSvgShape();\n\n const selectedPreset = glyphPresets.find((preset) => preset.id === presetId) ?? glyphPresets[0];\n\n const insertPresetPort = (forcedPortMode: 'manual' | 'border') => {\n setSvgPathInput(selectedPreset.path);\n addSvgShape({\n path: selectedPreset.path,\n mode: 'port',\n forcedPortMode,\n rotationOffset: forcedPortMode === 'border' ? (selectedPreset.borderRotationOffset ?? 0) : 0,\n });\n };\n\n return (\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\r\n <p style={{ marginTop: 0 }}>{demo.description}</p>\r\n </div>\r\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n <div\r\n style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'minmax(0, 1fr) 200px',\r\n gap: 12,\r\n marginBottom: 12,\r\n alignItems: 'start',\r\n }}\r\n >\r\n <div>\r\n <label htmlFor=\"svg-path-input\" style={{ fontWeight: 600, display: 'block', marginBottom: 6 }}>\r\n SVG Path\r\n </label>\r\n <textarea\r\n id=\"svg-path-input\"\r\n value={svgPathInput}\r\n onChange={(event) => setSvgPathInput(event.target.value)}\r\n rows={3}\r\n style={{ width: '100%', resize: 'vertical', padding: '6px 8px' }}\r\n />\r\n <div style={{ fontSize: 12, color: '#555', marginTop: 6 }}>\n Example: <code>{defaultSvgPath}</code>\n </div>\n <div style={{ fontSize: 12, color: '#555', marginTop: 4 }}>\n Relationship icon ports are glyph visuals: interaction anchoring stays simple and deterministic.\n </div>\n <div style={{ marginTop: 10, borderTop: '1px solid #dde3ef', paddingTop: 10 }}>\n <label htmlFor=\"svg-preset-select\" style={{ fontWeight: 600, display: 'block', marginBottom: 6 }}>\n Relationship Presets\n </label>\n <select\n id=\"svg-preset-select\"\n value={presetId}\n onChange={(event) => setPresetId(event.target.value)}\n style={{ width: '100%', padding: '6px 8px' }}\n >\n {glyphPresets.map((preset) => (\n <option key={preset.id} value={preset.id}>\n {preset.label}\n </option>\n ))}\n </select>\n <div style={{ fontSize: 12, color: '#555', marginTop: 6 }}>{selectedPreset.semantics}</div>\n <div style={{ display: 'flex', gap: 8, marginTop: 8 }}>\n <button type=\"button\" onClick={() => insertPresetPort('manual')} style={{ padding: '6px 8px' }}>\n Insert Manual Glyph\n </button>\n <button type=\"button\" onClick={() => insertPresetPort('border')} style={{ padding: '6px 8px' }}>\n Insert Border-Oriented Glyph\n </button>\n </div>\n <div style={{ fontSize: 12, color: '#555', marginTop: 6 }}>\n Quick check: insert border-oriented presets on each side and verify the marker foot stays perpendicular to the\n boundary while link endpoints remain stable.\n </div>\n </div>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <label htmlFor=\"svg-add-mode\" style={{ fontWeight: 600, fontSize: 12 }}>\n Add As\n </label>\n <select\n id=\"svg-add-mode\"\n value={addMode}\n onChange={(event) => setAddMode(event.target.value as 'element' | 'port')}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"element\">Element</option>\n <option value=\"port\">Port (host border)</option>\n </select>\n {addMode === 'port' && (\n <>\n <label htmlFor=\"svg-port-mode\" style={{ fontWeight: 600, fontSize: 12 }}>\n Port Rotation Mode\n </label>\n <select\n id=\"svg-port-mode\"\n value={portMode}\n onChange={(event) => setPortMode(event.target.value as 'manual' | 'border')}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"manual\">Manual rotation glyph</option>\n <option value=\"border\">Border-normal oriented glyph</option>\n </select>\n <label htmlFor=\"svg-port-host\" style={{ fontWeight: 600, fontSize: 12 }}>\n Host Element\n </label>\n <select\n id=\"svg-port-host\"\n value={selectedHost?.id ?? ''}\n onChange={(event) => setTargetElementId(event.target.value)}\n style={{ padding: '6px 8px' }}\n >\n {hostElements.map((element) => (\n <option key={element.id} value={element.id}>\n {element.id}\n </option>\n ))}\n </select>\n <label htmlFor=\"svg-port-size\" style={{ fontWeight: 600, fontSize: 12 }}>\n Glyph Size\n </label>\n <input\n id=\"svg-port-size\"\n type=\"number\"\n min={8}\n value={glyphSize}\n onChange={(event) => setGlyphSize(Math.max(8, Number(event.target.value) || 8))}\n style={{ padding: '6px 8px' }}\n />\n <label htmlFor=\"svg-port-rotation\" style={{ fontWeight: 600, fontSize: 12 }}>\n Rotation Angle\n </label>\n <input\n id=\"svg-port-rotation\"\n type=\"number\"\n value={rotationAngle}\n onChange={(event) => setRotationAngle(Number(event.target.value) || 0)}\n style={{ padding: '6px 8px' }}\n />\n <label htmlFor=\"svg-port-anchor-x\" style={{ fontWeight: 600, fontSize: 12 }}>\n Anchor Offset X / Y\n </label>\n <div style={{ display: 'flex', gap: 6 }}>\n <input\n id=\"svg-port-anchor-x\"\n type=\"number\"\n value={anchorOffsetX}\n onChange={(event) => setAnchorOffsetX(Number(event.target.value) || 0)}\n style={{ padding: '6px 8px', width: '50%' }}\n />\n <input\n type=\"number\"\n value={anchorOffsetY}\n onChange={(event) => setAnchorOffsetY(Number(event.target.value) || 0)}\n style={{ padding: '6px 8px', width: '50%' }}\n />\n </div>\n </>\n )}\n <button\n onClick={handleAddSvgShape}\n style={{ padding: '8px 12px' }}\n disabled={!svgPathInput.trim() || (addMode === 'port' && !selectedHost)}\n >\n {addMode === 'element' ? 'Add SVG Element' : 'Add SVG Port'}\n </button>\n <div style={{ fontSize: 12, color: '#555' }}>\n Size: {defaultSvgPathSize.width} x {defaultSvgPathSize.height}\n </div>\n </div>\r\n </div>\r\n <DisplayBoxStage containerRef={containerRef} />\r\n </section>\r\n );\r\n};\r\n\r\nexport default SvgPathDemo;\r\n","import React, { useEffect, useMemo, useState } from 'react';\nimport type { TextLayout } from '../../api';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport {\n textDemoConfig,\n textDemoFloatingTextId,\n textDemoLongSample,\n textDemoOwnedTextId,\n textDemoOwnerId,\n} from './textDemo';\n\ntype TextTarget = 'owned' | 'floating';\n\nconst TextLayoutDemo = () => {\n const demo = textDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [target, setTarget] = useState<TextTarget>('owned');\n const [wrap, setWrap] = useState<TextLayout['wrap']>('none');\n const [overflow, setOverflow] = useState<TextLayout['overflow']>('ellipsis-middle');\n const [padding, setPadding] = useState<number>(12);\n const [boundsMode, setBoundsMode] = useState<TextLayout['boundsMode']>('owner-width');\n const [maxLines, setMaxLines] = useState<number>(3);\n const [fixedWidth, setFixedWidth] = useState<number>(240);\n const [fixedHeight, setFixedHeight] = useState<number>(90);\n const [ownerWidth, setOwnerWidth] = useState<number>(260);\n const [ownerHeight, setOwnerHeight] = useState<number>(140);\n\n useEffect(() => {\n const owner = diagramState?.elements.find((element) => element.id === textDemoOwnerId);\n if (!owner) return;\n setOwnerWidth(owner.size.width);\n setOwnerHeight(owner.size.height);\n }, [diagramState]);\n\n const selectedTextId = target === 'owned' ? textDemoOwnedTextId : textDemoFloatingTextId;\n const selectedText = diagramState?.texts.find((text) => text.id === selectedTextId);\n const selectedDisplayContent = selectedText?.displayContent ?? selectedText?.content ?? '';\n const ownerElement = diagramState?.elements.find((element) => element.id === textDemoOwnerId);\n\n const applyLayoutToTarget = (nextTarget: TextTarget, nextLayout: TextLayout) => {\n const editor = editorRef.current;\n if (!editor) return;\n if (nextTarget === 'owned') {\n editor.removeText(textDemoOwnedTextId);\n editor.addText({\n id: textDemoOwnedTextId,\n content: textDemoLongSample,\n ownerId: textDemoOwnerId,\n position: { x: 12, y: 12 },\n layout: nextLayout,\n });\n editor.setSelection([textDemoOwnedTextId]);\n return;\n }\n\n editor.removeText(textDemoFloatingTextId);\n editor.addText({\n id: textDemoFloatingTextId,\n content: textDemoLongSample,\n position: { x: 470, y: 120 },\n layout: nextLayout,\n });\n editor.setSelection([textDemoFloatingTextId]);\n };\n\n const applyTextLayout = () => {\n const layout: TextLayout = {\n boundsMode,\n wrap,\n overflow,\n padding,\n maxLines,\n ...(boundsMode === 'fixed' ? { fixedSize: { width: fixedWidth, height: fixedHeight } } : {}),\n };\n applyLayoutToTarget(target, layout);\n };\n\n const applyOwnerPaddingVerification = (nextPadding: number) => {\n setTarget('owned');\n setBoundsMode('owner-box');\n setWrap('word');\n setOverflow('ellipsis-end');\n setPadding(nextPadding);\n setMaxLines(4);\n applyLayoutToTarget('owned', {\n boundsMode: 'owner-box',\n wrap: 'word',\n overflow: 'ellipsis-end',\n padding: nextPadding,\n maxLines: 4,\n });\n };\n\n const applyZeroPaddingOverflowPreset = () => {\n const editor = editorRef.current;\n if (!editor) return;\n const presetWidth = 180;\n const presetHeight = 58;\n setTarget('owned');\n setBoundsMode('owner-box');\n setWrap('char');\n setOverflow('clip');\n setPadding(0);\n setMaxLines(2);\n setOwnerWidth(presetWidth);\n setOwnerHeight(presetHeight);\n editor.resizeElement(textDemoOwnerId, presetWidth, presetHeight);\n applyLayoutToTarget('owned', {\n boundsMode: 'owner-box',\n wrap: 'char',\n overflow: 'clip',\n padding: 0,\n maxLines: 2,\n });\n };\n\n const applyOwnerSize = () => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.resizeElement(textDemoOwnerId, ownerWidth, ownerHeight);\n editor.setSelection([textDemoOwnerId]);\n };\n\n const ownerPadding = target === 'owned' ? Math.max(0, padding) : 0;\n const resolvedOwnerContentWidth = ownerElement ? Math.max(0, ownerElement.size.width - ownerPadding * 2) : null;\n const resolvedOwnerContentHeight = ownerElement ? Math.max(0, ownerElement.size.height - ownerPadding * 2) : null;\n const selectedDisplayOffset = selectedText?.displayOffset ?? { x: 0, y: 0 };\n const selectedClip = selectedText?.displayClipSize;\n const selectedTextSize = selectedText?.size;\n const selectedOwner = selectedText?.ownerId\n ? diagramState?.elements.find((element) => element.id === selectedText.ownerId)\n : null;\n const selectedWorldX = (selectedOwner?.position.x ?? 0) + (selectedText?.position.x ?? 0) + selectedDisplayOffset.x;\n const selectedWorldY = (selectedOwner?.position.y ?? 0) + (selectedText?.position.y ?? 0) + selectedDisplayOffset.y;\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>\n Full text content is preserved in state. Overflow and ellipsis settings only change visual output\n (`displayContent`) for rendering.\n </p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n\n <div style={{ display: 'grid', gap: 10, marginBottom: 12 }}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, alignItems: 'center' }}>\n <label htmlFor=\"text-target\" style={{ fontWeight: 600 }}>\n Target\n </label>\n <select\n id=\"text-target\"\n value={target}\n onChange={(event) => {\n const next = event.target.value as TextTarget;\n setTarget(next);\n if (next === 'owned') {\n setBoundsMode('owner-width');\n setWrap('none');\n setOverflow('ellipsis-middle');\n setPadding(12);\n setMaxLines(2);\n } else {\n setBoundsMode('fixed');\n setWrap('word');\n setOverflow('ellipsis-end');\n setPadding(8);\n setMaxLines(3);\n }\n }}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"owned\">Owned text (owner constrained)</option>\n <option value=\"floating\">Floating text (fixed bounds)</option>\n </select>\n\n <label htmlFor=\"text-bounds\" style={{ fontWeight: 600 }}>\n Bounds\n </label>\n <select\n id=\"text-bounds\"\n value={boundsMode}\n onChange={(event) => setBoundsMode(event.target.value as TextLayout['boundsMode'])}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"owner-width\">owner-width</option>\n <option value=\"owner-box\">owner-box</option>\n <option value=\"fixed\">fixed</option>\n </select>\n\n <label htmlFor=\"text-wrap\" style={{ fontWeight: 600 }}>\n Wrap\n </label>\n <select\n id=\"text-wrap\"\n value={wrap}\n onChange={(event) => setWrap(event.target.value as TextLayout['wrap'])}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"none\">none</option>\n <option value=\"word\">word</option>\n <option value=\"char\">char</option>\n </select>\n\n <label htmlFor=\"text-overflow\" style={{ fontWeight: 600 }}>\n Overflow\n </label>\n <select\n id=\"text-overflow\"\n value={overflow}\n onChange={(event) => setOverflow(event.target.value as TextLayout['overflow'])}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"clip\">clip</option>\n <option value=\"ellipsis-end\">ellipsis-end</option>\n <option value=\"ellipsis-middle\">ellipsis-middle</option>\n <option value=\"ellipsis-start\">ellipsis-start</option>\n </select>\n\n <label htmlFor=\"text-padding\" style={{ fontWeight: 600 }}>\n Padding\n </label>\n <input\n id=\"text-padding\"\n type=\"number\"\n value={padding}\n min={0}\n onChange={(event) => setPadding(Math.max(0, Number(event.target.value) || 0))}\n style={{ width: 72, padding: '6px 8px' }}\n />\n\n <label htmlFor=\"text-max-lines\" style={{ fontWeight: 600 }}>\n Max lines\n </label>\n <input\n id=\"text-max-lines\"\n type=\"number\"\n value={maxLines}\n min={1}\n onChange={(event) => setMaxLines(Math.max(1, Number(event.target.value) || 1))}\n style={{ width: 72, padding: '6px 8px' }}\n />\n\n <button type=\"button\" onClick={applyTextLayout} style={{ padding: '6px 12px', fontWeight: 600 }}>\n Apply text layout\n </button>\n </div>\n\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, alignItems: 'center' }}>\n <strong>Owner resize (reflow):</strong>\n <label htmlFor=\"owner-width-input\">Width</label>\n <input\n id=\"owner-width-input\"\n type=\"number\"\n value={ownerWidth}\n min={60}\n onChange={(event) => setOwnerWidth(Math.max(60, Number(event.target.value) || 60))}\n style={{ width: 80, padding: '6px 8px' }}\n />\n <label htmlFor=\"owner-height-input\">Height</label>\n <input\n id=\"owner-height-input\"\n type=\"number\"\n value={ownerHeight}\n min={40}\n onChange={(event) => setOwnerHeight(Math.max(40, Number(event.target.value) || 40))}\n style={{ width: 80, padding: '6px 8px' }}\n />\n <button type=\"button\" onClick={applyOwnerSize} style={{ padding: '6px 12px' }}>\n Apply owner size\n </button>\n {boundsMode === 'fixed' && (\n <>\n <label htmlFor=\"fixed-width-input\">Fixed W</label>\n <input\n id=\"fixed-width-input\"\n type=\"number\"\n value={fixedWidth}\n min={40}\n onChange={(event) => setFixedWidth(Math.max(40, Number(event.target.value) || 40))}\n style={{ width: 80, padding: '6px 8px' }}\n />\n <label htmlFor=\"fixed-height-input\">Fixed H</label>\n <input\n id=\"fixed-height-input\"\n type=\"number\"\n value={fixedHeight}\n min={24}\n onChange={(event) => setFixedHeight(Math.max(24, Number(event.target.value) || 24))}\n style={{ width: 80, padding: '6px 8px' }}\n />\n </>\n )}\n </div>\n\n <div style={{ border: '1px solid #d3dbe8', borderRadius: 8, padding: 10, display: 'grid', gap: 8 }}>\n <strong>Padding verification (owner constrained)</strong>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n <button type=\"button\" onClick={() => applyOwnerPaddingVerification(0)} style={{ padding: '6px 10px' }}>\n Verify padding: 0\n </button>\n <button type=\"button\" onClick={() => applyOwnerPaddingVerification(18)} style={{ padding: '6px 10px' }}>\n Verify padding: 18\n </button>\n <button type=\"button\" onClick={applyZeroPaddingOverflowPreset} style={{ padding: '6px 10px' }}>\n Zero-padding no-bleed preset\n </button>\n </div>\n <div style={{ fontSize: 12 }}>\n Owner bounds: {ownerElement ? `${ownerElement.size.width} x ${ownerElement.size.height}` : 'n/a'} | Padding:{' '}\n {ownerPadding}\n </div>\n <div style={{ fontSize: 12 }}>\n Resolved content box: {resolvedOwnerContentWidth ?? 'n/a'} x {resolvedOwnerContentHeight ?? 'n/a'}\n </div>\n <div style={{ fontSize: 12 }}>\n Quick check: padding 0 should show no edge bleed; increasing padding should shift inset and truncation together.\n </div>\n </div>\n\n <div style={{ border: '1px solid #d3dbe8', borderRadius: 8, padding: 10, display: 'grid', gap: 6, fontSize: 12 }}>\n <strong>Resolved render bounds (selected text)</strong>\n <div>\n size: {selectedTextSize ? `${selectedTextSize.width} x ${selectedTextSize.height}` : 'n/a'} | offset:{' '}\n {`${selectedDisplayOffset.x}, ${selectedDisplayOffset.y}`}\n </div>\n <div>\n clip: {selectedClip ? `${selectedClip.width} x ${selectedClip.height}` : 'none'} | world origin:{' '}\n {Number.isFinite(selectedWorldX) && Number.isFinite(selectedWorldY)\n ? `${selectedWorldX.toFixed(1)}, ${selectedWorldY.toFixed(1)}`\n : 'n/a'}\n </div>\n </div>\n\n <div style={{ display: 'grid', gap: 6 }}>\n <div style={{ fontSize: 12 }}>\n <strong>Canonical content:</strong> {textDemoLongSample}\n </div>\n <div style={{ fontSize: 12 }}>\n <strong>Rendered displayContent:</strong> <code>{selectedDisplayContent}</code>\n </div>\n </div>\n </div>\n\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nexport default TextLayoutDemo;\n","import React from 'react';\r\nimport DisplayBoxControls from '../DisplayBoxControls';\r\nimport DisplayBoxStage from '../DisplayBoxStage';\r\nimport useDemoControls from '../useDemoControls';\r\nimport useDemoEditor from '../useDemoEditor';\r\nimport useOffsetSequence from '../useOffsetSequence';\r\nimport type { DemoConfig, DemoActionHelpers } from '../types';\r\n\r\ntype SimpleDemoProps = {\r\n demo: DemoConfig;\r\n beforeStage?: React.ReactNode;\r\n stageHandlers?: {\r\n onDragOver?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n onDragLeave?: () => void;\r\n onDrop?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n };\r\n};\r\n\r\nconst SimpleDemo = ({ demo, beforeStage, stageHandlers }: SimpleDemoProps) => {\r\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\r\n createState: demo.createState,\r\n elementShapes: demo.elementShapes,\r\n portShapes: demo.portShapes,\r\n router: demo.router,\r\n snapDefault: demo.snapDefault,\r\n });\r\n\r\n const nextOffset = useOffsetSequence();\r\n const actionHelpers: DemoActionHelpers = React.useMemo(() => ({ nextOffset }), [nextOffset]);\r\n\r\n const controls = useDemoControls({\r\n demo,\r\n editorRef,\r\n diagramState,\r\n selection,\r\n snapEnabled,\r\n setSnapEnabled,\r\n actionHelpers,\r\n });\r\n\r\n return (\r\n <section>\r\n <div style={{ marginBottom: 12 }}>\r\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\r\n <p style={{ marginTop: 0 }}>{demo.description}</p>\r\n </div>\r\n <DisplayBoxControls\r\n actions={demo.actions}\r\n snapEnabled={controls.snapEnabled}\r\n selectedLinkRouting={controls.selectedLinkRouting}\r\n canToggleLinkRouting={controls.canToggleLinkRouting}\r\n onReload={controls.handleReload}\r\n onZoomIn={controls.handleZoomIn}\r\n onZoomOut={controls.handleZoomOut}\r\n onResetViewport={controls.handleResetViewport}\r\n onToggleSnap={controls.handleToggleSnap}\r\n onManualRender={controls.handleManualRender}\r\n onToggleLinkRouting={controls.handleToggleLinkRouting}\r\n onAction={controls.handleAction}\r\n />\r\n {beforeStage}\r\n <DisplayBoxStage\r\n containerRef={containerRef}\r\n onDragOver={stageHandlers?.onDragOver}\r\n onDragLeave={stageHandlers?.onDragLeave}\r\n onDrop={stageHandlers?.onDrop}\r\n stageStyle={demo.stageStyle}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nexport default SimpleDemo;\r\n","import React from 'react';\r\nimport SimpleDemo from './SimpleDemo';\r\nimport { obstacleRoutingDemoConfig } from './obstacleRoutingDemo';\r\n\r\nconst ObstacleRoutingDemo = () => (\r\n <SimpleDemo\r\n demo={obstacleRoutingDemoConfig}\r\n beforeStage={\r\n <div\r\n style={{\r\n marginBottom: 12,\r\n padding: '10px 12px',\r\n borderRadius: 8,\r\n border: '1px solid #2d2d2d',\r\n background: '#f4f4f4',\r\n }}\r\n >\r\n <strong>Expected routing behavior</strong>\r\n <ul style={{ margin: '6px 0 0 16px' }}>\r\n <li>Links between top nodes should route around the blocking element.</li>\r\n <li>Sibling links inside a shared parent should ignore the parent as an obstacle.</li>\r\n <li>Parent-child links should stay within the parent and avoid the child interior when ports are on edges.</li>\r\n <li>Grandchild links should ignore shared ancestors (parent + grandparent containers).</li>\r\n </ul>\r\n </div>\r\n }\r\n />\r\n);\r\n\r\nexport default ObstacleRoutingDemo;\r\n","import React, { useEffect, useMemo, useState } from 'react';\nimport type {\n ElementDeletedEvent,\n LinkDeletedEvent,\n PortDeletedEvent,\n TextDeletedEvent,\n} from '../../api';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { deletionEventsDemoConfig } from './deletionEventsDemo';\n\ntype EventPayloads = {\n elementDeleted: ElementDeletedEvent | null;\n portDeleted: PortDeletedEvent | null;\n linkDeleted: LinkDeletedEvent | null;\n textDeleted: TextDeletedEvent | null;\n};\n\nconst initialPayloads: EventPayloads = {\n elementDeleted: null,\n portDeleted: null,\n linkDeleted: null,\n textDeleted: null,\n};\n\nconst eventBoxStyle: React.CSSProperties = {\n width: '100%',\n minHeight: 130,\n padding: '8px 10px',\n borderRadius: 8,\n border: '1px solid #d0d5dd',\n background: '#fff',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Courier New\", monospace',\n fontSize: 12,\n resize: 'vertical',\n};\n\nconst DeletionEventsDemo = () => {\n const demo = deletionEventsDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [payloads, setPayloads] = useState<EventPayloads>(initialPayloads);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n setPayloads(initialPayloads);\n const unsubs = [\n editor.on('elementDeleted', (payload) => setPayloads((prev) => ({ ...prev, elementDeleted: payload }))),\n editor.on('portDeleted', (payload) => setPayloads((prev) => ({ ...prev, portDeleted: payload }))),\n editor.on('linkDeleted', (payload) => setPayloads((prev) => ({ ...prev, linkDeleted: payload }))),\n editor.on('textDeleted', (payload) => setPayloads((prev) => ({ ...prev, textDeleted: payload }))),\n ];\n return () => {\n unsubs.forEach((unsub) => unsub());\n };\n }, [editorRef]);\n\n const hasPort = (diagramState?.ports ?? []).some((port) => port.id === 'delete-source-free-port');\n const hasLink = (diagramState?.links ?? []).some((link) => link.id === 'delete-link');\n const hasText = (diagramState?.texts ?? []).some((text) => text.id === 'delete-free-text');\n const hasCascadeElement = (diagramState?.elements ?? []).some((element) => element.id === 'delete-source');\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>\n Use direct delete buttons for port/link/text, then delete <code>delete-source</code> to trigger cascade\n removals. Latest payloads are shown below for integration debugging.\n </p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n <button type=\"button\" onClick={() => editorRef.current?.removePort('delete-source-free-port')} disabled={!hasPort}>\n Delete Port\n </button>\n <button type=\"button\" onClick={() => editorRef.current?.removeLink('delete-link')} disabled={!hasLink}>\n Delete Link\n </button>\n <button type=\"button\" onClick={() => editorRef.current?.removeText('delete-free-text')} disabled={!hasText}>\n Delete Text\n </button>\n <button type=\"button\" onClick={() => editorRef.current?.removeElement('delete-source')} disabled={!hasCascadeElement}>\n Delete Element (Cascade)\n </button>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, minmax(0, 1fr))', gap: 12 }}>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>elementDeleted</label>\n <textarea readOnly value={payloads.elementDeleted ? JSON.stringify(payloads.elementDeleted, null, 2) : ''} style={eventBoxStyle} />\n </div>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>portDeleted</label>\n <textarea readOnly value={payloads.portDeleted ? JSON.stringify(payloads.portDeleted, null, 2) : ''} style={eventBoxStyle} />\n </div>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>linkDeleted</label>\n <textarea readOnly value={payloads.linkDeleted ? JSON.stringify(payloads.linkDeleted, null, 2) : ''} style={eventBoxStyle} />\n </div>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>textDeleted</label>\n <textarea readOnly value={payloads.textDeleted ? JSON.stringify(payloads.textDeleted, null, 2) : ''} style={eventBoxStyle} />\n </div>\n </div>\n </div>\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nexport default DeletionEventsDemo;\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { EllipseMidPoint } from '../../api';\nimport type {\n DiagramEditorHandle,\n DiagramState,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n Point,\n PortData,\n ShapeControlVisibilityTrigger,\n} from '../../api';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { createId } from '../../utils/ids';\nimport { shapeHoverControlsDemoConfig, shapeHoverDemoIds } from './shapeHoverControlsDemo';\n\nconst EDGE_ICON_PATH = 'M8 1 A7 7 0 1 1 7.999 1 M8 4 L8 12 M4 8 L12 8';\nconst MIDPOINT_ICON_PATH = 'M2 8 H14 M8 2 V14 M4 4 L12 12 M12 4 L4 12';\nconst VERTEX_ICON_PATH = 'M2 8 H14 M8 2 V14';\nconst ELLIPSE_MIDPOINT_ICON_PATH = 'M3 8 H13 M8 3 V13 M3 8 A5 5 0 1 1 13 8 A5 5 0 1 1 3 8';\nconst ellipseMidPointOrder: EllipseMidPoint[] = [\n EllipseMidPoint.top,\n EllipseMidPoint.right,\n EllipseMidPoint.bottom,\n EllipseMidPoint.left,\n];\n\ntype TriggerMode = 'target-hover' | 'element-hover' | 'both';\ntype IndexedHoverControlState = {\n enabled: boolean;\n triggerMode: TriggerMode;\n indicesInput: string;\n allowAllTargets: boolean;\n};\ntype EllipseMidPointControlState = {\n enabled: boolean;\n triggerMode: TriggerMode;\n allowAllTargets: boolean;\n selectedMidPoints: Record<EllipseMidPoint, boolean>;\n};\n\nconst toVisibilityTriggers = (mode: TriggerMode): ShapeControlVisibilityTrigger[] =>\n mode === 'both' ? ['target-hover', 'element-hover'] : [mode];\n\nconst parseIndices = (input: string): number[] | undefined => {\n const values = input\n .split(',')\n .map((entry) => Number(entry.trim()))\n .filter((entry) => Number.isInteger(entry) && entry >= 0);\n const unique = Array.from(new Set(values));\n return unique.length ? unique : undefined;\n};\n\nconst resolveSelectedEllipseMidPoints = (\n state: EllipseMidPointControlState,\n): EllipseMidPoint[] =>\n ellipseMidPointOrder.filter((value) => state.selectedMidPoints[value]);\n\nconst toEllipseMidPointSelector = (\n selectedMidPoints: EllipseMidPoint[],\n): EllipseMidPoint | EllipseMidPoint[] | undefined => {\n if (!selectedMidPoints.length) return undefined;\n if (selectedMidPoints.length === 1) return selectedMidPoints[0];\n return selectedMidPoints;\n};\n\nconst buildShapeHoverControls = (\n edgeState: IndexedHoverControlState,\n midpointState: IndexedHoverControlState,\n vertexState: IndexedHoverControlState,\n ellipseMidPointState: EllipseMidPointControlState,\n): ElementShapeHoverControls | undefined => {\n const controls: NonNullable<ElementShapeHoverControls['controls']> = [];\n if (edgeState.enabled) {\n controls.push({\n id: 'drawer-edge-add-child',\n targetKind: 'edge' as const,\n targetIndices: parseIndices(edgeState.indicesInput),\n allowAllTargets: edgeState.allowAllTargets,\n visibilityTriggers: toVisibilityTriggers(edgeState.triggerMode),\n tolerance: 12,\n lineStyle: { stroke: '#ff7a00', strokeWidth: 3 },\n icon: {\n svgPath: EDGE_ICON_PATH,\n size: { width: 16, height: 16 },\n style: { fill: '#ffffff', stroke: '#ff7a00', strokeWidth: 2 },\n },\n });\n }\n if (midpointState.enabled) {\n controls.push({\n id: 'midpoint-drag-log',\n targetKind: 'midpoint' as const,\n targetIndices: parseIndices(midpointState.indicesInput),\n allowAllTargets: midpointState.allowAllTargets,\n visibilityTriggers: toVisibilityTriggers(midpointState.triggerMode),\n tolerance: 12,\n icon: {\n svgPath: MIDPOINT_ICON_PATH,\n size: { width: 16, height: 16 },\n style: { fill: '#ffffff', stroke: '#2b6f99', strokeWidth: 1.8 },\n },\n });\n }\n if (vertexState.enabled) {\n controls.push({\n id: 'diamond-vertex-link',\n targetKind: 'vertex' as const,\n targetIndices: parseIndices(vertexState.indicesInput),\n allowAllTargets: vertexState.allowAllTargets,\n visibilityTriggers: toVisibilityTriggers(vertexState.triggerMode),\n tolerance: 14,\n icon: {\n svgPath: VERTEX_ICON_PATH,\n size: { width: 16, height: 16 },\n style: { fill: 'none', stroke: '#6b3fa0', strokeWidth: 2, lineCap: 'round' },\n },\n });\n }\n if (ellipseMidPointState.enabled) {\n controls.push({\n id: 'ellipse-midpoint-log',\n targetKind: 'ellipse-midpoint' as const,\n ellipseMidPoints: toEllipseMidPointSelector(resolveSelectedEllipseMidPoints(ellipseMidPointState)),\n allowAllTargets: ellipseMidPointState.allowAllTargets,\n visibilityTriggers: toVisibilityTriggers(ellipseMidPointState.triggerMode),\n tolerance: 14,\n icon: {\n svgPath: ELLIPSE_MIDPOINT_ICON_PATH,\n size: { width: 16, height: 16 },\n style: { fill: '#ffffff', stroke: '#0f766e', strokeWidth: 1.8 },\n },\n });\n }\n return controls.length ? { controls } : undefined;\n};\n\nconst resolveElementWorldRect = (state: DiagramState, elementId: string) => {\n const element = state.elements.find((item) => item.id === elementId);\n if (!element) return null;\n return {\n element,\n rect: {\n x: element.position.x,\n y: element.position.y,\n width: element.size.width,\n height: element.size.height,\n },\n };\n};\n\nconst ensureBorderPort = (\n editor: DiagramEditorHandle,\n state: DiagramState,\n elementId: string,\n worldPoint: Point,\n): string => {\n const existing = state.ports.find((port) => port.elementId === elementId);\n if (existing) {\n return existing.id;\n }\n const portId = `hover-port-${createId()}`;\n const port: PortData = {\n id: portId,\n elementId,\n position: { x: 0, y: 0 },\n shapeId: 'port-dark',\n moveMode: 'border',\n anchorCenter: true,\n orientToHostBorder: true,\n };\n editor.addPortToElement(elementId, port);\n editor.movePortTo(portId, worldPoint.x, worldPoint.y);\n return portId;\n};\n\nconst ShapeHoverControlsDemo = () => {\n const demo = shapeHoverControlsDemoConfig;\n const [edgeState, setEdgeState] = useState<IndexedHoverControlState>({\n enabled: true,\n triggerMode: 'target-hover',\n indicesInput: '2',\n allowAllTargets: false,\n });\n const [midpointState, setMidpointState] = useState<IndexedHoverControlState>({\n enabled: true,\n triggerMode: 'target-hover',\n indicesInput: '2',\n allowAllTargets: false,\n });\n const [vertexState, setVertexState] = useState<IndexedHoverControlState>({\n enabled: true,\n triggerMode: 'target-hover',\n indicesInput: '1',\n allowAllTargets: false,\n });\n const [ellipseMidPointState, setEllipseMidPointState] = useState<EllipseMidPointControlState>({\n enabled: true,\n triggerMode: 'target-hover',\n allowAllTargets: false,\n selectedMidPoints: {\n [EllipseMidPoint.top]: true,\n [EllipseMidPoint.right]: false,\n [EllipseMidPoint.bottom]: true,\n [EllipseMidPoint.left]: false,\n },\n });\n const [eventLog, setEventLog] = useState<string[]>([]);\n const [eventCounts, setEventCounts] = useState({ click: 0, dragStart: 0, dragMove: 0, dragEnd: 0 });\n const editorHandleRef = useRef<DiagramEditorHandle | null>(null);\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n const initialHoverControls = useMemo(\n () =>\n buildShapeHoverControls(\n { enabled: true, triggerMode: 'target-hover', indicesInput: '2', allowAllTargets: false },\n { enabled: true, triggerMode: 'target-hover', indicesInput: '2', allowAllTargets: false },\n { enabled: true, triggerMode: 'target-hover', indicesInput: '1', allowAllTargets: false },\n {\n enabled: true,\n triggerMode: 'target-hover',\n allowAllTargets: false,\n selectedMidPoints: {\n [EllipseMidPoint.top]: true,\n [EllipseMidPoint.right]: false,\n [EllipseMidPoint.bottom]: true,\n [EllipseMidPoint.left]: false,\n },\n },\n ),\n [],\n );\n\n const onControlInteraction = useCallback((event: ElementShapeHoverControlInteractionEvent) => {\n const editor = editorHandleRef.current;\n if (!editor) return;\n const currentState = editor.getState();\n const dragDelta = event.drag ? `${event.drag.delta.x.toFixed(1)},${event.drag.delta.y.toFixed(1)}` : '-';\n const ellipseMidPoint = event.ellipseMidPoint ? ` | ellipseMidPoint=${event.ellipseMidPoint}` : '';\n const entry = `${event.eventType} | ${event.controlId} | ${event.targetKind}[${event.targetIndex}]${ellipseMidPoint} | delta=${dragDelta}`;\n setEventLog((prev) => [entry, ...prev].slice(0, 10));\n setEventCounts((prev) => ({\n click: prev.click + (event.eventType === 'click' ? 1 : 0),\n dragStart: prev.dragStart + (event.eventType === 'drag-start' ? 1 : 0),\n dragMove: prev.dragMove + (event.eventType === 'drag-move' ? 1 : 0),\n dragEnd: prev.dragEnd + (event.eventType === 'drag-end' ? 1 : 0),\n }));\n\n if (event.eventType !== 'click') return;\n if (event.controlId === 'drawer-edge-add-child' && event.elementId === shapeHoverDemoIds.drawer && event.edge) {\n const drawer = currentState.elements.find((element) => element.id === shapeHoverDemoIds.drawer);\n if (!drawer) return;\n const childCount = currentState.elements.filter((element) => element.parentId === shapeHoverDemoIds.drawer).length;\n const id = `hover-child-${createId()}`;\n const col = childCount % 3;\n const row = Math.floor(childCount / 3);\n editor.addElement({\n id,\n parentId: shapeHoverDemoIds.drawer,\n position: { x: 24 + col * 116, y: 150 + row * 54 },\n size: { width: 100, height: 44 },\n shapeId: 'default',\n });\n editor.addText({\n id: `hover-child-label-${createId()}`,\n ownerId: id,\n content: `Child ${childCount + 1}`,\n position: { x: 8, y: 12 },\n style: { fontSize: 12, fontFamily: 'sans-serif' },\n });\n editor.setSelection([id]);\n return;\n }\n if (event.controlId !== 'diamond-vertex-link' || event.elementId !== shapeHoverDemoIds.diamond) {\n return;\n }\n const sourcePoint = event.vertex?.position;\n if (!sourcePoint) return;\n const targetInfo = resolveElementWorldRect(currentState, shapeHoverDemoIds.target);\n if (!targetInfo) return;\n const targetPoint = {\n x: targetInfo.rect.x,\n y: targetInfo.rect.y + targetInfo.rect.height / 2,\n };\n const sourcePortId = ensureBorderPort(editor, currentState, shapeHoverDemoIds.diamond, sourcePoint);\n const stateAfterSource = editor.getState();\n const targetPortId = ensureBorderPort(editor, stateAfterSource, shapeHoverDemoIds.target, targetPoint);\n const latestState = editor.getState();\n const alreadyLinked = latestState.links.some(\n (link) => link.sourcePortId === sourcePortId && link.targetPortId === targetPortId,\n );\n if (alreadyLinked) return;\n const linkId = `hover-link-${createId()}`;\n editor.addLink({\n id: linkId,\n sourcePortId,\n targetPortId,\n points: [],\n });\n editor.setSelection([linkId]);\n }, []);\n\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n elementShapeHoverControls: initialHoverControls,\n onElementShapeHoverControlInteraction: onControlInteraction,\n });\n editorHandleRef.current = editorRef.current;\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const runtimeHoverControls = useMemo(\n () => buildShapeHoverControls(edgeState, midpointState, vertexState, ellipseMidPointState),\n [edgeState, midpointState, vertexState, ellipseMidPointState],\n );\n\n React.useEffect(() => {\n editorRef.current?.setElementShapeHoverControls(runtimeHoverControls);\n }, [editorRef, runtimeHoverControls]);\n\n const drawerChildCount = useMemo(() => {\n if (!diagramState) return 0;\n return diagramState.elements.filter((element) => element.parentId === shapeHoverDemoIds.drawer).length;\n }, [diagramState]);\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>{demo.description}</p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div\n style={{\n marginBottom: 12,\n padding: '10px 12px',\n border: '1px solid #d9e1ec',\n borderRadius: 8,\n background: '#fbfdff',\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: 6 }}>How To Verify</div>\n <div style={{ fontSize: 13, color: '#2d3a4d', marginBottom: 8 }}>\n Switch each control between target-hover, element-hover, and both. Use index selectors (0-based) or enable\n allow-all to control eligibility. Click drawer edge control to add children and click diamond vertex control to\n create the link. Use ellipse-midpoint selectors to target top/right/bottom/left on the ellipse and circle hosts.\n Drag any visible control icon to inspect drag-start/move/end payload behavior.\n </div>\n <div style={{ fontSize: 12, color: '#4d5a70', marginBottom: 8 }}>\n Shape validity note: edge/midpoint index controls are available for rectangle/polygon hover geometry.\n ellipse-midpoint controls are available for circle/ellipse only; the rectangle sample remains a safe no-op.\n </div>\n <div style={{ display: 'grid', gap: 8, gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))' }}>\n <HoverControlSection\n title=\"Edge Control\"\n state={edgeState}\n onChange={setEdgeState}\n toggleLabel={edgeState.enabled ? 'Disable Edge Control' : 'Enable Edge Control'}\n />\n <HoverControlSection\n title=\"Midpoint Control\"\n state={midpointState}\n onChange={setMidpointState}\n toggleLabel={midpointState.enabled ? 'Disable Midpoint Control' : 'Enable Midpoint Control'}\n />\n <HoverControlSection\n title=\"Vertex Control\"\n state={vertexState}\n onChange={setVertexState}\n toggleLabel={vertexState.enabled ? 'Disable Vertex Control' : 'Enable Vertex Control'}\n />\n <EllipseMidPointControlSection\n title=\"Ellipse Midpoint Control\"\n state={ellipseMidPointState}\n onChange={setEllipseMidPointState}\n toggleLabel={ellipseMidPointState.enabled ? 'Disable Ellipse Midpoint Control' : 'Enable Ellipse Midpoint Control'}\n />\n </div>\n <div style={{ marginTop: 10, fontSize: 13 }}>\n Drawer child count: {drawerChildCount} | Click: {eventCounts.click} | Drag start/move/end:{' '}\n {eventCounts.dragStart}/{eventCounts.dragMove}/{eventCounts.dragEnd}\n </div>\n <div style={{ marginTop: 8, fontSize: 12, color: '#2d3a4d' }}>\n <strong>Latest control events:</strong>\n <pre\n style={{\n marginTop: 6,\n padding: 8,\n maxHeight: 140,\n overflow: 'auto',\n background: '#ffffff',\n border: '1px solid #d9e1ec',\n borderRadius: 6,\n whiteSpace: 'pre-wrap',\n }}\n >\n {eventLog.length ? eventLog.join('\\n') : 'No events yet'}\n </pre>\n </div>\n </div>\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nconst HoverControlSection = ({\n title,\n state,\n onChange,\n toggleLabel,\n}: {\n title: string;\n state: IndexedHoverControlState;\n onChange: React.Dispatch<React.SetStateAction<IndexedHoverControlState>>;\n toggleLabel: string;\n}) => (\n <div style={{ border: '1px solid #d9e1ec', borderRadius: 6, padding: 8, background: '#ffffff' }}>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>{title}</div>\n <button\n type=\"button\"\n onClick={() => onChange((prev) => ({ ...prev, enabled: !prev.enabled }))}\n style={{ marginBottom: 6, padding: '6px 10px' }}\n >\n {toggleLabel}\n </button>\n <div style={{ display: 'grid', gap: 6 }}>\n <label style={{ fontSize: 12 }}>\n Trigger mode\n <select\n value={state.triggerMode}\n onChange={(event) => onChange((prev) => ({ ...prev, triggerMode: event.target.value as TriggerMode }))}\n style={{ marginLeft: 8 }}\n >\n <option value=\"target-hover\">target-hover</option>\n <option value=\"element-hover\">element-hover</option>\n <option value=\"both\">both</option>\n </select>\n </label>\n <label style={{ fontSize: 12 }}>\n Target indices (CSV)\n <input\n value={state.indicesInput}\n onChange={(event) => onChange((prev) => ({ ...prev, indicesInput: event.target.value }))}\n placeholder=\"example: 0,2\"\n style={{ marginLeft: 8, width: 120 }}\n />\n </label>\n <label style={{ fontSize: 12 }}>\n <input\n type=\"checkbox\"\n checked={state.allowAllTargets}\n onChange={(event) => onChange((prev) => ({ ...prev, allowAllTargets: event.target.checked }))}\n style={{ marginRight: 6 }}\n />\n allowAllTargets\n </label>\n </div>\n </div>\n);\n\nconst EllipseMidPointControlSection = ({\n title,\n state,\n onChange,\n toggleLabel,\n}: {\n title: string;\n state: EllipseMidPointControlState;\n onChange: React.Dispatch<React.SetStateAction<EllipseMidPointControlState>>;\n toggleLabel: string;\n}) => (\n <div style={{ border: '1px solid #d9e1ec', borderRadius: 6, padding: 8, background: '#ffffff' }}>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>{title}</div>\n <button\n type=\"button\"\n onClick={() => onChange((prev) => ({ ...prev, enabled: !prev.enabled }))}\n style={{ marginBottom: 6, padding: '6px 10px' }}\n >\n {toggleLabel}\n </button>\n <div style={{ display: 'grid', gap: 6 }}>\n <label style={{ fontSize: 12 }}>\n Trigger mode\n <select\n value={state.triggerMode}\n onChange={(event) => onChange((prev) => ({ ...prev, triggerMode: event.target.value as TriggerMode }))}\n style={{ marginLeft: 8 }}\n >\n <option value=\"target-hover\">target-hover</option>\n <option value=\"element-hover\">element-hover</option>\n <option value=\"both\">both</option>\n </select>\n </label>\n <label style={{ fontSize: 12 }}>\n <input\n type=\"checkbox\"\n checked={state.allowAllTargets}\n onChange={(event) => onChange((prev) => ({ ...prev, allowAllTargets: event.target.checked }))}\n style={{ marginRight: 6 }}\n />\n allowAllTargets\n </label>\n <div style={{ fontSize: 12 }}>\n Enum targets\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, minmax(0, 1fr))', gap: 4 }}>\n {ellipseMidPointOrder.map((midPoint) => (\n <label key={midPoint} style={{ fontSize: 12 }}>\n <input\n type=\"checkbox\"\n checked={state.selectedMidPoints[midPoint]}\n onChange={(event) =>\n onChange((prev) => ({\n ...prev,\n selectedMidPoints: {\n ...prev.selectedMidPoints,\n [midPoint]: event.target.checked,\n },\n }))\n }\n style={{ marginRight: 6 }}\n />\n {midPoint}\n </label>\n ))}\n </div>\n </div>\n </div>\n);\n\nexport default ShapeHoverControlsDemo;\n","import React from 'react';\r\nimport type { DemoConfig, DemoDefinition } from '../types';\r\nimport { basicDemoConfig } from './basicDemo';\r\nimport { linkPortCreationDemoConfig } from './linkPortCreationDemo';\r\nimport { nestedDemoConfig } from './nestedDemo';\r\nimport { customDemoConfig } from './customDemo';\r\nimport { textDemoConfig } from './textDemo';\r\nimport { selectionDemoConfig } from './selectionDemo';\r\nimport { eventHandlersDemoConfig } from './eventHandlersDemo';\r\nimport { engineEventsDemoConfig } from './engineEventsDemo';\r\nimport { linkCancelDemoConfig } from './linkCancelDemo';\r\nimport { autoLayoutDemoConfig } from './autoLayoutDemo';\r\nimport { externalDragDropDemoConfig } from './externalDragDropDemo';\r\nimport { shapeGalleryDemoConfig } from './shapeGalleryDemo';\nimport { svgPathDemoConfig } from './svgPathDemo';\nimport { roundedRectRadiusDemoConfig } from './roundedRectRadiusDemo';\nimport { rotatedCreationDemoConfig } from './rotatedCreationDemo';\nimport { multiLevelTreeDemoConfig } from './multiLevelTreeDemo';\nimport { multipleElementsDemoConfig } from './multipleElementsDemo';\r\nimport { portConstraintsDemoConfig } from './portConstraintsDemo';\r\nimport { portBorderDemoConfig } from './portBorderDemo';\r\nimport { childConstraintsDemoConfig } from './childConstraintsDemo';\r\nimport { gridOverlayDemoConfig } from './gridOverlayDemo';\r\nimport { routingDemoConfig } from './routingDemo';\r\nimport { obstacleRoutingDemoConfig } from './obstacleRoutingDemo';\nimport { linkBendHandlesDemoConfig } from './linkBendHandlesDemo';\nimport { deletionEventsDemoConfig } from './deletionEventsDemo';\nimport { shapeBorderMovementDemoConfig } from './shapeBorderMovementDemo';\nimport { shapeHoverControlsDemoConfig } from './shapeHoverControlsDemo';\nimport EventHandlersDemo from './EventHandlersDemoTab';\nimport EngineEventsDemo from './EngineEventsDemoTab';\nimport LinkCancelDemo from './LinkCancelDemoTab';\nimport AutoLayoutDemo from './AutoLayoutDemoTab';\nimport ExternalDragDropDemo from './ExternalDragDropDemoTab';\nimport SvgPathDemo from './SvgPathDemoTab';\nimport TextLayoutDemo from './TextLayoutDemoTab';\nimport SimpleDemo from './SimpleDemo';\nimport ObstacleRoutingDemo from './ObstacleRoutingDemoTab';\nimport DeletionEventsDemo from './DeletionEventsDemoTab';\nimport ShapeHoverControlsDemo from './ShapeHoverControlsDemoTab';\n\r\nexport {\r\n baseElementShapes,\r\n basePortShapes,\r\n customGalleryShapes,\r\n defaultGhostSize,\r\n defaultSvgPath,\r\n defaultSvgPathSize,\r\n externalToolboxItems,\r\n} from './shared';\r\n\r\nconst wrapSimpleDemo = (demo: DemoConfig) => () => <SimpleDemo demo={demo} />;\r\n\r\nexport const demoTabs: DemoDefinition[] = [\r\n {\r\n id: basicDemoConfig.id,\r\n title: basicDemoConfig.title,\r\n description: basicDemoConfig.description,\r\n Component: wrapSimpleDemo(basicDemoConfig),\r\n },\r\n {\r\n id: linkPortCreationDemoConfig.id,\r\n title: linkPortCreationDemoConfig.title,\r\n description: linkPortCreationDemoConfig.description,\r\n Component: wrapSimpleDemo(linkPortCreationDemoConfig),\r\n },\r\n {\r\n id: nestedDemoConfig.id,\r\n title: nestedDemoConfig.title,\r\n description: nestedDemoConfig.description,\r\n Component: wrapSimpleDemo(nestedDemoConfig),\r\n },\r\n {\r\n id: customDemoConfig.id,\r\n title: customDemoConfig.title,\r\n description: customDemoConfig.description,\r\n Component: wrapSimpleDemo(customDemoConfig),\r\n },\r\n {\n id: textDemoConfig.id,\n title: textDemoConfig.title,\n description: textDemoConfig.description,\n Component: TextLayoutDemo,\n },\n {\r\n id: selectionDemoConfig.id,\r\n title: selectionDemoConfig.title,\r\n description: selectionDemoConfig.description,\r\n Component: wrapSimpleDemo(selectionDemoConfig),\r\n },\r\n {\r\n id: eventHandlersDemoConfig.id,\r\n title: eventHandlersDemoConfig.title,\r\n description: eventHandlersDemoConfig.description,\r\n Component: EventHandlersDemo,\r\n },\r\n {\n id: engineEventsDemoConfig.id,\n title: engineEventsDemoConfig.title,\n description: engineEventsDemoConfig.description,\n Component: EngineEventsDemo,\n },\n {\n id: deletionEventsDemoConfig.id,\n title: deletionEventsDemoConfig.title,\n description: deletionEventsDemoConfig.description,\n Component: DeletionEventsDemo,\n },\n {\r\n id: autoLayoutDemoConfig.id,\r\n title: autoLayoutDemoConfig.title,\r\n description: autoLayoutDemoConfig.description,\r\n Component: AutoLayoutDemo,\r\n },\r\n {\r\n id: linkCancelDemoConfig.id,\r\n title: linkCancelDemoConfig.title,\r\n description: linkCancelDemoConfig.description,\r\n Component: LinkCancelDemo,\r\n },\r\n {\r\n id: externalDragDropDemoConfig.id,\r\n title: externalDragDropDemoConfig.title,\r\n description: externalDragDropDemoConfig.description,\r\n Component: ExternalDragDropDemo,\r\n },\r\n {\n id: shapeGalleryDemoConfig.id,\n title: shapeGalleryDemoConfig.title,\n description: shapeGalleryDemoConfig.description,\n Component: wrapSimpleDemo(shapeGalleryDemoConfig),\n },\n {\n id: roundedRectRadiusDemoConfig.id,\n title: roundedRectRadiusDemoConfig.title,\n description: roundedRectRadiusDemoConfig.description,\n Component: wrapSimpleDemo(roundedRectRadiusDemoConfig),\n },\n {\n id: rotatedCreationDemoConfig.id,\n title: rotatedCreationDemoConfig.title,\n description: rotatedCreationDemoConfig.description,\n Component: wrapSimpleDemo(rotatedCreationDemoConfig),\n },\n {\n id: svgPathDemoConfig.id,\n title: svgPathDemoConfig.title,\n description: svgPathDemoConfig.description,\r\n Component: SvgPathDemo,\r\n },\r\n {\r\n id: multiLevelTreeDemoConfig.id,\r\n title: multiLevelTreeDemoConfig.title,\r\n description: multiLevelTreeDemoConfig.description,\r\n Component: wrapSimpleDemo(multiLevelTreeDemoConfig),\r\n },\r\n {\r\n id: multipleElementsDemoConfig.id,\r\n title: multipleElementsDemoConfig.title,\r\n description: multipleElementsDemoConfig.description,\r\n Component: wrapSimpleDemo(multipleElementsDemoConfig),\r\n },\r\n {\r\n id: portConstraintsDemoConfig.id,\r\n title: portConstraintsDemoConfig.title,\r\n description: portConstraintsDemoConfig.description,\r\n Component: wrapSimpleDemo(portConstraintsDemoConfig),\r\n },\r\n {\n id: portBorderDemoConfig.id,\n title: portBorderDemoConfig.title,\n description: portBorderDemoConfig.description,\n Component: wrapSimpleDemo(portBorderDemoConfig),\n },\n {\n id: shapeBorderMovementDemoConfig.id,\n title: shapeBorderMovementDemoConfig.title,\n description: shapeBorderMovementDemoConfig.description,\n Component: wrapSimpleDemo(shapeBorderMovementDemoConfig),\n },\n {\n id: shapeHoverControlsDemoConfig.id,\n title: shapeHoverControlsDemoConfig.title,\n description: shapeHoverControlsDemoConfig.description,\n Component: ShapeHoverControlsDemo,\n },\n {\n id: childConstraintsDemoConfig.id,\n title: childConstraintsDemoConfig.title,\n description: childConstraintsDemoConfig.description,\r\n Component: wrapSimpleDemo(childConstraintsDemoConfig),\r\n },\r\n {\r\n id: gridOverlayDemoConfig.id,\r\n title: gridOverlayDemoConfig.title,\r\n description: gridOverlayDemoConfig.description,\r\n Component: wrapSimpleDemo(gridOverlayDemoConfig),\r\n },\r\n {\r\n id: routingDemoConfig.id,\r\n title: routingDemoConfig.title,\r\n description: routingDemoConfig.description,\r\n Component: wrapSimpleDemo(routingDemoConfig),\r\n },\r\n {\r\n id: obstacleRoutingDemoConfig.id,\r\n title: obstacleRoutingDemoConfig.title,\r\n description: obstacleRoutingDemoConfig.description,\r\n Component: ObstacleRoutingDemo,\r\n },\r\n {\r\n id: linkBendHandlesDemoConfig.id,\r\n title: linkBendHandlesDemoConfig.title,\r\n description: linkBendHandlesDemoConfig.description,\r\n Component: wrapSimpleDemo(linkBendHandlesDemoConfig),\r\n },\r\n];\r\n"],"names":["POSITION_EPSILON","cachedKonva","getKonva","ellipseMidPointOrder"],"mappings":"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","x_google_ignoreList":[1]}