@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,256 @@
1
+ /**
2
+ * Per-universe tag definitions — the format, the seeding mechanism and the
3
+ * merged read-only view over them (MF3 / ADR 0007 §§ 2 and 3).
4
+ *
5
+ * The **application seeds** the definitions per universe; the **library fixes
6
+ * their format**. That split is the whole point: a new business universe
7
+ * (cynefin, TOGAF, a client's private taxonomy) must be addable without
8
+ * shipping library code. The library ships exactly one pack of its own —
9
+ * Wardley's four natures — as a worked example, on the same mechanism a host
10
+ * would use.
11
+ *
12
+ * Three rules govern everything below, and they are not negotiable:
13
+ *
14
+ * - **Nothing throws, ever.** An invalid id, a cross-framework id, an
15
+ * unrecognised `formatVersion` — each drops the offending def and records an
16
+ * issue. A malformed seed must never prevent a document from opening. That is
17
+ * the hard boundary between "the app misconfigured a pack" and "the user lost
18
+ * their board".
19
+ * - **Defs are runtime configuration and are NEVER persisted.** The document
20
+ * stores ids only. A value whose def has vanished still loads and is shown as
21
+ * its raw id, marked unknown.
22
+ * - **Ids are forever.** A def is never removed, only `deprecated`.
23
+ */
24
+ import { createIdentifier } from '../../global/di/index.js';
25
+ import { FRAMEWORK_IDS } from '../../std/index.js';
26
+ import { roleIsA } from '../../std/gfx/index.js';
27
+ /**
28
+ * Lower-kebab, case-sensitive, no unicode, no dots. Hyphenated framework ids
29
+ * are legal, so `cynefin-estuarine:domain` is well formed.
30
+ */
31
+ const ID_PATTERN = /^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9-]*(\/[a-z0-9][a-z0-9-]*)?$/;
32
+ /**
33
+ * Variant-parameterized: **one registration per pack, keyed by `packId`** —
34
+ * the same mechanism as `SpotlightHostExtension(elementType)` and
35
+ * `ExternalGroupByConfigProvider(config.name)`.
36
+ */
37
+ export const UniverseTagDefsProvider = createIdentifier('LabreUniverseTagDefs');
38
+ /**
39
+ * Seed one or more packs.
40
+ *
41
+ * `di.override`, **not** `di.addImpl`: `addImpl` throws
42
+ * `DuplicateServiceDefinitionError` when the same `[scope, identifier, variant]`
43
+ * is registered twice, while `override` works whether or not a prior
44
+ * registration exists. That is exactly the idempotency this needs — **distinct
45
+ * `packId`s accumulate, identical `packId`s replace** — so a host that
46
+ * re-registers on every render never throws and never grows the registry.
47
+ *
48
+ * Order stability is load-bearing and non-obvious: `getAll` returns a
49
+ * `Map<ServiceVariant, T>`, and `Map.set` on an EXISTING key keeps that key's
50
+ * original insertion position. Re-seeding a pack therefore updates it in place
51
+ * rather than moving it to the end, so a re-registration cannot silently flip
52
+ * which pack wins a cosmetic field.
53
+ *
54
+ * **All packs MUST be registered in the same DI scope.** `getAllRaw` falls back
55
+ * to the parent scope only when the current scope has no registration for the
56
+ * identifier AT ALL; it never merges across scopes. Seeding one pack from a
57
+ * `StoreExtension` and another from a `ViewExtension` would silently hide the
58
+ * first behind the second. The library cannot enforce this, so it is stated
59
+ * here and belongs in the host integration checklist.
60
+ */
61
+ export function UniverseTagDefsExtension(defs) {
62
+ return {
63
+ setup: di => {
64
+ for (const pack of Array.isArray(defs) ? defs : [defs]) {
65
+ di.override(UniverseTagDefsProvider(pack.packId), () => pack);
66
+ }
67
+ },
68
+ };
69
+ }
70
+ /** `'wardley:nature'` → `'wardley'`. */
71
+ const namespaceOf = (id) => id.split(':')[0] ?? '';
72
+ /** `'wardley:nature/data'` → `'wardley:nature'`. */
73
+ const tagOfValue = (valueId) => valueId.split('/')[0] ?? '';
74
+ /**
75
+ * Merge every registered pack into one read-only view.
76
+ *
77
+ * Pure, so it is testable with literals and no container. The merge rules, in
78
+ * full:
79
+ *
80
+ * - **Union by id.** Several packs may extend the same universe.
81
+ * - **Additive fields merge:** `values` are unioned by value id, `appliesTo`
82
+ * arrays are unioned, and `'*'` absorbs any list.
83
+ * - **Cosmetic fields — last pack wins:** `label`, `description`, `color`,
84
+ * `order`, `required`, `deprecated`.
85
+ * - **Structural fields — first pack wins, conflict recorded:** `cardinality`,
86
+ * and `values: 'open'` vs a closed list. The conflict becomes a
87
+ * `duplicate-conflict` error issue and does NOT throw. A host that needs a
88
+ * deterministic winner should not define the same structural field twice; the
89
+ * registry reports the collision rather than guessing.
90
+ * - **Idempotent by value.** Activating a universe twice yields the same
91
+ * registry.
92
+ */
93
+ export function buildUniverseRegistry(packs) {
94
+ const issues = [];
95
+ const drafts = new Map();
96
+ const frameworks = [];
97
+ let rank = 0;
98
+ const issue = (severity, code, message, id) => issues.push(id === undefined
99
+ ? { severity, code, message }
100
+ : { severity, code, id, message });
101
+ for (const pack of packs) {
102
+ if (pack?.formatVersion !== 1) {
103
+ // The WHOLE pack is dropped: a format we do not understand may mean
104
+ // anything. Documents still open; the tooling is simply unavailable.
105
+ issue('error', 'unsupported-format-version', `Pack "${pack?.packId ?? '<unnamed>'}" declares formatVersion ${String(pack?.formatVersion)}; this build understands 1. The pack is ignored.`, pack?.packId);
106
+ continue;
107
+ }
108
+ if (!FRAMEWORK_IDS.includes(pack.framework)) {
109
+ issue('warning', 'cross-framework-id', `Pack "${pack.packId}" declares the unknown framework "${pack.framework}".`, pack.packId);
110
+ }
111
+ if (!frameworks.includes(pack.framework))
112
+ frameworks.push(pack.framework);
113
+ for (const def of pack.tags ?? []) {
114
+ if (typeof def?.id !== 'string' || !ID_PATTERN.test(def.id)) {
115
+ issue('error', 'invalid-id', `Tag id "${String(def?.id)}" in pack "${pack.packId}" is not a well-formed '<framework>:<local>' id.`, typeof def?.id === 'string' ? def.id : undefined);
116
+ continue;
117
+ }
118
+ // The `<framework>` segment of every id in a pack MUST equal the pack's
119
+ // own framework. A cross-framework id is how one taxonomy would quietly
120
+ // start answering for another's roles.
121
+ if (namespaceOf(def.id) !== pack.framework) {
122
+ issue('error', 'cross-framework-id', `Tag "${def.id}" is namespaced "${namespaceOf(def.id)}" but pack "${pack.packId}" declares framework "${pack.framework}".`, def.id);
123
+ continue;
124
+ }
125
+ mergeTagDef(drafts, def, pack, issue, rank++);
126
+ }
127
+ }
128
+ const merged = [...drafts.values()]
129
+ .map(draft => finishDraft(draft))
130
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0) ||
131
+ drafts.get(a.id).rank - drafts.get(b.id).rank ||
132
+ a.id.localeCompare(b.id));
133
+ // Keyed by plain `string`, not by `QualifiedId`: a lookup comes from a
134
+ // DOCUMENT, which may carry any id at all, and the template-literal type is a
135
+ // seed-time aid rather than a claim about what is persisted.
136
+ const byId = new Map(merged.map(def => [def.id, def]));
137
+ return {
138
+ frameworks: () => [...frameworks],
139
+ tags: () => [...merged],
140
+ tag: id => byId.get(id),
141
+ tagsForRole: (roleId, defs) => merged.filter(def => tagAppliesToRole(def, roleId, defs)),
142
+ issues: () => [...issues],
143
+ };
144
+ }
145
+ function mergeTagDef(drafts, def, pack, issue, rank) {
146
+ const existing = drafts.get(def.id);
147
+ if (!existing) {
148
+ drafts.set(def.id, {
149
+ def: { ...def },
150
+ values: valueMapOf(def, pack, issue),
151
+ appliesTo: appliesToOf(def),
152
+ rank,
153
+ });
154
+ return;
155
+ }
156
+ // Cosmetic: last pack wins. Absent stays absent rather than blanking what an
157
+ // earlier pack said.
158
+ const draft = existing.def;
159
+ if (def.label !== undefined)
160
+ draft.label = def.label;
161
+ if (def.description !== undefined)
162
+ draft.description = def.description;
163
+ if (def.order !== undefined)
164
+ draft.order = def.order;
165
+ if (def.required !== undefined)
166
+ draft.required = def.required;
167
+ if (def.deprecated !== undefined)
168
+ draft.deprecated = def.deprecated;
169
+ // Structural: first pack wins, and the collision is REPORTED rather than
170
+ // guessed at.
171
+ if (def.cardinality !== draft.cardinality) {
172
+ issue('error', 'duplicate-conflict', `Tag "${def.id}": pack "${pack.packId}" declares cardinality "${def.cardinality}" but "${draft.cardinality}" was declared first and stands.`, def.id);
173
+ }
174
+ const incomingOpen = def.values === 'open';
175
+ const existingOpen = existing.values === 'open';
176
+ if (incomingOpen !== existingOpen) {
177
+ issue('error', 'duplicate-conflict', `Tag "${def.id}": pack "${pack.packId}" declares ${incomingOpen ? 'an open value list' : 'a closed value list'} but the opposite was declared first and stands.`, def.id);
178
+ }
179
+ else if (existing.values !== 'open') {
180
+ // Additive: values union by value id, last cosmetic wins.
181
+ for (const [valueId, value] of valueMapOf(def, pack, issue)) {
182
+ const current = existing.values.get(valueId);
183
+ existing.values.set(valueId, current ? { ...current, ...value } : value);
184
+ }
185
+ }
186
+ // Additive: `'*'` absorbs any list, in either direction.
187
+ const incomingRoles = appliesToOf(def);
188
+ if (existing.appliesTo !== '*') {
189
+ if (incomingRoles === '*')
190
+ existing.appliesTo = '*';
191
+ else
192
+ for (const role of incomingRoles)
193
+ existing.appliesTo.add(role);
194
+ }
195
+ }
196
+ function valueMapOf(def, pack, issue) {
197
+ if (def.values === 'open')
198
+ return 'open';
199
+ const values = new Map();
200
+ for (const value of def.values ?? []) {
201
+ if (typeof value?.id !== 'string' || !ID_PATTERN.test(value.id)) {
202
+ issue('error', 'invalid-id', `Value id "${String(value?.id)}" of tag "${def.id}" in pack "${pack.packId}" is not a well-formed '<tagId>/<local>' id.`, typeof value?.id === 'string' ? value.id : undefined);
203
+ continue;
204
+ }
205
+ // A value belongs to its tag, spelled out in the id itself. Anything else
206
+ // would let a pack file a value under a tag it does not own.
207
+ if (tagOfValue(value.id) !== def.id) {
208
+ issue('error', 'invalid-id', `Value "${value.id}" is not a value of tag "${def.id}".`, value.id);
209
+ continue;
210
+ }
211
+ values.set(value.id, { ...value });
212
+ }
213
+ return values;
214
+ }
215
+ const appliesToOf = (def) => def.appliesTo === '*' ? '*' : new Set(def.appliesTo ?? []);
216
+ function finishDraft(draft) {
217
+ return {
218
+ ...draft.def,
219
+ values: draft.values === 'open' ? 'open' : [...draft.values.values()],
220
+ appliesTo: draft.appliesTo === '*' ? '*' : [...draft.appliesTo],
221
+ };
222
+ }
223
+ /**
224
+ * Whether a tag qualifies a role, following specialisation: a tag declared on
225
+ * `'wardley:component'` also applies to `'wardley:market'`, which specialises
226
+ * it. `'*'` matches every role of the tag's own framework and nothing else —
227
+ * a wildcard that crossed framework boundaries would make two taxonomies
228
+ * qualify each other's elements.
229
+ */
230
+ export function tagAppliesToRole(def, roleId, defs) {
231
+ if (!roleId)
232
+ return false;
233
+ if (def.appliesTo === '*')
234
+ return namespaceOf(roleId) === namespaceOf(def.id);
235
+ return def.appliesTo.some(ancestor => roleIsA(roleId, ancestor, defs));
236
+ }
237
+ /**
238
+ * The merged registry for this editor assembly.
239
+ *
240
+ * Memoized per `BlockStdScope`: the merge is pure and the packs are fixed at
241
+ * assembly time, while callers (a toolbar section rebuilt on every selection
242
+ * change) ask for it often. A host that re-seeds a pack after the first read
243
+ * therefore needs a new scope — which is what re-creating the editor already
244
+ * does, and the only cost of not re-validating a static configuration on every
245
+ * keystroke.
246
+ */
247
+ const REGISTRY_CACHE = new WeakMap();
248
+ export function getUniverseRegistry(std) {
249
+ const cached = REGISTRY_CACHE.get(std);
250
+ if (cached)
251
+ return cached;
252
+ const packs = [...std.provider.getAll(UniverseTagDefsProvider).values()];
253
+ const registry = buildUniverseRegistry(packs);
254
+ REGISTRY_CACHE.set(std, registry);
255
+ return registry;
256
+ }
@@ -1,7 +1,7 @@
1
1
  import { CodeBlockSchemaExtension, DatabaseBlockSchemaExtension, ImageBlockSchemaExtension, ListBlockSchemaExtension, NoteBlockSchemaExtension, ParagraphBlockSchemaExtension, RootBlockSchemaExtension, } from '../../affine-model/index.js';
2
2
  import { Container } from '../../global/di/index.js';
3
3
  import { TextSelection } from '../../std/index.js';
4
- import { Text, } from '../../store/index.js';
4
+ import { Text } from '../../store/index.js';
5
5
  import { TestWorkspace } from '../../store/test/index.js';
6
6
  import { createTestHost } from './create-test-host.js';
7
7
  const DEFAULT_EXTENSIONS = [
@@ -13,4 +13,8 @@ declare global {
13
13
  export declare function caretRangeFromPoint(clientX: number, clientY: number): Range | null;
14
14
  export declare function resetNativeSelection(range: Range | null): void;
15
15
  export declare function getCurrentNativeRange(selection?: Selection | null): Range | null;
16
+ export declare const api: {
17
+ caretRangeFromPoint: typeof caretRangeFromPoint;
18
+ resetNativeSelection: typeof resetNativeSelection;
19
+ };
16
20
  export declare function handleNativeRangeAtPoint(x: number, y: number): void;
@@ -63,11 +63,67 @@ export function getCurrentNativeRange(selection = window.getSelection()) {
63
63
  }
64
64
  return selection.getRangeAt(0);
65
65
  }
66
+ // Indirection so that unit tests can mock these two browser-bound functions.
67
+ export const api = {
68
+ caretRangeFromPoint,
69
+ resetNativeSelection,
70
+ };
66
71
  export function handleNativeRangeAtPoint(x, y) {
67
- const range = caretRangeFromPoint(x, y);
72
+ const range = api.caretRangeFromPoint(x, y);
73
+ if (range) {
74
+ normalizeCaretRange(range);
75
+ }
68
76
  const startContainer = range?.startContainer;
69
77
  // click on rich text
70
78
  if (startContainer instanceof Node) {
71
- resetNativeSelection(range);
79
+ api.resetNativeSelection(range);
80
+ }
81
+ }
82
+ function lastMeaningfulTextNode(node) {
83
+ const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, {
84
+ acceptNode(node) {
85
+ return node.textContent && node.textContent.trim().length > 0
86
+ ? NodeFilter.FILTER_ACCEPT
87
+ : NodeFilter.FILTER_REJECT;
88
+ },
89
+ });
90
+ let last = null;
91
+ while (walker.nextNode()) {
92
+ last = walker.currentNode;
93
+ }
94
+ return last;
95
+ }
96
+ /**
97
+ * Clicking past the end of a line gives back a caret anchored on an *element*
98
+ * rather than on a text node. Such a range paints a caret for a frame and then
99
+ * loses it, because the editor only tracks carets that live inside text. Move
100
+ * the caret to the nearest meaningful text node so that it survives.
101
+ */
102
+ function normalizeCaretRange(range) {
103
+ const { startContainer, startOffset } = range;
104
+ if (startContainer.nodeType === Node.TEXT_NODE)
105
+ return;
106
+ // Try to find text in the element at `startOffset`
107
+ const offsetEl = startOffset > 0
108
+ ? startContainer.childNodes[startOffset - 1]
109
+ : startContainer.childNodes[0];
110
+ if (offsetEl) {
111
+ if (offsetEl.nodeType === Node.TEXT_NODE) {
112
+ range.setStart(offsetEl, startOffset > 0 ? (offsetEl.textContent?.length ?? 0) : 0);
113
+ range.collapse(true);
114
+ return;
115
+ }
116
+ const text = lastMeaningfulTextNode(offsetEl);
117
+ if (text) {
118
+ range.setStart(text, text.textContent?.length ?? 0);
119
+ range.collapse(true);
120
+ return;
121
+ }
122
+ }
123
+ // Fallback, try to find text in startContainer
124
+ const text = lastMeaningfulTextNode(startContainer);
125
+ if (text) {
126
+ range.setStart(text, text.textContent?.length ?? 0);
127
+ range.collapse(true);
72
128
  }
73
129
  }
@@ -11,3 +11,63 @@ import type { EditorHost } from '../../../std/index.js';
11
11
  * ```
12
12
  */
13
13
  export declare function getViewportElement(editorHost: EditorHost): HTMLElement | null;
14
+ /**
15
+ * Where a model point lands, in CSS pixels, for an overlay drawn *inside* the
16
+ * edgeless container: the selection rectangle, the resize handles, the remote
17
+ * cursors, the text editors mounted over an element.
18
+ *
19
+ * `Viewport.toViewCoord` answers in real screen pixels, so it multiplies by
20
+ * `viewScale` — the CSS scale an outer container puts on the whole editor,
21
+ * which is not 1 in a nested editor such as an embedded synced edgeless doc.
22
+ * An overlay lives *inside* that container, so its placement has to be stated
23
+ * in the container's already scaled space, exactly the way
24
+ * `GfxBlockComponent.getCSSTransform` states a block's. Positioning an overlay
25
+ * from `toViewCoord` lets the container apply its scale a second time, and the
26
+ * overlay drifts away from the element it decorates as soon as
27
+ * `viewScale !== 1`.
28
+ */
29
+ export declare function toOverlayCoord(viewport: {
30
+ viewportX: number;
31
+ viewportY: number;
32
+ zoom: number;
33
+ viewScale: number;
34
+ }, modelX: number, modelY: number): [number, number];
35
+ /**
36
+ * The scale an overlay drawn inside the edgeless container has to wear so that
37
+ * it ends up painted at the viewport zoom. Counterpart of
38
+ * {@link toOverlayCoord}; same reasoning about `viewScale`.
39
+ */
40
+ export declare function overlayScale(viewport: {
41
+ zoom: number;
42
+ viewScale: number;
43
+ }): number;
44
+ /**
45
+ * How wide and tall the visible viewport is *in the same units as*
46
+ * {@link toOverlayCoord}, so an overlay can tell whether it is about to run off
47
+ * the edge.
48
+ *
49
+ * `Viewport.width` / `Viewport.height` are the bounding client rect, i.e. real
50
+ * screen pixels. Comparing an overlay coordinate against them mixes two spaces
51
+ * and the flip or the clamp fires at the wrong moment under a scaled host.
52
+ */
53
+ export declare function overlayViewportSize(viewport: {
54
+ width: number;
55
+ height: number;
56
+ viewScale: number;
57
+ }): [number, number];
58
+ /**
59
+ * Where a model point lands in *client* coordinates — what
60
+ * `document.caretRangeFromPoint`, `elementFromPoint` and a `PointerEvent`'s
61
+ * `clientX`/`clientY` speak.
62
+ *
63
+ * `Viewport.toViewCoord` answers relative to the viewport element's own top
64
+ * left corner, so handing its result to a client-coordinate API drops the
65
+ * viewport's offset in the window: the caret lands elsewhere as soon as the
66
+ * editor is not flush against the window origin — a sidebar, a header, or the
67
+ * editor embedded in a panel. Inverse of `Viewport.toViewCoordFromClientCoord`.
68
+ */
69
+ export declare function toClientCoord(viewport: {
70
+ left: number;
71
+ top: number;
72
+ toViewCoord: (modelX: number, modelY: number) => number[];
73
+ }, modelX: number, modelY: number): [number, number];
@@ -13,3 +13,61 @@ export function getViewportElement(editorHost) {
13
13
  return (editorHost.closest('.affine-page-viewport') ??
14
14
  editorHost.closest('.affine-edgeless-viewport'));
15
15
  }
16
+ /**
17
+ * Where a model point lands, in CSS pixels, for an overlay drawn *inside* the
18
+ * edgeless container: the selection rectangle, the resize handles, the remote
19
+ * cursors, the text editors mounted over an element.
20
+ *
21
+ * `Viewport.toViewCoord` answers in real screen pixels, so it multiplies by
22
+ * `viewScale` — the CSS scale an outer container puts on the whole editor,
23
+ * which is not 1 in a nested editor such as an embedded synced edgeless doc.
24
+ * An overlay lives *inside* that container, so its placement has to be stated
25
+ * in the container's already scaled space, exactly the way
26
+ * `GfxBlockComponent.getCSSTransform` states a block's. Positioning an overlay
27
+ * from `toViewCoord` lets the container apply its scale a second time, and the
28
+ * overlay drifts away from the element it decorates as soon as
29
+ * `viewScale !== 1`.
30
+ */
31
+ export function toOverlayCoord(viewport, modelX, modelY) {
32
+ const { viewportX, viewportY, zoom, viewScale } = viewport;
33
+ return [
34
+ ((modelX - viewportX) * zoom) / viewScale,
35
+ ((modelY - viewportY) * zoom) / viewScale,
36
+ ];
37
+ }
38
+ /**
39
+ * The scale an overlay drawn inside the edgeless container has to wear so that
40
+ * it ends up painted at the viewport zoom. Counterpart of
41
+ * {@link toOverlayCoord}; same reasoning about `viewScale`.
42
+ */
43
+ export function overlayScale(viewport) {
44
+ return viewport.zoom / viewport.viewScale;
45
+ }
46
+ /**
47
+ * How wide and tall the visible viewport is *in the same units as*
48
+ * {@link toOverlayCoord}, so an overlay can tell whether it is about to run off
49
+ * the edge.
50
+ *
51
+ * `Viewport.width` / `Viewport.height` are the bounding client rect, i.e. real
52
+ * screen pixels. Comparing an overlay coordinate against them mixes two spaces
53
+ * and the flip or the clamp fires at the wrong moment under a scaled host.
54
+ */
55
+ export function overlayViewportSize(viewport) {
56
+ const { width, height, viewScale } = viewport;
57
+ return [width / viewScale, height / viewScale];
58
+ }
59
+ /**
60
+ * Where a model point lands in *client* coordinates — what
61
+ * `document.caretRangeFromPoint`, `elementFromPoint` and a `PointerEvent`'s
62
+ * `clientX`/`clientY` speak.
63
+ *
64
+ * `Viewport.toViewCoord` answers relative to the viewport element's own top
65
+ * left corner, so handing its result to a client-coordinate API drops the
66
+ * viewport's offset in the window: the caret lands elsewhere as soon as the
67
+ * editor is not flush against the window origin — a sidebar, a header, or the
68
+ * editor embedded in a panel. Inverse of `Viewport.toViewCoordFromClientCoord`.
69
+ */
70
+ export function toClientCoord(viewport, modelX, modelY) {
71
+ const [x, y] = viewport.toViewCoord(modelX, modelY);
72
+ return [x + viewport.left, y + viewport.top];
73
+ }
@@ -1,5 +1,5 @@
1
1
  import { FrameBlockModel, GroupElementModel } from '../../affine-model/index.js';
2
- import { deserializeXYWH, getQuadBoundWithRotation, } from '../../global/gfx/index.js';
2
+ import { deserializeXYWH, getQuadBoundWithRotation } from '../../global/gfx/index.js';
3
3
  export function getSelectedRect(selected) {
4
4
  if (selected.length === 0) {
5
5
  return new DOMRect();
@@ -11,12 +11,46 @@ declare global {
11
11
  showOpenFilePicker?: (options?: OpenFilePickerOptions) => Promise<FileSystemFileHandle[]>;
12
12
  }
13
13
  }
14
+ /**
15
+ * One filter a file dialog offers: what to call it, and the MIME types it
16
+ * accepts with the extensions that go with each.
17
+ *
18
+ * The table below is the CLOSED list of filters this library ships. It is not
19
+ * the only source of one: an interchange format declares its own extensions and
20
+ * mime (`docs/adr/0012`), and a picker built from a registry entry cannot be a
21
+ * row in a hand-maintained table — the whole point of the registry is that a
22
+ * framework adds a format without a second file agreeing to it. So the shape is
23
+ * named and {@link openSingleFileWithSpec} takes it directly; `FileTypes` keeps
24
+ * naming the filters that are the editor's own.
25
+ */
26
+ export interface FilePickerSpec {
27
+ description: string;
28
+ accept: Record<string, string[]>;
29
+ }
14
30
  /**
15
31
  * See https://web.dev/patterns/files/open-one-or-multiple-files/
32
+ *
33
+ * There is no `'Bpmn'` here any more, and no row for it above. A BPMN document
34
+ * is not the editor's own kind of file: it is one INTERCHANGE FORMAT among the
35
+ * several a framework declares (`docs/adr/0012`), and its filter is built from
36
+ * that declaration by {@link openSingleFileWithSpec}. Keeping a second copy in
37
+ * this table would be a copy nobody reads and everybody has to keep in step —
38
+ * the format's `extensions` and `mime` are the one statement of what a `.bpmn`
39
+ * file is called.
16
40
  */
17
41
  type AcceptTypes = 'Any' | 'Images' | 'Videos' | 'Audios' | 'Markdown' | 'Html' | 'Zip' | 'MindMap';
18
42
  export declare function openFilesWith(acceptType?: AcceptTypes, multiple?: boolean): Promise<File[] | null>;
19
43
  export declare function openSingleFileWith(acceptType?: AcceptTypes): Promise<File | null>;
44
+ /**
45
+ * One file, filtered by a spec the caller built rather than by a name in
46
+ * {@link FileTypes}.
47
+ *
48
+ * What {@link openSingleFileWith} is for the editor's own dialogs, this is for
49
+ * anything whose filter is DECLARED somewhere else — today the interchange
50
+ * registry, whose formats each carry their extensions and their mime and are
51
+ * added by a framework, not by editing the table above.
52
+ */
53
+ export declare function openSingleFileWithSpec(spec: FilePickerSpec): Promise<File | null>;
20
54
  export declare function getImageFilesFromLocal(): Promise<File[]>;
21
55
  export declare function downloadBlob(blob: Blob, name: string): void;
22
56
  /**
@@ -79,6 +79,27 @@ const FileTypes = [
79
79
  },
80
80
  ];
81
81
  export async function openFilesWith(acceptType = 'Any', multiple = true) {
82
+ if (acceptType === 'Any')
83
+ return openFilesWithSpec(undefined, multiple);
84
+ const fileType = FileTypes.find(i => i.description === acceptType);
85
+ if (!fileType) {
86
+ // Unreachable through the closed `AcceptTypes` union, and reported rather
87
+ // than thrown for the same reason it always was: the picker branch used to
88
+ // throw this inside its own try/catch, log it and answer `null`. A caller
89
+ // asking for a filter that does not exist gets no dialog, not an exception
90
+ // it never had to handle.
91
+ console.error(new BlockSuiteError(ErrorCode.DefaultRuntimeError, `Unexpected acceptType "${acceptType}"`));
92
+ return null;
93
+ }
94
+ return openFilesWithSpec(fileType, multiple);
95
+ }
96
+ /**
97
+ * The picker itself, over a filter rather than over a name in the table.
98
+ *
99
+ * `undefined` is "Any": no filter at all, which is what the dialog shows when
100
+ * nobody narrowed it.
101
+ */
102
+ async function openFilesWithSpec(spec, multiple) {
82
103
  // Feature detection. The API needs to be supported
83
104
  // and the app not run in an iframe.
84
105
  const supportsFileSystemAccess = 'showOpenFilePicker' in window &&
@@ -93,11 +114,8 @@ export async function openFilesWith(acceptType = 'Any', multiple = true) {
93
114
  // If the File System Access API is supported…
94
115
  if (supportsFileSystemAccess && window.showOpenFilePicker) {
95
116
  try {
96
- const fileType = FileTypes.find(i => i.description === acceptType);
97
- if (acceptType !== 'Any' && !fileType)
98
- throw new BlockSuiteError(ErrorCode.DefaultRuntimeError, `Unexpected acceptType "${acceptType}"`);
99
117
  const pickerOpts = {
100
- types: fileType ? [fileType] : undefined,
118
+ types: spec ? [spec] : undefined,
101
119
  multiple,
102
120
  };
103
121
  // Show the file picker, optionally allowing multiple files.
@@ -117,9 +135,19 @@ export async function openFilesWith(acceptType = 'Any', multiple = true) {
117
135
  input.style.display = 'none';
118
136
  input.type = 'file';
119
137
  input.multiple = multiple;
120
- if (acceptType !== 'Any') {
121
- // For example, `accept="image/*"` or `accept="video/*,audio/*"`.
122
- input.accept = Object.keys(FileTypes.find(i => i.description === acceptType)?.accept ?? '').join(',');
138
+ if (spec) {
139
+ // For example, `accept="image/*,.png,.jpg"` or `accept="video/*,.mp4"`.
140
+ //
141
+ // The EXTENSIONS as well as the MIME types, and the extensions are the
142
+ // half that matters for anything the OS has no type for: `.bpmn`, `.mm`
143
+ // and `.opml` are registered nowhere, so a filter built from
144
+ // `application/xml` alone greys them out in the native dialog and the
145
+ // file cannot be picked at all. This is the branch every browser without
146
+ // the File System Access API takes — Firefox and Safari — and
147
+ // `showOpenFilePicker` above already reads both halves of the same
148
+ // filter.
149
+ const type = spec.accept;
150
+ input.accept = [...Object.keys(type), ...Object.values(type).flat()].join(',');
123
151
  }
124
152
  document.body.append(input);
125
153
  // The `change` event fires when the user interacts with the dialog.
@@ -143,6 +171,19 @@ export async function openSingleFileWith(acceptType) {
143
171
  const files = await openFilesWith(acceptType, false);
144
172
  return files?.at(0) ?? null;
145
173
  }
174
+ /**
175
+ * One file, filtered by a spec the caller built rather than by a name in
176
+ * {@link FileTypes}.
177
+ *
178
+ * What {@link openSingleFileWith} is for the editor's own dialogs, this is for
179
+ * anything whose filter is DECLARED somewhere else — today the interchange
180
+ * registry, whose formats each carry their extensions and their mime and are
181
+ * added by a framework, not by editing the table above.
182
+ */
183
+ export async function openSingleFileWithSpec(spec) {
184
+ const files = await openFilesWithSpec(spec, false);
185
+ return files?.at(0) ?? null;
186
+ }
146
187
  export async function getImageFilesFromLocal() {
147
188
  const files = await openFilesWith('Images');
148
189
  return files ?? [];
@@ -1,3 +1,24 @@
1
+ /**
2
+ * Styles injected into the print iframe.
3
+ *
4
+ * The printed document is always rendered on white paper, so the whole
5
+ * palette is pinned to a light one: a document read in the dark theme would
6
+ * otherwise print light text on a background the printer leaves white, and
7
+ * every one of those elements would come out invisible.
8
+ *
9
+ * Exported so the print-fidelity rules can be asserted in unit tests.
10
+ */
11
+ export declare const printToPdfStyles = "@media print {\n html, body {\n height: initial !important;\n overflow: initial !important;\n print-color-adjust: exact;\n -webkit-print-color-adjust: exact;\n color: #000 !important;\n background: #fff !important;\n color-scheme: light !important;\n }\n ::-webkit-scrollbar {\n display: none;\n }\n :root, body {\n --affine-text-primary: #000 !important;\n --affine-text-secondary: #111 !important;\n --affine-text-tertiary: #333 !important;\n --affine-background-primary: #fff !important;\n --affine-background-secondary: #fff !important;\n --affine-background-tertiary: #fff !important;\n --affine-background-code-block: #f5f5f5 !important;\n --affine-quote-color: #e3e3e3 !important;\n --affine-border-color: #e3e3e3 !important;\n }\n body, [data-theme='dark'] {\n color: #000 !important;\n background: #fff !important;\n }\n body * {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n }\n :root {\n --affine-note-shadow-box: none !important;\n --affine-note-shadow-sticker: none !important;\n }\n }";
12
+ /**
13
+ * Waits until every image inside `container` — shadow roots included — has
14
+ * either decoded or given up.
15
+ *
16
+ * A print dialog opened while images are still in flight prints their empty
17
+ * frames, so this is awaited before handing the document to the printer. An
18
+ * image that fails to load resolves too: a broken picture must not hang the
19
+ * print for ever.
20
+ */
21
+ export declare function waitForImages(container: HTMLElement): Promise<void>;
1
22
  export declare function printToPdf(rootElement?: HTMLElement | null, options?: {
2
23
  /**
3
24
  * Callback that is called when ready to print.