@formicoidea/labre-core 0.40.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 (638) hide show
  1. package/LICENSE +384 -0
  2. package/dist/_pkgs/affine-block-attachment/attachment-block.js +7 -2
  3. package/dist/_pkgs/affine-block-attachment/components/rename-model.js +3 -2
  4. package/dist/_pkgs/affine-block-attachment/configs/slash-menu.js +7 -0
  5. package/dist/_pkgs/affine-block-attachment/configs/toolbar.js +11 -3
  6. package/dist/_pkgs/affine-block-attachment/configs/tooltips.js +4 -4
  7. package/dist/_pkgs/affine-block-attachment/translations.d.ts +49 -0
  8. package/dist/_pkgs/affine-block-attachment/translations.js +98 -0
  9. package/dist/_pkgs/affine-block-attachment/utils.js +9 -6
  10. package/dist/_pkgs/affine-block-bookmark/bookmark-block.js +2 -2
  11. package/dist/_pkgs/affine-block-bookmark/components/bookmark-card.js +13 -6
  12. package/dist/_pkgs/affine-block-bookmark/configs/slash-menu.js +6 -1
  13. package/dist/_pkgs/affine-block-bookmark/configs/toolbar.js +9 -1
  14. package/dist/_pkgs/affine-block-bookmark/configs/tooltips.js +2 -2
  15. package/dist/_pkgs/affine-block-bookmark/translations.d.ts +26 -0
  16. package/dist/_pkgs/affine-block-bookmark/translations.js +55 -0
  17. package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +4 -0
  18. package/dist/_pkgs/affine-block-callout/configs/tooltips.js +2 -2
  19. package/dist/_pkgs/affine-block-callout/translations.d.ts +16 -0
  20. package/dist/_pkgs/affine-block-callout/translations.js +24 -0
  21. package/dist/_pkgs/affine-block-code/code-block.js +6 -3
  22. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +4 -2
  23. package/dist/_pkgs/affine-block-code/code-toolbar/components/lang-button.js +3 -2
  24. package/dist/_pkgs/affine-block-code/code-toolbar/components/preview-button.js +4 -3
  25. package/dist/_pkgs/affine-block-code/code-toolbar/config.js +116 -72
  26. package/dist/_pkgs/affine-block-code/translations.d.ts +30 -0
  27. package/dist/_pkgs/affine-block-code/translations.js +84 -0
  28. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +9 -3
  29. package/dist/_pkgs/affine-block-embed/common/render-linked-doc.js +7 -6
  30. package/dist/_pkgs/affine-block-embed/configs/toolbar.js +11 -2
  31. package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-block.js +2 -1
  32. package/dist/_pkgs/affine-block-embed/embed-github-block/embed-github-block.js +2 -1
  33. package/dist/_pkgs/affine-block-embed/embed-html-block/components/fullscreen-toolbar.js +4 -3
  34. package/dist/_pkgs/affine-block-embed/embed-html-block/configs/toolbar.js +5 -1
  35. package/dist/_pkgs/affine-block-embed/embed-html-block/configs/tooltips.js +14 -14
  36. package/dist/_pkgs/affine-block-embed/embed-html-block/embed-html-block.js +7 -1
  37. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-error-card.js +11 -4
  38. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-idle-card.d.ts +2 -0
  39. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-idle-card.js +13 -3
  40. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-link-edit-popup.js +4 -2
  41. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-link-input-base.js +8 -5
  42. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-link-input-popup.js +21 -5
  43. package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-loading-card.js +4 -1
  44. package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/slash-menu/slash-menu.js +4 -0
  45. package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/toolbar.d.ts +2 -0
  46. package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/toolbar.js +6 -1
  47. package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.d.ts +2 -0
  48. package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.js +5 -0
  49. package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.d.ts +1 -0
  50. package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.js +33 -9
  51. package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.d.ts +8 -0
  52. package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.js +19 -0
  53. package/dist/_pkgs/affine-block-embed/embed-loom-block/embed-loom-block.js +2 -1
  54. package/dist/_pkgs/affine-block-embed/embed-youtube-block/embed-youtube-block.js +2 -1
  55. package/dist/_pkgs/affine-block-embed/translations.d.ts +46 -0
  56. package/dist/_pkgs/affine-block-embed/translations.js +114 -0
  57. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/slash-menu.js +7 -0
  58. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/toolbar.js +29 -12
  59. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/tooltips.js +4 -4
  60. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +10 -4
  61. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/components/embed-synced-doc-card.js +8 -4
  62. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/configs/toolbar.js +28 -13
  63. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-edgeless-synced-doc-block.js +3 -2
  64. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +3 -2
  65. package/dist/_pkgs/affine-block-embed-doc/translations.d.ts +40 -0
  66. package/dist/_pkgs/affine-block-embed-doc/translations.js +85 -0
  67. package/dist/_pkgs/affine-block-frame/edgeless-toolbar/frame-dense-menu.js +29 -22
  68. package/dist/_pkgs/affine-block-frame/edgeless-toolbar/frame-menu.js +5 -1
  69. package/dist/_pkgs/affine-block-frame/edgeless-toolbar/frame-tool-button.js +2 -1
  70. package/dist/_pkgs/affine-block-frame/edgeless-toolbar/presentation-toolbar.js +12 -9
  71. package/dist/_pkgs/affine-block-frame/frame-manager.js +8 -2
  72. package/dist/_pkgs/affine-block-frame/frame-tool.js +7 -2
  73. package/dist/_pkgs/affine-block-frame/frame-toolbar.js +18 -7
  74. package/dist/_pkgs/affine-block-frame/index.d.ts +1 -0
  75. package/dist/_pkgs/affine-block-frame/index.js +1 -0
  76. package/dist/_pkgs/affine-block-frame/present/frame-order-button.js +5 -1
  77. package/dist/_pkgs/affine-block-frame/present/navigator-setting-button.js +16 -6
  78. package/dist/_pkgs/affine-block-frame/present/present-button.js +3 -1
  79. package/dist/_pkgs/affine-block-frame/translations.d.ts +64 -0
  80. package/dist/_pkgs/affine-block-frame/translations.js +131 -0
  81. package/dist/_pkgs/affine-block-image/components/page-image-block.js +5 -2
  82. package/dist/_pkgs/affine-block-image/configs/slash-menu.js +4 -0
  83. package/dist/_pkgs/affine-block-image/configs/toolbar.js +7 -1
  84. package/dist/_pkgs/affine-block-image/configs/tooltips.js +1 -1
  85. package/dist/_pkgs/affine-block-image/image-block.js +3 -2
  86. package/dist/_pkgs/affine-block-image/image-edgeless-block.js +6 -3
  87. package/dist/_pkgs/affine-block-image/preview-image/page.js +5 -1
  88. package/dist/_pkgs/affine-block-image/translations.d.ts +35 -0
  89. package/dist/_pkgs/affine-block-image/translations.js +68 -0
  90. package/dist/_pkgs/affine-block-image/utils.js +9 -8
  91. package/dist/_pkgs/affine-block-latex/configs/slash-menu.d.ts +8 -0
  92. package/dist/_pkgs/affine-block-latex/configs/slash-menu.js +19 -3
  93. package/dist/_pkgs/affine-block-latex/latex-block.js +6 -2
  94. package/dist/_pkgs/affine-block-latex/translations.d.ts +35 -0
  95. package/dist/_pkgs/affine-block-latex/translations.js +60 -0
  96. package/dist/_pkgs/affine-block-list/list-keymap.js +7 -0
  97. package/dist/_pkgs/affine-block-note/components/edgeless-note-border-dropdown-menu.d.ts +9 -0
  98. package/dist/_pkgs/affine-block-note/components/edgeless-note-border-dropdown-menu.js +23 -6
  99. package/dist/_pkgs/affine-block-note/components/edgeless-note-display-mode-dropdown-menu.d.ts +4 -1
  100. package/dist/_pkgs/affine-block-note/components/edgeless-note-display-mode-dropdown-menu.js +26 -6
  101. package/dist/_pkgs/affine-block-note/components/edgeless-note-shadow-menu.d.ts +3 -0
  102. package/dist/_pkgs/affine-block-note/components/edgeless-note-shadow-menu.js +21 -10
  103. package/dist/_pkgs/affine-block-note/components/edgeless-note-style-panel.js +22 -8
  104. package/dist/_pkgs/affine-block-note/configs/slash-menu.js +13 -0
  105. package/dist/_pkgs/affine-block-note/configs/toolbar.js +26 -19
  106. package/dist/_pkgs/affine-block-note/configs/tooltips.js +57 -30
  107. package/dist/_pkgs/affine-block-note/move-block.js +8 -2
  108. package/dist/_pkgs/affine-block-note/note-keymap.js +7 -1
  109. package/dist/_pkgs/affine-block-note/translations.d.ts +91 -0
  110. package/dist/_pkgs/affine-block-note/translations.js +253 -0
  111. package/dist/_pkgs/affine-block-paragraph/paragraph-block.js +7 -2
  112. package/dist/_pkgs/affine-block-paragraph/paragraph-keymap.js +7 -1
  113. package/dist/_pkgs/affine-block-paragraph/translations.d.ts +31 -0
  114. package/dist/_pkgs/affine-block-paragraph/translations.js +44 -0
  115. package/dist/_pkgs/affine-block-paragraph/view.js +6 -1
  116. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +1 -8
  117. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +1 -8
  118. package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +3 -1
  119. package/dist/_pkgs/affine-block-root/configs/toolbar.js +6 -3
  120. package/dist/_pkgs/affine-block-root/edgeless/clipboard/utils.js +1 -1
  121. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/alignment.js +26 -4
  122. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/misc.d.ts +14 -0
  123. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/misc.js +10 -3
  124. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.d.ts +8 -0
  125. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +9 -0
  126. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.d.ts +9 -0
  127. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +66 -6
  128. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.d.ts +22 -0
  129. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +46 -0
  130. package/dist/_pkgs/affine-block-root/edgeless/utils/consts.d.ts +0 -1
  131. package/dist/_pkgs/affine-block-root/edgeless/utils/consts.js +0 -1
  132. package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.d.ts +21 -0
  133. package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.js +24 -0
  134. package/dist/_pkgs/affine-block-root/edgeless/utils/query.js +8 -0
  135. package/dist/_pkgs/affine-block-root/keyboard/keymap.js +1 -16
  136. package/dist/_pkgs/affine-block-root/translations.d.ts +61 -0
  137. package/dist/_pkgs/affine-block-root/translations.js +172 -0
  138. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
  139. package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
  140. package/dist/_pkgs/affine-block-surface/extensions/export-manager/export-manager.js +3 -1
  141. package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.d.ts +23 -0
  142. package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.js +89 -0
  143. package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.d.ts +7 -0
  144. package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.js +5 -0
  145. package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.d.ts +41 -0
  146. package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.js +70 -0
  147. package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.d.ts +49 -0
  148. package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.js +257 -0
  149. package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.d.ts +16 -0
  150. package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.js +24 -0
  151. package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.d.ts +24 -0
  152. package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.js +66 -0
  153. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +5 -0
  154. package/dist/_pkgs/affine-block-surface/extensions/index.js +5 -0
  155. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +66 -4
  156. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +272 -23
  157. package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +58 -8
  158. package/dist/_pkgs/affine-block-surface/extensions/interchange.js +27 -0
  159. package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.d.ts +81 -0
  160. package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.js +81 -0
  161. package/dist/_pkgs/affine-block-surface/extensions/legend.d.ts +136 -0
  162. package/dist/_pkgs/affine-block-surface/extensions/legend.js +439 -0
  163. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.d.ts +2 -2
  164. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.js +5 -2
  165. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +17 -3
  166. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +38 -15
  167. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +61 -1
  168. package/dist/_pkgs/affine-block-surface/extensions/reading.js +85 -39
  169. package/dist/_pkgs/affine-block-surface/extensions/record-action.d.ts +66 -0
  170. package/dist/_pkgs/affine-block-surface/extensions/record-action.js +145 -0
  171. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch-translations.d.ts +48 -0
  172. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch-translations.js +120 -0
  173. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.js +36 -23
  174. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +5 -5
  175. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +253 -28
  176. package/dist/_pkgs/affine-block-surface/extensions/validation.js +489 -41
  177. package/dist/_pkgs/affine-block-surface/framework-background/background-view.d.ts +115 -0
  178. package/dist/_pkgs/affine-block-surface/framework-background/background-view.js +185 -0
  179. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +1 -0
  180. package/dist/_pkgs/affine-block-surface/framework-background/index.js +1 -0
  181. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +16 -1
  182. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +31 -21
  183. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +29 -5
  184. package/dist/_pkgs/affine-block-surface/framework-background/stacking.d.ts +6 -4
  185. package/dist/_pkgs/affine-block-surface/framework-background/stacking.js +56 -8
  186. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +12 -0
  187. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +15 -0
  188. package/dist/_pkgs/affine-block-surface/view.js +8 -1
  189. package/dist/_pkgs/affine-block-surface-ref/components/placeholder.d.ts +2 -1
  190. package/dist/_pkgs/affine-block-surface-ref/components/placeholder.js +21 -6
  191. package/dist/_pkgs/affine-block-surface-ref/configs/slash-menu.js +24 -7
  192. package/dist/_pkgs/affine-block-surface-ref/configs/tooltips.js +2 -2
  193. package/dist/_pkgs/affine-block-surface-ref/index.d.ts +1 -0
  194. package/dist/_pkgs/affine-block-surface-ref/index.js +1 -0
  195. package/dist/_pkgs/affine-block-surface-ref/surface-ref-block-edgeless.js +1 -0
  196. package/dist/_pkgs/affine-block-surface-ref/surface-ref-block.js +1 -0
  197. package/dist/_pkgs/affine-block-surface-ref/translations.d.ts +83 -0
  198. package/dist/_pkgs/affine-block-surface-ref/translations.js +175 -0
  199. package/dist/_pkgs/affine-block-surface-ref/utils.d.ts +8 -1
  200. package/dist/_pkgs/affine-block-surface-ref/utils.js +12 -4
  201. package/dist/_pkgs/affine-components/caption/block-caption.js +3 -1
  202. package/dist/_pkgs/affine-components/card-style-dropdown-menu/dropdown-menu.js +4 -3
  203. package/dist/_pkgs/affine-components/citation/citation.d.ts +2 -0
  204. package/dist/_pkgs/affine-components/citation/citation.js +19 -3
  205. package/dist/_pkgs/affine-components/color-picker/button.d.ts +62 -1
  206. package/dist/_pkgs/affine-components/color-picker/button.js +182 -23
  207. package/dist/_pkgs/affine-components/color-picker/color-panel.d.ts +8 -0
  208. package/dist/_pkgs/affine-components/color-picker/color-panel.js +17 -2
  209. package/dist/_pkgs/affine-components/color-picker/color-picker.d.ts +4 -0
  210. package/dist/_pkgs/affine-components/color-picker/color-picker.js +27 -3
  211. package/dist/_pkgs/affine-components/color-picker/framework-palette.d.ts +106 -0
  212. package/dist/_pkgs/affine-components/color-picker/framework-palette.js +177 -0
  213. package/dist/_pkgs/affine-components/color-picker/index.d.ts +2 -0
  214. package/dist/_pkgs/affine-components/color-picker/index.js +2 -0
  215. package/dist/_pkgs/affine-components/color-picker/palette-carousel.d.ts +85 -0
  216. package/dist/_pkgs/affine-components/color-picker/palette-carousel.js +440 -0
  217. package/dist/_pkgs/affine-components/color-picker/types.d.ts +21 -0
  218. package/dist/_pkgs/affine-components/color-picker/utils.d.ts +28 -2
  219. package/dist/_pkgs/affine-components/color-picker/utils.js +32 -0
  220. package/dist/_pkgs/affine-components/context-menu/menu-renderer.d.ts +3 -0
  221. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +34 -7
  222. package/dist/_pkgs/affine-components/edgeless-line-styles-panel/line-styles-panel.d.ts +2 -0
  223. package/dist/_pkgs/affine-components/edgeless-line-styles-panel/line-styles-panel.js +21 -2
  224. package/dist/_pkgs/affine-components/edgeless-line-width-panel/line-width-panel.d.ts +2 -0
  225. package/dist/_pkgs/affine-components/edgeless-line-width-panel/line-width-panel.js +18 -2
  226. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.d.ts +33 -1
  227. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +211 -56
  228. package/dist/_pkgs/affine-components/embed-card-modal/embed-card-create-modal.js +5 -4
  229. package/dist/_pkgs/affine-components/embed-card-modal/embed-card-edit-modal.js +11 -9
  230. package/dist/_pkgs/affine-components/filterable-list/index.d.ts +2 -0
  231. package/dist/_pkgs/affine-components/filterable-list/index.js +17 -2
  232. package/dist/_pkgs/affine-components/highlight-dropdown-menu/dropdown-menu.d.ts +3 -0
  233. package/dist/_pkgs/affine-components/highlight-dropdown-menu/dropdown-menu.js +40 -7
  234. package/dist/_pkgs/affine-components/icon-button/index.d.ts +1 -1
  235. package/dist/_pkgs/affine-components/icon-button/index.js +1 -1
  236. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +6 -0
  237. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +42 -7
  238. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +4 -0
  239. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +35 -5
  240. package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +2 -0
  241. package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +22 -5
  242. package/dist/_pkgs/affine-components/linked-doc-title/doc-title.d.ts +2 -0
  243. package/dist/_pkgs/affine-components/linked-doc-title/doc-title.js +16 -3
  244. package/dist/_pkgs/affine-components/notification/linked-doc.js +5 -4
  245. package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.js +7 -4
  246. package/dist/_pkgs/affine-components/resource/resource.d.ts +16 -1
  247. package/dist/_pkgs/affine-components/resource/resource.js +48 -20
  248. package/dist/_pkgs/affine-components/resource/status.d.ts +2 -0
  249. package/dist/_pkgs/affine-components/resource/status.js +27 -12
  250. package/dist/_pkgs/affine-components/size-dropdown-menu/dropdown-menu.d.ts +4 -1
  251. package/dist/_pkgs/affine-components/size-dropdown-menu/dropdown-menu.js +23 -4
  252. package/dist/_pkgs/affine-components/toast/toast.d.ts +1 -1
  253. package/dist/_pkgs/affine-components/toast/toast.js +1 -1
  254. package/dist/_pkgs/affine-components/toggle-button/toggle-button.d.ts +3 -0
  255. package/dist/_pkgs/affine-components/toggle-button/toggle-button.js +18 -3
  256. package/dist/_pkgs/affine-components/toolbar/icon-button.d.ts +2 -0
  257. package/dist/_pkgs/affine-components/toolbar/icon-button.js +18 -2
  258. package/dist/_pkgs/affine-components/toolbar/tooltip.d.ts +3 -3
  259. package/dist/_pkgs/affine-components/toolbar/tooltip.js +3 -3
  260. package/dist/_pkgs/affine-components/translations.d.ts +149 -0
  261. package/dist/_pkgs/affine-components/translations.js +495 -0
  262. package/dist/_pkgs/affine-foundation/view.js +2 -1
  263. package/dist/_pkgs/affine-fragment-adapter-panel/adapter-panel.d.ts +3 -0
  264. package/dist/_pkgs/affine-fragment-adapter-panel/adapter-panel.js +12 -1
  265. package/dist/_pkgs/affine-fragment-adapter-panel/body/adapter-panel-body.js +4 -3
  266. package/dist/_pkgs/affine-fragment-adapter-panel/config.d.ts +13 -0
  267. package/dist/_pkgs/affine-fragment-adapter-panel/config.js +18 -4
  268. package/dist/_pkgs/affine-fragment-adapter-panel/header/adapter-menu.js +2 -2
  269. package/dist/_pkgs/affine-fragment-adapter-panel/header/adapter-panel-header.js +2 -2
  270. package/dist/_pkgs/affine-fragment-adapter-panel/translations.d.ts +24 -0
  271. package/dist/_pkgs/affine-fragment-adapter-panel/translations.js +37 -0
  272. package/dist/_pkgs/affine-fragment-doc-title/doc-title.d.ts +1 -0
  273. package/dist/_pkgs/affine-fragment-doc-title/doc-title.js +9 -1
  274. package/dist/_pkgs/affine-fragment-doc-title/translations.d.ts +13 -0
  275. package/dist/_pkgs/affine-fragment-doc-title/translations.js +17 -0
  276. package/dist/_pkgs/affine-fragment-frame-panel/body/frame-panel-body.js +3 -2
  277. package/dist/_pkgs/affine-fragment-frame-panel/header/frame-panel-header.js +10 -4
  278. package/dist/_pkgs/affine-fragment-frame-panel/header/frames-setting-menu.js +18 -6
  279. package/dist/_pkgs/affine-fragment-frame-panel/translations.d.ts +16 -0
  280. package/dist/_pkgs/affine-fragment-frame-panel/translations.js +44 -0
  281. package/dist/_pkgs/affine-fragment-outline/body/outline-notice.js +10 -4
  282. package/dist/_pkgs/affine-fragment-outline/body/outline-panel-body.js +6 -3
  283. package/dist/_pkgs/affine-fragment-outline/card/outline-card.js +13 -6
  284. package/dist/_pkgs/affine-fragment-outline/card/outline-preview.d.ts +1 -0
  285. package/dist/_pkgs/affine-fragment-outline/card/outline-preview.js +16 -9
  286. package/dist/_pkgs/affine-fragment-outline/config.d.ts +1 -20
  287. package/dist/_pkgs/affine-fragment-outline/config.js +8 -23
  288. package/dist/_pkgs/affine-fragment-outline/header/outline-panel-header.js +10 -3
  289. package/dist/_pkgs/affine-fragment-outline/header/outline-setting-menu.js +9 -2
  290. package/dist/_pkgs/affine-fragment-outline/outline-viewer.js +6 -3
  291. package/dist/_pkgs/affine-fragment-outline/translations.d.ts +54 -0
  292. package/dist/_pkgs/affine-fragment-outline/translations.js +110 -0
  293. package/dist/_pkgs/affine-gfx-brush/element-renderer.js +2 -2
  294. package/dist/_pkgs/affine-gfx-brush/toolbar/components/eraser/eraser-tool-button.js +3 -2
  295. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/consts.d.ts +3 -0
  296. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/consts.js +3 -0
  297. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/pen-menu.js +5 -4
  298. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/pen-tool-button.js +3 -2
  299. package/dist/_pkgs/affine-gfx-brush/toolbar/configs/brush.js +10 -3
  300. package/dist/_pkgs/affine-gfx-brush/toolbar/configs/highlighter.js +10 -3
  301. package/dist/_pkgs/affine-gfx-brush/translations.d.ts +17 -0
  302. package/dist/_pkgs/affine-gfx-brush/translations.js +30 -0
  303. package/dist/_pkgs/affine-gfx-connector/connector-manager.d.ts +9 -1
  304. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +61 -0
  305. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +8 -1
  306. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +7 -1
  307. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.d.ts +7 -1
  308. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +87 -17
  309. package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +78 -17
  310. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.d.ts +24 -2
  311. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +31 -8
  312. package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.d.ts +124 -3
  313. package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.js +219 -56
  314. package/dist/_pkgs/affine-gfx-connector/text/text.d.ts +13 -4
  315. package/dist/_pkgs/affine-gfx-connector/text/text.js +13 -44
  316. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +60 -1
  317. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +95 -13
  318. package/dist/_pkgs/affine-gfx-connector/toolbar/connector-dense-menu.js +7 -5
  319. package/dist/_pkgs/affine-gfx-connector/toolbar/connector-menu.js +8 -6
  320. package/dist/_pkgs/affine-gfx-connector/toolbar/connector-tool-button.js +4 -3
  321. package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.d.ts +8 -0
  322. package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.js +118 -0
  323. package/dist/_pkgs/affine-gfx-connector/translations.d.ts +32 -0
  324. package/dist/_pkgs/affine-gfx-connector/translations.js +79 -0
  325. package/dist/_pkgs/affine-gfx-connector/view/view.d.ts +37 -1
  326. package/dist/_pkgs/affine-gfx-connector/view/view.js +97 -8
  327. package/dist/_pkgs/affine-gfx-group/command/group-api.js +6 -1
  328. package/dist/_pkgs/affine-gfx-group/index.d.ts +1 -0
  329. package/dist/_pkgs/affine-gfx-group/index.js +1 -0
  330. package/dist/_pkgs/affine-gfx-group/store.js +0 -2
  331. package/dist/_pkgs/affine-gfx-group/toolbar/config.d.ts +6 -2
  332. package/dist/_pkgs/affine-gfx-group/toolbar/config.js +9 -4
  333. package/dist/_pkgs/affine-gfx-group/translations.d.ts +23 -0
  334. package/dist/_pkgs/affine-gfx-group/translations.js +29 -0
  335. package/dist/_pkgs/affine-gfx-link/toolbar/undo-dense-menu.js +2 -1
  336. package/dist/_pkgs/affine-gfx-link/toolbar/undo-tool-button.js +2 -1
  337. package/dist/_pkgs/affine-gfx-mindmap/index.d.ts +1 -0
  338. package/dist/_pkgs/affine-gfx-mindmap/index.js +1 -0
  339. package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +628 -577
  340. package/dist/_pkgs/affine-gfx-mindmap/toolbar/basket-elements.js +7 -3
  341. package/dist/_pkgs/affine-gfx-mindmap/toolbar/config.js +9 -1
  342. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-importing-placeholder.d.ts +4 -0
  343. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-importing-placeholder.js +70 -7
  344. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-menu.js +8 -5
  345. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-tool-button.js +4 -2
  346. package/dist/_pkgs/affine-gfx-mindmap/toolbar/senior-tool.js +7 -2
  347. package/dist/_pkgs/affine-gfx-mindmap/toolbar/utils/import-mindmap.d.ts +2 -1
  348. package/dist/_pkgs/affine-gfx-mindmap/toolbar/utils/import-mindmap.js +16 -8
  349. package/dist/_pkgs/affine-gfx-mindmap/translations.d.ts +84 -0
  350. package/dist/_pkgs/affine-gfx-mindmap/translations.js +171 -0
  351. package/dist/_pkgs/affine-gfx-note/components/note-display-mode-panel.d.ts +8 -0
  352. package/dist/_pkgs/affine-gfx-note/components/note-display-mode-panel.js +24 -9
  353. package/dist/_pkgs/affine-gfx-note/components/note-shadow-panel.d.ts +9 -0
  354. package/dist/_pkgs/affine-gfx-note/components/note-shadow-panel.js +28 -8
  355. package/dist/_pkgs/affine-gfx-note/toolbar/note-menu-config.d.ts +2 -1
  356. package/dist/_pkgs/affine-gfx-note/toolbar/note-menu-config.js +42 -73
  357. package/dist/_pkgs/affine-gfx-note/toolbar/note-menu.js +21 -17
  358. package/dist/_pkgs/affine-gfx-note/toolbar/note-senior-button.js +3 -2
  359. package/dist/_pkgs/affine-gfx-note/toolbar/note-tool-button.js +3 -1
  360. package/dist/_pkgs/affine-gfx-note/toolbar/senior-tool.js +3 -1
  361. package/dist/_pkgs/affine-gfx-note/translations.d.ts +27 -0
  362. package/dist/_pkgs/affine-gfx-note/translations.js +59 -0
  363. package/dist/_pkgs/affine-gfx-pointer/quick-tool/default-tool-button.js +10 -2
  364. package/dist/_pkgs/affine-gfx-pointer/translations.d.ts +9 -0
  365. package/dist/_pkgs/affine-gfx-pointer/translations.js +17 -0
  366. package/dist/_pkgs/affine-gfx-shape/components/shape-panel.d.ts +4 -0
  367. package/dist/_pkgs/affine-gfx-shape/components/shape-panel.js +17 -3
  368. package/dist/_pkgs/affine-gfx-shape/components/shape-style-panel.d.ts +4 -0
  369. package/dist/_pkgs/affine-gfx-shape/components/shape-style-panel.js +23 -5
  370. package/dist/_pkgs/affine-gfx-shape/draggable/shape-menu.d.ts +0 -1
  371. package/dist/_pkgs/affine-gfx-shape/draggable/shape-menu.js +6 -46
  372. package/dist/_pkgs/affine-gfx-shape/draggable/shape-tool-button.js +3 -1
  373. package/dist/_pkgs/affine-gfx-shape/element-renderer/highlighter.js +2 -2
  374. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.d.ts +6 -0
  375. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +30 -1
  376. package/dist/_pkgs/affine-gfx-shape/polygon-tool.d.ts +20 -1
  377. package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +9 -1
  378. package/dist/_pkgs/affine-gfx-shape/toolbar/config.d.ts +2 -0
  379. package/dist/_pkgs/affine-gfx-shape/toolbar/config.js +35 -9
  380. package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.js +11 -1
  381. package/dist/_pkgs/affine-gfx-shape/toolbar/senior-tool.js +2 -0
  382. package/dist/_pkgs/affine-gfx-shape/toolbar/shape-menu-config.d.ts +3 -0
  383. package/dist/_pkgs/affine-gfx-shape/toolbar/shape-menu-config.js +7 -0
  384. package/dist/_pkgs/affine-gfx-shape/translations.d.ts +37 -0
  385. package/dist/_pkgs/affine-gfx-shape/translations.js +93 -0
  386. package/dist/_pkgs/affine-gfx-template/builtin/other.js +70 -42
  387. package/dist/_pkgs/affine-gfx-template/contribute.js +8 -1
  388. package/dist/_pkgs/affine-gfx-template/index.d.ts +2 -0
  389. package/dist/_pkgs/affine-gfx-template/index.js +2 -0
  390. package/dist/_pkgs/affine-gfx-template/snapshot-from-action.d.ts +6 -1
  391. package/dist/_pkgs/affine-gfx-template/snapshot-from-action.js +43 -120
  392. package/dist/_pkgs/affine-gfx-template/toolbar/builtin-templates.d.ts +1 -0
  393. package/dist/_pkgs/affine-gfx-template/toolbar/builtin-templates.js +12 -0
  394. package/dist/_pkgs/affine-gfx-template/toolbar/resolve-name.d.ts +25 -0
  395. package/dist/_pkgs/affine-gfx-template/toolbar/resolve-name.js +36 -0
  396. package/dist/_pkgs/affine-gfx-template/toolbar/senior-tool.js +3 -1
  397. package/dist/_pkgs/affine-gfx-template/toolbar/template-panel.d.ts +1 -0
  398. package/dist/_pkgs/affine-gfx-template/toolbar/template-panel.js +30 -8
  399. package/dist/_pkgs/affine-gfx-template/toolbar/template-type.d.ts +41 -0
  400. package/dist/_pkgs/affine-gfx-template/translations.d.ts +71 -0
  401. package/dist/_pkgs/affine-gfx-template/translations.js +209 -0
  402. package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.d.ts +13 -1
  403. package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.js +19 -4
  404. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.d.ts +41 -0
  405. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +60 -4
  406. package/dist/_pkgs/affine-gfx-text/toolbar/actions.d.ts +9 -2
  407. package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +33 -10
  408. package/dist/_pkgs/affine-gfx-text/toolbar/text-menu.js +1 -0
  409. package/dist/_pkgs/affine-gfx-text/translations.d.ts +32 -0
  410. package/dist/_pkgs/affine-gfx-text/translations.js +65 -0
  411. package/dist/_pkgs/affine-inline-footnote/footnote-node/footnote-popup.js +8 -2
  412. package/dist/_pkgs/affine-inline-latex/latex-node/latex-editor-menu.js +5 -2
  413. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +7 -2
  414. package/dist/_pkgs/affine-inline-latex/translations.d.ts +13 -0
  415. package/dist/_pkgs/affine-inline-latex/translations.js +16 -0
  416. package/dist/_pkgs/affine-inline-link/link-node/configs/toolbar.d.ts +3 -3
  417. package/dist/_pkgs/affine-inline-link/link-node/configs/toolbar.js +6 -5
  418. package/dist/_pkgs/affine-inline-link/link-node/link-popup/link-popup.js +11 -5
  419. package/dist/_pkgs/affine-inline-link/translations.d.ts +23 -0
  420. package/dist/_pkgs/affine-inline-link/translations.js +44 -0
  421. package/dist/_pkgs/affine-inline-mention/affine-mention.js +11 -5
  422. package/dist/_pkgs/affine-inline-mention/translations.d.ts +16 -0
  423. package/dist/_pkgs/affine-inline-mention/translations.js +29 -0
  424. package/dist/_pkgs/affine-inline-preset/command/config.d.ts +3 -0
  425. package/dist/_pkgs/affine-inline-preset/command/config.js +8 -0
  426. package/dist/_pkgs/affine-inline-preset/markdown.js +5 -1
  427. package/dist/_pkgs/affine-inline-preset/translations.d.ts +25 -0
  428. package/dist/_pkgs/affine-inline-preset/translations.js +28 -0
  429. package/dist/_pkgs/affine-inline-reference/reference-node/configs/toolbar.js +2 -2
  430. package/dist/_pkgs/affine-inline-reference/reference-node/reference-node.js +3 -3
  431. package/dist/_pkgs/affine-inline-reference/reference-node/reference-popup/reference-popup.js +8 -6
  432. package/dist/_pkgs/affine-inline-reference/translations.d.ts +8 -0
  433. package/dist/_pkgs/affine-inline-reference/translations.js +13 -0
  434. package/dist/_pkgs/affine-model/consts/connector.d.ts +28 -2
  435. package/dist/_pkgs/affine-model/consts/connector.js +26 -0
  436. package/dist/_pkgs/affine-model/elements/bpmn/pool.js +1 -1
  437. package/dist/_pkgs/affine-model/elements/brush/brush.js +1 -1
  438. package/dist/_pkgs/affine-model/elements/c4/board.js +1 -1
  439. package/dist/_pkgs/affine-model/elements/c4/boundary.js +1 -1
  440. package/dist/_pkgs/affine-model/elements/connector/connector.d.ts +135 -0
  441. package/dist/_pkgs/affine-model/elements/connector/connector.js +246 -5
  442. package/dist/_pkgs/affine-model/elements/connector/end-label.d.ts +83 -0
  443. package/dist/_pkgs/affine-model/elements/connector/end-label.js +119 -0
  444. package/dist/_pkgs/affine-model/elements/connector/index.d.ts +1 -0
  445. package/dist/_pkgs/affine-model/elements/connector/index.js +1 -0
  446. package/dist/_pkgs/affine-model/elements/context-map/context-map.js +1 -1
  447. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +28 -0
  448. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +129 -2
  449. package/dist/_pkgs/affine-model/elements/cynefin/cynefin.d.ts +8 -0
  450. package/dist/_pkgs/affine-model/elements/cynefin/cynefin.js +45 -2
  451. package/dist/_pkgs/affine-model/elements/edgy/board.js +1 -1
  452. package/dist/_pkgs/affine-model/elements/edgy/facets.js +1 -1
  453. package/dist/_pkgs/affine-model/elements/estuarine/estuarine.d.ts +6 -0
  454. package/dist/_pkgs/affine-model/elements/estuarine/estuarine.js +36 -2
  455. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +18 -7
  456. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +23 -8
  457. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +16 -0
  458. package/dist/_pkgs/affine-model/elements/framework-background/background.js +18 -0
  459. package/dist/_pkgs/affine-model/elements/highlighter/highlighter.js +1 -1
  460. package/dist/_pkgs/affine-model/elements/index.d.ts +8 -0
  461. package/dist/_pkgs/affine-model/elements/index.js +1 -0
  462. package/dist/_pkgs/affine-model/elements/shape/shape.js +1 -1
  463. package/dist/_pkgs/affine-model/elements/text/text.js +1 -1
  464. package/dist/_pkgs/affine-model/elements/uml/band.d.ts +39 -0
  465. package/dist/_pkgs/affine-model/elements/uml/band.js +31 -0
  466. package/dist/_pkgs/affine-model/elements/uml/diagram.d.ts +158 -0
  467. package/dist/_pkgs/affine-model/elements/uml/diagram.js +229 -0
  468. package/dist/_pkgs/affine-model/elements/uml/fragment.d.ts +161 -0
  469. package/dist/_pkgs/affine-model/elements/uml/fragment.js +205 -0
  470. package/dist/_pkgs/affine-model/elements/uml/index.d.ts +8 -0
  471. package/dist/_pkgs/affine-model/elements/uml/index.js +8 -0
  472. package/dist/_pkgs/affine-model/elements/uml/lifeline.d.ts +77 -0
  473. package/dist/_pkgs/affine-model/elements/uml/lifeline.js +89 -0
  474. package/dist/_pkgs/affine-model/elements/uml/node.d.ts +142 -0
  475. package/dist/_pkgs/affine-model/elements/uml/node.js +190 -0
  476. package/dist/_pkgs/affine-model/elements/uml/partition.d.ts +106 -0
  477. package/dist/_pkgs/affine-model/elements/uml/partition.js +172 -0
  478. package/dist/_pkgs/affine-model/elements/uml/region.d.ts +75 -0
  479. package/dist/_pkgs/affine-model/elements/uml/region.js +150 -0
  480. package/dist/_pkgs/affine-model/elements/uml/subject.d.ts +37 -0
  481. package/dist/_pkgs/affine-model/elements/uml/subject.js +108 -0
  482. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +1 -1
  483. package/dist/_pkgs/affine-rich-text/conversion.d.ts +13 -0
  484. package/dist/_pkgs/affine-rich-text/conversion.js +27 -0
  485. package/dist/_pkgs/affine-shared/adapters/clipboard/clipboard.js +1 -1
  486. package/dist/_pkgs/affine-shared/adapters/clipboard/utils.d.ts +2 -1
  487. package/dist/_pkgs/affine-shared/adapters/clipboard/utils.js +6 -3
  488. package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -2
  489. package/dist/_pkgs/affine-shared/adapters/mix-text.js +5 -2
  490. package/dist/_pkgs/affine-shared/adapters/plain-text/plain-text.js +5 -2
  491. package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
  492. package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
  493. package/dist/_pkgs/affine-shared/adapters/utils/wording.d.ts +9 -0
  494. package/dist/_pkgs/affine-shared/adapters/utils/wording.js +12 -0
  495. package/dist/_pkgs/affine-shared/services/comment-service/utils.js +2 -0
  496. package/dist/_pkgs/affine-shared/services/doc-display-meta-service.js +6 -3
  497. package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.d.ts +1 -0
  498. package/dist/_pkgs/affine-shared/services/font-loader/config.d.ts +7 -0
  499. package/dist/_pkgs/affine-shared/services/font-loader/config.js +43 -0
  500. package/dist/_pkgs/affine-shared/services/notification-service.js +18 -1
  501. package/dist/_pkgs/affine-shared/services/open-doc-config.d.ts +0 -1
  502. package/dist/_pkgs/affine-shared/services/open-doc-config.js +0 -2
  503. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +1 -9
  504. package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.d.ts +53 -0
  505. package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.js +95 -0
  506. package/dist/_pkgs/affine-shared/services/telemetry-service/index.d.ts +1 -0
  507. package/dist/_pkgs/affine-shared/services/telemetry-service/index.js +1 -0
  508. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +26 -1
  509. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  510. package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.d.ts +34 -0
  511. package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.js +63 -0
  512. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  513. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  514. package/dist/_pkgs/affine-shared/services/translation-service/chrome.d.ts +432 -0
  515. package/dist/_pkgs/affine-shared/services/translation-service/chrome.js +1045 -3
  516. package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +40 -2
  517. package/dist/_pkgs/affine-shared/services/translation-service/index.js +44 -3
  518. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +83 -2
  519. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +92 -0
  520. package/dist/_pkgs/affine-shared/styles/index.d.ts +1 -0
  521. package/dist/_pkgs/affine-shared/styles/index.js +1 -0
  522. package/dist/_pkgs/affine-shared/styles/motion.d.ts +14 -0
  523. package/dist/_pkgs/affine-shared/styles/motion.js +38 -0
  524. package/dist/_pkgs/affine-shared/utils/event.d.ts +10 -0
  525. package/dist/_pkgs/affine-shared/utils/event.js +20 -0
  526. package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +16 -0
  527. package/dist/_pkgs/affine-shared/utils/file/filesys.js +25 -0
  528. package/dist/_pkgs/affine-shared/utils/index.d.ts +1 -0
  529. package/dist/_pkgs/affine-shared/utils/index.js +1 -0
  530. package/dist/_pkgs/affine-shared/utils/link-preview-refresh.d.ts +12 -0
  531. package/dist/_pkgs/affine-shared/utils/link-preview-refresh.js +13 -0
  532. package/dist/_pkgs/affine-widget-drag-handle/components/edgeless-preview/preview.d.ts +4 -0
  533. package/dist/_pkgs/affine-widget-drag-handle/components/edgeless-preview/preview.js +21 -8
  534. package/dist/_pkgs/affine-widget-drag-handle/helpers/preview-helper.js +1 -0
  535. package/dist/_pkgs/affine-widget-drag-handle/translations.d.ts +14 -0
  536. package/dist/_pkgs/affine-widget-drag-handle/translations.js +35 -0
  537. package/dist/_pkgs/affine-widget-edgeless-auto-connect/index.js +4 -3
  538. package/dist/_pkgs/affine-widget-edgeless-auto-connect/translations.d.ts +6 -0
  539. package/dist/_pkgs/affine-widget-edgeless-auto-connect/translations.js +14 -0
  540. package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +8 -5
  541. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +3 -2
  542. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +3 -1
  543. package/dist/_pkgs/affine-widget-edgeless-selected-rect/translations.d.ts +17 -0
  544. package/dist/_pkgs/affine-widget-edgeless-selected-rect/translations.js +30 -0
  545. package/dist/_pkgs/affine-widget-edgeless-toolbar/button/tool-icon-button.d.ts +4 -0
  546. package/dist/_pkgs/affine-widget-edgeless-toolbar/button/tool-icon-button.js +18 -2
  547. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +12 -4
  548. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +29 -6
  549. package/dist/_pkgs/affine-widget-edgeless-toolbar/config/consts.d.ts +2 -0
  550. package/dist/_pkgs/affine-widget-edgeless-toolbar/config/consts.js +3 -0
  551. package/dist/_pkgs/affine-widget-edgeless-toolbar/config/types.d.ts +18 -1
  552. package/dist/_pkgs/affine-widget-edgeless-toolbar/config/utils.d.ts +8 -3
  553. package/dist/_pkgs/affine-widget-edgeless-toolbar/config/utils.js +38 -18
  554. package/dist/_pkgs/affine-widget-edgeless-toolbar/create-popper.js +13 -0
  555. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.js +2 -1
  556. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +2 -0
  557. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +2 -0
  558. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +80 -0
  559. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +270 -81
  560. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.d.ts +15 -0
  561. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.js +15 -0
  562. package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-weight-and-style-panel.d.ts +8 -0
  563. package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-weight-and-style-panel.js +38 -8
  564. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.d.ts +42 -0
  565. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.js +100 -0
  566. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.d.ts +100 -0
  567. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.js +274 -0
  568. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.d.ts +3 -0
  569. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.js +3 -0
  570. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.d.ts +25 -0
  571. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.js +67 -0
  572. package/dist/_pkgs/affine-widget-edgeless-toolbar/translations.d.ts +15 -0
  573. package/dist/_pkgs/affine-widget-edgeless-toolbar/translations.js +20 -0
  574. package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +5 -0
  575. package/dist/_pkgs/affine-widget-edgeless-zoom-toolbar/translations.d.ts +7 -0
  576. package/dist/_pkgs/affine-widget-edgeless-zoom-toolbar/translations.js +23 -0
  577. package/dist/_pkgs/affine-widget-edgeless-zoom-toolbar/zoom-bar-toggle-button.js +3 -1
  578. package/dist/_pkgs/affine-widget-edgeless-zoom-toolbar/zoom-toolbar.js +5 -3
  579. package/dist/_pkgs/affine-widget-linked-doc/config.js +15 -10
  580. package/dist/_pkgs/affine-widget-linked-doc/import-doc/import-doc.d.ts +12 -1
  581. package/dist/_pkgs/affine-widget-linked-doc/import-doc/import-doc.js +27 -18
  582. package/dist/_pkgs/affine-widget-linked-doc/import-doc/index.d.ts +4 -1
  583. package/dist/_pkgs/affine-widget-linked-doc/import-doc/index.js +2 -2
  584. package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +4 -1
  585. package/dist/_pkgs/affine-widget-linked-doc/mobile-linked-doc-menu.js +6 -2
  586. package/dist/_pkgs/affine-widget-linked-doc/transformers/html.js +3 -2
  587. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +3 -2
  588. package/dist/_pkgs/affine-widget-linked-doc/translations.d.ts +53 -0
  589. package/dist/_pkgs/affine-widget-linked-doc/translations.js +104 -0
  590. package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +4 -1
  591. package/dist/_pkgs/affine-widget-remote-selection/translations.d.ts +12 -0
  592. package/dist/_pkgs/affine-widget-remote-selection/translations.js +12 -0
  593. package/dist/_pkgs/affine-widget-slash-menu/config.js +15 -0
  594. package/dist/_pkgs/affine-widget-slash-menu/index.d.ts +1 -0
  595. package/dist/_pkgs/affine-widget-slash-menu/index.js +1 -0
  596. package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +30 -15
  597. package/dist/_pkgs/affine-widget-slash-menu/tooltips/copy.js +1 -1
  598. package/dist/_pkgs/affine-widget-slash-menu/tooltips/delete.js +2 -2
  599. package/dist/_pkgs/affine-widget-slash-menu/tooltips/index.js +9 -0
  600. package/dist/_pkgs/affine-widget-slash-menu/tooltips/move-down.js +2 -2
  601. package/dist/_pkgs/affine-widget-slash-menu/tooltips/move-up.js +2 -2
  602. package/dist/_pkgs/affine-widget-slash-menu/tooltips/now.js +3 -3
  603. package/dist/_pkgs/affine-widget-slash-menu/tooltips/today.js +2 -2
  604. package/dist/_pkgs/affine-widget-slash-menu/tooltips/tomorrow.js +3 -3
  605. package/dist/_pkgs/affine-widget-slash-menu/tooltips/yesterday.js +3 -3
  606. package/dist/_pkgs/affine-widget-slash-menu/translations.d.ts +91 -0
  607. package/dist/_pkgs/affine-widget-slash-menu/translations.js +175 -0
  608. package/dist/_pkgs/affine-widget-slash-menu/types.d.ts +18 -0
  609. package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +20 -1
  610. package/dist/_pkgs/affine-widget-slash-menu/utils.js +37 -0
  611. package/dist/_pkgs/affine-widget-toolbar/translations.d.ts +9 -0
  612. package/dist/_pkgs/affine-widget-toolbar/translations.js +13 -0
  613. package/dist/_pkgs/affine-widget-toolbar/utils.js +2 -1
  614. package/dist/_pkgs/global/gfx/xywh.js +7 -0
  615. package/dist/_pkgs/std/extension/command-registry.d.ts +158 -1
  616. package/dist/_pkgs/std/extension/command-registry.js +22 -0
  617. package/dist/_pkgs/std/extension/translation-manifest.d.ts +7 -0
  618. package/dist/_pkgs/std/gfx/index.d.ts +1 -1
  619. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +12 -0
  620. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +20 -1
  621. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +10 -0
  622. package/dist/_pkgs/std/gfx/interactivity/manager.js +12 -0
  623. package/dist/_pkgs/std/gfx/model/surface/element-model.js +12 -7
  624. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +56 -0
  625. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +84 -3
  626. package/dist/_pkgs/std/gfx/view/view.d.ts +11 -2
  627. package/dist/_pkgs/std/gfx/view/view.js +16 -2
  628. package/dist/_pkgs/std/translations.d.ts +24 -0
  629. package/dist/_pkgs/std/translations.js +28 -0
  630. package/dist/_pkgs/std/view/element/block-component.js +24 -7
  631. package/dist/commands.d.ts +6 -0
  632. package/dist/commands.js +8 -1
  633. package/dist/frameworks.d.ts +9 -0
  634. package/dist/frameworks.js +19 -0
  635. package/dist/translations.js +160 -5
  636. package/package.json +9 -4
  637. package/dist/_pkgs/affine-gfx-group/group-watcher.d.ts +0 -1
  638. package/dist/_pkgs/affine-gfx-group/group-watcher.js +0 -20
@@ -328,15 +328,15 @@ function backgroundsOf(rule, elements) {
328
328
  * measures against have nothing to invalidate — and a framework whose only rules
329
329
  * are on-demand has no incremental pass to protect in the first place.
330
330
  *
331
- * The DECLARED moment, deliberately, and not the one the levels in force decide
332
- * ({@link momentOf}): this is a set of ids and not a verdict, so an audit rule
333
- * whose frames it guards costs one extra id and can never make an answer wrong,
334
- * where reading the levels here would mean re-reading the surface for it.
331
+ * The moment is read STATICALLY ({@link couldBeRealtime}) and not per instance:
332
+ * this is a set of ids and not a verdict, so a rule some level could promote
333
+ * costs one extra id and can never make an answer wrong, where reading the
334
+ * chosen levels here would mean re-reading the surface for it.
335
335
  */
336
- export function backgroundElementIds(rules, elements) {
336
+ export function backgroundElementIds(rules, elements, profiles = []) {
337
337
  const ids = new Set();
338
338
  for (const rule of rules) {
339
- if (!isRealtime(rule))
339
+ if (!couldBeRealtime(rule, profiles))
340
340
  continue;
341
341
  for (const background of backgroundsOf(rule, elements))
342
342
  ids.add(background.id);
@@ -2460,6 +2460,146 @@ function evaluateElementInZone(rule, elements, incremental) {
2460
2460
  }
2461
2461
  return violations;
2462
2462
  }
2463
+ /**
2464
+ * How far `p` is from the OUTLINE of `bound` — the rectangle's perimeter, and
2465
+ * not its area.
2466
+ *
2467
+ * Zero on the line, and positive on both sides of it: the distance to the
2468
+ * nearest edge for a point inside, the ordinary distance to the rectangle for a
2469
+ * point outside. That two-sided reading is the whole point of the function —
2470
+ * "on the border" is a claim about a LINE, and a family measuring containment
2471
+ * could not tell a glyph sitting on the edge from one buried in the middle.
2472
+ *
2473
+ * Euclidean rather than squared, unlike {@link gapSquared}: the result is
2474
+ * compared against a tolerance a framework declares in model units, so the root
2475
+ * has to be taken somewhere and taking it here keeps the declaration readable.
2476
+ * One `Math.hypot` per (carrier, carried) couple that actually overlaps, which
2477
+ * is a handful per board.
2478
+ */
2479
+ function outlineDistance(p, bound) {
2480
+ // Negative inside, positive outside, on each axis independently.
2481
+ const dx = Math.max(bound.x - p[0], p[0] - bound.maxX);
2482
+ const dy = Math.max(bound.y - p[1], p[1] - bound.maxY);
2483
+ if (dx > 0 || dy > 0) {
2484
+ return Math.hypot(Math.max(dx, 0), Math.max(dy, 0));
2485
+ }
2486
+ // Inside: the nearest of the four edges.
2487
+ return Math.min(-dx, -dy);
2488
+ }
2489
+ /**
2490
+ * "Is this glyph still ON the border of the box it was drawn on?"
2491
+ *
2492
+ * The `border-proximity` family (ADR 0024). See {@link BorderProximityDef} for
2493
+ * the requirement and for the three families that cannot state it.
2494
+ *
2495
+ * ## The walk
2496
+ *
2497
+ * Two passes over the surface to index the carriers and the subjects, then per
2498
+ * subject one test against each carrier: do the two boxes share AREA (or does
2499
+ * the carrier contain the subject outright), and if so how far is the subject's
2500
+ * centre from that carrier's outline. The BEST carrier — smallest distance,
2501
+ * ties broken by the smaller id — is the one the finding is measured against and
2502
+ * the one it names, because it is the box the author was aiming at and the only
2503
+ * one a suggestion can point back to.
2504
+ *
2505
+ * Deliberately not sweep-and-pruned the way `no-overlap` is. The two populations
2506
+ * are disjoint by role and both are small — a component sheet carries units of
2507
+ * components and units of ports — so the couple walk is `carriers × subjects`
2508
+ * over two handfuls, and an index would cost more to build than the walk it
2509
+ * saves. If a framework ever writes this family on two crowded roles, the prune
2510
+ * is the same one `evaluateNoOverlap` already documents.
2511
+ *
2512
+ * ## Overlap is the GATE, and the distance is the verdict
2513
+ *
2514
+ * A subject overlapping no carrier at all raises nothing (the family's
2515
+ * proportionality requirement), so the only thing this reports is a glyph the
2516
+ * author put ON a box and then pushed too far into it. Shared AREA and not a
2517
+ * shared edge — {@link boundsOverlap}'s epsilon — because a glyph tangent
2518
+ * OUTSIDE its carrier is within any tolerance worth declaring anyway, and
2519
+ * treating a snapped edge as an overlap would make the gate depend on float
2520
+ * noise.
2521
+ *
2522
+ * ## One finding, two ids
2523
+ *
2524
+ * One per SUBJECT, however many carriers it touches: the mistake is one glyph in
2525
+ * one wrong place, and a square straddling two nested components would otherwise
2526
+ * be reported twice for one drag. Both ids are indicted — the carrier and the
2527
+ * carried — because the finding has two honest readings (the glyph has drifted,
2528
+ * or the box has grown under it) and only the pair shows the user both brackets.
2529
+ * Sorted, like every other multi-element finding in this file, so the same
2530
+ * situation reports the same way whichever order the surface was walked in.
2531
+ */
2532
+ function evaluateBorderProximity(rule, elements) {
2533
+ const subjectRole = rule.appliesTo;
2534
+ const proximity = rule.borderProximity;
2535
+ if (subjectRole === undefined || proximity === undefined)
2536
+ return [];
2537
+ const carrierRole = proximity.carrierRole;
2538
+ // An outline is a box's, so the carrier has to be one. A rule naming an edge
2539
+ // or a text role can never fire; say so once rather than shrugging.
2540
+ const carrierKind = rule.roles[carrierRole]?.kind;
2541
+ if (carrierKind !== 'node') {
2542
+ warnOnce(`border-proximity rule "${rule.id}" names a ` +
2543
+ `"${carrierKind ?? 'unknown'}" role ("${carrierRole}") as its ` +
2544
+ `carrier — only a "node" role has an outline, and "on the border" is a ` +
2545
+ `distance to one, so this rule can never fire.`);
2546
+ return [];
2547
+ }
2548
+ const tolerance = proximity.tolerance;
2549
+ if (!(tolerance > 0)) {
2550
+ // A centre exactly on the line is a drawing no hand and no snap produces,
2551
+ // so a rule declaring no tolerance would indict every subject on the board.
2552
+ warnOnce(`border-proximity rule "${rule.id}" declares no positive tolerance — ` +
2553
+ `the rule is not evaluated.`);
2554
+ return [];
2555
+ }
2556
+ const carriers = [];
2557
+ const subjects = [];
2558
+ for (const el of elements) {
2559
+ // Cheapest possible exit for a neutral element: no role, no evaluation.
2560
+ if (el.role === undefined)
2561
+ continue;
2562
+ if (roleIsA(el.role, carrierRole, rule.roles)) {
2563
+ carriers.push({ id: el.id, bound: el.elementBound });
2564
+ // A role that is BOTH — a framework specialising one from the other —
2565
+ // would be a declaration that cannot mean anything here, so the carrier
2566
+ // reading wins and the element is not also judged as a subject.
2567
+ continue;
2568
+ }
2569
+ if (roleIsA(el.role, subjectRole, rule.roles)) {
2570
+ subjects.push({ id: el.id, bound: el.elementBound });
2571
+ }
2572
+ }
2573
+ if (carriers.length === 0 || subjects.length === 0)
2574
+ return [];
2575
+ const backgrounds = backgroundsOf(rule, elements);
2576
+ const violations = [];
2577
+ for (const subject of subjects) {
2578
+ const centre = centreOf(subject.bound);
2579
+ let host = null;
2580
+ let distance = Infinity;
2581
+ for (const carrier of carriers) {
2582
+ if (!boundsOverlap(carrier.bound, subject.bound) &&
2583
+ !carrier.bound.contains(subject.bound)) {
2584
+ continue;
2585
+ }
2586
+ const away = outlineDistance(centre, carrier.bound);
2587
+ // Strictly nearer wins; an exact tie goes to the smaller id, never to
2588
+ // whichever carrier the surface happened to be walked past first.
2589
+ if (away < distance ||
2590
+ (away === distance && host !== null && carrier.id < host.id)) {
2591
+ distance = away;
2592
+ host = carrier;
2593
+ }
2594
+ }
2595
+ // On no carrier at all: the glyph is a sketch, and this family says nothing
2596
+ // about where a sketch sits.
2597
+ if (host === null || distance <= tolerance)
2598
+ continue;
2599
+ violations.push(raise(rule, [host.id, subject.id].sort(), attributeBackground(subject.bound, backgrounds)?.id));
2600
+ }
2601
+ return violations;
2602
+ }
2463
2603
  /**
2464
2604
  * "Does this artefact belong on THIS view?"
2465
2605
  *
@@ -3233,6 +3373,210 @@ function evaluateLabelPresence(rule, elements, incremental) {
3233
3373
  }
3234
3374
  return violations;
3235
3375
  }
3376
+ /**
3377
+ * WHERE each {@link LabelTarget} is actually written, in order of preference.
3378
+ *
3379
+ * The one place in this file that names a connector's end-label props:
3380
+ * `sourceLabel` / `targetLabel`, the flat `Y.Text` fields `docs/adr/0020`
3381
+ * chose (mirroring the centre label's `text`). {@link labelSource} also
3382
+ * tolerates a nested `{ text }` under the same key — the shape an importer's
3383
+ * serialized props or a host that modelled the end label as one object would
3384
+ * hand it — so the rule does not break the day the model is reshaped, the same
3385
+ * duck-typing discipline {@link elementLabel} and {@link rawEndpointIds}
3386
+ * already hold.
3387
+ *
3388
+ * Own-property reads only, through {@link labelSource}: these come off a Y.Map
3389
+ * and are whatever a peer or an importer wrote.
3390
+ */
3391
+ const LABEL_PROPS = {
3392
+ 'center-label': ['text'],
3393
+ 'source-label': ['sourceLabel'],
3394
+ 'target-label': ['targetLabel'],
3395
+ };
3396
+ /**
3397
+ * The RAW words of one of an element's labels — newlines and all, `''` when it
3398
+ * carries none.
3399
+ *
3400
+ * {@link elementLabel} one step earlier: it trims, because "is there anything
3401
+ * here" is the only question that family asks. This family has to keep the line
3402
+ * structure, since a compartment is a LIST and the trimming happens per line.
3403
+ */
3404
+ function labelSource(el, target) {
3405
+ if (target === 'end-labels') {
3406
+ // The two ends, one per line — see {@link LabelTarget}. An end carrying
3407
+ // nothing contributes no line rather than an empty one, so a connector
3408
+ // labelled at one end alone is one subject and not two.
3409
+ return [labelSource(el, 'source-label'), labelSource(el, 'target-label')]
3410
+ .filter(text => text.trim() !== '')
3411
+ .join('\n');
3412
+ }
3413
+ const props = el;
3414
+ for (const key of LABEL_PROPS[target]) {
3415
+ const raw = props[key];
3416
+ if (raw == null)
3417
+ continue;
3418
+ if (typeof raw === 'string')
3419
+ return raw;
3420
+ if (rendersAsText(raw))
3421
+ return String(raw);
3422
+ // A nested end label — `{ text: Y.Text, xywh }` — read exactly one level
3423
+ // deep. Deeper would be guessing at a shape nobody declared.
3424
+ const nested = raw.text;
3425
+ if (typeof nested === 'string')
3426
+ return nested;
3427
+ if (nested != null && rendersAsText(nested))
3428
+ return String(nested);
3429
+ }
3430
+ return '';
3431
+ }
3432
+ /**
3433
+ * §9.2.4's elision marker, in both spellings. A line that says "there are more
3434
+ * of these, not shown" is notation, and indicting it would indict the author for
3435
+ * having said so.
3436
+ */
3437
+ const ELISION = new Set(['...', '…']);
3438
+ /**
3439
+ * The lines of a label that SAY something — trimmed, normalised, in order.
3440
+ *
3441
+ * Deliberately the same three rules `gfx/uml/src/grammar.ts` `parseCompartment`
3442
+ * holds (trim, drop blanks, drop the ellipsis), plus the invisible-code-point
3443
+ * strip {@link elementLabel} does: a line of zero-width joiners is a line the
3444
+ * reader cannot see, and handing it to a parser would indict the author for
3445
+ * something invisible on both the canvas and the finding.
3446
+ *
3447
+ * `perLine === false` folds the whole label into ONE subject — the trimmed text,
3448
+ * newlines kept — which is the reading a transition label or a multiplicity
3449
+ * wants: it is one expression, not a list.
3450
+ */
3451
+ function syntaxLines(text, perLine) {
3452
+ const clean = text.normalize('NFC').replace(INVISIBLE_CHARS, '');
3453
+ const lines = perLine ? clean.split('\n') : [clean];
3454
+ return lines
3455
+ .map(line => line.trim())
3456
+ .filter(line => line.length > 0 && !ELISION.has(line));
3457
+ }
3458
+ /**
3459
+ * How much of an offending line the finding's own sentence repeats.
3460
+ *
3461
+ * A compartment line is normally short, and a pasted one is occasionally a
3462
+ * paragraph. The fallback sentence ends up in a bubble eight units tall, so the
3463
+ * quotation is capped and elided rather than allowed to set the width of the
3464
+ * panel.
3465
+ */
3466
+ const QUOTED_LINE_MAX = 80;
3467
+ function quoteLine(line) {
3468
+ return line.length <= QUOTED_LINE_MAX
3469
+ ? line
3470
+ : `${line.slice(0, QUOTED_LINE_MAX - 1)}…`;
3471
+ }
3472
+ /**
3473
+ * "Is this written the way the notation writes it?"
3474
+ *
3475
+ * {@link evaluateLabelPresence} asks whether the artefact says anything; this
3476
+ * asks whether what it says PARSES. The walk is the same walk — subjects by
3477
+ * role, frame attribution through {@link ValidationRule.backgroundRole}, one
3478
+ * finding per offending element — and everything that makes the verdict is in
3479
+ * the function the framework shipped ({@link LabelSyntaxDef}).
3480
+ *
3481
+ * ## One finding per ELEMENT, naming the FIRST bad line
3482
+ *
3483
+ * Not one per line, and the reason is what a compartment looks like halfway
3484
+ * through being typed: six lines of a class's attributes with three of them
3485
+ * unfinished is three brackets on one text element, three entries in the panel
3486
+ * and one thing to fix. The first offending line is the one the author is going
3487
+ * to look at, so it is the one the sentence names.
3488
+ *
3489
+ * The finding keeps the RULE's `messageKey` and quotes the line in the
3490
+ * FALLBACK, which is the honest limit of this engine: a finding carries no
3491
+ * message parameters, so a host translating the key gets the rule's own
3492
+ * sentence and not the line. Recorded in `docs/adr/0021` rather than worked
3493
+ * around here — inventing a parameter channel for one family would be a change
3494
+ * to every family's contract.
3495
+ *
3496
+ * ## Silence
3497
+ *
3498
+ * The usual proportionality, and one addition. An element with no role is not a
3499
+ * subject; a label with no visible line is nothing to parse (that is
3500
+ * `label-presence`'s question, and a framework asking both asks them with two
3501
+ * rules); a blank line and an ellipsis are notation. And a rule whose `parse` is
3502
+ * not a function evaluates nothing at all and warns once — see the header of
3503
+ * {@link LabelSyntaxDef} on why that case exists.
3504
+ *
3505
+ * ## Cost
3506
+ *
3507
+ * One label read and one `parse` per line, paid only by the elements carrying
3508
+ * the subject role. Linear in the WORDS on the board rather than in its
3509
+ * elements, which is the first time this file can say that — and the reason
3510
+ * every rule of the family this library ships is `audit`, hence on-demand
3511
+ * (PF7.6), hence off the drawing path entirely.
3512
+ */
3513
+ function evaluateLabelSyntax(rule, elements, incremental) {
3514
+ const subjectRole = rule.appliesTo;
3515
+ const syntax = rule.labelSyntax;
3516
+ if (subjectRole === undefined || syntax === undefined)
3517
+ return [];
3518
+ if (typeof syntax.parse !== 'function') {
3519
+ warnOnce(`label-syntax rule "${rule.id}" carries no parse function — a rule of ` +
3520
+ `this family holds its framework's own grammar and cannot be ` +
3521
+ `serialized; the rule is not evaluated.`);
3522
+ return [];
3523
+ }
3524
+ const target = syntax.target ?? 'center-label';
3525
+ const perLine = syntax.perLine ?? true;
3526
+ // Only resolved when something is actually wrong — a board spelled correctly
3527
+ // pays nothing for the frames it never has to name.
3528
+ let backgrounds = null;
3529
+ const judged = incremental?.subjects;
3530
+ const violations = [];
3531
+ for (const el of elements) {
3532
+ if (judged !== undefined && !judged.has(el.id))
3533
+ continue;
3534
+ // Cheapest possible exit for a neutral element: no role, no evaluation.
3535
+ if (el.role === undefined)
3536
+ continue;
3537
+ if (!roleIsA(el.role, subjectRole, rule.roles))
3538
+ continue;
3539
+ const lines = syntaxLines(labelSource(el, target), perLine);
3540
+ let offending = null;
3541
+ for (const line of lines) {
3542
+ const verdict = syntax.parse(line);
3543
+ if (verdict.ok)
3544
+ continue;
3545
+ offending = {
3546
+ line,
3547
+ ...(verdict.reason ? { reason: verdict.reason } : {}),
3548
+ };
3549
+ break;
3550
+ }
3551
+ if (offending === null)
3552
+ continue;
3553
+ const quoted = quoteLine(offending.line);
3554
+ const words = {
3555
+ messageKey: rule.messageKey,
3556
+ ...(rule.messageFallback !== undefined
3557
+ ? {
3558
+ messageFallback: offending.reason === undefined
3559
+ ? `${rule.messageFallback} “${quoted}”`
3560
+ : `${rule.messageFallback} “${quoted}” — ${offending.reason}.`,
3561
+ }
3562
+ : {}),
3563
+ ...(rule.suggestionKey !== undefined
3564
+ ? { suggestionKey: rule.suggestionKey }
3565
+ : {}),
3566
+ ...(rule.suggestionFallback !== undefined
3567
+ ? { suggestionFallback: rule.suggestionFallback }
3568
+ : {}),
3569
+ };
3570
+ backgrounds ??= backgroundsOf(rule, elements);
3571
+ const frameId = attributeBackground(el.elementBound, backgrounds)?.id;
3572
+ // The TEXT element, and nothing else. A UML compartment belongs to a group
3573
+ // and the mark is drawn on that group already ({@link anchorOf}) — the
3574
+ // group carries no role, is never evaluated, and by the same contract never
3575
+ // appears in a finding's `elementIds`.
3576
+ violations.push(raise(rule, [el.id], frameId, words));
3577
+ }
3578
+ return violations;
3579
+ }
3236
3580
  const RULE_FAMILIES = {
3237
3581
  'element-in-background': evaluateElementInBackground,
3238
3582
  'orientation-against-axis': evaluateOrientationAgainstAxis,
@@ -3248,7 +3592,9 @@ const RULE_FAMILIES = {
3248
3592
  'edge-locality': evaluateEdgeLocality,
3249
3593
  reachability: evaluateReachability,
3250
3594
  'label-presence': evaluateLabelPresence,
3595
+ 'label-syntax': evaluateLabelSyntax,
3251
3596
  'view-admissibility': evaluateViewAdmissibility,
3597
+ 'border-proximity': evaluateBorderProximity,
3252
3598
  };
3253
3599
  /**
3254
3600
  * What a verdict of each family DEPENDS ON (PF5.3) — read off the evaluator
@@ -3298,9 +3644,21 @@ export const RULE_SCOPES = {
3298
3644
  reachability: 'surface',
3299
3645
  // Own words; the frame is attribution only.
3300
3646
  'label-presence': 'element',
3647
+ // Own words again, one question further on: the verdict is the framework's
3648
+ // parser applied to the subject's OWN label, line by line. Nothing about the
3649
+ // neighbourhood takes part — a compartment is right or wrong whatever is drawn
3650
+ // beside it, and an end label is read off the connector that carries it rather
3651
+ // than off what the connector joins.
3652
+ 'label-syntax': 'element',
3301
3653
  // Own role against the level the containing view declares; kept at the wider
3302
3654
  // level for the same reason as `tone-convention`.
3303
3655
  'view-admissibility': 'frame',
3656
+ // Widened from 'element' for the reason `attachment` is: the carriers the
3657
+ // subject is measured against are collected from the WHOLE surface and bounded
3658
+ // by no frame, so a carrier moved, resized or deleted anywhere can flip a
3659
+ // subject's verdict — including from "on a border" to "on no carrier at all",
3660
+ // which is the difference between a finding and silence.
3661
+ 'border-proximity': 'surface',
3304
3662
  };
3305
3663
  /**
3306
3664
  * The dependency scope in force for `rule`: the WIDER of its family's and its
@@ -3407,11 +3765,14 @@ function attributeAll(elements, frames, add) {
3407
3765
  * it, an incremental pass keeps verdicts measured against a map the user has
3408
3766
  * just stopped calling a map, or judged at a level nobody holds any more.
3409
3767
  *
3410
- * Real-time rules only, and the DECLARED moment, exactly like
3411
- * {@link backgroundElementIds} and for the same reason: an on-demand rule never
3412
- * takes part in an incremental pass, so it has nothing to invalidate.
3768
+ * Real-time rules only, read statically ({@link couldBeRealtime}), exactly like
3769
+ * {@link backgroundElementIds} and for the same reason: an on-demand rule no
3770
+ * level can promote never takes part in an incremental pass, so it has nothing
3771
+ * to invalidate — and one that a level CAN promote has to be remembered here
3772
+ * before anybody chooses that level, because the memory is what the pass after
3773
+ * the choice reads.
3413
3774
  */
3414
- export function frameMembership(rules, elements) {
3775
+ export function frameMembership(rules, elements, profiles = []) {
3415
3776
  const membership = new Map();
3416
3777
  const add = (id, frameId) => {
3417
3778
  const held = membership.get(id);
@@ -3423,7 +3784,7 @@ export function frameMembership(rules, elements) {
3423
3784
  const done = new Set();
3424
3785
  let levelled = false;
3425
3786
  for (const rule of rules) {
3426
- if (!isRealtime(rule))
3787
+ if (!couldBeRealtime(rule, profiles))
3427
3788
  continue;
3428
3789
  levelled = true;
3429
3790
  const key = frameKey(rule);
@@ -3779,17 +4140,62 @@ export function dirtyClosure(elements, dirty, previous, wasIn) {
3779
4140
  },
3780
4141
  };
3781
4142
  }
4143
+ /**
4144
+ * Whether a level in force on this surface PROMOTES `rule` — names it, by id,
4145
+ * at a severity the drawing user is shown.
4146
+ *
4147
+ * Named, and not merely resolved: {@link profileSeverity} falls back to the
4148
+ * rule's own severity for a rule a table is silent about, and a fallback is not
4149
+ * a decision. A promotion is a framework writing `'warning'` beside an id, which
4150
+ * is the one statement strong enough to overrule the rule's own `'on-demand'`
4151
+ * ({@link momentOf}).
4152
+ *
4153
+ * The same walk {@link isRuleAuditOnly} does — the framework's default level
4154
+ * unconditionally, then every level a root instance on this surface has CHOSEN.
4155
+ */
4156
+ function isRulePromoted(rule, chosen, index) {
4157
+ if (index === null)
4158
+ return false;
4159
+ const promotes = (profile) => profile !== undefined &&
4160
+ profile.framework === rule.framework &&
4161
+ Object.hasOwn(profile.rules, rule.id) &&
4162
+ isDrawn(profile.rules[rule.id]);
4163
+ if (promotes(index.defaults.get(rule.framework)))
4164
+ return true;
4165
+ if (chosen === null)
4166
+ return false;
4167
+ for (const id of chosen.values()) {
4168
+ if (promotes(index.byId.get(id)))
4169
+ return true;
4170
+ }
4171
+ return false;
4172
+ }
3782
4173
  /**
3783
4174
  * The moment `rule` is evaluated at, GIVEN the levels of requirement in force
3784
4175
  * on this surface — the one decision {@link runRules} takes before it reads a
3785
4176
  * single element.
3786
4177
  *
3787
- * A rule that declares the second moment keeps it, whatever any level says: an
3788
- * explicit `'on-demand'` is the stronger statement, and a framework that made
3789
- * it is not overruled by a table. Everything else turns on
3790
- * {@link isRuleAuditOnly}: an `audit` finding is dropped before anything draws
3791
- * it ({@link userFacingViolations}), so computing one inside the frame budget
3792
- * buys the user nothing.
4178
+ * Everything turns on {@link isRuleAuditOnly}: an `audit` finding is dropped
4179
+ * before anything draws it ({@link userFacingViolations}), so computing one
4180
+ * inside the frame budget buys the user nothing.
4181
+ *
4182
+ * ## A declared `'on-demand'` yields to a level that PROMOTES the rule
4183
+ *
4184
+ * It did not, until the UML recette of 2026-09-16. An explicit `'on-demand'`
4185
+ * used to win against any table, on the argument that a framework which made
4186
+ * that declaration is not overruled by one — and the consequence was a rule a
4187
+ * level had explicitly raised to `'warning'` that still drew nothing, ever, on
4188
+ * any gesture. `uml.strict` promotes nine of them; the PO chose Specification,
4189
+ * emptied a lifeline's head, and the canvas stayed silent.
4190
+ *
4191
+ * So the arbitration is the other way round, and it is the narrow one:
4192
+ * **choosing a level that NAMES the rule at a drawn severity puts it back on
4193
+ * the drawing path** ({@link isRulePromoted}). A framework keeping a rule
4194
+ * `'audit'` at every level keeps the second moment with it — which is how
4195
+ * `uml.unreachable-*` stays a graph walk nobody pays for on a gesture — and a
4196
+ * declaration nothing promotes is untouched. The rule stays the framework's to
4197
+ * make: it makes it in its profile table now, where the rest of the level lives,
4198
+ * instead of in two places that could disagree.
3793
4199
  *
3794
4200
  * Mixed levels resolve towards EVALUATING, exactly as {@link isRuleSilent}
3795
4201
  * needs `'off'` everywhere before it skips: one frame held to a level that
@@ -3798,8 +4204,9 @@ export function dirtyClosure(elements, dirty, previous, wasIn) {
3798
4204
  * walk where a wrong one costs a silent verdict.
3799
4205
  */
3800
4206
  function momentOf(rule, chosen, index) {
3801
- if ((rule.moment ?? 'realtime') !== 'realtime')
3802
- return 'on-demand';
4207
+ if ((rule.moment ?? 'realtime') !== 'realtime') {
4208
+ return isRulePromoted(rule, chosen, index) ? 'realtime' : 'on-demand';
4209
+ }
3803
4210
  return isRuleAuditOnly(rule, chosen, index) ? 'on-demand' : 'realtime';
3804
4211
  }
3805
4212
  /**
@@ -3814,6 +4221,30 @@ function momentOf(rule, chosen, index) {
3814
4221
  function isRealtime(rule) {
3815
4222
  return (rule.moment ?? 'realtime') === 'realtime';
3816
4223
  }
4224
+ /**
4225
+ * Whether the drawing path may EVER have to evaluate `rule` on this assembly:
4226
+ * it declares the real-time moment, or some REGISTERED level promotes it past
4227
+ * `audit`, which is what puts it back on that path ({@link momentOf}).
4228
+ *
4229
+ * The three callers below are the ones with no instance to read a chosen level
4230
+ * from — they are computed once, against the registry, before any surface
4231
+ * exists. Asking "could any level in this assembly promote it" is the honest
4232
+ * static approximation of "does a level in force promote it": it can only
4233
+ * over-answer, and over-answering costs one extra id in a set or one extra
4234
+ * watched property, where under-answering costs a verdict that never appears
4235
+ * and a stale one that never clears.
4236
+ *
4237
+ * `profiles` defaults to none, so a caller that has no registry — every unit
4238
+ * fixture, and every host reading the declarations in the abstract — gets the
4239
+ * declared moment, exactly as before.
4240
+ */
4241
+ function couldBeRealtime(rule, profiles) {
4242
+ if (isRealtime(rule))
4243
+ return true;
4244
+ return profiles.some(profile => profile.framework === rule.framework &&
4245
+ Object.hasOwn(profile.rules, rule.id) &&
4246
+ isDrawn(profile.rules[rule.id]));
4247
+ }
3817
4248
  /** The exceptions an element carries, always an array, never a copy to keep. */
3818
4249
  export function elementExceptions(element) {
3819
4250
  const stored = element.validationExceptions;
@@ -3920,7 +4351,7 @@ function runRules(rules, elements, profiles, moment, incremental) {
3920
4351
  * other moment, which no carry-over and no dirty-set walk can reconstruct. So
3921
4352
  * the answer is not "re-judge more", it is "there is nothing here to build
3922
4353
  * on", and that applies to {@link evaluateNoOverlap} exactly as it does to
3923
- * the twelve families that filter on subjects.
4354
+ * the thirteen families that filter on subjects.
3924
4355
  *
3925
4356
  * A board with no profile registered has no regime to change and pays nothing
3926
4357
  * for the question.
@@ -4037,7 +4468,11 @@ export function checkupRules(rules, elements, profiles = []) {
4037
4468
  export function evaluateCheckup(rules, elements, profiles = [], seed) {
4038
4469
  return runRules(rules, elements, profiles, 'on-demand', seed === undefined
4039
4470
  ? undefined
4040
- : { dirty: seed, previous: [], wasIn: frameMembership(rules, elements) });
4471
+ : {
4472
+ dirty: seed,
4473
+ previous: [],
4474
+ wasIn: frameMembership(rules, elements, profiles),
4475
+ });
4041
4476
  }
4042
4477
  /**
4043
4478
  * How long a check-up may hold the thread before yielding it back.
@@ -4290,28 +4725,41 @@ export const VERDICT_PROPS = [
4290
4725
  *
4291
4726
  * ## `text`, and why it is not in the constant
4292
4727
  *
4293
- * `label-presence` is the one family whose verdict turns on an element's words,
4294
- * and words are what a user changes by TYPING. Watched unconditionally, every
4295
- * keystroke in every shape on the board would wake the debounced evaluation —
4296
- * a cost paid by every document, for a question most of them never ask.
4297
- *
4298
- * So it is added exactly when a REAL-TIME rule of that family is registered.
4299
- * The moment filter is deliberate and mirrors {@link backgroundElementIds}: an
4300
- * on-demand rule is never evaluated on the gesture path, so waking that path for
4301
- * it would hand back precisely what declaring the second moment bought — and a
4302
- * framework that wants its naming checked while the user types says so by
4303
- * declaring the rule real-time, which is the one place that decision belongs.
4304
- *
4305
- * The DECLARED moment, like {@link backgroundElementIds} and for the same
4306
- * reason: this set is computed ONCE per manager, before any surface exists to
4307
- * read a level from, and watching a prop nothing turns out to need costs a
4728
+ * `label-presence` and `label-syntax` are the two families whose verdict turns
4729
+ * on an element's words, and words are what a user changes by TYPING. Watched
4730
+ * unconditionally, every keystroke in every shape on the board would wake the
4731
+ * debounced evaluation — a cost paid by every document, for a question most of
4732
+ * them never ask.
4733
+ *
4734
+ * So it is added exactly when a rule of either family COULD reach the gesture
4735
+ * path — it declares the real-time moment, or some registered level promotes it
4736
+ * ({@link couldBeRealtime}). The filter mirrors {@link backgroundElementIds}: an
4737
+ * on-demand rule no level can promote is never evaluated on the gesture path, so
4738
+ * waking that path for it would hand back precisely what declaring the second
4739
+ * moment bought.
4740
+ *
4741
+ * The level half of that test is what makes "Specification is the check-up"
4742
+ * true for the two families that read WORDS. `uml.strict` promotes six spelling
4743
+ * rules and three naming ones; without the promoted rules' `text` in this set,
4744
+ * choosing Specification would raise them once, on the switch, and then never
4745
+ * again while the user retyped the very word the finding is about.
4746
+ *
4747
+ * Read STATICALLY, like {@link backgroundElementIds} and for the same reason:
4748
+ * this set is computed ONCE per manager, before any surface exists to read a
4749
+ * chosen level from, and watching a prop nothing turns out to need costs a
4308
4750
  * debounced pass that finds nothing — never a wrong verdict.
4309
4751
  */
4310
- export function verdictPropsOf(rules) {
4752
+ export function verdictPropsOf(rules, profiles = []) {
4311
4753
  const props = new Set(VERDICT_PROPS);
4312
4754
  for (const rule of rules) {
4313
- if (rule.family === 'label-presence' && isRealtime(rule))
4755
+ // The two families whose verdict turns on an element's words. Neither is
4756
+ // named as a constant: the second reads the same `text` slot (and, for a
4757
+ // connector end label, props that only exist on a connector, which are
4758
+ // watched through their own element's change anyway).
4759
+ if ((rule.family === 'label-presence' || rule.family === 'label-syntax') &&
4760
+ couldBeRealtime(rule, profiles)) {
4314
4761
  props.add('text');
4762
+ }
4315
4763
  // The level a VIEW declares decides which roles it admits, so changing it —
4316
4764
  // or clearing it back to "free sketch", which DELETES the key, which is why
4317
4765
  // `touchesVerdict` reads `oldValues` too — re-judges everything drawn on
@@ -4515,7 +4963,7 @@ export class ValidationManager extends InteractivityExtension {
4515
4963
  * beside the rules it is derived from — see {@link verdictPropsOf}.
4516
4964
  */
4517
4965
  get _watchedProps() {
4518
- this._verdictProps ??= verdictPropsOf(this._activeRules);
4966
+ this._verdictProps ??= verdictPropsOf(this._activeRules, this._activeProfiles);
4519
4967
  return this._verdictProps;
4520
4968
  }
4521
4969
  /**
@@ -4672,8 +5120,8 @@ export class ValidationManager extends InteractivityExtension {
4672
5120
  ? { dirty, previous, wasIn: this._membership }
4673
5121
  : undefined);
4674
5122
  this._evaluated = true;
4675
- this._backgrounds = backgroundElementIds(rules, surface.elementModels);
4676
- this._membership = frameMembership(rules, surface.elementModels);
5123
+ this._backgrounds = backgroundElementIds(rules, surface.elementModels, this._activeProfiles);
5124
+ this._membership = frameMembership(rules, surface.elementModels, this._activeProfiles);
4677
5125
  // Stay silent when nothing changed: `violations$` is the seam a host panel
4678
5126
  // subscribes to, and a clean board must not wake it on every debounce tick.
4679
5127
  if (violations.length === 0 && this.violations$.peek().length === 0)