@formicoidea/labre-core 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +384 -0
  2. package/dist/_pkgs/affine-block-bookmark/bookmark-block.js +2 -2
  3. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +7 -1
  4. package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-block.js +2 -1
  5. package/dist/_pkgs/affine-block-embed/embed-github-block/embed-github-block.js +2 -1
  6. package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.d.ts +2 -0
  7. package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.js +5 -0
  8. package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.d.ts +1 -0
  9. package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.js +30 -8
  10. package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.d.ts +8 -0
  11. package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.js +19 -0
  12. package/dist/_pkgs/affine-block-embed/embed-loom-block/embed-loom-block.js +2 -1
  13. package/dist/_pkgs/affine-block-embed/embed-youtube-block/embed-youtube-block.js +2 -1
  14. package/dist/_pkgs/affine-block-frame/frame-manager.js +1 -1
  15. package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
  16. package/dist/_pkgs/affine-block-frame/frame-toolbar.js +6 -1
  17. package/dist/_pkgs/affine-block-list/list-keymap.js +7 -0
  18. package/dist/_pkgs/affine-block-note/note-keymap.js +7 -1
  19. package/dist/_pkgs/affine-block-paragraph/paragraph-keymap.js +7 -1
  20. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +1 -8
  21. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +1 -8
  22. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.d.ts +9 -0
  23. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +51 -0
  24. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.d.ts +22 -0
  25. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +46 -0
  26. package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.d.ts +21 -0
  27. package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.js +24 -0
  28. package/dist/_pkgs/affine-block-root/edgeless/utils/query.js +8 -0
  29. package/dist/_pkgs/affine-block-root/keyboard/keymap.js +1 -16
  30. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
  31. package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
  32. package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.d.ts +23 -0
  33. package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.js +89 -0
  34. package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.d.ts +7 -0
  35. package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.js +5 -0
  36. package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.d.ts +41 -0
  37. package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.js +70 -0
  38. package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.d.ts +49 -0
  39. package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.js +257 -0
  40. package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.d.ts +16 -0
  41. package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.js +24 -0
  42. package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.d.ts +24 -0
  43. package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.js +66 -0
  44. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +4 -0
  45. package/dist/_pkgs/affine-block-surface/extensions/index.js +4 -0
  46. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +66 -4
  47. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +241 -11
  48. package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +18 -0
  49. package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.d.ts +81 -0
  50. package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.js +81 -0
  51. package/dist/_pkgs/affine-block-surface/extensions/legend.d.ts +136 -0
  52. package/dist/_pkgs/affine-block-surface/extensions/legend.js +439 -0
  53. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +17 -3
  54. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +35 -13
  55. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +61 -1
  56. package/dist/_pkgs/affine-block-surface/extensions/reading.js +85 -39
  57. package/dist/_pkgs/affine-block-surface/extensions/record-action.d.ts +66 -0
  58. package/dist/_pkgs/affine-block-surface/extensions/record-action.js +145 -0
  59. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +253 -28
  60. package/dist/_pkgs/affine-block-surface/extensions/validation.js +489 -41
  61. package/dist/_pkgs/affine-block-surface/framework-background/background-view.d.ts +115 -0
  62. package/dist/_pkgs/affine-block-surface/framework-background/background-view.js +185 -0
  63. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +1 -0
  64. package/dist/_pkgs/affine-block-surface/framework-background/index.js +1 -0
  65. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +16 -1
  66. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +31 -21
  67. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +29 -5
  68. package/dist/_pkgs/affine-block-surface/framework-background/stacking.d.ts +6 -4
  69. package/dist/_pkgs/affine-block-surface/framework-background/stacking.js +56 -8
  70. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +12 -0
  71. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +15 -0
  72. package/dist/_pkgs/affine-block-surface/view.js +8 -1
  73. package/dist/_pkgs/affine-block-surface-ref/configs/slash-menu.js +1 -1
  74. package/dist/_pkgs/affine-components/color-picker/button.d.ts +56 -1
  75. package/dist/_pkgs/affine-components/color-picker/button.js +168 -23
  76. package/dist/_pkgs/affine-components/color-picker/framework-palette.d.ts +106 -0
  77. package/dist/_pkgs/affine-components/color-picker/framework-palette.js +177 -0
  78. package/dist/_pkgs/affine-components/color-picker/index.d.ts +2 -0
  79. package/dist/_pkgs/affine-components/color-picker/index.js +2 -0
  80. package/dist/_pkgs/affine-components/color-picker/palette-carousel.d.ts +85 -0
  81. package/dist/_pkgs/affine-components/color-picker/palette-carousel.js +440 -0
  82. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.d.ts +31 -1
  83. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +189 -63
  84. package/dist/_pkgs/affine-components/resource/resource.js +29 -16
  85. package/dist/_pkgs/affine-components/translations.d.ts +8 -0
  86. package/dist/_pkgs/affine-components/translations.js +17 -0
  87. package/dist/_pkgs/affine-foundation/view.js +2 -1
  88. package/dist/_pkgs/affine-gfx-brush/element-renderer.js +2 -2
  89. package/dist/_pkgs/affine-gfx-brush/toolbar/configs/brush.js +6 -1
  90. package/dist/_pkgs/affine-gfx-brush/toolbar/configs/highlighter.js +6 -1
  91. package/dist/_pkgs/affine-gfx-connector/connector-manager.d.ts +9 -1
  92. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +61 -0
  93. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.d.ts +7 -1
  94. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +87 -17
  95. package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +78 -17
  96. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.d.ts +24 -2
  97. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +31 -8
  98. package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.d.ts +124 -3
  99. package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.js +216 -54
  100. package/dist/_pkgs/affine-gfx-connector/text/text.d.ts +13 -4
  101. package/dist/_pkgs/affine-gfx-connector/text/text.js +13 -44
  102. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +56 -0
  103. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +72 -4
  104. package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.d.ts +8 -0
  105. package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.js +118 -0
  106. package/dist/_pkgs/affine-gfx-connector/view/view.d.ts +37 -1
  107. package/dist/_pkgs/affine-gfx-connector/view/view.js +97 -8
  108. package/dist/_pkgs/affine-gfx-group/command/group-api.js +1 -1
  109. package/dist/_pkgs/affine-gfx-group/store.js +0 -2
  110. package/dist/_pkgs/affine-gfx-group/translations.d.ts +9 -10
  111. package/dist/_pkgs/affine-gfx-group/translations.js +9 -13
  112. package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +1 -1
  113. package/dist/_pkgs/affine-gfx-mindmap/toolbar/basket-elements.js +1 -1
  114. package/dist/_pkgs/affine-gfx-mindmap/toolbar/utils/import-mindmap.js +2 -2
  115. package/dist/_pkgs/affine-gfx-mindmap/translations.d.ts +1 -1
  116. package/dist/_pkgs/affine-gfx-mindmap/translations.js +1 -1
  117. package/dist/_pkgs/affine-gfx-shape/element-renderer/highlighter.js +2 -2
  118. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.d.ts +6 -0
  119. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +30 -1
  120. package/dist/_pkgs/affine-gfx-shape/polygon-tool.d.ts +20 -1
  121. package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +9 -1
  122. package/dist/_pkgs/affine-gfx-shape/toolbar/config.js +6 -1
  123. package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.js +11 -1
  124. package/dist/_pkgs/affine-gfx-template/builtin/other.js +1 -1
  125. package/dist/_pkgs/affine-gfx-template/snapshot-from-action.js +32 -119
  126. package/dist/_pkgs/affine-gfx-template/toolbar/template-type.d.ts +1 -1
  127. package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.d.ts +13 -1
  128. package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.js +19 -4
  129. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.d.ts +41 -0
  130. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +57 -2
  131. package/dist/_pkgs/affine-gfx-text/toolbar/actions.d.ts +8 -1
  132. package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +12 -2
  133. package/dist/_pkgs/affine-gfx-text/translations.d.ts +1 -0
  134. package/dist/_pkgs/affine-gfx-text/translations.js +2 -1
  135. package/dist/_pkgs/affine-inline-preset/markdown.js +5 -1
  136. package/dist/_pkgs/affine-model/consts/connector.d.ts +28 -2
  137. package/dist/_pkgs/affine-model/consts/connector.js +26 -0
  138. package/dist/_pkgs/affine-model/elements/bpmn/pool.js +1 -1
  139. package/dist/_pkgs/affine-model/elements/brush/brush.js +1 -1
  140. package/dist/_pkgs/affine-model/elements/c4/board.js +1 -1
  141. package/dist/_pkgs/affine-model/elements/c4/boundary.js +1 -1
  142. package/dist/_pkgs/affine-model/elements/connector/connector.d.ts +135 -0
  143. package/dist/_pkgs/affine-model/elements/connector/connector.js +246 -5
  144. package/dist/_pkgs/affine-model/elements/connector/end-label.d.ts +83 -0
  145. package/dist/_pkgs/affine-model/elements/connector/end-label.js +119 -0
  146. package/dist/_pkgs/affine-model/elements/connector/index.d.ts +1 -0
  147. package/dist/_pkgs/affine-model/elements/connector/index.js +1 -0
  148. package/dist/_pkgs/affine-model/elements/context-map/context-map.js +1 -1
  149. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +28 -0
  150. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +129 -2
  151. package/dist/_pkgs/affine-model/elements/cynefin/cynefin.d.ts +8 -0
  152. package/dist/_pkgs/affine-model/elements/cynefin/cynefin.js +45 -2
  153. package/dist/_pkgs/affine-model/elements/edgy/board.js +1 -1
  154. package/dist/_pkgs/affine-model/elements/edgy/facets.js +1 -1
  155. package/dist/_pkgs/affine-model/elements/estuarine/estuarine.d.ts +6 -0
  156. package/dist/_pkgs/affine-model/elements/estuarine/estuarine.js +36 -2
  157. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +18 -7
  158. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +23 -8
  159. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +16 -0
  160. package/dist/_pkgs/affine-model/elements/framework-background/background.js +18 -0
  161. package/dist/_pkgs/affine-model/elements/highlighter/highlighter.js +1 -1
  162. package/dist/_pkgs/affine-model/elements/index.d.ts +8 -0
  163. package/dist/_pkgs/affine-model/elements/index.js +1 -0
  164. package/dist/_pkgs/affine-model/elements/shape/shape.js +1 -1
  165. package/dist/_pkgs/affine-model/elements/text/text.js +1 -1
  166. package/dist/_pkgs/affine-model/elements/uml/band.d.ts +39 -0
  167. package/dist/_pkgs/affine-model/elements/uml/band.js +31 -0
  168. package/dist/_pkgs/affine-model/elements/uml/diagram.d.ts +158 -0
  169. package/dist/_pkgs/affine-model/elements/uml/diagram.js +229 -0
  170. package/dist/_pkgs/affine-model/elements/uml/fragment.d.ts +161 -0
  171. package/dist/_pkgs/affine-model/elements/uml/fragment.js +205 -0
  172. package/dist/_pkgs/affine-model/elements/uml/index.d.ts +8 -0
  173. package/dist/_pkgs/affine-model/elements/uml/index.js +8 -0
  174. package/dist/_pkgs/affine-model/elements/uml/lifeline.d.ts +77 -0
  175. package/dist/_pkgs/affine-model/elements/uml/lifeline.js +89 -0
  176. package/dist/_pkgs/affine-model/elements/uml/node.d.ts +142 -0
  177. package/dist/_pkgs/affine-model/elements/uml/node.js +190 -0
  178. package/dist/_pkgs/affine-model/elements/uml/partition.d.ts +106 -0
  179. package/dist/_pkgs/affine-model/elements/uml/partition.js +172 -0
  180. package/dist/_pkgs/affine-model/elements/uml/region.d.ts +75 -0
  181. package/dist/_pkgs/affine-model/elements/uml/region.js +150 -0
  182. package/dist/_pkgs/affine-model/elements/uml/subject.d.ts +37 -0
  183. package/dist/_pkgs/affine-model/elements/uml/subject.js +108 -0
  184. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +1 -1
  185. package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.d.ts +1 -0
  186. package/dist/_pkgs/affine-shared/services/font-loader/config.d.ts +7 -0
  187. package/dist/_pkgs/affine-shared/services/font-loader/config.js +43 -0
  188. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +1 -9
  189. package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.d.ts +53 -0
  190. package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.js +95 -0
  191. package/dist/_pkgs/affine-shared/services/telemetry-service/index.d.ts +1 -0
  192. package/dist/_pkgs/affine-shared/services/telemetry-service/index.js +1 -0
  193. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +26 -1
  194. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  195. package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.d.ts +34 -0
  196. package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.js +63 -0
  197. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  198. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  199. package/dist/_pkgs/affine-shared/services/translation-service/chrome.d.ts +77 -7
  200. package/dist/_pkgs/affine-shared/services/translation-service/chrome.js +97 -7
  201. package/dist/_pkgs/affine-shared/styles/index.d.ts +1 -0
  202. package/dist/_pkgs/affine-shared/styles/index.js +1 -0
  203. package/dist/_pkgs/affine-shared/styles/motion.d.ts +14 -0
  204. package/dist/_pkgs/affine-shared/styles/motion.js +38 -0
  205. package/dist/_pkgs/affine-shared/utils/event.d.ts +10 -0
  206. package/dist/_pkgs/affine-shared/utils/event.js +20 -0
  207. package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +16 -0
  208. package/dist/_pkgs/affine-shared/utils/file/filesys.js +25 -0
  209. package/dist/_pkgs/affine-shared/utils/index.d.ts +1 -0
  210. package/dist/_pkgs/affine-shared/utils/index.js +1 -0
  211. package/dist/_pkgs/affine-shared/utils/link-preview-refresh.d.ts +12 -0
  212. package/dist/_pkgs/affine-shared/utils/link-preview-refresh.js +13 -0
  213. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +12 -4
  214. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +27 -4
  215. package/dist/_pkgs/affine-widget-edgeless-toolbar/create-popper.js +13 -0
  216. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +2 -0
  217. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +2 -0
  218. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +80 -0
  219. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +270 -81
  220. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.d.ts +15 -0
  221. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.js +15 -0
  222. package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-weight-and-style-panel.js +8 -1
  223. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.d.ts +42 -0
  224. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.js +100 -0
  225. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.d.ts +100 -0
  226. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.js +274 -0
  227. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.d.ts +3 -0
  228. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.js +3 -0
  229. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.d.ts +25 -0
  230. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.js +67 -0
  231. package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +5 -0
  232. package/dist/_pkgs/global/gfx/xywh.js +7 -0
  233. package/dist/_pkgs/std/extension/command-registry.d.ts +158 -1
  234. package/dist/_pkgs/std/extension/command-registry.js +22 -0
  235. package/dist/_pkgs/std/gfx/index.d.ts +1 -1
  236. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +12 -0
  237. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +20 -1
  238. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +10 -0
  239. package/dist/_pkgs/std/gfx/interactivity/manager.js +12 -0
  240. package/dist/_pkgs/std/gfx/model/surface/element-model.js +12 -7
  241. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +56 -0
  242. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +84 -3
  243. package/dist/_pkgs/std/gfx/view/view.d.ts +11 -2
  244. package/dist/_pkgs/std/gfx/view/view.js +16 -2
  245. package/dist/commands.d.ts +6 -0
  246. package/dist/commands.js +8 -1
  247. package/dist/frameworks.d.ts +9 -0
  248. package/dist/frameworks.js +19 -0
  249. package/dist/translations.js +16 -0
  250. package/package.json +9 -4
  251. package/dist/_pkgs/affine-gfx-group/group-watcher.d.ts +0 -1
  252. package/dist/_pkgs/affine-gfx-group/group-watcher.js +0 -20
@@ -14,4 +14,5 @@ export * from './highlighter/index.js';
14
14
  export * from './mindmap/index.js';
15
15
  export * from './shape/index.js';
16
16
  export * from './text/index.js';
17
+ export * from './uml/index.js';
17
18
  export * from './wardley/index.js';
@@ -164,7 +164,7 @@ let ShapeElementModel = (() => {
164
164
  _isClosed_decorators = [field()];
165
165
  _smoothFlags_decorators = [field(null)];
166
166
  _controlPoints_decorators = [field()];
167
- _xywh_decorators = [field()];
167
+ _xywh_decorators = [field('[0,0,0,0]')];
168
168
  __esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
169
169
  __esDecorate(this, null, _fillColor_decorators, { kind: "accessor", name: "fillColor", static: false, private: false, access: { has: obj => "fillColor" in obj, get: obj => obj.fillColor, set: (obj, value) => { obj.fillColor = value; } }, metadata: _metadata }, _fillColor_initializers, _fillColor_extraInitializers);
170
170
  __esDecorate(this, null, _filled_decorators, { kind: "accessor", name: "filled", static: false, private: false, access: { has: obj => "filled" in obj, get: obj => obj.filled, set: (obj, value) => { obj.filled = value; } }, metadata: _metadata }, _filled_initializers, _filled_extraInitializers);
@@ -81,7 +81,7 @@ let TextElementModel = (() => {
81
81
  _rotate_decorators = [field(0)];
82
82
  _text_decorators = [field()];
83
83
  _textAlign_decorators = [field()];
84
- _xywh_decorators = [field()];
84
+ _xywh_decorators = [field('[0,0,0,0]')];
85
85
  __esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
86
86
  __esDecorate(this, null, _fontFamily_decorators, { kind: "accessor", name: "fontFamily", static: false, private: false, access: { has: obj => "fontFamily" in obj, get: obj => obj.fontFamily, set: (obj, value) => { obj.fontFamily = value; } }, metadata: _metadata }, _fontFamily_initializers, _fontFamily_extraInitializers);
87
87
  __esDecorate(this, null, _fontSize_decorators, { kind: "accessor", name: "fontSize", static: false, private: false, access: { has: obj => "fontSize" in obj, get: obj => obj.fontSize, set: (obj, value) => { obj.fontSize = value; } }, metadata: _metadata }, _fontSize_initializers, _fontSize_extraInitializers);
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The NAME BAND carve-out, shared by the UML backgrounds that wear one.
3
+ *
4
+ * A framework background is picked by its BORDER and nothing else (issue #194),
5
+ * which is what keeps a transparent frame from stealing the clicks meant for
6
+ * what it is drawn round. Every frame that writes its name in a STRIP of its
7
+ * own then has to carve that strip back in, or the words are unreachable: a
8
+ * single click on them would select nothing at all.
9
+ *
10
+ * `UmlDiagramElementModel.includesPoint` was the first to do it and states the
11
+ * argument in full. This module is the same arithmetic, lifted out when the
12
+ * activity PARTITION (§15.6.4) and the state-machine REGION (§14.2.4) each
13
+ * arrived wanting it — and wanting it on two different edges, the partition's
14
+ * band following its own `orientation`. Three inline copies of a rotation
15
+ * unwind is three places for one of them to be fixed.
16
+ *
17
+ * The diagram frame keeps its own copy: it is a RED ZONE file whose hit test is
18
+ * pinned by a spec written against it, and rewriting a shipped carve-out to
19
+ * share code with a new one buys nothing a reader can see.
20
+ */
21
+ /** What a band test needs of an element: its box and its rotation. */
22
+ export interface UmlBandGeometry {
23
+ deserializedXYWH: readonly number[];
24
+ rotate?: number;
25
+ }
26
+ /**
27
+ * Whether a CANVAS point lies in the leading band of an element — the strip
28
+ * along its top edge (`'top'`) or along its left edge (`'left'`).
29
+ *
30
+ * The band is axis-aligned INSIDE the element, never on the canvas, so the
31
+ * element rotation is undone about the centre before anything is measured:
32
+ * without that the strip would stay pinned to the top of the screen while the
33
+ * name it is meant to pick turned away with the frame.
34
+ *
35
+ * Clamped to an element smaller than its own band, which is the degenerate case
36
+ * a renderer clamps too: an unclamped strip would hang off a squashed frame and
37
+ * pick it from empty canvas.
38
+ */
39
+ export declare function umlInNameBand(model: UmlBandGeometry, side: 'top' | 'left', band: number, x: number, y: number): boolean;
@@ -0,0 +1,31 @@
1
+ import { rotatePoint } from '../../../global/gfx/index.js';
2
+ /**
3
+ * Whether a CANVAS point lies in the leading band of an element — the strip
4
+ * along its top edge (`'top'`) or along its left edge (`'left'`).
5
+ *
6
+ * The band is axis-aligned INSIDE the element, never on the canvas, so the
7
+ * element rotation is undone about the centre before anything is measured:
8
+ * without that the strip would stay pinned to the top of the screen while the
9
+ * name it is meant to pick turned away with the frame.
10
+ *
11
+ * Clamped to an element smaller than its own band, which is the degenerate case
12
+ * a renderer clamps too: an unclamped strip would hang off a squashed frame and
13
+ * pick it from empty canvas.
14
+ */
15
+ export function umlInNameBand(model, side, band, x, y) {
16
+ const [ex, ey, w, h] = model.deserializedXYWH;
17
+ if (!(w > 0) || !(h > 0) || !(band > 0))
18
+ return false;
19
+ // Element-local coordinates, undoing the element rotation about its centre.
20
+ let lx = x - ex;
21
+ let ly = y - ey;
22
+ const rotate = model.rotate ?? 0;
23
+ if (rotate) {
24
+ const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
25
+ lx = ux - ex;
26
+ ly = uy - ey;
27
+ }
28
+ if (lx < 0 || lx > w || ly < 0 || ly > h)
29
+ return false;
30
+ return side === 'top' ? ly <= Math.min(band, h) : lx <= Math.min(band, w);
31
+ }
@@ -0,0 +1,158 @@
1
+ import type { SerializedXYWH } from '../../../global/gfx/index.js';
2
+ import type { PointTestOptions } from '../../../std/gfx/index.js';
3
+ import type { FrameworkBackgroundProps } from '../framework-background/index.js';
4
+ import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
5
+ /**
6
+ * Height of the diagram frame's heading band — the strip across the top of the
7
+ * frame the `<kind> <name>` tag is written in, in model units.
8
+ *
9
+ * Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`
10
+ * rather than the other way round, for the reason `C4_BOARD_TITLE_BAND_HEIGHT`
11
+ * is: the frame's own hit test needs it (a diagram is clickable by its heading
12
+ * band as well as by its border), and `affine-model` cannot reach into
13
+ * `affine-block-surface` where the declaration is resolved. One number, owned
14
+ * by the layer that both the declaration and the hit test can read.
15
+ *
16
+ * It is the frame's TOP MARGIN — the inset the drawing gives up so the heading
17
+ * has somewhere to be written — so the strip that is painted, the strip that is
18
+ * picked and the strip that opens the rename are one number rather than three.
19
+ *
20
+ * 44 is the height of the cut-corner tag UML 2.5.1 Annex A draws the heading
21
+ * in: a 20-unit label with the rest as breathing room above and below.
22
+ * Changing it moves the heading, so it is a visual decision and not a hit-test
23
+ * one.
24
+ */
25
+ export declare const UML_FRAME_BAND_HEIGHT = 44;
26
+ /**
27
+ * Which kind of UML diagram this frame draws — the DECLARED fact, as opposed to
28
+ * the name, which is free text and says whatever its author wants it to.
29
+ *
30
+ * ## Where the values come from
31
+ *
32
+ * UML 2.5.1 Annex A gives the normative frame kind names, each with the
33
+ * abbreviation that may be written in its place:
34
+ *
35
+ * - `activity` / `act`;
36
+ * - `class` — the one kind Annex A gives NO abbreviation for, so the word
37
+ * itself is the tag;
38
+ * - `component` / `cmp`;
39
+ * - `deployment` / `dep`;
40
+ * - `interaction` / `sd`;
41
+ * - `package` / `pkg`;
42
+ * - `state machine` / `stm`;
43
+ * - `use case` / `uc`.
44
+ *
45
+ * `obj` is NOT in that list. Annex A has no frame kind for the object diagram —
46
+ * the standard treats it as a class diagram showing instances — but every tool
47
+ * that draws one tags it `obj`, and an architect reading the sheet expects to
48
+ * see it. So `obj` is kept as a TOOL CONVENTION, recorded as such here so that
49
+ * nobody later "fixes" it against the spec without knowing it was a choice.
50
+ *
51
+ * ## Widening this union is additive
52
+ *
53
+ * Phase 1 shipped the first four kinds below; phase 2 APPENDED `cmp` and `dep`,
54
+ * the two structural frames of §11.6.4 and §19.2.4, then `act` and `stm`, the
55
+ * two behaviour frames of §15.2.4 and §14.2.4; phase 3 appends `sd`. Each
56
+ * arrives as a new VALUE of the existing `kind`
57
+ * string field — no new field, no schema change, no migration and no backfill.
58
+ * The same promise `C4NodeKind` and `BpmnNodeKind` already make.
59
+ *
60
+ * Appended, never reordered: the union is read as a set of strings by every
61
+ * consumer, and a document only ever stores one of them, so the ORDER below is a
62
+ * reading aid. Keeping it chronological is what lets a reviewer see at a glance
63
+ * which build a value arrived in.
64
+ *
65
+ * A value a client has never seen reads back as the string it is, and
66
+ * {@link UmlDiagramElementModel.heading} writes it verbatim, so a document
67
+ * created by a newer build still shows its own heading on an older one.
68
+ */
69
+ export type UmlDiagramKind = 'class' | 'pkg' | 'obj' | 'uc' | 'cmp' | 'dep' | 'act' | 'stm' | 'sd';
70
+ /**
71
+ * The word written in the heading tag, per kind.
72
+ *
73
+ * A table rather than the raw value so that a kind whose stored discriminant
74
+ * and whose printed tag ever diverge has one place to say so. Today they are
75
+ * the same four strings, and that is worth stating rather than assuming.
76
+ *
77
+ * `Partial` on purpose: a frame read off a document carries whatever string was
78
+ * written there, including a kind from a later phase this build has never heard
79
+ * of. Typing the lookup as total would make {@link
80
+ * UmlDiagramElementModel.heading}'s `?? this.kind` fallback look like dead
81
+ * defensive code, when it is the whole of the append-only promise.
82
+ */
83
+ export declare const UML_DIAGRAM_KIND_TAG: Partial<Record<UmlDiagramKind, string>>;
84
+ export type UmlDiagramProps = FrameworkBackgroundProps & {
85
+ /** The diagram name, written in the heading tag — edited inline on dblclick. */
86
+ name?: string;
87
+ /** Which kind of UML diagram this frame draws. */
88
+ kind?: UmlDiagramKind;
89
+ };
90
+ /**
91
+ * The UML diagram frame: the sheet one diagram is drawn on — a class diagram, a
92
+ * package diagram, an object diagram, a use case diagram, a component diagram, a
93
+ * deployment diagram. A framework
94
+ * background like every other one in the library: the user drops nodes on top
95
+ * of it, and a connector never snaps to it.
96
+ *
97
+ * It carries a NAME and a KIND, and the two are written together in the
98
+ * cut-corner tag at its top left, exactly as UML 2.5.1 Annex A draws it. That
99
+ * shared frame notation is the whole reason UML ships as ONE framework with a
100
+ * kind on the board rather than one framework per diagram family (ADR 0017):
101
+ * the kinds share a sheet and a heading, and they mix on it.
102
+ *
103
+ * What it LOOKS like is declared, not coded: see `UML_DIAGRAM_BACKGROUND` in
104
+ * `@labre/affine-gfx-uml`.
105
+ */
106
+ export declare class UmlDiagramElementModel extends FrameworkBackgroundElementModel<UmlDiagramProps> {
107
+ get type(): string;
108
+ accessor name: string;
109
+ /**
110
+ * Which kind of diagram this frame draws — REQUIRED, unlike the C4 board's
111
+ * `level`, which is optional.
112
+ *
113
+ * The difference is what the field is for. A C4 board's level is a claim
114
+ * about the model an author may decline to make, so an absent one means "a
115
+ * free sketch". A UML frame's kind is part of its NOTATION: Annex A's heading
116
+ * is `<kind> <name>`, and a frame with no kind has no heading to draw. So it
117
+ * has a default, and `class` is the one — the diagram an architect reaches
118
+ * for first, and the only kind Annex A gives no abbreviation for.
119
+ */
120
+ accessor kind: UmlDiagramKind;
121
+ accessor resizeEnabled: boolean;
122
+ accessor rotate: number;
123
+ accessor xywh: SerializedXYWH;
124
+ /**
125
+ * The heading written in the cut-corner tag: `<kind> <name>`.
126
+ *
127
+ * DERIVED, not stored. Nothing here reaches the document: the two halves are
128
+ * `kind` and `name`, and a rename edits `name` alone — so there is one place
129
+ * a heading can be changed from, and nothing to keep in step with it.
130
+ *
131
+ * A kind this client does not know — a phase-2 value on a phase-1 build — is
132
+ * written VERBATIM rather than dropped or replaced by the default. The tag
133
+ * table is a spelling aid, not a gate: a newer document still shows its own
134
+ * heading here, which is the visible half of the append-only promise
135
+ * {@link UmlDiagramKind} makes.
136
+ */
137
+ get heading(): string;
138
+ /**
139
+ * A frame is picked by its BORDER — and by its HEADING BAND, the one carve-out
140
+ * it keeps.
141
+ *
142
+ * The same carve-out a C4 board makes, for the same reason and by the same
143
+ * arithmetic: the band is the only part of the sheet that is the SHEET rather
144
+ * than the diagram drawn on it. The heading is written there, nothing is ever
145
+ * dropped there by convention, and the drawing below is where the work goes —
146
+ * so a click there belongs to whatever node is under the pointer.
147
+ *
148
+ * Without this the heading would be unreachable, backgrounds being picked by
149
+ * their border band alone: the only thing left answering would be the view's
150
+ * double-click zone, which is the tight box of the DRAWN glyphs, and a single
151
+ * click on the heading would select nothing at all.
152
+ *
153
+ * The band is the top margin, full width — one number
154
+ * ({@link UML_FRAME_BAND_HEIGHT}), read from here by the framework
155
+ * declaration, so what is painted is what is selectable.
156
+ */
157
+ includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
158
+ }
@@ -0,0 +1,229 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { rotatePoint } from '../../../global/gfx/index.js';
36
+ import { field } from '../../../std/gfx/index.js';
37
+ import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
38
+ /**
39
+ * Height of the diagram frame's heading band — the strip across the top of the
40
+ * frame the `<kind> <name>` tag is written in, in model units.
41
+ *
42
+ * Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`
43
+ * rather than the other way round, for the reason `C4_BOARD_TITLE_BAND_HEIGHT`
44
+ * is: the frame's own hit test needs it (a diagram is clickable by its heading
45
+ * band as well as by its border), and `affine-model` cannot reach into
46
+ * `affine-block-surface` where the declaration is resolved. One number, owned
47
+ * by the layer that both the declaration and the hit test can read.
48
+ *
49
+ * It is the frame's TOP MARGIN — the inset the drawing gives up so the heading
50
+ * has somewhere to be written — so the strip that is painted, the strip that is
51
+ * picked and the strip that opens the rename are one number rather than three.
52
+ *
53
+ * 44 is the height of the cut-corner tag UML 2.5.1 Annex A draws the heading
54
+ * in: a 20-unit label with the rest as breathing room above and below.
55
+ * Changing it moves the heading, so it is a visual decision and not a hit-test
56
+ * one.
57
+ */
58
+ export const UML_FRAME_BAND_HEIGHT = 44;
59
+ /**
60
+ * The word written in the heading tag, per kind.
61
+ *
62
+ * A table rather than the raw value so that a kind whose stored discriminant
63
+ * and whose printed tag ever diverge has one place to say so. Today they are
64
+ * the same four strings, and that is worth stating rather than assuming.
65
+ *
66
+ * `Partial` on purpose: a frame read off a document carries whatever string was
67
+ * written there, including a kind from a later phase this build has never heard
68
+ * of. Typing the lookup as total would make {@link
69
+ * UmlDiagramElementModel.heading}'s `?? this.kind` fallback look like dead
70
+ * defensive code, when it is the whole of the append-only promise.
71
+ */
72
+ export const UML_DIAGRAM_KIND_TAG = {
73
+ class: 'class',
74
+ pkg: 'pkg',
75
+ obj: 'obj',
76
+ uc: 'uc',
77
+ // Both are Annex A's own abbreviations, written exactly as the Annex writes
78
+ // them — `cmp` for the component diagram, `dep` for the deployment diagram.
79
+ cmp: 'cmp',
80
+ dep: 'dep',
81
+ // Annex A's own abbreviations again — `act` for the activity diagram, `stm`
82
+ // for the state machine diagram. `stm` is the one tag in the table that is
83
+ // NOT the kind spelled out: Annex A's frame kind is the two words `state
84
+ // machine`, and `stm` is the abbreviation it gives in their place.
85
+ act: 'act',
86
+ stm: 'stm',
87
+ // Annex A's abbreviation for the interaction frame, and the third tag in the
88
+ // table that is not the kind spelled out: the frame kind is `interaction`.
89
+ sd: 'sd',
90
+ };
91
+ /**
92
+ * The UML diagram frame: the sheet one diagram is drawn on — a class diagram, a
93
+ * package diagram, an object diagram, a use case diagram, a component diagram, a
94
+ * deployment diagram. A framework
95
+ * background like every other one in the library: the user drops nodes on top
96
+ * of it, and a connector never snaps to it.
97
+ *
98
+ * It carries a NAME and a KIND, and the two are written together in the
99
+ * cut-corner tag at its top left, exactly as UML 2.5.1 Annex A draws it. That
100
+ * shared frame notation is the whole reason UML ships as ONE framework with a
101
+ * kind on the board rather than one framework per diagram family (ADR 0017):
102
+ * the kinds share a sheet and a heading, and they mix on it.
103
+ *
104
+ * What it LOOKS like is declared, not coded: see `UML_DIAGRAM_BACKGROUND` in
105
+ * `@labre/affine-gfx-uml`.
106
+ */
107
+ let UmlDiagramElementModel = (() => {
108
+ let _classSuper = FrameworkBackgroundElementModel;
109
+ let _name_decorators;
110
+ let _name_initializers = [];
111
+ let _name_extraInitializers = [];
112
+ let _kind_decorators;
113
+ let _kind_initializers = [];
114
+ let _kind_extraInitializers = [];
115
+ let _resizeEnabled_decorators;
116
+ let _resizeEnabled_initializers = [];
117
+ let _resizeEnabled_extraInitializers = [];
118
+ let _rotate_decorators;
119
+ let _rotate_initializers = [];
120
+ let _rotate_extraInitializers = [];
121
+ let _xywh_decorators;
122
+ let _xywh_initializers = [];
123
+ let _xywh_extraInitializers = [];
124
+ return class UmlDiagramElementModel extends _classSuper {
125
+ static {
126
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
127
+ _name_decorators = [field('Diagram')];
128
+ _kind_decorators = [field('class')];
129
+ _resizeEnabled_decorators = [field(true)];
130
+ _rotate_decorators = [field(0)];
131
+ _xywh_decorators = [field()];
132
+ __esDecorate(this, null, _name_decorators, { kind: "accessor", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
133
+ __esDecorate(this, null, _kind_decorators, { kind: "accessor", name: "kind", static: false, private: false, access: { has: obj => "kind" in obj, get: obj => obj.kind, set: (obj, value) => { obj.kind = value; } }, metadata: _metadata }, _kind_initializers, _kind_extraInitializers);
134
+ __esDecorate(this, null, _resizeEnabled_decorators, { kind: "accessor", name: "resizeEnabled", static: false, private: false, access: { has: obj => "resizeEnabled" in obj, get: obj => obj.resizeEnabled, set: (obj, value) => { obj.resizeEnabled = value; } }, metadata: _metadata }, _resizeEnabled_initializers, _resizeEnabled_extraInitializers);
135
+ __esDecorate(this, null, _rotate_decorators, { kind: "accessor", name: "rotate", static: false, private: false, access: { has: obj => "rotate" in obj, get: obj => obj.rotate, set: (obj, value) => { obj.rotate = value; } }, metadata: _metadata }, _rotate_initializers, _rotate_extraInitializers);
136
+ __esDecorate(this, null, _xywh_decorators, { kind: "accessor", name: "xywh", static: false, private: false, access: { has: obj => "xywh" in obj, get: obj => obj.xywh, set: (obj, value) => { obj.xywh = value; } }, metadata: _metadata }, _xywh_initializers, _xywh_extraInitializers);
137
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
138
+ }
139
+ get type() {
140
+ return 'umlDiagram';
141
+ }
142
+ #name_accessor_storage = __runInitializers(this, _name_initializers, 'Diagram');
143
+ get name() { return this.#name_accessor_storage; }
144
+ set name(value) { this.#name_accessor_storage = value; }
145
+ #kind_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _kind_initializers, 'class'));
146
+ /**
147
+ * Which kind of diagram this frame draws — REQUIRED, unlike the C4 board's
148
+ * `level`, which is optional.
149
+ *
150
+ * The difference is what the field is for. A C4 board's level is a claim
151
+ * about the model an author may decline to make, so an absent one means "a
152
+ * free sketch". A UML frame's kind is part of its NOTATION: Annex A's heading
153
+ * is `<kind> <name>`, and a frame with no kind has no heading to draw. So it
154
+ * has a default, and `class` is the one — the diagram an architect reaches
155
+ * for first, and the only kind Annex A gives no abbreviation for.
156
+ */
157
+ get kind() { return this.#kind_accessor_storage; }
158
+ set kind(value) { this.#kind_accessor_storage = value; }
159
+ #resizeEnabled_accessor_storage = (__runInitializers(this, _kind_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
160
+ get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
161
+ set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
162
+ #rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
163
+ get rotate() { return this.#rotate_accessor_storage; }
164
+ set rotate(value) { this.#rotate_accessor_storage = value; }
165
+ #xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,1400,900]'));
166
+ get xywh() { return this.#xywh_accessor_storage; }
167
+ set xywh(value) { this.#xywh_accessor_storage = value; }
168
+ /**
169
+ * The heading written in the cut-corner tag: `<kind> <name>`.
170
+ *
171
+ * DERIVED, not stored. Nothing here reaches the document: the two halves are
172
+ * `kind` and `name`, and a rename edits `name` alone — so there is one place
173
+ * a heading can be changed from, and nothing to keep in step with it.
174
+ *
175
+ * A kind this client does not know — a phase-2 value on a phase-1 build — is
176
+ * written VERBATIM rather than dropped or replaced by the default. The tag
177
+ * table is a spelling aid, not a gate: a newer document still shows its own
178
+ * heading here, which is the visible half of the append-only promise
179
+ * {@link UmlDiagramKind} makes.
180
+ */
181
+ get heading() {
182
+ return `${UML_DIAGRAM_KIND_TAG[this.kind] ?? this.kind} ${this.name}`.trim();
183
+ }
184
+ /**
185
+ * A frame is picked by its BORDER — and by its HEADING BAND, the one carve-out
186
+ * it keeps.
187
+ *
188
+ * The same carve-out a C4 board makes, for the same reason and by the same
189
+ * arithmetic: the band is the only part of the sheet that is the SHEET rather
190
+ * than the diagram drawn on it. The heading is written there, nothing is ever
191
+ * dropped there by convention, and the drawing below is where the work goes —
192
+ * so a click there belongs to whatever node is under the pointer.
193
+ *
194
+ * Without this the heading would be unreachable, backgrounds being picked by
195
+ * their border band alone: the only thing left answering would be the view's
196
+ * double-click zone, which is the tight box of the DRAWN glyphs, and a single
197
+ * click on the heading would select nothing at all.
198
+ *
199
+ * The band is the top margin, full width — one number
200
+ * ({@link UML_FRAME_BAND_HEIGHT}), read from here by the framework
201
+ * declaration, so what is painted is what is selectable.
202
+ */
203
+ includesPoint(x, y, options) {
204
+ if (super.includesPoint(x, y, options))
205
+ return true;
206
+ const [ex, ey, w, h] = this.deserializedXYWH;
207
+ // Element-local coordinates, undoing the element rotation about its centre
208
+ // — the band is axis-aligned inside the frame, not on the canvas.
209
+ let lx = x - ex;
210
+ let ly = y - ey;
211
+ const rotate = this.rotate ?? 0;
212
+ if (rotate) {
213
+ const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
214
+ lx = ux - ex;
215
+ ly = uy - ey;
216
+ }
217
+ if (lx < 0 || lx > w || ly < 0)
218
+ return false;
219
+ // Clamped to a frame shorter than its own heading — the degenerate case the
220
+ // renderer clamps too.
221
+ return ly <= Math.min(UML_FRAME_BAND_HEIGHT, h);
222
+ }
223
+ constructor() {
224
+ super(...arguments);
225
+ __runInitializers(this, _xywh_extraInitializers);
226
+ }
227
+ };
228
+ })();
229
+ export { UmlDiagramElementModel };
@@ -0,0 +1,161 @@
1
+ import type { SerializedXYWH } from '../../../global/gfx/index.js';
2
+ import type { PointTestOptions } from '../../../std/gfx/index.js';
3
+ import type { FrameworkBackgroundProps } from '../framework-background/index.js';
4
+ import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
5
+ /**
6
+ * Height of a combined fragment's OPERATOR BAND — the strip across its top the
7
+ * pentagon tag is drawn in, in model units.
8
+ *
9
+ * Owned by the model for the reason {@link UML_FRAME_BAND_HEIGHT} is: the
10
+ * fragment's own hit test reads it (a fragment is clickable by its tag strip as
11
+ * well as by its border), and `affine-model` cannot reach into
12
+ * `affine-block-surface` where the declaration is resolved.
13
+ *
14
+ * The diagram frame's own 44, and deliberately: §17.6.4 draws the operator in
15
+ * the very same cut-corner pentagon Annex A draws a frame heading in — it IS a
16
+ * frame, nested in another one — and two numbers for one piece of furniture
17
+ * would drift.
18
+ */
19
+ export declare const UML_FRAGMENT_BAND = 44;
20
+ /**
21
+ * The INTERACTION OPERATOR of a combined fragment — the word written in its
22
+ * pentagon, and the whole of what the fragment says (UML 2.5.1 §17.6.4).
23
+ *
24
+ * The twelve operators of §17.6.4 plus `ref`, and the thirteenth is the one
25
+ * that is not an operator at all: §17.7.4's InteractionUse is a different
26
+ * metaclass drawn as the same rectangle with the same pentagon, and every tool
27
+ * offers it from the same menu. Keeping it here is what lets one element, one
28
+ * renderer and one toolbar cover both — the alternative being a second
29
+ * background that differs from this one by a string.
30
+ *
31
+ * Widened the way every other UML union is: appended, never reordered, and read
32
+ * back as whatever string the document carries. A fragment whose operator this
33
+ * build has never heard of still paints its rectangle and still writes its own
34
+ * word in the tag.
35
+ */
36
+ export type UmlFragmentOperator = 'alt' | 'opt' | 'loop' | 'par' | 'break' | 'critical' | 'seq' | 'strict' | 'neg' | 'assert' | 'ignore' | 'consider' | 'ref';
37
+ /**
38
+ * One OPERAND of a combined fragment — a horizontal band of it, separated from
39
+ * the next by a dashed line (§17.6.4).
40
+ *
41
+ * The shape of a `BackgroundInstanceZoneItem` in `@labre/affine-block-surface`,
42
+ * and deliberately the same three fields as {@link BpmnLane}: the primitive
43
+ * paints an instance partition from that structure, the audit reports it from
44
+ * that structure, and an operand with a shape of its own would be a fourth
45
+ * place the two have to agree.
46
+ *
47
+ * `name` is the operand's GUARD — `[x > 0]`, `[else]` — because that is the
48
+ * only thing §17.6.4 writes in an operand's own corner. `size` is a relative
49
+ * WEIGHT and not a height in model units: a fragment dragged taller
50
+ * redistributes the space between its operands instead of leaving a gap under
51
+ * the last one.
52
+ */
53
+ export interface UmlFragmentOperand {
54
+ /** Stable id, generated at creation. Never the guard: a guard is rewritten. */
55
+ id: string;
56
+ /** The operand's guard, written in its top-left corner. */
57
+ name?: string;
58
+ /** Relative weight — see above. Must be a finite number greater than zero. */
59
+ size: number;
60
+ }
61
+ export type UmlFragmentProps = FrameworkBackgroundProps & {
62
+ /** Which operator the pentagon writes. */
63
+ operator?: UmlFragmentOperator;
64
+ /** The first operand's guard, or a `ref`'s interaction name. */
65
+ name?: string;
66
+ /** The fragment's partition into operands. Absent until a second is added. */
67
+ operands?: UmlFragmentOperand[];
68
+ };
69
+ /**
70
+ * A COMBINED FRAGMENT — the rectangle drawn round part of a sequence diagram
71
+ * with an operator in its corner (UML 2.5.1 §17.6.4), and, under the `ref`
72
+ * operator, the InteractionUse of §17.7.4.
73
+ *
74
+ * A framework background, and a TRANSPARENT one, like
75
+ * {@link UmlSubjectElementModel} and {@link UmlPartitionElementModel}: it is
76
+ * drawn OVER lifelines and messages that are already there, and an opaque card
77
+ * would hide the very conversation it is qualifying. Membership — which
78
+ * messages are inside the `alt`, which lifelines it covers — is geometry at
79
+ * read time (R11), never a stored list.
80
+ *
81
+ * ## Why the operator is a field and the operands are not elements
82
+ *
83
+ * The operator IS the fragment: `alt` and `loop` are the same rectangle saying
84
+ * two entirely different things, and nothing in the picture distinguishes them
85
+ * but the word. So it is stored, with `alt` as the default — the fragment an
86
+ * architect reaches for first, and the one §17.6.4 opens with.
87
+ *
88
+ * The operands are bands of that one rectangle, and they follow the BPMN pool's
89
+ * lanes exactly: an optional flat array, `undefined` rather than `[]` until the
90
+ * first one is added, so a fragment with a single operand stays byte-identical
91
+ * to one written before the field existed. The trade the pool's own note
92
+ * states applies here unchanged — two peers reordering the operands at the same
93
+ * moment resolve last-write-wins, one whole list winning over the other — and
94
+ * it is stated so it is reviewed rather than discovered.
95
+ *
96
+ * What it LOOKS like is declared, not coded: see `UML_FRAGMENT_FRAME` in
97
+ * `@labre/affine-gfx-uml`.
98
+ */
99
+ export declare class UmlFragmentElementModel extends FrameworkBackgroundElementModel<UmlFragmentProps> {
100
+ get type(): string;
101
+ /**
102
+ * The operator — REQUIRED, with `alt` as the default, for the reason
103
+ * `UmlDiagramElementModel.kind` is required: it is part of the NOTATION
104
+ * rather than a claim an author may decline to make. A fragment with no
105
+ * operator has no word to write in its pentagon, and a pentagon with nothing
106
+ * in it is a rectangle with a bitten corner.
107
+ */
108
+ accessor operator: UmlFragmentOperator;
109
+ /**
110
+ * The first operand's guard, or — under `ref` — the name of the interaction
111
+ * being referred to.
112
+ *
113
+ * Seeded EMPTY, unlike every other UML frame's name: §17.6.4 draws a guard
114
+ * only where there is one to draw, and `[alt]` with an empty bracket under it
115
+ * would be the notation inventing a condition the author has not written. An
116
+ * empty string keeps the field in the document (the `@field` default is
117
+ * written) without putting words on the page.
118
+ */
119
+ accessor name: string;
120
+ accessor resizeEnabled: boolean;
121
+ accessor rotate: number;
122
+ /**
123
+ * Wide enough to cover three lifelines at the 200-unit spacing a sequence
124
+ * diagram is laid out on, and tall enough for three or four exchanges — the
125
+ * size an `alt` is actually drawn round.
126
+ */
127
+ accessor xywh: SerializedXYWH;
128
+ /**
129
+ * The fragment's partition into operands, top to bottom.
130
+ *
131
+ * `undefined`, not `[]`, and for the three reasons `BpmnPoolElementModel
132
+ * .lanes` states in full: `@field()` writes nothing for an undefined default,
133
+ * so a fragment with a single operand — which is every `opt`, every `loop`
134
+ * and every `ref` — is byte-identical to one created before this field
135
+ * existed; the value is flat JSON because a list of operands is one atomic
136
+ * choice about how one fragment is cut; and it is declared here rather than
137
+ * on the base class because an operand is a subdivision of a combined
138
+ * fragment and of nothing else.
139
+ *
140
+ * What it MEANS is declared, not coded: `UML_FRAGMENT_FRAME.instanceZones`
141
+ * in `@labre/affine-gfx-uml` names this prop, and the framework-background
142
+ * primitive paints the separators and the guards from it.
143
+ */
144
+ accessor operands: UmlFragmentOperand[] | undefined;
145
+ /**
146
+ * Picked by its BORDER — and by its OPERATOR BAND, the one carve-out it
147
+ * keeps.
148
+ *
149
+ * The same carve-out the diagram frame, the partition and the composite state
150
+ * all make, and for the same reason: the band is the only part of the
151
+ * fragment that is the FRAGMENT rather than the conversation drawn inside it.
152
+ * Without it the pentagon would be unreachable, a background being picked by
153
+ * its border alone — and a transparent fragment's border is a thin line round
154
+ * a region full of other people's messages.
155
+ *
156
+ * Nothing below the band is claimed, which matters here as much as on a
157
+ * partition: a fragment is drawn OVER lifelines, so every point that is not
158
+ * its own furniture has to fall through to whatever is under the pointer.
159
+ */
160
+ includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
161
+ }