@formicoidea/labre-core 0.31.0 → 0.32.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 (483) hide show
  1. package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
  2. package/dist/_pkgs/affine-block-callout/callout-block.js +25 -3
  3. package/dist/_pkgs/affine-block-callout/callout-keymap.js +59 -19
  4. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.d.ts +20 -0
  5. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.js +60 -0
  6. package/dist/_pkgs/affine-block-callout/commands/split-callout.d.ts +17 -0
  7. package/dist/_pkgs/affine-block-callout/commands/split-callout.js +42 -0
  8. package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +9 -6
  9. package/dist/_pkgs/affine-block-callout/emoji-margin.d.ts +9 -0
  10. package/dist/_pkgs/affine-block-callout/emoji-margin.js +36 -0
  11. package/dist/_pkgs/affine-block-callout/emoji-menu.d.ts +5 -1
  12. package/dist/_pkgs/affine-block-callout/emoji-menu.js +5 -0
  13. package/dist/_pkgs/affine-block-code/code-block.d.ts +14 -0
  14. package/dist/_pkgs/affine-block-code/code-block.js +44 -6
  15. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.d.ts +2 -0
  16. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +23 -14
  17. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.d.ts +16 -0
  18. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.js +93 -0
  19. package/dist/_pkgs/affine-block-code/code-toolbar/config.js +52 -5
  20. package/dist/_pkgs/affine-block-code/effects.d.ts +2 -0
  21. package/dist/_pkgs/affine-block-code/effects.js +2 -0
  22. package/dist/_pkgs/affine-block-code/highlight/affine-code-unit.js +6 -1
  23. package/dist/_pkgs/affine-block-code/index.d.ts +1 -0
  24. package/dist/_pkgs/affine-block-code/index.js +1 -0
  25. package/dist/_pkgs/affine-block-code/line-numbers.d.ts +25 -0
  26. package/dist/_pkgs/affine-block-code/line-numbers.js +27 -0
  27. package/dist/_pkgs/affine-block-code/styles.js +31 -0
  28. package/dist/_pkgs/affine-block-data-view/data-view-block.js +1 -0
  29. package/dist/_pkgs/affine-block-database/components/title/index.js +4 -1
  30. package/dist/_pkgs/affine-block-database/configs/slash-menu.js +28 -1
  31. package/dist/_pkgs/affine-block-database/database-block.js +13 -0
  32. package/dist/_pkgs/affine-block-database/properties/paste-url.d.ts +24 -0
  33. package/dist/_pkgs/affine-block-database/properties/paste-url.js +98 -0
  34. package/dist/_pkgs/affine-block-database/properties/rich-text/cell-renderer.js +9 -19
  35. package/dist/_pkgs/affine-block-database/properties/title/text.js +20 -25
  36. package/dist/_pkgs/affine-block-database/views/index.js +1 -0
  37. package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +10 -0
  38. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.d.ts +3 -0
  39. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +48 -1
  40. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.d.ts +17 -0
  41. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.js +24 -0
  42. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.d.ts +9 -0
  43. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.js +10 -0
  44. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +8 -4
  45. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts +4 -0
  46. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +22 -3
  47. package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
  48. package/dist/_pkgs/affine-block-frame/frame-manager.js +32 -2
  49. package/dist/_pkgs/affine-block-latex/styles.js +6 -1
  50. package/dist/_pkgs/affine-block-note/note-edgeless-block.d.ts +9 -0
  51. package/dist/_pkgs/affine-block-note/note-edgeless-block.js +29 -1
  52. package/dist/_pkgs/affine-block-root/commands/pivot-commands.d.ts +37 -0
  53. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +168 -0
  54. package/dist/_pkgs/affine-block-root/commands/reading-commands.d.ts +23 -0
  55. package/dist/_pkgs/affine-block-root/commands/reading-commands.js +107 -0
  56. package/dist/_pkgs/affine-block-root/commands/tag-commands.d.ts +47 -0
  57. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +159 -0
  58. package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -0
  59. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +9 -2
  60. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/render-linked-doc.js +1 -1
  61. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +26 -1
  62. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +11 -2
  63. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-service.js +14 -0
  64. package/dist/_pkgs/affine-block-root/edgeless/index.d.ts +1 -0
  65. package/dist/_pkgs/affine-block-root/edgeless/index.js +1 -0
  66. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.d.ts +21 -0
  67. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.js +34 -0
  68. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.d.ts +7 -1
  69. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.js +11 -2
  70. package/dist/_pkgs/affine-block-root/index.d.ts +4 -1
  71. package/dist/_pkgs/affine-block-root/index.js +4 -1
  72. package/dist/_pkgs/affine-block-root/keyboard/commands.d.ts +2 -0
  73. package/dist/_pkgs/affine-block-root/keyboard/commands.js +147 -0
  74. package/dist/_pkgs/affine-block-root/view.js +13 -4
  75. package/dist/_pkgs/affine-block-surface/commands/reassociate-connectors.js +0 -1
  76. package/dist/_pkgs/affine-block-surface/effects.js +6 -0
  77. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +5 -2
  78. package/dist/_pkgs/affine-block-surface/element-model/index.js +4 -2
  79. package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
  80. package/dist/_pkgs/affine-block-surface/extensions/audit.js +472 -0
  81. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
  82. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +27 -0
  83. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +133 -0
  84. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +326 -0
  85. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +13 -0
  86. package/dist/_pkgs/affine-block-surface/extensions/index.js +13 -0
  87. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.d.ts +146 -0
  88. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +528 -0
  89. package/dist/_pkgs/affine-block-surface/extensions/map-quality.d.ts +109 -0
  90. package/dist/_pkgs/affine-block-surface/extensions/map-quality.js +84 -0
  91. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.d.ts +15 -0
  92. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +158 -0
  93. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +145 -0
  94. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +590 -0
  95. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +494 -0
  96. package/dist/_pkgs/affine-block-surface/extensions/reading.js +767 -0
  97. package/dist/_pkgs/affine-block-surface/extensions/spotlight.d.ts +45 -0
  98. package/dist/_pkgs/affine-block-surface/extensions/spotlight.js +177 -0
  99. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.d.ts +10 -0
  100. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +295 -0
  101. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.d.ts +27 -0
  102. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +361 -0
  103. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +1340 -0
  104. package/dist/_pkgs/affine-block-surface/extensions/validation.js +3009 -0
  105. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +286 -0
  106. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +907 -0
  107. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.d.ts +80 -0
  108. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.js +123 -0
  109. package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +321 -0
  110. package/dist/_pkgs/affine-block-surface/framework-background/def.js +81 -0
  111. package/dist/_pkgs/affine-block-surface/framework-background/facts.d.ts +188 -0
  112. package/dist/_pkgs/affine-block-surface/framework-background/facts.js +284 -0
  113. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +5 -0
  114. package/dist/_pkgs/affine-block-surface/framework-background/index.js +5 -0
  115. package/dist/_pkgs/affine-block-surface/framework-background/interaction.d.ts +12 -0
  116. package/dist/_pkgs/affine-block-surface/framework-background/interaction.js +24 -0
  117. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +59 -0
  118. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +117 -0
  119. package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
  120. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +238 -0
  121. package/dist/_pkgs/affine-block-surface/index.d.ts +1 -0
  122. package/dist/_pkgs/affine-block-surface/index.js +1 -0
  123. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +69 -3
  124. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +333 -44
  125. package/dist/_pkgs/affine-block-surface/renderer/dom-renderer.js +18 -2
  126. package/dist/_pkgs/affine-block-surface/tool/default-tool.js +8 -0
  127. package/dist/_pkgs/affine-block-surface/utils/font.js +9 -3
  128. package/dist/_pkgs/affine-block-surface/view.d.ts +17 -0
  129. package/dist/_pkgs/affine-block-surface/view.js +57 -2
  130. package/dist/_pkgs/affine-block-table/selection-controller.d.ts +6 -0
  131. package/dist/_pkgs/affine-block-table/selection-controller.js +24 -1
  132. package/dist/_pkgs/affine-block-table/table-block.js +8 -2
  133. package/dist/_pkgs/affine-block-table/table-cell.js +5 -6
  134. package/dist/_pkgs/affine-block-table/table-keymap.d.ts +18 -0
  135. package/dist/_pkgs/affine-block-table/table-keymap.js +41 -0
  136. package/dist/_pkgs/affine-block-table/utils.d.ts +7 -0
  137. package/dist/_pkgs/affine-block-table/utils.js +12 -0
  138. package/dist/_pkgs/affine-block-table/view.js +2 -0
  139. package/dist/_pkgs/affine-components/caption/captioned-block-component.js +2 -1
  140. package/dist/_pkgs/affine-components/context-menu/button.d.ts +7 -0
  141. package/dist/_pkgs/affine-components/context-menu/button.js +7 -2
  142. package/dist/_pkgs/affine-components/context-menu/input.d.ts +4 -0
  143. package/dist/_pkgs/affine-components/context-menu/input.js +12 -0
  144. package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +2 -0
  145. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +8 -1
  146. package/dist/_pkgs/affine-components/context-menu/sub-menu.js +3 -0
  147. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  148. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  149. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +28 -0
  150. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +231 -0
  151. package/dist/_pkgs/affine-components/icon-picker/emoji-data.d.ts +40 -0
  152. package/dist/_pkgs/affine-components/icon-picker/emoji-data.js +99 -0
  153. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +32 -0
  154. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +276 -0
  155. package/dist/_pkgs/affine-components/icon-picker/icon-data.d.ts +34 -0
  156. package/dist/_pkgs/affine-components/icon-picker/icon-data.js +83 -0
  157. package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +39 -0
  158. package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +233 -0
  159. package/dist/_pkgs/affine-components/icon-picker/index.d.ts +8 -0
  160. package/dist/_pkgs/affine-components/icon-picker/index.js +15 -0
  161. package/dist/_pkgs/affine-components/icon-picker/recent-store.d.ts +8 -0
  162. package/dist/_pkgs/affine-components/icon-picker/recent-store.js +41 -0
  163. package/dist/_pkgs/affine-components/icon-picker/styles.d.ts +5 -0
  164. package/dist/_pkgs/affine-components/icon-picker/styles.js +166 -0
  165. package/dist/_pkgs/affine-components/icon-picker/types.d.ts +22 -0
  166. package/dist/_pkgs/affine-components/icon-picker/types.js +10 -0
  167. package/dist/_pkgs/affine-components/icons/text.js +426 -426
  168. package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.d.ts +1 -0
  169. package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
  170. package/dist/_pkgs/affine-components/toolbar/menu-button.js +1 -0
  171. package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
  172. package/dist/_pkgs/affine-foundation/view.js +11 -2
  173. package/dist/_pkgs/affine-gfx-brush/index.d.ts +1 -0
  174. package/dist/_pkgs/affine-gfx-brush/index.js +1 -0
  175. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.d.ts +1 -0
  176. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.js +11 -0
  177. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.d.ts +1 -0
  178. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.js +11 -0
  179. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.d.ts +2 -0
  180. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.js +2 -0
  181. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.d.ts +14 -0
  182. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.js +54 -0
  183. package/dist/_pkgs/affine-gfx-brush/renderer/index.d.ts +1 -0
  184. package/dist/_pkgs/affine-gfx-brush/renderer/index.js +4 -0
  185. package/dist/_pkgs/affine-gfx-brush/view.d.ts +14 -0
  186. package/dist/_pkgs/affine-gfx-brush/view.js +29 -3
  187. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +32 -6
  188. package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +7 -0
  189. package/dist/_pkgs/affine-gfx-connector/connector-tool.js +2 -1
  190. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
  191. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +281 -0
  192. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +65 -0
  193. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +395 -0
  194. package/dist/_pkgs/affine-gfx-connector/direction/index.d.ts +4 -0
  195. package/dist/_pkgs/affine-gfx-connector/direction/index.js +4 -0
  196. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +72 -0
  197. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +187 -0
  198. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.d.ts +69 -0
  199. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.js +66 -0
  200. package/dist/_pkgs/affine-gfx-connector/effects.d.ts +2 -0
  201. package/dist/_pkgs/affine-gfx-connector/effects.js +2 -0
  202. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +78 -41
  203. package/dist/_pkgs/affine-gfx-connector/index.d.ts +1 -0
  204. package/dist/_pkgs/affine-gfx-connector/index.js +1 -0
  205. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +50 -0
  206. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +67 -1
  207. package/dist/_pkgs/affine-gfx-connector/view.js +16 -0
  208. package/dist/_pkgs/affine-gfx-group/command/group-api.js +150 -62
  209. package/dist/_pkgs/affine-gfx-group/text/edgeless-group-title-editor.js +4 -1
  210. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.d.ts +16 -0
  211. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.js +102 -32
  212. package/dist/_pkgs/affine-gfx-shape/commands.d.ts +2 -0
  213. package/dist/_pkgs/affine-gfx-shape/commands.js +33 -0
  214. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
  215. package/dist/_pkgs/affine-gfx-shape/index.d.ts +1 -1
  216. package/dist/_pkgs/affine-gfx-shape/index.js +1 -1
  217. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.d.ts +26 -0
  218. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.js +124 -13
  219. package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
  220. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.d.ts +2 -0
  221. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.js +18 -1
  222. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +9 -5
  223. package/dist/_pkgs/affine-inline-latex/command.js +46 -26
  224. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.d.ts +10 -0
  225. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +23 -0
  226. package/dist/_pkgs/affine-inline-link/link-node/affine-link.js +4 -1
  227. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.d.ts +3 -0
  228. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.js +29 -1
  229. package/dist/_pkgs/affine-model/blocks/code/code-model.d.ts +1 -0
  230. package/dist/_pkgs/affine-model/blocks/code/code-model.js +1 -0
  231. package/dist/_pkgs/affine-model/elements/connector/connector.js +24 -0
  232. package/dist/_pkgs/affine-model/elements/edgy/board.d.ts +32 -0
  233. package/dist/_pkgs/affine-model/elements/edgy/board.js +112 -0
  234. package/dist/_pkgs/affine-model/elements/edgy/facets.d.ts +12 -0
  235. package/dist/_pkgs/affine-model/elements/edgy/facets.js +25 -1
  236. package/dist/_pkgs/affine-model/elements/edgy/index.d.ts +1 -0
  237. package/dist/_pkgs/affine-model/elements/edgy/index.js +1 -0
  238. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +42 -0
  239. package/dist/_pkgs/affine-model/elements/framework-background/background.js +42 -0
  240. package/dist/_pkgs/affine-model/elements/framework-background/index.d.ts +1 -0
  241. package/dist/_pkgs/affine-model/elements/framework-background/index.js +1 -0
  242. package/dist/_pkgs/affine-model/elements/index.d.ts +3 -1
  243. package/dist/_pkgs/affine-model/elements/index.js +1 -0
  244. package/dist/_pkgs/affine-model/elements/mindmap/mindmap.js +8 -3
  245. package/dist/_pkgs/affine-model/elements/mindmap/style.d.ts +10 -0
  246. package/dist/_pkgs/affine-model/elements/mindmap/style.js +8 -0
  247. package/dist/_pkgs/affine-model/elements/wardley/wardley.d.ts +21 -29
  248. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +41 -48
  249. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
  250. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +160 -2
  251. package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
  252. package/dist/_pkgs/affine-shared/adapters/types/delta-converter.d.ts +1 -0
  253. package/dist/_pkgs/affine-shared/adapters/utils/color.d.ts +24 -0
  254. package/dist/_pkgs/affine-shared/adapters/utils/color.js +280 -0
  255. package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
  256. package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
  257. package/dist/_pkgs/affine-shared/commands/block-crud/get-selected-blocks.js +10 -2
  258. package/dist/_pkgs/affine-shared/services/audit-service.d.ts +300 -0
  259. package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
  260. package/dist/_pkgs/affine-shared/services/edit-props-store.d.ts +7 -0
  261. package/dist/_pkgs/affine-shared/services/edit-props-store.js +11 -0
  262. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.d.ts +26 -1
  263. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.js +124 -7
  264. package/dist/_pkgs/affine-shared/services/index.d.ts +5 -0
  265. package/dist/_pkgs/affine-shared/services/index.js +5 -0
  266. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
  267. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +311 -0
  268. package/dist/_pkgs/affine-shared/services/pivot-properties-service.d.ts +217 -0
  269. package/dist/_pkgs/affine-shared/services/pivot-properties-service.js +114 -0
  270. package/dist/_pkgs/affine-shared/services/telemetry-service/code-block.d.ts +1 -1
  271. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +182 -0
  272. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  273. package/dist/_pkgs/affine-shared/services/telemetry-service/types.d.ts +6 -1
  274. package/dist/_pkgs/affine-shared/services/toolbar-service/action.d.ts +10 -0
  275. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  276. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  277. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.d.ts +134 -0
  278. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.js +146 -0
  279. package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +68 -0
  280. package/dist/_pkgs/affine-shared/services/translation-service/index.js +39 -0
  281. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +155 -0
  282. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +254 -0
  283. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.d.ts +4 -0
  284. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.js +58 -2
  285. package/dist/_pkgs/affine-shared/utils/dom/viewport.d.ts +60 -0
  286. package/dist/_pkgs/affine-shared/utils/dom/viewport.js +58 -0
  287. package/dist/_pkgs/affine-shared/utils/print-to-pdf.d.ts +21 -0
  288. package/dist/_pkgs/affine-shared/utils/print-to-pdf.js +166 -32
  289. package/dist/_pkgs/affine-shared/utils/zod-schema.d.ts +7 -0
  290. package/dist/_pkgs/affine-shared/utils/zod-schema.js +27 -1
  291. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.d.ts +19 -10
  292. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.js +122 -23
  293. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.d.ts +2 -0
  294. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.js +25 -4
  295. package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +10 -5
  296. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.d.ts +15 -1
  297. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +37 -32
  298. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +5 -4
  299. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-selected-rect.js +19 -9
  300. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.d.ts +16 -2
  301. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +19 -2
  302. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +1 -0
  303. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +1 -0
  304. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +38 -0
  305. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +99 -0
  306. package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +4 -1
  307. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  308. package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +2 -15
  309. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.d.ts +10 -1
  310. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +133 -6
  311. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.d.ts +10 -0
  312. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.js +120 -3
  313. package/dist/_pkgs/affine-widget-linked-doc/utils.d.ts +12 -0
  314. package/dist/_pkgs/affine-widget-linked-doc/utils.js +33 -0
  315. package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +6 -4
  316. package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +8 -4
  317. package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +9 -0
  318. package/dist/_pkgs/affine-widget-slash-menu/utils.js +24 -0
  319. package/dist/_pkgs/affine-widget-toolbar/toolbar.d.ts +6 -0
  320. package/dist/_pkgs/affine-widget-toolbar/toolbar.js +34 -6
  321. package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
  322. package/dist/_pkgs/affine-widget-toolbar/utils.js +738 -56
  323. package/dist/_pkgs/data-view/core/common/property-menu.js +3 -16
  324. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +4 -0
  325. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +28 -1
  326. package/dist/_pkgs/data-view/core/data-view.d.ts +3 -1
  327. package/dist/_pkgs/data-view/core/data-view.js +25 -3
  328. package/dist/_pkgs/data-view/core/detail/field.js +2 -2
  329. package/dist/_pkgs/data-view/core/detail/selection.d.ts +4 -2
  330. package/dist/_pkgs/data-view/core/detail/selection.js +23 -7
  331. package/dist/_pkgs/data-view/core/effect.js +2 -0
  332. package/dist/_pkgs/data-view/core/filter/eval.js +36 -23
  333. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.d.ts +7 -0
  334. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.js +12 -0
  335. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.d.ts +11 -0
  336. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.js +55 -0
  337. package/dist/_pkgs/data-view/core/group-by/define.d.ts +6 -0
  338. package/dist/_pkgs/data-view/core/group-by/define.js +114 -0
  339. package/dist/_pkgs/data-view/core/group-by/matcher.d.ts +7 -0
  340. package/dist/_pkgs/data-view/core/group-by/matcher.js +13 -0
  341. package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
  342. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.d.ts +9 -0
  343. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.js +97 -0
  344. package/dist/_pkgs/data-view/core/group-by/setting.js +86 -7
  345. package/dist/_pkgs/data-view/core/group-by/trait.d.ts +34 -0
  346. package/dist/_pkgs/data-view/core/group-by/trait.js +106 -10
  347. package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
  348. package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
  349. package/dist/_pkgs/data-view/property-presets/number/define.js +2 -1
  350. package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
  351. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.d.ts +70 -0
  352. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.js +449 -0
  353. package/dist/_pkgs/data-view/view-presets/calendar/define.d.ts +10 -0
  354. package/dist/_pkgs/data-view/view-presets/calendar/define.js +27 -0
  355. package/dist/_pkgs/data-view/view-presets/calendar/effect.d.ts +1 -0
  356. package/dist/_pkgs/data-view/view-presets/calendar/effect.js +4 -0
  357. package/dist/_pkgs/data-view/view-presets/calendar/index.d.ts +6 -0
  358. package/dist/_pkgs/data-view/view-presets/calendar/index.js +6 -0
  359. package/dist/_pkgs/data-view/view-presets/calendar/layout.d.ts +37 -0
  360. package/dist/_pkgs/data-view/view-presets/calendar/layout.js +138 -0
  361. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.d.ts +7 -0
  362. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.js +68 -0
  363. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.d.ts +32 -0
  364. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.js +159 -0
  365. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.d.ts +1 -0
  366. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.js +7 -0
  367. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.d.ts +1 -0
  368. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.js +28 -0
  369. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.d.ts +1 -0
  370. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.js +707 -0
  371. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.d.ts +89 -0
  372. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.js +837 -0
  373. package/dist/_pkgs/data-view/view-presets/calendar/renderer.d.ts +2 -0
  374. package/dist/_pkgs/data-view/view-presets/calendar/renderer.js +8 -0
  375. package/dist/_pkgs/data-view/view-presets/calendar/source.d.ts +8 -0
  376. package/dist/_pkgs/data-view/view-presets/calendar/source.js +3 -0
  377. package/dist/_pkgs/data-view/view-presets/calendar/types.d.ts +79 -0
  378. package/dist/_pkgs/data-view/view-presets/calendar/types.js +1 -0
  379. package/dist/_pkgs/data-view/view-presets/convert.js +28 -0
  380. package/dist/_pkgs/data-view/view-presets/effect.js +2 -0
  381. package/dist/_pkgs/data-view/view-presets/index.d.ts +2 -0
  382. package/dist/_pkgs/data-view/view-presets/index.js +3 -0
  383. package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +3 -1
  384. package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +2 -2
  385. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +18 -0
  386. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +36 -0
  387. package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +2 -2
  388. package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +11 -0
  389. package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +87 -4
  390. package/dist/_pkgs/data-view/view-presets/table/pc/cell.d.ts +3 -0
  391. package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +11 -2
  392. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.d.ts +1 -0
  393. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +39 -33
  394. package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +10 -0
  395. package/dist/_pkgs/data-view/view-presets/table/pc/group.js +84 -5
  396. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.d.ts +1 -0
  397. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +39 -33
  398. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
  399. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.d.ts +3 -0
  400. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +8 -0
  401. package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +3 -1
  402. package/dist/_pkgs/data-view/view-presets/table/utils.d.ts +3 -0
  403. package/dist/_pkgs/data-view/view-presets/table/utils.js +16 -1
  404. package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +3 -1
  405. package/dist/_pkgs/global/gfx/curve.js +4 -3
  406. package/dist/_pkgs/std/clipboard/clipboard.js +13 -3
  407. package/dist/_pkgs/std/clipboard/utils.d.ts +5 -0
  408. package/dist/_pkgs/std/clipboard/utils.js +7 -0
  409. package/dist/_pkgs/std/event/dispatcher.js +27 -1
  410. package/dist/_pkgs/std/event/keymap.js +16 -6
  411. package/dist/_pkgs/std/extension/command-registry.d.ts +321 -0
  412. package/dist/_pkgs/std/extension/command-registry.js +233 -0
  413. package/dist/_pkgs/std/extension/dnd/index.d.ts +1 -1
  414. package/dist/_pkgs/std/extension/index.d.ts +2 -0
  415. package/dist/_pkgs/std/extension/index.js +2 -0
  416. package/dist/_pkgs/std/extension/translation-manifest.d.ts +49 -0
  417. package/dist/_pkgs/std/extension/translation-manifest.js +71 -0
  418. package/dist/_pkgs/std/gfx/index.d.ts +7 -3
  419. package/dist/_pkgs/std/gfx/index.js +6 -2
  420. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +6 -1
  421. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +8 -0
  422. package/dist/_pkgs/std/gfx/interactivity/manager.js +18 -0
  423. package/dist/_pkgs/std/gfx/layer.d.ts +1 -1
  424. package/dist/_pkgs/std/gfx/layer.js +1 -2
  425. package/dist/_pkgs/std/gfx/model/surface/decorators/field.js +9 -0
  426. package/dist/_pkgs/std/gfx/model/surface/decorators/index.d.ts +2 -2
  427. package/dist/_pkgs/std/gfx/model/surface/decorators/index.js +2 -2
  428. package/dist/_pkgs/std/gfx/model/surface/decorators/local.d.ts +14 -0
  429. package/dist/_pkgs/std/gfx/model/surface/decorators/local.js +22 -0
  430. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.d.ts +2 -0
  431. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.js +40 -1
  432. package/dist/_pkgs/std/gfx/model/surface/element-model.d.ts +282 -0
  433. package/dist/_pkgs/std/gfx/model/surface/element-model.js +436 -25
  434. package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +48 -0
  435. package/dist/_pkgs/std/gfx/model/surface/pivot.js +34 -0
  436. package/dist/_pkgs/std/gfx/model/surface/role.d.ts +153 -0
  437. package/dist/_pkgs/std/gfx/model/surface/role.js +115 -0
  438. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
  439. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +304 -17
  440. package/dist/_pkgs/std/gfx/model/surface/tags.d.ts +77 -0
  441. package/dist/_pkgs/std/gfx/model/surface/tags.js +246 -0
  442. package/dist/_pkgs/std/gfx/perf.d.ts +10 -0
  443. package/dist/_pkgs/std/gfx/perf.js +30 -0
  444. package/dist/_pkgs/std/gfx/tool/tool-controller.d.ts +13 -0
  445. package/dist/_pkgs/std/gfx/tool/tool-controller.js +26 -0
  446. package/dist/_pkgs/std/gfx/viewport.d.ts +12 -0
  447. package/dist/_pkgs/std/gfx/viewport.js +19 -1
  448. package/dist/_pkgs/std/inline/services/event.d.ts +2 -0
  449. package/dist/_pkgs/std/inline/services/event.js +96 -21
  450. package/dist/_pkgs/std/utils/layer.js +2 -6
  451. package/dist/_pkgs/std/utils/tree.d.ts +14 -0
  452. package/dist/_pkgs/std/utils/tree.js +59 -8
  453. package/dist/_pkgs/std/view/element/gfx-block-component.js +23 -13
  454. package/dist/_pkgs/store/extension/workspace/workspace-meta.d.ts +10 -0
  455. package/dist/_pkgs/store/model/block/flat-sync-controller.js +2 -12
  456. package/dist/_pkgs/store/model/store/crud.js +7 -4
  457. package/dist/_pkgs/store/reactive/flat-native-y/index.d.ts +1 -1
  458. package/dist/_pkgs/store/reactive/flat-native-y/index.js +24 -2
  459. package/dist/commands.d.ts +58 -0
  460. package/dist/commands.js +66 -0
  461. package/dist/extensions/command-telemetry.d.ts +21 -0
  462. package/dist/extensions/command-telemetry.js +89 -0
  463. package/dist/extensions/store.d.ts +9 -4
  464. package/dist/extensions/store.js +27 -24
  465. package/dist/extensions/view.d.ts +9 -4
  466. package/dist/extensions/view.js +23 -8
  467. package/dist/flags.d.ts +98 -21
  468. package/dist/flags.js +103 -22
  469. package/dist/frameworks.d.ts +45 -0
  470. package/dist/frameworks.js +154 -0
  471. package/dist/schemas.d.ts +8 -5
  472. package/dist/schemas.js +28 -32
  473. package/dist/shortcuts.d.ts +16 -16
  474. package/dist/shortcuts.js +8 -36
  475. package/dist/translations.d.ts +56 -0
  476. package/dist/translations.js +112 -0
  477. package/package.json +16 -4
  478. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.d.ts +0 -8
  479. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.js +0 -48
  480. package/dist/_pkgs/affine-gfx-shape/shortcuts.d.ts +0 -6
  481. package/dist/_pkgs/affine-gfx-shape/shortcuts.js +0 -28
  482. package/dist/_pkgs/data-view/core/utils/cache.d.ts +0 -5
  483. package/dist/_pkgs/data-view/core/utils/cache.js +0 -28
@@ -30,6 +30,15 @@ export declare class EdgelessNoteBlockComponent extends EdgelessNoteBlockCompone
30
30
  };
31
31
  firstUpdated(): void;
32
32
  updated(changedProperties: PropertyValues): void;
33
+ /**
34
+ * A note carries its own `scale` on top of the viewport zoom. That scale
35
+ * belongs to the host element's transform, not to an inner wrapper: the
36
+ * element is laid out from the *unscaled* bound (see `getRenderingRect`), so
37
+ * scaling only the content would leave the element's box — the thing hit
38
+ * tests, the selection rect and the toolbar anchor read — out of step with
39
+ * what is painted at any scale other than 100%.
40
+ */
41
+ getCSSTransform(): string;
33
42
  getRenderingRect(): {
34
43
  x: number;
35
44
  y: number;
@@ -246,6 +246,18 @@ let EdgelessNoteBlockComponent = (() => {
246
246
  });
247
247
  }
248
248
  }
249
+ /**
250
+ * A note carries its own `scale` on top of the viewport zoom. That scale
251
+ * belongs to the host element's transform, not to an inner wrapper: the
252
+ * element is laid out from the *unscaled* bound (see `getRenderingRect`), so
253
+ * scaling only the content would leave the element's box — the thing hit
254
+ * tests, the selection rect and the toolbar anchor read — out of step with
255
+ * what is painted at any scale other than 100%.
256
+ */
257
+ getCSSTransform() {
258
+ const extraScale = this.model.props.edgeless?.scale ?? 1;
259
+ return `${super.getCSSTransform()} scale(${extraScale})`;
260
+ }
249
261
  getRenderingRect() {
250
262
  const { xywh, edgeless } = this.model.props;
251
263
  const { collapse, scale = 1 } = edgeless;
@@ -273,7 +285,6 @@ let EdgelessNoteBlockComponent = (() => {
273
285
  const height = bound.h / scale;
274
286
  const style = {
275
287
  borderRadius: borderRadius + 'px',
276
- transform: `scale(${scale})`,
277
288
  };
278
289
  const extra = this._editing ? ACTIVE_NOTE_EXTRA_PADDING : 0;
279
290
  const isCollapsable = collapse != null &&
@@ -458,6 +469,17 @@ export const EdgelessNoteInteraction = GfxViewInteractionExtension(NoteBlockSche
458
469
  if (!view.isConnected) {
459
470
  return;
460
471
  }
472
+ // A click landing on the note title belongs to the title:
473
+ // routing it through the children container below would
474
+ // clamp it into the first paragraph instead.
475
+ const titleRect = view
476
+ .querySelector('edgeless-page-block-title')
477
+ ?.getBoundingClientRect();
478
+ if (titleRect &&
479
+ new Bound(titleRect.x, titleRect.y, titleRect.width, titleRect.height).isPointInBound([e.clientX, e.clientY])) {
480
+ handleNativeRangeAtPoint(e.clientX, e.clientY);
481
+ return;
482
+ }
461
483
  if (model.children.length === 0) {
462
484
  const blockId = std.store.addBlock('affine:paragraph', { type: 'text' }, model.id);
463
485
  if (blockId) {
@@ -482,6 +504,12 @@ export const EdgelessNoteInteraction = GfxViewInteractionExtension(NoteBlockSche
482
504
  })
483
505
  .catch(console.error);
484
506
  }
507
+ else if (multiSelect && alreadySelected && editing) {
508
+ // Shift-clicking inside a note being edited extends the text
509
+ // range; the default multi-select would drop the editing state
510
+ // and take the range with it.
511
+ return;
512
+ }
485
513
  else {
486
514
  context.default(context);
487
515
  }
@@ -0,0 +1,37 @@
1
+ import { type AnyCommandDescriptor } from '../../std/index.js';
2
+ import { z } from 'zod';
3
+ /**
4
+ * `pivotDocId: null` unbinds. The key is REQUIRED on purpose: an optional one
5
+ * would make a forgotten argument silently destroy a binding, which is exactly
6
+ * the failure mode an agent-invocable command must not have.
7
+ */
8
+ export declare const bindPivotParams: z.ZodObject<{
9
+ pivotDocId: z.ZodNullable<z.ZodString>;
10
+ /**
11
+ * Explicit targets, for a host or an agent acting on something other than the
12
+ * live selection. **Omitted** — the key absent — the command acts on the
13
+ * current canvas selection.
14
+ *
15
+ * An EMPTY array is not the same thing: it means "these zero elements", so
16
+ * the command does nothing and does not fall back to the selection. That is
17
+ * the safe reading — an agent that computed a target list and came up empty
18
+ * must not have the gesture redirected onto whatever the user happened to
19
+ * have selected — but it is silent, so callers filtering a list should check
20
+ * it before invoking.
21
+ */
22
+ elementIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ pivotDocId: string | null;
25
+ elementIds?: string[] | undefined;
26
+ }, {
27
+ pivotDocId: string | null;
28
+ elementIds?: string[] | undefined;
29
+ }>;
30
+ export type BindPivotParams = z.infer<typeof bindPivotParams>;
31
+ /**
32
+ * The registry's element type erases the parameter contract
33
+ * ({@link AnyCommandDescriptor}) — this is the first command to have one, and
34
+ * `run` re-validates with {@link bindPivotParams} rather than trusting the
35
+ * static type, which is what an agent-invocable command has to do anyway.
36
+ */
37
+ export declare const pivotCommands: AnyCommandDescriptor[];
@@ -0,0 +1,168 @@
1
+ /**
2
+ * The promotion rung "role → component": bind a surface element to a host-owned
3
+ * **pivot record** (MF1, ADR 0005 § 3, ladder in ADR 0007 § 6).
4
+ *
5
+ * The library cannot choose a document — it does not know what a pivot record
6
+ * is. So the record id is a PARAMETER: the host's picker (labreapp, MF2) runs
7
+ * the selection UI and invokes the command with the answer. That is also what
8
+ * makes the command usable by the agent surface with no UI at all.
9
+ */
10
+ import { TelemetryProvider } from '../../affine-shared/services/index.js';
11
+ import { FRAMEWORK_IDS, } from '../../std/index.js';
12
+ import { GfxControllerIdentifier, GfxPrimitiveElementModel, } from '../../std/gfx/index.js';
13
+ import { z } from 'zod';
14
+ const PIVOT_DOC_ID = 'pivotDocId';
15
+ /**
16
+ * `pivotDocId: null` unbinds. The key is REQUIRED on purpose: an optional one
17
+ * would make a forgotten argument silently destroy a binding, which is exactly
18
+ * the failure mode an agent-invocable command must not have.
19
+ */
20
+ export const bindPivotParams = z.object({
21
+ pivotDocId: z.string().min(1).nullable(),
22
+ /**
23
+ * Explicit targets, for a host or an agent acting on something other than the
24
+ * live selection. **Omitted** — the key absent — the command acts on the
25
+ * current canvas selection.
26
+ *
27
+ * An EMPTY array is not the same thing: it means "these zero elements", so
28
+ * the command does nothing and does not fall back to the selection. That is
29
+ * the safe reading — an agent that computed a target list and came up empty
30
+ * must not have the gesture redirected onto whatever the user happened to
31
+ * have selected — but it is silent, so callers filtering a list should check
32
+ * it before invoking.
33
+ */
34
+ elementIds: z.array(z.string()).optional(),
35
+ });
36
+ /**
37
+ * The elements this gesture would write to. Surface elements only: canvas
38
+ * BLOCKS carry a versioned schema, so binding them would be a `version` bump in
39
+ * `packages/affine/model` and is out of scope (ADR 0005 § 6).
40
+ */
41
+ function pivotTargets(std, elementIds) {
42
+ const gfx = std.get(GfxControllerIdentifier);
43
+ const models = elementIds
44
+ ? elementIds.map(id => gfx.surface?.getElementById(id))
45
+ : gfx.selection.selectedElements;
46
+ return models.filter((model) => model instanceof GfxPrimitiveElementModel);
47
+ }
48
+ /**
49
+ * Whether this document may be written to at all.
50
+ *
51
+ * Checked in `run` and not only in `when`, because `when` is consulted by the
52
+ * SURFACES and `runCommand` consults neither it nor `availability` — the
53
+ * palette and the agent reach `run` directly. Without this guard, unbinding
54
+ * succeeds in a read-only document: `clearField` goes through `Store.transact`,
55
+ * which (unlike `addBlock` / `updateBlock` / `deleteBlock`) carries no
56
+ * read-only guard, so the key is deleted and the promotion event is emitted for
57
+ * a document the user cannot edit. Binding merely throws out of `runCommand`,
58
+ * which is bad in a different way.
59
+ */
60
+ const isBindable = (std) => !std.store.readonly;
61
+ /** `'wardley:component'` → `'wardley'`, when that names a real framework. */
62
+ function frameworkOfRole(role) {
63
+ const namespace = role?.split(':')[0];
64
+ return FRAMEWORK_IDS.includes(namespace ?? '')
65
+ ? namespace
66
+ : undefined;
67
+ }
68
+ /** The single value shared by every target, or `undefined` if they disagree. */
69
+ function unanimous(values) {
70
+ const distinct = new Set(values);
71
+ return distinct.size === 1 ? values[0] : undefined;
72
+ }
73
+ const bindPivot = {
74
+ id: 'pivot.bind',
75
+ owner: 'core',
76
+ kind: 'action',
77
+ // NOT `com.labre.keyboardShortcuts.*` like every labelKey before it: those
78
+ // all belong to commands that ship a default chord. This one is keyless by
79
+ // intent and lives in the palette and the agent, so filing it under
80
+ // "keyboard shortcuts" would mislead a translator.
81
+ labelKey: 'com.labre.command.pivot.bind',
82
+ labelFallback: 'Link to record',
83
+ descriptionKey: 'com.labre.command.pivot.bind.description',
84
+ surfaces: ['palette', 'agent'],
85
+ scope: 'edgeless',
86
+ // Keyless by intent — still bindable from Settings › Shortcuts, which is
87
+ // what `toShortcutDescriptor` being total buys.
88
+ defaultKeys: { mac: [], other: [] },
89
+ availability: 'selection',
90
+ // Narrows `'selection'`, never contradicts it: a read-only document, and a
91
+ // selection of nothing but canvas blocks, both have no bindable target.
92
+ //
93
+ // Read-only rides on `when` rather than on `availability` because the union
94
+ // does not COMPOSE: it is one value per command (`command-registry.ts`
95
+ // `isCommandAvailable`), so declaring `'editable'` would buy the read-only
96
+ // gate by dropping the selection gate a host panel needs far more often.
97
+ // `'selection'` stays the serializable answer — it is the precondition a
98
+ // catalogue must show — and the state precondition is enforced below.
99
+ // The missing composition is recorded as an amendment trigger in ADR 0008.
100
+ when: std => isBindable(std) && pivotTargets(std).length > 0,
101
+ params: bindPivotParams,
102
+ run: (std, invocation, params) => {
103
+ const parsed = bindPivotParams.safeParse(params);
104
+ if (!parsed.success) {
105
+ console.error('pivot.bind: invalid params', parsed.error.issues);
106
+ return;
107
+ }
108
+ const { pivotDocId, elementIds } = parsed.data;
109
+ // The load-bearing half of the read-only gate: see `isBindable`.
110
+ if (!isBindable(std))
111
+ return;
112
+ const targets = pivotTargets(std, elementIds);
113
+ if (!targets.length)
114
+ return;
115
+ // A gesture that changes nothing emits nothing and costs no undo step.
116
+ const changing = targets.filter(el => el.pivotDocId !== (pivotDocId ?? undefined));
117
+ if (!changing.length)
118
+ return;
119
+ // BEFORE the write, not after. `store.transact()` is not an undo
120
+ // boundary: the `Y.UndoManager` is built with no `captureTimeout`, so
121
+ // Yjs's 500 ms default merges consecutive transactions — and a bind
122
+ // issued within 500 ms of a drag would be undone TOGETHER with the drag,
123
+ // making the promotion look like it moved geometry. `stopCapturing()`
124
+ // opens a new stack item for what comes NEXT, so it has to precede the
125
+ // write (`Store.captureSync` docstring; same order as `applyLastStyle`).
126
+ //
127
+ // The ADRs' snippets (0005 § 3, 0007 § 6) show it after the write; that
128
+ // contradicts their own stated rationale and is treated as an editorial
129
+ // slip — see the PR description.
130
+ std.store.captureSync();
131
+ for (const element of changing) {
132
+ if (pivotDocId === null) {
133
+ // Not `updateElement(id, { pivotDocId: undefined })`: the `@field()`
134
+ // setter is unconditional, so that would leave the key behind as a
135
+ // tombstone. `clearField` removes it, and accepts this field because
136
+ // it is a declared, non-structural `@field()`.
137
+ element.clearField(PIVOT_DOC_ID);
138
+ }
139
+ else {
140
+ element.surface.updateElement(element.id, { pivotDocId });
141
+ }
142
+ }
143
+ // The ONE emission for this gesture. Not routed through `runCommand`'s
144
+ // bottleneck: that emitter maps `CommandKind` onto the three creation
145
+ // events from a STATIC `{ framework, element }` on the descriptor, and a
146
+ // promotion is neither a creation nor static — `rung`, `direction` and
147
+ // `role` are facts of the invocation. See ADR 0007 § 7.
148
+ const roles = changing.map(el => el.role);
149
+ const role = unanimous(roles);
150
+ std.getOptional(TelemetryProvider)?.track('FrameworkElementPromoted', {
151
+ page: 'whiteboard editor',
152
+ framework: frameworkOfRole(role),
153
+ rung: 'pivot',
154
+ direction: pivotDocId === null ? 'demote' : 'promote',
155
+ role,
156
+ elementCount: changing.length,
157
+ control: invocation.source,
158
+ module: invocation.surface,
159
+ });
160
+ },
161
+ };
162
+ /**
163
+ * The registry's element type erases the parameter contract
164
+ * ({@link AnyCommandDescriptor}) — this is the first command to have one, and
165
+ * `run` re-validates with {@link bindPivotParams} rather than trusting the
166
+ * static type, which is what an agent-invocable command has to do anyway.
167
+ */
168
+ export const pivotCommands = [bindPivot];
@@ -0,0 +1,23 @@
1
+ import { type AnyCommandDescriptor } from '../../std/index.js';
2
+ import { z } from 'zod';
3
+ /**
4
+ * `elementId` omitted, the command reads the current canvas selection. Passing
5
+ * it explicitly is what lets the element's own toolbar name the element that
6
+ * CARRIES the role rather than the group the user clicked (the same reason
7
+ * `tags-toolbar.ts` passes `elementIds` to `tag.set`), and what makes the
8
+ * command usable by the agent with no selection at all.
9
+ */
10
+ export declare const readElementParams: z.ZodObject<{
11
+ elementId: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ elementId?: string | undefined;
14
+ }, {
15
+ elementId?: string | undefined;
16
+ }>;
17
+ export type ReadElementParams = z.infer<typeof readElementParams>;
18
+ /**
19
+ * The registry's element type erases the parameter contract; `run` re-validates
20
+ * with {@link readElementParams} rather than trusting the static type, which is
21
+ * what an agent-invocable command has to do anyway.
22
+ */
23
+ export declare const readingCommands: AnyCommandDescriptor[];
@@ -0,0 +1,107 @@
1
+ /**
2
+ * `element.read` — the CLICK that asks the tool what it reads of a component
3
+ * (MF3, "reversed reading").
4
+ *
5
+ * The PO's arbitration of 01/08/2026, verbatim: the reversed reading is
6
+ * triggered **on a click, never by automatic validation**, and **writes nothing
7
+ * without confirmation**. This command is the click. It opens a proposal and
8
+ * that is the whole of its effect — no tag, no binding, no property, nothing
9
+ * touched in the document, on any path, ever.
10
+ *
11
+ * Which is also why it is NOT read-only gated: reading a board one cannot edit
12
+ * is exactly as legitimate as reading one you can. The gate lives on the
13
+ * CONFIRMATIONS, which are `tag.set` and `pivot.bind` — two commands that
14
+ * already refuse a read-only store.
15
+ */
16
+ import { ReadingManager } from '../../affine-block-surface/index.js';
17
+ import {} from '../../std/index.js';
18
+ import { GfxControllerIdentifier, GfxPrimitiveElementModel, } from '../../std/gfx/index.js';
19
+ import { z } from 'zod';
20
+ /**
21
+ * `elementId` omitted, the command reads the current canvas selection. Passing
22
+ * it explicitly is what lets the element's own toolbar name the element that
23
+ * CARRIES the role rather than the group the user clicked (the same reason
24
+ * `tags-toolbar.ts` passes `elementIds` to `tag.set`), and what makes the
25
+ * command usable by the agent with no selection at all.
26
+ */
27
+ export const readElementParams = z.object({
28
+ elementId: z.string().min(1).optional(),
29
+ });
30
+ /**
31
+ * The element this reading is about: the one named, or the single selected
32
+ * surface element.
33
+ *
34
+ * ONE element, never a multi-selection: a proposal is one fiche about one
35
+ * thing, and two components have two readings that no single panel could
36
+ * honestly show at once.
37
+ */
38
+ function readTarget(std, elementId) {
39
+ const gfx = std.get(GfxControllerIdentifier);
40
+ if (elementId) {
41
+ const model = gfx.surface?.getElementById(elementId);
42
+ return model instanceof GfxPrimitiveElementModel ? model : null;
43
+ }
44
+ const selected = gfx.selection.selectedElements.filter((model) => model instanceof GfxPrimitiveElementModel);
45
+ return selected.length === 1 ? selected[0] : null;
46
+ }
47
+ /**
48
+ * Whether anything registered can read this element.
49
+ *
50
+ * Asked through the manager rather than re-implemented here: the profiles are
51
+ * registered by a framework's FLAG-GATED view extension, so a board whose
52
+ * framework is off has no reading and the command stands down — in the palette,
53
+ * on the toolbar and for the agent alike, from one answer.
54
+ */
55
+ function readable(std, elementId) {
56
+ const manager = std.getOptional(ReadingManager);
57
+ if (!manager)
58
+ return false;
59
+ const target = readTarget(std, elementId);
60
+ return target !== null && manager.profileOf(target.id) !== null;
61
+ }
62
+ const readElementCommand = {
63
+ id: 'element.read',
64
+ owner: 'core',
65
+ kind: 'action',
66
+ // Not under `com.labre.keyboardShortcuts.*`: keyless by intent, like
67
+ // `pivot.bind` and `tag.set`, and filing it there would mislead a translator.
68
+ labelKey: 'com.labre.command.element.read',
69
+ labelFallback: 'Read this component',
70
+ descriptionKey: 'com.labre.command.element.read.description',
71
+ // The three surfaces the reading is reachable from. `'contextual-toolbar'`
72
+ // is where it is actually used — one click on the component — and declaring
73
+ // it is what keeps the telemetry honest about where a gesture came from
74
+ // (ADR 0008: the invocation names the surface, and the surface must exist).
75
+ surfaces: ['palette', 'contextual-toolbar', 'agent'],
76
+ scope: 'edgeless',
77
+ defaultKeys: { mac: [], other: [] },
78
+ availability: 'selection',
79
+ // Narrows `'selection'`, never contradicts it. Note what is NOT here: a
80
+ // read-only guard. Reading writes nothing, so there is nothing to refuse.
81
+ when: std => readable(std),
82
+ params: readElementParams,
83
+ run: (std, _invocation, params) => {
84
+ const parsed = readElementParams.safeParse(params);
85
+ if (!parsed.success) {
86
+ console.error('element.read: invalid params', parsed.error.issues);
87
+ return;
88
+ }
89
+ const manager = std.getOptional(ReadingManager);
90
+ if (!manager)
91
+ return;
92
+ const target = readTarget(std, parsed.data.elementId);
93
+ if (!target)
94
+ return;
95
+ // A neutral element, or one whose framework is flagged off, has no reading
96
+ // and must not open an empty panel.
97
+ if (!manager.profileOf(target.id))
98
+ return;
99
+ manager.open(target.id);
100
+ },
101
+ };
102
+ /**
103
+ * The registry's element type erases the parameter contract; `run` re-validates
104
+ * with {@link readElementParams} rather than trusting the static type, which is
105
+ * what an agent-invocable command has to do anyway.
106
+ */
107
+ export const readingCommands = [readElementCommand];
@@ -0,0 +1,47 @@
1
+ import { type AnyCommandDescriptor } from '../../std/index.js';
2
+ import { z } from 'zod';
3
+ /**
4
+ * `values: []` removes the tag. Both keys are REQUIRED on purpose: an optional
5
+ * `values` would make a forgotten argument silently destroy a qualification,
6
+ * which is exactly the failure mode an agent-invocable command must not have.
7
+ */
8
+ export declare const setTagParams: z.ZodObject<{
9
+ /** Namespaced tag def id, e.g. `'wardley:nature'`. */
10
+ tag: z.ZodString;
11
+ /**
12
+ * The value ids selected for that tag, e.g. `['wardley:nature/data']`.
13
+ * `[]` clears it.
14
+ *
15
+ * NOT validated against the registered defs. A document may legitimately
16
+ * carry an id whose def was removed, renamed or never seeded in this
17
+ * deployment, and the persisted value must accept any string — narrowing it
18
+ * here would push that case toward a load-time failure. The picker offers
19
+ * only defined values; the command does not police them.
20
+ */
21
+ values: z.ZodArray<z.ZodString, "many">;
22
+ /**
23
+ * Explicit targets, for a host or an agent acting on something other than the
24
+ * live selection. **Omitted** — the key absent — the command acts on the
25
+ * current canvas selection.
26
+ *
27
+ * An EMPTY array is not the same thing: it means "these zero elements", so
28
+ * the command does nothing and does not fall back to the selection.
29
+ */
30
+ elementIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ values: string[];
33
+ tag: string;
34
+ elementIds?: string[] | undefined;
35
+ }, {
36
+ values: string[];
37
+ tag: string;
38
+ elementIds?: string[] | undefined;
39
+ }>;
40
+ export type SetTagParams = z.infer<typeof setTagParams>;
41
+ /**
42
+ * The registry's element type erases the parameter contract
43
+ * ({@link AnyCommandDescriptor}); `run` re-validates with {@link setTagParams}
44
+ * rather than trusting the static type, which is what an agent-invocable
45
+ * command has to do anyway.
46
+ */
47
+ export declare const tagCommands: AnyCommandDescriptor[];
@@ -0,0 +1,159 @@
1
+ /**
2
+ * The promotion rung "component → materialities": qualify a surface element
3
+ * with a namespaced type-3 tag (MF3, ADR 0007 §§ 4 and 6).
4
+ *
5
+ * Same shape as `pivot.bind`, and for the same reason: the library fixes the
6
+ * format of tag definitions but does not own them — the host seeds them — so
7
+ * WHICH tag and WHICH values are parameters, never a lib-side enumeration. That
8
+ * is also what makes the command usable by the agent surface with no UI at all.
9
+ *
10
+ * Promotion is never a conversion: the element's `type` never changes, nothing
11
+ * is created, destroyed or swapped, and `xywh` / `rotate` / `index` / `seed` and
12
+ * every style field are untouched. The gesture is reversible — an empty `values`
13
+ * removes the tag — and no rung requires the previous one: an element may carry
14
+ * tags with no `pivotDocId`, and a `pivotDocId` with no `role`.
15
+ */
16
+ import { TelemetryProvider } from '../../affine-shared/services/index.js';
17
+ import { FRAMEWORK_IDS, } from '../../std/index.js';
18
+ import { GfxControllerIdentifier, GfxPrimitiveElementModel, setElementTag, } from '../../std/gfx/index.js';
19
+ import { z } from 'zod';
20
+ /**
21
+ * `values: []` removes the tag. Both keys are REQUIRED on purpose: an optional
22
+ * `values` would make a forgotten argument silently destroy a qualification,
23
+ * which is exactly the failure mode an agent-invocable command must not have.
24
+ */
25
+ export const setTagParams = z.object({
26
+ /** Namespaced tag def id, e.g. `'wardley:nature'`. */
27
+ tag: z.string().min(1),
28
+ /**
29
+ * The value ids selected for that tag, e.g. `['wardley:nature/data']`.
30
+ * `[]` clears it.
31
+ *
32
+ * NOT validated against the registered defs. A document may legitimately
33
+ * carry an id whose def was removed, renamed or never seeded in this
34
+ * deployment, and the persisted value must accept any string — narrowing it
35
+ * here would push that case toward a load-time failure. The picker offers
36
+ * only defined values; the command does not police them.
37
+ */
38
+ values: z.array(z.string()),
39
+ /**
40
+ * Explicit targets, for a host or an agent acting on something other than the
41
+ * live selection. **Omitted** — the key absent — the command acts on the
42
+ * current canvas selection.
43
+ *
44
+ * An EMPTY array is not the same thing: it means "these zero elements", so
45
+ * the command does nothing and does not fall back to the selection.
46
+ */
47
+ elementIds: z.array(z.string()).optional(),
48
+ });
49
+ /**
50
+ * The elements this gesture would write to. Surface elements only: canvas
51
+ * BLOCKS carry a versioned schema, so qualifying them would be a `version` bump
52
+ * in `packages/affine/model` and is out of scope (ADR 0005 § 6).
53
+ */
54
+ function tagTargets(std, elementIds) {
55
+ const gfx = std.get(GfxControllerIdentifier);
56
+ const models = elementIds
57
+ ? elementIds.map(id => gfx.surface?.getElementById(id))
58
+ : gfx.selection.selectedElements;
59
+ return models.filter((model) => model instanceof GfxPrimitiveElementModel);
60
+ }
61
+ /**
62
+ * Whether this document may be written to at all.
63
+ *
64
+ * Checked in `run` and not only in `when`, for the reason `pivot.bind`
65
+ * documents: `when` is consulted by the SURFACES, and `runCommand` consults
66
+ * neither it nor `availability` — the palette and the agent reach `run`
67
+ * directly. Without this guard, removing a tag succeeds in a read-only
68
+ * document, because both `Store.transact` and `clearField` carry no read-only
69
+ * guard of their own.
70
+ */
71
+ const isQualifiable = (std) => !std.store.readonly;
72
+ /** `'wardley:component'` → `'wardley'`, when that names a real framework. */
73
+ function frameworkOfRole(role) {
74
+ const namespace = role?.split(':')[0];
75
+ return FRAMEWORK_IDS.includes(namespace ?? '')
76
+ ? namespace
77
+ : undefined;
78
+ }
79
+ /** The single value shared by every target, or `undefined` if they disagree. */
80
+ function unanimous(values) {
81
+ const distinct = new Set(values);
82
+ return distinct.size === 1 ? values[0] : undefined;
83
+ }
84
+ const setTag = {
85
+ id: 'tag.set',
86
+ owner: 'core',
87
+ kind: 'action',
88
+ // Not filed under `com.labre.keyboardShortcuts.*`: like `pivot.bind`, this
89
+ // one is keyless by intent and lives in the palette, the element toolbar and
90
+ // the agent, so that namespace would mislead a translator.
91
+ labelKey: 'com.labre.command.tag.set',
92
+ labelFallback: 'Qualify',
93
+ descriptionKey: 'com.labre.command.tag.set.description',
94
+ surfaces: ['palette', 'agent'],
95
+ scope: 'edgeless',
96
+ defaultKeys: { mac: [], other: [] },
97
+ availability: 'selection',
98
+ // Narrows `'selection'`, never contradicts it: a read-only document, and a
99
+ // selection of nothing but canvas blocks, both have no qualifiable target.
100
+ // Read-only rides on `when` rather than on `availability` because that union
101
+ // is one value per command and does not compose — the same arbitration
102
+ // `pivot.bind` records.
103
+ when: std => isQualifiable(std) && tagTargets(std).length > 0,
104
+ params: setTagParams,
105
+ run: (std, invocation, params) => {
106
+ const parsed = setTagParams.safeParse(params);
107
+ if (!parsed.success) {
108
+ console.error('tag.set: invalid params', parsed.error.issues);
109
+ return;
110
+ }
111
+ const { tag, values, elementIds } = parsed.data;
112
+ // The load-bearing half of the read-only gate: see `isQualifiable`.
113
+ if (!isQualifiable(std))
114
+ return;
115
+ const targets = tagTargets(std, elementIds);
116
+ if (!targets.length)
117
+ return;
118
+ // BEFORE the write, not after. `store.transact()` is not an undo boundary:
119
+ // the `Y.UndoManager` is built with no `captureTimeout`, so Yjs's 500 ms
120
+ // default merges consecutive transactions — and a qualification issued
121
+ // within 500 ms of a drag would be undone TOGETHER with the drag, making
122
+ // the promotion look like it moved geometry (ADR 0007 § 6, as amended).
123
+ // `stopCapturing()` opens a new stack item for what comes NEXT, so it has
124
+ // to precede the write.
125
+ //
126
+ // Issued before knowing whether anything will change: `setElementTag`
127
+ // answers that per element, and an undo boundary with no write after it is
128
+ // inert, whereas a boundary opened too late is the defect this rule exists
129
+ // to prevent.
130
+ std.store.captureSync();
131
+ const changed = targets.filter(element => setElementTag(element, tag, values));
132
+ // A gesture that changes nothing emits nothing.
133
+ if (!changed.length)
134
+ return;
135
+ // The ONE emission for this gesture, self-emitted rather than routed
136
+ // through `runCommand`'s bottleneck: that emitter maps `CommandKind` onto
137
+ // the three CREATION events from a STATIC `{ framework, element }` on the
138
+ // descriptor, and a promotion is neither a creation nor static — `rung`,
139
+ // `direction` and `role` are facts of the invocation (ADR 0007 § 7).
140
+ const role = unanimous(changed.map(element => element.role));
141
+ std.getOptional(TelemetryProvider)?.track('FrameworkElementPromoted', {
142
+ page: 'whiteboard editor',
143
+ framework: frameworkOfRole(role),
144
+ rung: 'tag',
145
+ direction: values.length ? 'promote' : 'demote',
146
+ role,
147
+ elementCount: changed.length,
148
+ control: invocation.source,
149
+ module: invocation.surface,
150
+ });
151
+ },
152
+ };
153
+ /**
154
+ * The registry's element type erases the parameter contract
155
+ * ({@link AnyCommandDescriptor}); `run` re-validates with {@link setTagParams}
156
+ * rather than trusting the static type, which is what an agent-invocable
157
+ * command has to do anyway.
158
+ */
159
+ export const tagCommands = [setTag];
@@ -44,6 +44,7 @@ export declare const builtinToolbarConfig: {
44
44
  readonly tooltip?: string | import("lit-html").TemplateResult;
45
45
  readonly score?: number;
46
46
  readonly when?: ((cx: import("../../affine-shared/services/index.js").ToolbarContext) => boolean) | boolean;
47
+ readonly priority?: number;
47
48
  readonly showLabel?: boolean;
48
49
  readonly run?: (cx: import("../../affine-shared/services/index.js").ToolbarContext) => void;
49
50
  readonly id: "g.comment";
@@ -5,7 +5,7 @@ import { EdgelessFrameManagerIdentifier } from '../../../../affine-block-frame/i
5
5
  import { ImageBlockComponent } from '../../../../affine-block-image/index.js';
6
6
  import { EdgelessCRUDIdentifier, getSurfaceComponent, } from '../../../../affine-block-surface/index.js';
7
7
  import { createGroupFromSelectedCommand } from '../../../../affine-gfx-group/index.js';
8
- import { AttachmentBlockModel, BookmarkBlockModel, EmbedLinkedDocBlockSchema, EmbedLinkedDocModel, EmbedSyncedDocBlockSchema, EmbedSyncedDocModel, FrameBlockModel, ImageBlockModel, isExternalEmbedModel, NoteBlockModel, ParagraphBlockModel, } from '../../../../affine-model/index.js';
8
+ import { AttachmentBlockModel, BookmarkBlockModel, EmbedLinkedDocBlockSchema, EmbedLinkedDocModel, EmbedSyncedDocBlockSchema, EmbedSyncedDocModel, FrameBlockModel, ImageBlockModel, isExternalEmbedModel, MindmapElementModel, NoteBlockModel, ParagraphBlockModel, } from '../../../../affine-model/index.js';
9
9
  import { QuickSearchProvider } from '../../../../affine-shared/services/index.js';
10
10
  import { matchModels, } from '../../../../affine-shared/utils/index.js';
11
11
  import { Bound, getCommonBoundWithRotation } from '../../../../global/gfx/index.js';
@@ -426,7 +426,14 @@ function linkElementViaQuickSearch(ctx, el) {
426
426
  function reorderElements(ctx, models, type) {
427
427
  if (!models.length)
428
428
  return;
429
- for (const model of models) {
429
+ // A mindmap node has no index of its own: the whole mindmap moves as one, so
430
+ // reorder the container instead — and only once, however many of its nodes
431
+ // are in the selection.
432
+ const normalizedModels = Array.from(new Map(models.map(model => {
433
+ const reorderTarget = model.group instanceof MindmapElementModel ? model.group : model;
434
+ return [reorderTarget.id, reorderTarget];
435
+ })).values());
436
+ for (const model of normalizedModels) {
430
437
  const index = ctx.gfx.layer.getReorderedIndex(model, type);
431
438
  // block should be updated in transaction
432
439
  if (model instanceof GfxBlockElementModel) {
@@ -68,7 +68,7 @@ export function createLinkedDocFromEdgelessElements(host, elements, docTitle) {
68
68
  }
69
69
  }
70
70
  else {
71
- const props = getElementProps(model, ids);
71
+ const props = getElementProps(model, ids, sortedElements);
72
72
  newId = surface.addElement(props);
73
73
  }
74
74
  ids.set(model.id, newId);