@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
@@ -0,0 +1,150 @@
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 { field } from '../../../std/gfx/index.js';
36
+ import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
37
+ import { umlInNameBand } from './band.js';
38
+ /**
39
+ * Height of a region's NAME BAND — the strip its name is written in, in model
40
+ * units.
41
+ *
42
+ * Owned by the model for the reason {@link UML_PARTITION_BAND} is: the region's
43
+ * own hit test reads it, and `affine-model` cannot reach into the package where
44
+ * the declaration is resolved. The same 36 the partition uses, and deliberately
45
+ * so — the two are the same piece of furniture, a name written in a strip along
46
+ * the top of a transparent frame, and two numbers would drift.
47
+ */
48
+ export const UML_REGION_BAND = 36;
49
+ /**
50
+ * A COMPOSITE STATE — the region of UML 2.5.1 §14.2.4: the rounded rectangle
51
+ * drawn round the sub-states of a state that has its own state machine inside
52
+ * it.
53
+ *
54
+ * A framework background, transparent like {@link UmlPartitionElementModel}: it
55
+ * is drawn OVER states that are already there, and membership is geometry at
56
+ * read time (R11).
57
+ *
58
+ * ## Why a composite state IS the region, rather than a state with regions in it
59
+ *
60
+ * The metamodel has two objects — a State that `isComposite`, and the Regions it
61
+ * owns — and the notation draws ONE: a rounded rectangle with the state's name
62
+ * at the top and the sub-machine inside (§14.2.4, Figure 14.6). A drawing tool
63
+ * that made the author place a `state` node and then a `umlRegion` inside it
64
+ * would be asking them to draw two things to get one picture, and would leave
65
+ * every rule with two elements to decide which of them the composite state is.
66
+ *
67
+ * So this element IS the composite state: it carries the name, it draws the
68
+ * rounded rectangle, and its sub-states sit inside it by geometry.
69
+ *
70
+ * ## The ceiling, stated out loud
71
+ *
72
+ * ORTHOGONAL regions — a composite state cut into concurrent regions by dashed
73
+ * separators (§14.2.4, Figure 14.8) — are NOT drawn. One region per composite
74
+ * state is what this element is; a second one is a phase-3 refinement, and it
75
+ * will arrive the way the BPMN pool's lanes did (an instance partition on the
76
+ * declaration) rather than as a field added here in a hurry.
77
+ *
78
+ * What it LOOKS like is declared, not coded: see `UML_REGION_FRAME` in
79
+ * `@labre/affine-gfx-uml`.
80
+ */
81
+ let UmlRegionElementModel = (() => {
82
+ let _classSuper = FrameworkBackgroundElementModel;
83
+ let _name_decorators;
84
+ let _name_initializers = [];
85
+ let _name_extraInitializers = [];
86
+ let _resizeEnabled_decorators;
87
+ let _resizeEnabled_initializers = [];
88
+ let _resizeEnabled_extraInitializers = [];
89
+ let _rotate_decorators;
90
+ let _rotate_initializers = [];
91
+ let _rotate_extraInitializers = [];
92
+ let _xywh_decorators;
93
+ let _xywh_initializers = [];
94
+ let _xywh_extraInitializers = [];
95
+ return class UmlRegionElementModel extends _classSuper {
96
+ static {
97
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
98
+ _name_decorators = [field('State')];
99
+ _resizeEnabled_decorators = [field(true)];
100
+ _rotate_decorators = [field(0)];
101
+ _xywh_decorators = [field()];
102
+ __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);
103
+ __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);
104
+ __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);
105
+ __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);
106
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
107
+ }
108
+ get type() {
109
+ return 'umlRegion';
110
+ }
111
+ #name_accessor_storage = __runInitializers(this, _name_initializers, 'State');
112
+ /**
113
+ * `State`, not `Region`: this element IS the composite state on the page, and
114
+ * a fresh one that called itself a Region would be naming the metamodel
115
+ * object rather than the thing the author drew (see the header).
116
+ */
117
+ get name() { return this.#name_accessor_storage; }
118
+ set name(value) { this.#name_accessor_storage = value; }
119
+ #resizeEnabled_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
120
+ get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
121
+ set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
122
+ #rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
123
+ get rotate() { return this.#rotate_accessor_storage; }
124
+ set rotate(value) { this.#rotate_accessor_storage = value; }
125
+ #xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,520,320]'));
126
+ /** Room for a small sub-machine — an initial, two states and a final. */
127
+ get xywh() { return this.#xywh_accessor_storage; }
128
+ set xywh(value) { this.#xywh_accessor_storage = value; }
129
+ /**
130
+ * Picked by its BORDER and by its NAME BAND — the carve-out the diagram frame
131
+ * and the partition both make, and for the same reason: the band is the only
132
+ * part of the composite state that is the STATE rather than the sub-machine
133
+ * drawn inside it.
134
+ *
135
+ * Always the TOP edge: unlike a partition, a composite state has no
136
+ * orientation to turn — §14.2.4 writes its name across the top and nowhere
137
+ * else.
138
+ */
139
+ includesPoint(x, y, options) {
140
+ if (super.includesPoint(x, y, options))
141
+ return true;
142
+ return umlInNameBand(this, 'top', UML_REGION_BAND, x, y);
143
+ }
144
+ constructor() {
145
+ super(...arguments);
146
+ __runInitializers(this, _xywh_extraInitializers);
147
+ }
148
+ };
149
+ })();
150
+ export { UmlRegionElementModel };
@@ -0,0 +1,37 @@
1
+ import type { SerializedXYWH } from '../../../global/gfx/index.js';
2
+ import type { FrameworkBackgroundProps } from '../framework-background/index.js';
3
+ import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
4
+ export type UmlSubjectProps = FrameworkBackgroundProps & {
5
+ /** The subject name, written top-left — edited inline on dblclick. */
6
+ name?: string;
7
+ };
8
+ /**
9
+ * A UML use case SUBJECT: the system boundary of UML 2.5.1 §18.1.4 — the plain
10
+ * rectangle drawn around the use cases a system offers, with its name written
11
+ * top-left and the actors left outside it.
12
+ *
13
+ * A framework background, so use cases are dropped on it and connectors never
14
+ * snap to it — but a TRANSPARENT one, like {@link C4BoundaryElementModel} and
15
+ * for the same reason: a subject is drawn over the diagram frame it sits on,
16
+ * and an opaque card would hide the use cases it encloses. Containment is
17
+ * visual only; membership, as for every board in the library, is computed from
18
+ * geometry at read time (R11).
19
+ *
20
+ * ## Why no variant, and no compartments
21
+ *
22
+ * The notation gives it none. §18.1.4 draws one rectangle with one name — there
23
+ * is no dashed flavour, no keyword line and no second tier — so, unlike a C4
24
+ * boundary (which draws system and container identically and tells them apart
25
+ * by the label), there is nothing here for a discriminant to discriminate. A
26
+ * field with one possible value is a field that can only ever go stale.
27
+ *
28
+ * What it LOOKS like is declared, not coded: see `UML_SUBJECT_BACKGROUND` in
29
+ * `@labre/affine-gfx-uml`.
30
+ */
31
+ export declare class UmlSubjectElementModel extends FrameworkBackgroundElementModel<UmlSubjectProps> {
32
+ get type(): string;
33
+ accessor name: string;
34
+ accessor resizeEnabled: boolean;
35
+ accessor rotate: number;
36
+ accessor xywh: SerializedXYWH;
37
+ }
@@ -0,0 +1,108 @@
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 { field } from '../../../std/gfx/index.js';
36
+ import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
37
+ /**
38
+ * A UML use case SUBJECT: the system boundary of UML 2.5.1 §18.1.4 — the plain
39
+ * rectangle drawn around the use cases a system offers, with its name written
40
+ * top-left and the actors left outside it.
41
+ *
42
+ * A framework background, so use cases are dropped on it and connectors never
43
+ * snap to it — but a TRANSPARENT one, like {@link C4BoundaryElementModel} and
44
+ * for the same reason: a subject is drawn over the diagram frame it sits on,
45
+ * and an opaque card would hide the use cases it encloses. Containment is
46
+ * visual only; membership, as for every board in the library, is computed from
47
+ * geometry at read time (R11).
48
+ *
49
+ * ## Why no variant, and no compartments
50
+ *
51
+ * The notation gives it none. §18.1.4 draws one rectangle with one name — there
52
+ * is no dashed flavour, no keyword line and no second tier — so, unlike a C4
53
+ * boundary (which draws system and container identically and tells them apart
54
+ * by the label), there is nothing here for a discriminant to discriminate. A
55
+ * field with one possible value is a field that can only ever go stale.
56
+ *
57
+ * What it LOOKS like is declared, not coded: see `UML_SUBJECT_BACKGROUND` in
58
+ * `@labre/affine-gfx-uml`.
59
+ */
60
+ let UmlSubjectElementModel = (() => {
61
+ let _classSuper = FrameworkBackgroundElementModel;
62
+ let _name_decorators;
63
+ let _name_initializers = [];
64
+ let _name_extraInitializers = [];
65
+ let _resizeEnabled_decorators;
66
+ let _resizeEnabled_initializers = [];
67
+ let _resizeEnabled_extraInitializers = [];
68
+ let _rotate_decorators;
69
+ let _rotate_initializers = [];
70
+ let _rotate_extraInitializers = [];
71
+ let _xywh_decorators;
72
+ let _xywh_initializers = [];
73
+ let _xywh_extraInitializers = [];
74
+ return class UmlSubjectElementModel extends _classSuper {
75
+ static {
76
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
77
+ _name_decorators = [field('Subject')];
78
+ _resizeEnabled_decorators = [field(true)];
79
+ _rotate_decorators = [field(0)];
80
+ _xywh_decorators = [field()];
81
+ __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);
82
+ __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);
83
+ __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);
84
+ __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);
85
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
86
+ }
87
+ get type() {
88
+ return 'umlSubject';
89
+ }
90
+ #name_accessor_storage = __runInitializers(this, _name_initializers, 'Subject');
91
+ get name() { return this.#name_accessor_storage; }
92
+ set name(value) { this.#name_accessor_storage = value; }
93
+ #resizeEnabled_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
94
+ get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
95
+ set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
96
+ #rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
97
+ get rotate() { return this.#rotate_accessor_storage; }
98
+ set rotate(value) { this.#rotate_accessor_storage = value; }
99
+ #xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,520,360]'));
100
+ get xywh() { return this.#xywh_accessor_storage; }
101
+ set xywh(value) { this.#xywh_accessor_storage = value; }
102
+ constructor() {
103
+ super(...arguments);
104
+ __runInitializers(this, _xywh_extraInitializers);
105
+ }
106
+ };
107
+ })();
108
+ export { UmlSubjectElementModel };
@@ -138,7 +138,7 @@ let WardleyBackgroundElementModel = (() => {
138
138
  _showCornerLabels_decorators = [field(true)];
139
139
  _showVisibilityLabels_decorators = [field(true)];
140
140
  _rotate_decorators = [field(0)];
141
- _xywh_decorators = [field()];
141
+ _xywh_decorators = [field('[0,0,0,0]')];
142
142
  __esDecorate(this, null, _banded_decorators, { kind: "accessor", name: "banded", static: false, private: false, access: { has: obj => "banded" in obj, get: obj => obj.banded, set: (obj, value) => { obj.banded = value; } }, metadata: _metadata }, _banded_initializers, _banded_extraInitializers);
143
143
  __esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
144
144
  __esDecorate(this, null, _showGradient_decorators, { kind: "accessor", name: "showGradient", static: false, private: false, access: { has: obj => "showGradient" in obj, get: obj => obj.showGradient, set: (obj, value) => { obj.showGradient = value; } }, metadata: _metadata }, _showGradient_initializers, _showGradient_extraInitializers);
@@ -23,6 +23,7 @@ export type IframeOptions = {
23
23
  allow?: string;
24
24
  allowFullscreen?: boolean;
25
25
  containerBorderRadius?: number;
26
+ sandbox?: string;
26
27
  };
27
28
  /**
28
29
  * Define the config of an embed iframe block
@@ -16,5 +16,12 @@ export declare const fontConfigSchema: z.ZodObject<{
16
16
  weight: string;
17
17
  }>;
18
18
  export type FontConfig = z.infer<typeof fontConfigSchema>;
19
+ /**
20
+ * The AFFiNE-hosted mirror. It carries strictly fewer files than the community
21
+ * list: `cdn.affine.pro` answers 404 for every `Inter-Bold`, `Poppins-Bold`
22
+ * and `BebasNeue-Bold` spelling, so those three families offer no 700 weight
23
+ * here. The Kalam / Satoshi / Lora `SemiBold` entries below already point at
24
+ * the 700 file — those families ship a single heavy face, not two.
25
+ */
19
26
  export declare const AffineCanvasTextFonts: FontConfig[];
20
27
  export declare const CommunityCanvasTextFonts: FontConfig[];
@@ -6,6 +6,13 @@ export const fontConfigSchema = z.object({
6
6
  url: z.string(),
7
7
  style: z.string(),
8
8
  });
9
+ /**
10
+ * The AFFiNE-hosted mirror. It carries strictly fewer files than the community
11
+ * list: `cdn.affine.pro` answers 404 for every `Inter-Bold`, `Poppins-Bold`
12
+ * and `BebasNeue-Bold` spelling, so those three families offer no 700 weight
13
+ * here. The Kalam / Satoshi / Lora `SemiBold` entries below already point at
14
+ * the 700 file — those families ship a single heavy face, not two.
15
+ */
9
16
  export const AffineCanvasTextFonts = [
10
17
  // Inter, https://fonts.cdnfonts.com/css/inter?styles=29139,29134,29135,29136,29140,29141
11
18
  {
@@ -221,13 +228,27 @@ export const CommunityCanvasTextFonts = [
221
228
  weight: FontWeight.Regular,
222
229
  style: FontStyle.Italic,
223
230
  },
231
+ {
232
+ font: FontFamily.Inter,
233
+ url: 'https://fonts.cdnfonts.com/s/19795/Inter-Bold.woff',
234
+ weight: FontWeight.Bold,
235
+ style: FontStyle.Normal,
236
+ },
224
237
  {
225
238
  font: FontFamily.Inter,
226
239
  url: 'https://fonts.cdnfonts.com/s/19795/Inter-SemiBoldItalic.woff',
227
240
  weight: FontWeight.SemiBold,
228
241
  style: FontStyle.Italic,
229
242
  },
243
+ {
244
+ font: FontFamily.Inter,
245
+ url: 'https://fonts.cdnfonts.com/s/19795/Inter-BoldItalic.woff',
246
+ weight: FontWeight.Bold,
247
+ style: FontStyle.Italic,
248
+ },
230
249
  // Kalam, https://fonts.cdnfonts.com/css/kalam?styles=15166,170689,170687
250
+ // Kalam ships no 600 face: its `SemiBold` entry below already IS the 700
251
+ // file, so the family offers one heavy weight, not two.
231
252
  {
232
253
  font: FontFamily.Kalam,
233
254
  url: 'https://fonts.cdnfonts.com/s/13130/Kalam-Light.woff',
@@ -308,6 +329,12 @@ export const CommunityCanvasTextFonts = [
308
329
  weight: FontWeight.SemiBold,
309
330
  style: FontStyle.Normal,
310
331
  },
332
+ {
333
+ font: FontFamily.Poppins,
334
+ url: 'https://fonts.cdnfonts.com/s/16009/Poppins-Bold.woff',
335
+ weight: FontWeight.Bold,
336
+ style: FontStyle.Normal,
337
+ },
311
338
  {
312
339
  font: FontFamily.Poppins,
313
340
  url: 'https://fonts.cdnfonts.com/s/16009/Poppins-LightItalic.woff',
@@ -326,7 +353,15 @@ export const CommunityCanvasTextFonts = [
326
353
  weight: FontWeight.SemiBold,
327
354
  style: FontStyle.Italic,
328
355
  },
356
+ {
357
+ font: FontFamily.Poppins,
358
+ url: 'https://fonts.cdnfonts.com/s/16009/Poppins-BoldItalic.woff',
359
+ weight: FontWeight.Bold,
360
+ style: FontStyle.Italic,
361
+ },
329
362
  // Lora, https://fonts.cdnfonts.com/css/lora-4?styles=50357,50356,50354,50355
363
+ // Lora ships no 600 face either: as with Kalam and Satoshi, the entries
364
+ // below map the 700 file onto `SemiBold` and the family has a single heavy.
330
365
  {
331
366
  font: FontFamily.Lora,
332
367
  url: 'https://fonts.cdnfonts.com/s/29883/Lora-Regular.woff',
@@ -364,6 +399,14 @@ export const CommunityCanvasTextFonts = [
364
399
  weight: FontWeight.Regular,
365
400
  style: FontStyle.Normal,
366
401
  },
402
+ {
403
+ font: FontFamily.BebasNeue,
404
+ // The bold face is the one Bebas Neue file whose name is spelled with a
405
+ // space, like the light one above and unlike the regular one.
406
+ url: 'https://fonts.cdnfonts.com/s/14902/BebasNeue%20Bold.woff',
407
+ weight: FontWeight.Bold,
408
+ style: FontStyle.Normal,
409
+ },
367
410
  // OrelegaOne, https://fonts.cdnfonts.com/css/orelega-one?styles=148618
368
411
  {
369
412
  font: FontFamily.OrelegaOne,
@@ -42,8 +42,7 @@
42
42
  * materiality by scanning `collectPivotOccurrences`. Derived materialities are
43
43
  * a cache of the boards, never a second original.
44
44
  */
45
- import { LifeCycleWatcher } from '../../std/index.js';
46
- import { FRAMEWORK_IDS } from '../../std/index.js';
45
+ import { frameworkOfRole, LifeCycleWatcher } from '../../std/index.js';
47
46
  import { GfxControllerIdentifier, isPivotBound, readElementTags, } from '../../std/gfx/index.js';
48
47
  import { effect } from '@preact/signals-core';
49
48
  import { PivotPropertiesProvider, publishOccurrenceMaterialities, } from './pivot-properties-service.js';
@@ -51,13 +50,6 @@ import { PivotPropertiesProvider, publishOccurrenceMaterialities, } from './pivo
51
50
  const MATERIAL_PROPS = new Set(['tags', 'role', 'pivotDocId']);
52
51
  const touchesMateriality = (payload) => Object.keys(payload.props).some(key => MATERIAL_PROPS.has(key)) ||
53
52
  Object.keys(payload.oldValues).some(key => MATERIAL_PROPS.has(key));
54
- /** `'wardley:component'` → `'wardley'`, when that names a real framework. */
55
- function frameworkOfRole(role) {
56
- const namespace = role?.split(':')[0];
57
- return FRAMEWORK_IDS.includes(namespace ?? '')
58
- ? namespace
59
- : undefined;
60
- }
61
53
  /**
62
54
  * `(pivotDocId, elementId)` — the host's primary key for a derived materiality.
63
55
  *
@@ -0,0 +1,53 @@
1
+ import { LifeCycleWatcher } from '../../../std/index.js';
2
+ import type { SurfaceElementDamage, SurfaceElementDamageReport } from '../../../std/gfx/index.js';
3
+ /**
4
+ * The whole surface API this watcher touches, named structurally on purpose:
5
+ * it is also the entire harness a unit spec has to stand up, and it keeps the
6
+ * watcher from caring which block flavour grew a `damagedElements` map next.
7
+ */
8
+ export type DamageReportingSurface = {
9
+ readonly damagedElements: ReadonlyMap<string, SurfaceElementDamage>;
10
+ readonly elementDamaged: {
11
+ subscribe(next: (report: SurfaceElementDamageReport) => void): {
12
+ unsubscribe(): void;
13
+ };
14
+ };
15
+ };
16
+ export declare function isDamageReportingSurface(model: unknown): model is DamageReportingSurface;
17
+ /**
18
+ * Reports `DocumentDamaged` — how many documents open carrying elements the
19
+ * editor cannot draw (#318, follow-up of #321).
20
+ *
21
+ * **Why a state read and not only a subscription.** The surface builds its
22
+ * element models when the block model is created, well before any view or
23
+ * `LifeCycleWatcher` is mounted, so every element the document OPENED with is
24
+ * already damaged by the time this watcher exists. It therefore reads
25
+ * `surface.damagedElements` once at mount for the opening batch, and only then
26
+ * subscribes for what a remote sync delivers afterwards.
27
+ *
28
+ * **One event per batch, elements deduplicated for the watcher's lifetime.**
29
+ * A sync can deliver several damaged elements in one go; sending one event per
30
+ * element would make "how many damaged documents" unreadable, and re-sending an
31
+ * id already counted would make it wrong. Later arrivals are therefore
32
+ * aggregated in a microtask and filtered against what was already reported.
33
+ *
34
+ * `page` is left unset here for the reason `BlockLifecycleTelemetryWatcher`
35
+ * leaves it unset: this is store plumbing, it has no editor mode to state, and
36
+ * a damaged document is damaged in either one.
37
+ *
38
+ * Inert when no `TelemetryService` is injected.
39
+ */
40
+ export declare class DocumentDamageTelemetryWatcher extends LifeCycleWatcher {
41
+ static readonly key = "document-damage-telemetry";
42
+ /** Ids already counted, so a document never counts an element twice. */
43
+ private readonly _counted;
44
+ private readonly _pending;
45
+ private _flushScheduled;
46
+ private _stopped;
47
+ private _subscriptions;
48
+ private _telemetry?;
49
+ mounted(): void;
50
+ unmounted(): void;
51
+ private _schedule;
52
+ private _flush;
53
+ }
@@ -0,0 +1,95 @@
1
+ import { LifeCycleWatcher } from '../../../std/index.js';
2
+ import { TelemetryProvider, } from './telemetry-service.js';
3
+ export function isDamageReportingSurface(model) {
4
+ const candidate = model;
5
+ return (!!candidate &&
6
+ candidate.damagedElements instanceof Map &&
7
+ typeof candidate.elementDamaged?.subscribe === 'function');
8
+ }
9
+ /**
10
+ * Reports `DocumentDamaged` — how many documents open carrying elements the
11
+ * editor cannot draw (#318, follow-up of #321).
12
+ *
13
+ * **Why a state read and not only a subscription.** The surface builds its
14
+ * element models when the block model is created, well before any view or
15
+ * `LifeCycleWatcher` is mounted, so every element the document OPENED with is
16
+ * already damaged by the time this watcher exists. It therefore reads
17
+ * `surface.damagedElements` once at mount for the opening batch, and only then
18
+ * subscribes for what a remote sync delivers afterwards.
19
+ *
20
+ * **One event per batch, elements deduplicated for the watcher's lifetime.**
21
+ * A sync can deliver several damaged elements in one go; sending one event per
22
+ * element would make "how many damaged documents" unreadable, and re-sending an
23
+ * id already counted would make it wrong. Later arrivals are therefore
24
+ * aggregated in a microtask and filtered against what was already reported.
25
+ *
26
+ * `page` is left unset here for the reason `BlockLifecycleTelemetryWatcher`
27
+ * leaves it unset: this is store plumbing, it has no editor mode to state, and
28
+ * a damaged document is damaged in either one.
29
+ *
30
+ * Inert when no `TelemetryService` is injected.
31
+ */
32
+ export class DocumentDamageTelemetryWatcher extends LifeCycleWatcher {
33
+ constructor() {
34
+ super(...arguments);
35
+ /** Ids already counted, so a document never counts an element twice. */
36
+ this._counted = new Set();
37
+ this._pending = new Set();
38
+ this._flushScheduled = false;
39
+ this._stopped = false;
40
+ this._subscriptions = [];
41
+ }
42
+ static { this.key = 'document-damage-telemetry'; }
43
+ mounted() {
44
+ const telemetry = this.std.getOptional(TelemetryProvider);
45
+ if (!telemetry)
46
+ return;
47
+ this._telemetry = telemetry;
48
+ // Structural, not `instanceof SurfaceBlockModel`: the watcher needs two
49
+ // members, not a class, and the guard is what states that.
50
+ const surfaces = this.std.store.getModelsByFlavour('affine:surface').filter(isDamageReportingSurface);
51
+ for (const surface of surfaces) {
52
+ for (const id of surface.damagedElements.keys())
53
+ this._pending.add(id);
54
+ this._subscriptions.push(surface.elementDamaged.subscribe(({ id }) => {
55
+ this._pending.add(id);
56
+ this._schedule();
57
+ }));
58
+ }
59
+ // The opening batch, synchronously: it is complete already, and nothing
60
+ // gained by making the host wait a tick for the number it opened with.
61
+ this._flush();
62
+ }
63
+ unmounted() {
64
+ this._stopped = true;
65
+ for (const subscription of this._subscriptions)
66
+ subscription.unsubscribe();
67
+ this._subscriptions = [];
68
+ this._pending.clear();
69
+ this._counted.clear();
70
+ this._telemetry = undefined;
71
+ super.unmounted();
72
+ }
73
+ _schedule() {
74
+ if (this._flushScheduled)
75
+ return;
76
+ this._flushScheduled = true;
77
+ queueMicrotask(() => {
78
+ this._flushScheduled = false;
79
+ if (!this._stopped)
80
+ this._flush();
81
+ });
82
+ }
83
+ _flush() {
84
+ const fresh = [...this._pending].filter(id => !this._counted.has(id));
85
+ this._pending.clear();
86
+ if (fresh.length === 0)
87
+ return;
88
+ for (const id of fresh)
89
+ this._counted.add(id);
90
+ this._telemetry?.track('DocumentDamaged', {
91
+ reason: 'missing-xywh',
92
+ elementCount: fresh.length,
93
+ });
94
+ }
95
+ }
@@ -1,6 +1,7 @@
1
1
  export * from './block-lifecycle-watcher.js';
2
2
  export * from './citation.js';
3
3
  export * from './database.js';
4
+ export * from './document-damage-watcher.js';
4
5
  export * from './lifecycle.js';
5
6
  export * from './link.js';
6
7
  export * from './noop.js';
@@ -1,6 +1,7 @@
1
1
  export * from './block-lifecycle-watcher.js';
2
2
  export * from './citation.js';
3
3
  export * from './database.js';
4
+ export * from './document-damage-watcher.js';
4
5
  export * from './lifecycle.js';
5
6
  export * from './link.js';
6
7
  export * from './noop.js';
@@ -34,7 +34,7 @@ export type BlockLifecycleEvents = {
34
34
  * manipulated ('background:classic', 'node:market', 'connector:link'…).
35
35
  */
36
36
  export interface FrameworkElementEvent extends TelemetryEvent {
37
- framework: 'wardley' | 'edgy' | 'cynefin' | 'bpmn' | 'c4' | 'event-storming' | 'core-domain' | 'context-map';
37
+ framework: 'wardley' | 'edgy' | 'cynefin' | 'bpmn' | 'c4' | 'event-storming' | 'core-domain' | 'context-map' | 'uml';
38
38
  element: string;
39
39
  }
40
40
  /**
@@ -295,3 +295,28 @@ export type AuditEvents = {
295
295
  MapAuditCompleted: MapAuditCompletedEvent;
296
296
  MapAuditInterrupted: MapAuditInterruptedEvent;
297
297
  };
298
+ /**
299
+ * A document was opened carrying elements the editor cannot draw — today, a
300
+ * surface element whose `xywh` never arrived (#318), which reads a zero-size
301
+ * bound and paints nothing.
302
+ *
303
+ * **Not a lifecycle event and not a user gesture: a health event.** The block
304
+ * taxonomy describes what someone did; this one describes what a document IS
305
+ * when it lands, which no existing event can say. It was already reported as a
306
+ * `console.warn` by the surface model — invisible to analytics, and therefore
307
+ * unable to answer the one question that matters after the app-side
308
+ * persistence fix: *how many documents open damaged*. The metric the dashboard
309
+ * reads is the count of DISTINCT documents, not of events.
310
+ *
311
+ * Counts only. Never an element id, never a type name, never board content.
312
+ */
313
+ export interface DocumentDamagedEvent extends TelemetryEvent {
314
+ page?: 'doc editor' | 'whiteboard editor';
315
+ /** What is wrong with the elements this event counts. */
316
+ reason: 'missing-xywh';
317
+ /** How many damaged elements this batch found. */
318
+ elementCount: number;
319
+ }
320
+ export type DocumentHealthEvents = {
321
+ DocumentDamaged: DocumentDamagedEvent;
322
+ };