@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
@@ -1,10 +1,10 @@
1
1
  import { ConnectorElementModel } from '../../affine-model/index.js';
2
- import { NotificationProvider, translateKey, } from '../../affine-shared/services/index.js';
2
+ import { fillPlaceholders, NotificationProvider, translateKey, } from '../../affine-shared/services/index.js';
3
3
  import { openSingleFileWithSpec } from '../../affine-shared/utils/index.js';
4
- import { getCommonBound } from '../../global/gfx/index.js';
4
+ import { Bound, getCommonBound } from '../../global/gfx/index.js';
5
5
  import { GfxControllerIdentifier } from '../../std/gfx/index.js';
6
6
  import { DefaultTool } from '../tool/default-tool.js';
7
- import { interchangeCapabilities, } from './interchange.js';
7
+ import { InterchangeImportError, interchangeCapabilities, } from './interchange.js';
8
8
  /**
9
9
  * **The public import API** — what an editor, a host application or a plugin
10
10
  * calls to turn a foreign file into a board (`docs/adr/0012`).
@@ -55,17 +55,70 @@ import { interchangeCapabilities, } from './interchange.js';
55
55
  * whole blob and `addElement` writes it with everything else, which is the
56
56
  * whole-record LWW the field's own contract asks for (D2).
57
57
  *
58
+ * ## The reader's OWN names, and why there is a second map
59
+ *
60
+ * A source id is the file's, and there are two things a reader has to point at
61
+ * that the file never named: an element it MINTED (a framework artefact is
62
+ * routinely several elements — a shape, its compartments, and the group that
63
+ * makes them one thing), and the group membership between them. So a reader may
64
+ * also hand each element a provisional `id` of its own. `surface.addElement`
65
+ * overwrites it with a nanoid and is documented to, which is precisely what
66
+ * makes it safe to use as a local name: it reaches no document, and it is read
67
+ * here and nowhere else.
68
+ *
69
+ * A GROUP's `children` are therefore rewritten BEFORE the group is created, out
70
+ * of the map built so far — which costs nothing and asks the reader for the one
71
+ * thing it can always give: emit an element before the group that holds it. A
72
+ * connector is the opposite case (a flow may be written before either of its
73
+ * ends) and keeps its second pass.
74
+ *
75
+ * Source ids win over provisional ones wherever both could answer, so a reader
76
+ * that mints no local name behaves exactly as it did before this was here.
77
+ *
78
+ * ## Beside what is already drawn
79
+ *
80
+ * A reader writes the coordinates its FILE gave it, so importing the same file
81
+ * twice put the second board exactly on top of the first. The offset is applied
82
+ * here, once, for every framework, because the only thing that knows what the
83
+ * canvas already holds is the function doing the writing — see
84
+ * {@link importOffset}, and note that an empty surface is left alone.
85
+ *
86
+ * ## A read-only document is answered, not thrown at
87
+ *
88
+ * This is a public API — a host (labre-mcp) writes through it with no command
89
+ * in front of it — so the guard belongs here too and not only at the callers:
90
+ * a readonly document answers the empty array, which is the same "nothing was
91
+ * minted" every other refusal of this function returns, rather than an
92
+ * exception a caller would have to know to catch.
93
+ *
58
94
  * @param formatId the format whose payload key carries the source ids — the
59
95
  * `id` of the capability's {@link InterchangeFormat}, and the ONLY thing this
60
96
  * function ever knew about BPMN.
61
97
  */
62
- export function materializeInterchangeImport(std, formatId, elements) {
98
+ export function materializeInterchangeImport(std, formatId, elements, options = {}) {
63
99
  const surface = std.get(GfxControllerIdentifier).surface;
64
100
  if (!surface)
65
101
  return [];
102
+ if (std.store.readonly)
103
+ return [];
104
+ const shift = importOffset(surface.elementModels, elements);
66
105
  const bySource = new Map();
106
+ const byLocal = new Map();
107
+ const resolve = (name) => bySource.get(name) ?? byLocal.get(name);
67
108
  const created = elements.map(props => {
68
- const id = surface.addElement({ ...props });
109
+ const written = shift
110
+ ? translateProps(props, shift)
111
+ : { ...props };
112
+ const children = written.children;
113
+ if (written.type === 'group' &&
114
+ children !== null &&
115
+ typeof children === 'object') {
116
+ written.children = Object.fromEntries(Object.keys(children).map(child => [
117
+ resolve(child) ?? child,
118
+ true,
119
+ ]));
120
+ }
121
+ const id = surface.addElement(written);
69
122
  const carried = props.interchange;
70
123
  const source = carried?.[formatId]?.id;
71
124
  // FIRST wins, matching a reader's own answer to a file that used one id
@@ -73,6 +126,31 @@ export function materializeInterchangeImport(std, formatId, elements) {
73
126
  // naming that id means the first of them.
74
127
  if (source !== undefined && !bySource.has(source))
75
128
  bySource.set(source, id);
129
+ const local = props.id;
130
+ if (typeof local === 'string') {
131
+ // FIRST wins here too, and for the same reason — but where a duplicated
132
+ // SOURCE id is the FILE's mistake and the reader has already reported it,
133
+ // a duplicated provisional name is the READER's, and nothing else in the
134
+ // pipeline is in a position to notice. So it is named: every element is
135
+ // still imported, and the remark says which of the two a group or a
136
+ // connector naming it will have landed on.
137
+ if (byLocal.has(local)) {
138
+ // The English is FILLED from the wording rather than restated beside
139
+ // it, so the sentence a host translates and the sentence a playground
140
+ // with no catalogue reads cannot drift apart.
141
+ const messageParams = { name: local };
142
+ options.onNote?.({
143
+ kind: 'substituted-id',
144
+ elementId: id,
145
+ messageKey: IMPORT_DUPLICATE_NAME_KEY,
146
+ message: fillPlaceholders(IMPORT_DUPLICATE_NAME_FALLBACK, messageParams),
147
+ messageParams,
148
+ });
149
+ }
150
+ else {
151
+ byLocal.set(local, id);
152
+ }
153
+ }
76
154
  return id;
77
155
  });
78
156
  for (const id of created) {
@@ -83,16 +161,129 @@ export function materializeInterchangeImport(std, formatId, elements) {
83
161
  const end = model[side];
84
162
  if (end?.id === undefined)
85
163
  continue;
86
- model[side] = { ...end, id: bySource.get(end.id) ?? end.id };
164
+ model[side] = { ...end, id: resolve(end.id) ?? end.id };
87
165
  }
88
166
  }
89
167
  return created;
90
168
  }
169
+ /* ── Beside what is already there ─────────────────────────────────────── */
170
+ /**
171
+ * The space left between a board that is already drawn and one just imported.
172
+ *
173
+ * Wide enough that the two read as two documents rather than as one crowded
174
+ * sheet, and narrow enough that the viewport fit which follows still shows the
175
+ * new one at a useful zoom.
176
+ */
177
+ const IMPORT_BESIDE_GAP = 200;
178
+ /** A box off one element's props, or nothing — `[x,y,w,h]`, as the store holds it. */
179
+ function propsBound(props) {
180
+ const xywh = props.xywh;
181
+ if (typeof xywh !== 'string')
182
+ return undefined;
183
+ try {
184
+ return Bound.deserialize(xywh);
185
+ }
186
+ catch {
187
+ return undefined;
188
+ }
189
+ }
190
+ /**
191
+ * How far to move an imported board so it lands BESIDE what is already drawn.
192
+ *
193
+ * ## Why this is the seam's job and not each reader's
194
+ *
195
+ * "What arrives is a NEW board, never a merge" is already this file's rule
196
+ * ({@link importInterchangeFile}) — but a reader has no surface to look at, so
197
+ * it writes the coordinates the FILE gave it, and a second import of the same
198
+ * file therefore landed exactly on top of the first. Every framework had the
199
+ * bug and none of them could fix it: the only thing that knows what the canvas
200
+ * already holds is the function doing the writing.
201
+ *
202
+ * `undefined` on an EMPTY surface, and deliberately: with nothing to avoid, the
203
+ * board keeps the file's own coordinates, which is what every golden and every
204
+ * round-trip assertion is written against. Only a second import moves, which is
205
+ * exactly the case that was wrong.
206
+ *
207
+ * Connectors are excluded from the measurement for the reason
208
+ * {@link importInterchangeFile} excludes them from the viewport fit: a
209
+ * connector's bound is derived from a path the router has not computed yet, and
210
+ * it answers `[0, 0, 0, 0]` — which would anchor every offset to the origin.
211
+ *
212
+ * The list is read defensively because a SURFACE is not the only thing that ever
213
+ * reaches this function: several framework specs drive the pipeline through a
214
+ * hand-built stub that answers `addElement` and little else. A stub with no
215
+ * elements is an empty canvas, which is the one case that must not move.
216
+ */
217
+ function importOffset(drawn, arriving) {
218
+ const occupied = getCommonBound((drawn ?? [])
219
+ .map(model => model.elementBound)
220
+ .filter((bound) => !!bound && bound.w > 0 && bound.h > 0));
221
+ if (!occupied)
222
+ return undefined;
223
+ const boxes = arriving
224
+ .map(propsBound)
225
+ .filter((bound) => bound !== undefined);
226
+ const incoming = getCommonBound(boxes);
227
+ if (!incoming)
228
+ return undefined;
229
+ return {
230
+ x: occupied.x + occupied.w + IMPORT_BESIDE_GAP - incoming.x,
231
+ y: occupied.y - incoming.y,
232
+ };
233
+ }
234
+ /**
235
+ * One element's props, moved.
236
+ *
237
+ * `xywh` and the label boxes, with one exception: a connector end that names no
238
+ * element carries an ABSOLUTE position rather than an anchor within a shape, and
239
+ * an end left behind would stretch the line back to where the file drew it. An
240
+ * end WITH an id carries a fraction of its shape's box and must not be touched.
241
+ *
242
+ * A connector's three label boxes (`labelXYWH`, and ADR 0020's two per-end
243
+ * siblings) are absolute `[x, y, w, h]` in the same space as `xywh`, so they
244
+ * move with everything else. A reader that creates a connector with an end label
245
+ * already positioned — `gfx/uml`'s materializer does — would otherwise drop the
246
+ * text at the origin of a board it was not imported onto.
247
+ */
248
+ function translateProps(props, shift) {
249
+ const moved = { ...props };
250
+ const bound = propsBound(props);
251
+ if (bound) {
252
+ moved.xywh = new Bound(bound.x + shift.x, bound.y + shift.y, bound.w, bound.h).serialize();
253
+ }
254
+ for (const key of ['labelXYWH', 'sourceLabelXYWH', 'targetLabelXYWH']) {
255
+ const box = props[key];
256
+ if (!Array.isArray(box) || box.length !== 4)
257
+ continue;
258
+ if (!box.every(each => typeof each === 'number'))
259
+ continue;
260
+ const [x, y, w, h] = box;
261
+ moved[key] = [x + shift.x, y + shift.y, w, h];
262
+ }
263
+ for (const side of ['source', 'target']) {
264
+ const end = props[side];
265
+ if (!end || end.id !== undefined || !Array.isArray(end.position))
266
+ continue;
267
+ moved[side] = {
268
+ ...end,
269
+ position: [end.position[0] + shift.x, end.position[1] + shift.y],
270
+ };
271
+ }
272
+ return moved;
273
+ }
91
274
  /* ── Saying what it cost ──────────────────────────────────────────────── */
92
275
  const IMPORT_DONE_KEY = 'com.labre.interchange.import.done';
93
276
  const IMPORT_DONE_FALLBACK = 'file imported';
94
277
  const IMPORT_FAILED_KEY = 'com.labre.interchange.import.failed';
95
278
  const IMPORT_FAILED_FALLBACK = 'This file could not be imported';
279
+ /**
280
+ * The document went read-only between the moment the file was accepted and the
281
+ * moment its board was about to be written — see the second guard in
282
+ * {@link importInterchangeFile}. Its own sentence rather than the reader's,
283
+ * because nothing is wrong with the FILE.
284
+ */
285
+ const IMPORT_READONLY_KEY = 'com.labre.interchange.import.readonly';
286
+ const IMPORT_READONLY_FALLBACK = 'This document became read-only while the file was being read, so nothing was imported.';
96
287
  const IMPORT_REMARKS_KEY = 'com.labre.interchange.import.remarks';
97
288
  const IMPORT_REMARKS_FALLBACK = 'What the import could not keep as it was';
98
289
  const IMPORT_CONSOLE_KEY = 'com.labre.interchange.import.console';
@@ -103,6 +294,16 @@ const IMPORT_CARRIED_KEY = 'com.labre.interchange.import.carried';
103
294
  const IMPORT_CARRIED_FALLBACK = 'carried';
104
295
  const IMPORT_QUARANTINED_KEY = 'com.labre.interchange.import.quarantined';
105
296
  const IMPORT_QUARANTINED_FALLBACK = 'quarantined';
297
+ /**
298
+ * The one remark the MATERIALIZER raises itself (see the provisional-name note
299
+ * on `SerializedElementProps`) — this pipeline's own words about its own
300
+ * substitution, not a reader's, so it is keyed here with the rest of the
301
+ * pipeline's chrome rather than in any one format's table. `{{name}}` is the
302
+ * provisional name the reader minted, filled from `messageParams` by
303
+ * `resolveNoteMessage` exactly as a reader's own remark is.
304
+ */
305
+ const IMPORT_DUPLICATE_NAME_KEY = 'com.labre.interchange.import.duplicate-provisional-name';
306
+ const IMPORT_DUPLICATE_NAME_FALLBACK = 'Two imported elements were handed the same provisional name "{{name}}". Both are on the board; anything referring to that name points at the first of them.';
106
307
  /**
107
308
  * How many remarks the second notification spells out before it hands the
108
309
  * reader to the console.
@@ -126,18 +327,28 @@ const REMARKS_IN_A_NOTIFICATION = 5;
126
327
  */
127
328
  const formatLabel = (format) => format.id.toUpperCase();
128
329
  /**
129
- * One remark, as the line a reader sees.
330
+ * One remark's own wording — the reader that produced it had no `std` and
331
+ * could not translate it (P3), so this is where a remark that declared a key
332
+ * (`InterchangeNote.messageKey`) gets it, `{{name}}` holes filled from
333
+ * `messageParams` with no host catalogue exactly as they were filled by the
334
+ * reader's own string interpolation before either field existed. A remark
335
+ * with no key is one that names something out of the file with no sentence
336
+ * shape worth sharing, and is shown as the reader wrote it.
130
337
  *
131
- * The reader that produced it had no `std` and could not translate it (P3), so
132
- * this is where a remark that declared a key gets its wording — with its own
133
- * `message` as the English default, exactly like every other `translateKey`
134
- * call site. A remark with no key is one that names something out of the file
135
- * and is shown as the reader wrote it (see `InterchangeNote.messageKey`).
338
+ * The one function every READER of `note.message` goes through — the
339
+ * notification line below (`remarkLine`) and the console table
340
+ * (`reportInterchangeImport`) both resolve through it, so a note keyed via
341
+ * the `TABLE.key[1]` pattern (its OWN fallback, not a hand-rebuilt literal)
342
+ * reads identically in both rather than showing raw `{{tag}}` in the console.
136
343
  */
137
- function remarkLine(std, note) {
138
- const message = note.messageKey
139
- ? translateKey(std, note.messageKey, note.message)
344
+ function resolveNoteMessage(std, note) {
345
+ return note.messageKey
346
+ ? translateKey(std, note.messageKey, note.message, note.messageParams)
140
347
  : note.message;
348
+ }
349
+ /** One remark, as the line a reader sees. */
350
+ function remarkLine(std, note) {
351
+ const message = resolveNoteMessage(std, note);
141
352
  const subject = note.sourceId ?? note.element;
142
353
  return subject ? `${subject}: ${message}` : message;
143
354
  }
@@ -220,7 +431,7 @@ export function reportInterchangeImport(std, format, report) {
220
431
  kind: note.kind,
221
432
  source: note.sourceId ?? '',
222
433
  element: note.element ?? '',
223
- message: note.message,
434
+ message: resolveNoteMessage(std, note),
224
435
  })));
225
436
  notifyImport(std, {
226
437
  title: translateKey(std, IMPORT_REMARKS_KEY, IMPORT_REMARKS_FALLBACK),
@@ -255,7 +466,7 @@ export function reportInterchangeImport(std, format, report) {
255
466
  * deliberately so: a dialog a document cannot honour should never open in the
256
467
  * first place.
257
468
  */
258
- export async function runInterchangeImportFile(std, capability) {
469
+ export async function runInterchangeImportFile(std, capability, options = {}) {
259
470
  const gfx = std.get(GfxControllerIdentifier);
260
471
  if (!gfx.surface || std.store.readonly)
261
472
  return;
@@ -268,7 +479,7 @@ export async function runInterchangeImportFile(std, capability) {
268
479
  // know what they just did.
269
480
  if (!file)
270
481
  return;
271
- await importInterchangeFile(std, capability, file);
482
+ await importInterchangeFile(std, capability, file, options);
272
483
  }
273
484
  /**
274
485
  * The import itself, over a file the caller ALREADY HAS: run the declared
@@ -307,19 +518,48 @@ export async function runInterchangeImportFile(std, capability) {
307
518
  * its refusals it was, so it is shown as it is rather than replaced with a
308
519
  * wording of our own that knows less.
309
520
  */
310
- export async function importInterchangeFile(std, capability, file) {
521
+ export async function importInterchangeFile(std, capability, file, options = {}) {
311
522
  const gfx = std.get(GfxControllerIdentifier);
312
523
  if (!gfx.surface || std.store.readonly)
313
524
  return;
314
525
  const { format } = capability;
315
526
  let result;
316
527
  try {
317
- result = capability.run(await file.text(), { name: file.name });
528
+ const text = await file.text();
529
+ // The container, opened — see {@link InterchangeImportOptions.decode}. Inside
530
+ // the same `try` as the reader, deliberately: "this .drawio could not be
531
+ // inflated" and "this is not a BPMN document" are the same event to the
532
+ // person who picked the file, and they take the same notification.
533
+ const source = options.decode ? await options.decode(text, file) : text;
534
+ result = capability.run(source, { name: file.name });
318
535
  }
319
536
  catch (error) {
537
+ // `InterchangeImportError` checked FIRST: a reader that throws it declared
538
+ // a key for its own refusal, resolved exactly like a note's `messageKey`
539
+ // (see `remarkLine`, above). Any other `Error` (or a non-`Error` throw)
540
+ // reads as it always did.
541
+ const message = error instanceof InterchangeImportError && error.messageKey
542
+ ? translateKey(std, error.messageKey, error.message, error.messageParams)
543
+ : error instanceof Error
544
+ ? error.message
545
+ : String(error);
320
546
  notifyImport(std, {
321
547
  title: translateKey(std, IMPORT_FAILED_KEY, IMPORT_FAILED_FALLBACK),
322
- message: error instanceof Error ? error.message : String(error),
548
+ message,
549
+ accent: 'error',
550
+ });
551
+ return;
552
+ }
553
+ // The guard at the top was a decision taken BEFORE two `await`s, and rights
554
+ // can be lost while they run: a remote cascade turning the store read-only
555
+ // between the picker and this line is the same class of defect as issue #324
556
+ // ("Cannot remove element in readonly mode"). Writing anyway rejects a
557
+ // promise nobody awaits, and returning in silence loses a file the user
558
+ // chose — so it is said, through the channel every other import failure uses.
559
+ if (std.store.readonly) {
560
+ notifyImport(std, {
561
+ title: translateKey(std, IMPORT_FAILED_KEY, IMPORT_FAILED_FALLBACK),
562
+ message: translateKey(std, IMPORT_READONLY_KEY, IMPORT_READONLY_FALLBACK),
323
563
  accent: 'error',
324
564
  });
325
565
  return;
@@ -328,8 +568,15 @@ export async function importInterchangeFile(std, capability, file) {
328
568
  // `captureSync` before opens a boundary, the writes land inside it, and the
329
569
  // second one closes it. An import a user has to undo forty times is an import
330
570
  // they cannot undo.
571
+ // What the WRITING found that the reading could not: a provisional name the
572
+ // reader handed out twice. Collected here rather than pushed into the
573
+ // reader's own array, which is `readonly` and is the reader's statement about
574
+ // the file — this is a statement about the import.
575
+ const written = [];
331
576
  std.store.captureSync();
332
- const created = materializeInterchangeImport(std, format.id, result.elements);
577
+ const created = materializeInterchangeImport(std, format.id, result.elements, {
578
+ onNote: note => written.push(note),
579
+ });
333
580
  std.store.captureSync();
334
581
  // …and then bring it into view, which is what template insertion does for
335
582
  // the same reason: a board that landed off-screen looks like a command that
@@ -362,7 +609,9 @@ export async function importInterchangeFile(std, capability, file) {
362
609
  gfx.viewport.setViewportByBound(bound, [padding, padding, padding, padding], true);
363
610
  }
364
611
  gfx.tool.setTool(DefaultTool);
365
- reportInterchangeImport(std, format, result.report);
612
+ reportInterchangeImport(std, format, written.length === 0
613
+ ? result.report
614
+ : { ...result.report, notes: [...result.report.notes, ...written] });
366
615
  }
367
616
  /* ── What can read a file called this ─────────────────────────────────── */
368
617
  /**
@@ -69,6 +69,24 @@ export type InterchangeDirection = 'import' | 'export';
69
69
  * One element as it is handed to `surface.addElement` — the exact shape the
70
70
  * store already takes, so an importer's output is written with no translation
71
71
  * step in between and no live model in sight.
72
+ *
73
+ * ## The provisional `id`, and how a reader points at itself
74
+ *
75
+ * A reader names things the FILE named through `interchange[formatId].id`, and
76
+ * that is the identity `materializeInterchangeImport` remaps endpoints from. It
77
+ * is not enough on its own: a framework artefact is routinely several elements
78
+ * the file never mentioned — a shape, its compartment texts, and the group that
79
+ * makes them one thing — so a reader may also put an `id` of its own on each
80
+ * element. `surface.addElement` OVERWRITES it with a nanoid and is documented
81
+ * to, which is exactly what makes it safe as a local name: it reaches no
82
+ * document, it is read by the materializer and nowhere else, and it cannot
83
+ * collide with a real surface id. Two rules make it work — a reader emits an
84
+ * element BEFORE any group that holds it (a group's `children` are rewritten
85
+ * from the map built so far, in one pass, rather than deferred like a
86
+ * connector's two ends), and a SOURCE id wins wherever both could answer, so a
87
+ * reader that mints no local name behaves exactly as it did before this
88
+ * existed. A provisional name used twice resolves to the FIRST element that
89
+ * claimed it, and the import says so in a `substituted-id` note.
72
90
  */
73
91
  export type SerializedElementProps = Record<string, unknown> & {
74
92
  type: string;
@@ -97,21 +115,26 @@ export interface InterchangeNote {
97
115
  message: string;
98
116
  /**
99
117
  * The i18n key {@link message} is the English default of — set only when the
100
- * remark is a FIXED sentence.
118
+ * remark is a FIXED sentence, one per SHAPE of sentence rather than one per
119
+ * exact string (a `{{name}}` hole is filled by {@link messageParams}, not by
120
+ * minting a new key for every value the file happens to carry).
101
121
  *
102
122
  * A reader is a pure function of text (`docs/adr/0012`, P3): it has no `std`,
103
123
  * so it cannot reach the host's catalogue and hands the key over instead, and
104
124
  * `reportInterchangeImport` resolves it when it draws the report. That is the
105
- * whole of the seam here, and it deliberately covers only the remarks that
106
- * say the same thing every time.
125
+ * whole of the seam here.
107
126
  *
108
- * A remark that NAMES something out of the file — an element, an id, a count
109
- * of lanes — carries no key and stays English. The seam has no interpolation
110
- * and no pluralisation (both are the host's), so the alternative would be to
111
- * invent a grammar for sentences with holes in them, which is exactly what
112
- * the three interchange count labels already refuse to do.
127
+ * A remark that names something out of the file with no sentence shape worth
128
+ * sharing (a raw dump, a one-off diagnostic) carries no key and stays
129
+ * English — the seam still has no pluralisation, which is the host's.
113
130
  */
114
131
  messageKey?: string;
132
+ /**
133
+ * `{{name}}`-style values for {@link messageKey}'s placeholders — the file's
134
+ * own words (a unit, a tag name), never a sentence of their own. Ignored
135
+ * when {@link messageKey} is absent.
136
+ */
137
+ messageParams?: Record<string, string | number>;
115
138
  }
116
139
  /**
117
140
  * The five things worth saying about one item, and no sixth.
@@ -161,6 +184,33 @@ export interface InterchangeReport {
161
184
  */
162
185
  sourceVersion?: string;
163
186
  }
187
+ /**
188
+ * A reader's own refusal — THROWN, not returned, because the report's three
189
+ * counts (`InterchangeReport`) cannot say "this is not a file I can read": a
190
+ * report of three zeroes would claim an empty document where there was none
191
+ * (see `importInterchangeFile`, "Failure is an exception, and it says which
192
+ * one", `interchange-import.ts`).
193
+ *
194
+ * Carries the reader's own English sentence as `Error.message`, so every
195
+ * existing `catch` site that only ever did `error.message` keeps reading
196
+ * exactly what it read before — plus the same optional key/params pair
197
+ * {@link InterchangeNote} carries, on the same seam: a reader has no `std`
198
+ * (`docs/adr/0012`, P3) and cannot translate its own refusal, so the catch
199
+ * site that DOES have one (`importInterchangeFile`) resolves it exactly as
200
+ * `remarkLine` resolves a note.
201
+ *
202
+ * Optional and additive: a reader that still throws a plain `Error` (or any
203
+ * other capability's failure) is caught exactly as before — this class only
204
+ * gives the catch site a SECOND thing to check, never a first requirement.
205
+ */
206
+ export declare class InterchangeImportError extends Error {
207
+ readonly messageKey?: string;
208
+ readonly messageParams?: Record<string, string | number>;
209
+ constructor(message: string, options?: {
210
+ messageKey?: string;
211
+ messageParams?: Record<string, string | number>;
212
+ });
213
+ }
164
214
  /** What the caller tells an exporter about the document it is producing. */
165
215
  export interface InterchangeExportContext {
166
216
  /**
@@ -1,4 +1,31 @@
1
1
  import { createIdentifier } from '../../global/di/index.js';
2
+ /**
3
+ * A reader's own refusal — THROWN, not returned, because the report's three
4
+ * counts (`InterchangeReport`) cannot say "this is not a file I can read": a
5
+ * report of three zeroes would claim an empty document where there was none
6
+ * (see `importInterchangeFile`, "Failure is an exception, and it says which
7
+ * one", `interchange-import.ts`).
8
+ *
9
+ * Carries the reader's own English sentence as `Error.message`, so every
10
+ * existing `catch` site that only ever did `error.message` keeps reading
11
+ * exactly what it read before — plus the same optional key/params pair
12
+ * {@link InterchangeNote} carries, on the same seam: a reader has no `std`
13
+ * (`docs/adr/0012`, P3) and cannot translate its own refusal, so the catch
14
+ * site that DOES have one (`importInterchangeFile`) resolves it exactly as
15
+ * `remarkLine` resolves a note.
16
+ *
17
+ * Optional and additive: a reader that still throws a plain `Error` (or any
18
+ * other capability's failure) is caught exactly as before — this class only
19
+ * gives the catch site a SECOND thing to check, never a first requirement.
20
+ */
21
+ export class InterchangeImportError extends Error {
22
+ constructor(message, options) {
23
+ super(message);
24
+ this.name = 'InterchangeImportError';
25
+ this.messageKey = options?.messageKey;
26
+ this.messageParams = options?.messageParams;
27
+ }
28
+ }
2
29
  /** The separator the triple is built from, and therefore reserved in its parts. */
3
30
  const ID_SEPARATOR = ':';
4
31
  /** The one way to spell a capability's id. */
@@ -0,0 +1,81 @@
1
+ import { type ChromeWording, type FrameworkElementEvent, type ToolbarAction } from '../../affine-shared/services/index.js';
2
+ import type { BlockStdScope, CommandOwner } from '../../std/index.js';
3
+ import { type TemplateResult } from 'lit';
4
+ /**
5
+ * The legend BUTTON — one factory and one emitter for every framework that has
6
+ * a legend, where there were seven copies of the same twenty lines.
7
+ *
8
+ * The legend deliberately stays a BUTTON and never becomes a command (PO
9
+ * arbitration of 27/08/2026, R6 of `docs/add-a-framework/02-framework-rules.md`):
10
+ * generating one belongs to a board you have SELECTED and to nothing else, so
11
+ * it is absent from the catalogue, the palette and Settings › Shortcuts — and
12
+ * the command registry's per-framework counts must not move because of it.
13
+ *
14
+ * The cost of staying outside `runCommand` is that the telemetry it owes is
15
+ * emitted by hand. {@link trackLegendCreated} is where, once, so the wire
16
+ * values cannot drift apart across seven files again.
17
+ */
18
+ /**
19
+ * The HISTORICAL PostHog value of the `framework` dimension — `context-map`,
20
+ * not `ddd-context-map`, and `event-storming`, not `ddd-event-storming`. Taken
21
+ * from the event's own closed union rather than restated, so a framework that
22
+ * never joined the taxonomy cannot be passed here by mistake.
23
+ */
24
+ export type LegendFramework = FrameworkElementEvent['framework'];
25
+ /**
26
+ * Contextual-toolbar glyph — "generate the legend of what is on this board".
27
+ * One icon because it is one gesture; the Core Domain chart has drawn this exact
28
+ * box-and-rows since its legend button shipped and the others borrowed it.
29
+ *
30
+ * `html` rather than `svg`: a toolbar action's `icon` is rendered as a
31
+ * standalone template, unlike the senior-button glyphs that are interpolated
32
+ * into an outer `<svg>`.
33
+ */
34
+ export declare const legendIcon: TemplateResult<1>;
35
+ /**
36
+ * The ONE `FrameworkLegendCreated` emission, with the wire values every
37
+ * framework's own button has been sending.
38
+ *
39
+ * `framework` is the HISTORICAL PostHog value (`FrameworkDescriptor.
40
+ * telemetryKey`): `context-map`, not `ddd-context-map`. It is a parameter and
41
+ * not derived from anything, because the two spellings differ for three of the
42
+ * eight frameworks and a prefix rule would quietly rename a metric.
43
+ */
44
+ export declare function trackLegendCreated(std: BlockStdScope, framework: LegendFramework, module: string): void;
45
+ export interface LegendToolbarActionOptions<M extends {
46
+ xywh: string;
47
+ }> {
48
+ /**
49
+ * Sort key inside the row, and NOT a constant across frameworks: the toolbar
50
+ * orders lexicographically by id, so a legend that must land after "remove a
51
+ * lane" is `c.legend` while C4's is `b.legend` and Wardley's `d.legend`.
52
+ * Defaults to `b.legend`, the commonest.
53
+ */
54
+ id?: string;
55
+ /** The board element this button documents — how it finds it in the selection. */
56
+ Model: abstract new (...args: any[]) => M;
57
+ /** Whose commands the rows are derived from. See {@link createBoardLegend}. */
58
+ owner: CommandOwner;
59
+ /** The HISTORICAL telemetry value. See {@link trackLegendCreated}. */
60
+ framework: LegendFramework;
61
+ /**
62
+ * The `module` dimension. Defaults to `` `${framework} toolbar` ``, which is
63
+ * what six of the seven buttons send; UML's is `uml toolbox` and says so.
64
+ */
65
+ module?: string;
66
+ tooltipWording?: ChromeWording;
67
+ icon?: TemplateResult;
68
+ }
69
+ /**
70
+ * The shared legend entry of a board's contextual toolbar.
71
+ *
72
+ * Registered by each framework in its OWN flag-gated module
73
+ * (`custom:affine:surface:<board>`), merged with `validationToolbarConfig`'s
74
+ * actions: a flavour may carry exactly one toolbar module, and generating a
75
+ * legend is tooling a flag may take away. What the gesture already WROTE is
76
+ * document content and keeps being painted with the flag off — the box is made
77
+ * of plain shapes, text and the framework's own always-on renderers.
78
+ */
79
+ export declare function legendToolbarAction<M extends {
80
+ xywh: string;
81
+ }>({ id, Model, owner, framework, module, tooltipWording, icon, }: LegendToolbarActionOptions<M>): ToolbarAction;