@formicoidea/labre-core 0.31.0 → 0.33.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 (637) hide show
  1. package/dist/_pkgs/affine-block-attachment/attachment-block.js +1 -1
  2. package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
  3. package/dist/_pkgs/affine-block-callout/callout-block.js +26 -4
  4. package/dist/_pkgs/affine-block-callout/callout-keymap.js +59 -19
  5. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.d.ts +20 -0
  6. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.js +60 -0
  7. package/dist/_pkgs/affine-block-callout/commands/split-callout.d.ts +17 -0
  8. package/dist/_pkgs/affine-block-callout/commands/split-callout.js +42 -0
  9. package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +9 -6
  10. package/dist/_pkgs/affine-block-callout/emoji-margin.d.ts +9 -0
  11. package/dist/_pkgs/affine-block-callout/emoji-margin.js +36 -0
  12. package/dist/_pkgs/affine-block-callout/emoji-menu.d.ts +5 -1
  13. package/dist/_pkgs/affine-block-callout/emoji-menu.js +5 -0
  14. package/dist/_pkgs/affine-block-code/code-block-inline.js +1 -1
  15. package/dist/_pkgs/affine-block-code/code-block.d.ts +14 -0
  16. package/dist/_pkgs/affine-block-code/code-block.js +44 -6
  17. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.d.ts +2 -0
  18. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +23 -14
  19. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.d.ts +16 -0
  20. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.js +93 -0
  21. package/dist/_pkgs/affine-block-code/code-toolbar/config.js +54 -5
  22. package/dist/_pkgs/affine-block-code/code-toolbar/index.js +1 -1
  23. package/dist/_pkgs/affine-block-code/effects.d.ts +2 -0
  24. package/dist/_pkgs/affine-block-code/effects.js +2 -0
  25. package/dist/_pkgs/affine-block-code/highlight/affine-code-unit.js +6 -1
  26. package/dist/_pkgs/affine-block-code/index.d.ts +1 -0
  27. package/dist/_pkgs/affine-block-code/index.js +1 -0
  28. package/dist/_pkgs/affine-block-code/line-numbers.d.ts +25 -0
  29. package/dist/_pkgs/affine-block-code/line-numbers.js +27 -0
  30. package/dist/_pkgs/affine-block-code/styles.js +31 -0
  31. package/dist/_pkgs/affine-block-data-view/data-view-block.js +1 -0
  32. package/dist/_pkgs/affine-block-database/components/title/index.js +4 -1
  33. package/dist/_pkgs/affine-block-database/configs/slash-menu.js +28 -1
  34. package/dist/_pkgs/affine-block-database/data-source.js +1 -2
  35. package/dist/_pkgs/affine-block-database/database-block.js +13 -0
  36. package/dist/_pkgs/affine-block-database/external-data-source.js +1 -1
  37. package/dist/_pkgs/affine-block-database/properties/paste-url.d.ts +24 -0
  38. package/dist/_pkgs/affine-block-database/properties/paste-url.js +98 -0
  39. package/dist/_pkgs/affine-block-database/properties/rich-text/cell-renderer.js +9 -19
  40. package/dist/_pkgs/affine-block-database/properties/title/text.js +20 -25
  41. package/dist/_pkgs/affine-block-database/views/index.js +1 -0
  42. package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +11 -1
  43. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.d.ts +3 -0
  44. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +48 -1
  45. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.d.ts +17 -0
  46. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.js +24 -0
  47. package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-service.js +1 -1
  48. package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/toolbar.js +2 -2
  49. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.d.ts +9 -0
  50. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.js +10 -0
  51. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/toolbar.js +1 -1
  52. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +8 -4
  53. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/utils.js +1 -1
  54. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/configs/toolbar.js +1 -1
  55. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts +4 -0
  56. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +23 -4
  57. package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
  58. package/dist/_pkgs/affine-block-frame/frame-manager.js +34 -2
  59. package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
  60. package/dist/_pkgs/affine-block-image/components/page-image-block.js +1 -1
  61. package/dist/_pkgs/affine-block-image/image-edgeless-block.js +1 -1
  62. package/dist/_pkgs/affine-block-latex/styles.js +6 -1
  63. package/dist/_pkgs/affine-block-list/utils/forward-delete.js +1 -1
  64. package/dist/_pkgs/affine-block-note/commands/select-block.js +1 -1
  65. package/dist/_pkgs/affine-block-note/commands/select-blocks-between.js +1 -1
  66. package/dist/_pkgs/affine-block-note/move-block.js +1 -1
  67. package/dist/_pkgs/affine-block-note/note-edgeless-block.d.ts +9 -0
  68. package/dist/_pkgs/affine-block-note/note-edgeless-block.js +29 -1
  69. package/dist/_pkgs/affine-block-paragraph/utils/forward-delete.js +2 -2
  70. package/dist/_pkgs/affine-block-paragraph/utils/merge-with-prev.js +1 -1
  71. package/dist/_pkgs/affine-block-root/commands/pivot-commands.d.ts +37 -0
  72. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +168 -0
  73. package/dist/_pkgs/affine-block-root/commands/reading-commands.d.ts +23 -0
  74. package/dist/_pkgs/affine-block-root/commands/reading-commands.js +107 -0
  75. package/dist/_pkgs/affine-block-root/commands/tag-commands.d.ts +47 -0
  76. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +159 -0
  77. package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -0
  78. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +10 -3
  79. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/render-linked-doc.js +1 -1
  80. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +27 -2
  81. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +11 -2
  82. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-service.js +14 -0
  83. package/dist/_pkgs/affine-block-root/edgeless/index.d.ts +1 -0
  84. package/dist/_pkgs/affine-block-root/edgeless/index.js +1 -0
  85. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.d.ts +21 -0
  86. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.js +34 -0
  87. package/dist/_pkgs/affine-block-root/edgeless/utils/clipboard-utils.js +1 -1
  88. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.d.ts +7 -1
  89. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.js +11 -2
  90. package/dist/_pkgs/affine-block-root/index.d.ts +4 -1
  91. package/dist/_pkgs/affine-block-root/index.js +4 -1
  92. package/dist/_pkgs/affine-block-root/keyboard/commands.d.ts +2 -0
  93. package/dist/_pkgs/affine-block-root/keyboard/commands.js +147 -0
  94. package/dist/_pkgs/affine-block-root/view.js +13 -4
  95. package/dist/_pkgs/affine-block-surface/adapters/markdown/element-adapter/type.js +1 -1
  96. package/dist/_pkgs/affine-block-surface/adapters/plain-text/element-adapter/type.js +1 -1
  97. package/dist/_pkgs/affine-block-surface/commands/reassociate-connectors.js +0 -1
  98. package/dist/_pkgs/affine-block-surface/effects.js +6 -0
  99. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
  100. package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
  101. package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
  102. package/dist/_pkgs/affine-block-surface/extensions/audit.js +489 -0
  103. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
  104. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +37 -5
  105. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +133 -0
  106. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +327 -0
  107. package/dist/_pkgs/affine-block-surface/extensions/element-renderer.js +1 -1
  108. package/dist/_pkgs/affine-block-surface/extensions/export-manager/export-manager.js +1 -1
  109. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +17 -0
  110. package/dist/_pkgs/affine-block-surface/extensions/index.js +17 -0
  111. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +172 -0
  112. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +393 -0
  113. package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +306 -0
  114. package/dist/_pkgs/affine-block-surface/extensions/interchange.js +64 -0
  115. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.d.ts +146 -0
  116. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +528 -0
  117. package/dist/_pkgs/affine-block-surface/extensions/map-quality.d.ts +109 -0
  118. package/dist/_pkgs/affine-block-surface/extensions/map-quality.js +84 -0
  119. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.d.ts +248 -0
  120. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.js +248 -0
  121. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.d.ts +15 -0
  122. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +158 -0
  123. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +145 -0
  124. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +588 -0
  125. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +494 -0
  126. package/dist/_pkgs/affine-block-surface/extensions/reading.js +767 -0
  127. package/dist/_pkgs/affine-block-surface/extensions/spotlight.d.ts +45 -0
  128. package/dist/_pkgs/affine-block-surface/extensions/spotlight.js +177 -0
  129. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.d.ts +107 -0
  130. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.js +958 -0
  131. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.d.ts +10 -0
  132. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +295 -0
  133. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.d.ts +27 -0
  134. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +361 -0
  135. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +2129 -0
  136. package/dist/_pkgs/affine-block-surface/extensions/validation.js +4620 -0
  137. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +330 -0
  138. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +1004 -0
  139. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.d.ts +80 -0
  140. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.js +123 -0
  141. package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +610 -0
  142. package/dist/_pkgs/affine-block-surface/framework-background/def.js +206 -0
  143. package/dist/_pkgs/affine-block-surface/framework-background/facts.d.ts +188 -0
  144. package/dist/_pkgs/affine-block-surface/framework-background/facts.js +284 -0
  145. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +5 -0
  146. package/dist/_pkgs/affine-block-surface/framework-background/index.js +5 -0
  147. package/dist/_pkgs/affine-block-surface/framework-background/interaction.d.ts +12 -0
  148. package/dist/_pkgs/affine-block-surface/framework-background/interaction.js +24 -0
  149. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +99 -0
  150. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +193 -0
  151. package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
  152. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +399 -0
  153. package/dist/_pkgs/affine-block-surface/index.d.ts +1 -0
  154. package/dist/_pkgs/affine-block-surface/index.js +1 -0
  155. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +69 -3
  156. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +333 -44
  157. package/dist/_pkgs/affine-block-surface/renderer/dom-renderer.js +18 -2
  158. package/dist/_pkgs/affine-block-surface/renderer/overlay.js +1 -1
  159. package/dist/_pkgs/affine-block-surface/tool/default-tool.js +8 -0
  160. package/dist/_pkgs/affine-block-surface/utils/font.js +9 -3
  161. package/dist/_pkgs/affine-block-surface/view.d.ts +17 -0
  162. package/dist/_pkgs/affine-block-surface/view.js +57 -2
  163. package/dist/_pkgs/affine-block-surface-ref/portal/note.js +2 -2
  164. package/dist/_pkgs/affine-block-table/commands.js +1 -1
  165. package/dist/_pkgs/affine-block-table/selection-controller.d.ts +6 -0
  166. package/dist/_pkgs/affine-block-table/selection-controller.js +24 -1
  167. package/dist/_pkgs/affine-block-table/table-block.js +8 -2
  168. package/dist/_pkgs/affine-block-table/table-cell.js +5 -6
  169. package/dist/_pkgs/affine-block-table/table-keymap.d.ts +18 -0
  170. package/dist/_pkgs/affine-block-table/table-keymap.js +41 -0
  171. package/dist/_pkgs/affine-block-table/utils.d.ts +7 -0
  172. package/dist/_pkgs/affine-block-table/utils.js +12 -0
  173. package/dist/_pkgs/affine-block-table/view.js +2 -0
  174. package/dist/_pkgs/affine-components/caption/captioned-block-component.js +2 -1
  175. package/dist/_pkgs/affine-components/context-menu/button.d.ts +7 -0
  176. package/dist/_pkgs/affine-components/context-menu/button.js +7 -2
  177. package/dist/_pkgs/affine-components/context-menu/input.d.ts +4 -0
  178. package/dist/_pkgs/affine-components/context-menu/input.js +12 -0
  179. package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +2 -0
  180. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +8 -1
  181. package/dist/_pkgs/affine-components/context-menu/sub-menu.js +3 -0
  182. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +1 -1
  183. package/dist/_pkgs/affine-components/embed-card-modal/embed-card-edit-modal.js +1 -1
  184. package/dist/_pkgs/affine-components/filterable-list/styles.js +1 -1
  185. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  186. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  187. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +28 -0
  188. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +231 -0
  189. package/dist/_pkgs/affine-components/icon-picker/emoji-data.d.ts +40 -0
  190. package/dist/_pkgs/affine-components/icon-picker/emoji-data.js +99 -0
  191. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +32 -0
  192. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +276 -0
  193. package/dist/_pkgs/affine-components/icon-picker/icon-data.d.ts +34 -0
  194. package/dist/_pkgs/affine-components/icon-picker/icon-data.js +83 -0
  195. package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +39 -0
  196. package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +233 -0
  197. package/dist/_pkgs/affine-components/icon-picker/index.d.ts +8 -0
  198. package/dist/_pkgs/affine-components/icon-picker/index.js +15 -0
  199. package/dist/_pkgs/affine-components/icon-picker/recent-store.d.ts +8 -0
  200. package/dist/_pkgs/affine-components/icon-picker/recent-store.js +41 -0
  201. package/dist/_pkgs/affine-components/icon-picker/styles.d.ts +5 -0
  202. package/dist/_pkgs/affine-components/icon-picker/styles.js +166 -0
  203. package/dist/_pkgs/affine-components/icon-picker/types.d.ts +22 -0
  204. package/dist/_pkgs/affine-components/icon-picker/types.js +10 -0
  205. package/dist/_pkgs/affine-components/icons/text.js +426 -426
  206. package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.d.ts +1 -0
  207. package/dist/_pkgs/affine-components/peek/peekable.js +1 -1
  208. package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
  209. package/dist/_pkgs/affine-components/toolbar/index.d.ts +1 -0
  210. package/dist/_pkgs/affine-components/toolbar/index.js +1 -0
  211. package/dist/_pkgs/affine-components/toolbar/menu-button.js +2 -1
  212. package/dist/_pkgs/affine-components/toolbar/picker-menu.d.ts +55 -0
  213. package/dist/_pkgs/affine-components/toolbar/picker-menu.js +47 -0
  214. package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
  215. package/dist/_pkgs/affine-foundation/view.js +11 -2
  216. package/dist/_pkgs/affine-fragment-frame-panel/body/frame-panel-body.js +2 -2
  217. package/dist/_pkgs/affine-fragment-frame-panel/header/frame-panel-header.js +2 -2
  218. package/dist/_pkgs/affine-fragment-frame-panel/header/frames-setting-menu.js +1 -1
  219. package/dist/_pkgs/affine-fragment-outline/mobile-outline-panel.js +1 -1
  220. package/dist/_pkgs/affine-gfx-brush/index.d.ts +1 -0
  221. package/dist/_pkgs/affine-gfx-brush/index.js +1 -0
  222. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.d.ts +1 -0
  223. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.js +11 -0
  224. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.d.ts +1 -0
  225. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.js +11 -0
  226. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.d.ts +2 -0
  227. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.js +2 -0
  228. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.d.ts +14 -0
  229. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.js +54 -0
  230. package/dist/_pkgs/affine-gfx-brush/renderer/index.d.ts +1 -0
  231. package/dist/_pkgs/affine-gfx-brush/renderer/index.js +4 -0
  232. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/pen-tool-button.js +1 -1
  233. package/dist/_pkgs/affine-gfx-brush/view.d.ts +14 -0
  234. package/dist/_pkgs/affine-gfx-brush/view.js +29 -3
  235. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +39 -16
  236. package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +26 -1
  237. package/dist/_pkgs/affine-gfx-connector/connector-tool.js +12 -3
  238. package/dist/_pkgs/affine-gfx-connector/connector-watcher.js +1 -4
  239. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
  240. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +282 -0
  241. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +65 -0
  242. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +395 -0
  243. package/dist/_pkgs/affine-gfx-connector/direction/index.d.ts +4 -0
  244. package/dist/_pkgs/affine-gfx-connector/direction/index.js +4 -0
  245. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +72 -0
  246. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +185 -0
  247. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.d.ts +69 -0
  248. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.js +66 -0
  249. package/dist/_pkgs/affine-gfx-connector/effects.d.ts +2 -0
  250. package/dist/_pkgs/affine-gfx-connector/effects.js +2 -0
  251. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +78 -41
  252. package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +1 -1
  253. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +1 -1
  254. package/dist/_pkgs/affine-gfx-connector/index.d.ts +1 -0
  255. package/dist/_pkgs/affine-gfx-connector/index.js +1 -0
  256. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +50 -0
  257. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +68 -2
  258. package/dist/_pkgs/affine-gfx-connector/view.js +16 -0
  259. package/dist/_pkgs/affine-gfx-group/command/group-api.js +150 -62
  260. package/dist/_pkgs/affine-gfx-group/text/edgeless-group-title-editor.js +4 -1
  261. package/dist/_pkgs/affine-gfx-mindmap/adapter/markdown/index.js +1 -1
  262. package/dist/_pkgs/affine-gfx-mindmap/adapter/utils.js +1 -1
  263. package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +583 -4
  264. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-menu.js +23 -23
  265. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-tool-button.js +5 -1
  266. package/dist/_pkgs/affine-gfx-mindmap/view/utils.js +1 -1
  267. package/dist/_pkgs/affine-gfx-note/overlay/overlay.js +1 -1
  268. package/dist/_pkgs/affine-gfx-note/toolbar/note-senior-button.js +1 -1
  269. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.d.ts +16 -0
  270. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.js +102 -32
  271. package/dist/_pkgs/affine-gfx-shape/commands.d.ts +2 -0
  272. package/dist/_pkgs/affine-gfx-shape/commands.js +33 -0
  273. package/dist/_pkgs/affine-gfx-shape/consts.js +1 -1
  274. package/dist/_pkgs/affine-gfx-shape/draggable/shape-draggable.js +1 -1
  275. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/polygon.js +17 -9
  276. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/utils.js +8 -3
  277. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
  278. package/dist/_pkgs/affine-gfx-shape/element-view.js +19 -12
  279. package/dist/_pkgs/affine-gfx-shape/index.d.ts +1 -1
  280. package/dist/_pkgs/affine-gfx-shape/index.js +1 -1
  281. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +1 -1
  282. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-vertex-editing-overlay.js +12 -7
  283. package/dist/_pkgs/affine-gfx-shape/overlay/shape-overlay.js +1 -1
  284. package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +4 -2
  285. package/dist/_pkgs/affine-gfx-shape/shape-tool.js +1 -1
  286. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.d.ts +26 -0
  287. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.js +124 -15
  288. package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
  289. package/dist/_pkgs/affine-gfx-template/builtin/other.js +66 -17
  290. package/dist/_pkgs/affine-gfx-template/toolbar/overlay-scrollbar.js +1 -1
  291. package/dist/_pkgs/affine-gfx-template/toolbar/template-panel.js +1 -1
  292. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.d.ts +2 -0
  293. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.js +18 -1
  294. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +9 -5
  295. package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +1 -1
  296. package/dist/_pkgs/affine-inline-latex/command.js +46 -26
  297. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.d.ts +10 -0
  298. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +23 -0
  299. package/dist/_pkgs/affine-inline-link/command.js +1 -1
  300. package/dist/_pkgs/affine-inline-link/link-node/affine-link.js +4 -1
  301. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.d.ts +3 -0
  302. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.js +29 -1
  303. package/dist/_pkgs/affine-inline-preset/command/format-block.js +1 -1
  304. package/dist/_pkgs/affine-inline-preset/command/format-native.js +2 -2
  305. package/dist/_pkgs/affine-inline-preset/command/format-text.js +1 -1
  306. package/dist/_pkgs/affine-inline-preset/inline-spec.js +1 -1
  307. package/dist/_pkgs/affine-inline-reference/reference-node/reference-node.js +1 -1
  308. package/dist/_pkgs/affine-model/blocks/code/code-model.d.ts +1 -0
  309. package/dist/_pkgs/affine-model/blocks/code/code-model.js +1 -0
  310. package/dist/_pkgs/affine-model/elements/bpmn/node.d.ts +40 -7
  311. package/dist/_pkgs/affine-model/elements/bpmn/node.js +4 -2
  312. package/dist/_pkgs/affine-model/elements/bpmn/pool.d.ts +74 -17
  313. package/dist/_pkgs/affine-model/elements/bpmn/pool.js +55 -26
  314. package/dist/_pkgs/affine-model/elements/c4/board.d.ts +88 -0
  315. package/dist/_pkgs/affine-model/elements/c4/board.js +128 -0
  316. package/dist/_pkgs/affine-model/elements/c4/boundary.d.ts +63 -0
  317. package/dist/_pkgs/affine-model/elements/c4/boundary.js +134 -0
  318. package/dist/_pkgs/affine-model/elements/c4/index.d.ts +3 -0
  319. package/dist/_pkgs/affine-model/elements/c4/index.js +3 -0
  320. package/dist/_pkgs/affine-model/elements/c4/node.d.ts +97 -0
  321. package/dist/_pkgs/affine-model/elements/c4/node.js +130 -0
  322. package/dist/_pkgs/affine-model/elements/connector/connector.js +25 -1
  323. package/dist/_pkgs/affine-model/elements/context-map/context-map.d.ts +27 -0
  324. package/dist/_pkgs/affine-model/elements/context-map/context-map.js +94 -0
  325. package/dist/_pkgs/affine-model/elements/context-map/index.d.ts +1 -0
  326. package/dist/_pkgs/affine-model/elements/context-map/index.js +1 -0
  327. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +34 -17
  328. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +28 -26
  329. package/dist/_pkgs/affine-model/elements/edgy/board.d.ts +32 -0
  330. package/dist/_pkgs/affine-model/elements/edgy/board.js +112 -0
  331. package/dist/_pkgs/affine-model/elements/edgy/facets.d.ts +12 -0
  332. package/dist/_pkgs/affine-model/elements/edgy/facets.js +25 -1
  333. package/dist/_pkgs/affine-model/elements/edgy/index.d.ts +1 -0
  334. package/dist/_pkgs/affine-model/elements/edgy/index.js +1 -0
  335. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +36 -0
  336. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +103 -0
  337. package/dist/_pkgs/affine-model/elements/event-storming/index.d.ts +1 -0
  338. package/dist/_pkgs/affine-model/elements/event-storming/index.js +1 -0
  339. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +42 -0
  340. package/dist/_pkgs/affine-model/elements/framework-background/background.js +42 -0
  341. package/dist/_pkgs/affine-model/elements/framework-background/index.d.ts +1 -0
  342. package/dist/_pkgs/affine-model/elements/framework-background/index.js +1 -0
  343. package/dist/_pkgs/affine-model/elements/index.d.ts +14 -1
  344. package/dist/_pkgs/affine-model/elements/index.js +4 -0
  345. package/dist/_pkgs/affine-model/elements/mindmap/mindmap.js +8 -3
  346. package/dist/_pkgs/affine-model/elements/mindmap/style.d.ts +10 -0
  347. package/dist/_pkgs/affine-model/elements/mindmap/style.js +8 -0
  348. package/dist/_pkgs/affine-model/elements/shape/api/polygon.js +2 -8
  349. package/dist/_pkgs/affine-model/elements/wardley/wardley.d.ts +21 -29
  350. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +41 -48
  351. package/dist/_pkgs/affine-shared/adapters/html/block-adapter.js +1 -1
  352. package/dist/_pkgs/affine-shared/adapters/markdown/block-adapter.js +1 -1
  353. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
  354. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +161 -3
  355. package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
  356. package/dist/_pkgs/affine-shared/adapters/notion-html/block-adapter.js +1 -1
  357. package/dist/_pkgs/affine-shared/adapters/notion-html/delta-converter.js +1 -1
  358. package/dist/_pkgs/affine-shared/adapters/plain-text/block-adapter.js +1 -1
  359. package/dist/_pkgs/affine-shared/adapters/plain-text/delta-converter.js +1 -1
  360. package/dist/_pkgs/affine-shared/adapters/types/delta-converter.d.ts +1 -0
  361. package/dist/_pkgs/affine-shared/adapters/utils/color.d.ts +24 -0
  362. package/dist/_pkgs/affine-shared/adapters/utils/color.js +283 -0
  363. package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
  364. package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
  365. package/dist/_pkgs/affine-shared/commands/block-crud/get-selected-blocks.js +10 -2
  366. package/dist/_pkgs/affine-shared/commands/model-crud/draft-selected-models.js +1 -1
  367. package/dist/_pkgs/affine-shared/commands/selection/focus-block-end.js +1 -1
  368. package/dist/_pkgs/affine-shared/commands/selection/focus-block-start.js +1 -1
  369. package/dist/_pkgs/affine-shared/consts/index.d.ts +10 -0
  370. package/dist/_pkgs/affine-shared/consts/index.js +10 -0
  371. package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.d.ts +55 -0
  372. package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.js +35 -0
  373. package/dist/_pkgs/affine-shared/services/audit-service.d.ts +311 -0
  374. package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
  375. package/dist/_pkgs/affine-shared/services/command-usage-service.d.ts +31 -0
  376. package/dist/_pkgs/affine-shared/services/command-usage-service.js +109 -0
  377. package/dist/_pkgs/affine-shared/services/comment-service/block-comment-manager.js +1 -1
  378. package/dist/_pkgs/affine-shared/services/doc-display-meta-service.js +1 -1
  379. package/dist/_pkgs/affine-shared/services/edit-props-store.d.ts +7 -0
  380. package/dist/_pkgs/affine-shared/services/edit-props-store.js +11 -0
  381. package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.js +1 -1
  382. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.d.ts +26 -1
  383. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.js +124 -7
  384. package/dist/_pkgs/affine-shared/services/index.d.ts +7 -0
  385. package/dist/_pkgs/affine-shared/services/index.js +7 -0
  386. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
  387. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +312 -0
  388. package/dist/_pkgs/affine-shared/services/pivot-properties-service.d.ts +217 -0
  389. package/dist/_pkgs/affine-shared/services/pivot-properties-service.js +114 -0
  390. package/dist/_pkgs/affine-shared/services/telemetry-service/code-block.d.ts +1 -1
  391. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +255 -1
  392. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  393. package/dist/_pkgs/affine-shared/services/telemetry-service/types.d.ts +6 -1
  394. package/dist/_pkgs/affine-shared/services/toolbar-service/action.d.ts +10 -0
  395. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  396. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  397. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.d.ts +134 -0
  398. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.js +146 -0
  399. package/dist/_pkgs/affine-shared/services/toolbar-service/registry.d.ts +44 -0
  400. package/dist/_pkgs/affine-shared/services/toolbar-service/registry.js +161 -3
  401. package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +68 -0
  402. package/dist/_pkgs/affine-shared/services/translation-service/index.js +39 -0
  403. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +155 -0
  404. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +256 -0
  405. package/dist/_pkgs/affine-shared/test-utils/affine-template.js +1 -1
  406. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.d.ts +4 -0
  407. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.js +58 -2
  408. package/dist/_pkgs/affine-shared/utils/dom/viewport.d.ts +60 -0
  409. package/dist/_pkgs/affine-shared/utils/dom/viewport.js +58 -0
  410. package/dist/_pkgs/affine-shared/utils/edgeless.js +1 -1
  411. package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +34 -0
  412. package/dist/_pkgs/affine-shared/utils/file/filesys.js +48 -7
  413. package/dist/_pkgs/affine-shared/utils/print-to-pdf.d.ts +21 -0
  414. package/dist/_pkgs/affine-shared/utils/print-to-pdf.js +166 -32
  415. package/dist/_pkgs/affine-shared/utils/zod-schema.d.ts +7 -0
  416. package/dist/_pkgs/affine-shared/utils/zod-schema.js +25 -1
  417. package/dist/_pkgs/affine-widget-drag-handle/utils.js +1 -1
  418. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.d.ts +19 -10
  419. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.js +122 -23
  420. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.d.ts +2 -0
  421. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.js +25 -4
  422. package/dist/_pkgs/affine-widget-edgeless-auto-connect/index.js +1 -1
  423. package/dist/_pkgs/affine-widget-edgeless-dragging-area/edgeless-dragging-area-rect.js +1 -1
  424. package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +10 -5
  425. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.d.ts +15 -1
  426. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +37 -32
  427. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +5 -4
  428. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-selected-rect.js +19 -9
  429. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.d.ts +16 -2
  430. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +19 -2
  431. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.d.ts +14 -0
  432. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.js +40 -0
  433. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +158 -0
  434. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +572 -0
  435. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.d.ts +46 -0
  436. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.js +66 -0
  437. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.d.ts +13 -0
  438. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.js +50 -0
  439. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.d.ts +6 -0
  440. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.js +15 -5
  441. package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.d.ts +2 -0
  442. package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.js +2 -0
  443. package/dist/_pkgs/affine-widget-edgeless-toolbar/extension/index.d.ts +7 -0
  444. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +5 -0
  445. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +5 -0
  446. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +57 -0
  447. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +140 -0
  448. package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +9 -0
  449. package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +4 -1
  450. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  451. package/dist/_pkgs/affine-widget-keyboard-toolbar/keyboard-tool-panel.js +1 -1
  452. package/dist/_pkgs/affine-widget-linked-doc/import-doc/import-doc.js +1 -1
  453. package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +2 -15
  454. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.d.ts +10 -1
  455. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +133 -6
  456. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.d.ts +10 -0
  457. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.js +120 -3
  458. package/dist/_pkgs/affine-widget-linked-doc/utils.d.ts +12 -0
  459. package/dist/_pkgs/affine-widget-linked-doc/utils.js +33 -0
  460. package/dist/_pkgs/affine-widget-page-dragging-area/index.js +1 -1
  461. package/dist/_pkgs/affine-widget-remote-selection/doc/doc-remote-selection.js +1 -1
  462. package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +6 -4
  463. package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +8 -4
  464. package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +9 -0
  465. package/dist/_pkgs/affine-widget-slash-menu/utils.js +24 -0
  466. package/dist/_pkgs/affine-widget-toolbar/toolbar.d.ts +6 -0
  467. package/dist/_pkgs/affine-widget-toolbar/toolbar.js +40 -8
  468. package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
  469. package/dist/_pkgs/affine-widget-toolbar/utils.js +744 -58
  470. package/dist/_pkgs/data-view/core/common/property-menu.js +3 -16
  471. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +4 -0
  472. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +28 -1
  473. package/dist/_pkgs/data-view/core/data-view.d.ts +3 -1
  474. package/dist/_pkgs/data-view/core/data-view.js +25 -3
  475. package/dist/_pkgs/data-view/core/detail/field.js +2 -2
  476. package/dist/_pkgs/data-view/core/detail/selection.d.ts +4 -2
  477. package/dist/_pkgs/data-view/core/detail/selection.js +23 -7
  478. package/dist/_pkgs/data-view/core/effect.js +2 -0
  479. package/dist/_pkgs/data-view/core/filter/eval.js +36 -23
  480. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.d.ts +7 -0
  481. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.js +12 -0
  482. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.d.ts +11 -0
  483. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.js +55 -0
  484. package/dist/_pkgs/data-view/core/group-by/define.d.ts +6 -0
  485. package/dist/_pkgs/data-view/core/group-by/define.js +114 -0
  486. package/dist/_pkgs/data-view/core/group-by/matcher.d.ts +7 -0
  487. package/dist/_pkgs/data-view/core/group-by/matcher.js +13 -0
  488. package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
  489. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.d.ts +9 -0
  490. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.js +97 -0
  491. package/dist/_pkgs/data-view/core/group-by/setting.js +86 -7
  492. package/dist/_pkgs/data-view/core/group-by/trait.d.ts +34 -0
  493. package/dist/_pkgs/data-view/core/group-by/trait.js +106 -10
  494. package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
  495. package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
  496. package/dist/_pkgs/data-view/property-presets/number/define.js +2 -1
  497. package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
  498. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.d.ts +70 -0
  499. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.js +449 -0
  500. package/dist/_pkgs/data-view/view-presets/calendar/define.d.ts +10 -0
  501. package/dist/_pkgs/data-view/view-presets/calendar/define.js +27 -0
  502. package/dist/_pkgs/data-view/view-presets/calendar/effect.d.ts +1 -0
  503. package/dist/_pkgs/data-view/view-presets/calendar/effect.js +4 -0
  504. package/dist/_pkgs/data-view/view-presets/calendar/index.d.ts +6 -0
  505. package/dist/_pkgs/data-view/view-presets/calendar/index.js +6 -0
  506. package/dist/_pkgs/data-view/view-presets/calendar/layout.d.ts +37 -0
  507. package/dist/_pkgs/data-view/view-presets/calendar/layout.js +138 -0
  508. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.d.ts +7 -0
  509. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.js +64 -0
  510. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.d.ts +32 -0
  511. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.js +159 -0
  512. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.d.ts +1 -0
  513. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.js +7 -0
  514. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.d.ts +1 -0
  515. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.js +28 -0
  516. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.d.ts +1 -0
  517. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.js +707 -0
  518. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.d.ts +89 -0
  519. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.js +849 -0
  520. package/dist/_pkgs/data-view/view-presets/calendar/renderer.d.ts +2 -0
  521. package/dist/_pkgs/data-view/view-presets/calendar/renderer.js +8 -0
  522. package/dist/_pkgs/data-view/view-presets/calendar/source.d.ts +8 -0
  523. package/dist/_pkgs/data-view/view-presets/calendar/source.js +3 -0
  524. package/dist/_pkgs/data-view/view-presets/calendar/types.d.ts +79 -0
  525. package/dist/_pkgs/data-view/view-presets/calendar/types.js +1 -0
  526. package/dist/_pkgs/data-view/view-presets/convert.js +28 -0
  527. package/dist/_pkgs/data-view/view-presets/effect.js +2 -0
  528. package/dist/_pkgs/data-view/view-presets/index.d.ts +2 -0
  529. package/dist/_pkgs/data-view/view-presets/index.js +3 -0
  530. package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +3 -1
  531. package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +2 -2
  532. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +18 -0
  533. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +36 -0
  534. package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +2 -2
  535. package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +11 -0
  536. package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +89 -4
  537. package/dist/_pkgs/data-view/view-presets/table/pc/cell.d.ts +3 -0
  538. package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +11 -2
  539. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.d.ts +1 -0
  540. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +39 -33
  541. package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +10 -0
  542. package/dist/_pkgs/data-view/view-presets/table/pc/group.js +86 -5
  543. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.d.ts +1 -0
  544. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +39 -33
  545. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
  546. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.d.ts +3 -0
  547. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +8 -0
  548. package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +3 -1
  549. package/dist/_pkgs/data-view/view-presets/table/utils.d.ts +3 -0
  550. package/dist/_pkgs/data-view/view-presets/table/utils.js +16 -1
  551. package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +3 -1
  552. package/dist/_pkgs/global/gfx/curve.js +4 -3
  553. package/dist/_pkgs/std/clipboard/clipboard.js +13 -3
  554. package/dist/_pkgs/std/clipboard/utils.d.ts +5 -0
  555. package/dist/_pkgs/std/clipboard/utils.js +10 -0
  556. package/dist/_pkgs/std/event/dispatcher.js +27 -1
  557. package/dist/_pkgs/std/event/keymap.js +16 -6
  558. package/dist/_pkgs/std/extension/command-registry.d.ts +475 -0
  559. package/dist/_pkgs/std/extension/command-registry.js +431 -0
  560. package/dist/_pkgs/std/extension/dnd/index.d.ts +1 -1
  561. package/dist/_pkgs/std/extension/index.d.ts +2 -0
  562. package/dist/_pkgs/std/extension/index.js +2 -0
  563. package/dist/_pkgs/std/extension/shortcut.js +2 -1
  564. package/dist/_pkgs/std/extension/translation-manifest.d.ts +49 -0
  565. package/dist/_pkgs/std/extension/translation-manifest.js +71 -0
  566. package/dist/_pkgs/std/gfx/grid.js +1 -1
  567. package/dist/_pkgs/std/gfx/index.d.ts +7 -3
  568. package/dist/_pkgs/std/gfx/index.js +6 -2
  569. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +6 -1
  570. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +8 -0
  571. package/dist/_pkgs/std/gfx/interactivity/manager.js +18 -0
  572. package/dist/_pkgs/std/gfx/layer.d.ts +1 -1
  573. package/dist/_pkgs/std/gfx/layer.js +1 -2
  574. package/dist/_pkgs/std/gfx/model/surface/decorators/field.js +9 -0
  575. package/dist/_pkgs/std/gfx/model/surface/decorators/index.d.ts +2 -2
  576. package/dist/_pkgs/std/gfx/model/surface/decorators/index.js +2 -2
  577. package/dist/_pkgs/std/gfx/model/surface/decorators/local.d.ts +14 -0
  578. package/dist/_pkgs/std/gfx/model/surface/decorators/local.js +22 -0
  579. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.d.ts +2 -0
  580. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.js +40 -1
  581. package/dist/_pkgs/std/gfx/model/surface/element-model.d.ts +442 -0
  582. package/dist/_pkgs/std/gfx/model/surface/element-model.js +510 -25
  583. package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +48 -0
  584. package/dist/_pkgs/std/gfx/model/surface/pivot.js +34 -0
  585. package/dist/_pkgs/std/gfx/model/surface/role.d.ts +153 -0
  586. package/dist/_pkgs/std/gfx/model/surface/role.js +117 -0
  587. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
  588. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +305 -17
  589. package/dist/_pkgs/std/gfx/model/surface/tags.d.ts +77 -0
  590. package/dist/_pkgs/std/gfx/model/surface/tags.js +246 -0
  591. package/dist/_pkgs/std/gfx/perf.d.ts +10 -0
  592. package/dist/_pkgs/std/gfx/perf.js +30 -0
  593. package/dist/_pkgs/std/gfx/selection.js +1 -1
  594. package/dist/_pkgs/std/gfx/tool/tool-controller.d.ts +13 -0
  595. package/dist/_pkgs/std/gfx/tool/tool-controller.js +26 -0
  596. package/dist/_pkgs/std/gfx/viewport.d.ts +12 -0
  597. package/dist/_pkgs/std/gfx/viewport.js +20 -2
  598. package/dist/_pkgs/std/inline/extensions/inline-manager.js +1 -1
  599. package/dist/_pkgs/std/inline/extensions/markdown-matcher.js +1 -1
  600. package/dist/_pkgs/std/inline/services/event.d.ts +2 -0
  601. package/dist/_pkgs/std/inline/services/event.js +96 -21
  602. package/dist/_pkgs/std/utils/layer.js +2 -6
  603. package/dist/_pkgs/std/utils/tree.d.ts +14 -0
  604. package/dist/_pkgs/std/utils/tree.js +59 -8
  605. package/dist/_pkgs/std/view/element/gfx-block-component.js +23 -13
  606. package/dist/_pkgs/store/extension/workspace/workspace-meta.d.ts +10 -0
  607. package/dist/_pkgs/store/model/block/flat-sync-controller.js +2 -12
  608. package/dist/_pkgs/store/model/store/crud.js +10 -4
  609. package/dist/_pkgs/store/reactive/flat-native-y/index.d.ts +1 -1
  610. package/dist/_pkgs/store/reactive/flat-native-y/index.js +24 -2
  611. package/dist/commands.d.ts +58 -0
  612. package/dist/commands.js +66 -0
  613. package/dist/extensions/command-telemetry.d.ts +21 -0
  614. package/dist/extensions/command-telemetry.js +89 -0
  615. package/dist/extensions/command-usage.d.ts +23 -0
  616. package/dist/extensions/command-usage.js +37 -0
  617. package/dist/extensions/store.d.ts +9 -4
  618. package/dist/extensions/store.js +27 -24
  619. package/dist/extensions/view.d.ts +9 -4
  620. package/dist/extensions/view.js +35 -8
  621. package/dist/flags.d.ts +98 -21
  622. package/dist/flags.js +103 -22
  623. package/dist/frameworks.d.ts +45 -0
  624. package/dist/frameworks.js +186 -0
  625. package/dist/schemas.d.ts +8 -5
  626. package/dist/schemas.js +28 -32
  627. package/dist/shortcuts.d.ts +16 -16
  628. package/dist/shortcuts.js +8 -36
  629. package/dist/translations.d.ts +56 -0
  630. package/dist/translations.js +200 -0
  631. package/package.json +16 -4
  632. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.d.ts +0 -8
  633. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.js +0 -48
  634. package/dist/_pkgs/affine-gfx-shape/shortcuts.d.ts +0 -6
  635. package/dist/_pkgs/affine-gfx-shape/shortcuts.js +0 -28
  636. package/dist/_pkgs/data-view/core/utils/cache.d.ts +0 -5
  637. package/dist/_pkgs/data-view/core/utils/cache.js +0 -28
@@ -0,0 +1,489 @@
1
+ /**
2
+ * `map.audit` — the command the **Labre Assistant** invokes to audit a
3
+ * framework map (PF14.1).
4
+ *
5
+ * ## Where the work happens, and where it does not
6
+ *
7
+ * The library does no auditing. It collects the FACTS of the board, hands them
8
+ * to the host's `AuditProvider` with the criteria the frameworks declared, and
9
+ * files whatever comes back into a signal nothing on the real-time path reads.
10
+ * If no provider is registered the command refuses cleanly and levels 1 and 2
11
+ * are exactly as they were.
12
+ *
13
+ * ## Three gates, and they are independent on purpose
14
+ *
15
+ * 1. **`ai-audit`** (`packages/affine/all/src/flags.ts`) — the capability
16
+ * switch. Off, `AuditViewExtension` is never registered, so the command is
17
+ * absent from the registry, from both manifests and from the keymap. Same
18
+ * contract as a block flag: it gates TOOLING and never data — nothing this
19
+ * command touches is persisted, so switching it off cannot lose anything
20
+ * even in principle.
21
+ * 2. **The framework's own flag** — the criteria are registered by the
22
+ * flag-gated view extension (`AuditCriterionExtension`), so a disabled
23
+ * Wardley contributes no criterion and an audit has nothing to ask about.
24
+ * 3. **The provider** — absent, the command is still enumerable but refuses.
25
+ * Per ADR 0008, injected-provider presence is deliberately NOT an
26
+ * `Availability` member; its assigned fallback is "displayed available,
27
+ * `run` degrades". Making it a fourth availability value would have meant
28
+ * reopening a closed union for a state the caller can simply be told about.
29
+ */
30
+ import { getAuditCriteria, requestAudit, TelemetryProvider, } from '../../affine-shared/services/index.js';
31
+ import { GfxControllerIdentifier, GfxPrimitiveElementModel, roleIsA, } from '../../std/gfx/index.js';
32
+ import { z } from 'zod';
33
+ import { backgroundInstanceZones, backgroundPlot, } from '../framework-background/def.js';
34
+ import { backgroundAxisFacts } from '../framework-background/facts.js';
35
+ import { ValidationManager, ValidationRuleIdentifier, } from './validation.js';
36
+ /**
37
+ * `map.audit` takes no required parameter: the assistant audits what is
38
+ * selected. `criterionIds` narrows the run to a subset — an assistant
39
+ * re-checking one criterion after a fix should not pay for the other two — and
40
+ * an EMPTY array means "these zero criteria", i.e. nothing to do, never "all of
41
+ * them". Same reading as `pivot.bind`'s `elementIds`, for the same reason: a
42
+ * caller that filtered a list and came up empty must not have its request
43
+ * silently widened.
44
+ */
45
+ export const auditParams = z.object({
46
+ criterionIds: z.array(z.string()).optional(),
47
+ });
48
+ /**
49
+ * The rules registered in this assembly, whatever their framework.
50
+ *
51
+ * Read straight off the DI identifier rather than through `ValidationManager`:
52
+ * the manager resolves the same list once and caches it, but its copy is
53
+ * private and the audit has no business widening the engine's API to read it.
54
+ * Registration is the gate either way — a framework flagged off registered no
55
+ * rule, so both answers are empty for the same reason.
56
+ */
57
+ function activeRules(std) {
58
+ return [...std.provider.getAll(ValidationRuleIdentifier).values()];
59
+ }
60
+ /**
61
+ * The role vocabulary in play, de-duplicated across every registered rule.
62
+ *
63
+ * Read off the RULES rather than from a second registry, exactly as
64
+ * `ValidationManager.profilesFor` does: a rule already carries its framework's
65
+ * `RoleDefs`, so a framework flagged off contributes no vocabulary for free.
66
+ */
67
+ function collectRoles(rules) {
68
+ const byId = new Map();
69
+ for (const rule of rules) {
70
+ for (const def of Object.values(rule.roles)) {
71
+ if (!def || byId.has(def.id))
72
+ continue;
73
+ byId.set(def.id, {
74
+ id: def.id,
75
+ kind: def.kind,
76
+ ...(def.parent !== undefined ? { parent: def.parent } : {}),
77
+ ...(def.labelKey !== undefined ? { labelKey: def.labelKey } : {}),
78
+ });
79
+ }
80
+ }
81
+ return [...byId.values()];
82
+ }
83
+ /**
84
+ * Every framework frame on the surface, as facts.
85
+ *
86
+ * A frame is an element carrying some rule's `backgroundRole` — the same
87
+ * definition the rule families use, so the audit sees exactly the maps the
88
+ * engine sees, and a background authored before its role existed is invisible
89
+ * to both.
90
+ */
91
+ function collectFrames(rules, elements) {
92
+ const frames = [];
93
+ const seen = new Set();
94
+ for (const rule of rules) {
95
+ const backgroundRole = rule.backgroundRole;
96
+ const def = rule.background;
97
+ if (backgroundRole === undefined || def === undefined)
98
+ continue;
99
+ for (const el of elements) {
100
+ if (el.role === undefined || seen.has(el.id))
101
+ continue;
102
+ if (!roleIsA(el.role, backgroundRole, rule.roles))
103
+ continue;
104
+ seen.add(el.id);
105
+ const profileId = el.validationProfile;
106
+ frames.push({
107
+ def,
108
+ bound: el.elementBound,
109
+ fact: {
110
+ elementId: el.id,
111
+ framework: rule.framework,
112
+ type: def.type,
113
+ ...(typeof profileId === 'string' ? { profileId } : {}),
114
+ axes: backgroundAxisFacts(def),
115
+ // The framework's zones first, then the ones THIS frame declares —
116
+ // a BPMN pool's lanes. Concatenated rather than merged: the two
117
+ // namespaces are kept apart by the instance ids' prefix, so `zoneAt`
118
+ // resolves them by the same containment test and a framework zone
119
+ // still wins a genuine overlap, which is the reading that was true
120
+ // before an element could partition its own plot.
121
+ zones: [
122
+ ...(def.zones ?? []).map(zone => ({
123
+ id: zone.id,
124
+ rect: { ...zone.rect },
125
+ })),
126
+ ...backgroundInstanceZones(def, el).map(zone => ({
127
+ id: zone.id,
128
+ ...(zone.name !== undefined ? { name: zone.name } : {}),
129
+ rect: { ...zone.rect },
130
+ })),
131
+ ],
132
+ },
133
+ });
134
+ }
135
+ }
136
+ return frames;
137
+ }
138
+ /** Squared edge-to-edge gap — the same attribution heuristic the engine uses. */
139
+ function gapSquared(frame, bound) {
140
+ const dx = Math.max(frame.x - bound.maxX, bound.x - frame.maxX, 0);
141
+ const dy = Math.max(frame.y - bound.maxY, bound.y - frame.maxY, 0);
142
+ return dx * dx + dy * dy;
143
+ }
144
+ /**
145
+ * The frame an element belongs to: the one that CONTAINS it, failing that the
146
+ * nearest by edge-to-edge gap, ties broken by the smaller id.
147
+ *
148
+ * Deliberately the same answer `attributeBackground` gives inside the engine —
149
+ * an audit that attributed an element to a different map than the rule that
150
+ * indicted it would produce two findings about one component that disagree
151
+ * about which map it is on.
152
+ */
153
+ function attribute(bound, frames) {
154
+ let nearest = null;
155
+ let nearestDistance = Infinity;
156
+ for (const frame of frames) {
157
+ if (frame.bound.contains(bound))
158
+ return frame;
159
+ const distance = gapSquared(frame.bound, bound);
160
+ if (distance < nearestDistance ||
161
+ (distance === nearestDistance &&
162
+ nearest !== null &&
163
+ frame.fact.elementId < nearest.fact.elementId)) {
164
+ nearestDistance = distance;
165
+ nearest = frame;
166
+ }
167
+ }
168
+ return nearest;
169
+ }
170
+ /**
171
+ * Where an element's centre sits inside a frame's PLOT, as ratios.
172
+ *
173
+ * Ratios of the plot and not of the element box: a Wardley transition drawn at
174
+ * `0.4` is 40 % of the PLOT, not of the map element, and the margin between the
175
+ * two is exactly where the axis titles live. `backgroundPlot` is the one place
176
+ * that knows the difference, and this is the only reason this function exists
177
+ * rather than a subtraction at the call site.
178
+ *
179
+ * Not clamped: an element just off the left edge reads as `-0.03`, which is a
180
+ * true and useful thing to say. `null` for a degenerate plot.
181
+ */
182
+ function plotRatios(frame, bound) {
183
+ const plot = backgroundPlot(frame.def, frame.bound.w, frame.bound.h);
184
+ if (!(plot.width > 0) || !(plot.height > 0))
185
+ return null;
186
+ const cx = bound.x + bound.w / 2;
187
+ const cy = bound.y + bound.h / 2;
188
+ return [
189
+ (cx - frame.bound.x - plot.x0) / plot.width,
190
+ (cy - frame.bound.y - plot.y0) / plot.height,
191
+ ];
192
+ }
193
+ /**
194
+ * The zone a plot-ratio point falls in, if any — one the framework declares or
195
+ * one the frame itself does. It needs to know nothing about the difference: the
196
+ * fact carries both, in that order, as rectangles in the same ratios.
197
+ */
198
+ function zoneAt(frame, at) {
199
+ for (const zone of frame.fact.zones) {
200
+ const { x, y, w, h } = zone.rect;
201
+ if (at[0] >= x && at[0] <= x + w && at[1] >= y && at[1] <= y + h) {
202
+ return zone.id;
203
+ }
204
+ }
205
+ return undefined;
206
+ }
207
+ /**
208
+ * Levels 1 and 2, copied out of the engine's verdict.
209
+ *
210
+ * `audit` findings are excluded, and not merely because none exist today: the
211
+ * facts handed to an assistant must never contain a previous assistant's
212
+ * opinions, or a second run would start agreeing with itself.
213
+ */
214
+ function collectViolations(violations) {
215
+ const facts = [];
216
+ for (const violation of violations) {
217
+ if (violation.severity === 'audit')
218
+ continue;
219
+ facts.push({
220
+ ruleId: violation.ruleId,
221
+ severity: violation.severity,
222
+ elementIds: [...violation.elementIds],
223
+ messageKey: violation.messageKey,
224
+ ...(violation.backgroundId !== undefined
225
+ ? { backgroundId: violation.backgroundId }
226
+ : {}),
227
+ ...(violation.exemption !== undefined
228
+ ? { exemption: violation.exemption }
229
+ : {}),
230
+ });
231
+ }
232
+ return facts;
233
+ }
234
+ /**
235
+ * Everything the assistant is told about the board — **render-free** and
236
+ * serializable end to end (ADR 0006 § 5): plain objects, numbers and strings,
237
+ * no element model, no `Bound`, no `TemplateResult`, no function. A test round
238
+ * -trips the whole thing through `JSON.parse(JSON.stringify(...))` and compares.
239
+ *
240
+ * Role-carrying elements only. A neutral rectangle is not an artefact of any
241
+ * framework, so it is not a fact about the map — the same proportionality the
242
+ * engine applies (PRD principle 8), and the reason a board full of free
243
+ * drawings does not turn into a wall of tokens.
244
+ */
245
+ export function collectAuditFacts(std) {
246
+ const rules = activeRules(std);
247
+ const surface = std.get(GfxControllerIdentifier).surface;
248
+ const elements = surface?.elementModels ?? [];
249
+ // No rule registered means every framework is switched off, and the exact
250
+ // same length check `ValidationManager.mounted` exits on. Without it a dark
251
+ // board still reported its role-carrying elements — ids sent to an assistant
252
+ // with no vocabulary to read them by and no criterion to ask about them.
253
+ // Empty facts, one comparison, nothing walked.
254
+ if (rules.length === 0) {
255
+ return { roles: [], frames: [], elements: [], violations: [] };
256
+ }
257
+ const frames = collectFrames(rules, elements);
258
+ const frameIds = new Set(frames.map(frame => frame.fact.elementId));
259
+ const elementFacts = [];
260
+ for (const el of elements) {
261
+ const role = el.role;
262
+ if (role === undefined || frameIds.has(el.id))
263
+ continue;
264
+ const bound = el.elementBound;
265
+ const frame = attribute(bound, frames);
266
+ if (frame === null) {
267
+ elementFacts.push({ id: el.id, role });
268
+ continue;
269
+ }
270
+ const at = plotRatios(frame, bound);
271
+ const zone = at === null ? undefined : zoneAt(frame, at);
272
+ elementFacts.push({
273
+ id: el.id,
274
+ role,
275
+ frameId: frame.fact.elementId,
276
+ ...(at !== null ? { at } : {}),
277
+ ...(zone !== undefined ? { zone } : {}),
278
+ });
279
+ }
280
+ return {
281
+ roles: collectRoles(rules),
282
+ frames: frames.map(frame => frame.fact),
283
+ elements: elementFacts,
284
+ violations: collectViolations(std.getOptional(ValidationManager)?.violations$.peek() ?? []),
285
+ };
286
+ }
287
+ /**
288
+ * The criteria this run carries: every registered one, or the requested subset.
289
+ *
290
+ * An unknown id is silently skipped rather than refused — an assistant pinned
291
+ * to a criterion a later release retired should degrade to auditing the rest,
292
+ * not fail the whole run over a string.
293
+ */
294
+ function selectCriteria(std, criterionIds) {
295
+ const all = getAuditCriteria(std);
296
+ if (criterionIds === undefined)
297
+ return all;
298
+ const wanted = new Set(criterionIds);
299
+ return all.filter(criterion => wanted.has(criterion.id));
300
+ }
301
+ /** The single framework of a criteria set, or `undefined` if they disagree. */
302
+ function unanimousFramework(criteria) {
303
+ const distinct = new Set(criteria.map(criterion => criterion.framework));
304
+ return distinct.size === 1 ? criteria[0].framework : undefined;
305
+ }
306
+ /**
307
+ * Whether the current selection is a framework FRAME.
308
+ *
309
+ * The narrowing behind `availability: 'selection:framework'`: an audit is about
310
+ * a map, so the gesture is "select the map, ask for an audit" — the background,
311
+ * not one of the components on it. `isCommandAvailable` currently evaluates
312
+ * `'selection:framework'` as plain `'selection'` (ADR 0008), so the real
313
+ * predicate lives here, which is exactly what `when` is for.
314
+ */
315
+ function selectedFrames(std) {
316
+ const rules = activeRules(std);
317
+ if (rules.length === 0)
318
+ return [];
319
+ const selected = std
320
+ .get(GfxControllerIdentifier)
321
+ .selection.selectedElements.filter((el) => el instanceof GfxPrimitiveElementModel);
322
+ return selected.filter(el => rules.some(rule => rule.backgroundRole !== undefined &&
323
+ el.role !== undefined &&
324
+ roleIsA(el.role, rule.backgroundRole, rule.roles)));
325
+ }
326
+ /**
327
+ * The generation of the latest audit asked for, per editor.
328
+ *
329
+ * An audit is a network call to a model and takes SECONDS, so two runs
330
+ * overlapping is not an exotic case — it is what happens when a user asks
331
+ * again because the first one is slow. Without a guard, `setAuditFindings` is
332
+ * unconditional and the two runs publish in order of RESOLUTION rather than
333
+ * order of request: the slow, stale answer overwrites the fresh one, and a
334
+ * `MapAuditCompleted` reports a `findingCount` for findings that were thrown
335
+ * away.
336
+ *
337
+ * Same shape as `ValidationManager`'s `_checkupGeneration`: take a number
338
+ * before, compare after, publish only if still the latest. It lives here rather
339
+ * than on the manager because it is the COMMAND's arbitration between two of
340
+ * its own invocations, and `validation.ts` is not the audit's file — a `WeakMap`
341
+ * keyed on the editor scope is exactly as correct and touches nothing.
342
+ *
343
+ * Newest wins, rather than "refuse the second": the second request is the one
344
+ * the user just made, and telling them to wait for an answer they have already
345
+ * decided is late would be the wrong half to keep.
346
+ */
347
+ const auditGenerations = new WeakMap();
348
+ /**
349
+ * The audit run itself, split out of the descriptor so a caller that already
350
+ * has an `AbortSignal` (a host panel with a Cancel button, a test) can drive it
351
+ * directly and await the result. `run` cannot: `CommandDescriptor.run` returns
352
+ * `void | Promise<void>` and `runCommand` fires and forgets.
353
+ */
354
+ export async function runMapAudit(std, options = {}) {
355
+ const criteria = selectCriteria(std, options.criterionIds);
356
+ const facts = collectAuditFacts(std);
357
+ const telemetry = std.getOptional(TelemetryProvider);
358
+ const base = {
359
+ page: 'whiteboard editor',
360
+ framework: unanimousFramework(criteria),
361
+ criterionCount: criteria.length,
362
+ frameCount: facts.frames.length,
363
+ };
364
+ const startedAt = performance.now();
365
+ const generation = (auditGenerations.get(std) ?? 0) + 1;
366
+ auditGenerations.set(std, generation);
367
+ telemetry?.track('MapAuditStarted', base);
368
+ const result = await requestAudit(std, { criteria, facts }, {
369
+ ...(options.onProgress ? { onProgress: options.onProgress } : {}),
370
+ ...(options.signal ? { signal: options.signal } : {}),
371
+ });
372
+ const durationMs = performance.now() - startedAt;
373
+ // Somebody asked again while this was in flight. Their answer is the one that
374
+ // describes the board the user is looking at, so this one is dropped whole —
375
+ // not published, and not counted as a completion either, because a
376
+ // `findingCount` for findings nobody will see is a metric that lies.
377
+ //
378
+ // The findings are dropped from the RETURN VALUE too, not just from the
379
+ // signal. `runMapAudit` is exported and awaited directly by a host panel; one
380
+ // that renders `result.findings` without first testing `result.status` would
381
+ // otherwise display precisely the stale answer this guard exists to suppress
382
+ // — and "the caller should have checked" is a poor defence for a field that
383
+ // is easier to read than the status beside it. Superseded means superseded on
384
+ // both channels.
385
+ if (auditGenerations.get(std) !== generation) {
386
+ telemetry?.track('MapAuditInterrupted', {
387
+ ...base,
388
+ reason: 'superseded',
389
+ durationMs,
390
+ });
391
+ return { ...result, status: 'superseded', findings: [] };
392
+ }
393
+ // Published even for a partial run: an audit interrupted halfway has still
394
+ // said something true, and throwing it away would punish the user for
395
+ // pressing Cancel. `unavailable` and `error` publish an EMPTY list, which
396
+ // clears whatever a previous run left — a stale opinion is worse than none.
397
+ std.getOptional(ValidationManager)?.setAuditFindings(result.findings);
398
+ if (result.status === 'complete') {
399
+ telemetry?.track('MapAuditCompleted', {
400
+ ...base,
401
+ findingCount: result.findings.length,
402
+ durationMs,
403
+ });
404
+ }
405
+ else {
406
+ telemetry?.track('MapAuditInterrupted', {
407
+ ...base,
408
+ reason: result.status,
409
+ durationMs,
410
+ });
411
+ }
412
+ return result;
413
+ }
414
+ const mapAudit = {
415
+ id: 'map.audit',
416
+ // `'core'`, not `'wardley'`: the command is framework-agnostic — it audits
417
+ // whatever frame is selected against whatever criteria are registered — and a
418
+ // `'wardley'` owner would have forced the id prefix `wardley.` and made a
419
+ // second, identical command necessary for every framework that follows.
420
+ // `'core'` owners are exempt from the id-prefix rule (ADR 0008).
421
+ owner: 'core',
422
+ kind: 'action',
423
+ labelKey: 'com.labre.command.map.audit',
424
+ labelFallback: 'Audit this map',
425
+ descriptionKey: 'com.labre.command.map.audit.description',
426
+ // `'agent'` is the point of the whole slice — consumer 5 of ADR 0008 — and
427
+ // `'palette'` because a human asking for a review by name is the same
428
+ // request. Deliberately NOT `'senior-menu'`: the 14 slots are for artefacts,
429
+ // and an audit is not one.
430
+ surfaces: ['palette', 'agent'],
431
+ scope: 'edgeless',
432
+ // Keyless by intent. Still bindable from Settings › Shortcuts.
433
+ defaultKeys: { mac: [], other: [] },
434
+ // The serializable half a host catalogue shows: this command needs a frame
435
+ // selected. Narrowed below to "and that frame is a framework background".
436
+ availability: 'selection:framework',
437
+ when: std => selectedFrames(std).length > 0,
438
+ params: auditParams,
439
+ run: (std, _invocation, params) => {
440
+ const parsed = auditParams.safeParse(params ?? {});
441
+ if (!parsed.success) {
442
+ console.error('map.audit: invalid params', parsed.error.issues);
443
+ return;
444
+ }
445
+ // `runCommand` fires and forgets, so the rejection has to die here. It
446
+ // cannot reject — `requestAudit` guards the provider — but a `void` promise
447
+ // escaping a command is how an unhandled rejection reaches a user's console.
448
+ return runMapAudit(std, {
449
+ ...(parsed.data.criterionIds !== undefined
450
+ ? { criterionIds: parsed.data.criterionIds }
451
+ : {}),
452
+ }).then(() => undefined);
453
+ },
454
+ };
455
+ /**
456
+ * ## Read-only (the `pivot.bind` pattern, PR #89 — and its one deliberate
457
+ * difference)
458
+ *
459
+ * `pivot.bind` guards `!std.store.readonly` inside `run`, because `runCommand`
460
+ * consults neither `when` nor `availability` and `clearField` carries no
461
+ * read-only guard of its own — without it, a palette invocation would mutate a
462
+ * document the user cannot edit.
463
+ *
464
+ * `map.audit` needs no such guard, and adding one would be wrong rather than
465
+ * merely redundant: **it writes nothing**. It reads element geometry and roles,
466
+ * copies the engine's verdict, and stores the answer in a session signal that
467
+ * never reaches a `Y.Doc`. A read-only document is not an edge case for an
468
+ * audit — it is the CASE: reviewing a map you have been given, and cannot
469
+ * change, is what a reviewer does.
470
+ *
471
+ * The invariant `pivot.bind` protects with a guard is protected here by a test
472
+ * instead: `map.audit` on a read-only store runs to completion, publishes its
473
+ * findings, and leaves the document byte-identical. Recorded loudly because
474
+ * "no read-only check" reads like an omission and is a decision.
475
+ *
476
+ * ## ponytail: the day a finding can be ACCEPTED, the guard comes back
477
+ *
478
+ * The invariant holds only while findings stay READ-ONLY. `validationExceptions`
479
+ * is a persisted field, so a future slice letting a user accept an audit finding
480
+ * as an exception — the obvious next gesture — would put a write on this path,
481
+ * and that write would need exactly the `pivot.bind` guard: checked inside
482
+ * `run`, because `runCommand` consults neither `when` nor `availability`.
483
+ *
484
+ * The trigger is precise: **the first code under `map.audit` that touches
485
+ * `std.store` or an element field.** Until then a guard would be false, not
486
+ * merely redundant — it would remove the capability exactly where it is most
487
+ * useful.
488
+ */
489
+ export const auditCommands = [mapAudit];
@@ -10,6 +10,20 @@ export declare class EdgelessCRUDExtension extends Extension {
10
10
  static setup(di: Container): void;
11
11
  private get _gfx();
12
12
  private get _surface();
13
+ /**
14
+ * `SurfaceBlockModel` already REFUSES element writes on a readonly document —
15
+ * it throws (`Cannot add / remove / update element in readonly mode`). This
16
+ * guard does not plug a hole: it turns those throws into a quiet refusal at
17
+ * the layer callers actually use, which is what the store's block CRUD does
18
+ * (`updateBlock` / `deleteBlock` / `moveBlocks` all `console.error` and
19
+ * return). Hence the log — a silent `return` would be the only refusal in the
20
+ * repo with no signal at all.
21
+ *
22
+ * Callers that consume the return value all test it (`clipboard/canvas.ts`,
23
+ * `group-api.ts`, `shape-draggable.ts` guard on `if (!id) return`), so
24
+ * `addElement` returning `undefined` introduces no new dereference.
25
+ */
26
+ private _refuseOnReadonly;
13
27
  deleteElements: (elements: GfxModel[]) => void;
14
28
  addBlock: (flavour: string, props: Record<string, unknown>, parentId?: string | BlockModel, parentIndex?: number) => string;
15
29
  addElement: <T extends Record<string, unknown>>(type: string, props: T) => string | undefined;
@@ -11,6 +11,8 @@ export class EdgelessCRUDExtension extends Extension {
11
11
  super();
12
12
  this.std = std;
13
13
  this.deleteElements = (elements) => {
14
+ if (this._refuseOnReadonly('delete elements'))
15
+ return;
14
16
  const surface = this._surface;
15
17
  if (!surface) {
16
18
  console.error('surface is not initialized');
@@ -49,6 +51,8 @@ export class EdgelessCRUDExtension extends Extension {
49
51
  return this.std.store.addBlock(flavour, nProps, parentId, parentIndex);
50
52
  };
51
53
  this.addElement = (type, props) => {
54
+ if (this._refuseOnReadonly('add an element'))
55
+ return;
52
56
  const surface = this._surface;
53
57
  if (!surface) {
54
58
  console.error('surface is not initialized');
@@ -67,6 +71,8 @@ export class EdgelessCRUDExtension extends Extension {
67
71
  return surface.addElement(nProps);
68
72
  };
69
73
  this.updateElement = (id, props) => {
74
+ if (this._refuseOnReadonly('update an element'))
75
+ return;
70
76
  const surface = this._surface;
71
77
  if (!surface) {
72
78
  console.error('surface is not initialized');
@@ -74,11 +80,16 @@ export class EdgelessCRUDExtension extends Extension {
74
80
  }
75
81
  const element = this._surface.getElementById(id);
76
82
  if (element) {
77
- const key = getLastPropsKey(element.type, {
78
- ...element.yMap.toJSON(),
79
- ...props,
80
- });
81
- key && this.std.get(EditPropsStore).recordLastProps(key, props);
83
+ const merged = { ...element.yMap.toJSON(), ...props };
84
+ const key = getLastPropsKey(element.type, merged);
85
+ // A role-carrying framework artefact (a BPMN message flow, a C4
86
+ // relationship…) must not teach the shared last-props its costume:
87
+ // last-props are keyed by TYPE, and the next plain element of that type
88
+ // would draw dressed as the framework (sibling of review #144 M1). A
89
+ // plain element restyling still records, as it should.
90
+ if (key && merged.role === undefined) {
91
+ this.std.get(EditPropsStore).recordLastProps(key, props);
92
+ }
82
93
  this._surface.updateElement(id, props);
83
94
  return;
84
95
  }
@@ -103,6 +114,25 @@ export class EdgelessCRUDExtension extends Extension {
103
114
  get _surface() {
104
115
  return this._gfx.surface;
105
116
  }
117
+ /**
118
+ * `SurfaceBlockModel` already REFUSES element writes on a readonly document —
119
+ * it throws (`Cannot add / remove / update element in readonly mode`). This
120
+ * guard does not plug a hole: it turns those throws into a quiet refusal at
121
+ * the layer callers actually use, which is what the store's block CRUD does
122
+ * (`updateBlock` / `deleteBlock` / `moveBlocks` all `console.error` and
123
+ * return). Hence the log — a silent `return` would be the only refusal in the
124
+ * repo with no signal at all.
125
+ *
126
+ * Callers that consume the return value all test it (`clipboard/canvas.ts`,
127
+ * `group-api.ts`, `shape-draggable.ts` guard on `if (!id) return`), so
128
+ * `addElement` returning `undefined` introduces no new dereference.
129
+ */
130
+ _refuseOnReadonly(action) {
131
+ if (!this.std.store.readonly)
132
+ return false;
133
+ console.error(`cannot ${action} in readonly mode`);
134
+ return true;
135
+ }
106
136
  getElementById(id) {
107
137
  const surface = this._surface;
108
138
  if (!surface) {
@@ -118,6 +148,8 @@ export class EdgelessCRUDExtension extends Extension {
118
148
  return this._surface.getElementsByType(type);
119
149
  }
120
150
  removeElement(id) {
151
+ if (this._refuseOnReadonly('remove an element'))
152
+ return;
121
153
  id = typeof id === 'string' ? id : id.id;
122
154
  const el = this.getElementById(id);
123
155
  if (isGfxGroupCompatibleModel(el)) {